@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,258 @@
1
+ # `Select` / `Combobox` — spec
2
+
3
+ > Citing Ant Design `Select`, MUI `Autocomplete`, shadcn-ui `select` + `combobox`
4
+
5
+ ## Purpose
6
+
7
+ Lets the user pick one (or multiple) from a list of options. Two distinct patterns:
8
+
9
+ | Pattern | When |
10
+ | --- | --- |
11
+ | **Select** (`<select>`-style) | Closed list of ≤ 20 options, no typing needed. Country, currency, status. |
12
+ | **Combobox** (typeahead / autocomplete) | Long lists (50+), async loading, allow free-text + suggestions. User search. |
13
+
14
+ This spec covers both as variants of one component, since modern systems (Radix, Headless UI) treat them as the same primitive with `searchable: true|false`.
15
+
16
+ ## Anatomy
17
+
18
+ ```
19
+ Trigger: Popover (when open):
20
+ ┌──────────────────────┐ ┌──────────────────────┐
21
+ │ Selected value ▾ │ │ ▣ Type to search... │ ← optional search input
22
+ └──────────────────────┘ ├──────────────────────┤
23
+ │ ✓ Option 1 │ ← active
24
+ │ Option 2 │
25
+ │ Option 3 (group) │
26
+ │ ─────────── │
27
+ │ Option 4 │
28
+ │ + Create "new tag" │ ← optional creatable
29
+ └──────────────────────┘
30
+ ```
31
+
32
+ | Slot | Required | Notes |
33
+ | --- | --- | --- |
34
+ | Trigger | yes | Looks like an Input with chevron |
35
+ | Search input | combobox only | Inside popover for long lists |
36
+ | Option list | yes | Scrollable if > ~10 visible |
37
+ | Option item | yes | Can have icon, description, badge |
38
+ | Group header | optional | `<optgroup>`-style grouping |
39
+ | Create option | optional (creatable mode) | Adds new value not in list |
40
+ | Empty state | yes | "검색 결과가 없습니다" |
41
+ | Footer | optional | "Apply" button for multi-select, links to elsewhere |
42
+
43
+ ## API
44
+
45
+ ```tsx
46
+ <Select
47
+ value={country}
48
+ onValueChange={setCountry}
49
+ options={[
50
+ { value: "kr", label: "대한민국", flag: "🇰🇷" },
51
+ { value: "jp", label: "日本", flag: "🇯🇵" },
52
+ { value: "us", label: "United States", flag: "🇺🇸" },
53
+ ]}
54
+ placeholder="국가를 선택하세요"
55
+ searchable
56
+ clearable
57
+ />
58
+
59
+ <MultiSelect
60
+ values={tags}
61
+ onValuesChange={setTags}
62
+ options={tagOptions}
63
+ creatable
64
+ placeholder="태그 선택"
65
+ />
66
+ ```
67
+
68
+ | Prop | Type | Default | Description |
69
+ | --- | --- | --- | --- |
70
+ | `value` / `values` | `T \| T[]` | — | Controlled |
71
+ | `defaultValue` | same | — | Uncontrolled |
72
+ | `onValueChange` | `(value) => void` | — | |
73
+ | `options` | `Option[]` or `(query) => Promise<Option[]>` | `[]` | Static list or async loader |
74
+ | `multiple` | `boolean` | `false` | Multi-select mode |
75
+ | `searchable` | `boolean` | `false` (Select) / `true` (Combobox) | Show search input in popover |
76
+ | `creatable` | `boolean` | `false` | Allow creating values not in list |
77
+ | `clearable` | `boolean` | `false` | Show ✕ to clear |
78
+ | `placeholder` | `string` | — | |
79
+ | `disabled` / `readOnly` | `boolean` | `false` | |
80
+ | `error` / `errorText` | — | — | Validation state |
81
+ | `loading` | `boolean` | `false` | Show spinner inside popover |
82
+ | `maxDisplayedTags` | `number` | `3` (multi) | Tags shown before "+N more" |
83
+ | `groupBy` | `(option) => string` | — | Render group headers |
84
+ | `optionRender` | `(option) => ReactNode` | default | Custom option rendering |
85
+ | `noResultsMessage` | `ReactNode` | "검색 결과가 없습니다" | |
86
+ | `size` | `"sm" \| "md" \| "lg"` | `"md"` | |
87
+
88
+ ### Option type
89
+
90
+ ```ts
91
+ type Option<T = string> = {
92
+ value: T;
93
+ label: string;
94
+ description?: string;
95
+ icon?: ReactNode;
96
+ group?: string;
97
+ disabled?: boolean;
98
+ // free-form metadata for custom rendering
99
+ [key: string]: unknown;
100
+ };
101
+ ```
102
+
103
+ ## States
104
+
105
+ | State | Visual |
106
+ | --- | --- |
107
+ | Empty | Placeholder, chevron `▾` |
108
+ | Filled | Selected label, optional icon |
109
+ | Hover | Border emphasis |
110
+ | Focus-visible | 2px ring |
111
+ | Open | Border emphasis, chevron flips to `▴` |
112
+ | Disabled | 50% opacity, no events |
113
+ | Loading (async) | Spinner replaces chevron |
114
+ | Error | Border `--color-error` |
115
+
116
+ For multi-select with values: each value renders as a `Tag` chip inside the trigger. Overflow shows `+N`:
117
+
118
+ ```
119
+ ┌──────────────────────────────────────────────┐
120
+ │ [태그1 ✕] [태그2 ✕] [태그3 ✕] +5 ▾ │
121
+ └──────────────────────────────────────────────┘
122
+ ```
123
+
124
+ ## Variants
125
+
126
+ ### Single select
127
+
128
+ Default. Closes on selection.
129
+
130
+ ### Multi-select
131
+
132
+ - Stays open after each selection.
133
+ - Selected items show checkmarks in the popover.
134
+ - Selected items render as tags in the trigger.
135
+ - "Apply" footer button for "confirm and close" UX (optional — most close on outside click).
136
+
137
+ ### Searchable / combobox
138
+
139
+ - Search input appears at the top of the popover (or replaces the trigger value).
140
+ - Filter applies as user types (client-side or async).
141
+ - Highlight matched substring in option labels.
142
+
143
+ ### Async loading (combobox)
144
+
145
+ - `options` is a function `(query: string) => Promise<Option[]>`.
146
+ - Debounce: 250–300ms before each request.
147
+ - Loading spinner during fetch.
148
+ - Error state with retry.
149
+ - Cache results per query for the session (cancel on new query).
150
+
151
+ ### Creatable (tag input)
152
+
153
+ - Allow committing values not in the option list.
154
+ - Visual: a "Create '<input>'" item at the bottom of the dropdown.
155
+ - Confirmation: pressing Enter on this item adds the new value.
156
+ - Use cases: tag inputs, free-form labels, email-list inputs.
157
+
158
+ ## Accessibility — WAI-ARIA Combobox / Listbox pattern
159
+
160
+ This is one of the more complex a11y components. Use a battle-tested primitive (Radix, Headless UI) and don't roll from scratch.
161
+
162
+ ### Pattern depending on variant
163
+
164
+ | Variant | Pattern |
165
+ | --- | --- |
166
+ | Single, not searchable | `role="listbox"` (button-triggered) — Radix Select |
167
+ | Single, searchable | `role="combobox"` |
168
+ | Multi-select with search | `role="combobox" aria-multiselectable="true"` |
169
+
170
+ ### ARIA structure
171
+
172
+ - Trigger: `role="combobox"` (searchable) or `role="button"` (non-searchable), `aria-expanded`, `aria-controls`, `aria-haspopup="listbox"`.
173
+ - Popover listbox: `role="listbox"`, `aria-multiselectable="true|false"`.
174
+ - Each option: `role="option"`, `aria-selected="true|false"`.
175
+ - Active option (currently highlighted by keyboard): `aria-activedescendant` on the combobox.
176
+
177
+ ### Keyboard
178
+
179
+ | Key | Behavior |
180
+ | --- | --- |
181
+ | `Tab` | Reaches trigger. From open popover, tab moves out. |
182
+ | `↓` / `Enter` (closed) | Opens popover, focus first option (or selected) |
183
+ | `↓` / `↑` (open) | Move highlight |
184
+ | `Home` / `End` | First / last option |
185
+ | `Enter` / `Space` (open) | Select highlighted option, close (or stay open if multi) |
186
+ | `Esc` | Close popover, return focus to trigger |
187
+ | Type-ahead (non-searchable) | Jump to first option starting with typed char |
188
+ | Type-ahead (searchable) | Filters list |
189
+ | `Backspace` (multi-select with values) | Remove last tag |
190
+
191
+ ## Tokens consumed
192
+
193
+ ```
194
+ --color-bg-default (popover bg, trigger bg)
195
+ --color-bg-subtle (option hover)
196
+ --color-bg-elevated (active option)
197
+ --color-text-primary
198
+ --color-text-secondary (description text)
199
+ --color-primary-default (selected indicator)
200
+ --color-primary-subtle-bg (selected option highlight)
201
+ --color-border-default
202
+ --color-border-strong (hover border on trigger)
203
+ --color-focus-ring
204
+ --color-error
205
+ --space-sm, --space-md
206
+ --radius-md
207
+ --shadow-popover
208
+ --motion-fast, --easing-out
209
+ ```
210
+
211
+ ## Sizes
212
+
213
+ | Size | Trigger height | Option height | Font |
214
+ | --- | --- | --- | --- |
215
+ | `sm` | 32px | 28px | 13px |
216
+ | `md` (default) | 40px | 36px | 14px |
217
+ | `lg` | 48px | 44px | 16px |
218
+
219
+ ## Edge cases
220
+
221
+ - **Long option labels**: truncate with `…`, full text in `title`. For comboboxes where users search by full text, allow wrapping if option count is small.
222
+ - **Many options (1000+)**: virtualize the option list. `react-virtual` or `tanstack-virtual`. Don't render 1000 DOM nodes.
223
+ - **Async load with no results**: show `noResultsMessage`. Provide creatable path if applicable.
224
+ - **Mobile**: prefer **bottom sheet** over popover for searchable selects on mobile. The keyboard takes most of the screen otherwise.
225
+ - **Korean IME**: don't filter on every composition keystroke. Wait for `compositionend`. Otherwise `김`+`민` filters out everything between.
226
+ - **Tag input with paste**: pasting "tag1, tag2, tag3" should split on `,` and add as 3 tags.
227
+ - **RTL**: chevron flips, padding swaps. Tag chips wrap RTL.
228
+ - **Pre-selected value not in current options list** (rare async case): show the value in the trigger but resolve label via a separate lookup if possible.
229
+ - **Disabled options**: visually muted, skipped by keyboard nav, not selectable.
230
+
231
+ ## Don't
232
+
233
+ - Don't use a `<select>` for 50+ options. Native dropdowns become unusable. Use a searchable combobox.
234
+ - Don't use a Select for binary choices (yes/no, on/off). Use a Switch or radio buttons.
235
+ - Don't auto-select the first option. Show placeholder until user picks.
236
+ - Don't lose typed text on accidental blur — on blur with no selection, either close cleanly or show "press Enter to confirm".
237
+ - Don't force "Apply" button on multi-select that closes on outside click anyway. Pick one model.
238
+ - Don't combine creatable + restrictive validation (e.g., "must be from list"). Pick one.
239
+
240
+ ## References
241
+
242
+ - Ant Design: [`refs/ant-design/components/select/`](../refs/ant-design/components/select/) — `Select`, supports `mode="multiple"`, `mode="tags"` (creatable). Has `Cascader` for hierarchical select.
243
+ - MUI: `<Select>` (basic, like native) and `<Autocomplete>` (combobox). Autocomplete is the canonical reference for the searchable variant.
244
+ - shadcn-ui:
245
+ - [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/select.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/select.tsx) — Radix Select. No search.
246
+ - [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/command.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/command.tsx) — cmdk-based searchable. Combine with Popover for combobox pattern.
247
+
248
+ API choices made:
249
+ - **`Select` and `MultiSelect` as separate top-level exports** for type safety on `value` (single value vs array). Internally same primitive with `multiple={true|false}`.
250
+ - **`searchable` and `creatable` as boolean props** rather than separate components — fewer concepts, same WAI-ARIA pattern.
251
+ - **`options` accepting either array or async function**: covers both static and remote-load cases without a separate component.
252
+ - **Tag chips inside the trigger for multi**: matches Ant + Autocomplete; clearer than checkbox-list-only.
253
+
254
+ ## Cross-reference
255
+
256
+ - [knowledge/patterns/form-design.md](../knowledge/patterns/form-design.md) — Select in forms
257
+ - [WAI-ARIA Combobox Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/)
258
+ - [knowledge/a11y/keyboard-and-focus.md](../knowledge/a11y/keyboard-and-focus.md) — keyboard contract
@@ -0,0 +1,177 @@
1
+ # `Separator` — spec
2
+
3
+ > Synthesized from shadcn-ui `separator` (Radix) and the HTML5 `<hr>` element. A thin visual divider — horizontal or vertical — separating content. Distinct from `Divider` (an alias in some libraries) and from layout gaps (which use spacing tokens).
4
+
5
+ ## Separator vs spacing
6
+
7
+ | | Separator | Spacing gap |
8
+ | --- | --- | --- |
9
+ | Visible | Yes (line) | No (whitespace) |
10
+ | Use | Strong section break | Visual breathing room |
11
+ | Semantics | "Topic boundary" | "Layout pad" |
12
+
13
+ For mild visual rhythm: use spacing. For explicit topic / section change: use Separator.
14
+
15
+ ## Anatomy
16
+
17
+ ```
18
+ Top section content
19
+
20
+ ──────────────────────── ← horizontal Separator
21
+
22
+ Bottom section content
23
+ ```
24
+
25
+ ```
26
+ [ left ] │ [ right ] ← vertical Separator
27
+ ```
28
+
29
+ ## API
30
+
31
+ ```tsx
32
+ <Separator /> {/* horizontal default */}
33
+ <Separator orientation="horizontal" /> {/* explicit */}
34
+ <Separator orientation="vertical" /> {/* vertical */}
35
+
36
+ <Separator decorative={false} /> {/* semantic — actual <hr> equivalent */}
37
+ ```
38
+
39
+ | Prop | Type | Default | Description |
40
+ | --- | --- | --- | --- |
41
+ | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | Direction |
42
+ | `decorative` | `boolean` | `true` | If true: pure visual (`role="none"`); if false: semantic (`role="separator"`) |
43
+ | `as` | `keyof JSX.IntrinsicElements` | `"div"` | Element type |
44
+ | `className` | `string` | — | Style override |
45
+
46
+ ## Decorative vs semantic
47
+
48
+ - **`decorative={true}` (default)**: line is purely visual. Doesn't show up in the accessibility tree.
49
+ - **`decorative={false}`**: line is meaningful structurally — represents a content boundary. Announced to screen readers.
50
+
51
+ Most separators are decorative. Use `decorative={false}` only for genuine content breaks (between articles, between menu groups conceptually).
52
+
53
+ For semantic horizontal separators: prefer the native `<hr>`.
54
+
55
+ ## Variants
56
+
57
+ ### Solid (default)
58
+
59
+ ```css
60
+ .separator {
61
+ background: var(--color-border-default);
62
+ shrink: 0;
63
+ }
64
+ .separator[data-orientation="horizontal"] {
65
+ height: 1px;
66
+ width: 100%;
67
+ }
68
+ .separator[data-orientation="vertical"] {
69
+ width: 1px;
70
+ height: 100%;
71
+ }
72
+ ```
73
+
74
+ ### Dashed / dotted (variant via class)
75
+
76
+ ```css
77
+ .separator[data-variant="dashed"] {
78
+ background: none;
79
+ border-top: 1px dashed var(--color-border-default);
80
+ height: 0;
81
+ }
82
+ ```
83
+
84
+ ### With label (centered text)
85
+
86
+ ```
87
+ ───── Section title ─────
88
+ ```
89
+
90
+ ```tsx
91
+ <div className="separator-with-label">
92
+ <Separator />
93
+ <span>Section title</span>
94
+ <Separator />
95
+ </div>
96
+ ```
97
+
98
+ ## States
99
+
100
+ Stateless. Separator is presentational.
101
+
102
+ ## Tokens consumed
103
+
104
+ ```
105
+ --color-border-default (line color)
106
+ --color-border-strong (high-contrast variant)
107
+ --space-xxs (1px standard)
108
+ ```
109
+
110
+ For Korean print contexts (receipt-style dotted dividers): `border-style: dotted` with brand color is a Toss / banking visual convention.
111
+
112
+ ## Accessibility
113
+
114
+ - Default decorative: `role="none"`. Screen reader skips.
115
+ - Semantic: `role="separator"` (with `aria-orientation` if vertical).
116
+ - Native `<hr>` is the simplest semantic separator (defaults to horizontal).
117
+ - For visual-only "decorations" between elements: keep decorative.
118
+
119
+ ## Code examples
120
+
121
+ ### List sections
122
+
123
+ ```tsx
124
+ <List>
125
+ <ListSection>...</ListSection>
126
+ <Separator />
127
+ <ListSection>...</ListSection>
128
+ </List>
129
+ ```
130
+
131
+ ### Vertical between flexbox items
132
+
133
+ ```tsx
134
+ <div className="flex items-center gap-4">
135
+ <Avatar />
136
+ <Separator orientation="vertical" className="h-8" />
137
+ <UserName />
138
+ <Separator orientation="vertical" className="h-8" />
139
+ <Status />
140
+ </div>
141
+ ```
142
+
143
+ ### With centered label
144
+
145
+ ```tsx
146
+ <div className="flex items-center gap-4">
147
+ <Separator className="flex-1" />
148
+ <span className="text-muted">또는</span>
149
+ <Separator className="flex-1" />
150
+ </div>
151
+ ```
152
+
153
+ ## Edge cases
154
+
155
+ - **Vertical inside flex without explicit height**: collapses to 0px. Always set height for vertical.
156
+ - **Inside grid**: behaves as a child cell; may need `grid-column: 1 / -1` for full-width horizontal.
157
+ - **Dark mode**: tokens cascade; ensure visible against dark bg.
158
+ - **Print**: native `<hr>` prints; CSS `background` may not. Use `border-top` for print fidelity.
159
+ - **RTL**: orientation unaffected; horizontal separators flip nothing.
160
+
161
+ ## Don't
162
+
163
+ - Don't use Separator where a heading + spacing would be clearer.
164
+ - Don't pile up 5 separators in close proximity — visual noise.
165
+ - Don't make separator too dark / heavy. Subtle (~20% opacity grayscale) is the convention.
166
+ - Don't use Separator for rough layout work — use Grid / Flex with gap.
167
+
168
+ ## References
169
+
170
+ - HTML5 `<hr>` element
171
+ - shadcn-ui: [`separator`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/separator.tsx) (Radix)
172
+ - Ant Design `Divider` is the equivalent name there
173
+
174
+ ## Cross-reference
175
+
176
+ - [`examples/component-divider.md`](component-divider.md) — Ant-style alias
177
+ - [`knowledge/layout/spacing-and-grid.md`](../knowledge/layout/spacing-and-grid.md)