@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,547 @@
1
+ # AccordionGroup
2
+
3
+ ## Description
4
+
5
+ A container component that manages multiple accordion components as a group. Provides coordinated behavior for multiple accordions, allowing for controlled expansion/collapse patterns, mutual exclusivity, and shared state management across accordion items.
6
+
7
+ ## Aliases
8
+
9
+ - AccordionGroup
10
+ - AccordionContainer
11
+ - AccordionPanel
12
+ - CollapsibleGroup
13
+ - AccordionSet
14
+
15
+ ## Props Breakdown
16
+
17
+ **Extends:** Standalone interface (no HTML element inheritance)
18
+
19
+ | Prop | Type | Default | Required | Description |
20
+ |------|------|---------|----------|-------------|
21
+ | `children` | `ReactNode` | - | Yes | Accordion components to be grouped together |
22
+ | `className` | `string` | - | No | Additional CSS class names |
23
+ | `name` | `string` | - | No | Unique identifier for the accordion group |
24
+
25
+ ## Examples
26
+
27
+ ### Basic Usage
28
+ ```tsx
29
+ import { AccordionGroup, Accordion, AccordionSummary, AccordionDetails, Text } from '@delightui/components';
30
+
31
+ function BasicExample() {
32
+ return (
33
+ <AccordionGroup>
34
+ <Accordion>
35
+ <AccordionSummary>
36
+ <Text type="Heading6">Section 1</Text>
37
+ </AccordionSummary>
38
+ <AccordionDetails>
39
+ <Text type="BodyMedium">Content for the first section.</Text>
40
+ </AccordionDetails>
41
+ </Accordion>
42
+
43
+ <Accordion>
44
+ <AccordionSummary>
45
+ <Text type="Heading6">Section 2</Text>
46
+ </AccordionSummary>
47
+ <AccordionDetails>
48
+ <Text type="BodyMedium">Content for the second section.</Text>
49
+ </AccordionDetails>
50
+ </Accordion>
51
+ </AccordionGroup>
52
+ );
53
+ }
54
+ ```
55
+
56
+ ### FAQ Section
57
+ ```tsx
58
+ function FAQExample() {
59
+ const faqs = [
60
+ {
61
+ question: "What is your return policy?",
62
+ answer: "We offer a 30-day return policy for all items in original condition."
63
+ },
64
+ {
65
+ question: "How long does shipping take?",
66
+ answer: "Standard shipping takes 3-5 business days, express shipping takes 1-2 business days."
67
+ },
68
+ {
69
+ question: "Do you offer international shipping?",
70
+ answer: "Yes, we ship to over 100 countries worldwide with varying delivery times."
71
+ },
72
+ {
73
+ question: "How can I track my order?",
74
+ answer: "You'll receive a tracking number via email once your order ships."
75
+ }
76
+ ];
77
+
78
+ return (
79
+ <AccordionGroup name="faq-section" className="faq-container">
80
+ {faqs.map((faq, index) => (
81
+ <Accordion key={index} name={`faq-${index}`}>
82
+ <AccordionSummary>
83
+ <Text type="Heading6">{faq.question}</Text>
84
+ </AccordionSummary>
85
+ <AccordionDetails>
86
+ <Text type="BodyMedium">{faq.answer}</Text>
87
+ </AccordionDetails>
88
+ </Accordion>
89
+ ))}
90
+ </AccordionGroup>
91
+ );
92
+ }
93
+ ```
94
+
95
+ ### Settings Panel
96
+ ```tsx
97
+ function SettingsPanelExample() {
98
+ return (
99
+ <AccordionGroup name="settings-panel" className="settings-container">
100
+ <Accordion>
101
+ <AccordionSummary>
102
+ <div className="settings-header">
103
+ <Icon icon="Person" />
104
+ <Text type="Heading6">Account Settings</Text>
105
+ </div>
106
+ </AccordionSummary>
107
+ <AccordionDetails>
108
+ <FormField name="email" label="Email Address">
109
+ <Input placeholder="your@email.com" />
110
+ </FormField>
111
+ <FormField name="password" label="Password">
112
+ <Password placeholder="Enter new password" />
113
+ </FormField>
114
+ <Button size="Small">Update Account</Button>
115
+ </AccordionDetails>
116
+ </Accordion>
117
+
118
+ <Accordion>
119
+ <AccordionSummary>
120
+ <div className="settings-header">
121
+ <Icon icon="Notifications" />
122
+ <Text type="Heading6">Notification Preferences</Text>
123
+ </div>
124
+ </AccordionSummary>
125
+ <AccordionDetails>
126
+ <FormField name="email-notifications">
127
+ <Checkbox>Email notifications</Checkbox>
128
+ </FormField>
129
+ <FormField name="push-notifications">
130
+ <Checkbox>Push notifications</Checkbox>
131
+ </FormField>
132
+ <FormField name="sms-notifications">
133
+ <Checkbox>SMS notifications</Checkbox>
134
+ </FormField>
135
+ <Button size="Small">Save Preferences</Button>
136
+ </AccordionDetails>
137
+ </Accordion>
138
+
139
+ <Accordion>
140
+ <AccordionSummary>
141
+ <div className="settings-header">
142
+ <Icon icon="Security" />
143
+ <Text type="Heading6">Privacy & Security</Text>
144
+ </div>
145
+ </AccordionSummary>
146
+ <AccordionDetails>
147
+ <FormField name="two-factor">
148
+ <Checkbox>Enable two-factor authentication</Checkbox>
149
+ </FormField>
150
+ <FormField name="profile-visibility" label="Profile Visibility">
151
+ <Select>
152
+ <Option value="public">Public</Option>
153
+ <Option value="friends">Friends Only</Option>
154
+ <Option value="private">Private</Option>
155
+ </Select>
156
+ </FormField>
157
+ <Button size="Small">Update Security</Button>
158
+ </AccordionDetails>
159
+ </Accordion>
160
+ </AccordionGroup>
161
+ );
162
+ }
163
+ ```
164
+
165
+ ### Product Categories
166
+ ```tsx
167
+ function ProductCategoriesExample() {
168
+ const categories = [
169
+ {
170
+ name: "Electronics",
171
+ items: ["Smartphones", "Laptops", "Tablets", "Accessories"]
172
+ },
173
+ {
174
+ name: "Clothing",
175
+ items: ["Shirts", "Pants", "Dresses", "Shoes"]
176
+ },
177
+ {
178
+ name: "Home & Garden",
179
+ items: ["Furniture", "Appliances", "Decor", "Tools"]
180
+ }
181
+ ];
182
+
183
+ return (
184
+ <AccordionGroup name="product-categories" className="category-browser">
185
+ {categories.map((category, index) => (
186
+ <Accordion key={index} name={`category-${index}`}>
187
+ <AccordionSummary>
188
+ <div className="category-header">
189
+ <Text type="Heading6">{category.name}</Text>
190
+ <Chip size="Small" style="B">{category.items.length} items</Chip>
191
+ </div>
192
+ </AccordionSummary>
193
+ <AccordionDetails>
194
+ <List
195
+ data={category.items}
196
+ component={({ item }) => (
197
+ <ListItem>
198
+ <Text type="BodyMedium">{item}</Text>
199
+ <IconButton icon="ArrowForward" size="Small" />
200
+ </ListItem>
201
+ )}
202
+ />
203
+ </AccordionDetails>
204
+ </Accordion>
205
+ ))}
206
+ </AccordionGroup>
207
+ );
208
+ }
209
+ ```
210
+
211
+ ### Help Documentation
212
+ ```tsx
213
+ function HelpDocumentationExample() {
214
+ return (
215
+ <AccordionGroup name="help-docs" className="help-container">
216
+ <Accordion defaultExpanded>
217
+ <AccordionSummary>
218
+ <div className="help-header">
219
+ <Icon icon="Help" />
220
+ <Text type="Heading6">Getting Started</Text>
221
+ <Chip size="Small" style="A">New</Chip>
222
+ </div>
223
+ </AccordionSummary>
224
+ <AccordionDetails>
225
+ <Text type="BodyMedium">
226
+ Welcome to our platform! Here's everything you need to know to get started.
227
+ </Text>
228
+ <List
229
+ data={["Create your account", "Set up your profile", "Explore features", "Connect with others"]}
230
+ component={({ item, index }) => (
231
+ <ListItem>
232
+ <Text type="BodySmall">{index + 1}. {item}</Text>
233
+ </ListItem>
234
+ )}
235
+ />
236
+ <Button size="Small">Start Tutorial</Button>
237
+ </AccordionDetails>
238
+ </Accordion>
239
+
240
+ <Accordion>
241
+ <AccordionSummary>
242
+ <div className="help-header">
243
+ <Icon icon="Settings" />
244
+ <Text type="Heading6">Advanced Features</Text>
245
+ </div>
246
+ </AccordionSummary>
247
+ <AccordionDetails>
248
+ <Text type="BodyMedium">
249
+ Discover powerful features for advanced users.
250
+ </Text>
251
+ <ButtonGroup>
252
+ <Button size="Small" type="Outlined">API Documentation</Button>
253
+ <Button size="Small" type="Outlined">Integration Guide</Button>
254
+ </ButtonGroup>
255
+ </AccordionDetails>
256
+ </Accordion>
257
+
258
+ <Accordion>
259
+ <AccordionSummary>
260
+ <div className="help-header">
261
+ <Icon icon="Error" />
262
+ <Text type="Heading6">Troubleshooting</Text>
263
+ </div>
264
+ </AccordionSummary>
265
+ <AccordionDetails>
266
+ <Text type="BodyMedium">
267
+ Common issues and their solutions.
268
+ </Text>
269
+ <Accordion size="Small">
270
+ <AccordionSummary>
271
+ <Text type="BodyMedium">Login Issues</Text>
272
+ </AccordionSummary>
273
+ <AccordionDetails>
274
+ <Text type="BodySmall">
275
+ Try resetting your password or clearing browser cache.
276
+ </Text>
277
+ </AccordionDetails>
278
+ </Accordion>
279
+ </AccordionDetails>
280
+ </Accordion>
281
+ </AccordionGroup>
282
+ );
283
+ }
284
+ ```
285
+
286
+ ### Controlled Group State
287
+ ```tsx
288
+ function ControlledGroupExample() {
289
+ const [openAccordion, setOpenAccordion] = useState('general');
290
+
291
+ const handleAccordionChange = (accordionName, isOpen) => {
292
+ setOpenAccordion(isOpen ? accordionName : null);
293
+ };
294
+
295
+ const sections = [
296
+ { name: 'general', title: 'General Settings', icon: 'Settings' },
297
+ { name: 'billing', title: 'Billing Information', icon: 'CreditCard' },
298
+ { name: 'notifications', title: 'Notifications', icon: 'Notifications' },
299
+ { name: 'security', title: 'Security', icon: 'Security' }
300
+ ];
301
+
302
+ return (
303
+ <AccordionGroup name="controlled-settings">
304
+ {sections.map(section => (
305
+ <Accordion
306
+ key={section.name}
307
+ name={section.name}
308
+ expanded={openAccordion === section.name}
309
+ onChange={(isOpen) => handleAccordionChange(section.name, isOpen)}
310
+ >
311
+ <AccordionSummary>
312
+ <div className="section-header">
313
+ <Icon icon={section.icon} />
314
+ <Text type="Heading6">{section.title}</Text>
315
+ {openAccordion === section.name && (
316
+ <Chip size="Small" style="A">Active</Chip>
317
+ )}
318
+ </div>
319
+ </AccordionSummary>
320
+ <AccordionDetails>
321
+ <Text type="BodyMedium">
322
+ Settings for {section.title.toLowerCase()}.
323
+ </Text>
324
+ <Button size="Small">Configure</Button>
325
+ </AccordionDetails>
326
+ </Accordion>
327
+ ))}
328
+ </AccordionGroup>
329
+ );
330
+ }
331
+ ```
332
+
333
+ ### Nested Accordion Groups
334
+ ```tsx
335
+ function NestedGroupExample() {
336
+ return (
337
+ <AccordionGroup name="main-navigation" className="main-nav">
338
+ <Accordion>
339
+ <AccordionSummary>
340
+ <Text type="Heading5">Dashboard</Text>
341
+ </AccordionSummary>
342
+ <AccordionDetails>
343
+ <AccordionGroup name="dashboard-sub">
344
+ <Accordion size="Small">
345
+ <AccordionSummary>
346
+ <Text type="BodyMedium">Analytics</Text>
347
+ </AccordionSummary>
348
+ <AccordionDetails>
349
+ <List
350
+ data={["Overview", "Traffic", "Conversions", "Revenue"]}
351
+ component={({ item }) => (
352
+ <ListItem>
353
+ <Text type="BodySmall">{item}</Text>
354
+ </ListItem>
355
+ )}
356
+ />
357
+ </AccordionDetails>
358
+ </Accordion>
359
+
360
+ <Accordion size="Small">
361
+ <AccordionSummary>
362
+ <Text type="BodyMedium">Reports</Text>
363
+ </AccordionSummary>
364
+ <AccordionDetails>
365
+ <List
366
+ data={["Daily", "Weekly", "Monthly", "Custom"]}
367
+ component={({ item }) => (
368
+ <ListItem>
369
+ <Text type="BodySmall">{item}</Text>
370
+ </ListItem>
371
+ )}
372
+ />
373
+ </AccordionDetails>
374
+ </Accordion>
375
+ </AccordionGroup>
376
+ </AccordionDetails>
377
+ </Accordion>
378
+
379
+ <Accordion>
380
+ <AccordionSummary>
381
+ <Text type="Heading5">Settings</Text>
382
+ </AccordionSummary>
383
+ <AccordionDetails>
384
+ <AccordionGroup name="settings-sub">
385
+ <Accordion size="Small">
386
+ <AccordionSummary>
387
+ <Text type="BodyMedium">User Management</Text>
388
+ </AccordionSummary>
389
+ <AccordionDetails>
390
+ <ButtonGroup>
391
+ <Button size="Small" type="Outlined">Add User</Button>
392
+ <Button size="Small" type="Outlined">Manage Roles</Button>
393
+ </ButtonGroup>
394
+ </AccordionDetails>
395
+ </Accordion>
396
+ </AccordionGroup>
397
+ </AccordionDetails>
398
+ </Accordion>
399
+ </AccordionGroup>
400
+ );
401
+ }
402
+ ```
403
+
404
+ ### Interactive Filter Panel
405
+ ```tsx
406
+ function FilterPanelExample() {
407
+ const [selectedFilters, setSelectedFilters] = useState({
408
+ category: [],
409
+ price: [],
410
+ rating: [],
411
+ features: []
412
+ });
413
+
414
+ const updateFilter = (filterType, value, checked) => {
415
+ setSelectedFilters(prev => ({
416
+ ...prev,
417
+ [filterType]: checked
418
+ ? [...prev[filterType], value]
419
+ : prev[filterType].filter(item => item !== value)
420
+ }));
421
+ };
422
+
423
+ return (
424
+ <AccordionGroup name="filter-panel" className="filter-container">
425
+ <Accordion defaultExpanded>
426
+ <AccordionSummary>
427
+ <div className="filter-header">
428
+ <Text type="Heading6">Category</Text>
429
+ {selectedFilters.category.length > 0 && (
430
+ <Chip size="Small" style="A">
431
+ {selectedFilters.category.length} selected
432
+ </Chip>
433
+ )}
434
+ </div>
435
+ </AccordionSummary>
436
+ <AccordionDetails>
437
+ {['Electronics', 'Clothing', 'Home', 'Sports'].map(category => (
438
+ <FormField key={category} name={category}>
439
+ <Checkbox
440
+ checked={selectedFilters.category.includes(category)}
441
+ onValueChange={(checked) => updateFilter('category', category, checked)}
442
+ >
443
+ {category}
444
+ </Checkbox>
445
+ </FormField>
446
+ ))}
447
+ </AccordionDetails>
448
+ </Accordion>
449
+
450
+ <Accordion>
451
+ <AccordionSummary>
452
+ <div className="filter-header">
453
+ <Text type="Heading6">Price Range</Text>
454
+ {selectedFilters.price.length > 0 && (
455
+ <Chip size="Small" style="A">
456
+ {selectedFilters.price.length} selected
457
+ </Chip>
458
+ )}
459
+ </div>
460
+ </AccordionSummary>
461
+ <AccordionDetails>
462
+ {['Under $25', '$25 - $50', '$50 - $100', 'Over $100'].map(price => (
463
+ <FormField key={price} name={price}>
464
+ <Checkbox
465
+ checked={selectedFilters.price.includes(price)}
466
+ onValueChange={(checked) => updateFilter('price', price, checked)}
467
+ >
468
+ {price}
469
+ </Checkbox>
470
+ </FormField>
471
+ ))}
472
+ </AccordionDetails>
473
+ </Accordion>
474
+
475
+ <div className="filter-actions">
476
+ <Button size="Small">Apply Filters</Button>
477
+ <Button size="Small" type="Outlined" onClick={() => setSelectedFilters({
478
+ category: [], price: [], rating: [], features: []
479
+ })}>
480
+ Clear All
481
+ </Button>
482
+ </div>
483
+ </AccordionGroup>
484
+ );
485
+ }
486
+ ```
487
+
488
+ ### Timeline Accordion Group
489
+ ```tsx
490
+ function TimelineExample() {
491
+ const timelineEvents = [
492
+ {
493
+ date: "2024-01-15",
494
+ title: "Project Started",
495
+ description: "Initial project setup and planning phase completed."
496
+ },
497
+ {
498
+ date: "2024-02-01",
499
+ title: "Development Phase",
500
+ description: "Core development work began with team collaboration."
501
+ },
502
+ {
503
+ date: "2024-02-28",
504
+ title: "Testing & QA",
505
+ description: "Comprehensive testing and quality assurance procedures."
506
+ },
507
+ {
508
+ date: "2024-03-15",
509
+ title: "Launch Preparation",
510
+ description: "Final preparations and deployment configurations."
511
+ }
512
+ ];
513
+
514
+ return (
515
+ <AccordionGroup name="project-timeline" className="timeline-container">
516
+ {timelineEvents.map((event, index) => (
517
+ <Accordion key={index} name={`timeline-${index}`}>
518
+ <AccordionSummary>
519
+ <div className="timeline-header">
520
+ <div className="timeline-date">
521
+ <Text type="BodySmall">{event.date}</Text>
522
+ </div>
523
+ <div className="timeline-title">
524
+ <Text type="Heading6">{event.title}</Text>
525
+ </div>
526
+ <div className="timeline-status">
527
+ <Chip size="Small" style={index === 0 ? "A" : "B"}>
528
+ {index === 0 ? "Current" : "Completed"}
529
+ </Chip>
530
+ </div>
531
+ </div>
532
+ </AccordionSummary>
533
+ <AccordionDetails>
534
+ <Text type="BodyMedium">{event.description}</Text>
535
+ <div className="timeline-actions">
536
+ <Button size="Small" type="Outlined">View Details</Button>
537
+ <Button size="Small" type="Ghost">
538
+ <Icon icon="MoreHorizontal" />
539
+ </Button>
540
+ </div>
541
+ </AccordionDetails>
542
+ </Accordion>
543
+ ))}
544
+ </AccordionGroup>
545
+ );
546
+ }
547
+ ```