redux-devtools/packages/react-dock/src/autoprefix.ts
Nathan Bierema 78ded9e0ca
feat(react-dock): convert to TypeScript (#607)
* feature(react-dock): convert to TypeScript

* And that

* Fun

* pretty

* More fun

* Try that
2020-08-24 00:37:43 -04:00

60 lines
1.3 KiB
TypeScript

// Same as https://github.com/SimenB/react-vendor-prefixes/blob/master/src/index.js,
// but dumber
import { CSSProperties } from 'react';
const vendorSpecificProperties = [
'animation',
'animationDelay',
'animationDirection',
'animationDuration',
'animationFillMode',
'animationIterationCount',
'animationName',
'animationPlayState',
'animationTimingFunction',
'appearance',
'backfaceVisibility',
'backgroundClip',
'borderImage',
'borderImageSlice',
'boxSizing',
'boxShadow',
'contentColumns',
'transform',
'transformOrigin',
'transformStyle',
'transition',
'transitionDelay',
'transitionDuration',
'transitionProperty',
'transitionTimingFunction',
'perspective',
'perspectiveOrigin',
'userSelect',
];
const prefixes = ['Moz', 'Webkit', 'ms', 'O'];
function prefixProp<Value>(key: string, value: Value) {
return prefixes.reduce<{ [key: string]: Value }>(
(obj, pre) => (
(obj[pre + key[0].toUpperCase() + key.substr(1)] = value), obj
),
{}
);
}
export default function autoprefix(style: CSSProperties) {
return Object.keys(style).reduce(
(obj, key) =>
vendorSpecificProperties.indexOf(key) !== -1
? {
...obj,
...prefixProp(key, style[key as keyof CSSProperties]),
}
: obj,
style
);
}