@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,280 @@
|
|
|
1
|
+
# `Calendar` (full month view) — spec
|
|
2
|
+
|
|
3
|
+
> Citing Ant Design `Calendar`, MUI (no dedicated — `DateCalendar` from x-date-pickers is similar), shadcn-ui `calendar` (react-day-picker)
|
|
4
|
+
>
|
|
5
|
+
> Different from `DatePicker` ([`component-date-picker.md`](component-date-picker.md)) — Calendar is a **full-page month view**; DatePicker is a popover for picking a date.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
A full-month or full-year calendar view used as a primary UI surface — for scheduling apps, event listings, attendance trackers, or any view where the calendar IS the page.
|
|
10
|
+
|
|
11
|
+
## When Calendar vs DatePicker
|
|
12
|
+
|
|
13
|
+
| Pattern | Use |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| **Calendar** (this spec) | Calendar is the primary content of the screen. User browses dates, views events, clicks days. |
|
|
16
|
+
| **DatePicker** | User picks a date as form input. Calendar appears in a popover. |
|
|
17
|
+
|
|
18
|
+
If your screen's main job is "view this month", use Calendar. If picking a date is incidental, use DatePicker.
|
|
19
|
+
|
|
20
|
+
## Anatomy
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
┌────────────────────────────────────────────────────────────┐
|
|
24
|
+
│ ◀ 2026년 5월 ▶ [월] [주] [년] [+ 이벤트] │ ← header: nav + view + actions
|
|
25
|
+
├────────────────────────────────────────────────────────────┤
|
|
26
|
+
│ 일 월 화 수 목 금 토 │ ← weekday headers
|
|
27
|
+
├────────────────────────────────────────────────────────────┤
|
|
28
|
+
│ 1 2 │
|
|
29
|
+
│ ● [event chip] │ ← cell: number + indicator + events
|
|
30
|
+
│ 3 4 5 6 7 8 9 │
|
|
31
|
+
│ ● │
|
|
32
|
+
│ 10 11 12 13 14 15 16 │
|
|
33
|
+
│ ... │
|
|
34
|
+
└────────────────────────────────────────────────────────────┘
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
| Slot | Required | Notes |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| Header | yes | Month nav, view toggle, "today" button |
|
|
40
|
+
| Weekday row | yes | 일–토 (or Sun–Sat) |
|
|
41
|
+
| Date cells | yes | One per day; shows day number + events |
|
|
42
|
+
| Event indicators | optional | Dots, chips, or full event blocks |
|
|
43
|
+
| Today highlight | yes | Current date visually marked |
|
|
44
|
+
| Selected highlight | when applicable | Currently-selected date |
|
|
45
|
+
|
|
46
|
+
## API
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
<Calendar
|
|
50
|
+
value={selectedDate}
|
|
51
|
+
onValueChange={setSelectedDate}
|
|
52
|
+
view="month"
|
|
53
|
+
events={events}
|
|
54
|
+
renderCell={(date) => <CustomCellContent date={date} />}
|
|
55
|
+
onDateClick={(date) => openDayDetail(date)}
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
| Prop | Type | Default | Description |
|
|
60
|
+
| --- | --- | --- | --- |
|
|
61
|
+
| `value` | `Date` | `today()` | Selected / focused date |
|
|
62
|
+
| `onValueChange` | `(date: Date) => void` | — | |
|
|
63
|
+
| `view` | `"month" \| "week" \| "year" \| "day"` | `"month"` | Time scale |
|
|
64
|
+
| `onViewChange` | `(view) => void` | — | |
|
|
65
|
+
| `events` | `Event[]` | `[]` | Events to render in cells |
|
|
66
|
+
| `renderCell` | `(date) => ReactNode` | default | Custom cell rendering |
|
|
67
|
+
| `onDateClick` | `(date) => void` | — | Cell click |
|
|
68
|
+
| `onEventClick` | `(event) => void` | — | Event chip click |
|
|
69
|
+
| `weekStartsOn` | `0..6` | `0` (Sun for KR/US) | |
|
|
70
|
+
| `locale` | `string` | `"ko-KR"` | |
|
|
71
|
+
| `holidays` | `{ date: Date, name: string }[]` | `[]` | Korean 공휴일, etc. |
|
|
72
|
+
| `disabledDates` | `(date) => boolean` | — | |
|
|
73
|
+
| `minDate` / `maxDate` | `Date` | — | |
|
|
74
|
+
| `density` | `"compact" \| "comfortable"` | `"comfortable"` | Cell height |
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
type Event = {
|
|
78
|
+
id: string;
|
|
79
|
+
date: Date;
|
|
80
|
+
endDate?: Date; // For multi-day events
|
|
81
|
+
title: string;
|
|
82
|
+
color?: string;
|
|
83
|
+
data?: unknown;
|
|
84
|
+
};
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Views
|
|
88
|
+
|
|
89
|
+
### Month view (default)
|
|
90
|
+
|
|
91
|
+
7 columns × 5–6 rows. Each cell shows:
|
|
92
|
+
- Day number
|
|
93
|
+
- Events as small chips/dots (max 2–3 visible; "+N more" for overflow)
|
|
94
|
+
- Today highlighted
|
|
95
|
+
- Other-month days muted
|
|
96
|
+
|
|
97
|
+
### Week view
|
|
98
|
+
|
|
99
|
+
7 columns × 1 column of hours. Used for hour-by-hour schedule (calendar apps).
|
|
100
|
+
|
|
101
|
+
### Day view
|
|
102
|
+
|
|
103
|
+
Single column with hour rows. Detail view for one day.
|
|
104
|
+
|
|
105
|
+
### Year view
|
|
106
|
+
|
|
107
|
+
12 month thumbnails. Click any month to drill into Month view.
|
|
108
|
+
|
|
109
|
+
## Cell rendering — events
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
┌──────────────┐
|
|
113
|
+
│ 7 ● │ ← day number + indicator
|
|
114
|
+
│ │
|
|
115
|
+
│ 10:00 회의 │ ← event chips (max 2-3)
|
|
116
|
+
│ 14:00 점심 │
|
|
117
|
+
│ + 2 more │ ← overflow
|
|
118
|
+
└──────────────┘
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
| Indicator pattern | Use |
|
|
122
|
+
| --- | --- |
|
|
123
|
+
| Single dot | "Has events" — minimal, used in compact view |
|
|
124
|
+
| Color dots | "Multiple event types" — one per event |
|
|
125
|
+
| Event chips | Short title visible — full event titles, truncated |
|
|
126
|
+
|
|
127
|
+
For compact density (mobile): dots. For comfortable density (desktop): chips.
|
|
128
|
+
|
|
129
|
+
## States — per cell
|
|
130
|
+
|
|
131
|
+
| State | Visual |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| Default | Day number, events |
|
|
134
|
+
| Today | Bold day number, light bg or ring |
|
|
135
|
+
| Selected | Filled bg `--color-primary-default`, white number |
|
|
136
|
+
| Hover | Bg `--color-bg-subtle` |
|
|
137
|
+
| Other-month | Muted day number |
|
|
138
|
+
| Disabled | No events, muted, no click |
|
|
139
|
+
| Holiday | Day number in red (Korean convention for 공휴일) |
|
|
140
|
+
| Weekend | Day number subtly different (often blue for Saturday, red for Sunday in KR) |
|
|
141
|
+
|
|
142
|
+
### Korean holiday/weekend conventions
|
|
143
|
+
|
|
144
|
+
- 일요일 (Sunday): red
|
|
145
|
+
- 토요일 (Saturday): blue
|
|
146
|
+
- 공휴일 (national holidays): red
|
|
147
|
+
- 평일 (weekdays): default text color
|
|
148
|
+
|
|
149
|
+
```css
|
|
150
|
+
.calendar-cell[data-day="0"] { color: var(--color-error); } /* Sunday */
|
|
151
|
+
.calendar-cell[data-day="6"] { color: var(--color-info); } /* Saturday */
|
|
152
|
+
.calendar-cell[data-holiday="true"] { color: var(--color-error); }
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Sizes / density
|
|
156
|
+
|
|
157
|
+
| Density | Cell min-height | Padding | Use |
|
|
158
|
+
| --- | --- | --- | --- |
|
|
159
|
+
| `compact` | 60px | 4px | Mobile, dense schedule |
|
|
160
|
+
| `comfortable` (default) | 100px | 8px | Standard desktop |
|
|
161
|
+
|
|
162
|
+
For event-heavy calendars (Google Calendar style): cells expand to fit events with internal scroll.
|
|
163
|
+
|
|
164
|
+
## Tokens consumed
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
--color-bg-default
|
|
168
|
+
--color-bg-elevated (cell bg)
|
|
169
|
+
--color-bg-subtle (hover)
|
|
170
|
+
--color-primary-default (today highlight, selected)
|
|
171
|
+
--color-primary-subtle-bg
|
|
172
|
+
--color-on-primary
|
|
173
|
+
--color-text-primary
|
|
174
|
+
--color-text-secondary (other-month)
|
|
175
|
+
--color-text-tertiary (weekday headers)
|
|
176
|
+
--color-error (Sunday, holidays)
|
|
177
|
+
--color-info (Saturday)
|
|
178
|
+
--color-border-default
|
|
179
|
+
--space-xs, --space-sm
|
|
180
|
+
--radius-md
|
|
181
|
+
--font-size-sm, --font-size-base
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Accessibility — WAI-ARIA Calendar pattern
|
|
185
|
+
|
|
186
|
+
- Container: `role="grid"`, `aria-label="달력 2026년 5월"`.
|
|
187
|
+
- Weekday headers: `role="columnheader"`, `aria-label` for the full day name.
|
|
188
|
+
- Each row: `role="row"`.
|
|
189
|
+
- Each cell: `role="gridcell"`, `aria-selected`, `aria-current="date"` for today.
|
|
190
|
+
- Disabled: `aria-disabled="true"`.
|
|
191
|
+
|
|
192
|
+
### Keyboard
|
|
193
|
+
|
|
194
|
+
| Key | Behavior |
|
|
195
|
+
| --- | --- |
|
|
196
|
+
| `Tab` | Reach grid (single tab stop into the cells) |
|
|
197
|
+
| `←` / `→` | Move 1 day |
|
|
198
|
+
| `↑` / `↓` | Move 1 week |
|
|
199
|
+
| `PageUp` / `PageDown` | Previous / next month |
|
|
200
|
+
| `Shift+PageUp/Down` | Previous / next year |
|
|
201
|
+
| `Home` / `End` | First / last day of week |
|
|
202
|
+
| `Enter` / `Space` | Select / activate cell |
|
|
203
|
+
|
|
204
|
+
This is the WAI-ARIA APG datepicker pattern. Same as DatePicker.
|
|
205
|
+
|
|
206
|
+
### Screen reader
|
|
207
|
+
|
|
208
|
+
- Announce date on focus change: "May 7, 2026, Wednesday"
|
|
209
|
+
- Announce events: "7 events on this day" or names if few
|
|
210
|
+
- Announce holidays: "Buddha's Birthday"
|
|
211
|
+
|
|
212
|
+
## Code example
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
function MonthlyScheduleScreen() {
|
|
216
|
+
const [selected, setSelected] = useState(new Date());
|
|
217
|
+
const events = useEvents(selected);
|
|
218
|
+
|
|
219
|
+
return (
|
|
220
|
+
<div>
|
|
221
|
+
<Calendar
|
|
222
|
+
value={selected}
|
|
223
|
+
onValueChange={setSelected}
|
|
224
|
+
events={events}
|
|
225
|
+
holidays={koreanHolidays}
|
|
226
|
+
onDateClick={(date) => openDayDetail(date)}
|
|
227
|
+
onEventClick={(event) => openEventDetail(event)}
|
|
228
|
+
renderCell={(date) => (
|
|
229
|
+
<DefaultCell
|
|
230
|
+
date={date}
|
|
231
|
+
isToday={isToday(date)}
|
|
232
|
+
isHoliday={isHoliday(date)}
|
|
233
|
+
events={events.filter(e => isSameDay(e.date, date))}
|
|
234
|
+
/>
|
|
235
|
+
)}
|
|
236
|
+
/>
|
|
237
|
+
</div>
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Edge cases
|
|
243
|
+
|
|
244
|
+
- **Many events on a single day**: render first 2–3 + "+N more". Click day to open day-detail screen.
|
|
245
|
+
- **Multi-day event**: render as a horizontal bar spanning multiple cells (visual challenge — usually a separate library handles).
|
|
246
|
+
- **Cell content overflow**: ellipsis truncation; provide tooltip or detail-on-click.
|
|
247
|
+
- **Daylight saving** (not in Korea): handle correctly; display dates per local TZ.
|
|
248
|
+
- **Korean lunar calendar (음력)**: rare in product UIs. Some apps annotate Korean lunar date in cell (small, secondary).
|
|
249
|
+
- **Year boundary**: December → January transition shows partial rows from both.
|
|
250
|
+
- **Empty month**: render the grid normally; cells just have no events.
|
|
251
|
+
- **Mobile portrait**: month view's 7 columns crunch. Switch to compact density or week view by default.
|
|
252
|
+
|
|
253
|
+
## Don't
|
|
254
|
+
|
|
255
|
+
- Don't render Calendar without events when the screen's purpose is event display. Show empty state instead.
|
|
256
|
+
- Don't shrink cells below readable size. Switch view (week, day) instead.
|
|
257
|
+
- Don't combine 5+ event colors per day. Use neutral chips or fewer event types.
|
|
258
|
+
- Don't auto-redirect to day detail on click — let user opt in via explicit action.
|
|
259
|
+
- Don't use Calendar where DatePicker fits (form input).
|
|
260
|
+
- Don't forget keyboard navigation. Calendar without arrow keys is broken.
|
|
261
|
+
- Don't ship without locale support for the user's date/week conventions.
|
|
262
|
+
|
|
263
|
+
## References
|
|
264
|
+
|
|
265
|
+
- Ant Design: [`refs/ant-design/components/calendar/`](../refs/ant-design/components/calendar/) — `Calendar` with `mode="month" | "year"`, `dateCellRender`, `monthCellRender`. Most exhaustive.
|
|
266
|
+
- MUI: `@mui/x-date-pickers` `DateCalendar` — focused on date selection within a calendar grid; not full-month event-display.
|
|
267
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx) — wraps `react-day-picker`. Use as date selector or full calendar via `mode="default"` + `numberOfMonths`.
|
|
268
|
+
|
|
269
|
+
For event-heavy calendar apps (Google Calendar style), consider:
|
|
270
|
+
- `react-big-calendar` — month/week/day views with events
|
|
271
|
+
- `fullcalendar` — feature-rich, all views
|
|
272
|
+
|
|
273
|
+
This spec covers the **simpler full-month-with-event-indicators** case. For full event-management UIs, layer this with a calendar-specific library.
|
|
274
|
+
|
|
275
|
+
## Cross-reference
|
|
276
|
+
|
|
277
|
+
- [`examples/component-date-picker.md`](component-date-picker.md) — for form-input use
|
|
278
|
+
- [`knowledge/i18n/korean-typography.md`](../knowledge/i18n/korean-typography.md) — Korean date formats
|
|
279
|
+
- [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md) — holiday + weekend color conventions
|
|
280
|
+
- [WAI-ARIA Date Picker pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# `Callout` (info/warning/note in docs) — spec
|
|
2
|
+
|
|
3
|
+
> Doc-specific component. Highlights important asides in long-form content. Distinct from `Alert` (which is for product UI feedback) — Callout is for **documentation prose**.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Marks a passage as important info, warning, tip, or note. Visually distinct from body text but doesn't break reading flow.
|
|
8
|
+
|
|
9
|
+
## When Callout vs Alert vs Blockquote
|
|
10
|
+
|
|
11
|
+
| Use Callout | Use Alert | Use Blockquote |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| Long-form docs | Product UI feedback | Quote from another source |
|
|
14
|
+
| Tip, note, warning, danger inside reading | Real-time notification | Attribution matters |
|
|
15
|
+
|
|
16
|
+
## Anatomy
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
┌──────────────────────────────────────────────────────┐
|
|
20
|
+
│ ℹ Note │ ← icon + label header
|
|
21
|
+
│ │
|
|
22
|
+
│ The body text of the callout. May span multiple │
|
|
23
|
+
│ paragraphs and contain code, lists, links. │
|
|
24
|
+
└──────────────────────────────────────────────────────┘
|
|
25
|
+
subtle bg, accent left-border
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## API
|
|
29
|
+
|
|
30
|
+
```mdx
|
|
31
|
+
<Callout type="note">
|
|
32
|
+
This is an important note.
|
|
33
|
+
</Callout>
|
|
34
|
+
|
|
35
|
+
<Callout type="warning" title="Custom title">
|
|
36
|
+
Be careful — this can lose data.
|
|
37
|
+
</Callout>
|
|
38
|
+
|
|
39
|
+
<Callout type="tip">
|
|
40
|
+
💡 You can also use the keyboard shortcut.
|
|
41
|
+
</Callout>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
| Prop | Type | Default | Description |
|
|
45
|
+
| --- | --- | --- | --- |
|
|
46
|
+
| `type` | `"note" \| "tip" \| "info" \| "warning" \| "danger" \| "success"` | `"note"` | Visual + icon |
|
|
47
|
+
| `title` | `string` | derived from type | Header text (override) |
|
|
48
|
+
| `children` | `ReactNode` | — | Body |
|
|
49
|
+
| `compact` | `boolean` | `false` | Single-line variant |
|
|
50
|
+
|
|
51
|
+
## Type → visual mapping
|
|
52
|
+
|
|
53
|
+
| Type | Icon | Border | Bg tint | Use |
|
|
54
|
+
| --- | --- | --- | --- | --- |
|
|
55
|
+
| `note` | ℹ | `--color-info` | `--color-info-subtle-bg` | Side commentary |
|
|
56
|
+
| `tip` | 💡 | `--color-success` | `--color-success-subtle-bg` | Useful trick / shortcut |
|
|
57
|
+
| `info` | ℹ | `--color-info` | `--color-info-subtle-bg` | Background context |
|
|
58
|
+
| `warning` | ⚠ | `--color-warning` | `--color-warning-subtle-bg` | Pay attention; potentially problematic |
|
|
59
|
+
| `danger` | 🛑 | `--color-error` | `--color-error-subtle-bg` | Will cause harm if ignored |
|
|
60
|
+
| `success` | ✓ | `--color-success` | `--color-success-subtle-bg` | Confirmation / "this worked" |
|
|
61
|
+
|
|
62
|
+
## Tokens consumed
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
--color-info-subtle-bg, --color-info
|
|
66
|
+
--color-warning-subtle-bg, --color-warning
|
|
67
|
+
--color-error-subtle-bg, --color-error
|
|
68
|
+
--color-success-subtle-bg, --color-success
|
|
69
|
+
--color-text-primary
|
|
70
|
+
--color-text-secondary
|
|
71
|
+
--space-md, --space-base
|
|
72
|
+
--radius-md
|
|
73
|
+
--font-size-base
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Sizes
|
|
77
|
+
|
|
78
|
+
Body 16–18px (matches surrounding doc body). Title slightly bolder (semibold).
|
|
79
|
+
|
|
80
|
+
For compact variant: 14px, single-line, useful for inline tips.
|
|
81
|
+
|
|
82
|
+
## Korean callouts
|
|
83
|
+
|
|
84
|
+
| Type | Korean header |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| note | 참고 |
|
|
87
|
+
| tip | 팁 |
|
|
88
|
+
| info | 안내 |
|
|
89
|
+
| warning | 주의 |
|
|
90
|
+
| danger | 위험 / 경고 |
|
|
91
|
+
| success | 완료 |
|
|
92
|
+
|
|
93
|
+
For Korean docs: per [`knowledge/i18n/korean-document-style.md`](../knowledge/i18n/korean-document-style.md), use formal tone (`~합니다 / 입니다`).
|
|
94
|
+
|
|
95
|
+
```mdx
|
|
96
|
+
<Callout type="warning" title="주의">
|
|
97
|
+
이 작업은 되돌릴 수 없습니다. 신중히 진행해 주세요.
|
|
98
|
+
</Callout>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Accessibility
|
|
102
|
+
|
|
103
|
+
- Render as `<aside>` with `aria-label="Note"` (or appropriate per type).
|
|
104
|
+
- For `danger` / `warning`: `role="alert"` if the callout's appearance should interrupt reading flow.
|
|
105
|
+
- For passive types (note, tip, info): no role needed — just an `<aside>`.
|
|
106
|
+
- Icon: `aria-hidden="true"` (header label conveys meaning).
|
|
107
|
+
|
|
108
|
+
## Don't
|
|
109
|
+
|
|
110
|
+
- Don't overuse — every paragraph as callout = noise.
|
|
111
|
+
- Don't nest callouts (callout inside callout).
|
|
112
|
+
- Don't use `danger` for non-destructive info.
|
|
113
|
+
- Don't put primary CTAs in callouts.
|
|
114
|
+
- Don't use color alone to convey type — icon + label do the work.
|
|
115
|
+
|
|
116
|
+
## References
|
|
117
|
+
|
|
118
|
+
Most documentation tools (Docusaurus, Notion, GitBook, MDX-based sites) ship a Callout component. The variation is mostly in `type` naming.
|
|
119
|
+
|
|
120
|
+
- Docusaurus: `:::note`, `:::tip`, `:::info`, `:::warning`, `:::danger`
|
|
121
|
+
- GitBook: `<hint type="info|warning|danger|success">...</hint>`
|
|
122
|
+
- Notion: built-in callout block with icon
|
|
123
|
+
|
|
124
|
+
For design-ai's docs: MDX-based callout matching this spec.
|
|
125
|
+
|
|
126
|
+
## Cross-reference
|
|
127
|
+
|
|
128
|
+
- [`examples/component-alert.md`](component-alert.md) — for product UI feedback (different)
|
|
129
|
+
- [`examples/component-blockquote.md`](component-blockquote.md) — for quotations
|
|
130
|
+
- [`knowledge/patterns/document-typography.md`](../knowledge/patterns/document-typography.md)
|
|
131
|
+
- [`knowledge/i18n/korean-document-style.md`](../knowledge/i18n/korean-document-style.md) — Korean callout headers
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# `CardActions` — spec
|
|
2
|
+
|
|
3
|
+
> Synthesized from MUI `CardActions`. The action row at the bottom of a `Card`. Left-aligns by default (unlike `DialogActions` which is right-aligned).
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
- Inside `Card` for inline actions ("자세히", "공유", "저장").
|
|
8
|
+
- For destructive or modal-triggering actions, use a Dialog instead.
|
|
9
|
+
|
|
10
|
+
## Anatomy
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
┌────────────────────────────┐
|
|
14
|
+
│ [CardContent] │
|
|
15
|
+
├────────────────────────────┤
|
|
16
|
+
│ [Action] [Action] │
|
|
17
|
+
└────────────────────────────┘
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Left-aligned by default. The convention differs from `DialogActions` (right-aligned) because cards are scanning surfaces — the eye reads left-to-right, sees the headline, then the action without backtracking.
|
|
21
|
+
|
|
22
|
+
## API
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
<Card>
|
|
26
|
+
<CardContent>...</CardContent>
|
|
27
|
+
<CardActions>
|
|
28
|
+
<Button size="small">자세히</Button>
|
|
29
|
+
<Button size="small">공유</Button>
|
|
30
|
+
</CardActions>
|
|
31
|
+
</Card>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
| Prop | Type | Default | Description |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| `children` | `ReactNode` | — | Action buttons (typically `size="small"`) |
|
|
37
|
+
| `disableSpacing` | `boolean` | `false` | Remove default 8px gap between buttons |
|
|
38
|
+
|
|
39
|
+
## Button conventions
|
|
40
|
+
|
|
41
|
+
- Use `size="small"` (matches Card's compact reading rhythm).
|
|
42
|
+
- Use `variant="text"` or `variant="outlined"` — `contained` is too heavy for a card action.
|
|
43
|
+
- Maximum 2-3 actions per card. More = the card is doing too much.
|
|
44
|
+
|
|
45
|
+
## Tokens consumed
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
--space-sm /* gap */
|
|
49
|
+
--space-md /* horizontal padding */
|
|
50
|
+
--space-sm-y /* vertical padding (lighter than DialogActions) */
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Accessibility
|
|
54
|
+
|
|
55
|
+
- Each button needs an accessible name — for icon-only buttons inside `CardActions`, provide `aria-label`.
|
|
56
|
+
- Tab order: matches visual order (left → right).
|
|
57
|
+
- For "expandable card" patterns where a `CardActions` button reveals more content, use `aria-expanded` on that button.
|
|
58
|
+
|
|
59
|
+
## Edge cases
|
|
60
|
+
|
|
61
|
+
- **Mobile narrow widths** — `CardActions` can right-align by setting `sx={{ justifyContent: 'flex-end' }}` if your Card design calls for it.
|
|
62
|
+
- **Long button labels in Korean** — Hangul labels run wider; consider icon-only buttons with `aria-label` for compact card grids.
|
|
63
|
+
- **Single primary action** — still wrap in `CardActions` for consistent padding.
|
|
64
|
+
|
|
65
|
+
## Code example
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
<Card>
|
|
69
|
+
<CardMedia component="img" image="/post.jpg" alt="" />
|
|
70
|
+
<CardContent>
|
|
71
|
+
<Typography variant="h6">{post.title}</Typography>
|
|
72
|
+
<Typography variant="body2">{post.excerpt}</Typography>
|
|
73
|
+
</CardContent>
|
|
74
|
+
<CardActions>
|
|
75
|
+
<Button size="small" startIcon={<ReadIcon />}>읽기</Button>
|
|
76
|
+
<Button size="small" startIcon={<ShareIcon />}>공유</Button>
|
|
77
|
+
<Box sx={{ ml: 'auto' }}>
|
|
78
|
+
<IconButton aria-label="좋아요">
|
|
79
|
+
<FavoriteIcon />
|
|
80
|
+
</IconButton>
|
|
81
|
+
</Box>
|
|
82
|
+
</CardActions>
|
|
83
|
+
</Card>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Don't
|
|
87
|
+
|
|
88
|
+
- Don't put 4+ actions — overflow into a menu.
|
|
89
|
+
- Don't use `variant="contained"` — too heavy for a card.
|
|
90
|
+
- Don't right-align without a reason — left-aligned is the cross-product expected pattern.
|
|
91
|
+
|
|
92
|
+
## References
|
|
93
|
+
|
|
94
|
+
- MUI: [`CardActions.d.ts`](../refs/mui/packages/mui-material/src/CardActions/CardActions.d.ts)
|
|
95
|
+
|
|
96
|
+
## Cross-reference
|
|
97
|
+
|
|
98
|
+
- [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
|
|
99
|
+
- [`component-card.md`](component-card.md)
|
|
100
|
+
- [`component-card-content.md`](component-card-content.md)
|
|
101
|
+
- [`component-button.md`](component-button.md)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# `CardContent` — spec
|
|
2
|
+
|
|
3
|
+
> Synthesized from MUI `CardContent`. The body region of a `Card`. Provides the default padding so card body content aligns with the card's grid.
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
- Inside every `Card` that has body content beyond a hero image.
|
|
8
|
+
- For media-only cards (`CardMedia` only), skip `CardContent`.
|
|
9
|
+
|
|
10
|
+
## Anatomy
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
┌────────────────────────────┐
|
|
14
|
+
│ [CardMedia / image] │
|
|
15
|
+
├────────────────────────────┤
|
|
16
|
+
│ CardContent │
|
|
17
|
+
│ - Title │
|
|
18
|
+
│ - Body text │
|
|
19
|
+
│ - Tags / metadata │
|
|
20
|
+
├────────────────────────────┤
|
|
21
|
+
│ CardActions │
|
|
22
|
+
└────────────────────────────┘
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## API
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
<Card>
|
|
29
|
+
<CardContent>
|
|
30
|
+
<Typography variant="h5">제목</Typography>
|
|
31
|
+
<Typography variant="body2">본문 텍스트</Typography>
|
|
32
|
+
</CardContent>
|
|
33
|
+
</Card>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
| Prop | Type | Default | Description |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| `children` | `ReactNode` | — | Body content |
|
|
39
|
+
|
|
40
|
+
## Tokens consumed
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
--card-content-padding /* default 16px / dense 8px */
|
|
44
|
+
--space-md
|
|
45
|
+
--space-sm
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Accessibility
|
|
49
|
+
|
|
50
|
+
`CardContent` is structural (a `<div>`); it doesn't add semantics. The Card's role is determined by its surrounding context — wrap interactive cards in `<a>` or `<button>` higher in the tree, not at `CardContent` level.
|
|
51
|
+
|
|
52
|
+
## Edge cases
|
|
53
|
+
|
|
54
|
+
- **Card with no media** — `CardContent` becomes the only child; ensure padding still feels right (default 16px works).
|
|
55
|
+
- **Korean text density** — Hangul reads ~10% wider; consider 20-24px padding for body-heavy cards.
|
|
56
|
+
- **Bottom padding** — when `CardActions` follows, MUI removes the bottom padding of `CardContent` so the action row hugs the bottom. Don't override this without reason.
|
|
57
|
+
|
|
58
|
+
## Code example
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
<Card sx={{ maxWidth: 360 }}>
|
|
62
|
+
<CardMedia component="img" image="/cover.jpg" alt="" />
|
|
63
|
+
<CardContent>
|
|
64
|
+
<Typography variant="h6">제목</Typography>
|
|
65
|
+
<Typography variant="body2" color="text.secondary">
|
|
66
|
+
본문 요약 텍스트.
|
|
67
|
+
</Typography>
|
|
68
|
+
</CardContent>
|
|
69
|
+
<CardActions>
|
|
70
|
+
<Button size="small">자세히</Button>
|
|
71
|
+
</CardActions>
|
|
72
|
+
</Card>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Don't
|
|
76
|
+
|
|
77
|
+
- Don't override the bottom padding when followed by `CardActions` — MUI handles this.
|
|
78
|
+
- Don't put `Card`-level interactive surfaces (link, click handler) on `CardContent` — they belong on the Card or on `CardActionArea`.
|
|
79
|
+
|
|
80
|
+
## References
|
|
81
|
+
|
|
82
|
+
- MUI: [`CardContent.d.ts`](../refs/mui/packages/mui-material/src/CardContent/CardContent.d.ts)
|
|
83
|
+
|
|
84
|
+
## Cross-reference
|
|
85
|
+
|
|
86
|
+
- [`knowledge/components/INDEX.md`](../knowledge/components/INDEX.md)
|
|
87
|
+
- [`component-card.md`](component-card.md)
|
|
88
|
+
- [`component-card-actions.md`](component-card-actions.md)
|
|
89
|
+
- [`component-card-media.md`](component-card-media.md)
|
|
90
|
+
- [`component-card-header.md`](component-card-header.md)
|