@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,153 @@
|
|
|
1
|
+
# `AccordionActions` - spec
|
|
2
|
+
|
|
3
|
+
> Direct upstream component: MUI `AccordionActions`. Parent pattern references: Ant Design `Collapse`, MUI `Accordion`, shadcn-ui `accordion`.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
`AccordionActions` is the optional action row at the bottom of an expanded accordion panel. Use it for commands that apply only to the content inside that one panel, such as "Save section", "Reset", or "Learn more".
|
|
8
|
+
|
|
9
|
+
Do not use it for page-level actions. Page-level Save / Cancel belongs in the form footer or sticky page action bar.
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Accordion.Item
|
|
15
|
+
├── AccordionSummary required; button that expands/collapses
|
|
16
|
+
├── AccordionDetails required; body content
|
|
17
|
+
└── AccordionActions optional; scoped commands for this panel
|
|
18
|
+
├── Secondary action optional
|
|
19
|
+
└── Primary action optional
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
| Part | Required | Purpose |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| Root | yes | Non-interactive row container. |
|
|
25
|
+
| Action item | no | Usually `Button`, `IconButton`, or link-styled command. |
|
|
26
|
+
| Alignment | yes | End-align actions in LTR; start/end flips in RTL via logical CSS. |
|
|
27
|
+
|
|
28
|
+
## API
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
<Accordion.Item value="billing">
|
|
32
|
+
<Accordion.Summary>결제 정보</Accordion.Summary>
|
|
33
|
+
<Accordion.Details>
|
|
34
|
+
<BillingFields />
|
|
35
|
+
</Accordion.Details>
|
|
36
|
+
<Accordion.Actions>
|
|
37
|
+
<Button variant="ghost">초기화</Button>
|
|
38
|
+
<Button>저장</Button>
|
|
39
|
+
</Accordion.Actions>
|
|
40
|
+
</Accordion.Item>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
| Prop | Type | Default | Description |
|
|
44
|
+
| --- | --- | --- | --- |
|
|
45
|
+
| `children` | `ReactNode` | - | Action controls rendered in the row. |
|
|
46
|
+
| `classes` | `Partial<AccordionActionsClasses>` | - | Style override hooks for MUI-style implementations. |
|
|
47
|
+
| `disableSpacing` | `boolean` | `false` | Removes the default horizontal gap between action children. |
|
|
48
|
+
| `sx` | `SxProps<Theme>` | - | MUI system override. Prefer tokens for shared design-system code. |
|
|
49
|
+
|
|
50
|
+
## API choices made
|
|
51
|
+
|
|
52
|
+
- Keep the component as a thin container. It should not own action state, validation, or submit logic.
|
|
53
|
+
- Keep `disableSpacing` because MUI exposes it and dense admin forms sometimes need custom spacing.
|
|
54
|
+
- Do not add `align` unless product usage proves it is needed. End alignment is the default for commit/cancel rows.
|
|
55
|
+
- Do not add a `primaryAction` prop. Composition keeps button order, disabled state, and loading state explicit.
|
|
56
|
+
|
|
57
|
+
## States
|
|
58
|
+
|
|
59
|
+
| State | Trigger | Visual rule |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| Default | Expanded parent panel | Top padding separates actions from body; row uses `display: flex`, `justify-content: flex-end`, gap token. |
|
|
62
|
+
| Hover | Mouse over child action | Container does not change; child action handles hover. |
|
|
63
|
+
| Focus-visible | Keyboard focus on child action | Child action shows a 2px focus ring with at least 3:1 contrast against the row background. |
|
|
64
|
+
| Active | Press child action | Child action handles pressed state. |
|
|
65
|
+
| Disabled | Child action disabled | Container unchanged; disabled action uses its own muted style and `aria-disabled` when not a native disabled control. |
|
|
66
|
+
| Loading | Child action loading | Loading belongs to the action button, not the container. |
|
|
67
|
+
| Error | Validation in panel | Show error near the field or panel summary; do not color the action row alone. |
|
|
68
|
+
|
|
69
|
+
## Tokens consumed
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
--color-bg-default
|
|
73
|
+
--color-border-default
|
|
74
|
+
--color-text-primary
|
|
75
|
+
--color-focus-ring
|
|
76
|
+
--space-sm
|
|
77
|
+
--space-md
|
|
78
|
+
--space-lg
|
|
79
|
+
--radius-md
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
If the row has a divider, use `--color-border-default`; do not introduce a new hairline color.
|
|
83
|
+
|
|
84
|
+
## Accessibility
|
|
85
|
+
|
|
86
|
+
- Root element is normally a `<div>` or `<footer>` inside the panel. It does not need a landmark role.
|
|
87
|
+
- If there are 3+ related commands, set `aria-label` on the row, for example `aria-label="결제 정보 작업"`.
|
|
88
|
+
- Keyboard order follows DOM order: accordion summary, details focusables, action buttons.
|
|
89
|
+
- Touch targets for actions must be at least 44x44 on mobile and 24x24 on desktop AA.
|
|
90
|
+
- Focus ring is owned by the child controls, but must remain visible against `--color-bg-default`.
|
|
91
|
+
- When the parent panel is collapsed, action controls must not remain tabbable.
|
|
92
|
+
|
|
93
|
+
## Layout rules
|
|
94
|
+
|
|
95
|
+
| Rule | Value |
|
|
96
|
+
| --- | --- |
|
|
97
|
+
| Direction | Row, wrap allowed only below 360px. |
|
|
98
|
+
| Alignment | End aligned with logical `justify-content: flex-end`. |
|
|
99
|
+
| Gap | `--space-sm` for dense; `--space-md` default. |
|
|
100
|
+
| Padding | Match `AccordionDetails` horizontal padding. |
|
|
101
|
+
| Divider | Optional top border when actions follow long content. |
|
|
102
|
+
|
|
103
|
+
## Code example
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
<Accordion type="multiple" defaultValue={["notifications"]}>
|
|
107
|
+
<Accordion.Item value="notifications">
|
|
108
|
+
<Accordion.Summary>알림 설정</Accordion.Summary>
|
|
109
|
+
<Accordion.Details>
|
|
110
|
+
<NotificationPreferenceFields />
|
|
111
|
+
</Accordion.Details>
|
|
112
|
+
<Accordion.Actions aria-label="알림 설정 작업">
|
|
113
|
+
<Button variant="ghost" onClick={resetNotificationPrefs}>
|
|
114
|
+
기본값으로 되돌리기
|
|
115
|
+
</Button>
|
|
116
|
+
<Button onClick={saveNotificationPrefs} loading={isSaving}>
|
|
117
|
+
저장
|
|
118
|
+
</Button>
|
|
119
|
+
</Accordion.Actions>
|
|
120
|
+
</Accordion.Item>
|
|
121
|
+
</Accordion>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Edge cases
|
|
125
|
+
|
|
126
|
+
- **Only one destructive action**: keep it visually separated from the primary action, and use the destructive button variant.
|
|
127
|
+
- **Panel contains a form**: the action row may contain `type="submit"` only if it is inside the same `<form>`.
|
|
128
|
+
- **Long localized labels**: allow buttons to wrap to two rows on narrow screens rather than shrinking below touch target size.
|
|
129
|
+
- **Nested accordions**: avoid nested action rows. Move nested commands into the nested panel content.
|
|
130
|
+
- **Collapsed state**: hidden actions must be removed from keyboard order via the parent accordion visibility strategy.
|
|
131
|
+
- **RTL**: use logical start/end spacing so action order and alignment mirror predictably.
|
|
132
|
+
- **Reduced motion**: no action-row-specific motion. Parent expand/collapse follows `Accordion` reduced-motion rules.
|
|
133
|
+
|
|
134
|
+
## Don't
|
|
135
|
+
|
|
136
|
+
- Don't put global page Save / Cancel only inside an accordion panel.
|
|
137
|
+
- Don't render more than one primary action in the row.
|
|
138
|
+
- Don't make the action row itself clickable.
|
|
139
|
+
- Don't use the row to display validation errors without field-level error text.
|
|
140
|
+
|
|
141
|
+
## References
|
|
142
|
+
|
|
143
|
+
- MUI direct source: [`refs/mui/packages/mui-material/src/AccordionActions/AccordionActions.d.ts`](../refs/mui/packages/mui-material/src/AccordionActions/AccordionActions.d.ts)
|
|
144
|
+
- MUI implementation: [`refs/mui/packages/mui-material/src/AccordionActions/AccordionActions.js`](../refs/mui/packages/mui-material/src/AccordionActions/AccordionActions.js)
|
|
145
|
+
- Parent MUI composition: [`refs/mui/packages/mui-material/src/Accordion/`](../refs/mui/packages/mui-material/src/Accordion/)
|
|
146
|
+
- Ant Design parent pattern: [`refs/ant-design/components/collapse/`](../refs/ant-design/components/collapse/)
|
|
147
|
+
- shadcn-ui parent pattern: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx)
|
|
148
|
+
- Accessibility baseline: [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md)
|
|
149
|
+
|
|
150
|
+
## Cross-reference
|
|
151
|
+
|
|
152
|
+
- [examples/component-accordion.md](component-accordion.md)
|
|
153
|
+
- [examples/component-button.md](component-button.md)
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# `AccordionDetails` - spec
|
|
2
|
+
|
|
3
|
+
> Direct upstream component: MUI `AccordionDetails`. Parent pattern references: Ant Design `Collapse`, MUI `Accordion`, shadcn-ui `accordion`.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
`AccordionDetails` is the body container for the expanded content of one accordion item. It holds text, forms, lists, or supporting controls that are disclosed by `AccordionSummary`.
|
|
8
|
+
|
|
9
|
+
Use it when content is secondary until the user chooses to expand the section. Keep critical information visible outside the accordion.
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Accordion.Item
|
|
15
|
+
├── AccordionSummary expands/collapses the section
|
|
16
|
+
└── AccordionDetails revealed body region
|
|
17
|
+
├── Body content
|
|
18
|
+
├── Inline controls
|
|
19
|
+
└── Optional nested layout
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
| Part | Required | Purpose |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| Root | yes | Body wrapper linked to the summary through the parent item. |
|
|
25
|
+
| Content | yes | Any readable or interactive content. |
|
|
26
|
+
| Region semantics | parent-owned | `role="region"` and labels usually belong to the collapsible content wrapper, not an inner styling div. |
|
|
27
|
+
|
|
28
|
+
## API
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
<Accordion.Item value="security">
|
|
32
|
+
<Accordion.Summary>보안</Accordion.Summary>
|
|
33
|
+
<Accordion.Details>
|
|
34
|
+
<p>2단계 인증과 로그인 알림을 관리합니다.</p>
|
|
35
|
+
<SecuritySettings />
|
|
36
|
+
</Accordion.Details>
|
|
37
|
+
</Accordion.Item>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
| Prop | Type | Default | Description |
|
|
41
|
+
| --- | --- | --- | --- |
|
|
42
|
+
| `children` | `ReactNode` | - | Body content for the expanded panel. |
|
|
43
|
+
| `classes` | `Partial<AccordionDetailsClasses>` | - | Style override hooks for MUI-style implementations. |
|
|
44
|
+
| `sx` | `SxProps<Theme>` | - | MUI system override. Prefer tokens for shared design-system code. |
|
|
45
|
+
|
|
46
|
+
## API choices made
|
|
47
|
+
|
|
48
|
+
- Keep `AccordionDetails` layout-only. Expansion state, `aria-expanded`, and keyboard behavior stay on `AccordionSummary` / parent item.
|
|
49
|
+
- Do not add `padding`, `variant`, or `scroll` props. Use parent accordion variants and tokenized CSS.
|
|
50
|
+
- Do not make the details wrapper focusable by default. Focus should move to meaningful content inside.
|
|
51
|
+
|
|
52
|
+
## States
|
|
53
|
+
|
|
54
|
+
| State | Trigger | Visual rule |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| Collapsed | Parent item closed | Details content is hidden and not keyboard reachable. |
|
|
57
|
+
| Expanding | Parent item opens | Body follows parent expand motion; no separate fade unless specified by parent. |
|
|
58
|
+
| Expanded | Parent item open | Content uses readable spacing and inherits text color. |
|
|
59
|
+
| Focus-visible | Focusable child receives focus | Child shows visible focus; details wrapper remains neutral. |
|
|
60
|
+
| Disabled | Parent item disabled | Details remain collapsed unless parent allows disabled expanded display; text is not independently disabled. |
|
|
61
|
+
| Loading | Async content inside | Use skeleton or progress inside details, not on the wrapper. |
|
|
62
|
+
| Error | Form/list error inside | Show error near the failing field/section and reflect status in summary if needed. |
|
|
63
|
+
|
|
64
|
+
## Tokens consumed
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
--color-bg-default
|
|
68
|
+
--color-bg-subtle
|
|
69
|
+
--color-text-primary
|
|
70
|
+
--color-text-secondary
|
|
71
|
+
--color-border-default
|
|
72
|
+
--color-focus-ring
|
|
73
|
+
--space-sm
|
|
74
|
+
--space-md
|
|
75
|
+
--space-lg
|
|
76
|
+
--radius-md
|
|
77
|
+
--motion-default
|
|
78
|
+
--easing-in-out
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Accessibility
|
|
82
|
+
|
|
83
|
+
- The accordion content wrapper should have `id`, `role="region"` when the panel is substantial, and `aria-labelledby` pointing to the summary button.
|
|
84
|
+
- Do not add a second unlabeled `region` inside `AccordionDetails`.
|
|
85
|
+
- Hidden details must not leave form fields, links, or buttons in the tab order.
|
|
86
|
+
- If content is short plain text, `role="region"` is optional; overusing regions makes screen-reader navigation noisy.
|
|
87
|
+
- Keyboard behavior is inherited from the parent accordion: `Tab` enters visible focusable content, and `Enter` / `Space` toggles the summary.
|
|
88
|
+
- Touch target rules apply to controls inside details: at least 44x44 on mobile.
|
|
89
|
+
|
|
90
|
+
## Layout rules
|
|
91
|
+
|
|
92
|
+
| Rule | Value |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| Padding | Match parent size: `sm` 12px, `md` 16px, `lg` 20px equivalent tokens. |
|
|
95
|
+
| Text | Body text uses `--color-text-primary`; helper copy uses `--color-text-secondary`. |
|
|
96
|
+
| Width | Fill parent item width. Avoid fixed widths inside details. |
|
|
97
|
+
| Scroll | Prefer page scroll. Only create inner scroll if the panel is inside a constrained modal/drawer. |
|
|
98
|
+
| Forms | Preserve field state across collapse unless product explicitly discards edits. |
|
|
99
|
+
|
|
100
|
+
## Code example
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
<Accordion type="single" collapsible defaultValue="account">
|
|
104
|
+
<Accordion.Item value="account">
|
|
105
|
+
<Accordion.Summary>계정 정보</Accordion.Summary>
|
|
106
|
+
<Accordion.Details>
|
|
107
|
+
<Stack gap="md">
|
|
108
|
+
<Text tone="secondary">
|
|
109
|
+
이름과 연락처는 본인인증 이후에만 변경할 수 있습니다.
|
|
110
|
+
</Text>
|
|
111
|
+
<AccountProfileFields />
|
|
112
|
+
</Stack>
|
|
113
|
+
</Accordion.Details>
|
|
114
|
+
</Accordion.Item>
|
|
115
|
+
</Accordion>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Edge cases
|
|
119
|
+
|
|
120
|
+
- **Async body data**: render a skeleton inside the expanded details. Do not collapse the panel while loading.
|
|
121
|
+
- **Form state**: keep fields mounted or persist their values before unmounting, otherwise collapse can discard edits.
|
|
122
|
+
- **Very long content**: consider splitting into separate accordion items or a dedicated page.
|
|
123
|
+
- **Nested accordions**: avoid by improving information architecture; if unavoidable, nested summaries must have distinct labels.
|
|
124
|
+
- **Tables inside details**: ensure horizontal overflow is keyboard accessible and not clipped by the accordion item.
|
|
125
|
+
- **High contrast mode**: body/background boundaries must remain visible through border or spacing, not color alone.
|
|
126
|
+
- **Print**: print styles should expand important details or provide a clear "collapsed content omitted" rule.
|
|
127
|
+
|
|
128
|
+
## Don't
|
|
129
|
+
|
|
130
|
+
- Don't make `AccordionDetails` itself a button, link, or focus target.
|
|
131
|
+
- Don't put critical CTAs only inside details.
|
|
132
|
+
- Don't add independent expand/collapse logic inside the details wrapper.
|
|
133
|
+
- Don't hide validation errors by collapsing the panel after submit.
|
|
134
|
+
|
|
135
|
+
## References
|
|
136
|
+
|
|
137
|
+
- MUI direct source: [`refs/mui/packages/mui-material/src/AccordionDetails/AccordionDetails.d.ts`](../refs/mui/packages/mui-material/src/AccordionDetails/AccordionDetails.d.ts)
|
|
138
|
+
- MUI implementation: [`refs/mui/packages/mui-material/src/AccordionDetails/AccordionDetails.js`](../refs/mui/packages/mui-material/src/AccordionDetails/AccordionDetails.js)
|
|
139
|
+
- Parent MUI composition: [`refs/mui/packages/mui-material/src/Accordion/`](../refs/mui/packages/mui-material/src/Accordion/)
|
|
140
|
+
- Ant Design parent pattern: [`refs/ant-design/components/collapse/`](../refs/ant-design/components/collapse/)
|
|
141
|
+
- shadcn-ui parent pattern: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx)
|
|
142
|
+
- Accessibility baseline: [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md)
|
|
143
|
+
|
|
144
|
+
## Cross-reference
|
|
145
|
+
|
|
146
|
+
- [examples/component-accordion.md](component-accordion.md)
|
|
147
|
+
- [knowledge/patterns/form-design.md](../knowledge/patterns/form-design.md)
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# `AccordionSummary` - spec
|
|
2
|
+
|
|
3
|
+
> Direct upstream component: MUI `AccordionSummary`. Parent pattern references: Ant Design `Collapse`, MUI `Accordion`, shadcn-ui `accordion`.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
`AccordionSummary` is the interactive header for one accordion item. It names the section, communicates whether the section is expanded, and toggles the associated details panel.
|
|
8
|
+
|
|
9
|
+
This is the accessibility-critical part of the accordion. It must behave like a real button.
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
AccordionSummary
|
|
15
|
+
├── Root button
|
|
16
|
+
│ ├── Leading icon optional
|
|
17
|
+
│ ├── Content
|
|
18
|
+
│ │ ├── Title required
|
|
19
|
+
│ │ └── Description optional
|
|
20
|
+
│ └── Expand icon wrapper required visual affordance
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Part | Required | Purpose |
|
|
24
|
+
| --- | --- | --- |
|
|
25
|
+
| Root button | yes | Receives focus and toggles the panel. |
|
|
26
|
+
| Title | yes | Short label for the section. |
|
|
27
|
+
| Description | optional | Secondary context; keep to one line when possible. |
|
|
28
|
+
| Expand icon | yes | Shows collapsed/expanded state visually. |
|
|
29
|
+
| Leading icon | optional | Helps scan settings/category accordions. |
|
|
30
|
+
|
|
31
|
+
## API
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
<Accordion.Item value="privacy">
|
|
35
|
+
<Accordion.Summary expandIcon={<ChevronDownIcon aria-hidden="true" />}>
|
|
36
|
+
<Accordion.SummaryContent
|
|
37
|
+
title="개인정보"
|
|
38
|
+
description="프로필 공개 범위와 데이터 다운로드"
|
|
39
|
+
/>
|
|
40
|
+
</Accordion.Summary>
|
|
41
|
+
<Accordion.Details>
|
|
42
|
+
<PrivacySettings />
|
|
43
|
+
</Accordion.Details>
|
|
44
|
+
</Accordion.Item>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
| Prop | Type | Default | Description |
|
|
48
|
+
| --- | --- | --- | --- |
|
|
49
|
+
| `children` | `ReactNode` | - | Title/content rendered inside the summary button. |
|
|
50
|
+
| `classes` | `Partial<AccordionSummaryClasses>` | - | Style override hooks for MUI-style implementations. |
|
|
51
|
+
| `component` | `React.ElementType` | MUI default root | Overrides the root element. Must preserve button semantics. |
|
|
52
|
+
| `expandIcon` | `ReactNode` | - | Visual expand/collapse indicator. Mark decorative icons `aria-hidden`. |
|
|
53
|
+
| `slots` | `{ root?, content?, expandIconWrapper? }` | - | Slot component overrides for MUI-style implementations. |
|
|
54
|
+
| `slotProps` | `{ root?, content?, expandIconWrapper? }` | - | Props forwarded to summary slots. |
|
|
55
|
+
| `sx` | `SxProps<Theme>` | - | MUI system override. Prefer tokens for shared design-system code. |
|
|
56
|
+
|
|
57
|
+
Inherits button-like props from MUI `ButtonBase` in MUI implementations.
|
|
58
|
+
|
|
59
|
+
## API choices made
|
|
60
|
+
|
|
61
|
+
- Treat `AccordionSummary` as a button first and a layout row second.
|
|
62
|
+
- Keep `expandIcon` as a visual prop because Ant, MUI, and shadcn/Radix patterns all expose an expand affordance.
|
|
63
|
+
- Prefer composition for title/description rather than `title` and `description` props; complex summaries often need badges or metadata.
|
|
64
|
+
- Allow `component` only when semantics are preserved. A `<div>` without button behavior is not acceptable.
|
|
65
|
+
|
|
66
|
+
## States
|
|
67
|
+
|
|
68
|
+
| State | Trigger | Visual rule |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| Collapsed | `aria-expanded="false"` | Title primary, icon points closed, details hidden. |
|
|
71
|
+
| Expanded | `aria-expanded="true"` | Icon rotates or swaps, row may use subtle active background. |
|
|
72
|
+
| Hover | Pointer over enabled summary | `--color-bg-subtle` background shift. |
|
|
73
|
+
| Focus-visible | Keyboard focus | 2px focus ring with at least 3:1 contrast against background. |
|
|
74
|
+
| Active | Press | Slight pressed background or transform-free pressed color. |
|
|
75
|
+
| Disabled | Parent item disabled | Muted text/icon, no toggle, expose disabled state. |
|
|
76
|
+
| Loading | Content inside panel loading | Summary may show a small trailing spinner, but still names the section. |
|
|
77
|
+
| Error | Panel contains error | Add error badge/text in summary and keep color paired with label/icon. |
|
|
78
|
+
|
|
79
|
+
## Tokens consumed
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
--color-bg-default
|
|
83
|
+
--color-bg-subtle
|
|
84
|
+
--color-text-primary
|
|
85
|
+
--color-text-secondary
|
|
86
|
+
--color-text-disabled
|
|
87
|
+
--color-border-default
|
|
88
|
+
--color-error
|
|
89
|
+
--color-focus-ring
|
|
90
|
+
--space-sm
|
|
91
|
+
--space-md
|
|
92
|
+
--space-lg
|
|
93
|
+
--radius-md
|
|
94
|
+
--motion-fast
|
|
95
|
+
--easing-in-out
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Accessibility
|
|
99
|
+
|
|
100
|
+
- Render a native `<button type="button">` whenever possible.
|
|
101
|
+
- Set `aria-expanded="true|false"` on the summary button.
|
|
102
|
+
- Set `aria-controls` to the details/content `id`.
|
|
103
|
+
- The details/content wrapper sets `aria-labelledby` back to the summary button `id`.
|
|
104
|
+
- Decorative expand icons use `aria-hidden="true"` and do not duplicate the label.
|
|
105
|
+
- Disabled summaries should use native `disabled` when possible; custom roots need `aria-disabled="true"` and must suppress activation.
|
|
106
|
+
- Minimum target: 44x44 on mobile, 24x24 on desktop AA.
|
|
107
|
+
|
|
108
|
+
### Keyboard
|
|
109
|
+
|
|
110
|
+
| Key | Behavior |
|
|
111
|
+
| --- | --- |
|
|
112
|
+
| `Tab` | Moves focus to each enabled summary in document order. |
|
|
113
|
+
| `Enter` / `Space` | Toggles the focused summary. |
|
|
114
|
+
| `ArrowUp` / `ArrowDown` | Optional parent-level shortcut to previous/next summary. |
|
|
115
|
+
| `Home` / `End` | Optional parent-level shortcut to first/last summary. |
|
|
116
|
+
|
|
117
|
+
## Layout rules
|
|
118
|
+
|
|
119
|
+
| Rule | Value |
|
|
120
|
+
| --- | --- |
|
|
121
|
+
| Height | `sm` 40px, `md` 48px, `lg` 56px minimum. |
|
|
122
|
+
| Title | Single line by default; wrap to two lines only for content-heavy admin UIs. |
|
|
123
|
+
| Description | Secondary text, one line, truncates before the expand icon. |
|
|
124
|
+
| Icon placement | Trailing in LTR; mirror with logical CSS in RTL. |
|
|
125
|
+
| Expand motion | 150-200ms rotation; remove rotation for `prefers-reduced-motion`. |
|
|
126
|
+
|
|
127
|
+
## Code example
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
<Accordion.Item value="security" disabled={isLocked}>
|
|
131
|
+
<Accordion.Summary
|
|
132
|
+
id="security-summary"
|
|
133
|
+
aria-controls="security-panel"
|
|
134
|
+
expandIcon={<ChevronDownIcon aria-hidden="true" />}
|
|
135
|
+
>
|
|
136
|
+
<Stack gap="xs">
|
|
137
|
+
<Text weight="semibold">보안</Text>
|
|
138
|
+
<Text size="sm" tone={hasSecurityError ? "error" : "secondary"}>
|
|
139
|
+
{hasSecurityError ? "확인이 필요한 항목이 있습니다" : "2단계 인증과 로그인 알림"}
|
|
140
|
+
</Text>
|
|
141
|
+
</Stack>
|
|
142
|
+
</Accordion.Summary>
|
|
143
|
+
<Accordion.Details id="security-panel" aria-labelledby="security-summary">
|
|
144
|
+
<SecuritySettings />
|
|
145
|
+
</Accordion.Details>
|
|
146
|
+
</Accordion.Item>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Edge cases
|
|
150
|
+
|
|
151
|
+
- **Long title**: wrap title before hiding the expand icon. The icon must remain visible.
|
|
152
|
+
- **Icon-only summary**: avoid. If unavoidable, provide a specific `aria-label`.
|
|
153
|
+
- **Summary contains badge/count**: ensure the accessible name stays concise and does not repeat decorative count text.
|
|
154
|
+
- **Disabled but expanded**: allowed for read-only review states, but communicate why the row cannot be toggled.
|
|
155
|
+
- **RTL**: chevron placement and rotation should mirror; use logical properties.
|
|
156
|
+
- **Reduced motion**: state change remains instant; remove icon rotation animation.
|
|
157
|
+
- **Error state**: do not rely on red alone. Add text such as "오류" or an error icon with accessible text.
|
|
158
|
+
|
|
159
|
+
## Don't
|
|
160
|
+
|
|
161
|
+
- Don't render the summary as a clickable `<div>` without native button behavior.
|
|
162
|
+
- Don't put form fields or nested buttons inside the summary.
|
|
163
|
+
- Don't hide the expand icon when the row is collapsible.
|
|
164
|
+
- Don't use the summary as navigation to another page.
|
|
165
|
+
|
|
166
|
+
## References
|
|
167
|
+
|
|
168
|
+
- MUI direct source: [`refs/mui/packages/mui-material/src/AccordionSummary/AccordionSummary.d.ts`](../refs/mui/packages/mui-material/src/AccordionSummary/AccordionSummary.d.ts)
|
|
169
|
+
- MUI implementation: [`refs/mui/packages/mui-material/src/AccordionSummary/AccordionSummary.js`](../refs/mui/packages/mui-material/src/AccordionSummary/AccordionSummary.js)
|
|
170
|
+
- Parent MUI composition: [`refs/mui/packages/mui-material/src/Accordion/`](../refs/mui/packages/mui-material/src/Accordion/)
|
|
171
|
+
- Ant Design parent pattern: [`refs/ant-design/components/collapse/`](../refs/ant-design/components/collapse/)
|
|
172
|
+
- shadcn-ui parent pattern: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/accordion.tsx)
|
|
173
|
+
- Accessibility baseline: [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md)
|
|
174
|
+
- Motion baseline: [`knowledge/motion/principles.md`](../knowledge/motion/principles.md)
|
|
175
|
+
|
|
176
|
+
## Cross-reference
|
|
177
|
+
|
|
178
|
+
- [examples/component-accordion.md](component-accordion.md)
|
|
179
|
+
- [WAI-ARIA Accordion Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/)
|
|
180
|
+
- [WAI-ARIA Disclosure Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/)
|