@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.
- package/.claude-plugin/plugin.json +164 -0
- package/AGENTS.ko.md +126 -0
- package/AGENTS.md +182 -0
- package/CHANGELOG.md +6883 -0
- package/CLAUDE.md +39 -0
- package/LICENSE +21 -0
- package/README.ko.md +245 -0
- package/README.md +277 -0
- package/agents/README.md +14 -0
- package/agents/a11y-reviewer.md +121 -0
- package/agents/component-architect.md +57 -0
- package/agents/design-critic.md +46 -0
- package/agents/token-extractor.md +63 -0
- package/cli/bin/design-ai-mcp.mjs +6 -0
- package/cli/bin/design-ai.mjs +40 -0
- package/cli/commands/audit.mjs +111 -0
- package/cli/commands/check.mjs +226 -0
- package/cli/commands/doctor.mjs +141 -0
- package/cli/commands/examples.mjs +58 -0
- package/cli/commands/help.mjs +271 -0
- package/cli/commands/install.mjs +161 -0
- package/cli/commands/learn.mjs +1871 -0
- package/cli/commands/list.mjs +143 -0
- package/cli/commands/mcp.mjs +27 -0
- package/cli/commands/pack.mjs +211 -0
- package/cli/commands/prompt.mjs +199 -0
- package/cli/commands/route.mjs +247 -0
- package/cli/commands/search.mjs +60 -0
- package/cli/commands/show.mjs +52 -0
- package/cli/commands/site.mjs +558 -0
- package/cli/commands/status.mjs +161 -0
- package/cli/commands/uninstall.mjs +119 -0
- package/cli/commands/update.mjs +184 -0
- package/cli/commands/version.mjs +94 -0
- package/cli/commands/workspace.mjs +176 -0
- package/cli/lib/brief.mjs +52 -0
- package/cli/lib/check.mjs +642 -0
- package/cli/lib/dispatch.mjs +109 -0
- package/cli/lib/doctor.mjs +505 -0
- package/cli/lib/examples.mjs +258 -0
- package/cli/lib/exec.mjs +63 -0
- package/cli/lib/help-flags.mjs +5 -0
- package/cli/lib/learn.mjs +3694 -0
- package/cli/lib/log.mjs +47 -0
- package/cli/lib/mcp-server.mjs +426 -0
- package/cli/lib/output.mjs +101 -0
- package/cli/lib/pack.mjs +599 -0
- package/cli/lib/paths.mjs +63 -0
- package/cli/lib/prompt.mjs +603 -0
- package/cli/lib/route.mjs +740 -0
- package/cli/lib/search.mjs +158 -0
- package/cli/lib/show.mjs +161 -0
- package/cli/lib/signals.mjs +2337 -0
- package/cli/lib/site.mjs +6617 -0
- package/cli/lib/skill-proposals.mjs +2046 -0
- package/cli/lib/suggest.mjs +66 -0
- package/cli/lib/workspace.mjs +1056 -0
- package/commands/README.md +25 -0
- package/commands/component-spec.md +34 -0
- package/commands/conversational.md +44 -0
- package/commands/design-from-brief.md +141 -0
- package/commands/design-review.md +62 -0
- package/commands/document-from-brief.md +47 -0
- package/commands/extract-tokens.md +38 -0
- package/commands/game-ui.md +40 -0
- package/commands/illustration.md +37 -0
- package/commands/iterate.md +167 -0
- package/commands/motion-design.md +54 -0
- package/commands/palette-from-brand.md +50 -0
- package/commands/print.md +49 -0
- package/commands/slide-deck.md +46 -0
- package/commands/spatial.md +47 -0
- package/commands/stability-review.md +74 -0
- package/commands/video.md +42 -0
- package/commands/website-improvement.md +77 -0
- package/docs/AGENT-DEVELOPMENT.md +658 -0
- package/docs/AI-LEARNING.md +429 -0
- package/docs/AIDER-INTEGRATION.md +224 -0
- package/docs/ARCHITECTURE.ko.md +183 -0
- package/docs/ARCHITECTURE.md +105 -0
- package/docs/CODEX-INTEGRATION.md +311 -0
- package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
- package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
- package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
- package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
- package/docs/CONTRIBUTING.ko.md +203 -0
- package/docs/CONTRIBUTING.md +242 -0
- package/docs/CURSOR-INTEGRATION.md +220 -0
- package/docs/DISTRIBUTION.ko.md +248 -0
- package/docs/DISTRIBUTION.md +253 -0
- package/docs/DOGFOOD-FINDINGS.md +180 -0
- package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
- package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
- package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
- package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
- package/docs/FIGMA-INTEGRATION.md +222 -0
- package/docs/MCP-INTEGRATION.md +243 -0
- package/docs/MIGRATION-v4.md +121 -0
- package/docs/PLUGIN-PACKAGING.md +240 -0
- package/docs/PRODUCT-READINESS.md +66 -0
- package/docs/QUICKSTART.ko.md +178 -0
- package/docs/QUICKSTART.md +179 -0
- package/docs/RELEASE-CHECKLIST.md +292 -0
- package/docs/ROADMAP.md +19495 -0
- package/docs/SESSION-LOG.md +940 -0
- package/docs/TOKEN-SYNC.md +237 -0
- package/docs/USING.ko.md +206 -0
- package/docs/USING.md +218 -0
- package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
- package/docs/WEBSITE-IMPROVEMENT.md +89 -0
- package/docs/announcements/README.md +56 -0
- package/docs/announcements/dev-to-korea.md +206 -0
- package/docs/announcements/hashnode-post.ko.md +232 -0
- package/docs/announcements/okky-post.ko.md +158 -0
- package/docs/announcements/press-kit.md +101 -0
- package/docs/announcements/reddit-r-korea.md +196 -0
- package/docs/announcements/show-hn.md +114 -0
- package/docs/announcements/twitter-thread.md +255 -0
- package/docs/external-status.md +34 -0
- package/docs/integrations/aider-walkthrough.ko.md +275 -0
- package/docs/integrations/aider-walkthrough.md +274 -0
- package/docs/integrations/codex-walkthrough.ko.md +297 -0
- package/docs/integrations/codex-walkthrough.md +297 -0
- package/docs/integrations/cursor-walkthrough.ko.md +281 -0
- package/docs/integrations/cursor-walkthrough.md +284 -0
- package/docs/integrations/design-ai-mcp-server.md +169 -0
- package/docs/integrations/figma-mcp.md +149 -0
- package/docs/integrations/github-mcp.md +178 -0
- package/docs/integrations/linear-mcp.md +215 -0
- package/docs/integrations/notion-mcp.md +174 -0
- package/docs/integrations/sdk-walkthrough.ko.md +375 -0
- package/docs/integrations/sdk-walkthrough.md +375 -0
- package/docs/integrations/slack-mcp.md +208 -0
- package/docs/integrations/vscode-walkthrough.ko.md +202 -0
- package/docs/integrations/vscode-walkthrough.md +205 -0
- package/docs/requirements.txt +16 -0
- package/docs/site-overrides/extra.css +83 -0
- package/docs/site-overrides/favicon.svg +4 -0
- package/docs/site-overrides/logo.svg +10 -0
- package/docs/site-overrides/main.html +18 -0
- package/docs/website-console/app.js +2540 -0
- package/docs/website-console/index.html +24 -0
- package/docs/website-console/styles.css +975 -0
- package/examples/README.md +252 -0
- package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
- package/examples/component-accordion-actions.md +153 -0
- package/examples/component-accordion-details.md +147 -0
- package/examples/component-accordion-summary.md +180 -0
- package/examples/component-accordion.md +229 -0
- package/examples/component-account-card.md +284 -0
- package/examples/component-address-input.md +260 -0
- package/examples/component-affix.md +190 -0
- package/examples/component-alert-dialog.md +210 -0
- package/examples/component-alert-title.md +77 -0
- package/examples/component-alert.md +192 -0
- package/examples/component-amount-input.md +278 -0
- package/examples/component-anchor.md +198 -0
- package/examples/component-app-bar.md +249 -0
- package/examples/component-aspect-ratio.md +156 -0
- package/examples/component-auto-complete.md +199 -0
- package/examples/component-avatar-group.md +170 -0
- package/examples/component-avatar.md +191 -0
- package/examples/component-back-top.md +123 -0
- package/examples/component-backdrop.md +148 -0
- package/examples/component-badge.md +181 -0
- package/examples/component-banner.md +237 -0
- package/examples/component-biometric-gate.md +281 -0
- package/examples/component-blockquote.md +153 -0
- package/examples/component-border-beam.md +207 -0
- package/examples/component-bottom-navigation.md +226 -0
- package/examples/component-box.md +112 -0
- package/examples/component-breadcrumb.md +222 -0
- package/examples/component-button-base.md +190 -0
- package/examples/component-button-group.md +117 -0
- package/examples/component-button.md +213 -0
- package/examples/component-calendar.md +280 -0
- package/examples/component-callout.md +131 -0
- package/examples/component-card-actions.md +101 -0
- package/examples/component-card-content.md +90 -0
- package/examples/component-card-header.md +122 -0
- package/examples/component-card-media.md +79 -0
- package/examples/component-card.md +233 -0
- package/examples/component-carousel.md +266 -0
- package/examples/component-cascader.md +135 -0
- package/examples/component-category-picker.md +271 -0
- package/examples/component-chart.md +237 -0
- package/examples/component-chat-interface.md +399 -0
- package/examples/component-checkbox.md +149 -0
- package/examples/component-click-away-listener.md +87 -0
- package/examples/component-code.md +213 -0
- package/examples/component-collapsible.md +219 -0
- package/examples/component-color-picker.md +110 -0
- package/examples/component-combobox.md +267 -0
- package/examples/component-command.md +299 -0
- package/examples/component-config-provider.md +190 -0
- package/examples/component-context-menu.md +179 -0
- package/examples/component-css-baseline.md +148 -0
- package/examples/component-date-picker.md +249 -0
- package/examples/component-descriptions.md +242 -0
- package/examples/component-dialog-actions.md +111 -0
- package/examples/component-dialog-content-text.md +76 -0
- package/examples/component-dialog-content.md +105 -0
- package/examples/component-dialog-title.md +104 -0
- package/examples/component-dialog.md +176 -0
- package/examples/component-divider.md +182 -0
- package/examples/component-doc-page.md +217 -0
- package/examples/component-drawer.md +257 -0
- package/examples/component-dropdown.md +220 -0
- package/examples/component-email-layout.md +253 -0
- package/examples/component-empty-state.md +269 -0
- package/examples/component-empty.md +172 -0
- package/examples/component-fade.md +87 -0
- package/examples/component-feature-grid.md +201 -0
- package/examples/component-field.md +266 -0
- package/examples/component-filled-input.md +114 -0
- package/examples/component-flex.md +117 -0
- package/examples/component-float-button.md +214 -0
- package/examples/component-form-control-label.md +134 -0
- package/examples/component-form-control.md +113 -0
- package/examples/component-form-controls.md +251 -0
- package/examples/component-form-group.md +86 -0
- package/examples/component-form-helper-text.md +95 -0
- package/examples/component-form-label.md +98 -0
- package/examples/component-form.md +291 -0
- package/examples/component-game-hud.md +362 -0
- package/examples/component-game-menu.md +327 -0
- package/examples/component-grid.md +140 -0
- package/examples/component-grow.md +79 -0
- package/examples/component-hero-block.md +252 -0
- package/examples/component-hover-card.md +211 -0
- package/examples/component-icon-button.md +142 -0
- package/examples/component-icon.md +102 -0
- package/examples/component-illustration.md +280 -0
- package/examples/component-image-list.md +107 -0
- package/examples/component-image.md +282 -0
- package/examples/component-input-adornment.md +101 -0
- package/examples/component-input-base.md +134 -0
- package/examples/component-input-number.md +141 -0
- package/examples/component-input-otp.md +271 -0
- package/examples/component-input.md +213 -0
- package/examples/component-item.md +243 -0
- package/examples/component-kbd.md +197 -0
- package/examples/component-krw-amount.md +219 -0
- package/examples/component-label.md +118 -0
- package/examples/component-layout.md +217 -0
- package/examples/component-link.md +223 -0
- package/examples/component-list-item-avatar.md +72 -0
- package/examples/component-list-item-button.md +139 -0
- package/examples/component-list-item-icon.md +82 -0
- package/examples/component-list-item-text.md +98 -0
- package/examples/component-list-item.md +116 -0
- package/examples/component-list-subheader.md +70 -0
- package/examples/component-list.md +198 -0
- package/examples/component-loading-button.md +125 -0
- package/examples/component-loading-sequence.md +254 -0
- package/examples/component-lottie-player.md +279 -0
- package/examples/component-masonry.md +191 -0
- package/examples/component-mentions.md +189 -0
- package/examples/component-menu-item.md +102 -0
- package/examples/component-menu-list.md +98 -0
- package/examples/component-menu.md +139 -0
- package/examples/component-menubar.md +259 -0
- package/examples/component-message.md +162 -0
- package/examples/component-mobile-stepper.md +155 -0
- package/examples/component-modal.md +220 -0
- package/examples/component-navigation-menu.md +295 -0
- package/examples/component-notification.md +166 -0
- package/examples/component-otp-countdown.md +245 -0
- package/examples/component-outlined-input.md +145 -0
- package/examples/component-page-transition.md +281 -0
- package/examples/component-pagination.md +226 -0
- package/examples/component-paper.md +199 -0
- package/examples/component-pass-auth.md +265 -0
- package/examples/component-payment-brand-button.md +253 -0
- package/examples/component-payment-method-selector.md +272 -0
- package/examples/component-payment-receipt.md +277 -0
- package/examples/component-popconfirm.md +144 -0
- package/examples/component-popover.md +239 -0
- package/examples/component-popper.md +129 -0
- package/examples/component-pricing-cards.md +247 -0
- package/examples/component-progress.md +195 -0
- package/examples/component-qr-code.md +201 -0
- package/examples/component-radio.md +167 -0
- package/examples/component-rate.md +202 -0
- package/examples/component-resizable.md +163 -0
- package/examples/component-result.md +270 -0
- package/examples/component-scroll-area.md +199 -0
- package/examples/component-scroll-reveal.md +320 -0
- package/examples/component-segmented.md +178 -0
- package/examples/component-select.md +258 -0
- package/examples/component-separator.md +177 -0
- package/examples/component-sheet.md +277 -0
- package/examples/component-sidebar.md +257 -0
- package/examples/component-skeleton.md +178 -0
- package/examples/component-slide.md +89 -0
- package/examples/component-slider.md +208 -0
- package/examples/component-snackbar-content.md +92 -0
- package/examples/component-snackbar.md +121 -0
- package/examples/component-sonner.md +165 -0
- package/examples/component-space.md +125 -0
- package/examples/component-spatial-locomotion.md +373 -0
- package/examples/component-spatial-panel.md +330 -0
- package/examples/component-speed-dial-action.md +78 -0
- package/examples/component-speed-dial.md +177 -0
- package/examples/component-spin.md +173 -0
- package/examples/component-spinner.md +204 -0
- package/examples/component-splitter.md +210 -0
- package/examples/component-stack.md +130 -0
- package/examples/component-statistic.md +282 -0
- package/examples/component-step-button.md +157 -0
- package/examples/component-step-connector.md +157 -0
- package/examples/component-step-content.md +121 -0
- package/examples/component-step-icon.md +115 -0
- package/examples/component-step-label.md +101 -0
- package/examples/component-step.md +84 -0
- package/examples/component-steps.md +264 -0
- package/examples/component-stock-chart.md +251 -0
- package/examples/component-swipeable-drawer.md +149 -0
- package/examples/component-switch.md +99 -0
- package/examples/component-tab-scroll-button.md +180 -0
- package/examples/component-tab.md +120 -0
- package/examples/component-table-body.md +82 -0
- package/examples/component-table-cell.md +118 -0
- package/examples/component-table-container.md +75 -0
- package/examples/component-table-footer.md +72 -0
- package/examples/component-table-head.md +78 -0
- package/examples/component-table-pagination.md +137 -0
- package/examples/component-table-row.md +113 -0
- package/examples/component-table-sort-label.md +109 -0
- package/examples/component-table.md +202 -0
- package/examples/component-tabs.md +184 -0
- package/examples/component-tag-badge.md +309 -0
- package/examples/component-tag.md +102 -0
- package/examples/component-testimonial-carousel.md +218 -0
- package/examples/component-textarea-autosize.md +114 -0
- package/examples/component-textarea.md +173 -0
- package/examples/component-time-picker.md +205 -0
- package/examples/component-timeline.md +170 -0
- package/examples/component-toast.md +224 -0
- package/examples/component-toggle-button.md +129 -0
- package/examples/component-toggle.md +220 -0
- package/examples/component-toolbar.md +104 -0
- package/examples/component-tooltip.md +178 -0
- package/examples/component-tour.md +176 -0
- package/examples/component-transaction-list-item.md +243 -0
- package/examples/component-transfer.md +156 -0
- package/examples/component-tree-select.md +202 -0
- package/examples/component-tree.md +297 -0
- package/examples/component-typography.md +215 -0
- package/examples/component-upload.md +295 -0
- package/examples/component-video-hero.md +409 -0
- package/examples/component-video-player.md +340 -0
- package/examples/component-voice-input.md +408 -0
- package/examples/component-watermark.md +217 -0
- package/examples/component-zoom.md +92 -0
- package/examples/doc-explanation-example.md +196 -0
- package/examples/doc-how-to-example.md +205 -0
- package/examples/doc-tutorial-example.md +162 -0
- package/examples/dogfood-korean-fintech-system.md +433 -0
- package/examples/email-transactional-example.md +259 -0
- package/examples/palette-saas-violet.md +235 -0
- package/examples/print-business-card-spec.md +205 -0
- package/examples/print-packaging-spec.md +285 -0
- package/examples/report-example.md +228 -0
- package/examples/slide-deck-example.md +237 -0
- package/examples/website-improvement-report.md +128 -0
- package/examples/website-improvement-workspace.json +126 -0
- package/install.sh +189 -0
- package/knowledge/COVERAGE.md +740 -0
- package/knowledge/PRINCIPLES.md +108 -0
- package/knowledge/a11y/contrast.md +70 -0
- package/knowledge/a11y/keyboard-and-focus.md +108 -0
- package/knowledge/colors/color-theory.md +90 -0
- package/knowledge/colors/mui-palette-structure.md +105 -0
- package/knowledge/colors/palettes-by-product-type.md +876 -0
- package/knowledge/components/INDEX.md +231 -0
- package/knowledge/components/index.json +1470 -0
- package/knowledge/components/shadcn-registry.md +159 -0
- package/knowledge/conversational/ai-chat-interfaces.md +323 -0
- package/knowledge/conversational/chatbot-design.md +312 -0
- package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
- package/knowledge/conversational/korean-voice-conventions.md +281 -0
- package/knowledge/conversational/voice-ui-patterns.md +297 -0
- package/knowledge/design-tokens/ant-design.md +124 -0
- package/knowledge/design-tokens/material-3.md +235 -0
- package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
- package/knowledge/design-tokens/tailwind-v4.md +284 -0
- package/knowledge/game-ui/game-accessibility.md +317 -0
- package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
- package/knowledge/game-ui/hud-design.md +324 -0
- package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
- package/knowledge/game-ui/menu-systems.md +388 -0
- package/knowledge/i18n/korean-app-store-visual.md +223 -0
- package/knowledge/i18n/korean-document-style.md +301 -0
- package/knowledge/i18n/korean-payments.md +211 -0
- package/knowledge/i18n/korean-product-conventions.md +96 -0
- package/knowledge/i18n/korean-publishing.md +139 -0
- package/knowledge/i18n/korean-typography.md +123 -0
- package/knowledge/icons/curated-sets.md +225 -0
- package/knowledge/illustration/hero-illustrations.md +234 -0
- package/knowledge/illustration/illustration-systems.md +221 -0
- package/knowledge/illustration/mascot-design.md +208 -0
- package/knowledge/illustration/spot-illustrations.md +246 -0
- package/knowledge/illustration/svg-optimization.md +308 -0
- package/knowledge/layout/spacing-and-grid.md +119 -0
- package/knowledge/motion/app-loading-sequences.md +277 -0
- package/knowledge/motion/choreography-depth.md +297 -0
- package/knowledge/motion/marketing-motion.md +223 -0
- package/knowledge/motion/micro-interactions.md +266 -0
- package/knowledge/motion/motion-tools.md +281 -0
- package/knowledge/motion/principles.md +126 -0
- package/knowledge/patterns/auth-flow-design.md +316 -0
- package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
- package/knowledge/patterns/brand-identity.md +238 -0
- package/knowledge/patterns/brand-references.md +97 -0
- package/knowledge/patterns/chart-color-encoding.md +269 -0
- package/knowledge/patterns/chart-types.md +344 -0
- package/knowledge/patterns/dashboard-composition.md +299 -0
- package/knowledge/patterns/design-system-qa.md +356 -0
- package/knowledge/patterns/document-typography.md +248 -0
- package/knowledge/patterns/email-design.md +338 -0
- package/knowledge/patterns/empty-states.md +263 -0
- package/knowledge/patterns/error-states.md +318 -0
- package/knowledge/patterns/form-design.md +237 -0
- package/knowledge/patterns/information-architecture.md +341 -0
- package/knowledge/patterns/landing-hero-design.md +283 -0
- package/knowledge/patterns/landing-page-patterns.md +681 -0
- package/knowledge/patterns/list-and-feed.md +371 -0
- package/knowledge/patterns/mobile-navigation.md +278 -0
- package/knowledge/patterns/money-and-amount.md +301 -0
- package/knowledge/patterns/onboarding.md +300 -0
- package/knowledge/patterns/pricing-page-design.md +261 -0
- package/knowledge/patterns/realtime-data.md +280 -0
- package/knowledge/patterns/report-design.md +330 -0
- package/knowledge/patterns/search-ux.md +373 -0
- package/knowledge/patterns/settings-page.md +325 -0
- package/knowledge/patterns/slide-deck-design.md +316 -0
- package/knowledge/patterns/styles-catalog.md +2599 -0
- package/knowledge/patterns/technical-writing.md +306 -0
- package/knowledge/patterns/ui-reasoning.md +1853 -0
- package/knowledge/patterns/ux-guidelines.md +1454 -0
- package/knowledge/platforms/react-native.md +395 -0
- package/knowledge/print/brochures-and-flyers.md +276 -0
- package/knowledge/print/korean-print-conventions.md +284 -0
- package/knowledge/print/packaging.md +321 -0
- package/knowledge/print/print-fundamentals.md +238 -0
- package/knowledge/print/signage-and-posters.md +235 -0
- package/knowledge/print/stationery.md +262 -0
- package/knowledge/spatial/ar-patterns.md +253 -0
- package/knowledge/spatial/comfort-and-accessibility.md +245 -0
- package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
- package/knowledge/spatial/spatial-ui-elements.md +343 -0
- package/knowledge/spatial/vr-patterns.md +302 -0
- package/knowledge/typography/font-pairings.md +332 -0
- package/knowledge/typography/mui-type-scale.md +57 -0
- package/knowledge/typography/type-scale-fundamentals.md +105 -0
- package/knowledge/video/in-product-video.md +277 -0
- package/knowledge/video/korean-video-conventions.md +247 -0
- package/knowledge/video/marketing-video.md +258 -0
- package/knowledge/video/social-and-short-form.md +257 -0
- package/knowledge/video/video-fundamentals.md +296 -0
- package/package.json +106 -0
- package/skills/README.md +39 -0
- package/skills/color-palette/PLAYBOOK.md +175 -0
- package/skills/color-palette/SKILL.md +6 -0
- package/skills/color-palette/TEMPLATE.md +103 -0
- package/skills/component-spec-writer/PLAYBOOK.md +169 -0
- package/skills/component-spec-writer/SKILL.md +6 -0
- package/skills/component-spec-writer/TEMPLATE.md +115 -0
- package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
- package/skills/conversational-ui-designer/SKILL.md +6 -0
- package/skills/design-broadcast/PLAYBOOK.md +146 -0
- package/skills/design-broadcast/SKILL.md +6 -0
- package/skills/design-critique/PLAYBOOK.md +137 -0
- package/skills/design-critique/SKILL.md +6 -0
- package/skills/design-pr-review/PLAYBOOK.md +171 -0
- package/skills/design-pr-review/SKILL.md +6 -0
- package/skills/design-system-builder/PLAYBOOK.md +218 -0
- package/skills/design-system-builder/SKILL.md +6 -0
- package/skills/design-system-qa/PLAYBOOK.md +163 -0
- package/skills/design-system-qa/SKILL.md +6 -0
- package/skills/document-author/PLAYBOOK.md +167 -0
- package/skills/document-author/SKILL.md +6 -0
- package/skills/figma-token-sync/PLAYBOOK.md +149 -0
- package/skills/figma-token-sync/SKILL.md +6 -0
- package/skills/game-ui-designer/PLAYBOOK.md +209 -0
- package/skills/game-ui-designer/SKILL.md +6 -0
- package/skills/handoff-spec/PLAYBOOK.md +170 -0
- package/skills/handoff-spec/SKILL.md +6 -0
- package/skills/illustration-designer/PLAYBOOK.md +166 -0
- package/skills/illustration-designer/SKILL.md +6 -0
- package/skills/motion-designer/PLAYBOOK.md +223 -0
- package/skills/motion-designer/SKILL.md +6 -0
- package/skills/print-designer/PLAYBOOK.md +209 -0
- package/skills/print-designer/SKILL.md +6 -0
- package/skills/slide-deck-author/PLAYBOOK.md +198 -0
- package/skills/slide-deck-author/SKILL.md +6 -0
- package/skills/spatial-designer/PLAYBOOK.md +238 -0
- package/skills/spatial-designer/SKILL.md +6 -0
- package/skills/ux-audit/PLAYBOOK.md +142 -0
- package/skills/ux-audit/SKILL.md +6 -0
- package/skills/video-designer/PLAYBOOK.md +240 -0
- package/skills/video-designer/SKILL.md +6 -0
- package/skills/website-improvement/PLAYBOOK.md +118 -0
- package/skills/website-improvement/SKILL.md +6 -0
- package/skills/website-improvement/TEMPLATE.md +103 -0
- package/tools/audit/changelog-generate.py +176 -0
- package/tools/audit/check-coverage.py +483 -0
- package/tools/audit/doctor_assertions.py +256 -0
- package/tools/audit/example-qa.py +108 -0
- package/tools/audit/frontmatter-check.py +199 -0
- package/tools/audit/integration-check.py +95 -0
- package/tools/audit/korean-copy-check.py +161 -0
- package/tools/audit/link-check.py +146 -0
- package/tools/audit/local-ci.py +558 -0
- package/tools/audit/package-contents.py +723 -0
- package/tools/audit/package-smoke.py +22443 -0
- package/tools/audit/raw-hex-check.py +252 -0
- package/tools/audit/registry-smoke.py +8188 -0
- package/tools/audit/release-metadata.py +9832 -0
- package/tools/audit/run-all.py +351 -0
- package/tools/audit/smoke_assertions.py +12742 -0
- package/tools/audit/stability-review.py +332 -0
- package/tools/audit/stale-check.py +156 -0
- package/tools/migrations/add-version-frontmatter.py +132 -0
- package/tools/migrations/bump-last-updated.py +131 -0
- package/tools/migrations/promote-stability.py +172 -0
- package/tools/preview/README.md +58 -0
- 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
|