@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,595 @@
1
+ # CdsMenu — 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 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.
7
+
8
+ ## Activators
9
+
10
+ the page, even a distant one in the markup.
11
+
12
+ **Example (SFC):**
13
+
14
+ ```vue
15
+ <script setup lang="ts">
16
+ import { CdsButton, CdsList, CdsMenu } from '@central-design-system/components';
17
+
18
+ const items = [
19
+ { title: 'Скачать', value: 'download' },
20
+ { title: 'Дублировать', value: 'duplicate' },
21
+ { title: 'Переименовать', value: 'rename' }
22
+ ];
23
+ </script>
24
+
25
+ <template>
26
+ <div class="m-auto flex flex-wrap items-center justify-center gap-2">
27
+ <CdsMenu>
28
+ <template #activator="{ props }">
29
+ <CdsButton v-bind="props">Активатор в слоте</CdsButton>
30
+ </template>
31
+
32
+ <CdsList :items="items" />
33
+ </CdsMenu>
34
+
35
+ <CdsButton>
36
+ Родительский элемент
37
+
38
+ <CdsMenu activator="parent">
39
+ <CdsList :items="items" />
40
+ </CdsMenu>
41
+ </CdsButton>
42
+
43
+ <CdsButton id="menu-activator">Соседний элемент</CdsButton>
44
+
45
+ <CdsMenu activator="#menu-activator">
46
+ <CdsList :items="items" />
47
+ </CdsMenu>
48
+ </div>
49
+ </template>
50
+ ```
51
+
52
+ ## Opening
53
+
54
+ By default the menu opens on click. The `open-on-hover` prop switches it to hover — this is how navigation menus behave; a click then does not open the panel. The `open-delay` and `close-delay` delays (300 and 250 ms) keep the menu from flickering when the cursor just passes by. Together with `open-on-hover`, opening on focus is enabled as well — turn it off with `:open-on-focus="false"` if the menu should react to the mouse only.
55
+
56
+ **Example (SFC):**
57
+
58
+ ```vue
59
+ <script setup lang="ts">
60
+ import { CdsButton, CdsList, CdsMenu } from '@central-design-system/components';
61
+
62
+ const items = [
63
+ { title: 'Профиль', value: 'profile' },
64
+ { title: 'Уведомления', value: 'notifications' },
65
+ { title: 'Выйти', value: 'logout' }
66
+ ];
67
+ </script>
68
+
69
+ <template>
70
+ <div class="m-auto flex flex-wrap items-center justify-center gap-2">
71
+ <CdsMenu open-on-hover>
72
+ <template #activator="{ props }">
73
+ <CdsButton v-bind="props">Наведите курсор</CdsButton>
74
+ </template>
75
+
76
+ <CdsList :items="items" />
77
+ </CdsMenu>
78
+
79
+ <CdsMenu open-on-hover :open-delay="0" :close-delay="0">
80
+ <template #activator="{ props }">
81
+ <CdsButton v-bind="props" appearance="secondary">Без задержек</CdsButton>
82
+ </template>
83
+
84
+ <CdsList :items="items" />
85
+ </CdsMenu>
86
+
87
+ <CdsMenu open-on-hover :open-on-focus="false">
88
+ <template #activator="{ props }">
89
+ <CdsButton v-bind="props" appearance="secondary">Только наведение</CdsButton>
90
+ </template>
91
+
92
+ <CdsList :items="items" />
93
+ </CdsMenu>
94
+ </div>
95
+ </template>
96
+ ```
97
+
98
+ ## Position
99
+
100
+ The `location` prop sets the side of the activator the menu appears on: `bottom` by default, `top`, `end`, `bottom end` — the side and the alignment. If there is not enough room, the menu flips to the opposite edge on its own. The `offset` prop tunes the distance to the activator, and `viewport-margin` sets the minimum gap to the edge of the screen.
101
+
102
+ **Example (SFC):**
103
+
104
+ ```vue
105
+ <script setup lang="ts">
106
+ import { CdsButton, CdsList, CdsMenu } from '@central-design-system/components';
107
+
108
+ const items = [
109
+ { title: 'Скачать', value: 'download' },
110
+ { title: 'Дублировать', value: 'duplicate' },
111
+ { title: 'Переименовать', value: 'rename' }
112
+ ];
113
+
114
+ const locations = ['bottom', 'top', 'end', 'bottom end'] as const;
115
+ </script>
116
+
117
+ <template>
118
+ <div class="m-auto flex flex-wrap items-center justify-center gap-2">
119
+ <CdsMenu v-for="location in locations" :key="location" :location="location">
120
+ <template #activator="{ props }">
121
+ <CdsButton v-bind="props" appearance="tertiary">{{ location }}</CdsButton>
122
+ </template>
123
+
124
+ <CdsList :items="items" />
125
+ </CdsMenu>
126
+
127
+ <CdsMenu :offset="16">
128
+ <template #activator="{ props }">
129
+ <CdsButton v-bind="props" appearance="tertiary">offset 16</CdsButton>
130
+ </template>
131
+
132
+ <CdsList :items="items" />
133
+ </CdsMenu>
134
+ </div>
135
+ </template>
136
+ ```
137
+
138
+ ## Sizes
139
+
140
+ The width of the menu equals the width of its content. The `min-width`, `max-width` and `max-height` props set the bounds: the minimum width keeps the panel from collapsing on short items, and a limited height turns on scrolling instead of a full-screen menu.
141
+
142
+ **Example (SFC):**
143
+
144
+ ```vue
145
+ <script setup lang="ts">
146
+ import { CdsButton, CdsList, CdsMenu } from '@central-design-system/components';
147
+
148
+ const items = Array.from({ length: 12 }, (_, index) => ({
149
+ title: `Организация № ${index + 1}`,
150
+ value: index + 1
151
+ }));
152
+ </script>
153
+
154
+ <template>
155
+ <div class="m-auto flex flex-wrap items-center justify-center gap-2">
156
+ <CdsMenu :min-width="280">
157
+ <template #activator="{ props }">
158
+ <CdsButton v-bind="props">Минимальная ширина</CdsButton>
159
+ </template>
160
+
161
+ <CdsList :items="items.slice(0, 3)" />
162
+ </CdsMenu>
163
+
164
+ <CdsMenu :max-height="220">
165
+ <template #activator="{ props }">
166
+ <CdsButton v-bind="props" appearance="secondary">Ограниченная высота</CdsButton>
167
+ </template>
168
+
169
+ <CdsList :items="items" />
170
+ </CdsMenu>
171
+ </div>
172
+ </template>
173
+ ```
174
+
175
+ ## Closing
176
+
177
+ The menu closes on a click inside the content, on a click outside and on `Esc`. The `:close-on-content-click="false"` prop keeps the panel open — you need that when it holds checkboxes, fields or several steps in a row. The `persistent` prop ignores the outside click and `Esc`: then the menu can only be closed by your own button through `v-model`.
178
+
179
+ **Example (SFC):**
180
+
181
+ ```vue
182
+ <script setup lang="ts">
183
+ import { CdsButton, CdsCheckbox, CdsList, CdsMenu, CdsSurface } from '@central-design-system/components';
184
+ import { ref } from 'vue';
185
+
186
+ const items = [
187
+ { title: 'Скачать', value: 'download' },
188
+ { title: 'Дублировать', value: 'duplicate' },
189
+ { title: 'Переименовать', value: 'rename' }
190
+ ];
191
+
192
+ const columns = ref(['name']);
193
+ const persistent = ref(false);
194
+ </script>
195
+
196
+ <template>
197
+ <div class="m-auto flex flex-wrap items-center justify-center gap-2">
198
+ <CdsMenu>
199
+ <template #activator="{ props }">
200
+ <CdsButton v-bind="props">Закроется по клику</CdsButton>
201
+ </template>
202
+
203
+ <CdsList :items="items" />
204
+ </CdsMenu>
205
+
206
+ <CdsMenu :close-on-content-click="false">
207
+ <template #activator="{ props }">
208
+ <CdsButton v-bind="props" appearance="secondary">Останется открытым</CdsButton>
209
+ </template>
210
+
211
+ <CdsSurface class="flex w-[220px] flex-col gap-1">
212
+ <CdsCheckbox v-model="columns" value="name" label="Название" hide-details />
213
+ <CdsCheckbox v-model="columns" value="date" label="Дата" hide-details />
214
+ <CdsCheckbox v-model="columns" value="status" label="Статус" hide-details />
215
+ </CdsSurface>
216
+ </CdsMenu>
217
+
218
+ <CdsMenu v-model="persistent" persistent :close-on-content-click="false">
219
+ <template #activator="{ props }">
220
+ <CdsButton v-bind="props" appearance="secondary">Только своей кнопкой</CdsButton>
221
+ </template>
222
+
223
+ <CdsSurface class="flex w-[240px] flex-col gap-1 p-2">
224
+ <span class="text-100 text-content-secondary">Клик мимо меню его не закроет.</span>
225
+
226
+ <CdsButton size="sm" appearance="tertiary" @click="persistent = false">Закрыть</CdsButton>
227
+ </CdsSurface>
228
+ </CdsMenu>
229
+ </div>
230
+ </template>
231
+ ```
232
+
233
+ ## Nested menus
234
+
235
+ Menus can be nested into each other: every list item becomes an activator (`activator="parent"`) for a child `CdsMenu` with the `submenu` prop — it shifts the panel sideways and moves the navigation to the left and right arrow keys. The `open-on-hover` prop opens the submenu on hover, and `:open-on-focus="false"` keeps it from opening while tabbing through.
236
+
237
+ **Example (SFC):**
238
+
239
+ ```vue
240
+ <script setup lang="ts">
241
+ import { CdsButton, CdsIcon, CdsList, CdsListItem, CdsMenu } from '@central-design-system/components';
242
+
243
+ const sections = [
244
+ { title: 'Закупки', children: ['Черновики', 'Опубликованные', 'Завершённые'] },
245
+ { title: 'Договоры', children: ['На согласовании', 'Подписанные', 'Архив'] },
246
+ { title: 'Отчёты', children: ['По поставщикам', 'По срокам', 'По суммам'] }
247
+ ];
248
+
249
+ const periods = ['За неделю', 'За месяц', 'За квартал'];
250
+ </script>
251
+
252
+ <template>
253
+ <div class="m-auto flex justify-center">
254
+ <CdsButton>
255
+ Открыть меню
256
+
257
+ <CdsMenu activator="parent">
258
+ <CdsList>
259
+ <CdsListItem v-for="section in sections" :key="section.title" link :title="section.title">
260
+ <template #append>
261
+ <CdsIcon name="chevron-right" size="xs" />
262
+ </template>
263
+
264
+ <CdsMenu activator="parent" submenu open-on-hover :open-on-focus="false">
265
+ <CdsList>
266
+ <CdsListItem v-for="child in section.children" :key="child" link :title="child">
267
+ <template #append>
268
+ <CdsIcon name="chevron-right" size="xs" />
269
+ </template>
270
+
271
+ <CdsMenu activator="parent" submenu open-on-hover :open-on-focus="false">
272
+ <CdsList>
273
+ <CdsListItem v-for="period in periods" :key="period" link :title="period" />
274
+ </CdsList>
275
+ </CdsMenu>
276
+ </CdsListItem>
277
+ </CdsList>
278
+ </CdsMenu>
279
+ </CdsListItem>
280
+ </CdsList>
281
+ </CdsMenu>
282
+ </CdsButton>
283
+ </div>
284
+ </template>
285
+ ```
286
+
287
+ ## Animation
288
+
289
+ The `transition` prop changes the animation the panel appears with.
290
+
291
+ **Example (SFC):**
292
+
293
+ ```vue
294
+ <script setup lang="ts">
295
+ import { CdsButton, CdsList, CdsMenu } from '@central-design-system/components';
296
+
297
+ const items = [
298
+ { title: 'Скачать', value: 'download' },
299
+ { title: 'Дублировать', value: 'duplicate' },
300
+ { title: 'Переименовать', value: 'rename' }
301
+ ];
302
+
303
+ const transitions = ['fade-transition', 'scale-transition', 'slide-transition-y', 'slide-transition-x'];
304
+ </script>
305
+
306
+ <template>
307
+ <div class="m-auto flex flex-wrap items-center justify-center gap-4">
308
+ <CdsMenu v-for="transition in transitions" :key="transition" :transition="transition">
309
+ <template #activator="{ props }">
310
+ <CdsButton v-bind="props" appearance="tertiary">{{ transition }}</CdsButton>
311
+ </template>
312
+
313
+ <CdsList :items="items" />
314
+ </CdsMenu>
315
+ </div>
316
+ </template>
317
+ ```
318
+
319
+ ## Actions on a record
320
+
321
+ Rare actions on a table row or a card are collected in a menu behind the "⋮" button: the row stays clean, and the actions do not compete with the main button. `location="bottom end"` pins the panel to the right edge of the activator, `slim` on the list removes the extra paddings, and `aria-label` names the record the menu belongs to.
322
+
323
+ **Example (SFC):**
324
+
325
+ ```vue
326
+ <script setup lang="ts">
327
+ import { CdsButton, CdsList, CdsListItem, CdsListItemDivider, CdsMenu } from '@central-design-system/components';
328
+ import { ref } from 'vue';
329
+
330
+ const documents = [
331
+ { id: 1, title: 'Договор поставки № 42' },
332
+ { id: 2, title: 'Счёт на оплату № 5512' },
333
+ { id: 3, title: 'Акт сверки за март' }
334
+ ];
335
+
336
+ const actions = [
337
+ { title: 'Скачать', icon: 'download' },
338
+ { title: 'Дублировать', icon: 'copy' },
339
+ { title: 'Переименовать', icon: 'edit' }
340
+ ];
341
+
342
+ const lastAction = ref('');
343
+ </script>
344
+
345
+ <template>
346
+ <div class="m-auto flex w-[300px] flex-col gap-1">
347
+ <div v-for="doc in documents" :key="doc.id" class="flex items-center justify-between gap-2">
348
+ <span class="text-100">{{ doc.title }}</span>
349
+
350
+ <CdsMenu location="bottom end">
351
+ <template #activator="{ props }">
352
+ <CdsButton
353
+ v-bind="props"
354
+ size="sm"
355
+ appearance="tertiary"
356
+ icon="overflow-menu-vertical"
357
+ :aria-label="`Действия: ${doc.title}`"
358
+ />
359
+ </template>
360
+
361
+ <CdsList slim>
362
+ <CdsListItem
363
+ v-for="action in actions"
364
+ :key="action.title"
365
+ link
366
+ :title="action.title"
367
+ :prepend-icon="action.icon"
368
+ @click="lastAction = `${action.title}: ${doc.title}`"
369
+ />
370
+
371
+ <CdsListItemDivider />
372
+
373
+ <CdsListItem link title="Удалить" prepend-icon="delete" @click="lastAction = `Удалить: ${doc.title}`" />
374
+ </CdsList>
375
+ </CdsMenu>
376
+ </div>
377
+
378
+ <p class="text-100 text-content-secondary">{{ lastAction || 'Выберите действие в меню строки' }}</p>
379
+ </div>
380
+ </template>
381
+ ```
382
+
383
+ ## Context menu
384
+
385
+ A menu can open at the point of the click: the `contextmenu` handler puts the cursor coordinates into `target`, and `v-model` controls the visibility — no activator is needed here. A new click moves the open panel to the new spot. The default animation is meant for an element activator, so for a menu placed by coordinates set a CSS animation — for example, `transition="scale-transition"`.
386
+
387
+ **Example (SFC):**
388
+
389
+ ```vue
390
+ <script setup lang="ts">
391
+ import { CdsList, CdsListItem, CdsMenu, CdsSurface } from '@central-design-system/components';
392
+ import { ref } from 'vue';
393
+
394
+ const isOpen = ref(false);
395
+ const coordinates = ref<[number, number]>([0, 0]);
396
+ const lastAction = ref('');
397
+
398
+ const openContextMenu = (event: MouseEvent) => {
399
+ coordinates.value = [event.clientX, event.clientY];
400
+ isOpen.value = true;
401
+ };
402
+ </script>
403
+
404
+ <template>
405
+ <div class="m-auto flex w-[380px] flex-col gap-1">
406
+ <CdsSurface
407
+ class="flex h-[140px] cursor-context-menu items-center justify-center rounded border border-dashed"
408
+ @contextmenu.prevent="openContextMenu"
409
+ >
410
+ <span class="text-100 text-content-secondary">Кликните правой кнопкой мыши</span>
411
+ </CdsSurface>
412
+
413
+ <CdsMenu v-model="isOpen" :target="coordinates" transition="scale-transition">
414
+ <CdsList slim>
415
+ <CdsListItem link title="Вырезать" prepend-icon="copy" @click="lastAction = 'Вырезать'" />
416
+ <CdsListItem link title="Копировать" prepend-icon="copy" @click="lastAction = 'Копировать'" />
417
+ <CdsListItem link title="Вставить" prepend-icon="insert" @click="lastAction = 'Вставить'" />
418
+ </CdsList>
419
+ </CdsMenu>
420
+
421
+ <p class="text-100 text-content-secondary">{{ lastAction || 'Действие не выбрано' }}</p>
422
+ </div>
423
+ </template>
424
+ ```
425
+
426
+ ## Menu in the header
427
+
428
+ In the application header a menu solves two tasks: it expands the navigation sections and collects everything about the account behind the avatar. The activator of the user menu is a `CdsAvatar` inside a button with an `aria-label`, `location="bottom end"` pins the panel to the right edge, and `min-width` keeps it from jumping in width. The first list item shows whose account it is, and `CdsListItemDivider` separates the sections from signing out.
429
+
430
+ **Example (SFC):**
431
+
432
+ ```vue
433
+ <script setup lang="ts">
434
+ import {
435
+ CdsAvatar,
436
+ CdsButton,
437
+ CdsHeader,
438
+ CdsLayout,
439
+ CdsList,
440
+ CdsListItem,
441
+ CdsListItemDivider,
442
+ CdsMain,
443
+ CdsMenu
444
+ } from '@central-design-system/components';
445
+ import { ref } from 'vue';
446
+
447
+ const sections = [
448
+ { title: 'Закупки', items: ['Мои закупки', 'Черновики', 'Архив'] },
449
+ { title: 'Договоры', items: ['Действующие', 'На согласовании'] }
450
+ ];
451
+
452
+ const opened = ref('');
453
+ </script>
454
+
455
+ <template>
456
+ <div class="m-auto h-[220px] w-full max-w-[560px]">
457
+ <CdsLayout container>
458
+ <CdsHeader elevated>
459
+ <div class="flex h-[56px] items-center gap-2 px-4">
460
+ <span class="text-100 font-bold text-content-primary">B2B-Center</span>
461
+
462
+ <nav class="flex items-center gap-1">
463
+ <CdsMenu v-for="section in sections" :key="section.title" :min-width="180">
464
+ <template #activator="{ props }">
465
+ <CdsButton
466
+ v-bind="props"
467
+ size="sm"
468
+ appearance="tertiary"
469
+ append-icon="chevron-down"
470
+ :text="section.title"
471
+ />
472
+ </template>
473
+
474
+ <CdsList slim>
475
+ <CdsListItem
476
+ v-for="item in section.items"
477
+ :key="item"
478
+ link
479
+ :title="item"
480
+ @click="opened = `${section.title} → ${item}`"
481
+ />
482
+ </CdsList>
483
+ </CdsMenu>
484
+ </nav>
485
+
486
+ <div class="ml-auto">
487
+ <CdsMenu location="bottom end" :min-width="240">
488
+ <template #activator="{ props }">
489
+ <CdsButton v-bind="props" appearance="tertiary" aria-label="Меню пользователя">
490
+ <CdsAvatar size="sm" text="ИП" />
491
+ </CdsButton>
492
+ </template>
493
+
494
+ <CdsList slim>
495
+ <CdsListItem lines="two" title="Иван Петров" subtitle="i.petrov@example.com">
496
+ <template #prepend>
497
+ <CdsAvatar size="sm" text="ИП" start />
498
+ </template>
499
+ </CdsListItem>
500
+
501
+ <CdsListItemDivider />
502
+
503
+ <CdsListItem link title="Профиль" prepend-icon="user-avatar" @click="opened = 'Профиль'" />
504
+ <CdsListItem link title="Организация" prepend-icon="company" @click="opened = 'Организация'" />
505
+ <CdsListItem link title="Настройки" prepend-icon="settings" @click="opened = 'Настройки'" />
506
+
507
+ <CdsListItemDivider />
508
+
509
+ <CdsListItem link title="Выйти" prepend-icon="logout" @click="opened = 'Выход из аккаунта'" />
510
+ </CdsList>
511
+ </CdsMenu>
512
+ </div>
513
+ </div>
514
+ </CdsHeader>
515
+
516
+ <CdsMain>
517
+ <p class="p-4 text-100 text-content-secondary">{{ opened || 'Выберите пункт в меню шапки' }}</p>
518
+ </CdsMain>
519
+ </CdsLayout>
520
+ </div>
521
+ </template>
522
+ ```
523
+
524
+ ## Filter with several values
525
+
526
+ When several values are picked inside a menu, the panel must not close on the very first click: `:close-on-content-click="false"` keeps it open, and `v-model` lets the "Apply" button close the menu. The selection piles up in a draft and is applied as a whole — until the button is pressed, the list of records does not change.
527
+
528
+ **Example (SFC):**
529
+
530
+ ```vue
531
+ <script setup lang="ts">
532
+ import { CdsButton, CdsCheckbox, CdsMenu, CdsSurface } from '@central-design-system/components';
533
+ import { computed, ref, watch } from 'vue';
534
+
535
+ const statuses = [
536
+ { title: 'Черновик', value: 'draft' },
537
+ { title: 'На согласовании', value: 'review' },
538
+ { title: 'Подписан', value: 'signed' },
539
+ { title: 'Отклонён', value: 'rejected' }
540
+ ];
541
+
542
+ const isOpen = ref(false);
543
+ const draft = ref<string[]>(['review']);
544
+ const applied = ref<string[]>(['review']);
545
+
546
+ const appliedTitles = computed(() =>
547
+ statuses.filter((status) => applied.value.includes(status.value)).map((status) => status.title)
548
+ );
549
+
550
+ const apply = () => {
551
+ applied.value = [...draft.value];
552
+ isOpen.value = false;
553
+ };
554
+
555
+ const reset = () => {
556
+ draft.value = [];
557
+ };
558
+
559
+ watch(isOpen, (value) => {
560
+ if (value) draft.value = [...applied.value];
561
+ });
562
+ </script>
563
+
564
+ <template>
565
+ <div class="m-auto flex w-[380px] flex-col items-center gap-1">
566
+ <CdsMenu v-model="isOpen" :close-on-content-click="false" :min-width="240">
567
+ <template #activator="{ props }">
568
+ <CdsButton v-bind="props" appearance="secondary" prepend-icon="filters">
569
+ Статус<template v-if="applied.length">: {{ applied.length }}</template>
570
+ </CdsButton>
571
+ </template>
572
+
573
+ <CdsSurface class="flex flex-col gap-2 p-2">
574
+ <CdsCheckbox
575
+ v-for="status in statuses"
576
+ :key="status.value"
577
+ v-model="draft"
578
+ :value="status.value"
579
+ :label="status.title"
580
+ hide-details
581
+ />
582
+
583
+ <div class="flex justify-between gap-2">
584
+ <CdsButton size="sm" appearance="tertiary" text="Сбросить" @click="reset" />
585
+ <CdsButton size="sm" text="Применить" @click="apply" />
586
+ </div>
587
+ </CdsSurface>
588
+ </CdsMenu>
589
+
590
+ <p class="text-100 text-content-secondary">
591
+ {{ appliedTitles.length ? `Показаны: ${appliedTitles.join(', ')}` : 'Фильтр не выбран' }}
592
+ </p>
593
+ </div>
594
+ </template>
595
+ ```
@@ -0,0 +1,10 @@
1
+ # CdsMenu — guidelines
2
+
3
+ > Extracted from `docs/demos/Guidelines.vue` by `bun run generate:skill`. Do not edit manually.
4
+ > The full component contract is in [api.md](api.md).
5
+
6
+ | ✅ Do | ❌ Don't |
7
+ | --- | --- |
8
+ | The activator names what is inside the menu: a label or the well-known «⋮» icon makes it clear that a list of actions will open. | An icon with no label and no aria-label promises nothing — the menu gets opened at random. |
9
+ | A menu triggers actions. A field value is picked in a select — it stays visible and takes part in the form submission. | A menu used instead of a field hides the selected value and drops out of the form validation. |
10
+ | Rare actions on a record are collected in a single menu behind the «⋮» button — press it to see the list. The row stays readable. | A row of equally weighted buttons in every line overloads the table and hides the main action. |
@@ -0,0 +1,19 @@
1
+ # CdsMenu — tokens (level 3)
2
+
3
+ > Copy of the component's `styles/*.variables.scss`, taken by `bun run generate:skill`. Do not edit manually.
4
+ > `--cds-*` are global level-2 tokens whose values come from the active theme: see [themes.md](../../tokens/themes.md).
5
+ > Variables marked `!default` can be overridden at build time via SCSS.
6
+
7
+ ## _CdsMenu.variables.scss
8
+
9
+ ```scss
10
+ @use '../../../styles/settings';
11
+
12
+ $menu-padding: var(--cds-spacing-100) !default;
13
+ $menu-border-radius: settings.$border-radius-root !default;
14
+ $menu-border: var(--cds-border-100) solid !default;
15
+ $menu-colors: (
16
+ 'background': rgb(var(--cds-color-surface-elevated)),
17
+ 'border': rgb(var(--cds-color-line-elevated))
18
+ ) !default;
19
+ ```
@@ -0,0 +1,29 @@
1
+ # CdsMessages — API
2
+
3
+ > Generated from meta.json by `bun run generate:skill`. Do not edit manually.
4
+ > Examples: [examples.md](examples.md) · Tokens: [tokens.md](tokens.md)
5
+
6
+ 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.
7
+
8
+ ## CdsMessages
9
+
10
+ **Props**
11
+
12
+ | Prop | Type | Default | Required | Description |
13
+ | --- | --- | --- | --- | --- |
14
+ | `active` | `boolean \| undefined` | — | no | Active state |
15
+ | `activeColor` | `string \| undefined` | — | no | Color of the component in its active state |
16
+ | `baseColor` | `string \| undefined` | — | no | Color of the component in its inactive state |
17
+ | `bgColor` | `string \| undefined` | — | no | Background color of the component |
18
+ | `color` | `string \| undefined` | — | no | Component color |
19
+ | `hideMessages` | `boolean \| undefined` | — | no | Hide the messages under the input |
20
+ | `messages` | `string \| readonly string[] \| undefined` | `[]` | no | Messages shown under the input |
21
+ | `textColor` | `string \| undefined` | — | no | Text color of the component |
22
+ | `transition` | `string \| boolean \| (TransitionProps & { component?: Component \| undefined; }) \| { component: Component; leaveAbsolute: boolean; group: boolean; } \| null \| undefined` | `{ component: slide-transition-y, leaveAbsolute: true, group: true }` | no | Transition animation |
23
+
24
+ **Slots**
25
+
26
+ | Name | Type | Description |
27
+ | --- | --- | --- |
28
+ | `default` | `any` | Your own look for the whole list of messages instead of the default one |
29
+ | `message` | `CdsMessageSlot` | Template for a single message. The slot props carry the text of the message |