@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,118 @@
1
+ # `Label` — spec
2
+
3
+ > Synthesized from shadcn-ui `label` and the HTML5 `<label>` element. The semantic + styled label primitive for form controls.
4
+
5
+ ## When to use
6
+
7
+ - **Every form control** (Input, Select, Checkbox, Radio, Switch, Combobox).
8
+ - Wherever you'd write `<label htmlFor="...">`.
9
+
10
+ `Label` is a thin styled wrapper around `<label>` — adds typography tokens + optional required/optional indicator.
11
+
12
+ ## API
13
+
14
+ ```tsx
15
+ <Label htmlFor="email">이메일</Label>
16
+ <Input id="email" />
17
+
18
+ <Label htmlFor="age" required>만 14세 이상입니다</Label>
19
+
20
+ <Label htmlFor="bio" optional>자기소개 (선택)</Label>
21
+ ```
22
+
23
+ | Prop | Type | Default | Description |
24
+ | --- | --- | --- | --- |
25
+ | `htmlFor` | `string` | — | Linked input id (mandatory for accessibility) |
26
+ | `required` | `boolean` | `false` | Adds asterisk visual |
27
+ | `optional` | `boolean` | `false` | Adds "(선택)" / "(optional)" text |
28
+ | `children` | `ReactNode` | — | Label text |
29
+ | `className` | `string` | — | Style override |
30
+
31
+ ## CSS
32
+
33
+ ```css
34
+ .label {
35
+ font-size: var(--font-size-sm);
36
+ font-weight: 500;
37
+ color: var(--color-fg-default);
38
+ display: inline-flex;
39
+ align-items: center;
40
+ gap: var(--space-xxs);
41
+ cursor: pointer;
42
+ user-select: none;
43
+ }
44
+
45
+ .label[data-required]::after {
46
+ content: "*";
47
+ color: var(--color-error-default);
48
+ margin-left: 2px;
49
+ }
50
+
51
+ .label[data-disabled] {
52
+ opacity: 0.6;
53
+ cursor: not-allowed;
54
+ }
55
+ ```
56
+
57
+ ## States
58
+
59
+ | State | Visual |
60
+ | --- | --- |
61
+ | Default | Standard label color |
62
+ | Hover (when paired with input) | No change (the input handles hover) |
63
+ | Disabled (when input is disabled) | Reduced opacity |
64
+
65
+ Label is presentational; states inherit from the linked input.
66
+
67
+ ## Accessibility
68
+
69
+ - Always use `htmlFor` matching the input's `id`.
70
+ - Click on label focuses / activates the linked input.
71
+ - For Checkbox / Radio: clicking the label also toggles the control (native browser behavior).
72
+ - For required field, prefer `aria-required="true"` on the input over visual asterisk alone — color-blind / screen reader users miss the star.
73
+
74
+ ```html
75
+ <Label htmlFor="email" required>이메일</Label>
76
+ <Input id="email" type="email" required aria-required="true" />
77
+ ```
78
+
79
+ ## Korean conventions
80
+
81
+ - 필수 / 선택 marker patterns:
82
+ - 필수: asterisk `*` OR "(필수)" text after label
83
+ - 선택: "(선택)" text after label OR no marker (assume required by default)
84
+ - Common labels: 이메일 / 비밀번호 / 이름 / 휴대폰 번호 / 주소 / 회원가입 약관 동의
85
+
86
+ ## Code example
87
+
88
+ ```tsx
89
+ <Field>
90
+ <Label htmlFor="email" required>이메일</Label>
91
+ <Input id="email" type="email" autoComplete="email" required />
92
+ <FieldDescription>로그인할 때 사용해요.</FieldDescription>
93
+ </Field>
94
+
95
+ <Field>
96
+ <Label htmlFor="bio" optional>자기소개</Label>
97
+ <Textarea id="bio" rows={3} />
98
+ </Field>
99
+ ```
100
+
101
+ ## Don't
102
+
103
+ - Don't use Label without `htmlFor`. Just text without a link is decorative.
104
+ - Don't put long instructional text in Label. Use FieldDescription.
105
+ - Don't rely on color alone for required indicator — use asterisk OR `aria-required`.
106
+ - Don't wrap multiple inputs in one Label — confusing. Use separate Labels.
107
+
108
+ ## References
109
+
110
+ - HTML5 `<label>` element
111
+ - shadcn-ui: [`label`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/label.tsx) (Radix)
112
+ - MUI: `FormLabel`
113
+
114
+ ## Cross-reference
115
+
116
+ - [`examples/component-field.md`](component-field.md) — wraps Label + control
117
+ - [`examples/component-input.md`](component-input.md)
118
+ - [`examples/component-form-controls.md`](component-form-controls.md)
@@ -0,0 +1,217 @@
1
+ # `Layout` (page chrome) — spec
2
+
3
+ > Citing Ant Design `Layout`, MUI (composition), shadcn-ui (composition)
4
+
5
+ ## Purpose
6
+
7
+ The top-level page structure: header / sidebar / main / footer. Used as the root of any standard product page. Provides slot-based composition for consistent app chrome.
8
+
9
+ ## When Layout vs CSS Grid
10
+
11
+ Layout component vs CSS Grid (`grid-template-areas`): both work. The Layout component:
12
+ - Pre-defines the slots (Header, Sidebar, Content, Footer)
13
+ - Applies sticky/fixed positioning consistently
14
+ - Handles responsive collapse (sidebar → drawer on mobile)
15
+
16
+ For dashboards with a fixed shape, Layout simplifies the wiring.
17
+
18
+ ## Anatomy
19
+
20
+ ```
21
+ ┌──────────────────────────────────────────────────┐
22
+ │ Layout.Header (sticky) │
23
+ ├──────────┬───────────────────────────────────────┤
24
+ │ │ │
25
+ │ Layout. │ Layout.Content │
26
+ │ Sider │ │
27
+ │ │ │
28
+ │ │ │
29
+ ├──────────┴───────────────────────────────────────┤
30
+ │ Layout.Footer (optional) │
31
+ └──────────────────────────────────────────────────┘
32
+ ```
33
+
34
+ | Slot | Required | Notes |
35
+ | --- | --- | --- |
36
+ | `Layout` | yes | Root container |
37
+ | `Layout.Header` | optional | Top app bar (typically with `AppBar` inside) |
38
+ | `Layout.Sider` | optional | Sidebar nav (collapsible) |
39
+ | `Layout.Content` | yes | Main page content |
40
+ | `Layout.Footer` | optional | Footer (rare on apps; common on marketing) |
41
+
42
+ ## API
43
+
44
+ ```tsx
45
+ <Layout>
46
+ <Layout.Header>
47
+ <AppBar leading={<Logo />} actions={[...]} />
48
+ </Layout.Header>
49
+ <Layout>
50
+ <Layout.Sider width={240} collapsible>
51
+ <SideNav />
52
+ </Layout.Sider>
53
+ <Layout.Content>
54
+ <PageContent />
55
+ </Layout.Content>
56
+ </Layout>
57
+ <Layout.Footer>
58
+ <SiteFooter />
59
+ </Layout.Footer>
60
+ </Layout>
61
+ ```
62
+
63
+ | Prop (Layout) | Type | Default | Description |
64
+ | --- | --- | --- | --- |
65
+ | `direction` | `"column" \| "row"` | `"column"` | Children stack vertically or horizontally |
66
+
67
+ | Prop (Sider) | Type | Default | Description |
68
+ | --- | --- | --- | --- |
69
+ | `width` | `number \| string` | `200` | Expanded width |
70
+ | `collapsedWidth` | `number` | `64` | Width when collapsed |
71
+ | `collapsible` | `boolean` | `false` | Show toggle |
72
+ | `collapsed` | `boolean` | — | Controlled |
73
+ | `defaultCollapsed` | `boolean` | `false` | |
74
+ | `breakpoint` | `string` | `"md"` | Auto-collapse below this width |
75
+ | `onCollapse` | `(collapsed) => void` | — | |
76
+ | `position` | `"left" \| "right"` | `"left"` | |
77
+
78
+ | Prop (Header / Footer) | Type | Default | Description |
79
+ | --- | --- | --- | --- |
80
+ | `position` | `"static" \| "sticky" \| "fixed"` | `"static"` | |
81
+
82
+ ## Behavior
83
+
84
+ ### Sider collapse
85
+
86
+ - Manual: user clicks toggle button.
87
+ - Auto-collapse: at viewport breakpoint, sider collapses to icon-only or hides entirely.
88
+ - Mobile: typically hide entirely; replace with hamburger that opens a Drawer.
89
+
90
+ ### Layout nesting
91
+
92
+ You can nest `Layout` inside `Layout` to combine row + column flows:
93
+
94
+ ```tsx
95
+ <Layout> {/* column */}
96
+ <Layout.Header />
97
+ <Layout> {/* row */}
98
+ <Layout.Sider />
99
+ <Layout.Content />
100
+ </Layout>
101
+ </Layout>
102
+ ```
103
+
104
+ This is the canonical "header + sidebar + content" pattern.
105
+
106
+ ## Responsive patterns
107
+
108
+ | Viewport | Recommended layout |
109
+ | --- | --- |
110
+ | < 768 (mobile) | Header + Content; Sider hidden, opens via drawer |
111
+ | 768–1024 (tablet) | Header + collapsed Sider (icon-only) + Content |
112
+ | > 1024 (desktop) | Header + expanded Sider + Content |
113
+
114
+ Use `breakpoint="md"` on Sider for auto-collapse.
115
+
116
+ ## States
117
+
118
+ The Layout component doesn't have visual states. The Sider has expanded/collapsed.
119
+
120
+ ## Tokens consumed
121
+
122
+ ```
123
+ --color-bg-default (Content bg)
124
+ --color-bg-elevated (Header, Sider bg)
125
+ --color-bg-subtle (Footer bg)
126
+ --color-border-default (between regions)
127
+ --color-text-primary
128
+ --space-md, --space-base
129
+ --motion-default (Sider collapse animation)
130
+ ```
131
+
132
+ ## Sizes
133
+
134
+ | Region | Default size |
135
+ | --- | --- |
136
+ | Header height | 56px (mobile) / 64px (desktop) |
137
+ | Sider width | 200–280px |
138
+ | Sider collapsed | 64px |
139
+ | Footer height | 64–96px |
140
+
141
+ Content fills remaining space.
142
+
143
+ ## Accessibility
144
+
145
+ - `<Layout>` renders as `<div>` (or root structural element).
146
+ - `Layout.Header` → `<header>` with `role="banner"`.
147
+ - `Layout.Sider` → `<nav>` with `aria-label="Main navigation"`.
148
+ - `Layout.Content` → `<main>` with `id="main-content"`.
149
+ - `Layout.Footer` → `<footer>` with `role="contentinfo"`.
150
+ - Provide a "Skip to main content" link before the header — keyboard users skip nav.
151
+
152
+ ```html
153
+ <a href="#main-content" class="sr-only-focusable">본문으로 건너뛰기</a>
154
+ ```
155
+
156
+ ## Code example
157
+
158
+ ```tsx
159
+ function AppLayout({ children }: Props) {
160
+ const [sidebarCollapsed, setSidebarCollapsed] = useLocalStorage("sidebar-collapsed", false);
161
+
162
+ return (
163
+ <Layout>
164
+ <Layout.Header position="sticky">
165
+ <AppBar
166
+ leading={<Logo />}
167
+ title={<NavLinks />}
168
+ actions={[<Notifications />, <ProfileMenu />]}
169
+ />
170
+ </Layout.Header>
171
+
172
+ <Layout direction="row">
173
+ <Layout.Sider
174
+ width={240}
175
+ collapsedWidth={64}
176
+ collapsible
177
+ collapsed={sidebarCollapsed}
178
+ onCollapse={setSidebarCollapsed}
179
+ breakpoint="md"
180
+ position="left"
181
+ >
182
+ <SideNav collapsed={sidebarCollapsed} />
183
+ </Layout.Sider>
184
+
185
+ <Layout.Content>
186
+ <a href="#main-content" className="sr-only-focusable">
187
+ 본문으로 건너뛰기
188
+ </a>
189
+ <main id="main-content">
190
+ {children}
191
+ </main>
192
+ </Layout.Content>
193
+ </Layout>
194
+ </Layout>
195
+ );
196
+ }
197
+ ```
198
+
199
+ ## Don't
200
+
201
+ - Don't ship without a "Skip to main content" link.
202
+ - Don't put critical content in the Sider only — mobile users may not see it.
203
+ - Don't auto-collapse the sider on every page load — persist user preference.
204
+ - Don't omit `<main>` — accessibility requires it.
205
+
206
+ ## References
207
+
208
+ - Ant Design: [`refs/ant-design/components/layout/`](../refs/ant-design/components/layout/) — `Layout`, `Layout.Header`, `Layout.Sider`, `Layout.Content`, `Layout.Footer`. Most exhaustive.
209
+ - MUI: no dedicated Layout — compose with `<Box>` + `<Drawer>` + `<AppBar>`.
210
+ - shadcn-ui: no built-in. Use `resizable` + custom layout.
211
+
212
+ ## Cross-reference
213
+
214
+ - [`examples/component-app-bar.md`](component-app-bar.md) — fits inside Layout.Header
215
+ - [`examples/component-drawer.md`](component-drawer.md) — mobile alternative to Sider
216
+ - [`examples/component-splitter.md`](component-splitter.md) — when sider needs resize
217
+ - [`knowledge/layout/spacing-and-grid.md`](../knowledge/layout/spacing-and-grid.md) — broader layout system
@@ -0,0 +1,223 @@
1
+ # `Link` — spec
2
+
3
+ > Synthesized from MUI `Link`, Ant Design's link styles, and shadcn-ui's `<a>` patterns. The canonical text link primitive — distinct from `Button` and `Anchor` (TOC nav).
4
+
5
+ ## Link vs Button
6
+
7
+ > **Links navigate. Buttons do.**
8
+
9
+ Use `Link` when the action is "go somewhere" (URL change). Use `Button` when the action is "do something" (state change, side effect).
10
+
11
+ | | Link | Button |
12
+ | --- | --- | --- |
13
+ | Native element | `<a href>` | `<button>` |
14
+ | Default keyboard | Enter activates | Enter / Space activate |
15
+ | Default behavior | Navigate | Custom handler |
16
+ | Right-click context | Open in new tab | n/a |
17
+ | Drag | Drag URL | n/a |
18
+ | User expectation | New URL | Stay |
19
+
20
+ For ambiguous cases ("Sign out" — is that a state change or a navigation to /logout?): pick based on the destination. If `/logout` is a real route, use Link. If it's purely a state action, use Button.
21
+
22
+ ## Anatomy
23
+
24
+ Inline link in flowing text:
25
+
26
+ ```
27
+ The system audits your design system across five layers. See the full
28
+ report.
29
+ ↑ link
30
+ ```
31
+
32
+ Standalone link (CTA-style):
33
+
34
+ ```
35
+ [ → 자세히 보기 ]
36
+ ```
37
+
38
+ External link with indicator:
39
+
40
+ ```
41
+ Visit our docs ↗
42
+ ```
43
+
44
+ ## API
45
+
46
+ ```tsx
47
+ <Link href="/docs">documentation</Link>
48
+ <Link href="https://example.com" external>External site ↗</Link>
49
+ <Link href="/profile" as={NextLink}>profile</Link>
50
+ <Link variant="standalone">Learn more →</Link>
51
+ <Link variant="muted" href="...">Privacy policy</Link>
52
+ ```
53
+
54
+ | Prop | Type | Default | Description |
55
+ | --- | --- | --- | --- |
56
+ | `href` | `string` | required | Destination URL |
57
+ | `external` | `boolean` | auto-detected from URL | Add visual indicator + open-in-new-tab semantics |
58
+ | `variant` | `"default" \| "muted" \| "standalone" \| "destructive"` | `"default"` | Visual style |
59
+ | `underline` | `"hover" \| "always" \| "none"` | `"hover"` | When underline is visible |
60
+ | `as` | Component | `"a"` | Render as router-aware Link (NextLink, react-router Link) |
61
+ | `disabled` | `boolean` | `false` | Disabled (rare for links; usually means "not yet available") |
62
+
63
+ ## Variants
64
+
65
+ ### `default` (in-flow link)
66
+
67
+ Brand-colored, underline on hover (or always for accessibility-strict contexts). Used inline within paragraphs.
68
+
69
+ ### `muted`
70
+
71
+ Gray, less prominent. For secondary links (legal, footer, "skip").
72
+
73
+ ### `standalone`
74
+
75
+ CTA-style link, often with arrow indicator. Used as a section's primary navigation:
76
+
77
+ ```tsx
78
+ <Link variant="standalone" href="/learn-more">
79
+ Learn more <ArrowRightIcon />
80
+ </Link>
81
+ ```
82
+
83
+ Larger touch target; bolder weight.
84
+
85
+ ### `destructive`
86
+
87
+ Red. For "Delete account", "Cancel subscription" — actions that remove data. Pair with confirmation flow if irreversible.
88
+
89
+ ## Underline policies
90
+
91
+ | Setting | When |
92
+ | --- | --- |
93
+ | `hover` (default) | Body text in well-styled pages — link is brand-colored already |
94
+ | `always` | Long-form content, accessibility-strict, when link can't be color-distinguished |
95
+ | `none` | Standalone CTAs that have arrow indicator + clear context |
96
+
97
+ WCAG note: links must be distinguishable from surrounding text by **more than color alone**. If your design relies on color only: enable `underline="always"` to satisfy WCAG.
98
+
99
+ ## States
100
+
101
+ | State | Visual |
102
+ | --- | --- |
103
+ | Default | Brand color (or muted), underline policy applies |
104
+ | Hover | Underline visible (if hover policy); subtle color shift |
105
+ | Visited | Optional muted color shift (rare in modern apps) |
106
+ | Active (during click) | Slightly deeper color |
107
+ | Focus-visible | 2px focus ring AROUND link (preserve underline) |
108
+ | Disabled | `aria-disabled="true"`, gray text, no events |
109
+
110
+ ## External link
111
+
112
+ ```tsx
113
+ <Link external href="https://example.com">Docs ↗</Link>
114
+ ```
115
+
116
+ Adds:
117
+ - `target="_blank"` (new tab)
118
+ - `rel="noopener noreferrer"` (security)
119
+ - Visual indicator (↗ arrow OR external icon)
120
+ - `aria-label` extension: "Docs (opens in new tab)" for screen readers
121
+
122
+ ```html
123
+ <a href="https://example.com"
124
+ target="_blank"
125
+ rel="noopener noreferrer"
126
+ aria-label="Docs (opens in new tab)">
127
+ Docs <ExternalIcon aria-hidden="true" />
128
+ </a>
129
+ ```
130
+
131
+ ## Tokens consumed
132
+
133
+ ```
134
+ --color-link-default (typically brand color)
135
+ --color-link-hover
136
+ --color-link-visited (optional)
137
+ --color-link-active
138
+ --color-link-muted
139
+ --color-link-destructive
140
+ --color-focus-ring
141
+ --text-decoration-thickness (1-2px underline)
142
+ --text-underline-offset (3-4px below text baseline)
143
+ --motion-fast (color transition)
144
+ ```
145
+
146
+ ## Accessibility
147
+
148
+ - Always use `<a>` (or framework Link). Don't fake a link with `<div onClick>`.
149
+ - For non-text links (icon-only): `aria-label` required.
150
+ - Focus-visible ring must be visible against any background.
151
+ - Don't disable `pointer-events` to make a "disabled" link — use `aria-disabled="true"` and prevent navigation in the click handler.
152
+ - For links that look like buttons (CTA-style): users expect them to navigate; if they trigger a state action, use Button.
153
+ - Korean: identical accessibility rules apply. Hangul links should not be color-only either.
154
+
155
+ ## Korean conventions
156
+
157
+ - 한국어 link 스타일은 일반적으로 영문보다 underline 사용이 약간 더 적극적 (Hangul 글자에서 underline 가독성이 좋음).
158
+ - 외부 링크 표시: ↗ 또는 ↪ 화살표 + "(새 창에서 열림)" sr-only 텍스트.
159
+ - "더보기 →" / "자세히 보기 →" / "전체 보기" — common standalone link copy.
160
+ - For B2C: 해요체 ("자세히 보기"); for B2B: 합쇼체 ("더 알아보기").
161
+
162
+ ## Code example
163
+
164
+ ```tsx
165
+ function ArticleFooter() {
166
+ return (
167
+ <footer className="article-footer">
168
+ <p>
169
+ 이 글은 <Link href="/authors/sungjin">박성진</Link>이 작성했어요.
170
+ <Link href="https://blog.example.com" external>블로그</Link>에서
171
+ 더 많은 글을 확인할 수 있어요.
172
+ </p>
173
+ <Link variant="standalone" href="/articles">
174
+ 모든 글 보기 <ArrowRightIcon />
175
+ </Link>
176
+ </footer>
177
+ );
178
+ }
179
+ ```
180
+
181
+ ## With Next.js / React Router
182
+
183
+ ```tsx
184
+ import NextLink from "next/link";
185
+
186
+ <Link as={NextLink} href="/docs">documentation</Link>
187
+ ```
188
+
189
+ The `as` prop swaps the underlying element from `<a>` to a router-aware Link. This preserves design-ai's styling but uses client-side routing.
190
+
191
+ ## Edge cases
192
+
193
+ - **Disabled link**: rare; typically means "not yet available". Use `aria-disabled` + click handler that prevents nav. Don't use `pointer-events: none` (still focusable, confusing).
194
+ - **Link wrapping multiple lines**: ensure underline appears on each line, not just the first. Default browser behavior; verify in your CSS reset.
195
+ - **Email link**: `<Link href="mailto:hello@example.com">` works; consider `mailto:` link best practices.
196
+ - **Phone link** (mobile): `<Link href="tel:+8210...">`.
197
+ - **Anchor link** (`#section`): scroll behavior + browser history. Use smooth scroll if appropriate.
198
+ - **Protocol-relative**: avoid `//example.com` — fully qualify.
199
+ - **RTL**: arrow direction flips automatically if using `→` / `←` SVG. For text arrows, use logical names (`block-start`, `inline-start`).
200
+ - **Reduced motion**: skip color transition.
201
+
202
+ ## Don't
203
+
204
+ - Don't use Link as a button (state action). Use Button.
205
+ - Don't omit `target="_blank"` external indicator. Users hate context-loss.
206
+ - Don't ship Link with `target="_blank"` without `rel="noopener"`. Security.
207
+ - Don't disable underline AND make link only differentiated by color. WCAG fail.
208
+ - Don't open EVERY link in a new tab. User-hostile.
209
+ - Don't put long descriptive text inside link — extract a short label, use the surrounding paragraph for context.
210
+
211
+ ## References
212
+
213
+ - HTML5 `<a>` element
214
+ - MUI: [`Link`](../refs/mui/packages/mui-material/src/Link)
215
+ - Ant Design: link styling within `Typography`
216
+ - WCAG 2.1: SC 1.4.1 (Use of Color), SC 2.4.4 (Link Purpose)
217
+
218
+ ## Cross-reference
219
+
220
+ - [`examples/component-button.md`](component-button.md) — when action is not navigation
221
+ - [`examples/component-anchor.md`](component-anchor.md) — table-of-contents nav (different use)
222
+ - [`examples/component-typography.md`](component-typography.md) — text primitives
223
+ - [`knowledge/a11y/contrast.md`](../knowledge/a11y/contrast.md)
@@ -0,0 +1,72 @@
1
+ # `ListItemAvatar` — spec
2
+
3
+ > Synthesized from MUI `ListItemAvatar`. The leading-avatar slot — like `ListItemIcon` but sized for `Avatar` (40px default vs 24px). Used in user/contact lists, message lists, and any row identified by a person/entity image.
4
+
5
+ ## When to use
6
+
7
+ - User lists (team members, followers).
8
+ - Message threads (sender avatar).
9
+ - Brand/entity rows with logos.
10
+
11
+ ## API
12
+
13
+ ```tsx
14
+ <ListItem secondaryAction={<IconButton><CloseIcon /></IconButton>}>
15
+ <ListItemAvatar>
16
+ <Avatar src={user.avatarUrl} alt={user.name} />
17
+ </ListItemAvatar>
18
+ <ListItemText primary={user.name} secondary={user.role} />
19
+ </ListItem>
20
+ ```
21
+
22
+ | Prop | Type | Default | Description |
23
+ | --- | --- | --- | --- |
24
+ | `children` | `ReactNode` | — | An `Avatar` component |
25
+
26
+ ## Tokens consumed
27
+
28
+ ```
29
+ --avatar-size-md /* 40px default */
30
+ --list-avatar-min-width /* 56px reserved column */
31
+ --space-md /* gap to text */
32
+ ```
33
+
34
+ ## Accessibility
35
+
36
+ - `Avatar` should have meaningful `alt` (the person's name) — don't set `alt=""`.
37
+ - For image-failed states, MUI's Avatar falls back to initials or generic icon; ensure both are readable.
38
+
39
+ ## Edge cases
40
+
41
+ - **Status badge** — wrap Avatar in `Badge` for online/unread indicators.
42
+ - **Initials fallback** — Korean names use 2-3 character initials (성+이름 first char). Latin: 1-2.
43
+ - **Compact lists** — set `Avatar size={32}` and override `ListItemAvatar` `minWidth`.
44
+
45
+ ## Code example
46
+
47
+ ```tsx
48
+ <Badge
49
+ overlap="circular"
50
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
51
+ badgeContent={user.online ? <OnlineDot /> : null}
52
+ >
53
+ <ListItemAvatar>
54
+ <Avatar src={user.avatarUrl}>{user.name[0]}</Avatar>
55
+ </ListItemAvatar>
56
+ </Badge>
57
+ ```
58
+
59
+ ## Don't
60
+
61
+ - Don't use for plain icons — use `ListItemIcon` (smaller column).
62
+ - Don't omit `alt` on the inner Avatar — failed loads become anonymous gray circles.
63
+
64
+ ## References
65
+
66
+ - MUI: [`ListItemAvatar`](../refs/mui/packages/mui-material/src/ListItemAvatar/)
67
+
68
+ ## Cross-reference
69
+
70
+ - [`component-list-item.md`](component-list-item.md)
71
+ - [`component-avatar.md`](component-avatar.md)
72
+ - [`component-list-item-icon.md`](component-list-item-icon.md)