@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.
Files changed (529) hide show
  1. package/.claude-plugin/plugin.json +164 -0
  2. package/AGENTS.ko.md +126 -0
  3. package/AGENTS.md +182 -0
  4. package/CHANGELOG.md +6883 -0
  5. package/CLAUDE.md +39 -0
  6. package/LICENSE +21 -0
  7. package/README.ko.md +245 -0
  8. package/README.md +277 -0
  9. package/agents/README.md +14 -0
  10. package/agents/a11y-reviewer.md +121 -0
  11. package/agents/component-architect.md +57 -0
  12. package/agents/design-critic.md +46 -0
  13. package/agents/token-extractor.md +63 -0
  14. package/cli/bin/design-ai-mcp.mjs +6 -0
  15. package/cli/bin/design-ai.mjs +40 -0
  16. package/cli/commands/audit.mjs +111 -0
  17. package/cli/commands/check.mjs +226 -0
  18. package/cli/commands/doctor.mjs +141 -0
  19. package/cli/commands/examples.mjs +58 -0
  20. package/cli/commands/help.mjs +271 -0
  21. package/cli/commands/install.mjs +161 -0
  22. package/cli/commands/learn.mjs +1871 -0
  23. package/cli/commands/list.mjs +143 -0
  24. package/cli/commands/mcp.mjs +27 -0
  25. package/cli/commands/pack.mjs +211 -0
  26. package/cli/commands/prompt.mjs +199 -0
  27. package/cli/commands/route.mjs +247 -0
  28. package/cli/commands/search.mjs +60 -0
  29. package/cli/commands/show.mjs +52 -0
  30. package/cli/commands/site.mjs +558 -0
  31. package/cli/commands/status.mjs +161 -0
  32. package/cli/commands/uninstall.mjs +119 -0
  33. package/cli/commands/update.mjs +184 -0
  34. package/cli/commands/version.mjs +94 -0
  35. package/cli/commands/workspace.mjs +176 -0
  36. package/cli/lib/brief.mjs +52 -0
  37. package/cli/lib/check.mjs +642 -0
  38. package/cli/lib/dispatch.mjs +109 -0
  39. package/cli/lib/doctor.mjs +505 -0
  40. package/cli/lib/examples.mjs +258 -0
  41. package/cli/lib/exec.mjs +63 -0
  42. package/cli/lib/help-flags.mjs +5 -0
  43. package/cli/lib/learn.mjs +3694 -0
  44. package/cli/lib/log.mjs +47 -0
  45. package/cli/lib/mcp-server.mjs +426 -0
  46. package/cli/lib/output.mjs +101 -0
  47. package/cli/lib/pack.mjs +599 -0
  48. package/cli/lib/paths.mjs +63 -0
  49. package/cli/lib/prompt.mjs +603 -0
  50. package/cli/lib/route.mjs +740 -0
  51. package/cli/lib/search.mjs +158 -0
  52. package/cli/lib/show.mjs +161 -0
  53. package/cli/lib/signals.mjs +2337 -0
  54. package/cli/lib/site.mjs +6617 -0
  55. package/cli/lib/skill-proposals.mjs +2046 -0
  56. package/cli/lib/suggest.mjs +66 -0
  57. package/cli/lib/workspace.mjs +1056 -0
  58. package/commands/README.md +25 -0
  59. package/commands/component-spec.md +34 -0
  60. package/commands/conversational.md +44 -0
  61. package/commands/design-from-brief.md +141 -0
  62. package/commands/design-review.md +62 -0
  63. package/commands/document-from-brief.md +47 -0
  64. package/commands/extract-tokens.md +38 -0
  65. package/commands/game-ui.md +40 -0
  66. package/commands/illustration.md +37 -0
  67. package/commands/iterate.md +167 -0
  68. package/commands/motion-design.md +54 -0
  69. package/commands/palette-from-brand.md +50 -0
  70. package/commands/print.md +49 -0
  71. package/commands/slide-deck.md +46 -0
  72. package/commands/spatial.md +47 -0
  73. package/commands/stability-review.md +74 -0
  74. package/commands/video.md +42 -0
  75. package/commands/website-improvement.md +77 -0
  76. package/docs/AGENT-DEVELOPMENT.md +658 -0
  77. package/docs/AI-LEARNING.md +429 -0
  78. package/docs/AIDER-INTEGRATION.md +224 -0
  79. package/docs/ARCHITECTURE.ko.md +183 -0
  80. package/docs/ARCHITECTURE.md +105 -0
  81. package/docs/CODEX-INTEGRATION.md +311 -0
  82. package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
  83. package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
  84. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
  85. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
  86. package/docs/CONTRIBUTING.ko.md +203 -0
  87. package/docs/CONTRIBUTING.md +242 -0
  88. package/docs/CURSOR-INTEGRATION.md +220 -0
  89. package/docs/DISTRIBUTION.ko.md +248 -0
  90. package/docs/DISTRIBUTION.md +253 -0
  91. package/docs/DOGFOOD-FINDINGS.md +180 -0
  92. package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
  93. package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
  94. package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
  95. package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
  96. package/docs/FIGMA-INTEGRATION.md +222 -0
  97. package/docs/MCP-INTEGRATION.md +243 -0
  98. package/docs/MIGRATION-v4.md +121 -0
  99. package/docs/PLUGIN-PACKAGING.md +240 -0
  100. package/docs/PRODUCT-READINESS.md +66 -0
  101. package/docs/QUICKSTART.ko.md +178 -0
  102. package/docs/QUICKSTART.md +179 -0
  103. package/docs/RELEASE-CHECKLIST.md +292 -0
  104. package/docs/ROADMAP.md +19495 -0
  105. package/docs/SESSION-LOG.md +940 -0
  106. package/docs/TOKEN-SYNC.md +237 -0
  107. package/docs/USING.ko.md +206 -0
  108. package/docs/USING.md +218 -0
  109. package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
  110. package/docs/WEBSITE-IMPROVEMENT.md +89 -0
  111. package/docs/announcements/README.md +56 -0
  112. package/docs/announcements/dev-to-korea.md +206 -0
  113. package/docs/announcements/hashnode-post.ko.md +232 -0
  114. package/docs/announcements/okky-post.ko.md +158 -0
  115. package/docs/announcements/press-kit.md +101 -0
  116. package/docs/announcements/reddit-r-korea.md +196 -0
  117. package/docs/announcements/show-hn.md +114 -0
  118. package/docs/announcements/twitter-thread.md +255 -0
  119. package/docs/external-status.md +34 -0
  120. package/docs/integrations/aider-walkthrough.ko.md +275 -0
  121. package/docs/integrations/aider-walkthrough.md +274 -0
  122. package/docs/integrations/codex-walkthrough.ko.md +297 -0
  123. package/docs/integrations/codex-walkthrough.md +297 -0
  124. package/docs/integrations/cursor-walkthrough.ko.md +281 -0
  125. package/docs/integrations/cursor-walkthrough.md +284 -0
  126. package/docs/integrations/design-ai-mcp-server.md +169 -0
  127. package/docs/integrations/figma-mcp.md +149 -0
  128. package/docs/integrations/github-mcp.md +178 -0
  129. package/docs/integrations/linear-mcp.md +215 -0
  130. package/docs/integrations/notion-mcp.md +174 -0
  131. package/docs/integrations/sdk-walkthrough.ko.md +375 -0
  132. package/docs/integrations/sdk-walkthrough.md +375 -0
  133. package/docs/integrations/slack-mcp.md +208 -0
  134. package/docs/integrations/vscode-walkthrough.ko.md +202 -0
  135. package/docs/integrations/vscode-walkthrough.md +205 -0
  136. package/docs/requirements.txt +16 -0
  137. package/docs/site-overrides/extra.css +83 -0
  138. package/docs/site-overrides/favicon.svg +4 -0
  139. package/docs/site-overrides/logo.svg +10 -0
  140. package/docs/site-overrides/main.html +18 -0
  141. package/docs/website-console/app.js +2540 -0
  142. package/docs/website-console/index.html +24 -0
  143. package/docs/website-console/styles.css +975 -0
  144. package/examples/README.md +252 -0
  145. package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
  146. package/examples/component-accordion-actions.md +153 -0
  147. package/examples/component-accordion-details.md +147 -0
  148. package/examples/component-accordion-summary.md +180 -0
  149. package/examples/component-accordion.md +229 -0
  150. package/examples/component-account-card.md +284 -0
  151. package/examples/component-address-input.md +260 -0
  152. package/examples/component-affix.md +190 -0
  153. package/examples/component-alert-dialog.md +210 -0
  154. package/examples/component-alert-title.md +77 -0
  155. package/examples/component-alert.md +192 -0
  156. package/examples/component-amount-input.md +278 -0
  157. package/examples/component-anchor.md +198 -0
  158. package/examples/component-app-bar.md +249 -0
  159. package/examples/component-aspect-ratio.md +156 -0
  160. package/examples/component-auto-complete.md +199 -0
  161. package/examples/component-avatar-group.md +170 -0
  162. package/examples/component-avatar.md +191 -0
  163. package/examples/component-back-top.md +123 -0
  164. package/examples/component-backdrop.md +148 -0
  165. package/examples/component-badge.md +181 -0
  166. package/examples/component-banner.md +237 -0
  167. package/examples/component-biometric-gate.md +281 -0
  168. package/examples/component-blockquote.md +153 -0
  169. package/examples/component-border-beam.md +207 -0
  170. package/examples/component-bottom-navigation.md +226 -0
  171. package/examples/component-box.md +112 -0
  172. package/examples/component-breadcrumb.md +222 -0
  173. package/examples/component-button-base.md +190 -0
  174. package/examples/component-button-group.md +117 -0
  175. package/examples/component-button.md +213 -0
  176. package/examples/component-calendar.md +280 -0
  177. package/examples/component-callout.md +131 -0
  178. package/examples/component-card-actions.md +101 -0
  179. package/examples/component-card-content.md +90 -0
  180. package/examples/component-card-header.md +122 -0
  181. package/examples/component-card-media.md +79 -0
  182. package/examples/component-card.md +233 -0
  183. package/examples/component-carousel.md +266 -0
  184. package/examples/component-cascader.md +135 -0
  185. package/examples/component-category-picker.md +271 -0
  186. package/examples/component-chart.md +237 -0
  187. package/examples/component-chat-interface.md +399 -0
  188. package/examples/component-checkbox.md +149 -0
  189. package/examples/component-click-away-listener.md +87 -0
  190. package/examples/component-code.md +213 -0
  191. package/examples/component-collapsible.md +219 -0
  192. package/examples/component-color-picker.md +110 -0
  193. package/examples/component-combobox.md +267 -0
  194. package/examples/component-command.md +299 -0
  195. package/examples/component-config-provider.md +190 -0
  196. package/examples/component-context-menu.md +179 -0
  197. package/examples/component-css-baseline.md +148 -0
  198. package/examples/component-date-picker.md +249 -0
  199. package/examples/component-descriptions.md +242 -0
  200. package/examples/component-dialog-actions.md +111 -0
  201. package/examples/component-dialog-content-text.md +76 -0
  202. package/examples/component-dialog-content.md +105 -0
  203. package/examples/component-dialog-title.md +104 -0
  204. package/examples/component-dialog.md +176 -0
  205. package/examples/component-divider.md +182 -0
  206. package/examples/component-doc-page.md +217 -0
  207. package/examples/component-drawer.md +257 -0
  208. package/examples/component-dropdown.md +220 -0
  209. package/examples/component-email-layout.md +253 -0
  210. package/examples/component-empty-state.md +269 -0
  211. package/examples/component-empty.md +172 -0
  212. package/examples/component-fade.md +87 -0
  213. package/examples/component-feature-grid.md +201 -0
  214. package/examples/component-field.md +266 -0
  215. package/examples/component-filled-input.md +114 -0
  216. package/examples/component-flex.md +117 -0
  217. package/examples/component-float-button.md +214 -0
  218. package/examples/component-form-control-label.md +134 -0
  219. package/examples/component-form-control.md +113 -0
  220. package/examples/component-form-controls.md +251 -0
  221. package/examples/component-form-group.md +86 -0
  222. package/examples/component-form-helper-text.md +95 -0
  223. package/examples/component-form-label.md +98 -0
  224. package/examples/component-form.md +291 -0
  225. package/examples/component-game-hud.md +362 -0
  226. package/examples/component-game-menu.md +327 -0
  227. package/examples/component-grid.md +140 -0
  228. package/examples/component-grow.md +79 -0
  229. package/examples/component-hero-block.md +252 -0
  230. package/examples/component-hover-card.md +211 -0
  231. package/examples/component-icon-button.md +142 -0
  232. package/examples/component-icon.md +102 -0
  233. package/examples/component-illustration.md +280 -0
  234. package/examples/component-image-list.md +107 -0
  235. package/examples/component-image.md +282 -0
  236. package/examples/component-input-adornment.md +101 -0
  237. package/examples/component-input-base.md +134 -0
  238. package/examples/component-input-number.md +141 -0
  239. package/examples/component-input-otp.md +271 -0
  240. package/examples/component-input.md +213 -0
  241. package/examples/component-item.md +243 -0
  242. package/examples/component-kbd.md +197 -0
  243. package/examples/component-krw-amount.md +219 -0
  244. package/examples/component-label.md +118 -0
  245. package/examples/component-layout.md +217 -0
  246. package/examples/component-link.md +223 -0
  247. package/examples/component-list-item-avatar.md +72 -0
  248. package/examples/component-list-item-button.md +139 -0
  249. package/examples/component-list-item-icon.md +82 -0
  250. package/examples/component-list-item-text.md +98 -0
  251. package/examples/component-list-item.md +116 -0
  252. package/examples/component-list-subheader.md +70 -0
  253. package/examples/component-list.md +198 -0
  254. package/examples/component-loading-button.md +125 -0
  255. package/examples/component-loading-sequence.md +254 -0
  256. package/examples/component-lottie-player.md +279 -0
  257. package/examples/component-masonry.md +191 -0
  258. package/examples/component-mentions.md +189 -0
  259. package/examples/component-menu-item.md +102 -0
  260. package/examples/component-menu-list.md +98 -0
  261. package/examples/component-menu.md +139 -0
  262. package/examples/component-menubar.md +259 -0
  263. package/examples/component-message.md +162 -0
  264. package/examples/component-mobile-stepper.md +155 -0
  265. package/examples/component-modal.md +220 -0
  266. package/examples/component-navigation-menu.md +295 -0
  267. package/examples/component-notification.md +166 -0
  268. package/examples/component-otp-countdown.md +245 -0
  269. package/examples/component-outlined-input.md +145 -0
  270. package/examples/component-page-transition.md +281 -0
  271. package/examples/component-pagination.md +226 -0
  272. package/examples/component-paper.md +199 -0
  273. package/examples/component-pass-auth.md +265 -0
  274. package/examples/component-payment-brand-button.md +253 -0
  275. package/examples/component-payment-method-selector.md +272 -0
  276. package/examples/component-payment-receipt.md +277 -0
  277. package/examples/component-popconfirm.md +144 -0
  278. package/examples/component-popover.md +239 -0
  279. package/examples/component-popper.md +129 -0
  280. package/examples/component-pricing-cards.md +247 -0
  281. package/examples/component-progress.md +195 -0
  282. package/examples/component-qr-code.md +201 -0
  283. package/examples/component-radio.md +167 -0
  284. package/examples/component-rate.md +202 -0
  285. package/examples/component-resizable.md +163 -0
  286. package/examples/component-result.md +270 -0
  287. package/examples/component-scroll-area.md +199 -0
  288. package/examples/component-scroll-reveal.md +320 -0
  289. package/examples/component-segmented.md +178 -0
  290. package/examples/component-select.md +258 -0
  291. package/examples/component-separator.md +177 -0
  292. package/examples/component-sheet.md +277 -0
  293. package/examples/component-sidebar.md +257 -0
  294. package/examples/component-skeleton.md +178 -0
  295. package/examples/component-slide.md +89 -0
  296. package/examples/component-slider.md +208 -0
  297. package/examples/component-snackbar-content.md +92 -0
  298. package/examples/component-snackbar.md +121 -0
  299. package/examples/component-sonner.md +165 -0
  300. package/examples/component-space.md +125 -0
  301. package/examples/component-spatial-locomotion.md +373 -0
  302. package/examples/component-spatial-panel.md +330 -0
  303. package/examples/component-speed-dial-action.md +78 -0
  304. package/examples/component-speed-dial.md +177 -0
  305. package/examples/component-spin.md +173 -0
  306. package/examples/component-spinner.md +204 -0
  307. package/examples/component-splitter.md +210 -0
  308. package/examples/component-stack.md +130 -0
  309. package/examples/component-statistic.md +282 -0
  310. package/examples/component-step-button.md +157 -0
  311. package/examples/component-step-connector.md +157 -0
  312. package/examples/component-step-content.md +121 -0
  313. package/examples/component-step-icon.md +115 -0
  314. package/examples/component-step-label.md +101 -0
  315. package/examples/component-step.md +84 -0
  316. package/examples/component-steps.md +264 -0
  317. package/examples/component-stock-chart.md +251 -0
  318. package/examples/component-swipeable-drawer.md +149 -0
  319. package/examples/component-switch.md +99 -0
  320. package/examples/component-tab-scroll-button.md +180 -0
  321. package/examples/component-tab.md +120 -0
  322. package/examples/component-table-body.md +82 -0
  323. package/examples/component-table-cell.md +118 -0
  324. package/examples/component-table-container.md +75 -0
  325. package/examples/component-table-footer.md +72 -0
  326. package/examples/component-table-head.md +78 -0
  327. package/examples/component-table-pagination.md +137 -0
  328. package/examples/component-table-row.md +113 -0
  329. package/examples/component-table-sort-label.md +109 -0
  330. package/examples/component-table.md +202 -0
  331. package/examples/component-tabs.md +184 -0
  332. package/examples/component-tag-badge.md +309 -0
  333. package/examples/component-tag.md +102 -0
  334. package/examples/component-testimonial-carousel.md +218 -0
  335. package/examples/component-textarea-autosize.md +114 -0
  336. package/examples/component-textarea.md +173 -0
  337. package/examples/component-time-picker.md +205 -0
  338. package/examples/component-timeline.md +170 -0
  339. package/examples/component-toast.md +224 -0
  340. package/examples/component-toggle-button.md +129 -0
  341. package/examples/component-toggle.md +220 -0
  342. package/examples/component-toolbar.md +104 -0
  343. package/examples/component-tooltip.md +178 -0
  344. package/examples/component-tour.md +176 -0
  345. package/examples/component-transaction-list-item.md +243 -0
  346. package/examples/component-transfer.md +156 -0
  347. package/examples/component-tree-select.md +202 -0
  348. package/examples/component-tree.md +297 -0
  349. package/examples/component-typography.md +215 -0
  350. package/examples/component-upload.md +295 -0
  351. package/examples/component-video-hero.md +409 -0
  352. package/examples/component-video-player.md +340 -0
  353. package/examples/component-voice-input.md +408 -0
  354. package/examples/component-watermark.md +217 -0
  355. package/examples/component-zoom.md +92 -0
  356. package/examples/doc-explanation-example.md +196 -0
  357. package/examples/doc-how-to-example.md +205 -0
  358. package/examples/doc-tutorial-example.md +162 -0
  359. package/examples/dogfood-korean-fintech-system.md +433 -0
  360. package/examples/email-transactional-example.md +259 -0
  361. package/examples/palette-saas-violet.md +235 -0
  362. package/examples/print-business-card-spec.md +205 -0
  363. package/examples/print-packaging-spec.md +285 -0
  364. package/examples/report-example.md +228 -0
  365. package/examples/slide-deck-example.md +237 -0
  366. package/examples/website-improvement-report.md +128 -0
  367. package/examples/website-improvement-workspace.json +126 -0
  368. package/install.sh +189 -0
  369. package/knowledge/COVERAGE.md +740 -0
  370. package/knowledge/PRINCIPLES.md +108 -0
  371. package/knowledge/a11y/contrast.md +70 -0
  372. package/knowledge/a11y/keyboard-and-focus.md +108 -0
  373. package/knowledge/colors/color-theory.md +90 -0
  374. package/knowledge/colors/mui-palette-structure.md +105 -0
  375. package/knowledge/colors/palettes-by-product-type.md +876 -0
  376. package/knowledge/components/INDEX.md +231 -0
  377. package/knowledge/components/index.json +1470 -0
  378. package/knowledge/components/shadcn-registry.md +159 -0
  379. package/knowledge/conversational/ai-chat-interfaces.md +323 -0
  380. package/knowledge/conversational/chatbot-design.md +312 -0
  381. package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
  382. package/knowledge/conversational/korean-voice-conventions.md +281 -0
  383. package/knowledge/conversational/voice-ui-patterns.md +297 -0
  384. package/knowledge/design-tokens/ant-design.md +124 -0
  385. package/knowledge/design-tokens/material-3.md +235 -0
  386. package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
  387. package/knowledge/design-tokens/tailwind-v4.md +284 -0
  388. package/knowledge/game-ui/game-accessibility.md +317 -0
  389. package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
  390. package/knowledge/game-ui/hud-design.md +324 -0
  391. package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
  392. package/knowledge/game-ui/menu-systems.md +388 -0
  393. package/knowledge/i18n/korean-app-store-visual.md +223 -0
  394. package/knowledge/i18n/korean-document-style.md +301 -0
  395. package/knowledge/i18n/korean-payments.md +211 -0
  396. package/knowledge/i18n/korean-product-conventions.md +96 -0
  397. package/knowledge/i18n/korean-publishing.md +139 -0
  398. package/knowledge/i18n/korean-typography.md +123 -0
  399. package/knowledge/icons/curated-sets.md +225 -0
  400. package/knowledge/illustration/hero-illustrations.md +234 -0
  401. package/knowledge/illustration/illustration-systems.md +221 -0
  402. package/knowledge/illustration/mascot-design.md +208 -0
  403. package/knowledge/illustration/spot-illustrations.md +246 -0
  404. package/knowledge/illustration/svg-optimization.md +308 -0
  405. package/knowledge/layout/spacing-and-grid.md +119 -0
  406. package/knowledge/motion/app-loading-sequences.md +277 -0
  407. package/knowledge/motion/choreography-depth.md +297 -0
  408. package/knowledge/motion/marketing-motion.md +223 -0
  409. package/knowledge/motion/micro-interactions.md +266 -0
  410. package/knowledge/motion/motion-tools.md +281 -0
  411. package/knowledge/motion/principles.md +126 -0
  412. package/knowledge/patterns/auth-flow-design.md +316 -0
  413. package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
  414. package/knowledge/patterns/brand-identity.md +238 -0
  415. package/knowledge/patterns/brand-references.md +97 -0
  416. package/knowledge/patterns/chart-color-encoding.md +269 -0
  417. package/knowledge/patterns/chart-types.md +344 -0
  418. package/knowledge/patterns/dashboard-composition.md +299 -0
  419. package/knowledge/patterns/design-system-qa.md +356 -0
  420. package/knowledge/patterns/document-typography.md +248 -0
  421. package/knowledge/patterns/email-design.md +338 -0
  422. package/knowledge/patterns/empty-states.md +263 -0
  423. package/knowledge/patterns/error-states.md +318 -0
  424. package/knowledge/patterns/form-design.md +237 -0
  425. package/knowledge/patterns/information-architecture.md +341 -0
  426. package/knowledge/patterns/landing-hero-design.md +283 -0
  427. package/knowledge/patterns/landing-page-patterns.md +681 -0
  428. package/knowledge/patterns/list-and-feed.md +371 -0
  429. package/knowledge/patterns/mobile-navigation.md +278 -0
  430. package/knowledge/patterns/money-and-amount.md +301 -0
  431. package/knowledge/patterns/onboarding.md +300 -0
  432. package/knowledge/patterns/pricing-page-design.md +261 -0
  433. package/knowledge/patterns/realtime-data.md +280 -0
  434. package/knowledge/patterns/report-design.md +330 -0
  435. package/knowledge/patterns/search-ux.md +373 -0
  436. package/knowledge/patterns/settings-page.md +325 -0
  437. package/knowledge/patterns/slide-deck-design.md +316 -0
  438. package/knowledge/patterns/styles-catalog.md +2599 -0
  439. package/knowledge/patterns/technical-writing.md +306 -0
  440. package/knowledge/patterns/ui-reasoning.md +1853 -0
  441. package/knowledge/patterns/ux-guidelines.md +1454 -0
  442. package/knowledge/platforms/react-native.md +395 -0
  443. package/knowledge/print/brochures-and-flyers.md +276 -0
  444. package/knowledge/print/korean-print-conventions.md +284 -0
  445. package/knowledge/print/packaging.md +321 -0
  446. package/knowledge/print/print-fundamentals.md +238 -0
  447. package/knowledge/print/signage-and-posters.md +235 -0
  448. package/knowledge/print/stationery.md +262 -0
  449. package/knowledge/spatial/ar-patterns.md +253 -0
  450. package/knowledge/spatial/comfort-and-accessibility.md +245 -0
  451. package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
  452. package/knowledge/spatial/spatial-ui-elements.md +343 -0
  453. package/knowledge/spatial/vr-patterns.md +302 -0
  454. package/knowledge/typography/font-pairings.md +332 -0
  455. package/knowledge/typography/mui-type-scale.md +57 -0
  456. package/knowledge/typography/type-scale-fundamentals.md +105 -0
  457. package/knowledge/video/in-product-video.md +277 -0
  458. package/knowledge/video/korean-video-conventions.md +247 -0
  459. package/knowledge/video/marketing-video.md +258 -0
  460. package/knowledge/video/social-and-short-form.md +257 -0
  461. package/knowledge/video/video-fundamentals.md +296 -0
  462. package/package.json +106 -0
  463. package/skills/README.md +39 -0
  464. package/skills/color-palette/PLAYBOOK.md +175 -0
  465. package/skills/color-palette/SKILL.md +6 -0
  466. package/skills/color-palette/TEMPLATE.md +103 -0
  467. package/skills/component-spec-writer/PLAYBOOK.md +169 -0
  468. package/skills/component-spec-writer/SKILL.md +6 -0
  469. package/skills/component-spec-writer/TEMPLATE.md +115 -0
  470. package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
  471. package/skills/conversational-ui-designer/SKILL.md +6 -0
  472. package/skills/design-broadcast/PLAYBOOK.md +146 -0
  473. package/skills/design-broadcast/SKILL.md +6 -0
  474. package/skills/design-critique/PLAYBOOK.md +137 -0
  475. package/skills/design-critique/SKILL.md +6 -0
  476. package/skills/design-pr-review/PLAYBOOK.md +171 -0
  477. package/skills/design-pr-review/SKILL.md +6 -0
  478. package/skills/design-system-builder/PLAYBOOK.md +218 -0
  479. package/skills/design-system-builder/SKILL.md +6 -0
  480. package/skills/design-system-qa/PLAYBOOK.md +163 -0
  481. package/skills/design-system-qa/SKILL.md +6 -0
  482. package/skills/document-author/PLAYBOOK.md +167 -0
  483. package/skills/document-author/SKILL.md +6 -0
  484. package/skills/figma-token-sync/PLAYBOOK.md +149 -0
  485. package/skills/figma-token-sync/SKILL.md +6 -0
  486. package/skills/game-ui-designer/PLAYBOOK.md +209 -0
  487. package/skills/game-ui-designer/SKILL.md +6 -0
  488. package/skills/handoff-spec/PLAYBOOK.md +170 -0
  489. package/skills/handoff-spec/SKILL.md +6 -0
  490. package/skills/illustration-designer/PLAYBOOK.md +166 -0
  491. package/skills/illustration-designer/SKILL.md +6 -0
  492. package/skills/motion-designer/PLAYBOOK.md +223 -0
  493. package/skills/motion-designer/SKILL.md +6 -0
  494. package/skills/print-designer/PLAYBOOK.md +209 -0
  495. package/skills/print-designer/SKILL.md +6 -0
  496. package/skills/slide-deck-author/PLAYBOOK.md +198 -0
  497. package/skills/slide-deck-author/SKILL.md +6 -0
  498. package/skills/spatial-designer/PLAYBOOK.md +238 -0
  499. package/skills/spatial-designer/SKILL.md +6 -0
  500. package/skills/ux-audit/PLAYBOOK.md +142 -0
  501. package/skills/ux-audit/SKILL.md +6 -0
  502. package/skills/video-designer/PLAYBOOK.md +240 -0
  503. package/skills/video-designer/SKILL.md +6 -0
  504. package/skills/website-improvement/PLAYBOOK.md +118 -0
  505. package/skills/website-improvement/SKILL.md +6 -0
  506. package/skills/website-improvement/TEMPLATE.md +103 -0
  507. package/tools/audit/changelog-generate.py +176 -0
  508. package/tools/audit/check-coverage.py +483 -0
  509. package/tools/audit/doctor_assertions.py +256 -0
  510. package/tools/audit/example-qa.py +108 -0
  511. package/tools/audit/frontmatter-check.py +199 -0
  512. package/tools/audit/integration-check.py +95 -0
  513. package/tools/audit/korean-copy-check.py +161 -0
  514. package/tools/audit/link-check.py +146 -0
  515. package/tools/audit/local-ci.py +558 -0
  516. package/tools/audit/package-contents.py +723 -0
  517. package/tools/audit/package-smoke.py +22443 -0
  518. package/tools/audit/raw-hex-check.py +252 -0
  519. package/tools/audit/registry-smoke.py +8188 -0
  520. package/tools/audit/release-metadata.py +9832 -0
  521. package/tools/audit/run-all.py +351 -0
  522. package/tools/audit/smoke_assertions.py +12742 -0
  523. package/tools/audit/stability-review.py +332 -0
  524. package/tools/audit/stale-check.py +156 -0
  525. package/tools/migrations/add-version-frontmatter.py +132 -0
  526. package/tools/migrations/bump-last-updated.py +131 -0
  527. package/tools/migrations/promote-stability.py +172 -0
  528. package/tools/preview/README.md +58 -0
  529. package/tools/preview/render-tokens.py +454 -0
@@ -0,0 +1,277 @@
1
+ # `Sheet` — spec
2
+
3
+ > Synthesized from shadcn-ui `sheet` (Radix Dialog with side anchoring) and Material 3 bottom sheet. A modal panel that slides in from a screen edge — distinct from `Drawer` (typically navigation) and `Modal` (centered).
4
+
5
+ ## When to use Sheet vs Drawer vs Modal
6
+
7
+ | Component | Anchor | Primary use |
8
+ | --- | --- | --- |
9
+ | **Modal** | Center | Confirmation, focused task |
10
+ | **Drawer** | Left/Right | Persistent or modal navigation menu |
11
+ | **Sheet** | Any side | Modal supplemental flow / detail view, mobile-first |
12
+
13
+ Sheet's distinguishing properties:
14
+ - **Side-anchored** like a drawer, but **always modal**.
15
+ - **Mobile-first** patterns (bottom sheet on phone; drawer on desktop).
16
+ - **Detents / snap points** common (peek vs full).
17
+
18
+ ## Anatomy
19
+
20
+ ```
21
+ ┌────────────────────────────────────┐
22
+ │ │
23
+ │ [backdrop scrim] │
24
+ │ │
25
+ │ │
26
+ ├────────────────────────────────────┤
27
+ │ ━━━ (drag handle, optional) │
28
+ │ Sheet header [×]│
29
+ │ ─────────────── │
30
+ │ │
31
+ │ Sheet content │
32
+ │ │
33
+ │ ... │
34
+ │ │
35
+ └────────────────────────────────────┘
36
+ (Bottom-anchored sheet)
37
+ ```
38
+
39
+ ## API
40
+
41
+ ```tsx
42
+ <Sheet open={open} onOpenChange={setOpen}>
43
+ <Sheet.Trigger asChild>
44
+ <Button>Open settings</Button>
45
+ </Sheet.Trigger>
46
+ <Sheet.Content side="right">
47
+ <Sheet.Header>
48
+ <Sheet.Title>Settings</Sheet.Title>
49
+ <Sheet.Description>Configure your preferences.</Sheet.Description>
50
+ </Sheet.Header>
51
+
52
+ {/* form content */}
53
+
54
+ <Sheet.Footer>
55
+ <Sheet.Close asChild>
56
+ <Button variant="ghost">Cancel</Button>
57
+ </Sheet.Close>
58
+ <Button onClick={save}>Save</Button>
59
+ </Sheet.Footer>
60
+ </Sheet.Content>
61
+ </Sheet>
62
+ ```
63
+
64
+ | Prop | Type | Default | Description |
65
+ | --- | --- | --- | --- |
66
+ | `open` | `boolean` | controlled | Visibility |
67
+ | `onOpenChange` | `(open: boolean) => void` | — | Close handler |
68
+ | `modal` | `boolean` | `true` | Trap focus + lock scroll |
69
+ | `side` | `"top" \| "right" \| "bottom" \| "left"` | `"right"` | Anchor edge |
70
+ | `size` | `"sm" \| "md" \| "lg" \| "xl" \| "full"` | `"md"` | Width (top/bottom) or height (left/right) |
71
+ | `dismissible` | `boolean` | `true` | Click outside or Esc closes |
72
+ | `detents` | `number[]` | — | Optional snap points (mobile bottom sheet); e.g., `[0.4, 0.9]` |
73
+
74
+ ## Composition
75
+
76
+ | Part | Purpose |
77
+ | --- | --- |
78
+ | `Trigger` | Element that opens the sheet |
79
+ | `Content` | The sheet panel |
80
+ | `Header` | Title + description region |
81
+ | `Title` | Heading (announced to screen readers) |
82
+ | `Description` | Helper text |
83
+ | `Footer` | Actions row |
84
+ | `Close` | Button that closes the sheet |
85
+ | `Overlay` | Backdrop scrim |
86
+
87
+ ## Side variants
88
+
89
+ ### Right (default — desktop settings, detail panels)
90
+
91
+ ```
92
+ ┌──────────────┐
93
+ [main content] │ Sheet panel │
94
+ │ │
95
+ │ │
96
+ └──────────────┘
97
+ ```
98
+
99
+ ### Left (alternative navigation)
100
+
101
+ Less common; use Drawer for nav.
102
+
103
+ ### Bottom (mobile-first)
104
+
105
+ ```
106
+ [main content]
107
+ ┌───────────────┐
108
+ │ Sheet │ ← slides up
109
+ │ │
110
+ └───────────────┘
111
+ ```
112
+
113
+ Mobile: bottom sheet is the canonical action / detail pattern. iOS / Android native.
114
+
115
+ ### Top (notification center, full-page filter)
116
+
117
+ Less common. Use for app-wide announcements or full-page-spanning filter overlays.
118
+
119
+ ## Size variants
120
+
121
+ | Size | Width (left/right) | Height (top/bottom) |
122
+ | --- | --- | --- |
123
+ | `sm` | 320px | 30vh |
124
+ | `md` (default) | 480px | 50vh |
125
+ | `lg` | 640px | 70vh |
126
+ | `xl` | 800px | 90vh |
127
+ | `full` | 100% | 100% |
128
+
129
+ For mobile (< 640px viewport): all sizes default to ~90% of viewport.
130
+
131
+ ## Detents (mobile bottom sheet)
132
+
133
+ ```
134
+ detents: [0.4, 0.9]
135
+ ↑ ↑
136
+ peek full
137
+
138
+ User can drag to switch between detents:
139
+ - Drag up from peek → snap to full
140
+ - Drag down from full → snap to peek (or close if dragged to 0)
141
+ ```
142
+
143
+ iOS-style sheet behavior. Common for map apps (peek shows summary, drag up for full).
144
+
145
+ ## States
146
+
147
+ | State | Visual |
148
+ | --- | --- |
149
+ | Closed | Hidden |
150
+ | Opening | Slide-in from side (200-300ms) + backdrop fade |
151
+ | Open | Visible, focus trapped |
152
+ | Dragging (mobile, with detents) | Following finger; backdrop opacity proportional |
153
+ | Snapping | Animate to nearest detent |
154
+ | Closing | Reverse |
155
+
156
+ ## Animation
157
+
158
+ ```css
159
+ [data-side="right"] {
160
+ --slide: translateX(100%);
161
+ }
162
+ [data-side="left"] {
163
+ --slide: translateX(-100%);
164
+ }
165
+ [data-side="bottom"] {
166
+ --slide: translateY(100%);
167
+ }
168
+ [data-side="top"] {
169
+ --slide: translateY(-100%);
170
+ }
171
+
172
+ .sheet[data-state="closed"] {
173
+ transform: var(--slide);
174
+ }
175
+ .sheet[data-state="open"] {
176
+ transform: translate(0);
177
+ }
178
+ .sheet {
179
+ transition: transform 250ms var(--ease-out);
180
+ }
181
+
182
+ @media (prefers-reduced-motion: reduce) {
183
+ .sheet { transition: none; }
184
+ }
185
+ ```
186
+
187
+ ## Tokens consumed
188
+
189
+ ```
190
+ --color-bg-overlay-scrim (backdrop, ~50% opacity)
191
+ --color-bg-default (sheet bg)
192
+ --color-fg-default
193
+ --color-border-default (header / footer divider)
194
+ --shadow-overlay
195
+ --radius-lg (mobile bottom sheet has rounded top corners)
196
+ --space-md, --space-lg
197
+ --motion-medium (slide-in)
198
+ --ease-out
199
+ --z-overlay
200
+ ```
201
+
202
+ ## Accessibility
203
+
204
+ - `Content`: `role="dialog"` (or `alertdialog` if it interrupts), `aria-modal="true"`.
205
+ - `aria-labelledby` references `Title`.
206
+ - `aria-describedby` references `Description`.
207
+ - Focus trap on open; first focusable in Content gets focus.
208
+ - `Esc` closes; `Tab` cycles within Content.
209
+ - `Close` button is inside Content; users find it via Tab.
210
+ - Click outside (on overlay) closes — but not for forms with unsaved changes (confirm first).
211
+ - Backdrop is non-interactive (just visual scrim) — clicks bubble to close handler.
212
+ - Touch-drag (mobile detents) uses `aria-valuenow` for screen reader; announce position changes.
213
+ - Reduced motion: no slide; instant appearance.
214
+
215
+ ## Mobile-specific
216
+
217
+ - Bottom sheet rounded-top corners (`--radius-lg` on top-left + top-right only).
218
+ - Drag handle (small bar at top): visual + accessible (`role="button" aria-label="Drag to resize"`).
219
+ - Safe-area inset: respect device safe-area for iPhone home indicator (`padding-bottom: env(safe-area-inset-bottom)`).
220
+ - Dynamic height for keyboard: when virtual keyboard opens, shrink sheet so input visible.
221
+
222
+ ## Code example
223
+
224
+ ```tsx
225
+ function FilterSheet({ filters, onChange, onApply }: Props) {
226
+ return (
227
+ <Sheet>
228
+ <Sheet.Trigger asChild>
229
+ <Button variant="outline">필터</Button>
230
+ </Sheet.Trigger>
231
+ <Sheet.Content side="bottom" size="lg" detents={[0.5, 0.95]}>
232
+ <Sheet.Header>
233
+ <Sheet.Title>필터 설정</Sheet.Title>
234
+ </Sheet.Header>
235
+ <FilterControls value={filters} onChange={onChange} />
236
+ <Sheet.Footer>
237
+ <Button variant="ghost" onClick={() => onChange({})}>초기화</Button>
238
+ <Button onClick={onApply}>적용하기</Button>
239
+ </Sheet.Footer>
240
+ </Sheet.Content>
241
+ </Sheet>
242
+ );
243
+ }
244
+ ```
245
+
246
+ ## Edge cases
247
+
248
+ - **Form with unsaved changes + click outside**: confirm before close ("Discard changes?").
249
+ - **Sheet inside a Sheet**: stack, but close inner first; ensure focus returns correctly.
250
+ - **Very long content**: scroll inside Content (header / footer stay pinned).
251
+ - **Mobile keyboard opens while sheet open**: shrink sheet to fit; ensure focused input visible.
252
+ - **Detents + content scroll** conflict: drag from header drags sheet; drag from content scrolls content. Detect target.
253
+ - **RTL**: `right` and `left` swap automatically.
254
+ - **Multi-step flow inside Sheet**: each step within same Sheet; or stack sheets (max 2).
255
+
256
+ ## Don't
257
+
258
+ - Don't use Sheet for full-page navigation (use Drawer).
259
+ - Don't use Sheet for centered confirm dialogs (use Modal).
260
+ - Don't put 3+ stacked Sheets — too deep, users lose context.
261
+ - Don't omit close button. Users need an obvious dismiss path.
262
+ - Don't forget the click-outside guard for forms with unsaved data.
263
+ - Don't auto-close after task completion without confirmation animation; user feedback matters.
264
+ - Don't ignore safe-area insets on iOS.
265
+
266
+ ## References
267
+
268
+ - shadcn-ui: [`sheet`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/sheet.tsx) (Radix Dialog primitive)
269
+ - Material 3: bottom sheet pattern
270
+ - iOS: UISheetPresentationController detents
271
+
272
+ ## Cross-reference
273
+
274
+ - [`examples/component-modal.md`](component-modal.md) — centered dialog
275
+ - [`examples/component-drawer.md`](component-drawer.md) — persistent navigation
276
+ - [`knowledge/motion/principles.md`](../knowledge/motion/principles.md) — slide-in timing
277
+ - [`knowledge/a11y/keyboard-and-focus.md`](../knowledge/a11y/keyboard-and-focus.md) — focus trap
@@ -0,0 +1,257 @@
1
+ # `Sidebar` — spec
2
+
3
+ > Synthesized from shadcn-ui `sidebar` (the flagship Radix-based primitive). A persistent navigation panel — collapsible, themed, often the primary nav surface in dashboards / docs sites / IDE-style apps.
4
+
5
+ ## When to use Sidebar vs Drawer
6
+
7
+ | | Sidebar | Drawer |
8
+ | --- | --- | --- |
9
+ | Persistence | Always visible (collapsible) | Modal or persistent; usually toggled |
10
+ | Use | Primary navigation in apps | Secondary nav, mobile-only nav |
11
+ | Desktop | Standard | Sometimes overkill |
12
+ | Mobile | Becomes a sheet | Full-screen takeover |
13
+
14
+ ## Anatomy
15
+
16
+ ```
17
+ ┌────────────┬───────────────────────────┐
18
+ │ [logo] │ │
19
+ │ ────── │ │
20
+ │ Header │ │
21
+ │ │ │
22
+ │ Workspace │ │
23
+ │ ▶ Project │ Main content │
24
+ │ Inbox │ │
25
+ │ Tasks │ │
26
+ │ │ │
27
+ │ Settings │ │
28
+ │ ────── │ │
29
+ │ [user] │ │
30
+ └────────────┴───────────────────────────┘
31
+
32
+ Sidebar
33
+ ```
34
+
35
+ ## API
36
+
37
+ ```tsx
38
+ <Sidebar>
39
+ <Sidebar.Header>
40
+ <Logo />
41
+ <WorkspaceSwitcher />
42
+ </Sidebar.Header>
43
+
44
+ <Sidebar.Content>
45
+ <Sidebar.Group>
46
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
47
+ <Sidebar.Menu>
48
+ <Sidebar.MenuItem>
49
+ <Sidebar.MenuButton href="/projects" active>
50
+ <FolderIcon /> Projects
51
+ </Sidebar.MenuButton>
52
+ <Sidebar.MenuSub>
53
+ <Sidebar.MenuSubItem href="/projects/active">Active</Sidebar.MenuSubItem>
54
+ <Sidebar.MenuSubItem href="/projects/archive">Archive</Sidebar.MenuSubItem>
55
+ </Sidebar.MenuSub>
56
+ </Sidebar.MenuItem>
57
+ <Sidebar.MenuItem>
58
+ <Sidebar.MenuButton href="/inbox">
59
+ <InboxIcon /> Inbox
60
+ <Sidebar.MenuBadge>12</Sidebar.MenuBadge>
61
+ </Sidebar.MenuButton>
62
+ </Sidebar.MenuItem>
63
+ </Sidebar.Menu>
64
+ </Sidebar.Group>
65
+ </Sidebar.Content>
66
+
67
+ <Sidebar.Footer>
68
+ <UserMenu />
69
+ </Sidebar.Footer>
70
+ </Sidebar>
71
+
72
+ <SidebarTrigger /> {/* in main content header — toggles sidebar */}
73
+ ```
74
+
75
+ ## Composition
76
+
77
+ | Part | Purpose |
78
+ | --- | --- |
79
+ | `Sidebar` | Wrapper |
80
+ | `Header` | Top section (logo, workspace switcher) |
81
+ | `Content` | Scrollable middle (groups + menus) |
82
+ | `Footer` | Bottom section (user menu, settings) |
83
+ | `Group` | Logical section |
84
+ | `GroupLabel` | Section heading |
85
+ | `Menu` | List of items |
86
+ | `MenuItem` | Single item wrapper |
87
+ | `MenuButton` | Clickable item |
88
+ | `MenuSub` | Nested sub-menu (collapsible) |
89
+ | `MenuSubItem` | Sub-menu item |
90
+ | `MenuBadge` | Count / indicator on menu item |
91
+ | `MenuAction` | Right-aligned secondary action (e.g., "More" menu) |
92
+ | `Separator` | Visual divider |
93
+ | `Trigger` | Renders elsewhere; toggles sidebar |
94
+
95
+ ## States
96
+
97
+ | State | Visual |
98
+ | --- | --- |
99
+ | Expanded (default desktop) | Full width with labels |
100
+ | Collapsed (icon-only) | ~64px width; only icons visible |
101
+ | Mobile (offcanvas) | Off-screen by default; opens as Sheet on trigger |
102
+ | Item active | Highlighted bg + brand-color indicator |
103
+ | Item hover | Subtle bg shift |
104
+ | Sub-menu collapsed | Hidden, parent item shows chevron |
105
+ | Sub-menu expanded | Items revealed, parent chevron rotated |
106
+
107
+ ## Variants
108
+
109
+ ### Width modes
110
+
111
+ ```tsx
112
+ <Sidebar variant="sidebar" /> // standard fixed
113
+ <Sidebar variant="floating" /> // detached, with shadow
114
+ <Sidebar variant="inset" /> // inset within rounded shell
115
+ ```
116
+
117
+ ### Collapsibility
118
+
119
+ ```tsx
120
+ <Sidebar collapsible="offcanvas" /> // mobile-style: slides off-canvas
121
+ <Sidebar collapsible="icon" /> // collapses to icon-only
122
+ <Sidebar collapsible="none" /> // always full width
123
+ ```
124
+
125
+ ### Side
126
+
127
+ ```tsx
128
+ <Sidebar side="left" /> // default
129
+ <Sidebar side="right" /> // for tools / settings panels
130
+ ```
131
+
132
+ ## Responsive behavior
133
+
134
+ ```
135
+ Desktop (≥ 1024px):
136
+ Expanded → user can collapse to icon mode
137
+
138
+ Tablet (768-1023px):
139
+ Default to icon mode → user can expand
140
+
141
+ Mobile (< 768px):
142
+ Offcanvas → invisible until trigger; opens as Sheet
143
+
144
+ ```
145
+
146
+ State persists in localStorage so collapse preference survives sessions.
147
+
148
+ ## Tokens consumed
149
+
150
+ ```
151
+ --sidebar-width (default 16rem / 256px)
152
+ --sidebar-width-icon (collapsed; default 4rem / 64px)
153
+ --sidebar-bg (sidebar background, slightly different from main)
154
+ --sidebar-fg (text)
155
+ --sidebar-fg-muted (group labels)
156
+ --sidebar-item-hover-bg
157
+ --sidebar-item-active-bg
158
+ --sidebar-item-active-fg
159
+ --sidebar-border (right border)
160
+ --space-xs, --space-sm, --space-md
161
+ --motion-medium (collapse animation)
162
+ --ease-out
163
+ --z-fixed (when fixed-position)
164
+ ```
165
+
166
+ shadcn names them `--sidebar-*` so they don't conflict with main app theme.
167
+
168
+ ## Accessibility
169
+
170
+ - Sidebar: `<aside aria-label="Main navigation">`.
171
+ - Active item: `aria-current="page"` (not just visual).
172
+ - Menu: `<ul>` semantically; items as `<li>`.
173
+ - MenuButton: real `<a>` for nav links, `<button>` for actions.
174
+ - Sub-menus: `aria-expanded` on parent toggle, `aria-controls` referencing sub-menu id.
175
+ - Collapsed icon-only mode: each icon button needs `aria-label` (e.g., `<button aria-label="Inbox">`).
176
+ - Mobile offcanvas: opens as Sheet with focus trap.
177
+ - Keyboard: Tab navigates items; arrow keys can navigate within menu (optional, depends on design).
178
+
179
+ ## Code example
180
+
181
+ ```tsx
182
+ function AppShell({ children }: Props) {
183
+ return (
184
+ <SidebarProvider>
185
+ <Sidebar collapsible="icon">
186
+ <Sidebar.Header>
187
+ <Logo />
188
+ </Sidebar.Header>
189
+ <Sidebar.Content>
190
+ <Sidebar.Group>
191
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
192
+ <Sidebar.Menu>
193
+ {workspaceItems.map(item => (
194
+ <Sidebar.MenuItem key={item.path}>
195
+ <Sidebar.MenuButton href={item.path} active={pathname === item.path}>
196
+ <item.icon />
197
+ <span>{item.label}</span>
198
+ {item.count && <Sidebar.MenuBadge>{item.count}</Sidebar.MenuBadge>}
199
+ </Sidebar.MenuButton>
200
+ </Sidebar.MenuItem>
201
+ ))}
202
+ </Sidebar.Menu>
203
+ </Sidebar.Group>
204
+ </Sidebar.Content>
205
+ <Sidebar.Footer>
206
+ <UserMenu />
207
+ </Sidebar.Footer>
208
+ </Sidebar>
209
+
210
+ <main>
211
+ <header>
212
+ <SidebarTrigger />
213
+ <h1>{pageTitle}</h1>
214
+ </header>
215
+ {children}
216
+ </main>
217
+ </SidebarProvider>
218
+ );
219
+ }
220
+ ```
221
+
222
+ ## Korean apps
223
+
224
+ - Sidebar 너비: 한글 메뉴는 영문보다 약간 더 넓은 너비가 필요 (typically 18rem instead of 16rem).
225
+ - Group label: 한글 ("워크스페이스", "관리") works well; keep concise.
226
+ - Active item indicator: 좌측 색상 막대 + 배경 강조; classic KR enterprise pattern.
227
+
228
+ ## Edge cases
229
+
230
+ - **Long item labels**: truncate with ellipsis; show full text in tooltip on hover.
231
+ - **Many items (50+)**: scroll inside Content; pin Header + Footer.
232
+ - **Nested too deep**: 3+ levels = navigation pain. Cap at 2 levels.
233
+ - **Sidebar in nested layouts**: only one Sidebar per layout root; nested sidebars indicate over-decomposition.
234
+ - **Cross-tab sync**: collapse state via localStorage works across tabs after refresh.
235
+ - **Reduced motion**: skip collapse animation; instant width change.
236
+ - **Right-to-left**: `side="right"` becomes `left`; borders swap.
237
+
238
+ ## Don't
239
+
240
+ - Don't omit collapse on icon mode for desktop — power users need it.
241
+ - Don't put non-navigation items (status, ads) in Sidebar — that's main content territory.
242
+ - Don't lock to one width; respect collapse preference.
243
+ - Don't omit `aria-current="page"` on active items.
244
+ - Don't put 30 ungrouped items — use Group + GroupLabel.
245
+ - Don't overload icon-only mode with no tooltip — users see only icons.
246
+
247
+ ## References
248
+
249
+ - shadcn-ui: [`sidebar`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/sidebar.tsx) — flagship primitive
250
+ - Patterns: VS Code, Linear, Notion sidebars
251
+
252
+ ## Cross-reference
253
+
254
+ - [`examples/component-drawer.md`](component-drawer.md) — modal nav alternative
255
+ - [`examples/component-sheet.md`](component-sheet.md) — mobile offcanvas variant
256
+ - [`examples/component-navigation-menu.md`](component-navigation-menu.md) — top nav alternative
257
+ - [`knowledge/patterns/mobile-navigation.md`](../knowledge/patterns/mobile-navigation.md)