@design-ai/cli 4.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/.claude-plugin/plugin.json +164 -0
  2. package/AGENTS.ko.md +126 -0
  3. package/AGENTS.md +182 -0
  4. package/CHANGELOG.md +6883 -0
  5. package/CLAUDE.md +39 -0
  6. package/LICENSE +21 -0
  7. package/README.ko.md +245 -0
  8. package/README.md +277 -0
  9. package/agents/README.md +14 -0
  10. package/agents/a11y-reviewer.md +121 -0
  11. package/agents/component-architect.md +57 -0
  12. package/agents/design-critic.md +46 -0
  13. package/agents/token-extractor.md +63 -0
  14. package/cli/bin/design-ai-mcp.mjs +6 -0
  15. package/cli/bin/design-ai.mjs +40 -0
  16. package/cli/commands/audit.mjs +111 -0
  17. package/cli/commands/check.mjs +226 -0
  18. package/cli/commands/doctor.mjs +141 -0
  19. package/cli/commands/examples.mjs +58 -0
  20. package/cli/commands/help.mjs +271 -0
  21. package/cli/commands/install.mjs +161 -0
  22. package/cli/commands/learn.mjs +1871 -0
  23. package/cli/commands/list.mjs +143 -0
  24. package/cli/commands/mcp.mjs +27 -0
  25. package/cli/commands/pack.mjs +211 -0
  26. package/cli/commands/prompt.mjs +199 -0
  27. package/cli/commands/route.mjs +247 -0
  28. package/cli/commands/search.mjs +60 -0
  29. package/cli/commands/show.mjs +52 -0
  30. package/cli/commands/site.mjs +558 -0
  31. package/cli/commands/status.mjs +161 -0
  32. package/cli/commands/uninstall.mjs +119 -0
  33. package/cli/commands/update.mjs +184 -0
  34. package/cli/commands/version.mjs +94 -0
  35. package/cli/commands/workspace.mjs +176 -0
  36. package/cli/lib/brief.mjs +52 -0
  37. package/cli/lib/check.mjs +642 -0
  38. package/cli/lib/dispatch.mjs +109 -0
  39. package/cli/lib/doctor.mjs +505 -0
  40. package/cli/lib/examples.mjs +258 -0
  41. package/cli/lib/exec.mjs +63 -0
  42. package/cli/lib/help-flags.mjs +5 -0
  43. package/cli/lib/learn.mjs +3694 -0
  44. package/cli/lib/log.mjs +47 -0
  45. package/cli/lib/mcp-server.mjs +426 -0
  46. package/cli/lib/output.mjs +101 -0
  47. package/cli/lib/pack.mjs +599 -0
  48. package/cli/lib/paths.mjs +63 -0
  49. package/cli/lib/prompt.mjs +603 -0
  50. package/cli/lib/route.mjs +740 -0
  51. package/cli/lib/search.mjs +158 -0
  52. package/cli/lib/show.mjs +161 -0
  53. package/cli/lib/signals.mjs +2337 -0
  54. package/cli/lib/site.mjs +6617 -0
  55. package/cli/lib/skill-proposals.mjs +2046 -0
  56. package/cli/lib/suggest.mjs +66 -0
  57. package/cli/lib/workspace.mjs +1056 -0
  58. package/commands/README.md +25 -0
  59. package/commands/component-spec.md +34 -0
  60. package/commands/conversational.md +44 -0
  61. package/commands/design-from-brief.md +141 -0
  62. package/commands/design-review.md +62 -0
  63. package/commands/document-from-brief.md +47 -0
  64. package/commands/extract-tokens.md +38 -0
  65. package/commands/game-ui.md +40 -0
  66. package/commands/illustration.md +37 -0
  67. package/commands/iterate.md +167 -0
  68. package/commands/motion-design.md +54 -0
  69. package/commands/palette-from-brand.md +50 -0
  70. package/commands/print.md +49 -0
  71. package/commands/slide-deck.md +46 -0
  72. package/commands/spatial.md +47 -0
  73. package/commands/stability-review.md +74 -0
  74. package/commands/video.md +42 -0
  75. package/commands/website-improvement.md +77 -0
  76. package/docs/AGENT-DEVELOPMENT.md +658 -0
  77. package/docs/AI-LEARNING.md +429 -0
  78. package/docs/AIDER-INTEGRATION.md +224 -0
  79. package/docs/ARCHITECTURE.ko.md +183 -0
  80. package/docs/ARCHITECTURE.md +105 -0
  81. package/docs/CODEX-INTEGRATION.md +311 -0
  82. package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
  83. package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
  84. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
  85. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
  86. package/docs/CONTRIBUTING.ko.md +203 -0
  87. package/docs/CONTRIBUTING.md +242 -0
  88. package/docs/CURSOR-INTEGRATION.md +220 -0
  89. package/docs/DISTRIBUTION.ko.md +248 -0
  90. package/docs/DISTRIBUTION.md +253 -0
  91. package/docs/DOGFOOD-FINDINGS.md +180 -0
  92. package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
  93. package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
  94. package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
  95. package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
  96. package/docs/FIGMA-INTEGRATION.md +222 -0
  97. package/docs/MCP-INTEGRATION.md +243 -0
  98. package/docs/MIGRATION-v4.md +121 -0
  99. package/docs/PLUGIN-PACKAGING.md +240 -0
  100. package/docs/PRODUCT-READINESS.md +66 -0
  101. package/docs/QUICKSTART.ko.md +178 -0
  102. package/docs/QUICKSTART.md +179 -0
  103. package/docs/RELEASE-CHECKLIST.md +292 -0
  104. package/docs/ROADMAP.md +19495 -0
  105. package/docs/SESSION-LOG.md +940 -0
  106. package/docs/TOKEN-SYNC.md +237 -0
  107. package/docs/USING.ko.md +206 -0
  108. package/docs/USING.md +218 -0
  109. package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
  110. package/docs/WEBSITE-IMPROVEMENT.md +89 -0
  111. package/docs/announcements/README.md +56 -0
  112. package/docs/announcements/dev-to-korea.md +206 -0
  113. package/docs/announcements/hashnode-post.ko.md +232 -0
  114. package/docs/announcements/okky-post.ko.md +158 -0
  115. package/docs/announcements/press-kit.md +101 -0
  116. package/docs/announcements/reddit-r-korea.md +196 -0
  117. package/docs/announcements/show-hn.md +114 -0
  118. package/docs/announcements/twitter-thread.md +255 -0
  119. package/docs/external-status.md +34 -0
  120. package/docs/integrations/aider-walkthrough.ko.md +275 -0
  121. package/docs/integrations/aider-walkthrough.md +274 -0
  122. package/docs/integrations/codex-walkthrough.ko.md +297 -0
  123. package/docs/integrations/codex-walkthrough.md +297 -0
  124. package/docs/integrations/cursor-walkthrough.ko.md +281 -0
  125. package/docs/integrations/cursor-walkthrough.md +284 -0
  126. package/docs/integrations/design-ai-mcp-server.md +169 -0
  127. package/docs/integrations/figma-mcp.md +149 -0
  128. package/docs/integrations/github-mcp.md +178 -0
  129. package/docs/integrations/linear-mcp.md +215 -0
  130. package/docs/integrations/notion-mcp.md +174 -0
  131. package/docs/integrations/sdk-walkthrough.ko.md +375 -0
  132. package/docs/integrations/sdk-walkthrough.md +375 -0
  133. package/docs/integrations/slack-mcp.md +208 -0
  134. package/docs/integrations/vscode-walkthrough.ko.md +202 -0
  135. package/docs/integrations/vscode-walkthrough.md +205 -0
  136. package/docs/requirements.txt +16 -0
  137. package/docs/site-overrides/extra.css +83 -0
  138. package/docs/site-overrides/favicon.svg +4 -0
  139. package/docs/site-overrides/logo.svg +10 -0
  140. package/docs/site-overrides/main.html +18 -0
  141. package/docs/website-console/app.js +2540 -0
  142. package/docs/website-console/index.html +24 -0
  143. package/docs/website-console/styles.css +975 -0
  144. package/examples/README.md +252 -0
  145. package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
  146. package/examples/component-accordion-actions.md +153 -0
  147. package/examples/component-accordion-details.md +147 -0
  148. package/examples/component-accordion-summary.md +180 -0
  149. package/examples/component-accordion.md +229 -0
  150. package/examples/component-account-card.md +284 -0
  151. package/examples/component-address-input.md +260 -0
  152. package/examples/component-affix.md +190 -0
  153. package/examples/component-alert-dialog.md +210 -0
  154. package/examples/component-alert-title.md +77 -0
  155. package/examples/component-alert.md +192 -0
  156. package/examples/component-amount-input.md +278 -0
  157. package/examples/component-anchor.md +198 -0
  158. package/examples/component-app-bar.md +249 -0
  159. package/examples/component-aspect-ratio.md +156 -0
  160. package/examples/component-auto-complete.md +199 -0
  161. package/examples/component-avatar-group.md +170 -0
  162. package/examples/component-avatar.md +191 -0
  163. package/examples/component-back-top.md +123 -0
  164. package/examples/component-backdrop.md +148 -0
  165. package/examples/component-badge.md +181 -0
  166. package/examples/component-banner.md +237 -0
  167. package/examples/component-biometric-gate.md +281 -0
  168. package/examples/component-blockquote.md +153 -0
  169. package/examples/component-border-beam.md +207 -0
  170. package/examples/component-bottom-navigation.md +226 -0
  171. package/examples/component-box.md +112 -0
  172. package/examples/component-breadcrumb.md +222 -0
  173. package/examples/component-button-base.md +190 -0
  174. package/examples/component-button-group.md +117 -0
  175. package/examples/component-button.md +213 -0
  176. package/examples/component-calendar.md +280 -0
  177. package/examples/component-callout.md +131 -0
  178. package/examples/component-card-actions.md +101 -0
  179. package/examples/component-card-content.md +90 -0
  180. package/examples/component-card-header.md +122 -0
  181. package/examples/component-card-media.md +79 -0
  182. package/examples/component-card.md +233 -0
  183. package/examples/component-carousel.md +266 -0
  184. package/examples/component-cascader.md +135 -0
  185. package/examples/component-category-picker.md +271 -0
  186. package/examples/component-chart.md +237 -0
  187. package/examples/component-chat-interface.md +399 -0
  188. package/examples/component-checkbox.md +149 -0
  189. package/examples/component-click-away-listener.md +87 -0
  190. package/examples/component-code.md +213 -0
  191. package/examples/component-collapsible.md +219 -0
  192. package/examples/component-color-picker.md +110 -0
  193. package/examples/component-combobox.md +267 -0
  194. package/examples/component-command.md +299 -0
  195. package/examples/component-config-provider.md +190 -0
  196. package/examples/component-context-menu.md +179 -0
  197. package/examples/component-css-baseline.md +148 -0
  198. package/examples/component-date-picker.md +249 -0
  199. package/examples/component-descriptions.md +242 -0
  200. package/examples/component-dialog-actions.md +111 -0
  201. package/examples/component-dialog-content-text.md +76 -0
  202. package/examples/component-dialog-content.md +105 -0
  203. package/examples/component-dialog-title.md +104 -0
  204. package/examples/component-dialog.md +176 -0
  205. package/examples/component-divider.md +182 -0
  206. package/examples/component-doc-page.md +217 -0
  207. package/examples/component-drawer.md +257 -0
  208. package/examples/component-dropdown.md +220 -0
  209. package/examples/component-email-layout.md +253 -0
  210. package/examples/component-empty-state.md +269 -0
  211. package/examples/component-empty.md +172 -0
  212. package/examples/component-fade.md +87 -0
  213. package/examples/component-feature-grid.md +201 -0
  214. package/examples/component-field.md +266 -0
  215. package/examples/component-filled-input.md +114 -0
  216. package/examples/component-flex.md +117 -0
  217. package/examples/component-float-button.md +214 -0
  218. package/examples/component-form-control-label.md +134 -0
  219. package/examples/component-form-control.md +113 -0
  220. package/examples/component-form-controls.md +251 -0
  221. package/examples/component-form-group.md +86 -0
  222. package/examples/component-form-helper-text.md +95 -0
  223. package/examples/component-form-label.md +98 -0
  224. package/examples/component-form.md +291 -0
  225. package/examples/component-game-hud.md +362 -0
  226. package/examples/component-game-menu.md +327 -0
  227. package/examples/component-grid.md +140 -0
  228. package/examples/component-grow.md +79 -0
  229. package/examples/component-hero-block.md +252 -0
  230. package/examples/component-hover-card.md +211 -0
  231. package/examples/component-icon-button.md +142 -0
  232. package/examples/component-icon.md +102 -0
  233. package/examples/component-illustration.md +280 -0
  234. package/examples/component-image-list.md +107 -0
  235. package/examples/component-image.md +282 -0
  236. package/examples/component-input-adornment.md +101 -0
  237. package/examples/component-input-base.md +134 -0
  238. package/examples/component-input-number.md +141 -0
  239. package/examples/component-input-otp.md +271 -0
  240. package/examples/component-input.md +213 -0
  241. package/examples/component-item.md +243 -0
  242. package/examples/component-kbd.md +197 -0
  243. package/examples/component-krw-amount.md +219 -0
  244. package/examples/component-label.md +118 -0
  245. package/examples/component-layout.md +217 -0
  246. package/examples/component-link.md +223 -0
  247. package/examples/component-list-item-avatar.md +72 -0
  248. package/examples/component-list-item-button.md +139 -0
  249. package/examples/component-list-item-icon.md +82 -0
  250. package/examples/component-list-item-text.md +98 -0
  251. package/examples/component-list-item.md +116 -0
  252. package/examples/component-list-subheader.md +70 -0
  253. package/examples/component-list.md +198 -0
  254. package/examples/component-loading-button.md +125 -0
  255. package/examples/component-loading-sequence.md +254 -0
  256. package/examples/component-lottie-player.md +279 -0
  257. package/examples/component-masonry.md +191 -0
  258. package/examples/component-mentions.md +189 -0
  259. package/examples/component-menu-item.md +102 -0
  260. package/examples/component-menu-list.md +98 -0
  261. package/examples/component-menu.md +139 -0
  262. package/examples/component-menubar.md +259 -0
  263. package/examples/component-message.md +162 -0
  264. package/examples/component-mobile-stepper.md +155 -0
  265. package/examples/component-modal.md +220 -0
  266. package/examples/component-navigation-menu.md +295 -0
  267. package/examples/component-notification.md +166 -0
  268. package/examples/component-otp-countdown.md +245 -0
  269. package/examples/component-outlined-input.md +145 -0
  270. package/examples/component-page-transition.md +281 -0
  271. package/examples/component-pagination.md +226 -0
  272. package/examples/component-paper.md +199 -0
  273. package/examples/component-pass-auth.md +265 -0
  274. package/examples/component-payment-brand-button.md +253 -0
  275. package/examples/component-payment-method-selector.md +272 -0
  276. package/examples/component-payment-receipt.md +277 -0
  277. package/examples/component-popconfirm.md +144 -0
  278. package/examples/component-popover.md +239 -0
  279. package/examples/component-popper.md +129 -0
  280. package/examples/component-pricing-cards.md +247 -0
  281. package/examples/component-progress.md +195 -0
  282. package/examples/component-qr-code.md +201 -0
  283. package/examples/component-radio.md +167 -0
  284. package/examples/component-rate.md +202 -0
  285. package/examples/component-resizable.md +163 -0
  286. package/examples/component-result.md +270 -0
  287. package/examples/component-scroll-area.md +199 -0
  288. package/examples/component-scroll-reveal.md +320 -0
  289. package/examples/component-segmented.md +178 -0
  290. package/examples/component-select.md +258 -0
  291. package/examples/component-separator.md +177 -0
  292. package/examples/component-sheet.md +277 -0
  293. package/examples/component-sidebar.md +257 -0
  294. package/examples/component-skeleton.md +178 -0
  295. package/examples/component-slide.md +89 -0
  296. package/examples/component-slider.md +208 -0
  297. package/examples/component-snackbar-content.md +92 -0
  298. package/examples/component-snackbar.md +121 -0
  299. package/examples/component-sonner.md +165 -0
  300. package/examples/component-space.md +125 -0
  301. package/examples/component-spatial-locomotion.md +373 -0
  302. package/examples/component-spatial-panel.md +330 -0
  303. package/examples/component-speed-dial-action.md +78 -0
  304. package/examples/component-speed-dial.md +177 -0
  305. package/examples/component-spin.md +173 -0
  306. package/examples/component-spinner.md +204 -0
  307. package/examples/component-splitter.md +210 -0
  308. package/examples/component-stack.md +130 -0
  309. package/examples/component-statistic.md +282 -0
  310. package/examples/component-step-button.md +157 -0
  311. package/examples/component-step-connector.md +157 -0
  312. package/examples/component-step-content.md +121 -0
  313. package/examples/component-step-icon.md +115 -0
  314. package/examples/component-step-label.md +101 -0
  315. package/examples/component-step.md +84 -0
  316. package/examples/component-steps.md +264 -0
  317. package/examples/component-stock-chart.md +251 -0
  318. package/examples/component-swipeable-drawer.md +149 -0
  319. package/examples/component-switch.md +99 -0
  320. package/examples/component-tab-scroll-button.md +180 -0
  321. package/examples/component-tab.md +120 -0
  322. package/examples/component-table-body.md +82 -0
  323. package/examples/component-table-cell.md +118 -0
  324. package/examples/component-table-container.md +75 -0
  325. package/examples/component-table-footer.md +72 -0
  326. package/examples/component-table-head.md +78 -0
  327. package/examples/component-table-pagination.md +137 -0
  328. package/examples/component-table-row.md +113 -0
  329. package/examples/component-table-sort-label.md +109 -0
  330. package/examples/component-table.md +202 -0
  331. package/examples/component-tabs.md +184 -0
  332. package/examples/component-tag-badge.md +309 -0
  333. package/examples/component-tag.md +102 -0
  334. package/examples/component-testimonial-carousel.md +218 -0
  335. package/examples/component-textarea-autosize.md +114 -0
  336. package/examples/component-textarea.md +173 -0
  337. package/examples/component-time-picker.md +205 -0
  338. package/examples/component-timeline.md +170 -0
  339. package/examples/component-toast.md +224 -0
  340. package/examples/component-toggle-button.md +129 -0
  341. package/examples/component-toggle.md +220 -0
  342. package/examples/component-toolbar.md +104 -0
  343. package/examples/component-tooltip.md +178 -0
  344. package/examples/component-tour.md +176 -0
  345. package/examples/component-transaction-list-item.md +243 -0
  346. package/examples/component-transfer.md +156 -0
  347. package/examples/component-tree-select.md +202 -0
  348. package/examples/component-tree.md +297 -0
  349. package/examples/component-typography.md +215 -0
  350. package/examples/component-upload.md +295 -0
  351. package/examples/component-video-hero.md +409 -0
  352. package/examples/component-video-player.md +340 -0
  353. package/examples/component-voice-input.md +408 -0
  354. package/examples/component-watermark.md +217 -0
  355. package/examples/component-zoom.md +92 -0
  356. package/examples/doc-explanation-example.md +196 -0
  357. package/examples/doc-how-to-example.md +205 -0
  358. package/examples/doc-tutorial-example.md +162 -0
  359. package/examples/dogfood-korean-fintech-system.md +433 -0
  360. package/examples/email-transactional-example.md +259 -0
  361. package/examples/palette-saas-violet.md +235 -0
  362. package/examples/print-business-card-spec.md +205 -0
  363. package/examples/print-packaging-spec.md +285 -0
  364. package/examples/report-example.md +228 -0
  365. package/examples/slide-deck-example.md +237 -0
  366. package/examples/website-improvement-report.md +128 -0
  367. package/examples/website-improvement-workspace.json +126 -0
  368. package/install.sh +189 -0
  369. package/knowledge/COVERAGE.md +740 -0
  370. package/knowledge/PRINCIPLES.md +108 -0
  371. package/knowledge/a11y/contrast.md +70 -0
  372. package/knowledge/a11y/keyboard-and-focus.md +108 -0
  373. package/knowledge/colors/color-theory.md +90 -0
  374. package/knowledge/colors/mui-palette-structure.md +105 -0
  375. package/knowledge/colors/palettes-by-product-type.md +876 -0
  376. package/knowledge/components/INDEX.md +231 -0
  377. package/knowledge/components/index.json +1470 -0
  378. package/knowledge/components/shadcn-registry.md +159 -0
  379. package/knowledge/conversational/ai-chat-interfaces.md +323 -0
  380. package/knowledge/conversational/chatbot-design.md +312 -0
  381. package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
  382. package/knowledge/conversational/korean-voice-conventions.md +281 -0
  383. package/knowledge/conversational/voice-ui-patterns.md +297 -0
  384. package/knowledge/design-tokens/ant-design.md +124 -0
  385. package/knowledge/design-tokens/material-3.md +235 -0
  386. package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
  387. package/knowledge/design-tokens/tailwind-v4.md +284 -0
  388. package/knowledge/game-ui/game-accessibility.md +317 -0
  389. package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
  390. package/knowledge/game-ui/hud-design.md +324 -0
  391. package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
  392. package/knowledge/game-ui/menu-systems.md +388 -0
  393. package/knowledge/i18n/korean-app-store-visual.md +223 -0
  394. package/knowledge/i18n/korean-document-style.md +301 -0
  395. package/knowledge/i18n/korean-payments.md +211 -0
  396. package/knowledge/i18n/korean-product-conventions.md +96 -0
  397. package/knowledge/i18n/korean-publishing.md +139 -0
  398. package/knowledge/i18n/korean-typography.md +123 -0
  399. package/knowledge/icons/curated-sets.md +225 -0
  400. package/knowledge/illustration/hero-illustrations.md +234 -0
  401. package/knowledge/illustration/illustration-systems.md +221 -0
  402. package/knowledge/illustration/mascot-design.md +208 -0
  403. package/knowledge/illustration/spot-illustrations.md +246 -0
  404. package/knowledge/illustration/svg-optimization.md +308 -0
  405. package/knowledge/layout/spacing-and-grid.md +119 -0
  406. package/knowledge/motion/app-loading-sequences.md +277 -0
  407. package/knowledge/motion/choreography-depth.md +297 -0
  408. package/knowledge/motion/marketing-motion.md +223 -0
  409. package/knowledge/motion/micro-interactions.md +266 -0
  410. package/knowledge/motion/motion-tools.md +281 -0
  411. package/knowledge/motion/principles.md +126 -0
  412. package/knowledge/patterns/auth-flow-design.md +316 -0
  413. package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
  414. package/knowledge/patterns/brand-identity.md +238 -0
  415. package/knowledge/patterns/brand-references.md +97 -0
  416. package/knowledge/patterns/chart-color-encoding.md +269 -0
  417. package/knowledge/patterns/chart-types.md +344 -0
  418. package/knowledge/patterns/dashboard-composition.md +299 -0
  419. package/knowledge/patterns/design-system-qa.md +356 -0
  420. package/knowledge/patterns/document-typography.md +248 -0
  421. package/knowledge/patterns/email-design.md +338 -0
  422. package/knowledge/patterns/empty-states.md +263 -0
  423. package/knowledge/patterns/error-states.md +318 -0
  424. package/knowledge/patterns/form-design.md +237 -0
  425. package/knowledge/patterns/information-architecture.md +341 -0
  426. package/knowledge/patterns/landing-hero-design.md +283 -0
  427. package/knowledge/patterns/landing-page-patterns.md +681 -0
  428. package/knowledge/patterns/list-and-feed.md +371 -0
  429. package/knowledge/patterns/mobile-navigation.md +278 -0
  430. package/knowledge/patterns/money-and-amount.md +301 -0
  431. package/knowledge/patterns/onboarding.md +300 -0
  432. package/knowledge/patterns/pricing-page-design.md +261 -0
  433. package/knowledge/patterns/realtime-data.md +280 -0
  434. package/knowledge/patterns/report-design.md +330 -0
  435. package/knowledge/patterns/search-ux.md +373 -0
  436. package/knowledge/patterns/settings-page.md +325 -0
  437. package/knowledge/patterns/slide-deck-design.md +316 -0
  438. package/knowledge/patterns/styles-catalog.md +2599 -0
  439. package/knowledge/patterns/technical-writing.md +306 -0
  440. package/knowledge/patterns/ui-reasoning.md +1853 -0
  441. package/knowledge/patterns/ux-guidelines.md +1454 -0
  442. package/knowledge/platforms/react-native.md +395 -0
  443. package/knowledge/print/brochures-and-flyers.md +276 -0
  444. package/knowledge/print/korean-print-conventions.md +284 -0
  445. package/knowledge/print/packaging.md +321 -0
  446. package/knowledge/print/print-fundamentals.md +238 -0
  447. package/knowledge/print/signage-and-posters.md +235 -0
  448. package/knowledge/print/stationery.md +262 -0
  449. package/knowledge/spatial/ar-patterns.md +253 -0
  450. package/knowledge/spatial/comfort-and-accessibility.md +245 -0
  451. package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
  452. package/knowledge/spatial/spatial-ui-elements.md +343 -0
  453. package/knowledge/spatial/vr-patterns.md +302 -0
  454. package/knowledge/typography/font-pairings.md +332 -0
  455. package/knowledge/typography/mui-type-scale.md +57 -0
  456. package/knowledge/typography/type-scale-fundamentals.md +105 -0
  457. package/knowledge/video/in-product-video.md +277 -0
  458. package/knowledge/video/korean-video-conventions.md +247 -0
  459. package/knowledge/video/marketing-video.md +258 -0
  460. package/knowledge/video/social-and-short-form.md +257 -0
  461. package/knowledge/video/video-fundamentals.md +296 -0
  462. package/package.json +106 -0
  463. package/skills/README.md +39 -0
  464. package/skills/color-palette/PLAYBOOK.md +175 -0
  465. package/skills/color-palette/SKILL.md +6 -0
  466. package/skills/color-palette/TEMPLATE.md +103 -0
  467. package/skills/component-spec-writer/PLAYBOOK.md +169 -0
  468. package/skills/component-spec-writer/SKILL.md +6 -0
  469. package/skills/component-spec-writer/TEMPLATE.md +115 -0
  470. package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
  471. package/skills/conversational-ui-designer/SKILL.md +6 -0
  472. package/skills/design-broadcast/PLAYBOOK.md +146 -0
  473. package/skills/design-broadcast/SKILL.md +6 -0
  474. package/skills/design-critique/PLAYBOOK.md +137 -0
  475. package/skills/design-critique/SKILL.md +6 -0
  476. package/skills/design-pr-review/PLAYBOOK.md +171 -0
  477. package/skills/design-pr-review/SKILL.md +6 -0
  478. package/skills/design-system-builder/PLAYBOOK.md +218 -0
  479. package/skills/design-system-builder/SKILL.md +6 -0
  480. package/skills/design-system-qa/PLAYBOOK.md +163 -0
  481. package/skills/design-system-qa/SKILL.md +6 -0
  482. package/skills/document-author/PLAYBOOK.md +167 -0
  483. package/skills/document-author/SKILL.md +6 -0
  484. package/skills/figma-token-sync/PLAYBOOK.md +149 -0
  485. package/skills/figma-token-sync/SKILL.md +6 -0
  486. package/skills/game-ui-designer/PLAYBOOK.md +209 -0
  487. package/skills/game-ui-designer/SKILL.md +6 -0
  488. package/skills/handoff-spec/PLAYBOOK.md +170 -0
  489. package/skills/handoff-spec/SKILL.md +6 -0
  490. package/skills/illustration-designer/PLAYBOOK.md +166 -0
  491. package/skills/illustration-designer/SKILL.md +6 -0
  492. package/skills/motion-designer/PLAYBOOK.md +223 -0
  493. package/skills/motion-designer/SKILL.md +6 -0
  494. package/skills/print-designer/PLAYBOOK.md +209 -0
  495. package/skills/print-designer/SKILL.md +6 -0
  496. package/skills/slide-deck-author/PLAYBOOK.md +198 -0
  497. package/skills/slide-deck-author/SKILL.md +6 -0
  498. package/skills/spatial-designer/PLAYBOOK.md +238 -0
  499. package/skills/spatial-designer/SKILL.md +6 -0
  500. package/skills/ux-audit/PLAYBOOK.md +142 -0
  501. package/skills/ux-audit/SKILL.md +6 -0
  502. package/skills/video-designer/PLAYBOOK.md +240 -0
  503. package/skills/video-designer/SKILL.md +6 -0
  504. package/skills/website-improvement/PLAYBOOK.md +118 -0
  505. package/skills/website-improvement/SKILL.md +6 -0
  506. package/skills/website-improvement/TEMPLATE.md +103 -0
  507. package/tools/audit/changelog-generate.py +176 -0
  508. package/tools/audit/check-coverage.py +483 -0
  509. package/tools/audit/doctor_assertions.py +256 -0
  510. package/tools/audit/example-qa.py +108 -0
  511. package/tools/audit/frontmatter-check.py +199 -0
  512. package/tools/audit/integration-check.py +95 -0
  513. package/tools/audit/korean-copy-check.py +161 -0
  514. package/tools/audit/link-check.py +146 -0
  515. package/tools/audit/local-ci.py +558 -0
  516. package/tools/audit/package-contents.py +723 -0
  517. package/tools/audit/package-smoke.py +22443 -0
  518. package/tools/audit/raw-hex-check.py +252 -0
  519. package/tools/audit/registry-smoke.py +8188 -0
  520. package/tools/audit/release-metadata.py +9832 -0
  521. package/tools/audit/run-all.py +351 -0
  522. package/tools/audit/smoke_assertions.py +12742 -0
  523. package/tools/audit/stability-review.py +332 -0
  524. package/tools/audit/stale-check.py +156 -0
  525. package/tools/migrations/add-version-frontmatter.py +132 -0
  526. package/tools/migrations/bump-last-updated.py +131 -0
  527. package/tools/migrations/promote-stability.py +172 -0
  528. package/tools/preview/README.md +58 -0
  529. package/tools/preview/render-tokens.py +454 -0
@@ -0,0 +1,280 @@
1
+ # `Calendar` (full month view) — spec
2
+
3
+ > Citing Ant Design `Calendar`, MUI (no dedicated — `DateCalendar` from x-date-pickers is similar), shadcn-ui `calendar` (react-day-picker)
4
+ >
5
+ > Different from `DatePicker` ([`component-date-picker.md`](component-date-picker.md)) — Calendar is a **full-page month view**; DatePicker is a popover for picking a date.
6
+
7
+ ## Purpose
8
+
9
+ A full-month or full-year calendar view used as a primary UI surface — for scheduling apps, event listings, attendance trackers, or any view where the calendar IS the page.
10
+
11
+ ## When Calendar vs DatePicker
12
+
13
+ | Pattern | Use |
14
+ | --- | --- |
15
+ | **Calendar** (this spec) | Calendar is the primary content of the screen. User browses dates, views events, clicks days. |
16
+ | **DatePicker** | User picks a date as form input. Calendar appears in a popover. |
17
+
18
+ If your screen's main job is "view this month", use Calendar. If picking a date is incidental, use DatePicker.
19
+
20
+ ## Anatomy
21
+
22
+ ```
23
+ ┌────────────────────────────────────────────────────────────┐
24
+ │ ◀ 2026년 5월 ▶ [월] [주] [년] [+ 이벤트] │ ← header: nav + view + actions
25
+ ├────────────────────────────────────────────────────────────┤
26
+ │ 일 월 화 수 목 금 토 │ ← weekday headers
27
+ ├────────────────────────────────────────────────────────────┤
28
+ │ 1 2 │
29
+ │ ● [event chip] │ ← cell: number + indicator + events
30
+ │ 3 4 5 6 7 8 9 │
31
+ │ ● │
32
+ │ 10 11 12 13 14 15 16 │
33
+ │ ... │
34
+ └────────────────────────────────────────────────────────────┘
35
+ ```
36
+
37
+ | Slot | Required | Notes |
38
+ | --- | --- | --- |
39
+ | Header | yes | Month nav, view toggle, "today" button |
40
+ | Weekday row | yes | 일–토 (or Sun–Sat) |
41
+ | Date cells | yes | One per day; shows day number + events |
42
+ | Event indicators | optional | Dots, chips, or full event blocks |
43
+ | Today highlight | yes | Current date visually marked |
44
+ | Selected highlight | when applicable | Currently-selected date |
45
+
46
+ ## API
47
+
48
+ ```tsx
49
+ <Calendar
50
+ value={selectedDate}
51
+ onValueChange={setSelectedDate}
52
+ view="month"
53
+ events={events}
54
+ renderCell={(date) => <CustomCellContent date={date} />}
55
+ onDateClick={(date) => openDayDetail(date)}
56
+ />
57
+ ```
58
+
59
+ | Prop | Type | Default | Description |
60
+ | --- | --- | --- | --- |
61
+ | `value` | `Date` | `today()` | Selected / focused date |
62
+ | `onValueChange` | `(date: Date) => void` | — | |
63
+ | `view` | `"month" \| "week" \| "year" \| "day"` | `"month"` | Time scale |
64
+ | `onViewChange` | `(view) => void` | — | |
65
+ | `events` | `Event[]` | `[]` | Events to render in cells |
66
+ | `renderCell` | `(date) => ReactNode` | default | Custom cell rendering |
67
+ | `onDateClick` | `(date) => void` | — | Cell click |
68
+ | `onEventClick` | `(event) => void` | — | Event chip click |
69
+ | `weekStartsOn` | `0..6` | `0` (Sun for KR/US) | |
70
+ | `locale` | `string` | `"ko-KR"` | |
71
+ | `holidays` | `{ date: Date, name: string }[]` | `[]` | Korean 공휴일, etc. |
72
+ | `disabledDates` | `(date) => boolean` | — | |
73
+ | `minDate` / `maxDate` | `Date` | — | |
74
+ | `density` | `"compact" \| "comfortable"` | `"comfortable"` | Cell height |
75
+
76
+ ```ts
77
+ type Event = {
78
+ id: string;
79
+ date: Date;
80
+ endDate?: Date; // For multi-day events
81
+ title: string;
82
+ color?: string;
83
+ data?: unknown;
84
+ };
85
+ ```
86
+
87
+ ## Views
88
+
89
+ ### Month view (default)
90
+
91
+ 7 columns × 5–6 rows. Each cell shows:
92
+ - Day number
93
+ - Events as small chips/dots (max 2–3 visible; "+N more" for overflow)
94
+ - Today highlighted
95
+ - Other-month days muted
96
+
97
+ ### Week view
98
+
99
+ 7 columns × 1 column of hours. Used for hour-by-hour schedule (calendar apps).
100
+
101
+ ### Day view
102
+
103
+ Single column with hour rows. Detail view for one day.
104
+
105
+ ### Year view
106
+
107
+ 12 month thumbnails. Click any month to drill into Month view.
108
+
109
+ ## Cell rendering — events
110
+
111
+ ```
112
+ ┌──────────────┐
113
+ │ 7 ● │ ← day number + indicator
114
+ │ │
115
+ │ 10:00 회의 │ ← event chips (max 2-3)
116
+ │ 14:00 점심 │
117
+ │ + 2 more │ ← overflow
118
+ └──────────────┘
119
+ ```
120
+
121
+ | Indicator pattern | Use |
122
+ | --- | --- |
123
+ | Single dot | "Has events" — minimal, used in compact view |
124
+ | Color dots | "Multiple event types" — one per event |
125
+ | Event chips | Short title visible — full event titles, truncated |
126
+
127
+ For compact density (mobile): dots. For comfortable density (desktop): chips.
128
+
129
+ ## States — per cell
130
+
131
+ | State | Visual |
132
+ | --- | --- |
133
+ | Default | Day number, events |
134
+ | Today | Bold day number, light bg or ring |
135
+ | Selected | Filled bg `--color-primary-default`, white number |
136
+ | Hover | Bg `--color-bg-subtle` |
137
+ | Other-month | Muted day number |
138
+ | Disabled | No events, muted, no click |
139
+ | Holiday | Day number in red (Korean convention for 공휴일) |
140
+ | Weekend | Day number subtly different (often blue for Saturday, red for Sunday in KR) |
141
+
142
+ ### Korean holiday/weekend conventions
143
+
144
+ - 일요일 (Sunday): red
145
+ - 토요일 (Saturday): blue
146
+ - 공휴일 (national holidays): red
147
+ - 평일 (weekdays): default text color
148
+
149
+ ```css
150
+ .calendar-cell[data-day="0"] { color: var(--color-error); } /* Sunday */
151
+ .calendar-cell[data-day="6"] { color: var(--color-info); } /* Saturday */
152
+ .calendar-cell[data-holiday="true"] { color: var(--color-error); }
153
+ ```
154
+
155
+ ## Sizes / density
156
+
157
+ | Density | Cell min-height | Padding | Use |
158
+ | --- | --- | --- | --- |
159
+ | `compact` | 60px | 4px | Mobile, dense schedule |
160
+ | `comfortable` (default) | 100px | 8px | Standard desktop |
161
+
162
+ For event-heavy calendars (Google Calendar style): cells expand to fit events with internal scroll.
163
+
164
+ ## Tokens consumed
165
+
166
+ ```
167
+ --color-bg-default
168
+ --color-bg-elevated (cell bg)
169
+ --color-bg-subtle (hover)
170
+ --color-primary-default (today highlight, selected)
171
+ --color-primary-subtle-bg
172
+ --color-on-primary
173
+ --color-text-primary
174
+ --color-text-secondary (other-month)
175
+ --color-text-tertiary (weekday headers)
176
+ --color-error (Sunday, holidays)
177
+ --color-info (Saturday)
178
+ --color-border-default
179
+ --space-xs, --space-sm
180
+ --radius-md
181
+ --font-size-sm, --font-size-base
182
+ ```
183
+
184
+ ## Accessibility — WAI-ARIA Calendar pattern
185
+
186
+ - Container: `role="grid"`, `aria-label="달력 2026년 5월"`.
187
+ - Weekday headers: `role="columnheader"`, `aria-label` for the full day name.
188
+ - Each row: `role="row"`.
189
+ - Each cell: `role="gridcell"`, `aria-selected`, `aria-current="date"` for today.
190
+ - Disabled: `aria-disabled="true"`.
191
+
192
+ ### Keyboard
193
+
194
+ | Key | Behavior |
195
+ | --- | --- |
196
+ | `Tab` | Reach grid (single tab stop into the cells) |
197
+ | `←` / `→` | Move 1 day |
198
+ | `↑` / `↓` | Move 1 week |
199
+ | `PageUp` / `PageDown` | Previous / next month |
200
+ | `Shift+PageUp/Down` | Previous / next year |
201
+ | `Home` / `End` | First / last day of week |
202
+ | `Enter` / `Space` | Select / activate cell |
203
+
204
+ This is the WAI-ARIA APG datepicker pattern. Same as DatePicker.
205
+
206
+ ### Screen reader
207
+
208
+ - Announce date on focus change: "May 7, 2026, Wednesday"
209
+ - Announce events: "7 events on this day" or names if few
210
+ - Announce holidays: "Buddha's Birthday"
211
+
212
+ ## Code example
213
+
214
+ ```tsx
215
+ function MonthlyScheduleScreen() {
216
+ const [selected, setSelected] = useState(new Date());
217
+ const events = useEvents(selected);
218
+
219
+ return (
220
+ <div>
221
+ <Calendar
222
+ value={selected}
223
+ onValueChange={setSelected}
224
+ events={events}
225
+ holidays={koreanHolidays}
226
+ onDateClick={(date) => openDayDetail(date)}
227
+ onEventClick={(event) => openEventDetail(event)}
228
+ renderCell={(date) => (
229
+ <DefaultCell
230
+ date={date}
231
+ isToday={isToday(date)}
232
+ isHoliday={isHoliday(date)}
233
+ events={events.filter(e => isSameDay(e.date, date))}
234
+ />
235
+ )}
236
+ />
237
+ </div>
238
+ );
239
+ }
240
+ ```
241
+
242
+ ## Edge cases
243
+
244
+ - **Many events on a single day**: render first 2–3 + "+N more". Click day to open day-detail screen.
245
+ - **Multi-day event**: render as a horizontal bar spanning multiple cells (visual challenge — usually a separate library handles).
246
+ - **Cell content overflow**: ellipsis truncation; provide tooltip or detail-on-click.
247
+ - **Daylight saving** (not in Korea): handle correctly; display dates per local TZ.
248
+ - **Korean lunar calendar (음력)**: rare in product UIs. Some apps annotate Korean lunar date in cell (small, secondary).
249
+ - **Year boundary**: December → January transition shows partial rows from both.
250
+ - **Empty month**: render the grid normally; cells just have no events.
251
+ - **Mobile portrait**: month view's 7 columns crunch. Switch to compact density or week view by default.
252
+
253
+ ## Don't
254
+
255
+ - Don't render Calendar without events when the screen's purpose is event display. Show empty state instead.
256
+ - Don't shrink cells below readable size. Switch view (week, day) instead.
257
+ - Don't combine 5+ event colors per day. Use neutral chips or fewer event types.
258
+ - Don't auto-redirect to day detail on click — let user opt in via explicit action.
259
+ - Don't use Calendar where DatePicker fits (form input).
260
+ - Don't forget keyboard navigation. Calendar without arrow keys is broken.
261
+ - Don't ship without locale support for the user's date/week conventions.
262
+
263
+ ## References
264
+
265
+ - Ant Design: [`refs/ant-design/components/calendar/`](../refs/ant-design/components/calendar/) — `Calendar` with `mode="month" | "year"`, `dateCellRender`, `monthCellRender`. Most exhaustive.
266
+ - MUI: `@mui/x-date-pickers` `DateCalendar` — focused on date selection within a calendar grid; not full-month event-display.
267
+ - shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx) — wraps `react-day-picker`. Use as date selector or full calendar via `mode="default"` + `numberOfMonths`.
268
+
269
+ For event-heavy calendar apps (Google Calendar style), consider:
270
+ - `react-big-calendar` — month/week/day views with events
271
+ - `fullcalendar` — feature-rich, all views
272
+
273
+ This spec covers the **simpler full-month-with-event-indicators** case. For full event-management UIs, layer this with a calendar-specific library.
274
+
275
+ ## Cross-reference
276
+
277
+ - [`examples/component-date-picker.md`](component-date-picker.md) — for form-input use
278
+ - [`knowledge/i18n/korean-typography.md`](../knowledge/i18n/korean-typography.md) — Korean date formats
279
+ - [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md) — holiday + weekend color conventions
280
+ - [WAI-ARIA Date Picker pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/)
@@ -0,0 +1,131 @@
1
+ # `Callout` (info/warning/note in docs) — spec
2
+
3
+ > Doc-specific component. Highlights important asides in long-form content. Distinct from `Alert` (which is for product UI feedback) — Callout is for **documentation prose**.
4
+
5
+ ## Purpose
6
+
7
+ Marks a passage as important info, warning, tip, or note. Visually distinct from body text but doesn't break reading flow.
8
+
9
+ ## When Callout vs Alert vs Blockquote
10
+
11
+ | Use Callout | Use Alert | Use Blockquote |
12
+ | --- | --- | --- |
13
+ | Long-form docs | Product UI feedback | Quote from another source |
14
+ | Tip, note, warning, danger inside reading | Real-time notification | Attribution matters |
15
+
16
+ ## Anatomy
17
+
18
+ ```
19
+ ┌──────────────────────────────────────────────────────┐
20
+ │ ℹ Note │ ← icon + label header
21
+ │ │
22
+ │ The body text of the callout. May span multiple │
23
+ │ paragraphs and contain code, lists, links. │
24
+ └──────────────────────────────────────────────────────┘
25
+ subtle bg, accent left-border
26
+ ```
27
+
28
+ ## API
29
+
30
+ ```mdx
31
+ <Callout type="note">
32
+ This is an important note.
33
+ </Callout>
34
+
35
+ <Callout type="warning" title="Custom title">
36
+ Be careful — this can lose data.
37
+ </Callout>
38
+
39
+ <Callout type="tip">
40
+ 💡 You can also use the keyboard shortcut.
41
+ </Callout>
42
+ ```
43
+
44
+ | Prop | Type | Default | Description |
45
+ | --- | --- | --- | --- |
46
+ | `type` | `"note" \| "tip" \| "info" \| "warning" \| "danger" \| "success"` | `"note"` | Visual + icon |
47
+ | `title` | `string` | derived from type | Header text (override) |
48
+ | `children` | `ReactNode` | — | Body |
49
+ | `compact` | `boolean` | `false` | Single-line variant |
50
+
51
+ ## Type → visual mapping
52
+
53
+ | Type | Icon | Border | Bg tint | Use |
54
+ | --- | --- | --- | --- | --- |
55
+ | `note` | ℹ | `--color-info` | `--color-info-subtle-bg` | Side commentary |
56
+ | `tip` | 💡 | `--color-success` | `--color-success-subtle-bg` | Useful trick / shortcut |
57
+ | `info` | ℹ | `--color-info` | `--color-info-subtle-bg` | Background context |
58
+ | `warning` | ⚠ | `--color-warning` | `--color-warning-subtle-bg` | Pay attention; potentially problematic |
59
+ | `danger` | 🛑 | `--color-error` | `--color-error-subtle-bg` | Will cause harm if ignored |
60
+ | `success` | ✓ | `--color-success` | `--color-success-subtle-bg` | Confirmation / "this worked" |
61
+
62
+ ## Tokens consumed
63
+
64
+ ```
65
+ --color-info-subtle-bg, --color-info
66
+ --color-warning-subtle-bg, --color-warning
67
+ --color-error-subtle-bg, --color-error
68
+ --color-success-subtle-bg, --color-success
69
+ --color-text-primary
70
+ --color-text-secondary
71
+ --space-md, --space-base
72
+ --radius-md
73
+ --font-size-base
74
+ ```
75
+
76
+ ## Sizes
77
+
78
+ Body 16–18px (matches surrounding doc body). Title slightly bolder (semibold).
79
+
80
+ For compact variant: 14px, single-line, useful for inline tips.
81
+
82
+ ## Korean callouts
83
+
84
+ | Type | Korean header |
85
+ | --- | --- |
86
+ | note | 참고 |
87
+ | tip | 팁 |
88
+ | info | 안내 |
89
+ | warning | 주의 |
90
+ | danger | 위험 / 경고 |
91
+ | success | 완료 |
92
+
93
+ For Korean docs: per [`knowledge/i18n/korean-document-style.md`](../knowledge/i18n/korean-document-style.md), use formal tone (`~합니다 / 입니다`).
94
+
95
+ ```mdx
96
+ <Callout type="warning" title="주의">
97
+ 이 작업은 되돌릴 수 없습니다. 신중히 진행해 주세요.
98
+ </Callout>
99
+ ```
100
+
101
+ ## Accessibility
102
+
103
+ - Render as `<aside>` with `aria-label="Note"` (or appropriate per type).
104
+ - For `danger` / `warning`: `role="alert"` if the callout's appearance should interrupt reading flow.
105
+ - For passive types (note, tip, info): no role needed — just an `<aside>`.
106
+ - Icon: `aria-hidden="true"` (header label conveys meaning).
107
+
108
+ ## Don't
109
+
110
+ - Don't overuse — every paragraph as callout = noise.
111
+ - Don't nest callouts (callout inside callout).
112
+ - Don't use `danger` for non-destructive info.
113
+ - Don't put primary CTAs in callouts.
114
+ - Don't use color alone to convey type — icon + label do the work.
115
+
116
+ ## References
117
+
118
+ Most documentation tools (Docusaurus, Notion, GitBook, MDX-based sites) ship a Callout component. The variation is mostly in `type` naming.
119
+
120
+ - Docusaurus: `:::note`, `:::tip`, `:::info`, `:::warning`, `:::danger`
121
+ - GitBook: `<hint type="info|warning|danger|success">...</hint>`
122
+ - Notion: built-in callout block with icon
123
+
124
+ For design-ai's docs: MDX-based callout matching this spec.
125
+
126
+ ## Cross-reference
127
+
128
+ - [`examples/component-alert.md`](component-alert.md) — for product UI feedback (different)
129
+ - [`examples/component-blockquote.md`](component-blockquote.md) — for quotations
130
+ - [`knowledge/patterns/document-typography.md`](../knowledge/patterns/document-typography.md)
131
+ - [`knowledge/i18n/korean-document-style.md`](../knowledge/i18n/korean-document-style.md) — Korean callout headers
@@ -0,0 +1,101 @@
1
+ # `CardActions` — spec
2
+
3
+ > Synthesized from MUI `CardActions`. The action row at the bottom of a `Card`. Left-aligns by default (unlike `DialogActions` which is right-aligned).
4
+
5
+ ## When to use
6
+
7
+ - Inside `Card` for inline actions ("자세히", "공유", "저장").
8
+ - For destructive or modal-triggering actions, use a Dialog instead.
9
+
10
+ ## Anatomy
11
+
12
+ ```
13
+ ┌────────────────────────────┐
14
+ │ [CardContent] │
15
+ ├────────────────────────────┤
16
+ │ [Action] [Action] │
17
+ └────────────────────────────┘
18
+ ```
19
+
20
+ Left-aligned by default. The convention differs from `DialogActions` (right-aligned) because cards are scanning surfaces — the eye reads left-to-right, sees the headline, then the action without backtracking.
21
+
22
+ ## API
23
+
24
+ ```tsx
25
+ <Card>
26
+ <CardContent>...</CardContent>
27
+ <CardActions>
28
+ <Button size="small">자세히</Button>
29
+ <Button size="small">공유</Button>
30
+ </CardActions>
31
+ </Card>
32
+ ```
33
+
34
+ | Prop | Type | Default | Description |
35
+ | --- | --- | --- | --- |
36
+ | `children` | `ReactNode` | — | Action buttons (typically `size="small"`) |
37
+ | `disableSpacing` | `boolean` | `false` | Remove default 8px gap between buttons |
38
+
39
+ ## Button conventions
40
+
41
+ - Use `size="small"` (matches Card's compact reading rhythm).
42
+ - Use `variant="text"` or `variant="outlined"` — `contained` is too heavy for a card action.
43
+ - Maximum 2-3 actions per card. More = the card is doing too much.
44
+
45
+ ## Tokens consumed
46
+
47
+ ```
48
+ --space-sm /* gap */
49
+ --space-md /* horizontal padding */
50
+ --space-sm-y /* vertical padding (lighter than DialogActions) */
51
+ ```
52
+
53
+ ## Accessibility
54
+
55
+ - Each button needs an accessible name — for icon-only buttons inside `CardActions`, provide `aria-label`.
56
+ - Tab order: matches visual order (left → right).
57
+ - For "expandable card" patterns where a `CardActions` button reveals more content, use `aria-expanded` on that button.
58
+
59
+ ## Edge cases
60
+
61
+ - **Mobile narrow widths** — `CardActions` can right-align by setting `sx={{ justifyContent: 'flex-end' }}` if your Card design calls for it.
62
+ - **Long button labels in Korean** — Hangul labels run wider; consider icon-only buttons with `aria-label` for compact card grids.
63
+ - **Single primary action** — still wrap in `CardActions` for consistent padding.
64
+
65
+ ## Code example
66
+
67
+ ```tsx
68
+ <Card>
69
+ <CardMedia component="img" image="/post.jpg" alt="" />
70
+ <CardContent>
71
+ <Typography variant="h6">{post.title}</Typography>
72
+ <Typography variant="body2">{post.excerpt}</Typography>
73
+ </CardContent>
74
+ <CardActions>
75
+ <Button size="small" startIcon={<ReadIcon />}>읽기</Button>
76
+ <Button size="small" startIcon={<ShareIcon />}>공유</Button>
77
+ <Box sx={{ ml: 'auto' }}>
78
+ <IconButton aria-label="좋아요">
79
+ <FavoriteIcon />
80
+ </IconButton>
81
+ </Box>
82
+ </CardActions>
83
+ </Card>
84
+ ```
85
+
86
+ ## Don't
87
+
88
+ - Don't put 4+ actions — overflow into a menu.
89
+ - Don't use `variant="contained"` — too heavy for a card.
90
+ - Don't right-align without a reason — left-aligned is the cross-product expected pattern.
91
+
92
+ ## References
93
+
94
+ - MUI: [`CardActions.d.ts`](../refs/mui/packages/mui-material/src/CardActions/CardActions.d.ts)
95
+
96
+ ## Cross-reference
97
+
98
+ - [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
99
+ - [`component-card.md`](component-card.md)
100
+ - [`component-card-content.md`](component-card-content.md)
101
+ - [`component-button.md`](component-button.md)
@@ -0,0 +1,90 @@
1
+ # `CardContent` — spec
2
+
3
+ > Synthesized from MUI `CardContent`. The body region of a `Card`. Provides the default padding so card body content aligns with the card's grid.
4
+
5
+ ## When to use
6
+
7
+ - Inside every `Card` that has body content beyond a hero image.
8
+ - For media-only cards (`CardMedia` only), skip `CardContent`.
9
+
10
+ ## Anatomy
11
+
12
+ ```
13
+ ┌────────────────────────────┐
14
+ │ [CardMedia / image] │
15
+ ├────────────────────────────┤
16
+ │ CardContent │
17
+ │ - Title │
18
+ │ - Body text │
19
+ │ - Tags / metadata │
20
+ ├────────────────────────────┤
21
+ │ CardActions │
22
+ └────────────────────────────┘
23
+ ```
24
+
25
+ ## API
26
+
27
+ ```tsx
28
+ <Card>
29
+ <CardContent>
30
+ <Typography variant="h5">제목</Typography>
31
+ <Typography variant="body2">본문 텍스트</Typography>
32
+ </CardContent>
33
+ </Card>
34
+ ```
35
+
36
+ | Prop | Type | Default | Description |
37
+ | --- | --- | --- | --- |
38
+ | `children` | `ReactNode` | — | Body content |
39
+
40
+ ## Tokens consumed
41
+
42
+ ```
43
+ --card-content-padding /* default 16px / dense 8px */
44
+ --space-md
45
+ --space-sm
46
+ ```
47
+
48
+ ## Accessibility
49
+
50
+ `CardContent` is structural (a `<div>`); it doesn't add semantics. The Card's role is determined by its surrounding context — wrap interactive cards in `<a>` or `<button>` higher in the tree, not at `CardContent` level.
51
+
52
+ ## Edge cases
53
+
54
+ - **Card with no media** — `CardContent` becomes the only child; ensure padding still feels right (default 16px works).
55
+ - **Korean text density** — Hangul reads ~10% wider; consider 20-24px padding for body-heavy cards.
56
+ - **Bottom padding** — when `CardActions` follows, MUI removes the bottom padding of `CardContent` so the action row hugs the bottom. Don't override this without reason.
57
+
58
+ ## Code example
59
+
60
+ ```tsx
61
+ <Card sx={{ maxWidth: 360 }}>
62
+ <CardMedia component="img" image="/cover.jpg" alt="" />
63
+ <CardContent>
64
+ <Typography variant="h6">제목</Typography>
65
+ <Typography variant="body2" color="text.secondary">
66
+ 본문 요약 텍스트.
67
+ </Typography>
68
+ </CardContent>
69
+ <CardActions>
70
+ <Button size="small">자세히</Button>
71
+ </CardActions>
72
+ </Card>
73
+ ```
74
+
75
+ ## Don't
76
+
77
+ - Don't override the bottom padding when followed by `CardActions` — MUI handles this.
78
+ - Don't put `Card`-level interactive surfaces (link, click handler) on `CardContent` — they belong on the Card or on `CardActionArea`.
79
+
80
+ ## References
81
+
82
+ - MUI: [`CardContent.d.ts`](../refs/mui/packages/mui-material/src/CardContent/CardContent.d.ts)
83
+
84
+ ## Cross-reference
85
+
86
+ - [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
87
+ - [`component-card.md`](component-card.md)
88
+ - [`component-card-actions.md`](component-card-actions.md)
89
+ - [`component-card-media.md`](component-card-media.md)
90
+ - [`component-card-header.md`](component-card-header.md)