@central-design-system/skills 4.0.0-alpha.6

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 (321) hide show
  1. package/.claude-plugin/plugin.json +6 -0
  2. package/README.md +218 -0
  3. package/bin/cds-skills.mjs +124 -0
  4. package/package.json +33 -0
  5. package/skills/cds-builder/GENERATION.md +44 -0
  6. package/skills/cds-builder/SKILL.md +308 -0
  7. package/skills/cds-builder/references/component-decision-tree.md +310 -0
  8. package/skills/cds-builder/references/components/cds-app/api.md +19 -0
  9. package/skills/cds-builder/references/components/cds-app/tokens.md +12 -0
  10. package/skills/cds-builder/references/components/cds-autocomplete/api.md +155 -0
  11. package/skills/cds-builder/references/components/cds-autocomplete/examples.md +447 -0
  12. package/skills/cds-builder/references/components/cds-autocomplete/guidelines.md +10 -0
  13. package/skills/cds-builder/references/components/cds-autocomplete/tokens.md +19 -0
  14. package/skills/cds-builder/references/components/cds-avatar/api.md +35 -0
  15. package/skills/cds-builder/references/components/cds-avatar/examples.md +240 -0
  16. package/skills/cds-builder/references/components/cds-avatar/guidelines.md +10 -0
  17. package/skills/cds-builder/references/components/cds-avatar/tokens.md +32 -0
  18. package/skills/cds-builder/references/components/cds-badge/api.md +44 -0
  19. package/skills/cds-builder/references/components/cds-badge/examples.md +332 -0
  20. package/skills/cds-builder/references/components/cds-badge/guidelines.md +10 -0
  21. package/skills/cds-builder/references/components/cds-badge/tokens.md +32 -0
  22. package/skills/cds-builder/references/components/cds-breadcrumbs/api.md +83 -0
  23. package/skills/cds-builder/references/components/cds-breadcrumbs/examples.md +219 -0
  24. package/skills/cds-builder/references/components/cds-breadcrumbs/guidelines.md +10 -0
  25. package/skills/cds-builder/references/components/cds-breadcrumbs/tokens.md +24 -0
  26. package/skills/cds-builder/references/components/cds-button/api.md +66 -0
  27. package/skills/cds-builder/references/components/cds-button/examples.md +324 -0
  28. package/skills/cds-builder/references/components/cds-button/guidelines.md +10 -0
  29. package/skills/cds-builder/references/components/cds-button/tokens.md +190 -0
  30. package/skills/cds-builder/references/components/cds-button-group/api.md +27 -0
  31. package/skills/cds-builder/references/components/cds-button-group/examples.md +33 -0
  32. package/skills/cds-builder/references/components/cds-button-group/tokens.md +17 -0
  33. package/skills/cds-builder/references/components/cds-button-toggle/api.md +51 -0
  34. package/skills/cds-builder/references/components/cds-button-toggle/examples.md +278 -0
  35. package/skills/cds-builder/references/components/cds-button-toggle/guidelines.md +10 -0
  36. package/skills/cds-builder/references/components/cds-button-toggle/tokens.md +13 -0
  37. package/skills/cds-builder/references/components/cds-card/api.md +221 -0
  38. package/skills/cds-builder/references/components/cds-card/examples.md +652 -0
  39. package/skills/cds-builder/references/components/cds-card/guidelines.md +10 -0
  40. package/skills/cds-builder/references/components/cds-card/tokens.md +46 -0
  41. package/skills/cds-builder/references/components/cds-carousel/api.md +107 -0
  42. package/skills/cds-builder/references/components/cds-carousel/examples.md +444 -0
  43. package/skills/cds-builder/references/components/cds-carousel/guidelines.md +10 -0
  44. package/skills/cds-builder/references/components/cds-carousel/tokens.md +17 -0
  45. package/skills/cds-builder/references/components/cds-checkbox/api.md +93 -0
  46. package/skills/cds-builder/references/components/cds-checkbox/examples.md +319 -0
  47. package/skills/cds-builder/references/components/cds-checkbox/guidelines.md +10 -0
  48. package/skills/cds-builder/references/components/cds-checkbox/tokens.md +18 -0
  49. package/skills/cds-builder/references/components/cds-checkbox-button/api.md +56 -0
  50. package/skills/cds-builder/references/components/cds-checkbox-button/examples.md +29 -0
  51. package/skills/cds-builder/references/components/cds-checkbox-button/tokens.md +56 -0
  52. package/skills/cds-builder/references/components/cds-combobox/api.md +158 -0
  53. package/skills/cds-builder/references/components/cds-combobox/examples.md +264 -0
  54. package/skills/cds-builder/references/components/cds-combobox/guidelines.md +10 -0
  55. package/skills/cds-builder/references/components/cds-combobox/tokens.md +19 -0
  56. package/skills/cds-builder/references/components/cds-counter/api.md +24 -0
  57. package/skills/cds-builder/references/components/cds-counter/examples.md +93 -0
  58. package/skills/cds-builder/references/components/cds-counter/tokens.md +11 -0
  59. package/skills/cds-builder/references/components/cds-date-input/api.md +151 -0
  60. package/skills/cds-builder/references/components/cds-date-input/examples.md +479 -0
  61. package/skills/cds-builder/references/components/cds-date-input/guidelines.md +10 -0
  62. package/skills/cds-builder/references/components/cds-date-input/tokens.md +16 -0
  63. package/skills/cds-builder/references/components/cds-date-picker/api.md +63 -0
  64. package/skills/cds-builder/references/components/cds-date-picker/examples.md +394 -0
  65. package/skills/cds-builder/references/components/cds-date-picker/guidelines.md +10 -0
  66. package/skills/cds-builder/references/components/cds-date-picker/tokens.md +66 -0
  67. package/skills/cds-builder/references/components/cds-defaults-provider/api.md +21 -0
  68. package/skills/cds-builder/references/components/cds-description/api.md +22 -0
  69. package/skills/cds-builder/references/components/cds-description/examples.md +69 -0
  70. package/skills/cds-builder/references/components/cds-description/tokens.md +11 -0
  71. package/skills/cds-builder/references/components/cds-divider/api.md +29 -0
  72. package/skills/cds-builder/references/components/cds-divider/examples.md +374 -0
  73. package/skills/cds-builder/references/components/cds-divider/guidelines.md +10 -0
  74. package/skills/cds-builder/references/components/cds-divider/tokens.md +38 -0
  75. package/skills/cds-builder/references/components/cds-drawer/api.md +53 -0
  76. package/skills/cds-builder/references/components/cds-drawer/examples.md +432 -0
  77. package/skills/cds-builder/references/components/cds-drawer/guidelines.md +9 -0
  78. package/skills/cds-builder/references/components/cds-drawer/tokens.md +27 -0
  79. package/skills/cds-builder/references/components/cds-empty-state/api.md +55 -0
  80. package/skills/cds-builder/references/components/cds-empty-state/examples.md +330 -0
  81. package/skills/cds-builder/references/components/cds-empty-state/guidelines.md +9 -0
  82. package/skills/cds-builder/references/components/cds-empty-state/tokens.md +25 -0
  83. package/skills/cds-builder/references/components/cds-expandable-panel/api.md +157 -0
  84. package/skills/cds-builder/references/components/cds-expandable-panel/examples.md +569 -0
  85. package/skills/cds-builder/references/components/cds-expandable-panel/guidelines.md +10 -0
  86. package/skills/cds-builder/references/components/cds-expandable-panel/tokens.md +34 -0
  87. package/skills/cds-builder/references/components/cds-field/api.md +62 -0
  88. package/skills/cds-builder/references/components/cds-field/examples.md +202 -0
  89. package/skills/cds-builder/references/components/cds-field/tokens.md +94 -0
  90. package/skills/cds-builder/references/components/cds-file-input/api.md +109 -0
  91. package/skills/cds-builder/references/components/cds-file-input/examples.md +368 -0
  92. package/skills/cds-builder/references/components/cds-file-input/guidelines.md +10 -0
  93. package/skills/cds-builder/references/components/cds-file-input/tokens.md +15 -0
  94. package/skills/cds-builder/references/components/cds-file-upload/api.md +296 -0
  95. package/skills/cds-builder/references/components/cds-file-upload/examples.md +411 -0
  96. package/skills/cds-builder/references/components/cds-file-upload/guidelines.md +10 -0
  97. package/skills/cds-builder/references/components/cds-file-upload/tokens.md +50 -0
  98. package/skills/cds-builder/references/components/cds-footer/api.md +35 -0
  99. package/skills/cds-builder/references/components/cds-footer/examples.md +219 -0
  100. package/skills/cds-builder/references/components/cds-footer/guidelines.md +9 -0
  101. package/skills/cds-builder/references/components/cds-footer/tokens.md +14 -0
  102. package/skills/cds-builder/references/components/cds-form/api.md +48 -0
  103. package/skills/cds-builder/references/components/cds-form/examples.md +552 -0
  104. package/skills/cds-builder/references/components/cds-form/guidelines.md +10 -0
  105. package/skills/cds-builder/references/components/cds-form/tokens.md +15 -0
  106. package/skills/cds-builder/references/components/cds-functional-button/api.md +34 -0
  107. package/skills/cds-builder/references/components/cds-functional-button/examples.md +254 -0
  108. package/skills/cds-builder/references/components/cds-functional-button/guidelines.md +10 -0
  109. package/skills/cds-builder/references/components/cds-functional-button/tokens.md +35 -0
  110. package/skills/cds-builder/references/components/cds-grid/api.md +66 -0
  111. package/skills/cds-builder/references/components/cds-grid/examples.md +687 -0
  112. package/skills/cds-builder/references/components/cds-grid/guidelines.md +9 -0
  113. package/skills/cds-builder/references/components/cds-header/api.md +35 -0
  114. package/skills/cds-builder/references/components/cds-header/examples.md +345 -0
  115. package/skills/cds-builder/references/components/cds-header/guidelines.md +9 -0
  116. package/skills/cds-builder/references/components/cds-header/tokens.md +13 -0
  117. package/skills/cds-builder/references/components/cds-highlight/api.md +22 -0
  118. package/skills/cds-builder/references/components/cds-highlight/examples.md +313 -0
  119. package/skills/cds-builder/references/components/cds-highlight/guidelines.md +10 -0
  120. package/skills/cds-builder/references/components/cds-highlight/tokens.md +18 -0
  121. package/skills/cds-builder/references/components/cds-icon/api.md +33 -0
  122. package/skills/cds-builder/references/components/cds-icon/examples.md +272 -0
  123. package/skills/cds-builder/references/components/cds-icon/guidelines.md +10 -0
  124. package/skills/cds-builder/references/components/cds-icon/tokens.md +30 -0
  125. package/skills/cds-builder/references/components/cds-image/api.md +67 -0
  126. package/skills/cds-builder/references/components/cds-image/examples.md +437 -0
  127. package/skills/cds-builder/references/components/cds-image/guidelines.md +10 -0
  128. package/skills/cds-builder/references/components/cds-image/tokens.md +14 -0
  129. package/skills/cds-builder/references/components/cds-input/api.md +80 -0
  130. package/skills/cds-builder/references/components/cds-input/examples.md +205 -0
  131. package/skills/cds-builder/references/components/cds-input/tokens.md +108 -0
  132. package/skills/cds-builder/references/components/cds-label/api.md +25 -0
  133. package/skills/cds-builder/references/components/cds-label/examples.md +72 -0
  134. package/skills/cds-builder/references/components/cds-label/tokens.md +12 -0
  135. package/skills/cds-builder/references/components/cds-layout/api.md +50 -0
  136. package/skills/cds-builder/references/components/cds-layout/examples.md +431 -0
  137. package/skills/cds-builder/references/components/cds-layout/guidelines.md +9 -0
  138. package/skills/cds-builder/references/components/cds-layout/tokens.md +12 -0
  139. package/skills/cds-builder/references/components/cds-link/api.md +33 -0
  140. package/skills/cds-builder/references/components/cds-link/examples.md +195 -0
  141. package/skills/cds-builder/references/components/cds-link/guidelines.md +10 -0
  142. package/skills/cds-builder/references/components/cds-link/tokens.md +16 -0
  143. package/skills/cds-builder/references/components/cds-list/api.md +329 -0
  144. package/skills/cds-builder/references/components/cds-list/examples.md +653 -0
  145. package/skills/cds-builder/references/components/cds-list/guidelines.md +10 -0
  146. package/skills/cds-builder/references/components/cds-list/tokens.md +125 -0
  147. package/skills/cds-builder/references/components/cds-loader/api.md +18 -0
  148. package/skills/cds-builder/references/components/cds-loader/examples.md +59 -0
  149. package/skills/cds-builder/references/components/cds-loader/tokens.md +50 -0
  150. package/skills/cds-builder/references/components/cds-main/api.md +14 -0
  151. package/skills/cds-builder/references/components/cds-main/examples.md +60 -0
  152. package/skills/cds-builder/references/components/cds-menu/api.md +84 -0
  153. package/skills/cds-builder/references/components/cds-menu/examples.md +595 -0
  154. package/skills/cds-builder/references/components/cds-menu/guidelines.md +10 -0
  155. package/skills/cds-builder/references/components/cds-menu/tokens.md +19 -0
  156. package/skills/cds-builder/references/components/cds-messages/api.md +29 -0
  157. package/skills/cds-builder/references/components/cds-messages/examples.md +119 -0
  158. package/skills/cds-builder/references/components/cds-messages/tokens.md +15 -0
  159. package/skills/cds-builder/references/components/cds-modal/api.md +86 -0
  160. package/skills/cds-builder/references/components/cds-modal/examples.md +516 -0
  161. package/skills/cds-builder/references/components/cds-modal/guidelines.md +10 -0
  162. package/skills/cds-builder/references/components/cds-modal/tokens.md +22 -0
  163. package/skills/cds-builder/references/components/cds-notification/api.md +46 -0
  164. package/skills/cds-builder/references/components/cds-notification/examples.md +314 -0
  165. package/skills/cds-builder/references/components/cds-notification/guidelines.md +10 -0
  166. package/skills/cds-builder/references/components/cds-notification/tokens.md +23 -0
  167. package/skills/cds-builder/references/components/cds-notification-alert/api.md +93 -0
  168. package/skills/cds-builder/references/components/cds-notification-alert/examples.md +202 -0
  169. package/skills/cds-builder/references/components/cds-notification-alert/tokens.md +15 -0
  170. package/skills/cds-builder/references/components/cds-otp-input/api.md +106 -0
  171. package/skills/cds-builder/references/components/cds-otp-input/examples.md +329 -0
  172. package/skills/cds-builder/references/components/cds-otp-input/guidelines.md +10 -0
  173. package/skills/cds-builder/references/components/cds-otp-input/tokens.md +41 -0
  174. package/skills/cds-builder/references/components/cds-overlay/api.md +85 -0
  175. package/skills/cds-builder/references/components/cds-overlay/examples.md +409 -0
  176. package/skills/cds-builder/references/components/cds-overlay/guidelines.md +9 -0
  177. package/skills/cds-builder/references/components/cds-overlay/tokens.md +12 -0
  178. package/skills/cds-builder/references/components/cds-page/api.md +21 -0
  179. package/skills/cds-builder/references/components/cds-page/examples.md +123 -0
  180. package/skills/cds-builder/references/components/cds-pagination/api.md +67 -0
  181. package/skills/cds-builder/references/components/cds-pagination/examples.md +320 -0
  182. package/skills/cds-builder/references/components/cds-pagination/guidelines.md +10 -0
  183. package/skills/cds-builder/references/components/cds-pagination/tokens.md +20 -0
  184. package/skills/cds-builder/references/components/cds-progress-bar/api.md +53 -0
  185. package/skills/cds-builder/references/components/cds-progress-bar/examples.md +393 -0
  186. package/skills/cds-builder/references/components/cds-progress-bar/guidelines.md +10 -0
  187. package/skills/cds-builder/references/components/cds-progress-bar/tokens.md +33 -0
  188. package/skills/cds-builder/references/components/cds-progress-circle/api.md +30 -0
  189. package/skills/cds-builder/references/components/cds-progress-circle/examples.md +326 -0
  190. package/skills/cds-builder/references/components/cds-progress-circle/guidelines.md +10 -0
  191. package/skills/cds-builder/references/components/cds-progress-circle/tokens.md +31 -0
  192. package/skills/cds-builder/references/components/cds-radio/api.md +47 -0
  193. package/skills/cds-builder/references/components/cds-radio/tokens.md +36 -0
  194. package/skills/cds-builder/references/components/cds-radio-group/api.md +87 -0
  195. package/skills/cds-builder/references/components/cds-radio-group/examples.md +320 -0
  196. package/skills/cds-builder/references/components/cds-radio-group/guidelines.md +10 -0
  197. package/skills/cds-builder/references/components/cds-radio-group/tokens.md +14 -0
  198. package/skills/cds-builder/references/components/cds-responsive/api.md +29 -0
  199. package/skills/cds-builder/references/components/cds-responsive/examples.md +271 -0
  200. package/skills/cds-builder/references/components/cds-responsive/guidelines.md +10 -0
  201. package/skills/cds-builder/references/components/cds-responsive/tokens.md +13 -0
  202. package/skills/cds-builder/references/components/cds-select/api.md +155 -0
  203. package/skills/cds-builder/references/components/cds-select/examples.md +794 -0
  204. package/skills/cds-builder/references/components/cds-select/guidelines.md +10 -0
  205. package/skills/cds-builder/references/components/cds-select/tokens.md +17 -0
  206. package/skills/cds-builder/references/components/cds-selection-control/api.md +60 -0
  207. package/skills/cds-builder/references/components/cds-selection-control/examples.md +468 -0
  208. package/skills/cds-builder/references/components/cds-selection-control-group/api.md +45 -0
  209. package/skills/cds-builder/references/components/cds-selection-control-group/examples.md +349 -0
  210. package/skills/cds-builder/references/components/cds-skeleton-loader/api.md +30 -0
  211. package/skills/cds-builder/references/components/cds-skeleton-loader/examples.md +297 -0
  212. package/skills/cds-builder/references/components/cds-skeleton-loader/guidelines.md +10 -0
  213. package/skills/cds-builder/references/components/cds-skeleton-loader/tokens.md +62 -0
  214. package/skills/cds-builder/references/components/cds-slide-group/api.md +76 -0
  215. package/skills/cds-builder/references/components/cds-slide-group/examples.md +304 -0
  216. package/skills/cds-builder/references/components/cds-slide-group/guidelines.md +9 -0
  217. package/skills/cds-builder/references/components/cds-slide-group/tokens.md +11 -0
  218. package/skills/cds-builder/references/components/cds-slide-view/api.md +88 -0
  219. package/skills/cds-builder/references/components/cds-slide-view/examples.md +311 -0
  220. package/skills/cds-builder/references/components/cds-slide-view/guidelines.md +9 -0
  221. package/skills/cds-builder/references/components/cds-slide-view/tokens.md +14 -0
  222. package/skills/cds-builder/references/components/cds-stages/api.md +31 -0
  223. package/skills/cds-builder/references/components/cds-stages/examples.md +230 -0
  224. package/skills/cds-builder/references/components/cds-stages/guidelines.md +10 -0
  225. package/skills/cds-builder/references/components/cds-stages/tokens.md +27 -0
  226. package/skills/cds-builder/references/components/cds-status/api.md +24 -0
  227. package/skills/cds-builder/references/components/cds-status/examples.md +170 -0
  228. package/skills/cds-builder/references/components/cds-status/guidelines.md +10 -0
  229. package/skills/cds-builder/references/components/cds-status/tokens.md +17 -0
  230. package/skills/cds-builder/references/components/cds-steps/api.md +176 -0
  231. package/skills/cds-builder/references/components/cds-steps/examples.md +320 -0
  232. package/skills/cds-builder/references/components/cds-steps/guidelines.md +10 -0
  233. package/skills/cds-builder/references/components/cds-steps/tokens.md +52 -0
  234. package/skills/cds-builder/references/components/cds-surface/api.md +30 -0
  235. package/skills/cds-builder/references/components/cds-surface/examples.md +106 -0
  236. package/skills/cds-builder/references/components/cds-table/api.md +120 -0
  237. package/skills/cds-builder/references/components/cds-table/examples.md +3049 -0
  238. package/skills/cds-builder/references/components/cds-table/guidelines.md +10 -0
  239. package/skills/cds-builder/references/components/cds-table/tokens.md +92 -0
  240. package/skills/cds-builder/references/components/cds-tabs/api.md +179 -0
  241. package/skills/cds-builder/references/components/cds-tabs/examples.md +610 -0
  242. package/skills/cds-builder/references/components/cds-tabs/guidelines.md +10 -0
  243. package/skills/cds-builder/references/components/cds-tabs/tokens.md +40 -0
  244. package/skills/cds-builder/references/components/cds-tag/api.md +64 -0
  245. package/skills/cds-builder/references/components/cds-tag/examples.md +278 -0
  246. package/skills/cds-builder/references/components/cds-tag/guidelines.md +10 -0
  247. package/skills/cds-builder/references/components/cds-tag/tokens.md +67 -0
  248. package/skills/cds-builder/references/components/cds-tag-group/api.md +58 -0
  249. package/skills/cds-builder/references/components/cds-tag-group/examples.md +346 -0
  250. package/skills/cds-builder/references/components/cds-tag-group/guidelines.md +10 -0
  251. package/skills/cds-builder/references/components/cds-tag-group/tokens.md +18 -0
  252. package/skills/cds-builder/references/components/cds-text-area/api.md +113 -0
  253. package/skills/cds-builder/references/components/cds-text-area/examples.md +327 -0
  254. package/skills/cds-builder/references/components/cds-text-area/guidelines.md +10 -0
  255. package/skills/cds-builder/references/components/cds-text-area/tokens.md +16 -0
  256. package/skills/cds-builder/references/components/cds-text-input/api.md +115 -0
  257. package/skills/cds-builder/references/components/cds-text-input/examples.md +546 -0
  258. package/skills/cds-builder/references/components/cds-text-input/guidelines.md +10 -0
  259. package/skills/cds-builder/references/components/cds-text-input/tokens.md +17 -0
  260. package/skills/cds-builder/references/components/cds-time-picker/api.md +44 -0
  261. package/skills/cds-builder/references/components/cds-time-picker/examples.md +407 -0
  262. package/skills/cds-builder/references/components/cds-time-picker/guidelines.md +10 -0
  263. package/skills/cds-builder/references/components/cds-time-picker/tokens.md +23 -0
  264. package/skills/cds-builder/references/components/cds-toast/api.md +97 -0
  265. package/skills/cds-builder/references/components/cds-toast/examples.md +296 -0
  266. package/skills/cds-builder/references/components/cds-toast/guidelines.md +10 -0
  267. package/skills/cds-builder/references/components/cds-toast/tokens.md +26 -0
  268. package/skills/cds-builder/references/components/cds-toast-queue/api.md +86 -0
  269. package/skills/cds-builder/references/components/cds-toast-queue/examples.md +227 -0
  270. package/skills/cds-builder/references/components/cds-toggle/api.md +97 -0
  271. package/skills/cds-builder/references/components/cds-toggle/examples.md +335 -0
  272. package/skills/cds-builder/references/components/cds-toggle/guidelines.md +10 -0
  273. package/skills/cds-builder/references/components/cds-toggle/tokens.md +91 -0
  274. package/skills/cds-builder/references/components/cds-toolbar/api.md +44 -0
  275. package/skills/cds-builder/references/components/cds-toolbar/examples.md +186 -0
  276. package/skills/cds-builder/references/components/cds-toolbar/guidelines.md +9 -0
  277. package/skills/cds-builder/references/components/cds-toolbar/tokens.md +13 -0
  278. package/skills/cds-builder/references/components/cds-tooltip/api.md +83 -0
  279. package/skills/cds-builder/references/components/cds-tooltip/examples.md +321 -0
  280. package/skills/cds-builder/references/components/cds-tooltip/guidelines.md +10 -0
  281. package/skills/cds-builder/references/components/cds-tooltip/tokens.md +25 -0
  282. package/skills/cds-builder/references/components/cds-tree/api.md +169 -0
  283. package/skills/cds-builder/references/components/cds-tree/examples.md +785 -0
  284. package/skills/cds-builder/references/components/cds-tree/guidelines.md +10 -0
  285. package/skills/cds-builder/references/components/cds-tree/tokens.md +39 -0
  286. package/skills/cds-builder/references/components/cds-uploader/api.md +105 -0
  287. package/skills/cds-builder/references/components/cds-uploader/examples.md +553 -0
  288. package/skills/cds-builder/references/components/cds-uploader/guidelines.md +10 -0
  289. package/skills/cds-builder/references/components/cds-uploader/tokens.md +26 -0
  290. package/skills/cds-builder/references/components/cds-virtual-scroll/api.md +60 -0
  291. package/skills/cds-builder/references/components/cds-virtual-scroll/examples.md +272 -0
  292. package/skills/cds-builder/references/components/cds-virtual-scroll/guidelines.md +9 -0
  293. package/skills/cds-builder/references/components/cds-virtual-scroll/tokens.md +13 -0
  294. package/skills/cds-builder/references/guides/conventions.md +48 -0
  295. package/skills/cds-builder/references/guides/date-utils.md +301 -0
  296. package/skills/cds-builder/references/guides/display-and-platform.md +263 -0
  297. package/skills/cds-builder/references/guides/forms.md +77 -0
  298. package/skills/cds-builder/references/guides/global-configuration.md +354 -0
  299. package/skills/cds-builder/references/guides/icons.md +172 -0
  300. package/skills/cds-builder/references/guides/internationalization.md +470 -0
  301. package/skills/cds-builder/references/guides/migration-cds3-to-cds4.md +49 -0
  302. package/skills/cds-builder/references/guides/sass-variables.md +238 -0
  303. package/skills/cds-builder/references/guides/setup.md +81 -0
  304. package/skills/cds-builder/references/guides/tailwindcss.md +93 -0
  305. package/skills/cds-builder/references/guides/theme.md +343 -0
  306. package/skills/cds-builder/references/guides/treeshaking.md +237 -0
  307. package/skills/cds-builder/references/patterns/dialogs.md +89 -0
  308. package/skills/cds-builder/references/patterns/forms.md +101 -0
  309. package/skills/cds-builder/references/patterns/page-layout.md +78 -0
  310. package/skills/cds-builder/references/patterns/tables.md +87 -0
  311. package/skills/cds-builder/references/tokens/colors.md +507 -0
  312. package/skills/cds-builder/references/tokens/themes.md +981 -0
  313. package/skills/cds-builder/scripts/check-contracts.mjs +264 -0
  314. package/skills/cds-migrate/GENERATION.md +44 -0
  315. package/skills/cds-migrate/SKILL.md +160 -0
  316. package/skills/cds-migrate/references/migration-full.md +2225 -0
  317. package/skills/cds-refactor/GENERATION.md +44 -0
  318. package/skills/cds-refactor/SKILL.md +187 -0
  319. package/skills/cds-refactor/references/html-to-cds.md +80 -0
  320. package/skills/cds-refactor/references/review-checklist.md +73 -0
  321. package/skills/cds-refactor/references/tailwind-to-cds.md +65 -0
@@ -0,0 +1,794 @@
1
+ # CdsSelect — usage examples
2
+
3
+ > Extracted from Storybook stories (`docs/*.stories.ts`) by `bun run generate:skill`. Do not edit manually.
4
+ > The full component contract is in [api.md](api.md). `v-bind="args"` in templates refers to the props from the **Args** block of the corresponding example.
5
+
6
+ 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](../cds-text-input/api.md), so the label, the description, the messages, validation and the states work exactly as in a text field.
7
+
8
+ ## List items
9
+
10
+ The list is set by the `items` prop — an array of strings or of objects with the same interface as in [CdsList](../cds-list/api.md). While no value is selected, the field shows the `placeholder`.
11
+
12
+ **Example (SFC):**
13
+
14
+ ```vue
15
+ <script setup lang="ts">
16
+ import { CdsSelect } from '@central-design-system/components';
17
+ import { ref } from 'vue';
18
+
19
+ const items = ['Первый', 'Второй', 'Третий', 'Четвёртый'];
20
+
21
+ const selected = ref(null);
22
+ </script>
23
+
24
+ <template>
25
+ <div class="w-[350px] m-auto">
26
+ <CdsSelect
27
+ v-model="selected"
28
+ :items="items"
29
+ label="Выберите значение"
30
+ placeholder="Выбрать значение"
31
+ description="Вспомогательное описание для выбора из списка"
32
+ />
33
+ </div>
34
+ </template>
35
+ ```
36
+
37
+ ## Your own data fields
38
+
39
+ When the objects come from the server as they are, use `item-title` and `item-value` to say which fields the title and the value are taken from. `return-object` puts the whole object into `v-model` instead of just the value.
40
+
41
+ **Example (SFC):**
42
+
43
+ ```vue
44
+ <script setup lang="ts">
45
+ import { CdsSelect } from '@central-design-system/components';
46
+ import { ref } from 'vue';
47
+
48
+ const select = ref({ lang: 'Русский', code: 'ru' });
49
+ const languages = ref([
50
+ { lang: 'English', code: 'en' },
51
+ { lang: 'Русский', code: 'ru' },
52
+ { lang: 'Deutsch', code: 'de' },
53
+ { lang: 'Français', code: 'fr' },
54
+ { lang: 'Italiano', code: 'it' },
55
+ { lang: 'Español', code: 'es' },
56
+ { lang: 'Português', code: 'pt' },
57
+ { lang: 'Nederlands', code: 'nl' },
58
+ { lang: 'Polski', code: 'pl' },
59
+ { lang: 'Svenska', code: 'sv' },
60
+ { lang: 'Dansk', code: 'da' },
61
+ { lang: 'Türkçe', code: 'tr' },
62
+ { lang: '日本語', code: 'ja' },
63
+ { lang: '中文', code: 'zh' },
64
+ { lang: '한국어', code: 'ko' },
65
+ { lang: 'العربية', code: 'ar' },
66
+ { lang: 'עברית', code: 'he' }
67
+ ]);
68
+ </script>
69
+
70
+ <template>
71
+ <div class="w-[350px] m-auto">
72
+ <CdsSelect
73
+ v-model="select"
74
+ :items="languages"
75
+ item-title="lang"
76
+ item-value="code"
77
+ return-object
78
+ label="Выберите язык"
79
+ placeholder="Выбрать язык"
80
+ :messages="select.lang + ' (' + select.code + ')'"
81
+ />
82
+ </div>
83
+ </template>
84
+ ```
85
+
86
+ ## Grouping
87
+
88
+ Split a long list into meaningful blocks: an item with `type: 'subheader'` adds a subheader, one with `type: 'divider'` — a divider. Such items cannot be selected.
89
+
90
+ **Example (SFC):**
91
+
92
+ ```vue
93
+ <script setup lang="ts">
94
+ import { CdsSelect } from '@central-design-system/components';
95
+ import { ref } from 'vue';
96
+
97
+ const items = [
98
+ { type: 'subheader', title: 'Европа' },
99
+ 'Австрия',
100
+ 'Германия',
101
+ 'Франция',
102
+ { type: 'divider' },
103
+ { type: 'subheader', title: 'Азия' },
104
+ 'Китай',
105
+ 'Южная Корея',
106
+ 'Япония'
107
+ ];
108
+
109
+ const selected = ref(null);
110
+ </script>
111
+
112
+ <template>
113
+ <div class="w-[350px] m-auto">
114
+ <CdsSelect v-model="selected" :items="items" label="Страна производства" placeholder="Выберите страну" />
115
+ </div>
116
+ </template>
117
+ ```
118
+
119
+ ## Multiple selection
120
+
121
+ The `multiple` prop allows selecting several values: the items get checkboxes and the field lists the selection separated by commas. `ellipsis` keeps the listing on a single line and cuts the rest off with an ellipsis.
122
+
123
+ **Example (SFC):**
124
+
125
+ ```vue
126
+ <script setup lang="ts">
127
+ import { CdsSelect } from '@central-design-system/components';
128
+ import { ref } from 'vue';
129
+
130
+ const items = ref([
131
+ 'Австрия',
132
+ 'Бельгия',
133
+ 'Болгария',
134
+ 'Венгрия',
135
+ 'Германия',
136
+ 'Греция',
137
+ 'Дания',
138
+ 'Ирландия',
139
+ 'Испания',
140
+ 'Италия',
141
+ 'Кипр',
142
+ 'Латвия',
143
+ 'Литва',
144
+ 'Люксембург',
145
+ 'Мальта',
146
+ 'Нидерланды',
147
+ 'Польша',
148
+ 'Португалия',
149
+ 'Румыния',
150
+ 'Словакия',
151
+ 'Словения',
152
+ 'Финляндия',
153
+ 'Франция',
154
+ 'Хорватия',
155
+ 'Чехия',
156
+ 'Швеция',
157
+ 'Эстония'
158
+ ]);
159
+
160
+ const selected = ref([]);
161
+ </script>
162
+
163
+ <template>
164
+ <div class="flex flex-col gap-2 w-[350px] m-auto">
165
+ <CdsSelect v-model="selected" multiple :items="items" label="Множественный выбор" placeholder="Выбрать страну" />
166
+
167
+ <CdsSelect
168
+ v-model="selected"
169
+ multiple
170
+ ellipsis
171
+ :items="items"
172
+ label="Множественный выбор в строку"
173
+ placeholder="Выбрать страну"
174
+ />
175
+ </div>
176
+ </template>
177
+ ```
178
+
179
+ ## Selecting all the values
180
+
181
+ The `is-select-all` prop adds a "select all" entry as the first item of the list (works together with `multiple`). The `true` value uses the default caption, a string sets your own.
182
+
183
+ **Example (SFC):**
184
+
185
+ ```vue
186
+ <script setup lang="ts">
187
+ import { CdsSelect } from '@central-design-system/components';
188
+ import { ref } from 'vue';
189
+
190
+ const items = ref([
191
+ 'Австрия',
192
+ 'Бельгия',
193
+ 'Болгария',
194
+ 'Венгрия',
195
+ 'Германия',
196
+ 'Греция',
197
+ 'Дания',
198
+ 'Ирландия',
199
+ 'Испания',
200
+ 'Италия',
201
+ 'Кипр',
202
+ 'Латвия',
203
+ 'Литва',
204
+ 'Люксембург',
205
+ 'Мальта',
206
+ 'Нидерланды',
207
+ 'Польша',
208
+ 'Португалия',
209
+ 'Румыния',
210
+ 'Словакия',
211
+ 'Словения',
212
+ 'Финляндия',
213
+ 'Франция',
214
+ 'Хорватия',
215
+ 'Чехия',
216
+ 'Швеция',
217
+ 'Эстония'
218
+ ]);
219
+
220
+ const selected = ref([]);
221
+ const selectedCustom = ref([]);
222
+ </script>
223
+
224
+ <template>
225
+ <div class="flex flex-col gap-2 w-[350px] m-auto">
226
+ <CdsSelect
227
+ v-model="selected"
228
+ multiple
229
+ is-select-all
230
+ :items="items"
231
+ label="Множественный выбор с «Выбрать все»"
232
+ placeholder="Выбрать страну"
233
+ />
234
+
235
+ <CdsSelect
236
+ v-model="selectedCustom"
237
+ multiple
238
+ is-select-all="Отметить все страны"
239
+ :items="items"
240
+ label="Своя надпись «Выбрать все»"
241
+ placeholder="Выбрать страну"
242
+ />
243
+ </div>
244
+ </template>
245
+ ```
246
+
247
+ ## Chips
248
+
249
+ The `chips` prop shows the selected values as [CdsTag](../cds-tag/api.md) tags, `closable-chips` adds a cross to them — a value is removed right in the field, without opening the menu.
250
+
251
+ **Example (SFC):**
252
+
253
+ ```vue
254
+ <script setup lang="ts">
255
+ import { CdsSelect } from '@central-design-system/components';
256
+ import { ref } from 'vue';
257
+
258
+ const items = ['Австрия', 'Бельгия', 'Германия', 'Греция', 'Испания', 'Италия', 'Франция'];
259
+
260
+ const selected = ref(['Германия', 'Испания']);
261
+ const selectedClosable = ref(['Австрия', 'Италия', 'Франция']);
262
+ </script>
263
+
264
+ <template>
265
+ <div class="flex flex-col gap-2 w-[350px] m-auto">
266
+ <CdsSelect v-model="selected" multiple chips :items="items" label="Чипы" placeholder="Выбрать страну" />
267
+
268
+ <CdsSelect
269
+ v-model="selectedClosable"
270
+ multiple
271
+ chips
272
+ closable-chips
273
+ :items="items"
274
+ label="Удаляемые чипы"
275
+ placeholder="Выбрать страну"
276
+ />
277
+ </div>
278
+ </template>
279
+ ```
280
+
281
+ ## Native list
282
+
283
+ The `native-select` prop replaces the custom menu with a native `<select>`: on mobile devices the system list is more familiar. Filtering, virtual scrolling and the menu slots do not work in this mode.
284
+
285
+ **Example (SFC):**
286
+
287
+ ```vue
288
+ <script setup lang="ts">
289
+ import { CdsSelect } from '@central-design-system/components';
290
+ import { ref } from 'vue';
291
+
292
+ const items = ['Первый', 'Второй', 'Третий', 'Четвёртый'];
293
+
294
+ const selected = ref(null);
295
+ </script>
296
+
297
+ <template>
298
+ <div class="w-[350px] m-auto">
299
+ <CdsSelect
300
+ v-model="selected"
301
+ native-select
302
+ :items="items"
303
+ label="Выберите значение"
304
+ placeholder="Выбрать значение"
305
+ />
306
+ </div>
307
+ </template>
308
+ ```
309
+
310
+ ## Tuning the list
311
+
312
+ The `list-props` prop passes any props through to the inner [CdsList](../cds-list/api.md) — in the example `bgColor` paints the background of the menu, and `slim` removes the inner paddings of the menu so that the list fills it entirely. `item-color` sets the color of the selected items (`color` is taken by default). In the same way `menu-props` configures the inner [CdsMenu](../cds-menu/api.md), and `menu-height` limits the height of the menu.
313
+
314
+ **Example (SFC):**
315
+
316
+ ```vue
317
+ <script setup lang="ts">
318
+ import { CdsSelect } from '@central-design-system/components';
319
+ import { ref } from 'vue';
320
+
321
+ const items = ['Яблоко', 'Апельсин', 'Банан', 'Груша'];
322
+
323
+ const selected = ref(['Яблоко']);
324
+ </script>
325
+
326
+ <template>
327
+ <div class="w-[350px] m-auto">
328
+ <CdsSelect
329
+ v-model="selected"
330
+ multiple
331
+ :items="items"
332
+ :list-props="{ bgColor: 'other-cyan-fill', slim: true }"
333
+ item-color="status-warning-fill"
334
+ label="Выберите фрукты"
335
+ placeholder="Выбрать фрукт"
336
+ />
337
+ </div>
338
+ </template>
339
+ ```
340
+
341
+ ## Slots
342
+
343
+ The `item` slot overrides the rendering of an item completely. Be sure to pass `props` into `CdsListItem` — the selection handler lives in them. In the example every country shows its flag and capital.
344
+
345
+ **Example (SFC):**
346
+
347
+ ```vue
348
+ <script setup lang="ts">
349
+ import { CdsListItem, CdsSelect } from '@central-design-system/components';
350
+ import { ref } from 'vue';
351
+
352
+ const countries = ref([
353
+ { title: 'Австрия', flag: '🇦🇹', capital: 'Вена' },
354
+ { title: 'Бельгия', flag: '🇧🇪', capital: 'Брюссель' },
355
+ { title: 'Германия', flag: '🇩🇪', capital: 'Берлин' },
356
+ { title: 'Греция', flag: '🇬🇷', capital: 'Афины' },
357
+ { title: 'Испания', flag: '🇪🇸', capital: 'Мадрид' },
358
+ { title: 'Италия', flag: '🇮🇹', capital: 'Рим' },
359
+ { title: 'Нидерланды', flag: '🇳🇱', capital: 'Амстердам' },
360
+ { title: 'Польша', flag: '🇵🇱', capital: 'Варшава' },
361
+ { title: 'Португалия', flag: '🇵🇹', capital: 'Лиссабон' },
362
+ { title: 'Финляндия', flag: '🇫🇮', capital: 'Хельсинки' },
363
+ { title: 'Франция', flag: '🇫🇷', capital: 'Париж' },
364
+ { title: 'Швеция', flag: '🇸🇪', capital: 'Стокгольм' }
365
+ ]);
366
+ </script>
367
+
368
+ <template>
369
+ <CdsSelect class="w-[350px] m-auto" :items="countries" label="Страны" placeholder="Выбрать страну">
370
+ <template #item="{ item, props }">
371
+ <CdsListItem v-bind="props" :title="item.title">
372
+ <template #prepend>
373
+ <span class="mr-3 text-2xl">{{ item.flag }}</span>
374
+ </template>
375
+ <template #description>
376
+ Столица: <strong>{{ item.capital }}</strong>
377
+ </template>
378
+ </CdsListItem>
379
+ </template>
380
+ </CdsSelect>
381
+ </template>
382
+ ```
383
+
384
+ ## Slots
385
+
386
+ The `selection` slot is your own display of what is selected in the field: the first two countries are shown as tags, the rest are folded into a counter.
387
+
388
+ **Example (SFC):**
389
+
390
+ ```vue
391
+ <script setup lang="ts">
392
+ import { CdsSelect, CdsTag } from '@central-design-system/components';
393
+ import { ref } from 'vue';
394
+
395
+ const items = ref([
396
+ 'Австрия',
397
+ 'Бельгия',
398
+ 'Германия',
399
+ 'Греция',
400
+ 'Испания',
401
+ 'Италия',
402
+ 'Нидерланды',
403
+ 'Польша',
404
+ 'Португалия',
405
+ 'Франция',
406
+ 'Швеция'
407
+ ]);
408
+ const selected = ref(['Португалия', 'Испания', 'Франция']);
409
+ </script>
410
+
411
+ <template>
412
+ <CdsSelect
413
+ v-model="selected"
414
+ class="w-[350px] m-auto"
415
+ multiple
416
+ :items="items"
417
+ label="Выберите страны"
418
+ placeholder="Выбрать страну"
419
+ >
420
+ <template #selection="{ item, index }">
421
+ <CdsTag v-if="index < 2" :text="item" size="sm" />
422
+
423
+ <span v-if="index === 2" class="self-center text-sm text-gray-500"> (+{{ selected.length - 2 }} ещё) </span>
424
+ </template>
425
+ </CdsSelect>
426
+ </template>
427
+ ```
428
+
429
+ ## Slots
430
+
431
+ The `prepend-item` and `append-item` slots add your own entries to the start and the end of the list. In the example the start holds "Select all countries" with a checkbox, and the end — "Load more" with a simulated fetch through `loading`.
432
+
433
+ **Example (SFC):**
434
+
435
+ ```vue
436
+ <script setup lang="ts">
437
+ import { CdsCheckbox, CdsListItem, CdsListItemDivider, CdsSelect } from '@central-design-system/components';
438
+ import { computed, ref } from 'vue';
439
+
440
+ const allCountries = [
441
+ 'Австрия',
442
+ 'Бельгия',
443
+ 'Болгария',
444
+ 'Венгрия',
445
+ 'Германия',
446
+ 'Греция',
447
+ 'Дания',
448
+ 'Ирландия',
449
+ 'Испания',
450
+ 'Италия',
451
+ 'Кипр',
452
+ 'Латвия',
453
+ 'Литва',
454
+ 'Люксембург',
455
+ 'Мальта',
456
+ 'Нидерланды',
457
+ 'Польша',
458
+ 'Португалия',
459
+ 'Румыния',
460
+ 'Словакия',
461
+ 'Словения',
462
+ 'Финляндия',
463
+ 'Франция',
464
+ 'Хорватия',
465
+ 'Чехия',
466
+ 'Швеция',
467
+ 'Эстония'
468
+ ];
469
+
470
+ const loading = ref(false);
471
+ const countries = ref(allCountries.slice(0, 3));
472
+ const selected = ref<string[]>([]);
473
+
474
+ const allSelected = computed(() => countries.value.length > 0 && selected.value.length === countries.value.length);
475
+ const someSelected = computed(() => selected.value.length > 0);
476
+ const hasMore = computed(() => countries.value.length < allCountries.length);
477
+
478
+ function selectingAll() {
479
+ selected.value = allSelected.value ? [] : countries.value.slice();
480
+ }
481
+
482
+ async function addMore() {
483
+ if (!hasMore.value) return;
484
+
485
+ try {
486
+ loading.value = true;
487
+ await new Promise((resolve) => setTimeout(resolve, 1000));
488
+
489
+ countries.value = [...countries.value, allCountries[countries.value.length]];
490
+ } finally {
491
+ loading.value = false;
492
+ }
493
+ }
494
+ </script>
495
+
496
+ <template>
497
+ <CdsSelect
498
+ v-model="selected"
499
+ class="w-[350px] m-auto"
500
+ multiple
501
+ :loading="loading"
502
+ :items="countries"
503
+ label="Страны"
504
+ placeholder="Выбрать страну"
505
+ >
506
+ <template #prepend-item>
507
+ <CdsListItem title="Выбрать все страны" link @click="selectingAll">
508
+ <template #prepend>
509
+ <CdsCheckbox
510
+ :model-value="allSelected"
511
+ :indeterminate="someSelected && !allSelected"
512
+ tabindex="-1"
513
+ hide-messages
514
+ />
515
+ </template>
516
+ </CdsListItem>
517
+
518
+ <CdsListItemDivider />
519
+ </template>
520
+
521
+ <template #append-item>
522
+ <CdsListItemDivider />
523
+
524
+ <CdsListItem v-if="hasMore" title="Добавить еще" prepend-icon="add" :disabled="loading" link @click="addMore" />
525
+ </template>
526
+ </CdsSelect>
527
+ </template>
528
+ ```
529
+
530
+ ## Slots
531
+
532
+ The `menu-header` and `menu-footer` slots add content to the header and the footer of the menu — a search field and a confirmation button, for example. Both slots receive `search` (written into `v-model:search`, it filters the list) and `filteredItems`.
533
+
534
+ **Example (SFC):**
535
+
536
+ ```vue
537
+ <script setup lang="ts">
538
+ import { CdsButton, CdsListItemDivider, CdsSelect, CdsTextInput } from '@central-design-system/components';
539
+ import { ref } from 'vue';
540
+
541
+ const items = ref([
542
+ { id: 1, value: 'Австрия' },
543
+ { id: 2, value: 'Бельгия' },
544
+ { id: 3, value: 'Германия' },
545
+ { id: 4, value: 'Греция' },
546
+ { id: 5, value: 'Испания' },
547
+ { id: 6, value: 'Италия' },
548
+ { id: 7, value: 'Нидерланды' },
549
+ { id: 8, value: 'Франция' },
550
+ { id: 9, value: 'Португалия' }
551
+ ]);
552
+ const model = ref([]);
553
+ const menu = ref(false);
554
+ </script>
555
+
556
+ <template>
557
+ <CdsSelect
558
+ v-model="model"
559
+ v-model:menu="menu"
560
+ class="w-[350px] m-auto"
561
+ :items="items"
562
+ item-title="value"
563
+ item-value="id"
564
+ multiple
565
+ menu-height="280"
566
+ label="Выберите страны"
567
+ placeholder="Выбрать страну"
568
+ >
569
+ <template #menu-header="{ search, filteredItems }">
570
+ <div class="p-2">
571
+ <CdsTextInput
572
+ v-model="search.value"
573
+ :error="!!search.value && !filteredItems.length"
574
+ placeholder="Поиск..."
575
+ prepend-inner-icon="search"
576
+ clearable
577
+ hide-messages
578
+ />
579
+ </div>
580
+
581
+ <CdsListItemDivider />
582
+ </template>
583
+
584
+ <template #menu-footer="{ search, filteredItems }">
585
+ <CdsListItemDivider />
586
+
587
+ <div class="flex items-center p-2 pl-4">
588
+ <span v-if="search.value" class="text-sm text-brand-secondary-content">
589
+ Найдено {{ filteredItems.length }} из {{ items.length }}
590
+ </span>
591
+
592
+ <CdsButton class="ml-auto" text="Принять" @click="menu = false" />
593
+ </div>
594
+ </template>
595
+ </CdsSelect>
596
+ </template>
597
+ ```
598
+
599
+ ## Submitting a form
600
+
601
+ The select takes part in [CdsForm](../cds-form/api.md) validation on a par with text fields: `rules` will not let the form through without a chosen subject. Give optional fields a default value — that way the form is filled in faster.
602
+
603
+ **Example (SFC):**
604
+
605
+ ```vue
606
+ <script setup lang="ts">
607
+ import { CdsButton, CdsForm, CdsSelect } from '@central-design-system/components';
608
+ import { ref } from 'vue';
609
+
610
+ const topics = ['Вопрос по заказу', 'Проблема с оплатой', 'Возврат товара', 'Другое'];
611
+ const priorities = ['Низкий', 'Средний', 'Высокий'];
612
+
613
+ const valid = ref(false);
614
+ const topic = ref(null);
615
+ const priority = ref('Средний');
616
+ const loading = ref(false);
617
+ const sent = ref(false);
618
+
619
+ const rules = [(value: string) => !!value || 'Выберите тему обращения'];
620
+
621
+ async function submit() {
622
+ if (!valid.value) return;
623
+
624
+ try {
625
+ loading.value = true;
626
+ sent.value = false;
627
+ await new Promise((resolve) => setTimeout(resolve, 1500));
628
+ sent.value = true;
629
+ } finally {
630
+ loading.value = false;
631
+ }
632
+ }
633
+ </script>
634
+
635
+ <template>
636
+ <CdsForm v-model="valid" class="flex flex-col gap-2 w-[350px] m-auto" @submit.prevent="submit">
637
+ <CdsSelect v-model="topic" :items="topics" :rules="rules" label="Тема обращения" placeholder="Выберите тему" />
638
+
639
+ <CdsSelect v-model="priority" :items="priorities" label="Приоритет" />
640
+
641
+ <CdsButton type="submit" :loading="loading" text="Отправить" />
642
+
643
+ <p v-if="sent" class="text-sm text-center">Обращение отправлено</p>
644
+ </CdsForm>
645
+ </template>
646
+ ```
647
+
648
+ ## Dependent lists
649
+
650
+ The list of cities depends on the chosen country: while there is no country the second select is turned off through `disabled`, and while the options are loading it shows `loading`. When the country changes the chosen city is reset — otherwise a non-existent pair would stay in the form.
651
+
652
+ **Example (SFC):**
653
+
654
+ ```vue
655
+ <script setup lang="ts">
656
+ import { CdsSelect } from '@central-design-system/components';
657
+ import { ref, watch } from 'vue';
658
+
659
+ const citiesByCountry: Record<string, string[]> = {
660
+ Германия: ['Берлин', 'Гамбург', 'Мюнхен', 'Франкфурт'],
661
+ Испания: ['Барселона', 'Валенсия', 'Мадрид', 'Севилья'],
662
+ Франция: ['Лион', 'Марсель', 'Ницца', 'Париж']
663
+ };
664
+ const countries = Object.keys(citiesByCountry);
665
+
666
+ const country = ref<string | null>(null);
667
+ const city = ref<string | null>(null);
668
+ const cities = ref<string[]>([]);
669
+ const loading = ref(false);
670
+
671
+ watch(country, async (value) => {
672
+ city.value = null;
673
+ cities.value = [];
674
+ if (!value) return;
675
+
676
+ try {
677
+ loading.value = true;
678
+ await new Promise((resolve) => setTimeout(resolve, 800));
679
+ cities.value = citiesByCountry[value];
680
+ } finally {
681
+ loading.value = false;
682
+ }
683
+ });
684
+ </script>
685
+
686
+ <template>
687
+ <div class="flex flex-col gap-2 w-[350px] m-auto">
688
+ <CdsSelect v-model="country" :items="countries" label="Страна" placeholder="Выберите страну" />
689
+
690
+ <CdsSelect
691
+ v-model="city"
692
+ :items="cities"
693
+ :loading="loading"
694
+ :disabled="!country"
695
+ label="Город"
696
+ :placeholder="country ? 'Выберите город' : 'Сначала выберите страну'"
697
+ />
698
+ </div>
699
+ </template>
700
+ ```
701
+
702
+ ## Picking assignees
703
+
704
+ The combination of `multiple`, `chips` and `closable-chips` shows the chosen people as tags and removes them by the cross right in the field. The `item` slot adds an avatar and a role — that way it is easier to find the right person in a long list.
705
+
706
+ **Example (SFC):**
707
+
708
+ ```vue
709
+ <script setup lang="ts">
710
+ import { CdsAvatar, CdsListItem, CdsSelect } from '@central-design-system/components';
711
+ import { ref } from 'vue';
712
+
713
+ const people = [
714
+ { name: 'Анна Смирнова', role: 'Дизайнер', image: 'https://i.pravatar.cc/80?img=47' },
715
+ { name: 'Дмитрий Орлов', role: 'Разработчик', image: 'https://i.pravatar.cc/80?img=12' },
716
+ { name: 'Елена Васильева', role: 'Аналитик', image: 'https://i.pravatar.cc/80?img=44' },
717
+ { name: 'Игорь Крылов', role: 'Разработчик', image: 'https://i.pravatar.cc/80?img=32' },
718
+ { name: 'Мария Соколова', role: 'Тестировщик', image: 'https://i.pravatar.cc/80?img=26' },
719
+ { name: 'Павел Зайцев', role: 'Менеджер проекта', image: 'https://i.pravatar.cc/80?img=59' }
720
+ ];
721
+
722
+ const selected = ref(['Анна Смирнова']);
723
+ </script>
724
+
725
+ <template>
726
+ <div class="w-[350px] m-auto">
727
+ <CdsSelect
728
+ v-model="selected"
729
+ multiple
730
+ chips
731
+ closable-chips
732
+ :items="people"
733
+ item-title="name"
734
+ item-value="name"
735
+ label="Исполнители"
736
+ placeholder="Добавьте исполнителей"
737
+ >
738
+ <template #item="{ item, props }">
739
+ <CdsListItem v-bind="props" :title="item.name">
740
+ <template #prepend>
741
+ <CdsAvatar :image="item.image" size="sm" class="mr-3" />
742
+ </template>
743
+ <template #description>{{ item.role }}</template>
744
+ </CdsListItem>
745
+ </template>
746
+ </CdsSelect>
747
+ </div>
748
+ </template>
749
+ ```
750
+
751
+ ## Sorting the results
752
+
753
+ A compact select controls the order of a list: `hide-messages` removes the bottom block, `aria-label` replaces the hidden label for screen readers. The choice is applied at once — an "Apply" button is not needed.
754
+
755
+ **Example (SFC):**
756
+
757
+ ```vue
758
+ <script setup lang="ts">
759
+ import { CdsList, CdsListItem, CdsSelect } from '@central-design-system/components';
760
+ import { computed, ref } from 'vue';
761
+
762
+ const sortOptions = ['По алфавиту', 'Сначала дешевле', 'Сначала дороже'];
763
+ const sort = ref('По алфавиту');
764
+
765
+ const products = [
766
+ { title: 'Кабель силовой', price: 1200 },
767
+ { title: 'Автомат защиты', price: 350 },
768
+ { title: 'Розетка накладная', price: 90 },
769
+ { title: 'Щит распределительный', price: 4800 },
770
+ { title: 'Светильник потолочный', price: 2100 }
771
+ ];
772
+
773
+ const sorted = computed(() => {
774
+ const items = [...products];
775
+
776
+ if (sort.value === 'Сначала дешевле') return items.sort((a, b) => a.price - b.price);
777
+ if (sort.value === 'Сначала дороже') return items.sort((a, b) => b.price - a.price);
778
+
779
+ return items.sort((a, b) => a.title.localeCompare(b.title));
780
+ });
781
+ </script>
782
+
783
+ <template>
784
+ <div class="flex flex-col gap-2 w-[350px] m-auto">
785
+ <CdsSelect v-model="sort" class="w-56 self-end" :items="sortOptions" aria-label="Сортировка" hide-messages />
786
+
787
+ <CdsList>
788
+ <CdsListItem v-for="product of sorted" :key="product.title" :title="product.title">
789
+ <template #append>{{ product.price }} ₽</template>
790
+ </CdsListItem>
791
+ </CdsList>
792
+ </div>
793
+ </template>
794
+ ```