2020-10-19 11:32:22 -04:00
|
|
|
import transformThemeValue from './transformThemeValue'
|
2019-12-22 15:25:34 -05:00
|
|
|
|
2020-11-11 08:27:09 -05:00
|
|
|
export default function createUtilityPlugin(
|
|
|
|
|
themeKey,
|
2021-04-30 16:58:40 +02:00
|
|
|
utilityVariations = [[themeKey, [themeKey]]],
|
2021-10-06 13:42:05 -04:00
|
|
|
{ filterDefault = false, ...options } = {}
|
2020-11-11 08:27:09 -05:00
|
|
|
) {
|
2021-05-05 15:23:32 +02:00
|
|
|
let transformValue = transformThemeValue(themeKey)
|
2021-09-10 15:34:27 +02:00
|
|
|
return function ({ matchUtilities, theme }) {
|
2021-05-05 15:23:32 +02:00
|
|
|
for (let utilityVariation of utilityVariations) {
|
|
|
|
|
let group = Array.isArray(utilityVariation[0]) ? utilityVariation : [utilityVariation]
|
2021-04-30 16:58:40 +02:00
|
|
|
|
2021-05-05 15:23:32 +02:00
|
|
|
matchUtilities(
|
|
|
|
|
group.reduce((obj, [classPrefix, properties]) => {
|
|
|
|
|
return Object.assign(obj, {
|
|
|
|
|
[classPrefix]: (value) => {
|
2021-06-10 09:15:41 -04:00
|
|
|
return properties.reduce((obj, name) => {
|
|
|
|
|
if (Array.isArray(name)) {
|
|
|
|
|
return Object.assign(obj, { [name[0]]: name[1] })
|
|
|
|
|
}
|
|
|
|
|
return Object.assign(obj, { [name]: transformValue(value) })
|
|
|
|
|
}, {})
|
2021-05-05 15:23:32 +02:00
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
}, {}),
|
|
|
|
|
{
|
2021-10-06 13:42:05 -04:00
|
|
|
...options,
|
2021-05-05 15:23:32 +02:00
|
|
|
values: filterDefault
|
|
|
|
|
? Object.fromEntries(
|
Remove AOT (#5340)
* make `jit` mode the default when no mode is specified
* unify JIT and AOT codepaths
* ensure `Object.entries` on undefined doesn't break
It could be that sometimes you don't have values in your config (e.g.: `presets: []`), this in turn will break some plugins where we assume we have a value.
* drop AOT specific tests
These tests are all covered by JIT mode already and were AOT specific.
* simplify tests, and add a few
Some of the tests were written for AOT specifically, some were missing. We also updated the way we write those tests, essentially making Tailwind a blackbox, by testing against the final output.
Now that JIT mode is the default, this is super fast because we only generate what is used, instead of partially testing in a 3MB file or building it all, then purging.
* add some todo's to make sure we warn in a few cases
* make `darkMode: 'media'`, the default
This also includes moving dark mode tests to its own dedicated file.
* remove PostCSS 7 compat mode
* update CLI to be JIT-first
* fix integration tests
This is not a _real_ fix, but it does solve the broken test for now.
* warn when using @responsive or @variants
* remove the JIT preview warning
* remove AOT-only code paths
* remove all `mode: 'jit'` blocks
Also remove `variants: {}` since they are not useful in `JIT` mode
anymore.
* drop unused dependencies
* rename `purge` to `content`
* remove static CDN builds
* mark `--purge` as deprecated in the CLI
This will still work, but a warning will be printed and it won't show up
in the `--help` output.
* cleanup nesting plugin
We don't have to duplicate it anymore since there is no PostCSS 7
version anymore.
* make sure integration tests run in band
* cleanup folder structure
* make sure nesting folder is available
* simplify resolving of purge/content information
2021-09-01 17:13:59 +02:00
|
|
|
Object.entries(theme(themeKey) ?? {}).filter(([modifier]) => modifier !== 'DEFAULT')
|
2021-05-05 15:23:32 +02:00
|
|
|
)
|
|
|
|
|
: theme(themeKey),
|
|
|
|
|
}
|
|
|
|
|
)
|
2021-04-30 16:58:40 +02:00
|
|
|
}
|
2019-12-22 15:25:34 -05:00
|
|
|
}
|
|
|
|
|
}
|