diff --git a/src/lib/__tests__/css.spec.js b/src/lib/__tests__/css.spec.js new file mode 100644 index 00000000..f29bd170 --- /dev/null +++ b/src/lib/__tests__/css.spec.js @@ -0,0 +1,9 @@ +import { css } from '../css'; + +test('css', () => { + expect(css([])).toEqual(''); + expect(css(['width: 20px; height: 20px;'])).toEqual('width: 20px; height: 20px'); + expect(css(['width: 20px;', ['height', '20px']])).toEqual('width: 20px; height: 20px'); + expect(css(['width: 20px', ['height', '20px']])).toEqual('width: 20px; height: 20px'); + expect(css([undefined, null, 0, ['height', '20px']])).toEqual('height: 20px'); +}); diff --git a/src/lib/css.js b/src/lib/css.js new file mode 100644 index 00000000..98097249 --- /dev/null +++ b/src/lib/css.js @@ -0,0 +1,16 @@ +function css(array) { + return array + .map((item, i) => { + if (!item) return false; + + return Array.isArray(item) + ? item.join(': ') + : item.slice(-1) === ';' + ? item.slice(0, -1) + : item; + }) + .filter(Boolean) + .join('; '); +} + +export { css }; diff --git a/src/lib/index.js b/src/lib/index.js index aab81d46..d6822aea 100644 --- a/src/lib/index.js +++ b/src/lib/index.js @@ -1 +1,2 @@ export { cx } from './cx'; +export { css } from './css';