tailwind.config.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. var colors = require('tailwindcss/colors');
  2. var plugin = require('tailwindcss/plugin');
  3. var types = ['primary', 'secondary', 'tertiary', 'warning', 'success', 'error'];
  4. function generateSafeList(types) {
  5. var safelist = [];
  6. types.forEach(type => {
  7. safelist.push(
  8. ...[
  9. `text-on-${type}`,
  10. `dark:text-on-${type}-dark`,
  11. `hover:text-${type}-dark`,
  12. `dark:hover:text-${type}`,
  13. `bg-${type}`,
  14. `from-${type}-variant`,
  15. `to-${type}`,
  16. `dark:bg-${type}-dark`,
  17. `hover:bg-${type}-variant`,
  18. `hover:dark:bg-${type}-variant-dark`,
  19. `border-${type}`,
  20. `dark:border-${type}-dark`,
  21. `hover:border-${type}-variant`,
  22. `dark:hover:border-${type}-variant-dark`,
  23. ]
  24. );
  25. });
  26. return safelist;
  27. }
  28. /** @type {import('tailwindcss').Config} */
  29. module.exports = {
  30. darkMode: 'selector',
  31. content: ['./src/**/*.{html,js,ts}'],
  32. safelist: generateSafeList(types),
  33. theme: {
  34. extend: {
  35. aspectRatio: {
  36. '16/9': '16 / 9',
  37. '4/5': '4 / 5',
  38. '1/1': '1 / 1',
  39. },
  40. fontFamily: {
  41. primary: 'var(--font-primary)',
  42. title: 'var(--font-title)',
  43. logo: 'var(--font-logo)',
  44. },
  45. colors: {
  46. ...colors,
  47. primary: {
  48. DEFAULT: 'rgb(var(--primary-400) / <alpha-value>)',
  49. dark: 'rgb(var(--primary-700) / <alpha-value>)',
  50. container: {
  51. DEFAULT: 'rgb(var(--primary-200) / <alpha-value>)',
  52. dark: 'rgb(var(--primary-800) / <alpha-value>)',
  53. },
  54. variant: {
  55. DEFAULT: 'rgb(var(--primary-600) / <alpha-value>)',
  56. dark: 'rgb(var(--primary-500) / <alpha-value>)',
  57. },
  58. 50: 'rgb(var(--primary-50) / <alpha-value>)',
  59. 100: 'rgb(var(--primary-100) / <alpha-value>)',
  60. 150: 'rgb(var(--primary-150) / <alpha-value>)',
  61. 200: 'rgb(var(--primary-200) / <alpha-value>)',
  62. 250: 'rgb(var(--primary-250) / <alpha-value>)',
  63. 300: 'rgb(var(--primary-300) / <alpha-value>)',
  64. 350: 'rgb(var(--primary-350) / <alpha-value>)',
  65. 400: 'rgb(var(--primary-400) / <alpha-value>)',
  66. 500: 'rgb(var(--primary-500) / <alpha-value>)',
  67. 600: 'rgb(var(--primary-600) / <alpha-value>)',
  68. 700: 'rgb(var(--primary-700) / <alpha-value>)',
  69. 800: 'rgb(var(--primary-800) / <alpha-value>)',
  70. 900: 'rgb(var(--primary-900) / <alpha-value>)',
  71. 950: 'rgb(var(--primary-950) / <alpha-value>)',
  72. },
  73. secondary: {
  74. DEFAULT: 'rgb(var(--secondary-400) / <alpha-value>)',
  75. dark: 'rgb(var(--secondary-700) / <alpha-value>)',
  76. container: {
  77. DEFAULT: 'rgb(var(--secondary-200) / <alpha-value>)',
  78. dark: 'rgb(var(--secondary-800) / <alpha-value>)',
  79. },
  80. variant: {
  81. DEFAULT: 'rgb(var(--secondary-600) / <alpha-value>)',
  82. dark: 'rgb(var(--secondary-500) / <alpha-value>)',
  83. },
  84. 50: 'rgb(var(--secondary-50) / <alpha-value>)',
  85. 100: 'rgb(var(--secondary-100) / <alpha-value>)',
  86. 150: 'rgb(var(--secondary-150) / <alpha-value>)',
  87. 200: 'rgb(var(--secondary-200) / <alpha-value>)',
  88. 250: 'rgb(var(--secondary-250) / <alpha-value>)',
  89. 300: 'rgb(var(--secondary-300) / <alpha-value>)',
  90. 350: 'rgb(var(--secondary-350) / <alpha-value>)',
  91. 400: 'rgb(var(--secondary-400) / <alpha-value>)',
  92. 500: 'rgb(var(--secondary-500) / <alpha-value>)',
  93. 600: 'rgb(var(--secondary-600) / <alpha-value>)',
  94. 700: 'rgb(var(--secondary-700) / <alpha-value>)',
  95. 800: 'rgb(var(--secondary-800) / <alpha-value>)',
  96. 900: 'rgb(var(--secondary-900) / <alpha-value>)',
  97. 950: 'rgb(var(--secondary-950) / <alpha-value>)',
  98. },
  99. tertiary: {
  100. DEFAULT: 'rgb(var(--tertiary-400) / <alpha-value>)',
  101. dark: 'rgb(var(--tertiary-700) / <alpha-value>)',
  102. container: {
  103. DEFAULT: 'rgb(var(--tertiary-200) / <alpha-value>)',
  104. dark: 'rgb(var(--tertiary-800) / <alpha-value>)',
  105. },
  106. variant: {
  107. DEFAULT: 'rgb(var(--tertiary-600) / <alpha-value>)',
  108. dark: 'rgb(var(--tertiary-500) / <alpha-value>)',
  109. },
  110. 50: 'rgb(var(--tertiary-50) / <alpha-value>)',
  111. 100: 'rgb(var(--tertiary-100) / <alpha-value>)',
  112. 150: 'rgb(var(--tertiary-150) / <alpha-value>)',
  113. 200: 'rgb(var(--tertiary-200) / <alpha-value>)',
  114. 250: 'rgb(var(--tertiary-250) / <alpha-value>)',
  115. 300: 'rgb(var(--tertiary-300) / <alpha-value>)',
  116. 350: 'rgb(var(--tertiary-350) / <alpha-value>)',
  117. 400: 'rgb(var(--tertiary-400) / <alpha-value>)',
  118. 500: 'rgb(var(--tertiary-500) / <alpha-value>)',
  119. 600: 'rgb(var(--tertiary-600) / <alpha-value>)',
  120. 700: 'rgb(var(--tertiary-700) / <alpha-value>)',
  121. 800: 'rgb(var(--tertiary-800) / <alpha-value>)',
  122. 900: 'rgb(var(--tertiary-900) / <alpha-value>)',
  123. 950: 'rgb(var(--tertiary-950) / <alpha-value>)',
  124. },
  125. neutral: {
  126. 50: 'rgb(var(--neutral-50) / <alpha-value>)',
  127. 100: 'rgb(var(--neutral-100) / <alpha-value>)',
  128. 150: 'rgb(var(--neutral-150) / <alpha-value>)',
  129. 200: 'rgb(var(--neutral-200) / <alpha-value>)',
  130. 250: 'rgb(var(--neutral-250) / <alpha-value>)',
  131. 300: 'rgb(var(--neutral-300) / <alpha-value>)',
  132. 350: 'rgb(var(--neutral-350) / <alpha-value>)',
  133. 400: 'rgb(var(--neutral-400) / <alpha-value>)',
  134. 500: 'rgb(var(--neutral-500) / <alpha-value>)',
  135. 600: 'rgb(var(--neutral-600) / <alpha-value>)',
  136. 700: 'rgb(var(--neutral-700) / <alpha-value>)',
  137. 800: 'rgb(var(--neutral-800) / <alpha-value>)',
  138. 900: 'rgb(var(--neutral-900) / <alpha-value>)',
  139. 950: 'rgb(var(--neutral-950) / <alpha-value>)',
  140. },
  141. 'neutral-variant': {
  142. 50: 'rgb(var(--neutral-variant-50) / <alpha-value>)',
  143. 100: 'rgb(var(--neutral-variant-100) / <alpha-value>)',
  144. 150: 'rgb(var(--neutral-variant-150) / <alpha-value>)',
  145. 200: 'rgb(var(--neutral-variant-200) / <alpha-value>)',
  146. 250: 'rgb(var(--neutral-variant-250) / <alpha-value>)',
  147. 300: 'rgb(var(--neutral-variant-300) / <alpha-value>)',
  148. 350: 'rgb(var(--neutral-variant-350) / <alpha-value>)',
  149. 400: 'rgb(var(--neutral-variant-400) / <alpha-value>)',
  150. 500: 'rgb(var(--neutral-variant-500) / <alpha-value>)',
  151. 600: 'rgb(var(--neutral-variant-600) / <alpha-value>)',
  152. 700: 'rgb(var(--neutral-variant-700) / <alpha-value>)',
  153. 800: 'rgb(var(--neutral-variant-800) / <alpha-value>)',
  154. 900: 'rgb(var(--neutral-variant-900) / <alpha-value>)',
  155. 950: 'rgb(var(--neutral-variant-950) / <alpha-value>)',
  156. },
  157. background: {
  158. DEFAULT: 'rgb(var(--neutral-50) / <alpha-value>)',
  159. dark: 'rgb(var(--neutral-variant-950) / <alpha-value>)',
  160. },
  161. surface: {
  162. DEFAULT: 'rgb(var(--primary-50) / <alpha-value>)',
  163. dark: 'rgb(var(--primary-950) / <alpha-value>)',
  164. variant: {
  165. DEFAULT: 'rgb(var(--neutral-variant-50) / <alpha-value>)',
  166. dark: 'rgb(var(--neutral-variant-800) / <alpha-value>)',
  167. },
  168. },
  169. outline: {
  170. DEFAULT: 'rgb(var(--neutral-variant-600) / <alpha-value>)',
  171. dark: 'rgb(var(--neutral-variant-500) / <alpha-value>)',
  172. variant: {
  173. DEFAULT: 'rgb(var(--neutral-variant-300) / <alpha-value>)',
  174. dark: 'rgb(var(--neutral-variant-800) / <alpha-value>)',
  175. },
  176. },
  177. success: {
  178. DEFAULT: colors.green[400],
  179. dark: colors.green[700],
  180. variant: {
  181. DEFAULT: colors.green[500],
  182. dark: colors.green[600],
  183. },
  184. },
  185. warning: {
  186. DEFAULT: colors.amber[400],
  187. dark: colors.amber[700],
  188. variant: {
  189. DEFAULT: colors.amber[500],
  190. dark: colors.amber[600],
  191. },
  192. },
  193. error: {
  194. DEFAULT: colors.red[400],
  195. dark: colors.red[700],
  196. variant: {
  197. DEFAULT: colors.red[500],
  198. dark: colors.red[600],
  199. },
  200. },
  201. on: {
  202. primary: {
  203. DEFAULT: 'rgb(var(--neutral-variant-950) / <alpha-value>)',
  204. dark: 'rgb(var(--neutral-variant-50) / <alpha-value>)',
  205. container: {
  206. DEFAULT: 'rgb(var(--neutral-variant-900) / <alpha-value>)',
  207. dark: 'rgb(var(--neutral-variant-50) / <alpha-value>)',
  208. },
  209. variant: {
  210. DEFAULT: 'rgb(var(--neutral-variant-200) / <alpha-value>)',
  211. dark: 'rgb(var(--neutral-variant-100) / <alpha-value>)',
  212. },
  213. },
  214. secondary: {
  215. DEFAULT: 'rgb(var(--neutral-variant-950) / <alpha-value>)',
  216. dark: 'rgb(var(--neutral-variant-50) / <alpha-value>)',
  217. container: {
  218. DEFAULT: 'rgb(var(--secondary-900) / <alpha-value>)',
  219. dark: 'rgb(var(--secondary-50) / <alpha-value>)',
  220. },
  221. variant: {
  222. DEFAULT: 'rgb(var(--secondary-200) / <alpha-value>)',
  223. dark: 'rgb(var(--secondary-100) / <alpha-value>)',
  224. },
  225. },
  226. tertiary: {
  227. DEFAULT: 'rgb(var(--neutral-variant-950) / <alpha-value>)',
  228. dark: 'rgb(var(--neutral-variant-50) / <alpha-value>)',
  229. container: {
  230. DEFAULT: 'rgb(var(--tertiary-900) / <alpha-value>)',
  231. dark: 'rgb(var(--tertiary-50) / <alpha-value>)',
  232. },
  233. variant: {
  234. DEFAULT: 'rgb(var(--tertiary-200) / <alpha-value>)',
  235. dark: 'rgb(var(--tertiary-100) / <alpha-value>)',
  236. },
  237. },
  238. background: {
  239. DEFAULT: 'rgb(var(--neutral-900) / <alpha-value>)',
  240. dark: 'rgb(var(--neutral-variant-100) / <alpha-value>)',
  241. },
  242. surface: {
  243. DEFAULT: 'rgb(var(--neutral-900) / <alpha-value>)',
  244. dark: 'rgb(var(--neutral-variant-100) / <alpha-value>)',
  245. variant: {
  246. DEFAULT: 'rgb(var(--neutral-variant-800) / <alpha-value>)',
  247. dark: 'rgb(var(--neutral-variant-300) / <alpha-value>)',
  248. },
  249. },
  250. success: {
  251. DEFAULT: colors.green[950],
  252. dark: colors.green[50],
  253. variant: {
  254. DEFAULT: colors.green[800],
  255. dark: colors.green[300],
  256. },
  257. },
  258. warning: {
  259. DEFAULT: colors.amber[950],
  260. dark: colors.amber[50],
  261. variant: {
  262. DEFAULT: colors.amber[300],
  263. dark: colors.amber[800],
  264. },
  265. },
  266. error: {
  267. DEFAULT: colors.red[950],
  268. dark: colors.red[50],
  269. variant: {
  270. DEFAULT: colors.red[300],
  271. dark: colors.red[800],
  272. },
  273. },
  274. },
  275. },
  276. },
  277. },
  278. plugins: [
  279. plugin(function ({ addBase, theme }) {
  280. addBase({
  281. h1: { fontSize: theme('fontSize.3xl'), fontWeight: theme('fontWeight.bold') },
  282. h2: { fontSize: theme('fontSize.2xl'), fontWeight: theme('fontWeight.bold') },
  283. h3: { fontSize: theme('fontSize.xl'), fontWeight: theme('fontWeight.semibold') },
  284. h4: { fontSize: theme('fontSize.lg'), fontWeight: theme('fontWeight.semibold') },
  285. });
  286. }),
  287. ],
  288. };