├── .gitignore
├── .npmignore
├── .babelrc
├── .eslintrc
├── test
├── supports.js
├── helpers
│ └── setup-browser-env.js
└── index.js
├── DEV_ONLY
└── App.js
├── webpack.config.minified.js
├── src
├── prefix.js
├── supports.js
├── index.js
└── constants.js
├── CHANGELOG.md
├── LICENSE
├── lib
├── prefix.js
├── supports.js
├── constants.js
└── index.js
├── webpack.config.js
├── webpack.config.dev.js
├── package.json
├── README.md
└── dist
├── react-prefixer.min.js
├── react-prefixer.js
└── react-prefixer.js.map
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | node_modules
3 | lib
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | DEV_ONLY
2 | src
3 | test
4 | .babelrc
5 | .eslintrc
6 | .gitignore
7 | webpack.config.dev.js
8 | webpack.config.js
9 | webpack.config.minified.js
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins":[
3 | "add-module-exports"
4 | ],
5 | "presets":[
6 | ["latest", {
7 | "loose": true
8 | }],
9 | "stage-2"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env":{
3 | "amd": true,
4 | "browser": true,
5 | "es6": true
6 | },
7 | "extends": "rapid7/browser",
8 | "globals": {
9 | "process": true
10 | },
11 | "parser": "babel-eslint",
12 | "parserOptions": {
13 | "ecmaVersion": 6,
14 | "sourceType": "module"
15 | },
16 | "rules":{}
17 | }
18 |
--------------------------------------------------------------------------------
/test/supports.js:
--------------------------------------------------------------------------------
1 | import test from 'ava';
2 |
3 | import isSupported from 'src/supports';
4 |
5 | test('if isSupported works for properties correctly', (t) => {
6 | t.true(isSupported('display', 'block'));
7 | t.false(isSupported('foo', 'bar'));
8 | });
9 |
10 | test('if isSupported works for values', (t) => {
11 | t.true(isSupported('display', 'flex'));
12 | });
13 |
--------------------------------------------------------------------------------
/test/helpers/setup-browser-env.js:
--------------------------------------------------------------------------------
1 | const jsdom = require('jsdom');
2 | const jsdomGlobal = require('jsdom-global');
3 |
4 | const doc = jsdom.jsdom('
');
5 | const win = doc.defaultView;
6 | const nav = win.navigator;
7 |
8 | global.document = doc;
9 | global.window = win;
10 | global.navigator = nav;
11 |
12 | jsdomGlobal();
13 |
14 | const originalGetComputedStyle = window.getComputedStyle;
15 |
16 | window.getComputedStyle = function(...args) {
17 | if (arguments[0] === document.documentElement) {
18 | return ['-webkit-appearance'];
19 | }
20 |
21 | return originalGetComputedStyle.apply(window, args);
22 | };
23 |
--------------------------------------------------------------------------------
/DEV_ONLY/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | render
4 | } from 'react-dom';
5 |
6 | import prefix from '../src';
7 |
8 | const styles = prefix({
9 | button: {
10 | appearance: 'none',
11 | display: 'block'
12 | },
13 | container: {
14 | transition: 'column-count 200ms'
15 | }
16 | });
17 |
18 | console.log(styles.container);
19 |
20 | const App = () => {
21 | return (
22 |
23 |
24 | App
25 |
26 |
27 |
33 |
34 | );
35 | };
36 |
37 | const div = document.createElement('div');
38 |
39 | div.id = 'app-container';
40 |
41 | document.body.appendChild(div);
42 |
43 | render(, div);
--------------------------------------------------------------------------------
/webpack.config.minified.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const OptimizeJsPlugin = require('optimize-js-plugin');
3 |
4 | const defaultConfig = require('./webpack.config');
5 |
6 | module.exports = Object.assign({}, defaultConfig, {
7 | output: Object.assign({}, defaultConfig.output, {
8 | filename: 'react-prefixer.min.js'
9 | }),
10 |
11 | plugins: defaultConfig.plugins.concat([
12 | new webpack.optimize.DedupePlugin(),
13 | new webpack.optimize.UglifyJsPlugin({
14 | compress: {
15 | booleans: true,
16 | conditionals: true,
17 | drop_console: true,
18 | drop_debugger: true,
19 | join_vars: true,
20 | sequences: true,
21 | warnings: false
22 | },
23 | sourceMap: false
24 | }),
25 | new OptimizeJsPlugin({
26 | sourceMap: false
27 | })
28 | ])
29 | });
--------------------------------------------------------------------------------
/src/prefix.js:
--------------------------------------------------------------------------------
1 | let prefixObject = {
2 | css: '',
3 | js: ''
4 | };
5 |
6 | if (typeof window !== 'undefined') {
7 | const styles = window.getComputedStyle(document.documentElement);
8 |
9 | const prefixString = Array.prototype.slice.call(styles).join('');
10 | const standardPrefixString = prefixString.match(/-(moz|webkit|ms)-/);
11 | const operaPrefixString = prefixString.match(styles.OLink === '' && ['', 'o']);
12 | const prefixMatch = standardPrefixString || operaPrefixString;
13 |
14 | const prefix = prefixMatch ? prefixMatch[1] : '';
15 |
16 | prefixObject = {
17 | css: `-${prefix}-`,
18 | js: prefix
19 | };
20 |
21 | if (prefixObject.js !== 'ms') {
22 | prefixObject = {
23 | ...prefixObject,
24 | js: `${prefixObject.js.charAt(0).toUpperCase()}${prefixObject.js.slice(1)}`
25 | };
26 | }
27 | }
28 |
29 | export default prefixObject;
30 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # react-prefixer CHANGELOG
2 |
3 | ## 2.0.1
4 |
5 | * Fix support check for properties (thanks [@pinturic](https://github.com/pinturic))
6 |
7 | ## 2.0.0
8 |
9 | * Rewrite with modern coding standards
10 | * Support server-side rendering
11 | * Show how to use in test environments
12 |
13 | ## 1.1.4
14 |
15 | * Fix camelCase bug
16 |
17 | ## 1.1.3
18 |
19 | * Enhance supports checker
20 |
21 | ## 1.1.2
22 |
23 | * README updates
24 |
25 | ## 1.1.1
26 |
27 | * Fix import of animatable values
28 |
29 | ## 1.1.0
30 |
31 | * Support all animatable properties when used as values in `transition`
32 |
33 | ## 1.0.5
34 |
35 | * Add checker to verify input is an object before running
36 |
37 | ## 1.0.4
38 |
39 | * Have property / value checker a reusable method
40 | * Enhance list of prefixed properties
41 |
42 | ## 1.0.1 - 1.0.3
43 |
44 | * README fixes
45 |
46 | ## 1.0.0 - 1.0.3
47 |
48 | * Initial release
49 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Rapid7, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/supports.js:
--------------------------------------------------------------------------------
1 | import camelCase from 'lodash/camelCase';
2 |
3 | /**
4 | * is the property supported, or is the value supported for the given property
5 | *
6 | * @param {string} property
7 | * @param {number|string} value
8 | * @returns {boolean}
9 | */
10 | const isSupported = (property, value) => {
11 | // Try the native standard method first
12 | if ('CSS' in window && 'supports' in window.CSS) {
13 | return window.CSS.supports(property, value);
14 | }
15 |
16 | // Check Opera's native method
17 | if ('supportsCSS' in window) {
18 | return window.supportsCSS(property, value);
19 | }
20 |
21 | // Convert to camel-case for DOM interactions
22 | const camelCaseProperty = camelCase(property);
23 |
24 | // Check if the property is supported
25 | const element = document.createElement('div');
26 | const support = (camelCaseProperty in element.style);
27 |
28 | // Assign the property and value to invoke the CSS interpreter
29 | element.style.cssText = `${property}:${value}`;
30 |
31 | // Ensure both the property and value are
32 | // supported and return
33 | return support && (element.style[camelCaseProperty] !== '');
34 | };
35 |
36 | export default isSupported;
37 |
--------------------------------------------------------------------------------
/test/index.js:
--------------------------------------------------------------------------------
1 | import test from 'ava';
2 |
3 | import applyPrefixes from 'src/index';
4 |
5 | test('if applyPrefixes works for basic styles', (t) => {
6 | const styles = {
7 | appearance: 'none',
8 | display: 'block'
9 | };
10 |
11 | const result = applyPrefixes(styles);
12 |
13 | t.deepEqual(result, {
14 | WebkitAppearance: 'none',
15 | display: 'block'
16 | });
17 | });
18 |
19 | test('if applyPrefixes works for transition styles', (t) => {
20 | const styles = {
21 | transition: 'column-count 200ms'
22 | };
23 |
24 | const result = applyPrefixes(styles);
25 |
26 | t.deepEqual(result, {
27 | WebkitTransition: '-webkit-column-count 200ms'
28 | });
29 | });
30 |
31 | test('if applyPrefixes works for nested styles', (t) => {
32 | const styles = {
33 | appearance: 'none',
34 | display: 'block',
35 | foo: {
36 | columns: 3,
37 | bar: {
38 | display: 'flex'
39 | }
40 | }
41 | };
42 |
43 | const result = applyPrefixes(styles);
44 |
45 | t.deepEqual(result, {
46 | WebkitAppearance: 'none',
47 | display: 'block',
48 | foo: {
49 | WebkitColumns: 3,
50 | bar: {
51 | display: 'flex'
52 | }
53 | }
54 | });
55 | });
--------------------------------------------------------------------------------
/lib/prefix.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 |
7 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8 |
9 | var prefixObject = {
10 | css: '',
11 | js: ''
12 | };
13 |
14 | if (typeof window !== 'undefined') {
15 | var styles = window.getComputedStyle(document.documentElement);
16 |
17 | var prefixString = Array.prototype.slice.call(styles).join('');
18 | var standardPrefixString = prefixString.match(/-(moz|webkit|ms)-/);
19 | var operaPrefixString = prefixString.match(styles.OLink === '' && ['', 'o']);
20 | var prefixMatch = standardPrefixString || operaPrefixString;
21 |
22 | var prefix = prefixMatch ? prefixMatch[1] : '';
23 |
24 | prefixObject = {
25 | css: '-' + prefix + '-',
26 | js: prefix
27 | };
28 |
29 | if (prefixObject.js !== 'ms') {
30 | prefixObject = _extends({}, prefixObject, {
31 | js: '' + prefixObject.js.charAt(0).toUpperCase() + prefixObject.js.slice(1)
32 | });
33 | }
34 | }
35 |
36 | exports.default = prefixObject;
37 | module.exports = exports['default'];
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const webpack = require('webpack');
5 |
6 | const LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
7 |
8 | module.exports = {
9 | cache: true,
10 |
11 | devtool: '#source-map',
12 |
13 | entry: path.join(__dirname, 'src', 'index.js'),
14 |
15 | eslint:{
16 | configFile: './.eslintrc',
17 | emitError: true,
18 | failOnError: true,
19 | failOnWarning: true,
20 | formatter: require('eslint-friendly-formatter')
21 | },
22 |
23 | module: {
24 | preLoaders: [
25 | {
26 | cacheable: true,
27 | include: [
28 | /src/
29 | ],
30 | loader: 'eslint',
31 | test: /\.js$/
32 | }
33 | ],
34 |
35 | loaders: [
36 | {
37 | cacheable: true,
38 | exclude: /node_modules/,
39 | loader: 'babel',
40 | test: /\.js?$/
41 | }
42 | ]
43 | },
44 |
45 | output: {
46 | filename: 'react-prefixer.js',
47 | library: 'react-prefixer',
48 | libraryTarget: 'umd',
49 | path: path.join(__dirname, 'dist')
50 | },
51 |
52 | plugins: [
53 | new webpack.EnvironmentPlugin([
54 | 'NODE_ENV'
55 | ]),
56 | new LodashModuleReplacementPlugin()
57 | ]
58 | };
59 |
--------------------------------------------------------------------------------
/webpack.config.dev.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 |
5 | const HtmlWebpackPlugin = require('html-webpack-plugin');
6 | const DashboardPlugin = require('webpack-dashboard/plugin');
7 |
8 | const defaultConfig = require('./webpack.config');
9 |
10 | const currentLoaders = defaultConfig.module.loaders;
11 | const babelLoaderIndex = currentLoaders.findIndex(({loader}) => {
12 | return loader === 'babel';
13 | });
14 |
15 | const loaders = [
16 | ...currentLoaders.slice(0, babelLoaderIndex),
17 | Object.assign({}, currentLoaders[babelLoaderIndex], {
18 | query: {
19 | presets: [
20 | 'react'
21 | ]
22 | }
23 | }),
24 | ...currentLoaders.slice(babelLoaderIndex + 1)
25 | ];
26 |
27 | module.exports = Object.assign({}, defaultConfig, {
28 | cache: true,
29 |
30 | devServer: {
31 | contentBase: './dist',
32 | inline: true,
33 | port: 3000,
34 | stats: {
35 | assets: false,
36 | chunks: true,
37 | chunkModules: false,
38 | colors: true,
39 | hash: false,
40 | timings: true,
41 | version: false
42 | }
43 | },
44 |
45 | entry: path.join(__dirname, 'DEV_ONLY', 'App.js'),
46 |
47 | eslint: Object.assign({}, defaultConfig.eslint, {
48 | failOnWarning: false
49 | }),
50 |
51 | module: Object.assign({}, defaultConfig.module, {
52 | loaders
53 | }),
54 |
55 | plugins: defaultConfig.plugins.concat([
56 | new HtmlWebpackPlugin(),
57 | new DashboardPlugin()
58 | ])
59 | });
--------------------------------------------------------------------------------
/lib/supports.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 |
7 | var _camelCase = require('lodash/camelCase');
8 |
9 | var _camelCase2 = _interopRequireDefault(_camelCase);
10 |
11 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12 |
13 | /**
14 | * is the property supported, or is the value supported for the given property
15 | *
16 | * @param {string} property
17 | * @param {number|string} value
18 | * @returns {boolean}
19 | */
20 | var isSupported = function isSupported(property, value) {
21 | // Try the native standard method first
22 | if ('CSS' in window && 'supports' in window.CSS) {
23 | return window.CSS.supports(property, value);
24 | }
25 |
26 | // Check Opera's native method
27 | if ('supportsCSS' in window) {
28 | return window.supportsCSS(property, value);
29 | }
30 |
31 | // Convert to camel-case for DOM interactions
32 | var camelCaseProperty = (0, _camelCase2.default)(property);
33 |
34 | // Check if the property is supported
35 | var element = document.createElement('div');
36 | var support = camelCaseProperty in element.style;
37 |
38 | // Assign the property and value to invoke the CSS interpreter
39 | element.style.cssText = property + ':' + value;
40 |
41 | // Ensure both the property and value are
42 | // supported and return
43 | return support && element.style[camelCaseProperty] !== '';
44 | };
45 |
46 | exports.default = isSupported;
47 | module.exports = exports['default'];
--------------------------------------------------------------------------------
/lib/constants.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 | var ANIMATABLE_VALUES = ['columnCount', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleWidth', 'columns', 'flex', 'flexBasis', 'flexGrow', 'flexShrink', 'order', 'perspective', 'perspectiveOrigin', 'perspectiveOriginX', 'perspectiveOriginY', 'scrollSnapCoordinate', 'scrollSnapDirection', 'textDecoration', 'textDecorationColor', 'transform', 'transformOrigin', 'transformOriginX', 'transformOriginY', 'transformOriginZ', 'transformStyle'];
7 |
8 | var CSS_PROPERTIES = ['alignContent', 'alignItems', 'alignSelf', 'animation', 'animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction', 'appearance', 'aspectRatio', 'backfaceVisibility', 'backgroundClip', 'borderImage', 'borderImageSlice', 'boxShadow', 'columnCount', 'columnFill', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleStyle', 'columnRuleWidth', 'columnSpan', 'columnWidth', 'columns', 'flex', 'flexBasis', 'flexDirection', 'flexFlow', 'flexGrow', 'flexShrink', 'flexWrap', 'fontFeatureSettings', 'fontKearning', 'fontVariantLigatures', 'justifyContent', 'grid', 'gridArea', 'gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'gridTemplate', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows', 'hyphens', 'lineBreak', 'perspective', 'perspectiveOrigin', 'perspectiveOriginX', 'perspectiveOriginY', 'rubyPosition', 'scrollSnapCoordinate', 'scrollSnapDestination', 'scrollSnapPoints', 'scrollSnapPointsX', 'scrollSnapPointsY', 'scrollSnapType', 'tabSize', 'textDecoration', 'textDecorationColor', 'textDecorationLine', 'textDecorationStyle', 'textOrientation', 'textSizeAdjust', 'transform', 'transition', 'transformOrigin', 'transformOriginX', 'transformOriginY', 'transformOriginZ', 'transformStyle', 'transitionProperty', 'transitionDuration', 'transitionTimingFunction', 'transitionDelay', 'userModify', 'userSelect'];
9 |
10 | exports.ANIMATABLE_VALUES = ANIMATABLE_VALUES;
11 | exports.CSS_PROPERTIES = CSS_PROPERTIES;
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import isPlainObject from 'lodash/isPlainObject';
2 |
3 | import prefix from './prefix';
4 | import isSupported from './supports';
5 |
6 | import {
7 | ANIMATABLE_VALUES,
8 | CSS_PROPERTIES
9 | } from './constants';
10 |
11 | const toKebabCase = (string) => {
12 | return string.replace(/([A-Z])/g, ($1) => {
13 | return `-${$1.toLowerCase()}`;
14 | });
15 | };
16 |
17 | /**
18 | * create a new style object with prefixes applied
19 | *
20 | * @param {Object} object
21 | * @returns {Object}
22 | */
23 | const applyPrefixes = (object) => {
24 | if (!isPlainObject(object)) {
25 | return object;
26 | }
27 |
28 | let value;
29 |
30 | return Object.keys(object).reduce((styleObject, originalKey) => {
31 | let key = originalKey;
32 |
33 | value = object[key];
34 |
35 | if (isPlainObject(value)) {
36 | return {
37 | ...styleObject,
38 | [key]: applyPrefixes(value)
39 | };
40 | }
41 |
42 | if (CSS_PROPERTIES.indexOf(key) !== -1 && !isSupported(toKebabCase(key), value)) {
43 | key = `${prefix.js}${key.charAt(0).toUpperCase()}${key.slice(1)}`;
44 | }
45 |
46 | if (originalKey === 'display' && object[originalKey] === 'flex' && !isSupported('display', 'flex')) {
47 | return {
48 | ...styleObject,
49 | [key]: (prefix.js === 'ms' ? '-ms-flexbox' : `${prefix.css}flex`)
50 | };
51 | }
52 |
53 | if (originalKey === 'transition') {
54 | const animatableValuesObject = ANIMATABLE_VALUES.reduce((animatableValues, animatableValue) => {
55 | const kebabValue = toKebabCase(animatableValue);
56 | const re = new RegExp(kebabValue, 'g');
57 |
58 | if (re.test(object[originalKey]) && !isSupported(kebabValue)) {
59 | const cleanValue = object[originalKey].replace(re, `${prefix.css}${kebabValue}`);
60 |
61 | return {
62 | ...animatableValues,
63 | [key]: cleanValue
64 | };
65 | }
66 |
67 | return animatableValues;
68 | }, {});
69 |
70 | return {
71 | ...styleObject,
72 | ...animatableValuesObject
73 | };
74 | }
75 |
76 | return {
77 | ...styleObject,
78 | [key]: value
79 | };
80 | }, {});
81 | };
82 |
83 | export default applyPrefixes;
84 |
--------------------------------------------------------------------------------
/src/constants.js:
--------------------------------------------------------------------------------
1 | const ANIMATABLE_VALUES = [
2 | 'columnCount',
3 | 'columnGap',
4 | 'columnRule',
5 | 'columnRuleColor',
6 | 'columnRuleWidth',
7 | 'columns',
8 | 'flex',
9 | 'flexBasis',
10 | 'flexGrow',
11 | 'flexShrink',
12 | 'order',
13 | 'perspective',
14 | 'perspectiveOrigin',
15 | 'perspectiveOriginX',
16 | 'perspectiveOriginY',
17 | 'scrollSnapCoordinate',
18 | 'scrollSnapDirection',
19 | 'textDecoration',
20 | 'textDecorationColor',
21 | 'transform',
22 | 'transformOrigin',
23 | 'transformOriginX',
24 | 'transformOriginY',
25 | 'transformOriginZ',
26 | 'transformStyle'
27 | ];
28 |
29 | const CSS_PROPERTIES = [
30 | 'alignContent',
31 | 'alignItems',
32 | 'alignSelf',
33 | 'animation',
34 | 'animationDelay',
35 | 'animationDirection',
36 | 'animationDuration',
37 | 'animationFillMode',
38 | 'animationIterationCount',
39 | 'animationName',
40 | 'animationPlayState',
41 | 'animationTimingFunction',
42 | 'appearance',
43 | 'aspectRatio',
44 | 'backfaceVisibility',
45 | 'backgroundClip',
46 | 'borderImage',
47 | 'borderImageSlice',
48 | 'boxShadow',
49 | 'columnCount',
50 | 'columnFill',
51 | 'columnGap',
52 | 'columnRule',
53 | 'columnRuleColor',
54 | 'columnRuleStyle',
55 | 'columnRuleWidth',
56 | 'columnSpan',
57 | 'columnWidth',
58 | 'columns',
59 | 'flex',
60 | 'flexBasis',
61 | 'flexDirection',
62 | 'flexFlow',
63 | 'flexGrow',
64 | 'flexShrink',
65 | 'flexWrap',
66 | 'fontFeatureSettings',
67 | 'fontKearning',
68 | 'fontVariantLigatures',
69 | 'justifyContent',
70 | 'grid',
71 | 'gridArea',
72 | 'gridAutoColumns',
73 | 'gridAutoFlow',
74 | 'gridAutoRows',
75 | 'gridColumn',
76 | 'gridColumnEnd',
77 | 'gridColumnStart',
78 | 'gridRow',
79 | 'gridRowEnd',
80 | 'gridRowStart',
81 | 'gridTemplate',
82 | 'gridTemplateAreas',
83 | 'gridTemplateColumns',
84 | 'gridTemplateRows',
85 | 'hyphens',
86 | 'lineBreak',
87 | 'perspective',
88 | 'perspectiveOrigin',
89 | 'perspectiveOriginX',
90 | 'perspectiveOriginY',
91 | 'rubyPosition',
92 | 'scrollSnapCoordinate',
93 | 'scrollSnapDestination',
94 | 'scrollSnapPoints',
95 | 'scrollSnapPointsX',
96 | 'scrollSnapPointsY',
97 | 'scrollSnapType',
98 | 'tabSize',
99 | 'textDecoration',
100 | 'textDecorationColor',
101 | 'textDecorationLine',
102 | 'textDecorationStyle',
103 | 'textOrientation',
104 | 'textSizeAdjust',
105 | 'transform',
106 | 'transition',
107 | 'transformOrigin',
108 | 'transformOriginX',
109 | 'transformOriginY',
110 | 'transformOriginZ',
111 | 'transformStyle',
112 | 'transitionProperty',
113 | 'transitionDuration',
114 | 'transitionTimingFunction',
115 | 'transitionDelay',
116 | 'userModify',
117 | 'userSelect'
118 | ];
119 |
120 | export {ANIMATABLE_VALUES};
121 | export {CSS_PROPERTIES};
122 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "tquetano-r7",
3 | "ava": {
4 | "babel": "inherit",
5 | "concurrency": 10,
6 | "failFast": true,
7 | "files": [
8 | "test/**/*.js",
9 | "!test/helpers/**"
10 | ],
11 | "source": [
12 | "src/*.js"
13 | ],
14 | "require": [
15 | "babel-register",
16 | "babel-polyfill",
17 | "./test/helpers/setup-browser-env.js"
18 | ],
19 | "verbose": true
20 | },
21 | "bugs": {
22 | "url": "https://github.com/rapid7/react-prefixer/issues"
23 | },
24 | "dependencies": {
25 | "lodash": "^4.16.6"
26 | },
27 | "description": "Add vendor-specific prefixes to React styles",
28 | "devDependencies": {
29 | "ava": "^0.16.0",
30 | "babel": "~6.5.2",
31 | "babel-cli": "^6.18.0",
32 | "babel-core": "~6.18.2",
33 | "babel-eslint": "^7.1.0",
34 | "babel-loader": "~6.2.7",
35 | "babel-plugin-add-module-exports": "^0.2.1",
36 | "babel-polyfill": "^6.16.0",
37 | "babel-preset-latest": "^6.16.0",
38 | "babel-preset-react": "^6.16.0",
39 | "babel-preset-stage-2": "^6.18.0",
40 | "babel-register": "^6.18.0",
41 | "eslint": "^3.9.1",
42 | "eslint-config-rapid7": "^2.6.0",
43 | "eslint-friendly-formatter": "^2.0.6",
44 | "eslint-loader": "^1.6.1",
45 | "html-webpack-plugin": "^2.24.1",
46 | "in-publish": "^2.0.0",
47 | "jsdom": "^9.8.3",
48 | "jsdom-global": "^2.1.0",
49 | "lodash": "^4.16.6",
50 | "lodash-webpack-plugin": "^0.10.5",
51 | "optimize-js-plugin": "0.0.4",
52 | "react": "^15.3.2",
53 | "react-dom": "^15.3.2",
54 | "rimraf": "^2.5.4",
55 | "sinon": "^1.17.6",
56 | "webpack": "^1.13.3",
57 | "webpack-dashboard": "^0.2.0",
58 | "webpack-dev-server": "^1.16.2"
59 | },
60 | "homepage": "https://github.com/rapid7/recess#readme",
61 | "keywords": [
62 | "autoprefix",
63 | "browser",
64 | "css",
65 | "normalize",
66 | "prefix",
67 | "react",
68 | "style"
69 | ],
70 | "license": "MIT",
71 | "main": "lib",
72 | "name": "react-prefixer",
73 | "repository": {
74 | "type": "git",
75 | "url": "git+https://github.com/rapid7/react-prefixer.git"
76 | },
77 | "scripts": {
78 | "build": "NODE_ENV=development webpack --profile --progress",
79 | "build:minified": "NODE_ENV=production webpack --profile --progress --config=webpack.config.minified.js",
80 | "clean": "rimraf lib && rimraf dist",
81 | "lint": "NODE_ENV=test eslint src",
82 | "lint:fix": "NODE_ENV=test eslint src --fix",
83 | "prepublish": "in-publish && npm run prepublish:compile || echo ''",
84 | "prepublish:compile": "npm run clean && npm run lint && npm test && npm run transpile && npm run build && npm run build:minified",
85 | "start": "NODE_ENV=development webpack-dashboard -- webpack-dev-server --config=webpack.config.dev.js",
86 | "test": "NODE_PATH=. NODE_ENV=test ava --no-cache",
87 | "test:watch": "NODE_PATH=. NODE_ENV=test ava --watch",
88 | "transpile": "babel src --out-dir lib"
89 | },
90 | "version": "2.0.1"
91 | }
92 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 |
7 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8 |
9 | var _isPlainObject = require('lodash/isPlainObject');
10 |
11 | var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
12 |
13 | var _prefix = require('./prefix');
14 |
15 | var _prefix2 = _interopRequireDefault(_prefix);
16 |
17 | var _supports = require('./supports');
18 |
19 | var _supports2 = _interopRequireDefault(_supports);
20 |
21 | var _constants = require('./constants');
22 |
23 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24 |
25 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
26 |
27 | var toKebabCase = function toKebabCase(string) {
28 | return string.replace(/([A-Z])/g, function ($1) {
29 | return '-' + $1.toLowerCase();
30 | });
31 | };
32 |
33 | /**
34 | * create a new style object with prefixes applied
35 | *
36 | * @param {Object} object
37 | * @returns {Object}
38 | */
39 | var applyPrefixes = function applyPrefixes(object) {
40 | if (!(0, _isPlainObject2.default)(object)) {
41 | return object;
42 | }
43 |
44 | var value = void 0;
45 |
46 | return Object.keys(object).reduce(function (styleObject, originalKey) {
47 | var key = originalKey;
48 |
49 | value = object[key];
50 |
51 | if ((0, _isPlainObject2.default)(value)) {
52 | return _extends({}, styleObject, _defineProperty({}, key, applyPrefixes(value)));
53 | }
54 |
55 | if (_constants.CSS_PROPERTIES.indexOf(key) !== -1 && !(0, _supports2.default)(toKebabCase(key), value)) {
56 | key = '' + _prefix2.default.js + key.charAt(0).toUpperCase() + key.slice(1);
57 | }
58 |
59 | if (originalKey === 'display' && object[originalKey] === 'flex' && !(0, _supports2.default)('display', 'flex')) {
60 | return _extends({}, styleObject, _defineProperty({}, key, _prefix2.default.js === 'ms' ? '-ms-flexbox' : _prefix2.default.css + 'flex'));
61 | }
62 |
63 | if (originalKey === 'transition') {
64 | var animatableValuesObject = _constants.ANIMATABLE_VALUES.reduce(function (animatableValues, animatableValue) {
65 | var kebabValue = toKebabCase(animatableValue);
66 | var re = new RegExp(kebabValue, 'g');
67 |
68 | if (re.test(object[originalKey]) && !(0, _supports2.default)(kebabValue)) {
69 | var cleanValue = object[originalKey].replace(re, '' + _prefix2.default.css + kebabValue);
70 |
71 | return _extends({}, animatableValues, _defineProperty({}, key, cleanValue));
72 | }
73 |
74 | return animatableValues;
75 | }, {});
76 |
77 | return _extends({}, styleObject, animatableValuesObject);
78 | }
79 |
80 | return _extends({}, styleObject, _defineProperty({}, key, value));
81 | }, {});
82 | };
83 |
84 | exports.default = applyPrefixes;
85 | module.exports = exports['default'];
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-prefixer
2 |
3 | **NOTE**: This library is no longer maintained. It is advised you use one of the many, many CSS-in-JS libraries that exist in today's ecosystem. Examples:
4 |
5 | * [styled-components](https://github.com/styled-components/styled-components)
6 | * [glamor](https://github.com/threepointone/glamor)
7 | * [radium](https://github.com/FormidableLabs/radium)
8 |
9 | react-prefixer is a tiny package designed to provide vender-specific prefixes to the style objects you use in your React project.
10 |
11 | #### Table of contents
12 | * [Installation](#installation)
13 | * [Usage](#usage)
14 | * [Test environments](#test-environments)
15 | * [Browser support](#browser-support)
16 | * [Development](#development)
17 |
18 | #### Installation
19 |
20 | ```
21 | $ npm install react-prefixer
22 | ```
23 |
24 | #### Usage
25 |
26 | ```javascript
27 | import prefix from 'react-prefixer';
28 |
29 | const styles = prefix({
30 | userSelect: 'none'
31 | });
32 |
33 | console.log(styles); // {WebkitUserSelect:"none"}
34 | ```
35 |
36 | It also works on deeply-nested objects:
37 |
38 | ```javascript
39 | import prefix from 'react-prefixer';
40 |
41 | const styles = prefix({
42 | some:{
43 | really:{
44 | deep:{
45 | style:{
46 | userSelect: 'none'
47 | }
48 | }
49 | }
50 | }
51 | });
52 |
53 | console.log(styles); // {some:{really:{deep:{style:{WebkitUserSelect:"none"}}}}}
54 | ```
55 |
56 | And will appropriately modify your values for legacy syntaxes on transition:
57 |
58 | ```javascript
59 | import prefix from 'react-prefixer';
60 |
61 | const styles = prefix({
62 | transition: 'transform 200ms'
63 | });
64 |
65 | console.log(styles); // {WebkitTransition:"-webkit-transform 200ms"}, if on Safari for example
66 | ```
67 |
68 | It will also do the tweener or most recent vendor syntax for flexbox:
69 |
70 | ```javascript
71 | import prefix from 'react-prefixer';
72 |
73 | const styles = prefix({
74 | display: 'flex'
75 | });
76 |
77 | console.log(styles);
78 | // {display: '-webkit-flex'}, if on Safari
79 | // {display: '-ms-flexbox'}, if on IE10
80 | ```
81 |
82 | #### Test environments
83 |
84 | When running in test environments where there is a JS-based DOM (`jsdom` for example), the `getComputedStyle` method will return an empty array of styles when calculating the prefix. This previously caused an error which is since resolved, however it will default to assuming no browser prefix at all. As such, if you want to perform tests based on a specific browser prefix, you will need to mock the `getComputedStyle` property on the `window`. An example that is for tests with Webkit browsers:
85 |
86 | ```javascript
87 | const originalGetComputedStyle = window.getComputedStyle;
88 |
89 | window.getComputedStyle = function(...args) {
90 | if (arguments[0] === document.documentElement) {
91 | return ['-webkit-appearance'];
92 | }
93 |
94 | return originalGetComputedStyle.apply(window, args);
95 | };
96 | ```
97 |
98 | #### Browser support
99 |
100 | * IE10+ and Edge
101 | * Firefox
102 | * Chrome
103 | * Safari
104 | * Opera
105 |
106 | #### Development
107 |
108 | Standard stuff, clone the repo and `npm i` to get the dependencies. npm scripts available:
109 | * `build` => runs webpack to build the compiled JS file with `NODE_ENV` set to `development`
110 | * `build:minified` => runs webpack to build the compiled and optimized JS file with `NODE_ENV` set to `production`
111 | * `clean` => runs `rimraf` on both `lib` and `dist` directories
112 | * `dev` => runs the webpack dev server for the playground
113 | * `lint` => runs ESLint against files in the `src` folder
114 | * `lint:fix` => runs `lint` with `--fix` applied
115 | * `prepublish` => if in publish, runs `prepublish:compile`
116 | * `prepublish:compile` => runs `clean`, `lint`, `test`, `transpile`, `build` and `build:minified`
117 | * `test` => runs `ava` against all files in `src`
118 | * `test:watch` => runs `test` with a persistent watcher
119 | * `transpile` => runs Babel against files in `src` to files in `lib`
120 |
121 | Happy prefixing!
122 |
--------------------------------------------------------------------------------
/dist/react-prefixer.min.js:
--------------------------------------------------------------------------------
1 | !(function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["react-prefixer"]=e():t["react-prefixer"]=e()})(this,(function(){return (function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)})(function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))switch(typeof t[e]){case"function":break;case"object":t[e]=(function(e){var n=e.slice(1),r=t[e[0]];return function(t,e,o){r.apply(this,[t,e,o].concat(n))}})(t[e]);break;default:t[e]=t[t[e]]}return t}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}Object.defineProperty(e,"__esModule",{value:!0});var i=Object.assign||function(t){for(var e=1;e=r?t:o(t,e,n)}var o=n(14);t.exports=r},function(t,e){function n(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),n=n>o?o:n,n<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r false
185 | *
186 | * _.isPlainObject([1, 2, 3]);
187 | * // => false
188 | *
189 | * _.isPlainObject({ 'x': 0, 'y': 0 });
190 | * // => true
191 | *
192 | * _.isPlainObject(Object.create(null));
193 | * // => true
194 | */
195 | function isPlainObject(value) {
196 | if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
197 | return false;
198 | }
199 | var proto = getPrototype(value);
200 | if (proto === null) {
201 | return true;
202 | }
203 | var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
204 | return typeof Ctor == 'function' && Ctor instanceof Ctor &&
205 | funcToString.call(Ctor) == objectCtorString;
206 | }
207 |
208 | module.exports = isPlainObject;
209 |
210 |
211 | /***/ },
212 | /* 2 */
213 | /***/ function(module, exports) {
214 |
215 | /** Used for built-in method references. */
216 | var objectProto = Object.prototype;
217 |
218 | /**
219 | * Used to resolve the
220 | * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
221 | * of values.
222 | */
223 | var nativeObjectToString = objectProto.toString;
224 |
225 | /**
226 | * Converts `value` to a string using `Object.prototype.toString`.
227 | *
228 | * @private
229 | * @param {*} value The value to convert.
230 | * @returns {string} Returns the converted string.
231 | */
232 | function objectToString(value) {
233 | return nativeObjectToString.call(value);
234 | }
235 |
236 | module.exports = objectToString;
237 |
238 |
239 | /***/ },
240 | /* 3 */
241 | /***/ function(module, exports, __webpack_require__) {
242 |
243 | var overArg = __webpack_require__(4);
244 |
245 | /** Built-in value references. */
246 | var getPrototype = overArg(Object.getPrototypeOf, Object);
247 |
248 | module.exports = getPrototype;
249 |
250 |
251 | /***/ },
252 | /* 4 */
253 | /***/ function(module, exports) {
254 |
255 | /**
256 | * Creates a unary function that invokes `func` with its argument transformed.
257 | *
258 | * @private
259 | * @param {Function} func The function to wrap.
260 | * @param {Function} transform The argument transform.
261 | * @returns {Function} Returns the new function.
262 | */
263 | function overArg(func, transform) {
264 | return function(arg) {
265 | return func(transform(arg));
266 | };
267 | }
268 |
269 | module.exports = overArg;
270 |
271 |
272 | /***/ },
273 | /* 5 */
274 | /***/ function(module, exports) {
275 |
276 | /**
277 | * Checks if `value` is object-like. A value is object-like if it's not `null`
278 | * and has a `typeof` result of "object".
279 | *
280 | * @static
281 | * @memberOf _
282 | * @since 4.0.0
283 | * @category Lang
284 | * @param {*} value The value to check.
285 | * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
286 | * @example
287 | *
288 | * _.isObjectLike({});
289 | * // => true
290 | *
291 | * _.isObjectLike([1, 2, 3]);
292 | * // => true
293 | *
294 | * _.isObjectLike(_.noop);
295 | * // => false
296 | *
297 | * _.isObjectLike(null);
298 | * // => false
299 | */
300 | function isObjectLike(value) {
301 | return value != null && typeof value == 'object';
302 | }
303 |
304 | module.exports = isObjectLike;
305 |
306 |
307 | /***/ },
308 | /* 6 */
309 | /***/ function(module, exports) {
310 |
311 | 'use strict';
312 |
313 | Object.defineProperty(exports, "__esModule", {
314 | value: true
315 | });
316 |
317 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
318 |
319 | var prefixObject = {
320 | css: '',
321 | js: ''
322 | };
323 |
324 | if (typeof window !== 'undefined') {
325 | var styles = window.getComputedStyle(document.documentElement);
326 |
327 | var prefixString = Array.prototype.slice.call(styles).join('');
328 | var standardPrefixString = prefixString.match(/-(moz|webkit|ms)-/);
329 | var operaPrefixString = prefixString.match(styles.OLink === '' && ['', 'o']);
330 | var prefixMatch = standardPrefixString || operaPrefixString;
331 |
332 | var prefix = prefixMatch ? prefixMatch[1] : '';
333 |
334 | prefixObject = {
335 | css: '-' + prefix + '-',
336 | js: prefix
337 | };
338 |
339 | if (prefixObject.js !== 'ms') {
340 | prefixObject = _extends({}, prefixObject, {
341 | js: '' + prefixObject.js.charAt(0).toUpperCase() + prefixObject.js.slice(1)
342 | });
343 | }
344 | }
345 |
346 | exports.default = prefixObject;
347 | module.exports = exports['default'];
348 |
349 | /***/ },
350 | /* 7 */
351 | /***/ function(module, exports, __webpack_require__) {
352 |
353 | 'use strict';
354 |
355 | Object.defineProperty(exports, "__esModule", {
356 | value: true
357 | });
358 |
359 | var _camelCase = __webpack_require__(8);
360 |
361 | var _camelCase2 = _interopRequireDefault(_camelCase);
362 |
363 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
364 |
365 | /**
366 | * is the property supported, or is the value supported for the given property
367 | *
368 | * @param {string} property
369 | * @param {number|string} value
370 | * @returns {boolean}
371 | */
372 | var isSupported = function isSupported(property, value) {
373 | // Try the native standard method first
374 | if ('CSS' in window && 'supports' in window.CSS) {
375 | return window.CSS.supports(property, value);
376 | }
377 |
378 | // Check Opera's native method
379 | if ('supportsCSS' in window) {
380 | return window.supportsCSS(property, value);
381 | }
382 |
383 | // Convert to camel-case for DOM interactions
384 | var camelCaseProperty = (0, _camelCase2.default)(property);
385 |
386 | // Check if the property is supported
387 | var element = document.createElement('div');
388 | var support = camelCaseProperty in element.style;
389 |
390 | // Assign the property and value to invoke the CSS interpreter
391 | element.style.cssText = property + ':' + value;
392 |
393 | // Ensure both the property and value are
394 | // supported and return
395 | return support && element.style[camelCaseProperty] !== '';
396 | };
397 |
398 | exports.default = isSupported;
399 | module.exports = exports['default'];
400 |
401 | /***/ },
402 | /* 8 */
403 | /***/ function(module, exports, __webpack_require__) {
404 |
405 | var capitalize = __webpack_require__(9),
406 | createCompounder = __webpack_require__(19);
407 |
408 | /**
409 | * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
410 | *
411 | * @static
412 | * @memberOf _
413 | * @since 3.0.0
414 | * @category String
415 | * @param {string} [string=''] The string to convert.
416 | * @returns {string} Returns the camel cased string.
417 | * @example
418 | *
419 | * _.camelCase('Foo Bar');
420 | * // => 'fooBar'
421 | *
422 | * _.camelCase('--foo-bar--');
423 | * // => 'fooBar'
424 | *
425 | * _.camelCase('__FOO_BAR__');
426 | * // => 'fooBar'
427 | */
428 | var camelCase = createCompounder(function(result, word, index) {
429 | word = word.toLowerCase();
430 | return result + (index ? capitalize(word) : word);
431 | });
432 |
433 | module.exports = camelCase;
434 |
435 |
436 | /***/ },
437 | /* 9 */
438 | /***/ function(module, exports, __webpack_require__) {
439 |
440 | var toString = __webpack_require__(10),
441 | upperFirst = __webpack_require__(11);
442 |
443 | /**
444 | * Converts the first character of `string` to upper case and the remaining
445 | * to lower case.
446 | *
447 | * @static
448 | * @memberOf _
449 | * @since 3.0.0
450 | * @category String
451 | * @param {string} [string=''] The string to capitalize.
452 | * @returns {string} Returns the capitalized string.
453 | * @example
454 | *
455 | * _.capitalize('FRED');
456 | * // => 'Fred'
457 | */
458 | function capitalize(string) {
459 | return upperFirst(toString(string).toLowerCase());
460 | }
461 |
462 | module.exports = capitalize;
463 |
464 |
465 | /***/ },
466 | /* 10 */
467 | /***/ function(module, exports) {
468 |
469 | /**
470 | * This method returns the first argument it receives.
471 | *
472 | * @static
473 | * @since 0.1.0
474 | * @memberOf _
475 | * @category Util
476 | * @param {*} value Any value.
477 | * @returns {*} Returns `value`.
478 | * @example
479 | *
480 | * var object = { 'a': 1 };
481 | *
482 | * console.log(_.identity(object) === object);
483 | * // => true
484 | */
485 | function identity(value) {
486 | return value;
487 | }
488 |
489 | module.exports = identity;
490 |
491 |
492 | /***/ },
493 | /* 11 */
494 | /***/ function(module, exports, __webpack_require__) {
495 |
496 | var createCaseFirst = __webpack_require__(12);
497 |
498 | /**
499 | * Converts the first character of `string` to upper case.
500 | *
501 | * @static
502 | * @memberOf _
503 | * @since 4.0.0
504 | * @category String
505 | * @param {string} [string=''] The string to convert.
506 | * @returns {string} Returns the converted string.
507 | * @example
508 | *
509 | * _.upperFirst('fred');
510 | * // => 'Fred'
511 | *
512 | * _.upperFirst('FRED');
513 | * // => 'FRED'
514 | */
515 | var upperFirst = createCaseFirst('toUpperCase');
516 |
517 | module.exports = upperFirst;
518 |
519 |
520 | /***/ },
521 | /* 12 */
522 | /***/ function(module, exports, __webpack_require__) {
523 |
524 | var castSlice = __webpack_require__(13),
525 | hasUnicode = __webpack_require__(15),
526 | stringToArray = __webpack_require__(16),
527 | toString = __webpack_require__(10);
528 |
529 | /**
530 | * Creates a function like `_.lowerFirst`.
531 | *
532 | * @private
533 | * @param {string} methodName The name of the `String` case method to use.
534 | * @returns {Function} Returns the new case function.
535 | */
536 | function createCaseFirst(methodName) {
537 | return function(string) {
538 | string = toString(string);
539 |
540 | var strSymbols = hasUnicode(string)
541 | ? stringToArray(string)
542 | : undefined;
543 |
544 | var chr = strSymbols
545 | ? strSymbols[0]
546 | : string.charAt(0);
547 |
548 | var trailing = strSymbols
549 | ? castSlice(strSymbols, 1).join('')
550 | : string.slice(1);
551 |
552 | return chr[methodName]() + trailing;
553 | };
554 | }
555 |
556 | module.exports = createCaseFirst;
557 |
558 |
559 | /***/ },
560 | /* 13 */
561 | /***/ function(module, exports, __webpack_require__) {
562 |
563 | var baseSlice = __webpack_require__(14);
564 |
565 | /**
566 | * Casts `array` to a slice if it's needed.
567 | *
568 | * @private
569 | * @param {Array} array The array to inspect.
570 | * @param {number} start The start position.
571 | * @param {number} [end=array.length] The end position.
572 | * @returns {Array} Returns the cast slice.
573 | */
574 | function castSlice(array, start, end) {
575 | var length = array.length;
576 | end = end === undefined ? length : end;
577 | return (!start && end >= length) ? array : baseSlice(array, start, end);
578 | }
579 |
580 | module.exports = castSlice;
581 |
582 |
583 | /***/ },
584 | /* 14 */
585 | /***/ function(module, exports) {
586 |
587 | /**
588 | * The base implementation of `_.slice` without an iteratee call guard.
589 | *
590 | * @private
591 | * @param {Array} array The array to slice.
592 | * @param {number} [start=0] The start position.
593 | * @param {number} [end=array.length] The end position.
594 | * @returns {Array} Returns the slice of `array`.
595 | */
596 | function baseSlice(array, start, end) {
597 | var index = -1,
598 | length = array.length;
599 |
600 | if (start < 0) {
601 | start = -start > length ? 0 : (length + start);
602 | }
603 | end = end > length ? length : end;
604 | if (end < 0) {
605 | end += length;
606 | }
607 | length = start > end ? 0 : ((end - start) >>> 0);
608 | start >>>= 0;
609 |
610 | var result = Array(length);
611 | while (++index < length) {
612 | result[index] = array[index + start];
613 | }
614 | return result;
615 | }
616 |
617 | module.exports = baseSlice;
618 |
619 |
620 | /***/ },
621 | /* 15 */
622 | /***/ function(module, exports) {
623 |
624 | /**
625 | * This method returns `false`.
626 | *
627 | * @static
628 | * @memberOf _
629 | * @since 4.13.0
630 | * @category Util
631 | * @returns {boolean} Returns `false`.
632 | * @example
633 | *
634 | * _.times(2, _.stubFalse);
635 | * // => [false, false]
636 | */
637 | function stubFalse() {
638 | return false;
639 | }
640 |
641 | module.exports = stubFalse;
642 |
643 |
644 | /***/ },
645 | /* 16 */
646 | /***/ function(module, exports, __webpack_require__) {
647 |
648 | var asciiToArray = __webpack_require__(17),
649 | hasUnicode = __webpack_require__(15),
650 | unicodeToArray = __webpack_require__(18);
651 |
652 | /**
653 | * Converts `string` to an array.
654 | *
655 | * @private
656 | * @param {string} string The string to convert.
657 | * @returns {Array} Returns the converted array.
658 | */
659 | function stringToArray(string) {
660 | return hasUnicode(string)
661 | ? unicodeToArray(string)
662 | : asciiToArray(string);
663 | }
664 |
665 | module.exports = stringToArray;
666 |
667 |
668 | /***/ },
669 | /* 17 */
670 | /***/ function(module, exports) {
671 |
672 | /**
673 | * Converts an ASCII `string` to an array.
674 | *
675 | * @private
676 | * @param {string} string The string to convert.
677 | * @returns {Array} Returns the converted array.
678 | */
679 | function asciiToArray(string) {
680 | return string.split('');
681 | }
682 |
683 | module.exports = asciiToArray;
684 |
685 |
686 | /***/ },
687 | /* 18 */
688 | /***/ function(module, exports) {
689 |
690 | /**
691 | * Converts an ASCII `string` to an array.
692 | *
693 | * @private
694 | * @param {string} string The string to convert.
695 | * @returns {Array} Returns the converted array.
696 | */
697 | function asciiToArray(string) {
698 | return string.split('');
699 | }
700 |
701 | module.exports = asciiToArray;
702 |
703 |
704 | /***/ },
705 | /* 19 */
706 | /***/ function(module, exports, __webpack_require__) {
707 |
708 | var arrayReduce = __webpack_require__(20),
709 | deburr = __webpack_require__(21),
710 | words = __webpack_require__(22);
711 |
712 | /** Used to compose unicode capture groups. */
713 | var rsApos = "['\u2019]";
714 |
715 | /** Used to match apostrophes. */
716 | var reApos = RegExp(rsApos, 'g');
717 |
718 | /**
719 | * Creates a function like `_.camelCase`.
720 | *
721 | * @private
722 | * @param {Function} callback The function to combine each word.
723 | * @returns {Function} Returns the new compounder function.
724 | */
725 | function createCompounder(callback) {
726 | return function(string) {
727 | return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
728 | };
729 | }
730 |
731 | module.exports = createCompounder;
732 |
733 |
734 | /***/ },
735 | /* 20 */
736 | /***/ function(module, exports) {
737 |
738 | /**
739 | * A specialized version of `_.reduce` for arrays without support for
740 | * iteratee shorthands.
741 | *
742 | * @private
743 | * @param {Array} [array] The array to iterate over.
744 | * @param {Function} iteratee The function invoked per iteration.
745 | * @param {*} [accumulator] The initial value.
746 | * @param {boolean} [initAccum] Specify using the first element of `array` as
747 | * the initial value.
748 | * @returns {*} Returns the accumulated value.
749 | */
750 | function arrayReduce(array, iteratee, accumulator, initAccum) {
751 | var index = -1,
752 | length = array == null ? 0 : array.length;
753 |
754 | if (initAccum && length) {
755 | accumulator = array[++index];
756 | }
757 | while (++index < length) {
758 | accumulator = iteratee(accumulator, array[index], index, array);
759 | }
760 | return accumulator;
761 | }
762 |
763 | module.exports = arrayReduce;
764 |
765 |
766 | /***/ },
767 | /* 21 */
768 | /***/ function(module, exports) {
769 |
770 | /**
771 | * This method returns the first argument it receives.
772 | *
773 | * @static
774 | * @since 0.1.0
775 | * @memberOf _
776 | * @category Util
777 | * @param {*} value Any value.
778 | * @returns {*} Returns `value`.
779 | * @example
780 | *
781 | * var object = { 'a': 1 };
782 | *
783 | * console.log(_.identity(object) === object);
784 | * // => true
785 | */
786 | function identity(value) {
787 | return value;
788 | }
789 |
790 | module.exports = identity;
791 |
792 |
793 | /***/ },
794 | /* 22 */
795 | /***/ function(module, exports, __webpack_require__) {
796 |
797 | var asciiWords = __webpack_require__(23),
798 | hasUnicodeWord = __webpack_require__(24),
799 | toString = __webpack_require__(10),
800 | unicodeWords = __webpack_require__(25);
801 |
802 | /**
803 | * Splits `string` into an array of its words.
804 | *
805 | * @static
806 | * @memberOf _
807 | * @since 3.0.0
808 | * @category String
809 | * @param {string} [string=''] The string to inspect.
810 | * @param {RegExp|string} [pattern] The pattern to match words.
811 | * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
812 | * @returns {Array} Returns the words of `string`.
813 | * @example
814 | *
815 | * _.words('fred, barney, & pebbles');
816 | * // => ['fred', 'barney', 'pebbles']
817 | *
818 | * _.words('fred, barney, & pebbles', /[^, ]+/g);
819 | * // => ['fred', 'barney', '&', 'pebbles']
820 | */
821 | function words(string, pattern, guard) {
822 | string = toString(string);
823 | pattern = guard ? undefined : pattern;
824 |
825 | if (pattern === undefined) {
826 | return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
827 | }
828 | return string.match(pattern) || [];
829 | }
830 |
831 | module.exports = words;
832 |
833 |
834 | /***/ },
835 | /* 23 */
836 | /***/ function(module, exports) {
837 |
838 | /** Used to match words composed of alphanumeric characters. */
839 | var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
840 |
841 | /**
842 | * Splits an ASCII `string` into an array of its words.
843 | *
844 | * @private
845 | * @param {string} The string to inspect.
846 | * @returns {Array} Returns the words of `string`.
847 | */
848 | function asciiWords(string) {
849 | return string.match(reAsciiWord) || [];
850 | }
851 |
852 | module.exports = asciiWords;
853 |
854 |
855 | /***/ },
856 | /* 24 */
857 | /***/ function(module, exports) {
858 |
859 | /**
860 | * This method returns `false`.
861 | *
862 | * @static
863 | * @memberOf _
864 | * @since 4.13.0
865 | * @category Util
866 | * @returns {boolean} Returns `false`.
867 | * @example
868 | *
869 | * _.times(2, _.stubFalse);
870 | * // => [false, false]
871 | */
872 | function stubFalse() {
873 | return false;
874 | }
875 |
876 | module.exports = stubFalse;
877 |
878 |
879 | /***/ },
880 | /* 25 */
881 | /***/ function(module, exports) {
882 |
883 | /** Used to match words composed of alphanumeric characters. */
884 | var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
885 |
886 | /**
887 | * Splits an ASCII `string` into an array of its words.
888 | *
889 | * @private
890 | * @param {string} The string to inspect.
891 | * @returns {Array} Returns the words of `string`.
892 | */
893 | function asciiWords(string) {
894 | return string.match(reAsciiWord) || [];
895 | }
896 |
897 | module.exports = asciiWords;
898 |
899 |
900 | /***/ },
901 | /* 26 */
902 | /***/ function(module, exports) {
903 |
904 | 'use strict';
905 |
906 | Object.defineProperty(exports, "__esModule", {
907 | value: true
908 | });
909 | var ANIMATABLE_VALUES = ['columnCount', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleWidth', 'columns', 'flex', 'flexBasis', 'flexGrow', 'flexShrink', 'order', 'perspective', 'perspectiveOrigin', 'perspectiveOriginX', 'perspectiveOriginY', 'scrollSnapCoordinate', 'scrollSnapDirection', 'textDecoration', 'textDecorationColor', 'transform', 'transformOrigin', 'transformOriginX', 'transformOriginY', 'transformOriginZ', 'transformStyle'];
910 |
911 | var CSS_PROPERTIES = ['alignContent', 'alignItems', 'alignSelf', 'animation', 'animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction', 'appearance', 'aspectRatio', 'backfaceVisibility', 'backgroundClip', 'borderImage', 'borderImageSlice', 'boxShadow', 'columnCount', 'columnFill', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleStyle', 'columnRuleWidth', 'columnSpan', 'columnWidth', 'columns', 'flex', 'flexBasis', 'flexDirection', 'flexFlow', 'flexGrow', 'flexShrink', 'flexWrap', 'fontFeatureSettings', 'fontKearning', 'fontVariantLigatures', 'justifyContent', 'grid', 'gridArea', 'gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'gridTemplate', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows', 'hyphens', 'lineBreak', 'perspective', 'perspectiveOrigin', 'perspectiveOriginX', 'perspectiveOriginY', 'rubyPosition', 'scrollSnapCoordinate', 'scrollSnapDestination', 'scrollSnapPoints', 'scrollSnapPointsX', 'scrollSnapPointsY', 'scrollSnapType', 'tabSize', 'textDecoration', 'textDecorationColor', 'textDecorationLine', 'textDecorationStyle', 'textOrientation', 'textSizeAdjust', 'transform', 'transition', 'transformOrigin', 'transformOriginX', 'transformOriginY', 'transformOriginZ', 'transformStyle', 'transitionProperty', 'transitionDuration', 'transitionTimingFunction', 'transitionDelay', 'userModify', 'userSelect'];
912 |
913 | exports.ANIMATABLE_VALUES = ANIMATABLE_VALUES;
914 | exports.CSS_PROPERTIES = CSS_PROPERTIES;
915 |
916 | /***/ }
917 | /******/ ])
918 | });
919 | ;
920 | //# sourceMappingURL=react-prefixer.js.map
--------------------------------------------------------------------------------
/dist/react-prefixer.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 1f51bb4c3604982a9c23","webpack:///./src/index.js","webpack:///./~/lodash/isPlainObject.js","webpack:///./~/lodash/_baseGetTag.js","webpack:///./~/lodash/_getPrototype.js","webpack:///./~/lodash/_overArg.js","webpack:///./~/lodash/isObjectLike.js","webpack:///./src/prefix.js","webpack:///./src/supports.js","webpack:///./~/lodash/camelCase.js","webpack:///./~/lodash/capitalize.js","webpack:///./~/lodash/toString.js","webpack:///./~/lodash/upperFirst.js","webpack:///./~/lodash/_createCaseFirst.js","webpack:///./~/lodash/_castSlice.js","webpack:///./~/lodash/_baseSlice.js","webpack:///./~/lodash/_hasUnicode.js","webpack:///./~/lodash/_stringToArray.js","webpack:///./~/lodash/_asciiToArray.js","webpack:///./~/lodash/_unicodeToArray.js","webpack:///./~/lodash/_createCompounder.js","webpack:///./~/lodash/_arrayReduce.js","webpack:///./~/lodash/deburr.js","webpack:///./~/lodash/words.js","webpack:///./~/lodash/_asciiWords.js","webpack:///./~/lodash/_hasUnicodeWord.js","webpack:///./~/lodash/_unicodeWords.js","webpack:///./src/constants.js"],"names":["toKebabCase","string","replace","$1","toLowerCase","applyPrefixes","object","value","Object","keys","reduce","styleObject","originalKey","key","indexOf","js","charAt","toUpperCase","slice","css","animatableValuesObject","animatableValues","animatableValue","kebabValue","re","RegExp","test","cleanValue","prefixObject","window","styles","getComputedStyle","document","documentElement","prefixString","Array","prototype","call","join","standardPrefixString","match","operaPrefixString","OLink","prefixMatch","prefix","isSupported","property","CSS","supports","supportsCSS","camelCaseProperty","element","createElement","support","style","cssText","ANIMATABLE_VALUES","CSS_PROPERTIES"],"mappings":"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AmBH,QAAnB,EAA6BvC,KAA7B,CAAP;AACD;;AAED;AACA,OAAM2C,oBAAoB,yBAAUJ,QAAV,CAA1B;;AAEA;AACA,OAAMK,UAAUnB,SAASoB,aAAT,CAAuB,KAAvB,CAAhB;AACA,OAAMC,UAAWH,qBAAqBC,QAAQG,KAA9C;;AAEA;AACAH,WAAQG,KAAR,CAAcC,OAAd,GAA2BT,QAA3B,SAAuCvC,KAAvC;;AAEA;AACA;AACA,UAAO8C,WAAYF,QAAQG,KAAR,CAAcJ,iBAAd,MAAqC,EAAxD;AACD,EAxBD;;mBA0BeL,W;;;;;;;ACnCf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;;;;;;AC5BA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,EAAE;AACf;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;ACXA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;ACXA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,QAAQ;AACnB;AACA,cAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,EAAE;AACf;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,cAAc;AACzB,aAAY,OAAO;AACnB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","file":"react-prefixer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"react-prefixer\"] = factory();\n\telse\n\t\troot[\"react-prefixer\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 1f51bb4c3604982a9c23","import isPlainObject from 'lodash/isPlainObject';\n\nimport prefix from './prefix';\nimport isSupported from './supports';\n\nimport {\n ANIMATABLE_VALUES,\n CSS_PROPERTIES\n} from './constants';\n\nconst toKebabCase = (string) => {\n return string.replace(/([A-Z])/g, ($1) => {\n return `-${$1.toLowerCase()}`;\n });\n};\n\n/**\n * create a new style object with prefixes applied\n *\n * @param {Object} object\n * @returns {Object}\n */\nconst applyPrefixes = (object) => {\n if (!isPlainObject(object)) {\n return object;\n }\n\n let value;\n\n return Object.keys(object).reduce((styleObject, originalKey) => {\n let key = originalKey;\n\n value = object[key];\n\n if (isPlainObject(value)) {\n return {\n ...styleObject,\n [key]: applyPrefixes(value)\n };\n }\n\n if (CSS_PROPERTIES.indexOf(key) !== -1 && !isSupported(toKebabCase(key), value)) {\n key = `${prefix.js}${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n }\n\n if (originalKey === 'display' && object[originalKey] === 'flex' && !isSupported('display', 'flex')) {\n return {\n ...styleObject,\n [key]: (prefix.js === 'ms' ? '-ms-flexbox' : `${prefix.css}flex`)\n };\n }\n\n if (originalKey === 'transition') {\n const animatableValuesObject = ANIMATABLE_VALUES.reduce((animatableValues, animatableValue) => {\n const kebabValue = toKebabCase(animatableValue);\n const re = new RegExp(kebabValue, 'g');\n\n if (re.test(object[originalKey]) && !isSupported(kebabValue)) {\n const cleanValue = object[originalKey].replace(re, `${prefix.css}${kebabValue}`);\n\n return {\n ...animatableValues,\n [key]: cleanValue\n };\n }\n\n return animatableValues;\n }, {});\n\n return {\n ...styleObject,\n ...animatableValuesObject\n };\n }\n\n return {\n ...styleObject,\n [key]: value\n };\n }, {});\n};\n\nexport default applyPrefixes;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isPlainObject.js\n// module id = 1\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseGetTag.js\n// module id = 2\n// module chunks = 0","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getPrototype.js\n// module id = 3\n// module chunks = 0","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overArg.js\n// module id = 4\n// module chunks = 0","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObjectLike.js\n// module id = 5\n// module chunks = 0","let prefixObject = {\n css: '',\n js: ''\n};\n\nif (typeof window !== 'undefined') {\n const styles = window.getComputedStyle(document.documentElement);\n\n const prefixString = Array.prototype.slice.call(styles).join('');\n const standardPrefixString = prefixString.match(/-(moz|webkit|ms)-/);\n const operaPrefixString = prefixString.match(styles.OLink === '' && ['', 'o']);\n const prefixMatch = standardPrefixString || operaPrefixString;\n\n const prefix = prefixMatch ? prefixMatch[1] : '';\n\n prefixObject = {\n css: `-${prefix}-`,\n js: prefix\n };\n\n if (prefixObject.js !== 'ms') {\n prefixObject = {\n ...prefixObject,\n js: `${prefixObject.js.charAt(0).toUpperCase()}${prefixObject.js.slice(1)}`\n };\n }\n}\n\nexport default prefixObject;\n\n\n\n// WEBPACK FOOTER //\n// ./src/prefix.js","import camelCase from 'lodash/camelCase';\n\n/**\n * is the property supported, or is the value supported for the given property\n * \n * @param {string} property\n * @param {number|string} value\n * @returns {boolean}\n */\nconst isSupported = (property, value) => {\n // Try the native standard method first\n if ('CSS' in window && 'supports' in window.CSS) {\n return window.CSS.supports(property, value);\n }\n\n // Check Opera's native method\n if ('supportsCSS' in window) {\n return window.supportsCSS(property, value);\n }\n\n // Convert to camel-case for DOM interactions\n const camelCaseProperty = camelCase(property);\n\n // Check if the property is supported\n const element = document.createElement('div');\n const support = (camelCaseProperty in element.style);\n\n // Assign the property and value to invoke the CSS interpreter\n element.style.cssText = `${property}:${value}`;\n\n // Ensure both the property and value are\n // supported and return\n return support && (element.style[camelCaseProperty] !== '');\n};\n\nexport default isSupported;\n\n\n\n// WEBPACK FOOTER //\n// ./src/supports.js","var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/camelCase.js\n// module id = 8\n// module chunks = 0","var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/capitalize.js\n// module id = 9\n// module chunks = 0","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/toString.js\n// module id = 10\n// module chunks = 0","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/upperFirst.js\n// module id = 11\n// module chunks = 0","var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_createCaseFirst.js\n// module id = 12\n// module chunks = 0","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_castSlice.js\n// module id = 13\n// module chunks = 0","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseSlice.js\n// module id = 14\n// module chunks = 0","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hasUnicode.js\n// module id = 15\n// module chunks = 0","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stringToArray.js\n// module id = 16\n// module chunks = 0","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_asciiToArray.js\n// module id = 17\n// module chunks = 0","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_unicodeToArray.js\n// module id = 18\n// module chunks = 0","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_createCompounder.js\n// module id = 19\n// module chunks = 0","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayReduce.js\n// module id = 20\n// module chunks = 0","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/deburr.js\n// module id = 21\n// module chunks = 0","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/words.js\n// module id = 22\n// module chunks = 0","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_asciiWords.js\n// module id = 23\n// module chunks = 0","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hasUnicodeWord.js\n// module id = 24\n// module chunks = 0","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_unicodeWords.js\n// module id = 25\n// module chunks = 0","const ANIMATABLE_VALUES = [\n 'columnCount',\n 'columnGap',\n 'columnRule',\n 'columnRuleColor',\n 'columnRuleWidth',\n 'columns',\n 'flex',\n 'flexBasis',\n 'flexGrow',\n 'flexShrink',\n 'order',\n 'perspective',\n 'perspectiveOrigin',\n 'perspectiveOriginX',\n 'perspectiveOriginY',\n 'scrollSnapCoordinate',\n 'scrollSnapDirection',\n 'textDecoration',\n 'textDecorationColor',\n 'transform',\n 'transformOrigin',\n 'transformOriginX',\n 'transformOriginY',\n 'transformOriginZ',\n 'transformStyle'\n];\n\nconst CSS_PROPERTIES = [\n 'alignContent',\n 'alignItems',\n 'alignSelf',\n 'animation',\n 'animationDelay',\n 'animationDirection',\n 'animationDuration',\n 'animationFillMode',\n 'animationIterationCount',\n 'animationName',\n 'animationPlayState',\n 'animationTimingFunction',\n 'appearance',\n 'aspectRatio',\n 'backfaceVisibility',\n 'backgroundClip',\n 'borderImage',\n 'borderImageSlice',\n 'boxShadow',\n 'columnCount',\n 'columnFill',\n 'columnGap',\n 'columnRule',\n 'columnRuleColor',\n 'columnRuleStyle',\n 'columnRuleWidth',\n 'columnSpan',\n 'columnWidth',\n 'columns',\n 'flex',\n 'flexBasis',\n 'flexDirection',\n 'flexFlow',\n 'flexGrow',\n 'flexShrink',\n 'flexWrap',\n 'fontFeatureSettings',\n 'fontKearning',\n 'fontVariantLigatures',\n 'justifyContent',\n 'grid',\n 'gridArea',\n 'gridAutoColumns',\n 'gridAutoFlow',\n 'gridAutoRows',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnStart',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowStart',\n 'gridTemplate',\n 'gridTemplateAreas',\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'hyphens',\n 'lineBreak',\n 'perspective',\n 'perspectiveOrigin',\n 'perspectiveOriginX',\n 'perspectiveOriginY',\n 'rubyPosition',\n 'scrollSnapCoordinate',\n 'scrollSnapDestination',\n 'scrollSnapPoints',\n 'scrollSnapPointsX',\n 'scrollSnapPointsY',\n 'scrollSnapType',\n 'tabSize',\n 'textDecoration',\n 'textDecorationColor',\n 'textDecorationLine',\n 'textDecorationStyle',\n 'textOrientation',\n 'textSizeAdjust',\n 'transform',\n 'transition',\n 'transformOrigin',\n 'transformOriginX',\n 'transformOriginY',\n 'transformOriginZ',\n 'transformStyle',\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n 'userModify',\n 'userSelect'\n];\n\nexport {ANIMATABLE_VALUES};\nexport {CSS_PROPERTIES};\n\n\n\n// WEBPACK FOOTER //\n// ./src/constants.js"],"sourceRoot":""}
--------------------------------------------------------------------------------