mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2026-01-25 16:44:12 +00:00
This works around an issue in Chrome where `::selection` does not read from variables defined on `::selection` thus breaking all uses of color utilities with the selection variant. e.g. `selection::bg-red-200`. We now add a fallback value of `1` to all uses of `var(--tw-bg-opacity)`, `var(--tw-text-opacity)`, `var(--tw-border-opacity)`, etc… since Chrome treats the variable as if it did not exist because it's not defined on the parent. In Chrome 131 (until the change is rolled back) existing utilities like these will not work: - `selection:text-opacity-50` - `selection:[--tw-text-opacity:0.5]` Fixes #15000 --------- Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
130 lines
2.8 KiB
JavaScript
130 lines
2.8 KiB
JavaScript
import { run, html, css } from './util/run'
|
|
|
|
function customExtractor(content) {
|
|
let matches = content.match(/class="([^"]+)"/)
|
|
return matches ? matches[1].split(/\s+/) : []
|
|
}
|
|
|
|
let sharedHtml = html`
|
|
<div class="text-indigo-500 bg-white">hello world</div>
|
|
<span>text-red-500 shouldn't appear in the output</span>
|
|
`
|
|
|
|
let expected = css`
|
|
.bg-white {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
|
|
}
|
|
.text-indigo-500 {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(99 102 241 / var(--tw-text-opacity, 1));
|
|
}
|
|
`
|
|
|
|
describe('modern', () => {
|
|
test('extract.DEFAULT', () => {
|
|
let config = {
|
|
content: {
|
|
files: [{ raw: sharedHtml }],
|
|
extract: {
|
|
DEFAULT: customExtractor,
|
|
},
|
|
},
|
|
}
|
|
|
|
return run('@tailwind utilities', config).then((result) => {
|
|
expect(result.css).toMatchFormattedCss(expected)
|
|
})
|
|
})
|
|
|
|
test('extract.{extension}', () => {
|
|
let config = {
|
|
content: {
|
|
files: [{ raw: sharedHtml }],
|
|
extract: {
|
|
html: customExtractor,
|
|
},
|
|
},
|
|
}
|
|
|
|
return run('@tailwind utilities', config).then((result) => {
|
|
expect(result.css).toMatchFormattedCss(expected)
|
|
})
|
|
})
|
|
|
|
test('extract function', () => {
|
|
let config = {
|
|
content: {
|
|
files: [{ raw: sharedHtml }],
|
|
extract: customExtractor,
|
|
},
|
|
}
|
|
|
|
return run('@tailwind utilities', config).then((result) => {
|
|
expect(result.css).toMatchFormattedCss(expected)
|
|
})
|
|
})
|
|
|
|
test('raw content with extension', () => {
|
|
let config = {
|
|
content: {
|
|
files: [
|
|
{
|
|
raw: sharedHtml,
|
|
extension: 'html',
|
|
},
|
|
],
|
|
extract: {
|
|
html: () => ['invisible'],
|
|
},
|
|
},
|
|
corePlugins: { preflight: false },
|
|
}
|
|
|
|
return run('@tailwind utilities', config).then((result) => {
|
|
expect(result.css).toMatchFormattedCss(css`
|
|
.invisible {
|
|
visibility: hidden;
|
|
}
|
|
`)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('legacy', () => {
|
|
test('defaultExtractor', () => {
|
|
let config = {
|
|
content: {
|
|
files: [{ raw: sharedHtml }],
|
|
options: {
|
|
defaultExtractor: customExtractor,
|
|
},
|
|
},
|
|
}
|
|
|
|
return run('@tailwind utilities', config).then((result) => {
|
|
expect(result.css).toMatchFormattedCss(expected)
|
|
})
|
|
})
|
|
|
|
test('extractors array', () => {
|
|
let config = {
|
|
content: {
|
|
files: [{ raw: sharedHtml }],
|
|
options: {
|
|
extractors: [
|
|
{
|
|
extractor: customExtractor,
|
|
extensions: ['html'],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
}
|
|
|
|
return run('@tailwind utilities', config).then((result) => {
|
|
expect(result.css).toMatchFormattedCss(expected)
|
|
})
|
|
})
|
|
})
|