@ceed/ads 1.35.1 → 1.36.0
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 +85 -95
- package/dist/components/Accordions/Accordions.d.ts +1 -0
- package/dist/components/Alert/Alert.d.ts +5 -5
- package/dist/components/Autocomplete/Autocomplete.d.ts +2 -2
- package/dist/components/Avatar/Avatar.d.ts +7 -17
- package/dist/components/Box/Box.d.ts +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +6 -5
- package/dist/components/Button/Button.d.ts +3 -2
- package/dist/components/Calendar/Calendar.d.ts +1 -0
- package/dist/components/Card/Card.d.ts +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +1 -0
- package/dist/components/Chip/Chip.d.ts +1 -0
- package/dist/components/Container/Container.d.ts +6 -1
- package/dist/components/DialogActions/DialogActions.d.ts +1 -0
- package/dist/components/DialogContent/DialogContent.d.ts +1 -0
- package/dist/components/DialogFrame/DialogFrame.d.ts +1 -1
- package/dist/components/DialogTitle/DialogTitle.d.ts +1 -0
- package/dist/components/Divider/Divider.d.ts +1 -0
- package/dist/components/Dropdown/Dropdown.d.ts +28 -1
- package/dist/components/FilterMenu/components/MonthRange.d.ts +11 -0
- package/dist/components/FilterMenu/types.d.ts +5 -1
- package/dist/components/FormControl/FormControl.d.ts +1 -0
- package/dist/components/FormHelperText/FormHelperText.d.ts +1 -0
- package/dist/components/FormLabel/FormLabel.d.ts +1 -0
- package/dist/components/Grid/Grid.d.ts +1 -0
- package/dist/components/IconButton/IconButton.d.ts +3 -2
- package/dist/components/IconMenuButton/IconMenuButton.d.ts +7 -6
- package/dist/components/InfoSign/InfoSign.d.ts +3 -2
- package/dist/components/Input/Input.d.ts +8 -22
- package/dist/components/InsetDrawer/InsetDrawer.d.ts +1 -0
- package/dist/components/Markdown/Markdown.d.ts +9 -24
- package/dist/components/Menu/Menu.d.ts +2 -1
- package/dist/components/MenuButton/MenuButton.d.ts +10 -8
- package/dist/components/Modal/Modal.d.ts +4 -2
- package/dist/components/NavigationGroup/NavigationGroup.d.ts +3 -2
- package/dist/components/NavigationItem/NavigationItem.d.ts +3 -2
- package/dist/components/Navigator/Navigator.d.ts +5 -4
- package/dist/components/Pagination/Pagination.d.ts +1 -1
- package/dist/components/ProfileMenu/ProfileMenu.d.ts +2 -2
- package/dist/components/Radio/Radio.d.ts +1 -0
- package/dist/components/RadioList/RadioList.d.ts +3 -2
- package/dist/components/Select/Select.d.ts +12 -10
- package/dist/components/Sheet/Sheet.d.ts +1 -0
- package/dist/components/Stack/Stack.d.ts +1 -0
- package/dist/components/Stepper/Stepper.d.ts +2 -1
- package/dist/components/Switch/Switch.d.ts +1 -0
- package/dist/components/Table/Table.d.ts +7 -5
- package/dist/components/Tabs/Tabs.d.ts +1 -0
- package/dist/components/Textarea/Textarea.d.ts +8 -20
- package/dist/components/ThemeProvider/ThemeProvider.d.ts +4 -2
- package/dist/components/Tooltip/Tooltip.d.ts +1 -0
- package/dist/components/Typography/Typography.d.ts +1 -0
- package/dist/components/Uploader/Uploader.d.ts +18 -17
- package/dist/components/data-display/Avatar.md +60 -72
- package/dist/components/data-display/Badge.md +197 -181
- package/dist/components/data-display/Chip.md +164 -142
- package/dist/components/data-display/DataTable.md +843 -338
- package/dist/components/data-display/InfoSign.md +1 -3
- package/dist/components/data-display/Markdown.md +93 -125
- package/dist/components/data-display/Table.md +1453 -1007
- package/dist/components/data-display/Typography.md +101 -104
- package/dist/components/feedback/Alert.md +80 -86
- package/dist/components/feedback/CircularProgress.md +32 -36
- package/dist/components/feedback/Dialog.md +25 -17
- package/dist/components/feedback/Modal.md +296 -265
- package/dist/components/feedback/Skeleton.md +125 -89
- package/dist/components/index.d.ts +60 -1
- package/dist/components/inputs/Autocomplete.md +191 -95
- package/dist/components/inputs/Button.md +83 -83
- package/dist/components/inputs/ButtonGroup.md +195 -185
- package/dist/components/inputs/Calendar.md +25 -28
- package/dist/components/inputs/Checkbox.md +11 -29
- package/dist/components/inputs/CurrencyInput.md +4 -4
- package/dist/components/inputs/DatePicker.md +229 -110
- package/dist/components/inputs/DateRangePicker.md +248 -137
- package/dist/components/inputs/FilterMenu.md +138 -8
- package/dist/components/inputs/FilterableCheckboxGroup.md +115 -55
- package/dist/components/inputs/FormControl.md +75 -69
- package/dist/components/inputs/IconButton.md +229 -205
- package/dist/components/inputs/Input.md +131 -98
- package/dist/components/inputs/MonthPicker.md +186 -84
- package/dist/components/inputs/MonthRangePicker.md +73 -49
- package/dist/components/inputs/PercentageInput.md +15 -31
- package/dist/components/inputs/RadioButton.md +320 -256
- package/dist/components/inputs/RadioList.md +66 -50
- package/dist/components/inputs/RadioTileGroup.md +287 -170
- package/dist/components/inputs/SearchBar.md +82 -60
- package/dist/components/inputs/Select.md +106 -95
- package/dist/components/inputs/Slider.md +153 -102
- package/dist/components/inputs/Switch.md +193 -138
- package/dist/components/inputs/Textarea.md +15 -20
- package/dist/components/inputs/Uploader/Uploader.md +68 -39
- package/dist/components/layout/Box.md +841 -662
- package/dist/components/layout/Container.md +3 -11
- package/dist/components/layout/Grid.md +480 -394
- package/dist/components/layout/Stack.md +739 -566
- package/dist/components/navigation/Breadcrumbs.md +182 -116
- package/dist/components/navigation/Dropdown.md +732 -391
- package/dist/components/navigation/IconMenuButton.md +14 -6
- package/dist/components/navigation/InsetDrawer.md +550 -378
- package/dist/components/navigation/Link.md +104 -94
- package/dist/components/navigation/Menu.md +623 -502
- package/dist/components/navigation/MenuButton.md +18 -10
- package/dist/components/navigation/NavigationGroup.md +19 -50
- package/dist/components/navigation/NavigationItem.md +6 -6
- package/dist/components/navigation/Navigator.md +26 -28
- package/dist/components/navigation/Pagination.md +86 -75
- package/dist/components/navigation/ProfileMenu.md +65 -43
- package/dist/components/navigation/Stepper.md +2 -12
- package/dist/components/navigation/Tabs.md +209 -183
- package/dist/components/surfaces/Accordions.md +89 -172
- package/dist/components/surfaces/Card.md +1094 -709
- package/dist/components/surfaces/Divider.md +562 -412
- package/dist/components/surfaces/Sheet.md +700 -518
- package/dist/guides/ThemeProvider.md +65 -40
- package/dist/index.browser.js +4 -4
- package/dist/index.browser.js.map +4 -4
- package/dist/index.cjs +1643 -1550
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1303 -1202
- package/framer/index.js +1 -1
- package/package.json +32 -35
|
@@ -81,10 +81,10 @@ Available size options: `sm`, `md`, `lg`.
|
|
|
81
81
|
|
|
82
82
|
```tsx
|
|
83
83
|
<>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
</>
|
|
84
|
+
<Accordions {...args} size="sm" />
|
|
85
|
+
<Accordions {...args} size="md" />
|
|
86
|
+
<Accordions {...args} size="lg" />
|
|
87
|
+
</>
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
## Accordion Variants
|
|
@@ -93,23 +93,23 @@ Style variants: `plain`, `outlined`, `soft`, `solid`.
|
|
|
93
93
|
|
|
94
94
|
```tsx
|
|
95
95
|
<>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
</>
|
|
96
|
+
<div>
|
|
97
|
+
<h3>Plain</h3>
|
|
98
|
+
<Accordions {...args} variant="plain" />
|
|
99
|
+
</div>
|
|
100
|
+
<div>
|
|
101
|
+
<h3>Outlined</h3>
|
|
102
|
+
<Accordions {...args} variant="outlined" />
|
|
103
|
+
</div>
|
|
104
|
+
<div>
|
|
105
|
+
<h3>Soft</h3>
|
|
106
|
+
<Accordions {...args} variant="soft" />
|
|
107
|
+
</div>
|
|
108
|
+
<div>
|
|
109
|
+
<h3>Solid</h3>
|
|
110
|
+
<Accordions {...args} variant="solid" />
|
|
111
|
+
</div>
|
|
112
|
+
</>
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
## Accordion Colors
|
|
@@ -118,27 +118,27 @@ Color options: `primary`, `neutral`, `danger`, `success`, `warning`.
|
|
|
118
118
|
|
|
119
119
|
```tsx
|
|
120
120
|
<>
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
</>
|
|
121
|
+
<div>
|
|
122
|
+
<h3>Primary</h3>
|
|
123
|
+
<Accordions {...args} color="primary" />
|
|
124
|
+
</div>
|
|
125
|
+
<div>
|
|
126
|
+
<h3>Neutral</h3>
|
|
127
|
+
<Accordions {...args} color="neutral" />
|
|
128
|
+
</div>
|
|
129
|
+
<div>
|
|
130
|
+
<h3>Danger</h3>
|
|
131
|
+
<Accordions {...args} color="danger" />
|
|
132
|
+
</div>
|
|
133
|
+
<div>
|
|
134
|
+
<h3>Success</h3>
|
|
135
|
+
<Accordions {...args} color="success" />
|
|
136
|
+
</div>
|
|
137
|
+
<div>
|
|
138
|
+
<h3>Warning</h3>
|
|
139
|
+
<Accordions {...args} color="warning" />
|
|
140
|
+
</div>
|
|
141
|
+
</>
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
## Accordion without Divider
|
|
@@ -179,8 +179,8 @@ function FAQAccordion() {
|
|
|
179
179
|
summary: 'What payment methods do you accept?',
|
|
180
180
|
details: (
|
|
181
181
|
<Typography>
|
|
182
|
-
We accept Visa, MasterCard, American Express, and PayPal.
|
|
183
|
-
|
|
182
|
+
We accept Visa, MasterCard, American Express, and PayPal. All payments are processed securely through our
|
|
183
|
+
payment gateway.
|
|
184
184
|
</Typography>
|
|
185
185
|
),
|
|
186
186
|
},
|
|
@@ -188,9 +188,8 @@ function FAQAccordion() {
|
|
|
188
188
|
summary: 'How can I track my order?',
|
|
189
189
|
details: (
|
|
190
190
|
<Typography>
|
|
191
|
-
Once your order ships, you'll receive an email with a tracking
|
|
192
|
-
|
|
193
|
-
site to track your package.
|
|
191
|
+
Once your order ships, you'll receive an email with a tracking number. You can use this number on our website
|
|
192
|
+
or the carrier's site to track your package.
|
|
194
193
|
</Typography>
|
|
195
194
|
),
|
|
196
195
|
},
|
|
@@ -231,18 +230,11 @@ function SettingsAccordion({ settings, onSettingChange }) {
|
|
|
231
230
|
<Stack gap={2}>
|
|
232
231
|
<FormControl>
|
|
233
232
|
<FormLabel>Display Name</FormLabel>
|
|
234
|
-
<Input
|
|
235
|
-
value={settings.displayName}
|
|
236
|
-
onChange={(e) => onSettingChange('displayName', e.target.value)}
|
|
237
|
-
/>
|
|
233
|
+
<Input value={settings.displayName} onChange={(e) => onSettingChange('displayName', e.target.value)} />
|
|
238
234
|
</FormControl>
|
|
239
235
|
<FormControl>
|
|
240
236
|
<FormLabel>Email</FormLabel>
|
|
241
|
-
<Input
|
|
242
|
-
type="email"
|
|
243
|
-
value={settings.email}
|
|
244
|
-
onChange={(e) => onSettingChange('email', e.target.value)}
|
|
245
|
-
/>
|
|
237
|
+
<Input type="email" value={settings.email} onChange={(e) => onSettingChange('email', e.target.value)} />
|
|
246
238
|
</FormControl>
|
|
247
239
|
</Stack>
|
|
248
240
|
),
|
|
@@ -254,16 +246,12 @@ function SettingsAccordion({ settings, onSettingChange }) {
|
|
|
254
246
|
<Checkbox
|
|
255
247
|
label="Email notifications"
|
|
256
248
|
checked={settings.emailNotifications}
|
|
257
|
-
onChange={(e) =>
|
|
258
|
-
onSettingChange('emailNotifications', e.target.checked)
|
|
259
|
-
}
|
|
249
|
+
onChange={(e) => onSettingChange('emailNotifications', e.target.checked)}
|
|
260
250
|
/>
|
|
261
251
|
<Checkbox
|
|
262
252
|
label="Push notifications"
|
|
263
253
|
checked={settings.pushNotifications}
|
|
264
|
-
onChange={(e) =>
|
|
265
|
-
onSettingChange('pushNotifications', e.target.checked)
|
|
266
|
-
}
|
|
254
|
+
onChange={(e) => onSettingChange('pushNotifications', e.target.checked)}
|
|
267
255
|
/>
|
|
268
256
|
<Checkbox
|
|
269
257
|
label="Weekly digest"
|
|
@@ -310,9 +298,7 @@ function ProductAccordion({ product }) {
|
|
|
310
298
|
const productDetails = [
|
|
311
299
|
{
|
|
312
300
|
summary: 'Description',
|
|
313
|
-
details:
|
|
314
|
-
<Typography>{product.description}</Typography>
|
|
315
|
-
),
|
|
301
|
+
details: <Typography>{product.description}</Typography>,
|
|
316
302
|
},
|
|
317
303
|
{
|
|
318
304
|
summary: 'Specifications',
|
|
@@ -341,15 +327,11 @@ function ProductAccordion({ product }) {
|
|
|
341
327
|
<Stack gap={2}>
|
|
342
328
|
<Box>
|
|
343
329
|
<Typography level="title-sm">Shipping</Typography>
|
|
344
|
-
<Typography level="body-sm">
|
|
345
|
-
Free shipping on orders over $50. Standard delivery 3-5 days.
|
|
346
|
-
</Typography>
|
|
330
|
+
<Typography level="body-sm">Free shipping on orders over $50. Standard delivery 3-5 days.</Typography>
|
|
347
331
|
</Box>
|
|
348
332
|
<Box>
|
|
349
333
|
<Typography level="title-sm">Returns</Typography>
|
|
350
|
-
<Typography level="body-sm">
|
|
351
|
-
30-day return policy. Items must be unused with original tags.
|
|
352
|
-
</Typography>
|
|
334
|
+
<Typography level="body-sm">30-day return policy. Items must be unused with original tags.</Typography>
|
|
353
335
|
</Box>
|
|
354
336
|
</Stack>
|
|
355
337
|
),
|
|
@@ -393,19 +375,13 @@ function NavigationAccordion() {
|
|
|
393
375
|
details: (
|
|
394
376
|
<List size="sm">
|
|
395
377
|
<ListItem>
|
|
396
|
-
<ListItemButton onClick={() => navigate('/products/electronics')}>
|
|
397
|
-
Electronics
|
|
398
|
-
</ListItemButton>
|
|
378
|
+
<ListItemButton onClick={() => navigate('/products/electronics')}>Electronics</ListItemButton>
|
|
399
379
|
</ListItem>
|
|
400
380
|
<ListItem>
|
|
401
|
-
<ListItemButton onClick={() => navigate('/products/clothing')}>
|
|
402
|
-
Clothing
|
|
403
|
-
</ListItemButton>
|
|
381
|
+
<ListItemButton onClick={() => navigate('/products/clothing')}>Clothing</ListItemButton>
|
|
404
382
|
</ListItem>
|
|
405
383
|
<ListItem>
|
|
406
|
-
<ListItemButton onClick={() => navigate('/products/home')}>
|
|
407
|
-
Home & Garden
|
|
408
|
-
</ListItemButton>
|
|
384
|
+
<ListItemButton onClick={() => navigate('/products/home')}>Home & Garden</ListItemButton>
|
|
409
385
|
</ListItem>
|
|
410
386
|
</List>
|
|
411
387
|
),
|
|
@@ -415,14 +391,10 @@ function NavigationAccordion() {
|
|
|
415
391
|
details: (
|
|
416
392
|
<List size="sm">
|
|
417
393
|
<ListItem>
|
|
418
|
-
<ListItemButton onClick={() => navigate('/services/consulting')}>
|
|
419
|
-
Consulting
|
|
420
|
-
</ListItemButton>
|
|
394
|
+
<ListItemButton onClick={() => navigate('/services/consulting')}>Consulting</ListItemButton>
|
|
421
395
|
</ListItem>
|
|
422
396
|
<ListItem>
|
|
423
|
-
<ListItemButton onClick={() => navigate('/services/support')}>
|
|
424
|
-
Support
|
|
425
|
-
</ListItemButton>
|
|
397
|
+
<ListItemButton onClick={() => navigate('/services/support')}>Support</ListItemButton>
|
|
426
398
|
</ListItem>
|
|
427
399
|
</List>
|
|
428
400
|
),
|
|
@@ -432,19 +404,13 @@ function NavigationAccordion() {
|
|
|
432
404
|
details: (
|
|
433
405
|
<List size="sm">
|
|
434
406
|
<ListItem>
|
|
435
|
-
<ListItemButton onClick={() => navigate('/docs')}>
|
|
436
|
-
Documentation
|
|
437
|
-
</ListItemButton>
|
|
407
|
+
<ListItemButton onClick={() => navigate('/docs')}>Documentation</ListItemButton>
|
|
438
408
|
</ListItem>
|
|
439
409
|
<ListItem>
|
|
440
|
-
<ListItemButton onClick={() => navigate('/blog')}>
|
|
441
|
-
Blog
|
|
442
|
-
</ListItemButton>
|
|
410
|
+
<ListItemButton onClick={() => navigate('/blog')}>Blog</ListItemButton>
|
|
443
411
|
</ListItem>
|
|
444
412
|
<ListItem>
|
|
445
|
-
<ListItemButton onClick={() => navigate('/tutorials')}>
|
|
446
|
-
Tutorials
|
|
447
|
-
</ListItemButton>
|
|
413
|
+
<ListItemButton onClick={() => navigate('/tutorials')}>Tutorials</ListItemButton>
|
|
448
414
|
</ListItem>
|
|
449
415
|
</List>
|
|
450
416
|
),
|
|
@@ -469,17 +435,11 @@ function HelpAccordion() {
|
|
|
469
435
|
details: (
|
|
470
436
|
<Stack gap={2}>
|
|
471
437
|
<Typography level="title-sm">Step 1: Create an Account</Typography>
|
|
472
|
-
<Typography level="body-sm">
|
|
473
|
-
Click the "Sign Up" button and fill in your details.
|
|
474
|
-
</Typography>
|
|
438
|
+
<Typography level="body-sm">Click the "Sign Up" button and fill in your details.</Typography>
|
|
475
439
|
<Typography level="title-sm">Step 2: Verify Email</Typography>
|
|
476
|
-
<Typography level="body-sm">
|
|
477
|
-
Check your inbox for a verification email and click the link.
|
|
478
|
-
</Typography>
|
|
440
|
+
<Typography level="body-sm">Check your inbox for a verification email and click the link.</Typography>
|
|
479
441
|
<Typography level="title-sm">Step 3: Complete Profile</Typography>
|
|
480
|
-
<Typography level="body-sm">
|
|
481
|
-
Add your profile picture and bio to personalize your account.
|
|
482
|
-
</Typography>
|
|
442
|
+
<Typography level="body-sm">Add your profile picture and bio to personalize your account.</Typography>
|
|
483
443
|
</Stack>
|
|
484
444
|
),
|
|
485
445
|
},
|
|
@@ -491,17 +451,13 @@ function HelpAccordion() {
|
|
|
491
451
|
<Typography level="title-sm" color="danger">
|
|
492
452
|
Can't log in?
|
|
493
453
|
</Typography>
|
|
494
|
-
<Typography level="body-sm">
|
|
495
|
-
Try resetting your password or clearing your browser cache.
|
|
496
|
-
</Typography>
|
|
454
|
+
<Typography level="body-sm">Try resetting your password or clearing your browser cache.</Typography>
|
|
497
455
|
</Box>
|
|
498
456
|
<Box>
|
|
499
457
|
<Typography level="title-sm" color="danger">
|
|
500
458
|
Page not loading?
|
|
501
459
|
</Typography>
|
|
502
|
-
<Typography level="body-sm">
|
|
503
|
-
Check your internet connection and try refreshing the page.
|
|
504
|
-
</Typography>
|
|
460
|
+
<Typography level="body-sm">Check your internet connection and try refreshing the page.</Typography>
|
|
505
461
|
</Box>
|
|
506
462
|
</Stack>
|
|
507
463
|
),
|
|
@@ -510,19 +466,11 @@ function HelpAccordion() {
|
|
|
510
466
|
summary: 'Contact Support',
|
|
511
467
|
details: (
|
|
512
468
|
<Stack gap={2}>
|
|
513
|
-
<Typography level="body-sm">
|
|
514
|
-
Need more help? Reach out to our support team:
|
|
515
|
-
</Typography>
|
|
469
|
+
<Typography level="body-sm">Need more help? Reach out to our support team:</Typography>
|
|
516
470
|
<Stack gap={1}>
|
|
517
|
-
<Typography level="body-sm">
|
|
518
|
-
|
|
519
|
-
</Typography>
|
|
520
|
-
<Typography level="body-sm">
|
|
521
|
-
💬 Live Chat: Available 9am-5pm EST
|
|
522
|
-
</Typography>
|
|
523
|
-
<Typography level="body-sm">
|
|
524
|
-
📞 Phone: 1-800-EXAMPLE
|
|
525
|
-
</Typography>
|
|
471
|
+
<Typography level="body-sm">📧 Email: support@example.com</Typography>
|
|
472
|
+
<Typography level="body-sm">💬 Live Chat: Available 9am-5pm EST</Typography>
|
|
473
|
+
<Typography level="body-sm">📞 Phone: 1-800-EXAMPLE</Typography>
|
|
526
474
|
</Stack>
|
|
527
475
|
</Stack>
|
|
528
476
|
),
|
|
@@ -567,18 +515,14 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
567
515
|
<FormLabel>First Name</FormLabel>
|
|
568
516
|
<Input
|
|
569
517
|
value={formData.personal.firstName}
|
|
570
|
-
onChange={(e) =>
|
|
571
|
-
updateField('personal', 'firstName', e.target.value)
|
|
572
|
-
}
|
|
518
|
+
onChange={(e) => updateField('personal', 'firstName', e.target.value)}
|
|
573
519
|
/>
|
|
574
520
|
</FormControl>
|
|
575
521
|
<FormControl sx={{ flex: 1 }}>
|
|
576
522
|
<FormLabel>Last Name</FormLabel>
|
|
577
523
|
<Input
|
|
578
524
|
value={formData.personal.lastName}
|
|
579
|
-
onChange={(e) =>
|
|
580
|
-
updateField('personal', 'lastName', e.target.value)
|
|
581
|
-
}
|
|
525
|
+
onChange={(e) => updateField('personal', 'lastName', e.target.value)}
|
|
582
526
|
/>
|
|
583
527
|
</FormControl>
|
|
584
528
|
</Stack>
|
|
@@ -587,9 +531,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
587
531
|
<Input
|
|
588
532
|
type="email"
|
|
589
533
|
value={formData.personal.email}
|
|
590
|
-
onChange={(e) =>
|
|
591
|
-
updateField('personal', 'email', e.target.value)
|
|
592
|
-
}
|
|
534
|
+
onChange={(e) => updateField('personal', 'email', e.target.value)}
|
|
593
535
|
/>
|
|
594
536
|
</FormControl>
|
|
595
537
|
</Stack>
|
|
@@ -601,30 +543,18 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
601
543
|
<Stack gap={2}>
|
|
602
544
|
<FormControl>
|
|
603
545
|
<FormLabel>Street Address</FormLabel>
|
|
604
|
-
<Input
|
|
605
|
-
value={formData.address.street}
|
|
606
|
-
onChange={(e) =>
|
|
607
|
-
updateField('address', 'street', e.target.value)
|
|
608
|
-
}
|
|
609
|
-
/>
|
|
546
|
+
<Input value={formData.address.street} onChange={(e) => updateField('address', 'street', e.target.value)} />
|
|
610
547
|
</FormControl>
|
|
611
548
|
<Stack direction="row" gap={2}>
|
|
612
549
|
<FormControl sx={{ flex: 2 }}>
|
|
613
550
|
<FormLabel>City</FormLabel>
|
|
614
|
-
<Input
|
|
615
|
-
value={formData.address.city}
|
|
616
|
-
onChange={(e) =>
|
|
617
|
-
updateField('address', 'city', e.target.value)
|
|
618
|
-
}
|
|
619
|
-
/>
|
|
551
|
+
<Input value={formData.address.city} onChange={(e) => updateField('address', 'city', e.target.value)} />
|
|
620
552
|
</FormControl>
|
|
621
553
|
<FormControl sx={{ flex: 1 }}>
|
|
622
554
|
<FormLabel>ZIP Code</FormLabel>
|
|
623
555
|
<Input
|
|
624
556
|
value={formData.address.zipCode}
|
|
625
|
-
onChange={(e) =>
|
|
626
|
-
updateField('address', 'zipCode', e.target.value)
|
|
627
|
-
}
|
|
557
|
+
onChange={(e) => updateField('address', 'zipCode', e.target.value)}
|
|
628
558
|
/>
|
|
629
559
|
</FormControl>
|
|
630
560
|
</Stack>
|
|
@@ -640,9 +570,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
640
570
|
<Input
|
|
641
571
|
placeholder="1234 5678 9012 3456"
|
|
642
572
|
value={formData.payment.cardNumber}
|
|
643
|
-
onChange={(e) =>
|
|
644
|
-
updateField('payment', 'cardNumber', e.target.value)
|
|
645
|
-
}
|
|
573
|
+
onChange={(e) => updateField('payment', 'cardNumber', e.target.value)}
|
|
646
574
|
/>
|
|
647
575
|
</FormControl>
|
|
648
576
|
<Stack direction="row" gap={2}>
|
|
@@ -651,9 +579,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
651
579
|
<Input
|
|
652
580
|
placeholder="MM/YY"
|
|
653
581
|
value={formData.payment.expiry}
|
|
654
|
-
onChange={(e) =>
|
|
655
|
-
updateField('payment', 'expiry', e.target.value)
|
|
656
|
-
}
|
|
582
|
+
onChange={(e) => updateField('payment', 'expiry', e.target.value)}
|
|
657
583
|
/>
|
|
658
584
|
</FormControl>
|
|
659
585
|
<FormControl sx={{ flex: 1 }}>
|
|
@@ -662,9 +588,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
662
588
|
type="password"
|
|
663
589
|
placeholder="123"
|
|
664
590
|
value={formData.payment.cvv}
|
|
665
|
-
onChange={(e) =>
|
|
666
|
-
updateField('payment', 'cvv', e.target.value)
|
|
667
|
-
}
|
|
591
|
+
onChange={(e) => updateField('payment', 'cvv', e.target.value)}
|
|
668
592
|
/>
|
|
669
593
|
</FormControl>
|
|
670
594
|
</Stack>
|
|
@@ -700,7 +624,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
700
624
|
|
|
701
625
|
```tsx
|
|
702
626
|
interface AccordionItem {
|
|
703
|
-
summary: string;
|
|
627
|
+
summary: string; // Header text displayed when collapsed
|
|
704
628
|
details: ReactNode; // Content shown when expanded
|
|
705
629
|
}
|
|
706
630
|
|
|
@@ -799,7 +723,7 @@ Accordions includes built-in accessibility features:
|
|
|
799
723
|
<Accordions
|
|
800
724
|
items={[
|
|
801
725
|
{
|
|
802
|
-
summary: 'Shipping Information',
|
|
726
|
+
summary: 'Shipping Information', // Announced as header
|
|
803
727
|
details: <Typography>Content...</Typography>,
|
|
804
728
|
},
|
|
805
729
|
]}
|
|
@@ -965,10 +889,10 @@ const accordionItems = useMemo(
|
|
|
965
889
|
details: <ExpensiveComponent data={data2} />,
|
|
966
890
|
},
|
|
967
891
|
],
|
|
968
|
-
[data1, data2]
|
|
892
|
+
[data1, data2],
|
|
969
893
|
);
|
|
970
894
|
|
|
971
|
-
<Accordions items={accordionItems}
|
|
895
|
+
<Accordions items={accordionItems} />;
|
|
972
896
|
```
|
|
973
897
|
|
|
974
898
|
### Avoid Inline Functions in Items
|
|
@@ -980,7 +904,7 @@ const accordionItems = useMemo(
|
|
|
980
904
|
summary: item.title,
|
|
981
905
|
details: <Content data={item} />,
|
|
982
906
|
}))}
|
|
983
|
-
|
|
907
|
+
/>;
|
|
984
908
|
|
|
985
909
|
// ✅ Good: Memoized transformation
|
|
986
910
|
const items = useMemo(
|
|
@@ -989,9 +913,9 @@ const items = useMemo(
|
|
|
989
913
|
summary: item.title,
|
|
990
914
|
details: <Content data={item} />,
|
|
991
915
|
})),
|
|
992
|
-
[data]
|
|
916
|
+
[data],
|
|
993
917
|
);
|
|
994
|
-
<Accordions items={items}
|
|
918
|
+
<Accordions items={items} />;
|
|
995
919
|
```
|
|
996
920
|
|
|
997
921
|
### Virtualize Long Lists
|
|
@@ -1008,20 +932,13 @@ function FilteredAccordions({ allItems }) {
|
|
|
1008
932
|
const [search, setSearch] = useState('');
|
|
1009
933
|
|
|
1010
934
|
const filteredItems = useMemo(
|
|
1011
|
-
() =>
|
|
1012
|
-
|
|
1013
|
-
item.summary.toLowerCase().includes(search.toLowerCase())
|
|
1014
|
-
),
|
|
1015
|
-
[allItems, search]
|
|
935
|
+
() => allItems.filter((item) => item.summary.toLowerCase().includes(search.toLowerCase())),
|
|
936
|
+
[allItems, search],
|
|
1016
937
|
);
|
|
1017
938
|
|
|
1018
939
|
return (
|
|
1019
940
|
<Stack gap={2}>
|
|
1020
|
-
<Input
|
|
1021
|
-
placeholder="Search..."
|
|
1022
|
-
value={search}
|
|
1023
|
-
onChange={(e) => setSearch(e.target.value)}
|
|
1024
|
-
/>
|
|
941
|
+
<Input placeholder="Search..." value={search} onChange={(e) => setSearch(e.target.value)} />
|
|
1025
942
|
<Accordions items={filteredItems.slice(0, 10)} />
|
|
1026
943
|
{filteredItems.length > 10 && (
|
|
1027
944
|
<Typography level="body-sm" color="neutral">
|