@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.
- package/README.md +104 -1
- package/dist/cjs/components/molecules/Modal/DemoModal.d.ts +8 -0
- package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.d.ts +41 -0
- package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +87 -0
- package/dist/cjs/components/molecules/Modal/ModalContext/index.d.ts +3 -0
- package/dist/cjs/components/molecules/Modal/ModalContext/useModal.d.ts +34 -0
- package/dist/cjs/components/molecules/Modal/index.d.ts +2 -0
- package/dist/cjs/components/molecules/Popover/Popover.presenter.d.ts +26 -0
- package/dist/cjs/components/molecules/Select/Option/Option.types.d.ts +6 -0
- package/dist/cjs/components/molecules/Select/Select.Context.d.ts +1 -1
- package/dist/cjs/components/molecules/Select/Select.d.ts +5 -5
- package/dist/cjs/components/molecules/Select/Select.presenter.d.ts +1 -0
- package/dist/cjs/components/molecules/Select/Select.types.d.ts +5 -0
- package/dist/cjs/components/molecules/Select/index.d.ts +2 -9
- package/dist/cjs/components/molecules/index.d.ts +2 -0
- package/dist/cjs/components/utils/accessibilityUtils.d.ts +41 -0
- package/dist/cjs/components/utils/index.d.ts +2 -0
- package/dist/cjs/library.css +13 -0
- package/dist/cjs/library.js +2 -2
- package/dist/cjs/library.js.map +1 -1
- package/dist/esm/components/molecules/Modal/DemoModal.d.ts +8 -0
- package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.d.ts +41 -0
- package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +87 -0
- package/dist/esm/components/molecules/Modal/ModalContext/index.d.ts +3 -0
- package/dist/esm/components/molecules/Modal/ModalContext/useModal.d.ts +34 -0
- package/dist/esm/components/molecules/Modal/index.d.ts +2 -0
- package/dist/esm/components/molecules/Popover/Popover.presenter.d.ts +26 -0
- package/dist/esm/components/molecules/Select/Option/Option.types.d.ts +6 -0
- package/dist/esm/components/molecules/Select/Select.Context.d.ts +1 -1
- package/dist/esm/components/molecules/Select/Select.d.ts +5 -5
- package/dist/esm/components/molecules/Select/Select.presenter.d.ts +1 -0
- package/dist/esm/components/molecules/Select/Select.types.d.ts +5 -0
- package/dist/esm/components/molecules/Select/index.d.ts +2 -9
- package/dist/esm/components/molecules/index.d.ts +2 -0
- package/dist/esm/components/utils/accessibilityUtils.d.ts +41 -0
- package/dist/esm/components/utils/index.d.ts +2 -0
- package/dist/esm/library.css +13 -0
- package/dist/esm/library.js +3 -3
- package/dist/esm/library.js.map +1 -1
- package/dist/index.d.ts +156 -12
- package/docs/README.md +264 -0
- package/docs/components/atoms/ActionImage.md +119 -0
- package/docs/components/atoms/Button.md +197 -0
- package/docs/components/atoms/Checkbox.md +299 -0
- package/docs/components/atoms/CheckboxItem.md +314 -0
- package/docs/components/atoms/Chip.md +380 -0
- package/docs/components/atoms/CustomToggle.md +270 -0
- package/docs/components/atoms/Icon.md +365 -0
- package/docs/components/atoms/IconButton.md +407 -0
- package/docs/components/atoms/Image.md +448 -0
- package/docs/components/atoms/Input.md +430 -0
- package/docs/components/atoms/ListItem.md +502 -0
- package/docs/components/atoms/Password.md +472 -0
- package/docs/components/atoms/RadioButton.md +614 -0
- package/docs/components/atoms/RadioButtonItem.md +588 -0
- package/docs/components/atoms/ResponsiveComponent.md +612 -0
- package/docs/components/atoms/SelectListItem.md +609 -0
- package/docs/components/atoms/Slider.md +605 -0
- package/docs/components/atoms/Spinner.md +605 -0
- package/docs/components/atoms/Text.md +463 -0
- package/docs/components/atoms/TextArea.md +670 -0
- package/docs/components/atoms/ToastNotification.md +668 -0
- package/docs/components/atoms/Toggle.md +737 -0
- package/docs/components/atoms/ToggleButton.md +751 -0
- package/docs/components/atoms/Tooltip.md +391 -0
- package/docs/components/molecules/Accordion.md +440 -0
- package/docs/components/molecules/AccordionGroup.md +547 -0
- package/docs/components/molecules/ActionCard.md +546 -0
- package/docs/components/molecules/Breadcrumb.md +403 -0
- package/docs/components/molecules/Breadcrumbs.md +485 -0
- package/docs/components/molecules/ButtonGroup.md +383 -0
- package/docs/components/molecules/Card.md +298 -0
- package/docs/components/molecules/ChipInput.md +646 -0
- package/docs/components/molecules/ContextMenu.md +768 -0
- package/docs/components/molecules/CustomTimeSelector.md +116 -0
- package/docs/components/molecules/DatePicker.md +516 -0
- package/docs/components/molecules/DateTimeSelector.md +166 -0
- package/docs/components/molecules/FormField.md +312 -0
- package/docs/components/molecules/Grid.md +577 -0
- package/docs/components/molecules/GridItem.md +834 -0
- package/docs/components/molecules/GridList.md +244 -0
- package/docs/components/molecules/List.md +485 -0
- package/docs/components/molecules/Modal.md +470 -0
- package/docs/components/molecules/ModalFooter.md +702 -0
- package/docs/components/molecules/ModalHeader.md +756 -0
- package/docs/components/molecules/ModalProvider.md +205 -0
- package/docs/components/molecules/Nav.md +530 -0
- package/docs/components/molecules/NavItem.md +572 -0
- package/docs/components/molecules/NavLink.md +499 -0
- package/docs/components/molecules/Option.md +521 -0
- package/docs/components/molecules/Pagination.md +592 -0
- package/docs/components/molecules/PaginationNumberField.md +722 -0
- package/docs/components/molecules/Popover.md +516 -0
- package/docs/components/molecules/ProgressBar.md +624 -0
- package/docs/components/molecules/RadioGroup.md +831 -0
- package/docs/components/molecules/RepeaterList.md +185 -0
- package/docs/components/molecules/Select.md +402 -0
- package/docs/components/molecules/SortableTrigger.md +82 -0
- package/docs/components/molecules/useModal.md +379 -0
- package/docs/components/organisms/Dropzone.md +346 -0
- package/docs/components/organisms/DropzoneClear.md +135 -0
- package/docs/components/organisms/DropzoneContent.md +216 -0
- package/docs/components/organisms/DropzoneFilename.md +191 -0
- package/docs/components/organisms/DropzoneSupportedFormats.md +184 -0
- package/docs/components/organisms/DropzoneTrigger.md +209 -0
- package/docs/components/organisms/Form.md +533 -0
- package/docs/components/organisms/SlideOutPanel.md +662 -0
- package/docs/components/organisms/TabContent.md +902 -0
- package/docs/components/organisms/TabItem.md +1091 -0
- package/docs/components/organisms/Table.md +611 -0
- package/docs/components/organisms/TableBody.md +679 -0
- package/docs/components/organisms/TableCell.md +482 -0
- package/docs/components/organisms/TableHeader.md +513 -0
- package/docs/components/organisms/TableHeaderCell.md +661 -0
- package/docs/components/organisms/TableRow.md +715 -0
- package/docs/components/organisms/Tabs.md +1330 -0
- package/docs/components/utils/ConditionalView.md +568 -0
- package/docs/components/utils/RenderStateView.md +726 -0
- package/docs/components/utils/WrapTextNodes.md +614 -0
- 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
|
+
```
|