@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,340 @@
1
+ <!-- hand-written -->
2
+ # `VideoPlayer` (custom — accessible HTML5 video with captions, speed, transcript) — spec
3
+
4
+ > Standard video player for in-product help, marketing demos, and embedded brand video. Wraps native `<video>` with captions toggle, playback speed, transcript link, and reduced-motion handling. Pairs with [`knowledge/video/in-product-video.md`](../knowledge/video/in-product-video.md) and [`knowledge/video/video-fundamentals.md`](../knowledge/video/video-fundamentals.md).
5
+
6
+ ## Purpose
7
+
8
+ The HTML5 `<video>` element is fine for trivial cases but lacks:
9
+ 1. Caption toggle UI that's discoverable.
10
+ 2. Speed control.
11
+ 3. Transcript link.
12
+ 4. Brand-aligned controls.
13
+ 5. Reduced-motion handling.
14
+ 6. Korean caption styling defaults.
15
+
16
+ `VideoPlayer` provides these without ceding to third-party players (Video.js, JW Player) for typical product use.
17
+
18
+ ## Anatomy
19
+
20
+ ```
21
+ ┌────────────────────────────────────────┐
22
+ │ │
23
+ │ [video frame / poster] │
24
+ │ │
25
+ │ │
26
+ │ ▶ 0:23 / 1:15 ━━━━━○━━━━━ │ ← progress
27
+ │ │
28
+ │ [Play] [Vol] [CC] [Speed 1x] [Full] │ ← controls
29
+ └────────────────────────────────────────┘
30
+
31
+ [View transcript ↓] ← optional below
32
+ ```
33
+
34
+ ## API
35
+
36
+ ```tsx
37
+ <VideoPlayer
38
+ src="/videos/onboarding.mp4"
39
+ poster="/videos/onboarding-poster.jpg"
40
+ captions={[
41
+ { src: "/captions/onboarding-ko.vtt", lang: "ko", label: "한국어", default: true },
42
+ { src: "/captions/onboarding-en.vtt", lang: "en", label: "English" },
43
+ ]}
44
+ transcript="/transcripts/onboarding.html"
45
+ title="앱 시작하기"
46
+ onComplete={() => trackComplete("onboarding")}
47
+ />
48
+ ```
49
+
50
+ | Prop | Type | Default | Description |
51
+ | --- | --- | --- | --- |
52
+ | `src` | `string \| Source[]` | — | Single URL OR array of `{ src, type }` for multi-format |
53
+ | `poster` | `string` | — | Poster image; first paint and reduced-motion fallback |
54
+ | `captions` | `Caption[]` | `[]` | Caption tracks (REQUIRED if video has speech) |
55
+ | `transcript` | `string` | — | URL to full transcript page |
56
+ | `title` | `string` | — | Video title; used for `aria-label` |
57
+ | `controls` | `boolean \| "minimal"` | `true` | Show controls; `"minimal"` shows play/pause + caption only |
58
+ | `autoplay` | `boolean` | `false` | Auto-play (must also be muted to work in browsers) |
59
+ | `muted` | `boolean` | `false` (or `true` if autoplay) | Mute on load |
60
+ | `loop` | `boolean` | `false` | Loop continuously |
61
+ | `playsinline` | `boolean` | `true` | iOS inline (don't go fullscreen on play) |
62
+ | `speedOptions` | `number[]` | `[0.5, 1, 1.25, 1.5, 2]` | Playback speed options |
63
+ | `defaultSpeed` | `number` | `1` | Initial speed |
64
+ | `onComplete` | `() => void` | — | Fires when video ends |
65
+ | `onPlay` / `onPause` | `() => void` | — | Standard events |
66
+ | `aspectRatio` | `string` | `"16/9"` | CSS aspect-ratio value |
67
+ | `width` | `string \| number` | `"100%"` | Wrapper width |
68
+
69
+ ```ts
70
+ type Source = { src: string; type: string };
71
+ type Caption = { src: string; lang: string; label: string; default?: boolean };
72
+ ```
73
+
74
+ ## Behavior
75
+
76
+ ### Controls
77
+
78
+ | Control | Behavior |
79
+ | --- | --- |
80
+ | Play / pause | Spacebar, click, button |
81
+ | Progress bar | Drag to scrub; click to seek |
82
+ | Volume | Slider + mute toggle; M to toggle |
83
+ | Captions (CC) | Cycle through tracks + off; C to toggle |
84
+ | Speed | Dropdown 0.5x-2x |
85
+ | Fullscreen | Button + F to toggle |
86
+ | Picture-in-picture | (optional) browser native |
87
+
88
+ ### Caption defaults
89
+
90
+ If user has saved a caption preference (locale match): apply.
91
+ Else if a track is `default: true`: apply.
92
+ Else: off.
93
+
94
+ Remember user's caption choice in `localStorage`:
95
+ ```ts
96
+ localStorage.setItem("videoplayer.captions", "ko" | "en" | "off");
97
+ ```
98
+
99
+ ### Speed defaults
100
+
101
+ Remember user's speed choice in localStorage too. Power users want 1.5x persistent.
102
+
103
+ ### Reduced motion
104
+
105
+ ```css
106
+ @media (prefers-reduced-motion: reduce) {
107
+ .video-player[data-autoplay="true"] video {
108
+ display: none;
109
+ }
110
+ .video-player[data-autoplay="true"] .poster-fallback {
111
+ display: block;
112
+ }
113
+ }
114
+ ```
115
+
116
+ If `autoplay` is true and user prefers reduced motion: show poster image only with a "Play" button overlay. User can opt in.
117
+
118
+ ## States
119
+
120
+ | State | Visual |
121
+ | --- | --- |
122
+ | `loading` | Poster + spinner |
123
+ | `ready` | Poster + Play button |
124
+ | `playing` | Video playing; controls visible (auto-hide after 3s of mouse idle) |
125
+ | `paused` | Frozen frame; controls always visible |
126
+ | `buffering` | Spinner over current frame |
127
+ | `ended` | Last frame; replay button |
128
+ | `error` | Poster + "Couldn't load video" message |
129
+ | `reduced-motion` (autoplay only) | Poster + Play button (no auto-play) |
130
+
131
+ ## Tokens consumed
132
+
133
+ ```
134
+ --color-bg-default (player bg behind controls)
135
+ --color-fg-on-bg (control icons / text)
136
+ --color-bg-overlay (semi-opaque controls bar)
137
+ --color-brand-default (progress bar fill)
138
+ --color-text-primary (caption text default)
139
+ --space-sm, --space-md
140
+ --radius-md (player container)
141
+ --font-size-sm (control labels)
142
+ --motion-fast (controls fade in/out)
143
+ --ease-out
144
+ --font-feature-tnum (timecode digit alignment)
145
+ ```
146
+
147
+ For caption styling (when burning is not an option and user toggles on):
148
+
149
+ ```
150
+ --video-caption-font (Pretendard for KR; system-ui fallback)
151
+ --video-caption-size (4-5% of player height)
152
+ --video-caption-color (white)
153
+ --video-caption-bg (rgba(0,0,0,0.7))
154
+ --video-caption-shadow (drop shadow for visibility)
155
+ ```
156
+
157
+ ## Accessibility
158
+
159
+ - **Captions REQUIRED** for any video with speech.
160
+ - **Transcript link** for full-text access.
161
+ - Wrapper: `<figure>` with `<figcaption>` for the title.
162
+ - `<video aria-label="{title}">` so screen reader announces.
163
+ - Controls: each `<button>` with `aria-label` (e.g., `aria-label="재생"`).
164
+ - Progress bar: `<input type="range" role="slider">` with `aria-valuetext` reporting current time.
165
+ - Caption toggle: `aria-pressed` for current state.
166
+ - Keyboard: space (play/pause), arrows (seek 5s / 10s), M (mute), C (captions), F (fullscreen).
167
+ - Focus visible on all controls.
168
+ - Don't auto-play with sound — accessibility + browser policy.
169
+
170
+ ## Code example
171
+
172
+ ```tsx
173
+ function ProductDemoSection() {
174
+ return (
175
+ <section>
176
+ <h2>제품 둘러보기</h2>
177
+ <VideoPlayer
178
+ src={[
179
+ { src: "/videos/demo.webm", type: "video/webm" },
180
+ { src: "/videos/demo.mp4", type: "video/mp4" },
181
+ ]}
182
+ poster="/videos/demo-poster.jpg"
183
+ captions={[
184
+ { src: "/captions/demo-ko.vtt", lang: "ko", label: "한국어", default: true },
185
+ { src: "/captions/demo-en.vtt", lang: "en", label: "English" },
186
+ ]}
187
+ transcript="/transcripts/demo.html"
188
+ title="제품 데모 - 1분 30초"
189
+ />
190
+ </section>
191
+ );
192
+ }
193
+ ```
194
+
195
+ ## Implementation hints
196
+
197
+ ```tsx
198
+ function VideoPlayer({ src, poster, captions, transcript, title, ...props }: Props) {
199
+ const videoRef = useRef<HTMLVideoElement>(null);
200
+ const [playing, setPlaying] = useState(false);
201
+ const [activeCaption, setActiveCaption] = useState(() =>
202
+ localStorage.getItem("videoplayer.captions") ??
203
+ captions.find(c => c.default)?.lang ??
204
+ "off"
205
+ );
206
+ const [speed, setSpeed] = useState(() =>
207
+ Number(localStorage.getItem("videoplayer.speed") ?? props.defaultSpeed ?? 1)
208
+ );
209
+ const reduced = usePrefersReducedMotion();
210
+
211
+ useEffect(() => {
212
+ if (!videoRef.current) return;
213
+ videoRef.current.playbackRate = speed;
214
+ }, [speed]);
215
+
216
+ useEffect(() => {
217
+ localStorage.setItem("videoplayer.captions", activeCaption);
218
+ localStorage.setItem("videoplayer.speed", String(speed));
219
+ }, [activeCaption, speed]);
220
+
221
+ // Apply active caption track
222
+ useEffect(() => {
223
+ const tracks = videoRef.current?.textTracks;
224
+ if (!tracks) return;
225
+ for (const track of Array.from(tracks)) {
226
+ track.mode = track.language === activeCaption ? "showing" : "disabled";
227
+ }
228
+ }, [activeCaption]);
229
+
230
+ if (reduced && props.autoplay) {
231
+ return <PosterFallback poster={poster} title={title} onPlay={() => setPlaying(true)} />;
232
+ }
233
+
234
+ return (
235
+ <figure className="video-player" data-state={playing ? "playing" : "paused"}>
236
+ <video
237
+ ref={videoRef}
238
+ poster={poster}
239
+ playsInline={props.playsinline ?? true}
240
+ autoPlay={props.autoplay}
241
+ muted={props.muted ?? props.autoplay}
242
+ loop={props.loop}
243
+ aria-label={title}
244
+ onPlay={() => setPlaying(true)}
245
+ onPause={() => setPlaying(false)}
246
+ onEnded={() => { setPlaying(false); props.onComplete?.(); }}
247
+ >
248
+ {Array.isArray(src)
249
+ ? src.map(s => <source key={s.src} src={s.src} type={s.type} />)
250
+ : <source src={src} />}
251
+ {captions.map(c => (
252
+ <track
253
+ key={c.lang}
254
+ kind="captions"
255
+ src={c.src}
256
+ srcLang={c.lang}
257
+ label={c.label}
258
+ default={c.default}
259
+ />
260
+ ))}
261
+ </video>
262
+
263
+ <Controls
264
+ videoRef={videoRef}
265
+ captions={captions}
266
+ activeCaption={activeCaption}
267
+ onCaptionChange={setActiveCaption}
268
+ speed={speed}
269
+ speedOptions={props.speedOptions ?? [0.5, 1, 1.25, 1.5, 2]}
270
+ onSpeedChange={setSpeed}
271
+ />
272
+
273
+ <figcaption className="sr-only">{title}</figcaption>
274
+
275
+ {transcript && (
276
+ <a href={transcript} className="video-player__transcript">
277
+ 전체 스크립트 보기
278
+ </a>
279
+ )}
280
+ </figure>
281
+ );
282
+ }
283
+ ```
284
+
285
+ ## Caption file (WebVTT) example
286
+
287
+ ```vtt
288
+ WEBVTT
289
+
290
+ 00:00:00.000 --> 00:00:03.500
291
+ 안녕하세요, 저희 앱에 오신 것을 환영합니다.
292
+
293
+ 00:00:03.500 --> 00:00:07.000
294
+ 이 영상에서는 첫 거래 등록 방법을 안내해 드립니다.
295
+
296
+ 00:00:07.000 --> 00:00:11.500
297
+ 화면 하단의 + 버튼을 눌러 새 거래를 추가하세요.
298
+ ```
299
+
300
+ Localized version: same timestamps, translated text in `demo-en.vtt`.
301
+
302
+ ## Edge cases
303
+
304
+ - **No captions provided + video has speech**: dev warning. Don't ship without captions.
305
+ - **Slow network**: poster shown until enough video buffers; "buffering" state appears if mid-playback drops below buffer.
306
+ - **Video URL 404**: error state with "Couldn't load. [Retry]" button.
307
+ - **iOS background**: `playsinline` mandatory or video opens in fullscreen; respect Apple's autoplay restrictions.
308
+ - **Multiple sources, none supported**: fall back to poster + transcript link.
309
+ - **Transcript link clicked while playing**: pause video first; navigate after.
310
+ - **Caption track 404**: graceful fallback to next track or "off".
311
+ - **User locks rotation**: respect; don't force fullscreen rotation.
312
+
313
+ ## Don't
314
+
315
+ - Don't ship without poster — first paint is blank otherwise.
316
+ - Don't auto-play with sound — browsers block; users hate.
317
+ - Don't omit captions for spoken-content videos.
318
+ - Don't hard-code controls inside the video element. Use the wrapper for brand alignment.
319
+ - Don't disable user's right-click "Save video as" unless DRM-protected. The right-click block is annoying without DRM benefit.
320
+ - Don't autoplay loops on mobile cellular without warning. Battery + data drain.
321
+ - Don't put video in time-critical product flows (checkout, payment).
322
+
323
+ ## References
324
+
325
+ Patterns drawn from:
326
+ - HTML5 `<video>` + `<track>` native APIs
327
+ - Vimeo, YouTube embed control conventions
328
+ - Video.js (more featureful but heavier)
329
+ - Plyr (lightweight modern alternative)
330
+
331
+ For more capability (HLS streaming, DRM, ads): use Video.js, JW Player, or Shaka Player. This component is for the 90% case.
332
+
333
+ ## Cross-reference
334
+
335
+ - [`knowledge/video/video-fundamentals.md`](../knowledge/video/video-fundamentals.md) — codecs, captions
336
+ - [`knowledge/video/in-product-video.md`](../knowledge/video/in-product-video.md) — in-product use
337
+ - [`knowledge/video/marketing-video.md`](../knowledge/video/marketing-video.md) — marketing use
338
+ - [`knowledge/video/korean-video-conventions.md`](../knowledge/video/korean-video-conventions.md) — KR caption styling
339
+ - [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md) — keyboard interactions
340
+ - [`examples/component-video-hero.md`](component-video-hero.md) — autoplay loop hero