Skip to content

Commit

Permalink
feat(cssModule): add support for css module (#206)
Browse files Browse the repository at this point in the history
Add cssModule prop to every component which produces a css classname
Add mapToCssModule util will can turn a normal css className string
into module className if the module object/mapping is provided.
Closes #205
  • Loading branch information
TheSharpieOne authored and eddywashere committed Oct 27, 2016
1 parent 18d7d04 commit 3a69f14
Show file tree
Hide file tree
Showing 66 changed files with 437 additions and 213 deletions.
9 changes: 6 additions & 3 deletions src/Alert.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';

const FirstChild = ({ children }) => (
Expand All @@ -9,13 +10,14 @@ const FirstChild = ({ children }) => (
const propTypes = {
children: PropTypes.node,
className: PropTypes.any,
cssModule: PropTypes.object,
color: PropTypes.string,
isOpen: PropTypes.bool,
toggle: PropTypes.func,
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
transitionAppearTimeout: PropTypes.number,
transitionEnterTimeout: PropTypes.number,
transitionLeaveTimeout: PropTypes.number
transitionLeaveTimeout: PropTypes.number,
};

const defaultProps = {
Expand All @@ -30,6 +32,7 @@ const defaultProps = {
const Alert = (props) => {
const {
className,
cssModule,
tag: Tag,
color,
isOpen,
Expand All @@ -41,12 +44,12 @@ const Alert = (props) => {
...attributes
} = props;

const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'alert',
`alert-${color}`,
{ 'alert-dismissible': toggle }
);
), cssModule);

const alert = (
<Tag {...attributes} className={classes} role="alert">
Expand Down
9 changes: 6 additions & 3 deletions src/Breadcrumb.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.string,
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand All @@ -13,13 +15,14 @@ const defaultProps = {
const Breadcrumb = (props) => {
const {
className,
cssModule,
tag: Tag,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'breadcrumb'
);
), cssModule);

return (
<Tag {...attributes} className={classes} />
Expand Down
9 changes: 6 additions & 3 deletions src/BreadcrumbItem.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
active: PropTypes.bool,
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand All @@ -14,15 +16,16 @@ const defaultProps = {
const BreadcrumbItem = (props) => {
const {
className,
cssModule,
active,
tag: Tag,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
active ? 'active' : false,
'breadcrumb-item'
);
), cssModule);

return (
<Tag {...attributes} className={classes} />
Expand Down
9 changes: 6 additions & 3 deletions src/Button.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
active: PropTypes.bool,
Expand All @@ -11,7 +12,8 @@ const propTypes = {
onClick: PropTypes.func,
size: PropTypes.string,
children: PropTypes.node,
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand Down Expand Up @@ -42,21 +44,22 @@ class Button extends React.Component {
active,
block,
className,
cssModule,
color,
outline,
size,
tag: Tag,
...attributes
} = this.props;

const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'btn',
`btn${outline ? '-outline' : ''}-${color}`,
size ? `btn-${size}` : false,
block ? 'btn-block' : false,
{ active, disabled: this.props.disabled }
);
), cssModule);

if (attributes.href && Tag === 'button') {
Tag = 'a';
Expand Down
2 changes: 1 addition & 1 deletion src/ButtonDropdown.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React, { PropTypes } from 'react';
import Dropdown from './Dropdown';

const propTypes = {
children: PropTypes.node
children: PropTypes.node,
};

const ButtonDropdown = (props) => {
Expand Down
11 changes: 7 additions & 4 deletions src/ButtonGroup.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
'aria-label': PropTypes.string,
className: PropTypes.string,
className: PropTypes.any,
cssModule: PropTypes.object,
role: PropTypes.string,
size: PropTypes.string,
vertical: PropTypes.bool
vertical: PropTypes.bool,
};

const defaultProps = {
Expand All @@ -16,16 +18,17 @@ const defaultProps = {
const ButtonGroup = (props) => {
const {
className,
cssModule,
size,
vertical,
...attributes
} = props;

const classes = classNames(
const classes = mapToCssModules(classNames(
className,
size ? 'btn-group-' + size : false,
vertical ? 'btn-group-vertical' : 'btn-group'
);
), cssModule);

return (
<div {...attributes} className={classes} />
Expand Down
11 changes: 7 additions & 4 deletions src/ButtonToolbar.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
'aria-label': PropTypes.string,
className: PropTypes.string,
role: PropTypes.string
className: PropTypes.any,
cssModule: PropTypes.object,
role: PropTypes.string,
};

const defaultProps = {
Expand All @@ -14,13 +16,14 @@ const defaultProps = {
const ButtonToolbar = (props) => {
const {
className,
cssModule,
...attributes
} = props;

const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'btn-toolbar'
);
), cssModule);

return (
<div {...attributes} className={classes} />
Expand Down
9 changes: 6 additions & 3 deletions src/Card.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
inverse: PropTypes.bool,
color: PropTypes.string,
block: PropTypes.bool,
outline: PropTypes.bool,
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand All @@ -17,20 +19,21 @@ const defaultProps = {
const Card = (props) => {
const {
className,
cssModule,
color,
block,
inverse,
outline,
tag: Tag,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'card',
inverse ? 'card-inverse' : false,
block ? 'card-block' : false,
color ? `card${outline ? '-outline' : ''}-${color}` : false
);
), cssModule);

return (
<Tag {...attributes} className={classes} />
Expand Down
9 changes: 6 additions & 3 deletions src/CardBlock.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand All @@ -13,13 +15,14 @@ const defaultProps = {
const CardBlock = (props) => {
const {
className,
cssModule,
tag: Tag,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'card-block'
);
), cssModule);

return (
<Tag {...attributes} className={classes} />
Expand Down
9 changes: 6 additions & 3 deletions src/CardColumns.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand All @@ -13,13 +15,14 @@ const defaultProps = {
const CardColumns = (props) => {
const {
className,
cssModule,
tag: Tag,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'card-columns'
);
), cssModule);

return (
<Tag {...attributes} className={classes} />
Expand Down
9 changes: 6 additions & 3 deletions src/CardDeck.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
className: PropTypes.any,
flex: PropTypes.bool
cssModule: PropTypes.object,
flex: PropTypes.bool,
};

const defaultProps = {
Expand All @@ -15,14 +17,15 @@ const defaultProps = {
const CardDeck = (props) => {
const {
className,
cssModule,
tag: Tag,
flex,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'card-deck'
);
), cssModule);

if (flex) {
return (
Expand Down
9 changes: 6 additions & 3 deletions src/CardFooter.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { PropTypes } from 'react';
import classNames from 'classnames';
import { mapToCssModules } from './utils';

const propTypes = {
tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
className: PropTypes.any
className: PropTypes.any,
cssModule: PropTypes.object,
};

const defaultProps = {
Expand All @@ -13,13 +15,14 @@ const defaultProps = {
const CardFooter = (props) => {
const {
className,
cssModule,
tag: Tag,
...attributes
} = props;
const classes = classNames(
const classes = mapToCssModules(classNames(
className,
'card-footer'
);
), cssModule);

return (
<Tag {...attributes} className={classes} />
Expand Down
Loading

0 comments on commit 3a69f14

Please sign in to comment.