consecteturquia
Version:
180 lines (151 loc) • 3.65 kB
text/typescript
import { assert, test, afterEach } from 'vitest'
import presetTailwind from '@twind/preset-tailwind'
import { setup, twind, virtual, tw, keyframes, css } from '..'
setup({
presets: [presetTailwind({ disablePreflight: true })],
})
afterEach(() => tw.clear())
test('keyframes are lazy injected', () => {
const fadeIn = keyframes`
0% {
opacity: 0;
}
100% {
opacity: 1;
}
`
assert.lengthOf(tw.target as string[], 0)
assert.strictEqual(
tw(
css`
animation: 1s ${fadeIn} ease-out;
`,
),
'css#1h96eou',
)
assert.deepEqual(tw.target, [
'/*!0,0*/@keyframes \\#1b0mdne{0%{opacity:0}100%{opacity:1}}',
'/*!fjd9fk,v,css#1h96eou*/.css\\#1h96eou{animation:1s \\#1b0mdne ease-out}',
])
tw.clear()
assert.strictEqual(tw(`animate-[1s_${fadeIn}_ease-out]`), 'animate-[1s_\\#1b0mdne_ease-out]')
assert.deepEqual(tw.target, [
'/*!0,0*/@keyframes \\#1b0mdne{0%{opacity:0}100%{opacity:1}}',
'/*!dbgidc,v,animate-[1s_\\#1b0mdne_ease-out]*/.animate-\\[1s_\\\\\\#1b0mdne_ease-out\\]{animation:1s \\#1b0mdne ease-out}',
])
})
test('bound keyframes are lazy injected', () => {
const tw$ = twind(
{
presets: [presetTailwind({ disablePreflight: true })],
},
virtual(),
)
const keyframes$ = keyframes.bind(tw$)
const fadeIn = keyframes$`
0% {
opacity: 0;
}
100% {
opacity: 1;
}
`
assert.lengthOf(tw$.target, 0)
assert.strictEqual(
tw$(
css`
animation: 1s ${fadeIn} ease-out;
`,
),
'css#1h96eou',
)
assert.deepEqual(tw$.target, [
'@keyframes \\#1b0mdne{0%{opacity:0}100%{opacity:1}}',
'.css\\#1h96eou{animation:1s \\#1b0mdne ease-out}',
])
assert.lengthOf(tw.target as string[], 0)
})
test('named keyframes', () => {
const fadeIn = keyframes.FadeIn({
'0%': {
opacity: '0',
},
'100%': {
opacity: '1',
},
})
assert.lengthOf(tw.target as string[], 0)
assert.strictEqual(
tw(
css({
animation: `1s ${fadeIn} ease-out`,
}),
),
'css#e7l0t2',
)
assert.deepEqual(tw.target, [
'/*!0,0*/@keyframes FadeIn\\#37blcs{0%{opacity:0}100%{opacity:1}}',
'/*!fjd9fk,v,css#e7l0t2*/.css\\#e7l0t2{animation:1s FadeIn\\#37blcs ease-out}',
])
})
test('bound named keyframes', () => {
const tw$ = twind(
{
presets: [presetTailwind({ disablePreflight: true })],
},
virtual(),
)
const keyframes$ = keyframes.bind(tw$)
const fadeIn = keyframes$.FadeIn`
0% {
opacity: 0;
}
100% {
opacity: 1;
}
`
assert.lengthOf(tw$.target, 0)
assert.strictEqual(
tw$(
css`
animation: 1s ${fadeIn} ease-out;
`,
),
'css#exvsdi',
)
assert.deepEqual(tw$.target, [
'@keyframes FadeIn\\#zobdkg{0%{opacity:0}100%{opacity:1}}',
'.css\\#exvsdi{animation:1s FadeIn\\#zobdkg ease-out}',
])
assert.lengthOf(tw.target as string[], 0)
})
test('keyframes proxy passthrough', () => {
const str = '0% {opacity: 0;}'
assert.strictEqual(keyframes(str).toString(), '\\#66k1rx')
assert.strictEqual(keyframes.func(str).toString(), 'func\\#3ais1h')
assert.strictEqual(keyframes.toString().replace(/[\s]/g, ''), 'function(){[nativecode]}')
const k = keyframes.bind(tw) // (otherwise, 'active' will be undefined))
assert.strictEqual(
k`
0% {
opacity: 0;
}
100% {
opacity: 1;
}
`.toString(),
'\\#1b0mdne',
)
assert.strictEqual(
k.func`
0% {
opacity: 0;
}
100% {
opacity: 1;
}
`.toString(),
'func\\#ydo9qy',
)
assert.strictEqual(k.toString().replace(/[\s]/g, ''), 'function(){[nativecode]}')
})