@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,129 @@
1
+ # `Popper` — spec
2
+
3
+ > Synthesized from MUI `Popper`. Low-level positioning primitive that handles floating element placement with collision detection. Used internally by Tooltip / Popover / Menu / Autocomplete / Combobox.
4
+
5
+ ## When to use
6
+
7
+ - As a primitive for custom floating UI when Tooltip / Popover / Menu don't fit.
8
+ - Building custom dropdowns / pickers / overlays.
9
+
10
+ When NOT to use:
11
+ - Standard menus (use `DropdownMenu`).
12
+ - Tooltips (use `Tooltip`).
13
+ - Click-triggered floating content (use `Popover`).
14
+ - For shadcn-based projects: use Radix Popover under the hood (which uses `@floating-ui/react`).
15
+
16
+ ## API
17
+
18
+ ```tsx
19
+ <Popper
20
+ open={open}
21
+ anchorEl={anchorEl}
22
+ placement="bottom-start"
23
+ modifiers={[
24
+ { name: "offset", options: { offset: [0, 8] } },
25
+ { name: "preventOverflow", options: { padding: 8 } },
26
+ ]}
27
+ >
28
+ <div className="custom-floating-content">
29
+ {/* whatever */}
30
+ </div>
31
+ </Popper>
32
+ ```
33
+
34
+ | Prop | Type | Default | Description |
35
+ | --- | --- | --- | --- |
36
+ | `open` | `boolean` | controlled | Visibility |
37
+ | `anchorEl` | `HTMLElement \| null` | — | Element to anchor to |
38
+ | `placement` | `"top" \| "bottom" \| "left" \| "right"` (+ -start / -end) | `"bottom"` | Preferred placement |
39
+ | `modifiers` | `Modifier[]` | — | Popper.js modifiers (offset, flip, preventOverflow, etc.) |
40
+ | `transition` | `boolean` | `false` | Enable animation hooks |
41
+ | `disablePortal` | `boolean` | `false` | Render in-place vs Portal to body |
42
+ | `keepMounted` | `boolean` | `false` | Keep DOM when closed (for CSS transitions) |
43
+
44
+ ## Behaviors
45
+
46
+ | Capability | How |
47
+ | --- | --- |
48
+ | **Collision detection** | `flip` modifier flips placement when off-screen |
49
+ | **Boundary clamping** | `preventOverflow` clamps to viewport |
50
+ | **Offset** | Distance from anchor (8-12px typical) |
51
+ | **Arrow** | Optional `arrow` modifier shows caret pointing at anchor |
52
+ | **Portal** | Render in document body to escape parent overflow / z-index issues |
53
+
54
+ ## Modifier examples
55
+
56
+ ```ts
57
+ [
58
+ { name: "offset", options: { offset: [0, 8] } }, // 8px gap
59
+ { name: "flip", options: { fallbackPlacements: ["top", "right"] } },
60
+ { name: "preventOverflow", options: { padding: 8 } },
61
+ { name: "arrow", options: { element: arrowEl } },
62
+ ]
63
+ ```
64
+
65
+ For modern projects: use [`@floating-ui/react`](https://floating-ui.com/) directly. Popper.js is largely superseded; MUI v6+ uses floating-ui internally.
66
+
67
+ ## States
68
+
69
+ Stateless from Popper's POV — visibility is controlled via `open`. Animations / transitions are layered separately.
70
+
71
+ ## Tokens consumed
72
+
73
+ Popper itself doesn't theme. Tokens go on the children content.
74
+
75
+ ## Accessibility
76
+
77
+ - Popper is positioning only. Accessibility comes from the wrapping component:
78
+ - Tooltip uses `role="tooltip"`.
79
+ - Menu uses `role="menu"`.
80
+ - Popover uses `role="dialog"`.
81
+ - Focus management is up to the consumer.
82
+
83
+ ## Code example — custom date hover preview
84
+
85
+ ```tsx
86
+ function DateHoverPreview({ date }: Props) {
87
+ const [anchor, setAnchor] = useState<HTMLElement | null>(null);
88
+
89
+ return (
90
+ <>
91
+ <span
92
+ onMouseEnter={(e) => setAnchor(e.currentTarget)}
93
+ onMouseLeave={() => setAnchor(null)}
94
+ >
95
+ {date.toLocaleDateString()}
96
+ </span>
97
+ <Popper
98
+ open={!!anchor}
99
+ anchorEl={anchor}
100
+ placement="top"
101
+ modifiers={[{ name: "offset", options: { offset: [0, 8] } }]}
102
+ >
103
+ <div className="date-preview">
104
+ {date.toLocaleString("ko-KR", { dateStyle: "full", timeStyle: "short" })}
105
+ </div>
106
+ </Popper>
107
+ </>
108
+ );
109
+ }
110
+ ```
111
+
112
+ ## Don't
113
+
114
+ - Don't use Popper when a higher-level primitive fits (Tooltip / Popover / DropdownMenu).
115
+ - Don't anchor to a transient element (mutates / unmounts) without cleanup.
116
+ - Don't rely on Popper for accessibility — wrap with proper roles + focus management.
117
+ - Don't skip `disablePortal` consideration — default Portal behavior may break z-index in some layouts.
118
+
119
+ ## References
120
+
121
+ - MUI: [`Popper`](../refs/mui/packages/mui-material/src/Popper)
122
+ - Popper.js (deprecated; use @floating-ui)
123
+ - @floating-ui/react — modern replacement
124
+
125
+ ## Cross-reference
126
+
127
+ - [`examples/component-tooltip.md`](component-tooltip.md) — uses Popper internally
128
+ - [`examples/component-popover.md`](component-popover.md) — uses Popper internally
129
+ - [`examples/component-dropdown.md`](component-dropdown.md) — uses Popper internally
@@ -0,0 +1,247 @@
1
+ # `PricingCards` — spec
2
+
3
+ > Marketing primitive. Renders 2–4 pricing tiers in a comparison grid. The single most-iterated section of any SaaS landing page after the hero.
4
+
5
+ ## Purpose
6
+
7
+ Communicate pricing tiers + features per tier + CTA per tier. Used on `/pricing`, in landing pages, and in upgrade modals.
8
+
9
+ ## When PricingCards vs PricingTable
10
+
11
+ | Pattern | Use |
12
+ | --- | --- |
13
+ | **PricingCards** | 2–4 tiers; mobile-friendly; consumer-coded |
14
+ | **PricingTable** (full feature matrix) | 4+ tiers OR detailed feature comparison; desktop-first; B2B-coded |
15
+
16
+ Most SaaS: cards on landing, full table on dedicated `/pricing` page.
17
+
18
+ ## Anatomy
19
+
20
+ ```
21
+ ┌──────────────────────────────────────────────────────────────┐
22
+ │ ┌──────────┐ ┌──────────────┐ ┌──────────┐ │
23
+ │ │ Free │ │ ⭐ Pro │ │ Business │ │
24
+ │ │ │ │ ‹ 추천 › │ │ │ │
25
+ │ │ ₩0 │ │ ₩9,900/월 │ │ ₩29,000 │ │
26
+ │ │ /월 │ │ │ │ /월 │ │
27
+ │ │ │ │ │ │ │ │
28
+ │ │ ✓ 기능1 │ │ ✓ 기능1 │ │ ✓ 기능1 │ │
29
+ │ │ ✓ 기능2 │ │ ✓ 기능2 │ │ ✓ 기능2 │ │
30
+ │ │ 기능3 ✕ │ │ ✓ 기능3 │ │ ✓ 기능3 │ │
31
+ │ │ 기능4 ✕ │ │ 기능4 ✕ │ │ ✓ 기능4 │ │
32
+ │ │ │ │ │ │ │ │
33
+ │ │ [무료 시작]│ │ [Pro 시작] │ │ [상담 요청]│ │
34
+ │ └──────────┘ └──────────────┘ └──────────┘ │
35
+ └──────────────────────────────────────────────────────────────┘
36
+
37
+ Highlighted "추천" tier: visual emphasis (border, scale-up, accent background).
38
+ ```
39
+
40
+ ## API
41
+
42
+ ```tsx
43
+ <PricingCards
44
+ tiers={[
45
+ {
46
+ id: "free",
47
+ name: "Free",
48
+ price: { amount: 0, period: "month", currency: "KRW" },
49
+ description: "개인 사용자용",
50
+ features: [
51
+ { included: true, label: "거래내역 저장 (90일)" },
52
+ { included: true, label: "기본 카테고리" },
53
+ { included: false, label: "AI 자동 분류" },
54
+ { included: false, label: "은행 자동 연동" },
55
+ ],
56
+ cta: { label: "무료 시작", onClick: signupFree },
57
+ },
58
+ {
59
+ id: "pro",
60
+ name: "Pro",
61
+ price: { amount: 9900, period: "month", currency: "KRW" },
62
+ description: "개인 사용자용",
63
+ features: [
64
+ { included: true, label: "거래내역 저장 (무제한)" },
65
+ { included: true, label: "사용자 정의 카테고리" },
66
+ { included: true, label: "AI 자동 분류" },
67
+ { included: false, label: "팀 공유" },
68
+ ],
69
+ cta: { label: "Pro 시작", onClick: signupPro, intent: "primary" },
70
+ highlighted: true,
71
+ badge: "추천",
72
+ },
73
+ {
74
+ id: "business",
75
+ name: "Business",
76
+ price: { amount: 29000, period: "month", currency: "KRW" },
77
+ description: "팀 / 사업자용",
78
+ features: [
79
+ { included: true, label: "Pro 모든 기능" },
80
+ { included: true, label: "팀 공유 (최대 10명)" },
81
+ { included: true, label: "사업자 영수증 처리" },
82
+ { included: true, label: "전담 고객센터" },
83
+ ],
84
+ cta: { label: "상담 요청", onClick: contact },
85
+ },
86
+ ]}
87
+ billingPeriod="monthly"
88
+ onBillingPeriodChange={setBillingPeriod}
89
+ />
90
+ ```
91
+
92
+ | Prop | Type | Default | Description |
93
+ | --- | --- | --- | --- |
94
+ | `tiers` | `Tier[]` | — | Pricing tiers (2–4 typical) |
95
+ | `billingPeriod` | `"monthly" \| "yearly"` | `"monthly"` | |
96
+ | `onBillingPeriodChange` | `(period) => void` | — | Toggle handler |
97
+ | `yearlyDiscount` | `number` | — | "월 결제 대비 N% 할인" badge |
98
+ | `currency` | `"KRW" \| ...` | `"KRW"` | Display currency |
99
+
100
+ ```ts
101
+ type Tier = {
102
+ id: string;
103
+ name: string; // "Free" / "Pro" / "Business"
104
+ price: { amount: number, period: "month" | "year", currency: string };
105
+ description?: string;
106
+ features: Feature[];
107
+ cta: { label: string, onClick: () => void, intent?: "primary" | "secondary" };
108
+ highlighted?: boolean; // visual emphasis
109
+ badge?: string; // "추천" / "인기"
110
+ };
111
+
112
+ type Feature = {
113
+ included: boolean;
114
+ label: string;
115
+ hint?: string; // tooltip detail
116
+ };
117
+ ```
118
+
119
+ ## Tier visual
120
+
121
+ ### Default tier (non-highlighted)
122
+
123
+ - Card with neutral border
124
+ - Standard padding
125
+ - Outline button CTA
126
+
127
+ ### Highlighted tier ("recommended")
128
+
129
+ - Border in `--color-primary-default`
130
+ - Slightly bigger scale (`transform: scale(1.05)` desktop)
131
+ - Solid primary CTA
132
+ - "추천" badge above the card
133
+
134
+ The highlighted tier is the **default conversion target**. Be explicit about which tier you want users to pick.
135
+
136
+ ## Feature display
137
+
138
+ ```
139
+ ✓ 기능 (included)
140
+ ○ 기능 (not included) — gray, muted
141
+ ✓ 기능1 ⓘ — with tooltip
142
+ ```
143
+
144
+ | Approach | Use |
145
+ | --- | --- |
146
+ | Show all features in every tier (with ✓/○) | Full transparency, easy comparison |
147
+ | Show only included features per tier | Cleaner but harder comparison |
148
+ | Differentials only ("Everything in Free, plus...") | Hierarchical pricing — hides scope |
149
+
150
+ For most consumer fintech: show all features with ✓/○ per tier. Tooltip for explanation.
151
+
152
+ ## Billing period toggle
153
+
154
+ Common: monthly vs yearly toggle above the tiers, with "save 20%" badge:
155
+
156
+ ```
157
+ [월간] [연간 -20%]
158
+ ```
159
+
160
+ Yearly discount must be **honest**:
161
+ - Monthly tier × 12 vs yearly: show the actual savings.
162
+ - "20% 할인" only if math checks out.
163
+
164
+ ## Korean conventions
165
+
166
+ - **Currency**: ₩9,900 / 월 (prefix) or 9,900원/월 (suffix). Pick one. Most Korean SaaS uses 원/월.
167
+ - **Free tier name**: "무료" or "Free" — both work. KakaoBank-style products use "무료".
168
+ - **Recommended tier badge**: "추천" / "가장 인기" / "베스트셀러".
169
+ - **CTA verbs**: "시작" / "가입" / "결제" — short, action-led.
170
+ - **Yearly discount label**: "연간 결제 시 20% 할인" or "월 N원 (연 결제)".
171
+
172
+ ## Tokens consumed
173
+
174
+ ```
175
+ --color-bg-default
176
+ --color-bg-elevated (highlighted tier)
177
+ --color-bg-subtle (alternating rows in features list)
178
+ --color-primary-default (highlighted border, primary CTA)
179
+ --color-primary-subtle-bg (highlighted bg tint)
180
+ --color-text-primary
181
+ --color-text-secondary
182
+ --color-text-tertiary (un-included features)
183
+ --color-success (included checkmarks)
184
+ --color-border-default
185
+ --space-md, --space-lg, --space-xl
186
+ --radius-lg
187
+ --shadow-card (highlighted tier elevation)
188
+ ```
189
+
190
+ ## Accessibility
191
+
192
+ - Render as `<section>` with `<h2>` for "Pricing".
193
+ - Each tier: `<article>` with `<h3>` for tier name.
194
+ - Price: prominent, with `aria-label="9,900원 매월"`.
195
+ - Feature list: `<ul>` with `<li>`. ✓/○ as `aria-hidden="true"`; "포함" / "미포함" prefix on each `<li>`'s screen-reader text.
196
+ - Highlighted tier: `aria-label="추천 요금제"`.
197
+ - Billing toggle: `<fieldset>` with radio buttons.
198
+
199
+ ## Korean / English label mapping
200
+
201
+ | English | Korean |
202
+ | --- | --- |
203
+ | Free | 무료 |
204
+ | Pro | Pro |
205
+ | Business / Enterprise | Business / 비즈니스 / 엔터프라이즈 |
206
+ | Recommended | 추천 |
207
+ | Most popular | 가장 인기 |
208
+ | Best seller | 베스트셀러 |
209
+ | Get started | 시작하기 |
210
+ | Contact sales | 상담 요청 |
211
+ | Save N% | N% 할인 |
212
+ | / month | / 월 |
213
+ | / year | / 연 |
214
+
215
+ ## Code example
216
+
217
+ (See API example above — fully fleshed out.)
218
+
219
+ ## Edge cases
220
+
221
+ - **Custom pricing tier** ("Enterprise — Contact us"): no number, just "상담 후 결정". CTA opens contact form.
222
+ - **Free trial** for paid tier: indicate prominently — "14일 무료 체험" near price.
223
+ - **Annual-only / monthly-only**: hide the toggle if not applicable.
224
+ - **Multiple currencies**: detect locale, show appropriate. Fallback USD.
225
+ - **Per-seat pricing**: "₩9,900 / 사용자 / 월". Make explicit.
226
+
227
+ ## Don't
228
+
229
+ - Don't have 5+ tiers — analysis paralysis.
230
+ - Don't hide the "free" tier if it exists.
231
+ - Don't auto-select a tier; let users click.
232
+ - Don't show "원래는 비싼" pricing without honest discount math.
233
+ - Don't make the highlighted tier look identical to others — defeats purpose.
234
+ - Don't use "Most popular" for a tier with no actual popularity data.
235
+ - Don't omit "월" / "연" suffix on prices — confusion follows.
236
+
237
+ ## References
238
+
239
+ No upstream component matches exactly. Each marketing-builder (Webflow, Framer) has variants. Stripe's pricing page is canonical Western reference. Toss / KakaoBank are canonical Korean.
240
+
241
+ ## Cross-reference
242
+
243
+ - [`knowledge/patterns/pricing-page-design.md`](../knowledge/patterns/pricing-page-design.md) — pricing strategy + design
244
+ - [`examples/component-card.md`](component-card.md) — base card primitive
245
+ - [`examples/component-button.md`](component-button.md) — CTA primitive
246
+ - [`knowledge/patterns/money-and-amount.md`](../knowledge/patterns/money-and-amount.md) — currency display
247
+ - [`knowledge/i18n/korean-payments.md`](../knowledge/i18n/korean-payments.md) — pricing in KR market
@@ -0,0 +1,195 @@
1
+ # `Progress` — spec
2
+
3
+ > Citing Ant Design `Progress`, MUI `LinearProgress`/`CircularProgress`, shadcn-ui `progress`
4
+
5
+ ## Purpose
6
+
7
+ Visualizes the completion of a task. Two variants:
8
+
9
+ | Variant | Use |
10
+ | --- | --- |
11
+ | **Linear** (bar) | Long, sequential operations: file upload, multi-step form, page-load progress |
12
+ | **Circular** (ring) | Compact: button loading, profile completion percentage, score display |
13
+
14
+ ## Determinate vs Indeterminate
15
+
16
+ | Mode | Use |
17
+ | --- | --- |
18
+ | **Determinate** (knows %) | Upload of known file size, multi-step wizard (3/5), survey progress |
19
+ | **Indeterminate** (doesn't know %) | API call with unknown duration, "thinking" states |
20
+
21
+ For indeterminate operations < 2 seconds, prefer a Spinner (not a Progress component). Progress implies multi-step.
22
+
23
+ ## Anatomy — Linear
24
+
25
+ ```
26
+ Determinate: ▰▰▰▰▰▰▰▱▱▱ 60%
27
+ Indeterminate: ▱▱▰▰▰▰▱▱▱▱ (animated sweep)
28
+ ```
29
+
30
+ ```tsx
31
+ <Progress value={60} /> {/* determinate */}
32
+ <Progress /> {/* indeterminate (no value) */}
33
+ <Progress value={60} max={100} /> {/* explicit max */}
34
+ ```
35
+
36
+ ## Anatomy — Circular
37
+
38
+ ```
39
+ ⌒⌒
40
+ ⟨ 60% ⟩ ← ring with arc filled to 60%, label centered
41
+ ⌣⌣
42
+ ```
43
+
44
+ ```tsx
45
+ <Progress variant="circular" value={60} size={48} showLabel />
46
+ <Progress variant="circular" /> {/* indeterminate spinner */}
47
+ ```
48
+
49
+ ## API
50
+
51
+ | Prop | Type | Default | Description |
52
+ | --- | --- | --- | --- |
53
+ | `value` | `number` | — | 0–100 (or 0–`max`). Omit for indeterminate. |
54
+ | `max` | `number` | `100` | Upper bound |
55
+ | `variant` | `"linear" \| "circular"` | `"linear"` | |
56
+ | `intent` | `"primary" \| "success" \| "warning" \| "error"` | `"primary"` | Bar color |
57
+ | `size` | `"sm" \| "md" \| "lg"` (linear) / `number` (circular, px) | `"md"` / `40` | |
58
+ | `thickness` | `number` | derived | Bar height (linear) or ring stroke (circular) |
59
+ | `showLabel` | `boolean` | `false` | Render the % value |
60
+ | `label` | `ReactNode` | `${value}%` | Custom label |
61
+ | `striped` | `boolean` | `false` | Animated diagonal stripes (linear, indicates active progress) |
62
+
63
+ ## Linear sizes
64
+
65
+ | Size | Height | Use |
66
+ | --- | --- | --- |
67
+ | `sm` | 4px | Subtle, beneath nav bars |
68
+ | `md` (default) | 8px | Standard upload/download |
69
+ | `lg` | 12px | Hero / dashboard prominence |
70
+
71
+ ## Circular sizes
72
+
73
+ | Size | Diameter | Stroke | Use |
74
+ | --- | --- | --- | --- |
75
+ | `sm` (16) | 16px | 2px | Inside a button (loading) |
76
+ | `md` (24) | 24px | 3px | Inline loading indicator |
77
+ | `lg` (40, default) | 40px | 4px | Page/section loader |
78
+ | `xl` (64+) | 64px | 5px | Hero / score display |
79
+
80
+ ## States
81
+
82
+ | State | Linear | Circular |
83
+ | --- | --- | --- |
84
+ | Determinate, value > 0 | Bar fills `value`% | Ring arc to `value`° |
85
+ | Determinate, value = 100 | Full bar, optional success color shift | Full ring |
86
+ | Indeterminate | Animated sweep (1500ms loop, ease-in-out) | Spinning arc (1000ms loop, linear) |
87
+ | Striped (linear active) | Bar fills + diagonal stripes animate | N/A |
88
+
89
+ ## Tokens consumed
90
+
91
+ ```
92
+ --color-bg-subtle (track)
93
+ --color-primary-default (bar fill, default intent)
94
+ --color-success
95
+ --color-warning
96
+ --color-error
97
+ --color-text-secondary (label)
98
+ --space-xs, --space-sm
99
+ --radius-full (rounded bar/ring ends)
100
+ --motion-default (transitions on value change)
101
+ --easing-out
102
+ ```
103
+
104
+ For dark mode, ensure track is visible against bg — typically `--color-bg-subtle` works in both modes.
105
+
106
+ ## Behavior
107
+
108
+ ### Determinate value transitions
109
+
110
+ - Animate value changes over 200–400ms with `ease-out`.
111
+ - For very small changes (< 5%), instant transition is fine.
112
+ - Don't animate every frame on continuous progress (e.g., upload at 47.3% → 47.4%) — let the visual update lag for smoother perception.
113
+
114
+ ### Indeterminate animation
115
+
116
+ Linear: 0% → 100% sweep, 1500ms loop. The "wave" travels left to right.
117
+
118
+ Circular: full rotation, 1000ms loop, linear easing. The arc itself can also pulse in length (10–80% arc) for the Material-style "growing/shrinking" spinner.
119
+
120
+ ## Accessibility
121
+
122
+ - **Determinate**: `role="progressbar"`, `aria-valuenow`, `aria-valuemin`, `aria-valuemax`, `aria-label` (or `aria-labelledby`).
123
+ ```html
124
+ <div role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" aria-label="Upload progress">
125
+ ```
126
+ - **Indeterminate**: `role="progressbar"` with no `aria-valuenow` (omit, don't set to 0).
127
+ - **Don't update aria-valuenow on every frame** — debounce to ~5–10% steps, or update on percentage milestones.
128
+ - **Reduced motion**: indeterminate animation should be replaced with a static "loading" indicator. Determinate value transitions should be instant (no 300ms animation).
129
+
130
+ ```css
131
+ @media (prefers-reduced-motion: reduce) {
132
+ .progress { transition: none; }
133
+ .progress-indeterminate { animation: none; }
134
+ }
135
+ ```
136
+
137
+ ## Code example
138
+
139
+ ```tsx
140
+ // File upload progress
141
+ <div>
142
+ <p>uploading.pdf — {bytesFormatted}</p>
143
+ <Progress value={uploadPct} aria-label="Upload progress" />
144
+ </div>
145
+
146
+ // Multi-step form
147
+ <Progress value={(currentStep / totalSteps) * 100} aria-label={`Step ${currentStep} of ${totalSteps}`} showLabel />
148
+
149
+ // Indeterminate while waiting
150
+ <Progress aria-label="Loading account data" />
151
+
152
+ // Profile completion (circular hero)
153
+ <Progress
154
+ variant="circular"
155
+ value={profileCompletion}
156
+ size={120}
157
+ showLabel
158
+ label={`${profileCompletion}% 완료`}
159
+ />
160
+
161
+ // Inside a Button (replaces button's children with circular)
162
+ <Button loading><Progress variant="circular" size={16} /></Button>
163
+ ```
164
+
165
+ ## Edge cases
166
+
167
+ - **Value > max**: clamp to max. Don't render at 110%.
168
+ - **Negative value**: clamp to 0.
169
+ - **Value transitions backwards** (e.g., 80% → 30%, retrying upload): animate, but communicate the rollback in copy ("재시도 중…").
170
+ - **Stuck progress** (no movement for 30s+): show a "still working…" indicator alongside, or escalate to error.
171
+ - **0% determinate**: show empty track. Don't fall back to indeterminate animation.
172
+ - **100% determinate**: optionally shift to success color + checkmark when done. Otherwise, unmount the progress.
173
+ - **Multiple concurrent**: stack vertically, each labeled. Don't sum into one combined progress.
174
+ - **Reduced motion + indeterminate**: still need to communicate "in progress" — show a text label, e.g., "처리 중…".
175
+
176
+ ## Don't
177
+
178
+ - Don't use indeterminate for operations under 1 second. Just don't show a progress component.
179
+ - Don't fake progress (e.g., always show 0 → 100% over 3s while actual completion time is unknown). Fails when reality differs.
180
+ - Don't combine multiple unrelated tasks into one progress bar.
181
+ - Don't show progress for irreversible / consequential actions without a way to cancel.
182
+ - Don't omit aria-label.
183
+ - Don't use a Progress for a Skeleton's job — Skeleton is for content shape, Progress is for completion %.
184
+
185
+ ## References
186
+
187
+ - Ant Design: [`refs/ant-design/components/progress/`](../refs/ant-design/components/progress/) — `Progress` with `type="line" | "circle" | "dashboard"` (3/4 ring), `steps` (segmented), `success` (overlay).
188
+ - MUI: separate `LinearProgress` and `CircularProgress` components. `variant="determinate" | "indeterminate" | "buffer" | "query"`. Buffer mode for media playback.
189
+ - shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/progress.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/progress.tsx) — Radix primitive. Linear only. Circular requires a different primitive.
190
+
191
+ ## Cross-reference
192
+
193
+ - [examples/component-skeleton.md](component-skeleton.md) — for "loading shape", not "progress %"
194
+ - [examples/component-button.md](component-button.md) — uses circular Progress for `loading` state
195
+ - [knowledge/motion/principles.md](../knowledge/motion/principles.md) — animation timing