@jack200714/mafw 4.5.1 → 4.8.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 (330) hide show
  1. package/README.md +5 -2
  2. package/bin/mafw.js +16 -14
  3. package/gateway/dist/index.js +52 -38
  4. package/gateway/dist/media/media-plugin-loader.js +0 -12
  5. package/gateway/dist/plugins/hub.js +153 -19
  6. package/gateway/dist/routes/plugins.js +15 -5
  7. package/gateway/dist/runtime/event-broadcast.js +33 -0
  8. package/gateway/dist/runtime/loader.js +23 -13
  9. package/gateway/dist/usage/builtin-plugins/gateway.js +25 -3
  10. package/gateway/dist/usage/plugin-loader.js +0 -11
  11. package/gateway/package.json +2 -2
  12. package/package.json +1 -7
  13. package/packages/tui/dist/cli.js +8 -3
  14. package/.opencode/mafw/.backup-v61/parametric/base-skill-manifest.yaml +0 -2
  15. package/.opencode/mafw/STATUS.md +0 -6
  16. package/.opencode/mafw/ledger.md +0 -20
  17. package/.opencode/mafw/memory/.harmonic_index.json +0 -28
  18. package/.opencode/mafw/memory/.review_queue.json +0 -1
  19. package/.opencode/mafw/memory/tier3/parametric.json +0 -13
  20. package/.opencode/mafw/memory/tier3/test-goal.json +0 -19
  21. package/.opencode/mafw/memory-index.json +0 -6
  22. package/.opencode/mafw/parametric/base-skill-manifest.yaml +0 -2
  23. package/.opencode/mafw/waves.json +0 -4
  24. package/.opencode/opencode.json +0 -3
  25. package/.opencode/plugins/mafw-plugin.ts +0 -8
  26. package/.opencode/skills/banner-design/SKILL.md +0 -196
  27. package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +0 -118
  28. package/.opencode/skills/brand/SKILL.md +0 -97
  29. package/.opencode/skills/brand/references/approval-checklist.md +0 -169
  30. package/.opencode/skills/brand/references/asset-organization.md +0 -157
  31. package/.opencode/skills/brand/references/brand-guideline-template.md +0 -140
  32. package/.opencode/skills/brand/references/color-palette-management.md +0 -186
  33. package/.opencode/skills/brand/references/consistency-checklist.md +0 -94
  34. package/.opencode/skills/brand/references/logo-usage-rules.md +0 -185
  35. package/.opencode/skills/brand/references/messaging-framework.md +0 -85
  36. package/.opencode/skills/brand/references/typography-specifications.md +0 -214
  37. package/.opencode/skills/brand/references/update.md +0 -118
  38. package/.opencode/skills/brand/references/visual-identity.md +0 -96
  39. package/.opencode/skills/brand/references/voice-framework.md +0 -88
  40. package/.opencode/skills/brand/scripts/extract-colors.cjs +0 -341
  41. package/.opencode/skills/brand/scripts/inject-brand-context.cjs +0 -349
  42. package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +0 -248
  43. package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +0 -52
  44. package/.opencode/skills/brand/scripts/validate-asset.cjs +0 -387
  45. package/.opencode/skills/brand/templates/brand-guidelines-starter.md +0 -275
  46. package/.opencode/skills/design/SKILL.md +0 -313
  47. package/.opencode/skills/design/data/cip/deliverables.csv +0 -51
  48. package/.opencode/skills/design/data/cip/industries.csv +0 -21
  49. package/.opencode/skills/design/data/cip/mockup-contexts.csv +0 -21
  50. package/.opencode/skills/design/data/cip/styles.csv +0 -21
  51. package/.opencode/skills/design/data/icon/styles.csv +0 -16
  52. package/.opencode/skills/design/data/logo/colors.csv +0 -56
  53. package/.opencode/skills/design/data/logo/industries.csv +0 -56
  54. package/.opencode/skills/design/data/logo/styles.csv +0 -56
  55. package/.opencode/skills/design/references/banner-sizes-and-styles.md +0 -118
  56. package/.opencode/skills/design/references/cip-deliverable-guide.md +0 -95
  57. package/.opencode/skills/design/references/cip-design.md +0 -121
  58. package/.opencode/skills/design/references/cip-prompt-engineering.md +0 -84
  59. package/.opencode/skills/design/references/cip-style-guide.md +0 -68
  60. package/.opencode/skills/design/references/design-routing.md +0 -207
  61. package/.opencode/skills/design/references/icon-design.md +0 -122
  62. package/.opencode/skills/design/references/logo-color-psychology.md +0 -101
  63. package/.opencode/skills/design/references/logo-design.md +0 -92
  64. package/.opencode/skills/design/references/logo-prompt-engineering.md +0 -158
  65. package/.opencode/skills/design/references/logo-style-guide.md +0 -109
  66. package/.opencode/skills/design/references/slides-copywriting-formulas.md +0 -84
  67. package/.opencode/skills/design/references/slides-create.md +0 -4
  68. package/.opencode/skills/design/references/slides-html-template.md +0 -295
  69. package/.opencode/skills/design/references/slides-layout-patterns.md +0 -137
  70. package/.opencode/skills/design/references/slides-strategies.md +0 -94
  71. package/.opencode/skills/design/references/slides.md +0 -42
  72. package/.opencode/skills/design/references/social-photos-design.md +0 -329
  73. package/.opencode/skills/design/scripts/cip/core.py +0 -215
  74. package/.opencode/skills/design/scripts/cip/generate.py +0 -484
  75. package/.opencode/skills/design/scripts/cip/render-html.py +0 -424
  76. package/.opencode/skills/design/scripts/cip/search.py +0 -127
  77. package/.opencode/skills/design/scripts/icon/generate.py +0 -487
  78. package/.opencode/skills/design/scripts/logo/core.py +0 -175
  79. package/.opencode/skills/design/scripts/logo/generate.py +0 -362
  80. package/.opencode/skills/design/scripts/logo/search.py +0 -114
  81. package/.opencode/skills/design-system/SKILL.md +0 -244
  82. package/.opencode/skills/design-system/data/slide-backgrounds.csv +0 -11
  83. package/.opencode/skills/design-system/data/slide-charts.csv +0 -26
  84. package/.opencode/skills/design-system/data/slide-color-logic.csv +0 -14
  85. package/.opencode/skills/design-system/data/slide-copy.csv +0 -26
  86. package/.opencode/skills/design-system/data/slide-layout-logic.csv +0 -16
  87. package/.opencode/skills/design-system/data/slide-layouts.csv +0 -26
  88. package/.opencode/skills/design-system/data/slide-strategies.csv +0 -16
  89. package/.opencode/skills/design-system/data/slide-typography.csv +0 -15
  90. package/.opencode/skills/design-system/references/component-specs.md +0 -236
  91. package/.opencode/skills/design-system/references/component-tokens.md +0 -214
  92. package/.opencode/skills/design-system/references/primitive-tokens.md +0 -203
  93. package/.opencode/skills/design-system/references/semantic-tokens.md +0 -215
  94. package/.opencode/skills/design-system/references/states-and-variants.md +0 -241
  95. package/.opencode/skills/design-system/references/tailwind-integration.md +0 -251
  96. package/.opencode/skills/design-system/references/token-architecture.md +0 -224
  97. package/.opencode/skills/design-system/scripts/embed-tokens.cjs +0 -99
  98. package/.opencode/skills/design-system/scripts/fetch-background.py +0 -317
  99. package/.opencode/skills/design-system/scripts/generate-slide.py +0 -770
  100. package/.opencode/skills/design-system/scripts/generate-tokens.cjs +0 -205
  101. package/.opencode/skills/design-system/scripts/html-token-validator.py +0 -327
  102. package/.opencode/skills/design-system/scripts/search-slides.py +0 -218
  103. package/.opencode/skills/design-system/scripts/slide-token-validator.py +0 -35
  104. package/.opencode/skills/design-system/scripts/slide_search_core.py +0 -453
  105. package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +0 -48
  106. package/.opencode/skills/design-system/scripts/validate-tokens.cjs +0 -246
  107. package/.opencode/skills/design-system/templates/design-tokens-starter.json +0 -143
  108. package/.opencode/skills/frontend-design/LICENSE.txt +0 -21
  109. package/.opencode/skills/frontend-design/SKILL.md +0 -115
  110. package/.opencode/skills/mafw-automation-interview/SKILL.md +0 -43
  111. package/.opencode/skills/mafw-cli-scanner/SKILL.md +0 -37
  112. package/.opencode/skills/mafw-compression-verifier/SKILL.md +0 -52
  113. package/.opencode/skills/mafw-desktop-inspector/SKILL.md +0 -170
  114. package/.opencode/skills/mafw-execute/SKILL.md +0 -62
  115. package/.opencode/skills/mafw-gateway-restart/SKILL.md +0 -87
  116. package/.opencode/skills/mafw-github-scanner/SKILL.md +0 -38
  117. package/.opencode/skills/mafw-goal/SKILL.md +0 -76
  118. package/.opencode/skills/mafw-interview/SKILL.md +0 -68
  119. package/.opencode/skills/mafw-memory-extractor/SKILL.md +0 -65
  120. package/.opencode/skills/mafw-plan/SKILL.md +0 -58
  121. package/.opencode/skills/mafw-review/SKILL.md +0 -85
  122. package/.opencode/skills/runtime-plugin-authoring/SKILL.md +0 -791
  123. package/.opencode/skills/slides/SKILL.md +0 -40
  124. package/.opencode/skills/slides/references/copywriting-formulas.md +0 -84
  125. package/.opencode/skills/slides/references/create.md +0 -4
  126. package/.opencode/skills/slides/references/html-template.md +0 -295
  127. package/.opencode/skills/slides/references/layout-patterns.md +0 -137
  128. package/.opencode/skills/slides/references/slide-strategies.md +0 -94
  129. package/.opencode/skills/ui-styling/LICENSE.txt +0 -202
  130. package/.opencode/skills/ui-styling/SKILL.md +0 -324
  131. package/.opencode/skills/ui-styling/references/canvas-design-system.md +0 -320
  132. package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +0 -471
  133. package/.opencode/skills/ui-styling/references/shadcn-components.md +0 -424
  134. package/.opencode/skills/ui-styling/references/shadcn-theming.md +0 -373
  135. package/.opencode/skills/ui-styling/references/tailwind-customization.md +0 -483
  136. package/.opencode/skills/ui-styling/references/tailwind-responsive.md +0 -382
  137. package/.opencode/skills/ui-styling/references/tailwind-utilities.md +0 -455
  138. package/.opencode/skills/ui-styling/scripts/requirements.txt +0 -17
  139. package/.opencode/skills/ui-styling/scripts/shadcn_add.py +0 -308
  140. package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +0 -473
  141. package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +0 -1
  142. package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +0 -3
  143. package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +0 -266
  144. package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +0 -394
  145. package/.opencode/skills/ui-ux-pro-max/SKILL.md +0 -388
  146. package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +0 -31
  147. package/.opencode/skills/ui-ux-pro-max/data/charts.csv +0 -26
  148. package/.opencode/skills/ui-ux-pro-max/data/colors.csv +0 -193
  149. package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +0 -1924
  150. package/.opencode/skills/ui-ux-pro-max/data/icons.csv +0 -106
  151. package/.opencode/skills/ui-ux-pro-max/data/landing.csv +0 -35
  152. package/.opencode/skills/ui-ux-pro-max/data/motion.csv +0 -17
  153. package/.opencode/skills/ui-ux-pro-max/data/products.csv +0 -193
  154. package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +0 -45
  155. package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +0 -51
  156. package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +0 -54
  157. package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +0 -57
  158. package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  159. package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  160. package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +0 -76
  161. package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  162. package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +0 -51
  163. package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  164. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -71
  165. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  166. package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  167. package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
  168. package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  169. package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  170. package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  171. package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +0 -54
  172. package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +0 -60
  173. package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +0 -56
  174. package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  175. package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +0 -60
  176. package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +0 -57
  177. package/.opencode/skills/ui-ux-pro-max/data/styles.csv +0 -85
  178. package/.opencode/skills/ui-ux-pro-max/data/typography.csv +0 -75
  179. package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +0 -162
  180. package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  181. package/.opencode/skills/ui-ux-pro-max/scripts/core.py +0 -464
  182. package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +0 -1479
  183. package/.opencode/skills/ui-ux-pro-max/scripts/search.py +0 -162
  184. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_core.py +0 -134
  185. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_design_system_mode.py +0 -159
  186. package/.opencode/skills/ui-ux-pro-max/scripts/validate_data.py +0 -114
  187. package/dist/hooks/bash-python-guide.d.ts +0 -4
  188. package/dist/hooks/bash-python-guide.d.ts.map +0 -1
  189. package/dist/hooks/bash-python-guide.js +0 -67
  190. package/dist/hooks/bash-python-guide.js.map +0 -1
  191. package/dist/hooks/handoff.d.ts +0 -9
  192. package/dist/hooks/handoff.d.ts.map +0 -1
  193. package/dist/hooks/handoff.js +0 -8
  194. package/dist/hooks/handoff.js.map +0 -1
  195. package/dist/hooks/hook-manager.d.ts +0 -32
  196. package/dist/hooks/hook-manager.d.ts.map +0 -1
  197. package/dist/hooks/hook-manager.js +0 -91
  198. package/dist/hooks/hook-manager.js.map +0 -1
  199. package/dist/hooks/llm-after.d.ts +0 -8
  200. package/dist/hooks/llm-after.d.ts.map +0 -1
  201. package/dist/hooks/llm-after.js +0 -8
  202. package/dist/hooks/llm-after.js.map +0 -1
  203. package/dist/hooks/media-ingest.d.ts +0 -43
  204. package/dist/hooks/media-ingest.d.ts.map +0 -1
  205. package/dist/hooks/media-ingest.js +0 -269
  206. package/dist/hooks/media-ingest.js.map +0 -1
  207. package/dist/hooks/memory-guide.d.ts +0 -3
  208. package/dist/hooks/memory-guide.d.ts.map +0 -1
  209. package/dist/hooks/memory-guide.js +0 -47
  210. package/dist/hooks/memory-guide.js.map +0 -1
  211. package/dist/hooks/observation-capture.d.ts +0 -17
  212. package/dist/hooks/observation-capture.d.ts.map +0 -1
  213. package/dist/hooks/observation-capture.js +0 -20
  214. package/dist/hooks/observation-capture.js.map +0 -1
  215. package/dist/hooks/session-compacting.d.ts +0 -6
  216. package/dist/hooks/session-compacting.d.ts.map +0 -1
  217. package/dist/hooks/session-compacting.js +0 -6
  218. package/dist/hooks/session-compacting.js.map +0 -1
  219. package/dist/hooks/session-ending.d.ts +0 -20
  220. package/dist/hooks/session-ending.d.ts.map +0 -1
  221. package/dist/hooks/session-ending.js +0 -113
  222. package/dist/hooks/session-ending.js.map +0 -1
  223. package/dist/hooks/session-recall.d.ts +0 -2
  224. package/dist/hooks/session-recall.d.ts.map +0 -1
  225. package/dist/hooks/session-recall.js +0 -103
  226. package/dist/hooks/session-recall.js.map +0 -1
  227. package/dist/hooks/session-start.d.ts +0 -9
  228. package/dist/hooks/session-start.d.ts.map +0 -1
  229. package/dist/hooks/session-start.js +0 -42
  230. package/dist/hooks/session-start.js.map +0 -1
  231. package/dist/hooks/tool-before.d.ts +0 -10
  232. package/dist/hooks/tool-before.d.ts.map +0 -1
  233. package/dist/hooks/tool-before.js +0 -6
  234. package/dist/hooks/tool-before.js.map +0 -1
  235. package/dist/hooks/tool-executed.d.ts +0 -19
  236. package/dist/hooks/tool-executed.d.ts.map +0 -1
  237. package/dist/hooks/tool-executed.js +0 -12
  238. package/dist/hooks/tool-executed.js.map +0 -1
  239. package/dist/hooks/user-profile.d.ts +0 -2
  240. package/dist/hooks/user-profile.d.ts.map +0 -1
  241. package/dist/hooks/user-profile.js +0 -30
  242. package/dist/hooks/user-profile.js.map +0 -1
  243. package/dist/hooks/user-prompt.d.ts +0 -9
  244. package/dist/hooks/user-prompt.d.ts.map +0 -1
  245. package/dist/hooks/user-prompt.js +0 -8
  246. package/dist/hooks/user-prompt.js.map +0 -1
  247. package/dist/hooks/voice-guide.d.ts +0 -8
  248. package/dist/hooks/voice-guide.d.ts.map +0 -1
  249. package/dist/hooks/voice-guide.js +0 -101
  250. package/dist/hooks/voice-guide.js.map +0 -1
  251. package/dist/plugin.d.ts +0 -55
  252. package/dist/plugin.d.ts.map +0 -1
  253. package/dist/plugin.js +0 -342
  254. package/dist/plugin.js.map +0 -1
  255. package/dist/tools/add-memory.d.ts +0 -17
  256. package/dist/tools/add-memory.d.ts.map +0 -1
  257. package/dist/tools/add-memory.js +0 -60
  258. package/dist/tools/add-memory.js.map +0 -1
  259. package/dist/tools/media-ask.d.ts +0 -14
  260. package/dist/tools/media-ask.d.ts.map +0 -1
  261. package/dist/tools/media-ask.js +0 -224
  262. package/dist/tools/media-ask.js.map +0 -1
  263. package/dist/tools/media-speak.d.ts +0 -16
  264. package/dist/tools/media-speak.d.ts.map +0 -1
  265. package/dist/tools/media-speak.js +0 -78
  266. package/dist/tools/media-speak.js.map +0 -1
  267. package/dist/tools/media-upload.d.ts +0 -14
  268. package/dist/tools/media-upload.d.ts.map +0 -1
  269. package/dist/tools/media-upload.js +0 -155
  270. package/dist/tools/media-upload.js.map +0 -1
  271. package/dist/tools/python-exec.d.ts +0 -13
  272. package/dist/tools/python-exec.d.ts.map +0 -1
  273. package/dist/tools/python-exec.js +0 -99
  274. package/dist/tools/python-exec.js.map +0 -1
  275. package/dist/tools/python-restart.d.ts +0 -11
  276. package/dist/tools/python-restart.d.ts.map +0 -1
  277. package/dist/tools/python-restart.js +0 -33
  278. package/dist/tools/python-restart.js.map +0 -1
  279. package/dist/utils/circuit-breaker.d.ts +0 -23
  280. package/dist/utils/circuit-breaker.d.ts.map +0 -1
  281. package/dist/utils/circuit-breaker.js +0 -75
  282. package/dist/utils/circuit-breaker.js.map +0 -1
  283. package/dist/utils/config-loader.d.ts +0 -20
  284. package/dist/utils/config-loader.d.ts.map +0 -1
  285. package/dist/utils/config-loader.js +0 -194
  286. package/dist/utils/config-loader.js.map +0 -1
  287. package/dist/utils/fallback.d.ts +0 -7
  288. package/dist/utils/fallback.d.ts.map +0 -1
  289. package/dist/utils/fallback.js +0 -20
  290. package/dist/utils/fallback.js.map +0 -1
  291. package/dist/utils/git.d.ts +0 -24
  292. package/dist/utils/git.d.ts.map +0 -1
  293. package/dist/utils/git.js +0 -71
  294. package/dist/utils/git.js.map +0 -1
  295. package/dist/utils/github.d.ts +0 -37
  296. package/dist/utils/github.d.ts.map +0 -1
  297. package/dist/utils/github.js +0 -53
  298. package/dist/utils/github.js.map +0 -1
  299. package/dist/utils/global-path.d.ts +0 -2
  300. package/dist/utils/global-path.d.ts.map +0 -1
  301. package/dist/utils/global-path.js +0 -32
  302. package/dist/utils/global-path.js.map +0 -1
  303. package/dist/utils/logger.d.ts +0 -6
  304. package/dist/utils/logger.d.ts.map +0 -1
  305. package/dist/utils/logger.js +0 -69
  306. package/dist/utils/logger.js.map +0 -1
  307. package/dist/utils/obs-capture.d.ts +0 -7
  308. package/dist/utils/obs-capture.d.ts.map +0 -1
  309. package/dist/utils/obs-capture.js +0 -49
  310. package/dist/utils/obs-capture.js.map +0 -1
  311. package/dist/utils/retry.d.ts +0 -11
  312. package/dist/utils/retry.d.ts.map +0 -1
  313. package/dist/utils/retry.js +0 -45
  314. package/dist/utils/retry.js.map +0 -1
  315. package/dist/utils/self-wiring.d.ts +0 -13
  316. package/dist/utils/self-wiring.d.ts.map +0 -1
  317. package/dist/utils/self-wiring.js +0 -86
  318. package/dist/utils/self-wiring.js.map +0 -1
  319. package/dist/utils/state.d.ts +0 -106
  320. package/dist/utils/state.d.ts.map +0 -1
  321. package/dist/utils/state.js +0 -166
  322. package/dist/utils/state.js.map +0 -1
  323. package/dist/utils/status.d.ts +0 -47
  324. package/dist/utils/status.d.ts.map +0 -1
  325. package/dist/utils/status.js +0 -147
  326. package/dist/utils/status.js.map +0 -1
  327. package/dist/utils/ttl-map.d.ts +0 -17
  328. package/dist/utils/ttl-map.d.ts.map +0 -1
  329. package/dist/utils/ttl-map.js +0 -67
  330. package/dist/utils/ttl-map.js.map +0 -1
@@ -1,424 +0,0 @@
1
- # shadcn/ui Component Reference
2
-
3
- Complete catalog of shadcn/ui components with usage patterns and installation.
4
-
5
- ## Installation
6
-
7
- **Add specific components:**
8
- ```bash
9
- npx shadcn@latest add button
10
- npx shadcn@latest add button card dialog # Multiple
11
- npx shadcn@latest add --all # All components
12
- ```
13
-
14
- Components install to `components/ui/` with automatic dependency management.
15
-
16
- ## Form & Input Components
17
-
18
- ### Button
19
- ```tsx
20
- import { Button } from "@/components/ui/button"
21
-
22
- <Button variant="default">Default</Button>
23
- <Button variant="destructive">Delete</Button>
24
- <Button variant="outline" size="sm">Small Outline</Button>
25
- <Button variant="ghost" size="icon"><Icon /></Button>
26
- <Button variant="link">Link Style</Button>
27
- ```
28
-
29
- Variants: `default | destructive | outline | secondary | ghost | link`
30
- Sizes: `default | sm | lg | icon`
31
-
32
- ### Input
33
- ```tsx
34
- import { Input } from "@/components/ui/input"
35
- import { Label } from "@/components/ui/label"
36
-
37
- <div className="space-y-2">
38
- <Label htmlFor="email">Email</Label>
39
- <Input id="email" type="email" placeholder="you@example.com" />
40
- </div>
41
- ```
42
-
43
- ### Form (with React Hook Form + Zod)
44
- ```tsx
45
- import { useForm } from "react-hook-form"
46
- import { zodResolver } from "@hookform/resolvers/zod"
47
- import * as z from "zod"
48
- import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"
49
- import { Input } from "@/components/ui/input"
50
- import { Button } from "@/components/ui/button"
51
-
52
- const schema = z.object({
53
- username: z.string().min(2).max(50),
54
- email: z.string().email()
55
- })
56
-
57
- function ProfileForm() {
58
- const form = useForm({
59
- resolver: zodResolver(schema),
60
- defaultValues: { username: "", email: "" }
61
- })
62
-
63
- return (
64
- <Form {...form}>
65
- <form onSubmit={form.handleSubmit(console.log)} className="space-y-8">
66
- <FormField control={form.control} name="username" render={({ field }) => (
67
- <FormItem>
68
- <FormLabel>Username</FormLabel>
69
- <FormControl>
70
- <Input placeholder="shadcn" {...field} />
71
- </FormControl>
72
- <FormMessage />
73
- </FormItem>
74
- )} />
75
- <Button type="submit">Submit</Button>
76
- </form>
77
- </Form>
78
- )
79
- }
80
- ```
81
-
82
- ### Select
83
- ```tsx
84
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
85
-
86
- <Select>
87
- <SelectTrigger className="w-[180px]">
88
- <SelectValue placeholder="Theme" />
89
- </SelectTrigger>
90
- <SelectContent>
91
- <SelectItem value="light">Light</SelectItem>
92
- <SelectItem value="dark">Dark</SelectItem>
93
- <SelectItem value="system">System</SelectItem>
94
- </SelectContent>
95
- </Select>
96
- ```
97
-
98
- ### Checkbox
99
- ```tsx
100
- import { Checkbox } from "@/components/ui/checkbox"
101
- import { Label } from "@/components/ui/label"
102
-
103
- <div className="flex items-center space-x-2">
104
- <Checkbox id="terms" />
105
- <Label htmlFor="terms">Accept terms</Label>
106
- </div>
107
- ```
108
-
109
- ### Radio Group
110
- ```tsx
111
- import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
112
- import { Label } from "@/components/ui/label"
113
-
114
- <RadioGroup defaultValue="option-one">
115
- <div className="flex items-center space-x-2">
116
- <RadioGroupItem value="option-one" id="option-one" />
117
- <Label htmlFor="option-one">Option One</Label>
118
- </div>
119
- <div className="flex items-center space-x-2">
120
- <RadioGroupItem value="option-two" id="option-two" />
121
- <Label htmlFor="option-two">Option Two</Label>
122
- </div>
123
- </RadioGroup>
124
- ```
125
-
126
- ### Textarea
127
- ```tsx
128
- import { Textarea } from "@/components/ui/textarea"
129
-
130
- <Textarea placeholder="Type your message here." />
131
- ```
132
-
133
- ### Switch
134
- ```tsx
135
- import { Switch } from "@/components/ui/switch"
136
- import { Label } from "@/components/ui/label"
137
-
138
- <div className="flex items-center space-x-2">
139
- <Switch id="airplane-mode" />
140
- <Label htmlFor="airplane-mode">Airplane Mode</Label>
141
- </div>
142
- ```
143
-
144
- ### Date Picker
145
- ```tsx
146
- import { Calendar } from "@/components/ui/calendar"
147
- import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"
148
- import { Button } from "@/components/ui/button"
149
- import { CalendarIcon } from "lucide-react"
150
- import { format } from "date-fns"
151
- import { useState } from "react"
152
-
153
- const [date, setDate] = useState<Date>()
154
-
155
- <Popover>
156
- <PopoverTrigger asChild>
157
- <Button variant="outline">
158
- <CalendarIcon className="mr-2 h-4 w-4" />
159
- {date ? format(date, "PPP") : "Pick a date"}
160
- </Button>
161
- </PopoverTrigger>
162
- <PopoverContent className="w-auto p-0">
163
- <Calendar mode="single" selected={date} onSelect={setDate} />
164
- </PopoverContent>
165
- </Popover>
166
- ```
167
-
168
- ## Layout & Navigation
169
-
170
- ### Card
171
- ```tsx
172
- import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"
173
-
174
- <Card>
175
- <CardHeader>
176
- <CardTitle>Card Title</CardTitle>
177
- <CardDescription>Card Description</CardDescription>
178
- </CardHeader>
179
- <CardContent>
180
- <p>Card Content</p>
181
- </CardContent>
182
- <CardFooter>
183
- <Button>Action</Button>
184
- </CardFooter>
185
- </Card>
186
- ```
187
-
188
- ### Tabs
189
- ```tsx
190
- import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
191
-
192
- <Tabs defaultValue="account">
193
- <TabsList>
194
- <TabsTrigger value="account">Account</TabsTrigger>
195
- <TabsTrigger value="password">Password</TabsTrigger>
196
- </TabsList>
197
- <TabsContent value="account">Account settings</TabsContent>
198
- <TabsContent value="password">Password settings</TabsContent>
199
- </Tabs>
200
- ```
201
-
202
- ### Accordion
203
- ```tsx
204
- import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
205
-
206
- <Accordion type="single" collapsible>
207
- <AccordionItem value="item-1">
208
- <AccordionTrigger>Is it accessible?</AccordionTrigger>
209
- <AccordionContent>
210
- Yes. It adheres to WAI-ARIA design pattern.
211
- </AccordionContent>
212
- </AccordionItem>
213
- <AccordionItem value="item-2">
214
- <AccordionTrigger>Is it styled?</AccordionTrigger>
215
- <AccordionContent>
216
- Yes. Comes with default styles customizable with Tailwind.
217
- </AccordionContent>
218
- </AccordionItem>
219
- </Accordion>
220
- ```
221
-
222
- ### Navigation Menu
223
- ```tsx
224
- import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger } from "@/components/ui/navigation-menu"
225
-
226
- <NavigationMenu>
227
- <NavigationMenuList>
228
- <NavigationMenuItem>
229
- <NavigationMenuTrigger>Getting Started</NavigationMenuTrigger>
230
- <NavigationMenuContent>
231
- <NavigationMenuLink>Introduction</NavigationMenuLink>
232
- <NavigationMenuLink>Installation</NavigationMenuLink>
233
- </NavigationMenuContent>
234
- </NavigationMenuItem>
235
- </NavigationMenuList>
236
- </NavigationMenu>
237
- ```
238
-
239
- ## Overlays & Dialogs
240
-
241
- ### Dialog
242
- ```tsx
243
- import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"
244
-
245
- <Dialog>
246
- <DialogTrigger asChild>
247
- <Button>Open</Button>
248
- </DialogTrigger>
249
- <DialogContent>
250
- <DialogHeader>
251
- <DialogTitle>Are you sure?</DialogTitle>
252
- <DialogDescription>This action cannot be undone.</DialogDescription>
253
- </DialogHeader>
254
- </DialogContent>
255
- </Dialog>
256
- ```
257
-
258
- ### Drawer
259
- ```tsx
260
- import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger } from "@/components/ui/drawer"
261
-
262
- <Drawer>
263
- <DrawerTrigger>Open</DrawerTrigger>
264
- <DrawerContent>
265
- <DrawerHeader>
266
- <DrawerTitle>Title</DrawerTitle>
267
- <DrawerDescription>Description</DrawerDescription>
268
- </DrawerHeader>
269
- <DrawerFooter>
270
- <Button>Submit</Button>
271
- <DrawerClose>Cancel</DrawerClose>
272
- </DrawerFooter>
273
- </DrawerContent>
274
- </Drawer>
275
- ```
276
-
277
- ### Popover
278
- ```tsx
279
- import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"
280
-
281
- <Popover>
282
- <PopoverTrigger>Open</PopoverTrigger>
283
- <PopoverContent>Content here</PopoverContent>
284
- </Popover>
285
- ```
286
-
287
- ### Toast
288
- ```tsx
289
- import { useToast } from "@/hooks/use-toast"
290
- import { Button } from "@/components/ui/button"
291
-
292
- const { toast } = useToast()
293
-
294
- <Button onClick={() => {
295
- toast({
296
- title: "Scheduled: Catch up",
297
- description: "Friday, February 10, 2023 at 5:57 PM"
298
- })
299
- }}>
300
- Show Toast
301
- </Button>
302
- ```
303
-
304
- ### Command
305
- ```tsx
306
- import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@/components/ui/command"
307
-
308
- <Command>
309
- <CommandInput placeholder="Type a command or search..." />
310
- <CommandList>
311
- <CommandEmpty>No results found.</CommandEmpty>
312
- <CommandGroup heading="Suggestions">
313
- <CommandItem>Calendar</CommandItem>
314
- <CommandItem>Search Emoji</CommandItem>
315
- <CommandItem>Calculator</CommandItem>
316
- </CommandGroup>
317
- </CommandList>
318
- </Command>
319
- ```
320
-
321
- ### Alert Dialog
322
- ```tsx
323
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "@/components/ui/alert-dialog"
324
-
325
- <AlertDialog>
326
- <AlertDialogTrigger asChild>
327
- <Button variant="destructive">Delete</Button>
328
- </AlertDialogTrigger>
329
- <AlertDialogContent>
330
- <AlertDialogHeader>
331
- <AlertDialogTitle>Absolutely sure?</AlertDialogTitle>
332
- <AlertDialogDescription>
333
- This permanently deletes your account and removes data from servers.
334
- </AlertDialogDescription>
335
- </AlertDialogHeader>
336
- <AlertDialogFooter>
337
- <AlertDialogCancel>Cancel</AlertDialogCancel>
338
- <AlertDialogAction>Continue</AlertDialogAction>
339
- </AlertDialogFooter>
340
- </AlertDialogContent>
341
- </AlertDialog>
342
- ```
343
-
344
- ## Feedback & Status
345
-
346
- ### Alert
347
- ```tsx
348
- import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
349
-
350
- <Alert>
351
- <AlertTitle>Heads up!</AlertTitle>
352
- <AlertDescription>You can add components using CLI.</AlertDescription>
353
- </Alert>
354
-
355
- <Alert variant="destructive">
356
- <AlertTitle>Error</AlertTitle>
357
- <AlertDescription>Session expired. Please log in.</AlertDescription>
358
- </Alert>
359
- ```
360
-
361
- ### Progress
362
- ```tsx
363
- import { Progress } from "@/components/ui/progress"
364
-
365
- <Progress value={33} />
366
- ```
367
-
368
- ### Skeleton
369
- ```tsx
370
- import { Skeleton } from "@/components/ui/skeleton"
371
-
372
- <div className="flex items-center space-x-4">
373
- <Skeleton className="h-12 w-12 rounded-full" />
374
- <div className="space-y-2">
375
- <Skeleton className="h-4 w-[250px]" />
376
- <Skeleton className="h-4 w-[200px]" />
377
- </div>
378
- </div>
379
- ```
380
-
381
- ## Display Components
382
-
383
- ### Table
384
- ```tsx
385
- import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
386
-
387
- <Table>
388
- <TableCaption>Recent invoices</TableCaption>
389
- <TableHeader>
390
- <TableRow>
391
- <TableHead>Invoice</TableHead>
392
- <TableHead>Status</TableHead>
393
- <TableHead>Amount</TableHead>
394
- </TableRow>
395
- </TableHeader>
396
- <TableBody>
397
- <TableRow>
398
- <TableCell>INV001</TableCell>
399
- <TableCell>Paid</TableCell>
400
- <TableCell>$250.00</TableCell>
401
- </TableRow>
402
- </TableBody>
403
- </Table>
404
- ```
405
-
406
- ### Avatar
407
- ```tsx
408
- import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
409
-
410
- <Avatar>
411
- <AvatarImage src="https://github.com/shadcn.png" />
412
- <AvatarFallback>CN</AvatarFallback>
413
- </Avatar>
414
- ```
415
-
416
- ### Badge
417
- ```tsx
418
- import { Badge } from "@/components/ui/badge"
419
-
420
- <Badge>Default</Badge>
421
- <Badge variant="secondary">Secondary</Badge>
422
- <Badge variant="destructive">Destructive</Badge>
423
- <Badge variant="outline">Outline</Badge>
424
- ```