consecteturquia
Version:
543 lines (494 loc) • 23 kB
text/typescript
import { assert, test, afterEach } from 'vitest'
import { twind, virtual, style, colorFromTheme, fromTheme, shortcut, css, tx as tx$ } 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('basic style', () => {
const component = style({
label: 'button',
// base: '',
defaults: {
color: 'orange',
},
props: {
color: {
orange: `bg-orange-900 text-orange-100 hover:text-white`,
gray: `bg-gray-900 text-gray-100 hover:bg-gray-500`,
},
size: {
small: `text-sm h-sm p-sm`,
large: `text-lg h-lg p-lg`,
},
outlined: {
true: '',
},
},
when: [
[
{ color: 'orange', outlined: true },
`border-orange-500 bg-orange-100 text-orange-500 hover:text-orange-900`,
],
[
{ color: 'gray', outlined: true },
`border-gray-500 bg-gray-100 text-gray-500 hover:text-gray-900`,
],
// [
// { outlined: true },
// ({ color }) =>
// typeof color == 'string' &&
// `border-${color}-500 bg-${color}-100 text-${color}-500 hover:text-${color}-900`,
// ],
],
})
assert.strictEqual(component.selector, '.button\\#p8xtwh')
assert.strictEqual(component.className, 'button#p8xtwh')
assert.deepEqual(tw.target, [])
// Renders a component with the default variant applied
assert.strictEqual(tw(component()), 'button#p8xtwh button--color-orange#p8xtwh')
assert.deepEqual(tw.target, [
'.button--color-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}',
'.button--color-orange\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: 'gray', size: 'large', outlined: true })),
'button#p8xtwh button--color-gray#p8xtwh button--size-large#p8xtwh button-1--color-gray_outlined-true#p8xtwh',
)
assert.deepEqual(tw.target, [
'.button--color-gray\\#p8xtwh{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.button--size-large\\#p8xtwh{height:2rem;padding:2rem;font-size:2rem}',
'.button--color-gray\\#p8xtwh:hover{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'.button-1--color-gray_outlined-true\\#p8xtwh{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity));--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity))}',
'.button-1--color-gray_outlined-true\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: 'orange', size: 'small', outlined: true })),
'button#p8xtwh button--color-orange#p8xtwh button--size-small#p8xtwh button-0--color-orange_outlined-true#p8xtwh',
)
assert.deepEqual(tw.target, [
'.button--color-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}',
'.button--size-small\\#p8xtwh{height:1rem;padding:1rem;font-size:1rem}',
'.button--color-orange\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
'.button-0--color-orange_outlined-true\\#p8xtwh{--tw-text-opacity:1;color:rgba(249,115,22,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(255,237,213,var(--tw-bg-opacity));--tw-border-opacity:1;border-color:rgba(249,115,22,var(--tw-border-opacity))}',
'.button-0--color-orange_outlined-true\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(124,45,18,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: 'orange', size: 'small', outlined: false })),
'button#p8xtwh button--color-orange#p8xtwh button--size-small#p8xtwh',
)
assert.deepEqual(tw.target, [
'.button--color-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}',
'.button--size-small\\#p8xtwh{height:1rem;padding:1rem;font-size:1rem}',
'.button--color-orange\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: { _: 'gray', lg: 'orange' } })),
'button#p8xtwh button--color-@_-gray@lg-orange#p8xtwh',
)
assert.deepEqual(tw.target, [
'.button--color-\\@_-gray\\@lg-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.button--color-\\@_-gray\\@lg-orange\\#p8xtwh:hover{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'@media (min-width:1024px){.button--color-\\@_-gray\\@lg-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}}',
'@media (min-width:1024px){.button--color-\\@_-gray\\@lg-orange\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}',
])
tw.clear()
// ignore inline responsive breakpoints for now
assert.strictEqual(
tw(component({ color: { _: 'gray', lg: 'orange' }, outlined: true })),
'button#p8xtwh button--color-@_-gray@lg-orange#p8xtwh',
)
assert.deepEqual(tw.target, [
'.button--color-\\@_-gray\\@lg-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.button--color-\\@_-gray\\@lg-orange\\#p8xtwh:hover{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'@media (min-width:1024px){.button--color-\\@_-gray\\@lg-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}}',
'@media (min-width:1024px){.button--color-\\@_-gray\\@lg-orange\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}',
])
tw.clear()
assert.strictEqual(
tw(`sm:(${component({ outlined: true })})`),
'sm:button#p8xtwh sm:button--color-orange#p8xtwh sm:button-0--color-orange_outlined-true#p8xtwh',
)
assert.deepEqual(tw.target, [
'@media (min-width:640px){.sm\\:button--color-orange\\#p8xtwh{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}}',
'@media (min-width:640px){.sm\\:button--color-orange\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}',
'@media (min-width:640px){.sm\\:button-0--color-orange_outlined-true\\#p8xtwh{--tw-text-opacity:1;color:rgba(249,115,22,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(255,237,213,var(--tw-bg-opacity));--tw-border-opacity:1;border-color:rgba(249,115,22,var(--tw-border-opacity))}}',
'@media (min-width:640px){.sm\\:button-0--color-orange_outlined-true\\#p8xtwh:hover{--tw-text-opacity:1;color:rgba(124,45,18,var(--tw-text-opacity))}}',
])
tw.clear()
})
test('without a label', () => {
const component = style({
base: 'p-1',
defaults: {
color: 'orange',
},
props: {
color: {
orange: `bg-orange-900 text-orange-100 hover:text-white`,
gray: `bg-gray-900 text-gray-100 hover:bg-gray-500`,
},
size: {
small: `text-sm h-sm p-sm`,
large: `text-lg h-lg p-lg`,
},
outlined: {
true: '',
},
},
when: [
[
{ color: 'orange', outlined: true },
`border-orange-500 bg-orange-100 text-orange-500 hover:text-orange-900`,
],
[
{ color: 'gray', outlined: true },
`border-gray-500 bg-gray-100 text-gray-500 hover:text-gray-900`,
],
// [
// { outlined: true },
// ({ color }) =>
// typeof color == 'string' &&
// `border-${color}-500 bg-${color}-100 text-${color}-500 hover:text-${color}-900`,
// ],
],
})
assert.strictEqual(component.selector, '.style\\#4f78gw')
assert.strictEqual(component.className, 'style#4f78gw')
assert.deepEqual(tw.target, [])
// Renders a component with the default variant applied
assert.strictEqual(tw(component()), 'style#4f78gw style--color-orange#4f78gw')
assert.deepEqual(tw.target, [
'.style\\#4f78gw{padding:.25rem}',
'.style--color-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}',
'.style--color-orange\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: 'gray', size: 'large', outlined: true })),
'style#4f78gw style--color-gray#4f78gw style--size-large#4f78gw style-1--color-gray_outlined-true#4f78gw',
)
assert.deepEqual(tw.target, [
'.style\\#4f78gw{padding:.25rem}',
'.style--color-gray\\#4f78gw{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.style--size-large\\#4f78gw{height:2rem;padding:2rem;font-size:2rem}',
'.style--color-gray\\#4f78gw:hover{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'.style-1--color-gray_outlined-true\\#4f78gw{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity));--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity))}',
'.style-1--color-gray_outlined-true\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: 'orange', size: 'small', outlined: true })),
'style#4f78gw style--color-orange#4f78gw style--size-small#4f78gw style-0--color-orange_outlined-true#4f78gw',
)
assert.deepEqual(tw.target, [
'.style\\#4f78gw{padding:.25rem}',
'.style--color-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}',
'.style--size-small\\#4f78gw{height:1rem;padding:1rem;font-size:1rem}',
'.style--color-orange\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
'.style-0--color-orange_outlined-true\\#4f78gw{--tw-text-opacity:1;color:rgba(249,115,22,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(255,237,213,var(--tw-bg-opacity));--tw-border-opacity:1;border-color:rgba(249,115,22,var(--tw-border-opacity))}',
'.style-0--color-orange_outlined-true\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(124,45,18,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: 'orange', size: 'small', outlined: false })),
'style#4f78gw style--color-orange#4f78gw style--size-small#4f78gw',
)
assert.deepEqual(tw.target, [
'.style\\#4f78gw{padding:.25rem}',
'.style--color-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}',
'.style--size-small\\#4f78gw{height:1rem;padding:1rem;font-size:1rem}',
'.style--color-orange\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(component({ color: { _: 'gray', lg: 'orange' } })),
'style#4f78gw style--color-@_-gray@lg-orange#4f78gw',
)
assert.deepEqual(tw.target, [
'.style\\#4f78gw{padding:.25rem}',
'.style--color-\\@_-gray\\@lg-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.style--color-\\@_-gray\\@lg-orange\\#4f78gw:hover{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'@media (min-width:1024px){.style--color-\\@_-gray\\@lg-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}}',
'@media (min-width:1024px){.style--color-\\@_-gray\\@lg-orange\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}',
])
tw.clear()
// ignore inline responsive breakpoints for now
assert.strictEqual(
tw(component({ color: { _: 'gray', lg: 'orange' }, outlined: true })),
'style#4f78gw style--color-@_-gray@lg-orange#4f78gw',
)
assert.deepEqual(tw.target, [
'.style\\#4f78gw{padding:.25rem}',
'.style--color-\\@_-gray\\@lg-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.style--color-\\@_-gray\\@lg-orange\\#4f78gw:hover{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'@media (min-width:1024px){.style--color-\\@_-gray\\@lg-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}}',
'@media (min-width:1024px){.style--color-\\@_-gray\\@lg-orange\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}',
])
tw.clear()
assert.strictEqual(
tw(`sm:(${component({ outlined: true })})`),
'sm:style#4f78gw sm:style--color-orange#4f78gw sm:style-0--color-orange_outlined-true#4f78gw',
)
assert.deepEqual(tw.target, [
'@media (min-width:640px){.sm\\:style\\#4f78gw{padding:.25rem}}',
'@media (min-width:640px){.sm\\:style--color-orange\\#4f78gw{--tw-text-opacity:1;color:rgba(255,237,213,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(124,45,18,var(--tw-bg-opacity))}}',
'@media (min-width:640px){.sm\\:style--color-orange\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}',
'@media (min-width:640px){.sm\\:style-0--color-orange_outlined-true\\#4f78gw{--tw-text-opacity:1;color:rgba(249,115,22,var(--tw-text-opacity));--tw-bg-opacity:1;background-color:rgba(255,237,213,var(--tw-bg-opacity));--tw-border-opacity:1;border-color:rgba(249,115,22,var(--tw-border-opacity))}}',
'@media (min-width:640px){.sm\\:style-0--color-orange_outlined-true\\#4f78gw:hover{--tw-text-opacity:1;color:rgba(124,45,18,var(--tw-text-opacity))}}',
])
tw.clear()
})
test('mixing string, apply, css and object', () => {
const button = style({
base: 'p-sm',
props: {
size: {
sm: 'text-sm h-6',
base: shortcut`text-base h-9`,
large: css`
font-size: 3rem;
height: theme('spacing.12');
`,
},
variant: {
gray: css({
backgroundColor: `theme('colors.gray.500')`,
'&:hover': {
backgroundColor: `theme('colors.gray.900')`,
},
}),
primary: `
text-white bg-orange-500
hover:bg-orange-900
`,
},
outlined: {
true: 'border-gray-100',
},
},
defaults: {
variant: 'gray',
size: 'sm',
},
when: [
[
{
variant: 'gray',
outlined: true,
},
shortcut`border-gray-500`,
],
],
})
assert.strictEqual(
tw(button()),
'style#1ryoj5q style--size-sm#1ryoj5q style--variant-gray#1ryoj5q',
)
assert.deepEqual(tw.target, [
'.style\\#1ryoj5q{padding:1rem}',
'.style--size-sm\\#1ryoj5q{height:1.5rem;font-size:1rem}',
'.style--variant-gray\\#1ryoj5q{background-color:#6b7280}',
'.style--variant-gray\\#1ryoj5q:hover{background-color:#111827}',
])
tw.clear()
const tx = tx$.bind(tw)
assert.strictEqual(
tx(
css`
color: darkgreen;
`,
button({ outlined: true }),
'text-sm',
shortcut('text-6'),
),
'style#1ryoj5q style--outlined-true#1ryoj5q style--size-sm#1ryoj5q style--variant-gray#1ryoj5q style-0--variant-gray_outlined-true#1ryoj5q ~(text-6) text-sm css#wvzpmg',
)
assert.deepEqual(tw.target, [
'.style\\#1ryoj5q{padding:1rem}',
'.style--outlined-true\\#1ryoj5q{--tw-border-opacity:1;border-color:rgba(243,244,246,var(--tw-border-opacity))}',
'.style--size-sm\\#1ryoj5q{height:1.5rem;font-size:1rem}',
'.style--variant-gray\\#1ryoj5q{background-color:#6b7280}',
'.style--variant-gray\\#1ryoj5q:hover{background-color:#111827}',
'.style-0--variant-gray_outlined-true\\#1ryoj5q{--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity))}',
'.\\~\\(text-6\\){font-size:1.5rem}',
'.text-sm{font-size:1rem}',
'.css\\#wvzpmg{color:darkgreen}',
])
})
test('with a Base component', () => {
const button = style({
label: 'button',
base: `p-2.5`,
defaults: {
variant: 'gray',
size: 'sm',
},
props: {
size: {
sm: `text-sm h-6`,
base: `text-base h-9`,
},
variant: {
gray: `
bg-gray-500
hover:bg-gray-900
`,
primary: `
text-white bg-orange-500
hover:bg-orange-900
`,
},
outlined: {
true: `bg-transparent border-gray-500`,
},
},
when: [
[
{
variant: 'gray',
outlined: true,
},
`border-gray-900`,
],
],
})
const extendedButton = style(button, {
label: 'extended',
base: `p-1`,
props: {
size: {
base: `text-md`,
xl: `text-xl h-12`,
},
rounded: {
true: 'rounded-full',
false: `rounded-none`,
sm: 'rounded-sm',
md: 'rounded-md',
},
},
defaults: {
size: 'base',
rounded: true,
},
when: [
[
{
variant: 'gray',
rounded: true,
},
`border-gray-500`,
],
],
})
assert.strictEqual(
tw(extendedButton({ rounded: true, size: 'xl' })),
'button#yog38i button~extended#1abui02 button--variant-gray#yog38i button~extended--rounded-true#1abui02 button~extended--size-xl#1abui02 button~extended-0--variant-gray_rounded-true#1abui02',
)
assert.deepEqual(tw.target, [
'.button\\#yog38i{padding:1.125rem}',
'.button\\~extended\\#1abui02{padding:.25rem}',
'.button--variant-gray\\#yog38i{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'.button\\~extended--rounded-true\\#1abui02{border-radius:100%}',
'.button\\~extended--size-xl\\#1abui02{height:3rem;font-size:3rem}',
'.button--variant-gray\\#yog38i:hover{--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.button\\~extended-0--variant-gray_rounded-true\\#1abui02{--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(extendedButton({ rounded: true, outlined: true })),
'button#yog38i button~extended#1abui02 button--outlined-true#yog38i button--size-base#yog38i button--variant-gray#yog38i button~extended--rounded-true#1abui02 button~extended--size-base#1abui02 button-0--variant-gray_outlined-true#yog38i button~extended-0--variant-gray_rounded-true#1abui02',
)
assert.deepEqual(tw.target, [
'.button\\#yog38i{padding:1.125rem}',
'.button\\~extended\\#1abui02{padding:.25rem}',
'.button--outlined-true\\#yog38i{--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity));background-color:transparent}',
'.button--size-base\\#yog38i{height:2.5rem;font-size:1.2rem}',
'.button--variant-gray\\#yog38i{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'.button\\~extended--rounded-true\\#1abui02{border-radius:100%}',
'.button\\~extended--size-base\\#1abui02{font-size:1.5rem}',
'.button--variant-gray\\#yog38i:hover{--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
'.button-0--variant-gray_outlined-true\\#yog38i{--tw-border-opacity:1;border-color:rgba(17,24,39,var(--tw-border-opacity))}',
'.button\\~extended-0--variant-gray_rounded-true\\#1abui02{--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity))}',
])
tw.clear()
assert.strictEqual(
tw(extendedButton({ rounded: 'sm' })),
'button#yog38i button~extended#1abui02 button--size-base#yog38i button--variant-gray#yog38i button~extended--rounded-sm#1abui02 button~extended--size-base#1abui02',
)
assert.deepEqual(tw.target, [
'.button\\#yog38i{padding:1.125rem}',
'.button\\~extended\\#1abui02{padding:.25rem}',
'.button--size-base\\#yog38i{height:2.5rem;font-size:1.2rem}',
'.button--variant-gray\\#yog38i{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}',
'.button\\~extended--rounded-sm\\#1abui02{border-radius:1rem}',
'.button\\~extended--size-base\\#1abui02{font-size:1.5rem}',
'.button--variant-gray\\#yog38i:hover{--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}',
])
})
test('is added to component layer', () => {
const component = style({
base: 'top-2',
})
assert.deepEqual(tw.target, [])
assert.strictEqual(tw(`p-2 ${component()} top-1`), 'style#1lg9g8g p-2 top-1')
assert.deepEqual(tw.target, [
'.style\\#1lg9g8g{top:1rem}',
'.p-2{padding:1rem}',
'.top-1{top:.25rem}',
])
})