@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,330 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Report design — research, audit, executive summary
4
+ applies_to: [reports, audits, research-findings, executive-summaries]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Report design
11
+
12
+ Reports are documents that **deliver findings** to a specific audience. Different from product docs (no API to look up) and from articles (purpose is decision, not exploration).
13
+
14
+ ## Three report archetypes
15
+
16
+ | Type | Audience | Length | Decision driven |
17
+ | --- | --- | --- | --- |
18
+ | **Research findings** | Cross-functional team, leadership | 5–15 pages | "What did we learn?" → next steps |
19
+ | **Audit / assessment** | Engineering, design, product | 3–10 pages | "What's broken?" → fixes |
20
+ | **Executive summary** | Senior leadership | 1–3 pages | "Should we act?" → decision |
21
+
22
+ design-ai produces all three:
23
+ - `skills/ux-audit` → audit report
24
+ - `skills/design-system-qa` → audit report
25
+ - `skills/design-critique` → assessment report
26
+ - Custom: research synthesis from user interviews, surveys
27
+
28
+ ## The pyramid principle
29
+
30
+ Every report follows the **inverted pyramid**:
31
+
32
+ ```
33
+ ┌─────────────────────────────────────┐
34
+ │ TL;DR — the answer / recommendation │ ← what you'd tell someone in a hallway
35
+ ├─────────────────────────────────────┤
36
+ │ Key findings (3–5 bullets) │ ← what supports the answer
37
+ ├─────────────────────────────────────┤
38
+ │ Detail / evidence per finding │ ← prose backup
39
+ ├─────────────────────────────────────┤
40
+ │ Methodology / appendix │ ← how you got there
41
+ └─────────────────────────────────────┘
42
+ ```
43
+
44
+ Senior readers stop at TL;DR. Engineers might read findings + relevant details. Stakeholders cherry-pick. **All audiences served by the same doc**.
45
+
46
+ This is **opposite of academic writing** (which builds context first, conclusion last). Reports lead with the answer.
47
+
48
+ ## Report anatomy — full template
49
+
50
+ ```markdown
51
+ # Report title
52
+
53
+ > Date: 2026.05.08
54
+ > Author: [name / agent]
55
+ > Audience: [team / role]
56
+ > Status: [draft / final / archived]
57
+
58
+ ## TL;DR
59
+
60
+ [One paragraph answer. If the reader reads only this, they have what they need.]
61
+
62
+ ## Key findings
63
+
64
+ 1. **Finding 1 (bold lede)**. Quick supporting evidence. Severity if applicable.
65
+ 2. **Finding 2**. ...
66
+ 3. **Finding 3**. ...
67
+
68
+ ## Recommendations
69
+
70
+ 1. [Action] — owner: [name] — by: [date]
71
+ 2. ...
72
+
73
+ ---
74
+
75
+ ## Detail
76
+
77
+ ### Finding 1: [title]
78
+
79
+ [Multi-paragraph evidence, citations, examples.]
80
+
81
+ ### Finding 2: [title]
82
+
83
+ ...
84
+
85
+ ## Methodology
86
+
87
+ [How the findings were derived. Sources, sample size, dates.]
88
+
89
+ ## Appendix
90
+
91
+ - Raw data
92
+ - Detailed examples
93
+ - Cited sources
94
+ ```
95
+
96
+ ## TL;DR — the most important paragraph
97
+
98
+ Spend 30% of editing time on this. It's the only paragraph many readers will read.
99
+
100
+ ### Rules
101
+
102
+ - **One paragraph.** Five sentences, max.
103
+ - **Lead with the answer.** "Yes, we should ship the redesign." or "The dashboard has 12 critical issues."
104
+ - **Numbers if applicable.** "47 components affected." "Cuts conversion by 8%."
105
+ - **No methodology.** "We tested with 12 users and..." — that's the Methodology section.
106
+ - **No marketing prose.** No "exciting" or "leverages synergy".
107
+
108
+ ### Example TL;DR
109
+
110
+ ```
111
+ Bad:
112
+ > This report explores the user journey through our checkout flow,
113
+ > based on extensive research with multiple users across various
114
+ > device types, and provides recommendations for improvement.
115
+
116
+ Good:
117
+ > The current checkout flow loses 32% of users at the address step.
118
+ > Three causes: required fields aren't visually distinct, the postal
119
+ > code lookup is slow, and validation fires too aggressively. Fixing
120
+ > these would recover an estimated $2.4M / year in lost orders.
121
+ ```
122
+
123
+ The good version: question answered, scope clear, magnitude shown, action implied.
124
+
125
+ ## Severity / impact ratings
126
+
127
+ For audit reports, classify findings consistently. Per [`knowledge/patterns/design-system-qa.md`](design-system-qa.md):
128
+
129
+ | Severity | Definition |
130
+ | --- | --- |
131
+ | 🔴 Critical | Blocks the goal OR fails compliance (a11y, security, legal). Must fix. |
132
+ | 🟠 High | Significantly slows / confuses. Fix this cycle. |
133
+ | 🟡 Medium | Inconsistency, minor friction. Schedule. |
134
+ | 🟢 Low | Polish, suggestion. Backlog. |
135
+
136
+ Always include severity counts in the TL;DR or Findings header:
137
+
138
+ ```
139
+ ## Findings (3 critical, 5 high, 2 medium)
140
+ ```
141
+
142
+ ## Visual style for reports
143
+
144
+ ### Typography
145
+
146
+ Body 16–18px (lighter than full document — readers skim).
147
+ Headings smaller relative to body than in marketing docs (skim, not deep read).
148
+
149
+ ### Color
150
+
151
+ | Use | Color |
152
+ | --- | --- |
153
+ | Severity (Critical) | `--color-error` |
154
+ | Severity (High) | `--color-warning` |
155
+ | Severity (Medium) | `--color-info` |
156
+ | Severity (Low) | `--color-text-tertiary` |
157
+ | Body text | `--color-text-primary` |
158
+ | Quotes / pull-out | `--color-bg-subtle` background |
159
+ | Charts | per [`chart-color-encoding.md`](chart-color-encoding.md) |
160
+
161
+ Avoid full-page color (e.g., red-banner for critical). Reports are sober documents.
162
+
163
+ ### Layout
164
+
165
+ - Single-column body.
166
+ - Max-width ~720px (long-form reading width).
167
+ - Generous margins (top/bottom).
168
+ - Charts inline at body width, not full-bleed.
169
+ - Tables: clean, minimal borders.
170
+
171
+ ## Charts in reports
172
+
173
+ Charts in reports differ from charts in dashboards (which differ from charts in slides):
174
+
175
+ | Context | Chart style |
176
+ | --- | --- |
177
+ | **Dashboard** | Live, interactive, dense | Many series, hover for detail |
178
+ | **Report** | Static, contextual | One message per chart, headline + chart |
179
+ | **Slide** | Static, glance-only | Most-stripped version, big takeaway |
180
+
181
+ Report chart conventions:
182
+ - Always include a chart title that's the **finding** ("Conversion drops at address step").
183
+ - Provide a 1–2 sentence caption below.
184
+ - Reference data source: "Source: Mixpanel, May 2026".
185
+ - Avoid 3D, decorative effects, gradient backgrounds.
186
+
187
+ ## Citations
188
+
189
+ Reports must be citable. Every claim has a source:
190
+
191
+ | Claim type | Source format |
192
+ | --- | --- |
193
+ | Internal data | "Mixpanel event 'checkout_complete', n=12,453, 2026-04 to 2026-05" |
194
+ | User research | "Interview transcripts, 12 participants, 2026-04-15 to 2026-04-22" |
195
+ | Industry benchmark | "Baymard Institute checkout study, 2024 (link)" |
196
+ | Knowledge file | `knowledge/patterns/form-design.md` |
197
+
198
+ Don't claim without a source. Even "common knowledge" — say where you got it.
199
+
200
+ ## Audit report specifically
201
+
202
+ For design-ai audit outputs (`skills/ux-audit`, `skills/design-system-qa`), use this canonical format:
203
+
204
+ ```markdown
205
+ # UX Audit: <artifact>
206
+
207
+ > Reviewed: 2026.05.08 · Reviewer: design-ai
208
+ > Goal: <one sentence>
209
+ > Platform: <web / mobile / etc.>
210
+
211
+ ## Summary
212
+ - 🔴 Critical: <n> (must fix before ship)
213
+ - 🟠 High: <n>
214
+ - 🟡 Medium: <n>
215
+ - 🟢 Low: <n>
216
+
217
+ ## Top recommendation
218
+ [Single most important action.]
219
+
220
+ ## Critical (must fix)
221
+
222
+ ### 1. [Finding title]
223
+ **Where**: src/Button.tsx:23
224
+ **Issue**: <what's broken>
225
+ **Why**: <impact>
226
+ **Fix**: <specific recommendation>
227
+ **Reference**: [knowledge/colors/color-theory.md](...)
228
+
229
+ ### 2. ...
230
+
231
+ ## High
232
+ ...
233
+
234
+ ## Medium
235
+ ...
236
+
237
+ ## Low
238
+ ...
239
+
240
+ ## Things that work well
241
+ - [genuine praise — keeps the report constructive]
242
+ - ...
243
+
244
+ ## Methodology
245
+ - Tools: axe-core, manual review
246
+ - Pages reviewed: dashboard, settings, profile
247
+ - Reviewed against: knowledge/PRINCIPLES.md, WCAG 2.1 AA
248
+ ```
249
+
250
+ This format is consistent across all audit outputs. The system spec it well in `skills/ux-audit/PLAYBOOK.md`.
251
+
252
+ ## Research findings report
253
+
254
+ Different from audit — synthesizes user research:
255
+
256
+ ```markdown
257
+ # Research: [topic]
258
+
259
+ > Method: [interviews / survey / usability test]
260
+ > Participants: [count + demographics]
261
+ > Date: [start - end]
262
+
263
+ ## TL;DR
264
+ ...
265
+
266
+ ## Key findings (themes)
267
+
268
+ ### Theme 1: [name]
269
+ > "Quote that exemplifies this theme."
270
+ > — Participant 4
271
+
272
+ [Synthesis: how many participants raised this, what's the underlying pattern.]
273
+
274
+ ### Theme 2: ...
275
+
276
+ ## Recommendations
277
+
278
+ | Recommendation | Severity | Owner | Due |
279
+ | --- | --- | --- | --- |
280
+ | ... | High | Design | 2026.06.01 |
281
+
282
+ ## Methodology
283
+
284
+ - Recruitment: [how participants were chosen]
285
+ - Protocol: [what was asked / observed]
286
+ - Analysis: [how raw data became themes]
287
+
288
+ ## Appendix
289
+
290
+ - Raw notes [link]
291
+ - Screen recordings [link]
292
+ - Survey data [link]
293
+ ```
294
+
295
+ ## Korean reports
296
+
297
+ Korean business reports (보고서) tend to be **more formal and dense** than Western:
298
+
299
+ - 존댓말 always (~합니다, ~입니다).
300
+ - Numbered hierarchical sections (1, 1.1, 1.1.1).
301
+ - Numbered findings (가, 나, 다 OR 1, 2, 3).
302
+ - Conservative palette.
303
+ - Often: a 표지 (cover page) with org logo + report title + date — not common in Western SaaS.
304
+ - Acronyms English unless universally Korean (e.g., "AI" stays "AI", "사용자" stays Korean).
305
+
306
+ Korean fintech / startup reports trend lighter (Toss-style):
307
+ - Big numbers, lots of whitespace.
308
+ - Short paragraphs.
309
+ - Minimalist palette.
310
+
311
+ ## Don't
312
+
313
+ - Don't bury the answer in paragraph 5 of the executive summary.
314
+ - Don't include methodology before findings (academic, wrong for reports).
315
+ - Don't omit numeric impact ("affects users" → "affects 12% of users").
316
+ - Don't use marketing language in audit findings.
317
+ - Don't apologize for findings ("unfortunately, we found..." — neutral tone).
318
+ - Don't deliver a 50-page report when 5 would suffice.
319
+ - Don't present 8+ recommendations — prioritize ruthlessly. Top 3 actionable.
320
+ - Don't omit citations.
321
+
322
+ ## Cross-reference
323
+
324
+ - [`knowledge/patterns/document-typography.md`](document-typography.md) — visual styling
325
+ - [`knowledge/patterns/technical-writing.md`](technical-writing.md) — voice and structure
326
+ - [`knowledge/patterns/information-architecture.md`](information-architecture.md) — for longer reports
327
+ - [`knowledge/patterns/chart-color-encoding.md`](chart-color-encoding.md) — charts in reports
328
+ - [`knowledge/patterns/design-system-qa.md`](design-system-qa.md) — audit-specific format
329
+ - [`skills/ux-audit/PLAYBOOK.md`](../../skills/ux-audit/PLAYBOOK.md) — audit skill
330
+ - [`skills/design-critique/PLAYBOOK.md`](../../skills/design-critique/PLAYBOOK.md) — critique skill
@@ -0,0 +1,373 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Search UX patterns
4
+ applies_to: [web, mobile, all-ui]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Search UX
11
+
12
+ Search is one of the most-used interactions in any product with content. Korean users in particular search heavily — local mobile apps treat search as a primary action, not a fallback.
13
+
14
+ ## Three search archetypes
15
+
16
+ | Type | Use | Example |
17
+ | --- | --- | --- |
18
+ | **Site-wide search** | Find anything in the product | Google, Naver, in-app top search |
19
+ | **Scoped search** | Within one collection | Search this page, search this folder |
20
+ | **Filter-based** | Refine an existing list | Faceted search, table filtering |
21
+
22
+ Most products need 1 or 2 of these. Don't ship all three without strong reason.
23
+
24
+ ## Site-wide search anatomy
25
+
26
+ ```
27
+ ┌──────────────────────────────────────────────────────┐
28
+ │ 🔍 [ type to search... ] │
29
+ └──────────────────────────────────────────────────────┘
30
+ ↓ (on focus)
31
+ ┌──────────────────────────────────────────────────────┐
32
+ │ 🔍 [type to search ✕ ] │
33
+ ├──────────────────────────────────────────────────────┤
34
+ │ 최근 검색어 │
35
+ │ • previous query 1 ✕ │
36
+ │ • previous query 2 ✕ │
37
+ │ ───── │
38
+ │ 추천 검색어 │
39
+ │ • trending 1 │
40
+ │ • trending 2 │
41
+ └──────────────────────────────────────────────────────┘
42
+ ↓ (on type)
43
+ ┌──────────────────────────────────────────────────────┐
44
+ │ 🔍 [김민 ✕] │
45
+ ├──────────────────────────────────────────────────────┤
46
+ │ 추천 검색어 │
47
+ │ • 김민지 │
48
+ │ • 김민호 │
49
+ │ ───── │
50
+ │ 결과 (8) │
51
+ │ → 김민지 — 마케팅 팀 │
52
+ │ → 김민호 — 엔지니어링 │
53
+ │ → ... │
54
+ └──────────────────────────────────────────────────────┘
55
+ ```
56
+
57
+ | Slot | Notes |
58
+ | --- | --- |
59
+ | Search input | Full-width on mobile; ~320–480px on desktop |
60
+ | Search icon | Always visible (helps discovery + signals affordance) |
61
+ | Clear (✕) | Appears when input has value |
62
+ | Recent searches | Stored locally (or per-account if logged in) |
63
+ | Trending / Recommended | When applicable — Naver, Coupang style |
64
+ | Type-ahead suggestions | While typing, before hitting Enter |
65
+ | Results | After confirming search OR live as user types |
66
+
67
+ ## Type-ahead vs submit-to-search
68
+
69
+ | Approach | Use |
70
+ | --- | --- |
71
+ | **Type-ahead (live)** | Smaller datasets, simple categories — autocompleting names, products, recent items |
72
+ | **Submit-to-search** | Large datasets, full-text — articles, documents, deep search |
73
+ | **Hybrid** | Type-ahead suggestions PLUS dedicated results page on submit |
74
+
75
+ Korean consumer apps lean toward **hybrid**: live suggestions in the dropdown + a "전체 검색 결과 보기" link to a full results page.
76
+
77
+ ## Type-ahead (autocomplete)
78
+
79
+ ### Debouncing
80
+
81
+ Don't fire a request on every keystroke. Wait 200–300ms after the last keystroke before fetching.
82
+
83
+ For very fast UIs (sub-50ms server response), 100ms is acceptable. For typical APIs, 250ms.
84
+
85
+ ### Cancellation
86
+
87
+ If a user types fast, cancel in-flight requests. The result of the previous query is irrelevant once the query has changed.
88
+
89
+ ```ts
90
+ useEffect(() => {
91
+ const controller = new AbortController();
92
+ fetch(`/search?q=${query}`, { signal: controller.signal })
93
+ .then(...)
94
+ .catch(err => { if (err.name !== 'AbortError') console.error(err); });
95
+ return () => controller.abort();
96
+ }, [query]);
97
+ ```
98
+
99
+ ### Korean IME composition
100
+
101
+ Korean users typing Hangul go through composition states ("김" + "ㅁ" + "ㅣ" + "ㄴ" → "민"). **Don't fire searches during composition** — wait for `compositionend`:
102
+
103
+ ```ts
104
+ const handleChange = (e) => setQuery(e.target.value);
105
+ const handleCompositionEnd = (e) => {
106
+ // Now safe to search
107
+ setQuery(e.target.value);
108
+ };
109
+ ```
110
+
111
+ Otherwise: typing "김민지" results in 5+ separate searches for `김`, `김ㅁ`, `김미`, `김민`, `김민지` — wasteful and visually janky.
112
+
113
+ ## Recent searches
114
+
115
+ - Show on focus, before user types.
116
+ - Store last 5–10 queries.
117
+ - Each item has a clear (✕) affordance.
118
+ - "Clear all" link below the list.
119
+ - Persist locally for guests; per-account for logged-in users.
120
+ - Privacy: don't sync recent searches to server unless explicitly opted in.
121
+
122
+ ```
123
+ 최근 검색어 [모두 지우기]
124
+ • 김민지 ✕
125
+ • 마케팅 팀 ✕
126
+ • 5월 결제 내역 ✕
127
+ ```
128
+
129
+ ## Result rendering
130
+
131
+ ### Highlight matches
132
+
133
+ Bold the matched substring in result labels:
134
+
135
+ ```
136
+ 김**민**지 ← "민" is the search term
137
+ 마케팅 **팀** ← "팀" is the search term
138
+ ```
139
+
140
+ CSS / mark element:
141
+ ```html
142
+ <span>김<mark>민</mark>지</span>
143
+ ```
144
+
145
+ For multi-word searches, highlight each word separately.
146
+
147
+ ### Result types in a unified list
148
+
149
+ If results span types (people, projects, files), group with section headers:
150
+
151
+ ```
152
+ 사람 (3)
153
+ • 김민지
154
+ • 김민호
155
+
156
+ 프로젝트 (1)
157
+ • Aurora 김민지 워크스트림
158
+
159
+ 파일 (4)
160
+ • minji-design.fig
161
+ • ...
162
+ ```
163
+
164
+ Each section header is sticky if list is long.
165
+
166
+ ### "No results"
167
+
168
+ ```
169
+ ┌──────────────────────────────────────────────────┐
170
+ │ "김민" 검색 결과가 없습니다 │
171
+ │ │
172
+ │ 다른 검색어를 시도해 보세요. │
173
+ │ │
174
+ │ 또는 │
175
+ │ [전체 디렉토리에서 찾기] │
176
+ └──────────────────────────────────────────────────┘
177
+ ```
178
+
179
+ - Echo the query so user sees what was tried.
180
+ - Suggest alternatives or broader search.
181
+ - Don't say "Error" — empty search results aren't errors.
182
+
183
+ ## Filter-based search (faceted)
184
+
185
+ For e-commerce, search results, file managers:
186
+
187
+ ```
188
+ [search input]
189
+ ─────────────────────────────────────
190
+ ┌─────┐ 142 results
191
+ │ │
192
+ │ 카테고리 ▾ Result 1
193
+ │ ☐ 의류 Result 2
194
+ │ ☐ 신발 ...
195
+
196
+ │ 가격
197
+ │ ☐ ~₩50,000
198
+ │ ☐ ₩50,000 ~₩200,000
199
+
200
+ │ [필터 초기화]
201
+ └─────┘
202
+ ```
203
+
204
+ ### Filter rules
205
+
206
+ - **Show selected count** ("3 filters applied").
207
+ - **Always have a "clear all" / "초기화"** affordance.
208
+ - **Apply on selection** (don't make user click "Apply" — slow), unless filters are expensive (then debounce or batch).
209
+ - **Update count** as filters change ("142 → 35 results").
210
+ - **Mobile**: filters in a bottom sheet or slide-in panel; "Apply" button at bottom.
211
+ - **URL sync**: filters in query params so refresh + share preserves state.
212
+
213
+ ### Faceted vs free-text
214
+
215
+ Don't replace one with the other:
216
+ - Free-text: "검색해 보세요" — open-ended.
217
+ - Filters: "이런 옵션들 중에서 골라보세요" — guided.
218
+
219
+ Combine: the user types a query AND applies filters. Both narrow the result set.
220
+
221
+ ## Search input — the control itself
222
+
223
+ ### Placeholder
224
+
225
+ ```
226
+ ✓ "이름, 이메일, 프로젝트로 검색" [tells user what's searchable]
227
+ ✓ "프로젝트 검색" [scoped]
228
+ ✓ "검색" [universal, when context is clear]
229
+
230
+ ✗ "여기 입력하세요" [content-free]
231
+ ✗ "🔍" [no instruction]
232
+ ```
233
+
234
+ ### Keyboard shortcut
235
+
236
+ For desktop apps with heavy search use: bind `Cmd+K` (Mac) / `Ctrl+K` (Win/Linux) to focus the search input.
237
+
238
+ Show the shortcut in the placeholder or as a key hint:
239
+
240
+ ```
241
+ 🔍 [Search... Cmd K ]
242
+ ```
243
+
244
+ This is the Linear / GitHub / Notion / Slack convention. Users with > 3-day exposure to any of these expect it.
245
+
246
+ ### Mobile placement
247
+
248
+ | Pattern | Use |
249
+ | --- | --- |
250
+ | **Persistent at top** | Search-heavy apps (Naver, Coupang) |
251
+ | **Tab in bottom-tab-bar** | Multi-purpose apps (Instagram) |
252
+ | **Icon in top-app-bar → opens overlay** | Apps where search is secondary (gmail, banking) |
253
+
254
+ For Korean consumer apps: persistent or icon-in-app-bar. The hamburger-buried search is an anti-pattern.
255
+
256
+ ## States
257
+
258
+ | State | Visual |
259
+ | --- | --- |
260
+ | Empty | Placeholder |
261
+ | Focused (no query) | Recent + trending dropdown |
262
+ | Typing | Live suggestions / results |
263
+ | Loading | Spinner inside or beside the input |
264
+ | Loaded with results | Results in dropdown or page |
265
+ | Loaded with no results | "no results" empty state |
266
+ | Error | Inline error in dropdown — "Failed to search. Try again." |
267
+
268
+ ## Tokens consumed
269
+
270
+ ```
271
+ --color-bg-default (input bg)
272
+ --color-bg-elevated (dropdown bg)
273
+ --color-bg-subtle (hover row)
274
+ --color-text-primary
275
+ --color-text-secondary (placeholder)
276
+ --color-text-tertiary (recent / trending labels)
277
+ --color-primary-default (highlight match, focus ring)
278
+ --color-border-default
279
+ --color-focus-ring
280
+ --space-md, --space-base
281
+ --radius-md
282
+ --shadow-popover
283
+ --motion-fast, --easing-out
284
+ ```
285
+
286
+ ## Accessibility — WAI-ARIA Combobox pattern
287
+
288
+ The search input is technically a combobox:
289
+
290
+ - Input: `role="combobox"`, `aria-expanded`, `aria-controls={listboxId}`, `aria-autocomplete="list"`.
291
+ - Result list: `role="listbox"`, `id={listboxId}`.
292
+ - Each result: `role="option"`, `aria-selected`.
293
+ - Active highlight: `aria-activedescendant={activeId}` on the input.
294
+
295
+ ### Keyboard
296
+
297
+ | Key | Behavior |
298
+ | --- | --- |
299
+ | `Tab` | Reaches input. Tab again leaves; Tab inside listbox is not standard (use arrow keys). |
300
+ | `↓` / `↑` | Move highlight in results |
301
+ | `Enter` | Activate highlighted result OR submit search if no highlight |
302
+ | `Esc` | Clear input (first press), close dropdown (second press) |
303
+ | `Cmd+K` / `Ctrl+K` | (custom binding) focus input from anywhere |
304
+
305
+ ### Screen reader
306
+
307
+ - Announce result count when results load: "8 results."
308
+ - Announce "no results" when applicable.
309
+ - Don't announce on every keystroke — too chatty.
310
+
311
+ ## Korean considerations
312
+
313
+ Per [`knowledge/i18n/korean-product-conventions.md`](../i18n/korean-product-conventions.md):
314
+
315
+ - **Search is primary**, not secondary. Korean users search before browsing.
316
+ - **자동완성** (auto-complete) is expected.
317
+ - **검색어 추천** (recommended searches) common — trending, popular, seasonal.
318
+ - **방금 검색한 검색어** (recent searches) shown by default.
319
+ - **검색 결과 N건** (N results) — always show count.
320
+ - **No-results message**: polite, suggest alternatives — "검색 결과가 없습니다. 다른 검색어를 시도해 보세요."
321
+ - **Search by Korean substring**: Hangul searches should match partial syllables (`김민` matches `김민지`, `김민호`). Server-side concern, but UX expects it.
322
+
323
+ ## Common search anti-patterns
324
+
325
+ - **Hidden search** (only behind a hamburger menu).
326
+ - **Auto-submit on every keystroke** (no debounce, hammers server, flickers UI).
327
+ - **No clear button** — user has to backspace to empty.
328
+ - **Generic "Try again" on no-results** — no actual help.
329
+ - **Loading every result on first focus** — eager fetching of "popular searches" before user has even typed.
330
+ - **Results that don't show the matched query** — user has no idea why this matched.
331
+ - **Submit-only with no live suggestions** — when type-ahead would help.
332
+ - **Type-ahead only with no submit page** — when result list overflows the dropdown.
333
+
334
+ ## Code example
335
+
336
+ ```tsx
337
+ function SearchBar() {
338
+ const [query, setQuery] = useState("");
339
+ const [debouncedQuery] = useDebounce(query, 250);
340
+ const [isComposing, setIsComposing] = useState(false);
341
+ const { data: results, isLoading } = useSearch(debouncedQuery, { skip: isComposing });
342
+ const recentSearches = useRecentSearches();
343
+
344
+ return (
345
+ <div className="search">
346
+ <Input
347
+ placeholder="이름, 이메일, 프로젝트로 검색"
348
+ iconStart={<SearchIcon />}
349
+ clearable
350
+ value={query}
351
+ onChange={setQuery}
352
+ onCompositionStart={() => setIsComposing(true)}
353
+ onCompositionEnd={(e) => { setIsComposing(false); setQuery(e.target.value); }}
354
+ // a11y combobox attrs auto-applied via Combobox primitive
355
+ />
356
+ <SearchDropdown
357
+ query={query}
358
+ recentSearches={recentSearches}
359
+ results={results}
360
+ isLoading={isLoading}
361
+ />
362
+ </div>
363
+ );
364
+ }
365
+ ```
366
+
367
+ ## Cross-reference
368
+
369
+ - [`knowledge/patterns/list-and-feed.md`](list-and-feed.md) — search results as a list
370
+ - [`knowledge/patterns/form-design.md`](form-design.md) — search input as a form field
371
+ - [`knowledge/patterns/mobile-navigation.md`](mobile-navigation.md) — search placement on mobile
372
+ - [`knowledge/i18n/korean-typography.md`](../i18n/korean-typography.md) — IME composition handling
373
+ - [`examples/component-select.md`](../../examples/component-select.md) — combobox pattern (search input is a special case)