// See the Tailwind configuration guide for advanced usage // https://tailwindcss.com/docs/configuration const plugin = require('tailwindcss/plugin'); const colors = require('tailwindcss/colors'); const fs = require('fs'); const path = require('path'); module.exports = { content: [ './js/**/*.js', './js/**/*.ts', './js/**/*.tsx', '../lib/wanderer_app_web.ex', '../lib/wanderer_app_web/**/*.*ex', '../deps/live_select/lib/live_select/component.*ex', ], theme: { extend: { animation: { text: 'text 30s ease infinite', 'horizontal-bounce': 'horizontal-bounce 1.5s ease-in-out infinite', gradient: 'gradient 8s linear infinite', rotate: 'rotate 10s linear infinite', }, colors: { brand: '#FD4F00', primary: colors.rose, neutral: colors.slate, info: colors.blue, success: colors.green, danger: colors.red, }, transitionProperty: ['visibility'], transitionDuration: { 2000: '2000ms', }, transitionDelay: { 2000: '2000ms', 5000: '5000ms', }, keyframes: { text: { '0%, 100%': { 'background-size': '200% 200%', 'background-position': 'left center', }, '50%': { 'background-size': '200% 200%', 'background-position': 'right center', }, }, 'horizontal-bounce': { '0%, 100%': { transform: 'translateX(0)', }, '50%': { transform: 'translateX(15px)', }, }, gradient: { to: { 'background-position': '200% center' }, }, rotate: { '0%': { transform: 'rotate(0deg) scale(10)' }, '100%': { transform: 'rotate(-360deg) scale(10)' }, }, }, }, }, plugins: [ require('daisyui'), require('@tailwindcss/forms'), require('@tailwindcss/typography'), // Allows prefixing tailwind classes with LiveView classes to add rules // only when LiveView classes are applied, for example: // //
// plugin(({ addVariant }) => addVariant('phx-no-feedback', ['.phx-no-feedback&', '.phx-no-feedback &'])), plugin(({ addVariant }) => addVariant('phx-click-loading', ['.phx-click-loading&', '.phx-click-loading &'])), plugin(({ addVariant }) => addVariant('phx-submit-loading', ['.phx-submit-loading&', '.phx-submit-loading &'])), plugin(({ addVariant }) => addVariant('phx-change-loading', ['.phx-change-loading&', '.phx-change-loading &'])), plugin(({ addVariant }) => addVariant('phx-page-loading', ['.phx-page-loading&', '.phx-page-loading &'])), // Embeds Heroicons (https://heroicons.com) into your app.css bundle // See your `CoreComponents.icon/1` for more information. // plugin(function ({ matchComponents, theme }) { let iconsDir = path.join(__dirname, './vendor/heroicons/optimized'); let values = {}; let icons = [ ['', '/24/outline'], ['-solid', '/24/solid'], ['-mini', '/20/solid'], ]; icons.forEach(([suffix, dir]) => { fs.readdirSync(path.join(iconsDir, dir)).forEach(file => { let name = path.basename(file, '.svg') + suffix; values[name] = { name, fullPath: path.join(iconsDir, dir, file) }; }); }); matchComponents( { hero: ({ name, fullPath }) => { let content = fs .readFileSync(fullPath) .toString() .replace(/\r?\n|\r/g, ''); return { [`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`, '-webkit-mask': `var(--hero-${name})`, mask: `var(--hero-${name})`, 'mask-repeat': 'no-repeat', 'background-color': 'currentColor', 'vertical-align': 'middle', display: 'inline-block', width: theme('spacing.5'), height: theme('spacing.5'), }; }, }, { values }, ); }), ], };