@central-design-system/components 4.0.0-alpha.11 → 4.0.0-alpha.12

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 (122) hide show
  1. package/dist/browser/entry.js +2 -2
  2. package/dist/cds.d.ts +1 -1
  3. package/dist/cjs/entry.js +3 -3
  4. package/dist/es/entry.css +3 -2
  5. package/dist/es/entry.js +1 -1
  6. package/dist/es/src/cds.js +5 -5
  7. package/dist/es/src/components/CdsApp/CdsApp.css +2 -2
  8. package/dist/es/src/components/CdsApp/CdsApp.vue_vue_type_script_setup_true_lang.js +1 -1
  9. package/dist/es/src/components/CdsApp/api/CdsApp.props.js +1 -1
  10. package/dist/es/src/components/CdsAvatar/CdsAvatar.vue_vue_type_script_setup_true_lang.js +1 -1
  11. package/dist/es/src/components/CdsAvatar/api/CdsAvatar.props.js +1 -1
  12. package/dist/es/src/components/CdsBadge/CdsBadge.vue_vue_type_script_setup_true_lang.js +1 -1
  13. package/dist/es/src/components/CdsBadge/api/CdsBadge.props.js +1 -1
  14. package/dist/es/src/components/CdsButton/CdsButton.vue_vue_type_script_setup_true_lang.js +1 -1
  15. package/dist/es/src/components/CdsButton/api/CdsButton.props.js +1 -1
  16. package/dist/es/src/components/CdsButtonGroup/CdsButtonGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/es/src/components/CdsButtonGroup/api/CdsButtonGroup.props.js +1 -1
  18. package/dist/es/src/components/CdsCard/CdsCard.vue_vue_type_script_setup_true_lang.js +1 -1
  19. package/dist/es/src/components/CdsCard/CdsCardGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  20. package/dist/es/src/components/CdsCard/api/CdsCard.props.js +1 -1
  21. package/dist/es/src/components/CdsDatePicker/CdsDatePicker.vue_vue_type_script_setup_true_lang.js +1 -1
  22. package/dist/es/src/components/CdsDatePicker/api/CdsDatePicker.props.js +1 -1
  23. package/dist/es/src/components/CdsDivider/CdsDivider.vue_vue_type_script_setup_true_lang.js +1 -1
  24. package/dist/es/src/components/CdsDrawer/CdsDrawer.vue_vue_type_script_setup_true_lang.js +2 -2
  25. package/dist/es/src/components/CdsDrawer/api/CdsDrawer.props.js +1 -1
  26. package/dist/es/src/components/CdsEmptyState/CdsEmptyState.vue_vue_type_script_setup_true_lang.js +2 -2
  27. package/dist/es/src/components/CdsEmptyState/api/CdsEmptyState.props.js +1 -1
  28. package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanels.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/dist/es/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.js +1 -1
  30. package/dist/es/src/components/CdsField/CdsField.vue_vue_type_script_setup_true_lang.js +1 -1
  31. package/dist/es/src/components/CdsField/api/CdsField.props.js +1 -1
  32. package/dist/es/src/components/CdsFooter/CdsFooter.vue_vue_type_script_setup_true_lang.js +2 -2
  33. package/dist/es/src/components/CdsFooter/api/CdsFooter.props.js +1 -1
  34. package/dist/es/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.js +1 -1
  35. package/dist/es/src/components/CdsGrid/CdsCol.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/es/src/components/CdsHeader/CdsHeader.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/dist/es/src/components/CdsHeader/api/CdsHeader.props.js +1 -1
  38. package/dist/es/src/components/CdsIcon/CdsIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  39. package/dist/es/src/components/CdsIcon/api/CdsIcon.props.js +1 -1
  40. package/dist/es/src/components/CdsImage/CdsImage.vue_vue_type_script_setup_true_lang.js +1 -1
  41. package/dist/es/src/components/CdsImage/api/CdsImage.props.js +1 -1
  42. package/dist/es/src/components/CdsInput/CdsInput.vue_vue_type_script_setup_true_lang.js +1 -1
  43. package/dist/es/src/components/CdsInput/api/CdsInput.props.js +1 -1
  44. package/dist/es/src/components/CdsLayout/CdsLayout.vue_vue_type_script_setup_true_lang.js +2 -2
  45. package/dist/es/src/components/CdsLayout/api/CdsLayout.props.js +1 -1
  46. package/dist/es/src/components/CdsLink/CdsLink.vue_vue_type_script_setup_true_lang.js +1 -1
  47. package/dist/es/src/components/CdsLink/api/CdsLink.props.js +1 -1
  48. package/dist/es/src/components/CdsList/CdsList.vue_vue_type_script_setup_true_lang.js +1 -1
  49. package/dist/es/src/components/CdsList/CdsListItem.vue_vue_type_script_setup_true_lang.js +1 -1
  50. package/dist/es/src/components/CdsList/api/CdsList.props.js +1 -1
  51. package/dist/es/src/components/CdsLoader/CdsLoader.vue_vue_type_script_setup_true_lang.js +1 -1
  52. package/dist/es/src/components/CdsNotification/CdsNotification.vue_vue_type_script_setup_true_lang.js +1 -1
  53. package/dist/es/src/components/CdsNotification/api/CdsNotification.props.js +1 -1
  54. package/dist/es/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.js +1 -1
  55. package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.props.js +1 -1
  56. package/dist/es/src/components/CdsOverlay/CdsOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
  57. package/dist/es/src/components/CdsOverlay/api/CdsOverlay.props.js +1 -1
  58. package/dist/es/src/components/CdsPage/CdsPage.vue_vue_type_script_setup_true_lang.js +1 -1
  59. package/dist/es/src/components/CdsPagination/CdsPagination.vue_vue_type_script_setup_true_lang.js +2 -2
  60. package/dist/es/src/components/CdsPagination/api/CdsPagination.props.js +1 -1
  61. package/dist/es/src/components/CdsProgressBar/CdsProgressBar.vue_vue_type_script_setup_true_lang.js +1 -1
  62. package/dist/es/src/components/CdsProgressBar/api/CdsProgressBar.props.js +1 -1
  63. package/dist/es/src/components/CdsProgressCircle/CdsProgressCircle.vue_vue_type_script_setup_true_lang.js +1 -1
  64. package/dist/es/src/components/CdsProgressCircle/api/CdsProgressCircle.props.js +1 -1
  65. package/dist/es/src/components/CdsSkeletonLoader/CdsSkeletonLoader.vue_vue_type_script_setup_true_lang.js +1 -1
  66. package/dist/es/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.js +1 -1
  67. package/dist/es/src/components/CdsSlideGroup/CdsSlideGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  68. package/dist/es/src/components/CdsSlideGroup/api/CdsSlideGroup.props.js +1 -1
  69. package/dist/es/src/components/CdsSlideView/api/CdsSlideView.props.js +1 -1
  70. package/dist/es/src/components/CdsStages/CdsStages.vue_vue_type_script_setup_true_lang.js +1 -1
  71. package/dist/es/src/components/CdsStages/api/CdsStages.props.js +1 -1
  72. package/dist/es/src/components/CdsStatus/CdsStatus.vue_vue_type_script_setup_true_lang.js +1 -1
  73. package/dist/es/src/components/CdsStatus/api/CdsStatus.props.js +1 -1
  74. package/dist/es/src/components/CdsSteps/api/CdsSteps.props.js +1 -1
  75. package/dist/es/src/components/CdsSurface/CdsSurface.vue_vue_type_script_setup_true_lang.js +1 -1
  76. package/dist/es/src/components/CdsSurface/api/CdsSurface.props.js +1 -1
  77. package/dist/es/src/components/CdsTable/api/CdsTable.props.js +1 -1
  78. package/dist/es/src/components/CdsTable/components/TableProvider.js +2 -2
  79. package/dist/es/src/components/CdsTag/CdsTag.vue_vue_type_script_setup_true_lang.js +1 -1
  80. package/dist/es/src/components/CdsTagGroup/CdsTagGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  81. package/dist/es/src/components/CdsTagGroup/api/CdsTagGroup.props.js +1 -1
  82. package/dist/es/src/components/CdsTimePicker/CdsTimePicker.vue_vue_type_script_setup_true_lang.js +1 -1
  83. package/dist/es/src/components/CdsTimePicker/api/CdsTimePicker.props.js +1 -1
  84. package/dist/es/src/components/CdsToast/CdsToast.vue_vue_type_script_setup_true_lang.js +1 -1
  85. package/dist/es/src/components/CdsToolbar/CdsToolbar.vue_vue_type_script_setup_true_lang.js +1 -1
  86. package/dist/es/src/components/CdsToolbar/api/CdsToolbar.props.js +1 -1
  87. package/dist/es/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.js +1 -1
  88. package/dist/es/src/components/CdsTree/api/CdsTree.props.js +1 -1
  89. package/dist/es/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.js +1 -1
  90. package/dist/es/src/composables/useDisabled/index.js +1 -1
  91. package/dist/es/src/composables/useHydration/useHydration.js +1 -1
  92. package/dist/es/src/composables/useLayout/useLayout.js +1 -1
  93. package/dist/es/src/composables/useLoader/index.js +1 -1
  94. package/dist/es/src/composables/useLocation/index.js +1 -1
  95. package/dist/es/src/composables/useReadonly/index.js +1 -1
  96. package/dist/es/src/composables/useVirtual/useVirtual.js +1 -1
  97. package/dist/esm-node/entry.css +3 -2
  98. package/dist/esm-node/entry.mjs +1 -1
  99. package/dist/esm-node/src/cds.mjs +1 -1
  100. package/dist/esm-node/src/components/CdsApp/CdsApp.css +2 -2
  101. package/dist/esm-node/src/composables/useLoader/index.mjs +1 -1
  102. package/dist/esm-node/src/composables/useRouter/index.mjs +1 -1
  103. package/dist/iife/entry.js +3 -3
  104. package/dist/styles/common.css +1 -1
  105. package/dist/styles/core.css +1 -1
  106. package/dist/styles.css +2 -2
  107. package/dist/types/components/CdsInput/api/CdsInput.types.d.ts +2 -2
  108. package/dist/types/composables/useFocus/useFocusGroup.d.ts +1 -1
  109. package/llms/llms-components.txt +174 -19
  110. package/llms/llms-full.txt +174 -19
  111. package/llms/llms-guides.txt +1 -1
  112. package/llms/llms-migration.txt +1 -1
  113. package/llms/llms-tokens.txt +1 -1
  114. package/llms/llms.txt +1 -1
  115. package/package.json +7 -5
  116. package/src/components/CdsApp/CdsApp.scss +2 -2
  117. package/src/styles/{generic/_fonts.scss → _fonts.scss} +4 -5
  118. package/src/styles/core.scss +1 -1
  119. package/src/styles/generic/index.scss +1 -1
  120. package/dist/styles/pt-root-ui_vf.woff +0 -0
  121. package/src/assets/fonts/PTRootUI/pt-root-ui_vf.ttf +0 -0
  122. package/src/assets/fonts/PTRootUI/pt-root-ui_vf.woff +0 -0
@@ -1,6 +1,6 @@
1
1
  # Central Design System (CDS 4) — components
2
2
 
3
- > Version: 4.0.0-alpha.11
3
+ > Version: 4.0.0-alpha.12
4
4
  > Documentation for all `@central-design-system/components` components: purpose, examples, and the full API contract.
5
5
  > Generated automatically (`bun run generate:meta` → `bun run generate:llms`). Do not edit manually.
6
6
 
@@ -42,6 +42,8 @@ see the "Tree-shaking" guide for details.
42
42
 
43
43
  _Category: Other_
44
44
 
45
+ _Tests: none yet — behavior is not covered by automated tests_
46
+
45
47
  ## API
46
48
 
47
49
  ### CdsApp
@@ -65,6 +67,8 @@ _Category: Other_
65
67
 
66
68
  _Category: Controls · since 4.0.0_
67
69
 
70
+ _Tests: none yet — behavior is not covered by automated tests_
71
+
68
72
  An autocomplete is a field for picking from a long list: the user types a query, the list is filtered on the fly and the matches are highlighted. The field is built on CdsTextInput, and the menu and the list are the same as in CdsSelect, so the label, the messages, validation and the menu behave identically.
69
73
 
70
74
  **See also:** If there are few options and search is not needed, take CdsSelect. If the user may enter values outside the list — CdsCombobox.
@@ -701,7 +705,7 @@ const selected = ref(null);
701
705
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
702
706
  | `menu-footer` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu footer. Receives the current search query and the filtered items. |
703
707
  | `menu-header` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu header. Receives the current search query and the filtered items. |
704
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
708
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
705
709
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
706
710
  | `no-data` | `any` | Content shown in the menu when the item list is empty. |
707
711
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
@@ -735,6 +739,8 @@ const selected = ref(null);
735
739
 
736
740
  _Category: Content · since 4.0.0 · status: new_
737
741
 
742
+ _Tests: none yet — behavior is not covered by automated tests_
743
+
738
744
  An avatar shows a person, a team or a company: a photo, initials or an icon inside a round container. Use it in member lists, comments and profile headers — anywhere the reader needs to recognize "who is this" at a glance.
739
745
 
740
746
  **See also:** The built-in badge shows a status or a counter right on the avatar; for a marker on arbitrary content take CdsBadge, and for a text label inside a line — CdsTag.
@@ -1053,6 +1059,8 @@ const remove = () => {
1053
1059
 
1054
1060
  _Category: Feedback · since 4.0.0_
1055
1061
 
1062
+ _Tests: none yet — behavior is not covered by automated tests_
1063
+
1056
1064
  A badge is a small marker in the corner of an element or next to it: a counter of unread messages, a "there is something new" dot, a short label. A badge is not interactive — it draws attention to the element it is attached to instead of acting on its own.
1057
1065
 
1058
1066
  **See also:** For a textual object status ("Done", "In progress") take CdsStatus, and CdsAvatar has a built-in `badge` prop for the common indicators on an avatar.
@@ -1461,6 +1469,8 @@ const contacts = [
1461
1469
 
1462
1470
  _Category: Navigation · since 4.0.0_
1463
1471
 
1472
+ _Tests: none yet — behavior is not covered by automated tests_
1473
+
1464
1474
  Breadcrumbs show the path to the current page in the hierarchy of sections and take you back to any level above in one click. The list is built from the `items` array or by hand — from `CdsBreadcrumbsItem` and `CdsBreadcrumbsDivider`.
1465
1475
 
1466
1476
  **See also:** To switch between sections of the same level, use CdsTabs; for a link styled as text inside a paragraph, use CdsLink; and to move through the steps of a process, use CdsSteps.
@@ -1800,6 +1810,8 @@ const visible = computed(() => (expanded.value ? path : [path[0], '…', ...path
1800
1810
 
1801
1811
  _Category: Content · since 4.0.0_
1802
1812
 
1813
+ _Tests: API 38/38 · 47 unit · 2 e2e · 3 known bugs · lines 97.6% (v4.0.0-alpha.11) · a11y: 11 axe recommendations (v4.0.0-alpha.11)_
1814
+
1803
1815
  A button is the primary way to trigger an action: submit a form, open a modal, confirm a choice. Its appearance signals the role it plays: `primary` is the main action on the screen, `secondary` and `tertiary` are the supporting ones.
1804
1816
 
1805
1817
  **See also:** For a link styled as text inside a paragraph, use CdsLink; to pick one option out of several, use CdsButtonToggle.
@@ -2229,6 +2241,8 @@ const totalSteps = 4;
2229
2241
 
2230
2242
  _Category: Content · since 4.0.0 · status: new_
2231
2243
 
2244
+ _Tests: none yet — behavior is not covered by automated tests_
2245
+
2232
2246
  A button group joins several CdsButton into one block: the buttons sit flush against each other, only the outer corners stay rounded, and shared props are set once on the group. This is how you present sets of related actions — a toolbar over a record or zoom controls.
2233
2247
 
2234
2248
  **See also:** If the user does not trigger an action but picks one of several options, use CdsButtonToggle — it keeps the selected state.
@@ -2292,6 +2306,8 @@ import { CdsButton, CdsButtonGroup } from '@central-design-system/components';
2292
2306
 
2293
2307
  _Category: Content · since 4.0.0 · status: new_
2294
2308
 
2309
+ _Tests: none yet — behavior is not covered by automated tests_
2310
+
2295
2311
  A toggle group turns CdsButton into a switch: the pressed button stays selected, and the choice is available through `v-model`. Use it for modes and filters that are visible right away — the layout of a list, the period of a report, formatting options.
2296
2312
 
2297
2313
  **See also:** If the buttons trigger actions instead of storing a choice, take CdsButtonGroup. To pick from a long list use CdsSelect, and inside forms — CdsRadioGroup.
@@ -2648,6 +2664,8 @@ const stats = {
2648
2664
 
2649
2665
  _Category: Content · since 4.0.0_
2650
2666
 
2667
+ _Tests: none yet — behavior is not covered by automated tests_
2668
+
2651
2669
  A card gathers related content — a title, text, an image, actions — into one bordered block. Use it when an object (a product, a plan, a document) should read as a whole: a card can act as a link and as a selectable item in a group.
2652
2670
 
2653
2671
  **See also:** For uniform lists of rows use CdsList, for collapsible sections use CdsExpandablePanel, and when you only need a surface without any structure, use CdsSurface.
@@ -3565,6 +3583,8 @@ const photos = [
3565
3583
 
3566
3584
  _Category: Content · since 4.0.0 · status: new_
3567
3585
 
3586
+ _Tests: none yet — behavior is not covered by automated tests_
3587
+
3568
3588
  A carousel shows images or arbitrary content slide by slide: promo banners, photo galleries, onboarding steps. Arrows and delimiter dots give you navigation, autoplay flips the slides on its own, and the progress bar shows the current position.
3569
3589
 
3570
3590
  **See also:** To switch content without delimiters and autoplay, take CdsSlideView — the carousel is built on top of it; for a single image take CdsImage.
@@ -4156,6 +4176,8 @@ const isLast = computed(() => slide.value === steps.length - 1);
4156
4176
 
4157
4177
  _Category: Controls · since 4.0.0_
4158
4178
 
4179
+ _Tests: none yet — behavior is not covered by automated tests_
4180
+
4159
4181
  A checkbox turns an independent option on and off: consent to terms, an entry in a filter list, a profile setting. Every checkbox in a group is selected on its own, which makes it right for multiple choice.
4160
4182
 
4161
4183
  **See also:** To pick one option out of several use CdsRadio, for settings that apply immediately — CdsToggle. If you need the control alone, without a label and messages — in a table cell, for example — take CdsCheckboxButton.
@@ -4587,7 +4609,7 @@ const filtered = computed(() =>
4587
4609
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
4588
4610
  | `input` | `SelectionControlSlot` | Slot for the default input element. |
4589
4611
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
4590
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
4612
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
4591
4613
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
4592
4614
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
4593
4615
 
@@ -4611,6 +4633,8 @@ const filtered = computed(() =>
4611
4633
 
4612
4634
  _Category: Controls · since 4.0.0 · status: new_
4613
4635
 
4636
+ _Tests: none yet — behavior is not covered by automated tests_
4637
+
4614
4638
  The checkbox control without a label and a messages block — the atom CdsCheckbox is built on. Use it where the caption is not needed or lives outside: in a table cell, a list row, a card.
4615
4639
 
4616
4640
  **See also:** For a standalone option with a label, a description and validation use CdsCheckbox — states, colors and groups work the same way here and are described in detail on its page.
@@ -4698,6 +4722,8 @@ const checked = ref(true);
4698
4722
 
4699
4723
  _Category: Controls · since 4.0.0_
4700
4724
 
4725
+ _Tests: none yet — behavior is not covered by automated tests_
4726
+
4701
4727
  A combobox is a field with a dropdown list and free input: the value can be picked from the offered ones or typed in — the text itself becomes the value. The field is built on CdsTextInput, and the menu and the list are the same as in CdsSelect, so the label, the messages, validation and the menu behave identically.
4702
4728
 
4703
4729
  **See also:** If the value must come from the list only, take CdsAutocomplete. If there are few options and free input is not needed — CdsSelect.
@@ -5154,7 +5180,7 @@ async function submit() {
5154
5180
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
5155
5181
  | `menu-footer` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu footer. Receives the current search query and the filtered items. |
5156
5182
  | `menu-header` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu header. Receives the current search query and the filtered items. |
5157
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
5183
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
5158
5184
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
5159
5185
  | `no-data` | `any` | Content shown in the menu when the item list is empty. |
5160
5186
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
@@ -5190,6 +5216,8 @@ async function submit() {
5190
5216
 
5191
5217
  _Category: Atoms · since 4.0.0 · status: new_
5192
5218
 
5219
+ _Tests: none yet — behavior is not covered by automated tests_
5220
+
5193
5221
  The counter shows how many characters are already typed and how many are allowed: `42 / 100`. When the value exceeds the maximum, the counter turns red — the user sees the problem before submitting the form.
5194
5222
 
5195
5223
  **See also:** The ready-made fields already have the counter built in — turn on the `counter` prop of CdsTextInput or CdsTextArea. A standalone `CdsCounter` is needed when you build your own control.
@@ -5317,6 +5345,8 @@ const title = ref('Поставка канцелярских товаров');
5317
5345
 
5318
5346
  _Category: Controls · since 4.0.0 · status: new_
5319
5347
 
5348
+ _Tests: none yet — behavior is not covered by automated tests_
5349
+
5320
5350
  A date field: a text field with a calendar icon that opens CdsDatePicker in a dropdown menu on click. The date can be picked with the mouse or typed on the keyboard — the value arrives as a string in the `mask` format (`DD.MM.YYYY` by default).
5321
5351
 
5322
5352
  **See also:** If the calendar is needed right on the page, without a field, take CdsDatePicker. For the time alone — CdsTimePicker, to pick from a ready list — CdsSelect.
@@ -5972,7 +6002,7 @@ const minYearMonth = `${today.getFullYear()}/${pad(today.getMonth() + 1)}`;
5972
6002
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
5973
6003
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
5974
6004
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
5975
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
6005
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
5976
6006
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
5977
6007
  | `picker-description` | `{ year: string \| number \| undefined; }` | Description in the calendar header. |
5978
6008
  | `picker-title` | `{ date: string; }` | Title in the calendar header. |
@@ -6003,6 +6033,8 @@ const minYearMonth = `${today.getFullYear()}/${pad(today.getMonth() + 1)}`;
6003
6033
 
6004
6034
  _Category: Controls · since 4.0.0_
6005
6035
 
6036
+ _Tests: none yet — behavior is not covered by automated tests_
6037
+
6006
6038
  A calendar for picking a date — a single one, several or a range. It lives right on the page or in a dropdown menu next to a field; the value is a string in the given format (`DD.MM.YYYY` by default), which is convenient to store and to send to the server.
6007
6039
 
6008
6040
  **See also:** If the calendar needs a field, take the ready CdsDateInput — it assembles the very same thing out of a field, a menu and this calendar, adding manual input and time. For picking the time alone there is CdsTimePicker.
@@ -6517,6 +6549,8 @@ const dateTime = ref(`15.${String(now.getMonth() + 1).padStart(2, '0')}.${now.ge
6517
6549
 
6518
6550
  _Category: Other_
6519
6551
 
6552
+ _Tests: none yet — behavior is not covered by automated tests_
6553
+
6520
6554
  ## API
6521
6555
 
6522
6556
  ### CdsDefaultsProvider
@@ -6543,6 +6577,8 @@ _Category: Other_
6543
6577
 
6544
6578
  _Category: Atoms · since 4.0.0 · status: new_
6545
6579
 
6580
+ _Tests: none yet — behavior is not covered by automated tests_
6581
+
6546
6582
  A description is muted text under the label of a field. It clarifies what to enter and in what format, so the label can stay short.
6547
6583
 
6548
6584
  **See also:** Inputs already have the description built in — the `description` prop of CdsTextInput and the other controls. A standalone `CdsDescription` is needed for groups of fields and for your own controls. For the label of a field take CdsLabel, for the messages under a field take CdsMessages.
@@ -6643,6 +6679,8 @@ const channels = ref(['email']);
6643
6679
 
6644
6680
  _Category: Atoms · since 4.0.0_
6645
6681
 
6682
+ _Tests: none yet — behavior is not covered by automated tests_
6683
+
6646
6684
  A divider is a thin line between the meaningful parts of an interface: the sections of a form, the rows of a list, the blocks of a card. It does nothing and asks for no attention, it only shows the border where the paddings are no longer enough. A short caption can go into its slot — "or" between two ways of doing something, for example.
6647
6685
 
6648
6686
  **See also:** The blocks of a card are separated by the `divider` prop of CdsCard — it draws the same line without adding markup. If the parts of the screen need to be moved onto different surfaces rather than separated, take CdsSurface.
@@ -7074,6 +7112,8 @@ const phone = ref('');
7074
7112
 
7075
7113
  _Category: Layouts · since 4.0.0_
7076
7114
 
7115
+ _Tests: API 0/33 · 31 unit · lines 85.3% (v4.0.0-alpha.11) · a11y: 14 axe recommendations (v4.0.0-alpha.11)_
7116
+
7077
7117
  The side panel of the application: navigation sections on the left, the context of a record or filters on the right. Inside `CdsLayout` the drawer takes its place in the layout and pushes the content aside, and in temporary mode it slides out over it.
7078
7118
 
7079
7119
  **See also:** For a list of sections inside the drawer take CdsList; for navigating the subsections of a single page take CdsTabs. The drawer is a part of the CdsLayout frame, but unlike the other parts it also works on its own: with the `fixed` prop it sticks to the window without a layout.
@@ -7831,6 +7871,8 @@ const items = ref([
7831
7871
 
7832
7872
  _Category: Feedback · since 4.0.0_
7833
7873
 
7874
+ _Tests: none yet — behavior is not covered by automated tests_
7875
+
7834
7876
  An empty state explains why there is no content on the screen and suggests the next step: no search results, an empty list, a loading error. It is assembled from a media area, headings, a description and an action button.
7835
7877
 
7836
7878
  **See also:** For a short message about the result of an operation take CdsToast, and while the data is still loading show CdsSkeletonLoader instead of an empty state.
@@ -8268,6 +8310,8 @@ import { CdsEmptyState } from '@central-design-system/components';
8268
8310
 
8269
8311
  _Category: Content · since 4.0.0_
8270
8312
 
8313
+ _Tests: none yet — behavior is not covered by automated tests_
8314
+
8271
8315
  An expandable panel hides the details behind a title: you see the list of topics and open only the one you need. Take it for FAQs, optional settings and long descriptions that turn a page into an endless feed.
8272
8316
 
8273
8317
  **See also:** If the sections are equal in weight and the reader switches between them, take CdsTabs. For a hierarchy of nested nodes take CdsTree, and for a block that simply separates content — CdsCard.
@@ -9045,6 +9089,8 @@ const cities = [
9045
9089
 
9046
9090
  _Category: Atoms · since 4.0.0 · status: new_
9047
9091
 
9092
+ _Tests: none yet — behavior is not covered by automated tests_
9093
+
9048
9094
  The frame of an input: the background, the border, the focus and error states, the inner icons, the clear button and the loading indicator. You put the control itself into the `default` slot — the text fields, selects and autocompletes of the design system are built on `CdsField`.
9049
9095
 
9050
9096
  **See also:** For regular input take the ready-made fields — CdsTextInput, CdsSelect, CdsTextArea. `CdsField` is needed when your control is not in the library. The label, the description and the messages around the frame are added by CdsInput.
@@ -9333,6 +9379,8 @@ function addTag() {
9333
9379
 
9334
9380
  _Category: Controls · since 4.0.0 · status: new_
9335
9381
 
9382
+ _Tests: none yet — behavior is not covered by automated tests_
9383
+
9336
9384
  A file field: the user attaches documents by a click, by dragging or by pasting from the clipboard. Around the native `input type="file"` the component gathers everything a form needs: a label, a description, messages, a counter, clearing and a filter by file types.
9337
9385
 
9338
9386
  **See also:** If you need a prominent upload zone with a list of files, take CdsFileUpload; sending the files to the server is the job of CdsUploader.
@@ -9841,7 +9889,7 @@ onBeforeUnmount(() => {
9841
9889
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
9842
9890
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
9843
9891
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
9844
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
9892
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
9845
9893
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
9846
9894
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
9847
9895
  | `prepend-inner` | `CdsInputDefaultSlot` | Slot added at the start of the input |
@@ -9869,6 +9917,8 @@ onBeforeUnmount(() => {
9869
9917
 
9870
9918
  _Category: Controls · since 4.0.0 · status: new_
9871
9919
 
9920
+ _Tests: none yet — behavior is not covered by automated tests_
9921
+
9872
9922
  A file upload zone: it accepts files by dragging, by pasting from the clipboard and through the system dialog, and shows the selection as a list with image previews. Around the zone the component gathers everything a form needs: a label, a description, messages and validation.
9873
9923
 
9874
9924
  **See also:** For a compact file field in a form row use CdsFileInput; sending the files to the server is the job of CdsUploader.
@@ -10413,7 +10463,7 @@ watch(
10413
10463
  | `item` | `CdsFileUploadFileSlot` | An item of the list of the chosen files. |
10414
10464
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
10415
10465
  | `loader` | `LoaderSlotProps` | The loading indicator. |
10416
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
10466
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
10417
10467
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
10418
10468
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
10419
10469
  | `single` | `CdsFileUploadFileSlot` | The only chosen file with `insetFileList` and without `multiple`. |
@@ -10625,6 +10675,8 @@ watch(
10625
10675
 
10626
10676
  _Category: Layouts · since 4.0.0_
10627
10677
 
10678
+ _Tests: API 0/12 · 3 unit · lines 76.7% (v4.0.0-alpha.11) · a11y: 6 axe recommendations (v4.0.0-alpha.11)_
10679
+
10628
10680
  The footer of the application: a copyright notice and utility links on regular pages, an action bar on forms. The layout measures the height of the footer and reserves the space, so it never covers the last line of the content.
10629
10681
 
10630
10682
  **See also:** The footer works only inside CdsLayout — outside the layout it renders nothing and warns about it in the console. The top bar of the application is built by CdsHeader, and the content of both by CdsToolbar.
@@ -10902,6 +10954,8 @@ function save() {
10902
10954
 
10903
10955
  _Category: Controls · since 4.0.0_
10904
10956
 
10957
+ _Tests: none yet — behavior is not covered by automated tests_
10958
+
10905
10959
  A form joins fields into one group: it collects their validation into a common status, intercepts the submission and can reset the values. CDS fields with the `rules` prop connect to the form automatically — with no registration and no extra code.
10906
10960
 
10907
10961
  **See also:** The form does not render the fields itself — build them out of CdsTextInput, CdsSelect, CdsCheckbox and other controls. The validation rules are declared on the fields themselves through the `rules` prop.
@@ -11551,6 +11605,8 @@ const submit = () => {
11551
11605
 
11552
11606
  _Category: Atoms · since 4.0.0 · status: new_
11553
11607
 
11608
+ _Tests: none yet — behavior is not covered by automated tests_
11609
+
11554
11610
  A functional button is a utility action next to the content: download a file in a row of a list, reveal a password in a field, collapse a block, open the menu of a record. It is a CdsButton with `size="sm"` and `appearance="tertiary"` fixed in place: the background is transparent and appears only on hover, so the button does not compete for attention with the content it stands next to.
11555
11611
 
11556
11612
  **See also:** Style the primary action of the screen — "Save", "Submit the request" — with CdsButton, and a navigation inside a paragraph with CdsLink. If the icon triggers nothing and only explains the content, leave it as CdsIcon.
@@ -11864,6 +11920,8 @@ const expanded = ref(true);
11864
11920
 
11865
11921
  _Category: Layouts · since 4.0.0_
11866
11922
 
11923
+ _Tests: none yet — behavior is not covered by automated tests_
11924
+
11867
11925
  A responsive modular grid: `CdsGrid`, `CdsRow` and `CdsCol` lay the content out in columns — from 4 on a phone to 16 on wide screens. The grid works in two modes — Flexbox (the default) and CSS Grid — and the whole markup is also available as ready-made CSS classes, without a single component.
11868
11926
 
11869
11927
  **See also:** The grid lays out the content inside a page. Build the frame of the application — the header, the drawers and the footer — from CdsLayout.
@@ -12711,6 +12769,8 @@ const filtered = computed(() =>
12711
12769
 
12712
12770
  _Category: Layouts · since 4.0.0_
12713
12771
 
12772
+ _Tests: none yet — behavior is not covered by automated tests_
12773
+
12714
12774
  The header of the application: the title, the global search, notifications, the profile — everything that has to be at hand on any screen. The layout measures its height itself and reserves the space, so the content never ends up under the header.
12715
12775
 
12716
12776
  **See also:** The header works only inside CdsLayout — outside the layout it renders nothing and warns about it in the console. The content of the header is laid out by CdsToolbar, and the bottom bar of the application is built by CdsFooter.
@@ -13120,6 +13180,8 @@ const tab = ref('active');
13120
13180
 
13121
13181
  _Category: Atoms · since 4.0.0 · status: new_
13122
13182
 
13183
+ _Tests: none yet — behavior is not covered by automated tests_
13184
+
13123
13185
  Highlighting explains why a row made it into the results: the component finds the matches with the query (`query`) or with ready ranges (`matches`) in the text and wraps them into `mark`. Take it for search results, autocomplete suggestions and filtered lists.
13124
13186
 
13125
13187
  **See also:** In CdsAutocomplete, CdsCombobox and CdsSelect the highlighting of the matches is already built in — a standalone `CdsHighlight` is not needed there. For a permanent label next to the text take CdsTag, for a counter take CdsBadge.
@@ -13483,6 +13545,8 @@ const search = () => {
13483
13545
 
13484
13546
  _Category: Content · since 4.0.0_
13485
13547
 
13548
+ _Tests: API 0/15 · 3 unit · lines 95.5% (v4.0.0-alpha.11) · a11y: 3 axe recommendations (v4.0.0-alpha.11)_
13549
+
13486
13550
  An icon is a short visual mark next to the text: the status of a record, the type of a file, the direction of a transition. The component takes an icon by name from a connected pack and subordinates its size, color and spacing to the design system tokens.
13487
13551
 
13488
13552
  **See also:** Inside other components you do not assemble an icon separately: CdsButton, CdsTextInput, CdsList and others have the `icon`, `prepend-icon` and `append-icon` props. For a standalone action take CdsFunctionalButton — an icon button with a label and states. All the available icons are in the gallery, and connecting your own pack is described in the guide.
@@ -13829,6 +13893,8 @@ import { CdsIcon } from '@central-design-system/components';
13829
13893
 
13830
13894
  _Category: Content · since 4.0.0_
13831
13895
 
13896
+ _Tests: none yet — behavior is not covered by automated tests_
13897
+
13832
13898
  An image that knows how to wait. The component reserves space in the layout according to the given proportions, loads the file when the picture enters the viewport, and shows a placeholder while it is on its way. Over the image you can lay a gradient and any content — a caption, a tag, a button.
13833
13899
 
13834
13900
  **See also:** For a photo of a person or a company logo in a round frame take CdsAvatar, for interface pictograms — CdsIcon. If the proportions have to be set not for a picture but for an arbitrary block — a video, a map, an iframe — use CdsResponsive, and a slideshow of several images is assembled by CdsCarousel.
@@ -14401,6 +14467,8 @@ const current = computed(() => photos[active.value]);
14401
14467
 
14402
14468
  _Category: Atoms · since 4.0.0_
14403
14469
 
14470
+ _Tests: none yet — behavior is not covered by automated tests_
14471
+
14404
14472
  The wrapper of an input: the label, the description, the outer icons, the block of messages and the validation by rules. You put the control itself into the `default` slot — usually a CdsField with your `input` inside.
14405
14473
 
14406
14474
  **See also:** For regular input take the ready-made fields — CdsTextInput, CdsSelect, CdsTextArea: they are already assembled from `CdsInput` and `CdsField`. `CdsInput` is needed when your control is not in the library.
@@ -14686,7 +14754,7 @@ const rules = [
14686
14754
  | `description` | `{ description: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsDescription component |
14687
14755
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
14688
14756
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
14689
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
14757
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
14690
14758
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
14691
14759
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
14692
14760
 
@@ -14710,6 +14778,8 @@ const rules = [
14710
14778
 
14711
14779
  _Category: Atoms · since 4.0.0 · status: new_
14712
14780
 
14781
+ _Tests: none yet — behavior is not covered by automated tests_
14782
+
14713
14783
  A label names a field — it says what is expected from the user. It renders as a `label` tag and binds to the control through `for`, so a click on the label moves the focus into the field.
14714
14784
 
14715
14785
  **See also:** The ready-made fields already have the label built in — the `label` prop of CdsTextInput and the other controls. A standalone `CdsLabel` is needed for groups of fields and for your own controls. The explanation under the label is added by CdsDescription.
@@ -14815,6 +14885,8 @@ const agreed = ref(false);
14815
14885
 
14816
14886
  _Category: Layouts · since 4.0.0_
14817
14887
 
14888
+ _Tests: none yet — behavior is not covered by automated tests_
14889
+
14818
14890
  The frame of the application: `CdsLayout` places the header, the side drawers, the content and the footer, measures their sizes and takes the scrolling over. The parts of the layout know about each other — the content never slides under the header and never hides behind a drawer.
14819
14891
 
14820
14892
  **See also:** The parts of the layout are described on their own pages: CdsHeader, CdsDrawer, CdsMain, CdsPage, CdsFooter and CdsToolbar. You can assemble the frame with the mouse and copy the ready code in the layout builder.
@@ -15327,6 +15399,8 @@ const statuses = ref<string[]>(['active']);
15327
15399
 
15328
15400
  _Category: Navigation · since 4.0.0_
15329
15401
 
15402
+ _Tests: none yet — behavior is not covered by automated tests_
15403
+
15330
15404
  A link sends the user somewhere else: to a neighboring page of the application, to an external service or to an email address. Inside the application the path comes from the `to` prop and vue-router takes over the navigation; for outside destinations the address goes into `href`.
15331
15405
 
15332
15406
  **See also:** If the element triggers an action instead of a navigation — saves, deletes, opens a modal — take CdsButton. A button also accepts `href` or `to` when a navigation has to look like a button. The path through the hierarchy of sections is built by CdsBreadcrumbs, and sections of equal weight are switched by CdsTabs.
@@ -15595,6 +15669,8 @@ function requestAccess() {
15595
15669
 
15596
15670
  _Category: Content · since 4.0.0_
15597
15671
 
15672
+ _Tests: none yet — behavior is not covered by automated tests_
15673
+
15598
15674
  A list shows a set of records of the same kind — menu sections, documents, employees, settings — so that the one you need is easy to find and pick. Build it from an `items` array in a single line, or from `CdsListItem` components when a row is more than a title with an icon.
15599
15675
 
15600
15676
  **See also:** To pick a value in a form, take CdsSelect; for a tree with checkboxes, async loading and drag and drop — CdsTree; for tabular data with columns — CdsTable. Inside CdsMenu, CdsSelect and CdsAutocomplete the list is already in use — there is no need to assemble it by hand.
@@ -16621,6 +16697,8 @@ const filtered = computed(() =>
16621
16697
 
16622
16698
  _Category: Feedback · since 4.0.0 · status: deprecated_
16623
16699
 
16700
+ _Tests: none yet — behavior is not covered by automated tests_
16701
+
16624
16702
  A circular indeterminate loading indicator — a spinning ring without progress. It shows that the data is still loading: as an inline element, as an overlay above a container or above the whole page.
16625
16703
 
16626
16704
  **See also:** The component is deprecated and will be removed in future versions. Use CdsProgressCircle: it covers both indeterminate loading and progress.
@@ -16704,6 +16782,8 @@ function refresh() {
16704
16782
 
16705
16783
  _Category: Layouts · since 4.0.0_
16706
16784
 
16785
+ _Tests: none yet — behavior is not covered by automated tests_
16786
+
16707
16787
  The main area of the application: `CdsMain` is the place where the content of the page lands. Inside `CdsLayout` it indents itself by the height of the header and the footer and by the width of the side drawers, so the content never has to be moved by hand.
16708
16788
 
16709
16789
  **See also:** Put the content into CdsPage — it calculates the minimum height of the page. `CdsMain` works only inside CdsLayout: outside the layout it renders nothing and warns about it in the console.
@@ -16782,6 +16862,8 @@ import {
16782
16862
 
16783
16863
  _Category: Content · since 4.0.0_
16784
16864
 
16865
+ _Tests: none yet — behavior is not covered by automated tests_
16866
+
16785
16867
  A menu pops up next to an activator element and shows a list of actions or sections: the "more" button in a table row, the user menu in the header, a context menu on right click. It positions itself — it opens towards the free space and sticks to the activator while the page scrolls.
16786
16868
 
16787
16869
  **See also:** To pick a value in a form, take CdsSelect — it stays visible and gets submitted. For a short hint on hover use CdsTooltip, and for a dialog that demands an answer use CdsModal. The content of a menu is usually built from CdsList.
@@ -17526,6 +17608,8 @@ watch(isOpen, (value) => {
17526
17608
 
17527
17609
  _Category: Atoms · since 4.0.0 · status: new_
17528
17610
 
17611
+ _Tests: none yet — behavior is not covered by automated tests_
17612
+
17529
17613
  The block of messages under an input: a hint, an explanation or a validation error. The messages appear and disappear with an animation, so the line under the field does not jerk the layout.
17530
17614
 
17531
17615
  **See also:** The ready-made fields already have the block of messages built in — the `messages`, `hint` and `error-messages` props of CdsTextInput and the other controls. A standalone `CdsMessages` is needed for groups of fields and for your own controls. For a noticeable notification on the page take CdsNotification.
@@ -17685,6 +17769,8 @@ const isEmpty = computed(() => channels.value.length === 0);
17685
17769
 
17686
17770
  _Category: Content · since 4.0.0_
17687
17771
 
17772
+ _Tests: none yet — behavior is not covered by automated tests_
17773
+
17688
17774
  A modal opens on top of the page and keeps the focus on a single task: confirm an action, fill in a short form, look at the details — without taking you away from the current screen. While the modal is open, the page behind it is dimmed, does not scroll and does not accept clicks.
17689
17775
 
17690
17776
  **See also:** For a list of actions on an element take CdsMenu, for a short hint — CdsTooltip, for a notification about the result — CdsToast. Complex modal content — a header, scrollable text and a row of buttons — is assembled from CdsCard.
@@ -18341,6 +18427,8 @@ const answer = (value: boolean) => {
18341
18427
 
18342
18428
  _Category: Feedback · since 4.0.0_
18343
18429
 
18430
+ _Tests: none yet — behavior is not covered by automated tests_
18431
+
18344
18432
  A notification is a block with a message about an event or a state: a successful save, a warning about a limit, a loading error. The semantic status sets the color and the icon, and the display modes let you embed the message into a form, a card or a list.
18345
18433
 
18346
18434
  **See also:** For pop-up messages above the page that disappear on their own take CdsToast. For a short status label in a row or a card — CdsTag.
@@ -18741,6 +18829,8 @@ async function retry() {
18741
18829
 
18742
18830
  _Category: Feedback · since 4.0.0 · status: deprecated_
18743
18831
 
18832
+ _Tests: none yet — behavior is not covered by automated tests_
18833
+
18744
18834
  A pop-up notification above the page — the counterpart of `CdsNotificationAlert` from CDS 3. It is assembled from CdsOverlay and CdsNotification in the `important` variant; it hides automatically after `timeout`, while hovering the cursor or focusing inside pauses the timer.
18745
18835
 
18746
18836
  **See also:** The component exists only for a smooth migration from CDS 3 and will be removed. For new scenarios use CdsToast.
@@ -19052,6 +19142,8 @@ function onUpdateModelValue(value: boolean, id: string) {
19052
19142
 
19053
19143
  _Category: Controls · since 4.0.0 · status: new_
19054
19144
 
19145
+ _Tests: none yet — behavior is not covered by automated tests_
19146
+
19055
19147
  A field for entering a one-time code — from an SMS, an email or an authenticator app. It looks like a row of separate cells, but the input is taken by a single hidden `input`: that is why the SMS autofill, pasting a whole string from the clipboard, selection and the arrow keys all work, and the focus does not have to be jumped between the cells by hand.
19056
19148
 
19057
19149
  **See also:** For an ordinary short text or number take CdsTextInput: `CdsOtpInput` is needed where the length of the input is known upfront and every character is shown in its own cell.
@@ -19536,6 +19628,8 @@ function submit() {
19536
19628
 
19537
19629
  _Category: Content · since 4.0.0_
19538
19630
 
19631
+ _Tests: none yet — behavior is not covered by automated tests_
19632
+
19539
19633
  An overlay shows content on top of the page: it dims the page with a scrim, computes the position relative to an activator and manages the stacking order of the open layers. It is the base mechanism behind CdsModal, CdsMenu and CdsTooltip — take it when you need a popup of your own that is not among the ready-made ones.
19540
19634
 
19541
19635
  **See also:** For common tasks there are ready-made components built on the overlay: a dialog — CdsModal, a list of actions next to an activator — CdsMenu, a hint on hover — CdsTooltip, notifications — CdsToast. CdsOverlay is for when none of them fits.
@@ -20087,6 +20181,8 @@ const hint = ref(false);
20087
20181
 
20088
20182
  _Category: Layouts · since 4.0.0_
20089
20183
 
20184
+ _Tests: none yet — behavior is not covered by automated tests_
20185
+
20090
20186
  A page inside the layout: `CdsPage` gives the content a minimum height that accounts for the header and the footer, so a short page fills the whole screen instead of hanging as a narrow strip at the top.
20091
20187
 
20092
20188
  **See also:** `CdsPage` lives inside CdsMain — outside it renders nothing and warns about it in the console. The paddings around the whole content area are calculated by CdsLayout.
@@ -20242,6 +20338,8 @@ import {
20242
20338
 
20243
20339
  _Category: Navigation · since 4.0.0_
20244
20340
 
20341
+ _Tests: none yet — behavior is not covered by automated tests_
20342
+
20245
20343
  Pagination splits a large data set into pages and helps you jump to the one you need: numbered buttons, "back" and "forward" arrows, jumps to the first and the last page, and a quick jump field. Extra numbers collapse into an ellipsis, and without an explicit limit the number of buttons adapts to the width of the container.
20246
20344
 
20247
20345
  **See also:** Pagination pages through homogeneous data — a list or a table. To switch between sections of the interface use CdsTabs, and to navigate the hierarchy of pages use CdsBreadcrumbs.
@@ -20674,6 +20772,8 @@ watch(query, () => (page.value = 1));
20674
20772
 
20675
20773
  _Category: Feedback · since 4.0.0_
20676
20774
 
20775
+ _Tests: none yet — behavior is not covered by automated tests_
20776
+
20677
20777
  A linear progress indicator — a horizontal bar for the course of an operation: a file upload, the steps of a wizard, media playback. The value comes from `model-value`, and when the course of the operation is unknown, the `indeterminate` mode turns on a running waiting animation.
20678
20778
 
20679
20779
  **See also:** For progress shown as a ring take CdsProgressCircle, and to dim a container while it loads — CdsOverlay.
@@ -21167,6 +21267,8 @@ const refresh = () => {
21167
21267
 
21168
21268
  _Category: Feedback · since 4.0.0 · status: new_
21169
21269
 
21270
+ _Tests: none yet — behavior is not covered by automated tests_
21271
+
21170
21272
  A circular progress indicator shows the course of an operation: a file upload, data processing, a filling quota. The value is set in percent through `model-value`, and when the course of the operation is unknown, the `indeterminate` mode turns on an endless waiting animation.
21171
21273
 
21172
21274
  **See also:** For progress shown as a horizontal bar take CdsProgressBar, and to dim a container while it loads — CdsOverlay.
@@ -21551,6 +21653,8 @@ const generate = () => {
21551
21653
 
21552
21654
  _Category: Controls · since 4.0.0_
21553
21655
 
21656
+ _Tests: none yet — behavior is not covered by automated tests_
21657
+
21554
21658
  A radio button is one option of a mutually exclusive choice. It is not used on its own: the buttons are joined by CdsRadioGroup — it keeps the selected value, captions the set and shows the messages. The button is left with `value` — the value of the option, `label` and `description` — its caption and details.
21555
21659
 
21556
21660
  **See also:** Examples, guidelines and scenarios are on the CdsRadioGroup page. For an independent on/off option take CdsCheckbox.
@@ -21604,6 +21708,8 @@ A radio button is one option of a mutually exclusive choice. It is not used on i
21604
21708
 
21605
21709
  _Category: Controls · since 4.0.0_
21606
21710
 
21711
+ _Tests: none yet — behavior is not covered by automated tests_
21712
+
21607
21713
  A radio group is a choice of one option out of a short mutually exclusive set: a payment method, a plan, a report period. The group keeps the selected value, captions the set with a heading and a description, shows messages and errors; the options themselves are CdsRadio components with their own `value`.
21608
21714
 
21609
21715
  **See also:** For independent options that are turned on separately use CdsCheckbox, for an on/off setting that applies immediately — CdsToggle. If there are more than five options, fold the list into CdsSelect.
@@ -22034,7 +22140,7 @@ const items = computed(() =>
22034
22140
  | `description` | `{ description: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsDescription component |
22035
22141
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
22036
22142
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
22037
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
22143
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
22038
22144
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
22039
22145
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
22040
22146
 
@@ -22058,6 +22164,8 @@ const items = computed(() =>
22058
22164
 
22059
22165
  _Category: Atoms · since 4.0.0 · status: new_
22060
22166
 
22167
+ _Tests: API 0/11 · 5 unit · lines 100% (v4.0.0-alpha.11) · a11y: 1 axe recommendation (v4.0.0-alpha.11)_
22168
+
22061
22169
  A frame with constant proportions. Set `aspect-ratio` and the height of the block is calculated from its width on any screen. Anything that needs a fixed shape goes inside: a video, a map, an `iframe`, a category tile. The space for the content is taken right away, so the layout does not jump while it loads.
22062
22170
 
22063
22171
  **See also:** For photos take CdsImage — it is built on `CdsResponsive` and can also do lazy loading, a placeholder and cropping. If you need the columns of a page rather than the shape of a single block, take CdsGrid.
@@ -22400,6 +22508,8 @@ const ratio = computed(() => ratios[selected.value]);
22400
22508
 
22401
22509
  _Category: Controls · since 4.0.0_
22402
22510
 
22511
+ _Tests: API 127/127 · 80 unit · 10 e2e · 11 known bugs · lines 64.1% (v4.0.0-alpha.11) · a11y: 5 axe recommendations (v4.0.0-alpha.11)_
22512
+
22403
22513
  A select opens a dropdown list and lets you pick one or several values from a known set: a country, a status, a category. The field is built on CdsTextInput, so the label, the description, the messages, validation and the states work exactly as in a text field.
22404
22514
 
22405
22515
  **See also:** For two or three options take CdsRadioGroup — the options are visible right away. If the list is long and the user searches by typing, use CdsAutocomplete, and if values outside the list are allowed — CdsCombobox.
@@ -23380,7 +23490,7 @@ const sorted = computed(() => {
23380
23490
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
23381
23491
  | `menu-footer` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu footer. Receives the current search query and the filtered items. |
23382
23492
  | `menu-header` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu header. Receives the current search query and the filtered items. |
23383
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
23493
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
23384
23494
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
23385
23495
  | `no-data` | `any` | Content shown in the menu when the item list is empty. |
23386
23496
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
@@ -23414,6 +23524,8 @@ const sorted = computed(() => {
23414
23524
 
23415
23525
  _Category: Atoms · since 4.0.0 · status: new_
23416
23526
 
23527
+ _Tests: none yet — behavior is not covered by automated tests_
23528
+
23417
23529
  The base of the selection controls: a native `input` with state icons, a label and a description. The component holds the value, can work with its own `true`/`false` values and with multiple selection, and picks up the settings of CdsSelectionControlGroup. The checkboxes, radio buttons and toggles of the design system are built on it.
23418
23530
 
23419
23531
  **See also:** For regular selection take the ready-made controls — CdsCheckbox, CdsRadio, CdsToggle: they already have the icons, the sizes, the state colors and the block of messages. `CdsSelectionControl` is needed when the control you want is not in the library.
@@ -23990,6 +24102,8 @@ function submit() {
23990
24102
 
23991
24103
  _Category: Atoms · since 4.0.0 · status: new_
23992
24104
 
24105
+ _Tests: none yet — behavior is not covered by automated tests_
24106
+
23993
24107
  A container for a set of selection controls: it holds the shared value, hands the nested CdsSelectionControl the type, the icons, the colors and the states, and ties them together with a single `name` attribute. The radio button group of the design system is built on it.
23994
24108
 
23995
24109
  **See also:** For a ready group with a title, a description and messages take CdsRadioGroup: it is assembled from this group and the CdsInput wrapper. `CdsSelectionControlGroup` is needed when you build your own set of controls.
@@ -24408,6 +24522,8 @@ const slot = ref('day');
24408
24522
 
24409
24523
  _Category: Feedback · since 4.0.0_
24410
24524
 
24525
+ _Tests: none yet — behavior is not covered by automated tests_
24526
+
24411
24527
  A skeleton shows the shape of the future content while the data is loading: instead of an empty screen the user immediately sees where the heading, the text and the buttons will appear. The ready-made types (`type`) are assembled from "bones" — blanks for an avatar, a line of text, a button or a table.
24412
24528
 
24413
24529
  **See also:** A skeleton fits the first load of a block or a page. For waiting inside a single action — submitting a form, saving — take the `loading` prop of CdsButton or CdsProgressCircle. If there is no data at all, show CdsEmptyState.
@@ -24773,6 +24889,8 @@ load();
24773
24889
 
24774
24890
  _Category: Atoms · since 4.0.0_
24775
24891
 
24892
+ _Tests: none yet — behavior is not covered by automated tests_
24893
+
24776
24894
  A slide group lays a set of elements out in a single scrollable line: when the elements do not fit, the strip is paged with arrows. It can also drive a selection through `v-model` — CdsTabs and CdsTagGroup are built on the slide group.
24777
24895
 
24778
24896
  **See also:** For a bar of sections take the ready CdsTabs, for picking tags take CdsTagGroup, and to page through slides one by one take CdsSlideView.
@@ -25193,6 +25311,8 @@ const tools = [
25193
25311
 
25194
25312
  _Category: Atoms · since 4.0.0_
25195
25313
 
25314
+ _Tests: none yet — behavior is not covered by automated tests_
25315
+
25196
25316
  A slide view shows one slide out of a set and switches them with a shift animation: arrows, swipes and `v-model` page forward and backward. It is the base for carousels and step-by-step interfaces — CdsCarousel is built on the slide view.
25197
25317
 
25198
25318
  **See also:** For a carousel of images with dot delimiters and autoplay take the ready CdsCarousel, for sections with a navigation bar take CdsTabs, and for a strip where several elements are visible at once take CdsSlideGroup.
@@ -25635,6 +25755,8 @@ const events = [
25635
25755
 
25636
25756
  _Category: Feedback · since 4.0.0 · status: deprecated_
25637
25757
 
25758
+ _Tests: none yet — behavior is not covered by automated tests_
25759
+
25638
25760
  A stage bar shows the course of a business process: which stages are behind, which one is running now and where the process stopped because of an error. The component only displays the status — the stages are not clickable, so the bar fits cards, headers and lists where the state of the process has to be read at a glance.
25639
25761
 
25640
25762
  **See also:** The component is deprecated: do not write new code with it. It keeps working across the whole 4.x line and prints a `[CDS UPGRADE]` warning in the dev console; it will be removed in 5.0. To show the course of a process without step navigation use CdsSteps — without the `interactive` prop the steps are not clickable, and the header without `items` works as a status tracker (see the "Request status" scenario). Mind that the look differs: `CdsStages` is an arrow bar, `CdsSteps` is a row of indicators with a progress line. To switch between equally weighted sections — CdsTabs.
@@ -25929,6 +26051,8 @@ const stagesFor = (order: Order) =>
25929
26051
 
25930
26052
  _Category: Feedback · since 4.0.0_
25931
26053
 
26054
+ _Tests: none yet — behavior is not covered by automated tests_
26055
+
25932
26056
  A status is a non-interactive indicator of the state of an object: the request is paid, the document is under review, the payment is overdue. The `status` prop sets the semantics — the color and the icon — while `variant` sets the display mode: a prominent filled badge or compact text with a colored icon.
25933
26057
 
25934
26058
  **See also:** For labels with arbitrary palette colors — categories, filters — take CdsTag; for counters and marker dots in the corner of an element — CdsBadge.
@@ -26154,6 +26278,8 @@ import { CdsStatus } from '@central-design-system/components';
26154
26278
 
26155
26279
  _Category: Navigation · since 4.0.0_
26156
26280
 
26281
+ _Tests: none yet — behavior is not covered by automated tests_
26282
+
26157
26283
  The stepper walks the user through a multi-step process: it shows which steps are done, which one is active and how many are left. It can switch the content of the steps and renders the "Back" / "Next" buttons out of the box, while a header without content works as a status tracker.
26158
26284
 
26159
26285
  **See also:** The stepper shows the progress of a business process without step navigation on its own: without the `interactive` prop the steps are not clickable, and the header without `items` works as a status tracker — see the ["Request status"](#request-status) scenario. The CdsStages component, which used to solve the same task, is deprecated. For sections of equal weight that are switched in any order, use CdsTabs.
@@ -26694,6 +26820,8 @@ import { CdsSteps, CdsStepsItem } from '@central-design-system/components';
26694
26820
 
26695
26821
  _Category: Atoms · since 4.0.0 · status: new_
26696
26822
 
26823
+ _Tests: none yet — behavior is not covered by automated tests_
26824
+
26697
26825
  A surface is a container with a background from the tokens, sizes, positioning and a theme of its own. Take it when a block needs a design system background rather than a ready-made component: the backdrop of a panel, a plate, the base of your own component.
26698
26826
 
26699
26827
  **See also:** For a card with a title and actions take CdsCard, for the sections of a page take CdsLayout. `CdsSurface` is the lowest layer, without content or paddings of its own.
@@ -26844,6 +26972,8 @@ const rows = [
26844
26972
 
26845
26973
  _Category: Content · since 4.0.0_
26846
26974
 
26975
+ _Tests: API 0/72 · 13 unit · lines 10.9% (v4.0.0-alpha.11) · a11y: 50 axe recommendations (v4.0.0-alpha.11)_
26976
+
26847
26977
  A table shows large sets of records in columns and takes the data work off your hands: sorting, filters, pagination, row selection and expansion, a pinned header and pinned columns. Columns are described by the `columns` prop, the records by the `data` prop.
26848
26978
 
26849
26979
  **See also:** For a plain list of similar items without columns, use CdsList; for a hierarchy without tabular data, use CdsTree.
@@ -30045,6 +30175,8 @@ watch(tableDataSwitcher, () => {
30045
30175
 
30046
30176
  _Category: Navigation · since 4.0.0_
30047
30177
 
30178
+ _Tests: none yet — behavior is not covered by automated tests_
30179
+
30048
30180
  Tabs split the screen into sections of equal weight and switch between them in place, without going to another page. The bar is built from `CdsTab` components or from an `items` array, and the content of the sections is switched by `CdsTabsView` and `CdsTabsViewItem`.
30049
30181
 
30050
30182
  **See also:** For a sequential process with steps and progress, use CdsSteps; to pick a single value in a form, use CdsButtonToggle.
@@ -30885,6 +31017,8 @@ async function select(item: string) {
30885
31017
 
30886
31018
  _Category: Content · since 4.0.0_
30887
31019
 
31020
+ _Tests: API 0/41 · 6 unit · lines 77.2% (v4.0.0-alpha.11) · a11y: 2 axe recommendations (v4.0.0-alpha.11)_
31021
+
30888
31022
  A tag is a compact label next to an object: the status of a request, a product category, a selected filter. It takes a color from the palette, carries an icon or an avatar, can be closed with a cross and can work as a link.
30889
31023
 
30890
31024
  **See also:** To build a toggle or a filter with selection out of tags, take CdsTagGroup. For a counter or a dot indicator on top of another element use CdsBadge, and trigger actions with CdsButton — a tag only labels.
@@ -30908,10 +31042,9 @@ disabled state and removes the reaction to clicks.
30908
31042
 
30909
31043
  ```vue
30910
31044
  <script setup lang="ts">
30911
- import { CdsTagConstants } from '@cds/components/CdsTag/api/CdsTag.constants';
30912
31045
  import { CdsTag } from '@central-design-system/components';
30913
31046
 
30914
- const colors = CdsTagConstants.colors;
31047
+ const colors = CdsTag.constants.colors;
30915
31048
  </script>
30916
31049
 
30917
31050
  <template>
@@ -30929,10 +31062,9 @@ The `size` prop offers five sizes from `xs` to `xl`. The default size is `md`.
30929
31062
 
30930
31063
  ```vue
30931
31064
  <script setup lang="ts">
30932
- import { CdsTagConstants } from '@cds/components/CdsTag/api/CdsTag.constants';
30933
31065
  import { CdsTag } from '@central-design-system/components';
30934
31066
 
30935
- const sizes = CdsTagConstants.sizes;
31067
+ const sizes = CdsTag.constants.sizes;
30936
31068
  </script>
30937
31069
 
30938
31070
  <template>
@@ -31282,6 +31414,8 @@ const remove = (tag: string) => {
31282
31414
 
31283
31415
  _Category: Content · since 4.0.0 · status: new_
31284
31416
 
31417
+ _Tests: none yet — behavior is not covered by automated tests_
31418
+
31285
31419
  A tag group turns a set of CdsTag into a toggle: the selected tag is highlighted, the value is available through `v-model`, and the tags that do not fit move into a horizontal scroll. Fits catalog filters, category pickers and quick period switches.
31286
31420
 
31287
31421
  **See also:** If the choice should look like buttons, take CdsButtonToggle. For a choice out of a long list use CdsSelect, and for separate independent tags without selection just use CdsTag.
@@ -31719,6 +31853,8 @@ const group = ref<InstanceType<typeof CdsTagGroup> | null>(null);
31719
31853
 
31720
31854
  _Category: Controls · since 4.0.0_
31721
31855
 
31856
+ _Tests: none yet — behavior is not covered by automated tests_
31857
+
31722
31858
  A text area is a field for multiline text: a comment, a description, a support request. Around the native `textarea` the component gathers everything a form needs: a label, a description, hints, error messages, clearing and a character counter, and with `auto-grow` it grows together with the text.
31723
31859
 
31724
31860
  **See also:** For a short single-line value use CdsTextInput, to pick from a ready list of options — CdsSelect.
@@ -32173,7 +32309,7 @@ const publish = async () => {
32173
32309
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
32174
32310
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
32175
32311
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
32176
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
32312
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
32177
32313
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
32178
32314
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
32179
32315
  | `prepend-inner` | `CdsInputDefaultSlot` | Slot added at the start of the input |
@@ -32200,6 +32336,8 @@ const publish = async () => {
32200
32336
 
32201
32337
  _Category: Controls · since 4.0.0_
32202
32338
 
32339
+ _Tests: API 87/87 · 86 unit · 3 e2e · 6 known bugs · lines 97.2% (v4.0.0-alpha.11) · a11y: 12 axe recommendations (v4.0.0-alpha.11)_
32340
+
32203
32341
  A text field is the basic way to get data from the user: a name, an email, an amount, a search query. Around the native `input` the component gathers everything a form needs: a label, a description, hints, error messages, icons, clearing and a character counter.
32204
32342
 
32205
32343
  **See also:** For multiline text use CdsTextArea, to pick from a ready list of options use CdsSelect.
@@ -32901,7 +33039,7 @@ const sendMessage = () => {
32901
33039
  | `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
32902
33040
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
32903
33041
  | `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
32904
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
33042
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
32905
33043
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
32906
33044
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
32907
33045
  | `prepend-inner` | `CdsInputDefaultSlot` | Slot added at the start of the input |
@@ -32928,6 +33066,8 @@ const sendMessage = () => {
32928
33066
 
32929
33067
  _Category: Controls · since 4.0.0_
32930
33068
 
33069
+ _Tests: none yet — behavior is not covered by automated tests_
33070
+
32931
33071
  Time selection: hours, minutes and — if you want — seconds. The value can be typed on the keyboard or stepped through with the arrows, and `v-model` receives a string in the given format (`HH:mm` by default), which is convenient to store and to send to the server.
32932
33072
 
32933
33073
  **See also:** To pick a date use CdsDatePicker, and if you need a field with a date and a time at once — the ready CdsDateInput with the `with-time` prop: it puts this clock under the calendar and brings everything together into one string itself.
@@ -33432,6 +33572,8 @@ const dateTime = ref('01.09.2026 09:30');
33432
33572
 
33433
33573
  _Category: Feedback · since 4.0.0 · status: new_
33434
33574
 
33575
+ _Tests: none yet — behavior is not covered by automated tests_
33576
+
33435
33577
  A toast is a pop-up notification about the result of an action: the changes are saved, the file is uploaded, the request failed. It appears above the page, does not interrupt the work and closes itself once `timeout` runs out.
33436
33578
 
33437
33579
  **See also:** For a stream of events where notifications arrive one after another use CdsToastQueue. A message that has to stay on the page belongs in CdsNotification, and a question that requires a decision from the user — in the CdsModal dialog.
@@ -33877,6 +34019,8 @@ const send = () => {
33877
34019
 
33878
34020
  _Category: Feedback · since 4.0.0 · status: new_
33879
34021
 
34022
+ _Tests: none yet — behavior is not covered by automated tests_
34023
+
33880
34024
  A queue of pop-up notifications built on CdsToast. Put the messages into the `v-model` array — the queue will show them one by one or as a stack, respect the limit of simultaneously visible toasts and close the ones that are done.
33881
34025
 
33882
34026
  **See also:** For a single notification — a save confirmation, for example — CdsToast is enough.
@@ -34225,6 +34369,8 @@ const push = () => {
34225
34369
 
34226
34370
  _Category: Controls · since 4.0.0_
34227
34371
 
34372
+ _Tests: none yet — behavior is not covered by automated tests_
34373
+
34228
34374
  A toggle is an on/off switch for a setting that applies immediately, without a "Save" button: notifications, auto-renewal, profile visibility. It is built on CdsInput: it can do a label and a description, messages and errors, loading and the indeterminate state.
34229
34375
 
34230
34376
  **See also:** A toggle changes the setting instantly. If the choice is applied together with the rest of the form by a button, take CdsCheckbox, and to pick one option out of a set — CdsRadioGroup.
@@ -34275,11 +34421,10 @@ Five sizes on the `size` scale — from `xs` to `xl`, `md` by default.
34275
34421
 
34276
34422
  ```vue
34277
34423
  <script setup lang="ts">
34278
- import { CdsToggleConstants } from '@cds/components/CdsToggle/api/CdsToggle.constants';
34279
34424
  import { CdsToggle } from '@central-design-system/components';
34280
34425
  import { ref } from 'vue';
34281
34426
 
34282
- const sizes = CdsToggleConstants.sizes;
34427
+ const sizes = CdsToggle.constants.sizes;
34283
34428
  const enabled = ref(true);
34284
34429
  </script>
34285
34430
 
@@ -34678,7 +34823,7 @@ const total = computed(() => options.reduce((sum, option) => sum + (selected.val
34678
34823
  | `input` | `SelectionControlSlot` | Slot for the default input element. |
34679
34824
  | `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
34680
34825
  | `loader` | `LoaderSlotProps` | Slot for a custom loading indicator. |
34681
- | `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
34826
+ | `message` | `CdsMessageSlot` | Slot for customizing the content of a message |
34682
34827
  | `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
34683
34828
  | `prepend` | `CdsInputSlot` | Adds an element before the input |
34684
34829
  | `thumb` | `{ icon: IconValue \| undefined; } & CdsToggleSlot` | Slot for the content of the thumb. |
@@ -34705,6 +34850,8 @@ const total = computed(() => options.reduce((sum, option) => sum + (selected.val
34705
34850
 
34706
34851
  _Category: Layouts · since 4.0.0_
34707
34852
 
34853
+ _Tests: API 0/10 · 3 unit · lines 72.7% (v4.0.0-alpha.11) · a11y: 5 axe recommendations (v4.0.0-alpha.11)_
34854
+
34708
34855
  A horizontal bar with a title and actions: it fills the header and the footer of the application, and on a page it assembles the title of a section together with its buttons. `CdsToolbarTitle` stretches and pushes the left and the right groups to the edges on its own.
34709
34856
 
34710
34857
  **See also:** The toolbar only lays the content out — the place in the layout is reserved by CdsHeader and CdsFooter. For navigating the subsections take CdsTabs; for an action bar over a record take CdsButtonGroup.
@@ -34963,6 +35110,8 @@ import {
34963
35110
 
34964
35111
  _Category: Content · since 4.0.0_
34965
35112
 
35113
+ _Tests: none yet — behavior is not covered by automated tests_
35114
+
34966
35115
  A tooltip briefly explains an interface element on hover or focus: it names an icon button, shows the full text of a truncated line, explains why an action is unavailable. It appears and disappears on its own — the user does not have to press or close anything.
34967
35116
 
34968
35117
  **See also:** A tooltip is for a short text without interaction. A list of actions on click is the job of CdsMenu, and a dialog with a form and buttons is the job of CdsModal.
@@ -35409,6 +35558,8 @@ const active = ref(false);
35409
35558
 
35410
35559
  _Category: Content · since 4.0.0_
35411
35560
 
35561
+ _Tests: none yet — behavior is not covered by automated tests_
35562
+
35412
35563
  A tree shows a hierarchy: catalog sections, project files, an org structure. Nodes expand, get selected by a click or with checkboxes, load from the server and can be dragged, while virtual scrolling keeps everything smooth even with thousands of nodes.
35413
35564
 
35414
35565
  **See also:** For a flat set without nesting take CdsList, for navigation between sections take CdsMenu, and for collapsible sections of content take CdsExpandablePanel.
@@ -36409,6 +36560,8 @@ const selectedFile = computed(() => {
36409
36560
 
36410
36561
  _Category: Controls · since 4.0.0_
36411
36562
 
36563
+ _Tests: none yet — behavior is not covered by automated tests_
36564
+
36412
36565
  The uploader sends files to the server right from the interface: the user picks them in the system dialog or drags them onto the button, and the component shows the list of what was uploaded — with a status, progress, downloading and removal. Every step of the file lifecycle comes with an event.
36413
36566
 
36414
36567
  **See also:** The uploader sends the files over HTTP itself. If the files only have to be picked and sent together with the form, take the CdsFileInput field, and for a drop zone with image previews — CdsFileUpload.
@@ -37119,6 +37272,8 @@ const handlePreview = (file: NUploader.IUploadFile) => {
37119
37272
 
37120
37273
  _Category: Content · since 4.0.0 · status: new_
37121
37274
 
37275
+ _Tests: none yet — behavior is not covered by automated tests_
37276
+
37122
37277
  Virtual scrolling keeps long lists fast: only the visible rows get into the DOM, not the whole array. Pass the records to `items`, the markup of a row to the slot, and a list of tens of thousands of positions scrolls as smoothly as a list of ten.
37123
37278
 
37124
37279
  **See also:** The dropdowns of CdsSelect and CdsAutocomplete, as well as the CdsTree tree, already virtualize their items — there is no need to wrap them. Render a short list — up to a couple of hundred rows — with the regular CdsList: virtualization will not pay off there.