@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,343 @@
1
+ ---
2
+ sourceHash: 41872192eda1479740145bb7f4bcb9dbb28f0462
3
+ ---
4
+
5
+ # Theming
6
+
7
+ The design system lets you switch themes or configure your own theme
8
+ programmatically, including at runtime.
9
+
10
+ ## How it works
11
+
12
+ A theme in CDS 4 is a set of **semantic tokens** that are turned into CSS
13
+ variables when the application starts:
14
+
15
+ ```
16
+ ThemeDefinition (TS) → --cds-color-* / --cds-* (CSS variables) → component styles
17
+
18
+ @theme (Tailwind CSS v4) → bg-surface-primary, rounded-200, …
19
+ ```
20
+
21
+ Colors are written into the variables as **RGB channels** rather than finished
22
+ colors — that's what makes opacity control possible:
23
+
24
+ ```css
25
+ /* generated by CDS */
26
+ :root {
27
+ --cds-color-brand-primary: 0,90,178;
28
+ --cds-color-surface-primary: 255,255,255;
29
+ --cds-spacing-400: 1rem;
30
+ --cds-border-radius-200: 0.25rem;
31
+ }
32
+
33
+ /* usage */
34
+ .my-block {
35
+ background: rgb(var(--cds-color-surface-primary));
36
+ border: var(--cds-border-100) solid rgb(var(--cds-color-brand-primary) / 0.4);
37
+ padding: var(--cds-spacing-400);
38
+ }
39
+ ```
40
+
41
+ Theme styles are injected into `<style id="cds-theme-stylesheet">` and are
42
+ recalculated reactively when the theme changes.
43
+
44
+ ## Enabling a theme
45
+
46
+ CDS 4 ships eight ready-made themes:
47
+
48
+ | Theme | Description |
49
+ | ------------- |-----------------------------------------|
50
+ | `cdsLight` | light theme, used by default |
51
+ | `cdsDark` | dark theme |
52
+ | `b2bLight` | light theme for B2B-Center applications |
53
+ | `b2bDark` | dark theme for B2B-Center applications |
54
+ | `lumaLight` | light Luma theme |
55
+ | `lumaDark` | dark Luma theme |
56
+ | `promoLight` | light promo theme |
57
+ | `promoDark` | dark promo theme |
58
+
59
+ > `cdsLight` is used by default — you don't need to enable it.
60
+
61
+ To switch to another theme, pass its name in the `createCds` options:
62
+
63
+ ```ts
64
+ import { createApp } from 'vue';
65
+ import '@central-design-system/components/styles';
66
+ import { createCds, components, directives } from '@central-design-system/components';
67
+
68
+ import App from './App.vue';
69
+
70
+ const cds = createCds({
71
+ components,
72
+ directives,
73
+ theme: {
74
+ defaultTheme: 'b2bLight'
75
+ }
76
+ });
77
+
78
+ createApp(App).use(cds);
79
+ ```
80
+
81
+ ## Theming options
82
+
83
+ ```ts
84
+ createCds({
85
+ theme: {
86
+ defaultTheme: 'cdsLight',
87
+ prefix: 'cds',
88
+ themes: {},
89
+ variations: false,
90
+ utilities: true,
91
+ legacyClasses: false,
92
+ scoped: false,
93
+ scope: undefined,
94
+ stylesheetId: 'cds-theme-stylesheet',
95
+ cspNonce: undefined
96
+ }
97
+ });
98
+ ```
99
+
100
+ | Option | Type | Default | Purpose |
101
+ | --------------- | ---------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------- |
102
+ | `defaultTheme` | `ThemeName \| string` | `'cdsLight'` | Theme active at startup |
103
+ | `prefix` | `string` | `'cds'` | Prefix of the generated CSS variables (`--cds-color-*`) |
104
+ | `themes` | `Record<string, ThemeDefinition>` | built-in themes | Your own themes; merged with the built-in ones |
105
+ | `variations` | `false \| { colors: string[]; lighten: number; darken: number }` | `false` | Auto-generation of lighter/darker color variations |
106
+ | `utilities` | `boolean` | `true` | Generation of background/text utility classes from theme tokens |
107
+ | `legacyClasses` | `boolean` | `false` | CDS 3 legacy classes (`cds-bg-*`, `cds-text-*`, `cds-border-*`) |
108
+ | `scoped` | `boolean` | `false` | Don't write the variables into `:root` |
109
+ | `scope` | `string` | — | Limit theme selectors to a subtree (`:where(<scope>)`) |
110
+ | `stylesheetId` | `string` | `'cds-theme-stylesheet'`| `id` of the `<style>` tag holding the theme |
111
+ | `cspNonce` | `string` | — | `nonce` for Content Security Policy |
112
+
113
+ ## Creating your own theme
114
+
115
+ A custom theme is a `ThemeDefinition` object with the fields `dark`, `colors` and
116
+ `variables`. You only need to specify the **overrides**: missing tokens are
117
+ inherited from `cdsLight` / `cdsDark`.
118
+
119
+ ```ts
120
+ import { createApp } from 'vue';
121
+ import { createCds, components, directives } from '@central-design-system/components';
122
+
123
+ import type { ThemeDefinition } from '@central-design-system/components';
124
+
125
+ import App from './App.vue';
126
+
127
+ const myCustomGreenTheme: ThemeDefinition = {
128
+ dark: false,
129
+ colors: {
130
+ // Main brand colors of the new theme
131
+ 'brand-primary': '#2C8926',
132
+ 'brand-primary-hover': '#3C9C2C',
133
+ 'brand-primary-active': '#50A946',
134
+ 'brand-primary-border': '#2C8926',
135
+ 'brand-primary-content': '#005005',
136
+ 'brand-secondary': '#DCF5D0',
137
+ 'brand-secondary-hover': '#A5DD98',
138
+ 'brand-secondary-active': '#97D283',
139
+ 'brand-secondary-border': '#BCE8AB',
140
+ // Surfaces
141
+ 'page-primary': '#F2F8F0',
142
+ 'surface-secondary': '#E8F3E4'
143
+ },
144
+ // Variables: typography, spacing, radii, shadows
145
+ variables: {
146
+ 'font-family': 'Roboto, sans-serif',
147
+ 'border-radius-200': '0.625rem'
148
+ }
149
+ };
150
+
151
+ const cds = createCds({
152
+ components,
153
+ directives,
154
+ theme: {
155
+ defaultTheme: 'myCustomGreenTheme',
156
+ themes: {
157
+ myCustomGreenTheme
158
+ }
159
+ }
160
+ });
161
+
162
+ createApp(App).use(cds);
163
+ ```
164
+
165
+ Every registered theme also gets a `.cds-theme--<name>` class — use it to enable
166
+ the theme on an arbitrary part of the markup.
167
+
168
+ ### Token groups
169
+
170
+ `colors` — semantic colors:
171
+
172
+ - `brand-*` — brand (`primary`, `secondary` and their `hover` / `active` / `border` / `content`)
173
+ - `surface-*`, `page-*`, `fill-*` — surfaces and fills
174
+ - `content-*` — text, icons, links
175
+ - `line-*` — borders, dividers, focus and selection
176
+ - `status-{success,warning,progress,info,danger,indication}-*` — statuses
177
+ - `other-*` — additional accent palettes
178
+
179
+ `variables` — dimensions: `spacing-*`, `font-size-*`, `font-line-height-*`,
180
+ `font-weight-*`, `border-*`, `border-radius-*`, `shadow-{x,y,blur}-*`,
181
+ `font-family`, `base-unit`.
182
+
183
+ For the full token list of a specific theme, see the package sources:
184
+ `@central-design-system/components/src/themes/cdsLight.ts`.
185
+
186
+ ## Switching the theme
187
+
188
+ You can change the theme at runtime through the `useTheme` composable:
189
+
190
+ ```vue
191
+ <script setup lang="ts">
192
+ import { useTheme } from '@central-design-system/components';
193
+
194
+ const theme = useTheme();
195
+
196
+ function toggleTheme(): void {
197
+ theme.global.name.value = theme.global.current.value.dark ? 'cdsLight' : 'cdsDark';
198
+ }
199
+ </script>
200
+
201
+ <template>
202
+ <cds-button @click="toggleTheme">Toggle theme</cds-button>
203
+ </template>
204
+ ```
205
+
206
+ You can also change the theme of a single component by passing it the `theme`
207
+ prop. Keep in mind that the theme applies not only to the component itself but to
208
+ everything nested inside it:
209
+
210
+ ```vue
211
+ <template>
212
+ <cds-notification theme="b2bLight">
213
+ <!-- the button will use the b2bLight theme -->
214
+ <cds-button>Button</cds-button>
215
+ </cds-notification>
216
+ </template>
217
+ ```
218
+
219
+ The `theme` prop is supported by container components and most visual components:
220
+ `CdsApp`, `CdsLayout`, `CdsPage`, `CdsSurface`, `CdsCard`, `CdsDrawer`,
221
+ `CdsModal`, `CdsOverlay`, `CdsButton`, `CdsField`, `CdsTable` and others.
222
+
223
+ ## Using theme tokens in your own code
224
+
225
+ ### Tailwind CSS v4
226
+
227
+ Theme tokens are mapped into Tailwind's `@theme`, so utilities switch along with
228
+ the theme automatically:
229
+
230
+ ```html
231
+ <div class="bg-surface-primary text-content-primary p-4 rounded-200">…</div>
232
+ ```
233
+
234
+ Setup is described in [Tailwind CSS v4 + CDS 4](./tailwindcss.md).
235
+
236
+ ### CSS / SCSS
237
+
238
+ ```scss
239
+ .my-card {
240
+ background: rgb(var(--cds-color-surface-elevated));
241
+ color: rgb(var(--cds-color-content-primary));
242
+ padding: var(--cds-spacing-500);
243
+ border-radius: var(--cds-border-radius-300);
244
+ }
245
+ ```
246
+
247
+ When you override CDS component styles, put them into the `cds-overrides` layer —
248
+ that way they are guaranteed to win over the library's styles:
249
+
250
+ ```scss
251
+ @layer cds-overrides {
252
+ .cds-button {
253
+ border-radius: var(--cds-border-radius-300);
254
+ }
255
+ }
256
+ ```
257
+
258
+ ### CDS 3 legacy classes
259
+
260
+ The CDS 3 utility classes (`cds-bg-*`, `cds-text-*`, `cds-border-*`) are **off by
261
+ default** in CDS 4. To bring them back for the duration of a migration:
262
+
263
+ ```ts
264
+ import '@central-design-system/components/styles/legacy';
265
+
266
+ const cds = createCds({
267
+ theme: { legacyClasses: true }
268
+ });
269
+ ```
270
+
271
+ ## Disabling theming
272
+
273
+ Pass `false` to the `theme` option. This prevents the generation of CSS variables
274
+ and theme classes and disables runtime theme switching — the `<style>` tag is not
275
+ created at all.
276
+
277
+ ```ts
278
+ import { createCds } from '@central-design-system/components';
279
+
280
+ const cds = createCds({
281
+ theme: false
282
+ });
283
+ ```
284
+
285
+ With theming disabled, `theme.isDisabled === true` and `themeClasses` returns
286
+ `undefined`.
287
+
288
+ ## Theme instance interface
289
+
290
+ `useTheme()` returns a `ThemeInstance` — access to the current theme and its
291
+ settings.
292
+
293
+ ```ts
294
+ interface ThemeInstance {
295
+ /** Whether theming is enabled (`false` with `theme: false`) */
296
+ readonly isDisabled: boolean;
297
+
298
+ /**
299
+ * Raw object of the installed themes
300
+ * Themes can be added and modified
301
+ */
302
+ readonly themes: Ref<Record<string, InternalThemeDefinition>>;
303
+
304
+ /**
305
+ * Name of the current theme
306
+ * Inherited from the parent component
307
+ */
308
+ readonly name: Readonly<Ref<string>>;
309
+
310
+ /**
311
+ * Processed object of the current theme
312
+ * Includes the automatically generated colors
313
+ */
314
+ readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
315
+ readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>;
316
+
317
+ /** Class of the current theme — `cds-theme--<name>` */
318
+ readonly themeClasses: Readonly<ComputedRef<string | undefined>>;
319
+
320
+ /** Generated CSS of the current theme */
321
+ readonly styles: Readonly<ComputedRef<string>>;
322
+
323
+ readonly global: {
324
+ /** Name of the current global theme in the application (writable) */
325
+ readonly name: Ref<string>;
326
+
327
+ /**
328
+ * Processed object of the current global theme in the application
329
+ * Also available from `theme.computedThemes.value[theme.global.name.value]`
330
+ */
331
+ readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
332
+ };
333
+ }
334
+ ```
335
+
336
+ The theme instance is also available on the object returned by `createCds()` —
337
+ handy outside of a component context:
338
+
339
+ ```ts
340
+ const cds = createCds({ theme: { defaultTheme: 'cdsLight' } });
341
+
342
+ cds.theme.global.name.value = 'cdsDark';
343
+ ```
@@ -0,0 +1,237 @@
1
+ ---
2
+ sourceHash: b1ba0f5864509842881b42ebf6cfb46aadcba96f
3
+ ---
4
+
5
+ # Tree-shaking
6
+
7
+ CDS 4 is published as an ESM bundle with its module structure preserved: every
8
+ component is a separate chunk with its own CSS next to it. That lets the bundler
9
+ (Vite, webpack, Rollup) drop everything your application doesn't use.
10
+
11
+ For this to work, follow two rules:
12
+
13
+ 1. **Register only the components you actually need in `createCds`.**
14
+ 2. **Include the base styles selectively** rather than the whole `styles.css`.
15
+
16
+ Below is how to do that and how much it saves.
17
+
18
+ ## How it works
19
+
20
+ - The ESM bundle is built with `chunkSplitPlugin({ strategy: 'unbundle' })` — the
21
+ library's module structure is preserved and components are not glued into a
22
+ single file.
23
+ - `package.json` declares `sideEffects`, so the bundler knows the library's JS
24
+ modules are pure and safe to remove.
25
+ - During the build, each component's chunk gets an import of its own CSS
26
+ appended. That's why `import { CdsButton }` pulls in exactly `CdsButton.css`,
27
+ not the styles of the entire library.
28
+
29
+ No special build or plugin is required — ordinary named imports are enough.
30
+
31
+ ## Selective component registration
32
+
33
+ Pass only the components you use to `createCds`:
34
+
35
+ ```ts
36
+ import { createApp } from 'vue';
37
+
38
+ import '@central-design-system/components/styles/common.css';
39
+ import { createCds, CdsButton, CdsCard, CdsIcon } from '@central-design-system/components';
40
+
41
+ import App from './App.vue';
42
+
43
+ const cds = createCds({
44
+ components: { CdsButton, CdsCard, CdsIcon }
45
+ });
46
+
47
+ createApp(App).use(cds).mount('#app');
48
+ ```
49
+
50
+ Components registered this way are available in templates globally — just as with
51
+ full registration:
52
+
53
+ ```html
54
+ <template>
55
+ <CdsCard>
56
+ <CdsButton>Click me</CdsButton>
57
+ </CdsCard>
58
+ </template>
59
+ ```
60
+
61
+ > **Important:** `createCds` does not register components on its own. The set is
62
+ > always defined by the caller. That's deliberate: if the factory referenced the
63
+ > full component list, the bundler could not remove a single one of them.
64
+
65
+ ### Alternative: a local import in an SFC
66
+
67
+ If you need a component in one or two places, global registration is optional —
68
+ import it right inside the component:
69
+
70
+ ```html
71
+ <script setup lang="ts">
72
+ import { CdsButton } from '@central-design-system/components';
73
+ </script>
74
+
75
+ <template>
76
+ <CdsButton>Click me</CdsButton>
77
+ </template>
78
+ ```
79
+
80
+ You still need `createCds` in the entry point — it supplies themes, locales,
81
+ icons and breakpoints through `provide`. But you don't have to pass `components`
82
+ to it at all.
83
+
84
+ ## Full registration
85
+
86
+ When the set of components is not known in advance (internal admin panels,
87
+ sandboxes, documentation), it's easier to register everything:
88
+
89
+ ```ts
90
+ import { createCds, components, directives } from '@central-design-system/components';
91
+
92
+ const cds = createCds({ components, directives });
93
+ ```
94
+
95
+ Such a call disables component tree-shaking: the `components` namespace import
96
+ keeps the whole library in the bundle.
97
+
98
+ ## Styles
99
+
100
+ Component styles are included automatically along with the components themselves.
101
+ The only thing you have to include manually is the **base layer** — reset, fonts,
102
+ CSS layer order and global element styles:
103
+
104
+ ```ts
105
+ import '@central-design-system/components/styles/common.css';
106
+ ```
107
+
108
+ The base layer is mandatory: it's where the `@layer` order is declared, and the
109
+ correct cascade of component styles depends on it.
110
+
111
+ Take `common.css`, not `core.css`: `core.css` has no typography, so headings
112
+ (`h1`–`h6`) keep browser sizes instead of the CDS scale.
113
+
114
+ Available options:
115
+
116
+ | Import | Size | What's inside |
117
+ | --- | --- | --- |
118
+ | `styles/common.css` | ~9 KB | The recommended base: `core` + typography + grid utilities |
119
+ | `styles/core.css` | ~2 KB | Layers, fonts and reset only — **no typography** |
120
+ | `styles/tailwind.css` | ~12 KB | CDS tokens for Tailwind CSS v4 |
121
+ | `styles/legacy.css` | ~253 KB | Compatibility with legacy CDS 3 markup |
122
+
123
+ > **Don't use `@central-design-system/components/styles` in a tree-shaking
124
+ > scenario.** It's a ~556 KB aggregate containing the CSS of every component in
125
+ > the library. It's convenient for a quick start, but it completely defeats
126
+ > selective registration.
127
+
128
+ Color tokens (`--cds-color-*` and the rest) are not in the CSS files — they are
129
+ generated and injected into the document by `createCds` at runtime, based on the
130
+ active theme. There is nothing extra to include.
131
+
132
+ ## Directives
133
+
134
+ Directives (`ClickOutside`, `Intersect`, `Touch`) are named exports and are
135
+ registered just as selectively:
136
+
137
+ ```ts
138
+ import { createCds, ClickOutside } from '@central-design-system/components';
139
+
140
+ const cds = createCds({
141
+ components: { /* ... */ },
142
+ directives: { ClickOutside }
143
+ });
144
+ ```
145
+
146
+ The library's own components don't need you to register directives — the ones
147
+ that use `ClickOutside`, `Intersect` and `Touch` internally (`CdsOverlay` and
148
+ everything built on it: `CdsSelect`, `CdsMenu`, `CdsTooltip`, `CdsSlideView`,
149
+ input fields) import them themselves and register them locally. Pass `directives`
150
+ to `createCds` only for your own markup — `v-click-outside`, `v-intersect`,
151
+ `v-touch` in the application's templates.
152
+
153
+ > **In `4.0.0-alpha.0`:** local registration inside components didn't work, and
154
+ > the `CdsSelect` / `CdsMenu` menus wouldn't close on an outside click unless
155
+ > `directives` was passed to `createCds`. If you can't upgrade, add
156
+ > `directives: { ClickOutside, Touch }` to the registration.
157
+
158
+ ## How much it saves
159
+
160
+ Measurements on Vite 5 (production, minified, styles in a separate file, Vue
161
+ included in the bundle, the base `common.css` not counted):
162
+
163
+ | Scenario | JS | JS (gzip) | CSS | CSS (gzip) |
164
+ | --- | --- | --- | --- | --- |
165
+ | Full registration (`components`, `directives`) | 625 KB | 203 KB | 208 KB | 24.6 KB |
166
+ | `createCds` + 3 components | 196 KB | 62.6 KB | 27.6 KB | 4.1 KB |
167
+ | `createCds` + 1 component | 162 KB | 51.4 KB | 12.6 KB | 1.9 KB |
168
+ | 1 component without `createCds` | 63 KB | 23.4 KB | 12.6 KB | 1.9 KB |
169
+
170
+ The numbers depend on which components exactly you include: composite components
171
+ (`CdsTable`, `CdsAutocomplete`, `CdsDatePicker`) pull in more dependencies than
172
+ atoms do.
173
+
174
+ ### What isn't tree-shaken
175
+
176
+ About 99 KB is the core that `createCds` always includes: themes, locales, icons,
177
+ breakpoints (`useDisplay`), `goTo` and the `defaults` system. That volume doesn't
178
+ depend on the number of components — it is exactly the difference between the
179
+ "1 component without `createCds`" (63 KB) and "`createCds` + 1 component"
180
+ (162 KB) rows.
181
+
182
+ If CDS is used in a couple of places and you don't need the global subsystems,
183
+ you can skip `createCds` entirely. But then there are no themes, no locales and
184
+ no defaults, so that mode only suits pinpoint embeds.
185
+
186
+ ## How to verify the result
187
+
188
+ ```bash
189
+ npx vite-bundle-visualizer
190
+ ```
191
+
192
+ What to look for:
193
+
194
+ - the bundle should contain no chunks of components missing from your `createCds`;
195
+ - if an "extra" component shows up, it is most likely imported transitively
196
+ (`CdsSelect` pulls in `CdsMenu` and `CdsList`, for instance) — that's normal;
197
+ - if the whole library ended up in the bundle, look for `components` or
198
+ `import * as` among your imports.
199
+
200
+ ## Common mistakes
201
+
202
+ **A namespace import instead of a named one.** Any `import * as` from the library
203
+ keeps all of it:
204
+
205
+ ```ts
206
+ // ❌ pulls in every component
207
+ import * as cdsComponents from '@central-design-system/components';
208
+
209
+ // ✅
210
+ import { CdsButton } from '@central-design-system/components';
211
+ ```
212
+
213
+ **Importing icon packs through `iconsets`.** The `iconsets` object references all
214
+ packs at once, so it is not tree-shaken: the bundle gets the JS of every pack
215
+ (including `cds` — 46 KB) and, since UnoCSS scans them itself, the CSS of all five
216
+ packs (≈370 KB instead of ≈70 KB). Import the pack through its subpath:
217
+
218
+ ```ts
219
+ // ❌ pulls in every pack
220
+ import { iconsets } from '@central-design-system/components';
221
+ const aliases = iconsets.remix.aliases;
222
+
223
+ // ✅ remix only
224
+ import { remix } from '@central-design-system/components/iconsets/remix';
225
+ const aliases = remix.aliases;
226
+ ```
227
+
228
+ **Including the style aggregate.** `@central-design-system/components/styles`
229
+ contains the CSS of every component — use `styles/common.css`.
230
+
231
+ **Your own barrel re-export.** A `src/ui/index.ts` file that re-exports dozens of
232
+ CDS components kills tree-shaking if you import everything from it. Import
233
+ components directly from the library.
234
+
235
+ **A bundler without ESM support.** The CJS bundle (`dist/cjs`) and the IIFE build
236
+ are not tree-shakable by design. Make sure your bundler resolves the `import`
237
+ export condition — Vite, webpack 5 and Rollup do it by default.
@@ -0,0 +1,89 @@
1
+ # Pattern: confirming an action in a modal
2
+
3
+ A modal interrupts the user's work, so it is justified only where you cannot
4
+ proceed without an answer: an irreversible action, a form, data loss. To report
5
+ the result of an action that already happened, a modal is not needed — that is
6
+ `CdsToast`.
7
+
8
+ ## Confirming an irreversible action
9
+
10
+ ```vue
11
+ <script setup lang="ts">
12
+ import { CdsButton, CdsModal } from '@central-design-system/components';
13
+ import { ref } from 'vue';
14
+
15
+ const open = ref(false);
16
+ const deleting = ref(false);
17
+
18
+ const confirm = async (): Promise<void> => {
19
+ deleting.value = true;
20
+
21
+ try {
22
+ await api.removeDraft(draftId);
23
+ open.value = false;
24
+ } finally {
25
+ deleting.value = false;
26
+ }
27
+ };
28
+ </script>
29
+
30
+ <template>
31
+ <CdsButton appearance="tertiary" text="Delete draft" @click="open = true" />
32
+
33
+ <CdsModal v-model="open" persistent max-width="480">
34
+ <div class="flex flex-col gap-4 p-6">
35
+ <h2>Delete the draft?</h2>
36
+ <p>The draft and all unsaved changes will be deleted. This action cannot be undone.</p>
37
+
38
+ <div class="flex justify-end gap-3">
39
+ <CdsButton appearance="tertiary" text="Cancel" :disabled="deleting" @click="open = false" />
40
+ <CdsButton text="Delete" :loading="deleting" @click="confirm" />
41
+ </div>
42
+ </div>
43
+ </CdsModal>
44
+ </template>
45
+ ```
46
+
47
+ Key points:
48
+
49
+ - `persistent` — clicking outside the modal and `Esc` do not close it. Set it
50
+ only for irreversible actions and forms with entered data; for an ordinary
51
+ modal it is annoying.
52
+ - The modal closes **after** a successful server response, not immediately on
53
+ click: otherwise the user will never learn about an error.
54
+ - `:loading` on the confirm button guards against a repeated click, `:disabled`
55
+ on "Cancel" — against closing while the request is in flight.
56
+
57
+ ## Opening via an activator
58
+
59
+ If a button exists only to open the modal, you can skip the state entirely —
60
+ `CdsModal` provides an `activator` slot:
61
+
62
+ ```vue
63
+ <CdsModal max-width="480">
64
+ <template #activator="{ props }">
65
+ <CdsButton v-bind="props" text="Open" />
66
+ </template>
67
+
68
+ <template #default="{ isActive }">
69
+ <div class="p-6">
70
+ <CdsButton text="Close" @click="isActive.value = false" />
71
+ </div>
72
+ </template>
73
+ </CdsModal>
74
+ ```
75
+
76
+ ## Copy
77
+
78
+ The title and the buttons name **the action and its outcome**, not "Yes" /
79
+ "OK": a "Yes" button gives the user no idea what will happen. A destructive
80
+ action is named directly — "Delete draft", not "Continue".
81
+
82
+ ## What not to do
83
+
84
+ - Do not open a modal on top of a modal. If a second step is needed, put the
85
+ steps inside a single modal.
86
+ - Do not put a long form into a modal when it can live on a page.
87
+ - Do not use `CdsDrawer` as a "modal on the side": it is app-level side
88
+ navigation.
89
+ - Do not report success with a modal — that is what `CdsToast` is for.