@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,252 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
Worked outputs from each skill — what "good" looks like. Use as reference when invoking the skill on your own task.
|
|
4
|
+
|
|
5
|
+
### Website improvement
|
|
6
|
+
|
|
7
|
+
| File | Skill | Input | What it demonstrates |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| [website-improvement-report.md](website-improvement-report.md) | `website-improvement` | Korean SaaS marketing site improvement control tower | Site Profile, audit summary, MCP readiness, refactor plan, prompt/report handoff, and MVP boundary that keeps target repo changes outside design-ai |
|
|
10
|
+
|
|
11
|
+
### Color & tokens
|
|
12
|
+
|
|
13
|
+
| File | Skill | Input | What it demonstrates |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| [palette-saas-violet.md](palette-saas-violet.md) | `color-palette` | B2B SaaS, violet seed `#7C3AED` | Full palette with OKLCH ramps, semantic aliases, light + dark, contrast matrix, Tailwind v4 + shadcn-ui + Style Dictionary outputs, use guidance |
|
|
16
|
+
|
|
17
|
+
### Component specs (synthesized from Ant Design + MUI + shadcn-ui)
|
|
18
|
+
|
|
19
|
+
| File | Component | What it covers |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| [component-button.md](component-button.md) | Button | The most-used control. Variants, intent, sizes, loading state, asChild pattern. |
|
|
22
|
+
| [component-button-base.md](component-button-base.md) | ButtonBase | Low-level interactive primitive for building design-system controls. Semantics, focus-visible, ripple, disabled, and polymorphic root rules. |
|
|
23
|
+
| [component-border-beam.md](component-border-beam.md) | BorderBeam | Decorative moving border emphasis layer. Host DOM constraints, reduced motion, aria-hidden, and semantic-state boundaries. |
|
|
24
|
+
| [component-input.md](component-input.md) | Input (text field) | Label/help/error, validation timing, autocomplete, IME (Korean) handling, password/clearable affordances. |
|
|
25
|
+
| [component-modal.md](component-modal.md) | Modal / Dialog / Sheet | Focus trap, scroll lock, keyboard contract, three variants in one spec (dialog/alert-dialog/sheet). |
|
|
26
|
+
| [component-toast.md](component-toast.md) | Toast / Snackbar | Imperative API (`toast.success(...)`), promise wrapper, intent + duration matrix, persistent errors. |
|
|
27
|
+
| [component-card.md](component-card.md) | Card | Composition slots, variants, interactive cards, block-link pattern, when NOT to use a card. |
|
|
28
|
+
| [component-form.md](component-form.md) | Form (composition pattern) | Field/Label/Control/HelpText/ErrorText composition, Zod schema validation, multi-step, server-error mapping, accessibility wiring. |
|
|
29
|
+
| [component-table.md](component-table.md) | Table / DataTable | Headless engine (TanStack), sort/select/paginate, density, mobile→card-list, sticky columns. |
|
|
30
|
+
| [component-tabs.md](component-tabs.md) | Tabs | Underline / segmented / card / bottom-bar variants, WAI-ARIA tabs pattern, manual vs automatic activation. |
|
|
31
|
+
| [component-date-picker.md](component-date-picker.md) | DatePicker | Single/range/dateTime/quickRange modes, Korean date formats, calendar grid keyboard contract, mobile bottom sheet. |
|
|
32
|
+
| [component-select.md](component-select.md) | Select / Combobox | Single/multi/searchable/creatable/async, WAI-ARIA combobox pattern, Korean IME composition handling. |
|
|
33
|
+
| [component-pagination.md](component-pagination.md) | Pagination | Numbered + Load More + simple variants, sibling/boundary algorithm, URL sync, accessibility. |
|
|
34
|
+
| [component-alert.md](component-alert.md) | Alert (Banner) | Persistent in-page feedback. Subtle/outlined/solid variants, intent + icon redundancy, action buttons, role=alert vs status. |
|
|
35
|
+
| [component-tooltip.md](component-tooltip.md) | Tooltip | Hover/focus hint, why native `title` is wrong, touch handling, WAI-ARIA tooltip pattern, when NOT to use. |
|
|
36
|
+
| [component-form-controls.md](component-form-controls.md) | Switch / Checkbox / Radio | Three sibling controls in one spec — semantic differences, when each, shared accessibility patterns, Korean marketing-consent rule. |
|
|
37
|
+
| [component-skeleton.md](component-skeleton.md) | Skeleton | Loading shape (not progress %), shimmer animation, primitive composition, transition rules, reduced motion. |
|
|
38
|
+
| [component-progress.md](component-progress.md) | Progress | Linear + circular, determinate vs indeterminate, intent variants, aria-valuenow rules, when Progress vs Spinner vs Skeleton. |
|
|
39
|
+
| [component-avatar.md](component-avatar.md) | Avatar | Image → initials → icon fallback chain, Korean initials convention, AvatarGroup overlap, status indicators, hash-to-color. |
|
|
40
|
+
| [component-breadcrumb.md](component-breadcrumb.md) | Breadcrumb | Hierarchy navigation, truncation algorithm, when not to use (mobile), aria-current="page", ordered list semantics. |
|
|
41
|
+
| [component-accordion.md](component-accordion.md) | Accordion (Collapse) | Single vs multiple, four visual variants, height animation via grid-template-rows, WAI-ARIA disclosure pattern. |
|
|
42
|
+
| [component-drawer.md](component-drawer.md) | Drawer | Side-anchored panel for navigation. Modal vs persistent mode, mobile detents, swipe-to-dismiss. |
|
|
43
|
+
| [component-slider.md](component-slider.md) | Slider | Single + range, step semantics, when slider vs number input, WAI-ARIA slider pattern. |
|
|
44
|
+
| [component-popover.md](component-popover.md) | Popover | Click-triggered overlay with interactive content. Distinct from Tooltip / Modal / Dropdown. |
|
|
45
|
+
| [component-divider.md](component-divider.md) | Divider (Separator) | Horizontal + vertical, solid/dashed/dotted, inset, decorative vs semantic, when whitespace is better. |
|
|
46
|
+
| [component-steps.md](component-steps.md) | Steps (Stepper) | Multi-step progress visualization. Status states, mobile compact variant, when Steps vs Tabs vs Progress. |
|
|
47
|
+
| [component-rate.md](component-rate.md) | Rate (Rating) | Stars / emoji / custom icons. Input + display modes, half-star precision, slider-pattern a11y. |
|
|
48
|
+
| [component-tag-badge.md](component-tag-badge.md) | Tag + Badge | Two sibling status indicators in one spec. Inline label vs dot/count overlay. |
|
|
49
|
+
| [component-tree.md](component-tree.md) | Tree (TreeView) | Hierarchical data, async lazy-load, check + select modes, WAI-ARIA tree pattern, mobile drill-in alternative. |
|
|
50
|
+
| [component-statistic.md](component-statistic.md) | Statistic | Hero KPI display. Delta semantics (goalDirection-aware coloring), Korean stock convention, sparkline. |
|
|
51
|
+
| [component-upload.md](component-upload.md) | Upload | Drop zone + button + avatar patterns. Per-file progress, async validation, retry, Korean copy. |
|
|
52
|
+
| [component-result.md](component-result.md) | Result + Empty | Two sibling full-page components in one spec. Status icons, primary/secondary actions, inline mode. |
|
|
53
|
+
| [component-carousel.md](component-carousel.md) | Carousel | When NOT to use. Multi-slide view, auto-play warnings, WAI-ARIA carousel pattern. |
|
|
54
|
+
| [component-image.md](component-image.md) | Image | Wrapper with lazy load, aspect-ratio, fallback, lightbox, srcset, alt rules. |
|
|
55
|
+
| [component-calendar.md](component-calendar.md) | Calendar (full month view) | Distinct from DatePicker. Event rendering, holiday/weekend Korean colors, view modes. |
|
|
56
|
+
| [component-cascader.md](component-cascader.md) | Cascader (multi-level select) | 2–4 level hierarchy picker. When NOT to use (mobile drill-in instead). |
|
|
57
|
+
| [component-color-picker.md](component-color-picker.md) | ColorPicker | HSV square + hue slider, hex/rgb/hsl/oklch inputs, presets, alpha. |
|
|
58
|
+
| [component-transfer.md](component-transfer.md) | Transfer (dual list) | Permission/tag editor pattern. When NOT to use (Multi-Select instead). |
|
|
59
|
+
| [component-spin.md](component-spin.md) | Spin (Spinner) | Indeterminate loading. Distinct from Skeleton/Progress. Delay to avoid flash, reduced motion. |
|
|
60
|
+
| [component-segmented.md](component-segmented.md) | Segmented (toggle button group) | iOS-native pill, time/view filters, WAI-ARIA radiogroup pattern. |
|
|
61
|
+
| [component-auto-complete.md](component-auto-complete.md) | AutoComplete | Free-text + suggestions. Distinct from Select. Korean IME composition handling. |
|
|
62
|
+
| [component-mentions.md](component-mentions.md) | Mention (@-trigger) | Trigger char (@/#/:) opens picker, chip insertion. Storage formats, IME. |
|
|
63
|
+
| [component-timeline.md](component-timeline.md) | Timeline | Sequential events: order tracking, activity feed, audit log. Status indicators. |
|
|
64
|
+
| [component-tour.md](component-tour.md) | Tour (in-product overlay) | Step-by-step UI walkthrough. When NOT to use (most cases). |
|
|
65
|
+
| [component-affix.md](component-affix.md) | Affix (sticky positioning) | When CSS `position: sticky` isn't enough. Container-scoped sticky. |
|
|
66
|
+
| [component-float-button.md](component-float-button.md) | FloatButton (FAB) | Floating action button. Speed-dial menu, safe-area handling. |
|
|
67
|
+
| [component-qr-code.md](component-qr-code.md) | QRCode | Encoding strings as QR. Error correction levels, center logo, color contrast. |
|
|
68
|
+
| [component-splitter.md](component-splitter.md) | Splitter (resizable panel) | When CSS sticky isn't enough. IDE / 3-pane layouts. |
|
|
69
|
+
| [component-anchor.md](component-anchor.md) | Anchor (scrollspy / TOC) | Side-rail nav for long-form content. Active section detection. |
|
|
70
|
+
| [component-app-bar.md](component-app-bar.md) | AppBar (top app bar) | Persistent top header. iOS large-title variant, search overlay, sub-tabs. |
|
|
71
|
+
| [component-layout.md](component-layout.md) | Layout (page chrome) | Header / Sidebar / Content / Footer slots. Responsive sider collapse. |
|
|
72
|
+
| [component-input-otp.md](component-input-otp.md) | InputOTP (verification code) | Multi-cell digit input. Korean SMS verification flow, autocomplete=one-time-code. |
|
|
73
|
+
| [component-watermark.md](component-watermark.md) | Watermark | Repeating overlay for sensitive content. Per-user trace, screenshot deterrent. |
|
|
74
|
+
| [component-code.md](component-code.md) | Code (inline + block) | Monospace text + syntax highlighting + copy button. |
|
|
75
|
+
| [component-css-baseline.md](component-css-baseline.md) | CssBaseline | Root global baseline for app shells. Box sizing, body typography, color-scheme, print, SSR, and reset ownership. |
|
|
76
|
+
| [component-typography.md](component-typography.md) | Typography (text primitive) | Variant-driven text. When NOT to use (Tailwind utility classes are usually clearer). |
|
|
77
|
+
| [component-badge.md](component-badge.md) | Badge | Standalone label + indicator dual modes. Variants (default/secondary/destructive/outline), count + dot indicator on parent. |
|
|
78
|
+
| [component-dropdown.md](component-dropdown.md) | Dropdown / DropdownMenu | Triggered overlay menu of actions. WAI-ARIA Menu pattern, sub-menus, checkbox / radio items, shortcuts. |
|
|
79
|
+
| [component-context-menu.md](component-context-menu.md) | ContextMenu | Right-click / long-press triggered menu. Same WAI-ARIA Menu pattern as Dropdown. |
|
|
80
|
+
| [component-config-provider.md](component-config-provider.md) | ConfigProvider | App-level design-system configuration boundary. Theme, locale, direction, portals, CSP, static APIs, and component defaults. |
|
|
81
|
+
| [component-hover-card.md](component-hover-card.md) | HoverCard | Hover-triggered floating preview. Distinct from Tooltip + Popover; profile previews, link previews. |
|
|
82
|
+
| [component-sheet.md](component-sheet.md) | Sheet | Side-anchored modal panel. Mobile-first detents, side variants (top/right/bottom/left). |
|
|
83
|
+
| [component-command.md](component-command.md) | Command / CommandPalette | cmdk-based searchable command palette. Cmd+K pattern, fuzzy match, async results. |
|
|
84
|
+
| [component-sidebar.md](component-sidebar.md) | Sidebar | Persistent collapsible navigation panel. Icon-only mode, mobile offcanvas, multi-level menu. |
|
|
85
|
+
| [component-navigation-menu.md](component-navigation-menu.md) | NavigationMenu | Top horizontal nav with mega-menu panels. Marketing site / SaaS header pattern. |
|
|
86
|
+
| [component-menubar.md](component-menubar.md) | Menubar | Persistent menu bar (File / Edit / View). Desktop-style web apps; hover-roving between menus. |
|
|
87
|
+
| [component-aspect-ratio.md](component-aspect-ratio.md) | AspectRatio | Lock child to specific aspect ratio. Image, video, card thumbnail wrapper. |
|
|
88
|
+
| [component-collapsible.md](component-collapsible.md) | Collapsible | Single expandable section primitive. Base for Accordion; FAQ, "Show more" patterns. |
|
|
89
|
+
| [component-toggle.md](component-toggle.md) | Toggle / ToggleGroup | Two-state pressable button. Toolbar formatting, mutually-exclusive (single) or independent (multiple) groups. |
|
|
90
|
+
| [component-scroll-area.md](component-scroll-area.md) | ScrollArea | Custom-styled scrollbar. Cross-platform consistency; visibility modes (auto/always/scroll/hover). |
|
|
91
|
+
| [component-banner.md](component-banner.md) | Banner | Persistent in-page strip (system status, trial, cookie consent). Distinct from Alert + Toast. |
|
|
92
|
+
| [component-kbd.md](component-kbd.md) | Kbd | Keyboard shortcut display. Platform-aware Mac/Win symbols, used in tooltips + menus. |
|
|
93
|
+
| [component-separator.md](component-separator.md) | Separator | Horizontal / vertical divider. Decorative vs semantic; aliased as Divider in some libs. |
|
|
94
|
+
| [component-alert-dialog.md](component-alert-dialog.md) | AlertDialog | Modal confirmation for destructive actions. Distinct from Modal; default focus on Cancel; `role="alertdialog"`. |
|
|
95
|
+
| [component-bottom-navigation.md](component-bottom-navigation.md) | BottomNavigation | Mobile primary nav (3-5 tabs). iOS / Android / Material 3 conventions; safe-area handling. |
|
|
96
|
+
| [component-chart.md](component-chart.md) | Chart | Recharts wrapper with theming + a11y. Korean stock convention (red=up); engine-agnostic chart-type table. |
|
|
97
|
+
| [component-combobox.md](component-combobox.md) | Combobox | Searchable select. WAI-ARIA combobox pattern; Korean IME composition handling; multi-select + creatable variants. |
|
|
98
|
+
| [component-field.md](component-field.md) | Field family | Form-field wrapper (Field / FieldLabel / FieldDescription / FieldError / FieldGroup / FieldSet / FieldLegend). |
|
|
99
|
+
| [component-item.md](component-item.md) | Item family | List-item primitive (Item / ItemMedia / ItemContent / ItemTitle / ItemDescription / ItemActions). |
|
|
100
|
+
| [component-link.md](component-link.md) | Link | Text link primitive. Link vs Button decision; external indicator; underline policies; Korean conventions. |
|
|
101
|
+
| [component-paper.md](component-paper.md) | Paper | MUI surface primitive — elevation + outlined variants. Building block for Card, Modal, Drawer. |
|
|
102
|
+
| [component-spinner.md](component-spinner.md) | Spinner | Indeterminate loading indicator. Spinner vs Progress vs Skeleton; size scale; reduced-motion. |
|
|
103
|
+
| [component-empty.md](component-empty.md) | Empty | Inline "no data" primitive. Distinct from EmptyState (full-page custom KR-aware). |
|
|
104
|
+
| [component-masonry.md](component-masonry.md) | Masonry | Pinterest-style staggered grid. CSS multicolumn vs JS measurement trade-offs; a11y reading order. |
|
|
105
|
+
| [component-icon.md](component-icon.md) | Icon | Base primitive for rendering icons; size scale, currentColor theming, decorative vs meaningful. |
|
|
106
|
+
| [component-icon-button.md](component-icon-button.md) | IconButton | Icon-only button. Variants (ghost/outline/filled/tonal), sizes, mandatory aria-label. |
|
|
107
|
+
| [component-checkbox.md](component-checkbox.md) | Checkbox | Form selection control. Indeterminate state, "select all" pattern, Korean marketing-consent rule. |
|
|
108
|
+
| [component-radio.md](component-radio.md) | Radio + RadioGroup | Mutually exclusive choice control. Radio vs Select decision; KR payment-method picker example. |
|
|
109
|
+
| [component-label.md](component-label.md) | Label | Form-control label primitive. htmlFor linking, required/optional indicators, KR conventions. |
|
|
110
|
+
| [component-box.md](component-box.md) | Box | Most generic styled `<div>` primitive. System-prop access; when to use vs Stack/Grid/Flex. |
|
|
111
|
+
| [component-flex.md](component-flex.md) | Flex | flex layout primitive. Direction, gap, align, justify, wrap; common patterns. |
|
|
112
|
+
| [component-grid.md](component-grid.md) | Grid | 2D grid layout. Ant Row+Col / MUI v2 / modern CSS Grid wrapper. |
|
|
113
|
+
| [component-list.md](component-list.md) | List | Semantic + styled wrapper around Item rows. Pagination, infinite scroll, virtualization, empty state. |
|
|
114
|
+
| [component-menu.md](component-menu.md) | Menu | Structured navigation menu (Ant style). Distinct from DropdownMenu / NavigationMenu / Sidebar. |
|
|
115
|
+
| [component-message.md](component-message.md) | Message | Top thin pill notification (Ant). Imperative API; distinct from Toast / Notification. |
|
|
116
|
+
| [component-notification.md](component-notification.md) | Notification | Richer corner card notification. Title + description + actions; placement variants. |
|
|
117
|
+
| [component-space.md](component-space.md) | Space | Tiny utility for inline gap. Direction, size, wrap, split element-between-children. |
|
|
118
|
+
| [component-button-group.md](component-button-group.md) | ButtonGroup | Visually-unified action button cluster. Distinct from ToggleGroup / Segmented. |
|
|
119
|
+
| [component-speed-dial.md](component-speed-dial.md) | SpeedDial | FAB that expands into 2-5 secondary action FABs. Mobile compose pattern. |
|
|
120
|
+
| [component-time-picker.md](component-time-picker.md) | TimePicker | Hour/minute/second picker. 24- vs 12-hour, step granularity, KR conventions, range variant. |
|
|
121
|
+
| [component-tree-select.md](component-tree-select.md) | TreeSelect | Dropdown with hierarchical tree picker. Distinct from Cascader (columns) / Tree (full-page). |
|
|
122
|
+
| [component-backdrop.md](component-backdrop.md) | Backdrop | Semi-opaque scrim overlay. Used internally by Modal/Drawer/Sheet; standalone for full-page loading. |
|
|
123
|
+
| [component-switch.md](component-switch.md) | Switch | iOS-style toggle for binary on/off settings. Distinct from Checkbox (form). |
|
|
124
|
+
| [component-tag.md](component-tag.md) | Tag | Closeable label / chip; filter chips, multi-select selected items. |
|
|
125
|
+
| [component-snackbar.md](component-snackbar.md) | Snackbar | Material's bottom-anchored Toast variant; brief result + optional Undo. |
|
|
126
|
+
| [component-sonner.md](component-sonner.md) | Sonner | Modern shadcn toast library; stacking depth, promise wrapper, rich actions. |
|
|
127
|
+
| [component-textarea.md](component-textarea.md) | Textarea | Multi-line text input. Korean IME composition handling, character counter. |
|
|
128
|
+
| [component-textarea-autosize.md](component-textarea-autosize.md) | TextareaAutosize | Textarea that grows with content; CSS field-sizing + JS measurement fallback. |
|
|
129
|
+
| [component-popconfirm.md](component-popconfirm.md) | Popconfirm | Inline confirmation popover; lightweight alternative to AlertDialog. |
|
|
130
|
+
| [component-popper.md](component-popper.md) | Popper | Low-level positioning primitive. Used internally by Tooltip / Popover / Menu. |
|
|
131
|
+
| [component-swipeable-drawer.md](component-swipeable-drawer.md) | SwipeableDrawer | Drawer with swipe-to-open / swipe-to-close gestures; mobile-first. |
|
|
132
|
+
| [component-resizable.md](component-resizable.md) | Resizable | IDE-style resizable panel groups (horizontal + vertical); layout persistence. |
|
|
133
|
+
| [component-image-list.md](component-image-list.md) | ImageList | Uniform-grid photo display. Distinct from Masonry (varied) and Grid (general). |
|
|
134
|
+
| [component-back-top.md](component-back-top.md) | BackTop | Floating "scroll to top" button after threshold; reduced-motion aware. |
|
|
135
|
+
| [component-click-away-listener.md](component-click-away-listener.md) | ClickAwayListener | Outside-click callback utility. Used internally by overlays. |
|
|
136
|
+
| [component-toolbar.md](component-toolbar.md) | Toolbar | Horizontal action container; app bar / editor / dialog footer. `role="toolbar"`. |
|
|
137
|
+
| [component-step.md](component-step.md) | Step | Single step sub-component within a Steps / Stepper flow. |
|
|
138
|
+
| [component-zoom.md](component-zoom.md) | Zoom | Transition primitive (scale + fade). Sibling to Fade / Slide / Grow. |
|
|
139
|
+
| [component-speed-dial-action.md](component-speed-dial-action.md) | SpeedDialAction | Single action item inside a SpeedDial; child component spec. |
|
|
140
|
+
| [component-slide.md](component-slide.md) | Slide | Direction-based slide-in/out transition. Used internally by Drawer / Sheet / Snackbar. |
|
|
141
|
+
| [component-auto-complete.md](component-auto-complete.md) | AutoComplete | Free-text + suggestions input. (Canonical name; sibling of Combobox.) |
|
|
142
|
+
| [component-mentions.md](component-mentions.md) | Mentions / Mention | @-trigger picker for inline chips / tagging. |
|
|
143
|
+
|
|
144
|
+
### Documentation components
|
|
145
|
+
|
|
146
|
+
| File | Component | Demonstrates |
|
|
147
|
+
| --- | --- | --- |
|
|
148
|
+
| [component-callout.md](component-callout.md) | Callout (doc info/warning/note) | Distinct from Alert. note/tip/info/warning/danger/success types, Korean header conventions. |
|
|
149
|
+
| [component-blockquote.md](component-blockquote.md) | Blockquote | Attributed quotations. Italic Latin / weight-shift Korean. |
|
|
150
|
+
| [component-doc-page.md](component-doc-page.md) | DocPage (doc-site layout) | Header + sidebar + body + right TOC + footer. Distinct from product app Layout. |
|
|
151
|
+
| [component-email-layout.md](component-email-layout.md) | EmailLayout | Table-based responsive email scaffolding. Bulletproof button, preheader, Korean spam law. |
|
|
152
|
+
| [component-descriptions.md](component-descriptions.md) | Descriptions (key-value list) | Static read-only multi-row labels + values. dl semantics, Korean labels. |
|
|
153
|
+
| [component-hero-block.md](component-hero-block.md) | HeroBlock (landing hero) | Headline + sub-headline + CTA + visual. 4 layouts, video/image variants, Korean conventions. |
|
|
154
|
+
| [component-feature-grid.md](component-feature-grid.md) | FeatureGrid | 3-up/4-up feature cells. Icon + title + description per cell. Mobile stacks. |
|
|
155
|
+
| [component-testimonial-carousel.md](component-testimonial-carousel.md) | TestimonialCarousel | Customer quotes. single-large / 3-up-grid / auto-scroll variants. Don't fabricate. |
|
|
156
|
+
| [component-pricing-cards.md](component-pricing-cards.md) | PricingCards | 2–4 pricing tiers with anchoring, monthly/annual toggle, Korean subscription disclosure. |
|
|
157
|
+
|
|
158
|
+
### Custom components (Korean fintech / commerce)
|
|
159
|
+
|
|
160
|
+
| File | Component | Demonstrates |
|
|
161
|
+
| --- | --- | --- |
|
|
162
|
+
| [component-amount-input.md](component-amount-input.md) | AmountInput | KRW-aware currency input. Auto-format, paste handling, IME composition, quick chips, max-balance affordance. |
|
|
163
|
+
| [component-address-input.md](component-address-input.md) | AddressInput | Korean address with Daum Postcode lookup. Two-line structure (zip + main + detail), 도로명/지번 toggle. |
|
|
164
|
+
| [component-biometric-gate.md](component-biometric-gate.md) | BiometricGate | Face ID / Touch ID / fingerprint gate for fintech app launch + sensitive flows. OS API integration, fallback to PIN. |
|
|
165
|
+
| [component-payment-method-selector.md](component-payment-method-selector.md) | PaymentMethodSelector | Korean payment method selector. Audience-driven ordering (consumer vs B2B), saved cards, amount-based filtering. |
|
|
166
|
+
| [component-payment-brand-button.md](component-payment-brand-button.md) | PaymentBrandButton | Brand-styled CTA for KakaoPay / NaverPay / Toss / Apple Pay / Samsung Pay. Official asset compliance. |
|
|
167
|
+
| [component-category-picker.md](component-category-picker.md) | CategoryPicker | 가계부 emoji-first category selector. Horizontal pills / grid / list, custom category creation. |
|
|
168
|
+
| [component-transaction-list-item.md](component-transaction-list-item.md) | TransactionListItem | Most-rendered row in 가계부 / banking. Tabular numerals, amount color semantics, status badges. |
|
|
169
|
+
| [component-account-card.md](component-account-card.md) | AccountCard | Bank account card. Branded logo + masked number + balance. compact/default/hero variants. |
|
|
170
|
+
| [component-stock-chart.md](component-stock-chart.md) | StockChart | Korean inverted color convention (red=up, blue=down). Candle/line/area, crosshair, performance with canvas. |
|
|
171
|
+
| [component-krw-amount.md](component-krw-amount.md) | KRWAmount (display-only) | Display counterpart to AmountInput. Comma vs Korean number format, sign, hero variant. |
|
|
172
|
+
| [component-payment-receipt.md](component-payment-receipt.md) | PaymentReceipt | Korean receipt convention with dotted dividers, structured price breakdown, share/reorder actions. |
|
|
173
|
+
| [component-pass-auth.md](component-pass-auth.md) | PASSAuth (Korean 본인인증) | Wraps PASS app / NICE / KCB identity verification. Required for high-value Korean fintech transactions. |
|
|
174
|
+
| [component-otp-countdown.md](component-otp-countdown.md) | OTPCountdown | SMS code expiration timer + resend cooldown. Pairs with InputOTP. |
|
|
175
|
+
|
|
176
|
+
### Motion components
|
|
177
|
+
|
|
178
|
+
| File | Component | Demonstrates |
|
|
179
|
+
| --- | --- | --- |
|
|
180
|
+
| [component-loading-sequence.md](component-loading-sequence.md) | LoadingSequence | Splash + biometric gate + first-screen reveal coordination for cold launch. Korean fintech default. |
|
|
181
|
+
| [component-page-transition.md](component-page-transition.md) | PageTransition | Route-level wrapper (fade / slide / hero variants). Framer Motion + View Transitions API implementations. |
|
|
182
|
+
| [component-lottie-player.md](component-lottie-player.md) | LottiePlayer | After Effects animation embed with lazy-load, offscreen pause, poster fallback, reduced-motion handling. |
|
|
183
|
+
| [component-scroll-reveal.md](component-scroll-reveal.md) | ScrollReveal | Viewport-triggered animation primitive (fade-up / fade-in-blur / scale-in) with stagger and `once` semantics. |
|
|
184
|
+
|
|
185
|
+
### Illustration components
|
|
186
|
+
|
|
187
|
+
| File | Component | Demonstrates |
|
|
188
|
+
| --- | --- | --- |
|
|
189
|
+
| [component-empty-state.md](component-empty-state.md) | EmptyState | Layout for "no data yet" surfaces. Illustration registry, voice rules, KR 해요체 default. |
|
|
190
|
+
| [component-illustration.md](component-illustration.md) | Illustration | Themeable SVG / Lottie display backed by a typesafe illustration registry. |
|
|
191
|
+
|
|
192
|
+
### Print specs
|
|
193
|
+
|
|
194
|
+
| File | Piece | Demonstrates |
|
|
195
|
+
| --- | --- | --- |
|
|
196
|
+
| [print-business-card-spec.md](print-business-card-spec.md) | Korean 명함 (premium tier) | Korean fintech business card spec: 90×50mm, 350gsm uncoated, soft-touch + spot UV, Pretendard, Pantone + CMYK, file delivery checklist. |
|
|
197
|
+
| [print-packaging-spec.md](print-packaging-spec.md) | Folding carton (cosmetics) | Korean cosmetics carton spec: dieline, KFDA regulatory content (전성분 / 사용기한 / 분리배출 표시), FSC + soy ink, press proof. |
|
|
198
|
+
|
|
199
|
+
### Video components
|
|
200
|
+
|
|
201
|
+
| File | Component | Demonstrates |
|
|
202
|
+
| --- | --- | --- |
|
|
203
|
+
| [component-video-player.md](component-video-player.md) | VideoPlayer | Accessible HTML5 video with multi-language captions, speed control, transcript link, reduced-motion handling. |
|
|
204
|
+
| [component-video-hero.md](component-video-hero.md) | VideoHero | Above-the-fold autoplay loop with poster fallback, art-direction (mobile vs desktop video), reduced-motion + slow-connection skip. |
|
|
205
|
+
|
|
206
|
+
### Game UI components
|
|
207
|
+
|
|
208
|
+
| File | Component | Demonstrates |
|
|
209
|
+
| --- | --- | --- |
|
|
210
|
+
| [component-game-hud.md](component-game-hud.md) | GameHUD | Composable HUD shell with anchored slots, customization, color-blind / contrast modes, UI scale, cross-platform input. |
|
|
211
|
+
| [component-game-menu.md](component-game-menu.md) | GameMenu | Composable menu shell — main / pause / settings / inventory / store. Focus management, controller / d-pad nav, button-prompt swapping per platform, modal stacking. |
|
|
212
|
+
|
|
213
|
+
### Conversational UI components
|
|
214
|
+
|
|
215
|
+
| File | Component | Demonstrates |
|
|
216
|
+
| --- | --- | --- |
|
|
217
|
+
| [component-chat-interface.md](component-chat-interface.md) | ChatInterface | Reusable chat shell for chatbot / AI / live agent. Markdown + code block rendering, streaming, suggested chips, typing indicator, attachments, Korean IME + 해요체 defaults. |
|
|
218
|
+
| [component-voice-input.md](component-voice-input.md) | VoiceInput | Push-to-talk + transcript voice input. Web Speech / Clova / Whisper backends, listening visualization, permission handling, Korean STT defaults. |
|
|
219
|
+
|
|
220
|
+
### Spatial / AR / VR components
|
|
221
|
+
|
|
222
|
+
| File | Component | Demonstrates |
|
|
223
|
+
| --- | --- | --- |
|
|
224
|
+
| [component-spatial-panel.md](component-spatial-panel.md) | SpatialPanel | Floating 2D-in-3D panel for VR / AR / spatial computing. Anchoring (world / wrist / hand / head), distance / scale / billboarding, comfort positioning, hand + gaze input, depth occlusion. |
|
|
225
|
+
| [component-spatial-locomotion.md](component-spatial-locomotion.md) | SpatialLocomotion | VR locomotion controller with teleport, smooth, snap-turn, room-scale modes; comfort vignette, fade transitions, comfort-default presets. |
|
|
226
|
+
|
|
227
|
+
### Documentation worked examples
|
|
228
|
+
|
|
229
|
+
| File | Skill | Demonstrates |
|
|
230
|
+
| --- | --- | --- |
|
|
231
|
+
| [doc-tutorial-example.md](doc-tutorial-example.md) | `document-author` (tutorial) | Canonical tutorial format — time + audience, "what you'll build", numbered steps with confirmation, "what's next". |
|
|
232
|
+
| [doc-how-to-example.md](doc-how-to-example.md) | `document-author` (how-to) | Problem-driven format — TL;DR + steps + variations + pitfalls. Korean localization context. |
|
|
233
|
+
| [doc-explanation-example.md](doc-explanation-example.md) | `document-author` (explanation) | Discursive format — problem / alternatives / decision / tradeoffs. W3C DTCG choice rationale. |
|
|
234
|
+
| [slide-deck-example.md](slide-deck-example.md) | `slide-deck-author` (talk) | 17-slide talk deck outline. Message-led titles, one visual per slide, speaker notes, Korean conference voice. |
|
|
235
|
+
| [report-example.md](report-example.md) | `ux-audit` | UX audit report — TL;DR pyramid, severity-aggregated findings, citations, code diffs, "things that work well". |
|
|
236
|
+
| [email-transactional-example.md](email-transactional-example.md) | `document-author` (email) | Korean fintech transactional email — preheader, receipt structure, bulletproof button, sender info per 정보통신망법. |
|
|
237
|
+
|
|
238
|
+
### End-to-end deliverables
|
|
239
|
+
|
|
240
|
+
| File | Skill | Demonstrates |
|
|
241
|
+
| --- | --- | --- |
|
|
242
|
+
| [dogfood-korean-fintech-system.md](dogfood-korean-fintech-system.md) | `design-system-builder` | Full design system bootstrap for a Korean fintech mobile app. Token cascade + foundations + component baseline + starter set + handoff. |
|
|
243
|
+
|
|
244
|
+
## How to use these
|
|
245
|
+
|
|
246
|
+
These are **reference shapes**, not templates to copy verbatim. When invoking a skill:
|
|
247
|
+
|
|
248
|
+
1. Note the structure (which sections appear, in what order).
|
|
249
|
+
2. Note the specificity (every claim has a number or a citation).
|
|
250
|
+
3. Note the tradeoffs section (every choice has a "why this and not the obvious alternative").
|
|
251
|
+
|
|
252
|
+
Adapt to your input.
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# Dogfood v4 — Korean B2B SaaS HR onboarding
|
|
2
|
+
|
|
3
|
+
End-to-end test of the design-ai v4.6 corpus on a realistic Korean B2B scenario. This is a *practical* run — every section invokes the skill / knowledge file it would in production, and the output is what an adopter would receive.
|
|
4
|
+
|
|
5
|
+
## Brief
|
|
6
|
+
|
|
7
|
+
> "팀온보딩" — Korean B2B SaaS HR app for small/mid companies (10–500 employees). The product handles new-employee onboarding: document collection (계약서, 신분증, 통장 사본), e-signature, IT account provisioning, first-week checklist. Audience: HR managers (primary), new hires (secondary). Brand voice: calm, professional, trust-driven (handling sensitive personal data). Primary brand color: muted teal `#0D9488`. Stack: shadcn-ui + Tailwind v4 + React 18. Locale: Korean primary; English UI for international hires (toggle). Density: comfortable. Light + dark.
|
|
8
|
+
|
|
9
|
+
Skills to invoke: `design-system-builder` → `color-palette` → `component-spec-writer` → `ux-audit`.
|
|
10
|
+
|
|
11
|
+
## Step 1 — Bootstrap tokens (via `design-system-builder`)
|
|
12
|
+
|
|
13
|
+
### Color tokens (cite [`knowledge/colors/color-theory.md`](../../knowledge/colors/color-theory.md))
|
|
14
|
+
|
|
15
|
+
Brand seed: `#0D9488` (teal-600). Generated full ramp:
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
# brand
|
|
19
|
+
brand-50: #F0FDFA
|
|
20
|
+
brand-100: #CCFBF1
|
|
21
|
+
brand-200: #99F6E4
|
|
22
|
+
brand-300: #5EEAD4
|
|
23
|
+
brand-400: #2DD4BF
|
|
24
|
+
brand-500: #14B8A6
|
|
25
|
+
brand-600: #0D9488 # primary
|
|
26
|
+
brand-700: #0F766E
|
|
27
|
+
brand-800: #115E59
|
|
28
|
+
brand-900: #134E4A
|
|
29
|
+
brand-950: #042F2E
|
|
30
|
+
|
|
31
|
+
# neutral (cool-gray to pair with teal)
|
|
32
|
+
neutral-50: #F9FAFB
|
|
33
|
+
neutral-100: #F3F4F6
|
|
34
|
+
neutral-200: #E5E7EB
|
|
35
|
+
neutral-300: #D1D5DB
|
|
36
|
+
neutral-400: #9CA3AF
|
|
37
|
+
neutral-500: #6B7280
|
|
38
|
+
neutral-600: #4B5563
|
|
39
|
+
neutral-700: #374151
|
|
40
|
+
neutral-800: #1F2937
|
|
41
|
+
neutral-900: #111827
|
|
42
|
+
neutral-950: #030712
|
|
43
|
+
|
|
44
|
+
# semantic — sensitive data context
|
|
45
|
+
success: #10B981
|
|
46
|
+
warning: #F59E0B
|
|
47
|
+
error: #EF4444
|
|
48
|
+
info: #3B82F6
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Semantic aliases (cite [`knowledge/colors/color-theory.md`](../../knowledge/colors/color-theory.md))
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
# light
|
|
55
|
+
--color-bg-default: white
|
|
56
|
+
--color-bg-subtle: neutral-50
|
|
57
|
+
--color-bg-muted: neutral-100
|
|
58
|
+
--color-fg-default: neutral-900
|
|
59
|
+
--color-fg-muted: neutral-600
|
|
60
|
+
--color-fg-subtle: neutral-400
|
|
61
|
+
--color-fg-on-brand: white
|
|
62
|
+
--color-border-default: neutral-200
|
|
63
|
+
--color-border-strong: neutral-300
|
|
64
|
+
--color-brand-bg: brand-600
|
|
65
|
+
--color-brand-bg-hover: brand-700
|
|
66
|
+
--color-brand-fg: white
|
|
67
|
+
--color-error-bg: error
|
|
68
|
+
--color-error-fg: white
|
|
69
|
+
|
|
70
|
+
# dark — invert with care; brand stays at -500 for legibility on dark
|
|
71
|
+
--color-bg-default: neutral-900
|
|
72
|
+
--color-bg-subtle: neutral-800
|
|
73
|
+
--color-fg-default: neutral-50
|
|
74
|
+
--color-fg-muted: neutral-400
|
|
75
|
+
--color-brand-bg: brand-500 # NOT brand-600 in dark
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Contrast verified per [`knowledge/a11y/contrast.md`](../../knowledge/a11y/contrast.md):
|
|
79
|
+
- `fg-default` on `bg-default`: 17.79:1 (AAA ✓)
|
|
80
|
+
- `brand-fg` on `brand-bg`: 4.94:1 (AA large ✓; AA normal at -700: 6.96:1 ✓)
|
|
81
|
+
- `error-fg` on `error-bg`: 4.83:1 (AA large ✓)
|
|
82
|
+
|
|
83
|
+
### Typography (cite [`knowledge/i18n/korean-typography.md`](../../knowledge/i18n/korean-typography.md))
|
|
84
|
+
|
|
85
|
+
```css
|
|
86
|
+
font-family-sans: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont,
|
|
87
|
+
system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo",
|
|
88
|
+
"Noto Sans KR", "Malgun Gothic", sans-serif;
|
|
89
|
+
font-family-mono: "JetBrains Mono", "D2Coding", monospace;
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Type scale (base 14 product UI; +10% line-height for Korean per knowledge file):
|
|
93
|
+
|
|
94
|
+
| Variant | Size | Weight | Line-height (KR-bumped) |
|
|
95
|
+
| --- | --- | --- | --- |
|
|
96
|
+
| display | 32 | 700 | 1.32 |
|
|
97
|
+
| heading-lg | 24 | 600 | 1.42 |
|
|
98
|
+
| heading-md | 20 | 600 | 1.5 |
|
|
99
|
+
| heading-sm | 16 | 600 | 1.6 |
|
|
100
|
+
| body-lg | 16 | 400 | 1.65 |
|
|
101
|
+
| body | 14 | 400 | 1.65 |
|
|
102
|
+
| caption | 12 | 400 | 1.55 |
|
|
103
|
+
|
|
104
|
+
### Spacing / radius / elevation
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
space: 4 8 12 16 20 24 32 40 48 64 # 9 stops, 4-base
|
|
108
|
+
radius: 0 4 6 8 12 16 999 # last is "pill"
|
|
109
|
+
elevation: 0 sm md lg xl # 5 stops; subtle for B2B (less playful)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Step 2 — Spec a component (via `component-spec-writer`)
|
|
113
|
+
|
|
114
|
+
The HR onboarding flow's first screen is "신규 입사자 정보 입력". Five fields: 이름 / 사번 / 입사일 / 부서 / 이메일. Three of these are FormControls. Let me spec the **EmployeeInfoForm** composition.
|
|
115
|
+
|
|
116
|
+
This exercises the v4.5 polished `form-control.md` spec end-to-end.
|
|
117
|
+
|
|
118
|
+
### EmployeeInfoForm — composition spec
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
const actionRowSx = { mt: 3 };
|
|
122
|
+
|
|
123
|
+
<form onSubmit={handleSubmit}>
|
|
124
|
+
<FormControl error={!!errors.name} required disabled={isSubmitting} fullWidth>
|
|
125
|
+
<FormLabel htmlFor="name">이름</FormLabel>
|
|
126
|
+
<OutlinedInput
|
|
127
|
+
id="name"
|
|
128
|
+
value={values.name}
|
|
129
|
+
onChange={handleChange}
|
|
130
|
+
aria-invalid={!!errors.name}
|
|
131
|
+
aria-describedby={errors.name ? "name-error" : "name-help"}
|
|
132
|
+
/>
|
|
133
|
+
<FormHelperText id={errors.name ? "name-error" : "name-help"}>
|
|
134
|
+
{errors.name ?? "주민등록상 이름과 동일하게 입력해 주세요"}
|
|
135
|
+
</FormHelperText>
|
|
136
|
+
</FormControl>
|
|
137
|
+
|
|
138
|
+
<FormControl error={!!errors.employeeId} required fullWidth>
|
|
139
|
+
<FormLabel htmlFor="employeeId">사번</FormLabel>
|
|
140
|
+
<OutlinedInput
|
|
141
|
+
id="employeeId"
|
|
142
|
+
value={values.employeeId}
|
|
143
|
+
onChange={handleChange}
|
|
144
|
+
placeholder="2026-001"
|
|
145
|
+
aria-invalid={!!errors.employeeId}
|
|
146
|
+
/>
|
|
147
|
+
<FormHelperText>인사 담당자에게 받은 사번을 입력해 주세요</FormHelperText>
|
|
148
|
+
</FormControl>
|
|
149
|
+
|
|
150
|
+
<FormControl required fullWidth>
|
|
151
|
+
<FormLabel htmlFor="hireDate">입사일</FormLabel>
|
|
152
|
+
<DatePicker id="hireDate" value={values.hireDate} onChange={handleChange} />
|
|
153
|
+
</FormControl>
|
|
154
|
+
|
|
155
|
+
<FormControl required fullWidth>
|
|
156
|
+
<FormLabel htmlFor="department">부서</FormLabel>
|
|
157
|
+
<Select id="department" value={values.department} onChange={handleChange}>
|
|
158
|
+
<MenuItem value="engineering">개발</MenuItem>
|
|
159
|
+
<MenuItem value="design">디자인</MenuItem>
|
|
160
|
+
<MenuItem value="product">기획</MenuItem>
|
|
161
|
+
<MenuItem value="hr">인사</MenuItem>
|
|
162
|
+
</Select>
|
|
163
|
+
</FormControl>
|
|
164
|
+
|
|
165
|
+
<FormControl error={!!errors.email} required fullWidth>
|
|
166
|
+
<FormLabel htmlFor="email">회사 이메일</FormLabel>
|
|
167
|
+
<OutlinedInput
|
|
168
|
+
id="email"
|
|
169
|
+
type="email"
|
|
170
|
+
value={values.email}
|
|
171
|
+
onChange={handleChange}
|
|
172
|
+
placeholder="hong@team-onboarding.kr"
|
|
173
|
+
/>
|
|
174
|
+
<FormHelperText>{errors.email ?? "회사 도메인 이메일을 입력해 주세요"}</FormHelperText>
|
|
175
|
+
</FormControl>
|
|
176
|
+
|
|
177
|
+
<Stack direction="row" justifyContent="flex-end" gap={1} sx={actionRowSx}>
|
|
178
|
+
<Button variant="outlined" onClick={handleCancel}>취소</Button>
|
|
179
|
+
<LoadingButton type="submit" variant="contained" loading={isSubmitting}>
|
|
180
|
+
다음 단계
|
|
181
|
+
</LoadingButton>
|
|
182
|
+
</Stack>
|
|
183
|
+
</form>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Korean text density adjustments (cite [`knowledge/typography/korean-typography.md`](../../knowledge/i18n/korean-typography.md))
|
|
187
|
+
|
|
188
|
+
- Field labels keep short (1-3 words). "이메일" not "이메일 주소를 입력해 주세요" — that goes in helper text.
|
|
189
|
+
- Helper text uses 해요체 ("입력해 주세요"). For legal forms (e.g., contract page), switch to 합쇼체 ("입력하시기 바랍니다") per [`knowledge/conversational/korean-voice-conventions.md`](../../knowledge/conversational/korean-voice-conventions.md).
|
|
190
|
+
- Min-height on FormControl rows: 56px (vs 48px Latin default) — Hangul reads taller per the knowledge file.
|
|
191
|
+
|
|
192
|
+
### Tokens consumed (per [`examples/component-form-control.md`](../component-form-control.md))
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
--color-fg-default
|
|
196
|
+
--color-fg-error
|
|
197
|
+
--color-fg-primary
|
|
198
|
+
--color-bg-default
|
|
199
|
+
--color-border-default
|
|
200
|
+
--color-border-strong
|
|
201
|
+
--space-md /* horizontal padding */
|
|
202
|
+
--space-sm /* helper-text margin-top */
|
|
203
|
+
--space-lg /* between FormControls */
|
|
204
|
+
--font-size-body /* 14px */
|
|
205
|
+
--line-height-body /* 1.65 KR-bumped */
|
|
206
|
+
--radius-md
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Step 3 — Spec the document upload (uses Card + Dialog families)
|
|
210
|
+
|
|
211
|
+
Document collection screen needs a confirmation dialog before upload. Exercises v4.5's polished `dialog-title.md` / `dialog-content.md` / `dialog-actions.md`:
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
const documentCardSx = { maxWidth: 480 };
|
|
215
|
+
const secondaryCopySx = { mt: 1 };
|
|
216
|
+
const documentListSx = { mt: 2 };
|
|
217
|
+
|
|
218
|
+
<Card sx={documentCardSx}>
|
|
219
|
+
<CardContent>
|
|
220
|
+
<Typography variant="h6">필수 서류 업로드</Typography>
|
|
221
|
+
<Typography variant="body2" color="text.secondary" sx={secondaryCopySx}>
|
|
222
|
+
계약서 · 신분증 · 통장 사본
|
|
223
|
+
</Typography>
|
|
224
|
+
|
|
225
|
+
<List sx={documentListSx}>
|
|
226
|
+
{documents.map((doc) => (
|
|
227
|
+
<ListItem
|
|
228
|
+
key={doc.id}
|
|
229
|
+
secondaryAction={
|
|
230
|
+
doc.uploaded ? (
|
|
231
|
+
<CheckIcon color="success" aria-label="업로드 완료" />
|
|
232
|
+
) : (
|
|
233
|
+
<Button size="small" onClick={() => handleUpload(doc.id)}>
|
|
234
|
+
업로드
|
|
235
|
+
</Button>
|
|
236
|
+
)
|
|
237
|
+
}
|
|
238
|
+
>
|
|
239
|
+
<ListItemText primary={doc.name} secondary={doc.description} />
|
|
240
|
+
</ListItem>
|
|
241
|
+
))}
|
|
242
|
+
</List>
|
|
243
|
+
</CardContent>
|
|
244
|
+
<CardActions>
|
|
245
|
+
<Button size="small" onClick={handleSkipForNow}>나중에 하기</Button>
|
|
246
|
+
<Button size="small" variant="contained" onClick={handleSubmitAll}>
|
|
247
|
+
제출하기
|
|
248
|
+
</Button>
|
|
249
|
+
</CardActions>
|
|
250
|
+
</Card>
|
|
251
|
+
|
|
252
|
+
{/* Confirmation dialog — uses v4.5 family-completed primitives */}
|
|
253
|
+
<Dialog
|
|
254
|
+
open={confirmOpen}
|
|
255
|
+
onClose={() => setConfirmOpen(false)}
|
|
256
|
+
aria-labelledby="confirm-title"
|
|
257
|
+
aria-describedby="confirm-desc"
|
|
258
|
+
fullWidth
|
|
259
|
+
maxWidth="sm"
|
|
260
|
+
>
|
|
261
|
+
<DialogTitle id="confirm-title">서류를 제출할까요?</DialogTitle>
|
|
262
|
+
<DialogContent>
|
|
263
|
+
<DialogContentText id="confirm-desc">
|
|
264
|
+
제출 후에는 인사팀 검토를 거쳐 변경이 어려워요. 모든 정보가 정확한지 확인해 주세요.
|
|
265
|
+
</DialogContentText>
|
|
266
|
+
</DialogContent>
|
|
267
|
+
<DialogActions>
|
|
268
|
+
<Button onClick={() => setConfirmOpen(false)}>다시 확인</Button>
|
|
269
|
+
<LoadingButton
|
|
270
|
+
onClick={handleConfirmSubmit}
|
|
271
|
+
loading={isSubmitting}
|
|
272
|
+
variant="contained"
|
|
273
|
+
autoFocus
|
|
274
|
+
>
|
|
275
|
+
네, 제출할게요
|
|
276
|
+
</LoadingButton>
|
|
277
|
+
</DialogActions>
|
|
278
|
+
</Dialog>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Citations:
|
|
282
|
+
- [`examples/component-card-content.md`](../component-card-content.md) — Card body region
|
|
283
|
+
- [`examples/component-card-actions.md`](../component-card-actions.md) — Card action row (left-aligned)
|
|
284
|
+
- [`examples/component-list-item.md`](../component-list-item.md) — ListItem with secondaryAction
|
|
285
|
+
- [`examples/component-dialog-title.md`](../component-dialog-title.md) — required `id` for `aria-labelledby`
|
|
286
|
+
- [`examples/component-dialog-content.md`](../component-dialog-content.md) — `DialogContentText` with `id` for `aria-describedby`
|
|
287
|
+
- [`examples/component-dialog-actions.md`](../component-dialog-actions.md) — Cancel · Primary order (Korean / Western convention)
|
|
288
|
+
|
|
289
|
+
## Step 4 — UX audit (via `ux-audit` skill)
|
|
290
|
+
|
|
291
|
+
Quick audit of the bootstrap output:
|
|
292
|
+
|
|
293
|
+
| Issue | Severity | Resolution |
|
|
294
|
+
| --- | --- | --- |
|
|
295
|
+
| Field labels in 합쇼체 vs helper-text in 해요체 — register mismatch | MEDIUM | Standardized on 해요체 throughout (matches B2B onboarding tone, less stiff than 합쇼체) |
|
|
296
|
+
| `email` field has placeholder + helper text + error message → 3 strings competing | MEDIUM | Removed placeholder; rely on helper text. Placeholder disappears on focus, accessibility issue |
|
|
297
|
+
| No password field in initial draft | INFO | Out of scope for this screen; password set on email-verify step |
|
|
298
|
+
| `LoadingButton` not in our spec'd components | HIGH | Need spec for it OR reference MUI directly. Action: add to roadmap |
|
|
299
|
+
| Department `Select` with 4 options — should be radio? | LOW | 4 is borderline. Select OK on mobile (saves vertical space). Radio better on desktop. Acceptable |
|
|
300
|
+
| No "save draft" before "다음 단계" — risky if user navigates away | HIGH | Add auto-save on blur per [`knowledge/patterns/form-design.md`](../../knowledge/patterns/form-design.md) |
|
|
301
|
+
|
|
302
|
+
### Don't / avoid
|
|
303
|
+
|
|
304
|
+
- Don't use placeholder text as the only field instruction; it disappears on focus and weakens screen-reader support.
|
|
305
|
+
- Avoid hiding document-upload errors behind a generic toast. Inline status plus `aria-describedby` keeps the HR manager's recovery path visible.
|
|
306
|
+
|
|
307
|
+
### Conversational support notes
|
|
308
|
+
|
|
309
|
+
This screen can hand off to an HR assistant chat without changing the form contract. Primary intent examples: `upload_document`, `change_hire_date`, and `ask_required_documents`. Example utterance: "신분증은 어떤 파일 형식으로 올려야 하나요?" Turn-taking rule: answer the current question first, then offer one next action such as "파일 선택" or "인사팀에 문의". Fallback repair: when the assistant cannot identify the document type, ask one clarifying question and keep the user in the current step.
|
|
310
|
+
|
|
311
|
+
### QA and PR review notes
|
|
312
|
+
|
|
313
|
+
- Design-system QA: token checks cover color/spacing/type names, accessibility checks cover `aria-invalid` and focus order, and visual regression should snapshot light/dark EmployeeInfoForm plus mobile document upload in Storybook.
|
|
314
|
+
- Figma token sync: Figma variables should map to the semantic token aliases above, with `--color-brand-bg` and typography tokens treated as the source of truth for export/import reviews.
|
|
315
|
+
- Design PR review: changed files would include the form composition, document upload card, and dialog wiring. Impact is highest on HR manager onboarding completion and secondary on new-hire document submission. Validation should include keyboard-only flow, screen-reader labels, and responsive viewport checks.
|
|
316
|
+
|
|
317
|
+
## Step 5 — Stability review dogfood
|
|
318
|
+
|
|
319
|
+
Ran `/stability-review` mid-session to test:
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
$ python3 tools/audit/stability-review.py --today 2026-12
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Output:
|
|
326
|
+
- 90 stable, 0 beta/experimental/deprecated.
|
|
327
|
+
- 1 file without metadata: `knowledge/COVERAGE.md` (generated artifact — false positive).
|
|
328
|
+
- No promotion candidates yet (all v4.x knowledge is stable from day one).
|
|
329
|
+
- 0 stale stable files at 7-month projection.
|
|
330
|
+
|
|
331
|
+
**Finding**: `knowledge/COVERAGE.md` showing as "missing stability" is noise. It's a generated index, not a knowledge document. Either:
|
|
332
|
+
1. Add `stability: stable` to the generator (signals "as fresh as the last regen").
|
|
333
|
+
2. Skip generated files in `stability-review.py`.
|
|
334
|
+
|
|
335
|
+
## Step 6 — What v4 enabled vs v3
|
|
336
|
+
|
|
337
|
+
| Capability | v3 dogfood (fintech) | v4 dogfood (HR) |
|
|
338
|
+
| --- | --- | --- |
|
|
339
|
+
| Form-Control composition spec | I had to invent | `component-form-control.md` exists; cited directly |
|
|
340
|
+
| Dialog-Title with `aria-labelledby` | I had to research | `component-dialog-title.md` makes the contract explicit |
|
|
341
|
+
| ListItem with secondaryAction | I conflated with ListItemButton | `component-list-item.md` clarifies the boundary |
|
|
342
|
+
| Card-Actions left-align convention | Unclear | `component-card-actions.md` documents it + cites Korean B2C precedent |
|
|
343
|
+
| Korean B2B tone (해요체 vs 합쇼체) | General KR knowledge | Specific to onboarding context — could use a knowledge file |
|
|
344
|
+
| Stability review | Manual | `/stability-review` automates |
|
|
345
|
+
|
|
346
|
+
## Output — what I'd hand to a developer
|
|
347
|
+
|
|
348
|
+
The above sections constitute the initial spec hand-off. Adopter receives:
|
|
349
|
+
|
|
350
|
+
1. Token JSON (color / typography / spacing / radius / elevation / motion).
|
|
351
|
+
2. EmployeeInfoForm composition spec (TypeScript).
|
|
352
|
+
3. Document upload card + confirmation dialog spec.
|
|
353
|
+
4. UX audit findings (6 issues categorized by severity).
|
|
354
|
+
5. Stability review report (no actions needed this quarter).
|
|
355
|
+
|
|
356
|
+
Total elapsed: ~30 min reading + composing for a senior-designer-equivalent hand-off. v3 dogfood took ~50 min for similar scope.
|