@delightui/components 0.1.104 → 0.1.106

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 (120) hide show
  1. package/README.md +104 -1
  2. package/dist/cjs/components/molecules/Modal/DemoModal.d.ts +8 -0
  3. package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.d.ts +41 -0
  4. package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +87 -0
  5. package/dist/cjs/components/molecules/Modal/ModalContext/index.d.ts +3 -0
  6. package/dist/cjs/components/molecules/Modal/ModalContext/useModal.d.ts +34 -0
  7. package/dist/cjs/components/molecules/Modal/index.d.ts +2 -0
  8. package/dist/cjs/components/molecules/Popover/Popover.presenter.d.ts +26 -0
  9. package/dist/cjs/components/molecules/Select/Option/Option.types.d.ts +6 -0
  10. package/dist/cjs/components/molecules/Select/Select.Context.d.ts +1 -1
  11. package/dist/cjs/components/molecules/Select/Select.d.ts +5 -5
  12. package/dist/cjs/components/molecules/Select/Select.presenter.d.ts +1 -0
  13. package/dist/cjs/components/molecules/Select/Select.types.d.ts +5 -0
  14. package/dist/cjs/components/molecules/Select/index.d.ts +2 -9
  15. package/dist/cjs/components/molecules/index.d.ts +2 -0
  16. package/dist/cjs/components/utils/accessibilityUtils.d.ts +41 -0
  17. package/dist/cjs/components/utils/index.d.ts +2 -0
  18. package/dist/cjs/library.css +13 -0
  19. package/dist/cjs/library.js +2 -2
  20. package/dist/cjs/library.js.map +1 -1
  21. package/dist/esm/components/molecules/Modal/DemoModal.d.ts +8 -0
  22. package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.d.ts +41 -0
  23. package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +87 -0
  24. package/dist/esm/components/molecules/Modal/ModalContext/index.d.ts +3 -0
  25. package/dist/esm/components/molecules/Modal/ModalContext/useModal.d.ts +34 -0
  26. package/dist/esm/components/molecules/Modal/index.d.ts +2 -0
  27. package/dist/esm/components/molecules/Popover/Popover.presenter.d.ts +26 -0
  28. package/dist/esm/components/molecules/Select/Option/Option.types.d.ts +6 -0
  29. package/dist/esm/components/molecules/Select/Select.Context.d.ts +1 -1
  30. package/dist/esm/components/molecules/Select/Select.d.ts +5 -5
  31. package/dist/esm/components/molecules/Select/Select.presenter.d.ts +1 -0
  32. package/dist/esm/components/molecules/Select/Select.types.d.ts +5 -0
  33. package/dist/esm/components/molecules/Select/index.d.ts +2 -9
  34. package/dist/esm/components/molecules/index.d.ts +2 -0
  35. package/dist/esm/components/utils/accessibilityUtils.d.ts +41 -0
  36. package/dist/esm/components/utils/index.d.ts +2 -0
  37. package/dist/esm/library.css +13 -0
  38. package/dist/esm/library.js +3 -3
  39. package/dist/esm/library.js.map +1 -1
  40. package/dist/index.d.ts +156 -12
  41. package/docs/README.md +264 -0
  42. package/docs/components/atoms/ActionImage.md +119 -0
  43. package/docs/components/atoms/Button.md +197 -0
  44. package/docs/components/atoms/Checkbox.md +299 -0
  45. package/docs/components/atoms/CheckboxItem.md +314 -0
  46. package/docs/components/atoms/Chip.md +380 -0
  47. package/docs/components/atoms/CustomToggle.md +270 -0
  48. package/docs/components/atoms/Icon.md +365 -0
  49. package/docs/components/atoms/IconButton.md +407 -0
  50. package/docs/components/atoms/Image.md +448 -0
  51. package/docs/components/atoms/Input.md +430 -0
  52. package/docs/components/atoms/ListItem.md +502 -0
  53. package/docs/components/atoms/Password.md +472 -0
  54. package/docs/components/atoms/RadioButton.md +614 -0
  55. package/docs/components/atoms/RadioButtonItem.md +588 -0
  56. package/docs/components/atoms/ResponsiveComponent.md +612 -0
  57. package/docs/components/atoms/SelectListItem.md +609 -0
  58. package/docs/components/atoms/Slider.md +605 -0
  59. package/docs/components/atoms/Spinner.md +605 -0
  60. package/docs/components/atoms/Text.md +463 -0
  61. package/docs/components/atoms/TextArea.md +670 -0
  62. package/docs/components/atoms/ToastNotification.md +668 -0
  63. package/docs/components/atoms/Toggle.md +737 -0
  64. package/docs/components/atoms/ToggleButton.md +751 -0
  65. package/docs/components/atoms/Tooltip.md +391 -0
  66. package/docs/components/molecules/Accordion.md +440 -0
  67. package/docs/components/molecules/AccordionGroup.md +547 -0
  68. package/docs/components/molecules/ActionCard.md +546 -0
  69. package/docs/components/molecules/Breadcrumb.md +403 -0
  70. package/docs/components/molecules/Breadcrumbs.md +485 -0
  71. package/docs/components/molecules/ButtonGroup.md +383 -0
  72. package/docs/components/molecules/Card.md +298 -0
  73. package/docs/components/molecules/ChipInput.md +646 -0
  74. package/docs/components/molecules/ContextMenu.md +768 -0
  75. package/docs/components/molecules/CustomTimeSelector.md +116 -0
  76. package/docs/components/molecules/DatePicker.md +516 -0
  77. package/docs/components/molecules/DateTimeSelector.md +166 -0
  78. package/docs/components/molecules/FormField.md +312 -0
  79. package/docs/components/molecules/Grid.md +577 -0
  80. package/docs/components/molecules/GridItem.md +834 -0
  81. package/docs/components/molecules/GridList.md +244 -0
  82. package/docs/components/molecules/List.md +485 -0
  83. package/docs/components/molecules/Modal.md +470 -0
  84. package/docs/components/molecules/ModalFooter.md +702 -0
  85. package/docs/components/molecules/ModalHeader.md +756 -0
  86. package/docs/components/molecules/ModalProvider.md +205 -0
  87. package/docs/components/molecules/Nav.md +530 -0
  88. package/docs/components/molecules/NavItem.md +572 -0
  89. package/docs/components/molecules/NavLink.md +499 -0
  90. package/docs/components/molecules/Option.md +521 -0
  91. package/docs/components/molecules/Pagination.md +592 -0
  92. package/docs/components/molecules/PaginationNumberField.md +722 -0
  93. package/docs/components/molecules/Popover.md +516 -0
  94. package/docs/components/molecules/ProgressBar.md +624 -0
  95. package/docs/components/molecules/RadioGroup.md +831 -0
  96. package/docs/components/molecules/RepeaterList.md +185 -0
  97. package/docs/components/molecules/Select.md +402 -0
  98. package/docs/components/molecules/SortableTrigger.md +82 -0
  99. package/docs/components/molecules/useModal.md +379 -0
  100. package/docs/components/organisms/Dropzone.md +346 -0
  101. package/docs/components/organisms/DropzoneClear.md +135 -0
  102. package/docs/components/organisms/DropzoneContent.md +216 -0
  103. package/docs/components/organisms/DropzoneFilename.md +191 -0
  104. package/docs/components/organisms/DropzoneSupportedFormats.md +184 -0
  105. package/docs/components/organisms/DropzoneTrigger.md +209 -0
  106. package/docs/components/organisms/Form.md +533 -0
  107. package/docs/components/organisms/SlideOutPanel.md +662 -0
  108. package/docs/components/organisms/TabContent.md +902 -0
  109. package/docs/components/organisms/TabItem.md +1091 -0
  110. package/docs/components/organisms/Table.md +611 -0
  111. package/docs/components/organisms/TableBody.md +679 -0
  112. package/docs/components/organisms/TableCell.md +482 -0
  113. package/docs/components/organisms/TableHeader.md +513 -0
  114. package/docs/components/organisms/TableHeaderCell.md +661 -0
  115. package/docs/components/organisms/TableRow.md +715 -0
  116. package/docs/components/organisms/Tabs.md +1330 -0
  117. package/docs/components/utils/ConditionalView.md +568 -0
  118. package/docs/components/utils/RenderStateView.md +726 -0
  119. package/docs/components/utils/WrapTextNodes.md +614 -0
  120. package/package.json +3 -2
@@ -0,0 +1,546 @@
1
+ # ActionCard
2
+
3
+ ## Description
4
+
5
+ An interactive card component that serves as a clickable container for navigation and actions. Combines the visual structure of a card with the functionality of a link or button, supporting both internal routing and external navigation while maintaining accessibility and user experience standards.
6
+
7
+ ## Aliases
8
+
9
+ - ActionCard
10
+ - ClickableCard
11
+ - NavigationCard
12
+ - LinkCard
13
+ - InteractiveCard
14
+
15
+ ## Props Breakdown
16
+
17
+ **Extends:** `HTMLAttributes<HTMLDivElement>` & `Omit<LinkProps, 'to'>`
18
+
19
+ | Prop | Type | Default | Required | Description |
20
+ |------|------|---------|----------|-------------|
21
+ | `children` | `ReactNode` | - | Yes | The content to be displayed within the action card |
22
+ | `disabled` | `boolean` | `false` | No | Specifies if the action card is disabled |
23
+ | `className` | `string` | - | No | Additional CSS class names |
24
+ | `to` | `string \| -1` | - | No | Destination URL or path for navigation. External URLs (starting with 'https') render as anchor tags, internal paths use router navigation |
25
+
26
+ ## Examples
27
+
28
+ ### Basic Usage
29
+ ```tsx
30
+ import { ActionCard, Text, Icon } from '@delightui/components';
31
+
32
+ function BasicExample() {
33
+ return (
34
+ <ActionCard to="/dashboard">
35
+ <div className="action-card-content">
36
+ <Icon icon="Dashboard" size="Large" />
37
+ <Text type="Heading6">Dashboard</Text>
38
+ <Text type="BodySmall">View your analytics and metrics</Text>
39
+ </div>
40
+ </ActionCard>
41
+ );
42
+ }
43
+ ```
44
+
45
+ ### Feature Cards Grid
46
+ ```tsx
47
+ function FeatureCardsExample() {
48
+ const features = [
49
+ {
50
+ icon: "Analytics",
51
+ title: "Analytics",
52
+ description: "Track your performance metrics",
53
+ path: "/analytics"
54
+ },
55
+ {
56
+ icon: "Settings",
57
+ title: "Settings",
58
+ description: "Manage your preferences",
59
+ path: "/settings"
60
+ },
61
+ {
62
+ icon: "Users",
63
+ title: "Team",
64
+ description: "Collaborate with your team",
65
+ path: "/team"
66
+ },
67
+ {
68
+ icon: "Help",
69
+ title: "Support",
70
+ description: "Get help when you need it",
71
+ path: "/support"
72
+ }
73
+ ];
74
+
75
+ return (
76
+ <div className="feature-grid">
77
+ {features.map((feature, index) => (
78
+ <ActionCard key={index} to={feature.path} className="feature-card">
79
+ <div className="card-icon">
80
+ <Icon icon={feature.icon} size="Large" />
81
+ </div>
82
+ <div className="card-content">
83
+ <Text type="Heading6">{feature.title}</Text>
84
+ <Text type="BodySmall">{feature.description}</Text>
85
+ </div>
86
+ <div className="card-arrow">
87
+ <Icon icon="ArrowForward" size="Small" />
88
+ </div>
89
+ </ActionCard>
90
+ ))}
91
+ </div>
92
+ );
93
+ }
94
+ ```
95
+
96
+ ### Product Cards
97
+ ```tsx
98
+ function ProductCardsExample() {
99
+ const products = [
100
+ {
101
+ id: 1,
102
+ name: "Premium Headphones",
103
+ price: "$299.99",
104
+ image: "/headphones.jpg",
105
+ rating: 4.8,
106
+ inStock: true
107
+ },
108
+ {
109
+ id: 2,
110
+ name: "Wireless Speaker",
111
+ price: "$159.99",
112
+ image: "/speaker.jpg",
113
+ rating: 4.6,
114
+ inStock: false
115
+ }
116
+ ];
117
+
118
+ return (
119
+ <div className="product-grid">
120
+ {products.map(product => (
121
+ <ActionCard
122
+ key={product.id}
123
+ to={`/products/${product.id}`}
124
+ disabled={!product.inStock}
125
+ className="product-card"
126
+ >
127
+ <div className="product-image">
128
+ <Image src={product.image} alt={product.name} />
129
+ {!product.inStock && (
130
+ <div className="out-of-stock-overlay">
131
+ <Chip size="Small" style="C">Out of Stock</Chip>
132
+ </div>
133
+ )}
134
+ </div>
135
+
136
+ <div className="product-info">
137
+ <Text type="Heading6">{product.name}</Text>
138
+ <div className="product-rating">
139
+ <Icon icon="Star" size="Small" />
140
+ <Text type="BodySmall">{product.rating}</Text>
141
+ </div>
142
+ <Text type="Heading6" className="product-price">
143
+ {product.price}
144
+ </Text>
145
+ </div>
146
+ </ActionCard>
147
+ ))}
148
+ </div>
149
+ );
150
+ }
151
+ ```
152
+
153
+ ### External Link Cards
154
+ ```tsx
155
+ function ExternalLinksExample() {
156
+ const externalResources = [
157
+ {
158
+ title: "GitHub Repository",
159
+ description: "View our open source code",
160
+ url: "https://github.com/company/project",
161
+ icon: "GitHub"
162
+ },
163
+ {
164
+ title: "Documentation",
165
+ description: "Read the full documentation",
166
+ url: "https://docs.company.com",
167
+ icon: "Book"
168
+ },
169
+ {
170
+ title: "Community Forum",
171
+ description: "Join the discussion",
172
+ url: "https://community.company.com",
173
+ icon: "Forum"
174
+ }
175
+ ];
176
+
177
+ return (
178
+ <div className="external-links">
179
+ {externalResources.map((resource, index) => (
180
+ <ActionCard key={index} to={resource.url} className="external-link-card">
181
+ <div className="link-content">
182
+ <div className="link-header">
183
+ <Icon icon={resource.icon} />
184
+ <Text type="Heading6">{resource.title}</Text>
185
+ <Icon icon="ExternalLink" size="Small" />
186
+ </div>
187
+ <Text type="BodySmall">{resource.description}</Text>
188
+ </div>
189
+ </ActionCard>
190
+ ))}
191
+ </div>
192
+ );
193
+ }
194
+ ```
195
+
196
+ ### Service Cards with Status
197
+ ```tsx
198
+ function ServiceCardsExample() {
199
+ const services = [
200
+ {
201
+ name: "API Gateway",
202
+ status: "active",
203
+ uptime: "99.9%",
204
+ path: "/services/api-gateway"
205
+ },
206
+ {
207
+ name: "Database",
208
+ status: "warning",
209
+ uptime: "98.5%",
210
+ path: "/services/database"
211
+ },
212
+ {
213
+ name: "Message Queue",
214
+ status: "error",
215
+ uptime: "95.2%",
216
+ path: "/services/message-queue"
217
+ }
218
+ ];
219
+
220
+ const getStatusColor = (status) => {
221
+ switch (status) {
222
+ case 'active': return 'A';
223
+ case 'warning': return 'B';
224
+ case 'error': return 'C';
225
+ default: return 'B';
226
+ }
227
+ };
228
+
229
+ return (
230
+ <div className="service-cards">
231
+ {services.map((service, index) => (
232
+ <ActionCard key={index} to={service.path} className="service-card">
233
+ <div className="service-header">
234
+ <Text type="Heading6">{service.name}</Text>
235
+ <Chip size="Small" style={getStatusColor(service.status)}>
236
+ {service.status}
237
+ </Chip>
238
+ </div>
239
+
240
+ <div className="service-metrics">
241
+ <div className="metric">
242
+ <Text type="BodySmall">Uptime</Text>
243
+ <Text type="Heading6">{service.uptime}</Text>
244
+ </div>
245
+ </div>
246
+
247
+ <div className="service-actions">
248
+ <Text type="BodySmall">Click to view details</Text>
249
+ <Icon icon="ArrowForward" size="Small" />
250
+ </div>
251
+ </ActionCard>
252
+ ))}
253
+ </div>
254
+ );
255
+ }
256
+ ```
257
+
258
+ ### User Profile Cards
259
+ ```tsx
260
+ function UserProfileCardsExample() {
261
+ const users = [
262
+ {
263
+ id: 1,
264
+ name: "Sarah Johnson",
265
+ role: "Product Manager",
266
+ avatar: "/sarah.jpg",
267
+ online: true,
268
+ projects: 12
269
+ },
270
+ {
271
+ id: 2,
272
+ name: "Mike Chen",
273
+ role: "Developer",
274
+ avatar: "/mike.jpg",
275
+ online: false,
276
+ projects: 8
277
+ },
278
+ {
279
+ id: 3,
280
+ name: "Emily Davis",
281
+ role: "Designer",
282
+ avatar: "/emily.jpg",
283
+ online: true,
284
+ projects: 15
285
+ }
286
+ ];
287
+
288
+ return (
289
+ <div className="user-cards">
290
+ {users.map(user => (
291
+ <ActionCard key={user.id} to={`/users/${user.id}`} className="user-card">
292
+ <div className="user-avatar">
293
+ <Image src={user.avatar} alt={user.name} className="avatar-image" />
294
+ <div className={`status-indicator ${user.online ? 'online' : 'offline'}`} />
295
+ </div>
296
+
297
+ <div className="user-info">
298
+ <Text type="Heading6">{user.name}</Text>
299
+ <Text type="BodySmall">{user.role}</Text>
300
+
301
+ <div className="user-stats">
302
+ <Text type="BodySmall">{user.projects} projects</Text>
303
+ <Text type="BodySmall">{user.online ? 'Online' : 'Offline'}</Text>
304
+ </div>
305
+ </div>
306
+
307
+ <div className="user-actions">
308
+ <IconButton icon="Message" size="Small" />
309
+ <IconButton icon="MoreVertical" size="Small" />
310
+ </div>
311
+ </ActionCard>
312
+ ))}
313
+ </div>
314
+ );
315
+ }
316
+ ```
317
+
318
+ ### Quick Actions Dashboard
319
+ ```tsx
320
+ function QuickActionsExample() {
321
+ const quickActions = [
322
+ {
323
+ title: "Create New Project",
324
+ description: "Start a new project from template",
325
+ path: "/projects/new",
326
+ icon: "Add",
327
+ color: "primary"
328
+ },
329
+ {
330
+ title: "Import Data",
331
+ description: "Import existing data files",
332
+ path: "/import",
333
+ icon: "Upload",
334
+ color: "secondary"
335
+ },
336
+ {
337
+ title: "Generate Report",
338
+ description: "Create a new analytics report",
339
+ path: "/reports/new",
340
+ icon: "BarChart",
341
+ color: "tertiary"
342
+ },
343
+ {
344
+ title: "Invite Team Member",
345
+ description: "Add someone to your team",
346
+ path: "/team/invite",
347
+ icon: "PersonAdd",
348
+ color: "success"
349
+ }
350
+ ];
351
+
352
+ return (
353
+ <div className="quick-actions-grid">
354
+ {quickActions.map((action, index) => (
355
+ <ActionCard
356
+ key={index}
357
+ to={action.path}
358
+ className={`quick-action-card ${action.color}`}
359
+ >
360
+ <div className="action-icon">
361
+ <Icon icon={action.icon} size="Large" />
362
+ </div>
363
+
364
+ <div className="action-content">
365
+ <Text type="Heading6">{action.title}</Text>
366
+ <Text type="BodySmall">{action.description}</Text>
367
+ </div>
368
+
369
+ <div className="action-indicator">
370
+ <Icon icon="ArrowForward" size="Small" />
371
+ </div>
372
+ </ActionCard>
373
+ ))}
374
+ </div>
375
+ );
376
+ }
377
+ ```
378
+
379
+ ### Interactive Dashboard Cards
380
+ ```tsx
381
+ function InteractiveDashboardExample() {
382
+ const [cardData, setCardData] = useState({
383
+ revenue: { value: '$24,500', change: '+12%' },
384
+ users: { value: '1,234', change: '+5%' },
385
+ orders: { value: '89', change: '-2%' },
386
+ conversion: { value: '3.4%', change: '+0.8%' }
387
+ });
388
+
389
+ return (
390
+ <div className="dashboard-cards">
391
+ <ActionCard to="/analytics/revenue" className="metric-card revenue">
392
+ <div className="metric-header">
393
+ <Icon icon="TrendingUp" />
394
+ <Text type="BodySmall">Revenue</Text>
395
+ </div>
396
+
397
+ <div className="metric-value">
398
+ <Text type="Heading4">{cardData.revenue.value}</Text>
399
+ <Chip size="Small" style="A">{cardData.revenue.change}</Chip>
400
+ </div>
401
+
402
+ <div className="metric-footer">
403
+ <Text type="BodySmall">vs last month</Text>
404
+ <Icon icon="ArrowForward" size="Small" />
405
+ </div>
406
+ </ActionCard>
407
+
408
+ <ActionCard to="/analytics/users" className="metric-card users">
409
+ <div className="metric-header">
410
+ <Icon icon="Users" />
411
+ <Text type="BodySmall">Active Users</Text>
412
+ </div>
413
+
414
+ <div className="metric-value">
415
+ <Text type="Heading4">{cardData.users.value}</Text>
416
+ <Chip size="Small" style="A">{cardData.users.change}</Chip>
417
+ </div>
418
+
419
+ <div className="metric-footer">
420
+ <Text type="BodySmall">this week</Text>
421
+ <Icon icon="ArrowForward" size="Small" />
422
+ </div>
423
+ </ActionCard>
424
+
425
+ <ActionCard to="/analytics/orders" className="metric-card orders">
426
+ <div className="metric-header">
427
+ <Icon icon="Package" />
428
+ <Text type="BodySmall">Orders</Text>
429
+ </div>
430
+
431
+ <div className="metric-value">
432
+ <Text type="Heading4">{cardData.orders.value}</Text>
433
+ <Chip size="Small" style="C">{cardData.orders.change}</Chip>
434
+ </div>
435
+
436
+ <div className="metric-footer">
437
+ <Text type="BodySmall">today</Text>
438
+ <Icon icon="ArrowForward" size="Small" />
439
+ </div>
440
+ </ActionCard>
441
+ </div>
442
+ );
443
+ }
444
+ ```
445
+
446
+ ### Disabled and Loading States
447
+ ```tsx
448
+ function StateVariationsExample() {
449
+ const [loading, setLoading] = useState(false);
450
+
451
+ return (
452
+ <div className="state-cards">
453
+ <ActionCard to="/available" className="available-card">
454
+ <div className="card-content">
455
+ <Icon icon="Check" />
456
+ <Text type="Heading6">Available Action</Text>
457
+ <Text type="BodySmall">This card is interactive</Text>
458
+ </div>
459
+ </ActionCard>
460
+
461
+ <ActionCard disabled className="disabled-card">
462
+ <div className="card-content">
463
+ <Icon icon="Lock" />
464
+ <Text type="Heading6">Disabled Action</Text>
465
+ <Text type="BodySmall">This card is disabled</Text>
466
+ </div>
467
+ </ActionCard>
468
+
469
+ <ActionCard
470
+ to={loading ? undefined : "/action"}
471
+ className="loading-card"
472
+ onClick={() => {
473
+ setLoading(true);
474
+ setTimeout(() => setLoading(false), 2000);
475
+ }}
476
+ >
477
+ <div className="card-content">
478
+ {loading ? (
479
+ <>
480
+ <Spinner size="Small" />
481
+ <Text type="Heading6">Loading...</Text>
482
+ <Text type="BodySmall">Please wait</Text>
483
+ </>
484
+ ) : (
485
+ <>
486
+ <Icon icon="Refresh" />
487
+ <Text type="Heading6">Refresh Data</Text>
488
+ <Text type="BodySmall">Click to reload</Text>
489
+ </>
490
+ )}
491
+ </div>
492
+ </ActionCard>
493
+ </div>
494
+ );
495
+ }
496
+ ```
497
+
498
+ ### Complex Content Cards
499
+ ```tsx
500
+ function ComplexContentExample() {
501
+ return (
502
+ <div className="complex-cards">
503
+ <ActionCard to="/projects/1" className="project-card">
504
+ <div className="project-header">
505
+ <div className="project-info">
506
+ <Text type="Heading5">Website Redesign</Text>
507
+ <Text type="BodySmall">Due: March 15, 2024</Text>
508
+ </div>
509
+ <Chip size="Small" style="B">In Progress</Chip>
510
+ </div>
511
+
512
+ <div className="project-description">
513
+ <Text type="BodyMedium">
514
+ Complete redesign of the company website with modern UI/UX
515
+ and improved performance.
516
+ </Text>
517
+ </div>
518
+
519
+ <div className="project-team">
520
+ <Text type="BodySmall">Team:</Text>
521
+ <div className="team-avatars">
522
+ <Image src="/team1.jpg" alt="Team member" className="team-avatar" />
523
+ <Image src="/team2.jpg" alt="Team member" className="team-avatar" />
524
+ <Image src="/team3.jpg" alt="Team member" className="team-avatar" />
525
+ <div className="team-count">+3</div>
526
+ </div>
527
+ </div>
528
+
529
+ <div className="project-progress">
530
+ <div className="progress-header">
531
+ <Text type="BodySmall">Progress</Text>
532
+ <Text type="BodySmall">68%</Text>
533
+ </div>
534
+ <ProgressBar value={68} />
535
+ </div>
536
+
537
+ <div className="project-tags">
538
+ <Chip size="Small" style="A">Design</Chip>
539
+ <Chip size="Small" style="A">Frontend</Chip>
540
+ <Chip size="Small" style="A">High Priority</Chip>
541
+ </div>
542
+ </ActionCard>
543
+ </div>
544
+ );
545
+ }
546
+ ```