@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,344 @@
1
+ ---
2
+ title: Chart type selection guide
3
+ source: refs/ui-ux-pro-max/src/ui-ux-pro-max/data/charts.csv
4
+ upstream: https://github.com/nextlevelbuilder/ui-ux-pro-max-skill
5
+ extracted_at: 2026-05-19
6
+ applies_to: [data-visualization, dashboard, web]
7
+ version: 1.0.0
8
+ last_updated: 2026-05
9
+ stability: stable
10
+ ---
11
+
12
+ # Chart type selection guide
13
+
14
+ For each data type, the right chart, the wrong chart, and the accessibility floor. Use as a lookup before opening any charting library.
15
+
16
+ | # | Data type | Best chart | Secondary | When to use | When NOT to use |
17
+ | --- | --- | --- | --- | --- | --- |
18
+ | 1 | **Trend Over Time** | Line Chart | Area Chart, Smooth Area | Data has a time axis; user needs to observe rise/fall trends or rate of change o | Fewer than 4 data points (use stat card); more than 6 series (visual noise); no |
19
+ | 2 | **Compare Categories** | Bar Chart (Horizontal or Vertical) | Column Chart, Grouped Bar | Comparing discrete categories by magnitude; ranking or ordering is the core insi | Categories > 15 (use table or search); data has time dimension (use line); showi |
20
+ | 3 | **Part-to-Whole** | Pie Chart or Donut | Stacked Bar, Waffle Chart | ≀5 categories; one dominant segment vs rest; emphasis on visual proportion over | Categories > 5; slice differences < 5% (visually indistinguishable); user needs |
21
+ | 4 | **Correlation / Distribution** | Scatter Plot or Bubble Chart | Heat Map, Matrix | Exploring relationship between two continuous variables; identifying clusters or | Variables are categorical (use grouped bar); fewer than 20 points (patterns aren |
22
+ | 5 | **Heatmap / Intensity** | Heat Map or Choropleth | Grid Heat Map, Bubble Heat | Showing intensity/density across a 2D grid; time-based patterns (e.g., activity | Fewer than 20 cells (use bar); user needs to read exact values; colorblind users |
23
+ | 6 | **Geographic Data** | Choropleth Map or Bubble Map | Geographic Heat Map | Data has a regional/location dimension; spatial distribution is the core insight | Regions have very different sizes making visual comparison misleading (use bar); |
24
+ | 7 | **Funnel / Flow** | Funnel Chart or Sankey | Waterfall (for flows) | Sequential multi-stage process; showing conversion or drop-off rates between def | Stages aren't sequential; values don't decrease monotonically (use bar); fewer t |
25
+ | 8 | **Performance vs Target** | Gauge Chart or Bullet Chart | Dial, Thermometer | Single KPI measured against a defined target or threshold; dashboard summary con | No target or benchmark exists; comparing multiple KPIs at once (use bullet chart |
26
+ | 9 | **Time-Series Forecast** | Line with Confidence Band | Ribbon Chart | Historical data + model predictions; communicating uncertainty range to non-tech | No historical baseline; prediction confidence is too low to be useful; audience |
27
+ | 10 | **Anomaly Detection** | Line Chart with Highlights | Scatter with Alert | Monitoring a time-series for outliers; alerting users to unexpected spikes or di | Anomalies are predefined categories (use bar with highlight); real-time context |
28
+ | 11 | **Hierarchical / Nested Data** | Treemap | Sunburst, Nested Donut, Icicle | Showing size relationships within a hierarchy; overview of proportional structur | Hierarchy depth > 3 levels (too complex to read); user needs to compare sibling |
29
+ | 12 | **Flow / Process Data** | Sankey Diagram | Alluvial, Chord Diagram | Showing how quantities flow between nodes; multi-source multi-target distributio | Flow directions form loops (use network graph); fewer than 3 source-target pairs |
30
+ | 13 | **Cumulative Changes** | Waterfall Chart | Stacked Bar, Cascade | Showing how individual positive/negative components add up to a final total (e.g | Changes are not additive; more than 12 bars (readability breaks); audience expec |
31
+ | 14 | **Multi-Variable Comparison** | Radar / Spider Chart | Parallel Coordinates, Grouped Bar | Comparing multiple entities across the same fixed set of attributes (e.g., produ | Axes > 8 (unreadable); values need precise comparison (use grouped bar); audienc |
32
+ | 15 | **Stock / Trading OHLC** | Candlestick Chart | OHLC Bar, Heikin-Ashi | Financial time-series with Open/High/Low/Close data; trading or investment produ | Non-financial audience; no OHLC data available (use line chart); accessibility-f |
33
+ | 16 | **Relationship / Connection Data** | Network Graph | Hierarchical Tree, Adjacency Matrix | Mapping connections between entities; network topology or social graph explorati | Node count > 500 without clustering pre-applied; user needs precise connection c |
34
+ | 17 | **Distribution / Statistical** | Box Plot | Violin Plot, Beeswarm | Showing spread, median, and outliers of a dataset; comparing distributions acros | Fewer than 20 data points per group (distribution is not meaningful); audience u |
35
+ | 18 | **Performance vs Target (Compact)** | Bullet Chart | Gauge, Progress Bar | Dashboard with multiple KPIs side by side; space-constrained contexts where a ga | Single KPI with emphasis (use gauge); data has no defined target range; fewer th |
36
+ | 19 | **Proportional / Percentage** | Waffle Chart | Pictogram, Stacked Bar 100% | Showing what fraction of a whole is filled; percentage progress in a visually en | More than 5 categories (use stacked bar); exact values matter over visual propor |
37
+ | 20 | **Hierarchical Proportional** | Sunburst Chart | Treemap, Icicle, Circle Packing | Exploring nested proportions where both hierarchy and relative size matter (e.g. | More than 3 hierarchy levels (outer rings become unreadable); precision matters |
38
+ | 21 | **Root Cause Analysis** | Decomposition Tree | Decision Tree, Flow Chart | Decomposing a metric into contributing factors; AI-assisted analysis or BI drill | No clear parent-child causal relationship; audience expects a summary rather tha |
39
+ | 22 | **3D Spatial Data** | 3D Scatter / Surface Plot | Volumetric Rendering, Point Cloud | Scientific/engineering context where Z-axis carries essential info not expressib | 2D projection conveys the same insight; mobile context; accessibility-required e |
40
+ | 23 | **Real-Time Streaming** | Streaming Area Chart | Ticker Tape, Moving Gauge | Live monitoring dashboards; IoT/ops data updating at β‰₯1 Hz; user needs current v | Update frequency < 1/min (use periodic-refresh line chart); flashing content wit |
41
+ | 24 | **Sentiment / Emotion** | Word Cloud with Sentiment | Sentiment Arc, Radar Chart | NLP output visualization; exploratory analysis of text corpus sentiment; frequen | Precise values matter (word size is inherently imprecise); screen-reader context |
42
+ | 25 | **Process Mining** | Process Map / Graph | Directed Acyclic Graph (DAG), Petri Net | Analyzing event logs to visualize actual process flows; identifying bottlenecks | No event log data available; audience expects a static flowchart (use diagram to |
43
+
44
+ ## Detailed specs
45
+
46
+ ### 1. Trend Over Time β†’ Line Chart
47
+
48
+ - **When to use**: Data has a time axis; user needs to observe rise/fall trends or rate of change over a continuous period
49
+ - **When NOT to use**: Fewer than 4 data points (use stat card); more than 6 series (visual noise); no time dimension exists
50
+ - **Volume threshold**: <1000 pts: SVG; β‰₯1000 pts: Canvas + downsampling; >10000: aggregate to intervals
51
+ - **Color guidance**: Primary: #0080FF. Multiple series: distinct colors + distinct line styles. Fill: 20% opacity
52
+ - **A11y grade**: AA
53
+ - **A11y notes**: Differentiate series by line style (solid/dashed/dotted) not color alone. Add pattern overlays for colorblind users.
54
+ - **A11y fallback**: Dashed/dotted lines per series; togglable data table with timestamps and values
55
+ - **Library**: Chart.js, Recharts, ApexCharts
56
+ - **Interactive level**: Hover + Zoom
57
+
58
+ ### 2. Compare Categories β†’ Bar Chart (Horizontal or Vertical)
59
+
60
+ - **When to use**: Comparing discrete categories by magnitude; ranking or ordering is the core insight; categories ≀ 15
61
+ - **When NOT to use**: Categories > 15 (use table or search); data has time dimension (use line); showing proportions (use waffle/stacked)
62
+ - **Volume threshold**: <20 categories: vertical bar; 20–50: horizontal bar; >50: paginated table
63
+ - **Color guidance**: Each bar: distinct color. Grouped: same hue family. Always sort descending by value
64
+ - **A11y grade**: AAA
65
+ - **A11y notes**: Value labels on each bar by default. Sort control for user reordering.
66
+ - **A11y fallback**: Value labels always visible; provide CSV export
67
+ - **Library**: Chart.js, Recharts, D3.js
68
+ - **Interactive level**: Hover + Sort
69
+
70
+ ### 3. Part-to-Whole β†’ Pie Chart or Donut
71
+
72
+ - **When to use**: ≀5 categories; one dominant segment vs rest; emphasis on visual proportion over exact values
73
+ - **When NOT to use**: Categories > 5; slice differences < 5% (visually indistinguishable); user needs precise values; accessibility-first context
74
+ - **Volume threshold**: Max 6 slices; beyond that switch to stacked bar 100%
75
+ - **Color guidance**: 5–6 max colors. Contrasting palette. Largest slice at 12 o'clock. Always label slices with %
76
+ - **A11y grade**: C
77
+ - **A11y notes**: Pie charts fail WCAG for colorblind users. Slices rely on color alone. Avoid as primary chart in a11y contexts.
78
+ - **A11y fallback**: Must provide stacked bar alternative + percentage data table as mandatory fallback
79
+ - **Library**: Chart.js, Recharts, D3.js
80
+ - **Interactive level**: Hover + Drill
81
+
82
+ ### 4. Correlation / Distribution β†’ Scatter Plot or Bubble Chart
83
+
84
+ - **When to use**: Exploring relationship between two continuous variables; identifying clusters or outliers in a dataset
85
+ - **When NOT to use**: Variables are categorical (use grouped bar); fewer than 20 points (patterns aren't meaningful); mobile-primary context
86
+ - **Volume threshold**: <500 pts: SVG; 500–5000: Canvas at 0.6–0.8 opacity; >5000: hexbin or aggregate first
87
+ - **Color guidance**: Color axis: gradient (blue β†’ red). Bubble size: relative to 3rd variable. Opacity: 0.6–0.8 to show density
88
+ - **A11y grade**: B
89
+ - **A11y notes**: Provide data table alternative. Combine color + shape distinction for colorblind users.
90
+ - **A11y fallback**: Data table with correlation coefficient annotation; shape markers (circle/square/triangle) per group
91
+ - **Library**: D3.js, Plotly, Recharts
92
+ - **Interactive level**: Hover + Brush
93
+
94
+ ### 5. Heatmap / Intensity β†’ Heat Map or Choropleth
95
+
96
+ - **When to use**: Showing intensity/density across a 2D grid; time-based patterns (e.g., activity by hour Γ— day)
97
+ - **When NOT to use**: Fewer than 20 cells (use bar); user needs to read exact values; colorblind users without pattern fallback
98
+ - **Volume threshold**: Up to 10,000 cells efficiently; beyond that aggregate; calendar heatmap: 365 cells max per SVG
99
+ - **Color guidance**: Gradient: Cool (blue) to Hot (red). Divergent scale for Β±data. Always include numeric color legend
100
+ - **A11y grade**: B
101
+ - **A11y notes**: Pattern overlay for colorblind users. Numerical value on hover. Legend must include scale ticks.
102
+ - **A11y fallback**: Numerical overlay on hover; downloadable grid table with row/column labels
103
+ - **Library**: D3.js, Plotly, ApexCharts
104
+ - **Interactive level**: Hover + Zoom
105
+
106
+ ### 6. Geographic Data β†’ Choropleth Map or Bubble Map
107
+
108
+ - **When to use**: Data has a regional/location dimension; spatial distribution is the core insight for the user
109
+ - **When NOT to use**: Regions have very different sizes making visual comparison misleading (use bar); mobile-primary context
110
+ - **Volume threshold**: <1000 regions: SVG; β‰₯1000: Canvas/WebGL (Deck.gl); global maps: tile-based rendering
111
+ - **Color guidance**: Single color gradient per region group. Categorized colors for discrete types. Legend with clear scale breaks
112
+ - **A11y grade**: B
113
+ - **A11y notes**: Include text labels for major regions. Provide keyboard navigation between regions.
114
+ - **A11y fallback**: Region text labels; sortable data table by region name and value; keyboard-navigable regions
115
+ - **Library**: D3.js, Mapbox, Leaflet
116
+ - **Interactive level**: Pan + Zoom + Drill
117
+
118
+ ### 7. Funnel / Flow β†’ Funnel Chart or Sankey
119
+
120
+ - **When to use**: Sequential multi-stage process; showing conversion or drop-off rates between defined stages
121
+ - **When NOT to use**: Stages aren't sequential; values don't decrease monotonically (use bar); fewer than 3 stages
122
+ - **Volume threshold**: 3–8 stages optimal; beyond 8 stages group minor steps into 'Other'
123
+ - **Color guidance**: Stages: single color gradient (start β†’ end). Show conversion % between each stage. Highlight biggest drop
124
+ - **A11y grade**: AA
125
+ - **A11y notes**: Explicit conversion % as text per stage. Stage labels always visible. Linear list view as fallback.
126
+ - **A11y fallback**: Provide linear list view with stage name + count + drop-off %; keyboard traversal
127
+ - **Library**: D3.js, Recharts, Custom SVG
128
+ - **Interactive level**: Hover + Drill
129
+
130
+ ### 8. Performance vs Target β†’ Gauge Chart or Bullet Chart
131
+
132
+ - **When to use**: Single KPI measured against a defined target or threshold; dashboard summary context
133
+ - **When NOT to use**: No target or benchmark exists; comparing multiple KPIs at once (use bullet chart grid)
134
+ - **Volume threshold**: Single metric per gauge; for 3+ KPIs use bullet chart grid layout
135
+ - **Color guidance**: Performance: Red β†’ Yellow β†’ Green gradient. Target: marker line. Threshold zones clearly differentiated
136
+ - **A11y grade**: AA
137
+ - **A11y notes**: Always show numerical value + % of target as text beside chart. Never rely on color position alone.
138
+ - **A11y fallback**: Numerical value + % of target shown as visible text; ARIA live region for real-time updates
139
+ - **Library**: D3.js, ApexCharts, Custom SVG
140
+ - **Interactive level**: Hover
141
+
142
+ ### 9. Time-Series Forecast β†’ Line with Confidence Band
143
+
144
+ - **When to use**: Historical data + model predictions; communicating uncertainty range to non-technical stakeholders
145
+ - **When NOT to use**: No historical baseline; prediction confidence is too low to be useful; audience is not data-literate
146
+ - **Volume threshold**: Keep historical window to 30–90 days for readability; forecast horizon ≀ 30% of visible x-axis range
147
+ - **Color guidance**: Actual: solid line #0080FF. Forecast: dashed #FF9500. Confidence band: 15% opacity fill same hue
148
+ - **A11y grade**: AA
149
+ - **A11y notes**: Toggle between actual-only and forecast views. Legend must distinguish lines beyond color (solid vs dashed).
150
+ - **A11y fallback**: Toggle actual/forecast independently; legend labels must include line-style description
151
+ - **Library**: Chart.js, ApexCharts, Plotly
152
+ - **Interactive level**: Hover + Toggle
153
+
154
+ ### 10. Anomaly Detection β†’ Line Chart with Highlights
155
+
156
+ - **When to use**: Monitoring a time-series for outliers; alerting users to unexpected spikes or dips in operational data
157
+ - **When NOT to use**: Anomalies are predefined categories (use bar with highlight); real-time context without a pause control
158
+ - **Volume threshold**: Stream at ≀60fps with Canvas; batch: up to 10,000 pts; mark anomalies as a separate data layer
159
+ - **Color guidance**: Normal: #0080FF solid line. Anomaly marker: #FF0000 circle + filled. Alert band: #FFF3CD background zone
160
+ - **A11y grade**: AA
161
+ - **A11y notes**: Use shape marker (not color only) for anomaly points. Add text annotation per anomaly event.
162
+ - **A11y fallback**: Text alert annotation per anomaly; anomaly summary list panel alongside chart
163
+ - **Library**: D3.js, Plotly, ApexCharts
164
+ - **Interactive level**: Hover + Alert
165
+
166
+ ### 11. Hierarchical / Nested Data β†’ Treemap
167
+
168
+ - **When to use**: Showing size relationships within a hierarchy; overview of proportional structure (e.g., budget breakdown)
169
+ - **When NOT to use**: Hierarchy depth > 3 levels (too complex to read); user needs to compare sibling values precisely
170
+ - **Volume threshold**: <200 nodes: SVG; 200–1000: Canvas; >1000: paginate or pre-filter before rendering
171
+ - **Color guidance**: Parent nodes: distinct hues. Children: lighter shades of same hue. White separator borders: 2–3px
172
+ - **A11y grade**: C
173
+ - **A11y notes**: Poor baseline accessibility. Always provide table alternative as primary view. Label all large areas.
174
+ - **A11y fallback**: Collapsible tree table as primary view; treemap as supplementary visual only
175
+ - **Library**: D3.js, Recharts, ApexCharts
176
+ - **Interactive level**: Hover + Drilldown
177
+
178
+ ### 12. Flow / Process Data β†’ Sankey Diagram
179
+
180
+ - **When to use**: Showing how quantities flow between nodes; multi-source multi-target distribution
181
+ - **When NOT to use**: Flow directions form loops (use network graph); fewer than 3 source-target pairs; mobile-primary context
182
+ - **Volume threshold**: <50 flows: SVG; β‰₯50: Canvas; >200 flows: aggregate minor flows into 'Other' node
183
+ - **Color guidance**: Gradient from source to target color. Flow opacity: 0.4–0.6. Node labels always visible
184
+ - **A11y grade**: C
185
+ - **A11y notes**: Structural flow charts cannot be conveyed by color alone. Provide flow table. Avoid on mobile.
186
+ - **A11y fallback**: Flow table (Source β†’ Target β†’ Value); keyboard-traversable node list with tab stops
187
+ - **Library**: D3.js (d3-sankey), Plotly
188
+ - **Interactive level**: Hover + Drilldown
189
+
190
+ ### 13. Cumulative Changes β†’ Waterfall Chart
191
+
192
+ - **When to use**: Showing how individual positive/negative components add up to a final total (e.g., P&L, budget variance)
193
+ - **When NOT to use**: Changes are not additive; more than 12 bars (readability breaks); audience expects a simple total
194
+ - **Volume threshold**: 4–12 bars optimal; beyond 12 aggregate minor items into a single 'Other' bar
195
+ - **Color guidance**: Increases: #4CAF50. Decreases: #F44336. Start total: #2196F3. End total: #0D47A1. Running total line: dashed
196
+ - **A11y grade**: AA
197
+ - **A11y notes**: Color + directional arrow icon per bar (not color alone). Labels on every bar.
198
+ - **A11y fallback**: Table with running total column; directional arrow icons per row
199
+ - **Library**: ApexCharts, Highcharts, Plotly
200
+ - **Interactive level**: Hover
201
+
202
+ ### 14. Multi-Variable Comparison β†’ Radar / Spider Chart
203
+
204
+ - **When to use**: Comparing multiple entities across the same fixed set of attributes (e.g., product feature comparison)
205
+ - **When NOT to use**: Axes > 8 (unreadable); values need precise comparison (use grouped bar); audience unfamiliar with radar charts
206
+ - **Volume threshold**: 2–3 datasets maximum per chart; 5–8 axes; beyond 8 axes switch to parallel coordinates
207
+ - **Color guidance**: Single dataset: #0080FF at 20% fill. Multiple: distinct hues with 30% fill. Border: full opacity
208
+ - **A11y grade**: B
209
+ - **A11y notes**: Limit axes to 5–8. Always provide grouped bar chart alternative for precise reading.
210
+ - **A11y fallback**: Grouped bar chart as mandatory alternative; include raw data table
211
+ - **Library**: Chart.js, Recharts, ApexCharts
212
+ - **Interactive level**: Hover + Toggle
213
+
214
+ ### 15. Stock / Trading OHLC β†’ Candlestick Chart
215
+
216
+ - **When to use**: Financial time-series with Open/High/Low/Close data; trading or investment product context only
217
+ - **When NOT to use**: Non-financial audience; no OHLC data available (use line chart); accessibility-first context
218
+ - **Volume threshold**: Real-time: Canvas required. Historical: paginate by time range. Max 500 candles visible at once
219
+ - **Color guidance**: Bullish: #26A69A. Bearish: #EF5350. Volume bars: 40% opacity below. Body fill vs hollow for OHLC style
220
+ - **A11y grade**: B
221
+ - **A11y notes**: Provide OHLC data table. Colorblind: use fill vs outline pattern (bullish = filled, bearish = hollow).
222
+ - **A11y fallback**: OHLC data table with sortable columns; numeric summary panel (daily change %)
223
+ - **Library**: Lightweight Charts (TradingView), ApexCharts
224
+ - **Interactive level**: Real-time + Hover + Zoom
225
+
226
+ ### 16. Relationship / Connection Data β†’ Network Graph
227
+
228
+ - **When to use**: Mapping connections between entities; network topology or social graph exploration context
229
+ - **When NOT to use**: Node count > 500 without clustering pre-applied; user needs precise connection counts; mobile context
230
+ - **Volume threshold**: ≀100 nodes: SVG; 101–500: Canvas; >500: must apply clustering/LOD before rendering
231
+ - **Color guidance**: Node types: categorical colors. Edges: #90A4AE at 60% opacity. Highlight path: #F59E0B
232
+ - **A11y grade**: D
233
+ - **A11y notes**: Fundamentally inaccessible without alternative. Never use as sole representation. Always provide list alternative.
234
+ - **A11y fallback**: Adjacency list table (Node A β†’ Node B β†’ Weight); hierarchical tree view when structure allows
235
+ - **Library**: D3.js (d3-force), Vis.js, Cytoscape.js
236
+ - **Interactive level**: Drilldown + Hover + Drag
237
+
238
+ ### 17. Distribution / Statistical β†’ Box Plot
239
+
240
+ - **When to use**: Showing spread, median, and outliers of a dataset; comparing distributions across multiple groups
241
+ - **When NOT to use**: Fewer than 20 data points per group (distribution is not meaningful); audience unfamiliar with statistical charts
242
+ - **Volume threshold**: Any sample size; aggregated representation so rendering is ⚑ Excellent at any volume
243
+ - **Color guidance**: Box fill: #BBDEFB. Border: #1976D2. Median line: #D32F2F bold. Outlier dots: #F44336
244
+ - **A11y grade**: AA
245
+ - **A11y notes**: Include stats summary table. Annotate outlier count in chart subtitle.
246
+ - **A11y fallback**: Stats summary table (min / Q1 / median / Q3 / max / mean); outlier count annotation
247
+ - **Library**: Plotly, D3.js, Chart.js (plugin)
248
+ - **Interactive level**: Hover
249
+
250
+ ### 18. Performance vs Target (Compact) β†’ Bullet Chart
251
+
252
+ - **When to use**: Dashboard with multiple KPIs side by side; space-constrained contexts where a gauge is too large
253
+ - **When NOT to use**: Single KPI with emphasis (use gauge); data has no defined target range; fewer than 3 KPIs
254
+ - **Volume threshold**: Ideal for 3–10 bullet charts in a grid; scales to any count efficiently
255
+ - **Color guidance**: Qualitative ranges: #FFCDD2 / #FFF9C4 / #C8E6C9 (bad/ok/good). Performance bar: #1976D2. Target: black 3px marker
256
+ - **A11y grade**: AAA
257
+ - **A11y notes**: All values always visible as text. Color ranges are labeled with text thresholds not color alone.
258
+ - **A11y fallback**: Numerical values always visible (not hover-only); color ranges labeled with threshold text
259
+ - **Library**: D3.js, Plotly, Custom SVG
260
+ - **Interactive level**: Hover
261
+
262
+ ### 19. Proportional / Percentage β†’ Waffle Chart
263
+
264
+ - **When to use**: Showing what fraction of a whole is filled; percentage progress in a visually engaging and accessible format
265
+ - **When NOT to use**: More than 5 categories (use stacked bar); exact values matter over visual proportion; very tight space
266
+ - **Volume threshold**: 10Γ—10 grid standard (100 cells); for > 5 categories switch to stacked 100% bar
267
+ - **Color guidance**: 3–5 categories max. 2–3px gap between cells. Each category a distinct accessible color pair
268
+ - **A11y grade**: AA
269
+ - **A11y notes**: Better than pie for accessibility. Percentage text label always visible. Each cell has aria-label.
270
+ - **A11y fallback**: Percentage text always visible; grid cells labeled with aria-label value; provide legend
271
+ - **Library**: D3.js, React-Waffle, Custom CSS Grid
272
+ - **Interactive level**: Hover
273
+
274
+ ### 20. Hierarchical Proportional β†’ Sunburst Chart
275
+
276
+ - **When to use**: Exploring nested proportions where both hierarchy and relative size matter (e.g., org spend breakdown)
277
+ - **When NOT to use**: More than 3 hierarchy levels (outer rings become unreadable); precision matters over overview; mobile
278
+ - **Volume threshold**: <100 nodes: SVG; 100–500: Canvas; >500: filter to top N before rendering
279
+ - **Color guidance**: Center to outer: darker to lighter hue. Each level 15–20% lighter. Contrasting border between sectors
280
+ - **A11y grade**: C
281
+ - **A11y notes**: Poor accessibility beyond 2 levels. Mandatory table alternative required for any production use.
282
+ - **A11y fallback**: Collapsible indented list with percentages; breadcrumb trail for current drill-down state
283
+ - **Library**: D3.js (d3-hierarchy), Recharts, ApexCharts
284
+ - **Interactive level**: Drilldown + Hover
285
+
286
+ ### 21. Root Cause Analysis β†’ Decomposition Tree
287
+
288
+ - **When to use**: Decomposing a metric into contributing factors; AI-assisted analysis or BI drill-down scenarios
289
+ - **When NOT to use**: No clear parent-child causal relationship; audience expects a summary rather than exploration
290
+ - **Volume threshold**: Up to 5 levels deep; limit visible nodes to 20 per level for readability; lazy-load deeper levels
291
+ - **Color guidance**: Positive impact nodes: #2563EB. Negative impact nodes: #EF4444. Neutral connectors: #94A3B8
292
+ - **A11y grade**: AA
293
+ - **A11y notes**: Keyboard-navigable expand/collapse. Screen reader announces node value and % contribution.
294
+ - **A11y fallback**: Keyboard expand/collapse tree; screen reader announces node label + value + % impact
295
+ - **Library**: Power BI (native), React-Flow, Custom D3.js
296
+ - **Interactive level**: Drill + Expand
297
+
298
+ ### 22. 3D Spatial Data β†’ 3D Scatter / Surface Plot
299
+
300
+ - **When to use**: Scientific/engineering context where Z-axis carries essential info not expressible in 2D
301
+ - **When NOT to use**: 2D projection conveys the same insight; mobile context; accessibility-required environments; standard business dashboards
302
+ - **Volume threshold**: WebGL required. Deck.gl: up to 1M points. Three.js: LOD required beyond 50,000 pts
303
+ - **Color guidance**: Depth cues: lighting and shading. Z-axis: color gradient (cool β†’ warm). Transparent overlapping: opacity 0.4
304
+ - **A11y grade**: D
305
+ - **A11y notes**: 3D spatial charts are fundamentally inaccessible. Must not be used as primary chart type in any product UI.
306
+ - **A11y fallback**: Mandatory 2D projection view + data table; do not use as primary chart type in product UI
307
+ - **Library**: Three.js, Deck.gl, Plotly 3D
308
+ - **Interactive level**: Rotate + Zoom + VR
309
+
310
+ ### 23. Real-Time Streaming β†’ Streaming Area Chart
311
+
312
+ - **When to use**: Live monitoring dashboards; IoT/ops data updating at β‰₯1 Hz; user needs current value at a glance
313
+ - **When NOT to use**: Update frequency < 1/min (use periodic-refresh line chart); flashing content without reduced-motion support
314
+ - **Volume threshold**: Canvas/WebGL required. Buffer last 60–300s of data. Downsample older data on scroll
315
+ - **Color guidance**: Current pulse: #00FF00 (dark theme) or #0080FF (light theme). History: fading opacity. Grid: dark background
316
+ - **A11y grade**: B
317
+ - **A11y notes**: Pause/resume control required. Current value as large visible text KPI. Respect prefers-reduced-motion.
318
+ - **A11y fallback**: Pause/resume button required; current value shown as large text KPI; prefers-reduced-motion: freeze animation
319
+ - **Library**: Smoothed D3.js, CanvasJS
320
+ - **Interactive level**: Real-time + Pause + Zoom
321
+
322
+ ### 24. Sentiment / Emotion β†’ Word Cloud with Sentiment
323
+
324
+ - **When to use**: NLP output visualization; exploratory analysis of text corpus sentiment; frequency-weighted keyword overview
325
+ - **When NOT to use**: Precise values matter (word size is inherently imprecise); screen-reader context; corpus < 50 items
326
+ - **Volume threshold**: 50–5000 terms optimal. Beyond 5000: apply top-N filtering before render. Avoid on mobile
327
+ - **Color guidance**: Positive: #22C55E. Negative: #EF4444. Neutral: #94A3B8. Word size maps to frequency
328
+ - **A11y grade**: C
329
+ - **A11y notes**: Word clouds fail screen readers. Never use as sole output of NLP analysis. Always pair with list view.
330
+ - **A11y fallback**: Sortable list view by frequency with sentiment label column; word cloud as supplementary only
331
+ - **Library**: D3-cloud, Highcharts, Nivo
332
+ - **Interactive level**: Hover + Filter
333
+
334
+ ### 25. Process Mining β†’ Process Map / Graph
335
+
336
+ - **When to use**: Analyzing event logs to visualize actual process flows; identifying bottlenecks and deviations in ops/product funnels
337
+ - **When NOT to use**: No event log data available; audience expects a static flowchart (use diagram tool); node count > 100 without pre-filtering
338
+ - **Volume threshold**: <30 nodes: SVG; 30–100: Canvas; >100: apply variant filtering (top 80% of cases) before rendering
339
+ - **Color guidance**: Happy path: #10B981 thick line. Deviations: #F59E0B thin line. Bottleneck nodes: #EF4444 fill
340
+ - **A11y grade**: B
341
+ - **A11y notes**: Complex graphs are hard to navigate. Provide path summary text. Highlight top 3 bottlenecks as annotations.
342
+ - **A11y fallback**: Path summary table (variant β†’ frequency β†’ avg duration); top 3 bottlenecks as text annotation panel
343
+ - **Library**: React-Flow, Cytoscape.js, Recharts
344
+ - **Interactive level**: Drag + Node-Click
@@ -0,0 +1,299 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Dashboard composition
4
+ applies_to: [analytics, fintech, b2b-saas, all-data-ui]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Dashboard composition
11
+
12
+ A dashboard is a single screen showing multiple metrics, charts, and tables. The composition (what goes where, how dense, how it scrolls) determines whether users **understand** their data or get lost.
13
+
14
+ ## Three dashboard archetypes
15
+
16
+ | Type | Use | Density |
17
+ | --- | --- | --- |
18
+ | **Operational** | Real-time monitoring (DevOps, customer support, ATC) | Very high |
19
+ | **Analytical** | Exploration, reports, deep dives | Medium-high |
20
+ | **Strategic / Executive** | High-level KPIs, trends | Low β€” few widgets, big numbers |
21
+
22
+ Don't conflate them. An operational dashboard with 3 KPI cards is wasteful. An executive dashboard with 30 metrics is unreadable.
23
+
24
+ ## The information hierarchy
25
+
26
+ A dashboard reads in zones:
27
+
28
+ ```
29
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
30
+ β”‚ Title + filters + last updated β”‚ ← chrome
31
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
32
+ β”‚ KPI 1 KPI 2 KPI 3 KPI 4 β”‚ ← top: hero stats
33
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
34
+ β”‚ [Primary chart β€” biggest, most important trend] β”‚ ← upper-mid: trend
35
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
36
+ β”‚ [Secondary chart] [Tertiary chart] β”‚ ← lower-mid: comparisons
37
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
38
+ β”‚ [Detail table β€” filterable, sortable, paginated] β”‚ ← bottom: drill-in
39
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
40
+ ```
41
+
42
+ The order matches the **5-second test**: at a glance, what should the user know?
43
+
44
+ 1. **Top row (KPIs)**: the answer to "are we OK?" β€” single numbers, big, glanceable.
45
+ 2. **Upper-mid (trend chart)**: the answer to "what's been happening?" β€” line/area chart over time.
46
+ 3. **Lower-mid (comparisons)**: "what's driving it?" β€” breakdown by category, source, region.
47
+ 4. **Bottom (detail table)**: "let me dig in" β€” sortable rows for analysts.
48
+
49
+ ## Top row: KPI cards
50
+
51
+ A row of `Statistic` components. See [`examples/component-statistic.md`](../../examples/component-statistic.md).
52
+
53
+ | Count | Use |
54
+ | --- | --- |
55
+ | 2 | Hero stat + comparison (revenue + growth) |
56
+ | 3 | Three independent KPIs |
57
+ | 4 | Standard executive dashboard (4-up grid) |
58
+ | 5–6 | Operational (more is worse but sometimes needed) |
59
+ | 7+ | Too many β€” group or move to filters |
60
+
61
+ Each KPI card:
62
+ - One number (the metric)
63
+ - Label
64
+ - Optional sparkline (mini line chart inline)
65
+ - Optional delta indicator (vs prior period)
66
+
67
+ ```
68
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
69
+ β”‚ 이번 달 맀좜 β”‚
70
+ β”‚ β‚©2,847,500 ↑ 12% β”‚
71
+ β”‚ ▁▂▃▅▆▇ β”‚
72
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
73
+ ```
74
+
75
+ ## Primary chart placement
76
+
77
+ The main chart sits **directly below** the KPI row. It's:
78
+ - Wide (full container width β€” 12 columns, or all of mobile width)
79
+ - Tall enough to read trends (typically 240–360px)
80
+ - Time-series almost always (line or area chart)
81
+ - Shows the **same metric** as the hero KPI, but over time
82
+
83
+ If the hero KPI is "monthly revenue", the primary chart is "monthly revenue trend".
84
+
85
+ ## Secondary charts: 2-up
86
+
87
+ Two charts side by side. Common pairs:
88
+ - Trend + Breakdown (line + pie/donut)
89
+ - Categorical comparison (two bar charts)
90
+ - Geographic + categorical (map + bar)
91
+
92
+ On mobile: stack vertically. Don't try to fit 2-up on phones.
93
+
94
+ ## Bottom: detail table
95
+
96
+ For users who want to drill in. See [`examples/component-table.md`](../../examples/component-table.md).
97
+ - Filterable
98
+ - Sortable
99
+ - Paginated
100
+ - Often: click row to open detail (pop-up or new screen)
101
+
102
+ The table is the **escape hatch from "executive summary"** to "I want the raw data".
103
+
104
+ ## Density decisions
105
+
106
+ ### Comfortable
107
+
108
+ For executive / strategic dashboards. Lots of whitespace, few widgets per screen, big numbers.
109
+
110
+ ```
111
+ [KPI] [KPI] ← only 2 KPIs, big
112
+ [primary chart]
113
+ [secondary] [secondary]
114
+ ```
115
+
116
+ ### Standard
117
+
118
+ The 4-up KPI + primary + 2-up secondary + table pattern above. Most dashboards.
119
+
120
+ ### Dense (operational)
121
+
122
+ Many widgets, smaller. Use sparingly. Consider layout grids:
123
+
124
+ ```
125
+ β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”
126
+ β”‚ KPI β”‚ β”‚ KPI β”‚ β”‚ KPI β”‚ β”‚ KPI β”‚ β”‚ KPI β”‚
127
+ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜
128
+ [primary full-width chart ]
129
+ [chart] [chart] [chart]
130
+ [chart] [chart] [chart]
131
+ [detail table]
132
+ ```
133
+
134
+ Operational dashboards are often **single-page no-scroll** β€” designed for wall-mounted displays or constant-attention screens. Different design language.
135
+
136
+ ## Filters and global controls
137
+
138
+ Top of the dashboard: chrome row with:
139
+ - **Time range picker**: "였늘 / 7일 / 30일 / 90일 / 연도 / μ‚¬μš©μž μ§€μ •"
140
+ - **Filter chips**: applied filters with close buttons
141
+ - **Last updated** indicator: "방금 μ—…λ°μ΄νŠΈλ¨" or "10λΆ„ μ „"
142
+ - **Refresh button** (optional, for non-realtime dashboards)
143
+ - **Export / share** (optional)
144
+
145
+ Filters apply to the **whole page**. URL-sync them so refresh + share preserves state.
146
+
147
+ ```
148
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
149
+ β”‚ Sales Dashboard β”‚
150
+ β”‚ β”‚
151
+ β”‚ [졜근 30일 β–Ύ] [μ§€μ—­: μ„œμšΈ βœ•] [μΉ΄ν…Œκ³ λ¦¬ βœ•] Β· 방금 μ—…λ°μ΄νŠΈβ”‚
152
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
153
+ ```
154
+
155
+ ## Mobile patterns
156
+
157
+ Mobile dashboards are constrained by vertical screen. Approaches:
158
+
159
+ 1. **Stack everything vertically** β€” KPI cards full-width, charts full-width.
160
+ 2. **Tabs at the top** β€” "Overview / Sales / Users / Settings" β€” let user pick what to see.
161
+ 3. **Cards-in-a-list** β€” each section is a Card; user scrolls through.
162
+
163
+ For Korean consumer fintech apps (Toss / KakaoBank style):
164
+ - Big hero stat at top (account balance with delta)
165
+ - Quick action grid (μ†‘κΈˆ, 결제, 가계뢀)
166
+ - Recent activity list
167
+ - Discover / promo cards
168
+
169
+ This is more "home screen" than "dashboard" β€” different pattern, but the principles overlap.
170
+
171
+ ## Color in dashboards
172
+
173
+ A dashboard with 5 charts can be visually chaotic. Restrain the palette:
174
+
175
+ - **One primary brand color** for the main metric / chart fill.
176
+ - **One accent color** for comparisons.
177
+ - **Money colors** (`--color-money-positive` / `--color-money-negative`) for delta indicators.
178
+ - **Neutral grays** for axes, gridlines, labels.
179
+
180
+ For categorical breakdown (5+ series): use a sequential or diverging palette per [`chart-color-encoding.md`](chart-color-encoding.md). Don't pick 5 random brand colors.
181
+
182
+ ## Refresh and freshness
183
+
184
+ Cite [`realtime-data.md`](realtime-data.md) for the deeper pattern. Quick rules:
185
+ - Show "last updated" timestamp.
186
+ - Auto-refresh every 30s–5min depending on data velocity.
187
+ - For genuinely real-time: WebSocket updates with subtle "ping" indicator on changed values.
188
+ - For batch-updated dashboards (every hour): static snapshot + "λ‹€μŒ μ—…λ°μ΄νŠΈ: 14:00".
189
+
190
+ ## Empty / loading / error states
191
+
192
+ Each widget independently:
193
+ - **Loading**: skeleton matching the widget's shape.
194
+ - **Empty**: "데이터가 μ—†μŠ΅λ‹ˆλ‹€" + suggestion if applicable.
195
+ - **Error**: "뢈러였기 μ‹€νŒ¨" + retry β€” doesn't break other widgets.
196
+
197
+ Cite [`empty-states.md`](empty-states.md) and [`error-states.md`](error-states.md).
198
+
199
+ ## Density & responsive β€” rules of thumb
200
+
201
+ | Container width | Dashboard layout |
202
+ | --- | --- |
203
+ | < 600px (mobile) | Single column, all widgets stacked, KPIs become a 2-up or scrollable horizontal row |
204
+ | 600–960px (tablet) | KPIs 4-up, primary full-width, secondary 1-up |
205
+ | 960–1440px (laptop) | Standard layout: 4 KPIs, primary, 2-up secondary, table |
206
+ | > 1440px (large desktop) | Up to 6 KPIs, primary chart, 2 or 3-up secondary, side panel for filters |
207
+
208
+ ## Print
209
+
210
+ Dashboards print badly by default. If print matters:
211
+ - Hide nav, filters, header chrome.
212
+ - Force 1-up layout (one widget per page).
213
+ - Print "captured at" timestamp at the bottom.
214
+
215
+ Or: redirect to a PDF export endpoint that renders a print-optimized version server-side.
216
+
217
+ ## Accessibility
218
+
219
+ - Use semantic landmarks: `<main>`, `<section>` per major area.
220
+ - Each widget has a heading (`<h2>` or appropriate).
221
+ - Charts: provide text/table alternative (toggle "show data table" link).
222
+ - Color is not the only signal β€” pair with patterns or labels in charts.
223
+ - Live region (`aria-live="polite"`) for KPI value updates if real-time.
224
+ - Keyboard reachable: every interactive widget tab-reachable.
225
+ - See [`a11y/contrast.md`](../a11y/contrast.md) for chart text/axis contrast requirements.
226
+
227
+ ## Korean considerations
228
+
229
+ - "λŒ€μ‹œλ³΄λ“œ" or "ν˜„ν™©" / "μš”μ•½" depending on tone.
230
+ - Date format: "2026.05.07" compact for axes.
231
+ - Numerical units: "β‚©1.2M" or "β‚©120만" β€” pick one and be consistent. See [`money-and-amount.md`](money-and-amount.md).
232
+ - Colors: Korean stock convention (red=up) applies for financial dashboards.
233
+ - Time zone: KST always (UTC+9, no DST).
234
+
235
+ ## Common dashboard anti-patterns
236
+
237
+ - **Too many widgets** β€” 12+ on one screen. User can't focus.
238
+ - **All charts the same color** β€” no information hierarchy.
239
+ - **Inconsistent time ranges across widgets** β€” KPI shows "this month", chart shows "last 30 days" β†’ confusing.
240
+ - **No "last updated" indicator** β€” user can't tell if data is fresh.
241
+ - **Animated number tickers as decoration** β€” distracting, not informative.
242
+ - **Charts without titles or legends** β€” ambiguous.
243
+ - **Chart and adjacent number disagreeing** β€” different filters applied.
244
+ - **Dashboard is just a wall of tables** β€” tables are detail; charts are summary.
245
+ - **Mobile dashboard that requires horizontal scroll** β€” hostile.
246
+
247
+ ## Code example structure
248
+
249
+ ```tsx
250
+ function SalesDashboard() {
251
+ const filters = useFilters();
252
+ const data = useDashboardData(filters);
253
+
254
+ return (
255
+ <Page>
256
+ <DashboardHeader>
257
+ <PageTitle>맀좜 ν˜„ν™©</PageTitle>
258
+ <DashboardFilters value={filters} onChange={setFilters} />
259
+ <LastUpdated timestamp={data.timestamp} />
260
+ </DashboardHeader>
261
+
262
+ {/* KPI row */}
263
+ <KpiRow>
264
+ <Statistic label="이번 달 맀좜" value={data.revenue} delta={data.revenueDelta} />
265
+ <Statistic label="μ‹ κ·œ κ°€μž…" value={data.signups} delta={data.signupsDelta} />
266
+ <Statistic label="ν™œμ„± μ‚¬μš©μž" value={data.activeUsers} delta={data.usersDelta} />
267
+ <Statistic label="평균 μ£Όλ¬Έ κΈˆμ•‘" value={data.aov} delta={data.aovDelta} />
268
+ </KpiRow>
269
+
270
+ {/* Primary trend chart */}
271
+ <ChartCard title="맀좜 좔이" subtitle="μ§€λ‚œ 30일">
272
+ <LineChart data={data.revenueTrend} />
273
+ </ChartCard>
274
+
275
+ {/* Secondary 2-up */}
276
+ <Grid cols={2}>
277
+ <ChartCard title="μΉ΄ν…Œκ³ λ¦¬λ³„ 맀좜">
278
+ <BarChart data={data.byCategory} />
279
+ </ChartCard>
280
+ <ChartCard title="지역별 맀좜">
281
+ <PieChart data={data.byRegion} />
282
+ </ChartCard>
283
+ </Grid>
284
+
285
+ {/* Detail table */}
286
+ <Table data={data.transactions} columns={transactionColumns} pagination />
287
+ </Page>
288
+ );
289
+ }
290
+ ```
291
+
292
+ ## Cross-reference
293
+
294
+ - [`knowledge/patterns/chart-color-encoding.md`](chart-color-encoding.md) β€” palette choices for charts
295
+ - [`knowledge/patterns/realtime-data.md`](realtime-data.md) β€” live update patterns
296
+ - [`knowledge/patterns/chart-types.md`](chart-types.md) β€” picking the right chart
297
+ - [`examples/component-statistic.md`](../../examples/component-statistic.md) β€” KPI card primitive
298
+ - [`examples/component-table.md`](../../examples/component-table.md) β€” detail table
299
+ - [`knowledge/layout/spacing-and-grid.md`](../layout/spacing-and-grid.md) β€” grid system