275 Commits

Author SHA1 Message Date
Robin Malfait
45c69be580
update changelog 2021-12-15 10:22:20 +01:00
Simon J
a7263a8f6f
Add support for negative values in safelist patterns (#6480)
Co-authored-by: Simon Jarrett <simon.jarrett@churchmissionsociety.org>
2021-12-14 15:55:26 -05:00
Jordan Pittman
4041d04b89
Move defaults to their own always-on layer (#6500)
Default's declarations are now processed and merged even when there is no tailwind base directive included in the stylesheet. Without this applying tailwind utilities in css modules would break if they relied on defaults rules.

Co-authored-by: Robin Malfait <malfait.robin@gmail.com>
2021-12-14 12:21:38 -05:00
Jordan Pittman
47e8556e3b
Add standalone tailwindcss CLI (#6506)
* Move standalone CLI into main repo

* Update release tag

* Update workflow

* Ignore standalone CLI tests

* Fix style

* Update changelog [ci skip]
2021-12-14 18:12:06 +01:00
Jonathan Reinink
0ddbb36c85
Update changelog 2021-12-13 21:30:10 -05:00
Adam Wathan
27c2c72b13
Update CHANGELOG.md 2021-12-13 16:05:24 -05:00
Jordan Pittman
399440eef1
Don't output unparsable values (#6469) 2021-12-13 12:39:17 -05:00
Robin Malfait
4b2482ff35
Warn about invalid globs in content (#6449)
* rewrite invalid globs if we can

* warn instead of rewrite

* update changelog
2021-12-13 16:00:31 +01:00
Robin Malfait
60ee7bbf52
update changelog 2021-12-13 15:43:08 +01:00
Robin Malfait
860c61cd61
temporarily disable optimize universal defaults (#6461)
* temporarily disable optimize universal defaults

* update changelog
2021-12-13 15:39:18 +01:00
Adam Wathan
8a4b2f0627 Update version 2021-12-10 20:28:26 -05:00
Jordan Pittman
429fe07a5f
Fix defaults optimization when vendor prefixes are involved (#6369) 2021-12-10 10:45:33 -05:00
Robin Malfait
08241c3f75
Detect circular dependencies when using @apply (#6365)
* detect circular dependencies when using `@apply`

* update changelog

* ensure we split by the separator
2021-12-10 16:08:45 +01:00
Robin Malfait
b399e8db90
Add default interop to public available functions (#6348)
* add `default` interop to public available functions

* update changelog
2021-12-10 11:25:10 +01:00
Robin Malfait
81f52a24f4
Ensure complex variants with multiple classes work (#6311)
* ensure complex variants with multiple classes work

* update changelog
2021-12-10 10:57:40 +01:00
Robin Malfait
c8b1543401
update changelog 2021-12-09 17:23:56 +01:00
Robin Malfait
4c224225f4
add missing changelog item 2021-12-09 16:43:18 +01:00
Adam Wathan
e6e24b8519
Update CHANGELOG.md 2021-12-08 19:42:25 -05:00
Robin Malfait
36357786bf
Partially revert tuple syntax PR for screens: #6104 (#6289)
* partially revert tuple syntax PR for `screens`: #6104

* update changelog
2021-12-07 18:49:40 +01:00
Robin Malfait
b857d80e94
Ensure that we test every value for the length datatype (#6283)
* ensure that we test every value for the `length` datatype

* update changelog
2021-12-06 20:19:45 +01:00
Adam Wathan
e2d5f214e2 Update changelog 2021-12-06 11:38:38 -05:00
Adam Wathan
31b5540c02 Update changelog 2021-12-06 11:37:35 -05:00
Robin Malfait
ea139f20a2
Improve [0] arbitrary value support (#6259)
* test `text-[0]` instead of `w-[0]`

* update changelog
2021-12-03 19:23:01 +01:00
Robin Malfait
078186a1ef
Add css functions to data types (#6258)
* update changelog

* add tests to verify that `w-[0]` works

* ensure that `min`, `max` and `clamp` also work with arbitrary values

* update changelog
2021-12-03 18:15:03 +01:00
Jonathan Reinink
89c7f7d094 Update changelog 2021-12-01 06:16:36 -05:00
Robin Malfait
a41c4ec704
update changelog 2021-11-29 16:36:32 +01:00
Adam Wathan
b5802a3f72 Update changelog 2021-11-24 12:14:51 -05:00
Adam Wathan
a1bc20385d Update changelog 2021-11-23 15:21:47 -05:00
Adam Wathan
463777f0c8 Update changelog 2021-11-23 15:21:06 -05:00
Adam Wathan
d261531e2a
Add support for arbitrary properties (#6161)
* Basic implementation + some failing tests for edge cases

* Use asClass instead of nameClass

* Solve edge cases around content with colons

* Avoid duplicating work when parsing arbitrary properties

* Update changelog
2021-11-22 12:38:37 -05:00
Robin Malfait
56c1646300
Revert "Add ::file-selector-button reset (#6125)"
This reverts commit f94a117500266a8f5e9cfec3b03db81493b1b047.
2021-11-18 17:29:12 +01:00
Robin Malfait
f94a117500
Add ::file-selector-button reset (#6125)
* add ::file-selector-button reset

Otherwise you have to apply `file:border-solid` which you don't have to
do for other elements with borders.

See: https://play.tailwindcss.com/EvtdftCPt6

* update changelog
2021-11-18 14:25:19 +01:00
Robin Malfait
03f9de9008
Add combinable touch-action support (#6115)
* add combinable `touch-action` support

* update changelog
2021-11-17 16:04:13 +01:00
Robin Malfait
ef325ea35b
Add tuple syntax to guarantee screens order (#6104)
* add normalizeScreens function

This will allow us to normalize the various kinds of inputs to a stable
version that is consistent regardless of the input.

* use normalized screens

* add dedicated test for new tuple syntax

* make test consistent with other tests

While working on the normalizeScreens feature, some tests started
failing (the one with multiple screens), while looking at them I made
them consistent with the rest of the codebase.

* add test to ensure consistent order in screens output

* update changelog

* Update CHANGELOG.md

* Update CHANGELOG.md

Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
2021-11-16 18:01:06 +01:00
Robin Malfait
6c4b86d438
Add placeholder variant (#6106)
* add `placeholder` variant

* update changelog
2021-11-16 15:33:30 +01:00
Robin Malfait
a3579bcf2f
Enforce the order of pseudo elements (#6018)
* enforce the order of some variants

* update changelog

* use better algorithm
2021-11-12 16:38:03 +01:00
Adam Wathan
df7e71c262 Update changelog 2021-11-08 11:48:34 -05:00
Adam Wathan
79e3e098d2 Update changelog 2021-11-04 13:28:48 -04:00
Adam Wathan
d41a739186 Update changelog 2021-11-04 10:16:46 -04:00
Adam Wathan
12aa51d61d Update changelog 2021-11-03 10:53:12 -04:00
Robin Malfait
ec1f7b0349
update changelog 2021-10-29 13:43:17 +02:00
Robin Malfait
d6301bd31b
update changelog 2021-10-29 12:19:42 +02:00
Robin Malfait
5058275f3b
Handle color transformations properly with theme(...) for all relevant plugins (#5871)
* call function for colors that are not in colors

* add all color related thingies

* transformThemeValue in a very verbose way

* handle functions by default

* cleanup, make sure we handle functions everywhere

* update changelog

Co-authored-by: Bill Criswell <bill_criswell@comcast.com>
2021-10-25 12:17:14 +02:00
Robin Malfait
ee3f3fd0be
Ensure comments in @layer rules don't crash (#5854)
* ensure comments in @layer rules don't crash

* update changelog
2021-10-22 15:19:21 +02:00
Robin Malfait
0ab39c312a
Allow _ inside url() when using arbitrary values (#5853)
* allow for underscores in url()

* update changelog
2021-10-22 14:43:46 +02:00
Robin Malfait
ea6f14a499
Dedupe duplicate properties (#5830)
* add `collapseDuplicateDeclarations`

This will allow us to remove duplicate declarations. This occurs when
you are using `@apply` for example.

The reason I implemented it as a separate step, is because this doesn't
only happen for `@apply`, but it also happens if you do something like:

```js
addComponents({ '.btn-blue, .btm-red': { padding: '10px' } })
```

So instead of tracking down every place this is happening, it now
happens at the very end.

* use new plugin in processTailwindFeatures

* add/update tests by removing duplicate declarations

* update changelog
2021-10-21 11:54:23 +02:00
Robin Malfait
0c2f1a6472
Remove prefix as a function (#5829)
* mark `prefix` as a function as a breaking change

* remove `prefix` as a function related code

* remove `prefix` as a function related tests

* update changelog
2021-10-19 15:22:49 +02:00
Robin Malfait
36c880abab
Improve before and after variants (#5820)
* remove unused `withRule`

* ensure all ::before and ::after elements have content

* update --tw-content for the content plugin

* simplify `before` and `after` variants

* update tests, to reflect changes

* make new `format` and `wrap` API's private for now

* allow returning a format string from `addVariant` callback

* add `content: var(--tw-content)` for before/after variants

* update tests to add `content: var(--tw-content)`

* update changelog
2021-10-18 18:11:34 +02:00
Robin Malfait
5809c4d07c
Improve addVariant API (#5809)
* fix incorrect comment

Probably messed this up in another PR, so just a bit of cleaning.

* implement a formatVariantSelector function

This will be used to eventually simplify the addVariant API.

The idea is that it can take a list of strings that define a certain
format. Then it squashes everything to a single format how you would
expect it.

E.g.:

Input:
  - '&:hover'
  - '&:focus'
  - '.dark &'
  - ':merge(.group):hover &'
  - ':merge(.group):focus &'
Output:
  - ':merge(.group):focus:hover .dark &:focus:hover'

The API here is:
  - `&`, this means "The parent" or "The previous selector" (you can
    think of it like if you are using nested selectors)
  - `:merge(.group)`, this means insert a `.group` if it doesn't exist
    yet, but if it does exist already, then merge the new value with the
    old value. This allows us to merge group-focus, group-hover into a
    single `.group:focus:hover ...`

* add new `format`, `withRule` and `wrap` API for addVariant

* implement backwards compatibility

This will ensure that the backwards compatibility for `modifySelectors`
and direct mutations to the `container` will still work.

We will try to capture the changes made to the `rule.selector`, we will
also "backup" the existing selector. This allows us to diff the old and
new selectors and determine what actually happened.

Once we know this, we can restore the selector to the "old" selector and
add the diffed string e.g.: `.foo &`, to the `collectedFormats` as if
you called `format()` directly. This is a bunch of extra work, but it
allows us to be backwards compatible.

In the future we could also warn if you are using `modifySelectors`, but
it is going to be a little bit tricky, because usually that's
implemented by plugin authors and therefore you don't have direct
control over this. Maybe we can figure out the plugin this is used in
and change the warning somehow?

* fix incorrect test

This was clearly a bug, keyframes should not include escaped variants at
all. The reason this is here in the first place is because the nodes in
a keyframe are also "rule" nodes.

* swap the order of pseudo states

The current implementation had a strange side effect, that resulted in
incorrect class definitions. When you are combining the `:hover` and
`:focus` event, then there is no difference between `:hover:focus` and
`:focus:hover`.

However, when you use `:hover::file-selector-button` or `::file-selector-button:hover`,
then there is a big difference. In the first place, you can hover over the full file input
to apply changes to the `File selector button`.
In the second scenario you have to hover over the `File selector button` itself to apply changes.

You can think of it as function calls:
- focus(hover(text-center))

What you would expect is something like this:
`.focus\:hover\:text-center:hover:focus`, where `hover` is on the
inside, and `focus` is on the outside. However in the current
implementation this is implemented as
`.focus\:hover\:text-cener:focus:hover`

* add more variant tests for the new API

* update parallel variants tests to make use of new API

* implement core variants with new API

* simplify/cleanup existing plugin utils

We can get rid of this because we drastically simplified the new
addVariant API.

* add addVariant shorthand signature

The current API looks like this:

```js
addVariant('name', ({ format, wrap }) => {
  // Wrap in an atRule
  wrap(postcss.atRule({ name: 'media', params: '(prefers-reduced-motion: reduce)' }))

  // "Mutate" the selector, for example prepend `.dark`
  format('.dark &')
})
```

It is also pretty common to have this:
```js
addVariant('name', ({ format }) => format('.dark &'))
```
So we simplified this to:
```js
addVariant('name', '.dark &')
```

It is also pretty common to have this:
```js
addVariant('name', ({ wrap }) => wrap(postcss.atRule({ name: 'media', params: '(prefers-reduced-motion: reduce)' })))
```
So we simplified this to:
```js
addVariant('name', '@media (prefers-reduced-motion: reduce)')
```

* improve fontVariantNumeric implementation

We will use `@defaults`, so that only the resets are injected for the
utilities we actually use.

* fix typo

* allow for nested addVariant shorthand

This will allow to write something like:

```js
addVariant('name', `
  @supports (hover: hover) {
    @media (print) {
      &:hover
    }
  }
`)
// Or as a one-liner
addVariant('name', '@supports (hover: hover) { @media (print) { &:hover } }')
```

* update changelog
2021-10-18 11:26:11 +02:00
Brad Cornes
be36eba7cf Update changelog 2021-10-13 20:06:47 +01:00