@ceed/ads 1.30.0 → 1.31.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.
Files changed (71) hide show
  1. package/dist/Overview.md +5 -5
  2. package/dist/components/Calendar/utils/index.d.ts +1 -0
  3. package/dist/components/DatePicker/DatePicker.d.ts +4 -0
  4. package/dist/components/DateRangePicker/DateRangePicker.d.ts +4 -0
  5. package/dist/components/MonthRangePicker/MonthRangePicker.d.ts +8 -0
  6. package/dist/components/data-display/Avatar.md +85 -74
  7. package/dist/components/data-display/Badge.md +23 -5
  8. package/dist/components/data-display/Chip.md +49 -35
  9. package/dist/components/data-display/DataTable.md +93 -0
  10. package/dist/components/data-display/InfoSign.md +15 -5
  11. package/dist/components/data-display/Markdown.md +22 -26
  12. package/dist/components/data-display/Table.md +63 -53
  13. package/dist/components/data-display/Tooltip.md +70 -58
  14. package/dist/components/data-display/Typography.md +28 -11
  15. package/dist/components/feedback/Alert.md +86 -74
  16. package/dist/components/feedback/CircularProgress.md +20 -5
  17. package/dist/components/feedback/Dialog.md +8 -12
  18. package/dist/components/feedback/Modal.md +12 -16
  19. package/dist/components/feedback/Skeleton.md +20 -5
  20. package/dist/components/inputs/Autocomplete.md +8 -10
  21. package/dist/components/inputs/Button.md +107 -87
  22. package/dist/components/inputs/ButtonGroup.md +20 -5
  23. package/dist/components/inputs/Calendar.md +25 -5
  24. package/dist/components/inputs/Checkbox.md +171 -450
  25. package/dist/components/inputs/CurrencyInput.md +25 -5
  26. package/dist/components/inputs/DatePicker.md +59 -5
  27. package/dist/components/inputs/DateRangePicker.md +46 -5
  28. package/dist/components/inputs/FilterMenu.md +85 -9
  29. package/dist/components/inputs/FilterableCheckboxGroup.md +23 -8
  30. package/dist/components/inputs/FormControl.md +34 -6
  31. package/dist/components/inputs/IconButton.md +21 -5
  32. package/dist/components/inputs/Input.md +254 -68
  33. package/dist/components/inputs/MonthPicker.md +59 -5
  34. package/dist/components/inputs/MonthRangePicker.md +44 -5
  35. package/dist/components/inputs/PercentageInput.md +28 -5
  36. package/dist/components/inputs/RadioButton.md +26 -5
  37. package/dist/components/inputs/RadioList.md +23 -6
  38. package/dist/components/inputs/RadioTileGroup.md +40 -8
  39. package/dist/components/inputs/Select.md +59 -5
  40. package/dist/components/inputs/Slider.md +26 -5
  41. package/dist/components/inputs/Switch.md +23 -5
  42. package/dist/components/inputs/Textarea.md +27 -5
  43. package/dist/components/inputs/Uploader/Uploader.md +24 -5
  44. package/dist/components/layout/Box.md +66 -58
  45. package/dist/components/layout/Container.md +9 -13
  46. package/dist/components/layout/Grid.md +91 -75
  47. package/dist/components/layout/Stack.md +85 -70
  48. package/dist/components/navigation/Breadcrumbs.md +23 -14
  49. package/dist/components/navigation/Dropdown.md +29 -20
  50. package/dist/components/navigation/IconMenuButton.md +24 -11
  51. package/dist/components/navigation/InsetDrawer.md +16 -5
  52. package/dist/components/navigation/Link.md +30 -14
  53. package/dist/components/navigation/Menu.md +33 -20
  54. package/dist/components/navigation/MenuButton.md +26 -12
  55. package/dist/components/navigation/NavigationGroup.md +7 -11
  56. package/dist/components/navigation/NavigationItem.md +8 -12
  57. package/dist/components/navigation/Navigator.md +5 -9
  58. package/dist/components/navigation/Pagination.md +21 -12
  59. package/dist/components/navigation/ProfileMenu.md +17 -5
  60. package/dist/components/navigation/Stepper.md +18 -5
  61. package/dist/components/navigation/Tabs.md +37 -14
  62. package/dist/components/surfaces/Accordions.md +12 -16
  63. package/dist/components/surfaces/Card.md +59 -47
  64. package/dist/components/surfaces/Divider.md +70 -61
  65. package/dist/components/surfaces/Sheet.md +18 -5
  66. package/dist/index.browser.js +4 -4
  67. package/dist/index.browser.js.map +3 -3
  68. package/dist/index.cjs +99 -39
  69. package/dist/index.js +99 -39
  70. package/framer/index.js +1 -1
  71. package/package.json +1 -1
@@ -172,9 +172,7 @@ When `useMinorUnit` is true, the component converts between display values and m
172
172
  <CurrencyInput currency="KRW" useMinorUnit value={10000} />
173
173
  ```
174
174
 
175
- ## Common Use Cases
176
-
177
- ### Product Price Editor
175
+ ## Product Price Editor
178
176
 
179
177
  ```tsx
180
178
  function ProductPriceEditor() {
@@ -202,7 +200,7 @@ function ProductPriceEditor() {
202
200
  }
203
201
  ```
204
202
 
205
- ### Invoice Line Item
203
+ ## Invoice Line Item
206
204
 
207
205
  ```tsx
208
206
  function InvoiceLineItem({ item, onChange }) {
@@ -221,7 +219,7 @@ function InvoiceLineItem({ item, onChange }) {
221
219
  }
222
220
  ```
223
221
 
224
- ### Budget Limit Input
222
+ ## Budget Limit Input
225
223
 
226
224
  ```tsx
227
225
  function BudgetSetting() {
@@ -261,6 +259,28 @@ function BudgetSetting() {
261
259
 
262
260
  5. **Handle negative values carefully**: CurrencyInput supports negative values. If negatives are not valid for your use case, validate in `onChange`.
263
261
 
262
+ ## Props and Customization
263
+
264
+ ### Key Props
265
+
266
+ | Prop | Type | Default | Description |
267
+ | -------------- | -------------------------------------------------------- | ------- | -------------------------------------------------------- |
268
+ | `value` | `number` | - | Currency value (controlled mode) |
269
+ | `defaultValue` | `number` | - | Initial currency value (uncontrolled mode) |
270
+ | `onChange` | `(event: { target: { name?, value?: number } }) => void` | - | Callback when the value changes |
271
+ | `currency` | `'USD' \| 'KRW' \| 'CAD'` | `'USD'` | Currency code (determines symbol and formatting) |
272
+ | `useMinorUnit` | `boolean` | `false` | When true, value is in minor units (e.g., cents for USD) |
273
+ | `max` | `number` | - | Maximum allowed value |
274
+ | `label` | `ReactNode` | - | Form label displayed above the input |
275
+ | `helperText` | `ReactNode` | - | Helper text displayed below the input |
276
+ | `error` | `boolean` | `false` | Applies danger color to indicate validation error |
277
+ | `required` | `boolean` | `false` | Marks the field as required |
278
+ | `disabled` | `boolean` | `false` | Disables the input |
279
+ | `name` | `string` | - | HTML name attribute for form submission |
280
+ | `placeholder` | `string` | - | Placeholder text when the input is empty |
281
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Input size |
282
+ | `sx` | `SxProps` | - | Custom styles using the MUI system |
283
+
264
284
  ## Accessibility
265
285
 
266
286
  - The input has `role="textbox"` with proper labeling via the `label` prop.
@@ -347,9 +347,7 @@ Multiple DatePicker instances can share the same value for dependent field scena
347
347
  </Stack>
348
348
  ```
349
349
 
350
- ## Common Use Cases
351
-
352
- ### Form with Validation
350
+ ## Form with Validation
353
351
 
354
352
  ```tsx
355
353
  function BookingForm() {
@@ -382,7 +380,7 @@ function BookingForm() {
382
380
  }
383
381
  ```
384
382
 
385
- ### Custom Date Disabling (Weekdays Only)
383
+ ## Custom Date Disabling (Weekdays Only)
386
384
 
387
385
  ```tsx
388
386
  function AppointmentPicker() {
@@ -406,7 +404,7 @@ function AppointmentPicker() {
406
404
  }
407
405
  ```
408
406
 
409
- ### Locale-Aware Display
407
+ ## Locale-Aware Display
410
408
 
411
409
  ```tsx
412
410
  function RegionalDateField({ locale }: { locale: string }) {
@@ -480,6 +478,62 @@ function RegionalDateField({ locale }: { locale: string }) {
480
478
  <DatePicker value={invalidDate} />
481
479
  ```
482
480
 
481
+ ## Props and Customization
482
+
483
+ ### Key Props
484
+
485
+ | Prop | Type | Default | Description |
486
+ | ------------------- | ------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
487
+ | `value` | `string` | - | Selected date string in `format` (controlled mode) |
488
+ | `defaultValue` | `string` | `''` | Initial date string (uncontrolled mode) |
489
+ | `onChange` | `(event: { target: { name?, value: string } }) => void` | - | Callback when the date changes. Value is in `format` |
490
+ | `format` | `string` | `'YYYY/MM/DD'` | Format of the `value` and `onChange` value. Determines the internal data format |
491
+ | `displayFormat` | `string` | `'YYYY/MM/DD'` | Format displayed in the input field. Can differ from `format` for locale display. Supports `MMM` (short month name) and `MMMM` (full month name) tokens |
492
+ | `locale` | `string` | `'default'` | Locale for month names when using `MMM`/`MMMM` tokens in `displayFormat` (BCP 47 format, e.g., `'en-US'`, `'ko-KR'`) |
493
+ | `label` | `ReactNode` | - | Form label displayed above the input |
494
+ | `helperText` | `ReactNode` | - | Helper text displayed below the input |
495
+ | `error` | `boolean` | `false` | Applies danger color to indicate validation error |
496
+ | `required` | `boolean` | `false` | Marks the field as required (adds asterisk to label) |
497
+ | `disabled` | `boolean` | `false` | Disables the entire component |
498
+ | `name` | `string` | - | HTML name attribute for form submission |
499
+ | `minDate` | `string` | - | Minimum selectable date (in `format`) |
500
+ | `maxDate` | `string` | - | Maximum selectable date (in `format`) |
501
+ | `disableFuture` | `boolean` | `false` | Disables all future dates |
502
+ | `disablePast` | `boolean` | `false` | Disables all past dates |
503
+ | `shouldDisableDate` | `(date: string) => boolean` | - | Custom function to disable specific dates. Receives date in `format`. Return `true` to disable |
504
+ | `inputReadOnly` | `boolean` | `false` | Prevents keyboard typing in the input (users must use the calendar popup) |
505
+ | `hideClearButton` | `boolean` | `false` | Hides the clear button in the calendar popup |
506
+
507
+ ### format vs displayFormat
508
+
509
+ | Prop | Controls | Example |
510
+ | --------------- | ------------------------------------------------------ | ------------------------------------------------- |
511
+ | `format` | Value in `onChange`, `value`, and `defaultValue` props | `'YYYY-MM-DD'` → onChange receives `'2024-05-03'` |
512
+ | `displayFormat` | What the user sees in the input field | `'MM/DD/YYYY'` → input shows `05/03/2024` |
513
+
514
+ When both are set, the component converts between formats internally. This lets you keep a consistent API format while showing locale-appropriate display.
515
+
516
+ ### Alphabetic Month Tokens (MMM / MMMM)
517
+
518
+ The `displayFormat` prop supports alphabetic month tokens for more human-readable date display:
519
+
520
+ | Token | Output | Example |
521
+ | ------ | ---------------------- | ------------------------------ |
522
+ | `MMM` | Abbreviated month name | `Jan`, `Feb`, `Apr` |
523
+ | `MMMM` | Full month name | `January`, `February`, `April` |
524
+
525
+ When `displayFormat` contains `MMM` or `MMMM`, the input becomes **read-only** and the user must select a date through the calendar popup. Use the `locale` prop to control the language of month names (e.g., `locale="ko-KR"` for Korean month names).
526
+
527
+ ```tsx
528
+ <DatePicker displayFormat="MMM DD, YYYY" locale="en-US" />
529
+ // → "Apr 09, 2026"
530
+
531
+ <DatePicker displayFormat="MMMM DD, YYYY" locale="ko-KR" />
532
+ // → "4월 09, 2026"
533
+ ```
534
+
535
+ > **Note**: DatePicker also accepts all Input props (e.g., `size`, `variant`, `color`, `startDecorator`, `placeholder`, `sx`).
536
+
483
537
  ## Accessibility
484
538
 
485
539
  - **Keyboard navigation**: Tab moves focus between the input and the calendar toggle button. Arrow keys navigate dates within the open calendar. Enter selects the focused date, and Escape closes the calendar popup.
@@ -429,9 +429,7 @@ Example of integrating an external reset button to clear the selected date range
429
429
  </div>
430
430
  ```
431
431
 
432
- ## Common Use Cases
433
-
434
- ### Booking Form
432
+ ## Booking Form
435
433
 
436
434
  ```tsx
437
435
  function BookingForm() {
@@ -465,7 +463,7 @@ function BookingForm() {
465
463
  }
466
464
  ```
467
465
 
468
- ### Report Date Filter
466
+ ## Report Date Filter
469
467
 
470
468
  ```tsx
471
469
  function ReportFilters({ onFilter }) {
@@ -493,7 +491,7 @@ function ReportFilters({ onFilter }) {
493
491
  }
494
492
  ```
495
493
 
496
- ### Separate API and Display Formats
494
+ ## Separate API and Display Formats
497
495
 
498
496
  ```tsx
499
497
  function DataExport() {
@@ -562,6 +560,49 @@ const getDuration = (value) => {
562
560
  <DateRangePicker helperText={getDuration(dateRange)} />
563
561
  ```
564
562
 
563
+ ## Props and Customization
564
+
565
+ ### Key Props
566
+
567
+ | Prop | Type | Default | Description |
568
+ | ----------------- | ------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------- |
569
+ | `value` | `string` | - | Selected date range string in `format` (controlled mode) |
570
+ | `defaultValue` | `string` | `''` | Initial date range string (uncontrolled mode) |
571
+ | `onChange` | `(event: { target: { name?, value: string } }) => void` | - | Callback when the date range changes |
572
+ | `format` | `string` | `'YYYY/MM/DD'` | Format of the `value` and `onChange` value |
573
+ | `displayFormat` | `string` | `'YYYY/MM/DD'` | Format displayed in the input field. Supports `MMM` (short month name) and `MMMM` (full month name) tokens |
574
+ | `locale` | `string` | `'default'` | Locale for month names when using `MMM`/`MMMM` tokens in `displayFormat` (BCP 47 format, e.g., `'en-US'`, `'ko-KR'`) |
575
+ | `label` | `ReactNode` | - | Form label displayed above the input |
576
+ | `helperText` | `ReactNode` | - | Helper text displayed below the input |
577
+ | `error` | `boolean` | `false` | Applies danger color to indicate validation error |
578
+ | `required` | `boolean` | `false` | Marks the field as required |
579
+ | `disabled` | `boolean` | `false` | Disables the entire component |
580
+ | `name` | `string` | - | HTML name attribute for form submission |
581
+ | `minDate` | `string` | - | Minimum selectable date (in `format`) |
582
+ | `maxDate` | `string` | - | Maximum selectable date (in `format`) |
583
+ | `disableFuture` | `boolean` | `false` | Disables all future dates |
584
+ | `disablePast` | `boolean` | `false` | Disables all past dates |
585
+ | `inputReadOnly` | `boolean` | `false` | Prevents keyboard typing (calendar-only input) |
586
+ | `hideClearButton` | `boolean` | `false` | Hides the clear button in the calendar popup |
587
+
588
+ ### Alphabetic Month Tokens (MMM / MMMM)
589
+
590
+ The `displayFormat` prop supports alphabetic month tokens for more human-readable date display:
591
+
592
+ | Token | Output | Example |
593
+ | ------ | ---------------------- | ------------------------------ |
594
+ | `MMM` | Abbreviated month name | `Jan`, `Feb`, `Apr` |
595
+ | `MMMM` | Full month name | `January`, `February`, `April` |
596
+
597
+ When `displayFormat` contains `MMM` or `MMMM`, the input becomes **read-only** and the user must select dates through the calendar popup. Use the `locale` prop to control the language of month names.
598
+
599
+ ```tsx
600
+ <DateRangePicker displayFormat="MMM DD, YYYY" locale="en-US" />
601
+ // → "Apr 01, 2026 - Apr 09, 2026"
602
+ ```
603
+
604
+ > **Note**: DateRangePicker also accepts all Input props (e.g., `size`, `variant`, `color`, `sx`).
605
+
565
606
  ## Accessibility
566
607
 
567
608
  - The input has `role="textbox"` and the calendar button has `aria-label="Toggle Calendar"` for screen reader identification.
@@ -199,9 +199,7 @@ A searchable single-select filter with autocomplete support.
199
199
  }
200
200
  ```
201
201
 
202
- ## Examples
203
-
204
- ### Controlled Mode
202
+ ## Controlled FilterMenu
205
203
 
206
204
  In controlled mode, you manage the filter state externally using `values` (or `defaultValues` with an `onChange` handler).
207
205
 
@@ -212,7 +210,7 @@ In controlled mode, you manage the filter state externally using `values` (or `d
212
210
  }} />
213
211
  ```
214
212
 
215
- ### Uncontrolled Mode
213
+ ## Uncontrolled FilterMenu
216
214
 
217
215
  In uncontrolled mode, FilterMenu manages its own internal state. This is useful when you only need the final filter values on submission.
218
216
 
@@ -220,9 +218,7 @@ In uncontrolled mode, FilterMenu manages its own internal state. This is useful
220
218
  <FilterMenu />
221
219
  ```
222
220
 
223
- ## Common Use Cases
224
-
225
- ### Table Filters
221
+ ## Table Filters
226
222
 
227
223
  ```tsx
228
224
  function DataTable() {
@@ -266,7 +262,7 @@ function DataTable() {
266
262
  }
267
263
  ```
268
264
 
269
- ### Dashboard Filters
265
+ ## Dashboard Filters
270
266
 
271
267
  ```tsx
272
268
  function DashboardFilters({ onFilterChange }) {
@@ -300,7 +296,7 @@ function DashboardFilters({ onFilterChange }) {
300
296
  }
301
297
  ```
302
298
 
303
- ### Invoice Filters
299
+ ## Invoice Filters
304
300
 
305
301
  ```tsx
306
302
  function InvoiceFilters({ onFilterChange }) {
@@ -372,6 +368,86 @@ filters={[
372
368
 
373
369
  5. **Prefer controlled mode for complex state**: When filter values need to be synced with URL parameters, API requests, or other UI elements, use the controlled pattern with `values` and `onChange`.
374
370
 
371
+ ## Props and Customization
372
+
373
+ ### FilterMenu Props
374
+
375
+ | Prop | Type | Default | Description |
376
+ | --------------- | --------------------------------------- | ------- | ------------------------------------------------------ |
377
+ | `filters` | `FilterItem[]` | `[]` | Array of filter item configurations |
378
+ | `values` | `Record<string, any>` | - | Controlled filter values (keyed by filter `id`) |
379
+ | `defaultValues` | `Record<string, any>` | - | Initial filter values for uncontrolled mode |
380
+ | `resetValues` | `Record<string, any>` | `{}` | Values applied when Reset/Clear button is clicked |
381
+ | `onChange` | `(values: Record<string, any>) => void` | - | Callback when Apply button is clicked |
382
+ | `onClose` | `() => void` | - | Callback when the filter panel closes |
383
+ | `useReset` | `boolean` | `false` | Show a Reset button (requires 2+ filters) |
384
+ | `useClear` | `boolean` | `false` | Show a Clear button (for single-filter scenarios only) |
385
+
386
+ ### FilterItem Union Type
387
+
388
+ All filter items share a base shape with `id`, `label`, `hidden`, `value`, and `onChange`. The `type` field determines the specific filter UI:
389
+
390
+ ```tsx
391
+ type FilterItem =
392
+ | FilterCheckboxGroupItem
393
+ | FilterableCheckboxGroupItem
394
+ | FilterRadioGroupItem
395
+ | FilterDateRangeItem
396
+ | FilterCurrencyInputItem
397
+ | FilterCurrencyRangeItem
398
+ | FilterPercentageInputItem
399
+ | FilterPercentageRangeItem
400
+ | FilterAutocompleteItem;
401
+ ```
402
+
403
+ ### Filter Item Types Reference
404
+
405
+ | Type | Value Type | Description |
406
+ | ----------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
407
+ | `'checkbox-group'` | `(string \| number)[]` | Multi-select with checkboxes |
408
+ | `'filterable-checkbox-group'` | `string[]` | Searchable multi-select with checkboxes. Supports `placeholder` and `maxHeight` |
409
+ | `'radio-group'` | `string \| number` | Single-select with radio buttons |
410
+ | `'date-range'` | `[string, string]` | Date range picker. Supports `displayFormat`, `inputReadOnly`, `hideClearButton`, `minDate`, `maxDate`, `disableFuture`, `disablePast` |
411
+ | `'currency-input'` | `number` | Single currency value. Supports `currency`, `useMinorUnit`, `max`, `placeholder` |
412
+ | `'currency-range'` | `[number, number]` | Currency range (min/max). Supports same props as currency-input |
413
+ | `'percentage-input'` | `number` | Single percentage value. Supports `useMinorUnit`, `maxDecimalScale`, `min`, `max`, `placeholder` |
414
+ | `'percentage-range'` | `[number, number]` | Percentage range (min/max). Supports same props as percentage-input |
415
+ | `'autocomplete'` | `string \| number` | Searchable single-select. Supports `options`, `multiple`, `placeholder` |
416
+
417
+ ### Filter Item Common Props
418
+
419
+ | Prop | Type | Default | Description |
420
+ | ---------- | ----------------- | ---------- | ---------------------------------------------------------- |
421
+ | `id` | `string` | (required) | Unique identifier — used as the key in values/onChange |
422
+ | `label` | `string` | (required) | Display label for the filter section |
423
+ | `hidden` | `boolean` | `false` | Hide the filter without removing it from the configuration |
424
+ | `value` | varies by type | - | Controlled value for individual filter |
425
+ | `onChange` | `(value) => void` | - | Individual change handler (only in controlled mode) |
426
+
427
+ ### Complete Filter Item Examples
428
+
429
+ ```tsx
430
+ // checkbox-group
431
+ { id: 'status', type: 'checkbox-group', label: 'Status',
432
+ options: [{ label: 'Active', value: 'active' }, { label: 'Inactive', value: 'inactive' }] }
433
+
434
+ // filterable-checkbox-group with maxHeight
435
+ { id: 'categories', type: 'filterable-checkbox-group', label: 'Categories',
436
+ options: categories, placeholder: 'Search...', maxHeight: 200 }
437
+
438
+ // date-range with display format
439
+ { id: 'dateRange', type: 'date-range', label: 'Date Range',
440
+ displayFormat: 'MM/DD/YYYY', inputReadOnly: true }
441
+
442
+ // currency-range with minor units
443
+ { id: 'amount', type: 'currency-range', label: 'Amount',
444
+ currency: 'USD', useMinorUnit: true }
445
+
446
+ // autocomplete
447
+ { id: 'category', type: 'autocomplete', label: 'Category',
448
+ options: ['Cat 1', 'Cat 2', 'Cat 3'], placeholder: 'Select...' }
449
+ ```
450
+
375
451
  ## Accessibility
376
452
 
377
453
  - Each filter section is labeled with its `label` prop, providing clear context for screen readers.
@@ -6,10 +6,10 @@ FilterableCheckboxGroup is a multi-select component that combines a search input
6
6
 
7
7
  Key capabilities include a "Select all" toggle for bulk selection, automatic sorting (selected items first, then alphabetical), customizable list height, and built-in form integration via `label`, `helperText`, and `required` props. The component accepts options as either simple strings or `{ value, label }` objects.
8
8
 
9
- > **Form 구성 내장 prop 사용을 권장합니다**
9
+ > **Using built-in props is recommended when building forms**
10
10
  >
11
- > 컴포넌트는 `label`, `helperText` 등의 Form 요소를 자체적으로 지원합니다.
12
- > Form을 구성할 Typography로 별도의 label이나 helperText를 만드는 대신, 컴포넌트의 내장 prop을 사용하세요.
11
+ > This component provides built-in form-related props such as `label` and `helperText`.
12
+ > When building a form, use the component's built-in props instead of creating separate labels or helper text with Typography.
13
13
 
14
14
  ```tsx
15
15
  <FilterableCheckboxGroup
@@ -224,9 +224,7 @@ The component supports both full and partial disabling.
224
224
  </Stack>
225
225
  ```
226
226
 
227
- ## Common Use Cases
228
-
229
- ### Filter Panel
227
+ ## Filter Panel
230
228
 
231
229
  Use FilterableCheckboxGroup in a sidebar or panel to let users filter a data table or list by multiple criteria.
232
230
 
@@ -254,7 +252,7 @@ function FilterPanel({ categories, onFilterChange }) {
254
252
  }
255
253
  ```
256
254
 
257
- ### User Role Assignment
255
+ ## User Role Assignment
258
256
 
259
257
  Assign multiple roles to a user from a searchable list.
260
258
 
@@ -276,7 +274,7 @@ Assign multiple roles to a user from a searchable list.
276
274
  />
277
275
  ```
278
276
 
279
- ### Region / Country Selection
277
+ ## Region / Country Selection
280
278
 
281
279
  When dealing with a large set of options like countries, the search filter and virtual scrolling work together for fast selection.
282
280
 
@@ -310,6 +308,23 @@ When dealing with a large set of options like countries, the search filter and v
310
308
 
311
309
  5. **Keep option labels concise.** Long labels will be truncated with an ellipsis. If detailed descriptions are needed, consider using a tooltip or a separate detail view.
312
310
 
311
+ ## Props and Customization
312
+
313
+ ### Key Props
314
+
315
+ | Prop | Type | Default | Description |
316
+ | ------------- | -------------------------------------------------------- | ---------- | --------------------------------------------------- |
317
+ | `options` | `{ value: string; label: string; disabled?: boolean }[]` | (required) | Array of checkbox options |
318
+ | `value` | `string[]` | - | Selected values (controlled mode) |
319
+ | `onChange` | `(value: string[]) => void` | - | Callback when selection changes |
320
+ | `label` | `ReactNode` | - | Group label displayed above the component |
321
+ | `helperText` | `ReactNode` | - | Helper text displayed below the component |
322
+ | `placeholder` | `string` | - | Placeholder text for the search input |
323
+ | `required` | `boolean` | `false` | Marks the field as required |
324
+ | `disabled` | `boolean` | `false` | Disables all checkboxes |
325
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Component size |
326
+ | `maxHeight` | `string \| number` | `300` | Maximum height of the options list before scrolling |
327
+
313
328
  ## Accessibility
314
329
 
315
330
  - The search input is labeled by the component's `label` prop, ensuring screen readers announce its purpose.
@@ -224,9 +224,7 @@ FormHelperText provides supplementary guidance below the input. It automatically
224
224
  </FormControl>
225
225
  ```
226
226
 
227
- ## Common Use Cases
228
-
229
- ### Registration Form
227
+ ## Registration Form
230
228
 
231
229
  ```tsx
232
230
  function RegistrationForm() {
@@ -260,7 +258,7 @@ function RegistrationForm() {
260
258
  }
261
259
  ```
262
260
 
263
- ### Settings Form with Mixed Controls
261
+ ## Settings Form with Mixed Controls
264
262
 
265
263
  ```tsx
266
264
  function SettingsForm() {
@@ -294,8 +292,8 @@ function SettingsForm() {
294
292
 
295
293
  > **Tip: Use built-in form props instead**
296
294
  >
297
- > Input, Select, Textarea, DatePicker Input 계열 컴포넌트는 `label`, `helperText` prop을 자체적으로 지원합니다.
298
- > 간단한 form 필드에는 컴포넌트의 내장 prop을 사용하는 것이 간결합니다.
295
+ > Input-family components such as Input, Select, Textarea, and DatePicker support `label` and `helperText` props directly.
296
+ > For simple form fields, using each component's built-in props is more concise.
299
297
  >
300
298
  > ```tsx
301
299
  > // ✅ Simpler: built-in props
@@ -352,6 +350,36 @@ function SettingsForm() {
352
350
 
353
351
  5. **Provide helpful error messages**: When using the error state, always include a FormHelperText explaining what went wrong and how to fix it.
354
352
 
353
+ ## Props and Customization
354
+
355
+ ### FormControl Props
356
+
357
+ | Prop | Type | Default | Description |
358
+ | ------------- | -------------------------------------------------------------- | ------------ | ----------------------------------------------------------------- |
359
+ | `children` | `ReactNode` | - | Form field elements (FormLabel, Input, FormHelperText, etc.) |
360
+ | `error` | `boolean` | `false` | Applies error styling to child components |
361
+ | `disabled` | `boolean` | `false` | Disables all child form elements |
362
+ | `required` | `boolean` | `false` | Adds required indicator to FormLabel and `aria-required` to input |
363
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size applied to child components |
364
+ | `color` | `'primary' \| 'neutral' \| 'danger' \| 'success' \| 'warning'` | `'neutral'` | Color scheme |
365
+ | `orientation` | `'horizontal' \| 'vertical'` | `'vertical'` | Layout direction |
366
+ | `sx` | `SxProps` | - | Custom styles using the MUI system |
367
+
368
+ ### FormLabel Props
369
+
370
+ | Prop | Type | Default | Description |
371
+ | ---------- | ----------- | ------- | ------------------------------------------------------- |
372
+ | `children` | `ReactNode` | - | Label text |
373
+ | `required` | `boolean` | - | Shows asterisk (inherited from FormControl when nested) |
374
+
375
+ ### FormHelperText Props
376
+
377
+ | Prop | Type | Default | Description |
378
+ | ---------- | ----------- | ------- | ---------------------------- |
379
+ | `children` | `ReactNode` | - | Helper or error message text |
380
+
381
+ > **Note**: FormControl, FormLabel, and FormHelperText accept all their respective Joy UI props.
382
+
355
383
  ## Accessibility
356
384
 
357
385
  - FormControl automatically associates FormLabel with the input using `htmlFor` and `id`.
@@ -294,9 +294,7 @@ A practical example of IconButton used for common CRUD operations with distinct
294
294
  </div>
295
295
  ```
296
296
 
297
- ## Common Use Cases
298
-
299
- ### Table Row Actions
297
+ ## Table Row Actions
300
298
 
301
299
  ```tsx
302
300
  import { IconButton, Tooltip } from '@ceed/ads';
@@ -327,7 +325,7 @@ function RowActions({ onView, onEdit, onDelete }) {
327
325
  }
328
326
  ```
329
327
 
330
- ### Dialog Close Button
328
+ ## Dialog Close Button
331
329
 
332
330
  ```tsx
333
331
  import CloseIcon from '@mui/icons-material/Close';
@@ -344,7 +342,7 @@ import CloseIcon from '@mui/icons-material/Close';
344
342
  </IconButton>
345
343
  ```
346
344
 
347
- ### Navigation Back Button
345
+ ## Navigation Back Button
348
346
 
349
347
  ```tsx
350
348
  import ArrowBackIcon from '@mui/icons-material/ArrowBack';
@@ -402,6 +400,24 @@ import ArrowBackIcon from '@mui/icons-material/ArrowBack';
402
400
 
403
401
  5. **Maintain consistent sizing within the same context.** Use the same `size` and `variant` for all IconButtons in a toolbar or action group to keep the interface clean and predictable.
404
402
 
403
+ ## Props and Customization
404
+
405
+ ### Key Props
406
+
407
+ | Prop | Type | Default | Description |
408
+ | ----------- | -------------------------------------------------------------- | ----------- | ---------------------------------------- |
409
+ | `children` | `ReactNode` | - | Icon element to render inside the button |
410
+ | `variant` | `'solid' \| 'soft' \| 'outlined' \| 'plain'` | `'plain'` | Visual style |
411
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Button size |
412
+ | `color` | `'primary' \| 'neutral' \| 'danger' \| 'success' \| 'warning'` | `'neutral'` | Color scheme |
413
+ | `disabled` | `boolean` | `false` | Disables the button |
414
+ | `loading` | `boolean` | `false` | Shows a loading indicator |
415
+ | `component` | `ElementType` | `'button'` | Root element type (polymorphic) |
416
+ | `onClick` | `(event: MouseEvent) => void` | - | Click event handler |
417
+ | `sx` | `SxProps` | - | Custom styles using the MUI system |
418
+
419
+ > **Note**: IconButton also accepts all Joy UI IconButton props and Framer Motion props.
420
+
405
421
  ## Accessibility
406
422
 
407
423
  - **`aria-label` is essential**: Every IconButton must have either an `aria-label`, `aria-labelledby`, or a wrapping Tooltip with `title` to provide a text alternative for screen readers.