Skip to content

Commit b9cc668

Browse files
authored
Merge pull request #867 from tailwindcss/widen-negative-value-support
Support negative values for inset
2 parents 6bca026 + 8fb2351 commit b9cc668

File tree

6 files changed

+100
-26
lines changed

6 files changed

+100
-26
lines changed

__tests__/processPlugins.test.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,66 @@ test('plugins can create rules with escaped selectors', () => {
597597
`)
598598
})
599599

600+
test('plugins can create class names accounting for special naming rules easily', () => {
601+
const { components, utilities } = processPlugins(
602+
[
603+
function({ className, addUtilities }) {
604+
addUtilities({
605+
[className('rotate', '1/4')]: {
606+
transform: 'rotate(90deg)',
607+
},
608+
[className('rotate', '-1/4')]: {
609+
transform: 'rotate(-90deg)',
610+
},
611+
[className('rotate', 'default')]: {
612+
transform: 'rotate(180deg)',
613+
},
614+
})
615+
},
616+
],
617+
makeConfig()
618+
)
619+
620+
expect(components.length).toBe(0)
621+
expect(css(utilities)).toMatchCss(`
622+
@variants {
623+
.rotate-1\\/4 {
624+
transform: rotate(90deg)
625+
}
626+
.-rotate-1\\/4 {
627+
transform: rotate(-90deg)
628+
}
629+
.rotate {
630+
transform: rotate(180deg)
631+
}
632+
}
633+
`)
634+
})
635+
636+
test('the second parameter in className is optional', () => {
637+
const { components, utilities } = processPlugins(
638+
[
639+
function({ className, addUtilities }) {
640+
addUtilities({
641+
[className('rotate')]: {
642+
transform: 'rotate(180deg)',
643+
},
644+
})
645+
},
646+
],
647+
makeConfig()
648+
)
649+
650+
expect(components.length).toBe(0)
651+
expect(css(utilities)).toMatchCss(`
652+
@variants {
653+
.rotate {
654+
transform: rotate(180deg)
655+
}
656+
}
657+
`)
658+
})
659+
600660
test('plugins can access the current config', () => {
601661
const { components, utilities } = processPlugins(
602662
[

src/plugins/inset.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
import _ from 'lodash'
22

33
export default function() {
4-
return function({ addUtilities, e, theme, variants }) {
4+
return function({ addUtilities, className, theme, variants }) {
55
const generators = [
66
(size, modifier) => ({
7-
[`.${e(`inset-${modifier}`)}`]: {
7+
[className('inset', modifier)]: {
88
top: `${size}`,
99
right: `${size}`,
1010
bottom: `${size}`,
1111
left: `${size}`,
1212
},
1313
}),
1414
(size, modifier) => ({
15-
[`.${e(`inset-y-${modifier}`)}`]: { top: `${size}`, bottom: `${size}` },
16-
[`.${e(`inset-x-${modifier}`)}`]: { right: `${size}`, left: `${size}` },
15+
[className('inset-y', modifier)]: { top: `${size}`, bottom: `${size}` },
16+
[className('inset-x', modifier)]: { right: `${size}`, left: `${size}` },
1717
}),
1818
(size, modifier) => ({
19-
[`.${e(`top-${modifier}`)}`]: { top: `${size}` },
20-
[`.${e(`right-${modifier}`)}`]: { right: `${size}` },
21-
[`.${e(`bottom-${modifier}`)}`]: { bottom: `${size}` },
22-
[`.${e(`left-${modifier}`)}`]: { left: `${size}` },
19+
[className('top', modifier)]: { top: `${size}` },
20+
[className('right', modifier)]: { right: `${size}` },
21+
[className('bottom', modifier)]: { bottom: `${size}` },
22+
[className('left', modifier)]: { left: `${size}` },
2323
}),
2424
]
2525

src/plugins/margin.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
11
import _ from 'lodash'
22

3-
function className(prefix, modifier) {
4-
return _.startsWith(modifier, '-') ? `-${prefix}-${modifier.slice(1)}` : `${prefix}-${modifier}`
5-
}
6-
73
export default function() {
8-
return function({ addUtilities, e, theme, variants }) {
4+
return function({ addUtilities, className, theme, variants }) {
95
const generators = [
106
(size, modifier) => ({
11-
[`.${e(className('m', modifier))}`]: { margin: `${size}` },
7+
[className('m', modifier)]: { margin: `${size}` },
128
}),
139
(size, modifier) => ({
14-
[`.${e(className('my', modifier))}`]: {
10+
[className('my', modifier)]: {
1511
'margin-top': `${size}`,
1612
'margin-bottom': `${size}`,
1713
},
18-
[`.${e(className('mx', modifier))}`]: {
14+
[className('mx', modifier)]: {
1915
'margin-left': `${size}`,
2016
'margin-right': `${size}`,
2117
},
2218
}),
2319
(size, modifier) => ({
24-
[`.${e(className('mt', modifier))}`]: { 'margin-top': `${size}` },
25-
[`.${e(className('mr', modifier))}`]: { 'margin-right': `${size}` },
26-
[`.${e(className('mb', modifier))}`]: { 'margin-bottom': `${size}` },
27-
[`.${e(className('ml', modifier))}`]: { 'margin-left': `${size}` },
20+
[className('mt', modifier)]: { 'margin-top': `${size}` },
21+
[className('mr', modifier)]: { 'margin-right': `${size}` },
22+
[className('mb', modifier)]: { 'margin-bottom': `${size}` },
23+
[className('ml', modifier)]: { 'margin-left': `${size}` },
2824
}),
2925
]
3026

src/util/className.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import _ from 'lodash'
2+
import escapeClassName from './escapeClassName'
3+
4+
export default function className(base, modifier = 'default') {
5+
const name = (() => {
6+
if (modifier === 'default') {
7+
return base
8+
}
9+
return _.startsWith(modifier, '-') ? `-${base}-${modifier.slice(1)}` : `${base}-${modifier}`
10+
})()
11+
12+
return `.${escapeClassName(name)}`
13+
}

src/util/processPlugins.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import _ from 'lodash'
22
import postcss from 'postcss'
33
import Node from 'postcss/lib/node'
44
import escapeClassName from '../util/escapeClassName'
5+
import className from '../util/className'
56
import generateVariantFunction from '../util/generateVariantFunction'
67
import parseObjectStyles from '../util/parseObjectStyles'
78
import prefixSelector from '../util/prefixSelector'
@@ -39,6 +40,7 @@ export default function(plugins, config) {
3940
return getConfigValue(`variants.${path}`, defaultValue)
4041
},
4142
e: escapeClassName,
43+
className,
4244
prefix: applyConfiguredPrefix,
4345
addUtilities: (utilities, options) => {
4446
const defaultOptions = { variants: [], respectPrefix: true, respectImportant: true }

src/util/resolveConfig.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ import map from 'lodash/map'
55
import get from 'lodash/get'
66

77
const utils = {
8-
negative: function (scale) {
8+
negative(scale) {
99
return Object.keys(scale)
1010
.filter(key => scale[key] !== '0')
11-
.reduce((negativeScale, key) => ({
12-
...negativeScale,
13-
[`-${key}`]: `-${scale[key]}`
14-
}), {})
15-
}
11+
.reduce(
12+
(negativeScale, key) => ({
13+
...negativeScale,
14+
[`-${key}`]: `-${scale[key]}`,
15+
}),
16+
{}
17+
)
18+
},
1619
}
1720

1821
function value(valueToResolve, ...args) {

0 commit comments

Comments
 (0)