tailwind.config.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. const colors = require('tailwindcss/colors')
  2. const radix = require('@radix-ui/colors')
  3. const lx = {
  4. 'accent-01': 'var(--lx-accent-01)',
  5. 'accent-02': 'var(--lx-accent-02)',
  6. 'accent-03': 'var(--lx-accent-03)',
  7. 'accent-04': 'var(--lx-accent-04)',
  8. 'accent-05': 'var(--lx-accent-05)',
  9. 'accent-06': 'var(--lx-accent-06)',
  10. 'accent-07': 'var(--lx-accent-07)',
  11. 'accent-08': 'var(--lx-accent-08)',
  12. 'accent-09': 'var(--lx-accent-09)',
  13. 'accent-10': 'var(--lx-accent-10)',
  14. 'accent-11': 'var(--lx-accent-11)',
  15. 'accent-12': 'var(--lx-accent-12)',
  16. 'accent-01-alpha': 'var(--lx-accent-01-alpha)',
  17. 'accent-02-alpha': 'var(--lx-accent-02-alpha)',
  18. 'accent-03-alpha': 'var(--lx-accent-03-alpha)',
  19. 'accent-04-alpha': 'var(--lx-accent-04-alpha)',
  20. 'accent-05-alpha': 'var(--lx-accent-05-alpha)',
  21. 'accent-06-alpha': 'var(--lx-accent-06-alpha)',
  22. 'accent-07-alpha': 'var(--lx-accent-07-alpha)',
  23. 'accent-08-alpha': 'var(--lx-accent-08-alpha)',
  24. 'accent-09-alpha': 'var(--lx-accent-09-alpha)',
  25. 'accent-10-alpha': 'var(--lx-accent-10-alpha)',
  26. 'accent-11-alpha': 'var(--lx-accent-11-alpha)',
  27. 'accent-12-alpha': 'var(--lx-accent-12-alpha)',
  28. 'gray-01': 'var(--lx-gray-01)',
  29. 'gray-02': 'var(--lx-gray-02)',
  30. 'gray-03': 'var(--lx-gray-03)',
  31. 'gray-04': 'var(--lx-gray-04)',
  32. 'gray-05': 'var(--lx-gray-05)',
  33. 'gray-06': 'var(--lx-gray-06)',
  34. 'gray-07': 'var(--lx-gray-07)',
  35. 'gray-08': 'var(--lx-gray-08)',
  36. 'gray-09': 'var(--lx-gray-09)',
  37. 'gray-10': 'var(--lx-gray-10)',
  38. 'gray-11': 'var(--lx-gray-11)',
  39. 'gray-12': 'var(--lx-gray-12)',
  40. 'gray-01-alpha': 'var(--lx-gray-01-alpha)',
  41. 'gray-02-alpha': 'var(--lx-gray-02-alpha)',
  42. 'gray-03-alpha': 'var(--lx-gray-03-alpha)',
  43. 'gray-04-alpha': 'var(--lx-gray-04-alpha)',
  44. 'gray-05-alpha': 'var(--lx-gray-05-alpha)',
  45. 'gray-06-alpha': 'var(--lx-gray-06-alpha)',
  46. 'gray-07-alpha': 'var(--lx-gray-07-alpha)',
  47. 'gray-08-alpha': 'var(--lx-gray-08-alpha)',
  48. 'gray-09-alpha': 'var(--lx-gray-09-alpha)',
  49. 'gray-10-alpha': 'var(--lx-gray-10-alpha)',
  50. 'gray-11-alpha': 'var(--lx-gray-11-alpha)',
  51. 'gray-12-alpha': 'var(--lx-gray-12-alpha)',
  52. }
  53. const accent = {
  54. '01': 'var(--lx-accent-01)',
  55. '02': 'var(--lx-accent-02)',
  56. '03': 'var(--lx-accent-03)',
  57. '04': 'var(--lx-accent-04)',
  58. '05': 'var(--lx-accent-05)',
  59. '06': 'var(--lx-accent-06)',
  60. '07': 'var(--lx-accent-07)',
  61. '08': 'var(--lx-accent-08)',
  62. '09': 'var(--lx-accent-09)',
  63. '10': 'var(--lx-accent-10)',
  64. '11': 'var(--lx-accent-11)',
  65. '12': 'var(--lx-accent-12)',
  66. '01-alpha': 'var(--lx-accent-01-alpha)',
  67. '02-alpha': 'var(--lx-accent-02-alpha)',
  68. '03-alpha': 'var(--lx-accent-03-alpha)',
  69. '04-alpha': 'var(--lx-accent-04-alpha)',
  70. '05-alpha': 'var(--lx-accent-05-alpha)',
  71. '06-alpha': 'var(--lx-accent-06-alpha)',
  72. '07-alpha': 'var(--lx-accent-07-alpha)',
  73. '08-alpha': 'var(--lx-accent-08-alpha)',
  74. '09-alpha': 'var(--lx-accent-09-alpha)',
  75. '10-alpha': 'var(--lx-accent-10-alpha)',
  76. '11-alpha': 'var(--lx-accent-11-alpha)',
  77. '12-alpha': 'var(--lx-accent-12-alpha)',
  78. }
  79. const gray = {
  80. ...colors.gray,
  81. '01': 'var(--lx-gray-01)',
  82. '02': 'var(--lx-gray-02)',
  83. '03': 'var(--lx-gray-03)',
  84. '04': 'var(--lx-gray-04)',
  85. '05': 'var(--lx-gray-05)',
  86. '06': 'var(--lx-gray-06)',
  87. '07': 'var(--lx-gray-07)',
  88. '08': 'var(--lx-gray-08)',
  89. '09': 'var(--lx-gray-09)',
  90. '10': 'var(--lx-gray-10)',
  91. '11': 'var(--lx-gray-11)',
  92. '12': 'var(--lx-gray-12)',
  93. '01-alpha': 'var(--lx-gray-01-alpha)',
  94. '02-alpha': 'var(--lx-gray-02-alpha)',
  95. '03-alpha': 'var(--lx-gray-03-alpha)',
  96. '04-alpha': 'var(--lx-gray-04-alpha)',
  97. '05-alpha': 'var(--lx-gray-05-alpha)',
  98. '06-alpha': 'var(--lx-gray-06-alpha)',
  99. '07-alpha': 'var(--lx-gray-07-alpha)',
  100. '08-alpha': 'var(--lx-gray-08-alpha)',
  101. '09-alpha': 'var(--lx-gray-09-alpha)',
  102. '10-alpha': 'var(--lx-gray-10-alpha)',
  103. '11-alpha': 'var(--lx-gray-11-alpha)',
  104. '12-alpha': 'var(--lx-gray-12-alpha)',
  105. }
  106. function exposeColorsToCssVars ({ addBase, theme }) {
  107. function extractColorVars (colorObj, colorGroup = '') {
  108. return Object.keys(colorObj).reduce((vars, colorKey) => {
  109. const value = colorObj[colorKey]
  110. const newVars =
  111. typeof value === 'string'
  112. ? { [`--color${colorGroup}-${colorKey}`]: value }
  113. : extractColorVars(value, `-${colorKey}`)
  114. return { ...vars, ...newVars }
  115. }, {})
  116. }
  117. addBase({
  118. ':root': extractColorVars(theme('colors')),
  119. })
  120. }
  121. function buildColor(color, custom) {
  122. const base = custom || colors[color] || {}
  123. for (const [xName, xValue] of Object.entries(radix[color] || {})) {
  124. const regexResult = xName.match(/\d+$/)
  125. if (!regexResult) { continue; }
  126. const xStep = regexResult[0]
  127. base[xStep] = xValue
  128. }
  129. return base
  130. }
  131. function getDarkSelector(config) {
  132. const darkMode = config("darkMode");
  133. const prefix = config("prefix");
  134. if (Array.isArray(darkMode)) {
  135. if (darkMode.length < 2) {
  136. throw new Error(
  137. "To customize the dark mode selector, `darkMode` should contain two items. Documentation: https://tailwindcss.com/docs/dark-mode#customizing-the-class-name"
  138. );
  139. }
  140. if (darkMode[0] !== "class") {
  141. throw new Error(
  142. 'To customize the dark mode selector, `darkMode` should have "class" as its first item. Documentation: https://tailwindcss.com/docs/dark-mode#customizing-the-class-name'
  143. );
  144. }
  145. return darkMode[1] + " &";
  146. }
  147. if (darkMode === "media") {
  148. return "@media (prefers-color-scheme: dark)";
  149. }
  150. if (darkMode !== "class") {
  151. throw new Error(
  152. "Invalid `darkMode`. Documentation: https://tailwindcss.com/docs/dark-mode"
  153. );
  154. }
  155. if (prefix) {
  156. return `[class~="${prefix}dark"] &`;
  157. }
  158. return '[class~="dark"] &';
  159. }
  160. module.exports = {
  161. darkMode: 'class',
  162. content: [
  163. './src/**/*.js',
  164. './src/**/*.cljs',
  165. './resources/**/*.html',
  166. './deps/shui/src/**/*.cljs',
  167. ],
  168. safelist: [
  169. 'bg-black', 'bg-white', 'capitalize-first',
  170. { pattern: /bg-(gray|red|yellow|green|blue|orange|indigo|rose|purple|pink)-(100|200|300|400|500|600|700|800|900)/ },
  171. { pattern: /text-(gray|red|yellow|green|blue|orange|indigo|rose|purple|pink)-(100|200|300|400|500|600|700|800|900)/ },
  172. { pattern: /columns-([1-9]|1[0-2])|(auto|3xs|2xs|xs|sm|md|lg|xl)|([2-7]xl)/ },
  173. ],
  174. plugins: [
  175. require('@tailwindcss/forms'),
  176. require('@tailwindcss/typography'),
  177. require('@tailwindcss/aspect-ratio'),
  178. require('@tailwindcss/line-clamp'),
  179. require('tailwind-capitalize-first-letter'),
  180. exposeColorsToCssVars
  181. ],
  182. theme: {
  183. extend: {
  184. // backgroundColor: {
  185. // ...lx,
  186. // },
  187. // borderColor: {
  188. // ...lx,
  189. // },
  190. // outlineColor: {
  191. // ...lx,
  192. // },
  193. // textColor: {
  194. // ...lx,
  195. // },
  196. backgroundImage: {
  197. 'gradient-conic': 'conic-gradient(var(--tw-gradient-stops))',
  198. 'gradient-conic-bounce': 'conic-gradient(var(--tw-gradient-from), var(--tw-gradient-via), var(--tw-gradient-to), var(--tw-gradient-via), var(--tw-gradient-from))',
  199. 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
  200. },
  201. fontSize: {
  202. '2xs': ['0.625rem', '0.875rem']
  203. },
  204. animation: {
  205. 'spin-reverse': 'spin 2s linear infinite reverse',
  206. },
  207. spacing: {
  208. '128': '32rem',
  209. '144': '36rem'
  210. },
  211. scale: {
  212. '200': '2',
  213. '250': '2.5',
  214. '300': '3',
  215. '400': '4',
  216. },
  217. width: {
  218. 'lsm': '600px',
  219. 'lmd': '728px',
  220. 'llg': '960px'
  221. }
  222. },
  223. colors: {
  224. // Tailwind colors
  225. gray: gray,
  226. accent: accent,
  227. red: colors.red,
  228. green: colors.green,
  229. blue: colors.blue,
  230. black: colors.black,
  231. orange: colors.orange,
  232. indigo: colors.indigo,
  233. rose: colors.rose,
  234. purple: colors.purple,
  235. pink: colors.pink,
  236. yellow: colors.yellow,
  237. current: 'currentColor',
  238. transparent: 'transparent',
  239. white: colors.white,
  240. // Radix colors
  241. // amber: buildColor("amber"),
  242. // blue: buildColor("blue"),
  243. // bronze: buildColor("bronze"),
  244. // brown: buildColor("brown"),
  245. // crimson: buildColor("crimson"),
  246. // cyan: buildColor("cyan"),
  247. // gold: buildColor("gold"),
  248. // grass: buildColor("grass"),
  249. // green: buildColor("green"),
  250. // lime: buildColor("lime"),
  251. // mauve: buildColor("mauve"),
  252. // mint: buildColor("mint"),
  253. // olive: buildColor("olive"),
  254. // orange: buildColor("orange"),
  255. // pink: buildColor("pink"),
  256. // plum: buildColor("plum"),
  257. // purple: buildColor("purple"),
  258. // red: buildColor("red"),
  259. // sage: buildColor("sage"),
  260. // sand: buildColor("sand"),
  261. // sky: buildColor("sky"),
  262. // slate: buildColor("slate"),
  263. // teal: buildColor("teal"),
  264. // tomato: buildColor("tomato"),
  265. // violet: buildColor("violet"),
  266. // Custom colors
  267. // gray: buildColor("gray", colors.neutral),
  268. // yellow: buildColor("yellow", colors.amber),
  269. // indigo: buildColor("indigo", {
  270. // 50: '#f0f9ff',
  271. // 100: '#e0f2fe',
  272. // 200: '#bae6fd',
  273. // 300: '#7dd3fc',
  274. // 400: '#38bdf8',
  275. // 500: '#0ea5e9',
  276. // 600: '#0284c7',
  277. // 700: '#005b8a',
  278. // 800: '#075985',
  279. // 900: '#0c4a6e',
  280. // }),
  281. // tomatodark: buildColor("tomatoDark"),
  282. // reddark: buildColor("redDark"),
  283. // crimsondark: buildColor("crimsonDark"),
  284. // pinkdark: buildColor("pinkDark"),
  285. // plumdark: buildColor("plumDark"),
  286. // purpledark: buildColor("purpleDark"),
  287. // violetdark: buildColor("violetDark"),
  288. // skydark: buildColor("skyDark"),
  289. // indigodark: buildColor("indigoDark"),
  290. // bluedark: buildColor("blueDark"),
  291. // cyandark: buildColor("cyanDark"),
  292. // mintdark: buildColor("mintDark"),
  293. // tealdark: buildColor("tealDark"),
  294. // greendark: buildColor("greenDark"),
  295. // limedark: buildColor("limeDark"),
  296. // grassdark: buildColor("grassDark"),
  297. // yellowdark: buildColor("yellowDark"),
  298. // amberdark: buildColor("amberDark"),
  299. // orangedark: buildColor("orangeDark"),
  300. // browndark: buildColor("brownDark"),
  301. // graydark: buildColor("grayDark"),
  302. // mauvedark: buildColor("mauveDark"),
  303. // slatedark: buildColor("slateDark"),
  304. // sagedark: buildColor("sageDark"),
  305. // olivedark: buildColor("oliveDark"),
  306. // sanddark: buildColor("sandDark"),
  307. // golddark: buildColor("goldDark"),
  308. // bronzedark: buildColor("bronzeDark"),
  309. }
  310. }
  311. }