@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,226 @@
1
+ # `BottomNavigation` — spec
2
+
3
+ > Synthesized from MUI `BottomNavigation` and the iOS / Android tab bar pattern. Persistent tab bar at the bottom of mobile / responsive apps. The canonical mobile primary navigation.
4
+
5
+ ## When to use
6
+
7
+ - **Mobile primary navigation** with 3-5 top-level destinations.
8
+ - **Touch-thumb-friendly** placement (bottom = thumb-zone).
9
+ - **Tab-style switching** between same-level views (Home / Search / Profile).
10
+
11
+ When NOT to use:
12
+ - Desktop primary navigation (use Sidebar or NavigationMenu).
13
+ - Hierarchical navigation (BottomNav is flat — for hierarchy use Sidebar).
14
+ - More than 5 destinations (overcrowds; group via "More" tab).
15
+
16
+ ## Anatomy
17
+
18
+ ```
19
+ ┌─────────────────────────────────────┐
20
+ │ │
21
+ │ [content area] │
22
+ │ │
23
+ │ │
24
+ │ │
25
+ │ │
26
+ ├─────────────────────────────────────┤
27
+ │ [🏠] [🔍] [➕] [🔔3] [👤] │ ← BottomNavigation
28
+ │ Home Search Add Inbox Profile │ (5 tabs max)
29
+ └─────────────────────────────────────┘
30
+
31
+ active tab indicated
32
+ ```
33
+
34
+ ## API
35
+
36
+ ```tsx
37
+ <BottomNavigation value={tab} onValueChange={setTab}>
38
+ <BottomNavigation.Item value="home">
39
+ <HomeIcon />
40
+ <span>Home</span>
41
+ </BottomNavigation.Item>
42
+ <BottomNavigation.Item value="search">
43
+ <SearchIcon />
44
+ <span>Search</span>
45
+ </BottomNavigation.Item>
46
+ <BottomNavigation.Item value="add" elevated>
47
+ <PlusIcon />
48
+ </BottomNavigation.Item>
49
+ <BottomNavigation.Item value="inbox" badgeCount={3}>
50
+ <InboxIcon />
51
+ <span>Inbox</span>
52
+ </BottomNavigation.Item>
53
+ <BottomNavigation.Item value="profile">
54
+ <UserIcon />
55
+ <span>Profile</span>
56
+ </BottomNavigation.Item>
57
+ </BottomNavigation>
58
+ ```
59
+
60
+ | Prop | Type | Default | Description |
61
+ | --- | --- | --- | --- |
62
+ | `value` | `string` | controlled | Active tab value |
63
+ | `onValueChange` | `(value: string) => void` | — | Tab switch callback |
64
+ | `showLabels` | `"always" \| "selected" \| "never"` | `"always"` | When labels are visible |
65
+ | `safeArea` | `boolean` | `true` | Add iOS home-indicator padding |
66
+ | `elevation` | `0 \| 1 \| 2` | `1` | Shadow above the bar |
67
+
68
+ ## Item
69
+
70
+ | Prop | Type | Default | Description |
71
+ | --- | --- | --- | --- |
72
+ | `value` | `string` | required | Identifies the tab |
73
+ | `icon` | `ReactNode` | from children | Icon |
74
+ | `label` | `string` | from children | Label text |
75
+ | `badgeCount` | `number` | — | Notification count overlay |
76
+ | `badge` | `ReactNode` | — | Custom badge override |
77
+ | `disabled` | `boolean` | `false` | Disabled |
78
+ | `elevated` | `boolean` | `false` | Center "elevated" style (FAB-like, common for primary CTA) |
79
+
80
+ ## Variants
81
+
82
+ ### `showLabels="always"` (default)
83
+
84
+ All labels visible always.
85
+
86
+ ### `showLabels="selected"`
87
+
88
+ Only the active tab shows its label; others icon-only. iOS-classic style. Common in Apple's apps.
89
+
90
+ ### `showLabels="never"`
91
+
92
+ Icon-only across the bar. Used in dense interfaces or when labels are obvious.
93
+
94
+ ## States
95
+
96
+ | State | Visual |
97
+ | --- | --- |
98
+ | Default | Icon + label, muted color |
99
+ | Active (selected) | Icon + label, brand color, slightly larger or bold |
100
+ | Hover (web) | Subtle bg shift |
101
+ | Active press (touch) | Slight scale + bg shift |
102
+ | Disabled | Reduced opacity, no events |
103
+ | Badge | Dot or count overlay on icon |
104
+
105
+ ## Tokens consumed
106
+
107
+ ```
108
+ --bottom-nav-bg (bar bg, often slightly elevated from page)
109
+ --bottom-nav-fg-default (inactive icon + label)
110
+ --bottom-nav-fg-active (active = brand color)
111
+ --bottom-nav-divider (top border separating from content)
112
+ --bottom-nav-shadow (subtle upward shadow)
113
+ --bottom-nav-height (typically 56-64px + safe area)
114
+ --bottom-nav-icon-size (24-28px)
115
+ --bottom-nav-label-size (10-12px)
116
+ --space-xs, --space-sm
117
+ --motion-fast (active state transition)
118
+ --ease-out
119
+ --z-fixed (above content, below modals)
120
+ ```
121
+
122
+ ## Accessibility
123
+
124
+ - Wrapper: `<nav aria-label="Primary navigation">` (or contextual label).
125
+ - Items: `<button>` if state-only, `<a>` if URL-routed.
126
+ - Active: `aria-current="page"`.
127
+ - Icon-only items: `aria-label` required.
128
+ - Touch target: ≥ 44×44pt per item (mobile primary).
129
+ - Focus visible on keyboard nav.
130
+ - Respect safe-area: `padding-bottom: env(safe-area-inset-bottom)` for iPhone home indicator.
131
+
132
+ ## iOS / Android conventions
133
+
134
+ | Aspect | iOS | Android |
135
+ | --- | --- | --- |
136
+ | Position | Bottom | Bottom |
137
+ | Height | 49pt + safe area | 56dp |
138
+ | Icon style | Outline (inactive) / filled (active) | Filled or outlined (Material 3) |
139
+ | Label | Below icon | Below icon (M2) or hidden if active-only (M3) |
140
+ | Active indicator | Color shift | Color shift + pill behind icon (M3) |
141
+ | Center FAB | Common for primary action | "Floating" elevated button common |
142
+
143
+ For native-feel design: respect platform expectations (iOS = sharper; Android M3 = soft pill behind active icon).
144
+
145
+ ## Korean app conventions
146
+
147
+ Korean B2C apps (Toss, KakaoBank, Coupang, Baemin):
148
+ - 4-5 tabs typical.
149
+ - 한글 labels short (2-4 chars: 홈 / 검색 / 알림 / 마이페이지).
150
+ - Center "Add" or primary action elevated (FAB-style) common in some apps.
151
+ - Badge count for messages / orders prominent.
152
+
153
+ ```
154
+ [🏠 홈] [🔍 검색] [➕] [🔔 알림] [👤 MY]
155
+ ```
156
+
157
+ For 토스-style fintech: simple, brand-color active, no decorative effects.
158
+ For 카카오-style consumer: warmer, mascot-friendly, often with subtle animations on tap.
159
+
160
+ ## Code example
161
+
162
+ ```tsx
163
+ function MobileAppShell() {
164
+ const [tab, setTab] = useState("home");
165
+ const [unreadCount, setUnreadCount] = useState(0);
166
+
167
+ return (
168
+ <div className="app">
169
+ <main>{renderTab(tab)}</main>
170
+ <BottomNavigation value={tab} onValueChange={setTab}>
171
+ <BottomNavigation.Item value="home">
172
+ <HomeIcon />
173
+ <span>홈</span>
174
+ </BottomNavigation.Item>
175
+ <BottomNavigation.Item value="search">
176
+ <SearchIcon />
177
+ <span>검색</span>
178
+ </BottomNavigation.Item>
179
+ <BottomNavigation.Item value="inbox" badgeCount={unreadCount}>
180
+ <InboxIcon />
181
+ <span>알림</span>
182
+ </BottomNavigation.Item>
183
+ <BottomNavigation.Item value="profile">
184
+ <UserIcon />
185
+ <span>MY</span>
186
+ </BottomNavigation.Item>
187
+ </BottomNavigation>
188
+ </div>
189
+ );
190
+ }
191
+ ```
192
+
193
+ ## Edge cases
194
+
195
+ - **Page-aware bottom nav**: hide on certain screens (camera, full-screen video). Use `display: none` OR an in-shell variant.
196
+ - **Keyboard open** (mobile virtual keyboard): bottom nav should hide so keyboard doesn't obscure it AND doesn't push the input field below the keyboard.
197
+ - **Long Korean label** (보관함, 즐겨찾기): truncate with ellipsis OR drop label at small viewport.
198
+ - **5+ tabs needed**: don't expand bar; group into "More" with a Sheet menu.
199
+ - **Tab switches modify URL**: yes, always use real URLs so back-button works.
200
+ - **Initial route mismatch**: parse current URL → set initial `value`.
201
+ - **Reduced motion**: skip active-state animation.
202
+ - **Landscape orientation on phone**: hide bottom nav (rare orientation; prioritize content).
203
+
204
+ ## Don't
205
+
206
+ - Don't use BottomNav for hierarchy navigation. Tabs at the same conceptual level.
207
+ - Don't put 6+ tabs. 3-5 max; group rest into More.
208
+ - Don't omit `aria-label` on icon-only items.
209
+ - Don't make BottomNav float (transparent bg over content) — bad for legibility.
210
+ - Don't ignore safe-area on iOS — content cuts off behind home indicator.
211
+ - Don't auto-hide on scroll without user research; users hunt for the bar.
212
+ - Don't omit active state visual — users need orientation.
213
+
214
+ ## References
215
+
216
+ - MUI: [`BottomNavigation`](../refs/mui/packages/mui-material/src/BottomNavigation)
217
+ - iOS: UITabBar; Apple HIG → "Tab Bars"
218
+ - Material 3: NavigationBar component
219
+ - Patterns: Toss, KakaoBank, Instagram, Twitter
220
+
221
+ ## Cross-reference
222
+
223
+ - [`examples/component-tabs.md`](component-tabs.md) — non-mobile-first tab variant
224
+ - [`examples/component-app-bar.md`](component-app-bar.md) — top-of-screen counterpart
225
+ - [`examples/component-sidebar.md`](component-sidebar.md) — desktop nav
226
+ - [`knowledge/patterns/mobile-navigation.md`](../knowledge/patterns/mobile-navigation.md)
@@ -0,0 +1,112 @@
1
+ # `Box` — spec
2
+
3
+ > Synthesized from MUI `Box`. The most generic layout primitive — a styled `<div>` with theme-prop access. Lower-level than `Card`, `Paper`, or `Stack`.
4
+
5
+ ## When to use
6
+
7
+ - As a generic styled container with token access.
8
+ - For one-off custom layouts that don't fit other primitives.
9
+ - As a system-prop sandbox (padding, margin, color, display) when you don't want to author CSS.
10
+
11
+ When NOT to use:
12
+ - For semantic containers (use `<section>`, `<article>`, `<aside>`).
13
+ - For interactive surfaces (use `Button`, `Card`).
14
+ - When a more specific primitive exists (`Stack`, `Grid`, `Paper`).
15
+
16
+ ## API
17
+
18
+ ```tsx
19
+ <Box p={4} bg="surface" rounded="md">
20
+ Content
21
+ </Box>
22
+
23
+ <Box as="section" display="flex" gap={2}>
24
+ <Box>A</Box>
25
+ <Box>B</Box>
26
+ </Box>
27
+ ```
28
+
29
+ | Prop | Type | Default | Description |
30
+ | --- | --- | --- | --- |
31
+ | `as` | `keyof JSX.IntrinsicElements` | `"div"` | Render element |
32
+ | `p` / `px` / `py` / `pt` / `pr` / `pb` / `pl` | spacing-token | — | Padding shorthand |
33
+ | `m` / `mx` / `my` / `mt` / `mr` / `mb` / `ml` | spacing-token | — | Margin shorthand |
34
+ | `bg` | color-token | — | Background color |
35
+ | `color` | color-token | — | Text color |
36
+ | `display` | CSS display | — | Display mode |
37
+ | `gap` | spacing-token | — | Gap (when display=flex/grid) |
38
+ | `rounded` | radius-token | — | Border radius |
39
+ | `border` | `boolean \| number` | — | Border |
40
+ | `shadow` | shadow-token | — | Box shadow |
41
+ | `width` / `height` / `minWidth` / `maxWidth` | CSS length | — | Sizing |
42
+
43
+ ## States
44
+
45
+ Stateless. Box is a layout primitive.
46
+
47
+ ## Tokens consumed
48
+
49
+ ```
50
+ --space-{0..n} (p, m, gap)
51
+ --color-{semantic} (bg, color)
52
+ --radius-{sm,md,lg} (rounded)
53
+ --shadow-{sm,md,lg} (shadow)
54
+ --border-default (border)
55
+ ```
56
+
57
+ ## Variants vs other primitives
58
+
59
+ ```
60
+ Box → most generic; just a styled <div>
61
+ Stack → flex wrapper with auto direction + gap
62
+ Grid → grid wrapper
63
+ Flex → flex wrapper
64
+ Paper → elevated surface
65
+ Card → composition slots (Header / Body / Footer)
66
+ ```
67
+
68
+ Use Box when none of the above fit. If you find yourself using Box with `display="flex" direction="column" gap={2}`, you actually want `Stack`.
69
+
70
+ ## Accessibility
71
+
72
+ - Box is presentational by default. Use `as` to render semantic elements when appropriate.
73
+ - For accessible regions: `as="section" aria-label="..."`.
74
+ - For decorative dividers: prefer `Separator` over Box with `borderTop`.
75
+
76
+ ## Code example
77
+
78
+ ```tsx
79
+ {/* Decorative brand-color callout */}
80
+ <Box bg="brand-50" p={4} rounded="md" border>
81
+ <Text fontWeight={600}>이벤트 진행 중</Text>
82
+ <Text>가입 시 30% 할인.</Text>
83
+ </Box>
84
+
85
+ {/* Custom flex layout */}
86
+ <Box display="flex" gap={2} alignItems="center">
87
+ <Avatar />
88
+ <Box flex={1}>
89
+ <Text>이름</Text>
90
+ <Text fontSize="sm" color="muted">설명</Text>
91
+ </Box>
92
+ </Box>
93
+ ```
94
+
95
+ ## Don't
96
+
97
+ - Don't use Box where a semantic element is appropriate. Use `as` or pick a different primitive.
98
+ - Don't use Box for interactive surfaces. Use Button / Link.
99
+ - Don't recreate layouts that other primitives handle. `<Box display="flex" direction="column">` = `<Stack>`.
100
+ - Don't use raw hex / px values via the system props. Use tokens.
101
+
102
+ ## References
103
+
104
+ - MUI: [`Box`](../refs/mui/packages/mui-material/src/Box) — system-prop pioneer
105
+ - Chakra UI Box (very similar API)
106
+ - shadcn-ui: doesn't ship Box; uses Tailwind classes directly
107
+
108
+ ## Cross-reference
109
+
110
+ - [`examples/component-card.md`](component-card.md) — when Box gets too generic
111
+ - [`examples/component-paper.md`](component-paper.md) — elevated surface variant
112
+ - [`knowledge/layout/spacing-and-grid.md`](../knowledge/layout/spacing-and-grid.md)
@@ -0,0 +1,222 @@
1
+ # `Breadcrumb` — spec
2
+
3
+ > Citing Ant Design `Breadcrumb`, MUI `Breadcrumbs`, shadcn-ui `breadcrumb`
4
+
5
+ ## Purpose
6
+
7
+ Shows the user's location in a hierarchy. Each segment is a navigable ancestor, except the last (current page).
8
+
9
+ ## When NOT to use
10
+
11
+ - Single-level apps (no hierarchy to show).
12
+ - Mobile-first apps where the back button is the primary nav metaphor (Korean consumer apps especially — breadcrumb is rare on KR mobile).
13
+ - Linear flows (use a stepper / progress, not breadcrumbs).
14
+
15
+ Breadcrumbs are a **desktop / web-app** pattern. Use sparingly on mobile.
16
+
17
+ ## Anatomy
18
+
19
+ ```
20
+ Home / Projects / Aurora / Settings
21
+ ↑ ↑ ↑ ↑
22
+ link link link current (not a link, bold)
23
+ ```
24
+
25
+ Or with more visual breathing room:
26
+
27
+ ```
28
+ 🏠 Home › 📁 Projects › Aurora › Settings
29
+ ```
30
+
31
+ | Slot | Required | Notes |
32
+ | --- | --- | --- |
33
+ | Crumb (link) | yes (≥ 1) | Each ancestor — clickable |
34
+ | Separator | yes | `/`, `›`, `→`, or chevron icon |
35
+ | Current crumb | yes | Last item — not a link, marked with `aria-current="page"` |
36
+ | Icon (per crumb) | optional | Home icon, folder icon for context |
37
+ | Truncation indicator | optional | `…` when path is long |
38
+
39
+ ## API
40
+
41
+ ```tsx
42
+ <Breadcrumb>
43
+ <Breadcrumb.Item href="/">Home</Breadcrumb.Item>
44
+ <Breadcrumb.Item href="/projects">Projects</Breadcrumb.Item>
45
+ <Breadcrumb.Item href="/projects/aurora">Aurora</Breadcrumb.Item>
46
+ <Breadcrumb.Item current>Settings</Breadcrumb.Item>
47
+ </Breadcrumb>
48
+ ```
49
+
50
+ Or imperative:
51
+
52
+ ```tsx
53
+ <Breadcrumb
54
+ items={[
55
+ { label: "Home", href: "/" },
56
+ { label: "Projects", href: "/projects" },
57
+ { label: "Aurora", href: "/projects/aurora" },
58
+ { label: "Settings", current: true },
59
+ ]}
60
+ separator="/"
61
+ maxItems={6}
62
+ />
63
+ ```
64
+
65
+ | Prop | Type | Default | Description |
66
+ | --- | --- | --- | --- |
67
+ | `items` | `BreadcrumbItem[]` | — | (Imperative API) |
68
+ | `separator` | `string \| ReactNode` | `"/"` | Between items |
69
+ | `maxItems` | `number` | `8` | When exceeded, collapse middle items into `…` |
70
+ | `itemsBeforeCollapse` | `number` | `1` | How many items to show at the start when collapsed |
71
+ | `itemsAfterCollapse` | `number` | `1` | How many at the end |
72
+
73
+ ```tsx
74
+ type BreadcrumbItem = {
75
+ label: string | ReactNode;
76
+ href?: string;
77
+ icon?: ReactNode;
78
+ onClick?: () => void;
79
+ current?: boolean;
80
+ };
81
+ ```
82
+
83
+ ## Truncation behavior
84
+
85
+ When `items.length > maxItems`:
86
+
87
+ ```
88
+ Home / ... / Aurora / Settings
89
+ ```
90
+
91
+ Click on `…` to expand (popover with the hidden items) or just hover to peek.
92
+
93
+ For very long path with smaller `maxItems`:
94
+ - Show first 1, ellipsis, last 2 by default.
95
+ - `itemsBeforeCollapse=1, itemsAfterCollapse=2` for typical web app.
96
+
97
+ ## Sizes
98
+
99
+ | Size | Font | Spacing between |
100
+ | --- | --- | --- |
101
+ | `sm` | 12px | 4px |
102
+ | `md` (default) | 13–14px | 8px |
103
+ | `lg` | 16px | 12px |
104
+
105
+ Default to `md` for desktop, `sm` for dense admin tools.
106
+
107
+ ## States
108
+
109
+ | State | Visual |
110
+ | --- | --- |
111
+ | Default link | `--color-text-secondary`, no underline |
112
+ | Hover | `--color-text-primary`, underline |
113
+ | Focus-visible | 2px ring around the link |
114
+ | Current (last item) | `--color-text-primary`, **bold** weight |
115
+ | Disabled | Grayed out, no events (rare) |
116
+
117
+ The current item is **never** a link. It's where the user is.
118
+
119
+ ## Tokens consumed
120
+
121
+ ```
122
+ --color-text-primary
123
+ --color-text-secondary
124
+ --color-text-tertiary (separator)
125
+ --space-xs, --space-sm
126
+ --font-size-sm, --font-size-base
127
+ --font-weight-medium (current item bold)
128
+ --color-focus-ring
129
+ ```
130
+
131
+ ## Accessibility
132
+
133
+ - Wrap in `<nav aria-label="Breadcrumb">`.
134
+ - Render as `<ol>` (ordered list — semantically correct because the order matters).
135
+ - Each item is `<li>`.
136
+ - Each link is `<a>` (or router-Link). The current item is just text — **not a disabled link**.
137
+ - Current item: `aria-current="page"`.
138
+ - Don't put separators in the same `<a>` as the link text — separators should be `aria-hidden="true"` on the parent `<li>` or on a separate visual element.
139
+
140
+ ```html
141
+ <nav aria-label="Breadcrumb">
142
+ <ol>
143
+ <li><a href="/">Home</a></li>
144
+ <li aria-hidden="true">/</li>
145
+ <li><a href="/projects">Projects</a></li>
146
+ <li aria-hidden="true">/</li>
147
+ <li aria-current="page">Settings</li>
148
+ </ol>
149
+ </nav>
150
+ ```
151
+
152
+ ### Keyboard
153
+
154
+ - `Tab` reaches each link in order.
155
+ - `Enter` activates link.
156
+ - Separators are not focusable.
157
+
158
+ ## Code example
159
+
160
+ ```tsx
161
+ // Basic
162
+ <Breadcrumb>
163
+ <Breadcrumb.Item href="/">Home</Breadcrumb.Item>
164
+ <Breadcrumb.Item href="/products">Products</Breadcrumb.Item>
165
+ <Breadcrumb.Item current>Wireless Mouse</Breadcrumb.Item>
166
+ </Breadcrumb>
167
+
168
+ // With router (Next.js / React Router)
169
+ <Breadcrumb>
170
+ <Breadcrumb.Item asChild><Link href="/">Home</Link></Breadcrumb.Item>
171
+ <Breadcrumb.Item asChild><Link href="/products">Products</Link></Breadcrumb.Item>
172
+ <Breadcrumb.Item current>Wireless Mouse</Breadcrumb.Item>
173
+ </Breadcrumb>
174
+
175
+ // With icons
176
+ <Breadcrumb>
177
+ <Breadcrumb.Item href="/" icon={<HomeIcon />}>Home</Breadcrumb.Item>
178
+ <Breadcrumb.Item href="/projects" icon={<FolderIcon />}>Projects</Breadcrumb.Item>
179
+ <Breadcrumb.Item current>Aurora</Breadcrumb.Item>
180
+ </Breadcrumb>
181
+
182
+ // Truncation
183
+ <Breadcrumb maxItems={4} itemsBeforeCollapse={1} itemsAfterCollapse={2}>
184
+ <Breadcrumb.Item href="/">Home</Breadcrumb.Item>
185
+ <Breadcrumb.Item href="/level1">Level 1</Breadcrumb.Item>
186
+ <Breadcrumb.Item href="/level1/level2">Level 2</Breadcrumb.Item>
187
+ <Breadcrumb.Item href="/level1/level2/level3">Level 3</Breadcrumb.Item>
188
+ <Breadcrumb.Item href="/level1/level2/level3/level4">Level 4</Breadcrumb.Item>
189
+ <Breadcrumb.Item current>Current</Breadcrumb.Item>
190
+ </Breadcrumb>
191
+ {/* Renders: Home / ... / Level 4 / Current */}
192
+ ```
193
+
194
+ ## Edge cases
195
+
196
+ - **Long path that wraps to two lines**: don't wrap by default; truncate via `maxItems`. If wrapping is needed, it's a sign the hierarchy is too deep.
197
+ - **Crumb labels longer than 30 chars**: truncate individual labels with `…`, full text in `title`.
198
+ - **Dynamically loaded labels** (URL has IDs, real names load async): show ID or "Loading..." in the meantime; replace with real name. Don't shift width drastically.
199
+ - **Mobile**: can collapse to "← Back" link on narrow screens, or hide entirely.
200
+ - **RTL**: separator direction flips (`›` becomes `‹`). Use a directional character or two icons.
201
+ - **Korean labels**: Korean breadcrumbs work cleanly. Common: "홈 / 프로젝트 / Aurora / 설정".
202
+ - **No URL** (current page is not addressable): only the last item shows; previous crumbs may or may not be present.
203
+
204
+ ## Don't
205
+
206
+ - Don't make the current page a link to itself. It's a no-op + bad a11y.
207
+ - Don't use breadcrumbs as the only navigation. They supplement, not replace, sidebars/menus.
208
+ - Don't show breadcrumbs on top-level pages (no hierarchy).
209
+ - Don't include "more menus" in breadcrumb dropdowns. Keep them flat — collapsed-items popover is the only complex pattern.
210
+ - Don't put filters or actions in breadcrumbs.
211
+ - Don't use breadcrumbs for chronological steps (signup step 2 of 4) — that's a stepper.
212
+
213
+ ## References
214
+
215
+ - Ant Design: [`refs/ant-design/components/breadcrumb/`](../refs/ant-design/components/breadcrumb/) — `Breadcrumb` + `Breadcrumb.Item` + `Breadcrumb.Separator`. `itemRender` for custom rendering.
216
+ - MUI: [`refs/mui/packages/mui-material/src/Breadcrumbs/`](../refs/mui/packages/mui-material/src/Breadcrumbs/) — `Breadcrumbs` (note plural) with `separator`, `maxItems`, `itemsBeforeCollapse`, `itemsAfterCollapse`. Built-in collapse logic.
217
+ - shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/breadcrumb.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/breadcrumb.tsx) — primitive: `Breadcrumb`, `BreadcrumbList`, `BreadcrumbItem`, `BreadcrumbLink`, `BreadcrumbPage`, `BreadcrumbSeparator`, `BreadcrumbEllipsis`. Most flexible.
218
+
219
+ ## Cross-reference
220
+
221
+ - [knowledge/patterns/mobile-navigation.md](../knowledge/patterns/mobile-navigation.md) — mobile prefers back button over breadcrumb
222
+ - [knowledge/a11y/keyboard-and-focus.md](../knowledge/a11y/keyboard-and-focus.md)