aliaset
Version:
twind monorepo
117 lines (100 loc) • 3.4 kB
text/typescript
import { assert, test, afterEach } from 'vitest'
import { twind, virtual, colorFromTheme, fromTheme, apply, cx } from '..'
const tw = twind(
{
theme: {
screens: {
sm: '640px',
md: '768px',
lg: '1024px',
},
spacing: {
none: 'none',
full: '100%',
sm: '1rem',
base: '1.2rem',
md: '1.5rem',
lg: '2rem',
xl: '3rem',
0: '0px',
'1': '.25rem',
'0.5': '0.5rem',
'2': '1rem',
'2.5': '1.125rem',
'6': '1.5rem',
'9': '2.5rem',
'12': '3rem',
},
colors: {
transparent: 'transparent',
white: '#fff',
gray: {
100: '#f3f4f6',
500: '#6b7280',
900: '#111827',
},
orange: {
100: '#ffedd5',
500: '#f97316',
900: '#7c2d12',
},
},
},
rules: [
['h-', fromTheme('spacing', 'height')],
['p-', fromTheme('spacing', 'padding')],
['top-', fromTheme('spacing', 'top')],
['text-', fromTheme('spacing', 'font-size')],
['text-', colorFromTheme({ section: 'colors', property: 'color' })],
['bg-', colorFromTheme({ section: 'colors', property: 'background-color' })],
['border-', colorFromTheme({ section: 'colors', property: 'border-color' })],
['rounded-', fromTheme('spacing', 'borderRadius')],
],
},
virtual(),
)
afterEach(() => tw.clear())
test('keeps order as declared', () => {
// reference using shortcut
assert.strictEqual(tw('~(text-2 text-0 h-1)'), '~(text-2,text-0,h-1)')
assert.deepEqual(tw.target, [
'.\\~\\(text-2\\,text-0\\,h-1\\){height:.25rem;font-size:0px;font-size:1rem}',
])
tw.clear()
assert.strictEqual(tw('@(text-2 text-0 h-1)'), '@(text-2,text-0,h-1)')
assert.deepEqual(tw.target, [
'.\\@\\(text-2\\,text-0\\,h-1\\){font-size:1rem;font-size:0px;height:.25rem}',
])
tw.clear()
})
test('named apply', () => {
assert.strictEqual(apply.PrimaryButton`bg-red-500 text-white`, 'PrimaryButton#1athxj9')
assert.strictEqual(apply['red-link']`bg-red-500 text-white`, 'red-link#pribq7')
assert.deepEqual(tw.target, [])
assert.strictEqual(
tw(cx(apply.PrimaryButton`bg-orange-500 text-white`, 'text-sm')),
'PrimaryButton#176yabo text-sm',
)
assert.deepEqual(tw.target, [
'.PrimaryButton\\#176yabo{--tw-bg-opacity:1;background-color:rgba(249,115,22,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
'.text-sm{font-size:1rem}',
])
tw.clear()
assert.strictEqual(
tw(`text-sm hover:${apply.PrimaryButton`bg-orange-500 text-white`}`),
'hover:PrimaryButton#176yabo text-sm',
)
assert.deepEqual(tw.target, [
'.hover\\:PrimaryButton\\#176yabo:hover{--tw-bg-opacity:1;background-color:rgba(249,115,22,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
'.text-sm{font-size:1rem}',
])
tw.clear()
assert.strictEqual(
tw(`text-sm hover:PrimaryButton~(bg-orange-500 text-white)`),
'hover:PrimaryButton#12852aj text-sm',
)
assert.deepEqual(tw.target, [
'.hover\\:PrimaryButton\\#12852aj:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(249,115,22,var(--tw-bg-opacity))}',
'.text-sm{font-size:1rem}',
])
})