From 9c83fbda69a894185858c04f55ba8f9d9126ca3a Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sun, 22 Dec 2019 15:32:21 -0800 Subject: [PATCH] feat(lib): add css utility to format style values --- src/lib/__tests__/css.spec.js | 9 +++++++++ src/lib/css.js | 16 ++++++++++++++++ src/lib/index.js | 1 + 3 files changed, 26 insertions(+) create mode 100644 src/lib/__tests__/css.spec.js create mode 100644 src/lib/css.js 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';