@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,165 @@
1
+ # `Sonner` — spec
2
+
3
+ > Synthesized from shadcn-ui `sonner` (the Sonner library, by emilkowalski). The modern toast-of-choice in shadcn-based projects. Stacks beautifully, supports rich actions, promise wrappers.
4
+
5
+ ## Sonner vs Toast vs Snackbar
6
+
7
+ Sonner is shadcn's recommended toast library, distinct from older toast / snackbar patterns:
8
+ - **Stacking**: cards stack with depth, expand on hover.
9
+ - **Promise wrapper**: `toast.promise(promise, { loading, success, error })`.
10
+ - **Rich content**: titles, descriptions, action + cancel buttons.
11
+ - **Sound** (optional): subtle confirmation chime.
12
+
13
+ For shadcn-based projects: use Sonner instead of writing custom Toast.
14
+
15
+ ## Anatomy
16
+
17
+ ```
18
+ ┌────────────────────────────┐
19
+ │ ✓ Saved successfully │
20
+ │ Your changes are live. │
21
+ │ [Undo] [Dismiss] │
22
+ └────────────────────────────┘
23
+ ┌────────────────────────────┐
24
+ │ Earlier toast (background) │
25
+ └────────────────────────────┘
26
+ ↑ stack expands on hover
27
+ ```
28
+
29
+ ## API
30
+
31
+ ```tsx
32
+ import { Toaster, toast } from "sonner";
33
+
34
+ // Once at app root:
35
+ <Toaster position="bottom-right" richColors />
36
+
37
+ // Anywhere:
38
+ toast.success("저장됐어요", {
39
+ description: "변경 사항이 적용됐어요.",
40
+ action: { label: "실행 취소", onClick: undo },
41
+ });
42
+
43
+ toast.error("저장 실패");
44
+ toast.info("새 알림");
45
+ toast.warning("연결 불안정");
46
+ toast.loading("처리 중...");
47
+ toast.promise(savePromise, {
48
+ loading: "저장 중...",
49
+ success: "저장됐어요",
50
+ error: "저장 실패",
51
+ });
52
+
53
+ // Dismiss
54
+ const id = toast("Custom");
55
+ toast.dismiss(id);
56
+ toast.dismiss(); // all
57
+ ```
58
+
59
+ ## Toaster props
60
+
61
+ | Prop | Type | Default | Description |
62
+ | --- | --- | --- | --- |
63
+ | `position` | `"top-left" \| "top-center" \| "top-right" \| "bottom-left" \| "bottom-center" \| "bottom-right"` | `"bottom-right"` | Anchor |
64
+ | `richColors` | `boolean` | `false` | Use semantic colors (green success, red error) |
65
+ | `closeButton` | `boolean` | `false` | Show × on each toast |
66
+ | `expand` | `boolean` | `false` | Expand stack by default (instead of on hover) |
67
+ | `duration` | `number` | `4000` | Ms |
68
+ | `visibleToasts` | `number` | `3` | Max visible at once |
69
+ | `theme` | `"light" \| "dark" \| "system"` | `"system"` | Theme |
70
+ | `toastOptions` | `object` | — | Default options for all toasts |
71
+
72
+ ## Per-toast options
73
+
74
+ | Field | Description |
75
+ | --- | --- |
76
+ | `description` | Subtitle text |
77
+ | `action` | `{ label, onClick }` — primary action |
78
+ | `cancel` | `{ label, onClick }` — secondary cancel |
79
+ | `duration` | Override default |
80
+ | `id` | For deduping / programmatic dismiss |
81
+ | `important` | Don't auto-dismiss |
82
+ | `icon` | Custom icon |
83
+
84
+ ## Promise wrapper
85
+
86
+ ```tsx
87
+ toast.promise(api.save(data), {
88
+ loading: "저장 중...",
89
+ success: (result) => `${result.title} 저장됨`,
90
+ error: (err) => `저장 실패: ${err.message}`,
91
+ });
92
+ ```
93
+
94
+ Single API replaces the manual `try { setLoading(true); ... } catch { ... }` flow. Sonner handles state transitions.
95
+
96
+ ## States
97
+
98
+ | State | Visual |
99
+ | --- | --- |
100
+ | Pending (promise loading) | Spinner + loading text |
101
+ | Success | Green check + title + description |
102
+ | Error | Red X + title + description |
103
+ | Persistent (important) | No auto-dismiss |
104
+ | Stacked (idle) | Compressed visually |
105
+ | Stacked (hovered) | Expand to show all |
106
+
107
+ ## Tokens consumed
108
+
109
+ ```
110
+ --toast-bg (per severity)
111
+ --toast-fg
112
+ --toast-success / -error / -info / -warning (richColors)
113
+ --toast-action-fg (button)
114
+ --toast-shadow
115
+ --radius-md
116
+ --motion-medium (slide / expand)
117
+ --ease-out
118
+ --z-toast
119
+ ```
120
+
121
+ ## Accessibility
122
+
123
+ - Each toast: `role="status"` (success/info) or `role="alert"` (error).
124
+ - `aria-live` follows role.
125
+ - Keyboard: Tab can focus toast actions; Esc dismisses.
126
+ - Touch: swipe left/right to dismiss (mobile gesture).
127
+
128
+ ## Code example — Korean fintech save flow
129
+
130
+ ```tsx
131
+ async function handleSave() {
132
+ toast.promise(
133
+ api.saveTransaction(data),
134
+ {
135
+ loading: "결제 처리 중...",
136
+ success: (result) => ({
137
+ title: "결제가 완료되었어요",
138
+ description: `${formatKRW(result.amount)} 결제 완료`,
139
+ action: {
140
+ label: "영수증 보기",
141
+ onClick: () => navigate(`/receipts/${result.id}`),
142
+ },
143
+ }),
144
+ error: (err) => `결제 실패: ${err.message}`,
145
+ }
146
+ );
147
+ }
148
+ ```
149
+
150
+ ## Don't
151
+
152
+ - Don't use Sonner for in-app errors that block user. Use AlertDialog.
153
+ - Don't queue 5+ toasts. Cap visible at 3.
154
+ - Don't autoHide < 3s for messages with actions. Users need time to act.
155
+ - Don't mix Sonner with another Toast library — pick one.
156
+
157
+ ## References
158
+
159
+ - shadcn-ui: [`sonner`](../refs/shadcn-ui/apps/v4/registry/new-york-v4/ui/sonner.tsx)
160
+ - Sonner library by emilkowalski
161
+
162
+ ## Cross-reference
163
+
164
+ - [`examples/component-toast.md`](component-toast.md)
165
+ - [`examples/component-snackbar.md`](component-snackbar.md)
@@ -0,0 +1,125 @@
1
+ # `Space` — spec
2
+
3
+ > Synthesized from Ant Design `Space`. A tiny utility that adds consistent gap between children. Sibling to `Stack` (MUI) and `Flex` (Ant) — `Space` is the simplest of the three.
4
+
5
+ ## Space vs Flex vs Stack
6
+
7
+ | | Space | Flex | Stack |
8
+ | --- | --- | --- | --- |
9
+ | Default direction | horizontal | horizontal | vertical |
10
+ | Gap by default | yes | no (must specify) | yes |
11
+ | Wrap | optional | optional | rare |
12
+ | Use | Inline gap between elements | Full flex layout | Vertical stack |
13
+
14
+ For "I just want a gap between these inline things": `Space`.
15
+ For "I'm doing real flex layout": `Flex`.
16
+ For "vertical stack with consistent gap": `Stack`.
17
+
18
+ ## API
19
+
20
+ ```tsx
21
+ <Space>
22
+ <Button>Save</Button>
23
+ <Button>Cancel</Button>
24
+ </Space>
25
+
26
+ <Space size="large">
27
+ <Tag>React</Tag>
28
+ <Tag>TypeScript</Tag>
29
+ <Tag>Vite</Tag>
30
+ </Space>
31
+
32
+ <Space direction="vertical" size="middle">
33
+ <Heading>Title</Heading>
34
+ <Text>Body</Text>
35
+ </Space>
36
+
37
+ <Space wrap>
38
+ {tags.map(t => <Tag key={t}>{t}</Tag>)}
39
+ </Space>
40
+
41
+ <Space split={<Divider type="vertical" />}>
42
+ <Link>Edit</Link>
43
+ <Link>Duplicate</Link>
44
+ <Link>Delete</Link>
45
+ </Space>
46
+ ```
47
+
48
+ | Prop | Type | Default | Description |
49
+ | --- | --- | --- | --- |
50
+ | `direction` | `"horizontal" \| "vertical"` | `"horizontal"` | Layout direction |
51
+ | `size` | `"small" \| "middle" \| "large" \| number` | `"small"` | Gap |
52
+ | `align` | `"start" \| "end" \| "center" \| "baseline"` | depends | align-items |
53
+ | `wrap` | `boolean` | `false` | Allow wrapping |
54
+ | `split` | `ReactNode` | — | Element rendered between children (e.g., divider, dot) |
55
+
56
+ ## Common patterns
57
+
58
+ ### Inline action group
59
+
60
+ ```tsx
61
+ <Space>
62
+ <Button>Save</Button>
63
+ <Button variant="ghost">Cancel</Button>
64
+ </Space>
65
+ ```
66
+
67
+ ### Tag list (wrapping)
68
+
69
+ ```tsx
70
+ <Space wrap size="small">
71
+ {tags.map(t => <Tag key={t}>{t}</Tag>)}
72
+ </Space>
73
+ ```
74
+
75
+ ### Toolbar with dividers
76
+
77
+ ```tsx
78
+ <Space split={<span>·</span>} size="small">
79
+ <Link>Edit</Link>
80
+ <Link>Duplicate</Link>
81
+ <Link>Delete</Link>
82
+ </Space>
83
+ ```
84
+
85
+ ### Vertical stack (alternative to Stack)
86
+
87
+ ```tsx
88
+ <Space direction="vertical" size="large">
89
+ <Heading>...</Heading>
90
+ <Text>...</Text>
91
+ <Button>...</Button>
92
+ </Space>
93
+ ```
94
+
95
+ ## Tokens consumed
96
+
97
+ ```
98
+ --space-xs (small)
99
+ --space-sm (middle)
100
+ --space-md (large)
101
+ ```
102
+
103
+ ## Implementation note
104
+
105
+ Modern CSS makes Space largely unnecessary — `display: flex; gap: var(--space-sm)` handles it. But Space is convenient when:
106
+ - You don't want to author flex CSS for one-offs.
107
+ - You want the `split` element-between-children behavior (CSS doesn't have this natively without complex rules).
108
+ - Your team standardizes on Space as the inline-gap primitive.
109
+
110
+ ## Don't
111
+
112
+ - Don't use Space when CSS `gap` alone suffices.
113
+ - Don't nest Space deeply — that's a Flex / Grid / Stack situation.
114
+ - Don't use Space for full-width layouts. It's for inline element grouping.
115
+
116
+ ## References
117
+
118
+ - Ant: [`Space`](../refs/ant-design/components/space)
119
+ - CSS Flex / Grid `gap` property
120
+
121
+ ## Cross-reference
122
+
123
+ - [`examples/component-flex.md`](component-flex.md) — full flex layout
124
+ - [`examples/component-grid.md`](component-grid.md) — 2D layout
125
+ - [`knowledge/layout/spacing-and-grid.md`](../knowledge/layout/spacing-and-grid.md)
@@ -0,0 +1,373 @@
1
+ <!-- hand-written -->
2
+ # `SpatialLocomotion` (custom — VR locomotion controller with comfort options) — spec
3
+
4
+ > Locomotion controller for VR / spatial games / experiences. Provides teleport, smooth, snap-turn, room-scale modes; comfort vignette; preferences saved per user. Pairs with [`knowledge/spatial/vr-patterns.md`](../knowledge/spatial/vr-patterns.md) and [`knowledge/spatial/comfort-and-accessibility.md`](../knowledge/spatial/comfort-and-accessibility.md).
5
+
6
+ ## Purpose
7
+
8
+ Locomotion is the #1 cause of VR motion sickness. Every VR experience must:
9
+ 1. Offer multiple locomotion options.
10
+ 2. Default to comfortable (teleport + snap turn) for new users.
11
+ 3. Provide opt-in to less comfortable but more immersive modes.
12
+ 4. Apply comfort vignette dynamically.
13
+ 5. Persist user preference per profile.
14
+
15
+ `SpatialLocomotion` is the primitive controller every VR game / experience embeds.
16
+
17
+ ## Anatomy (in-game)
18
+
19
+ ### Teleport mode
20
+
21
+ ```
22
+ [user holds joystick forward]
23
+
24
+ [arc trajectory shown from controller]
25
+
26
+ [landing point indicator visible]
27
+
28
+ [user releases]
29
+
30
+ [brief fade or instant teleport to landing point]
31
+ ```
32
+
33
+ ### Smooth locomotion mode
34
+
35
+ ```
36
+ [user pushes joystick]
37
+
38
+ [player moves at walking speed in joystick direction]
39
+
40
+ [comfort vignette appears around peripheral vision]
41
+
42
+ [user releases joystick]
43
+
44
+ [player stops; vignette fades]
45
+ ```
46
+
47
+ ### Snap turn
48
+
49
+ ```
50
+ [user pushes joystick left/right]
51
+
52
+ [brief fade]
53
+
54
+ [player rotates 30° / 45° / 90°]
55
+
56
+ [fade ends]
57
+ ```
58
+
59
+ ## API (Unity-flavored)
60
+
61
+ ```csharp
62
+ public class SpatialLocomotion : MonoBehaviour
63
+ {
64
+ public LocomotionMode mode = LocomotionMode.Teleport;
65
+ public TurnMode turnMode = TurnMode.Snap;
66
+ public float snapTurnAngle = 30f;
67
+ public float smoothMoveSpeed = 1.5f; // m/s
68
+ public float smoothTurnSpeed = 90f; // deg/s
69
+ public ComfortVignette vignette;
70
+ public bool teleportArcVisible = true;
71
+ public float teleportFadeMs = 100f;
72
+ }
73
+
74
+ public enum LocomotionMode { Teleport, Smooth, Hybrid, RoomScaleOnly }
75
+ public enum TurnMode { Snap, Smooth, None /* room-scale only */ }
76
+ ```
77
+
78
+ For React XR / WebXR / Vision Pro: similar API patterns; specifics differ.
79
+
80
+ ## Configuration UI
81
+
82
+ Settings menu the user accesses to change comfort:
83
+
84
+ ```
85
+ Locomotion
86
+ ─────────
87
+ Move
88
+ ◉ Teleport
89
+ ○ Smooth
90
+ ○ Hybrid
91
+
92
+ Turn
93
+ ◉ Snap (30°)
94
+ ○ Snap (45°)
95
+ ○ Snap (90°)
96
+ ○ Smooth (slow)
97
+ ○ Smooth (medium)
98
+ ○ Smooth (fast)
99
+ ○ None (room-scale only)
100
+
101
+ Comfort
102
+ Comfort vignette ●○○ Strong → ○○● Off
103
+ Smooth move speed Slow → Fast
104
+ Teleport fade Off → Long
105
+ ```
106
+
107
+ Save preferences. Apply immediately.
108
+
109
+ ## Comfort vignette
110
+
111
+ Implementation:
112
+
113
+ ```glsl
114
+ // Pseudocode shader
115
+ void main() {
116
+ vec3 color = sceneColor;
117
+ float distFromCenter = length(uv - vec2(0.5));
118
+ float vignetteAlpha = smoothstep(comfortRadius, comfortRadius - 0.1, distFromCenter);
119
+ color = mix(black, color, vignetteAlpha);
120
+ fragColor = vec4(color, 1.0);
121
+ }
122
+ ```
123
+
124
+ The `comfortRadius` parameter:
125
+ - During motion: smaller (more vignette).
126
+ - Stationary: full FOV (no vignette).
127
+ - Acceleration: vignette tightens slightly.
128
+
129
+ User-configurable strength. For some users: off. For sensitive users: maximum.
130
+
131
+ ## Teleport details
132
+
133
+ ### Arc trajectory
134
+
135
+ Show a parabolic arc from controller to landing point:
136
+
137
+ ```
138
+ [controller ✕]
139
+
140
+ ╲___
141
+ ╲___
142
+ ● ← landing indicator
143
+ ```
144
+
145
+ Arc tunes:
146
+ - **Strength**: based on input deflection or fixed.
147
+ - **Color**: brand-aligned; visible against world.
148
+ - **Invalid endpoints** (cliffs, blocked): different color (red).
149
+
150
+ ### Landing indicator
151
+
152
+ ```
153
+ ┌─────────┐
154
+ │ player │
155
+ │ outline │
156
+ └─────────┘
157
+ ```
158
+
159
+ Show:
160
+ - Direction the player will face after teleport (arrow).
161
+ - Footprint or circle on the ground.
162
+ - Distance estimate.
163
+
164
+ ### Teleport restrictions
165
+
166
+ Don't allow teleport to:
167
+ - **Inaccessible areas** (gameplay-locked).
168
+ - **Inside objects**.
169
+ - **Off cliffs** (without intent).
170
+ - **Mid-air** (typically).
171
+
172
+ Some games allow climbing / mid-air teleport for traversal.
173
+
174
+ ### Fade
175
+
176
+ Brief black fade during teleport (50-150ms) reduces nausea. Or instant ("blink") for power users.
177
+
178
+ ## Smooth locomotion details
179
+
180
+ ### Direction relative to head vs controller
181
+
182
+ | Mode | Direction |
183
+ | --- | --- |
184
+ | **Head-relative** (default) | Push joystick forward → move where you're looking |
185
+ | **Controller-relative** | Push joystick forward → move in controller's pointing direction |
186
+ | **Body-relative** (chest) | Some headsets support this |
187
+
188
+ Most users prefer head-relative for natural feel.
189
+
190
+ ### Speed curve
191
+
192
+ Constant velocity is most comfortable. Acceleration causes more sickness. So:
193
+ - **Joystick on**: full speed (no ramp).
194
+ - **Joystick off**: stop quickly.
195
+
196
+ Some games allow ramp-up for "running" feel; usually less comfortable.
197
+
198
+ ## Snap turn
199
+
200
+ ### Default angles
201
+
202
+ - 30° — fine-grained; many small turns.
203
+ - 45° — common default; balance.
204
+ - 60° — bigger but rare.
205
+ - 90° — quick 4-way orientation.
206
+
207
+ User picks.
208
+
209
+ ### Fade transition
210
+
211
+ Brief black flash (50-100ms) during snap turn reduces sickness. Some users prefer no fade.
212
+
213
+ ## Smooth turn
214
+
215
+ ```
216
+ [joystick left] → [view rotates left at smoothTurnSpeed]
217
+ [joystick released] → [stop]
218
+ ```
219
+
220
+ Comfort vignette stronger during smooth turn (most nauseating motion).
221
+
222
+ For new users: default to **snap turn**. Allow opt-in to smooth turn.
223
+
224
+ ## Hybrid locomotion
225
+
226
+ Some experiences use hybrid:
227
+ - Joystick for short movements (smooth).
228
+ - Press button for long teleports.
229
+
230
+ Or contextual:
231
+ - Walking around a room: room-scale.
232
+ - Crossing a large space: teleport.
233
+ - Combat: smooth strafe.
234
+
235
+ Document which gesture does what; teach in tutorial.
236
+
237
+ ## Room-scale walking
238
+
239
+ - User physically walks in their playspace.
240
+ - Most comfortable; no software-induced motion.
241
+ - Limited by room size.
242
+
243
+ For room-scale-primary games:
244
+ - **Guardian boundary** must be set up.
245
+ - **Re-center** option for tight spaces.
246
+ - **Standing OR seated** modes.
247
+
248
+ Vehicles / cockpits move the world relative to player; user's room-scale movement still works inside the cockpit.
249
+
250
+ ## Implementation hints
251
+
252
+ ```csharp
253
+ void Update()
254
+ {
255
+ Vector2 leftStick = Input.GetLeftStick();
256
+ Vector2 rightStick = Input.GetRightStick();
257
+
258
+ // Movement
259
+ if (mode == LocomotionMode.Teleport)
260
+ {
261
+ if (leftStick.magnitude > 0.5f) ShowTeleportArc(leftStick);
262
+ if (Input.LeftStickReleased && validTeleportTarget) PerformTeleport();
263
+ }
264
+ else if (mode == LocomotionMode.Smooth)
265
+ {
266
+ Vector3 moveDir = camera.forward * leftStick.y + camera.right * leftStick.x;
267
+ moveDir.y = 0;
268
+ transform.position += moveDir * smoothMoveSpeed * Time.deltaTime;
269
+
270
+ if (leftStick.magnitude > 0.1f) vignette.SetActive(true);
271
+ else vignette.SetActive(false);
272
+ }
273
+
274
+ // Turn
275
+ if (turnMode == TurnMode.Snap)
276
+ {
277
+ if (rightStick.x > 0.7f && !snapping) StartSnapTurn(snapTurnAngle);
278
+ if (rightStick.x < -0.7f && !snapping) StartSnapTurn(-snapTurnAngle);
279
+ }
280
+ else if (turnMode == TurnMode.Smooth)
281
+ {
282
+ transform.Rotate(0, rightStick.x * smoothTurnSpeed * Time.deltaTime, 0);
283
+ if (Mathf.Abs(rightStick.x) > 0.1f) vignette.IncreaseStrength();
284
+ }
285
+ }
286
+
287
+ IEnumerator StartSnapTurn(float angle)
288
+ {
289
+ snapping = true;
290
+ yield return FadeOut(50);
291
+ transform.Rotate(0, angle, 0);
292
+ yield return FadeIn(50);
293
+ snapping = false;
294
+ }
295
+ ```
296
+
297
+ ## Tokens consumed
298
+
299
+ ```
300
+ --spatial-locomotion-arc-color (teleport arc default)
301
+ --spatial-locomotion-arc-invalid (red for invalid)
302
+ --spatial-locomotion-fade-color (typically black)
303
+ --spatial-locomotion-fade-duration (50-150ms)
304
+ --spatial-locomotion-vignette-color (typically black)
305
+ --spatial-locomotion-vignette-strength (0-1)
306
+ --spatial-locomotion-snap-default (45°)
307
+ --spatial-locomotion-smooth-speed (1.5 m/s)
308
+ ```
309
+
310
+ ## States
311
+
312
+ | State | Visual |
313
+ | --- | --- |
314
+ | Idle | No motion; full FOV |
315
+ | Showing teleport arc | Arc + landing indicator visible |
316
+ | Teleporting | Brief fade; instant relocation; fade in |
317
+ | Smooth moving | Player moves; vignette applied |
318
+ | Snap turning | Brief fade; instant rotation; fade in |
319
+ | Smooth turning | View rotates; stronger vignette |
320
+ | Disabled (cinematic / cutscene) | All input ignored |
321
+
322
+ ## Accessibility
323
+
324
+ - **Comfort defaults** for new users (teleport + snap turn + vignette on).
325
+ - **One-handed mode** — locomotion possible with single controller.
326
+ - **Auto-walk** option (forward without holding) for users with reduced grip strength.
327
+ - **Voice locomotion** — "teleport to [target]" for users who can't use joystick.
328
+ - **Reduce motion** — skip vignette animation; use static darken.
329
+ - **Adjust speeds** — slow option for sensitive users.
330
+
331
+ ## Korean / cultural
332
+
333
+ Less specific to KR than other components. Default vignette + snap-turn defaults same globally.
334
+
335
+ For Korean Samsung Galaxy XR (upcoming): likely similar conventions. KR localization of settings menu in Korean.
336
+
337
+ ## Common locomotion mistakes
338
+
339
+ - **Defaulting to smooth + smooth** for new users.
340
+ - **No vignette option** (some users need maximum, some none).
341
+ - **Ignoring guardian** during smooth locomotion.
342
+ - **Forgetting fade** in snap turn.
343
+ - **No "sit / stand" mode** option.
344
+ - **Teleport without arc trajectory** — disorienting.
345
+ - **Forced cinematic camera moves** — sickness.
346
+
347
+ ## Don't
348
+
349
+ - Don't default to smooth + smooth turn for new users.
350
+ - Don't omit comfort vignette as an option.
351
+ - Don't lock out room-scale movement when user wants it.
352
+ - Don't ignore guardian boundaries.
353
+ - Don't make snap turn instant without fade — disorienting.
354
+ - Don't allow teleport into walls / objects.
355
+ - Don't change locomotion mode without saving preference.
356
+ - Don't ignore frame rate during smooth motion — drops cause severe sickness.
357
+
358
+ ## References
359
+
360
+ Patterns drawn from:
361
+ - Half-Life: Alyx (gold standard for comfort options)
362
+ - Beat Saber (room-scale, no locomotion needed)
363
+ - Asgard's Wrath 2 (full comfort suite)
364
+ - Resident Evil 4 VR (hybrid)
365
+ - Half-Life: Alyx's "blink" teleport with arc + landing indicator
366
+ - Boneworks / BONELAB physics-based smooth (less comfort-friendly intentionally)
367
+
368
+ ## Cross-reference
369
+
370
+ - [`knowledge/spatial/vr-patterns.md`](../knowledge/spatial/vr-patterns.md) — VR
371
+ - [`knowledge/spatial/spatial-design-fundamentals.md`](../knowledge/spatial/spatial-design-fundamentals.md) — fundamentals
372
+ - [`knowledge/spatial/comfort-and-accessibility.md`](../knowledge/spatial/comfort-and-accessibility.md) — comfort + a11y
373
+ - [`examples/component-spatial-panel.md`](component-spatial-panel.md) — UI panels