@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,483 +0,0 @@
1
- # Tailwind CSS Customization
2
-
3
- Config file structure, custom utilities, plugins, and theme extensions.
4
-
5
- ## @theme Directive
6
-
7
- Modern approach to customize Tailwind using CSS:
8
-
9
- ```css
10
- @import "tailwindcss";
11
-
12
- @theme {
13
- /* Custom colors */
14
- --color-brand-50: oklch(0.97 0.02 264);
15
- --color-brand-500: oklch(0.55 0.22 264);
16
- --color-brand-900: oklch(0.25 0.15 264);
17
-
18
- /* Custom fonts */
19
- --font-display: "Satoshi", "Inter", sans-serif;
20
- --font-body: "Inter", system-ui, sans-serif;
21
-
22
- /* Custom spacing */
23
- --spacing-18: calc(var(--spacing) * 18);
24
- --spacing-navbar: 4.5rem;
25
-
26
- /* Custom breakpoints */
27
- --breakpoint-3xl: 120rem;
28
- --breakpoint-tablet: 48rem;
29
-
30
- /* Custom shadows */
31
- --shadow-glow: 0 0 20px rgba(139, 92, 246, 0.3);
32
-
33
- /* Custom radius */
34
- --radius-large: 1.5rem;
35
- }
36
- ```
37
-
38
- **Usage:**
39
- ```html
40
- <div class="bg-brand-500 font-display shadow-glow rounded-large">
41
- Custom themed element
42
- </div>
43
-
44
- <div class="tablet:grid-cols-2 3xl:grid-cols-6">
45
- Custom breakpoints
46
- </div>
47
- ```
48
-
49
- ## Color Customization
50
-
51
- ### Custom Color Palette
52
-
53
- ```css
54
- @theme {
55
- /* Full color scale */
56
- --color-primary-50: oklch(0.98 0.02 250);
57
- --color-primary-100: oklch(0.95 0.05 250);
58
- --color-primary-200: oklch(0.90 0.10 250);
59
- --color-primary-300: oklch(0.85 0.15 250);
60
- --color-primary-400: oklch(0.75 0.18 250);
61
- --color-primary-500: oklch(0.65 0.22 250);
62
- --color-primary-600: oklch(0.55 0.22 250);
63
- --color-primary-700: oklch(0.45 0.20 250);
64
- --color-primary-800: oklch(0.35 0.18 250);
65
- --color-primary-900: oklch(0.25 0.15 250);
66
- --color-primary-950: oklch(0.15 0.10 250);
67
- }
68
- ```
69
-
70
- ### Semantic Colors
71
-
72
- ```css
73
- @theme {
74
- --color-success: oklch(0.65 0.18 145);
75
- --color-warning: oklch(0.75 0.15 85);
76
- --color-error: oklch(0.60 0.22 25);
77
- --color-info: oklch(0.65 0.18 240);
78
- }
79
- ```
80
-
81
- ```html
82
- <div class="bg-success text-white">Success message</div>
83
- <div class="border-error">Error state</div>
84
- ```
85
-
86
- ## Typography Customization
87
-
88
- ### Custom Fonts
89
-
90
- ```css
91
- @theme {
92
- --font-sans: "Inter", system-ui, sans-serif;
93
- --font-serif: "Merriweather", Georgia, serif;
94
- --font-mono: "JetBrains Mono", Consolas, monospace;
95
- --font-display: "Playfair Display", serif;
96
- }
97
- ```
98
-
99
- ```html
100
- <h1 class="font-display">Display heading</h1>
101
- <p class="font-sans">Body text</p>
102
- <code class="font-mono">Code block</code>
103
- ```
104
-
105
- ### Custom Font Sizes
106
-
107
- ```css
108
- @theme {
109
- --font-size-xs: 0.75rem;
110
- --font-size-sm: 0.875rem;
111
- --font-size-base: 1rem;
112
- --font-size-lg: 1.125rem;
113
- --font-size-xl: 1.25rem;
114
- --font-size-2xl: 1.5rem;
115
- --font-size-3xl: 1.875rem;
116
- --font-size-4xl: 2.25rem;
117
- --font-size-5xl: 3rem;
118
- --font-size-jumbo: 4rem;
119
- }
120
- ```
121
-
122
- ## Spacing Customization
123
-
124
- ```css
125
- @theme {
126
- /* Add custom spacing values */
127
- --spacing-13: calc(var(--spacing) * 13);
128
- --spacing-15: calc(var(--spacing) * 15);
129
- --spacing-18: calc(var(--spacing) * 18);
130
-
131
- /* Named spacing */
132
- --spacing-header: 4rem;
133
- --spacing-footer: 3rem;
134
- --spacing-section: 6rem;
135
- }
136
- ```
137
-
138
- ```html
139
- <div class="p-18">Custom padding</div>
140
- <section class="py-section">Section spacing</section>
141
- ```
142
-
143
- ## Custom Utilities
144
-
145
- Create reusable utility classes:
146
-
147
- ```css
148
- @utility content-auto {
149
- content-visibility: auto;
150
- }
151
-
152
- @utility tab-* {
153
- tab-size: var(--tab-size-*);
154
- }
155
-
156
- @utility glass {
157
- background: rgba(255, 255, 255, 0.1);
158
- backdrop-filter: blur(10px);
159
- border: 1px solid rgba(255, 255, 255, 0.2);
160
- }
161
- ```
162
-
163
- **Usage:**
164
- ```html
165
- <div class="content-auto">Optimized rendering</div>
166
- <pre class="tab-4">Code with 4-space tabs</pre>
167
- <div class="glass">Glassmorphism effect</div>
168
- ```
169
-
170
- ## Custom Variants
171
-
172
- Create custom state variants:
173
-
174
- ```css
175
- @custom-variant theme-midnight (&:where([data-theme="midnight"] *));
176
- @custom-variant aria-checked (&[aria-checked="true"]);
177
- @custom-variant required (&:required);
178
- ```
179
-
180
- **Usage:**
181
- ```html
182
- <div data-theme="midnight">
183
- <div class="theme-midnight:bg-navy-900">
184
- Applies in midnight theme
185
- </div>
186
- </div>
187
-
188
- <input class="required:border-red-500" required />
189
- ```
190
-
191
- ## Layer Organization
192
-
193
- Organize CSS into layers:
194
-
195
- ```css
196
- @layer base {
197
- h1 {
198
- @apply text-4xl font-bold tracking-tight;
199
- }
200
-
201
- h2 {
202
- @apply text-3xl font-semibold;
203
- }
204
-
205
- a {
206
- @apply text-blue-600 hover:text-blue-700 underline-offset-4 hover:underline;
207
- }
208
-
209
- body {
210
- @apply bg-background text-foreground antialiased;
211
- }
212
- }
213
-
214
- @layer components {
215
- .btn {
216
- @apply px-4 py-2 rounded-lg font-medium transition-colors;
217
- }
218
-
219
- .btn-primary {
220
- @apply bg-blue-600 text-white hover:bg-blue-700;
221
- }
222
-
223
- .btn-secondary {
224
- @apply bg-gray-200 text-gray-900 hover:bg-gray-300;
225
- }
226
-
227
- .card {
228
- @apply bg-white rounded-xl shadow-md p-6 hover:shadow-lg transition-shadow;
229
- }
230
-
231
- .input {
232
- @apply w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent;
233
- }
234
- }
235
-
236
- @layer utilities {
237
- .text-balance {
238
- text-wrap: balance;
239
- }
240
-
241
- .scrollbar-hide {
242
- -ms-overflow-style: none;
243
- scrollbar-width: none;
244
- }
245
- .scrollbar-hide::-webkit-scrollbar {
246
- display: none;
247
- }
248
- }
249
- ```
250
-
251
- ## @apply Directive
252
-
253
- Extract repeated utility patterns:
254
-
255
- ```css
256
- .btn-primary {
257
- @apply bg-blue-600 hover:bg-blue-700 active:bg-blue-800 text-white font-semibold px-6 py-3 rounded-lg shadow-md hover:shadow-lg transition-all duration-200 focus:outline-none focus:ring-4 focus:ring-blue-300;
258
- }
259
-
260
- .input-field {
261
- @apply w-full px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed;
262
- }
263
-
264
- .section-container {
265
- @apply container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl;
266
- }
267
- ```
268
-
269
- **Usage:**
270
- ```html
271
- <button class="btn-primary">Click me</button>
272
- <input class="input-field" />
273
- <div class="section-container">Content</div>
274
- ```
275
-
276
- ## Plugins
277
-
278
- ### Official Plugins
279
-
280
- ```bash
281
- npm install -D @tailwindcss/typography @tailwindcss/forms @tailwindcss/container-queries
282
- ```
283
-
284
- ```javascript
285
- // tailwind.config.js
286
- export default {
287
- plugins: [
288
- require('@tailwindcss/typography'),
289
- require('@tailwindcss/forms'),
290
- require('@tailwindcss/container-queries'),
291
- ],
292
- }
293
- ```
294
-
295
- **Typography plugin:**
296
- ```html
297
- <article class="prose lg:prose-xl">
298
- <h1>Styled article</h1>
299
- <p>Automatically styled prose content</p>
300
- </article>
301
- ```
302
-
303
- **Forms plugin:**
304
- ```html
305
- <!-- Automatically styled form elements -->
306
- <input type="text" />
307
- <select></select>
308
- <textarea></textarea>
309
- ```
310
-
311
- ### Custom Plugin
312
-
313
- ```javascript
314
- // tailwind.config.js
315
- const plugin = require('tailwindcss/plugin')
316
-
317
- export default {
318
- plugins: [
319
- plugin(function({ addUtilities, addComponents, theme }) {
320
- // Add utilities
321
- addUtilities({
322
- '.text-shadow': {
323
- textShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)',
324
- },
325
- '.text-shadow-lg': {
326
- textShadow: '4px 4px 8px rgba(0, 0, 0, 0.2)',
327
- },
328
- })
329
-
330
- // Add components
331
- addComponents({
332
- '.card-custom': {
333
- backgroundColor: theme('colors.white'),
334
- borderRadius: theme('borderRadius.lg'),
335
- padding: theme('spacing.6'),
336
- boxShadow: theme('boxShadow.md'),
337
- },
338
- })
339
- }),
340
- ],
341
- }
342
- ```
343
-
344
- ## Configuration Examples
345
-
346
- ### Complete Tailwind Config
347
-
348
- ```javascript
349
- // tailwind.config.ts
350
- import type { Config } from 'tailwindcss'
351
-
352
- const config: Config = {
353
- darkMode: ["class"],
354
- content: [
355
- './pages/**/*.{ts,tsx}',
356
- './components/**/*.{ts,tsx}',
357
- './app/**/*.{ts,tsx}',
358
- ],
359
- theme: {
360
- container: {
361
- center: true,
362
- padding: "2rem",
363
- screens: {
364
- "2xl": "1400px",
365
- },
366
- },
367
- extend: {
368
- colors: {
369
- border: "hsl(var(--border))",
370
- input: "hsl(var(--input))",
371
- ring: "hsl(var(--ring))",
372
- background: "hsl(var(--background))",
373
- foreground: "hsl(var(--foreground))",
374
- primary: {
375
- DEFAULT: "hsl(var(--primary))",
376
- foreground: "hsl(var(--primary-foreground))",
377
- },
378
- brand: {
379
- 50: '#f0f9ff',
380
- 500: '#3b82f6',
381
- 900: '#1e3a8a',
382
- },
383
- },
384
- fontFamily: {
385
- sans: ['Inter', 'system-ui', 'sans-serif'],
386
- display: ['Playfair Display', 'serif'],
387
- },
388
- spacing: {
389
- '18': '4.5rem',
390
- '88': '22rem',
391
- '128': '32rem',
392
- },
393
- borderRadius: {
394
- lg: "var(--radius)",
395
- md: "calc(var(--radius) - 2px)",
396
- sm: "calc(var(--radius) - 4px)",
397
- },
398
- keyframes: {
399
- "slide-in": {
400
- "0%": { transform: "translateX(-100%)" },
401
- "100%": { transform: "translateX(0)" },
402
- },
403
- },
404
- animation: {
405
- "slide-in": "slide-in 0.5s ease-out",
406
- },
407
- },
408
- },
409
- plugins: [require("tailwindcss-animate")],
410
- }
411
-
412
- export default config
413
- ```
414
-
415
- ## Dark Mode Configuration
416
-
417
- ```javascript
418
- // tailwind.config.js
419
- export default {
420
- darkMode: ["class"], // or "media" for automatic
421
- // ...
422
- }
423
- ```
424
-
425
- **Usage:**
426
- ```html
427
- <!-- Class-based -->
428
- <html class="dark">
429
- <div class="bg-white dark:bg-gray-900">
430
- Responds to .dark class
431
- </div>
432
- </html>
433
-
434
- <!-- Media query-based -->
435
- <div class="bg-white dark:bg-gray-900">
436
- Responds to system preference automatically
437
- </div>
438
- ```
439
-
440
- ## Content Configuration
441
-
442
- Specify files to scan for classes:
443
-
444
- ```javascript
445
- // tailwind.config.js
446
- export default {
447
- content: [
448
- "./src/**/*.{js,jsx,ts,tsx}",
449
- "./app/**/*.{js,jsx,ts,tsx}",
450
- "./components/**/*.{js,jsx,ts,tsx}",
451
- "./pages/**/*.{js,jsx,ts,tsx}",
452
- ],
453
- // ...
454
- }
455
- ```
456
-
457
- ### Safelist
458
-
459
- Preserve dynamic classes:
460
-
461
- ```javascript
462
- export default {
463
- safelist: [
464
- 'bg-red-500',
465
- 'bg-green-500',
466
- 'bg-blue-500',
467
- {
468
- pattern: /bg-(red|green|blue)-(100|500|900)/,
469
- },
470
- ],
471
- }
472
- ```
473
-
474
- ## Best Practices
475
-
476
- 1. **Use @theme for simple customizations**: Prefer CSS-based customization
477
- 2. **Extract components sparingly**: Use @apply only for truly repeated patterns
478
- 3. **Leverage design tokens**: Define custom tokens in @theme
479
- 4. **Layer organization**: Keep base, components, and utilities separate
480
- 5. **Plugin for complex logic**: Use plugins for advanced customizations
481
- 6. **Test dark mode**: Ensure custom colors work in both themes
482
- 7. **Document custom utilities**: Add comments explaining custom classes
483
- 8. **Semantic naming**: Use descriptive names (primary not blue)