Skip to content

Commit 94d4127

Browse files
authored
Merge pull request andreypopp#15 from DeXTeD/master
fix: variants and pseudo with a dash in name
2 parents 71b88b3 + 2ae35a6 commit 94d4127

7 files changed

+71
-2
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.Label__veryLargeText {
2+
font-size: 3em
3+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var React = require("react");
2+
3+
var styles = require("css");
4+
5+
function reconcileProps(props, className) {
6+
var nextProps = {};
7+
8+
for (var k in props) {
9+
if (k === 'variant') {
10+
continue;
11+
}
12+
13+
if (props.hasOwnProperty(k)) {
14+
nextProps[k] = props[k];
15+
}
16+
}
17+
18+
nextProps.className = className;
19+
return nextProps;
20+
}
21+
22+
module.exports.Label = function Label(props) {
23+
var variant = props.variant || {};
24+
var className = styles.Label + (variant.veryLargeText ? ' ' + styles.Label__veryLargeText : '');
25+
return React.createElement("div", reconcileProps(props, className));
26+
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Label:very-large-text {
2+
font-size: 3em;
3+
}

src/__tests__/fixtures/pseudo.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.Label:first-child,.Label__firstChild {
2+
color: red
3+
}

src/__tests__/fixtures/pseudo.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var React = require("react");
2+
3+
var styles = require("css");
4+
5+
function reconcileProps(props, className) {
6+
var nextProps = {};
7+
8+
for (var k in props) {
9+
if (k === 'variant') {
10+
continue;
11+
}
12+
13+
if (props.hasOwnProperty(k)) {
14+
nextProps[k] = props[k];
15+
}
16+
}
17+
18+
nextProps.className = className;
19+
return nextProps;
20+
}
21+
22+
module.exports.Label = function Label(props) {
23+
var variant = props.variant || {};
24+
var className = styles.Label + (variant.firstChild ? ' ' + styles.Label__firstChild : '');
25+
return React.createElement("div", reconcileProps(props, className));
26+
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Label:first-child {
2+
color: red;
3+
}

src/index.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ function hash(value) {
5656
return hasher.digest('hex');
5757
}
5858

59+
function dashToCamelCase(name: string) {
60+
return name.replace(/-([a-z])/g, word => word[1].toUpperCase());
61+
}
62+
5963
function parseSelector(selector) {
6064
let parser = createSelectorParser();
6165
return parser.process(selector).res;
@@ -181,7 +185,7 @@ function localizeComponentRule(node) {
181185
let prev = selector.parent.nodes[idx - 1];
182186
if (prev && prev.type === 'tag' && componentNames.indexOf(prev.value) > -1) {
183187
let componentName = prev.value;
184-
let variantName = selector.value.slice(1);
188+
let variantName = dashToCamelCase(selector.value.slice(1));
185189
if (CSSPseudoClassList[variantName]) {
186190
selector.parent.parent.append(className({value: componentName + '__' + variantName}));
187191
} else {
@@ -194,7 +198,7 @@ function localizeComponentRule(node) {
194198
let idx = parent.nodes.indexOf(selector);
195199
let prev = parent.nodes[idx - 1];
196200
let componentName = prev.value;
197-
let variantName = selector.value.slice(1);
201+
let variantName = dashToCamelCase(selector.value.slice(1));
198202
if (selector.value === PROP_VARIANT_NAME) {
199203
let expression = node.selector.slice(
200204
selector.source.start.column + PROP_VARIANT_NAME.length,
@@ -316,6 +320,7 @@ function renderToJS(source: string, config: RenderConfig): string {
316320
let className = expr`styles.${identifier(componentName)}`;
317321
for (let variantName in component.variants) {
318322
let variant = component.variants[variantName];
323+
variantName = dashToCamelCase(variantName);
319324
if (variant.expression) {
320325
className = expr`
321326
${className} + (${variant.expression}

0 commit comments

Comments
 (0)