aliaset
Version:
twind monorepo
124 lines (108 loc) • 3.42 kB
text/typescript
import { assert, test, afterEach } from 'vitest'
import { twind, virtual, colorFromTheme, fromTheme, shortcut, 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('comments', () => {
assert.strictEqual(
shortcut`
underline
/* multi
line
comment
*/
hover:focus:!(
sm:(italic why)
lg:-(px)
-mx-1
)
${false} ${undefined} ${null} ${''}
/* Position */
!top-1 !-bottom-${2} mx-${0}
text-(xl black)
`,
'~(underline,hover:focus:sm:!italic,hover:focus:sm:!why,hover:focus:lg:!-px,hover:focus:!-mx-1,!top-1,!-bottom-2,mx-0,text-xl,text-black)',
)
})
test('named shortcuts', () => {
assert.strictEqual(shortcut.PrimaryButton`bg-red-500 text-white`, 'PrimaryButton#1wkjmel')
assert.strictEqual(shortcut['red-link']`bg-red-500 text-white`, 'red-link#1me8bge')
assert.deepEqual(tw.target, [])
assert.strictEqual(
tw(cx(shortcut.PrimaryButton`bg-orange-500 text-white`, 'text-sm')),
'PrimaryButton#12852aj text-sm',
)
assert.deepEqual(tw.target, [
'.PrimaryButton\\#12852aj{--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}',
])
tw.clear()
assert.strictEqual(
tw(`text-sm hover:${shortcut.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}',
])
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}',
])
})