You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
817 B
33 lines
817 B
// @flow
|
|
const cssRegex = /^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/
|
|
|
|
/**
|
|
* Returns a given CSS value and its unit as elements of an array.
|
|
*
|
|
* @example
|
|
* // Styles as object usage
|
|
* const styles = {
|
|
* '--dimension': getValueAndUnit('100px')[0],
|
|
* '--unit': getValueAndUnit('100px')[1],
|
|
* }
|
|
*
|
|
* // styled-components usage
|
|
* const div = styled.div`
|
|
* --dimension: ${getValueAndUnit('100px')[0]};
|
|
* --unit: ${getValueAndUnit('100px')[1]};
|
|
* `
|
|
*
|
|
* // CSS in JS Output
|
|
*
|
|
* element {
|
|
* '--dimension': 100,
|
|
* '--unit': 'px',
|
|
* }
|
|
*/
|
|
export default function getValueAndUnit(value: string | number): any {
|
|
if (typeof value !== 'string') return [value, '']
|
|
const matchedValue = value.match(cssRegex)
|
|
if (matchedValue) return [parseFloat(value), matchedValue[2]]
|
|
return [value, undefined]
|
|
}
|