@ceed/cds 1.34.1 → 1.36.0-next.1
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/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/CurrencyInput/CurrencyInput.d.ts +1 -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/Drawer/Drawer.d.ts +1 -0
- package/dist/components/Dropdown/Dropdown.d.ts +28 -1
- package/dist/components/FilterableCheckboxGroup/FilterableCheckboxGroup.d.ts +1 -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 +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 +15 -0
- 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 +113 -116
- 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 -264
- package/dist/components/feedback/Skeleton.md +125 -89
- package/dist/components/index.d.ts +62 -2
- 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/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 +4 -4
- package/dist/components/navigation/Drawer.md +34 -25
- package/dist/components/navigation/Dropdown.md +745 -408
- package/dist/components/navigation/IconMenuButton.md +14 -6
- package/dist/components/navigation/InsetDrawer.md +8 -13
- package/dist/components/navigation/Link.md +1 -2
- 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/Stepper.md +2 -12
- package/dist/components/navigation/Tabs.md +48 -36
- 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 +8 -8
- package/dist/index.browser.js +5 -5
- package/dist/index.browser.js.map +4 -4
- package/dist/index.cjs +1082 -1036
- package/dist/index.d.ts +2 -1
- package/dist/index.js +749 -695
- package/framer/index.js +1 -1
- package/package.json +34 -36
|
@@ -83,10 +83,10 @@ Available size options: `sm`, `md`, `lg`.
|
|
|
83
83
|
|
|
84
84
|
```tsx
|
|
85
85
|
<>
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
</>
|
|
86
|
+
<Accordions {...args} size="sm" />
|
|
87
|
+
<Accordions {...args} size="md" />
|
|
88
|
+
<Accordions {...args} size="lg" />
|
|
89
|
+
</>
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
### Variants
|
|
@@ -95,23 +95,23 @@ Style variants: `plain`, `outlined`, `soft`, `solid`.
|
|
|
95
95
|
|
|
96
96
|
```tsx
|
|
97
97
|
<>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
</>
|
|
98
|
+
<div>
|
|
99
|
+
<h3>Plain</h3>
|
|
100
|
+
<Accordions {...args} variant="plain" />
|
|
101
|
+
</div>
|
|
102
|
+
<div>
|
|
103
|
+
<h3>Outlined</h3>
|
|
104
|
+
<Accordions {...args} variant="outlined" />
|
|
105
|
+
</div>
|
|
106
|
+
<div>
|
|
107
|
+
<h3>Soft</h3>
|
|
108
|
+
<Accordions {...args} variant="soft" />
|
|
109
|
+
</div>
|
|
110
|
+
<div>
|
|
111
|
+
<h3>Solid</h3>
|
|
112
|
+
<Accordions {...args} variant="solid" />
|
|
113
|
+
</div>
|
|
114
|
+
</>
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
### Colors
|
|
@@ -120,27 +120,27 @@ Color options: `primary`, `neutral`, `danger`, `success`, `warning`.
|
|
|
120
120
|
|
|
121
121
|
```tsx
|
|
122
122
|
<>
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
</>
|
|
123
|
+
<div>
|
|
124
|
+
<h3>Primary</h3>
|
|
125
|
+
<Accordions {...args} color="primary" />
|
|
126
|
+
</div>
|
|
127
|
+
<div>
|
|
128
|
+
<h3>Neutral</h3>
|
|
129
|
+
<Accordions {...args} color="neutral" />
|
|
130
|
+
</div>
|
|
131
|
+
<div>
|
|
132
|
+
<h3>Danger</h3>
|
|
133
|
+
<Accordions {...args} color="danger" />
|
|
134
|
+
</div>
|
|
135
|
+
<div>
|
|
136
|
+
<h3>Success</h3>
|
|
137
|
+
<Accordions {...args} color="success" />
|
|
138
|
+
</div>
|
|
139
|
+
<div>
|
|
140
|
+
<h3>Warning</h3>
|
|
141
|
+
<Accordions {...args} color="warning" />
|
|
142
|
+
</div>
|
|
143
|
+
</>
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
### Removing Divider
|
|
@@ -183,8 +183,8 @@ function FAQAccordion() {
|
|
|
183
183
|
summary: 'What payment methods do you accept?',
|
|
184
184
|
details: (
|
|
185
185
|
<Typography>
|
|
186
|
-
We accept Visa, MasterCard, American Express, and PayPal.
|
|
187
|
-
|
|
186
|
+
We accept Visa, MasterCard, American Express, and PayPal. All payments are processed securely through our
|
|
187
|
+
payment gateway.
|
|
188
188
|
</Typography>
|
|
189
189
|
),
|
|
190
190
|
},
|
|
@@ -192,9 +192,8 @@ function FAQAccordion() {
|
|
|
192
192
|
summary: 'How can I track my order?',
|
|
193
193
|
details: (
|
|
194
194
|
<Typography>
|
|
195
|
-
Once your order ships, you'll receive an email with a tracking
|
|
196
|
-
|
|
197
|
-
site to track your package.
|
|
195
|
+
Once your order ships, you'll receive an email with a tracking number. You can use this number on our website
|
|
196
|
+
or the carrier's site to track your package.
|
|
198
197
|
</Typography>
|
|
199
198
|
),
|
|
200
199
|
},
|
|
@@ -235,18 +234,11 @@ function SettingsAccordion({ settings, onSettingChange }) {
|
|
|
235
234
|
<Stack gap={2}>
|
|
236
235
|
<FormControl>
|
|
237
236
|
<FormLabel>Display Name</FormLabel>
|
|
238
|
-
<Input
|
|
239
|
-
value={settings.displayName}
|
|
240
|
-
onChange={(e) => onSettingChange('displayName', e.target.value)}
|
|
241
|
-
/>
|
|
237
|
+
<Input value={settings.displayName} onChange={(e) => onSettingChange('displayName', e.target.value)} />
|
|
242
238
|
</FormControl>
|
|
243
239
|
<FormControl>
|
|
244
240
|
<FormLabel>Email</FormLabel>
|
|
245
|
-
<Input
|
|
246
|
-
type="email"
|
|
247
|
-
value={settings.email}
|
|
248
|
-
onChange={(e) => onSettingChange('email', e.target.value)}
|
|
249
|
-
/>
|
|
241
|
+
<Input type="email" value={settings.email} onChange={(e) => onSettingChange('email', e.target.value)} />
|
|
250
242
|
</FormControl>
|
|
251
243
|
</Stack>
|
|
252
244
|
),
|
|
@@ -258,16 +250,12 @@ function SettingsAccordion({ settings, onSettingChange }) {
|
|
|
258
250
|
<Checkbox
|
|
259
251
|
label="Email notifications"
|
|
260
252
|
checked={settings.emailNotifications}
|
|
261
|
-
onChange={(e) =>
|
|
262
|
-
onSettingChange('emailNotifications', e.target.checked)
|
|
263
|
-
}
|
|
253
|
+
onChange={(e) => onSettingChange('emailNotifications', e.target.checked)}
|
|
264
254
|
/>
|
|
265
255
|
<Checkbox
|
|
266
256
|
label="Push notifications"
|
|
267
257
|
checked={settings.pushNotifications}
|
|
268
|
-
onChange={(e) =>
|
|
269
|
-
onSettingChange('pushNotifications', e.target.checked)
|
|
270
|
-
}
|
|
258
|
+
onChange={(e) => onSettingChange('pushNotifications', e.target.checked)}
|
|
271
259
|
/>
|
|
272
260
|
<Checkbox
|
|
273
261
|
label="Weekly digest"
|
|
@@ -314,9 +302,7 @@ function ProductAccordion({ product }) {
|
|
|
314
302
|
const productDetails = [
|
|
315
303
|
{
|
|
316
304
|
summary: 'Description',
|
|
317
|
-
details:
|
|
318
|
-
<Typography>{product.description}</Typography>
|
|
319
|
-
),
|
|
305
|
+
details: <Typography>{product.description}</Typography>,
|
|
320
306
|
},
|
|
321
307
|
{
|
|
322
308
|
summary: 'Specifications',
|
|
@@ -345,15 +331,11 @@ function ProductAccordion({ product }) {
|
|
|
345
331
|
<Stack gap={2}>
|
|
346
332
|
<Box>
|
|
347
333
|
<Typography level="title-sm">Shipping</Typography>
|
|
348
|
-
<Typography level="body-sm">
|
|
349
|
-
Free shipping on orders over $50. Standard delivery 3-5 days.
|
|
350
|
-
</Typography>
|
|
334
|
+
<Typography level="body-sm">Free shipping on orders over $50. Standard delivery 3-5 days.</Typography>
|
|
351
335
|
</Box>
|
|
352
336
|
<Box>
|
|
353
337
|
<Typography level="title-sm">Returns</Typography>
|
|
354
|
-
<Typography level="body-sm">
|
|
355
|
-
30-day return policy. Items must be unused with original tags.
|
|
356
|
-
</Typography>
|
|
338
|
+
<Typography level="body-sm">30-day return policy. Items must be unused with original tags.</Typography>
|
|
357
339
|
</Box>
|
|
358
340
|
</Stack>
|
|
359
341
|
),
|
|
@@ -397,19 +379,13 @@ function NavigationAccordion() {
|
|
|
397
379
|
details: (
|
|
398
380
|
<List size="sm">
|
|
399
381
|
<ListItem>
|
|
400
|
-
<ListItemButton onClick={() => navigate('/products/electronics')}>
|
|
401
|
-
Electronics
|
|
402
|
-
</ListItemButton>
|
|
382
|
+
<ListItemButton onClick={() => navigate('/products/electronics')}>Electronics</ListItemButton>
|
|
403
383
|
</ListItem>
|
|
404
384
|
<ListItem>
|
|
405
|
-
<ListItemButton onClick={() => navigate('/products/clothing')}>
|
|
406
|
-
Clothing
|
|
407
|
-
</ListItemButton>
|
|
385
|
+
<ListItemButton onClick={() => navigate('/products/clothing')}>Clothing</ListItemButton>
|
|
408
386
|
</ListItem>
|
|
409
387
|
<ListItem>
|
|
410
|
-
<ListItemButton onClick={() => navigate('/products/home')}>
|
|
411
|
-
Home & Garden
|
|
412
|
-
</ListItemButton>
|
|
388
|
+
<ListItemButton onClick={() => navigate('/products/home')}>Home & Garden</ListItemButton>
|
|
413
389
|
</ListItem>
|
|
414
390
|
</List>
|
|
415
391
|
),
|
|
@@ -419,14 +395,10 @@ function NavigationAccordion() {
|
|
|
419
395
|
details: (
|
|
420
396
|
<List size="sm">
|
|
421
397
|
<ListItem>
|
|
422
|
-
<ListItemButton onClick={() => navigate('/services/consulting')}>
|
|
423
|
-
Consulting
|
|
424
|
-
</ListItemButton>
|
|
398
|
+
<ListItemButton onClick={() => navigate('/services/consulting')}>Consulting</ListItemButton>
|
|
425
399
|
</ListItem>
|
|
426
400
|
<ListItem>
|
|
427
|
-
<ListItemButton onClick={() => navigate('/services/support')}>
|
|
428
|
-
Support
|
|
429
|
-
</ListItemButton>
|
|
401
|
+
<ListItemButton onClick={() => navigate('/services/support')}>Support</ListItemButton>
|
|
430
402
|
</ListItem>
|
|
431
403
|
</List>
|
|
432
404
|
),
|
|
@@ -436,19 +408,13 @@ function NavigationAccordion() {
|
|
|
436
408
|
details: (
|
|
437
409
|
<List size="sm">
|
|
438
410
|
<ListItem>
|
|
439
|
-
<ListItemButton onClick={() => navigate('/docs')}>
|
|
440
|
-
Documentation
|
|
441
|
-
</ListItemButton>
|
|
411
|
+
<ListItemButton onClick={() => navigate('/docs')}>Documentation</ListItemButton>
|
|
442
412
|
</ListItem>
|
|
443
413
|
<ListItem>
|
|
444
|
-
<ListItemButton onClick={() => navigate('/blog')}>
|
|
445
|
-
Blog
|
|
446
|
-
</ListItemButton>
|
|
414
|
+
<ListItemButton onClick={() => navigate('/blog')}>Blog</ListItemButton>
|
|
447
415
|
</ListItem>
|
|
448
416
|
<ListItem>
|
|
449
|
-
<ListItemButton onClick={() => navigate('/tutorials')}>
|
|
450
|
-
Tutorials
|
|
451
|
-
</ListItemButton>
|
|
417
|
+
<ListItemButton onClick={() => navigate('/tutorials')}>Tutorials</ListItemButton>
|
|
452
418
|
</ListItem>
|
|
453
419
|
</List>
|
|
454
420
|
),
|
|
@@ -473,17 +439,11 @@ function HelpAccordion() {
|
|
|
473
439
|
details: (
|
|
474
440
|
<Stack gap={2}>
|
|
475
441
|
<Typography level="title-sm">Step 1: Create an Account</Typography>
|
|
476
|
-
<Typography level="body-sm">
|
|
477
|
-
Click the "Sign Up" button and fill in your details.
|
|
478
|
-
</Typography>
|
|
442
|
+
<Typography level="body-sm">Click the "Sign Up" button and fill in your details.</Typography>
|
|
479
443
|
<Typography level="title-sm">Step 2: Verify Email</Typography>
|
|
480
|
-
<Typography level="body-sm">
|
|
481
|
-
Check your inbox for a verification email and click the link.
|
|
482
|
-
</Typography>
|
|
444
|
+
<Typography level="body-sm">Check your inbox for a verification email and click the link.</Typography>
|
|
483
445
|
<Typography level="title-sm">Step 3: Complete Profile</Typography>
|
|
484
|
-
<Typography level="body-sm">
|
|
485
|
-
Add your profile picture and bio to personalize your account.
|
|
486
|
-
</Typography>
|
|
446
|
+
<Typography level="body-sm">Add your profile picture and bio to personalize your account.</Typography>
|
|
487
447
|
</Stack>
|
|
488
448
|
),
|
|
489
449
|
},
|
|
@@ -495,17 +455,13 @@ function HelpAccordion() {
|
|
|
495
455
|
<Typography level="title-sm" color="danger">
|
|
496
456
|
Can't log in?
|
|
497
457
|
</Typography>
|
|
498
|
-
<Typography level="body-sm">
|
|
499
|
-
Try resetting your password or clearing your browser cache.
|
|
500
|
-
</Typography>
|
|
458
|
+
<Typography level="body-sm">Try resetting your password or clearing your browser cache.</Typography>
|
|
501
459
|
</Box>
|
|
502
460
|
<Box>
|
|
503
461
|
<Typography level="title-sm" color="danger">
|
|
504
462
|
Page not loading?
|
|
505
463
|
</Typography>
|
|
506
|
-
<Typography level="body-sm">
|
|
507
|
-
Check your internet connection and try refreshing the page.
|
|
508
|
-
</Typography>
|
|
464
|
+
<Typography level="body-sm">Check your internet connection and try refreshing the page.</Typography>
|
|
509
465
|
</Box>
|
|
510
466
|
</Stack>
|
|
511
467
|
),
|
|
@@ -514,19 +470,11 @@ function HelpAccordion() {
|
|
|
514
470
|
summary: 'Contact Support',
|
|
515
471
|
details: (
|
|
516
472
|
<Stack gap={2}>
|
|
517
|
-
<Typography level="body-sm">
|
|
518
|
-
Need more help? Reach out to our support team:
|
|
519
|
-
</Typography>
|
|
473
|
+
<Typography level="body-sm">Need more help? Reach out to our support team:</Typography>
|
|
520
474
|
<Stack gap={1}>
|
|
521
|
-
<Typography level="body-sm">
|
|
522
|
-
|
|
523
|
-
</Typography>
|
|
524
|
-
<Typography level="body-sm">
|
|
525
|
-
💬 Live Chat: Available 9am-5pm EST
|
|
526
|
-
</Typography>
|
|
527
|
-
<Typography level="body-sm">
|
|
528
|
-
📞 Phone: 1-800-EXAMPLE
|
|
529
|
-
</Typography>
|
|
475
|
+
<Typography level="body-sm">📧 Email: support@example.com</Typography>
|
|
476
|
+
<Typography level="body-sm">💬 Live Chat: Available 9am-5pm EST</Typography>
|
|
477
|
+
<Typography level="body-sm">📞 Phone: 1-800-EXAMPLE</Typography>
|
|
530
478
|
</Stack>
|
|
531
479
|
</Stack>
|
|
532
480
|
),
|
|
@@ -571,18 +519,14 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
571
519
|
<FormLabel>First Name</FormLabel>
|
|
572
520
|
<Input
|
|
573
521
|
value={formData.personal.firstName}
|
|
574
|
-
onChange={(e) =>
|
|
575
|
-
updateField('personal', 'firstName', e.target.value)
|
|
576
|
-
}
|
|
522
|
+
onChange={(e) => updateField('personal', 'firstName', e.target.value)}
|
|
577
523
|
/>
|
|
578
524
|
</FormControl>
|
|
579
525
|
<FormControl sx={{ flex: 1 }}>
|
|
580
526
|
<FormLabel>Last Name</FormLabel>
|
|
581
527
|
<Input
|
|
582
528
|
value={formData.personal.lastName}
|
|
583
|
-
onChange={(e) =>
|
|
584
|
-
updateField('personal', 'lastName', e.target.value)
|
|
585
|
-
}
|
|
529
|
+
onChange={(e) => updateField('personal', 'lastName', e.target.value)}
|
|
586
530
|
/>
|
|
587
531
|
</FormControl>
|
|
588
532
|
</Stack>
|
|
@@ -591,9 +535,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
591
535
|
<Input
|
|
592
536
|
type="email"
|
|
593
537
|
value={formData.personal.email}
|
|
594
|
-
onChange={(e) =>
|
|
595
|
-
updateField('personal', 'email', e.target.value)
|
|
596
|
-
}
|
|
538
|
+
onChange={(e) => updateField('personal', 'email', e.target.value)}
|
|
597
539
|
/>
|
|
598
540
|
</FormControl>
|
|
599
541
|
</Stack>
|
|
@@ -605,30 +547,18 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
605
547
|
<Stack gap={2}>
|
|
606
548
|
<FormControl>
|
|
607
549
|
<FormLabel>Street Address</FormLabel>
|
|
608
|
-
<Input
|
|
609
|
-
value={formData.address.street}
|
|
610
|
-
onChange={(e) =>
|
|
611
|
-
updateField('address', 'street', e.target.value)
|
|
612
|
-
}
|
|
613
|
-
/>
|
|
550
|
+
<Input value={formData.address.street} onChange={(e) => updateField('address', 'street', e.target.value)} />
|
|
614
551
|
</FormControl>
|
|
615
552
|
<Stack direction="row" gap={2}>
|
|
616
553
|
<FormControl sx={{ flex: 2 }}>
|
|
617
554
|
<FormLabel>City</FormLabel>
|
|
618
|
-
<Input
|
|
619
|
-
value={formData.address.city}
|
|
620
|
-
onChange={(e) =>
|
|
621
|
-
updateField('address', 'city', e.target.value)
|
|
622
|
-
}
|
|
623
|
-
/>
|
|
555
|
+
<Input value={formData.address.city} onChange={(e) => updateField('address', 'city', e.target.value)} />
|
|
624
556
|
</FormControl>
|
|
625
557
|
<FormControl sx={{ flex: 1 }}>
|
|
626
558
|
<FormLabel>ZIP Code</FormLabel>
|
|
627
559
|
<Input
|
|
628
560
|
value={formData.address.zipCode}
|
|
629
|
-
onChange={(e) =>
|
|
630
|
-
updateField('address', 'zipCode', e.target.value)
|
|
631
|
-
}
|
|
561
|
+
onChange={(e) => updateField('address', 'zipCode', e.target.value)}
|
|
632
562
|
/>
|
|
633
563
|
</FormControl>
|
|
634
564
|
</Stack>
|
|
@@ -644,9 +574,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
644
574
|
<Input
|
|
645
575
|
placeholder="1234 5678 9012 3456"
|
|
646
576
|
value={formData.payment.cardNumber}
|
|
647
|
-
onChange={(e) =>
|
|
648
|
-
updateField('payment', 'cardNumber', e.target.value)
|
|
649
|
-
}
|
|
577
|
+
onChange={(e) => updateField('payment', 'cardNumber', e.target.value)}
|
|
650
578
|
/>
|
|
651
579
|
</FormControl>
|
|
652
580
|
<Stack direction="row" gap={2}>
|
|
@@ -655,9 +583,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
655
583
|
<Input
|
|
656
584
|
placeholder="MM/YY"
|
|
657
585
|
value={formData.payment.expiry}
|
|
658
|
-
onChange={(e) =>
|
|
659
|
-
updateField('payment', 'expiry', e.target.value)
|
|
660
|
-
}
|
|
586
|
+
onChange={(e) => updateField('payment', 'expiry', e.target.value)}
|
|
661
587
|
/>
|
|
662
588
|
</FormControl>
|
|
663
589
|
<FormControl sx={{ flex: 1 }}>
|
|
@@ -666,9 +592,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
666
592
|
type="password"
|
|
667
593
|
placeholder="123"
|
|
668
594
|
value={formData.payment.cvv}
|
|
669
|
-
onChange={(e) =>
|
|
670
|
-
updateField('payment', 'cvv', e.target.value)
|
|
671
|
-
}
|
|
595
|
+
onChange={(e) => updateField('payment', 'cvv', e.target.value)}
|
|
672
596
|
/>
|
|
673
597
|
</FormControl>
|
|
674
598
|
</Stack>
|
|
@@ -704,7 +628,7 @@ function MultiSectionForm({ onSubmit }) {
|
|
|
704
628
|
|
|
705
629
|
```tsx
|
|
706
630
|
interface AccordionItem {
|
|
707
|
-
summary: string;
|
|
631
|
+
summary: string; // Header text displayed when collapsed
|
|
708
632
|
details: ReactNode; // Content shown when expanded
|
|
709
633
|
}
|
|
710
634
|
|
|
@@ -803,7 +727,7 @@ Accordions includes built-in accessibility features:
|
|
|
803
727
|
<Accordions
|
|
804
728
|
items={[
|
|
805
729
|
{
|
|
806
|
-
summary: 'Shipping Information',
|
|
730
|
+
summary: 'Shipping Information', // Announced as header
|
|
807
731
|
details: <Typography>Content...</Typography>,
|
|
808
732
|
},
|
|
809
733
|
]}
|
|
@@ -969,10 +893,10 @@ const accordionItems = useMemo(
|
|
|
969
893
|
details: <ExpensiveComponent data={data2} />,
|
|
970
894
|
},
|
|
971
895
|
],
|
|
972
|
-
[data1, data2]
|
|
896
|
+
[data1, data2],
|
|
973
897
|
);
|
|
974
898
|
|
|
975
|
-
<Accordions items={accordionItems}
|
|
899
|
+
<Accordions items={accordionItems} />;
|
|
976
900
|
```
|
|
977
901
|
|
|
978
902
|
### Avoid Inline Functions in Items
|
|
@@ -984,7 +908,7 @@ const accordionItems = useMemo(
|
|
|
984
908
|
summary: item.title,
|
|
985
909
|
details: <Content data={item} />,
|
|
986
910
|
}))}
|
|
987
|
-
|
|
911
|
+
/>;
|
|
988
912
|
|
|
989
913
|
// ✅ Good: Memoized transformation
|
|
990
914
|
const items = useMemo(
|
|
@@ -993,9 +917,9 @@ const items = useMemo(
|
|
|
993
917
|
summary: item.title,
|
|
994
918
|
details: <Content data={item} />,
|
|
995
919
|
})),
|
|
996
|
-
[data]
|
|
920
|
+
[data],
|
|
997
921
|
);
|
|
998
|
-
<Accordions items={items}
|
|
922
|
+
<Accordions items={items} />;
|
|
999
923
|
```
|
|
1000
924
|
|
|
1001
925
|
### Virtualize Long Lists
|
|
@@ -1012,20 +936,13 @@ function FilteredAccordions({ allItems }) {
|
|
|
1012
936
|
const [search, setSearch] = useState('');
|
|
1013
937
|
|
|
1014
938
|
const filteredItems = useMemo(
|
|
1015
|
-
() =>
|
|
1016
|
-
|
|
1017
|
-
item.summary.toLowerCase().includes(search.toLowerCase())
|
|
1018
|
-
),
|
|
1019
|
-
[allItems, search]
|
|
939
|
+
() => allItems.filter((item) => item.summary.toLowerCase().includes(search.toLowerCase())),
|
|
940
|
+
[allItems, search],
|
|
1020
941
|
);
|
|
1021
942
|
|
|
1022
943
|
return (
|
|
1023
944
|
<Stack gap={2}>
|
|
1024
|
-
<Input
|
|
1025
|
-
placeholder="Search..."
|
|
1026
|
-
value={search}
|
|
1027
|
-
onChange={(e) => setSearch(e.target.value)}
|
|
1028
|
-
/>
|
|
945
|
+
<Input placeholder="Search..." value={search} onChange={(e) => setSearch(e.target.value)} />
|
|
1029
946
|
<Accordions items={filteredItems.slice(0, 10)} />
|
|
1030
947
|
{filteredItems.length > 10 && (
|
|
1031
948
|
<Typography level="body-sm" color="neutral">
|