@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,105 @@
1
+ # `DialogContent` — spec
2
+
3
+ > Synthesized from MUI `DialogContent`. The body region of a `Dialog`. Holds the descriptive text + any form controls between the title and the action row.
4
+
5
+ ## When to use
6
+
7
+ - Inside every `Dialog` that has body content beyond a single title.
8
+ - For long forms inside a dialog — but reconsider: long forms usually belong on a page, not a modal.
9
+
10
+ ## Anatomy
11
+
12
+ ```
13
+ ┌────────────────────────────────────────────┐
14
+ │ Title (DialogTitle) │
15
+ ├────────────────────────────────────────────┤
16
+ │ Content (DialogContent) │
17
+ │ - DialogContentText (optional) │
18
+ │ - form controls / list / image │
19
+ ├────────────────────────────────────────────┤
20
+ │ Actions (DialogActions) │
21
+ └────────────────────────────────────────────┘
22
+ ```
23
+
24
+ ## API
25
+
26
+ ```tsx
27
+ <DialogContent dividers>
28
+ <DialogContentText>안내 본문</DialogContentText>
29
+ <TextField label="이메일" fullWidth />
30
+ </DialogContent>
31
+ ```
32
+
33
+ | Prop | Type | Default | Description |
34
+ | --- | --- | --- | --- |
35
+ | `children` | `ReactNode` | — | Body content |
36
+ | `dividers` | `boolean` | `false` | Top + bottom divider lines (use when content scrolls) |
37
+
38
+ ## States
39
+
40
+ Non-interactive itself. Children own their states.
41
+
42
+ ## Scrolling
43
+
44
+ When content overflows: `DialogContent` becomes the scrollable region (not the whole dialog). Set `dividers` to add visual cues that more content exists above/below the fold.
45
+
46
+ For a long-content dialog: `Dialog` with `scroll="paper"` (default) and `dividers` on `DialogContent`.
47
+
48
+ ## Tokens consumed
49
+
50
+ ```
51
+ --color-fg-default
52
+ --color-divider
53
+ --space-md
54
+ ```
55
+
56
+ ## Accessibility
57
+
58
+ - The first descendant text node should provide context — pair with `DialogContentText` whose `id` matches `aria-describedby` on the parent `Dialog`.
59
+ - Focus management: when the dialog opens, focus should move to the first interactive control inside `DialogContent` (or to the cancel button if there's no input). Cite [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md).
60
+
61
+ ## Edge cases
62
+
63
+ - **Form submission via Enter** — wrap content in `<form>`; `Enter` should trigger the primary action button. Don't auto-submit forms with destructive primary actions.
64
+ - **Korean text density** — leave 24-32px horizontal padding (`space-md`) so Hangul doesn't feel cramped. 16px is too tight for Korean.
65
+ - **Image-only content** — provide alt text or describe via `aria-describedby`.
66
+
67
+ ## Code example
68
+
69
+ ```tsx
70
+ <Dialog open={open} onClose={handleClose} fullWidth maxWidth="sm">
71
+ <DialogTitle id="invite-title">팀원 초대</DialogTitle>
72
+ <DialogContent dividers>
73
+ <DialogContentText id="invite-desc">
74
+ 이메일 주소를 입력하면 초대 링크가 발송돼요.
75
+ </DialogContentText>
76
+ <TextField
77
+ autoFocus
78
+ margin="dense"
79
+ label="이메일"
80
+ type="email"
81
+ fullWidth
82
+ />
83
+ </DialogContent>
84
+ <DialogActions>
85
+ <Button onClick={handleClose}>취소</Button>
86
+ <Button onClick={handleSend} variant="contained">초대 보내기</Button>
87
+ </DialogActions>
88
+ </Dialog>
89
+ ```
90
+
91
+ ## Don't
92
+
93
+ - Don't pack the dialog with 5+ form fields — split into a multi-step pattern or move to a page.
94
+ - Don't put the primary action *inside* `DialogContent` — it belongs in `DialogActions` for keyboard-traversal predictability.
95
+
96
+ ## References
97
+
98
+ - MUI: [`DialogContent.d.ts`](../refs/mui/packages/mui-material/src/DialogContent/DialogContent.d.ts)
99
+
100
+ ## Cross-reference
101
+
102
+ - [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
103
+ - [`component-dialog.md`](component-dialog.md)
104
+ - [`component-dialog-title.md`](component-dialog-title.md)
105
+ - [`component-dialog-actions.md`](component-dialog-actions.md)
@@ -0,0 +1,104 @@
1
+ # `DialogTitle` — spec
2
+
3
+ > Synthesized from MUI `DialogTitle`. The header row of a `Dialog`. Provides the accessible name for the dialog via the `aria-labelledby` association.
4
+
5
+ ## When to use
6
+
7
+ - Inside every `Dialog` (modal). The accessibility contract requires every modal to have a heading.
8
+ - For sheet / drawer headers, prefer the equivalent `<SheetTitle>` / `<DrawerHeader>` from those primitives — same role, different visual context.
9
+
10
+ ## Anatomy
11
+
12
+ ```
13
+ ┌────────────────────────────────────────────┐
14
+ │ Title text [close ×] │
15
+ └────────────────────────────────────────────┘
16
+ ```
17
+
18
+ The close button is typically rendered separately (often inside the title row via `position: absolute` or as a sibling); MUI's `DialogTitle` doesn't include one by default.
19
+
20
+ ## API
21
+
22
+ ```tsx
23
+ <Dialog open={open} onClose={handleClose} aria-labelledby="confirm-title">
24
+ <DialogTitle id="confirm-title">정말 삭제할까요?</DialogTitle>
25
+ <DialogContent>...</DialogContent>
26
+ <DialogActions>...</DialogActions>
27
+ </Dialog>
28
+ ```
29
+
30
+ | Prop | Type | Default | Description |
31
+ | --- | --- | --- | --- |
32
+ | `id` | `string` | — | Required for `aria-labelledby` association on the parent `Dialog` |
33
+ | `children` | `ReactNode` | — | Title text; usually short (≤ 60 chars) |
34
+
35
+ `DialogTitle` extends `Typography` so all typography props (`variant`, `align`, `noWrap`, etc.) work.
36
+
37
+ ## States
38
+
39
+ `DialogTitle` is non-interactive. Visual is constant.
40
+
41
+ ## Tokens consumed
42
+
43
+ ```
44
+ --color-fg-default
45
+ --font-size-xl /* default; h2 equivalent */
46
+ --font-weight-semibold
47
+ --space-md /* horizontal padding */
48
+ --space-md-y /* vertical padding */
49
+ ```
50
+
51
+ ## Accessibility
52
+
53
+ - Semantic element: `<h2>` (default; via `Typography component="h2"`).
54
+ - The `id` MUST match the parent `Dialog`'s `aria-labelledby`.
55
+ - If the dialog also needs a description, use `<DialogContentText>` with `id` matching `aria-describedby`.
56
+ - For dialogs without a visible title (rare; e.g., image lightbox), provide an `aria-label` directly on the `Dialog` instead of `DialogTitle`.
57
+
58
+ ## Edge cases
59
+
60
+ - **Long titles** — wrap to 2 lines max; truncating breaks comprehension. Prefer rephrasing.
61
+ - **Korean honorific level** — match the dialog's purpose. Confirmation: 합쇼체 ("정말 삭제하시겠습니까?"). Friendly action: 해요체 ("삭제할까요?"). Cite [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md).
62
+ - **No title with destructive action** — *don't*. Even simple confirms need a title for screen readers and reading order.
63
+
64
+ ## Code example
65
+
66
+ ```tsx
67
+ <Dialog
68
+ open={open}
69
+ onClose={handleClose}
70
+ aria-labelledby="leave-title"
71
+ aria-describedby="leave-desc"
72
+ >
73
+ <DialogTitle id="leave-title">저장하지 않은 변경사항이 있어요</DialogTitle>
74
+ <DialogContent>
75
+ <DialogContentText id="leave-desc">
76
+ 페이지를 떠나면 변경사항이 사라져요. 계속할까요?
77
+ </DialogContentText>
78
+ </DialogContent>
79
+ <DialogActions>
80
+ <Button onClick={handleClose}>머무르기</Button>
81
+ <Button color="error" onClick={handleLeave} autoFocus>
82
+ 나가기
83
+ </Button>
84
+ </DialogActions>
85
+ </Dialog>
86
+ ```
87
+
88
+ ## Don't
89
+
90
+ - Don't omit `id` — without it, the dialog has no accessible name.
91
+ - Don't put a close button as `children` — render it as a sibling or via `position: absolute` so the heading text is the `<h2>` content.
92
+ - Don't write title as a question if the body answers — match cause & effect (title states the situation; body provides detail).
93
+
94
+ ## References
95
+
96
+ - MUI: [`DialogTitle.d.ts`](../refs/mui/packages/mui-material/src/DialogTitle/DialogTitle.d.ts)
97
+
98
+ ## Cross-reference
99
+
100
+ - [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
101
+ - [`component-dialog.md`](component-dialog.md)
102
+ - [`component-dialog-content.md`](component-dialog-content.md)
103
+ - [`component-dialog-actions.md`](component-dialog-actions.md)
104
+ - [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md)
@@ -0,0 +1,176 @@
1
+ # `Dialog` — spec
2
+
3
+ > Synthesized from Ant Design `Modal` + MUI `Dialog`. The flagship modal primitive — focus-trapped, esc-closeable, scroll-locked overlay containing structured content (title, body, actions). Used for confirmations, focused tasks, and content too important to dismiss inline.
4
+
5
+ ## When to use
6
+
7
+ - Confirmations with destructive consequences ("Delete?", "Leave without saving?").
8
+ - Focused short tasks that pull the user out of context (invite, schedule, single-step config).
9
+ - Critical disclosures the user must acknowledge.
10
+
11
+ ## When NOT to use
12
+
13
+ - Long forms (5+ fields) → use a dedicated page.
14
+ - Optional info → use a Tooltip / Popover / Sheet.
15
+ - Errors that don't block flow → use Toast / Snackbar.
16
+
17
+ ## Anatomy
18
+
19
+ ```
20
+ ┌─[scrim]─────────────────────────────────────┐
21
+ │ │
22
+ │ ┌──────────────────────────────────┐ │
23
+ │ │ DialogTitle [✕] │ │
24
+ │ ├──────────────────────────────────┤ │
25
+ │ │ DialogContent │ │
26
+ │ │ DialogContentText (optional) │ │
27
+ │ │ form fields / list / image │ │
28
+ │ ├──────────────────────────────────┤ │
29
+ │ │ [Cancel] [Primary] │ │
30
+ │ └──────────────────────────────────┘ │
31
+ │ │
32
+ └─────────────────────────────────────────────┘
33
+ ```
34
+
35
+ ## API
36
+
37
+ ```tsx
38
+ <Dialog
39
+ open={open}
40
+ onClose={handleClose}
41
+ fullWidth
42
+ maxWidth="sm"
43
+ aria-labelledby="dialog-title"
44
+ aria-describedby="dialog-desc"
45
+ >
46
+ <DialogTitle id="dialog-title">팀원 초대</DialogTitle>
47
+ <DialogContent>
48
+ <DialogContentText id="dialog-desc">
49
+ 이메일로 초대 링크를 보내요.
50
+ </DialogContentText>
51
+ <TextField autoFocus fullWidth label="이메일" />
52
+ </DialogContent>
53
+ <DialogActions>
54
+ <Button onClick={handleClose}>취소</Button>
55
+ <Button onClick={handleSend} variant="contained">보내기</Button>
56
+ </DialogActions>
57
+ </Dialog>
58
+ ```
59
+
60
+ | Prop | Type | Default | Description |
61
+ | --- | --- | --- | --- |
62
+ | `open` | `boolean` | required | Controlled open state |
63
+ | `onClose` | `(e, reason) => void` | — | Called on backdrop click / Esc / close button |
64
+ | `fullWidth` | `boolean` | `false` | Stretch to `maxWidth` |
65
+ | `maxWidth` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| false` | `'sm'` | Width cap |
66
+ | `fullScreen` | `boolean` | `false` | Full viewport (mobile) |
67
+ | `scroll` | `'paper' \| 'body'` | `'paper'` | `paper`: content scrolls inside; `body`: page scrolls |
68
+ | `disableEscapeKeyDown` | `boolean` | `false` | Block Esc — use sparingly |
69
+ | `aria-labelledby` | `string` | — | Required; matches DialogTitle's `id` |
70
+ | `aria-describedby` | `string` | — | Required when there's body description; matches DialogContentText's `id` |
71
+ | `TransitionComponent` | `Component` | `Fade` | Custom enter/exit transition |
72
+ | `keepMounted` | `boolean` | `false` | Keep DOM after close (state preservation) |
73
+
74
+ ## States
75
+
76
+ | State | Visual |
77
+ | --- | --- |
78
+ | Closed | Not in DOM (or `display: none` if `keepMounted`) |
79
+ | Opening | Scrim fades in (200ms); dialog scales/fades from 90% to 100% |
80
+ | Open | Focus trapped inside; scroll locked on body; backdrop receives Esc |
81
+ | Closing | Reverse of opening; restore focus to opener |
82
+
83
+ ## Tokens consumed
84
+
85
+ ```
86
+ --scrim-bg /* black/40 light, black/60 dark */
87
+ --dialog-bg /* surface elevated */
88
+ --dialog-radius
89
+ --dialog-shadow /* elevation-md */
90
+ --dialog-max-width-sm /* 444 */
91
+ --dialog-max-width-md /* 600 */
92
+ --dialog-max-width-lg /* 900 */
93
+ --space-md /* internal padding */
94
+ --motion-duration-200
95
+ --motion-easing-out
96
+ ```
97
+
98
+ ## Accessibility
99
+
100
+ - Focus trap: Tab cycles within dialog only. First focus goes to first interactive element (or `autoFocus` button).
101
+ - Escape closes (unless `disableEscapeKeyDown`).
102
+ - Scroll lock: body scroll disabled while dialog open.
103
+ - `role="dialog"` + `aria-modal="true"` (MUI sets these).
104
+ - `aria-labelledby` + `aria-describedby` MUST be set; otherwise screen readers announce just "dialog".
105
+ - On close: focus returns to the element that opened the dialog.
106
+ - Cite [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md).
107
+
108
+ ## Edge cases
109
+
110
+ - **Backdrop click ambiguity** — `onClose` fires with `reason='backdropClick'`. For destructive flows (unsaved changes), confirm before actually closing.
111
+ - **Nested dialogs** — possible but discouraged. If unavoidable: focus trap moves to the inner one, restores correctly on close.
112
+ - **Mobile fullscreen** — set `fullScreen={isMobile}` (e.g., `useMediaQuery('(max-width:600px)')`) so dialogs fill the small viewport instead of cramping.
113
+ - **Korean honorific** — title 합쇼체 for confirmations ("삭제하시겠습니까?"); 해요체 for friendly modals ("초대 보내볼까요?"). Cite [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md).
114
+ - **Long content** — set `scroll="paper"` (default) and pair `dividers` on `DialogContent` to signal scrollability.
115
+
116
+ ## Code example
117
+
118
+ ```tsx
119
+ function DeleteConfirmDialog({ open, onClose, onConfirm, isPending }) {
120
+ return (
121
+ <Dialog
122
+ open={open}
123
+ onClose={(_, reason) => {
124
+ if (reason === 'backdropClick' && isPending) return; // block during pending
125
+ onClose();
126
+ }}
127
+ aria-labelledby="del-title"
128
+ aria-describedby="del-desc"
129
+ maxWidth="sm"
130
+ fullWidth
131
+ >
132
+ <DialogTitle id="del-title">정말 삭제할까요?</DialogTitle>
133
+ <DialogContent>
134
+ <DialogContentText id="del-desc">
135
+ 이 작업은 되돌릴 수 없어요.
136
+ </DialogContentText>
137
+ </DialogContent>
138
+ <DialogActions>
139
+ <Button onClick={onClose}>취소</Button>
140
+ <LoadingButton
141
+ onClick={onConfirm}
142
+ loading={isPending}
143
+ color="error"
144
+ variant="contained"
145
+ >
146
+ 삭제
147
+ </LoadingButton>
148
+ </DialogActions>
149
+ </Dialog>
150
+ );
151
+ }
152
+ ```
153
+
154
+ ## Don't
155
+
156
+ - Don't disable Esc unless the flow truly requires explicit confirmation.
157
+ - Don't put 4+ buttons in DialogActions — overflow into a menu or split into steps.
158
+ - Don't open a dialog from a dialog (nested) without strong reason.
159
+ - Don't make the dialog dismissable during a destructive operation that's actually running.
160
+ - Don't omit `aria-labelledby` — the dialog has no accessible name without it.
161
+
162
+ ## References
163
+
164
+ - Ant Design: [`Modal`](../refs/ant-design/components/modal/) — class API, mask
165
+ - MUI: [`Dialog`](../refs/mui/packages/mui-material/src/Dialog/) — flagship reference
166
+
167
+ ## Cross-reference
168
+
169
+ - [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
170
+ - [`component-dialog-title.md`](component-dialog-title.md)
171
+ - [`component-dialog-content.md`](component-dialog-content.md)
172
+ - [`component-dialog-actions.md`](component-dialog-actions.md)
173
+ - [`component-dialog-content-text.md`](component-dialog-content-text.md)
174
+ - [`component-modal.md`](component-modal.md) — Ant-flavor modal
175
+ - [`knowledge/patterns/empty-states.md`](../knowledge/patterns/empty-states.md) — confirmation patterns
176
+ - [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md)
@@ -0,0 +1,182 @@
1
+ # `Divider` (Separator) — spec
2
+
3
+ > Citing Ant Design `Divider`, MUI `Divider`, shadcn-ui `separator`
4
+
5
+ ## Purpose
6
+
7
+ A visual line that separates content. Smaller than headings or whitespace gaps; lighter weight than borders.
8
+
9
+ Use sparingly. **Whitespace is usually a better separator than a line.** A divider says "these are related but distinct"; whitespace says "these are unrelated, period."
10
+
11
+ ## When to use
12
+
13
+ - Inside a card or list to separate items of similar visual weight.
14
+ - Between sections in a settings page (with section heading above).
15
+ - Between toolbar items.
16
+ - Inside menus to group related actions.
17
+
18
+ ## When NOT to use
19
+
20
+ - Between paragraphs in body content (use whitespace + paragraph spacing).
21
+ - Around a card or section that already has a border or background contrast.
22
+ - As decoration. Dividers should mean something.
23
+
24
+ ## Anatomy
25
+
26
+ ```
27
+ Horizontal: Vertical:
28
+ ───────────────────────── │
29
+
30
+ With label: With margin in toolbar:
31
+ ──── Section title ──── Item 1 │ Item 2 │ Item 3
32
+ ```
33
+
34
+ ## API
35
+
36
+ ```tsx
37
+ <Divider /> {/* default: horizontal hairline */}
38
+ <Divider orientation="vertical" />
39
+ <Divider>Section</Divider> {/* with label */}
40
+ <Divider variant="dashed" />
41
+ <Divider spacing="lg" />
42
+ ```
43
+
44
+ | Prop | Type | Default | Description |
45
+ | --- | --- | --- | --- |
46
+ | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | |
47
+ | `variant` | `"solid" \| "dashed" \| "dotted"` | `"solid"` | Line style |
48
+ | `children` | `ReactNode` | — | Optional label inline (horizontal only) |
49
+ | `align` | `"start" \| "center" \| "end"` | `"center"` | Position of label along the line |
50
+ | `spacing` | `"sm" \| "md" \| "lg"` | `"md"` | Vertical/horizontal margin around the divider |
51
+ | `inset` | `number \| string` | `0` | Indent from the start (e.g., to skip an icon column in a list) |
52
+ | `decorative` | `boolean` | `true` | If true, `aria-hidden`. If false, `role="separator"`. |
53
+
54
+ ## Spacing guidance
55
+
56
+ | Spacing | Margin |
57
+ | --- | --- |
58
+ | `sm` | 8px above + below |
59
+ | `md` (default) | 16px above + below |
60
+ | `lg` | 24px above + below |
61
+
62
+ For dividers between items in a tight list (transactions, chats): use a 1px bottom border on each row instead of a separate divider element. It's the same visual but cleaner DOM.
63
+
64
+ ## Inset
65
+
66
+ For a list with leading icons / avatars:
67
+
68
+ ```
69
+ [icon] Name 1
70
+ ─────── (inset 48px to skip the 40px icon + 8px gap)
71
+ [icon] Name 2
72
+ ```
73
+
74
+ The inset divider doesn't extend over the icon column — visually unifies the icons.
75
+
76
+ ## States
77
+
78
+ A divider doesn't have states. Static.
79
+
80
+ ## Tokens consumed
81
+
82
+ ```
83
+ --color-divider (preferred — usually lighter than border)
84
+ OR
85
+ --color-border-default (when divider should match other borders)
86
+ ```
87
+
88
+ For dark mode: same token; the value is recomputed in dark.
89
+
90
+ The divider color is typically:
91
+ - 1 step lighter than `--color-border-default`
92
+ - Often `rgba(0, 0, 0, 0.06)` or `rgba(255, 255, 255, 0.08)` depending on mode
93
+
94
+ ## Sizes / thickness
95
+
96
+ | Thickness | Use |
97
+ | --- | --- |
98
+ | 1px (default) | Universal |
99
+ | 2px | Heavier section breaks |
100
+ | 0.5px (Retina-only) | Very subtle (Apple-style); pairs with `.5px` `transform: scaleY(0.5)` hack on non-Retina |
101
+
102
+ For most product UIs: 1px. Going thicker without intent reads as a heavy mistake.
103
+
104
+ ## Accessibility
105
+
106
+ - **Decorative dividers** (the default): `aria-hidden="true"` so screen readers skip.
107
+ - **Semantic dividers** (rare — when the line genuinely separates regions of meaning): `role="separator"` with `aria-orientation`. Use `<hr>` for full-width semantic horizontal dividers.
108
+
109
+ ```html
110
+ <!-- Decorative (default) -->
111
+ <div className="divider" aria-hidden="true"></div>
112
+
113
+ <!-- Semantic -->
114
+ <hr role="separator" aria-orientation="horizontal" />
115
+ <div role="separator" aria-orientation="vertical"></div>
116
+ ```
117
+
118
+ Most dividers in product UIs should be `aria-hidden`. The structure is conveyed by surrounding semantic elements (headings, regions).
119
+
120
+ ## Code examples
121
+
122
+ ```tsx
123
+ // Between sections in a settings page
124
+ <SettingsSection title="알림">
125
+ ...
126
+ </SettingsSection>
127
+ <Divider spacing="lg" />
128
+ <SettingsSection title="결제">
129
+ ...
130
+ </SettingsSection>
131
+
132
+ // With label
133
+ <Divider>또는</Divider> {/* "Or" between social login and email login */}
134
+ <Button>이메일로 가입</Button>
135
+
136
+ // Vertical in a toolbar
137
+ <Toolbar>
138
+ <Button>저장</Button>
139
+ <Divider orientation="vertical" />
140
+ <Button>되돌리기</Button>
141
+ <Divider orientation="vertical" />
142
+ <Button>다음 단계</Button>
143
+ </Toolbar>
144
+
145
+ // Inset in a list with avatars
146
+ <List>
147
+ {users.map(u => (
148
+ <ListItem key={u.id}>
149
+ <Avatar src={u.photoUrl} />
150
+ <span>{u.name}</span>
151
+ </ListItem>
152
+ ))}
153
+ </List>
154
+ {/* Each ListItem has its own bottom border with inset 48px — preferred over <Divider /> elements */}
155
+ ```
156
+
157
+ ## Edge cases
158
+
159
+ - **Divider at the end of a list**: don't render. The last item's bottom is the natural end.
160
+ - **Divider immediately after a heading**: redundant. The heading's bottom margin is the divider.
161
+ - **Vertical divider that needs to match the parent's height**: stretch with `align-self: stretch` in flex parent.
162
+ - **Dashed/dotted on small spans**: doesn't render cleanly under 8px; use solid for short dividers.
163
+
164
+ ## Don't
165
+
166
+ - Don't put a divider inside another divider (e.g., divider above and below the same divider).
167
+ - Don't use heavy dividers (4px+) — they read as accidental.
168
+ - Don't color a divider the same as text. Subtle is the point.
169
+ - Don't use a divider where a heading would be clearer.
170
+ - Don't use vertical dividers for vertical lists. Use horizontal.
171
+ - Don't combine inset divider with full-width divider in the same list — pick one.
172
+
173
+ ## References
174
+
175
+ - Ant Design: [`refs/ant-design/components/divider/`](../refs/ant-design/components/divider/) — `Divider` with `type="horizontal" | "vertical"`, `dashed`, optional inline text. Mature.
176
+ - MUI: [`refs/mui/packages/mui-material/src/Divider/`](../refs/mui/packages/mui-material/src/Divider/) — `Divider` with `orientation`, `variant="fullWidth" | "inset" | "middle"`, `textAlign`. Most variants.
177
+ - shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/separator.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/separator.tsx) — Radix Separator. Minimal primitive. `decorative` prop drives `aria-hidden` vs `role="separator"`.
178
+
179
+ ## Cross-reference
180
+
181
+ - [`knowledge/layout/spacing-and-grid.md`](../knowledge/layout/spacing-and-grid.md) — when whitespace is the better separator
182
+ - [`knowledge/patterns/list-and-feed.md`](../knowledge/patterns/list-and-feed.md) — list-row dividers via per-item border