@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,291 @@
1
+ # `Form` — spec
2
+
3
+ > Status: example artifact. The Form is a *composition pattern*, not a single component — it specs how Input/Select/Checkbox/etc. compose into a coherent form.
4
+ > Generated by: `skills/component-spec-writer`, citing Ant Design `Form`, MUI form patterns, shadcn-ui `react-hook-form` integration
5
+
6
+ ## Purpose
7
+
8
+ A Form coordinates multiple inputs into a single submission. It owns: layout, label/error wiring, validation orchestration, submission state, and progressive disclosure. Get this wrong and every individual input feels disconnected.
9
+
10
+ ## When this is a Form vs. just inputs
11
+
12
+ | Use Form | Use loose inputs |
13
+ | --- | --- |
14
+ | Submission to a server with success/error | A single search input |
15
+ | Coordinated validation across fields (e.g., password match) | Independent settings toggles |
16
+ | Multi-step | Inline edit on a profile page |
17
+ | Required validation + "save changes" gate | Filter inputs that update results in real-time |
18
+
19
+ ## Composition
20
+
21
+ ```
22
+ <Form onSubmit={handleSubmit}>
23
+ <Form.Field name="email">
24
+ <Form.Label>Email</Form.Label>
25
+ <Form.Control>
26
+ <Input type="email" />
27
+ </Form.Control>
28
+ <Form.HelpText>We'll only use for password recovery.</Form.HelpText>
29
+ <Form.ErrorText />
30
+ </Form.Field>
31
+
32
+ <Form.Field name="password" required>
33
+ <Form.Label>Password</Form.Label>
34
+ <Form.Control>
35
+ <Input type="password" />
36
+ </Form.Control>
37
+ <Form.ErrorText />
38
+ </Form.Field>
39
+
40
+ <Form.Footer>
41
+ <Button type="submit" loading={form.formState.isSubmitting}>
42
+ Sign in
43
+ </Button>
44
+ </Form.Footer>
45
+ </Form>
46
+ ```
47
+
48
+ | Slot | Required | Notes |
49
+ | --- | --- | --- |
50
+ | `Form` | yes | Owns the state, validation, submission |
51
+ | `Form.Field` | for each input | Wraps one logical field. Wires id/aria automatically. |
52
+ | `Form.Label` | yes | Visible label, `htmlFor` auto-set |
53
+ | `Form.Control` | yes | Slot for the actual input element |
54
+ | `Form.HelpText` | optional | Below-input hint |
55
+ | `Form.ErrorText` | yes | Below-input error (replaces help text on error) |
56
+ | `Form.Footer` | usual | Submit/cancel buttons |
57
+ | `Form.Section` | optional | Logical group of fields with a heading |
58
+
59
+ ## API
60
+
61
+ ### `<Form>` props
62
+
63
+ | Prop | Type | Default | Description |
64
+ | --- | --- | --- | --- |
65
+ | `onSubmit` | `(values: T, e: FormEvent) => void \| Promise<void>` | — | Called with validated values. If returns a Promise, form is in `submitting` state until it resolves. |
66
+ | `defaultValues` | `Partial<T>` | `{}` | Initial values for uncontrolled fields. |
67
+ | `validate` | `(values: T) => Errors \| Promise<Errors>` | — | Custom validator. Use Zod schema for the typical case. |
68
+ | `schema` | `ZodSchema<T>` | — | Zod schema. Auto-validates per field on blur and on submit. |
69
+ | `mode` | `"onSubmit" \| "onBlur" \| "onChange" \| "all"` | `"onBlur"` | When to validate. |
70
+ | `onError` | `(errors: Errors) => void` | — | Called when validation fails on submit. |
71
+
72
+ ### `<Form.Field>` props
73
+
74
+ | Prop | Type | Default | Description |
75
+ | --- | --- | --- | --- |
76
+ | `name` | `string` | — | Required. The key in the form values object. Supports dotted paths (`address.city`). |
77
+ | `required` | `boolean` | `false` | Marks visually + sets `aria-required`. |
78
+ | `disabled` | `boolean` | `false` | Disables the input AND its label/help styling. |
79
+
80
+ ## Layout
81
+
82
+ ### Single-column rule
83
+
84
+ See [knowledge/patterns/form-design.md](../knowledge/patterns/form-design.md) — single-column over multi-column unless the fields are genuine pairs.
85
+
86
+ ### Sections
87
+
88
+ ```tsx
89
+ <Form>
90
+ <Form.Section title="Contact">
91
+ <Form.Field name="email">...</Form.Field>
92
+ <Form.Field name="phone">...</Form.Field>
93
+ </Form.Section>
94
+ <Form.Section title="Shipping address">
95
+ <Form.Field name="address">...</Form.Field>
96
+ <Form.Field name="postalCode">...</Form.Field>
97
+ </Form.Section>
98
+ </Form>
99
+ ```
100
+
101
+ `Section` renders a `<fieldset>` with `<legend>` for accessibility. Visual: heading + thin divider above, no heavy box.
102
+
103
+ ### Spacing
104
+
105
+ - Between fields: `--space-base` (16px)
106
+ - Between sections: `--space-2xl` (32px)
107
+ - Field internal vertical (label → input → help): `--space-xs` (4px)
108
+
109
+ ## Validation orchestration
110
+
111
+ Use `react-hook-form` + `zod` (this is the modern de facto standard; both Ant and shadcn ecosystems converge here). MUI's `react-hook-form` adapter is well-maintained too.
112
+
113
+ ### Schema pattern (recommended)
114
+
115
+ ```tsx
116
+ import { z } from "zod";
117
+ import { useForm } from "react-hook-form";
118
+ import { zodResolver } from "@hookform/resolvers/zod";
119
+
120
+ const schema = z.object({
121
+ email: z.string().email("올바른 이메일 형식이 아닙니다"),
122
+ password: z.string().min(8, "8자 이상 입력해 주세요"),
123
+ agreeToTerms: z.literal(true, { errorMap: () => ({ message: "약관 동의가 필요합니다" }) }),
124
+ });
125
+
126
+ type FormValues = z.infer<typeof schema>;
127
+
128
+ function SignupForm() {
129
+ const form = useForm<FormValues>({
130
+ resolver: zodResolver(schema),
131
+ mode: "onBlur",
132
+ });
133
+
134
+ const onSubmit = async (values: FormValues) => {
135
+ await api.signup(values);
136
+ };
137
+
138
+ return <Form form={form} onSubmit={onSubmit}>...</Form>;
139
+ }
140
+ ```
141
+
142
+ ### Validation timing matrix
143
+
144
+ | Trigger | What |
145
+ | --- | --- |
146
+ | User typing | Format only, no errors |
147
+ | User leaves field (blur) | Validate that field. If error, show. |
148
+ | User returns to errored field, types | Validate on every keystroke (live correction) |
149
+ | User submits | Validate all fields. Set focus to first errored field. |
150
+
151
+ ### Cross-field validation
152
+
153
+ Password confirmation, date range, conditional required:
154
+
155
+ ```tsx
156
+ const schema = z.object({
157
+ password: z.string().min(8),
158
+ passwordConfirm: z.string(),
159
+ }).refine((data) => data.password === data.passwordConfirm, {
160
+ message: "비밀번호가 일치하지 않습니다",
161
+ path: ["passwordConfirm"],
162
+ });
163
+ ```
164
+
165
+ But also: skip the password-confirm field entirely. See `knowledge/patterns/form-design.md` Don'ts.
166
+
167
+ ## Submission states
168
+
169
+ | State | Trigger | UI |
170
+ | --- | --- | --- |
171
+ | Idle | resting | Submit enabled |
172
+ | Validating (async) | username availability check | Field-level spinner |
173
+ | Submitting | onSubmit runs (Promise pending) | Submit button: `loading=true, disabled=true`. All inputs disabled. |
174
+ | Success | Promise resolved | Toast "저장되었습니다", optionally navigate or close form |
175
+ | Error | Promise rejected | Toast or inline error at top of form. Inputs re-enabled. |
176
+
177
+ ### Server-side errors mapping
178
+
179
+ ```tsx
180
+ try {
181
+ await api.signup(values);
182
+ } catch (err) {
183
+ if (err.code === "EMAIL_ALREADY_EXISTS") {
184
+ form.setError("email", { message: "이미 가입된 이메일입니다" });
185
+ form.setFocus("email");
186
+ } else {
187
+ toast.error("저장에 실패했습니다", { description: err.message });
188
+ }
189
+ }
190
+ ```
191
+
192
+ Map server errors to specific fields when possible. Generic toast only for non-field-specific failures.
193
+
194
+ ## Multi-step forms
195
+
196
+ For 8+ fields with logical grouping:
197
+
198
+ ```tsx
199
+ <Form schema={fullSchema} defaultValues={values}>
200
+ <Form.Steps>
201
+ <Form.Step title="Account">
202
+ <Form.Field name="email">...</Form.Field>
203
+ <Form.Field name="password">...</Form.Field>
204
+ </Form.Step>
205
+ <Form.Step title="Profile">
206
+ <Form.Field name="name">...</Form.Field>
207
+ <Form.Field name="phone">...</Form.Field>
208
+ </Form.Step>
209
+ <Form.Step title="Preferences">
210
+ <Form.Field name="locale">...</Form.Field>
211
+ </Form.Step>
212
+ </Form.Steps>
213
+ <Form.Footer>
214
+ <Form.PrevButton>Back</Form.PrevButton>
215
+ <Form.NextButton>Next</Form.NextButton>
216
+ <Form.SubmitButton>Sign up</Form.SubmitButton>
217
+ </Form.Footer>
218
+ </Form>
219
+ ```
220
+
221
+ Required affordances:
222
+ - Progress indicator: dots, numbered steps, or progress bar at top
223
+ - Per-step validation: can't advance with errors
224
+ - Back button: always available except on first step
225
+ - Save progress: persist `defaultValues` to localStorage on every blur
226
+ - Don't reset on back navigation
227
+
228
+ ## Accessibility
229
+
230
+ - `<form>` element wraps; `<button type="submit">` triggers
231
+ - Each `Form.Field` auto-wires:
232
+ - `id` on input
233
+ - `<label htmlFor>` on label
234
+ - `aria-describedby` to HelpText id
235
+ - `aria-invalid="true"` on error
236
+ - `aria-describedby` extends to ErrorText id when error
237
+ - `aria-required="true"` when `required`
238
+ - ErrorText in `role="alert"` for assertive announcement
239
+ - On submit-fail: focus moves to first errored field
240
+ - Form-level errors (e.g., "Network error") announced via `role="status"` or `aria-live="polite"` region
241
+ - For long forms: provide an in-form error summary at top with anchor links to each field
242
+
243
+ ## Tokens consumed
244
+
245
+ ```
246
+ --space-xs (label → input gap)
247
+ --space-base (between fields)
248
+ --space-2xl (between sections)
249
+ --color-error (error states)
250
+ --color-text-secondary (help text)
251
+ --color-text-tertiary (optional indicator)
252
+ ```
253
+
254
+ (Plus all tokens consumed by Input, Select, etc. via the `Form.Control` slot.)
255
+
256
+ ## Edge cases
257
+
258
+ - **Browser autofill conflict with controlled state**: react-hook-form handles this via `register`, but Controller-based fields need `setValue` on autofill events. Test with 1Password.
259
+ - **Form inside Modal**: focus on first field on modal open (not close button). On submit-fail, ensure error focus stays inside modal.
260
+ - **iOS keyboard pushing submit button off-screen**: see [knowledge/platforms/react-native.md](../knowledge/platforms/react-native.md) keyboard handling. Web: scroll-into-view on focus + sticky footer.
261
+ - **Pasting whole "Name Address Phone" into one field**: not Form's job to split — but offer help text "이름, 주소, 연락처를 따로 입력해 주세요" if you anticipate this.
262
+ - **Korean IME composition**: don't validate during composition. Listen to `compositionstart`/`end`.
263
+ - **Optimistic update**: for "save profile name" with server save in background — update UI immediately, queue server call, surface error if server rejects (rare).
264
+
265
+ ## Don't
266
+
267
+ - Don't disable submit until all fields valid. Show errors specifically — see [knowledge/patterns/form-design.md](../knowledge/patterns/form-design.md).
268
+ - Don't validate on every keystroke before user has tried. Wait for blur.
269
+ - Don't show server-side errors as global toast when they're field-specific.
270
+ - Don't lose progress when user navigates back from a step.
271
+ - Don't ship a confirm-email or confirm-password field. Use show/hide toggle and a verification email instead.
272
+
273
+ ## References
274
+
275
+ - Ant Design: [`refs/ant-design/components/form/`](../refs/ant-design/components/form/) — exhaustive `Form`, `Form.Item`, `Form.List`, `Form.Provider`. Most complete API. Built-in validation rules. Ant's `Form.useForm` is the imperative escape hatch.
276
+ - MUI: composition with `<form>` + `react-hook-form` + `<TextField>`. No dedicated Form component — MUI explicitly defers form orchestration to RHF.
277
+ - shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/) — `form.tsx` wraps RHF `FormProvider` + `Controller` + auto-wires `aria-*`. Cleanest minimal version. Mandates Zod + RHF.
278
+
279
+ API choices made:
280
+ - **Composition (`Form.Field`/`Form.Label`/`Form.Control`)** over Ant's `Form.Item` prop-blob — slot-based scales to custom field types better.
281
+ - **`schema` prop accepting a Zod schema** as the default validator — modern teams converge here. Custom `validate` is the escape hatch.
282
+ - **`mode="onBlur"` default**, not `onChange`. Less anxiety-inducing during typing.
283
+ - **Auto-wires aria-***: matches shadcn's pattern, removes the most-skipped a11y wiring.
284
+ - **`Form.Steps` for multi-step** rather than a separate `<Wizard>` component — keeps validation/state co-located.
285
+
286
+ ## Cross-reference
287
+
288
+ - [knowledge/patterns/form-design.md](../knowledge/patterns/form-design.md) — patterns this spec implements
289
+ - [examples/component-input.md](component-input.md) — what goes inside `Form.Control`
290
+ - [knowledge/i18n/korean-product-conventions.md](../knowledge/i18n/korean-product-conventions.md) — Korean form expectations (address, phone, marketing consent)
291
+ - [knowledge/a11y/keyboard-and-focus.md](../knowledge/a11y/keyboard-and-focus.md) — focus on submit-fail
@@ -0,0 +1,362 @@
1
+ <!-- hand-written -->
2
+ # `GameHUD` (custom — composable in-game heads-up display) — spec
3
+
4
+ > Composable HUD shell with slots for health / resources / mini-map / cooldowns / notifications. Genre-agnostic; configure via slot composition. Pairs with [`knowledge/game-ui/hud-design.md`](../knowledge/game-ui/hud-design.md).
5
+
6
+ ## Purpose
7
+
8
+ Game HUDs are typically hand-coded per game; cross-genre reuse rare. But within a single game's surfaces (story mode + multiplayer + practice), HUD elements should share a primitive layer.
9
+
10
+ `GameHUD` provides:
11
+ 1. **Slot-based composition** — drop elements into anchored regions.
12
+ 2. **Customization layer** — players reposition / hide.
13
+ 3. **Reduced-motion respect**.
14
+ 4. **Color-blind / contrast modes**.
15
+ 5. **UI scale** option.
16
+ 6. **Cross-platform input awareness** (PC keys / controller buttons).
17
+
18
+ ## Anatomy
19
+
20
+ ```
21
+ ┌──────────────────────────────────────────┐
22
+ │ [top-left] [top-right] │ ← anchored slots
23
+ │ │
24
+ │ │
25
+ │ │
26
+ │ [center-overlay] │ ← e.g., crosshair, prompts
27
+ │ │
28
+ │ │
29
+ │ │
30
+ │ [bottom-left] [bottom-right] │
31
+ │ [bottom-center] │
32
+ └──────────────────────────────────────────┘
33
+ ```
34
+
35
+ Nine anchored regions: 4 corners + 4 sides + 1 center. Each accepts ReactNode children.
36
+
37
+ ## API
38
+
39
+ ```tsx
40
+ <GameHUD
41
+ scale={uiScale}
42
+ reduceMotion={a11y.reduceMotion}
43
+ colorBlindMode={a11y.colorBlindMode}
44
+ contrastMode={a11y.contrastMode}
45
+ inputType={inputType} // "keyboard" | "controller-xbox" | "controller-ps" | "touch"
46
+ >
47
+ <HUDSlot anchor="bottom-left">
48
+ <PlayerFrame />
49
+ <Buffs />
50
+ </HUDSlot>
51
+
52
+ <HUDSlot anchor="bottom-center">
53
+ <Hotbar slots={9} />
54
+ </HUDSlot>
55
+
56
+ <HUDSlot anchor="top-right">
57
+ <MiniMap />
58
+ <QuestTracker />
59
+ </HUDSlot>
60
+
61
+ <HUDSlot anchor="bottom-right">
62
+ <CombatLog />
63
+ </HUDSlot>
64
+
65
+ <HUDSlot anchor="center-overlay">
66
+ <Crosshair />
67
+ </HUDSlot>
68
+ </GameHUD>
69
+ ```
70
+
71
+ | Prop | Type | Default | Description |
72
+ | --- | --- | --- | --- |
73
+ | `scale` | `number` | `1.0` | UI scale (0.5-2.0) |
74
+ | `reduceMotion` | `boolean` | system pref | Disable HUD animations |
75
+ | `colorBlindMode` | `"none" \| "protanopia" \| "deuteranopia" \| "tritanopia"` | `"none"` | CSS filter applied |
76
+ | `contrastMode` | `"normal" \| "high"` | `"normal"` | High-contrast theme |
77
+ | `inputType` | `"keyboard" \| "controller-xbox" \| "controller-ps" \| "touch"` | auto-detect | Determines button prompts |
78
+ | `customizable` | `boolean` | `true` | Enable player drag-positioning |
79
+ | `editing` | `boolean` | `false` | Edit mode (drag handles visible) |
80
+ | `children` | `HUDSlot[]` | — | Composed slot content |
81
+
82
+ ## HUDSlot
83
+
84
+ ```tsx
85
+ <HUDSlot
86
+ anchor="bottom-left"
87
+ offset={{ x: 16, y: 16 }}
88
+ hidden={false}
89
+ customId="player-frame-cluster" // for save/restore
90
+ >
91
+ {children}
92
+ </HUDSlot>
93
+ ```
94
+
95
+ ## Element primitives (ship with HUD)
96
+
97
+ ### HealthBar
98
+
99
+ ```tsx
100
+ <HealthBar
101
+ current={hp}
102
+ max={maxHp}
103
+ showNumbers
104
+ damageDelay={300} // ms before bar drops to new value
105
+ recentDamage // shows secondary bar for last hit
106
+ criticalThreshold={0.25} // <25% pulses
107
+ segmented={false} // Zelda-hearts style if true
108
+ />
109
+ ```
110
+
111
+ ### ResourceCounter (ammo / mana / etc.)
112
+
113
+ ```tsx
114
+ <ResourceCounter
115
+ icon={<AmmoIcon />}
116
+ current={30}
117
+ reserve={120}
118
+ format="X / Y" // or "X" or "X•Y"
119
+ outOfState="reload" // changes display when 0
120
+ />
121
+ ```
122
+
123
+ ### Crosshair
124
+
125
+ ```tsx
126
+ <Crosshair
127
+ shape="dot" // "dot" | "plus" | "T" | "custom"
128
+ color="#FFFF00"
129
+ size={4}
130
+ spread={recoilSpread} // dynamic spread
131
+ hitMarker={lastHit}
132
+ />
133
+ ```
134
+
135
+ ### MiniMap
136
+
137
+ ```tsx
138
+ <MiniMap
139
+ rotation="follow-player" // or "fixed-north"
140
+ size={200}
141
+ zoom={zoomLevel}
142
+ markers={[
143
+ { type: "ally", x, y },
144
+ { type: "enemy", x, y, visible: true },
145
+ { type: "objective", x, y },
146
+ ]}
147
+ />
148
+ ```
149
+
150
+ ### Hotbar
151
+
152
+ ```tsx
153
+ <Hotbar
154
+ slots={9}
155
+ bindings={{ 1: skillId, 2: skillId, ... }}
156
+ inputType={inputType} // shows 1-9 keys or button icons
157
+ cooldowns={cooldownState}
158
+ />
159
+ ```
160
+
161
+ ### Buffs
162
+
163
+ ```tsx
164
+ <Buffs
165
+ active={[
166
+ { id, icon, durationMs, stacks, type: "buff" | "debuff" },
167
+ ...
168
+ ]}
169
+ layout="horizontal"
170
+ showTimer
171
+ />
172
+ ```
173
+
174
+ ### CombatNotification
175
+
176
+ ```tsx
177
+ <DamageNumber value={150} type="normal" />
178
+ <DamageNumber value={320} type="critical" />
179
+ <HealNumber value={84} />
180
+ ```
181
+
182
+ Float up + fade.
183
+
184
+ ## States
185
+
186
+ | State | Visual |
187
+ | --- | --- |
188
+ | Default | All anchored slots visible |
189
+ | Editing | Drag handles + reset positions visible |
190
+ | Reduced motion | All slot animations frozen |
191
+ | High contrast | Adjusted colors / borders |
192
+ | Color-blind filter | CSS filter on whole HUD |
193
+ | Hidden by player | Element-by-element hide via settings |
194
+
195
+ ## Tokens consumed
196
+
197
+ ```
198
+ --game-hud-scale (multiplier on all sizes)
199
+ --game-hud-bg-overlay (semi-opaque slot bg)
200
+ --game-hud-fg-default (default text)
201
+ --game-hud-fg-emphasis (highlights)
202
+ --game-hud-color-hp-full (green)
203
+ --game-hud-color-hp-mid (yellow)
204
+ --game-hud-color-hp-low (red)
205
+ --game-hud-color-hp-critical (deep red, pulses)
206
+ --game-hud-color-mana (blue)
207
+ --game-hud-color-stamina (yellow)
208
+ --game-hud-color-shield (cyan)
209
+ --game-hud-color-buff (green tint)
210
+ --game-hud-color-debuff (red tint)
211
+ --game-hud-color-ally (blue)
212
+ --game-hud-color-enemy (red)
213
+ --game-hud-color-rare (blue)
214
+ --game-hud-color-epic (purple)
215
+ --game-hud-color-legendary (orange / gold)
216
+ --game-hud-font-numbers (tabular numerals; tnum)
217
+ ```
218
+
219
+ ## Customization save/restore
220
+
221
+ Save customization state per profile:
222
+
223
+ ```ts
224
+ type HUDProfile = {
225
+ scale: number;
226
+ slots: { [slotId: string]: { x: number; y: number; hidden: boolean; scale?: number } };
227
+ contrastMode: "normal" | "high";
228
+ colorBlindMode: ColorBlindMode;
229
+ reduceMotion: boolean;
230
+ };
231
+
232
+ // Persist to local storage, sync to cloud save
233
+ ```
234
+
235
+ Default presets:
236
+ - **Minimal** — all hide except health + crosshair.
237
+ - **Standard** — default layout.
238
+ - **MMO** — dense layout with 3 hotbars.
239
+ - **High visibility** — large UI scale + high contrast.
240
+
241
+ ## Accessibility
242
+
243
+ - **Subtitle channel** is in HUD overlay, but typically a separate component (`<SubtitleOverlay />`).
244
+ - **Visual sound indicators** can be added as a HUDSlot child.
245
+ - **Color-blind filter**: applied via CSS filter (`filter: contrast / saturate / hue-rotate`) — affects whole HUD.
246
+ - **High-contrast mode**: swaps color tokens to higher-contrast values.
247
+ - **UI scale 50-200%**: all sizes derive from `--game-hud-scale`.
248
+ - **Keyboard navigation** of HUD elements (tab between slots) for screen reader / motor accessibility.
249
+
250
+ ## Implementation hints
251
+
252
+ ```tsx
253
+ function GameHUD({
254
+ scale = 1,
255
+ reduceMotion,
256
+ colorBlindMode = "none",
257
+ contrastMode = "normal",
258
+ inputType = "auto",
259
+ customizable = true,
260
+ editing = false,
261
+ children,
262
+ }: Props) {
263
+ const detectedInput = useDetectedInputType();
264
+ const effectiveInput = inputType === "auto" ? detectedInput : inputType;
265
+
266
+ return (
267
+ <div
268
+ className="game-hud"
269
+ data-scale={scale}
270
+ data-reduce-motion={reduceMotion}
271
+ data-contrast={contrastMode}
272
+ data-color-blind={colorBlindMode}
273
+ data-input={effectiveInput}
274
+ data-editing={editing}
275
+ style={{ "--game-hud-scale": scale } as React.CSSProperties}
276
+ >
277
+ {children}
278
+ </div>
279
+ );
280
+ }
281
+
282
+ function HUDSlot({ anchor, offset = { x: 0, y: 0 }, hidden, customId, children }: SlotProps) {
283
+ const customPos = useCustomPosition(customId);
284
+ if (hidden) return null;
285
+
286
+ return (
287
+ <div
288
+ className="game-hud__slot"
289
+ data-anchor={anchor}
290
+ style={{
291
+ ...computeAnchor(anchor),
292
+ transform: customPos ? `translate(${customPos.x}px, ${customPos.y}px)` : `translate(${offset.x}px, ${offset.y}px)`,
293
+ }}
294
+ >
295
+ {children}
296
+ </div>
297
+ );
298
+ }
299
+ ```
300
+
301
+ ## CSS
302
+
303
+ ```css
304
+ .game-hud {
305
+ position: absolute;
306
+ inset: 0;
307
+ pointer-events: none;
308
+ font-feature-settings: 'tnum';
309
+ font-family: var(--game-hud-font, sans-serif);
310
+ }
311
+
312
+ .game-hud[data-color-blind="protanopia"] { filter: var(--cb-protanopia-filter); }
313
+ .game-hud[data-color-blind="deuteranopia"] { filter: var(--cb-deuteranopia-filter); }
314
+ .game-hud[data-color-blind="tritanopia"] { filter: var(--cb-tritanopia-filter); }
315
+
316
+ .game-hud[data-contrast="high"] { /* swap color tokens */ }
317
+
318
+ .game-hud__slot {
319
+ position: absolute;
320
+ pointer-events: auto;
321
+ }
322
+
323
+ .game-hud__slot[data-anchor="top-left"] { top: 0; left: 0; }
324
+ .game-hud__slot[data-anchor="top-right"] { top: 0; right: 0; }
325
+ .game-hud__slot[data-anchor="bottom-left"] { bottom: 0; left: 0; }
326
+ .game-hud__slot[data-anchor="bottom-right"] { bottom: 0; right: 0; }
327
+ .game-hud__slot[data-anchor="bottom-center"] { bottom: 0; left: 50%; transform: translateX(-50%); }
328
+ .game-hud__slot[data-anchor="center-overlay"] {
329
+ top: 50%; left: 50%; transform: translate(-50%, -50%);
330
+ pointer-events: none;
331
+ }
332
+
333
+ @media (prefers-reduced-motion: reduce) {
334
+ .game-hud * { animation: none !important; transition: none !important; }
335
+ }
336
+ ```
337
+
338
+ ## Edge cases
339
+
340
+ - **Ultra-wide aspect ratios**: anchor to safe zones, not edge of screen.
341
+ - **Foldable devices**: re-anchor on display change.
342
+ - **Resolution scaling**: HUD scales independently of game render scale.
343
+ - **Modal overlays** (pause menu, inventory): HUD usually pauses or fades.
344
+ - **Cross-platform** (PC + console + mobile): same HUD; different input prompts.
345
+
346
+ ## Don't
347
+
348
+ - Don't hard-code positions in pixels. Use anchors + scale.
349
+ - Don't override system reduced-motion.
350
+ - Don't lock customization. Let players move things.
351
+ - Don't ship without color-blind alternatives.
352
+ - Don't mix input prompts (Xbox + PS in same UI). Detect and swap.
353
+ - Don't render HUD inside game viewport — keep as overlay layer.
354
+ - Don't break HUD on resolution change. Test at 720p, 1080p, 1440p, 4K, ultra-wide.
355
+
356
+ ## Cross-reference
357
+
358
+ - [`knowledge/game-ui/hud-design.md`](../knowledge/game-ui/hud-design.md) — HUD elements
359
+ - [`knowledge/game-ui/game-ui-fundamentals.md`](../knowledge/game-ui/game-ui-fundamentals.md) — categories
360
+ - [`knowledge/game-ui/game-accessibility.md`](../knowledge/game-ui/game-accessibility.md) — a11y
361
+ - [`knowledge/game-ui/korean-gaming-conventions.md`](../knowledge/game-ui/korean-gaming-conventions.md) — KR
362
+ - [`examples/component-game-menu.md`](component-game-menu.md) — pause / inventory menus