@design-ai/cli 4.56.0 → 4.57.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 +109 -25
- package/CHANGELOG.md +36 -0
- package/README.ko.md +9 -26
- package/README.md +10 -23
- package/cli/bin/design-ai.mjs +1 -0
- package/cli/commands/help.mjs +7 -4
- package/cli/commands/index.mjs +292 -0
- package/cli/commands/learn-help.mjs +149 -0
- package/cli/commands/learn-print-profile.mjs +373 -0
- package/cli/commands/learn-print-restore.mjs +349 -0
- package/cli/commands/learn-print-signals.mjs +453 -0
- package/cli/commands/learn.mjs +60 -1281
- package/cli/commands/pack.mjs +7 -3
- package/cli/commands/prompt.mjs +7 -3
- package/cli/commands/search.mjs +94 -1
- package/cli/lib/dispatch.mjs +3 -0
- package/cli/lib/embedding-index.mjs +199 -0
- package/cli/lib/embedding-provider.mjs +121 -0
- package/cli/lib/embedding-rerank.mjs +52 -0
- package/cli/lib/learn-args.mjs +490 -0
- package/cli/lib/learn-backup.mjs +748 -0
- package/cli/lib/learn-curation.mjs +612 -0
- package/cli/lib/learn-eval.mjs +459 -0
- package/cli/lib/learn-profile.mjs +763 -0
- package/cli/lib/learn-select.mjs +223 -0
- package/cli/lib/learn-shared.mjs +158 -0
- package/cli/lib/learn-test-support.mjs +218 -0
- package/cli/lib/learn-usage.mjs +360 -0
- package/cli/lib/learn.mjs +83 -3694
- package/cli/lib/lexical.mjs +137 -0
- package/cli/lib/local-config.mjs +110 -0
- package/cli/lib/mcp-server.mjs +13 -3
- package/cli/lib/pack.mjs +31 -4
- package/cli/lib/prompt.mjs +42 -4
- package/cli/lib/recall.mjs +193 -0
- package/cli/lib/retrieval-index.mjs +0 -0
- package/cli/lib/search-ranked.mjs +170 -0
- package/cli/lib/search.mjs +11 -1
- package/cli/lib/signals-backlog-commands.mjs +673 -0
- package/cli/lib/signals-backlog.mjs +361 -0
- package/cli/lib/signals-eval.mjs +176 -0
- package/cli/lib/signals-readiness.mjs +247 -0
- package/cli/lib/signals-registry.mjs +377 -0
- package/cli/lib/signals-render.mjs +478 -0
- package/cli/lib/signals-shared.mjs +75 -0
- package/cli/lib/signals.mjs +16 -2337
- package/cli/lib/site-bundle-handoff-expected.mjs +173 -0
- package/cli/lib/site-bundle-handoff-runbook-action-summary.mjs +332 -0
- package/cli/lib/site-bundle-handoff-runbook-human-lines.mjs +167 -0
- package/cli/lib/site-bundle-handoff-runbook-maps.mjs +238 -0
- package/cli/lib/site-bundle-handoff-runbook-next-step.mjs +278 -0
- package/cli/lib/site-bundle-handoff-runbook.mjs +44 -931
- package/cli/lib/site-test-support.mjs +68 -0
- package/cli/lib/skill-proposals-apply-commands.mjs +135 -0
- package/cli/lib/skill-proposals-apply-contract.mjs +750 -0
- package/cli/lib/skill-proposals-apply-plan.mjs +118 -0
- package/cli/lib/skill-proposals-generate.mjs +298 -0
- package/cli/lib/skill-proposals-render.mjs +532 -0
- package/cli/lib/skill-proposals-review.mjs +262 -0
- package/cli/lib/skill-proposals.mjs +15 -2046
- package/cli/lib/workspace-args.mjs +83 -0
- package/cli/lib/workspace-git.mjs +169 -0
- package/cli/lib/workspace-learning.mjs +483 -0
- package/cli/lib/workspace-repo.mjs +139 -0
- package/cli/lib/workspace-report.mjs +283 -0
- package/cli/lib/workspace-test-support.mjs +99 -0
- package/cli/lib/workspace.mjs +30 -1056
- package/docs/AI-LEARNING-PHASE2.md +215 -0
- package/docs/DISTRIBUTION.ko.md +2 -2
- package/docs/DISTRIBUTION.md +2 -2
- package/docs/NEXT-SURFACE-DECISION.md +125 -0
- package/docs/PRODUCT-READINESS.md +3 -3
- package/docs/RELEASE-GATES.ko.md +35 -0
- package/docs/RELEASE-GATES.md +234 -0
- package/docs/ROADMAP.md +53 -8
- package/docs/external-status.md +6 -8
- package/docs/inspection-20260630.md +169 -0
- package/docs/integrations/design-ai-mcp-server.md +4 -4
- package/docs/reference/ant-design.md +413 -0
- package/docs/reference/awesome-design-md.md +439 -0
- package/docs/reference/mui.md +783 -0
- package/docs/reference/shadcn-ui.md +298 -0
- package/examples/component-accordion-actions.md +5 -5
- package/examples/component-accordion-details.md +5 -5
- package/examples/component-accordion-summary.md +5 -5
- package/examples/component-accordion.md +3 -3
- package/examples/component-affix.md +1 -1
- package/examples/component-alert-dialog.md +1 -1
- package/examples/component-alert-title.md +1 -1
- package/examples/component-alert.md +3 -3
- package/examples/component-anchor.md +1 -1
- package/examples/component-app-bar.md +1 -1
- package/examples/component-aspect-ratio.md +1 -1
- package/examples/component-auto-complete.md +2 -2
- package/examples/component-avatar-group.md +5 -5
- package/examples/component-avatar.md +3 -3
- package/examples/component-back-top.md +1 -1
- package/examples/component-backdrop.md +1 -1
- package/examples/component-badge.md +3 -3
- package/examples/component-border-beam.md +3 -3
- package/examples/component-bottom-navigation.md +1 -1
- package/examples/component-box.md +1 -1
- package/examples/component-breadcrumb.md +3 -3
- package/examples/component-button-base.md +3 -3
- package/examples/component-button-group.md +2 -2
- package/examples/component-button.md +3 -3
- package/examples/component-calendar.md +2 -2
- package/examples/component-card-actions.md +1 -1
- package/examples/component-card-content.md +1 -1
- package/examples/component-card-header.md +1 -1
- package/examples/component-card-media.md +1 -1
- package/examples/component-card.md +3 -3
- package/examples/component-carousel.md +2 -2
- package/examples/component-cascader.md +1 -1
- package/examples/component-chart.md +1 -1
- package/examples/component-checkbox.md +3 -3
- package/examples/component-click-away-listener.md +1 -1
- package/examples/component-code.md +1 -1
- package/examples/component-collapsible.md +1 -1
- package/examples/component-color-picker.md +1 -1
- package/examples/component-combobox.md +1 -1
- package/examples/component-command.md +1 -1
- package/examples/component-config-provider.md +3 -3
- package/examples/component-context-menu.md +1 -1
- package/examples/component-css-baseline.md +3 -3
- package/examples/component-date-picker.md +2 -2
- package/examples/component-descriptions.md +1 -1
- package/examples/component-dialog-actions.md +1 -1
- package/examples/component-dialog-content-text.md +1 -1
- package/examples/component-dialog-content.md +1 -1
- package/examples/component-dialog-title.md +1 -1
- package/examples/component-dialog.md +2 -2
- package/examples/component-divider.md +3 -3
- package/examples/component-drawer.md +3 -3
- package/examples/component-dropdown.md +3 -3
- package/examples/component-empty.md +2 -2
- package/examples/component-fade.md +1 -1
- package/examples/component-field.md +1 -1
- package/examples/component-filled-input.md +1 -1
- package/examples/component-flex.md +1 -1
- package/examples/component-float-button.md +2 -2
- package/examples/component-form-control-label.md +1 -1
- package/examples/component-form-control.md +1 -1
- package/examples/component-form-controls.md +1 -1
- package/examples/component-form-group.md +1 -1
- package/examples/component-form-helper-text.md +1 -1
- package/examples/component-form-label.md +1 -1
- package/examples/component-form.md +2 -2
- package/examples/component-grid.md +2 -2
- package/examples/component-grow.md +1 -1
- package/examples/component-hover-card.md +1 -1
- package/examples/component-icon-button.md +1 -1
- package/examples/component-icon.md +1 -1
- package/examples/component-image-list.md +1 -1
- package/examples/component-image.md +1 -1
- package/examples/component-input-adornment.md +1 -1
- package/examples/component-input-base.md +1 -1
- package/examples/component-input-number.md +1 -1
- package/examples/component-input-otp.md +2 -2
- package/examples/component-input.md +3 -3
- package/examples/component-item.md +1 -1
- package/examples/component-label.md +1 -1
- package/examples/component-layout.md +1 -1
- package/examples/component-link.md +1 -1
- package/examples/component-list-item-avatar.md +1 -1
- package/examples/component-list-item-button.md +1 -1
- package/examples/component-list-item-icon.md +1 -1
- package/examples/component-list-item-text.md +1 -1
- package/examples/component-list-item.md +1 -1
- package/examples/component-list-subheader.md +1 -1
- package/examples/component-list.md +2 -2
- package/examples/component-masonry.md +1 -1
- package/examples/component-mentions.md +1 -1
- package/examples/component-menu-item.md +1 -1
- package/examples/component-menu-list.md +1 -1
- package/examples/component-menu.md +1 -1
- package/examples/component-menubar.md +1 -1
- package/examples/component-message.md +1 -1
- package/examples/component-mobile-stepper.md +1 -1
- package/examples/component-modal.md +5 -5
- package/examples/component-navigation-menu.md +1 -1
- package/examples/component-notification.md +1 -1
- package/examples/component-outlined-input.md +1 -1
- package/examples/component-pagination.md +3 -3
- package/examples/component-paper.md +1 -1
- package/examples/component-popconfirm.md +1 -1
- package/examples/component-popover.md +3 -3
- package/examples/component-popper.md +1 -1
- package/examples/component-progress.md +2 -2
- package/examples/component-qr-code.md +1 -1
- package/examples/component-radio.md +3 -3
- package/examples/component-rate.md +2 -2
- package/examples/component-resizable.md +1 -1
- package/examples/component-result.md +1 -1
- package/examples/component-scroll-area.md +1 -1
- package/examples/component-segmented.md +3 -3
- package/examples/component-select.md +3 -3
- package/examples/component-separator.md +1 -1
- package/examples/component-sheet.md +1 -1
- package/examples/component-sidebar.md +1 -1
- package/examples/component-skeleton.md +3 -3
- package/examples/component-slide.md +1 -1
- package/examples/component-slider.md +3 -3
- package/examples/component-snackbar-content.md +1 -1
- package/examples/component-snackbar.md +1 -1
- package/examples/component-sonner.md +1 -1
- package/examples/component-space.md +1 -1
- package/examples/component-speed-dial-action.md +1 -1
- package/examples/component-speed-dial.md +1 -1
- package/examples/component-spin.md +2 -2
- package/examples/component-spinner.md +1 -1
- package/examples/component-splitter.md +2 -2
- package/examples/component-stack.md +1 -1
- package/examples/component-statistic.md +1 -1
- package/examples/component-step-button.md +4 -4
- package/examples/component-step-connector.md +4 -4
- package/examples/component-step-content.md +1 -1
- package/examples/component-step-icon.md +1 -1
- package/examples/component-step-label.md +1 -1
- package/examples/component-step.md +2 -2
- package/examples/component-steps.md +2 -2
- package/examples/component-swipeable-drawer.md +1 -1
- package/examples/component-switch.md +3 -3
- package/examples/component-tab-scroll-button.md +5 -5
- package/examples/component-tab.md +1 -1
- package/examples/component-table-body.md +1 -1
- package/examples/component-table-cell.md +1 -1
- package/examples/component-table-container.md +1 -1
- package/examples/component-table-footer.md +1 -1
- package/examples/component-table-head.md +1 -1
- package/examples/component-table-pagination.md +1 -1
- package/examples/component-table-row.md +1 -1
- package/examples/component-table-sort-label.md +1 -1
- package/examples/component-table.md +2 -2
- package/examples/component-tabs.md +3 -3
- package/examples/component-tag-badge.md +2 -2
- package/examples/component-tag.md +1 -1
- package/examples/component-textarea-autosize.md +1 -1
- package/examples/component-textarea.md +1 -1
- package/examples/component-time-picker.md +1 -1
- package/examples/component-timeline.md +1 -1
- package/examples/component-toast.md +4 -4
- package/examples/component-toggle-button.md +1 -1
- package/examples/component-toggle.md +1 -1
- package/examples/component-toolbar.md +1 -1
- package/examples/component-tooltip.md +3 -3
- package/examples/component-tour.md +1 -1
- package/examples/component-transfer.md +1 -1
- package/examples/component-tree-select.md +1 -1
- package/examples/component-tree.md +1 -1
- package/examples/component-typography.md +2 -2
- package/examples/component-upload.md +1 -1
- package/examples/component-watermark.md +1 -1
- package/examples/component-zoom.md +1 -1
- package/knowledge/COVERAGE.md +4 -3
- package/knowledge/components/INDEX.md +202 -202
- package/knowledge/patterns/brand-references.md +72 -72
- package/package.json +1 -1
- package/tools/audit/local-ci.py +16 -1
- package/tools/audit/package-smoke.py +611 -9
- package/tools/audit/registry-smoke.py +534 -0
- package/tools/audit/release-metadata.py +47 -1
- package/tools/audit/smoke_assertions.py +915 -13
- package/tools/migrations/refs-links-to-reference-pages.py +179 -0
|
@@ -196,9 +196,9 @@ If any of these don't exist in your token system, **stop and add them before imp
|
|
|
196
196
|
|
|
197
197
|
## References
|
|
198
198
|
|
|
199
|
-
- Ant Design: [`refs/ant-design/components/button/Button.tsx`](../
|
|
200
|
-
- MUI: [`refs/mui/packages/mui-material/src/Button/Button.d.ts`](../
|
|
201
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/button.tsx`](../
|
|
199
|
+
- Ant Design: [`refs/ant-design/components/button/Button.tsx`](../docs/reference/ant-design.md#button) — most exhaustive prop coverage; uses `type` (legacy) and `variant` (modern) in parallel, with `color` as a separate axis.
|
|
200
|
+
- MUI: [`refs/mui/packages/mui-material/src/Button/Button.d.ts`](../docs/reference/mui.md#button) — `variant` (`text`/`outlined`/`contained`), `color` (semantic), `loadingPosition`. The most thoroughly documented.
|
|
201
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/button.tsx`](../docs/reference/shadcn-ui.md#button) — Tailwind `cva` pattern, `asChild` via Radix Slot, simplest API surface. Inspired the `iconStart`/`iconEnd` and `asChild` choices in this spec.
|
|
202
202
|
|
|
203
203
|
API choices made:
|
|
204
204
|
- **`variant` names**: `solid`/`outline`/`ghost`/`link` over MUI's `text`/`outlined`/`contained` (clearer for non-Material teams) and over Ant's `default`/`dashed`/`text`/`link` (`default` is uninformative).
|
|
@@ -262,9 +262,9 @@ function MonthlyScheduleScreen() {
|
|
|
262
262
|
|
|
263
263
|
## References
|
|
264
264
|
|
|
265
|
-
- Ant Design: [`refs/ant-design/components/calendar/`](../
|
|
265
|
+
- Ant Design: [`refs/ant-design/components/calendar/`](../docs/reference/ant-design.md#calendar) — `Calendar` with `mode="month" | "year"`, `dateCellRender`, `monthCellRender`. Most exhaustive.
|
|
266
266
|
- MUI: `@mui/x-date-pickers` `DateCalendar` — focused on date selection within a calendar grid; not full-month event-display.
|
|
267
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx`](../
|
|
267
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx`](../docs/reference/shadcn-ui.md#calendar) — wraps `react-day-picker`. Use as date selector or full calendar via `mode="default"` + `numberOfMonths`.
|
|
268
268
|
|
|
269
269
|
For event-heavy calendar apps (Google Calendar style), consider:
|
|
270
270
|
- `react-big-calendar` — month/week/day views with events
|
|
@@ -91,7 +91,7 @@ Left-aligned by default. The convention differs from `DialogActions` (right-alig
|
|
|
91
91
|
|
|
92
92
|
## References
|
|
93
93
|
|
|
94
|
-
- MUI: [`CardActions.d.ts`](../
|
|
94
|
+
- MUI: [`CardActions.d.ts`](../docs/reference/mui.md#card-actions)
|
|
95
95
|
|
|
96
96
|
## Cross-reference
|
|
97
97
|
|
|
@@ -216,9 +216,9 @@ For image-led cards: `padding="none"`, manually pad the text sections. The cover
|
|
|
216
216
|
|
|
217
217
|
## References
|
|
218
218
|
|
|
219
|
-
- Ant Design: [`refs/ant-design/components/card/`](../
|
|
220
|
-
- MUI: [`refs/mui/packages/mui-material/src/Card/`](../
|
|
221
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/card.tsx`](../
|
|
219
|
+
- Ant Design: [`refs/ant-design/components/card/`](../docs/reference/ant-design.md#card) — `Card`, `Card.Meta`, `Card.Grid`. Strong support for tabbed cards (`tabList` prop) and grid cards. Most exhaustive.
|
|
220
|
+
- MUI: [`refs/mui/packages/mui-material/src/Card/`](../docs/reference/mui.md#card) — composition: `Card`, `CardHeader`, `CardMedia`, `CardContent`, `CardActions`, `CardActionArea` (the wrapper that makes a card clickable). MUI's `CardActionArea` is the clearest implementation of the interactive-card pattern.
|
|
221
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/card.tsx`](../docs/reference/shadcn-ui.md#card) — composition with `Card`, `CardHeader`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`, `CardAction`. Cleanest minimal version.
|
|
222
222
|
|
|
223
223
|
API choices made:
|
|
224
224
|
- **Composition over prop overload**: matches all three references' direction. Single `<Card title=... description=... actions=...>` API was rejected — slot-based scales.
|
|
@@ -250,9 +250,9 @@ Swipe is a touch convention. For accessibility, ensure arrows are visible OR a c
|
|
|
250
250
|
|
|
251
251
|
## References
|
|
252
252
|
|
|
253
|
-
- Ant Design: [`refs/ant-design/components/carousel/`](../
|
|
253
|
+
- Ant Design: [`refs/ant-design/components/carousel/`](../docs/reference/ant-design.md#carousel) — `Carousel`. Wraps `react-slick`. Has `autoplay`, `dots`, `effect`. Solid baseline.
|
|
254
254
|
- MUI: no dedicated component. Use `react-slick` or `swiper`.
|
|
255
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/carousel.tsx`](../
|
|
255
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/carousel.tsx`](../docs/reference/shadcn-ui.md#carousel) — wraps **Embla** carousel. Modern, framework-agnostic, excellent accessibility. **Default for new projects.**
|
|
256
256
|
|
|
257
257
|
API choices made:
|
|
258
258
|
- **`autoplay: false` default**: matches a11y best practice. Most carousels don't need it.
|
|
@@ -125,7 +125,7 @@ For Korean address: combine with Daum Postcode (more user-friendly for actual ad
|
|
|
125
125
|
|
|
126
126
|
## References
|
|
127
127
|
|
|
128
|
-
- Ant Design: [`refs/ant-design/components/cascader/`](../
|
|
128
|
+
- Ant Design: [`refs/ant-design/components/cascader/`](../docs/reference/ant-design.md#cascader) — `Cascader` with full feature set. Most exhaustive.
|
|
129
129
|
- MUI / shadcn-ui: no built-in. Compose from Select-like primitives.
|
|
130
130
|
|
|
131
131
|
## Cross-reference
|
|
@@ -224,7 +224,7 @@ function RevenueChart({ data }: Props) {
|
|
|
224
224
|
|
|
225
225
|
## References
|
|
226
226
|
|
|
227
|
-
- shadcn-ui: [`chart`](../
|
|
227
|
+
- shadcn-ui: [`chart`](../docs/reference/shadcn-ui.md#chart) (Recharts wrapper)
|
|
228
228
|
- Recharts: <https://recharts.org/>
|
|
229
229
|
- Edward Tufte's *The Visual Display of Quantitative Information* — chart design fundamentals
|
|
230
230
|
|
|
@@ -137,9 +137,9 @@ const indeterminate = someChecked;
|
|
|
137
137
|
|
|
138
138
|
## References
|
|
139
139
|
|
|
140
|
-
- Ant: [`Checkbox`](../
|
|
141
|
-
- MUI: [`Checkbox`](../
|
|
142
|
-
- shadcn-ui: [`checkbox`](../
|
|
140
|
+
- Ant: [`Checkbox`](../docs/reference/ant-design.md#checkbox)
|
|
141
|
+
- MUI: [`Checkbox`](../docs/reference/mui.md#checkbox)
|
|
142
|
+
- shadcn-ui: [`checkbox`](../docs/reference/shadcn-ui.md#checkbox)
|
|
143
143
|
|
|
144
144
|
## Cross-reference
|
|
145
145
|
|
|
@@ -77,7 +77,7 @@ shadcn-based projects don't include this as a separate primitive — Popover / S
|
|
|
77
77
|
|
|
78
78
|
## References
|
|
79
79
|
|
|
80
|
-
- MUI: [`ClickAwayListener`](../
|
|
80
|
+
- MUI: [`ClickAwayListener`](../docs/reference/mui.md#click-away-listener)
|
|
81
81
|
- Hook alternatives in many libs (use-click-away, react-use, etc.)
|
|
82
82
|
|
|
83
83
|
## Cross-reference
|
|
@@ -198,7 +198,7 @@ For language announcement:
|
|
|
198
198
|
|
|
199
199
|
## References
|
|
200
200
|
|
|
201
|
-
- Ant Design: [`Typography.Text code`](../
|
|
201
|
+
- Ant Design: [`Typography.Text code`](../docs/reference/ant-design.md#typography) — inline. Block code: just use HTML `<pre>` with optional CSS.
|
|
202
202
|
- MUI: no dedicated Code component. Use `<code>` or `<Typography component="pre">`.
|
|
203
203
|
- shadcn-ui: no built-in. Compose with `react-syntax-highlighter` + Tailwind.
|
|
204
204
|
|
|
@@ -209,7 +209,7 @@ function ProductDetails({ product }: Props) {
|
|
|
209
209
|
|
|
210
210
|
## References
|
|
211
211
|
|
|
212
|
-
- shadcn-ui: [`collapsible`](../
|
|
212
|
+
- shadcn-ui: [`collapsible`](../docs/reference/shadcn-ui.md#collapsible) (Radix)
|
|
213
213
|
- WAI-ARIA: [Disclosure pattern](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/)
|
|
214
214
|
|
|
215
215
|
## Cross-reference
|
|
@@ -100,7 +100,7 @@ Don't roll your own — color math is hard and there are subtle edge cases.
|
|
|
100
100
|
|
|
101
101
|
## References
|
|
102
102
|
|
|
103
|
-
- Ant Design: [`refs/ant-design/components/color-picker/`](../
|
|
103
|
+
- Ant Design: [`refs/ant-design/components/color-picker/`](../docs/reference/ant-design.md#color-picker) — comprehensive. Has presets, alpha, multiple format inputs.
|
|
104
104
|
- MUI: no built-in. Use `react-colorful` or similar.
|
|
105
105
|
- shadcn-ui: no built-in. Compose with `Popover` + `react-colorful`.
|
|
106
106
|
|
|
@@ -255,7 +255,7 @@ function CountryPicker({ value, onChange }: Props) {
|
|
|
255
255
|
|
|
256
256
|
## References
|
|
257
257
|
|
|
258
|
-
- shadcn-ui: [`combobox`](../
|
|
258
|
+
- shadcn-ui: [`combobox`](../docs/reference/shadcn-ui.md#combobox)
|
|
259
259
|
- WAI-ARIA: [Combobox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/)
|
|
260
260
|
- cmdk library
|
|
261
261
|
|
|
@@ -286,7 +286,7 @@ function GlobalCommandPalette() {
|
|
|
286
286
|
|
|
287
287
|
## References
|
|
288
288
|
|
|
289
|
-
- shadcn-ui: [`command`](../
|
|
289
|
+
- shadcn-ui: [`command`](../docs/reference/shadcn-ui.md#command) (cmdk-based)
|
|
290
290
|
- cmdk library by pacocoursey
|
|
291
291
|
- Patterns: VS Code Command Palette, Linear, GitHub global search, Slack `Cmd+K`
|
|
292
292
|
- WAI-ARIA: combobox + listbox pattern
|
|
@@ -183,8 +183,8 @@ export function ProductRoot() {
|
|
|
183
183
|
|
|
184
184
|
## References
|
|
185
185
|
|
|
186
|
-
- Ant Design: [`config-provider/index.en-US.md`](../
|
|
187
|
-
- MUI: [`ThemeProvider.tsx`](../
|
|
188
|
-
- shadcn-ui: [`theme-provider.tsx`](../
|
|
186
|
+
- Ant Design: [`config-provider/index.en-US.md`](../docs/reference/ant-design.md#config-provider), [`config-provider/index.tsx`](../docs/reference/ant-design.md#config-provider), [`config-provider/context.ts`](../docs/reference/ant-design.md#config-provider), [`app/index.en-US.md`](../docs/reference/ant-design.md#app)
|
|
187
|
+
- MUI: [`ThemeProvider.tsx`](../docs/reference/mui.md#styles), [`CssBaseline.js`](../docs/reference/mui.md#css-baseline)
|
|
188
|
+
- shadcn-ui: [`theme-provider.tsx`](../docs/reference/shadcn-ui.md), [`globals.css`](../docs/reference/shadcn-ui.md)
|
|
189
189
|
- Knowledge: [`design-tokens/ant-design.md`](../knowledge/design-tokens/ant-design.md), [`a11y/contrast.md`](../knowledge/a11y/contrast.md), [`i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md)
|
|
190
190
|
- Cross-reference: [`component-css-baseline.md`](component-css-baseline.md), [`component-empty-state.md`](component-empty-state.md), [`component-form.md`](component-form.md)
|
|
@@ -168,7 +168,7 @@ Same as DropdownMenu — Korean text legible, Pretendard / NanumSquare body. 합
|
|
|
168
168
|
|
|
169
169
|
## References
|
|
170
170
|
|
|
171
|
-
- shadcn-ui: [`context-menu`](../
|
|
171
|
+
- shadcn-ui: [`context-menu`](../docs/reference/shadcn-ui.md#context-menu) (Radix)
|
|
172
172
|
- WAI-ARIA: same Menu pattern as DropdownMenu
|
|
173
173
|
- Native: HTML5 `oncontextmenu` event
|
|
174
174
|
|
|
@@ -142,7 +142,7 @@ body {
|
|
|
142
142
|
|
|
143
143
|
## References
|
|
144
144
|
|
|
145
|
-
- MUI: [`CssBaseline.d.ts`](../
|
|
146
|
-
- Ant Design: [`config-provider/index.en-US.md`](../
|
|
147
|
-
- shadcn-ui: [`theme-provider.tsx`](../
|
|
145
|
+
- MUI: [`CssBaseline.d.ts`](../docs/reference/mui.md#css-baseline), [`CssBaseline.js`](../docs/reference/mui.md#css-baseline), [`ThemeProvider.tsx`](../docs/reference/mui.md#styles)
|
|
146
|
+
- Ant Design: [`config-provider/index.en-US.md`](../docs/reference/ant-design.md#config-provider), [`theme/index.tsx`](../docs/reference/ant-design.md#theme)
|
|
147
|
+
- shadcn-ui: [`theme-provider.tsx`](../docs/reference/shadcn-ui.md), [`globals.css`](../docs/reference/shadcn-ui.md)
|
|
148
148
|
- Knowledge: [`a11y/contrast.md`](../knowledge/a11y/contrast.md), [`i18n/korean-typography.md`](../knowledge/i18n/korean-typography.md), [`design-tokens/tailwind-v4.md`](../knowledge/design-tokens/tailwind-v4.md)
|
|
@@ -232,9 +232,9 @@ Announce on date selection: "May 7, 2026 selected" (or KR "2026년 5월 7일 선
|
|
|
232
232
|
|
|
233
233
|
## References
|
|
234
234
|
|
|
235
|
-
- Ant Design: [`refs/ant-design/components/date-picker/`](../
|
|
235
|
+
- Ant Design: [`refs/ant-design/components/date-picker/`](../docs/reference/ant-design.md#date-picker) — most variants (`DatePicker`, `RangePicker`, `MonthPicker`, `YearPicker`, `WeekPicker`, `QuarterPicker`). Heavy but covers everything.
|
|
236
236
|
- MUI: `@mui/x-date-pickers` (separate package) — `DatePicker`, `DateTimePicker`, `DateRangePicker`. Excellent locale support; pairs with date-fns / dayjs / luxon adapters.
|
|
237
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx`](../
|
|
237
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/calendar.tsx`](../docs/reference/shadcn-ui.md#calendar) — wraps `react-day-picker`. Compose with `Popover` for the picker pattern.
|
|
238
238
|
|
|
239
239
|
API choices made:
|
|
240
240
|
- **`mode` axis** (single / range / dateTime / quickRange) over Ant's separate components — fewer top-level imports.
|
|
@@ -231,7 +231,7 @@ function ProfileScreen() {
|
|
|
231
231
|
|
|
232
232
|
## References
|
|
233
233
|
|
|
234
|
-
- Ant Design: [`refs/ant-design/components/descriptions/`](../
|
|
234
|
+
- Ant Design: [`refs/ant-design/components/descriptions/`](../docs/reference/ant-design.md#descriptions) — most exhaustive (column, span, layout, bordered, sections).
|
|
235
235
|
- MUI / shadcn-ui: no built-in. Compose with `<dl>` + Tailwind.
|
|
236
236
|
|
|
237
237
|
## Cross-reference
|
|
@@ -100,7 +100,7 @@ For destructive primary actions (e.g., 삭제), use `color="error"` on the prima
|
|
|
100
100
|
|
|
101
101
|
## References
|
|
102
102
|
|
|
103
|
-
- MUI: [`DialogActions.d.ts`](../
|
|
103
|
+
- MUI: [`DialogActions.d.ts`](../docs/reference/mui.md#dialog-actions)
|
|
104
104
|
|
|
105
105
|
## Cross-reference
|
|
106
106
|
|
|
@@ -67,7 +67,7 @@ Extends `Typography` — all typography props work.
|
|
|
67
67
|
|
|
68
68
|
## References
|
|
69
69
|
|
|
70
|
-
- MUI: [`DialogContentText`](../
|
|
70
|
+
- MUI: [`DialogContentText`](../docs/reference/mui.md#dialog-content-text)
|
|
71
71
|
|
|
72
72
|
## Cross-reference
|
|
73
73
|
|
|
@@ -95,7 +95,7 @@ For a long-content dialog: `Dialog` with `scroll="paper"` (default) and `divider
|
|
|
95
95
|
|
|
96
96
|
## References
|
|
97
97
|
|
|
98
|
-
- MUI: [`DialogContent.d.ts`](../
|
|
98
|
+
- MUI: [`DialogContent.d.ts`](../docs/reference/mui.md#dialog-content)
|
|
99
99
|
|
|
100
100
|
## Cross-reference
|
|
101
101
|
|
|
@@ -93,7 +93,7 @@ The close button is typically rendered separately (often inside the title row vi
|
|
|
93
93
|
|
|
94
94
|
## References
|
|
95
95
|
|
|
96
|
-
- MUI: [`DialogTitle.d.ts`](../
|
|
96
|
+
- MUI: [`DialogTitle.d.ts`](../docs/reference/mui.md#dialog-title)
|
|
97
97
|
|
|
98
98
|
## Cross-reference
|
|
99
99
|
|
|
@@ -161,8 +161,8 @@ function DeleteConfirmDialog({ open, onClose, onConfirm, isPending }) {
|
|
|
161
161
|
|
|
162
162
|
## References
|
|
163
163
|
|
|
164
|
-
- Ant Design: [`Modal`](../
|
|
165
|
-
- MUI: [`Dialog`](../
|
|
164
|
+
- Ant Design: [`Modal`](../docs/reference/ant-design.md#modal) — class API, mask
|
|
165
|
+
- MUI: [`Dialog`](../docs/reference/mui.md#dialog) — flagship reference
|
|
166
166
|
|
|
167
167
|
## Cross-reference
|
|
168
168
|
|
|
@@ -172,9 +172,9 @@ Most dividers in product UIs should be `aria-hidden`. The structure is conveyed
|
|
|
172
172
|
|
|
173
173
|
## References
|
|
174
174
|
|
|
175
|
-
- Ant Design: [`refs/ant-design/components/divider/`](../
|
|
176
|
-
- MUI: [`refs/mui/packages/mui-material/src/Divider/`](../
|
|
177
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/separator.tsx`](../
|
|
175
|
+
- Ant Design: [`refs/ant-design/components/divider/`](../docs/reference/ant-design.md#divider) — `Divider` with `type="horizontal" | "vertical"`, `dashed`, optional inline text. Mature.
|
|
176
|
+
- MUI: [`refs/mui/packages/mui-material/src/Divider/`](../docs/reference/mui.md#divider) — `Divider` with `orientation`, `variant="fullWidth" | "inset" | "middle"`, `textAlign`. Most variants.
|
|
177
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/separator.tsx`](../docs/reference/shadcn-ui.md#separator) — Radix Separator. Minimal primitive. `decorative` prop drives `aria-hidden` vs `role="separator"`.
|
|
178
178
|
|
|
179
179
|
## Cross-reference
|
|
180
180
|
|
|
@@ -246,9 +246,9 @@ const [menuOpen, setMenuOpen] = useState(false);
|
|
|
246
246
|
|
|
247
247
|
## References
|
|
248
248
|
|
|
249
|
-
- Ant Design: [`refs/ant-design/components/drawer/`](../
|
|
250
|
-
- MUI: [`refs/mui/packages/mui-material/src/Drawer/`](../
|
|
251
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/sheet.tsx`](../
|
|
249
|
+
- Ant Design: [`refs/ant-design/components/drawer/`](../docs/reference/ant-design.md#drawer) — `Drawer`. Supports `placement`, `size`, `mask`, `closable`. Mature.
|
|
250
|
+
- MUI: [`refs/mui/packages/mui-material/src/Drawer/`](../docs/reference/mui.md#drawer) — `Drawer` with `variant="permanent" | "persistent" | "temporary"`. Best persistent-mode handling.
|
|
251
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/sheet.tsx`](../docs/reference/shadcn-ui.md#sheet) — Radix Dialog primitive used as a side panel. Modal-only by default; persistent requires composition.
|
|
252
252
|
|
|
253
253
|
## Cross-reference
|
|
254
254
|
|
|
@@ -207,9 +207,9 @@ function UserMenu({ user, onSignOut }: Props) {
|
|
|
207
207
|
|
|
208
208
|
## References
|
|
209
209
|
|
|
210
|
-
- Ant: [`Dropdown`](../
|
|
211
|
-
- MUI: [`Menu`](../
|
|
212
|
-
- shadcn-ui: [`dropdown-menu`](../
|
|
210
|
+
- Ant: [`Dropdown`](../docs/reference/ant-design.md#dropdown)
|
|
211
|
+
- MUI: [`Menu`](../docs/reference/mui.md#menu)
|
|
212
|
+
- shadcn-ui: [`dropdown-menu`](../docs/reference/shadcn-ui.md#dropdown-menu) (Radix-based)
|
|
213
213
|
- WAI-ARIA: [Menu pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu/)
|
|
214
214
|
|
|
215
215
|
## Cross-reference
|
|
@@ -162,8 +162,8 @@ Match the surrounding component's voice level.
|
|
|
162
162
|
|
|
163
163
|
## References
|
|
164
164
|
|
|
165
|
-
- Ant: [`Empty`](../
|
|
166
|
-
- shadcn-ui: [`empty`](../
|
|
165
|
+
- Ant: [`Empty`](../docs/reference/ant-design.md#empty)
|
|
166
|
+
- shadcn-ui: [`empty`](../docs/reference/shadcn-ui.md#empty)
|
|
167
167
|
|
|
168
168
|
## Cross-reference
|
|
169
169
|
|
|
@@ -253,7 +253,7 @@ function SignupForm() {
|
|
|
253
253
|
|
|
254
254
|
## References
|
|
255
255
|
|
|
256
|
-
- shadcn-ui: [`field`](../
|
|
256
|
+
- shadcn-ui: [`field`](../docs/reference/shadcn-ui.md#field)
|
|
257
257
|
- WAI-ARIA Authoring Practices: form labeling
|
|
258
258
|
- Native HTML: `<fieldset>`, `<legend>`, `<label>`
|
|
259
259
|
|
|
@@ -203,8 +203,8 @@ Subtle bg (`--color-primary-subtle-bg`), primary icon. Less emphasis but still e
|
|
|
203
203
|
|
|
204
204
|
## References
|
|
205
205
|
|
|
206
|
-
- Ant Design: [`refs/ant-design/components/float-button/`](../
|
|
207
|
-
- MUI: [`refs/mui/packages/mui-material/src/Fab/`](../
|
|
206
|
+
- Ant Design: [`refs/ant-design/components/float-button/`](../docs/reference/ant-design.md#float-button) — `FloatButton`, `FloatButton.Group` (speed dial), `FloatButton.BackTop`. Most flexible.
|
|
207
|
+
- MUI: [`refs/mui/packages/mui-material/src/Fab/`](../docs/reference/mui.md#fab) — `Fab` with `variant="circular" | "extended"`, color, size. Material-aligned.
|
|
208
208
|
- shadcn-ui: no built-in. Compose with `Button` + Tailwind `fixed bottom-4 right-4 rounded-full`.
|
|
209
209
|
|
|
210
210
|
## Cross-reference
|
|
@@ -122,7 +122,7 @@ function ConsentCheckboxes() {
|
|
|
122
122
|
|
|
123
123
|
## References
|
|
124
124
|
|
|
125
|
-
- MUI: [`FormControlLabel`](../
|
|
125
|
+
- MUI: [`FormControlLabel`](../docs/reference/mui.md#form-control-label)
|
|
126
126
|
|
|
127
127
|
## Cross-reference
|
|
128
128
|
|
|
@@ -102,7 +102,7 @@ The visual gap between input and helper text is part of the FormControl's owned
|
|
|
102
102
|
|
|
103
103
|
## References
|
|
104
104
|
|
|
105
|
-
- MUI: [`FormControl.d.ts`](../
|
|
105
|
+
- MUI: [`FormControl.d.ts`](../docs/reference/mui.md#form-control)
|
|
106
106
|
|
|
107
107
|
## Cross-reference
|
|
108
108
|
|
|
@@ -236,7 +236,7 @@ The visible control is small (16–24px). The **clickable area** must be ≥ 44
|
|
|
236
236
|
|
|
237
237
|
- Ant Design: `Switch`, `Checkbox`, `Checkbox.Group`, `Radio`, `Radio.Group`, `Radio.Button`. Has `Radio.Button` for segmented-control-style radios.
|
|
238
238
|
- MUI: `Switch`, `Checkbox`, `Radio` + `RadioGroup` + `FormControl` for the wrapper. `FormControlLabel` for label-with-control.
|
|
239
|
-
- shadcn-ui: [`switch.tsx`](../
|
|
239
|
+
- shadcn-ui: [`switch.tsx`](../docs/reference/shadcn-ui.md#switch), [`checkbox.tsx`](../docs/reference/shadcn-ui.md#checkbox), [`radio-group.tsx`](../docs/reference/shadcn-ui.md#radio-group). Radix primitives. **Default for new projects.**
|
|
240
240
|
|
|
241
241
|
API choices made:
|
|
242
242
|
- **`onCheckedChange(checked)` for Switch + Checkbox**, **`onValueChange(value)` for RadioGroup**: matches the actual user intent — Switch/Checkbox is "what's the boolean?", RadioGroup is "what's the value?".
|
|
@@ -272,9 +272,9 @@ Required affordances:
|
|
|
272
272
|
|
|
273
273
|
## References
|
|
274
274
|
|
|
275
|
-
- Ant Design: [`refs/ant-design/components/form/`](../
|
|
275
|
+
- Ant Design: [`refs/ant-design/components/form/`](../docs/reference/ant-design.md#form) — exhaustive `Form`, `Form.Item`, `Form.List`, `Form.Provider`. Most complete API. Built-in validation rules. Ant's `Form.useForm` is the imperative escape hatch.
|
|
276
276
|
- MUI: composition with `<form>` + `react-hook-form` + `<TextField>`. No dedicated Form component — MUI explicitly defers form orchestration to RHF.
|
|
277
|
-
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/`](../
|
|
277
|
+
- shadcn-ui: [`refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/`](../docs/reference/shadcn-ui.md) — `form.tsx` wraps RHF `FormProvider` + `Controller` + auto-wires `aria-*`. Cleanest minimal version. Mandates Zod + RHF.
|
|
278
278
|
|
|
279
279
|
API choices made:
|
|
280
280
|
- **Composition (`Form.Field`/`Form.Label`/`Form.Control`)** over Ant's `Form.Item` prop-blob — slot-based scales to custom field types better.
|
|
@@ -128,8 +128,8 @@ Stateless.
|
|
|
128
128
|
|
|
129
129
|
## References
|
|
130
130
|
|
|
131
|
-
- Ant: [`Grid`](../
|
|
132
|
-
- MUI: [`Grid`](../
|
|
131
|
+
- Ant: [`Grid`](../docs/reference/ant-design.md#grid) (Row + Col, 24-col)
|
|
132
|
+
- MUI: [`Grid`](../docs/reference/mui.md#grid) (12-col)
|
|
133
133
|
- CSS Grid Level 1 / 2
|
|
134
134
|
|
|
135
135
|
## Cross-reference
|
|
@@ -200,7 +200,7 @@ function MentionLink({ user }: { user: User }) {
|
|
|
200
200
|
|
|
201
201
|
## References
|
|
202
202
|
|
|
203
|
-
- shadcn-ui: [`hover-card`](../
|
|
203
|
+
- shadcn-ui: [`hover-card`](../docs/reference/shadcn-ui.md#hover-card) (Radix)
|
|
204
204
|
- Patterns: Twitter / X profile previews on @mention hover
|
|
205
205
|
- Patterns: GitHub PR review preview on commit hash hover
|
|
206
206
|
|
|
@@ -132,7 +132,7 @@ function ToolbarActions() {
|
|
|
132
132
|
|
|
133
133
|
## References
|
|
134
134
|
|
|
135
|
-
- MUI: [`IconButton`](../
|
|
135
|
+
- MUI: [`IconButton`](../docs/reference/mui.md#icon-button)
|
|
136
136
|
- Material 3: Icon button variants
|
|
137
137
|
|
|
138
138
|
## Cross-reference
|
|
@@ -92,7 +92,7 @@ See [`knowledge/icons/curated-sets.md`](../knowledge/icons/curated-sets.md).
|
|
|
92
92
|
|
|
93
93
|
## References
|
|
94
94
|
|
|
95
|
-
- MUI: [`SvgIcon`](../
|
|
95
|
+
- MUI: [`SvgIcon`](../docs/reference/mui.md#svg-icon)
|
|
96
96
|
- Phosphor Icons: 1200+ icons, 5 weights
|
|
97
97
|
- Lucide: stroke-only minimalist set
|
|
98
98
|
|
|
@@ -98,7 +98,7 @@ Stateless. Tiles can be interactive (click → open / navigate); each tile follo
|
|
|
98
98
|
|
|
99
99
|
## References
|
|
100
100
|
|
|
101
|
-
- MUI: [`ImageList`](../
|
|
101
|
+
- MUI: [`ImageList`](../docs/reference/mui.md#image-list)
|
|
102
102
|
|
|
103
103
|
## Cross-reference
|
|
104
104
|
|
|
@@ -265,7 +265,7 @@ Always set an aspect ratio — this prevents the browser-jumping layout shift wh
|
|
|
265
265
|
|
|
266
266
|
## References
|
|
267
267
|
|
|
268
|
-
- Ant Design: [`refs/ant-design/components/image/`](../
|
|
268
|
+
- Ant Design: [`refs/ant-design/components/image/`](../docs/reference/ant-design.md#image) — `Image` + `Image.PreviewGroup` for lightbox. Has `placeholder`, `fallback`, `preview` config. Solid impl.
|
|
269
269
|
- MUI: no dedicated component. Compose with native `<img>`.
|
|
270
270
|
- shadcn-ui: no built-in. Compose `<img>` + Tailwind. For lightbox: `react-photo-view` or `yet-another-react-lightbox`.
|
|
271
271
|
|