From bbe4cfbaedb8780fbb352801a0f630f5a5d433a7 Mon Sep 17 00:00:00 2001 From: rofrischmann Date: Sat, 28 Jan 2017 01:41:21 +0100 Subject: [PATCH] huge refactoring with benchmarks and co --- .babelrc | 7 +- .esformatter | 386 -- .eslintignore | 2 +- .eslintrc | 38 +- .flowconfig | 7 + .../cases/{newDynamic.js => 205-dynamic.js} | 18 +- .../cases/{oldDynamic.js => 300-dynamic.js} | 18 +- benchmark/dynamic/cases/index.js | 4 +- benchmark/dynamic/index.js | 38 +- benchmark/packages/206/plugins/calc.js | 29 - benchmark/packages/206/plugins/flex.js | 31 - benchmark/packages/206/plugins/flexboxOld.js | 66 - benchmark/packages/206/plugins/grabCursor.js | 30 - benchmark/packages/206/plugins/gradient.js | 31 - benchmark/packages/206/plugins/position.js | 27 - benchmark/packages/206/plugins/zoomCursor.js | 31 - benchmark/packages/206/prefixProps.js | 7 - benchmark/packages/206/static/prefixAll.js | 121 - .../206/utils/getBrowserInformation.js | 108 - .../206/utils/getPrefixedKeyframes.js | 20 - .../packages/206/utils/getPrefixedValue.js | 11 - .../packages/206/utils/isPrefixedValue.js | 13 - .../packages/206/utils/sortPrefixedStyle.js | 32 - .../packages/206/utils/unprefixProperty.js | 12 - benchmark/packages/206/utils/valuePrefixes.js | 8 - .../packages/{206 => 300/dynamic}/Prefixer.js | 220 +- .../packages/300/dynamic/plugins/calc.js | 24 + .../packages/300/dynamic/plugins/flex.js | 28 + .../{206 => 300/dynamic}/plugins/flexboxIE.js | 33 +- .../300/dynamic/plugins/flexboxOld.js | 65 + .../300/dynamic/plugins/grabCursor.js | 28 + .../packages/300/dynamic/plugins/gradient.js | 25 + .../packages/300/dynamic/plugins/position.js | 23 + .../{206 => 300/dynamic}/plugins/sizing.js | 15 +- .../dynamic}/plugins/transition.js | 39 +- .../300/dynamic/plugins/zoomCursor.js | 28 + benchmark/packages/300/dynamic/prefixProps.js | 7 + .../{206 => 300}/static/plugins/calc.js | 1 - .../{206 => 300}/static/plugins/cursor.js | 0 .../{206 => 300}/static/plugins/flex.js | 7 +- .../{206 => 300}/static/plugins/flexboxIE.js | 0 .../{206 => 300}/static/plugins/flexboxOld.js | 11 +- .../{206 => 300}/static/plugins/gradient.js | 1 + .../{206 => 300}/static/plugins/position.js | 2 +- .../{206 => 300}/static/plugins/sizing.js | 0 .../{206 => 300}/static/plugins/transition.js | 0 benchmark/packages/300/static/prefixAll.js | 104 + .../{206 => 300}/static/prefixProps.js | 0 .../packages/300/utils/addNewValuesOnly.js | 22 + .../{206 => 300}/utils/capitalizeString.js | 8 +- .../300/utils/getBrowserInformation.js | 127 + .../300/utils/getPrefixedKeyframes.js | 15 + .../packages/300/utils/getPrefixedValue.js | 13 + .../utils/isObject.js} | 9 +- .../packages/300/utils/isPrefixedProperty.js | 12 + .../packages/300/utils/isPrefixedValue.js | 15 + .../packages/300/utils/prefixProperty.js | 23 + benchmark/packages/300/utils/prefixValue.js | 18 + .../packages/300/utils/unprefixProperty.js | 22 + benchmark/size/205-dynamic.js | 1 + .../size/{old_static.js => 205-static.js} | 2 +- benchmark/size/300-dynamic.js | 1 + benchmark/size/300-static.js | 1 + benchmark/size/index.js | 73 +- benchmark/size/new.js | 1 - benchmark/size/new_static.js | 1 - benchmark/size/old.js | 1 - .../cases/{oldStatic.js => 205-static.js} | 16 +- .../cases/{newStatic.js => 300-static.js} | 16 +- benchmark/static/cases/index.js | 4 +- benchmark/static/index.js | 38 +- dist/inline-style-prefix-all.js | 340 -- dist/inline-style-prefix-all.js.map | 1 - dist/inline-style-prefix-all.min.js | 1 - dist/inline-style-prefixer.js | 1365 ------- dist/inline-style-prefixer.js.map | 1 - dist/inline-style-prefixer.min.js | 1 - flowtypes/PluginMetaData.js | 8 + generator/generateData.js | 88 +- modules/Prefixer.js | 151 - modules/dynamic/Prefixer.js | 154 + modules/dynamic/plugins/calc.js | 22 + modules/dynamic/plugins/flex.js | 27 + modules/dynamic/plugins/flexboxIE.js | 46 + modules/dynamic/plugins/flexboxOld.js | 71 + modules/dynamic/plugins/grabCursor.js | 30 + modules/dynamic/plugins/gradient.js | 26 + modules/dynamic/plugins/position.js | 18 + modules/{ => dynamic}/plugins/sizing.js | 16 +- modules/dynamic/plugins/transition.js | 44 + modules/dynamic/plugins/zoomCursor.js | 27 + modules/dynamic/prefixProps.js | 1 + modules/plugins/calc.js | 17 - modules/plugins/flex.js | 18 - modules/plugins/flexboxIE.js | 42 - modules/plugins/flexboxOld.js | 54 - modules/plugins/grabCursor.js | 20 - modules/plugins/gradient.js | 21 - modules/plugins/position.js | 15 - modules/plugins/transition.js | 27 - modules/plugins/zoomCursor.js | 19 - modules/prefixProps.js | 1 - modules/static/plugins/calc.js | 8 +- modules/static/plugins/cursor.js | 5 +- modules/static/plugins/flex.js | 10 +- modules/static/plugins/flexboxIE.js | 7 +- modules/static/plugins/flexboxOld.js | 19 +- modules/static/plugins/gradient.js | 12 +- modules/static/plugins/position.js | 5 +- modules/static/plugins/sizing.js | 5 +- modules/static/plugins/transition.js | 44 +- modules/static/prefixAll.js | 84 +- modules/utils/addNewValuesOnly.js | 16 + modules/utils/capitalizeString.js | 6 +- modules/utils/getBrowserInformation.js | 147 +- modules/utils/getPrefixedKeyframes.js | 22 +- modules/utils/getPrefixedValue.js | 12 +- modules/utils/isObject.js | 4 + modules/utils/isPrefixedProperty.js | 7 +- modules/utils/isPrefixedValue.js | 11 +- modules/utils/prefixProperty.js | 16 + modules/utils/prefixValue.js | 18 + modules/utils/sortPrefixedStyle.js | 20 - modules/utils/unprefixProperty.js | 13 +- modules/utils/valuePrefixes.js | 2 - package.json | 49 +- test/prefixAll-test.js | 464 +-- test/prefixer-test.js | 681 ++-- yarn.lock | 3256 +++++++++++++++++ 129 files changed, 5633 insertions(+), 4177 deletions(-) delete mode 100644 .esformatter create mode 100644 .flowconfig rename benchmark/dynamic/cases/{newDynamic.js => 205-dynamic.js} (61%) rename benchmark/dynamic/cases/{oldDynamic.js => 300-dynamic.js} (61%) delete mode 100644 benchmark/packages/206/plugins/calc.js delete mode 100644 benchmark/packages/206/plugins/flex.js delete mode 100644 benchmark/packages/206/plugins/flexboxOld.js delete mode 100644 benchmark/packages/206/plugins/grabCursor.js delete mode 100644 benchmark/packages/206/plugins/gradient.js delete mode 100644 benchmark/packages/206/plugins/position.js delete mode 100644 benchmark/packages/206/plugins/zoomCursor.js delete mode 100644 benchmark/packages/206/prefixProps.js delete mode 100644 benchmark/packages/206/static/prefixAll.js delete mode 100644 benchmark/packages/206/utils/getBrowserInformation.js delete mode 100644 benchmark/packages/206/utils/getPrefixedKeyframes.js delete mode 100644 benchmark/packages/206/utils/getPrefixedValue.js delete mode 100644 benchmark/packages/206/utils/isPrefixedValue.js delete mode 100644 benchmark/packages/206/utils/sortPrefixedStyle.js delete mode 100644 benchmark/packages/206/utils/unprefixProperty.js delete mode 100644 benchmark/packages/206/utils/valuePrefixes.js rename benchmark/packages/{206 => 300/dynamic}/Prefixer.js (52%) create mode 100644 benchmark/packages/300/dynamic/plugins/calc.js create mode 100644 benchmark/packages/300/dynamic/plugins/flex.js rename benchmark/packages/{206 => 300/dynamic}/plugins/flexboxIE.js (51%) create mode 100644 benchmark/packages/300/dynamic/plugins/flexboxOld.js create mode 100644 benchmark/packages/300/dynamic/plugins/grabCursor.js create mode 100644 benchmark/packages/300/dynamic/plugins/gradient.js create mode 100644 benchmark/packages/300/dynamic/plugins/position.js rename benchmark/packages/{206 => 300/dynamic}/plugins/sizing.js (56%) rename benchmark/packages/{206 => 300/dynamic}/plugins/transition.js (58%) create mode 100644 benchmark/packages/300/dynamic/plugins/zoomCursor.js create mode 100644 benchmark/packages/300/dynamic/prefixProps.js rename benchmark/packages/{206 => 300}/static/plugins/calc.js (99%) rename benchmark/packages/{206 => 300}/static/plugins/cursor.js (100%) rename benchmark/packages/{206 => 300}/static/plugins/flex.js (61%) rename benchmark/packages/{206 => 300}/static/plugins/flexboxIE.js (100%) rename benchmark/packages/{206 => 300}/static/plugins/flexboxOld.js (70%) rename benchmark/packages/{206 => 300}/static/plugins/gradient.js (99%) rename benchmark/packages/{206 => 300}/static/plugins/position.js (83%) rename benchmark/packages/{206 => 300}/static/plugins/sizing.js (100%) rename benchmark/packages/{206 => 300}/static/plugins/transition.js (100%) create mode 100644 benchmark/packages/300/static/prefixAll.js rename benchmark/packages/{206 => 300}/static/prefixProps.js (100%) create mode 100644 benchmark/packages/300/utils/addNewValuesOnly.js rename benchmark/packages/{206 => 300}/utils/capitalizeString.js (70%) create mode 100644 benchmark/packages/300/utils/getBrowserInformation.js create mode 100644 benchmark/packages/300/utils/getPrefixedKeyframes.js create mode 100644 benchmark/packages/300/utils/getPrefixedValue.js rename benchmark/packages/{206/utils/isPrefixedProperty.js => 300/utils/isObject.js} (50%) create mode 100644 benchmark/packages/300/utils/isPrefixedProperty.js create mode 100644 benchmark/packages/300/utils/isPrefixedValue.js create mode 100644 benchmark/packages/300/utils/prefixProperty.js create mode 100644 benchmark/packages/300/utils/prefixValue.js create mode 100644 benchmark/packages/300/utils/unprefixProperty.js create mode 100644 benchmark/size/205-dynamic.js rename benchmark/size/{old_static.js => 205-static.js} (86%) create mode 100644 benchmark/size/300-dynamic.js create mode 100644 benchmark/size/300-static.js delete mode 100644 benchmark/size/new.js delete mode 100644 benchmark/size/new_static.js delete mode 100644 benchmark/size/old.js rename benchmark/static/cases/{oldStatic.js => 205-static.js} (57%) rename benchmark/static/cases/{newStatic.js => 300-static.js} (57%) delete mode 100644 dist/inline-style-prefix-all.js delete mode 100644 dist/inline-style-prefix-all.js.map delete mode 100644 dist/inline-style-prefix-all.min.js delete mode 100644 dist/inline-style-prefixer.js delete mode 100644 dist/inline-style-prefixer.js.map delete mode 100644 dist/inline-style-prefixer.min.js create mode 100644 flowtypes/PluginMetaData.js delete mode 100644 modules/Prefixer.js create mode 100644 modules/dynamic/Prefixer.js create mode 100644 modules/dynamic/plugins/calc.js create mode 100644 modules/dynamic/plugins/flex.js create mode 100644 modules/dynamic/plugins/flexboxIE.js create mode 100644 modules/dynamic/plugins/flexboxOld.js create mode 100644 modules/dynamic/plugins/grabCursor.js create mode 100644 modules/dynamic/plugins/gradient.js create mode 100644 modules/dynamic/plugins/position.js rename modules/{ => dynamic}/plugins/sizing.js (52%) create mode 100644 modules/dynamic/plugins/transition.js create mode 100644 modules/dynamic/plugins/zoomCursor.js create mode 100644 modules/dynamic/prefixProps.js delete mode 100644 modules/plugins/calc.js delete mode 100644 modules/plugins/flex.js delete mode 100644 modules/plugins/flexboxIE.js delete mode 100644 modules/plugins/flexboxOld.js delete mode 100644 modules/plugins/grabCursor.js delete mode 100644 modules/plugins/gradient.js delete mode 100644 modules/plugins/position.js delete mode 100644 modules/plugins/transition.js delete mode 100644 modules/plugins/zoomCursor.js delete mode 100644 modules/prefixProps.js create mode 100644 modules/utils/addNewValuesOnly.js create mode 100644 modules/utils/isObject.js create mode 100644 modules/utils/prefixProperty.js create mode 100644 modules/utils/prefixValue.js delete mode 100644 modules/utils/sortPrefixedStyle.js delete mode 100644 modules/utils/valuePrefixes.js create mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc index 1fad90e..2488dfe 100644 --- a/.babelrc +++ b/.babelrc @@ -1,10 +1,11 @@ { "presets": [ "es2015", - "stage-0" + "stage-0", + "react" ], "plugins": [ - "transform-class-properties", - "add-module-exports" + "add-module-exports", + "transform-class-properties" ] } diff --git a/.esformatter b/.esformatter deleted file mode 100644 index 08aa477..0000000 --- a/.esformatter +++ /dev/null @@ -1,386 +0,0 @@ -{ - "plugins":[ - "esformatter-quotes", - "esformatter-literal-notation", - "esformatter-parseint", - "esformatter-spaced-lined-comment", - "esformatter-var-each", - "esformatter-braces", - "esformatter-dot-notation", - "esformatter-remove-trailing-commas", - "esformatter-collapse-objects", - "esformatter-quote-props" - ], - "quotes":{ - "type":"single" - }, - "indent":{ - "value":" ", - "alignComments":true, - "ArrayExpression":1, - "ArrowFunctionExpression":1, - "AssignmentExpression":1, - "AssignmentExpression.BinaryExpression":1, - "AssignmentExpression.LogicalExpression":1, - "AssignmentExpression.UnaryExpression":1, - "CallExpression":1, - "CallExpression.BinaryExpression":1, - "CallExpression.LogicalExpression":1, - "CallExpression.UnaryExpression":1, - "CatchClause":1, - "ConditionalExpression":1, - "CommentInsideEmptyBlock":1, - "ClassDeclaration":1, - "DoWhileStatement":1, - "ForInStatement":1, - "ForStatement":1, - "FunctionDeclaration":1, - "FunctionExpression":1, - "IfStatement":1, - "MemberExpression":1, - "MultipleVariableDeclaration":1, - "NewExpression":1, - "ObjectExpression":1, - "ObjectExpression.BinaryExpression":1, - "ObjectExpression.LogicalExpression":1, - "ObjectExpression.UnaryExpression":1, - "ParameterList":1, - "ReturnStatement":1, - "SwitchCase":1, - "SwitchStatement":1, - "TopLevelFunctionBlock":1, - "TryStatement":1, - "VariableDeclaration.BinaryExpression":1, - "VariableDeclaration.LogicalExpression":1, - "VariableDeclaration.UnaryExpression":1, - "WhileStatement":1 - }, - "lineBreak":{ - "value":"\n", - "before":{ - "AssignmentExpression":">=1", - "AssignmentOperator":0, - "ArrowFunctionExpressionArrow":0, - "ArrowFunctionExpressionOpeningBrace":0, - "ArrowFunctionExpressionClosingBrace":">=1", - "BlockStatement":0, - "BreakKeyword":">=1", - "CallExpression":-1, - "CallExpressionOpeningParentheses":0, - "CallExpressionClosingParentheses":-1, - "ClassDeclaration":">=1", - "ClassDeclarationOpeningBrace":0, - "ClassDeclarationClosingBrace":">=1", - "ConditionalExpression":">=1", - "CatchOpeningBrace":0, - "CatchClosingBrace":">=1", - "CatchKeyword":0, - "DeleteOperator":">=1", - "DoWhileStatement":">=1", - "DoWhileStatementOpeningBrace":0, - "DoWhileStatementClosingBrace":">=1", - "EndOfFile":-1, - "EmptyStatement":-1, - "FinallyKeyword":-1, - "FinallyOpeningBrace":0, - "FinallyClosingBrace":">=1", - "ForInStatement":">=1", - "ForInStatementExpressionOpening":0, - "ForInStatementExpressionClosing":0, - "ForInStatementOpeningBrace":0, - "ForInStatementClosingBrace":">=1", - "ForStatement":">=1", - "ForStatementExpressionOpening":0, - "ForStatementExpressionClosing":"<2", - "ForStatementOpeningBrace":0, - "ForStatementClosingBrace":">=1", - "FunctionExpression":-1, - "FunctionExpressionOpeningBrace":0, - "FunctionExpressionClosingBrace":">=1", - "FunctionDeclaration":">=1", - "FunctionDeclarationOpeningBrace":0, - "FunctionDeclarationClosingBrace":">=1", - "IIFEClosingParentheses":0, - "IfStatement":">=1", - "IfStatementOpeningBrace":0, - "IfStatementClosingBrace":">=1", - "ElseIfStatement":0, - "ElseIfStatementOpeningBrace":0, - "ElseIfStatementClosingBrace":">=1", - "ElseStatement":0, - "ElseStatementOpeningBrace":0, - "ElseStatementClosingBrace":">=1", - "LogicalExpression":-1, - "MethodDefinition":">=1", - "ObjectExpressionClosingBrace":">=1", - "ParameterDefault":0, - "Property":">=1", - "PropertyValue":0, - "ReturnStatement":-1, - "SwitchOpeningBrace":0, - "SwitchClosingBrace":">=1", - "ThisExpression":-1, - "ThrowStatement":">=1", - "TryKeyword":-1, - "TryOpeningBrace":0, - "TryClosingBrace":">=1", - "VariableName":">=1", - "VariableValue":0, - "VariableDeclaration":">=1", - "VariableDeclarationWithoutInit":">=1", - "WhileStatement":">=1", - "WhileStatementOpeningBrace":0, - "WhileStatementClosingBrace":">=1" - }, - "after":{ - "AssignmentExpression":">=1", - "AssignmentOperator":0, - "ArrowFunctionExpressionArrow":0, - "ArrowFunctionExpressionOpeningBrace":">=1", - "ArrowFunctionExpressionClosingBrace":-1, - "BlockStatement":0, - "BreakKeyword":-1, - "CallExpression":-1, - "CallExpressionOpeningParentheses":-1, - "CallExpressionClosingParentheses":-1, - "ClassDeclaration":">=1", - "ClassDeclarationOpeningBrace":">=1", - "ClassDeclarationClosingBrace":">=1", - "CatchOpeningBrace":">=1", - "CatchClosingBrace":">=0", - "CatchKeyword":0, - "ConditionalExpression":">=1", - "DeleteOperator":">=1", - "DoWhileStatement":">=1", - "DoWhileStatementOpeningBrace":">=1", - "DoWhileStatementClosingBrace":0, - "EmptyStatement":-1, - "FinallyKeyword":-1, - "FinallyOpeningBrace":">=1", - "FinallyClosingBrace":">=1", - "ForInStatement":">=1", - "ForInStatementExpressionOpening":"<2", - "ForInStatementExpressionClosing":-1, - "ForInStatementOpeningBrace":">=1", - "ForInStatementClosingBrace":">=1", - "ForStatement":">=1", - "ForStatementExpressionOpening":"<2", - "ForStatementExpressionClosing":-1, - "ForStatementOpeningBrace":">=1", - "ForStatementClosingBrace":">=1", - "FunctionExpression":">=1", - "FunctionExpressionOpeningBrace":">=1", - "FunctionExpressionClosingBrace":-1, - "FunctionDeclaration":">=1", - "FunctionDeclarationOpeningBrace":">=1", - "FunctionDeclarationClosingBrace":">=1", - "IIFEOpeningParentheses":0, - "IfStatement":">=1", - "IfStatementOpeningBrace":">=1", - "IfStatementClosingBrace":">=1", - "ElseIfStatement":">=1", - "ElseIfStatementOpeningBrace":">=1", - "ElseIfStatementClosingBrace":">=1", - "ElseStatement":">=1", - "ElseStatementOpeningBrace":">=1", - "ElseStatementClosingBrace":">=1", - "LogicalExpression":-1, - "MethodDefinition":">=1", - "ObjectExpressionOpeningBrace":">=1", - "ParameterDefault":0, - "Property":0, - "PropertyName":0, - "ReturnStatement":-1, - "SwitchOpeningBrace":">=1", - "SwitchClosingBrace":">=1", - "ThisExpression":0, - "ThrowStatement":">=1", - "TryKeyword":-1, - "TryOpeningBrace":">=1", - "TryClosingBrace":0, - "VariableDeclaration":">=1", - "WhileStatement":">=1", - "WhileStatementOpeningBrace":">=1", - "WhileStatementClosingBrace":">=1" - } - }, - "whiteSpace":{ - "value":" ", - "removeTrailing":1, - "before":{ - "ArrayExpressionOpening":0, - "ArrayExpressionClosing":1, - "ArrayExpressionComma":0, - "ArrayPatternOpening":1, - "ArrayPatternClosing":1, - "ArrayPatternComma":0, - "ArrowFunctionExpressionArrow":1, - "ArrowFunctionExpressionOpeningBrace":1, - "ArrowFunctionExpressionClosingBrace":0, - "ArgumentComma":0, - "ArgumentList":0, - "AssignmentOperator":1, - "BinaryExpression":0, - "BinaryExpressionOperator":1, - "BlockComment":1, - "CallExpression":-1, - "CallExpressionOpeningParentheses":0, - "CallExpressionClosingParentheses":-1, - "CatchParameterList":0, - "CatchOpeningBrace":1, - "CatchClosingBrace":1, - "CatchKeyword":1, - "CommaOperator":0, - "ClassDeclarationOpeningBrace":1, - "ClassDeclarationClosingBrace":1, - "ConditionalExpressionConsequent":1, - "ConditionalExpressionAlternate":1, - "DoWhileStatementOpeningBrace":1, - "DoWhileStatementClosingBrace":1, - "DoWhileStatementConditional":1, - "EmptyStatement":0, - "ExpressionClosingParentheses":0, - "FinallyKeyword":-1, - "FinallyOpeningBrace":1, - "FinallyClosingBrace":1, - "ForInStatement":1, - "ForInStatementExpressionOpening":1, - "ForInStatementExpressionClosing":0, - "ForInStatementOpeningBrace":1, - "ForInStatementClosingBrace":1, - "ForStatement":1, - "ForStatementExpressionOpening":1, - "ForStatementExpressionClosing":0, - "ForStatementOpeningBrace":1, - "ForStatementClosingBrace":1, - "ForStatementSemicolon":0, - "FunctionDeclarationOpeningBrace":1, - "FunctionDeclarationClosingBrace":1, - "FunctionExpressionOpeningBrace":1, - "FunctionExpressionClosingBrace":1, - "FunctionName":1, - "IIFEClosingParentheses":0, - "IfStatementConditionalOpening":1, - "IfStatementConditionalClosing":0, - "IfStatementOpeningBrace":1, - "IfStatementClosingBrace":1, - "ElseStatementOpeningBrace":1, - "ElseStatementClosingBrace":1, - "ElseIfStatementOpeningBrace":1, - "ElseIfStatementClosingBrace":1, - "LineComment":1, - "LogicalExpressionOperator":1, - "MemberExpressionClosing":0, - "ObjectExpressionOpeningBrace":-1, - "ObjectExpressionClosingBrace":1, - "ObjectPatternOpeningBrace":1, - "ObjectPatternClosingBrace":1, - "ObjectPatternComma":0, - "PropertyName":1, - "PropertyValue":1, - "ParameterComma":0, - "ParameterDefault":1, - "ParameterList":0, - "SwitchDiscriminantOpening":1, - "SwitchDiscriminantClosing":0, - "ThrowKeyword":1, - "TryKeyword":-1, - "TryOpeningBrace":1, - "TryClosingBrace":1, - "UnaryExpressionOperator":0, - "VariableName":1, - "VariableValue":1, - "WhileStatementConditionalOpening":1, - "WhileStatementConditionalClosing":0, - "WhileStatementOpeningBrace":1, - "WhileStatementClosingBrace":1 - }, - "after":{ - "ArrayExpressionOpening":1, - "ArrayExpressionClosing":0, - "ArrayExpressionComma":1, - "ArrayPatternOpening":1, - "ArrayPatternClosing":0, - "ArrayPatternComma":1, - "ArrowFunctionExpressionArrow":1, - "ArrowFunctionExpressionOpeningBrace":0, - "ArrowFunctionExpressionClosingBrace":0, - "ArgumentComma":1, - "ArgumentList":0, - "AssignmentOperator":1, - "BinaryExpression":0, - "BinaryExpressionOperator":1, - "BlockComment":1, - "CallExpression":-1, - "CallExpressionOpeningParentheses":-1, - "CallExpressionClosingParentheses":-1, - "CatchParameterList":0, - "CatchOpeningBrace":1, - "CatchClosingBrace":1, - "CatchKeyword":1, - "ClassDeclarationOpeningBrace":1, - "ClassDeclarationClosingBrace":1, - "CommaOperator":1, - "ConditionalExpressionConsequent":1, - "ConditionalExpressionTest":1, - "DoWhileStatementOpeningBrace":1, - "DoWhileStatementClosingBrace":1, - "DoWhileStatementBody":1, - "EmptyStatement":0, - "ExpressionOpeningParentheses":0, - "FinallyKeyword":-1, - "FinallyOpeningBrace":1, - "FinallyClosingBrace":1, - "ForInStatement":1, - "ForInStatementExpressionOpening":0, - "ForInStatementExpressionClosing":1, - "ForInStatementOpeningBrace":1, - "ForInStatementClosingBrace":1, - "ForStatement":1, - "ForStatementExpressionOpening":0, - "ForStatementExpressionClosing":1, - "ForStatementClosingBrace":1, - "ForStatementOpeningBrace":1, - "ForStatementSemicolon":1, - "FunctionReservedWord":0, - "FunctionName":0, - "FunctionExpressionOpeningBrace":1, - "FunctionExpressionClosingBrace":0, - "FunctionDeclarationOpeningBrace":1, - "FunctionDeclarationClosingBrace":1, - "IIFEOpeningParentheses":0, - "IfStatementConditionalOpening":0, - "IfStatementConditionalClosing":1, - "IfStatementOpeningBrace":1, - "IfStatementClosingBrace":1, - "ElseStatementOpeningBrace":1, - "ElseStatementClosingBrace":1, - "ElseIfStatementOpeningBrace":1, - "ElseIfStatementClosingBrace":1, - "MemberExpressionOpening":0, - "LogicalExpressionOperator":1, - "ObjectExpressionOpeningBrace":1, - "ObjectExpressionClosingBrace":0, - "ObjectPatternOpeningBrace":1, - "ObjectPatternClosingBrace":0, - "ObjectPatternComma":1, - "PropertyName":0, - "PropertyValue":0, - "ParameterComma":1, - "ParameterDefault":1, - "ParameterList":0, - "SwitchDiscriminantOpening":0, - "SwitchDiscriminantClosing":1, - "ThrowKeyword":1, - "TryKeyword":-1, - "TryOpeningBrace":1, - "TryClosingBrace":1, - "UnaryExpressionOperator":0, - "VariableName":1, - "WhileStatementConditionalOpening":0, - "WhileStatementConditionalClosing":1, - "WhileStatementOpeningBrace":1, - "WhileStatementClosingBrace":1 - } - } -} diff --git a/.eslintignore b/.eslintignore index 0202c1d..33d6bf4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,4 @@ lib/**/* coverage/**/* -modules/prefixProps.js +modules/dynamic/prefixProps.js modules/static/prefixProps.js diff --git a/.eslintrc b/.eslintrc index 82ff2e2..cec12fa 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,11 +1,39 @@ { - "extends": "eslint-config-rackt", - "env": { + "extends": [ "airbnb" ], + "parser": "babel-eslint", + "env": { "browser": true, - "mocha": true, - "node": true + "node": true, + "mocha": true }, + "plugins": [ + "flowtype" + ], "rules": { - "eol-last": 0 + "semi": [ 2, "never" ], + "object-curly-newline": ["error" ], + "object-property-newline": ["error", { + "allowMultiplePropertiesPerLine": false + }], + "comma-dangle": [ 2, "never" ], + "react/jsx-filename-extension": [2, { + "extensions": [".js", ".jsx"] + }], + "import/no-extraneous-dependencies": [ 0 ], + "react/prop-types": [ 0 ], + "no-confusing-arrow": [ 0 ], + "no-underscore-dangle": [ 0 ], + "no-param-reassign": [ 1 ], + "react/forbid-prop-types": [ 0 ], + "no-plusplus": [ 0 ], + "guard-for-in": [ 0 ], + "no-restricted-syntax": [ 1 ], + "no-continue": [ 1 ], + "no-prototype-builtins": [ 1 ], + "max-len": [ 2, 100 ], + "no-mixed-operators": [ 1 ], + "no-lonely-if": [ 1 ], + "no-bitwise": [ 0 ], + "consistent-return": [ 1 ] } } diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..4aae6cf --- /dev/null +++ b/.flowconfig @@ -0,0 +1,7 @@ +[ignore] + +# Disable module with broken flow types. +# .*/node_modules/babylon/*.* + +[version] +^0.38.0 diff --git a/benchmark/dynamic/cases/newDynamic.js b/benchmark/dynamic/cases/205-dynamic.js similarity index 61% rename from benchmark/dynamic/cases/newDynamic.js rename to benchmark/dynamic/cases/205-dynamic.js index d66adc6..9561ef6 100644 --- a/benchmark/dynamic/cases/newDynamic.js +++ b/benchmark/dynamic/cases/205-dynamic.js @@ -1,12 +1,12 @@ -import Prefixer from '../../packages/206/Prefixer'; +import Prefixer from '../../packages/205/Prefixer' -const CHROME45 = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'; +const CHROME45 = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36' -export const newDynamic = () => { +export const dynamic205 = () => { const styles = { color: 'red', display: 'flex', - justifyContent:'center', + justifyContent: 'center', alignItems: 'center', userSelect: 'none', fontSize: '12px', @@ -16,10 +16,10 @@ export const newDynamic = () => { transition: '300ms transform linear', transform: 'rotateX(30deg)', color: 'blue', - width: [ 'calc(100% - 50px)', '300px'] + width: ['calc(100% - 50px)', '300px'] } - }; + } - const prefixer = new Prefixer({ userAgent: CHROME45 }); - return prefixer.prefix(styles); -}; + const prefixer = new Prefixer({ userAgent: CHROME45 }) + return prefixer.prefix(styles) +} diff --git a/benchmark/dynamic/cases/oldDynamic.js b/benchmark/dynamic/cases/300-dynamic.js similarity index 61% rename from benchmark/dynamic/cases/oldDynamic.js rename to benchmark/dynamic/cases/300-dynamic.js index 41f4222..d107841 100644 --- a/benchmark/dynamic/cases/oldDynamic.js +++ b/benchmark/dynamic/cases/300-dynamic.js @@ -1,12 +1,12 @@ -import Prefixer from '../../packages/205/Prefixer'; +import Prefixer from '../../packages/300/dynamic/Prefixer' -const CHROME45 = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'; +const CHROME45 = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36' -export const oldDynamic = () => { +export const dynamic300 = () => { const styles = { color: 'red', display: 'flex', - justifyContent:'center', + justifyContent: 'center', alignItems: 'center', userSelect: 'none', fontSize: '12px', @@ -16,10 +16,10 @@ export const oldDynamic = () => { transition: '300ms transform linear', transform: 'rotateX(30deg)', color: 'blue', - width: [ 'calc(100% - 50px)', '300px'] + width: ['calc(100% - 50px)', '300px'] } - }; + } - const prefixer = new Prefixer({ userAgent: CHROME45 }); - return prefixer.prefix(styles); -}; + const prefixer = new Prefixer({ userAgent: CHROME45 }) + return prefixer.prefix(styles) +} diff --git a/benchmark/dynamic/cases/index.js b/benchmark/dynamic/cases/index.js index 25b9cc7..ee57b57 100644 --- a/benchmark/dynamic/cases/index.js +++ b/benchmark/dynamic/cases/index.js @@ -1,2 +1,2 @@ -export * from './newDynamic'; -export * from './oldDynamic'; +export * from './205-dynamic' +export * from './300-dynamic' diff --git a/benchmark/dynamic/index.js b/benchmark/dynamic/index.js index 3ab15ea..ec50994 100644 --- a/benchmark/dynamic/index.js +++ b/benchmark/dynamic/index.js @@ -1,26 +1,28 @@ -import { Suite } from 'benchmark'; -import beautifyBenchmark from 'beautify-benchmark'; -import { oldDynamic, newDynamic } from './cases'; +import { Suite } from 'benchmark' +import beautifyBenchmark from 'beautify-benchmark' +import { dynamic205, dynamic300 } from './cases' export const run = () => { - console.log('Running dynamic test.'); + console.log('Running dynamic test.') - const jssSuite = new Suite(); + const testSuite = new Suite() - jssSuite.add('newDynamic', () => newDynamic()); - jssSuite.add('oldDynamic', () => oldDynamic()); + testSuite.add('2.0.5', () => dynamic205()) + testSuite.add('3.0.0', () => dynamic300()) - jssSuite.on('cycle', (e) => { - beautifyBenchmark.add(e.target); - }); + testSuite.on('cycle', (e) => { + beautifyBenchmark.add(e.target) + }) - jssSuite.on('complete', function() { - beautifyBenchmark.log(); - console.log(`Fastest is: ${this.filter('fastest').map('name')}\n`); - console.log('Improvement: ' + (Math.round(this[0].hz / this[1].hz * 100)/100) + 'x faster'); - }); + testSuite.on('complete', function () { + beautifyBenchmark.log() + console.log(`Fastest is: ${this.filter('fastest').map('name')}\n`) + console.log( + `Improvement: ${Math.round(this[1].hz / this[0].hz * 100) / 100}x faster` + ) + }) - return jssSuite.run({ async: true }); -}; + return testSuite.run({ async: true }) +} -run(); +run() diff --git a/benchmark/packages/206/plugins/calc.js b/benchmark/packages/206/plugins/calc.js deleted file mode 100644 index 0768037..0000000 --- a/benchmark/packages/206/plugins/calc.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = calc; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } - -function calc(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (typeof value === 'string' && value.indexOf('calc(') > -1 && (browser === 'firefox' && version < 15 || browser === 'chrome' && version < 25 || browser === 'safari' && version < 6.1 || browser === 'ios_saf' && version < 7)) { - return _defineProperty({}, property, (0, _getPrefixedValue2.default)(value.replace(/calc\(/g, css + 'calc('), value, keepUnprefixed)); - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/flex.js b/benchmark/packages/206/plugins/flex.js deleted file mode 100644 index f7f2887..0000000 --- a/benchmark/packages/206/plugins/flex.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = flex; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var values = { flex: true, 'inline-flex': true }; - -function flex(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (property === 'display' && values[value] && (browser === 'chrome' && version < 29 && version > 20 || (browser === 'safari' || browser === 'ios_saf') && version < 9 && version > 6 || browser === 'opera' && (version == 15 || version == 16))) { - return { - display: (0, _getPrefixedValue2.default)(css + value, value, keepUnprefixed) - }; - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/flexboxOld.js b/benchmark/packages/206/plugins/flexboxOld.js deleted file mode 100644 index 656cab9..0000000 --- a/benchmark/packages/206/plugins/flexboxOld.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = flexboxOld; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } - -var alternativeValues = { - 'space-around': 'justify', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - 'wrap-reverse': 'multiple', - wrap: 'multiple', - flex: 'box', - 'inline-flex': 'inline-box' -}; - -var alternativeProps = { - alignItems: 'WebkitBoxAlign', - justifyContent: 'WebkitBoxPack', - flexWrap: 'WebkitBoxLines' -}; - -var otherProps = ['alignContent', 'alignSelf', 'order', 'flexGrow', 'flexShrink', 'flexBasis', 'flexDirection']; -var properties = Object.keys(alternativeProps).concat(otherProps); - -function flexboxOld(_ref) { - var property = _ref.property; - var value = _ref.value; - var styles = _ref.styles; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if ((properties.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browser === 'firefox' && version < 22 || browser === 'chrome' && version < 21 || (browser === 'safari' || browser === 'ios_saf') && version <= 6.1 || browser === 'android' && version < 4.4 || browser === 'and_uc')) { - if (!keepUnprefixed && !Array.isArray(styles[property])) { - delete styles[property]; - } - if (property === 'flexDirection' && typeof value === 'string') { - return { - WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal', - WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal' - }; - } - if (property === 'display' && alternativeValues[value]) { - return { - display: (0, _getPrefixedValue2.default)(css + alternativeValues[value], value, keepUnprefixed) - }; - } - if (alternativeProps[property]) { - return _defineProperty({}, alternativeProps[property], alternativeValues[value] || value); - } - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/grabCursor.js b/benchmark/packages/206/plugins/grabCursor.js deleted file mode 100644 index c182ae0..0000000 --- a/benchmark/packages/206/plugins/grabCursor.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = grabCursor; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var values = { grab: true, grabbing: true }; - -function grabCursor(_ref) { - var property = _ref.property; - var value = _ref.value; - var browser = _ref.browserInfo.browser; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - // adds prefixes for firefox, chrome, safari, and opera regardless of version until a reliable brwoser support info can be found (see: https://github.com/rofrischmann/inline-style-prefixer/issues/79) - if (property === 'cursor' && values[value] && (browser === 'firefox' || browser === 'chrome' || browser === 'safari' || browser === 'opera')) { - return { - cursor: (0, _getPrefixedValue2.default)(css + value, value, keepUnprefixed) - }; - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/gradient.js b/benchmark/packages/206/plugins/gradient.js deleted file mode 100644 index d121f24..0000000 --- a/benchmark/packages/206/plugins/gradient.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = gradient; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } - -var values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; - -function gradient(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (typeof value === 'string' && value.match(values) !== null && (browser === 'firefox' && version < 16 || browser === 'chrome' && version < 26 || (browser === 'safari' || browser === 'ios_saf') && version < 7 || (browser === 'opera' || browser === 'op_mini') && version < 12.1 || browser === 'android' && version < 4.4 || browser === 'and_uc')) { - return _defineProperty({}, property, (0, _getPrefixedValue2.default)(css + value, value, keepUnprefixed)); - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/position.js b/benchmark/packages/206/plugins/position.js deleted file mode 100644 index 0c6e3fd..0000000 --- a/benchmark/packages/206/plugins/position.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = position; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } - -function position(_ref) { - var property = _ref.property; - var value = _ref.value; - var browser = _ref.browserInfo.browser; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (property === 'position' && value === 'sticky' && (browser === 'safari' || browser === 'ios_saf')) { - return _defineProperty({}, property, (0, _getPrefixedValue2.default)(css + value, value, keepUnprefixed)); - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/zoomCursor.js b/benchmark/packages/206/plugins/zoomCursor.js deleted file mode 100644 index 8e36040..0000000 --- a/benchmark/packages/206/plugins/zoomCursor.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = zoomCursor; - -var _getPrefixedValue = require('../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var values = { 'zoom-in': true, 'zoom-out': true }; - -function zoomCursor(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (property === 'cursor' && values[value] && (browser === 'firefox' && version < 24 || browser === 'chrome' && version < 37 || browser === 'safari' && version < 9 || browser === 'opera' && version < 24)) { - return { - cursor: (0, _getPrefixedValue2.default)(css + value, value, keepUnprefixed) - }; - } -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/prefixProps.js b/benchmark/packages/206/prefixProps.js deleted file mode 100644 index d3d56ed..0000000 --- a/benchmark/packages/206/prefixProps.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { "chrome": { "transform": 35, "transformOrigin": 35, "transformOriginX": 35, "transformOriginY": 35, "backfaceVisibility": 35, "perspective": 35, "perspectiveOrigin": 35, "transformStyle": 35, "transformOriginZ": 35, "animation": 42, "animationDelay": 42, "animationDirection": 42, "animationFillMode": 42, "animationDuration": 42, "animationIterationCount": 42, "animationName": 42, "animationPlayState": 42, "animationTimingFunction": 42, "appearance": 58, "userSelect": 53, "fontKerning": 32, "textEmphasisPosition": 58, "textEmphasis": 58, "textEmphasisStyle": 58, "textEmphasisColor": 58, "boxDecorationBreak": 58, "clipPath": 54, "maskImage": 58, "maskMode": 58, "maskRepeat": 58, "maskPosition": 58, "maskClip": 58, "maskOrigin": 58, "maskSize": 58, "maskComposite": 58, "mask": 58, "maskBorderSource": 58, "maskBorderMode": 58, "maskBorderSlice": 58, "maskBorderWidth": 58, "maskBorderOutset": 58, "maskBorderRepeat": 58, "maskBorder": 58, "maskType": 58, "textDecorationStyle": 58, "textDecorationSkip": 58, "textDecorationLine": 58, "textDecorationColor": 58, "filter": 52, "fontFeatureSettings": 47, "breakAfter": 49, "breakBefore": 49, "breakInside": 49, "columnCount": 49, "columnFill": 49, "columnGap": 49, "columnRule": 49, "columnRuleColor": 49, "columnRuleStyle": 49, "columnRuleWidth": 49, "columns": 49, "columnSpan": 49, "columnWidth": 49 }, "safari": { "flex": 8, "flexBasis": 8, "flexDirection": 8, "flexGrow": 8, "flexFlow": 8, "flexShrink": 8, "flexWrap": 8, "alignContent": 8, "alignItems": 8, "alignSelf": 8, "justifyContent": 8, "order": 8, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8, "transformOrigin": 8, "transformOriginX": 8, "transformOriginY": 8, "backfaceVisibility": 8, "perspective": 8, "perspectiveOrigin": 8, "transformStyle": 8, "transformOriginZ": 8, "animation": 8, "animationDelay": 8, "animationDirection": 8, "animationFillMode": 8, "animationDuration": 8, "animationIterationCount": 8, "animationName": 8, "animationPlayState": 8, "animationTimingFunction": 8, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 9, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "textEmphasisPosition": 7, "textEmphasis": 7, "textEmphasisStyle": 7, "textEmphasisColor": 7, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8, "breakAfter": 8, "breakInside": 8, "regionFragment": 10, "columnCount": 8, "columnFill": 8, "columnGap": 8, "columnRule": 8, "columnRuleColor": 8, "columnRuleStyle": 8, "columnRuleWidth": 8, "columns": 8, "columnSpan": 8, "columnWidth": 8 }, "firefox": { "appearance": 53, "userSelect": 53, "boxSizing": 28, "textAlignLast": 48, "textDecorationStyle": 35, "textDecorationSkip": 35, "textDecorationLine": 35, "textDecorationColor": 35, "tabSize": 53, "hyphens": 42, "fontFeatureSettings": 33, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "opera": { "flex": 16, "flexBasis": 16, "flexDirection": 16, "flexGrow": 16, "flexFlow": 16, "flexShrink": 16, "flexWrap": 16, "alignContent": 16, "alignItems": 16, "alignSelf": 16, "justifyContent": 16, "order": 16, "transform": 22, "transformOrigin": 22, "transformOriginX": 22, "transformOriginY": 22, "backfaceVisibility": 22, "perspective": 22, "perspectiveOrigin": 22, "transformStyle": 22, "transformOriginZ": 22, "animation": 29, "animationDelay": 29, "animationDirection": 29, "animationFillMode": 29, "animationDuration": 29, "animationIterationCount": 29, "animationName": 29, "animationPlayState": 29, "animationTimingFunction": 29, "appearance": 43, "userSelect": 40, "fontKerning": 19, "textEmphasisPosition": 43, "textEmphasis": 43, "textEmphasisStyle": 43, "textEmphasisColor": 43, "boxDecorationBreak": 43, "clipPath": 41, "maskImage": 43, "maskMode": 43, "maskRepeat": 43, "maskPosition": 43, "maskClip": 43, "maskOrigin": 43, "maskSize": 43, "maskComposite": 43, "mask": 43, "maskBorderSource": 43, "maskBorderMode": 43, "maskBorderSlice": 43, "maskBorderWidth": 43, "maskBorderOutset": 43, "maskBorderRepeat": 43, "maskBorder": 43, "maskType": 43, "textDecorationStyle": 43, "textDecorationSkip": 43, "textDecorationLine": 43, "textDecorationColor": 43, "filter": 39, "fontFeatureSettings": 34, "breakAfter": 36, "breakBefore": 36, "breakInside": 36, "columnCount": 36, "columnFill": 36, "columnGap": 36, "columnRule": 36, "columnRuleColor": 36, "columnRuleStyle": 36, "columnRuleWidth": 36, "columns": 36, "columnSpan": 36, "columnWidth": 36 }, "ie": { "flex": 10, "flexDirection": 10, "flexFlow": 10, "flexWrap": 10, "transform": 9, "transformOrigin": 9, "transformOriginX": 9, "transformOriginY": 9, "userSelect": 11, "wrapFlow": 11, "wrapThrough": 11, "wrapMargin": 11, "scrollSnapType": 11, "scrollSnapPointsX": 11, "scrollSnapPointsY": 11, "scrollSnapDestination": 11, "scrollSnapCoordinate": 11, "touchAction": 10, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "gridTemplateColumns": 11, "gridTemplateRows": 11, "gridTemplateAreas": 11, "gridTemplate": 11, "gridAutoColumns": 11, "gridAutoRows": 11, "gridAutoFlow": 11, "grid": 11, "gridRowStart": 11, "gridColumnStart": 11, "gridRowEnd": 11, "gridRow": 11, "gridColumn": 11, "gridColumnEnd": 11, "gridColumnGap": 11, "gridRowGap": 11, "gridArea": 11, "gridGap": 11, "textSizeAdjust": 11 }, "edge": { "userSelect": 15, "wrapFlow": 15, "wrapThrough": 15, "wrapMargin": 15, "scrollSnapType": 15, "scrollSnapPointsX": 15, "scrollSnapPointsY": 15, "scrollSnapDestination": 15, "scrollSnapCoordinate": 15, "hyphens": 15, "flowInto": 15, "flowFrom": 15, "breakBefore": 15, "breakAfter": 15, "breakInside": 15, "regionFragment": 15, "gridTemplateColumns": 15, "gridTemplateRows": 15, "gridTemplateAreas": 15, "gridTemplate": 15, "gridAutoColumns": 15, "gridAutoRows": 15, "gridAutoFlow": 15, "grid": 15, "gridRowStart": 15, "gridColumnStart": 15, "gridRowEnd": 15, "gridRow": 15, "gridColumn": 15, "gridColumnEnd": 15, "gridColumnGap": 15, "gridRowGap": 15, "gridArea": 15, "gridGap": 15 }, "ios_saf": { "flex": 8.1, "flexBasis": 8.1, "flexDirection": 8.1, "flexGrow": 8.1, "flexFlow": 8.1, "flexShrink": 8.1, "flexWrap": 8.1, "alignContent": 8.1, "alignItems": 8.1, "alignSelf": 8.1, "justifyContent": 8.1, "order": 8.1, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8.1, "transformOrigin": 8.1, "transformOriginX": 8.1, "transformOriginY": 8.1, "backfaceVisibility": 8.1, "perspective": 8.1, "perspectiveOrigin": 8.1, "transformStyle": 8.1, "transformOriginZ": 8.1, "animation": 8.1, "animationDelay": 8.1, "animationDirection": 8.1, "animationFillMode": 8.1, "animationDuration": 8.1, "animationIterationCount": 8.1, "animationName": 8.1, "animationPlayState": 8.1, "animationTimingFunction": 8.1, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 10, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textSizeAdjust": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8.1, "breakAfter": 8.1, "breakInside": 8.1, "regionFragment": 10, "columnCount": 8.1, "columnFill": 8.1, "columnGap": 8.1, "columnRule": 8.1, "columnRuleColor": 8.1, "columnRuleStyle": 8.1, "columnRuleWidth": 8.1, "columns": 8.1, "columnSpan": 8.1, "columnWidth": 8.1 }, "android": { "flex": 4.2, "flexBasis": 4.2, "flexDirection": 4.2, "flexGrow": 4.2, "flexFlow": 4.2, "flexShrink": 4.2, "flexWrap": 4.2, "alignContent": 4.2, "alignItems": 4.2, "alignSelf": 4.2, "justifyContent": 4.2, "order": 4.2, "transition": 4.2, "transitionDelay": 4.2, "transitionDuration": 4.2, "transitionProperty": 4.2, "transitionTimingFunction": 4.2, "transform": 4.4, "transformOrigin": 4.4, "transformOriginX": 4.4, "transformOriginY": 4.4, "backfaceVisibility": 4.4, "perspective": 4.4, "perspectiveOrigin": 4.4, "transformStyle": 4.4, "transformOriginZ": 4.4, "animation": 4.4, "animationDelay": 4.4, "animationDirection": 4.4, "animationFillMode": 4.4, "animationDuration": 4.4, "animationIterationCount": 4.4, "animationName": 4.4, "animationPlayState": 4.4, "animationTimingFunction": 4.4, "appearance": 53, "userSelect": 53, "fontKerning": 4.4, "textEmphasisPosition": 53, "textEmphasis": 53, "textEmphasisStyle": 53, "textEmphasisColor": 53, "boxDecorationBreak": 53, "clipPath": 53, "maskImage": 53, "maskMode": 53, "maskRepeat": 53, "maskPosition": 53, "maskClip": 53, "maskOrigin": 53, "maskSize": 53, "maskComposite": 53, "mask": 53, "maskBorderSource": 53, "maskBorderMode": 53, "maskBorderSlice": 53, "maskBorderWidth": 53, "maskBorderOutset": 53, "maskBorderRepeat": 53, "maskBorder": 53, "maskType": 53, "filter": 4.4, "fontFeatureSettings": 4.4, "breakAfter": 53, "breakBefore": 53, "breakInside": 53, "columnCount": 53, "columnFill": 53, "columnGap": 53, "columnRule": 53, "columnRuleColor": 53, "columnRuleStyle": 53, "columnRuleWidth": 53, "columns": 53, "columnSpan": 53, "columnWidth": 53 }, "and_chr": { "appearance": 54, "textEmphasisPosition": 54, "textEmphasis": 54, "textEmphasisStyle": 54, "textEmphasisColor": 54, "boxDecorationBreak": 54, "clipPath": 54, "maskImage": 54, "maskMode": 54, "maskRepeat": 54, "maskPosition": 54, "maskClip": 54, "maskOrigin": 54, "maskSize": 54, "maskComposite": 54, "mask": 54, "maskBorderSource": 54, "maskBorderMode": 54, "maskBorderSlice": 54, "maskBorderWidth": 54, "maskBorderOutset": 54, "maskBorderRepeat": 54, "maskBorder": 54, "maskType": 54, "textDecorationStyle": 54, "textDecorationSkip": 54, "textDecorationLine": 54, "textDecorationColor": 54 }, "and_uc": { "flex": 11, "flexBasis": 11, "flexDirection": 11, "flexGrow": 11, "flexFlow": 11, "flexShrink": 11, "flexWrap": 11, "alignContent": 11, "alignItems": 11, "alignSelf": 11, "justifyContent": 11, "order": 11, "transition": 11, "transitionDelay": 11, "transitionDuration": 11, "transitionProperty": 11, "transitionTimingFunction": 11, "transform": 11, "transformOrigin": 11, "transformOriginX": 11, "transformOriginY": 11, "backfaceVisibility": 11, "perspective": 11, "perspectiveOrigin": 11, "transformStyle": 11, "transformOriginZ": 11, "animation": 11, "animationDelay": 11, "animationDirection": 11, "animationFillMode": 11, "animationDuration": 11, "animationIterationCount": 11, "animationName": 11, "animationPlayState": 11, "animationTimingFunction": 11, "appearance": 11, "userSelect": 11, "fontKerning": 11, "textEmphasisPosition": 11, "textEmphasis": 11, "textEmphasisStyle": 11, "textEmphasisColor": 11, "maskImage": 11, "maskMode": 11, "maskRepeat": 11, "maskPosition": 11, "maskClip": 11, "maskOrigin": 11, "maskSize": 11, "maskComposite": 11, "mask": 11, "maskBorderSource": 11, "maskBorderMode": 11, "maskBorderSlice": 11, "maskBorderWidth": 11, "maskBorderOutset": 11, "maskBorderRepeat": 11, "maskBorder": 11, "maskType": 11, "textSizeAdjust": 11, "filter": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "fontFeatureSettings": 11, "columnCount": 11, "columnFill": 11, "columnGap": 11, "columnRule": 11, "columnRuleColor": 11, "columnRuleStyle": 11, "columnRuleWidth": 11, "columns": 11, "columnSpan": 11, "columnWidth": 11 }, "op_mini": {} }; -module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/206/static/prefixAll.js b/benchmark/packages/206/static/prefixAll.js deleted file mode 100644 index bfe0c5d..0000000 --- a/benchmark/packages/206/static/prefixAll.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = prefixAll; - -var _capitalizeString = require('../utils/capitalizeString'); - -var _capitalizeString2 = _interopRequireDefault(_capitalizeString); - -var _prefixProps = require('./prefixProps'); - -var _prefixProps2 = _interopRequireDefault(_prefixProps); - -var _position = require('./plugins/position'); - -var _position2 = _interopRequireDefault(_position); - -var _calc = require('./plugins/calc'); - -var _calc2 = _interopRequireDefault(_calc); - -var _cursor = require('./plugins/cursor'); - -var _cursor2 = _interopRequireDefault(_cursor); - -var _flex = require('./plugins/flex'); - -var _flex2 = _interopRequireDefault(_flex); - -var _sizing = require('./plugins/sizing'); - -var _sizing2 = _interopRequireDefault(_sizing); - -var _gradient = require('./plugins/gradient'); - -var _gradient2 = _interopRequireDefault(_gradient); - -var _transition = require('./plugins/transition'); - -var _transition2 = _interopRequireDefault(_transition); - -var _flexboxIE = require('./plugins/flexboxIE'); - -var _flexboxIE2 = _interopRequireDefault(_flexboxIE); - -var _flexboxOld = require('./plugins/flexboxOld'); - -var _flexboxOld2 = _interopRequireDefault(_flexboxOld); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// special flexbox specifications - - -var plugins = [_position2.default, _calc2.default, _cursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; - -function runPluginsOnValue(property, value, style, callback) { - var callbackCalled = false; - - for (var i = 0, len = plugins.length; i < len; ++i) { - var newValue = plugins[i](property, value, style); - - if (newValue) { - callbackCalled = true; - callback(newValue); - } - } - - return callbackCalled; -} - -function prefixAll(style) { - var _loop = function _loop(property) { - var value = style[property]; - if (value instanceof Object && !Array.isArray(value)) { - style[property] = prefixAll(value); - } else { - if (Array.isArray(value)) { - (function () { - var combinedValue = []; - - for (var i = 0, len = value.length; i < len; ++i) { - var called = runPluginsOnValue(property, value[i], style, function (newValue) { - [].concat(newValue).forEach(function (val) { - if (combinedValue.indexOf(val) === -1) { - combinedValue.push(val); - } - }); - }); - - if (!called && combinedValue.indexOf(value[i]) === -1) { - combinedValue.push(value[i]); - } - } - - style[property] = combinedValue; - })(); - } else { - runPluginsOnValue(property, value, style, function (newValue) { - style[property] = newValue; - }); - } - - var requiredPrefixes = _prefixProps2.default[property]; - if (requiredPrefixes) { - for (var i = 0, len = requiredPrefixes.length; i < len; ++i) { - style[requiredPrefixes[i] + (0, _capitalizeString2.default)(property)] = style[property]; - } - } - } - }; - - for (var property in style) { - _loop(property); - } - - return style; -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/utils/getBrowserInformation.js b/benchmark/packages/206/utils/getBrowserInformation.js deleted file mode 100644 index 070c00c..0000000 --- a/benchmark/packages/206/utils/getBrowserInformation.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _bowser = require('bowser'); - -var _bowser2 = _interopRequireDefault(_bowser); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var vendorPrefixes = { - Webkit: ['chrome', 'safari', 'ios', 'android', 'phantom', 'opera', 'webos', 'blackberry', 'bada', 'tizen', 'chromium', 'vivaldi'], - Moz: ['firefox', 'seamonkey', 'sailfish'], - ms: ['msie', 'msedge'] -}; -var browsers = { - chrome: [['chrome'], ['chromium']], - safari: [['safari']], - firefox: [['firefox']], - edge: [['msedge']], - opera: [['opera'], ['vivaldi']], - ios_saf: [['ios', 'mobile'], ['ios', 'tablet']], - ie: [['msie']], - op_mini: [['opera', 'mobile'], ['opera', 'tablet']], - and_uc: [['android', 'mobile'], ['android', 'tablet']], - android: [['android', 'mobile'], ['android', 'tablet']] -}; - -var browserByInfo = function browserByInfo(info) { - if (info.firefox) { - return 'firefox'; - } - var name = ''; - - Object.keys(browsers).forEach(function (browser) { - browsers[browser].forEach(function (condition) { - var match = 0; - condition.forEach(function (single) { - if (info[single]) { - match += 1; - } - }); - if (condition.length === match) { - name = browser; - } - }); - }); - - return name; -}; - -/** - * Uses bowser to get default browser information such as version and name - * Evaluates bowser info and adds vendorPrefix information - * @param {string} userAgent - userAgent that gets evaluated - */ - -exports.default = function (userAgent) { - if (!userAgent) { - return false; - } - var info = _bowser2.default._detect(userAgent); - - Object.keys(vendorPrefixes).forEach(function (prefix) { - vendorPrefixes[prefix].forEach(function (browser) { - if (info[browser]) { - info.prefix = { - inline: prefix, - css: '-' + prefix.toLowerCase() + '-' - }; - } - }); - }); - - info.browser = browserByInfo(info); - - // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN - info.version = info.version ? parseFloat(info.version) : parseInt(parseFloat(info.osversion), 10); - info.osversion = parseFloat(info.osversion); - - // iOS forces all browsers to use Safari under the hood - // as the Safari version seems to match the iOS version - // we just explicitely use the osversion instead - // https://github.com/rofrischmann/inline-style-prefixer/issues/72 - if (info.browser === 'ios_saf' && info.version > info.osversion) { - info.version = info.osversion; - info.safari = true; - } - - // seperate native android chrome - // https://github.com/rofrischmann/inline-style-prefixer/issues/45 - if (info.browser === 'android' && info.chrome && info.version > 37) { - info.browser = 'and_chr'; - } - - // For android < 4.4 we want to check the osversion - // not the chrome version, see issue #26 - // https://github.com/rofrischmann/inline-style-prefixer/issues/26 - if (info.browser === 'android' && info.osversion < 5) { - info.version = info.osversion; - } - - return info; -}; - -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/utils/getPrefixedKeyframes.js b/benchmark/packages/206/utils/getPrefixedKeyframes.js deleted file mode 100644 index bdc2662..0000000 --- a/benchmark/packages/206/utils/getPrefixedKeyframes.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (_ref) { - var browser = _ref.browser; - var version = _ref.version; - var prefix = _ref.prefix; - - var prefixedKeyframes = 'keyframes'; - - if (browser === 'chrome' && version < 43 || (browser === 'safari' || browser === 'ios_saf') && version < 9 || browser === 'opera' && version < 30 || browser === 'android' && version <= 4.4 || browser === 'and_uc') { - prefixedKeyframes = prefix.css + prefixedKeyframes; - } - return prefixedKeyframes; -}; - -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/utils/getPrefixedValue.js b/benchmark/packages/206/utils/getPrefixedValue.js deleted file mode 100644 index 82d05f9..0000000 --- a/benchmark/packages/206/utils/getPrefixedValue.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (prefixedValue, value, keepUnprefixed) { - return keepUnprefixed ? [prefixedValue, value] : prefixedValue; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/206/utils/isPrefixedValue.js b/benchmark/packages/206/utils/isPrefixedValue.js deleted file mode 100644 index 638aac9..0000000 --- a/benchmark/packages/206/utils/isPrefixedValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (value) { - if (Array.isArray(value)) value = value.join(','); - - return value.match(/-webkit-|-moz-|-ms-/) !== null; -}; - -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/utils/sortPrefixedStyle.js b/benchmark/packages/206/utils/sortPrefixedStyle.js deleted file mode 100644 index fbe0789..0000000 --- a/benchmark/packages/206/utils/sortPrefixedStyle.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = sortPrefixedStyle; - -var _isPrefixedProperty = require('./isPrefixedProperty'); - -var _isPrefixedProperty2 = _interopRequireDefault(_isPrefixedProperty); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function sortPrefixedStyle(style) { - var sortedKeys = Object.keys(style).sort(function (left, right) { - if ((0, _isPrefixedProperty2.default)(left) && !(0, _isPrefixedProperty2.default)(right)) { - return -1; - } else if (!(0, _isPrefixedProperty2.default)(left) && (0, _isPrefixedProperty2.default)(right)) { - return 1; - } - return 0; - }); - - var sortedStyle = {}; - - for (var i = 0, len = sortedKeys.length; i < len; ++i) { - sortedStyle[sortedKeys[i]] = style[sortedKeys[i]]; - } - - return sortedStyle; -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/utils/unprefixProperty.js b/benchmark/packages/206/utils/unprefixProperty.js deleted file mode 100644 index 62d1cd6..0000000 --- a/benchmark/packages/206/utils/unprefixProperty.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (property) { - var unprefixed = property.replace(/^(ms|Webkit|Moz|O)/, ''); - return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1); -}; - -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/utils/valuePrefixes.js b/benchmark/packages/206/utils/valuePrefixes.js deleted file mode 100644 index 2ca3a56..0000000 --- a/benchmark/packages/206/utils/valuePrefixes.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var valuePrefixes = ['-webkit-', '-moz-', '']; -exports.default = valuePrefixes; -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/Prefixer.js b/benchmark/packages/300/dynamic/Prefixer.js similarity index 52% rename from benchmark/packages/206/Prefixer.js rename to benchmark/packages/300/dynamic/Prefixer.js index 2f0e0ca..988f561 100644 --- a/benchmark/packages/206/Prefixer.js +++ b/benchmark/packages/300/dynamic/Prefixer.js @@ -5,80 +5,84 @@ Object.defineProperty(exports, "__esModule", { }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -// special flexbox specifications +var _prefixValue = require('../utils/prefixValue'); -var _prefixAll2 = require('./static/prefixAll'); +var _prefixValue2 = _interopRequireDefault(_prefixValue); -var _prefixAll3 = _interopRequireDefault(_prefixAll2); - -var _getBrowserInformation = require('./utils/getBrowserInformation'); +var _getBrowserInformation = require('../utils/getBrowserInformation'); var _getBrowserInformation2 = _interopRequireDefault(_getBrowserInformation); -var _getPrefixedKeyframes = require('./utils/getPrefixedKeyframes'); +var _getPrefixedKeyframes = require('../utils/getPrefixedKeyframes'); var _getPrefixedKeyframes2 = _interopRequireDefault(_getPrefixedKeyframes); -var _capitalizeString = require('./utils/capitalizeString'); +var _capitalizeString = require('../utils/capitalizeString'); var _capitalizeString2 = _interopRequireDefault(_capitalizeString); -var _sortPrefixedStyle = require('./utils/sortPrefixedStyle'); +var _addNewValuesOnly = require('../utils/addNewValuesOnly'); + +var _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly); -var _sortPrefixedStyle2 = _interopRequireDefault(_sortPrefixedStyle); +var _isObject = require('../utils/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); var _prefixProps = require('./prefixProps'); var _prefixProps2 = _interopRequireDefault(_prefixProps); -var _position = require('./plugins/position'); +var _prefixAll2 = require('../static/prefixAll'); -var _position2 = _interopRequireDefault(_position); +var _prefixAll3 = _interopRequireDefault(_prefixAll2); var _calc = require('./plugins/calc'); var _calc2 = _interopRequireDefault(_calc); -var _zoomCursor = require('./plugins/zoomCursor'); +var _flex = require('./plugins/flex'); -var _zoomCursor2 = _interopRequireDefault(_zoomCursor); +var _flex2 = _interopRequireDefault(_flex); -var _grabCursor = require('./plugins/grabCursor'); +var _flexboxIE = require('./plugins/flexboxIE'); -var _grabCursor2 = _interopRequireDefault(_grabCursor); +var _flexboxIE2 = _interopRequireDefault(_flexboxIE); -var _flex = require('./plugins/flex'); +var _flexboxOld = require('./plugins/flexboxOld'); -var _flex2 = _interopRequireDefault(_flex); +var _flexboxOld2 = _interopRequireDefault(_flexboxOld); -var _sizing = require('./plugins/sizing'); +var _grabCursor = require('./plugins/grabCursor'); -var _sizing2 = _interopRequireDefault(_sizing); +var _grabCursor2 = _interopRequireDefault(_grabCursor); var _gradient = require('./plugins/gradient'); var _gradient2 = _interopRequireDefault(_gradient); -var _transition = require('./plugins/transition'); +var _position = require('./plugins/position'); -var _transition2 = _interopRequireDefault(_transition); +var _position2 = _interopRequireDefault(_position); -var _flexboxIE = require('./plugins/flexboxIE'); +var _sizing = require('./plugins/sizing'); -var _flexboxIE2 = _interopRequireDefault(_flexboxIE); +var _sizing2 = _interopRequireDefault(_sizing); -var _flexboxOld = require('./plugins/flexboxOld'); +var _transition = require('./plugins/transition'); -var _flexboxOld2 = _interopRequireDefault(_flexboxOld); +var _transition2 = _interopRequireDefault(_transition); + +var _zoomCursor = require('./plugins/zoomCursor'); + +var _zoomCursor2 = _interopRequireDefault(_zoomCursor); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var plugins = [_position2.default, _calc2.default, _zoomCursor2.default, _grabCursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, -// this must be run AFTER the flexbox specs -_flex2.default]; +var plugins = [_position2.default, _calc2.default, _zoomCursor2.default, _grabCursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; var Prefixer = function () { /** @@ -86,11 +90,8 @@ var Prefixer = function () { * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com * @param {string} keepUnprefixed - keeps unprefixed properties and values */ - function Prefixer() { - var _this = this; - - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, Prefixer); @@ -99,94 +100,101 @@ var Prefixer = function () { this._userAgent = options.userAgent || defaultUserAgent; this._keepUnprefixed = options.keepUnprefixed || false; - this._browserInfo = (0, _getBrowserInformation2.default)(this._userAgent); + if (this._userAgent) { + this._browserInfo = (0, _getBrowserInformation2.default)(this._userAgent); + } // Checks if the userAgent was resolved correctly - if (this._browserInfo && this._browserInfo.prefix) { - // set additional prefix information - this.cssPrefix = this._browserInfo.prefix.css; - this.jsPrefix = this._browserInfo.prefix.inline; - this.prefixedKeyframes = (0, _getPrefixedKeyframes2.default)(this._browserInfo); + if (this._browserInfo && this._browserInfo.cssPrefix) { + this.prefixedKeyframes = (0, _getPrefixedKeyframes2.default)(this._browserInfo.browserName, this._browserInfo.browserVersion, this._browserInfo.cssPrefix); } else { - this._usePrefixAllFallback = true; + this._useFallback = true; return false; } - var data = this._browserInfo.browser && _prefixProps2.default[this._browserInfo.browser]; - if (data) { - this._requiresPrefix = Object.keys(data).filter(function (key) { - return data[key] >= _this._browserInfo.version; - }).reduce(function (result, name) { - result[name] = true; - return result; - }, {}); + var prefixData = this._browserInfo.browserName && _prefixProps2.default[this._browserInfo.browserName]; + if (prefixData) { + this._requiresPrefix = {}; + + for (var property in prefixData) { + if (prefixData[property] >= this._browserInfo.browserVersion) { + this._requiresPrefix[property] = true; + } + } + this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0; } else { - this._usePrefixAllFallback = true; + this._useFallback = true; } - } - - /** - * Returns a prefixed version of the style object - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ + this._metaData = { + browserVersion: this._browserInfo.browserVersion, + browserName: this._browserInfo.browserName, + cssPrefix: this._browserInfo.cssPrefix, + jsPrefix: this._browserInfo.jsPrefix, + keepUnprefixed: this._keepUnprefixed, + requiresPrefix: this._requiresPrefix + }; + } _createClass(Prefixer, [{ key: 'prefix', - value: function prefix(styles) { - var _this2 = this; - + value: function prefix(style) { // use prefixAll as fallback if userAgent can not be resolved - if (this._usePrefixAllFallback) { - return (0, _prefixAll3.default)(styles); + if (this._useFallback) { + return (0, _prefixAll3.default)(style); } // only add prefixes if needed if (!this._hasPropsRequiringPrefix) { - return styles; + return style; } - Object.keys(styles).forEach(function (property) { - var value = styles[property]; - if (value instanceof Object && !Array.isArray(value)) { - // recurse through nested style objects - styles[property] = _this2.prefix(value); + return this._prefixStyle(style); + } + }, { + key: '_prefixStyle', + value: function _prefixStyle(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if ((0, _isObject2.default)(value)) { + style[property] = this.prefix(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, this._metaData); + (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } } else { - // add prefixes if needed - if (_this2._requiresPrefix[property]) { - styles[_this2.jsPrefix + (0, _capitalizeString2.default)(property)] = value; - if (!_this2._keepUnprefixed) { - delete styles[property]; + var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, this._metaData); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + // add prefixes to properties + if (this._requiresPrefix[property]) { + style[this._browserInfo.jsPrefix + (0, _capitalizeString2.default)(property)] = value; + if (!this._keepUnprefixed) { + delete style[property]; } } } - }); - - Object.keys(styles).forEach(function (property) { - [].concat(styles[property]).forEach(function (value) { - // resolve plugins - plugins.forEach(function (plugin) { - // generates a new plugin interface with current data - assignStyles(styles, plugin({ - property: property, - value: value, - styles: styles, - browserInfo: _this2._browserInfo, - prefix: { - js: _this2.jsPrefix, - css: _this2.cssPrefix, - keyframes: _this2.prefixedKeyframes - }, - keepUnprefixed: _this2._keepUnprefixed, - requiresPrefix: _this2._requiresPrefix - }), value, _this2._keepUnprefixed); - }); - }); - }); - - return (0, _sortPrefixedStyle2.default)(styles); + } + + return style; } /** @@ -206,24 +214,4 @@ var Prefixer = function () { }(); exports.default = Prefixer; - - -function assignStyles(base) { - var extend = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var value = arguments[2]; - var keepUnprefixed = arguments[3]; - - Object.keys(extend).forEach(function (property) { - var baseValue = base[property]; - if (Array.isArray(baseValue)) { - [].concat(extend[property]).forEach(function (val) { - if (base[property].indexOf(val) === -1) { - base[property].splice(baseValue.indexOf(value), keepUnprefixed ? 0 : 1, val); - } - }); - } else { - base[property] = extend[property]; - } - }); -} module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/calc.js b/benchmark/packages/300/dynamic/plugins/calc.js new file mode 100644 index 0000000..e1dc923 --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/calc.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = calc; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function calc(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.indexOf('calc(') > -1 && (browserName === 'firefox' && browserVersion < 15 || browserName === 'chrome' && browserVersion < 25 || browserName === 'safari' && browserVersion < 6.1 || browserName === 'ios_saf' && browserVersion < 7)) { + return (0, _getPrefixedValue2.default)(value.replace(/calc\(/g, cssPrefix + 'calc('), value, keepUnprefixed); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/flex.js b/benchmark/packages/300/dynamic/plugins/flex.js new file mode 100644 index 0000000..c9e9e0e --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/flex.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = flex; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var values = { + flex: true, + 'inline-flex': true +}; +function flex(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (property === 'display' && values[value] && (browserName === 'chrome' && browserVersion < 29 && browserVersion > 20 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 9 && browserVersion > 6 || browserName === 'opera' && (browserVersion == 15 || browserVersion == 16))) { + return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/flexboxIE.js b/benchmark/packages/300/dynamic/plugins/flexboxIE.js similarity index 51% rename from benchmark/packages/206/plugins/flexboxIE.js rename to benchmark/packages/300/dynamic/plugins/flexboxIE.js index 53e7caf..0decf8f 100644 --- a/benchmark/packages/206/plugins/flexboxIE.js +++ b/benchmark/packages/300/dynamic/plugins/flexboxIE.js @@ -5,14 +5,12 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = flexboxIE; -var _getPrefixedValue = require('../utils/getPrefixedValue'); +var _getPrefixedValue = require('../../utils/getPrefixedValue'); var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -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; } - var alternativeValues = { 'space-around': 'distribute', 'space-between': 'justify', @@ -21,6 +19,7 @@ var alternativeValues = { flex: 'flexbox', 'inline-flex': 'inline-flexbox' }; + var alternativeProps = { alignContent: 'msFlexLinePack', alignSelf: 'msFlexItemAlign', @@ -32,27 +31,21 @@ var alternativeProps = { flexBasis: 'msPreferredSize' }; -function flexboxIE(_ref) { - var property = _ref.property; - var value = _ref.value; - var styles = _ref.styles; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if ((alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browser === 'ie_mob' || browser === 'ie') && version == 10) { - if (!keepUnprefixed && !Array.isArray(styles[property])) { - delete styles[property]; +function flexboxIE(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if ((alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'ie_mob' || browserName === 'ie') && browserVersion == 10) { + if (!keepUnprefixed && !Array.isArray(style[property])) { + delete style[property]; } if (property === 'display' && alternativeValues[value]) { - return { - display: (0, _getPrefixedValue2.default)(css + alternativeValues[value], value, keepUnprefixed) - }; + return (0, _getPrefixedValue2.default)(cssPrefix + alternativeValues[value], value, keepUnprefixed); } if (alternativeProps[property]) { - return _defineProperty({}, alternativeProps[property], alternativeValues[value] || value); + style[alternativeProps[property]] = alternativeValues[value] || value; } } } diff --git a/benchmark/packages/300/dynamic/plugins/flexboxOld.js b/benchmark/packages/300/dynamic/plugins/flexboxOld.js new file mode 100644 index 0000000..6ba4d82 --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/flexboxOld.js @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = flexboxOld; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var alternativeValues = { + 'space-around': 'justify', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + 'wrap-reverse': 'multiple', + wrap: 'multiple', + flex: 'box', + 'inline-flex': 'inline-box' +}; + + +var alternativeProps = { + alignItems: 'WebkitBoxAlign', + justifyContent: 'WebkitBoxPack', + flexWrap: 'WebkitBoxLines' +}; + +var otherProps = ['alignContent', 'alignSelf', 'order', 'flexGrow', 'flexShrink', 'flexBasis', 'flexDirection']; +var properties = Object.keys(alternativeProps).concat(otherProps); + +function flexboxOld(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if ((properties.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'firefox' && browserVersion < 22 || browserName === 'chrome' && browserVersion < 21 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion <= 6.1 || browserName === 'android' && browserVersion < 4.4 || browserName === 'and_uc')) { + if (!keepUnprefixed && !Array.isArray(style[property])) { + delete style[property]; + } + if (property === 'flexDirection' && typeof value === 'string') { + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical'; + } else { + style.WebkitBoxOrient = 'horizontal'; + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse'; + } else { + style.WebkitBoxDirection = 'normal'; + } + } + if (property === 'display' && alternativeValues[value]) { + return (0, _getPrefixedValue2.default)(cssPrefix + alternativeValues[value], value, keepUnprefixed); + } + if (alternativeProps[property]) { + style[alternativeProps[property]] = alternativeValues[value] || value; + } + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/grabCursor.js b/benchmark/packages/300/dynamic/plugins/grabCursor.js new file mode 100644 index 0000000..e34b319 --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/grabCursor.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = grabCursor; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var values = { + grab: true, + grabbing: true +}; +function grabCursor(property, value, style, _ref) { + var browserName = _ref.browserName, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + // adds prefixes for firefox, chrome, safari, and opera regardless of version until a reliable brwoser support info can be found (see: https://github.com/rofrischmann/inline-style-prefixer/issues/79) + if (property === 'cursor' && values[value] && (browserName === 'firefox' || browserName === 'chrome' || browserName === 'safari' || browserName === 'opera')) { + return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/gradient.js b/benchmark/packages/300/dynamic/plugins/gradient.js new file mode 100644 index 0000000..dae657e --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/gradient.js @@ -0,0 +1,25 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = gradient; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; +function gradient(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.match(values) !== null && (browserName === 'firefox' && browserVersion < 16 || browserName === 'chrome' && browserVersion < 26 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 7 || (browserName === 'opera' || browserName === 'op_mini') && browserVersion < 12.1 || browserName === 'android' && browserVersion < 4.4 || browserName === 'and_uc')) { + return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/position.js b/benchmark/packages/300/dynamic/plugins/position.js new file mode 100644 index 0000000..7014981 --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/position.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = position; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function position(property, value, style, _ref) { + var browserName = _ref.browserName, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (property === 'position' && value === 'sticky' && (browserName === 'safari' || browserName === 'ios_saf')) { + return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/sizing.js b/benchmark/packages/300/dynamic/plugins/sizing.js similarity index 56% rename from benchmark/packages/206/plugins/sizing.js rename to benchmark/packages/300/dynamic/plugins/sizing.js index f432f3e..2314226 100644 --- a/benchmark/packages/206/plugins/sizing.js +++ b/benchmark/packages/300/dynamic/plugins/sizing.js @@ -5,14 +5,12 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = sizing; -var _getPrefixedValue = require('../utils/getPrefixedValue'); +var _getPrefixedValue = require('../../utils/getPrefixedValue'); var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -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; } - var properties = { maxHeight: true, maxWidth: true, @@ -22,6 +20,7 @@ var properties = { minWidth: true, minHeight: true }; + var values = { 'min-content': true, 'max-content': true, @@ -30,16 +29,14 @@ var values = { 'contain-floats': true }; -function sizing(_ref) { - var property = _ref.property; - var value = _ref.value; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; +function sizing(property, value, style, _ref) { + var cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; // This might change in the future // Keep an eye on it if (properties[property] && values[value]) { - return _defineProperty({}, property, (0, _getPrefixedValue2.default)(css + value, value, keepUnprefixed)); + return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); } } module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/plugins/transition.js b/benchmark/packages/300/dynamic/plugins/transition.js similarity index 58% rename from benchmark/packages/206/plugins/transition.js rename to benchmark/packages/300/dynamic/plugins/transition.js index 3871450..57122f5 100644 --- a/benchmark/packages/206/plugins/transition.js +++ b/benchmark/packages/300/dynamic/plugins/transition.js @@ -4,40 +4,47 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.default = transition; +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + var _hyphenateStyleName = require('hyphenate-style-name'); var _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName); -var _unprefixProperty = require('../utils/unprefixProperty'); +var _unprefixProperty = require('../../utils/unprefixProperty'); var _unprefixProperty2 = _interopRequireDefault(_unprefixProperty); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -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; } +var properties = { + transition: true, + transitionProperty: true +}; -var properties = { transition: true, transitionProperty: true }; +var requiresPrefixDashCased = void 0; -function transition(_ref) { - var property = _ref.property; - var value = _ref.value; - var css = _ref.prefix.css; - var requiresPrefix = _ref.requiresPrefix; - var keepUnprefixed = _ref.keepUnprefixed; +function transition(property, value, style, _ref) { + var cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed, + requiresPrefix = _ref.requiresPrefix; // also check for already prefixed transitions var unprefixedProperty = (0, _unprefixProperty2.default)(property); if (typeof value === 'string' && properties[unprefixedProperty]) { var _ret = function () { - // TODO: memoize this array - var requiresPrefixDashCased = Object.keys(requiresPrefix).map(function (prop) { - return (0, _hyphenateStyleName2.default)(prop); - }); + // memoize the prefix array for later use + if (!requiresPrefixDashCased) { + requiresPrefixDashCased = Object.keys(requiresPrefix).map(function (prop) { + return (0, _hyphenateStyleName2.default)(prop); + }); + } // only split multi values, not cubic beziers var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); @@ -45,13 +52,13 @@ function transition(_ref) { requiresPrefixDashCased.forEach(function (prop) { multipleValues.forEach(function (val, index) { if (val.indexOf(prop) > -1 && prop !== 'order') { - multipleValues[index] = val.replace(prop, css + prop) + (keepUnprefixed ? ',' + val : ''); + multipleValues[index] = val.replace(prop, cssPrefix + prop) + (keepUnprefixed ? ',' + val : ''); } }); }); return { - v: _defineProperty({}, property, multipleValues.join(',')) + v: multipleValues.join(',') }; }(); diff --git a/benchmark/packages/300/dynamic/plugins/zoomCursor.js b/benchmark/packages/300/dynamic/plugins/zoomCursor.js new file mode 100644 index 0000000..4b9cae9 --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/zoomCursor.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = zoomCursor; + +var _getPrefixedValue = require('../../utils/getPrefixedValue'); + +var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var values = { + 'zoom-in': true, + 'zoom-out': true +}; +function zoomCursor(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (property === 'cursor' && values[value] && (browserName === 'firefox' && browserVersion < 24 || browserName === 'chrome' && browserVersion < 37 || browserName === 'safari' && browserVersion < 9 || browserName === 'opera' && browserVersion < 24)) { + return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/prefixProps.js b/benchmark/packages/300/dynamic/prefixProps.js new file mode 100644 index 0000000..2a5f801 --- /dev/null +++ b/benchmark/packages/300/dynamic/prefixProps.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = { "chrome": { "transform": 35, "transformOrigin": 35, "transformOriginX": 35, "transformOriginY": 35, "backfaceVisibility": 35, "perspective": 35, "perspectiveOrigin": 35, "transformStyle": 35, "transformOriginZ": 35, "animation": 42, "animationDelay": 42, "animationDirection": 42, "animationFillMode": 42, "animationDuration": 42, "animationIterationCount": 42, "animationName": 42, "animationPlayState": 42, "animationTimingFunction": 42, "appearance": 59, "userSelect": 53, "fontKerning": 32, "textEmphasisPosition": 59, "textEmphasis": 59, "textEmphasisStyle": 59, "textEmphasisColor": 59, "boxDecorationBreak": 59, "clipPath": 54, "maskImage": 59, "maskMode": 59, "maskRepeat": 59, "maskPosition": 59, "maskClip": 59, "maskOrigin": 59, "maskSize": 59, "maskComposite": 59, "mask": 59, "maskBorderSource": 59, "maskBorderMode": 59, "maskBorderSlice": 59, "maskBorderWidth": 59, "maskBorderOutset": 59, "maskBorderRepeat": 59, "maskBorder": 59, "maskType": 59, "textDecorationStyle": 56, "textDecorationSkip": 56, "textDecorationLine": 56, "textDecorationColor": 56, "filter": 52, "fontFeatureSettings": 47, "breakAfter": 49, "breakBefore": 49, "breakInside": 49, "columnCount": 49, "columnFill": 49, "columnGap": 49, "columnRule": 49, "columnRuleColor": 49, "columnRuleStyle": 49, "columnRuleWidth": 49, "columns": 49, "columnSpan": 49, "columnWidth": 49 }, "safari": { "flex": 8, "flexBasis": 8, "flexDirection": 8, "flexGrow": 8, "flexFlow": 8, "flexShrink": 8, "flexWrap": 8, "alignContent": 8, "alignItems": 8, "alignSelf": 8, "justifyContent": 8, "order": 8, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8, "transformOrigin": 8, "transformOriginX": 8, "transformOriginY": 8, "backfaceVisibility": 8, "perspective": 8, "perspectiveOrigin": 8, "transformStyle": 8, "transformOriginZ": 8, "animation": 8, "animationDelay": 8, "animationDirection": 8, "animationFillMode": 8, "animationDuration": 8, "animationIterationCount": 8, "animationName": 8, "animationPlayState": 8, "animationTimingFunction": 8, "appearance": 10.1, "userSelect": 10.1, "backdropFilter": 10.1, "fontKerning": 9, "scrollSnapType": 10.1, "scrollSnapPointsX": 10.1, "scrollSnapPointsY": 10.1, "scrollSnapDestination": 10.1, "scrollSnapCoordinate": 10.1, "textEmphasisPosition": 7, "textEmphasis": 7, "textEmphasisStyle": 7, "textEmphasisColor": 7, "boxDecorationBreak": 10.1, "clipPath": 10.1, "maskImage": 10.1, "maskMode": 10.1, "maskRepeat": 10.1, "maskPosition": 10.1, "maskClip": 10.1, "maskOrigin": 10.1, "maskSize": 10.1, "maskComposite": 10.1, "mask": 10.1, "maskBorderSource": 10.1, "maskBorderMode": 10.1, "maskBorderSlice": 10.1, "maskBorderWidth": 10.1, "maskBorderOutset": 10.1, "maskBorderRepeat": 10.1, "maskBorder": 10.1, "maskType": 10.1, "textDecorationStyle": 10.1, "textDecorationSkip": 10.1, "textDecorationLine": 10.1, "textDecorationColor": 10.1, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10.1, "flowInto": 10.1, "flowFrom": 10.1, "breakBefore": 8, "breakAfter": 8, "breakInside": 8, "regionFragment": 10.1, "columnCount": 8, "columnFill": 8, "columnGap": 8, "columnRule": 8, "columnRuleColor": 8, "columnRuleStyle": 8, "columnRuleWidth": 8, "columns": 8, "columnSpan": 8, "columnWidth": 8 }, "firefox": { "appearance": 54, "userSelect": 54, "boxSizing": 28, "textAlignLast": 48, "textDecorationStyle": 35, "textDecorationSkip": 35, "textDecorationLine": 35, "textDecorationColor": 35, "tabSize": 54, "hyphens": 42, "fontFeatureSettings": 33, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "opera": { "flex": 16, "flexBasis": 16, "flexDirection": 16, "flexGrow": 16, "flexFlow": 16, "flexShrink": 16, "flexWrap": 16, "alignContent": 16, "alignItems": 16, "alignSelf": 16, "justifyContent": 16, "order": 16, "transform": 22, "transformOrigin": 22, "transformOriginX": 22, "transformOriginY": 22, "backfaceVisibility": 22, "perspective": 22, "perspectiveOrigin": 22, "transformStyle": 22, "transformOriginZ": 22, "animation": 29, "animationDelay": 29, "animationDirection": 29, "animationFillMode": 29, "animationDuration": 29, "animationIterationCount": 29, "animationName": 29, "animationPlayState": 29, "animationTimingFunction": 29, "appearance": 44, "userSelect": 40, "fontKerning": 19, "textEmphasisPosition": 44, "textEmphasis": 44, "textEmphasisStyle": 44, "textEmphasisColor": 44, "boxDecorationBreak": 44, "clipPath": 41, "maskImage": 44, "maskMode": 44, "maskRepeat": 44, "maskPosition": 44, "maskClip": 44, "maskOrigin": 44, "maskSize": 44, "maskComposite": 44, "mask": 44, "maskBorderSource": 44, "maskBorderMode": 44, "maskBorderSlice": 44, "maskBorderWidth": 44, "maskBorderOutset": 44, "maskBorderRepeat": 44, "maskBorder": 44, "maskType": 44, "textDecorationStyle": 43, "textDecorationSkip": 43, "textDecorationLine": 43, "textDecorationColor": 43, "filter": 39, "fontFeatureSettings": 34, "breakAfter": 36, "breakBefore": 36, "breakInside": 36, "columnCount": 36, "columnFill": 36, "columnGap": 36, "columnRule": 36, "columnRuleColor": 36, "columnRuleStyle": 36, "columnRuleWidth": 36, "columns": 36, "columnSpan": 36, "columnWidth": 36 }, "ie": { "flex": 10, "flexDirection": 10, "flexFlow": 10, "flexWrap": 10, "transform": 9, "transformOrigin": 9, "transformOriginX": 9, "transformOriginY": 9, "userSelect": 11, "wrapFlow": 11, "wrapThrough": 11, "wrapMargin": 11, "scrollSnapType": 11, "scrollSnapPointsX": 11, "scrollSnapPointsY": 11, "scrollSnapDestination": 11, "scrollSnapCoordinate": 11, "touchAction": 10, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "gridTemplateColumns": 11, "gridTemplateRows": 11, "gridTemplateAreas": 11, "gridTemplate": 11, "gridAutoColumns": 11, "gridAutoRows": 11, "gridAutoFlow": 11, "grid": 11, "gridRowStart": 11, "gridColumnStart": 11, "gridRowEnd": 11, "gridRow": 11, "gridColumn": 11, "gridColumnEnd": 11, "gridColumnGap": 11, "gridRowGap": 11, "gridArea": 11, "gridGap": 11, "textSizeAdjust": 11 }, "edge": { "userSelect": 15, "wrapFlow": 15, "wrapThrough": 15, "wrapMargin": 15, "scrollSnapType": 15, "scrollSnapPointsX": 15, "scrollSnapPointsY": 15, "scrollSnapDestination": 15, "scrollSnapCoordinate": 15, "hyphens": 15, "flowInto": 15, "flowFrom": 15, "breakBefore": 15, "breakAfter": 15, "breakInside": 15, "regionFragment": 15, "gridTemplateColumns": 15, "gridTemplateRows": 15, "gridTemplateAreas": 15, "gridTemplate": 15, "gridAutoColumns": 15, "gridAutoRows": 15, "gridAutoFlow": 15, "grid": 15, "gridRowStart": 15, "gridColumnStart": 15, "gridRowEnd": 15, "gridRow": 15, "gridColumn": 15, "gridColumnEnd": 15, "gridColumnGap": 15, "gridRowGap": 15, "gridArea": 15, "gridGap": 15 }, "ios_saf": { "flex": 8.1, "flexBasis": 8.1, "flexDirection": 8.1, "flexGrow": 8.1, "flexFlow": 8.1, "flexShrink": 8.1, "flexWrap": 8.1, "alignContent": 8.1, "alignItems": 8.1, "alignSelf": 8.1, "justifyContent": 8.1, "order": 8.1, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8.1, "transformOrigin": 8.1, "transformOriginX": 8.1, "transformOriginY": 8.1, "backfaceVisibility": 8.1, "perspective": 8.1, "perspectiveOrigin": 8.1, "transformStyle": 8.1, "transformOriginZ": 8.1, "animation": 8.1, "animationDelay": 8.1, "animationDirection": 8.1, "animationFillMode": 8.1, "animationDuration": 8.1, "animationIterationCount": 8.1, "animationName": 8.1, "animationPlayState": 8.1, "animationTimingFunction": 8.1, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 10, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textSizeAdjust": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8.1, "breakAfter": 8.1, "breakInside": 8.1, "regionFragment": 10, "columnCount": 8.1, "columnFill": 8.1, "columnGap": 8.1, "columnRule": 8.1, "columnRuleColor": 8.1, "columnRuleStyle": 8.1, "columnRuleWidth": 8.1, "columns": 8.1, "columnSpan": 8.1, "columnWidth": 8.1 }, "android": { "flex": 4.2, "flexBasis": 4.2, "flexDirection": 4.2, "flexGrow": 4.2, "flexFlow": 4.2, "flexShrink": 4.2, "flexWrap": 4.2, "alignContent": 4.2, "alignItems": 4.2, "alignSelf": 4.2, "justifyContent": 4.2, "order": 4.2, "transition": 4.2, "transitionDelay": 4.2, "transitionDuration": 4.2, "transitionProperty": 4.2, "transitionTimingFunction": 4.2, "transform": 4.4, "transformOrigin": 4.4, "transformOriginX": 4.4, "transformOriginY": 4.4, "backfaceVisibility": 4.4, "perspective": 4.4, "perspectiveOrigin": 4.4, "transformStyle": 4.4, "transformOriginZ": 4.4, "animation": 4.4, "animationDelay": 4.4, "animationDirection": 4.4, "animationFillMode": 4.4, "animationDuration": 4.4, "animationIterationCount": 4.4, "animationName": 4.4, "animationPlayState": 4.4, "animationTimingFunction": 4.4, "appearance": 53, "userSelect": 53, "fontKerning": 4.4, "textEmphasisPosition": 53, "textEmphasis": 53, "textEmphasisStyle": 53, "textEmphasisColor": 53, "boxDecorationBreak": 53, "clipPath": 53, "maskImage": 53, "maskMode": 53, "maskRepeat": 53, "maskPosition": 53, "maskClip": 53, "maskOrigin": 53, "maskSize": 53, "maskComposite": 53, "mask": 53, "maskBorderSource": 53, "maskBorderMode": 53, "maskBorderSlice": 53, "maskBorderWidth": 53, "maskBorderOutset": 53, "maskBorderRepeat": 53, "maskBorder": 53, "maskType": 53, "filter": 4.4, "fontFeatureSettings": 4.4, "breakAfter": 53, "breakBefore": 53, "breakInside": 53, "columnCount": 53, "columnFill": 53, "columnGap": 53, "columnRule": 53, "columnRuleColor": 53, "columnRuleStyle": 53, "columnRuleWidth": 53, "columns": 53, "columnSpan": 53, "columnWidth": 53 }, "and_chr": { "appearance": 55, "textEmphasisPosition": 55, "textEmphasis": 55, "textEmphasisStyle": 55, "textEmphasisColor": 55, "boxDecorationBreak": 55, "maskImage": 55, "maskMode": 55, "maskRepeat": 55, "maskPosition": 55, "maskClip": 55, "maskOrigin": 55, "maskSize": 55, "maskComposite": 55, "mask": 55, "maskBorderSource": 55, "maskBorderMode": 55, "maskBorderSlice": 55, "maskBorderWidth": 55, "maskBorderOutset": 55, "maskBorderRepeat": 55, "maskBorder": 55, "maskType": 55, "textDecorationStyle": 55, "textDecorationSkip": 55, "textDecorationLine": 55, "textDecorationColor": 55 }, "and_uc": { "flex": 11, "flexBasis": 11, "flexDirection": 11, "flexGrow": 11, "flexFlow": 11, "flexShrink": 11, "flexWrap": 11, "alignContent": 11, "alignItems": 11, "alignSelf": 11, "justifyContent": 11, "order": 11, "transition": 11, "transitionDelay": 11, "transitionDuration": 11, "transitionProperty": 11, "transitionTimingFunction": 11, "transform": 11, "transformOrigin": 11, "transformOriginX": 11, "transformOriginY": 11, "backfaceVisibility": 11, "perspective": 11, "perspectiveOrigin": 11, "transformStyle": 11, "transformOriginZ": 11, "animation": 11, "animationDelay": 11, "animationDirection": 11, "animationFillMode": 11, "animationDuration": 11, "animationIterationCount": 11, "animationName": 11, "animationPlayState": 11, "animationTimingFunction": 11, "appearance": 11, "userSelect": 11, "fontKerning": 11, "textEmphasisPosition": 11, "textEmphasis": 11, "textEmphasisStyle": 11, "textEmphasisColor": 11, "maskImage": 11, "maskMode": 11, "maskRepeat": 11, "maskPosition": 11, "maskClip": 11, "maskOrigin": 11, "maskSize": 11, "maskComposite": 11, "mask": 11, "maskBorderSource": 11, "maskBorderMode": 11, "maskBorderSlice": 11, "maskBorderWidth": 11, "maskBorderOutset": 11, "maskBorderRepeat": 11, "maskBorder": 11, "maskType": 11, "textSizeAdjust": 11, "filter": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "fontFeatureSettings": 11, "columnCount": 11, "columnFill": 11, "columnGap": 11, "columnRule": 11, "columnRuleColor": 11, "columnRuleStyle": 11, "columnRuleWidth": 11, "columns": 11, "columnSpan": 11, "columnWidth": 11 }, "op_mini": {} }; +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/206/static/plugins/calc.js b/benchmark/packages/300/static/plugins/calc.js similarity index 99% rename from benchmark/packages/206/static/plugins/calc.js rename to benchmark/packages/300/static/plugins/calc.js index f4d093f..53fe230 100644 --- a/benchmark/packages/206/static/plugins/calc.js +++ b/benchmark/packages/300/static/plugins/calc.js @@ -12,7 +12,6 @@ var _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var prefixes = ['-webkit-', '-moz-', '']; - function calc(property, value) { if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('calc(') > -1) { return prefixes.map(function (prefix) { diff --git a/benchmark/packages/206/static/plugins/cursor.js b/benchmark/packages/300/static/plugins/cursor.js similarity index 100% rename from benchmark/packages/206/static/plugins/cursor.js rename to benchmark/packages/300/static/plugins/cursor.js diff --git a/benchmark/packages/206/static/plugins/flex.js b/benchmark/packages/300/static/plugins/flex.js similarity index 61% rename from benchmark/packages/206/static/plugins/flex.js rename to benchmark/packages/300/static/plugins/flex.js index 879056c..7e312b8 100644 --- a/benchmark/packages/206/static/plugins/flex.js +++ b/benchmark/packages/300/static/plugins/flex.js @@ -4,11 +4,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = flex; -var values = { flex: true, 'inline-flex': true }; +var values = { + flex: true, + 'inline-flex': true +}; function flex(property, value, style) { if (property === 'display' && values[value]) { - style.display = ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value]; + return ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value]; } } module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/static/plugins/flexboxIE.js b/benchmark/packages/300/static/plugins/flexboxIE.js similarity index 100% rename from benchmark/packages/206/static/plugins/flexboxIE.js rename to benchmark/packages/300/static/plugins/flexboxIE.js diff --git a/benchmark/packages/206/static/plugins/flexboxOld.js b/benchmark/packages/300/static/plugins/flexboxOld.js similarity index 70% rename from benchmark/packages/206/static/plugins/flexboxOld.js rename to benchmark/packages/300/static/plugins/flexboxOld.js index 0595fb3..06e579b 100644 --- a/benchmark/packages/206/static/plugins/flexboxOld.js +++ b/benchmark/packages/300/static/plugins/flexboxOld.js @@ -21,7 +21,16 @@ var alternativeProps = { function flexboxOld(property, value, style) { if (property === 'flexDirection' && typeof value === 'string') { - style.WebkitBoxOrient = value.indexOf('column') > -1 ? 'vertical' : 'horizontal', style.WebkitBoxDirection = value.indexOf('reverse') > -1 ? 'reverse' : 'normal'; + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical'; + } else { + style.WebkitBoxOrient = 'horizontal'; + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse'; + } else { + style.WebkitBoxDirection = 'normal'; + } } if (alternativeProps[property]) { style[alternativeProps[property]] = alternativeValues[value] || value; diff --git a/benchmark/packages/206/static/plugins/gradient.js b/benchmark/packages/300/static/plugins/gradient.js similarity index 99% rename from benchmark/packages/206/static/plugins/gradient.js rename to benchmark/packages/300/static/plugins/gradient.js index e3ad6cc..64e06c0 100644 --- a/benchmark/packages/206/static/plugins/gradient.js +++ b/benchmark/packages/300/static/plugins/gradient.js @@ -12,6 +12,7 @@ var _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var prefixes = ['-webkit-', '-moz-', '']; + var values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; function gradient(property, value) { diff --git a/benchmark/packages/206/static/plugins/position.js b/benchmark/packages/300/static/plugins/position.js similarity index 83% rename from benchmark/packages/206/static/plugins/position.js rename to benchmark/packages/300/static/plugins/position.js index 523a9f6..ea2240c 100644 --- a/benchmark/packages/206/static/plugins/position.js +++ b/benchmark/packages/300/static/plugins/position.js @@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { exports.default = position; function position(property, value, style) { if (property === 'position' && value === 'sticky') { - style.position = ['-webkit-sticky', 'sticky']; + return ['-webkit-sticky', 'sticky']; } } module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/static/plugins/sizing.js b/benchmark/packages/300/static/plugins/sizing.js similarity index 100% rename from benchmark/packages/206/static/plugins/sizing.js rename to benchmark/packages/300/static/plugins/sizing.js diff --git a/benchmark/packages/206/static/plugins/transition.js b/benchmark/packages/300/static/plugins/transition.js similarity index 100% rename from benchmark/packages/206/static/plugins/transition.js rename to benchmark/packages/300/static/plugins/transition.js diff --git a/benchmark/packages/300/static/prefixAll.js b/benchmark/packages/300/static/prefixAll.js new file mode 100644 index 0000000..50bb302 --- /dev/null +++ b/benchmark/packages/300/static/prefixAll.js @@ -0,0 +1,104 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = prefixAll; + +var _prefixProperty = require('../utils/prefixProperty'); + +var _prefixProperty2 = _interopRequireDefault(_prefixProperty); + +var _prefixValue = require('../utils/prefixValue'); + +var _prefixValue2 = _interopRequireDefault(_prefixValue); + +var _addNewValuesOnly = require('../utils/addNewValuesOnly'); + +var _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly); + +var _isObject = require('../utils/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +var _prefixProps = require('./prefixProps'); + +var _prefixProps2 = _interopRequireDefault(_prefixProps); + +var _calc = require('./plugins/calc'); + +var _calc2 = _interopRequireDefault(_calc); + +var _cursor = require('./plugins/cursor'); + +var _cursor2 = _interopRequireDefault(_cursor); + +var _flex = require('./plugins/flex'); + +var _flex2 = _interopRequireDefault(_flex); + +var _flexboxIE = require('./plugins/flexboxIE'); + +var _flexboxIE2 = _interopRequireDefault(_flexboxIE); + +var _flexboxOld = require('./plugins/flexboxOld'); + +var _flexboxOld2 = _interopRequireDefault(_flexboxOld); + +var _gradient = require('./plugins/gradient'); + +var _gradient2 = _interopRequireDefault(_gradient); + +var _position = require('./plugins/position'); + +var _position2 = _interopRequireDefault(_position); + +var _sizing = require('./plugins/sizing'); + +var _sizing2 = _interopRequireDefault(_sizing); + +var _transition = require('./plugins/transition'); + +var _transition2 = _interopRequireDefault(_transition); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var plugins = [_position2.default, _calc2.default, _cursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; + +function prefixAll(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if ((0, _isObject2.default)(value)) { + style[property] = prefixAll(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style); + (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } + } else { + var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + (0, _prefixProperty2.default)(_prefixProps2.default, property, style); + } + } + + return style; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/206/static/prefixProps.js b/benchmark/packages/300/static/prefixProps.js similarity index 100% rename from benchmark/packages/206/static/prefixProps.js rename to benchmark/packages/300/static/prefixProps.js diff --git a/benchmark/packages/300/utils/addNewValuesOnly.js b/benchmark/packages/300/utils/addNewValuesOnly.js new file mode 100644 index 0000000..34dd0e1 --- /dev/null +++ b/benchmark/packages/300/utils/addNewValuesOnly.js @@ -0,0 +1,22 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = addNewValuesOnly; +function addIfNew(list, value) { + if (list.indexOf(value) === -1) { + list.push(value); + } +} + +function addNewValuesOnly(list, values) { + if (Array.isArray(values)) { + for (var i = 0, len = values.length; i < len; ++i) { + addIfNew(list, values[i]); + } + } else { + addIfNew(list, values); + } +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/206/utils/capitalizeString.js b/benchmark/packages/300/utils/capitalizeString.js similarity index 70% rename from benchmark/packages/206/utils/capitalizeString.js rename to benchmark/packages/300/utils/capitalizeString.js index 6c36c32..5a872bc 100644 --- a/benchmark/packages/206/utils/capitalizeString.js +++ b/benchmark/packages/300/utils/capitalizeString.js @@ -3,10 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); -// helper to capitalize strings - -exports.default = function (str) { +exports.default = capitalizeString; +function capitalizeString(str) { return str.charAt(0).toUpperCase() + str.slice(1); -}; - +} module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/utils/getBrowserInformation.js b/benchmark/packages/300/utils/getBrowserInformation.js new file mode 100644 index 0000000..5e5b3e7 --- /dev/null +++ b/benchmark/packages/300/utils/getBrowserInformation.js @@ -0,0 +1,127 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getBrowserInformation; + +var _bowser = require('bowser'); + +var _bowser2 = _interopRequireDefault(_bowser); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var prefixByBrowser = { + chrome: 'Webkit', + safari: 'Webkit', + ios: 'Webkit', + android: 'Webkit', + phantom: 'Webkit', + opera: 'Webkit', + webos: 'Webkit', + blackberry: 'Webkit', + bada: 'Webkit', + tizen: 'Webkit', + chromium: 'Webkit', + vivaldi: 'Webkit', + firefox: 'Moz', + seamoney: 'Moz', + sailfish: 'Moz', + msie: 'ms', + msedge: 'ms' +}; + + +var browserByCanIuseAlias = { + chrome: 'chrome', + chromium: 'chrome', + safari: 'safari', + firfox: 'firefox', + msedge: 'edge', + opera: 'opera', + vivaldi: 'opera', + msie: 'ie' +}; + +function getBrowserName(browserInfo) { + if (browserInfo.firefox) { + return 'firefox'; + } + + if (browserInfo.mobile || browserInfo.tablet) { + if (browserInfo.ios) { + return 'ios_saf'; + } else if (browserInfo.android) { + return 'android'; + } else if (browserInfo.opera) { + return 'op_mini'; + } + } + + for (var browser in browserByCanIuseAlias) { + if (browserInfo[browser]) { + return browserByCanIuseAlias[browser]; + } + } +} + +/** + * Uses bowser to get default browser browserInformation such as version and name + * Evaluates bowser browserInfo and adds vendorPrefix browserInformation + * @param {string} userAgent - userAgent that gets evaluated + */ +function getBrowserInformation(userAgent) { + var browserInfo = _bowser2.default._detect(userAgent); + + for (var browser in prefixByBrowser) { + if (browserInfo[browser]) { + var prefix = prefixByBrowser[browser]; + + browserInfo.jsPrefix = prefix; + browserInfo.cssPrefix = '-' + prefix.toLowerCase() + '-'; + break; + } + } + + browserInfo.browserName = getBrowserName(browserInfo); + + // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN + if (browserInfo.version) { + browserInfo.browserVersion = parseFloat(browserInfo.version); + } else { + browserInfo.browserVersion = parseInt(parseFloat(browserInfo.osversion), 10); + } + + browserInfo.osVersion = parseFloat(browserInfo.osversion); + + // iOS forces all browsers to use Safari under the hood + // as the Safari version seems to match the iOS version + // we just explicitely use the osversion instead + // https://github.com/rofrischmann/inline-style-prefixer/issues/72 + if (browserInfo.browserName === 'ios_saf' && browserInfo.browserVersion > browserInfo.osVersion) { + browserInfo.browserVersion = browserInfo.osVersion; + } + + // seperate native android chrome + // https://github.com/rofrischmann/inline-style-prefixer/issues/45 + if (browserInfo.browserName === 'android' && browserInfo.chrome && browserInfo.browserVersion > 37) { + browserInfo.browserName = 'and_chr'; + } + + // For android < 4.4 we want to check the osversion + // not the chrome version, see issue #26 + // https://github.com/rofrischmann/inline-style-prefixer/issues/26 + if (browserInfo.browserName === 'android' && browserInfo.osVersion < 5) { + browserInfo.browserVersion = browserInfo.osVersion; + } + + // Samsung browser are basically build on Chrome > 44 + // https://github.com/rofrischmann/inline-style-prefixer/issues/102 + if (browserInfo.browserName === 'android' && browserInfo.samsungBrowser) { + browserInfo.browserName = 'and_chr'; + browserInfo.browserVersion = 44; + } + + return browserInfo; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/utils/getPrefixedKeyframes.js b/benchmark/packages/300/utils/getPrefixedKeyframes.js new file mode 100644 index 0000000..06fb5d5 --- /dev/null +++ b/benchmark/packages/300/utils/getPrefixedKeyframes.js @@ -0,0 +1,15 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getPrefixedKeyframes; +function getPrefixedKeyframes(browserName, browserVersion, cssPrefix) { + var prefixedKeyframes = 'keyframes'; + + if (browserName === 'chrome' && browserVersion < 43 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 9 || browserName === 'opera' && browserVersion < 30 || browserName === 'android' && browserVersion <= 4.4 || browserName === 'and_uc') { + return cssPrefix + prefixedKeyframes; + } + return prefixedKeyframes; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/utils/getPrefixedValue.js b/benchmark/packages/300/utils/getPrefixedValue.js new file mode 100644 index 0000000..9e23b82 --- /dev/null +++ b/benchmark/packages/300/utils/getPrefixedValue.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getPrefixedValue; +function getPrefixedValue(prefixedValue, value, keepUnprefixed) { + if (keepUnprefixed) { + return [prefixedValue, value]; + } + return prefixedValue; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/206/utils/isPrefixedProperty.js b/benchmark/packages/300/utils/isObject.js similarity index 50% rename from benchmark/packages/206/utils/isPrefixedProperty.js rename to benchmark/packages/300/utils/isObject.js index 3d92f82..dd48b07 100644 --- a/benchmark/packages/206/utils/isPrefixedProperty.js +++ b/benchmark/packages/300/utils/isObject.js @@ -3,9 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); - -exports.default = function (property) { - return property.match(/^(Webkit|Moz|O|ms)/) !== null; -}; - +exports.default = isObject; +function isObject(value) { + return value instanceof Object && !Array.isArray(value); +} module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/utils/isPrefixedProperty.js b/benchmark/packages/300/utils/isPrefixedProperty.js new file mode 100644 index 0000000..ec9b754 --- /dev/null +++ b/benchmark/packages/300/utils/isPrefixedProperty.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isPrefixedProperty; +var regex = /^(Webkit|Moz|O|ms)/; + +function isPrefixedProperty(property) { + return property.match(regex) !== null; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/utils/isPrefixedValue.js b/benchmark/packages/300/utils/isPrefixedValue.js new file mode 100644 index 0000000..d6e49d1 --- /dev/null +++ b/benchmark/packages/300/utils/isPrefixedValue.js @@ -0,0 +1,15 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isPrefixedValue; +var regex = /-webkit-|-moz-|-ms-/; +function isPrefixedValue(value) { + if (Array.isArray(value)) { + value = value.join(','); + } + + return value.match(regex) !== null; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/utils/prefixProperty.js b/benchmark/packages/300/utils/prefixProperty.js new file mode 100644 index 0000000..9778faf --- /dev/null +++ b/benchmark/packages/300/utils/prefixProperty.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = prefixProperty; + +var _capitalizeString = require('./capitalizeString'); + +var _capitalizeString2 = _interopRequireDefault(_capitalizeString); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function prefixProperty(prefixProperties, property, style) { + var requiredPrefixes = prefixProperties[property]; + + if (requiredPrefixes) { + for (var i = 0, len = requiredPrefixes.length; i < len; ++i) { + style[requiredPrefixes[i] + (0, _capitalizeString2.default)(property)] = style[property]; + } + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/utils/prefixValue.js b/benchmark/packages/300/utils/prefixValue.js new file mode 100644 index 0000000..9ce9b35 --- /dev/null +++ b/benchmark/packages/300/utils/prefixValue.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = prefixValue; +function prefixValue(plugins, property, value, style, metaData) { + for (var i = 0, len = plugins.length; i < len; ++i) { + var processedValue = plugins[i](property, value, style, metaData); + + // we can stop processing if a value is returned + // as all plugin criteria are unique + if (processedValue) { + return processedValue; + } + } +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/utils/unprefixProperty.js b/benchmark/packages/300/utils/unprefixProperty.js new file mode 100644 index 0000000..435f8a4 --- /dev/null +++ b/benchmark/packages/300/utils/unprefixProperty.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = unprefixProperty; + +var _isPrefixedProperty = require('./isPrefixedProperty'); + +var _isPrefixedProperty2 = _interopRequireDefault(_isPrefixedProperty); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var regex = /^(Webkit|Moz|O|ms)/; +function unprefixProperty(property) { + if ((0, _isPrefixedProperty2.default)(property)) { + var unprefixed = property.replace(/^(ms|Webkit|Moz|O)/, ''); + return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1); + } + return property; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/size/205-dynamic.js b/benchmark/size/205-dynamic.js new file mode 100644 index 0000000..cb5bf74 --- /dev/null +++ b/benchmark/size/205-dynamic.js @@ -0,0 +1 @@ +import InlineStylePrefixer from '../packages/205/Prefixer' diff --git a/benchmark/size/old_static.js b/benchmark/size/205-static.js similarity index 86% rename from benchmark/size/old_static.js rename to benchmark/size/205-static.js index d7c9a5c..f02647c 100644 --- a/benchmark/size/old_static.js +++ b/benchmark/size/205-static.js @@ -1 +1 @@ -import InlineStylePrefixerStatic from '../packages/205/static/prefixAll'; +import InlineStylePrefixerStatic from '../packages/205/static/prefixAll' diff --git a/benchmark/size/300-dynamic.js b/benchmark/size/300-dynamic.js new file mode 100644 index 0000000..fc80f2d --- /dev/null +++ b/benchmark/size/300-dynamic.js @@ -0,0 +1 @@ +import InlineStylePrefixer from '../packages/300/dynamic/Prefixer' diff --git a/benchmark/size/300-static.js b/benchmark/size/300-static.js new file mode 100644 index 0000000..adecaee --- /dev/null +++ b/benchmark/size/300-static.js @@ -0,0 +1 @@ +import InlineStylePrefixerStatic from '../packages/300/static/prefixAll' diff --git a/benchmark/size/index.js b/benchmark/size/index.js index 986f557..f1ad5ee 100644 --- a/benchmark/size/index.js +++ b/benchmark/size/index.js @@ -1,20 +1,20 @@ -import webpack from 'webpack'; -import path from 'path'; -import fs from 'fs'; -import rimraf from 'rimraf'; +import webpack from 'webpack' +import path from 'path' +import fs from 'fs' +import rimraf from 'rimraf' -const testBundle = (name) => new Promise((resolve, reject) => { +const testBundle = name => new Promise((resolve, reject) => { const compiler = webpack({ context: __dirname, - entry: { - [name]: [ `./${name}.js` ] - }, + entry: { [name]: [`./${name}.js`] }, module: { loaders: [ { test: /\.js$/, loader: 'babel-loader', - query: JSON.parse(fs.readFileSync(path.join(__dirname, '../..', '.babelrc'))), + query: JSON.parse( + fs.readFileSync(path.join(__dirname, '../..', '.babelrc')) + ), include: __dirname, exclude: path.join(__dirname, '../..', 'node_modules') } @@ -27,9 +27,7 @@ const testBundle = (name) => new Promise((resolve, reject) => { plugins: [ new webpack.optimize.UglifyJsPlugin({ sourceMap: false, - mangle: { - screw_ie8: true - }, + mangle: { screw_ie8: true }, output: { screw_ie8: true, comments: false @@ -40,32 +38,37 @@ const testBundle = (name) => new Promise((resolve, reject) => { } }) ] - }); + }) compiler.run((err) => { if (err) { - reject(err); + reject(err) } else { - console.log(`Size ${name}`, ( - fs.statSync(path.join(__dirname, 'dist', `${name}.js`)).size / 1000.0 - ) + 'KB'); - resolve(); + console.log( + `Size ${name}`, + `${fs.statSync(path.join(__dirname, 'dist', `${name}.js`)).size / + 1000.0}KB` + ) + resolve() } - }); -}); + }) +}) -Promise.all([ - testBundle('new'), - testBundle('new_static'), - testBundle('old'), - testBundle('old_static') -]).then(() => { - rimraf(path.join(__dirname, 'dist'), (err) => { - if (err) { - throw err; - } - }); -}).catch((err) => { - console.error(err); - throw err; -}); +Promise + .all([ + testBundle('205-static'), + testBundle('300-static'), + testBundle('205-dynamic'), + testBundle('300-dynamic') + ]) + .then(() => { + rimraf(path.join(__dirname, 'dist'), (err) => { + if (err) { + throw err + } + }) + }) + .catch((err) => { + console.error(err) + throw err + }) diff --git a/benchmark/size/new.js b/benchmark/size/new.js deleted file mode 100644 index 208ce2b..0000000 --- a/benchmark/size/new.js +++ /dev/null @@ -1 +0,0 @@ -import InlineStylePrefixer from '../packages/206/Prefixer'; diff --git a/benchmark/size/new_static.js b/benchmark/size/new_static.js deleted file mode 100644 index eb36c44..0000000 --- a/benchmark/size/new_static.js +++ /dev/null @@ -1 +0,0 @@ -import InlineStylePrefixerStatic from '../packages/206/static/prefixAll'; diff --git a/benchmark/size/old.js b/benchmark/size/old.js deleted file mode 100644 index 27f8eae..0000000 --- a/benchmark/size/old.js +++ /dev/null @@ -1 +0,0 @@ -import InlineStylePrefixer from '../packages/205/Prefixer'; diff --git a/benchmark/static/cases/oldStatic.js b/benchmark/static/cases/205-static.js similarity index 57% rename from benchmark/static/cases/oldStatic.js rename to benchmark/static/cases/205-static.js index ceb0585..b10e2f7 100644 --- a/benchmark/static/cases/oldStatic.js +++ b/benchmark/static/cases/205-static.js @@ -1,10 +1,10 @@ -import prefixAll from '../../packages/205/static/prefixAll'; +import prefixAll from '../../packages/205/static/prefixAll' -export const oldStatic = () => { +export const static205 = () => { const styles = { color: 'red', display: 'flex', - justifyContent:'center', + justifyContent: 'center', alignItems: 'center', userSelect: 'none', fontSize: '12px', @@ -14,10 +14,10 @@ export const oldStatic = () => { transition: '300ms transform linear', transform: 'rotateX(30deg)', color: 'blue', - width: [ 'calc(100% - 50px)', '300px'] + width: ['calc(100% - 50px)', '300px'] } - }; + } - const prefixed = prefixAll(styles); - return prefixed; -}; + const prefixed = prefixAll(styles) + return prefixed +} diff --git a/benchmark/static/cases/newStatic.js b/benchmark/static/cases/300-static.js similarity index 57% rename from benchmark/static/cases/newStatic.js rename to benchmark/static/cases/300-static.js index 64d20f1..9c49958 100644 --- a/benchmark/static/cases/newStatic.js +++ b/benchmark/static/cases/300-static.js @@ -1,10 +1,10 @@ -import prefixAll from '../../packages/206/static/prefixAll'; +import prefixAll from '../../packages/300/static/prefixAll' -export const newStatic = () => { +export const static300 = () => { const styles = { color: 'red', display: 'flex', - justifyContent:'center', + justifyContent: 'center', alignItems: 'center', userSelect: 'none', fontSize: '12px', @@ -14,10 +14,10 @@ export const newStatic = () => { transition: '300ms transform linear', transform: 'rotateX(30deg)', color: 'blue', - width: [ 'calc(100% - 50px)', '300px'] + width: ['calc(100% - 50px)', '300px'] } - }; + } - const prefixed = prefixAll(styles); - return prefixed; -}; + const prefixed = prefixAll(styles) + return prefixed +} diff --git a/benchmark/static/cases/index.js b/benchmark/static/cases/index.js index 42b1760..2fe0442 100644 --- a/benchmark/static/cases/index.js +++ b/benchmark/static/cases/index.js @@ -1,2 +1,2 @@ -export * from './newStatic'; -export * from './oldStatic'; +export * from './205-static' +export * from './300-static' diff --git a/benchmark/static/index.js b/benchmark/static/index.js index 215da73..6bdac23 100644 --- a/benchmark/static/index.js +++ b/benchmark/static/index.js @@ -1,26 +1,28 @@ -import { Suite } from 'benchmark'; -import beautifyBenchmark from 'beautify-benchmark'; -import { oldStatic, newStatic } from './cases'; +import { Suite } from 'benchmark' +import beautifyBenchmark from 'beautify-benchmark' +import { static300, static205 } from './cases' export const run = () => { - console.log('Running static test.'); + console.log('Running static test.') - const jssSuite = new Suite(); + const testSuite = new Suite() - jssSuite.add('newStatic', () => newStatic()); - jssSuite.add('oldStatic', () => oldStatic()); + testSuite.add('2.0.5', () => static205()) + testSuite.add('3.0.0', () => static300()) - jssSuite.on('cycle', (e) => { - beautifyBenchmark.add(e.target); - }); + testSuite.on('cycle', (e) => { + beautifyBenchmark.add(e.target) + }) - jssSuite.on('complete', function() { - beautifyBenchmark.log(); - console.log(`Fastest is: ${this.filter('fastest').map('name')}\n`); - console.log('Improvement: ' + (Math.round(this[0].hz / this[1].hz * 100)/100) + 'x faster'); - }); + testSuite.on('complete', function () { + beautifyBenchmark.log() + console.log(`Fastest is: ${this.filter('fastest').map('name')}\n`) + console.log( + `Improvement: ${Math.round(this[1].hz / this[0].hz * 100) / 100}x faster` + ) + }) - return jssSuite.run({ async: true }); -}; + return testSuite.run({ async: true }) +} -run(); +run() diff --git a/dist/inline-style-prefix-all.js b/dist/inline-style-prefix-all.js deleted file mode 100644 index 4aabad5..0000000 --- a/dist/inline-style-prefix-all.js +++ /dev/null @@ -1,340 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.InlineStylePrefixAll = factory()); -}(this, function () { 'use strict'; - - var babelHelpers = {}; - - babelHelpers.classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - - babelHelpers.createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - babelHelpers.defineProperty = function (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; - }; - - babelHelpers; - - - function __commonjs(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } - - var prefixProps = { "Webkit": { "transform": true, "transformOrigin": true, "transformOriginX": true, "transformOriginY": true, "backfaceVisibility": true, "perspective": true, "perspectiveOrigin": true, "transformStyle": true, "transformOriginZ": true, "animation": true, "animationDelay": true, "animationDirection": true, "animationFillMode": true, "animationDuration": true, "animationIterationCount": true, "animationName": true, "animationPlayState": true, "animationTimingFunction": true, "appearance": true, "userSelect": true, "fontKerning": true, "textEmphasisPosition": true, "textEmphasis": true, "textEmphasisStyle": true, "textEmphasisColor": true, "boxDecorationBreak": true, "clipPath": true, "maskImage": true, "maskMode": true, "maskRepeat": true, "maskPosition": true, "maskClip": true, "maskOrigin": true, "maskSize": true, "maskComposite": true, "mask": true, "maskBorderSource": true, "maskBorderMode": true, "maskBorderSlice": true, "maskBorderWidth": true, "maskBorderOutset": true, "maskBorderRepeat": true, "maskBorder": true, "maskType": true, "textDecorationStyle": true, "textDecorationSkip": true, "textDecorationLine": true, "textDecorationColor": true, "filter": true, "fontFeatureSettings": true, "breakAfter": true, "breakBefore": true, "breakInside": true, "columnCount": true, "columnFill": true, "columnGap": true, "columnRule": true, "columnRuleColor": true, "columnRuleStyle": true, "columnRuleWidth": true, "columns": true, "columnSpan": true, "columnWidth": true, "flex": true, "flexBasis": true, "flexDirection": true, "flexGrow": true, "flexFlow": true, "flexShrink": true, "flexWrap": true, "alignContent": true, "alignItems": true, "alignSelf": true, "justifyContent": true, "order": true, "transition": true, "transitionDelay": true, "transitionDuration": true, "transitionProperty": true, "transitionTimingFunction": true, "backdropFilter": true, "scrollSnapType": true, "scrollSnapPointsX": true, "scrollSnapPointsY": true, "scrollSnapDestination": true, "scrollSnapCoordinate": true, "shapeImageThreshold": true, "shapeImageMargin": true, "shapeImageOutside": true, "hyphens": true, "flowInto": true, "flowFrom": true, "regionFragment": true, "textSizeAdjust": true }, "Moz": { "appearance": true, "userSelect": true, "boxSizing": true, "textAlignLast": true, "textDecorationStyle": true, "textDecorationSkip": true, "textDecorationLine": true, "textDecorationColor": true, "tabSize": true, "hyphens": true, "fontFeatureSettings": true, "breakAfter": true, "breakBefore": true, "breakInside": true, "columnCount": true, "columnFill": true, "columnGap": true, "columnRule": true, "columnRuleColor": true, "columnRuleStyle": true, "columnRuleWidth": true, "columns": true, "columnSpan": true, "columnWidth": true }, "ms": { "flex": true, "flexBasis": false, "flexDirection": true, "flexGrow": false, "flexFlow": true, "flexShrink": false, "flexWrap": true, "alignContent": false, "alignItems": false, "alignSelf": false, "justifyContent": false, "order": false, "transform": true, "transformOrigin": true, "transformOriginX": true, "transformOriginY": true, "userSelect": true, "wrapFlow": true, "wrapThrough": true, "wrapMargin": true, "scrollSnapType": true, "scrollSnapPointsX": true, "scrollSnapPointsY": true, "scrollSnapDestination": true, "scrollSnapCoordinate": true, "touchAction": true, "hyphens": true, "flowInto": true, "flowFrom": true, "breakBefore": true, "breakAfter": true, "breakInside": true, "regionFragment": true, "gridTemplateColumns": true, "gridTemplateRows": true, "gridTemplateAreas": true, "gridTemplate": true, "gridAutoColumns": true, "gridAutoRows": true, "gridAutoFlow": true, "grid": true, "gridRowStart": true, "gridColumnStart": true, "gridRowEnd": true, "gridRow": true, "gridColumn": true, "gridColumnEnd": true, "gridColumnGap": true, "gridRowGap": true, "gridArea": true, "gridGap": true, "textSizeAdjust": true } }; - - // helper to capitalize strings - var capitalizeString = (function (str) { - return str.charAt(0).toUpperCase() + str.slice(1); - }); - - var isPrefixedProperty = (function (property) { - return property.match(/^(Webkit|Moz|O|ms)/) !== null; - }); - - function sortPrefixedStyle(style) { - return Object.keys(style).sort(function (left, right) { - if (isPrefixedProperty(left) && !isPrefixedProperty(right)) { - return -1; - } else if (!isPrefixedProperty(left) && isPrefixedProperty(right)) { - return 1; - } - return 0; - }).reduce(function (sortedStyle, prop) { - sortedStyle[prop] = style[prop]; - return sortedStyle; - }, {}); - } - - function position(property, value) { - if (property === 'position' && value === 'sticky') { - return { position: ['-webkit-sticky', 'sticky'] }; - } - } - - // returns a style object with a single concated prefixed value string - var joinPrefixedValue = (function (property, value) { - var replacer = arguments.length <= 2 || arguments[2] === undefined ? function (prefix, value) { - return prefix + value; - } : arguments[2]; - return babelHelpers.defineProperty({}, property, ['-webkit-', '-moz-', ''].map(function (prefix) { - return replacer(prefix, value); - })); - }); - - var isPrefixedValue = (function (value) { - if (Array.isArray(value)) value = value.join(','); - - return value.match(/-webkit-|-moz-|-ms-/) !== null; - }); - - function calc(property, value) { - if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) { - return joinPrefixedValue(property, value, function (prefix, value) { - return value.replace(/calc\(/g, prefix + 'calc('); - }); - } - } - - var values = { - 'zoom-in': true, - 'zoom-out': true, - grab: true, - grabbing: true - }; - - function cursor(property, value) { - if (property === 'cursor' && values[value]) { - return joinPrefixedValue(property, value); - } - } - - var values$1 = { flex: true, 'inline-flex': true }; - - function flex(property, value) { - if (property === 'display' && values$1[value]) { - return { - display: ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value] - }; - } - } - - var properties = { - maxHeight: true, - maxWidth: true, - width: true, - height: true, - columnWidth: true, - minWidth: true, - minHeight: true - }; - var values$2 = { - 'min-content': true, - 'max-content': true, - 'fill-available': true, - 'fit-content': true, - 'contain-floats': true - }; - - function sizing(property, value) { - if (properties[property] && values$2[value]) { - return joinPrefixedValue(property, value); - } - } - - var values$3 = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; - - function gradient(property, value) { - if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values$3) !== null) { - return joinPrefixedValue(property, value); - } - } - - var index = __commonjs(function (module) { - 'use strict'; - - var uppercasePattern = /[A-Z]/g; - var msPattern = /^ms-/; - - function hyphenateStyleName(string) { - return string.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-'); - } - - module.exports = hyphenateStyleName; - }); - - var hyphenateStyleName = (index && typeof index === 'object' && 'default' in index ? index['default'] : index); - - var properties$1 = { - transition: true, - transitionProperty: true, - WebkitTransition: true, - WebkitTransitionProperty: true - }; - - function transition(property, value) { - // also check for already prefixed transitions - if (typeof value === 'string' && properties$1[property]) { - var _ref2; - - var outputValue = prefixValue(value); - var webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (value) { - return value.match(/-moz-|-ms-/) === null; - }).join(','); - - // if the property is already prefixed - if (property.indexOf('Webkit') > -1) { - return babelHelpers.defineProperty({}, property, webkitOutput); - } - - return _ref2 = {}, babelHelpers.defineProperty(_ref2, 'Webkit' + capitalizeString(property), webkitOutput), babelHelpers.defineProperty(_ref2, property, outputValue), _ref2; - } - } - - function prefixValue(value) { - if (isPrefixedValue(value)) { - return value; - } - - // only split multi values, not cubic beziers - var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); - - // iterate each single value and check for transitioned properties - // that need to be prefixed as well - multipleValues.forEach(function (val, index) { - multipleValues[index] = Object.keys(prefixProps).reduce(function (out, prefix) { - var dashCasePrefix = '-' + prefix.toLowerCase() + '-'; - - Object.keys(prefixProps[prefix]).forEach(function (prop) { - var dashCaseProperty = hyphenateStyleName(prop); - - if (val.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { - // join all prefixes and create a new value - out = val.replace(dashCaseProperty, dashCasePrefix + dashCaseProperty) + ',' + out; - } - }); - return out; - }, val); - }); - - return multipleValues.join(','); - } - - var alternativeValues = { - 'space-around': 'distribute', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end' - }; - var alternativeProps = { - alignContent: 'msFlexLinePack', - alignSelf: 'msFlexItemAlign', - alignItems: 'msFlexAlign', - justifyContent: 'msFlexPack', - order: 'msFlexOrder', - flexGrow: 'msFlexPositive', - flexShrink: 'msFlexNegative', - flexBasis: 'msPreferredSize' - }; - - function flexboxIE(property, value) { - if (alternativeProps[property]) { - return babelHelpers.defineProperty({}, alternativeProps[property], alternativeValues[value] || value); - } - } - - var alternativeValues$1 = { - 'space-around': 'justify', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - 'wrap-reverse': 'multiple', - wrap: 'multiple' - }; - - var alternativeProps$1 = { - alignItems: 'WebkitBoxAlign', - justifyContent: 'WebkitBoxPack', - flexWrap: 'WebkitBoxLines' - }; - - function flexboxOld(property, value) { - if (property === 'flexDirection' && typeof value === 'string') { - return { - WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal', - WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal' - }; - } - if (alternativeProps$1[property]) { - return babelHelpers.defineProperty({}, alternativeProps$1[property], alternativeValues$1[value] || value); - } - } - - var plugins = [position, calc, cursor, sizing, gradient, transition, flexboxIE, flexboxOld, flex]; - - /** - * Returns a prefixed version of the style object using all vendor prefixes - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - function prefixAll(styles) { - Object.keys(styles).forEach(function (property) { - var value = styles[property]; - if (value instanceof Object && !Array.isArray(value)) { - // recurse through nested style objects - styles[property] = prefixAll(value); - } else { - Object.keys(prefixProps).forEach(function (prefix) { - var properties = prefixProps[prefix]; - // add prefixes if needed - if (properties[property]) { - styles[prefix + capitalizeString(property)] = value; - } - }); - } - }); - - Object.keys(styles).forEach(function (property) { - [].concat(styles[property]).forEach(function (value, index) { - // resolve every special plugins - plugins.forEach(function (plugin) { - return assignStyles(styles, plugin(property, value)); - }); - }); - }); - - return sortPrefixedStyle(styles); - } - - function assignStyles(base) { - var extend = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - Object.keys(extend).forEach(function (property) { - var baseValue = base[property]; - if (Array.isArray(baseValue)) { - [].concat(extend[property]).forEach(function (value) { - var valueIndex = baseValue.indexOf(value); - if (valueIndex > -1) { - base[property].splice(valueIndex, 1); - } - base[property].push(value); - }); - } else { - base[property] = extend[property]; - } - }); - } - - return prefixAll; - -})); -//# sourceMappingURL=inline-style-prefix-all.js.map \ No newline at end of file diff --git a/dist/inline-style-prefix-all.js.map b/dist/inline-style-prefix-all.js.map deleted file mode 100644 index b8b8f58..0000000 --- a/dist/inline-style-prefix-all.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inline-style-prefix-all.js","sources":["../modules/static/prefixProps.js","../modules/utils/capitalizeString.js","../modules/utils/isPrefixedProperty.js","../modules/utils/sortPrefixedStyle.js","../modules/static/plugins/position.js","../modules/utils/joinPrefixedValue.js","../modules/utils/isPrefixedValue.js","../modules/static/plugins/calc.js","../modules/static/plugins/cursor.js","../modules/static/plugins/flex.js","../modules/static/plugins/sizing.js","../modules/static/plugins/gradient.js","../node_modules/hyphenate-style-name/index.js","../modules/static/plugins/transition.js","../modules/static/plugins/flexboxIE.js","../modules/static/plugins/flexboxOld.js","../modules//static/prefixAll.js"],"sourcesContent":["export default {\"Webkit\":{\"transform\":true,\"transformOrigin\":true,\"transformOriginX\":true,\"transformOriginY\":true,\"backfaceVisibility\":true,\"perspective\":true,\"perspectiveOrigin\":true,\"transformStyle\":true,\"transformOriginZ\":true,\"animation\":true,\"animationDelay\":true,\"animationDirection\":true,\"animationFillMode\":true,\"animationDuration\":true,\"animationIterationCount\":true,\"animationName\":true,\"animationPlayState\":true,\"animationTimingFunction\":true,\"appearance\":true,\"userSelect\":true,\"fontKerning\":true,\"textEmphasisPosition\":true,\"textEmphasis\":true,\"textEmphasisStyle\":true,\"textEmphasisColor\":true,\"boxDecorationBreak\":true,\"clipPath\":true,\"maskImage\":true,\"maskMode\":true,\"maskRepeat\":true,\"maskPosition\":true,\"maskClip\":true,\"maskOrigin\":true,\"maskSize\":true,\"maskComposite\":true,\"mask\":true,\"maskBorderSource\":true,\"maskBorderMode\":true,\"maskBorderSlice\":true,\"maskBorderWidth\":true,\"maskBorderOutset\":true,\"maskBorderRepeat\":true,\"maskBorder\":true,\"maskType\":true,\"textDecorationStyle\":true,\"textDecorationSkip\":true,\"textDecorationLine\":true,\"textDecorationColor\":true,\"filter\":true,\"fontFeatureSettings\":true,\"breakAfter\":true,\"breakBefore\":true,\"breakInside\":true,\"columnCount\":true,\"columnFill\":true,\"columnGap\":true,\"columnRule\":true,\"columnRuleColor\":true,\"columnRuleStyle\":true,\"columnRuleWidth\":true,\"columns\":true,\"columnSpan\":true,\"columnWidth\":true,\"flex\":true,\"flexBasis\":true,\"flexDirection\":true,\"flexGrow\":true,\"flexFlow\":true,\"flexShrink\":true,\"flexWrap\":true,\"alignContent\":true,\"alignItems\":true,\"alignSelf\":true,\"justifyContent\":true,\"order\":true,\"transition\":true,\"transitionDelay\":true,\"transitionDuration\":true,\"transitionProperty\":true,\"transitionTimingFunction\":true,\"backdropFilter\":true,\"scrollSnapType\":true,\"scrollSnapPointsX\":true,\"scrollSnapPointsY\":true,\"scrollSnapDestination\":true,\"scrollSnapCoordinate\":true,\"shapeImageThreshold\":true,\"shapeImageMargin\":true,\"shapeImageOutside\":true,\"hyphens\":true,\"flowInto\":true,\"flowFrom\":true,\"regionFragment\":true,\"textSizeAdjust\":true},\"Moz\":{\"appearance\":true,\"userSelect\":true,\"boxSizing\":true,\"textAlignLast\":true,\"textDecorationStyle\":true,\"textDecorationSkip\":true,\"textDecorationLine\":true,\"textDecorationColor\":true,\"tabSize\":true,\"hyphens\":true,\"fontFeatureSettings\":true,\"breakAfter\":true,\"breakBefore\":true,\"breakInside\":true,\"columnCount\":true,\"columnFill\":true,\"columnGap\":true,\"columnRule\":true,\"columnRuleColor\":true,\"columnRuleStyle\":true,\"columnRuleWidth\":true,\"columns\":true,\"columnSpan\":true,\"columnWidth\":true},\"ms\":{\"flex\":true,\"flexBasis\":false,\"flexDirection\":true,\"flexGrow\":false,\"flexFlow\":true,\"flexShrink\":false,\"flexWrap\":true,\"alignContent\":false,\"alignItems\":false,\"alignSelf\":false,\"justifyContent\":false,\"order\":false,\"transform\":true,\"transformOrigin\":true,\"transformOriginX\":true,\"transformOriginY\":true,\"userSelect\":true,\"wrapFlow\":true,\"wrapThrough\":true,\"wrapMargin\":true,\"scrollSnapType\":true,\"scrollSnapPointsX\":true,\"scrollSnapPointsY\":true,\"scrollSnapDestination\":true,\"scrollSnapCoordinate\":true,\"touchAction\":true,\"hyphens\":true,\"flowInto\":true,\"flowFrom\":true,\"breakBefore\":true,\"breakAfter\":true,\"breakInside\":true,\"regionFragment\":true,\"gridTemplateColumns\":true,\"gridTemplateRows\":true,\"gridTemplateAreas\":true,\"gridTemplate\":true,\"gridAutoColumns\":true,\"gridAutoRows\":true,\"gridAutoFlow\":true,\"grid\":true,\"gridRowStart\":true,\"gridColumnStart\":true,\"gridRowEnd\":true,\"gridRow\":true,\"gridColumn\":true,\"gridColumnEnd\":true,\"gridColumnGap\":true,\"gridRowGap\":true,\"gridArea\":true,\"gridGap\":true,\"textSizeAdjust\":true}}","// helper to capitalize strings\nexport default str => str.charAt(0).toUpperCase() + str.slice(1)\n","export default property => property.match(/^(Webkit|Moz|O|ms)/) !== null\n","import isPrefixedProperty from './isPrefixedProperty'\n\nexport default function sortPrefixedStyle(style) {\n return Object.keys(style).sort((left, right) => {\n if (isPrefixedProperty(left) && !isPrefixedProperty(right)) {\n return -1\n } else if (!isPrefixedProperty(left) && isPrefixedProperty(right)) {\n return 1\n }\n return 0\n }).reduce((sortedStyle, prop) => {\n sortedStyle[prop] = style[prop]\n return sortedStyle\n }, { })\n}\n","export default function position(property, value) {\n if (property === 'position' && value === 'sticky') {\n return { position: [ '-webkit-sticky', 'sticky' ] }\n }\n}\n","// returns a style object with a single concated prefixed value string\nexport default (property, value, replacer = (prefix, value) => prefix + value) => ({\n [property]: [ '-webkit-', '-moz-', '' ].map(prefix => replacer(prefix, value))\n})\n","export default value => {\n if (Array.isArray(value)) value = value.join(',')\n\n return value.match(/-webkit-|-moz-|-ms-/) !== null\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nexport default function calc(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) {\n return joinPrefixedValue(property, value, (prefix, value) => value.replace(/calc\\(/g, prefix + 'calc('))\n }\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\n\nconst values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n}\n\nexport default function cursor(property, value) {\n if (property === 'cursor' && values[value]) {\n return joinPrefixedValue(property, value)\n }\n}\n","const values = { flex: true, 'inline-flex': true }\n\nexport default function flex(property, value) {\n if (property === 'display' && values[value]) {\n return {\n display: [ '-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value ]\n }\n }\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\n\nconst properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n}\nconst values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n}\n\nexport default function sizing(property, value) {\n if (properties[property] && values[value]) {\n return joinPrefixedValue(property, value)\n }\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/\n\nexport default function gradient(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values) !== null) {\n return joinPrefixedValue(property, value)\n }\n}\n","'use strict';\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\n\nfunction hyphenateStyleName(string) {\n return string\n .replace(uppercasePattern, '-$&')\n .toLowerCase()\n .replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n","import hyphenateStyleName from 'hyphenate-style-name'\nimport capitalizeString from '../../utils/capitalizeString'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\nimport prefixProps from '../prefixProps'\n\nconst properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true\n}\n\nexport default function transition(property, value) {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties[property]) {\n const outputValue = prefixValue(value)\n const webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(value => value.match(/-moz-|-ms-/) === null).join(',')\n\n // if the property is already prefixed\n if (property.indexOf('Webkit') > -1) {\n return { [ property]: webkitOutput }\n }\n\n return {\n ['Webkit' + capitalizeString(property)]: webkitOutput,\n [property]: outputValue\n }\n }\n}\n\nfunction prefixValue(value) {\n if (isPrefixedValue(value)) {\n return value\n }\n\n // only split multi values, not cubic beziers\n const multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n\n // iterate each single value and check for transitioned properties\n // that need to be prefixed as well\n multipleValues.forEach((val, index) => {\n multipleValues[index] = Object.keys(prefixProps).reduce((out, prefix) => {\n const dashCasePrefix = '-' + prefix.toLowerCase() + '-'\n\n Object.keys(prefixProps[prefix]).forEach(prop => {\n const dashCaseProperty = hyphenateStyleName(prop)\n\n if (val.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n // join all prefixes and create a new value\n out = val.replace(dashCaseProperty, dashCasePrefix + dashCaseProperty) + ',' + out\n }\n })\n return out\n }, val)\n })\n\n return multipleValues.join(',')\n}\n","const alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end'\n}\nconst alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msPreferredSize'\n}\n\nexport default function flexboxIE(property, value) {\n if (alternativeProps[property]) {\n return {\n [alternativeProps[property]]: alternativeValues[value] || value\n }\n }\n}\n","const alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple'\n}\n\nconst alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines'\n}\n\nexport default function flexboxOld(property, value) {\n if (property === 'flexDirection' && typeof value === 'string') {\n return {\n WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal',\n WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal'\n }\n }\n if (alternativeProps[property]) {\n return {\n [alternativeProps[property]]: alternativeValues[value] || value\n }\n }\n}\n","import prefixProperties from './prefixProps'\nimport capitalizeString from '../utils/capitalizeString'\nimport sortPrefixedStyle from '../utils/sortPrefixedStyle'\n\nimport position from './plugins/position'\nimport calc from './plugins/calc'\nimport cursor from './plugins/cursor'\nimport flex from './plugins/flex'\nimport sizing from './plugins/sizing'\nimport gradient from './plugins/gradient'\nimport transition from './plugins/transition'\n// special flexbox specifications\nimport flexboxIE from './plugins/flexboxIE'\nimport flexboxOld from './plugins/flexboxOld'\n\nconst plugins = [\n position,\n calc,\n cursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n]\n\n/**\n * Returns a prefixed version of the style object using all vendor prefixes\n * @param {Object} styles - Style object that gets prefixed properties added\n * @returns {Object} - Style object with prefixed properties and values\n */\nexport default function prefixAll(styles) {\n Object.keys(styles).forEach(property => {\n const value = styles[property]\n if (value instanceof Object && !Array.isArray(value)) {\n // recurse through nested style objects\n styles[property] = prefixAll(value)\n } else {\n Object.keys(prefixProperties).forEach(prefix => {\n const properties = prefixProperties[prefix]\n // add prefixes if needed\n if (properties[property]) {\n styles[prefix + capitalizeString(property)] = value\n }\n })\n }\n })\n\n Object.keys(styles).forEach(property => {\n [ ].concat(styles[property]).forEach((value, index) => {\n // resolve every special plugins\n plugins.forEach(plugin => assignStyles(styles, plugin(property, value)))\n })\n })\n\n return sortPrefixedStyle(styles)\n}\n\nfunction assignStyles(base, extend = { }) {\n Object.keys(extend).forEach(property => {\n const baseValue = base[property]\n if (Array.isArray(baseValue)) {\n [ ].concat(extend[property]).forEach(value => {\n const valueIndex = baseValue.indexOf(value)\n if (valueIndex > -1) {\n base[property].splice(valueIndex, 1)\n }\n base[property].push(value)\n })\n } else {\n base[property] = extend[property]\n }\n })\n}\n"],"names":["values","properties","alternativeValues","alternativeProps","prefixProperties"],"mappings":"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"} \ No newline at end of file diff --git a/dist/inline-style-prefix-all.min.js b/dist/inline-style-prefix-all.min.js deleted file mode 100644 index 7e14ad2..0000000 --- a/dist/inline-style-prefix-all.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.InlineStylePrefixAll=n()}(this,function(){"use strict";function e(e,n){return n={exports:{}},e(n,n.exports),n.exports}function n(e){return Object.keys(e).sort(function(e,n){return k(e)&&!k(n)?-1:!k(e)&&k(n)?1:0}).reduce(function(n,t){return n[t]=e[t],n},{})}function t(e,n){if("position"===e&&"sticky"===n)return{position:["-webkit-sticky","sticky"]}}function r(e,n){if("string"==typeof n&&!b(n)&&n.indexOf("calc(")>-1)return y(e,n,function(e,n){return n.replace(/calc\(/g,e+"calc(")})}function i(e,n){if("cursor"===e&&h[n])return y(e,n)}function o(e,n){if("display"===e&&S[n])return{display:["-webkit-box","-moz-box","-ms-"+n+"box","-webkit-"+n,n]}}function a(e,n){if(w[e]&&C[n])return y(e,n)}function l(e,n){if("string"==typeof n&&!b(n)&&null!==n.match(O))return y(e,n)}function s(e,n){if("string"==typeof n&&j[e]){var t,r=c(n),i=r.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function(e){return null===e.match(/-moz-|-ms-/)}).join(",");return e.indexOf("Webkit")>-1?d.defineProperty({},e,i):(t={},d.defineProperty(t,"Webkit"+x(e),i),d.defineProperty(t,e,r),t)}}function c(e){if(b(e))return e;var n=e.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return n.forEach(function(e,t){n[t]=Object.keys(g).reduce(function(n,t){var r="-"+t.toLowerCase()+"-";return Object.keys(g[t]).forEach(function(t){var i=P(t);e.indexOf(i)>-1&&"order"!==i&&(n=e.replace(i,r+i)+","+n)}),n},e)}),n.join(",")}function u(e,n){if(F[e])return d.defineProperty({},F[e],A[n]||n)}function f(e,n){return"flexDirection"===e&&"string"==typeof n?{WebkitBoxOrient:n.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:n.indexOf("reverse")>-1?"reverse":"normal"}:D[e]?d.defineProperty({},D[e],W[n]||n):void 0}function m(e){return Object.keys(e).forEach(function(n){var t=e[n];t instanceof Object&&!Array.isArray(t)?e[n]=m(t):Object.keys(g).forEach(function(r){var i=g[r];i[n]&&(e[r+x(n)]=t)})}),Object.keys(e).forEach(function(n){[].concat(e[n]).forEach(function(t,r){B.forEach(function(r){return p(e,r(n,t))})})}),n(e)}function p(e){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];Object.keys(n).forEach(function(t){var r=e[t];Array.isArray(r)?[].concat(n[t]).forEach(function(n){var i=r.indexOf(n);i>-1&&e[t].splice(i,1),e[t].push(n)}):e[t]=n[t]})}var d={};d.classCallCheck=function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")},d.createClass=function(){function e(e,n){for(var t=0;t -1) { - return joinPrefixedValue(property, value, function (prefix, value) { - return value.replace(/calc\(/g, prefix + 'calc('); - }); - } - } - - var values = { - 'zoom-in': true, - 'zoom-out': true, - grab: true, - grabbing: true - }; - - function cursor(property, value) { - if (property === 'cursor' && values[value]) { - return joinPrefixedValue(property, value); - } - } - - var values$1 = { flex: true, 'inline-flex': true }; - - function flex(property, value) { - if (property === 'display' && values$1[value]) { - return { - display: ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value] - }; - } - } - - var properties = { - maxHeight: true, - maxWidth: true, - width: true, - height: true, - columnWidth: true, - minWidth: true, - minHeight: true - }; - var values$2 = { - 'min-content': true, - 'max-content': true, - 'fill-available': true, - 'fit-content': true, - 'contain-floats': true - }; - - function sizing(property, value) { - if (properties[property] && values$2[value]) { - return joinPrefixedValue(property, value); - } - } - - var values$3 = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; - - function gradient(property, value) { - if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values$3) !== null) { - return joinPrefixedValue(property, value); - } - } - - var index = __commonjs(function (module) { - 'use strict'; - - var uppercasePattern = /[A-Z]/g; - var msPattern = /^ms-/; - - function hyphenateStyleName(string) { - return string.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-'); - } - - module.exports = hyphenateStyleName; - }); - - var hyphenateStyleName = (index && typeof index === 'object' && 'default' in index ? index['default'] : index); - - var properties$1 = { - transition: true, - transitionProperty: true, - WebkitTransition: true, - WebkitTransitionProperty: true - }; - - function transition(property, value) { - // also check for already prefixed transitions - if (typeof value === 'string' && properties$1[property]) { - var _ref2; - - var outputValue = prefixValue(value); - var webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (value) { - return value.match(/-moz-|-ms-/) === null; - }).join(','); - - // if the property is already prefixed - if (property.indexOf('Webkit') > -1) { - return babelHelpers.defineProperty({}, property, webkitOutput); - } - - return _ref2 = {}, babelHelpers.defineProperty(_ref2, 'Webkit' + capitalizeString(property), webkitOutput), babelHelpers.defineProperty(_ref2, property, outputValue), _ref2; - } - } - - function prefixValue(value) { - if (isPrefixedValue(value)) { - return value; - } - - // only split multi values, not cubic beziers - var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); - - // iterate each single value and check for transitioned properties - // that need to be prefixed as well - multipleValues.forEach(function (val, index) { - multipleValues[index] = Object.keys(prefixProps).reduce(function (out, prefix) { - var dashCasePrefix = '-' + prefix.toLowerCase() + '-'; - - Object.keys(prefixProps[prefix]).forEach(function (prop) { - var dashCaseProperty = hyphenateStyleName(prop); - - if (val.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { - // join all prefixes and create a new value - out = val.replace(dashCaseProperty, dashCasePrefix + dashCaseProperty) + ',' + out; - } - }); - return out; - }, val); - }); - - return multipleValues.join(','); - } - - var alternativeValues = { - 'space-around': 'distribute', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end' - }; - var alternativeProps = { - alignContent: 'msFlexLinePack', - alignSelf: 'msFlexItemAlign', - alignItems: 'msFlexAlign', - justifyContent: 'msFlexPack', - order: 'msFlexOrder', - flexGrow: 'msFlexPositive', - flexShrink: 'msFlexNegative', - flexBasis: 'msPreferredSize' - }; - - function flexboxIE(property, value) { - if (alternativeProps[property]) { - return babelHelpers.defineProperty({}, alternativeProps[property], alternativeValues[value] || value); - } - } - - var alternativeValues$1 = { - 'space-around': 'justify', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - 'wrap-reverse': 'multiple', - wrap: 'multiple' - }; - - var alternativeProps$1 = { - alignItems: 'WebkitBoxAlign', - justifyContent: 'WebkitBoxPack', - flexWrap: 'WebkitBoxLines' - }; - - function flexboxOld(property, value) { - if (property === 'flexDirection' && typeof value === 'string') { - return { - WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal', - WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal' - }; - } - if (alternativeProps$1[property]) { - return babelHelpers.defineProperty({}, alternativeProps$1[property], alternativeValues$1[value] || value); - } - } - - var plugins$1 = [position, calc, cursor, sizing, gradient, transition, flexboxIE, flexboxOld, flex]; - - /** - * Returns a prefixed version of the style object using all vendor prefixes - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - function prefixAll(styles) { - Object.keys(styles).forEach(function (property) { - var value = styles[property]; - if (value instanceof Object && !Array.isArray(value)) { - // recurse through nested style objects - styles[property] = prefixAll(value); - } else { - Object.keys(prefixProps).forEach(function (prefix) { - var properties = prefixProps[prefix]; - // add prefixes if needed - if (properties[property]) { - styles[prefix + capitalizeString(property)] = value; - } - }); - } - }); - - Object.keys(styles).forEach(function (property) { - [].concat(styles[property]).forEach(function (value, index) { - // resolve every special plugins - plugins$1.forEach(function (plugin) { - return assignStyles$1(styles, plugin(property, value)); - }); - }); - }); - - return sortPrefixedStyle(styles); - } - - function assignStyles$1(base) { - var extend = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - Object.keys(extend).forEach(function (property) { - var baseValue = base[property]; - if (Array.isArray(baseValue)) { - [].concat(extend[property]).forEach(function (value) { - var valueIndex = baseValue.indexOf(value); - if (valueIndex > -1) { - base[property].splice(valueIndex, 1); - } - base[property].push(value); - }); - } else { - base[property] = extend[property]; - } - }); - } - - var bowser = __commonjs(function (module) { - /*! - * Bowser - a browser detector - * https://github.com/ded/bowser - * MIT License | (c) Dustin Diaz 2015 - */ - - !function (name, definition) { - if (typeof module != 'undefined' && module.exports) module.exports = definition();else if (typeof define == 'function' && define.amd) define(definition);else this[name] = definition(); - }('bowser', function () { - /** - * See useragents.js for examples of navigator.userAgent - */ - - var t = true; - - function detect(ua) { - - function getFirstMatch(regex) { - var match = ua.match(regex); - return match && match.length > 1 && match[1] || ''; - } - - function getSecondMatch(regex) { - var match = ua.match(regex); - return match && match.length > 1 && match[2] || ''; - } - - var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase(), - likeAndroid = /like android/i.test(ua), - android = !likeAndroid && /android/i.test(ua), - nexusMobile = /nexus\s*[0-6]\s*/i.test(ua), - nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua), - chromeos = /CrOS/.test(ua), - silk = /silk/i.test(ua), - sailfish = /sailfish/i.test(ua), - tizen = /tizen/i.test(ua), - webos = /(web|hpw)os/i.test(ua), - windowsphone = /windows phone/i.test(ua), - windows = !windowsphone && /windows/i.test(ua), - mac = !iosdevice && !silk && /macintosh/i.test(ua), - linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua), - edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i), - versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i), - tablet = /tablet/i.test(ua), - mobile = !tablet && /[^-]mobi/i.test(ua), - xbox = /xbox/i.test(ua), - result; - - if (/opera|opr|opios/i.test(ua)) { - result = { - name: 'Opera', - opera: t, - version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i) - }; - } else if (/coast/i.test(ua)) { - result = { - name: 'Opera Coast', - coast: t, - version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i) - }; - } else if (/yabrowser/i.test(ua)) { - result = { - name: 'Yandex Browser', - yandexbrowser: t, - version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) - }; - } else if (/ucbrowser/i.test(ua)) { - result = { - name: 'UC Browser', - ucbrowser: t, - version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i) - }; - } else if (/mxios/i.test(ua)) { - result = { - name: 'Maxthon', - maxthon: t, - version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i) - }; - } else if (/epiphany/i.test(ua)) { - result = { - name: 'Epiphany', - epiphany: t, - version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i) - }; - } else if (/puffin/i.test(ua)) { - result = { - name: 'Puffin', - puffin: t, - version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i) - }; - } else if (/sleipnir/i.test(ua)) { - result = { - name: 'Sleipnir', - sleipnir: t, - version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i) - }; - } else if (/k-meleon/i.test(ua)) { - result = { - name: 'K-Meleon', - kMeleon: t, - version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i) - }; - } else if (windowsphone) { - result = { - name: 'Windows Phone', - windowsphone: t - }; - if (edgeVersion) { - result.msedge = t; - result.version = edgeVersion; - } else { - result.msie = t; - result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i); - } - } else if (/msie|trident/i.test(ua)) { - result = { - name: 'Internet Explorer', - msie: t, - version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) - }; - } else if (chromeos) { - result = { - name: 'Chrome', - chromeos: t, - chromeBook: t, - chrome: t, - version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) - }; - } else if (/chrome.+? edge/i.test(ua)) { - result = { - name: 'Microsoft Edge', - msedge: t, - version: edgeVersion - }; - } else if (/vivaldi/i.test(ua)) { - result = { - name: 'Vivaldi', - vivaldi: t, - version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier - }; - } else if (sailfish) { - result = { - name: 'Sailfish', - sailfish: t, - version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i) - }; - } else if (/seamonkey\//i.test(ua)) { - result = { - name: 'SeaMonkey', - seamonkey: t, - version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i) - }; - } else if (/firefox|iceweasel|fxios/i.test(ua)) { - result = { - name: 'Firefox', - firefox: t, - version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i) - }; - if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) { - result.firefoxos = t; - } - } else if (silk) { - result = { - name: 'Amazon Silk', - silk: t, - version: getFirstMatch(/silk\/(\d+(\.\d+)?)/i) - }; - } else if (/phantom/i.test(ua)) { - result = { - name: 'PhantomJS', - phantom: t, - version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i) - }; - } else if (/slimerjs/i.test(ua)) { - result = { - name: 'SlimerJS', - slimer: t, - version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i) - }; - } else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) { - result = { - name: 'BlackBerry', - blackberry: t, - version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) - }; - } else if (webos) { - result = { - name: 'WebOS', - webos: t, - version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i) - }; - /touchpad\//i.test(ua) && (result.touchpad = t); - } else if (/bada/i.test(ua)) { - result = { - name: 'Bada', - bada: t, - version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i) - }; - } else if (tizen) { - result = { - name: 'Tizen', - tizen: t, - version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier - }; - } else if (/qupzilla/i.test(ua)) { - result = { - name: 'QupZilla', - qupzilla: t, - version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier - }; - } else if (/chromium/i.test(ua)) { - result = { - name: 'Chromium', - chromium: t, - version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier - }; - } else if (/chrome|crios|crmo/i.test(ua)) { - result = { - name: 'Chrome', - chrome: t, - version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) - }; - } else if (android) { - result = { - name: 'Android', - version: versionIdentifier - }; - } else if (/safari|applewebkit/i.test(ua)) { - result = { - name: 'Safari', - safari: t - }; - if (versionIdentifier) { - result.version = versionIdentifier; - } - } else if (iosdevice) { - result = { - name: iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod' - }; - // WTF: version is not part of user agent in web apps - if (versionIdentifier) { - result.version = versionIdentifier; - } - } else if (/googlebot/i.test(ua)) { - result = { - name: 'Googlebot', - googlebot: t, - version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier - }; - } else { - result = { - name: getFirstMatch(/^(.*)\/(.*) /), - version: getSecondMatch(/^(.*)\/(.*) /) - }; - } - - // set webkit or gecko flag for browsers based on these engines - if (!result.msedge && /(apple)?webkit/i.test(ua)) { - if (/(apple)?webkit\/537\.36/i.test(ua)) { - result.name = result.name || "Blink"; - result.blink = t; - } else { - result.name = result.name || "Webkit"; - result.webkit = t; - } - if (!result.version && versionIdentifier) { - result.version = versionIdentifier; - } - } else if (!result.opera && /gecko\//i.test(ua)) { - result.name = result.name || "Gecko"; - result.gecko = t; - result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i); - } - - // set OS flags for platforms that have multiple browsers - if (!result.msedge && (android || result.silk)) { - result.android = t; - } else if (iosdevice) { - result[iosdevice] = t; - result.ios = t; - } else if (mac) { - result.mac = t; - } else if (xbox) { - result.xbox = t; - } else if (windows) { - result.windows = t; - } else if (linux) { - result.linux = t; - } - - // OS version extraction - var osVersion = ''; - if (result.windowsphone) { - osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); - } else if (iosdevice) { - osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i); - osVersion = osVersion.replace(/[_\s]/g, '.'); - } else if (android) { - osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i); - } else if (result.webos) { - osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i); - } else if (result.blackberry) { - osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i); - } else if (result.bada) { - osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i); - } else if (result.tizen) { - osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i); - } - if (osVersion) { - result.osversion = osVersion; - } - - // device type extraction - var osMajorVersion = osVersion.split('.')[0]; - if (tablet || nexusTablet || iosdevice == 'ipad' || android && (osMajorVersion == 3 || osMajorVersion >= 4 && !mobile) || result.silk) { - result.tablet = t; - } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || nexusMobile || result.blackberry || result.webos || result.bada) { - result.mobile = t; - } - - // Graded Browser Support - // http://developer.yahoo.com/yui/articles/gbs - if (result.msedge || result.msie && result.version >= 10 || result.yandexbrowser && result.version >= 15 || result.vivaldi && result.version >= 1.0 || result.chrome && result.version >= 20 || result.firefox && result.version >= 20.0 || result.safari && result.version >= 6 || result.opera && result.version >= 10.0 || result.ios && result.osversion && result.osversion.split(".")[0] >= 6 || result.blackberry && result.version >= 10.1 || result.chromium && result.version >= 20) { - result.a = t; - } else if (result.msie && result.version < 10 || result.chrome && result.version < 20 || result.firefox && result.version < 20.0 || result.safari && result.version < 6 || result.opera && result.version < 10.0 || result.ios && result.osversion && result.osversion.split(".")[0] < 6 || result.chromium && result.version < 20) { - result.c = t; - } else result.x = t; - - return result; - } - - var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : ''); - - bowser.test = function (browserList) { - for (var i = 0; i < browserList.length; ++i) { - var browserItem = browserList[i]; - if (typeof browserItem === 'string') { - if (browserItem in bowser) { - return true; - } - } - } - return false; - }; - - /** - * Get version precisions count - * - * @example - * getVersionPrecision("1.10.3") // 3 - * - * @param {string} version - * @return {number} - */ - function getVersionPrecision(version) { - return version.split(".").length; - } - - /** - * Array::map polyfill - * - * @param {Array} arr - * @param {Function} iterator - * @return {Array} - */ - function map(arr, iterator) { - var result = [], - i; - if (Array.prototype.map) { - return Array.prototype.map.call(arr, iterator); - } - for (i = 0; i < arr.length; i++) { - result = iterator(arr[i]); - } - return result; - } - - /** - * Calculate browser version weight - * - * @example - * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1 - * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1 - * compareVersions(['1.10.2.1', '1.10.2.1']); // 0 - * compareVersions(['1.10.2.1', '1.0800.2']); // -1 - * - * @param {Array} versions versions to compare - * @return {Number} comparison result - */ - function compareVersions(versions) { - // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2 - var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1])); - var chunks = map(versions, function (version) { - var delta = precision - getVersionPrecision(version); - - // 2) "9" -> "9.0" (for precision = 2) - version = version + new Array(delta + 1).join(".0"); - - // 3) "9.0" -> ["000000000"", "000000009"] - return map(version.split("."), function (chunk) { - return new Array(20 - chunk.length).join("0") + chunk; - }).reverse(); - }); - - // iterate in reverse order by reversed chunks array - while (--precision >= 0) { - // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true) - if (chunks[0][precision] > chunks[1][precision]) { - return 1; - } else if (chunks[0][precision] === chunks[1][precision]) { - if (precision === 0) { - // all version chunks are same - return 0; - } - } else { - return -1; - } - } - } - - /** - * Check if browser is unsupported - * - * @example - * bowser.isUnsupportedBrowser({ - * msie: "10", - * firefox: "23", - * chrome: "29", - * safari: "5.1", - * opera: "16", - * phantom: "534" - * }); - * - * @param {Object} minVersions map of minimal version to browser - * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map - * @param {String} [ua] user agent string - * @return {Boolean} - */ - function isUnsupportedBrowser(minVersions, strictMode, ua) { - var _bowser = bowser; - - // make strictMode param optional with ua param usage - if (typeof strictMode === 'string') { - ua = strictMode; - strictMode = void 0; - } - - if (strictMode === void 0) { - strictMode = false; - } - if (ua) { - _bowser = detect(ua); - } - - var version = "" + _bowser.version; - for (var browser in minVersions) { - if (minVersions.hasOwnProperty(browser)) { - if (_bowser[browser]) { - // browser version and min supported version. - if (compareVersions([version, minVersions[browser]]) < 0) { - return true; // unsupported - } - } - } - } - return strictMode; // not found - } - - /** - * Check if browser is supported - * - * @param {Object} minVersions map of minimal version to browser - * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map - * @return {Boolean} - */ - function check(minVersions, strictMode) { - return !isUnsupportedBrowser(minVersions, strictMode); - } - - bowser.isUnsupportedBrowser = isUnsupportedBrowser; - bowser.compareVersions = compareVersions; - bowser.check = check; - - /* - * Set our detect method to the main bowser object so we can - * reuse it to test other user agents. - * This is needed to implement future tests. - */ - bowser._detect = detect; - - return bowser; - }); - }); - - var bowser$1 = (bowser && typeof bowser === 'object' && 'default' in bowser ? bowser['default'] : bowser); - - var vendorPrefixes = { - Webkit: ['chrome', 'safari', 'ios', 'android', 'phantom', 'opera', 'webos', 'blackberry', 'bada', 'tizen', 'chromium', 'vivaldi'], - Moz: ['firefox', 'seamonkey', 'sailfish'], - ms: ['msie', 'msedge'] - }; - var browsers = { - chrome: [['chrome'], ['chromium']], - safari: [['safari']], - firefox: [['firefox']], - edge: [['msedge']], - opera: [['opera'], ['vivaldi']], - ios_saf: [['ios', 'mobile'], ['ios', 'tablet']], - ie: [['msie']], - op_mini: [['opera', 'mobile'], ['opera', 'tablet']], - and_uc: [['android', 'mobile'], ['android', 'tablet']], - android: [['android', 'mobile'], ['android', 'tablet']] - }; - - var browserByInfo = function browserByInfo(info) { - if (info.firefox) { - return 'firefox'; - } - var name = ''; - - Object.keys(browsers).forEach(function (browser) { - browsers[browser].forEach(function (condition) { - var match = 0; - condition.forEach(function (single) { - if (info[single]) { - match += 1; - } - }); - if (condition.length === match) { - name = browser; - } - }); - }); - - return name; - }; - - /** - * Uses bowser to get default browser information such as version and name - * Evaluates bowser info and adds vendorPrefix information - * @param {string} userAgent - userAgent that gets evaluated - */ - var getBrowserInformation = (function (userAgent) { - if (!userAgent) { - return false; - } - var info = bowser$1._detect(userAgent); - - Object.keys(vendorPrefixes).forEach(function (prefix) { - vendorPrefixes[prefix].forEach(function (browser) { - if (info[browser]) { - info.prefix = { - inline: prefix, - css: '-' + prefix.toLowerCase() + '-' - }; - } - }); - }); - - info.browser = browserByInfo(info); - - // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN - info.version = info.version ? parseFloat(info.version) : parseInt(parseFloat(info.osversion), 10); - info.osversion = parseFloat(info.osversion); - - // iOS forces all browsers to use Safari under the hood - // as the Safari version seems to match the iOS version - // we just explicitely use the osversion instead - // https://github.com/rofrischmann/inline-style-prefixer/issues/72 - if (info.browser === 'ios_saf' && info.version > info.osversion) { - info.version = info.osversion; - info.safari = true; - } - - // seperate native android chrome - // https://github.com/rofrischmann/inline-style-prefixer/issues/45 - if (info.browser === 'android' && info.chrome && info.version > 37) { - info.browser = 'and_chr'; - } - - // For android < 4.4 we want to check the osversion - // not the chrome version, see issue #26 - // https://github.com/rofrischmann/inline-style-prefixer/issues/26 - if (info.browser === 'android' && info.osversion < 5) { - info.version = info.osversion; - } - - return info; - }); - - var getPrefixedKeyframes = (function (_ref) { - var browser = _ref.browser; - var version = _ref.version; - var prefix = _ref.prefix; - - var prefixedKeyframes = 'keyframes'; - - if (browser === 'chrome' && version < 43 || (browser === 'safari' || browser === 'ios_saf') && version < 9 || browser === 'opera' && version < 30 || browser === 'android' && version <= 4.4 || browser === 'and_uc') { - prefixedKeyframes = prefix.css + prefixedKeyframes; - } - return prefixedKeyframes; - }); - - var prefixProps$1 = { "chrome": { "transform": 35, "transformOrigin": 35, "transformOriginX": 35, "transformOriginY": 35, "backfaceVisibility": 35, "perspective": 35, "perspectiveOrigin": 35, "transformStyle": 35, "transformOriginZ": 35, "animation": 42, "animationDelay": 42, "animationDirection": 42, "animationFillMode": 42, "animationDuration": 42, "animationIterationCount": 42, "animationName": 42, "animationPlayState": 42, "animationTimingFunction": 42, "appearance": 55, "userSelect": 55, "fontKerning": 32, "textEmphasisPosition": 55, "textEmphasis": 55, "textEmphasisStyle": 55, "textEmphasisColor": 55, "boxDecorationBreak": 55, "clipPath": 55, "maskImage": 55, "maskMode": 55, "maskRepeat": 55, "maskPosition": 55, "maskClip": 55, "maskOrigin": 55, "maskSize": 55, "maskComposite": 55, "mask": 55, "maskBorderSource": 55, "maskBorderMode": 55, "maskBorderSlice": 55, "maskBorderWidth": 55, "maskBorderOutset": 55, "maskBorderRepeat": 55, "maskBorder": 55, "maskType": 55, "textDecorationStyle": 55, "textDecorationSkip": 55, "textDecorationLine": 55, "textDecorationColor": 55, "filter": 52, "fontFeatureSettings": 47, "breakAfter": 49, "breakBefore": 49, "breakInside": 49, "columnCount": 49, "columnFill": 49, "columnGap": 49, "columnRule": 49, "columnRuleColor": 49, "columnRuleStyle": 49, "columnRuleWidth": 49, "columns": 49, "columnSpan": 49, "columnWidth": 49 }, "safari": { "flex": 8, "flexBasis": 8, "flexDirection": 8, "flexGrow": 8, "flexFlow": 8, "flexShrink": 8, "flexWrap": 8, "alignContent": 8, "alignItems": 8, "alignSelf": 8, "justifyContent": 8, "order": 8, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8, "transformOrigin": 8, "transformOriginX": 8, "transformOriginY": 8, "backfaceVisibility": 8, "perspective": 8, "perspectiveOrigin": 8, "transformStyle": 8, "transformOriginZ": 8, "animation": 8, "animationDelay": 8, "animationDirection": 8, "animationFillMode": 8, "animationDuration": 8, "animationIterationCount": 8, "animationName": 8, "animationPlayState": 8, "animationTimingFunction": 8, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 9, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "textEmphasisPosition": 7, "textEmphasis": 7, "textEmphasisStyle": 7, "textEmphasisColor": 7, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8, "breakAfter": 8, "breakInside": 8, "regionFragment": 10, "columnCount": 8, "columnFill": 8, "columnGap": 8, "columnRule": 8, "columnRuleColor": 8, "columnRuleStyle": 8, "columnRuleWidth": 8, "columns": 8, "columnSpan": 8, "columnWidth": 8 }, "firefox": { "appearance": 51, "userSelect": 51, "boxSizing": 28, "textAlignLast": 48, "textDecorationStyle": 35, "textDecorationSkip": 35, "textDecorationLine": 35, "textDecorationColor": 35, "tabSize": 51, "hyphens": 42, "fontFeatureSettings": 33, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "opera": { "flex": 16, "flexBasis": 16, "flexDirection": 16, "flexGrow": 16, "flexFlow": 16, "flexShrink": 16, "flexWrap": 16, "alignContent": 16, "alignItems": 16, "alignSelf": 16, "justifyContent": 16, "order": 16, "transform": 22, "transformOrigin": 22, "transformOriginX": 22, "transformOriginY": 22, "backfaceVisibility": 22, "perspective": 22, "perspectiveOrigin": 22, "transformStyle": 22, "transformOriginZ": 22, "animation": 29, "animationDelay": 29, "animationDirection": 29, "animationFillMode": 29, "animationDuration": 29, "animationIterationCount": 29, "animationName": 29, "animationPlayState": 29, "animationTimingFunction": 29, "appearance": 41, "userSelect": 41, "fontKerning": 19, "textEmphasisPosition": 41, "textEmphasis": 41, "textEmphasisStyle": 41, "textEmphasisColor": 41, "boxDecorationBreak": 41, "clipPath": 41, "maskImage": 41, "maskMode": 41, "maskRepeat": 41, "maskPosition": 41, "maskClip": 41, "maskOrigin": 41, "maskSize": 41, "maskComposite": 41, "mask": 41, "maskBorderSource": 41, "maskBorderMode": 41, "maskBorderSlice": 41, "maskBorderWidth": 41, "maskBorderOutset": 41, "maskBorderRepeat": 41, "maskBorder": 41, "maskType": 41, "textDecorationStyle": 41, "textDecorationSkip": 41, "textDecorationLine": 41, "textDecorationColor": 41, "filter": 39, "fontFeatureSettings": 34, "breakAfter": 36, "breakBefore": 36, "breakInside": 36, "columnCount": 36, "columnFill": 36, "columnGap": 36, "columnRule": 36, "columnRuleColor": 36, "columnRuleStyle": 36, "columnRuleWidth": 36, "columns": 36, "columnSpan": 36, "columnWidth": 36 }, "ie": { "flex": 10, "flexDirection": 10, "flexFlow": 10, "flexWrap": 10, "transform": 9, "transformOrigin": 9, "transformOriginX": 9, "transformOriginY": 9, "userSelect": 11, "wrapFlow": 11, "wrapThrough": 11, "wrapMargin": 11, "scrollSnapType": 11, "scrollSnapPointsX": 11, "scrollSnapPointsY": 11, "scrollSnapDestination": 11, "scrollSnapCoordinate": 11, "touchAction": 10, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "gridTemplateColumns": 11, "gridTemplateRows": 11, "gridTemplateAreas": 11, "gridTemplate": 11, "gridAutoColumns": 11, "gridAutoRows": 11, "gridAutoFlow": 11, "grid": 11, "gridRowStart": 11, "gridColumnStart": 11, "gridRowEnd": 11, "gridRow": 11, "gridColumn": 11, "gridColumnEnd": 11, "gridColumnGap": 11, "gridRowGap": 11, "gridArea": 11, "gridGap": 11, "textSizeAdjust": 11 }, "edge": { "userSelect": 14, "wrapFlow": 14, "wrapThrough": 14, "wrapMargin": 14, "scrollSnapType": 14, "scrollSnapPointsX": 14, "scrollSnapPointsY": 14, "scrollSnapDestination": 14, "scrollSnapCoordinate": 14, "hyphens": 14, "flowInto": 14, "flowFrom": 14, "breakBefore": 14, "breakAfter": 14, "breakInside": 14, "regionFragment": 14, "gridTemplateColumns": 14, "gridTemplateRows": 14, "gridTemplateAreas": 14, "gridTemplate": 14, "gridAutoColumns": 14, "gridAutoRows": 14, "gridAutoFlow": 14, "grid": 14, "gridRowStart": 14, "gridColumnStart": 14, "gridRowEnd": 14, "gridRow": 14, "gridColumn": 14, "gridColumnEnd": 14, "gridColumnGap": 14, "gridRowGap": 14, "gridArea": 14, "gridGap": 14 }, "ios_saf": { "flex": 8.1, "flexBasis": 8.1, "flexDirection": 8.1, "flexGrow": 8.1, "flexFlow": 8.1, "flexShrink": 8.1, "flexWrap": 8.1, "alignContent": 8.1, "alignItems": 8.1, "alignSelf": 8.1, "justifyContent": 8.1, "order": 8.1, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8.1, "transformOrigin": 8.1, "transformOriginX": 8.1, "transformOriginY": 8.1, "backfaceVisibility": 8.1, "perspective": 8.1, "perspectiveOrigin": 8.1, "transformStyle": 8.1, "transformOriginZ": 8.1, "animation": 8.1, "animationDelay": 8.1, "animationDirection": 8.1, "animationFillMode": 8.1, "animationDuration": 8.1, "animationIterationCount": 8.1, "animationName": 8.1, "animationPlayState": 8.1, "animationTimingFunction": 8.1, "appearance": 9.3, "userSelect": 9.3, "backdropFilter": 9.3, "fontKerning": 9.3, "scrollSnapType": 9.3, "scrollSnapPointsX": 9.3, "scrollSnapPointsY": 9.3, "scrollSnapDestination": 9.3, "scrollSnapCoordinate": 9.3, "boxDecorationBreak": 9.3, "clipPath": 9.3, "maskImage": 9.3, "maskMode": 9.3, "maskRepeat": 9.3, "maskPosition": 9.3, "maskClip": 9.3, "maskOrigin": 9.3, "maskSize": 9.3, "maskComposite": 9.3, "mask": 9.3, "maskBorderSource": 9.3, "maskBorderMode": 9.3, "maskBorderSlice": 9.3, "maskBorderWidth": 9.3, "maskBorderOutset": 9.3, "maskBorderRepeat": 9.3, "maskBorder": 9.3, "maskType": 9.3, "textSizeAdjust": 9.3, "textDecorationStyle": 9.3, "textDecorationSkip": 9.3, "textDecorationLine": 9.3, "textDecorationColor": 9.3, "shapeImageThreshold": 9.3, "shapeImageMargin": 9.3, "shapeImageOutside": 9.3, "filter": 9, "hyphens": 9.3, "flowInto": 9.3, "flowFrom": 9.3, "breakBefore": 8.1, "breakAfter": 8.1, "breakInside": 8.1, "regionFragment": 9.3, "columnCount": 8.1, "columnFill": 8.1, "columnGap": 8.1, "columnRule": 8.1, "columnRuleColor": 8.1, "columnRuleStyle": 8.1, "columnRuleWidth": 8.1, "columns": 8.1, "columnSpan": 8.1, "columnWidth": 8.1 }, "android": { "flex": 4.2, "flexBasis": 4.2, "flexDirection": 4.2, "flexGrow": 4.2, "flexFlow": 4.2, "flexShrink": 4.2, "flexWrap": 4.2, "alignContent": 4.2, "alignItems": 4.2, "alignSelf": 4.2, "justifyContent": 4.2, "order": 4.2, "transition": 4.2, "transitionDelay": 4.2, "transitionDuration": 4.2, "transitionProperty": 4.2, "transitionTimingFunction": 4.2, "transform": 4.4, "transformOrigin": 4.4, "transformOriginX": 4.4, "transformOriginY": 4.4, "backfaceVisibility": 4.4, "perspective": 4.4, "perspectiveOrigin": 4.4, "transformStyle": 4.4, "transformOriginZ": 4.4, "animation": 4.4, "animationDelay": 4.4, "animationDirection": 4.4, "animationFillMode": 4.4, "animationDuration": 4.4, "animationIterationCount": 4.4, "animationName": 4.4, "animationPlayState": 4.4, "animationTimingFunction": 4.4, "appearance": 51, "userSelect": 51, "fontKerning": 4.4, "textEmphasisPosition": 51, "textEmphasis": 51, "textEmphasisStyle": 51, "textEmphasisColor": 51, "boxDecorationBreak": 51, "clipPath": 51, "maskImage": 51, "maskMode": 51, "maskRepeat": 51, "maskPosition": 51, "maskClip": 51, "maskOrigin": 51, "maskSize": 51, "maskComposite": 51, "mask": 51, "maskBorderSource": 51, "maskBorderMode": 51, "maskBorderSlice": 51, "maskBorderWidth": 51, "maskBorderOutset": 51, "maskBorderRepeat": 51, "maskBorder": 51, "maskType": 51, "filter": 51, "fontFeatureSettings": 4.4, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "and_chr": { "appearance": 51, "userSelect": 51, "textEmphasisPosition": 51, "textEmphasis": 51, "textEmphasisStyle": 51, "textEmphasisColor": 51, "boxDecorationBreak": 51, "clipPath": 51, "maskImage": 51, "maskMode": 51, "maskRepeat": 51, "maskPosition": 51, "maskClip": 51, "maskOrigin": 51, "maskSize": 51, "maskComposite": 51, "mask": 51, "maskBorderSource": 51, "maskBorderMode": 51, "maskBorderSlice": 51, "maskBorderWidth": 51, "maskBorderOutset": 51, "maskBorderRepeat": 51, "maskBorder": 51, "maskType": 51, "textDecorationStyle": 51, "textDecorationSkip": 51, "textDecorationLine": 51, "textDecorationColor": 51, "filter": 51 }, "and_uc": { "flex": 9.9, "flexBasis": 9.9, "flexDirection": 9.9, "flexGrow": 9.9, "flexFlow": 9.9, "flexShrink": 9.9, "flexWrap": 9.9, "alignContent": 9.9, "alignItems": 9.9, "alignSelf": 9.9, "justifyContent": 9.9, "order": 9.9, "transition": 9.9, "transitionDelay": 9.9, "transitionDuration": 9.9, "transitionProperty": 9.9, "transitionTimingFunction": 9.9, "transform": 9.9, "transformOrigin": 9.9, "transformOriginX": 9.9, "transformOriginY": 9.9, "backfaceVisibility": 9.9, "perspective": 9.9, "perspectiveOrigin": 9.9, "transformStyle": 9.9, "transformOriginZ": 9.9, "animation": 9.9, "animationDelay": 9.9, "animationDirection": 9.9, "animationFillMode": 9.9, "animationDuration": 9.9, "animationIterationCount": 9.9, "animationName": 9.9, "animationPlayState": 9.9, "animationTimingFunction": 9.9, "appearance": 9.9, "userSelect": 9.9, "fontKerning": 9.9, "textEmphasisPosition": 9.9, "textEmphasis": 9.9, "textEmphasisStyle": 9.9, "textEmphasisColor": 9.9, "maskImage": 9.9, "maskMode": 9.9, "maskRepeat": 9.9, "maskPosition": 9.9, "maskClip": 9.9, "maskOrigin": 9.9, "maskSize": 9.9, "maskComposite": 9.9, "mask": 9.9, "maskBorderSource": 9.9, "maskBorderMode": 9.9, "maskBorderSlice": 9.9, "maskBorderWidth": 9.9, "maskBorderOutset": 9.9, "maskBorderRepeat": 9.9, "maskBorder": 9.9, "maskType": 9.9, "textSizeAdjust": 9.9, "filter": 9.9, "hyphens": 9.9, "flowInto": 9.9, "flowFrom": 9.9, "breakBefore": 9.9, "breakAfter": 9.9, "breakInside": 9.9, "regionFragment": 9.9, "fontFeatureSettings": 9.9, "columnCount": 9.9, "columnFill": 9.9, "columnGap": 9.9, "columnRule": 9.9, "columnRuleColor": 9.9, "columnRuleStyle": 9.9, "columnRuleWidth": 9.9, "columns": 9.9, "columnSpan": 9.9, "columnWidth": 9.9 }, "op_mini": {} }; - - var getPrefixedValue = (function (prefixedValue, value, keepUnprefixed) { - return keepUnprefixed ? [prefixedValue, value] : prefixedValue; - }); - - function position$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var browser = _ref.browserInfo.browser; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (property === 'position' && value === 'sticky' && (browser === 'safari' || browser === 'ios_saf')) { - return babelHelpers.defineProperty({}, property, getPrefixedValue(css + value, value, keepUnprefixed)); - } - } - - function calc$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (typeof value === 'string' && value.indexOf('calc(') > -1 && (browser === 'firefox' && version < 15 || browser === 'chrome' && version < 25 || browser === 'safari' && version < 6.1 || browser === 'ios_saf' && version < 7)) { - return babelHelpers.defineProperty({}, property, getPrefixedValue(value.replace(/calc\(/g, css + 'calc('), value, keepUnprefixed)); - } - } - - var values$4 = { 'zoom-in': true, 'zoom-out': true }; - - function zoomCursor(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (property === 'cursor' && values$4[value] && (browser === 'firefox' && version < 24 || browser === 'chrome' && version < 37 || browser === 'safari' && version < 9 || browser === 'opera' && version < 24)) { - return { - cursor: getPrefixedValue(css + value, value, keepUnprefixed) - }; - } - } - - var values$5 = { grab: true, grabbing: true }; - - function grabCursor(_ref) { - var property = _ref.property; - var value = _ref.value; - var browser = _ref.browserInfo.browser; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - // adds prefixes for firefox, chrome, safari, and opera regardless of version until a reliable brwoser support info can be found (see: https://github.com/rofrischmann/inline-style-prefixer/issues/79) - if (property === 'cursor' && values$5[value] && (browser === 'firefox' || browser === 'chrome' || browser === 'safari' || browser === 'opera')) { - return { - cursor: getPrefixedValue(css + value, value, keepUnprefixed) - }; - } - } - - var values$6 = { flex: true, 'inline-flex': true }; - - function flex$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (property === 'display' && values$6[value] && (browser === 'chrome' && version < 29 && version > 20 || (browser === 'safari' || browser === 'ios_saf') && version < 9 && version > 6 || browser === 'opera' && (version == 15 || version == 16))) { - return { - display: getPrefixedValue(css + value, value, keepUnprefixed) - }; - } - } - - var properties$2 = { - maxHeight: true, - maxWidth: true, - width: true, - height: true, - columnWidth: true, - minWidth: true, - minHeight: true - }; - var values$7 = { - 'min-content': true, - 'max-content': true, - 'fill-available': true, - 'fit-content': true, - 'contain-floats': true - }; - - function sizing$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - // This might change in the future - // Keep an eye on it - if (properties$2[property] && values$7[value]) { - return babelHelpers.defineProperty({}, property, getPrefixedValue(css + value, value, keepUnprefixed)); - } - } - - var values$8 = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; - - function gradient$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if (typeof value === 'string' && value.match(values$8) !== null && (browser === 'firefox' && version < 16 || browser === 'chrome' && version < 26 || (browser === 'safari' || browser === 'ios_saf') && version < 7 || (browser === 'opera' || browser === 'op_mini') && version < 12.1 || browser === 'android' && version < 4.4 || browser === 'and_uc')) { - return babelHelpers.defineProperty({}, property, getPrefixedValue(css + value, value, keepUnprefixed)); - } - } - - var unprefixProperty = (function (property) { - var unprefixed = property.replace(/^(ms|Webkit|Moz|O)/, ''); - return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1); - }); - - var properties$3 = { transition: true, transitionProperty: true }; - - function transition$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var css = _ref.prefix.css; - var requiresPrefix = _ref.requiresPrefix; - var keepUnprefixed = _ref.keepUnprefixed; - - // also check for already prefixed transitions - var unprefixedProperty = unprefixProperty(property); - - if (typeof value === 'string' && properties$3[unprefixedProperty]) { - var _ret = function () { - // TODO: memoize this array - var requiresPrefixDashCased = Object.keys(requiresPrefix).map(function (prop) { - return hyphenateStyleName(prop); - }); - - // only split multi values, not cubic beziers - var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); - - requiresPrefixDashCased.forEach(function (prop) { - multipleValues.forEach(function (val, index) { - if (val.indexOf(prop) > -1 && prop !== 'order') { - multipleValues[index] = val.replace(prop, css + prop) + (keepUnprefixed ? ',' + val : ''); - } - }); - }); - - return { - v: babelHelpers.defineProperty({}, property, multipleValues.join(',')) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; - } - } - - var alternativeValues$2 = { - 'space-around': 'distribute', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - flex: 'flexbox', - 'inline-flex': 'inline-flexbox' - }; - var alternativeProps$2 = { - alignContent: 'msFlexLinePack', - alignSelf: 'msFlexItemAlign', - alignItems: 'msFlexAlign', - justifyContent: 'msFlexPack', - order: 'msFlexOrder', - flexGrow: 'msFlexPositive', - flexShrink: 'msFlexNegative', - flexBasis: 'msPreferredSize' - }; - - function flexboxIE$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var styles = _ref.styles; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if ((alternativeProps$2[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browser === 'ie_mob' || browser === 'ie') && version == 10) { - if (!keepUnprefixed && !Array.isArray(styles[property])) { - delete styles[property]; - } - if (property === 'display' && alternativeValues$2[value]) { - return { - display: getPrefixedValue(css + alternativeValues$2[value], value, keepUnprefixed) - }; - } - if (alternativeProps$2[property]) { - return babelHelpers.defineProperty({}, alternativeProps$2[property], alternativeValues$2[value] || value); - } - } - } - - var alternativeValues$3 = { - 'space-around': 'justify', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - 'wrap-reverse': 'multiple', - wrap: 'multiple', - flex: 'box', - 'inline-flex': 'inline-box' - }; - - var alternativeProps$3 = { - alignItems: 'WebkitBoxAlign', - justifyContent: 'WebkitBoxPack', - flexWrap: 'WebkitBoxLines' - }; - - var otherProps = ['alignContent', 'alignSelf', 'order', 'flexGrow', 'flexShrink', 'flexBasis', 'flexDirection']; - var properties$4 = Object.keys(alternativeProps$3).concat(otherProps); - - function flexboxOld$1(_ref) { - var property = _ref.property; - var value = _ref.value; - var styles = _ref.styles; - var _ref$browserInfo = _ref.browserInfo; - var browser = _ref$browserInfo.browser; - var version = _ref$browserInfo.version; - var css = _ref.prefix.css; - var keepUnprefixed = _ref.keepUnprefixed; - - if ((properties$4.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browser === 'firefox' && version < 22 || browser === 'chrome' && version < 21 || (browser === 'safari' || browser === 'ios_saf') && version <= 6.1 || browser === 'android' && version < 4.4 || browser === 'and_uc')) { - if (!keepUnprefixed && !Array.isArray(styles[property])) { - delete styles[property]; - } - if (property === 'flexDirection' && typeof value === 'string') { - return { - WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal', - WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal' - }; - } - if (property === 'display' && alternativeValues$3[value]) { - return { - display: getPrefixedValue(css + alternativeValues$3[value], value, keepUnprefixed) - }; - } - if (alternativeProps$3[property]) { - return babelHelpers.defineProperty({}, alternativeProps$3[property], alternativeValues$3[value] || value); - } - } - } - - var plugins = [position$1, calc$1, zoomCursor, grabCursor, sizing$1, gradient$1, transition$1, flexboxIE$1, flexboxOld$1, - // this must be run AFTER the flexbox specs - flex$1]; - - var Prefixer = function () { - /** - * Instantiante a new prefixer - * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com - * @param {string} keepUnprefixed - keeps unprefixed properties and values - */ - - function Prefixer() { - var _this = this; - - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - babelHelpers.classCallCheck(this, Prefixer); - - var defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined; - - this._userAgent = options.userAgent || defaultUserAgent; - this._keepUnprefixed = options.keepUnprefixed || false; - - this._browserInfo = getBrowserInformation(this._userAgent); - - // Checks if the userAgent was resolved correctly - if (this._browserInfo && this._browserInfo.prefix) { - // set additional prefix information - this.cssPrefix = this._browserInfo.prefix.css; - this.jsPrefix = this._browserInfo.prefix.inline; - this.prefixedKeyframes = getPrefixedKeyframes(this._browserInfo); - } else { - this._usePrefixAllFallback = true; - return false; - } - - var data = this._browserInfo.browser && prefixProps$1[this._browserInfo.browser]; - if (data) { - this._requiresPrefix = Object.keys(data).filter(function (key) { - return data[key] >= _this._browserInfo.version; - }).reduce(function (result, name) { - result[name] = true; - return result; - }, {}); - this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0; - } else { - this._usePrefixAllFallback = true; - } - } - - /** - * Returns a prefixed version of the style object - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - - - babelHelpers.createClass(Prefixer, [{ - key: 'prefix', - value: function prefix(styles) { - var _this2 = this; - - // use prefixAll as fallback if userAgent can not be resolved - if (this._usePrefixAllFallback) { - return prefixAll(styles); - } - - // only add prefixes if needed - if (!this._hasPropsRequiringPrefix) { - return styles; - } - - Object.keys(styles).forEach(function (property) { - var value = styles[property]; - if (value instanceof Object && !Array.isArray(value)) { - // recurse through nested style objects - styles[property] = _this2.prefix(value); - } else { - // add prefixes if needed - if (_this2._requiresPrefix[property]) { - styles[_this2.jsPrefix + capitalizeString(property)] = value; - if (!_this2._keepUnprefixed) { - delete styles[property]; - } - } - } - }); - - Object.keys(styles).forEach(function (property) { - [].concat(styles[property]).forEach(function (value) { - // resolve plugins - plugins.forEach(function (plugin) { - // generates a new plugin interface with current data - assignStyles(styles, plugin({ - property: property, - value: value, - styles: styles, - browserInfo: _this2._browserInfo, - prefix: { - js: _this2.jsPrefix, - css: _this2.cssPrefix, - keyframes: _this2.prefixedKeyframes - }, - keepUnprefixed: _this2._keepUnprefixed, - requiresPrefix: _this2._requiresPrefix - }), value, _this2._keepUnprefixed); - }); - }); - }); - - return sortPrefixedStyle(styles); - } - - /** - * Returns a prefixed version of the style object using all vendor prefixes - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - - }], [{ - key: 'prefixAll', - value: function prefixAll$$(styles) { - return prefixAll(styles); - } - }]); - return Prefixer; - }(); - - function assignStyles(base) { - var extend = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var value = arguments[2]; - var keepUnprefixed = arguments[3]; - - Object.keys(extend).forEach(function (property) { - var baseValue = base[property]; - if (Array.isArray(baseValue)) { - [].concat(extend[property]).forEach(function (val) { - if (base[property].indexOf(val) === -1) { - base[property].splice(baseValue.indexOf(value), keepUnprefixed ? 0 : 1, val); - } - }); - } else { - base[property] = extend[property]; - } - }); - } - - return Prefixer; - -})); -//# sourceMappingURL=inline-style-prefixer.js.map \ No newline at end of file diff --git a/dist/inline-style-prefixer.js.map b/dist/inline-style-prefixer.js.map deleted file mode 100644 index af511aa..0000000 --- a/dist/inline-style-prefixer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inline-style-prefixer.js","sources":["../modules/static/prefixProps.js","../modules/utils/capitalizeString.js","../modules/utils/isPrefixedProperty.js","../modules/utils/sortPrefixedStyle.js","../modules/static/plugins/position.js","../modules/utils/joinPrefixedValue.js","../modules/utils/isPrefixedValue.js","../modules/static/plugins/calc.js","../modules/static/plugins/cursor.js","../modules/static/plugins/flex.js","../modules/static/plugins/sizing.js","../modules/static/plugins/gradient.js","../node_modules/hyphenate-style-name/index.js","../modules/static/plugins/transition.js","../modules/static/plugins/flexboxIE.js","../modules/static/plugins/flexboxOld.js","../modules/static/prefixAll.js","../node_modules/bowser/src/bowser.js","../modules/utils/getBrowserInformation.js","../modules/utils/getPrefixedKeyframes.js","../modules/prefixProps.js","../modules/utils/getPrefixedValue.js","../modules/plugins/position.js","../modules/plugins/calc.js","../modules/plugins/zoomCursor.js","../modules/plugins/grabCursor.js","../modules/plugins/flex.js","../modules/plugins/sizing.js","../modules/plugins/gradient.js","../modules/utils/unprefixProperty.js","../modules/plugins/transition.js","../modules/plugins/flexboxIE.js","../modules/plugins/flexboxOld.js","../modules/Prefixer.js"],"sourcesContent":["export default {\"Webkit\":{\"transform\":true,\"transformOrigin\":true,\"transformOriginX\":true,\"transformOriginY\":true,\"backfaceVisibility\":true,\"perspective\":true,\"perspectiveOrigin\":true,\"transformStyle\":true,\"transformOriginZ\":true,\"animation\":true,\"animationDelay\":true,\"animationDirection\":true,\"animationFillMode\":true,\"animationDuration\":true,\"animationIterationCount\":true,\"animationName\":true,\"animationPlayState\":true,\"animationTimingFunction\":true,\"appearance\":true,\"userSelect\":true,\"fontKerning\":true,\"textEmphasisPosition\":true,\"textEmphasis\":true,\"textEmphasisStyle\":true,\"textEmphasisColor\":true,\"boxDecorationBreak\":true,\"clipPath\":true,\"maskImage\":true,\"maskMode\":true,\"maskRepeat\":true,\"maskPosition\":true,\"maskClip\":true,\"maskOrigin\":true,\"maskSize\":true,\"maskComposite\":true,\"mask\":true,\"maskBorderSource\":true,\"maskBorderMode\":true,\"maskBorderSlice\":true,\"maskBorderWidth\":true,\"maskBorderOutset\":true,\"maskBorderRepeat\":true,\"maskBorder\":true,\"maskType\":true,\"textDecorationStyle\":true,\"textDecorationSkip\":true,\"textDecorationLine\":true,\"textDecorationColor\":true,\"filter\":true,\"fontFeatureSettings\":true,\"breakAfter\":true,\"breakBefore\":true,\"breakInside\":true,\"columnCount\":true,\"columnFill\":true,\"columnGap\":true,\"columnRule\":true,\"columnRuleColor\":true,\"columnRuleStyle\":true,\"columnRuleWidth\":true,\"columns\":true,\"columnSpan\":true,\"columnWidth\":true,\"flex\":true,\"flexBasis\":true,\"flexDirection\":true,\"flexGrow\":true,\"flexFlow\":true,\"flexShrink\":true,\"flexWrap\":true,\"alignContent\":true,\"alignItems\":true,\"alignSelf\":true,\"justifyContent\":true,\"order\":true,\"transition\":true,\"transitionDelay\":true,\"transitionDuration\":true,\"transitionProperty\":true,\"transitionTimingFunction\":true,\"backdropFilter\":true,\"scrollSnapType\":true,\"scrollSnapPointsX\":true,\"scrollSnapPointsY\":true,\"scrollSnapDestination\":true,\"scrollSnapCoordinate\":true,\"shapeImageThreshold\":true,\"shapeImageMargin\":true,\"shapeImageOutside\":true,\"hyphens\":true,\"flowInto\":true,\"flowFrom\":true,\"regionFragment\":true,\"textSizeAdjust\":true},\"Moz\":{\"appearance\":true,\"userSelect\":true,\"boxSizing\":true,\"textAlignLast\":true,\"textDecorationStyle\":true,\"textDecorationSkip\":true,\"textDecorationLine\":true,\"textDecorationColor\":true,\"tabSize\":true,\"hyphens\":true,\"fontFeatureSettings\":true,\"breakAfter\":true,\"breakBefore\":true,\"breakInside\":true,\"columnCount\":true,\"columnFill\":true,\"columnGap\":true,\"columnRule\":true,\"columnRuleColor\":true,\"columnRuleStyle\":true,\"columnRuleWidth\":true,\"columns\":true,\"columnSpan\":true,\"columnWidth\":true},\"ms\":{\"flex\":true,\"flexBasis\":false,\"flexDirection\":true,\"flexGrow\":false,\"flexFlow\":true,\"flexShrink\":false,\"flexWrap\":true,\"alignContent\":false,\"alignItems\":false,\"alignSelf\":false,\"justifyContent\":false,\"order\":false,\"transform\":true,\"transformOrigin\":true,\"transformOriginX\":true,\"transformOriginY\":true,\"userSelect\":true,\"wrapFlow\":true,\"wrapThrough\":true,\"wrapMargin\":true,\"scrollSnapType\":true,\"scrollSnapPointsX\":true,\"scrollSnapPointsY\":true,\"scrollSnapDestination\":true,\"scrollSnapCoordinate\":true,\"touchAction\":true,\"hyphens\":true,\"flowInto\":true,\"flowFrom\":true,\"breakBefore\":true,\"breakAfter\":true,\"breakInside\":true,\"regionFragment\":true,\"gridTemplateColumns\":true,\"gridTemplateRows\":true,\"gridTemplateAreas\":true,\"gridTemplate\":true,\"gridAutoColumns\":true,\"gridAutoRows\":true,\"gridAutoFlow\":true,\"grid\":true,\"gridRowStart\":true,\"gridColumnStart\":true,\"gridRowEnd\":true,\"gridRow\":true,\"gridColumn\":true,\"gridColumnEnd\":true,\"gridColumnGap\":true,\"gridRowGap\":true,\"gridArea\":true,\"gridGap\":true,\"textSizeAdjust\":true}}","// helper to capitalize strings\nexport default str => str.charAt(0).toUpperCase() + str.slice(1)\n","export default property => property.match(/^(Webkit|Moz|O|ms)/) !== null\n","import isPrefixedProperty from './isPrefixedProperty'\n\nexport default function sortPrefixedStyle(style) {\n return Object.keys(style).sort((left, right) => {\n if (isPrefixedProperty(left) && !isPrefixedProperty(right)) {\n return -1\n } else if (!isPrefixedProperty(left) && isPrefixedProperty(right)) {\n return 1\n }\n return 0\n }).reduce((sortedStyle, prop) => {\n sortedStyle[prop] = style[prop]\n return sortedStyle\n }, { })\n}\n","export default function position(property, value) {\n if (property === 'position' && value === 'sticky') {\n return { position: [ '-webkit-sticky', 'sticky' ] }\n }\n}\n","// returns a style object with a single concated prefixed value string\nexport default (property, value, replacer = (prefix, value) => prefix + value) => ({\n [property]: [ '-webkit-', '-moz-', '' ].map(prefix => replacer(prefix, value))\n})\n","export default value => {\n if (Array.isArray(value)) value = value.join(',')\n\n return value.match(/-webkit-|-moz-|-ms-/) !== null\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nexport default function calc(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) {\n return joinPrefixedValue(property, value, (prefix, value) => value.replace(/calc\\(/g, prefix + 'calc('))\n }\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\n\nconst values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n}\n\nexport default function cursor(property, value) {\n if (property === 'cursor' && values[value]) {\n return joinPrefixedValue(property, value)\n }\n}\n","const values = { flex: true, 'inline-flex': true }\n\nexport default function flex(property, value) {\n if (property === 'display' && values[value]) {\n return {\n display: [ '-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value ]\n }\n }\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\n\nconst properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n}\nconst values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n}\n\nexport default function sizing(property, value) {\n if (properties[property] && values[value]) {\n return joinPrefixedValue(property, value)\n }\n}\n","import joinPrefixedValue from '../../utils/joinPrefixedValue'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/\n\nexport default function gradient(property, value) {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values) !== null) {\n return joinPrefixedValue(property, value)\n }\n}\n","'use strict';\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\n\nfunction hyphenateStyleName(string) {\n return string\n .replace(uppercasePattern, '-$&')\n .toLowerCase()\n .replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n","import hyphenateStyleName from 'hyphenate-style-name'\nimport capitalizeString from '../../utils/capitalizeString'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\nimport prefixProps from '../prefixProps'\n\nconst properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true\n}\n\nexport default function transition(property, value) {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties[property]) {\n const outputValue = prefixValue(value)\n const webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(value => value.match(/-moz-|-ms-/) === null).join(',')\n\n // if the property is already prefixed\n if (property.indexOf('Webkit') > -1) {\n return { [ property]: webkitOutput }\n }\n\n return {\n ['Webkit' + capitalizeString(property)]: webkitOutput,\n [property]: outputValue\n }\n }\n}\n\nfunction prefixValue(value) {\n if (isPrefixedValue(value)) {\n return value\n }\n\n // only split multi values, not cubic beziers\n const multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n\n // iterate each single value and check for transitioned properties\n // that need to be prefixed as well\n multipleValues.forEach((val, index) => {\n multipleValues[index] = Object.keys(prefixProps).reduce((out, prefix) => {\n const dashCasePrefix = '-' + prefix.toLowerCase() + '-'\n\n Object.keys(prefixProps[prefix]).forEach(prop => {\n const dashCaseProperty = hyphenateStyleName(prop)\n\n if (val.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n // join all prefixes and create a new value\n out = val.replace(dashCaseProperty, dashCasePrefix + dashCaseProperty) + ',' + out\n }\n })\n return out\n }, val)\n })\n\n return multipleValues.join(',')\n}\n","const alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end'\n}\nconst alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msPreferredSize'\n}\n\nexport default function flexboxIE(property, value) {\n if (alternativeProps[property]) {\n return {\n [alternativeProps[property]]: alternativeValues[value] || value\n }\n }\n}\n","const alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple'\n}\n\nconst alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines'\n}\n\nexport default function flexboxOld(property, value) {\n if (property === 'flexDirection' && typeof value === 'string') {\n return {\n WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal',\n WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal'\n }\n }\n if (alternativeProps[property]) {\n return {\n [alternativeProps[property]]: alternativeValues[value] || value\n }\n }\n}\n","import prefixProperties from './prefixProps'\nimport capitalizeString from '../utils/capitalizeString'\nimport sortPrefixedStyle from '../utils/sortPrefixedStyle'\n\nimport position from './plugins/position'\nimport calc from './plugins/calc'\nimport cursor from './plugins/cursor'\nimport flex from './plugins/flex'\nimport sizing from './plugins/sizing'\nimport gradient from './plugins/gradient'\nimport transition from './plugins/transition'\n// special flexbox specifications\nimport flexboxIE from './plugins/flexboxIE'\nimport flexboxOld from './plugins/flexboxOld'\n\nconst plugins = [\n position,\n calc,\n cursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n]\n\n/**\n * Returns a prefixed version of the style object using all vendor prefixes\n * @param {Object} styles - Style object that gets prefixed properties added\n * @returns {Object} - Style object with prefixed properties and values\n */\nexport default function prefixAll(styles) {\n Object.keys(styles).forEach(property => {\n const value = styles[property]\n if (value instanceof Object && !Array.isArray(value)) {\n // recurse through nested style objects\n styles[property] = prefixAll(value)\n } else {\n Object.keys(prefixProperties).forEach(prefix => {\n const properties = prefixProperties[prefix]\n // add prefixes if needed\n if (properties[property]) {\n styles[prefix + capitalizeString(property)] = value\n }\n })\n }\n })\n\n Object.keys(styles).forEach(property => {\n [ ].concat(styles[property]).forEach((value, index) => {\n // resolve every special plugins\n plugins.forEach(plugin => assignStyles(styles, plugin(property, value)))\n })\n })\n\n return sortPrefixedStyle(styles)\n}\n\nfunction assignStyles(base, extend = { }) {\n Object.keys(extend).forEach(property => {\n const baseValue = base[property]\n if (Array.isArray(baseValue)) {\n [ ].concat(extend[property]).forEach(value => {\n const valueIndex = baseValue.indexOf(value)\n if (valueIndex > -1) {\n base[property].splice(valueIndex, 1)\n }\n base[property].push(value)\n })\n } else {\n base[property] = extend[property]\n }\n })\n}\n","/*!\n * Bowser - a browser detector\n * https://github.com/ded/bowser\n * MIT License | (c) Dustin Diaz 2015\n */\n\n!function (name, definition) {\n if (typeof module != 'undefined' && module.exports) module.exports = definition()\n else if (typeof define == 'function' && define.amd) define(definition)\n else this[name] = definition()\n}('bowser', function () {\n /**\n * See useragents.js for examples of navigator.userAgent\n */\n\n var t = true\n\n function detect(ua) {\n\n function getFirstMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[1]) || '';\n }\n\n function getSecondMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , nexusMobile = /nexus\\s*[0-6]\\s*/i.test(ua)\n , nexusTablet = !nexusMobile && /nexus\\s*[0-9]+/i.test(ua)\n , chromeos = /CrOS/.test(ua)\n , silk = /silk/i.test(ua)\n , sailfish = /sailfish/i.test(ua)\n , tizen = /tizen/i.test(ua)\n , webos = /(web|hpw)os/i.test(ua)\n , windowsphone = /windows phone/i.test(ua)\n , windows = !windowsphone && /windows/i.test(ua)\n , mac = !iosdevice && !silk && /macintosh/i.test(ua)\n , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)\n , edgeVersion = getFirstMatch(/edge\\/(\\d+(\\.\\d+)?)/i)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , xbox = /xbox/i.test(ua)\n , result\n\n if (/opera|opr|opios/i.test(ua)) {\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/coast/i.test(ua)) {\n result = {\n name: 'Opera Coast'\n , coast: t\n , version: versionIdentifier || getFirstMatch(/(?:coast)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/yabrowser/i.test(ua)) {\n result = {\n name: 'Yandex Browser'\n , yandexbrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/ucbrowser/i.test(ua)) {\n result = {\n name: 'UC Browser'\n , ucbrowser: t\n , version: getFirstMatch(/(?:ucbrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/mxios/i.test(ua)) {\n result = {\n name: 'Maxthon'\n , maxthon: t\n , version: getFirstMatch(/(?:mxios)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/epiphany/i.test(ua)) {\n result = {\n name: 'Epiphany'\n , epiphany: t\n , version: getFirstMatch(/(?:epiphany)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/puffin/i.test(ua)) {\n result = {\n name: 'Puffin'\n , puffin: t\n , version: getFirstMatch(/(?:puffin)[\\s\\/](\\d+(?:\\.\\d+)?)/i)\n }\n }\n else if (/sleipnir/i.test(ua)) {\n result = {\n name: 'Sleipnir'\n , sleipnir: t\n , version: getFirstMatch(/(?:sleipnir)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/k-meleon/i.test(ua)) {\n result = {\n name: 'K-Meleon'\n , kMeleon: t\n , version: getFirstMatch(/(?:k-meleon)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (windowsphone) {\n result = {\n name: 'Windows Phone'\n , windowsphone: t\n }\n if (edgeVersion) {\n result.msedge = t\n result.version = edgeVersion\n }\n else {\n result.msie = t\n result.version = getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n }\n } else if (chromeos) {\n result = {\n name: 'Chrome'\n , chromeos: t\n , chromeBook: t\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n } else if (/chrome.+? edge/i.test(ua)) {\n result = {\n name: 'Microsoft Edge'\n , msedge: t\n , version: edgeVersion\n }\n }\n else if (/vivaldi/i.test(ua)) {\n result = {\n name: 'Vivaldi'\n , vivaldi: t\n , version: getFirstMatch(/vivaldi\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (sailfish) {\n result = {\n name: 'Sailfish'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/firefox|iceweasel|fxios/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \\/](\\d+(\\.\\d+)?)/i)\n }\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t\n }\n }\n else if (silk) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/slimerjs/i.test(ua)) {\n result = {\n name: 'SlimerJS'\n , slimer: t\n , version: getFirstMatch(/slimerjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (webos) {\n result = {\n name: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t)\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (tizen) {\n result = {\n name: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/qupzilla/i.test(ua)) {\n result = {\n name: 'QupZilla'\n , qupzilla: t\n , version: getFirstMatch(/(?:qupzilla)[\\s\\/](\\d+(?:\\.\\d+)+)/i) || versionIdentifier\n }\n }\n else if (/chromium/i.test(ua)) {\n result = {\n name: 'Chromium'\n , chromium: t\n , version: getFirstMatch(/(?:chromium)[\\s\\/](\\d+(?:\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n }\n }\n else if (/safari|applewebkit/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n }\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n }\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if(/googlebot/i.test(ua)) {\n result = {\n name: 'Googlebot'\n , googlebot: t\n , version: getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i) || versionIdentifier\n }\n }\n else {\n result = {\n name: getFirstMatch(/^(.*)\\/(.*) /),\n version: getSecondMatch(/^(.*)\\/(.*) /)\n };\n }\n\n // set webkit or gecko flag for browsers based on these engines\n if (!result.msedge && /(apple)?webkit/i.test(ua)) {\n if (/(apple)?webkit\\/537\\.36/i.test(ua)) {\n result.name = result.name || \"Blink\"\n result.blink = t\n } else {\n result.name = result.name || \"Webkit\"\n result.webkit = t\n }\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\"\n result.gecko = t\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n }\n\n // set OS flags for platforms that have multiple browsers\n if (!result.msedge && (android || result.silk)) {\n result.android = t\n } else if (iosdevice) {\n result[iosdevice] = t\n result.ios = t\n } else if (mac) {\n result.mac = t\n } else if (xbox) {\n result.xbox = t\n } else if (windows) {\n result.windows = t\n } else if (linux) {\n result.linux = t\n }\n\n // OS version extraction\n var osVersion = '';\n if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = osVersion.split('.')[0];\n if (\n tablet\n || nexusTablet\n || iosdevice == 'ipad'\n || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))\n || result.silk\n ) {\n result.tablet = t\n } else if (\n mobile\n || iosdevice == 'iphone'\n || iosdevice == 'ipod'\n || android\n || nexusMobile\n || result.blackberry\n || result.webos\n || result.bada\n ) {\n result.mobile = t\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if (result.msedge ||\n (result.msie && result.version >= 10) ||\n (result.yandexbrowser && result.version >= 15) ||\n\t\t (result.vivaldi && result.version >= 1.0) ||\n (result.chrome && result.version >= 20) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6) ||\n (result.blackberry && result.version >= 10.1)\n || (result.chromium && result.version >= 20)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n || (result.chromium && result.version < 20)\n ) {\n result.c = t\n } else result.x = t\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '')\n\n bowser.test = function (browserList) {\n for (var i = 0; i < browserList.length; ++i) {\n var browserItem = browserList[i];\n if (typeof browserItem=== 'string') {\n if (browserItem in bowser) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n function getVersionPrecision(version) {\n return version.split(\".\").length;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n function map(arr, iterator) {\n var result = [], i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i++) {\n result = iterator(arr[i]);\n }\n return result;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1\n * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1\n * compareVersions(['1.10.2.1', '1.10.2.1']); // 0\n * compareVersions(['1.10.2.1', '1.0800.2']); // -1\n *\n * @param {Array} versions versions to compare\n * @return {Number} comparison result\n */\n function compareVersions(versions) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));\n var chunks = map(versions, function (version) {\n var delta = precision - getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n version = version + new Array(delta + 1).join(\".0\");\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return map(version.split(\".\"), function (chunk) {\n return new Array(20 - chunk.length).join(\"0\") + chunk;\n }).reverse();\n });\n\n // iterate in reverse order by reversed chunks array\n while (--precision >= 0) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n else if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === 0) {\n // all version chunks are same\n return 0;\n }\n }\n else {\n return -1;\n }\n }\n }\n\n /**\n * Check if browser is unsupported\n *\n * @example\n * bowser.isUnsupportedBrowser({\n * msie: \"10\",\n * firefox: \"23\",\n * chrome: \"29\",\n * safari: \"5.1\",\n * opera: \"16\",\n * phantom: \"534\"\n * });\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function isUnsupportedBrowser(minVersions, strictMode, ua) {\n var _bowser = bowser;\n\n // make strictMode param optional with ua param usage\n if (typeof strictMode === 'string') {\n ua = strictMode;\n strictMode = void(0);\n }\n\n if (strictMode === void(0)) {\n strictMode = false;\n }\n if (ua) {\n _bowser = detect(ua);\n }\n\n var version = \"\" + _bowser.version;\n for (var browser in minVersions) {\n if (minVersions.hasOwnProperty(browser)) {\n if (_bowser[browser]) {\n // browser version and min supported version.\n if (compareVersions([version, minVersions[browser]]) < 0) {\n return true; // unsupported\n }\n }\n }\n }\n return strictMode; // not found\n }\n\n /**\n * Check if browser is supported\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @return {Boolean}\n */\n function check(minVersions, strictMode) {\n return !isUnsupportedBrowser(minVersions, strictMode);\n }\n\n bowser.isUnsupportedBrowser = isUnsupportedBrowser;\n bowser.compareVersions = compareVersions;\n bowser.check = check;\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n return bowser\n});\n","import bowser from 'bowser'\nconst vendorPrefixes = {\n Webkit: [ 'chrome', 'safari', 'ios', 'android', 'phantom', 'opera', 'webos', 'blackberry', 'bada', 'tizen', 'chromium', 'vivaldi' ],\n Moz: [ 'firefox', 'seamonkey', 'sailfish' ],\n ms: [ 'msie', 'msedge' ]\n}\nconst browsers = {\n chrome: [ [ 'chrome' ], [ 'chromium' ] ],\n safari: [ [ 'safari' ] ],\n firefox: [ [ 'firefox' ] ],\n edge: [ [ 'msedge' ] ],\n opera: [ [ 'opera' ], [ 'vivaldi' ] ],\n ios_saf: [ [ 'ios', 'mobile' ], [ 'ios', 'tablet' ] ],\n ie: [ [ 'msie' ] ],\n op_mini: [ [ 'opera', 'mobile' ], [ 'opera', 'tablet' ] ],\n and_uc: [ [ 'android', 'mobile' ], [ 'android', 'tablet' ] ],\n android: [ [ 'android', 'mobile' ], [ 'android', 'tablet' ] ]\n}\n\nconst browserByInfo = info => {\n if (info.firefox) {\n return 'firefox'\n }\n let name = ''\n\n Object.keys(browsers).forEach(browser => {\n browsers[browser].forEach(condition => {\n let match = 0\n condition.forEach(single => {\n if (info[single]) {\n match += 1\n }\n })\n if (condition.length === match) {\n name = browser\n }\n })\n })\n\n return name\n}\n\n/**\n * Uses bowser to get default browser information such as version and name\n * Evaluates bowser info and adds vendorPrefix information\n * @param {string} userAgent - userAgent that gets evaluated\n */\nexport default userAgent => {\n if (!userAgent) {\n return false\n }\n const info = bowser._detect(userAgent)\n\n Object.keys(vendorPrefixes).forEach(prefix => {\n vendorPrefixes[prefix].forEach(browser => {\n if (info[browser]) {\n info.prefix = {\n inline: prefix,\n css: '-' + prefix.toLowerCase() + '-'\n }\n }\n })\n })\n\n info.browser = browserByInfo(info);\n\n // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN\n info.version = info.version ? parseFloat(info.version) : parseInt(parseFloat(info.osversion), 10)\n info.osversion = parseFloat(info.osversion)\n\n\n // iOS forces all browsers to use Safari under the hood\n // as the Safari version seems to match the iOS version\n // we just explicitely use the osversion instead\n // https://github.com/rofrischmann/inline-style-prefixer/issues/72\n if (info.browser === 'ios_saf' && info.version > info.osversion) {\n info.version = info.osversion\n info.safari = true\n }\n\n\n // seperate native android chrome\n // https://github.com/rofrischmann/inline-style-prefixer/issues/45\n if (info.browser === 'android' && info.chrome && info.version > 37) {\n info.browser = 'and_chr'\n }\n\n // For android < 4.4 we want to check the osversion\n // not the chrome version, see issue #26\n // https://github.com/rofrischmann/inline-style-prefixer/issues/26\n if (info.browser === 'android' && info.osversion < 5) {\n info.version = info.osversion\n }\n\n return info\n}\n","export default ({ browser, version, prefix }) => {\n let prefixedKeyframes = 'keyframes'\n\n if (\n browser === 'chrome' && version < 43 ||\n (browser === 'safari' || browser === 'ios_saf') && version < 9 ||\n browser === 'opera' && version < 30 ||\n browser === 'android' && version <= 4.4 ||\n browser === 'and_uc'\n ) {\n prefixedKeyframes = prefix.css + prefixedKeyframes\n }\n return prefixedKeyframes\n}\n","export default {\"chrome\":{\"transform\":35,\"transformOrigin\":35,\"transformOriginX\":35,\"transformOriginY\":35,\"backfaceVisibility\":35,\"perspective\":35,\"perspectiveOrigin\":35,\"transformStyle\":35,\"transformOriginZ\":35,\"animation\":42,\"animationDelay\":42,\"animationDirection\":42,\"animationFillMode\":42,\"animationDuration\":42,\"animationIterationCount\":42,\"animationName\":42,\"animationPlayState\":42,\"animationTimingFunction\":42,\"appearance\":55,\"userSelect\":55,\"fontKerning\":32,\"textEmphasisPosition\":55,\"textEmphasis\":55,\"textEmphasisStyle\":55,\"textEmphasisColor\":55,\"boxDecorationBreak\":55,\"clipPath\":55,\"maskImage\":55,\"maskMode\":55,\"maskRepeat\":55,\"maskPosition\":55,\"maskClip\":55,\"maskOrigin\":55,\"maskSize\":55,\"maskComposite\":55,\"mask\":55,\"maskBorderSource\":55,\"maskBorderMode\":55,\"maskBorderSlice\":55,\"maskBorderWidth\":55,\"maskBorderOutset\":55,\"maskBorderRepeat\":55,\"maskBorder\":55,\"maskType\":55,\"textDecorationStyle\":55,\"textDecorationSkip\":55,\"textDecorationLine\":55,\"textDecorationColor\":55,\"filter\":52,\"fontFeatureSettings\":47,\"breakAfter\":49,\"breakBefore\":49,\"breakInside\":49,\"columnCount\":49,\"columnFill\":49,\"columnGap\":49,\"columnRule\":49,\"columnRuleColor\":49,\"columnRuleStyle\":49,\"columnRuleWidth\":49,\"columns\":49,\"columnSpan\":49,\"columnWidth\":49},\"safari\":{\"flex\":8,\"flexBasis\":8,\"flexDirection\":8,\"flexGrow\":8,\"flexFlow\":8,\"flexShrink\":8,\"flexWrap\":8,\"alignContent\":8,\"alignItems\":8,\"alignSelf\":8,\"justifyContent\":8,\"order\":8,\"transition\":6,\"transitionDelay\":6,\"transitionDuration\":6,\"transitionProperty\":6,\"transitionTimingFunction\":6,\"transform\":8,\"transformOrigin\":8,\"transformOriginX\":8,\"transformOriginY\":8,\"backfaceVisibility\":8,\"perspective\":8,\"perspectiveOrigin\":8,\"transformStyle\":8,\"transformOriginZ\":8,\"animation\":8,\"animationDelay\":8,\"animationDirection\":8,\"animationFillMode\":8,\"animationDuration\":8,\"animationIterationCount\":8,\"animationName\":8,\"animationPlayState\":8,\"animationTimingFunction\":8,\"appearance\":10,\"userSelect\":10,\"backdropFilter\":10,\"fontKerning\":9,\"scrollSnapType\":10,\"scrollSnapPointsX\":10,\"scrollSnapPointsY\":10,\"scrollSnapDestination\":10,\"scrollSnapCoordinate\":10,\"textEmphasisPosition\":7,\"textEmphasis\":7,\"textEmphasisStyle\":7,\"textEmphasisColor\":7,\"boxDecorationBreak\":10,\"clipPath\":10,\"maskImage\":10,\"maskMode\":10,\"maskRepeat\":10,\"maskPosition\":10,\"maskClip\":10,\"maskOrigin\":10,\"maskSize\":10,\"maskComposite\":10,\"mask\":10,\"maskBorderSource\":10,\"maskBorderMode\":10,\"maskBorderSlice\":10,\"maskBorderWidth\":10,\"maskBorderOutset\":10,\"maskBorderRepeat\":10,\"maskBorder\":10,\"maskType\":10,\"textDecorationStyle\":10,\"textDecorationSkip\":10,\"textDecorationLine\":10,\"textDecorationColor\":10,\"shapeImageThreshold\":10,\"shapeImageMargin\":10,\"shapeImageOutside\":10,\"filter\":9,\"hyphens\":10,\"flowInto\":10,\"flowFrom\":10,\"breakBefore\":8,\"breakAfter\":8,\"breakInside\":8,\"regionFragment\":10,\"columnCount\":8,\"columnFill\":8,\"columnGap\":8,\"columnRule\":8,\"columnRuleColor\":8,\"columnRuleStyle\":8,\"columnRuleWidth\":8,\"columns\":8,\"columnSpan\":8,\"columnWidth\":8},\"firefox\":{\"appearance\":51,\"userSelect\":51,\"boxSizing\":28,\"textAlignLast\":48,\"textDecorationStyle\":35,\"textDecorationSkip\":35,\"textDecorationLine\":35,\"textDecorationColor\":35,\"tabSize\":51,\"hyphens\":42,\"fontFeatureSettings\":33,\"breakAfter\":51,\"breakBefore\":51,\"breakInside\":51,\"columnCount\":51,\"columnFill\":51,\"columnGap\":51,\"columnRule\":51,\"columnRuleColor\":51,\"columnRuleStyle\":51,\"columnRuleWidth\":51,\"columns\":51,\"columnSpan\":51,\"columnWidth\":51},\"opera\":{\"flex\":16,\"flexBasis\":16,\"flexDirection\":16,\"flexGrow\":16,\"flexFlow\":16,\"flexShrink\":16,\"flexWrap\":16,\"alignContent\":16,\"alignItems\":16,\"alignSelf\":16,\"justifyContent\":16,\"order\":16,\"transform\":22,\"transformOrigin\":22,\"transformOriginX\":22,\"transformOriginY\":22,\"backfaceVisibility\":22,\"perspective\":22,\"perspectiveOrigin\":22,\"transformStyle\":22,\"transformOriginZ\":22,\"animation\":29,\"animationDelay\":29,\"animationDirection\":29,\"animationFillMode\":29,\"animationDuration\":29,\"animationIterationCount\":29,\"animationName\":29,\"animationPlayState\":29,\"animationTimingFunction\":29,\"appearance\":41,\"userSelect\":41,\"fontKerning\":19,\"textEmphasisPosition\":41,\"textEmphasis\":41,\"textEmphasisStyle\":41,\"textEmphasisColor\":41,\"boxDecorationBreak\":41,\"clipPath\":41,\"maskImage\":41,\"maskMode\":41,\"maskRepeat\":41,\"maskPosition\":41,\"maskClip\":41,\"maskOrigin\":41,\"maskSize\":41,\"maskComposite\":41,\"mask\":41,\"maskBorderSource\":41,\"maskBorderMode\":41,\"maskBorderSlice\":41,\"maskBorderWidth\":41,\"maskBorderOutset\":41,\"maskBorderRepeat\":41,\"maskBorder\":41,\"maskType\":41,\"textDecorationStyle\":41,\"textDecorationSkip\":41,\"textDecorationLine\":41,\"textDecorationColor\":41,\"filter\":39,\"fontFeatureSettings\":34,\"breakAfter\":36,\"breakBefore\":36,\"breakInside\":36,\"columnCount\":36,\"columnFill\":36,\"columnGap\":36,\"columnRule\":36,\"columnRuleColor\":36,\"columnRuleStyle\":36,\"columnRuleWidth\":36,\"columns\":36,\"columnSpan\":36,\"columnWidth\":36},\"ie\":{\"flex\":10,\"flexDirection\":10,\"flexFlow\":10,\"flexWrap\":10,\"transform\":9,\"transformOrigin\":9,\"transformOriginX\":9,\"transformOriginY\":9,\"userSelect\":11,\"wrapFlow\":11,\"wrapThrough\":11,\"wrapMargin\":11,\"scrollSnapType\":11,\"scrollSnapPointsX\":11,\"scrollSnapPointsY\":11,\"scrollSnapDestination\":11,\"scrollSnapCoordinate\":11,\"touchAction\":10,\"hyphens\":11,\"flowInto\":11,\"flowFrom\":11,\"breakBefore\":11,\"breakAfter\":11,\"breakInside\":11,\"regionFragment\":11,\"gridTemplateColumns\":11,\"gridTemplateRows\":11,\"gridTemplateAreas\":11,\"gridTemplate\":11,\"gridAutoColumns\":11,\"gridAutoRows\":11,\"gridAutoFlow\":11,\"grid\":11,\"gridRowStart\":11,\"gridColumnStart\":11,\"gridRowEnd\":11,\"gridRow\":11,\"gridColumn\":11,\"gridColumnEnd\":11,\"gridColumnGap\":11,\"gridRowGap\":11,\"gridArea\":11,\"gridGap\":11,\"textSizeAdjust\":11},\"edge\":{\"userSelect\":14,\"wrapFlow\":14,\"wrapThrough\":14,\"wrapMargin\":14,\"scrollSnapType\":14,\"scrollSnapPointsX\":14,\"scrollSnapPointsY\":14,\"scrollSnapDestination\":14,\"scrollSnapCoordinate\":14,\"hyphens\":14,\"flowInto\":14,\"flowFrom\":14,\"breakBefore\":14,\"breakAfter\":14,\"breakInside\":14,\"regionFragment\":14,\"gridTemplateColumns\":14,\"gridTemplateRows\":14,\"gridTemplateAreas\":14,\"gridTemplate\":14,\"gridAutoColumns\":14,\"gridAutoRows\":14,\"gridAutoFlow\":14,\"grid\":14,\"gridRowStart\":14,\"gridColumnStart\":14,\"gridRowEnd\":14,\"gridRow\":14,\"gridColumn\":14,\"gridColumnEnd\":14,\"gridColumnGap\":14,\"gridRowGap\":14,\"gridArea\":14,\"gridGap\":14},\"ios_saf\":{\"flex\":8.1,\"flexBasis\":8.1,\"flexDirection\":8.1,\"flexGrow\":8.1,\"flexFlow\":8.1,\"flexShrink\":8.1,\"flexWrap\":8.1,\"alignContent\":8.1,\"alignItems\":8.1,\"alignSelf\":8.1,\"justifyContent\":8.1,\"order\":8.1,\"transition\":6,\"transitionDelay\":6,\"transitionDuration\":6,\"transitionProperty\":6,\"transitionTimingFunction\":6,\"transform\":8.1,\"transformOrigin\":8.1,\"transformOriginX\":8.1,\"transformOriginY\":8.1,\"backfaceVisibility\":8.1,\"perspective\":8.1,\"perspectiveOrigin\":8.1,\"transformStyle\":8.1,\"transformOriginZ\":8.1,\"animation\":8.1,\"animationDelay\":8.1,\"animationDirection\":8.1,\"animationFillMode\":8.1,\"animationDuration\":8.1,\"animationIterationCount\":8.1,\"animationName\":8.1,\"animationPlayState\":8.1,\"animationTimingFunction\":8.1,\"appearance\":9.3,\"userSelect\":9.3,\"backdropFilter\":9.3,\"fontKerning\":9.3,\"scrollSnapType\":9.3,\"scrollSnapPointsX\":9.3,\"scrollSnapPointsY\":9.3,\"scrollSnapDestination\":9.3,\"scrollSnapCoordinate\":9.3,\"boxDecorationBreak\":9.3,\"clipPath\":9.3,\"maskImage\":9.3,\"maskMode\":9.3,\"maskRepeat\":9.3,\"maskPosition\":9.3,\"maskClip\":9.3,\"maskOrigin\":9.3,\"maskSize\":9.3,\"maskComposite\":9.3,\"mask\":9.3,\"maskBorderSource\":9.3,\"maskBorderMode\":9.3,\"maskBorderSlice\":9.3,\"maskBorderWidth\":9.3,\"maskBorderOutset\":9.3,\"maskBorderRepeat\":9.3,\"maskBorder\":9.3,\"maskType\":9.3,\"textSizeAdjust\":9.3,\"textDecorationStyle\":9.3,\"textDecorationSkip\":9.3,\"textDecorationLine\":9.3,\"textDecorationColor\":9.3,\"shapeImageThreshold\":9.3,\"shapeImageMargin\":9.3,\"shapeImageOutside\":9.3,\"filter\":9,\"hyphens\":9.3,\"flowInto\":9.3,\"flowFrom\":9.3,\"breakBefore\":8.1,\"breakAfter\":8.1,\"breakInside\":8.1,\"regionFragment\":9.3,\"columnCount\":8.1,\"columnFill\":8.1,\"columnGap\":8.1,\"columnRule\":8.1,\"columnRuleColor\":8.1,\"columnRuleStyle\":8.1,\"columnRuleWidth\":8.1,\"columns\":8.1,\"columnSpan\":8.1,\"columnWidth\":8.1},\"android\":{\"flex\":4.2,\"flexBasis\":4.2,\"flexDirection\":4.2,\"flexGrow\":4.2,\"flexFlow\":4.2,\"flexShrink\":4.2,\"flexWrap\":4.2,\"alignContent\":4.2,\"alignItems\":4.2,\"alignSelf\":4.2,\"justifyContent\":4.2,\"order\":4.2,\"transition\":4.2,\"transitionDelay\":4.2,\"transitionDuration\":4.2,\"transitionProperty\":4.2,\"transitionTimingFunction\":4.2,\"transform\":4.4,\"transformOrigin\":4.4,\"transformOriginX\":4.4,\"transformOriginY\":4.4,\"backfaceVisibility\":4.4,\"perspective\":4.4,\"perspectiveOrigin\":4.4,\"transformStyle\":4.4,\"transformOriginZ\":4.4,\"animation\":4.4,\"animationDelay\":4.4,\"animationDirection\":4.4,\"animationFillMode\":4.4,\"animationDuration\":4.4,\"animationIterationCount\":4.4,\"animationName\":4.4,\"animationPlayState\":4.4,\"animationTimingFunction\":4.4,\"appearance\":51,\"userSelect\":51,\"fontKerning\":4.4,\"textEmphasisPosition\":51,\"textEmphasis\":51,\"textEmphasisStyle\":51,\"textEmphasisColor\":51,\"boxDecorationBreak\":51,\"clipPath\":51,\"maskImage\":51,\"maskMode\":51,\"maskRepeat\":51,\"maskPosition\":51,\"maskClip\":51,\"maskOrigin\":51,\"maskSize\":51,\"maskComposite\":51,\"mask\":51,\"maskBorderSource\":51,\"maskBorderMode\":51,\"maskBorderSlice\":51,\"maskBorderWidth\":51,\"maskBorderOutset\":51,\"maskBorderRepeat\":51,\"maskBorder\":51,\"maskType\":51,\"filter\":51,\"fontFeatureSettings\":4.4,\"breakAfter\":51,\"breakBefore\":51,\"breakInside\":51,\"columnCount\":51,\"columnFill\":51,\"columnGap\":51,\"columnRule\":51,\"columnRuleColor\":51,\"columnRuleStyle\":51,\"columnRuleWidth\":51,\"columns\":51,\"columnSpan\":51,\"columnWidth\":51},\"and_chr\":{\"appearance\":51,\"userSelect\":51,\"textEmphasisPosition\":51,\"textEmphasis\":51,\"textEmphasisStyle\":51,\"textEmphasisColor\":51,\"boxDecorationBreak\":51,\"clipPath\":51,\"maskImage\":51,\"maskMode\":51,\"maskRepeat\":51,\"maskPosition\":51,\"maskClip\":51,\"maskOrigin\":51,\"maskSize\":51,\"maskComposite\":51,\"mask\":51,\"maskBorderSource\":51,\"maskBorderMode\":51,\"maskBorderSlice\":51,\"maskBorderWidth\":51,\"maskBorderOutset\":51,\"maskBorderRepeat\":51,\"maskBorder\":51,\"maskType\":51,\"textDecorationStyle\":51,\"textDecorationSkip\":51,\"textDecorationLine\":51,\"textDecorationColor\":51,\"filter\":51},\"and_uc\":{\"flex\":9.9,\"flexBasis\":9.9,\"flexDirection\":9.9,\"flexGrow\":9.9,\"flexFlow\":9.9,\"flexShrink\":9.9,\"flexWrap\":9.9,\"alignContent\":9.9,\"alignItems\":9.9,\"alignSelf\":9.9,\"justifyContent\":9.9,\"order\":9.9,\"transition\":9.9,\"transitionDelay\":9.9,\"transitionDuration\":9.9,\"transitionProperty\":9.9,\"transitionTimingFunction\":9.9,\"transform\":9.9,\"transformOrigin\":9.9,\"transformOriginX\":9.9,\"transformOriginY\":9.9,\"backfaceVisibility\":9.9,\"perspective\":9.9,\"perspectiveOrigin\":9.9,\"transformStyle\":9.9,\"transformOriginZ\":9.9,\"animation\":9.9,\"animationDelay\":9.9,\"animationDirection\":9.9,\"animationFillMode\":9.9,\"animationDuration\":9.9,\"animationIterationCount\":9.9,\"animationName\":9.9,\"animationPlayState\":9.9,\"animationTimingFunction\":9.9,\"appearance\":9.9,\"userSelect\":9.9,\"fontKerning\":9.9,\"textEmphasisPosition\":9.9,\"textEmphasis\":9.9,\"textEmphasisStyle\":9.9,\"textEmphasisColor\":9.9,\"maskImage\":9.9,\"maskMode\":9.9,\"maskRepeat\":9.9,\"maskPosition\":9.9,\"maskClip\":9.9,\"maskOrigin\":9.9,\"maskSize\":9.9,\"maskComposite\":9.9,\"mask\":9.9,\"maskBorderSource\":9.9,\"maskBorderMode\":9.9,\"maskBorderSlice\":9.9,\"maskBorderWidth\":9.9,\"maskBorderOutset\":9.9,\"maskBorderRepeat\":9.9,\"maskBorder\":9.9,\"maskType\":9.9,\"textSizeAdjust\":9.9,\"filter\":9.9,\"hyphens\":9.9,\"flowInto\":9.9,\"flowFrom\":9.9,\"breakBefore\":9.9,\"breakAfter\":9.9,\"breakInside\":9.9,\"regionFragment\":9.9,\"fontFeatureSettings\":9.9,\"columnCount\":9.9,\"columnFill\":9.9,\"columnGap\":9.9,\"columnRule\":9.9,\"columnRuleColor\":9.9,\"columnRuleStyle\":9.9,\"columnRuleWidth\":9.9,\"columns\":9.9,\"columnSpan\":9.9,\"columnWidth\":9.9},\"op_mini\":{}}","export default (prefixedValue, value, keepUnprefixed) => keepUnprefixed ? [ prefixedValue, value ] : prefixedValue\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nexport default function position({ property, value, browserInfo: { browser }, prefix: { css }, keepUnprefixed }) {\n if (\n property === 'position' && value === 'sticky' &&\n (\n browser === 'safari' ||\n browser === 'ios_saf'\n )\n ) {\n return {\n [property]: getPrefixedValue(css + value, value, keepUnprefixed)\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nexport default function calc({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) {\n if (\n typeof value === 'string' && value.indexOf('calc(') > -1 &&\n (\n browser === 'firefox' && version < 15 ||\n browser === 'chrome' && version < 25 ||\n browser === 'safari' && version < 6.1 ||\n browser === 'ios_saf' && version < 7\n )\n ) {\n return {\n [property]: getPrefixedValue(value.replace(/calc\\(/g, css + 'calc('), value, keepUnprefixed)\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst values = { 'zoom-in': true, 'zoom-out': true }\n\nexport default function zoomCursor({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) {\n if (\n property === 'cursor' && values[value] &&\n (\n browser === 'firefox' && version < 24 ||\n browser === 'chrome' && version < 37 ||\n browser === 'safari' && version < 9 ||\n browser === 'opera' && version < 24\n )\n ) {\n return {\n cursor: getPrefixedValue(css + value, value, keepUnprefixed)\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst values = { grab: true, grabbing: true }\n\nexport default function grabCursor({ property, value, browserInfo: { browser }, prefix: { css }, keepUnprefixed }) {\n // adds prefixes for firefox, chrome, safari, and opera regardless of version until a reliable brwoser support info can be found (see: https://github.com/rofrischmann/inline-style-prefixer/issues/79)\n if (\n property === 'cursor' && values[value] &&\n (\n browser === 'firefox' ||\n browser === 'chrome' ||\n browser === 'safari' ||\n browser === 'opera'\n )\n ) {\n return {\n cursor: getPrefixedValue(css + value, value, keepUnprefixed)\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst values = { flex: true, 'inline-flex': true }\n\nexport default function flex({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) {\n if (\n property === 'display' && values[value] &&\n (\n browser === 'chrome' && (version < 29 && version > 20) ||\n (browser === 'safari' || browser === 'ios_saf') && (version < 9 && version > 6) ||\n browser === 'opera' && (version == 15 || version == 16)\n )\n ) {\n return {\n display: getPrefixedValue(css + value, value, keepUnprefixed)\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n}\nconst values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n}\n\nexport default function sizing({ property, value, prefix: { css }, keepUnprefixed }) {\n // This might change in the future\n // Keep an eye on it\n if (properties[property] && values[value]) {\n return {\n [property]: getPrefixedValue(css + value, value, keepUnprefixed)\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/\n\nexport default function gradient({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) {\n if (\n typeof value === 'string' && value.match(values) !== null &&\n (\n browser === 'firefox' && version < 16 ||\n browser === 'chrome' && version < 26 ||\n (browser === 'safari' || browser === 'ios_saf') && version < 7 ||\n (browser === 'opera' || browser === 'op_mini') && version < 12.1 ||\n browser === 'android' && version < 4.4 ||\n browser === 'and_uc'\n )\n ) {\n return {\n [property]: getPrefixedValue(css + value, value, keepUnprefixed)\n }\n }\n}\n","export default property => {\n const unprefixed = property.replace(/^(ms|Webkit|Moz|O)/, '')\n return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1)\n}\n","import hyphenateStyleName from 'hyphenate-style-name'\nimport unprefixProperty from '../utils/unprefixProperty'\n\nconst properties = { transition: true, transitionProperty: true }\n\nexport default function transition({ property, value, prefix: { css }, requiresPrefix, keepUnprefixed }) {\n // also check for already prefixed transitions\n const unprefixedProperty = unprefixProperty(property)\n\n if (typeof value === 'string' && properties[unprefixedProperty]) {\n // TODO: memoize this array\n const requiresPrefixDashCased = Object.keys(requiresPrefix).map(prop => hyphenateStyleName(prop))\n\n // only split multi values, not cubic beziers\n const multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n\n requiresPrefixDashCased.forEach(prop => {\n multipleValues.forEach((val, index) => {\n if (val.indexOf(prop) > -1 && prop !== 'order') {\n multipleValues[index] = val.replace(prop, css + prop) + (keepUnprefixed ? ',' + val : '')\n }\n })\n })\n\n return { [ property]: multipleValues.join(',') }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n flex: 'flexbox',\n 'inline-flex': 'inline-flexbox'\n}\nconst alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msPreferredSize'\n}\n\nexport default function flexboxIE({ property, value, styles, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) {\n if (\n (alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) &&\n (\n (browser === 'ie_mob' || browser === 'ie') && version == 10)\n ) {\n if (!keepUnprefixed && !Array.isArray(styles[property])) {\n delete styles[property]\n }\n if (property === 'display' && alternativeValues[value]) {\n return {\n display: getPrefixedValue(css + alternativeValues[value], value, keepUnprefixed)\n }\n }\n if (alternativeProps[property]) {\n return {\n [alternativeProps[property]]: alternativeValues[value] || value\n }\n }\n }\n}\n","import getPrefixedValue from '../utils/getPrefixedValue'\n\nconst alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple',\n flex: 'box',\n 'inline-flex': 'inline-box'\n}\n\nconst alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines'\n}\n\nconst otherProps = [ 'alignContent', 'alignSelf', 'order', 'flexGrow', 'flexShrink', 'flexBasis', 'flexDirection' ]\nconst properties = Object.keys(alternativeProps).concat(otherProps)\n\nexport default function flexboxOld({ property, value, styles, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) {\n if (\n (properties.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) &&\n (\n browser === 'firefox' && version < 22 ||\n browser === 'chrome' && version < 21 ||\n (browser === 'safari' || browser === 'ios_saf') && version <= 6.1 ||\n browser === 'android' && version < 4.4 ||\n browser === 'and_uc'\n )\n ) {\n if (!keepUnprefixed && !Array.isArray(styles[property])) {\n delete styles[property]\n }\n if (property === 'flexDirection' && typeof value === 'string') {\n return {\n WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal',\n WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal'\n }\n }\n if (property === 'display' && alternativeValues[value]) {\n return {\n display: getPrefixedValue(css + alternativeValues[value], value, keepUnprefixed)\n }\n }\n if (alternativeProps[property]) {\n return {\n [alternativeProps[property]]: alternativeValues[value] || value\n }\n }\n }\n}\n","import prefixAll from './static/prefixAll'\nimport getBrowserInformation from './utils/getBrowserInformation'\nimport getPrefixedKeyframes from './utils/getPrefixedKeyframes'\nimport capitalizeString from './utils/capitalizeString'\nimport sortPrefixedStyle from './utils/sortPrefixedStyle'\nimport prefixProps from './prefixProps'\n\nimport position from './plugins/position'\nimport calc from './plugins/calc'\nimport zoomCursor from './plugins/zoomCursor'\nimport grabCursor from './plugins/grabCursor'\nimport flex from './plugins/flex'\nimport sizing from './plugins/sizing'\nimport gradient from './plugins/gradient'\nimport transition from './plugins/transition'\n// special flexbox specifications\nimport flexboxIE from './plugins/flexboxIE'\nimport flexboxOld from './plugins/flexboxOld'\n\nconst plugins = [\n position,\n calc,\n zoomCursor,\n grabCursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n // this must be run AFTER the flexbox specs\n flex\n]\n\nexport default class Prefixer {\n /**\n * Instantiante a new prefixer\n * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com\n * @param {string} keepUnprefixed - keeps unprefixed properties and values\n */\n constructor(options = { }) {\n const defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined\n\n this._userAgent = options.userAgent || defaultUserAgent\n this._keepUnprefixed = options.keepUnprefixed || false\n\n this._browserInfo = getBrowserInformation(this._userAgent)\n\n // Checks if the userAgent was resolved correctly\n if (this._browserInfo && this._browserInfo.prefix) {\n // set additional prefix information\n this.cssPrefix = this._browserInfo.prefix.css\n this.jsPrefix = this._browserInfo.prefix.inline\n this.prefixedKeyframes = getPrefixedKeyframes(this._browserInfo)\n } else {\n this._usePrefixAllFallback = true\n return false\n }\n\n const data = this._browserInfo.browser && prefixProps[this._browserInfo.browser]\n if (data) {\n this._requiresPrefix = Object.keys(data).filter(key => data[key] >= this._browserInfo.version).reduce((result, name) => {\n result[name] = true\n return result\n }, { })\n this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0\n } else {\n this._usePrefixAllFallback = true\n }\n }\n\n /**\n * Returns a prefixed version of the style object\n * @param {Object} styles - Style object that gets prefixed properties added\n * @returns {Object} - Style object with prefixed properties and values\n */\n prefix(styles) {\n // use prefixAll as fallback if userAgent can not be resolved\n if (this._usePrefixAllFallback) {\n return prefixAll(styles)\n }\n\n // only add prefixes if needed\n if (!this._hasPropsRequiringPrefix) {\n return styles\n }\n\n Object.keys(styles).forEach(property => {\n let value = styles[property]\n if (value instanceof Object && !Array.isArray(value)) {\n // recurse through nested style objects\n styles[property] = this.prefix(value)\n } else {\n // add prefixes if needed\n if (this._requiresPrefix[property]) {\n styles[this.jsPrefix + capitalizeString(property)] = value\n if (!this._keepUnprefixed) {\n delete styles[property]\n }\n }\n }\n })\n\n Object.keys(styles).forEach(property => {\n [ ].concat(styles[property]).forEach(value => {\n // resolve plugins\n plugins.forEach(plugin => {\n // generates a new plugin interface with current data\n assignStyles(styles, plugin({\n property: property,\n value: value,\n styles: styles,\n browserInfo: this._browserInfo,\n prefix: {\n js: this.jsPrefix,\n css: this.cssPrefix,\n keyframes: this.prefixedKeyframes\n },\n keepUnprefixed: this._keepUnprefixed,\n requiresPrefix: this._requiresPrefix\n }), value, this._keepUnprefixed)\n })\n })\n })\n\n return sortPrefixedStyle(styles)\n }\n\n /**\n * Returns a prefixed version of the style object using all vendor prefixes\n * @param {Object} styles - Style object that gets prefixed properties added\n * @returns {Object} - Style object with prefixed properties and values\n */\n static prefixAll(styles) {\n return prefixAll(styles)\n }\n}\n\nfunction assignStyles(base, extend = { }, value, keepUnprefixed) {\n Object.keys(extend).forEach(property => {\n const baseValue = base[property]\n if (Array.isArray(baseValue)) {\n [ ].concat(extend[property]).forEach(val => {\n if (base[property].indexOf(val) === -1) {\n base[property].splice(baseValue.indexOf(value), keepUnprefixed ? 0 : 1, val)\n }\n })\n } else {\n base[property] = extend[property]\n }\n })\n}\n"],"names":["values","properties","alternativeValues","alternativeProps","plugins","prefixProperties","assignStyles","bowser","position","calc","flex","sizing","gradient","transition","flexboxIE","flexboxOld","prefixProps","_prefixAll"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAAe,EAAC,UAAS,EAAC,aAAY,IAAb,EAAkB,mBAAkB,IAApC,EAAyC,oBAAmB,IAA5D,EAAiE,oBAAmB,IAApF,EAAyF,sBAAqB,IAA9G,EAAmH,eAAc,IAAjI,EAAsI,qBAAoB,IAA1J,EAA+J,kBAAiB,IAAhL,EAAqL,oBAAmB,IAAxM,EAA6M,aAAY,IAAzN,EAA8N,kBAAiB,IAA/O,EAAoP,sBAAqB,IAAzQ,EAA8Q,qBAAoB,IAAlS,EAAuS,qBAAoB,IAA3T,EAAgU,2BAA0B,IAA1V,EAA+V,iBAAgB,IAA/W,EAAoX,sBAAqB,IAAzY,EAA8Y,2BAA0B,IAAxa,EAA6a,cAAa,IAA1b,EAA+b,cAAa,IAA5c,EAAid,eAAc,IAA/d,EAAoe,wBAAuB,IAA3f,EAAggB,gBAAe,IAA/gB,EAAohB,qBAAoB,IAAxiB,EAA6iB,qBAAoB,IAAjkB,EAAskB,sBAAqB,IAA3lB,EAAgmB,YAAW,IAA3mB,EAAgnB,aAAY,IAA5nB,EAAioB,YAAW,IAA5oB,EAAipB,cAAa,IAA9pB,EAAmqB,gBAAe,IAAlrB,EAAurB,YAAW,IAAlsB,EAAusB,cAAa,IAAptB,EAAytB,YAAW,IAApuB,EAAyuB,iBAAgB,IAAzvB,EAA8vB,QAAO,IAArwB,EAA0wB,oBAAmB,IAA7xB,EAAkyB,kBAAiB,IAAnzB,EAAwzB,mBAAkB,IAA10B,EAA+0B,mBAAkB,IAAj2B,EAAs2B,oBAAmB,IAAz3B,EAA83B,oBAAmB,IAAj5B,EAAs5B,cAAa,IAAn6B,EAAw6B,YAAW,IAAn7B,EAAw7B,uBAAsB,IAA98B,EAAm9B,sBAAqB,IAAx+B,EAA6+B,sBAAqB,IAAlgC,EAAugC,uBAAsB,IAA7hC,EAAkiC,UAAS,IAA3iC,EAAgjC,uBAAsB,IAAtkC,EAA2kC,cAAa,IAAxlC,EAA6lC,eAAc,IAA3mC,EAAgnC,eAAc,IAA9nC,EAAmoC,eAAc,IAAjpC,EAAspC,cAAa,IAAnqC,EAAwqC,aAAY,IAAprC,EAAyrC,cAAa,IAAtsC,EAA2sC,mBAAkB,IAA7tC,EAAkuC,mBAAkB,IAApvC,EAAyvC,mBAAkB,IAA3wC,EAAgxC,WAAU,IAA1xC,EAA+xC,cAAa,IAA5yC,EAAizC,eAAc,IAA/zC,EAAo0C,QAAO,IAA30C,EAAg1C,aAAY,IAA51C,EAAi2C,iBAAgB,IAAj3C,EAAs3C,YAAW,IAAj4C,EAAs4C,YAAW,IAAj5C,EAAs5C,cAAa,IAAn6C,EAAw6C,YAAW,IAAn7C,EAAw7C,gBAAe,IAAv8C,EAA48C,cAAa,IAAz9C,EAA89C,aAAY,IAA1+C,EAA++C,kBAAiB,IAAhgD,EAAqgD,SAAQ,IAA7gD,EAAkhD,cAAa,IAA/hD,EAAoiD,mBAAkB,IAAtjD,EAA2jD,sBAAqB,IAAhlD,EAAqlD,sBAAqB,IAA1mD,EAA+mD,4BAA2B,IAA1oD,EAA+oD,kBAAiB,IAAhqD,EAAqqD,kBAAiB,IAAtrD,EAA2rD,qBAAoB,IAA/sD,EAAotD,qBAAoB,IAAxuD,EAA6uD,yBAAwB,IAArwD,EAA0wD,wBAAuB,IAAjyD,EAAsyD,uBAAsB,IAA5zD,EAAi0D,oBAAmB,IAAp1D,EAAy1D,qBAAoB,IAA72D,EAAk3D,WAAU,IAA53D,EAAi4D,YAAW,IAA54D,EAAi5D,YAAW,IAA55D,EAAi6D,kBAAiB,IAAl7D,EAAu7D,kBAAiB,IAAx8D,EAAV,EAAw9D,OAAM,EAAC,cAAa,IAAd,EAAmB,cAAa,IAAhC,EAAqC,aAAY,IAAjD,EAAsD,iBAAgB,IAAtE,EAA2E,uBAAsB,IAAjG,EAAsG,sBAAqB,IAA3H,EAAgI,sBAAqB,IAArJ,EAA0J,uBAAsB,IAAhL,EAAqL,WAAU,IAA/L,EAAoM,WAAU,IAA9M,EAAmN,uBAAsB,IAAzO,EAA8O,cAAa,IAA3P,EAAgQ,eAAc,IAA9Q,EAAmR,eAAc,IAAjS,EAAsS,eAAc,IAApT,EAAyT,cAAa,IAAtU,EAA2U,aAAY,IAAvV,EAA4V,cAAa,IAAzW,EAA8W,mBAAkB,IAAhY,EAAqY,mBAAkB,IAAvZ,EAA4Z,mBAAkB,IAA9a,EAAmb,WAAU,IAA7b,EAAkc,cAAa,IAA/c,EAAod,eAAc,IAAle,EAA99D,EAAs8E,MAAK,EAAC,QAAO,IAAR,EAAa,aAAY,KAAzB,EAA+B,iBAAgB,IAA/C,EAAoD,YAAW,KAA/D,EAAqE,YAAW,IAAhF,EAAqF,cAAa,KAAlG,EAAwG,YAAW,IAAnH,EAAwH,gBAAe,KAAvI,EAA6I,cAAa,KAA1J,EAAgK,aAAY,KAA5K,EAAkL,kBAAiB,KAAnM,EAAyM,SAAQ,KAAjN,EAAuN,aAAY,IAAnO,EAAwO,mBAAkB,IAA1P,EAA+P,oBAAmB,IAAlR,EAAuR,oBAAmB,IAA1S,EAA+S,cAAa,IAA5T,EAAiU,YAAW,IAA5U,EAAiV,eAAc,IAA/V,EAAoW,cAAa,IAAjX,EAAsX,kBAAiB,IAAvY,EAA4Y,qBAAoB,IAAha,EAAqa,qBAAoB,IAAzb,EAA8b,yBAAwB,IAAtd,EAA2d,wBAAuB,IAAlf,EAAuf,eAAc,IAArgB,EAA0gB,WAAU,IAAphB,EAAyhB,YAAW,IAApiB,EAAyiB,YAAW,IAApjB,EAAyjB,eAAc,IAAvkB,EAA4kB,cAAa,IAAzlB,EAA8lB,eAAc,IAA5mB,EAAinB,kBAAiB,IAAloB,EAAuoB,uBAAsB,IAA7pB,EAAkqB,oBAAmB,IAArrB,EAA0rB,qBAAoB,IAA9sB,EAAmtB,gBAAe,IAAluB,EAAuuB,mBAAkB,IAAzvB,EAA8vB,gBAAe,IAA7wB,EAAkxB,gBAAe,IAAjyB,EAAsyB,QAAO,IAA7yB,EAAkzB,gBAAe,IAAj0B,EAAs0B,mBAAkB,IAAx1B,EAA61B,cAAa,IAA12B,EAA+2B,WAAU,IAAz3B,EAA83B,cAAa,IAA34B,EAAg5B,iBAAgB,IAAh6B,EAAq6B,iBAAgB,IAAr7B,EAA07B,cAAa,IAAv8B,EAA48B,YAAW,IAAv9B,EAA49B,WAAU,IAAt+B,EAA2+B,kBAAiB,IAA5/B,EAA38E,EAAf;;;ACCA,4BAAe;AAAA,IAAA,SAAO,IAAI,MAAJ,CAAW,CAAX,EAAc,WAAd,KAA8B,IAAI,KAAJ,CAAU,CAAV,CAArC;AAAA,IAAA,CAAf;;8BCDe;AAAA,IAAA,SAAY,SAAS,KAAT,CAAe,oBAAf,MAAyC,IAArD;AAAA,IAAA,CAAf;;ICEe,SAAS,iBAAT,CAA2B,KAA3B,EAAkC;AAC/C,IAAA,SAAO,OAAO,IAAP,CAAY,KAAZ,EAAmB,IAAnB,CAAwB,UAAC,IAAD,EAAO,KAAP,EAAiB;AAC9C,IAAA,QAAI,mBAAmB,IAAnB,KAA4B,CAAC,mBAAmB,KAAnB,CAAjC,EAA4D;AAC1D,IAAA,aAAO,CAAC,CAAR;AACD,IAAA,KAFD,MAEO,IAAI,CAAC,mBAAmB,IAAnB,CAAD,IAA6B,mBAAmB,KAAnB,CAAjC,EAA4D;AACjE,IAAA,aAAO,CAAP;AACD,IAAA;AACD,IAAA,WAAO,CAAP;AACD,IAAA,GAPM,EAOJ,MAPI,CAOG,UAAC,WAAD,EAAc,IAAd,EAAuB;AAC/B,IAAA,gBAAY,IAAZ,IAAoB,MAAM,IAAN,CAApB;AACA,IAAA,WAAO,WAAP;AACD,IAAA,GAVM,EAUJ,EAVI,CAAP;AAWD,IAAA;;ICdc,SAAS,QAAT,CAAkB,QAAlB,EAA4B,KAA5B,EAAmC;AAChD,IAAA,MAAI,aAAa,UAAb,IAA2B,UAAU,QAAzC,EAAmD;AACjD,IAAA,WAAO,EAAE,UAAU,CAAE,gBAAF,EAAoB,QAApB,CAAZ,EAAP;AACD,IAAA;AACF,IAAA;;;ACHD,6BAAe,UAAC,QAAD,EAAW,KAAX;AAAA,IAAA,MAAkB,QAAlB,yDAA6B,UAAC,MAAD,EAAS,KAAT;AAAA,IAAA,WAAmB,SAAS,KAA5B;AAAA,IAAA,GAA7B;AAAA,IAAA,yCACZ,QADY,EACD,CAAE,UAAF,EAAc,OAAd,EAAuB,EAAvB,EAA4B,GAA5B,CAAgC;AAAA,IAAA,WAAU,SAAS,MAAT,EAAiB,KAAjB,CAAV;AAAA,IAAA,GAAhC,CADC;AAAA,IAAA,CAAf;;2BCDe,iBAAS;AACtB,IAAA,MAAI,MAAM,OAAN,CAAc,KAAd,CAAJ,EAA0B,QAAQ,MAAM,IAAN,CAAW,GAAX,CAAR;;AAE1B,IAAA,SAAO,MAAM,KAAN,CAAY,qBAAZ,MAAuC,IAA9C;AACD,IAAA,CAJD;;ICGe,SAAS,IAAT,CAAc,QAAd,EAAwB,KAAxB,EAA+B;AAC5C,IAAA,MAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,CAAC,gBAAgB,KAAhB,CAA9B,IAAwD,MAAM,OAAN,CAAc,OAAd,IAAyB,CAAC,CAAtF,EAAyF;AACvF,IAAA,WAAO,kBAAkB,QAAlB,EAA4B,KAA5B,EAAmC,UAAC,MAAD,EAAS,KAAT;AAAA,IAAA,aAAmB,MAAM,OAAN,CAAc,SAAd,EAAyB,SAAS,OAAlC,CAAnB;AAAA,IAAA,KAAnC,CAAP;AACD,IAAA;AACF,IAAA;;ICLD,IAAM,SAAS;AACb,IAAA,aAAW,IADE;AAEb,IAAA,cAAY,IAFC;AAGb,IAAA,QAAM,IAHO;AAIb,IAAA,YAAU;AAJG,IAAA,CAAf;;AAOA,IAAe,SAAS,MAAT,CAAgB,QAAhB,EAA0B,KAA1B,EAAiC;AAC9C,IAAA,MAAI,aAAa,QAAb,IAAyB,OAAO,KAAP,CAA7B,EAA4C;AAC1C,IAAA,WAAO,kBAAkB,QAAlB,EAA4B,KAA5B,CAAP;AACD,IAAA;AACF,IAAA;;ICbD,IAAMA,WAAS,EAAE,MAAM,IAAR,EAAc,eAAe,IAA7B,EAAf;;AAEA,IAAe,SAAS,IAAT,CAAc,QAAd,EAAwB,KAAxB,EAA+B;AAC5C,IAAA,MAAI,aAAa,SAAb,IAA0BA,SAAO,KAAP,CAA9B,EAA6C;AAC3C,IAAA,WAAO;AACL,IAAA,eAAS,CAAE,aAAF,EAAiB,UAAjB,EAA6B,SAAS,KAAT,GAAiB,KAA9C,EAAqD,aAAa,KAAlE,EAAyE,KAAzE;AADJ,IAAA,KAAP;AAGD,IAAA;AACF,IAAA;;ICND,IAAM,aAAa;AACjB,IAAA,aAAW,IADM;AAEjB,IAAA,YAAU,IAFO;AAGjB,IAAA,SAAO,IAHU;AAIjB,IAAA,UAAQ,IAJS;AAKjB,IAAA,eAAa,IALI;AAMjB,IAAA,YAAU,IANO;AAOjB,IAAA,aAAW;AAPM,IAAA,CAAnB;AASA,IAAA,IAAMA,WAAS;AACb,IAAA,iBAAe,IADF;AAEb,IAAA,iBAAe,IAFF;AAGb,IAAA,oBAAkB,IAHL;AAIb,IAAA,iBAAe,IAJF;AAKb,IAAA,oBAAkB;AALL,IAAA,CAAf;;AAQA,IAAe,SAAS,MAAT,CAAgB,QAAhB,EAA0B,KAA1B,EAAiC;AAC9C,IAAA,MAAI,WAAW,QAAX,KAAwBA,SAAO,KAAP,CAA5B,EAA2C;AACzC,IAAA,WAAO,kBAAkB,QAAlB,EAA4B,KAA5B,CAAP;AACD,IAAA;AACF,IAAA;;ICpBD,IAAMA,WAAS,qFAAf;;AAEA,IAAe,SAAS,QAAT,CAAkB,QAAlB,EAA4B,KAA5B,EAAmC;AAChD,IAAA,MAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,CAAC,gBAAgB,KAAhB,CAA9B,IAAwD,MAAM,KAAN,CAAYA,QAAZ,MAAwB,IAApF,EAA0F;AACxF,IAAA,WAAO,kBAAkB,QAAlB,EAA4B,KAA5B,CAAP;AACD,IAAA;AACF,IAAA;;;ACTD,IAAA;;AAEA,IAAA,IAAI,mBAAmB,QAAvB;AACA,IAAA,IAAI,YAAY,MAAhB;;AAEA,IAAA,SAAS,kBAAT,CAA4B,MAA5B,EAAoC;eACzB,OACF,OADE,CACM,gBADN,EACwB,KADxB,EAEF,WAFE,GAGF,OAHE,CAGM,SAHN,EAGiB,MAHjB,CAAP;;;AAMJ,IAAA,OAAO,OAAP,GAAiB,kBAAjB;;;;;ICPA,IAAMC,eAAa;AACjB,IAAA,cAAY,IADK;AAEjB,IAAA,sBAAoB,IAFH;AAGjB,IAAA,oBAAkB,IAHD;AAIjB,IAAA,4BAA0B;AAJT,IAAA,CAAnB;;AAOA,IAAe,SAAS,UAAT,CAAoB,QAApB,EAA8B,KAA9B,EAAqC;;AAElD,IAAA,MAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6BA,aAAW,QAAX,CAAjC,EAAuD;AAAA,IAAA;;AACrD,IAAA,QAAM,cAAc,YAAY,KAAZ,CAApB;AACA,IAAA,QAAM,eAAe,YAAY,KAAZ,CAAkB,+BAAlB,EAAmD,MAAnD,CAA0D;AAAA,IAAA,aAAS,MAAM,KAAN,CAAY,YAAZ,MAA8B,IAAvC;AAAA,IAAA,KAA1D,EAAuG,IAAvG,CAA4G,GAA5G,CAArB;;;AAGA,IAAA,QAAI,SAAS,OAAT,CAAiB,QAAjB,IAA6B,CAAC,CAAlC,EAAqC;AACnC,IAAA,6CAAW,QAAX,EAAsB,YAAtB;AACD,IAAA;;AAED,IAAA,0DACG,WAAW,iBAAiB,QAAjB,CADd,EAC2C,YAD3C,sCAEG,QAFH,EAEc,WAFd;AAID,IAAA;AACF,IAAA;;AAED,IAAA,SAAS,WAAT,CAAqB,KAArB,EAA4B;AAC1B,IAAA,MAAI,gBAAgB,KAAhB,CAAJ,EAA4B;AAC1B,IAAA,WAAO,KAAP;AACD,IAAA;;;AAGD,IAAA,MAAM,iBAAiB,MAAM,KAAN,CAAY,+BAAZ,CAAvB;;;;AAIA,IAAA,iBAAe,OAAf,CAAuB,UAAC,GAAD,EAAM,KAAN,EAAgB;AACrC,IAAA,mBAAe,KAAf,IAAwB,OAAO,IAAP,CAAY,WAAZ,EAAyB,MAAzB,CAAgC,UAAC,GAAD,EAAM,MAAN,EAAiB;AACvE,IAAA,UAAM,iBAAiB,MAAM,OAAO,WAAP,EAAN,GAA6B,GAApD;;AAEA,IAAA,aAAO,IAAP,CAAY,YAAY,MAAZ,CAAZ,EAAiC,OAAjC,CAAyC,gBAAQ;AAC/C,IAAA,YAAM,mBAAmB,mBAAmB,IAAnB,CAAzB;;AAEA,IAAA,YAAI,IAAI,OAAJ,CAAY,gBAAZ,IAAgC,CAAC,CAAjC,IAAsC,qBAAqB,OAA/D,EAAwE;;AAEtE,IAAA,gBAAM,IAAI,OAAJ,CAAY,gBAAZ,EAA8B,iBAAiB,gBAA/C,IAAmE,GAAnE,GAAyE,GAA/E;AACD,IAAA;AACF,IAAA,OAPD;AAQA,IAAA,aAAO,GAAP;AACD,IAAA,KAZuB,EAYrB,GAZqB,CAAxB;AAaD,IAAA,GAdD;;AAgBA,IAAA,SAAO,eAAe,IAAf,CAAoB,GAApB,CAAP;AACD,IAAA;;ICzDD,IAAM,oBAAoB;AACxB,IAAA,kBAAgB,YADQ;AAExB,IAAA,mBAAiB,SAFO;AAGxB,IAAA,gBAAc,OAHU;AAIxB,IAAA,cAAY;AAJY,IAAA,CAA1B;AAMA,IAAA,IAAM,mBAAmB;AACvB,IAAA,gBAAc,gBADS;AAEvB,IAAA,aAAW,iBAFY;AAGvB,IAAA,cAAY,aAHW;AAIvB,IAAA,kBAAgB,YAJO;AAKvB,IAAA,SAAO,aALgB;AAMvB,IAAA,YAAU,gBANa;AAOvB,IAAA,cAAY,gBAPW;AAQvB,IAAA,aAAW;AARY,IAAA,CAAzB;;AAWA,IAAe,SAAS,SAAT,CAAmB,QAAnB,EAA6B,KAA7B,EAAoC;AACjD,IAAA,MAAI,iBAAiB,QAAjB,CAAJ,EAAgC;AAC9B,IAAA,2CACG,iBAAiB,QAAjB,CADH,EACgC,kBAAkB,KAAlB,KAA4B,KAD5D;AAGD,IAAA;AACF,IAAA;;ICvBD,IAAMC,sBAAoB;AACxB,IAAA,kBAAgB,SADQ;AAExB,IAAA,mBAAiB,SAFO;AAGxB,IAAA,gBAAc,OAHU;AAIxB,IAAA,cAAY,KAJY;AAKxB,IAAA,kBAAgB,UALQ;AAMxB,IAAA,QAAM;AANkB,IAAA,CAA1B;;AASA,IAAA,IAAMC,qBAAmB;AACvB,IAAA,cAAY,gBADW;AAEvB,IAAA,kBAAgB,eAFO;AAGvB,IAAA,YAAU;AAHa,IAAA,CAAzB;;AAMA,IAAe,SAAS,UAAT,CAAoB,QAApB,EAA8B,KAA9B,EAAqC;AAClD,IAAA,MAAI,aAAa,eAAb,IAAgC,OAAO,KAAP,KAAiB,QAArD,EAA+D;AAC7D,IAAA,WAAO;AACL,IAAA,uBAAiB,MAAM,OAAN,CAAc,QAAd,IAA0B,CAAC,CAA3B,GAA+B,UAA/B,GAA4C,YADxD;AAEL,IAAA,0BAAoB,MAAM,OAAN,CAAc,SAAd,IAA2B,CAAC,CAA5B,GAAgC,SAAhC,GAA4C;AAF3D,IAAA,KAAP;AAID,IAAA;AACD,IAAA,MAAIA,mBAAiB,QAAjB,CAAJ,EAAgC;AAC9B,IAAA,2CACGA,mBAAiB,QAAjB,CADH,EACgCD,oBAAkB,KAAlB,KAA4B,KAD5D;AAGD,IAAA;AACF,IAAA;;ICZD,IAAME,YAAU,CACd,QADc,EAEd,IAFc,EAGd,MAHc,EAId,MAJc,EAKd,QALc,EAMd,UANc,EAOd,SAPc,EAQd,UARc,EASd,IATc,CAAhB;;;;;;;AAiBA,IAAe,SAAS,SAAT,CAAmB,MAAnB,EAA2B;AACxC,IAAA,SAAO,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,oBAAY;AACtC,IAAA,QAAM,QAAQ,OAAO,QAAP,CAAd;AACA,IAAA,QAAI,iBAAiB,MAAjB,IAA2B,CAAC,MAAM,OAAN,CAAc,KAAd,CAAhC,EAAsD;;AAEpD,IAAA,aAAO,QAAP,IAAmB,UAAU,KAAV,CAAnB;AACD,IAAA,KAHD,MAGO;AACL,IAAA,aAAO,IAAP,CAAYC,WAAZ,EAA8B,OAA9B,CAAsC,kBAAU;AAC9C,IAAA,YAAM,aAAaA,YAAiB,MAAjB,CAAnB;;AAEA,IAAA,YAAI,WAAW,QAAX,CAAJ,EAA0B;AACxB,IAAA,iBAAO,SAAS,iBAAiB,QAAjB,CAAhB,IAA8C,KAA9C;AACD,IAAA;AACF,IAAA,OAND;AAOD,IAAA;AACF,IAAA,GAdD;;AAgBA,IAAA,SAAO,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,oBAAY;AACtC,IAAA,OAAI,MAAJ,CAAW,OAAO,QAAP,CAAX,EAA6B,OAA7B,CAAqC,UAAC,KAAD,EAAQ,KAAR,EAAkB;;AAErD,IAAA,gBAAQ,OAAR,CAAgB;AAAA,IAAA,eAAUC,eAAa,MAAb,EAAqB,OAAO,QAAP,EAAiB,KAAjB,CAArB,CAAV;AAAA,IAAA,OAAhB;AACD,IAAA,KAHD;AAID,IAAA,GALD;;AAOA,IAAA,SAAO,kBAAkB,MAAlB,CAAP;AACD,IAAA;;AAED,IAAA,SAASA,cAAT,CAAsB,IAAtB,EAA0C;AAAA,IAAA,MAAd,MAAc,yDAAL,EAAK;;AACxC,IAAA,SAAO,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,oBAAY;AACtC,IAAA,QAAM,YAAY,KAAK,QAAL,CAAlB;AACA,IAAA,QAAI,MAAM,OAAN,CAAc,SAAd,CAAJ,EAA8B;AAC5B,IAAA,SAAI,MAAJ,CAAW,OAAO,QAAP,CAAX,EAA6B,OAA7B,CAAqC,iBAAS;AAC5C,IAAA,YAAM,aAAa,UAAU,OAAV,CAAkB,KAAlB,CAAnB;AACA,IAAA,YAAI,aAAa,CAAC,CAAlB,EAAqB;AACnB,IAAA,eAAK,QAAL,EAAe,MAAf,CAAsB,UAAtB,EAAkC,CAAlC;AACD,IAAA;AACD,IAAA,aAAK,QAAL,EAAe,IAAf,CAAoB,KAApB;AACD,IAAA,OAND;AAOD,IAAA,KARD,MAQO;AACL,IAAA,WAAK,QAAL,IAAiB,OAAO,QAAP,CAAjB;AACD,IAAA;AACF,IAAA,GAbD;AAcD,IAAA;;;;;;;;;ACpED,IAAA,CAAC,UAAU,IAAV,EAAgB,UAAhB,EAA4B;UACvB,OAAO,MAAP,IAAiB,WAAjB,IAAgC,OAAO,OAA3C,EAAoD,OAAO,OAAP,GAAiB,YAAjB,CAApD,KACK,IAAI,OAAO,MAAP,IAAiB,UAAjB,IAA+B,OAAO,GAA1C,EAA+C,OAAO,UAAP,EAA/C,KACA,KAAK,IAAL,IAAa,YAAb;KAHN,CAIC,QAJD,EAIW,YAAY;;;;;UAKlB,IAAI,IAAR;;eAES,MAAT,CAAgB,EAAhB,EAAoB;;iBAET,aAAT,CAAuB,KAAvB,EAA8B;cACxB,QAAQ,GAAG,KAAH,CAAS,KAAT,CAAZ;iBACQ,SAAS,MAAM,MAAN,GAAe,CAAxB,IAA6B,MAAM,CAAN,CAA9B,IAA2C,EAAlD;;;iBAGO,cAAT,CAAwB,KAAxB,EAA+B;cACzB,QAAQ,GAAG,KAAH,CAAS,KAAT,CAAZ;iBACQ,SAAS,MAAM,MAAN,GAAe,CAAxB,IAA6B,MAAM,CAAN,CAA9B,IAA2C,EAAlD;;;YAGE,YAAY,cAAc,qBAAd,EAAqC,WAArC,EAAhB;YACI,cAAc,gBAAgB,IAAhB,CAAqB,EAArB,CADlB;YAEI,UAAU,CAAC,WAAD,IAAgB,WAAW,IAAX,CAAgB,EAAhB,CAF9B;YAGI,cAAc,oBAAoB,IAApB,CAAyB,EAAzB,CAHlB;YAII,cAAc,CAAC,WAAD,IAAgB,kBAAkB,IAAlB,CAAuB,EAAvB,CAJlC;YAKI,WAAW,OAAO,IAAP,CAAY,EAAZ,CALf;YAMI,OAAO,QAAQ,IAAR,CAAa,EAAb,CANX;YAOI,WAAW,YAAY,IAAZ,CAAiB,EAAjB,CAPf;YAQI,QAAQ,SAAS,IAAT,CAAc,EAAd,CARZ;YASI,QAAQ,eAAe,IAAf,CAAoB,EAApB,CATZ;YAUI,eAAe,iBAAiB,IAAjB,CAAsB,EAAtB,CAVnB;YAWI,UAAU,CAAC,YAAD,IAAiB,WAAW,IAAX,CAAgB,EAAhB,CAX/B;YAYI,MAAM,CAAC,SAAD,IAAc,CAAC,IAAf,IAAuB,aAAa,IAAb,CAAkB,EAAlB,CAZjC;YAaI,QAAQ,CAAC,OAAD,IAAY,CAAC,QAAb,IAAyB,CAAC,KAA1B,IAAmC,CAAC,KAApC,IAA6C,SAAS,IAAT,CAAc,EAAd,CAbzD;YAcI,cAAc,cAAc,sBAAd,CAdlB;YAeI,oBAAoB,cAAc,yBAAd,CAfxB;YAgBI,SAAS,UAAU,IAAV,CAAe,EAAf,CAhBb;YAiBI,SAAS,CAAC,MAAD,IAAW,YAAY,IAAZ,CAAiB,EAAjB,CAjBxB;YAkBI,OAAO,QAAQ,IAAR,CAAa,EAAb,CAlBX;YAmBI,MAnBJ;;YAqBI,mBAAmB,IAAnB,CAAwB,EAAxB,CAAJ,EAAiC;mBACtB;kBACD,OADC;mBAEA,CAFA;qBAGE,qBAAqB,cAAc,yCAAd;WAHhC;SADF,MAOK,IAAI,SAAS,IAAT,CAAc,EAAd,CAAJ,EAAuB;mBACjB;kBACD,aADC;mBAEE,CAFF;qBAGI,qBAAqB,cAAc,+BAAd;WAHlC;SADG,MAOA,IAAI,aAAa,IAAb,CAAkB,EAAlB,CAAJ,EAA2B;mBACrB;kBACD,gBADC;2BAEQ,CAFR;qBAGE,qBAAqB,cAAc,mCAAd;WAHhC;SADG,MAOA,IAAI,aAAa,IAAb,CAAkB,EAAlB,CAAJ,EAA2B;mBACrB;kBACC,YADD;uBAEM,CAFN;qBAGI,cAAc,qCAAd;WAHb;SADG,MAOA,IAAI,SAAS,IAAT,CAAc,EAAd,CAAJ,EAAuB;mBACjB;kBACD,SADC;qBAEI,CAFJ;qBAGI,cAAc,iCAAd;WAHb;SADG,MAOA,IAAI,YAAY,IAAZ,CAAiB,EAAjB,CAAJ,EAA0B;mBACpB;kBACD,UADC;sBAEK,CAFL;qBAGI,cAAc,oCAAd;WAHb;SADG,MAOA,IAAI,UAAU,IAAV,CAAe,EAAf,CAAJ,EAAwB;mBAClB;kBACD,QADC;oBAEG,CAFH;qBAGI,cAAc,kCAAd;WAHb;SADG,MAOA,IAAI,YAAY,IAAZ,CAAiB,EAAjB,CAAJ,EAA0B;mBACpB;kBACD,UADC;sBAEK,CAFL;qBAGI,cAAc,oCAAd;WAHb;SADG,MAOA,IAAI,YAAY,IAAZ,CAAiB,EAAjB,CAAJ,EAA0B;mBACpB;kBACD,UADC;qBAEI,CAFJ;qBAGI,cAAc,oCAAd;WAHb;SADG,MAOA,IAAI,YAAJ,EAAkB;mBACZ;kBACD,eADC;0BAEO;WAFhB;cAII,WAAJ,EAAiB;mBACR,MAAP,GAAgB,CAAhB;mBACO,OAAP,GAAiB,WAAjB;WAFF,MAIK;mBACI,IAAP,GAAc,CAAd;mBACO,OAAP,GAAiB,cAAc,0BAAd,CAAjB;;SAXC,MAcA,IAAI,gBAAgB,IAAhB,CAAqB,EAArB,CAAJ,EAA8B;mBACxB;kBACD,mBADC;kBAED,CAFC;qBAGE,cAAc,6BAAd;WAHX;SADG,MAME,IAAI,QAAJ,EAAc;mBACV;kBACD,QADC;sBAEG,CAFH;wBAGK,CAHL;oBAIC,CAJD;qBAKE,cAAc,uCAAd;WALX;SADK,MAQA,IAAI,kBAAkB,IAAlB,CAAuB,EAAvB,CAAJ,EAAgC;mBAC5B;kBACD,gBADC;oBAEC,CAFD;qBAGE;WAHX;SADK,MAOF,IAAI,WAAW,IAAX,CAAgB,EAAhB,CAAJ,EAAyB;mBACnB;kBACD,SADC;qBAEI,CAFJ;qBAGI,cAAc,yBAAd,KAA4C;WAHzD;SADG,MAOA,IAAI,QAAJ,EAAc;mBACR;kBACD,UADC;sBAEG,CAFH;qBAGE,cAAc,oCAAd;WAHX;SADG,MAOA,IAAI,eAAe,IAAf,CAAoB,EAApB,CAAJ,EAA6B;mBACvB;kBACD,WADC;uBAEI,CAFJ;qBAGE,cAAc,2BAAd;WAHX;SADG,MAOA,IAAI,2BAA2B,IAA3B,CAAgC,EAAhC,CAAJ,EAAyC;mBACnC;kBACD,SADC;qBAEE,CAFF;qBAGE,cAAc,gDAAd;WAHX;cAKI,wCAAwC,IAAxC,CAA6C,EAA7C,CAAJ,EAAsD;mBAC7C,SAAP,GAAmB,CAAnB;;SAPC,MAUA,IAAI,IAAJ,EAAU;mBACH;kBACF,aADE;kBAEF,CAFE;qBAGE,cAAc,sBAAd;WAHZ;SADG,MAOA,IAAI,WAAW,IAAX,CAAgB,EAAhB,CAAJ,EAAyB;mBACnB;kBACD,WADC;qBAEE,CAFF;qBAGE,cAAc,2BAAd;WAHX;SADG,MAOA,IAAI,YAAY,IAAZ,CAAiB,EAAjB,CAAJ,EAA0B;mBACpB;kBACD,UADC;oBAEG,CAFH;qBAGI,cAAc,0BAAd;WAHb;SADG,MAOA,IAAI,sBAAsB,IAAtB,CAA2B,EAA3B,KAAkC,eAAe,IAAf,CAAoB,EAApB,CAAtC,EAA+D;mBACzD;kBACD,YADC;wBAEK,CAFL;qBAGE,qBAAqB,cAAc,iCAAd;WAHhC;SADG,MAOA,IAAI,KAAJ,EAAW;mBACL;kBACD,OADC;mBAEA,CAFA;qBAGE,qBAAqB,cAAc,mCAAd;WAHhC;wBAKc,IAAd,CAAmB,EAAnB,MAA2B,OAAO,QAAP,GAAkB,CAA7C;SANG,MAQA,IAAI,QAAQ,IAAR,CAAa,EAAb,CAAJ,EAAsB;mBAChB;kBACD,MADC;kBAED,CAFC;qBAGE,cAAc,wBAAd;WAHX;SADG,MAOA,IAAI,KAAJ,EAAW;mBACL;kBACD,OADC;mBAEA,CAFA;qBAGE,cAAc,sCAAd,KAAyD;WAHpE;SADG,MAOA,IAAI,YAAY,IAAZ,CAAiB,EAAjB,CAAJ,EAA0B;mBACpB;kBACD,UADC;sBAEK,CAFL;qBAGI,cAAc,oCAAd,KAAuD;WAHpE;SADG,MAOA,IAAI,YAAY,IAAZ,CAAiB,EAAjB,CAAJ,EAA0B;mBACpB;kBACD,UADC;sBAEK,CAFL;qBAGI,cAAc,oCAAd,KAAuD;WAHpE;SADG,MAOA,IAAI,qBAAqB,IAArB,CAA0B,EAA1B,CAAJ,EAAmC;mBAC7B;kBACD,QADC;oBAEG,CAFH;qBAGI,cAAc,uCAAd;WAHb;SADG,MAOA,IAAI,OAAJ,EAAa;mBACP;kBACD,SADC;qBAEI;WAFb;SADG,MAMA,IAAI,sBAAsB,IAAtB,CAA2B,EAA3B,CAAJ,EAAoC;mBAC9B;kBACD,QADC;oBAEC;WAFV;cAII,iBAAJ,EAAuB;mBACd,OAAP,GAAiB,iBAAjB;;SANC,MASA,IAAI,SAAJ,EAAe;mBACT;kBACA,aAAa,QAAb,GAAwB,QAAxB,GAAmC,aAAa,MAAb,GAAsB,MAAtB,GAA+B;WAD3E;;cAII,iBAAJ,EAAuB;mBACd,OAAP,GAAiB,iBAAjB;;SANC,MASA,IAAG,aAAa,IAAb,CAAkB,EAAlB,CAAH,EAA0B;mBACpB;kBACD,WADC;uBAEI,CAFJ;qBAGE,cAAc,0BAAd,KAA6C;WAHxD;SADG,MAOA;mBACM;kBACD,cAAc,cAAd,CADC;qBAEE,eAAe,cAAf;WAFX;;;;YAOE,CAAC,OAAO,MAAR,IAAkB,kBAAkB,IAAlB,CAAuB,EAAvB,CAAtB,EAAkD;cAC5C,2BAA2B,IAA3B,CAAgC,EAAhC,CAAJ,EAAyC;mBAChC,IAAP,GAAc,OAAO,IAAP,IAAe,OAA7B;mBACO,KAAP,GAAe,CAAf;WAFF,MAGO;mBACE,IAAP,GAAc,OAAO,IAAP,IAAe,QAA7B;mBACO,MAAP,GAAgB,CAAhB;;cAEE,CAAC,OAAO,OAAR,IAAmB,iBAAvB,EAA0C;mBACjC,OAAP,GAAiB,iBAAjB;;SATJ,MAWO,IAAI,CAAC,OAAO,KAAR,IAAiB,WAAW,IAAX,CAAgB,EAAhB,CAArB,EAA0C;iBACxC,IAAP,GAAc,OAAO,IAAP,IAAe,OAA7B;iBACO,KAAP,GAAe,CAAf;iBACO,OAAP,GAAiB,OAAO,OAAP,IAAkB,cAAc,uBAAd,CAAnC;;;;YAIE,CAAC,OAAO,MAAR,KAAmB,WAAW,OAAO,IAArC,CAAJ,EAAgD;iBACvC,OAAP,GAAiB,CAAjB;SADF,MAEO,IAAI,SAAJ,EAAe;iBACb,SAAP,IAAoB,CAApB;iBACO,GAAP,GAAa,CAAb;SAFK,MAGA,IAAI,GAAJ,EAAS;iBACP,GAAP,GAAa,CAAb;SADK,MAEA,IAAI,IAAJ,EAAU;iBACR,IAAP,GAAc,CAAd;SADK,MAEA,IAAI,OAAJ,EAAa;iBACX,OAAP,GAAiB,CAAjB;SADK,MAEA,IAAI,KAAJ,EAAW;iBACT,KAAP,GAAe,CAAf;;;;YAIE,YAAY,EAAhB;YACI,OAAO,YAAX,EAAyB;sBACX,cAAc,wCAAd,CAAZ;SADF,MAEO,IAAI,SAAJ,EAAe;sBACR,cAAc,oCAAd,CAAZ;sBACY,UAAU,OAAV,CAAkB,QAAlB,EAA4B,GAA5B,CAAZ;SAFK,MAGA,IAAI,OAAJ,EAAa;sBACN,cAAc,6BAAd,CAAZ;SADK,MAEA,IAAI,OAAO,KAAX,EAAkB;sBACX,cAAc,+BAAd,CAAZ;SADK,MAEA,IAAI,OAAO,UAAX,EAAuB;sBAChB,cAAc,iCAAd,CAAZ;SADK,MAEA,IAAI,OAAO,IAAX,EAAiB;sBACV,cAAc,sBAAd,CAAZ;SADK,MAEA,IAAI,OAAO,KAAX,EAAkB;sBACX,cAAc,2BAAd,CAAZ;;YAEE,SAAJ,EAAe;iBACN,SAAP,GAAmB,SAAnB;;;;YAIE,iBAAiB,UAAU,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAArB;YAEK,UACA,WADA,IAEA,aAAa,MAFb,IAGC,YAAY,kBAAkB,CAAlB,IAAwB,kBAAkB,CAAlB,IAAuB,CAAC,MAA5D,CAHD,IAIA,OAAO,IALZ,EAME;iBACO,MAAP,GAAgB,CAAhB;SAPF,MAQO,IACF,UACA,aAAa,QADb,IAEA,aAAa,MAFb,IAGA,OAHA,IAIA,WAJA,IAKA,OAAO,UALP,IAMA,OAAO,KANP,IAOA,OAAO,IARL,EASL;iBACO,MAAP,GAAgB,CAAhB;;;;;YAKE,OAAO,MAAP,IACC,OAAO,IAAP,IAAe,OAAO,OAAP,IAAkB,EADlC,IAEC,OAAO,aAAP,IAAwB,OAAO,OAAP,IAAkB,EAF3C,IAGD,OAAO,OAAP,IAAkB,OAAO,OAAP,IAAkB,GAHnC,IAIC,OAAO,MAAP,IAAiB,OAAO,OAAP,IAAkB,EAJpC,IAKC,OAAO,OAAP,IAAkB,OAAO,OAAP,IAAkB,IALrC,IAMC,OAAO,MAAP,IAAiB,OAAO,OAAP,IAAkB,CANpC,IAOC,OAAO,KAAP,IAAgB,OAAO,OAAP,IAAkB,IAPnC,IAQC,OAAO,GAAP,IAAc,OAAO,SAArB,IAAkC,OAAO,SAAP,CAAiB,KAAjB,CAAuB,GAAvB,EAA4B,CAA5B,KAAkC,CARrE,IASC,OAAO,UAAP,IAAqB,OAAO,OAAP,IAAkB,IATxC,IAUI,OAAO,QAAP,IAAmB,OAAO,OAAP,IAAkB,EAV7C,EAWM;iBACG,CAAP,GAAW,CAAX;SAZF,MAcK,IAAK,OAAO,IAAP,IAAe,OAAO,OAAP,GAAiB,EAAjC,IACJ,OAAO,MAAP,IAAiB,OAAO,OAAP,GAAiB,EAD9B,IAEJ,OAAO,OAAP,IAAkB,OAAO,OAAP,GAAiB,IAF/B,IAGJ,OAAO,MAAP,IAAiB,OAAO,OAAP,GAAiB,CAH9B,IAIJ,OAAO,KAAP,IAAgB,OAAO,OAAP,GAAiB,IAJ7B,IAKJ,OAAO,GAAP,IAAc,OAAO,SAArB,IAAkC,OAAO,SAAP,CAAiB,KAAjB,CAAuB,GAAvB,EAA4B,CAA5B,IAAiC,CAL/D,IAMD,OAAO,QAAP,IAAmB,OAAO,OAAP,GAAiB,EANvC,EAOC;iBACG,CAAP,GAAW,CAAX;SARG,MASE,OAAO,CAAP,GAAW,CAAX;;eAEA,MAAP;;;UAGE,SAAS,OAAO,OAAO,SAAP,KAAqB,WAArB,GAAmC,UAAU,SAA7C,GAAyD,EAAhE,CAAb;;aAEO,IAAP,GAAc,UAAU,WAAV,EAAuB;aAC9B,IAAI,IAAI,CAAb,EAAgB,IAAI,YAAY,MAAhC,EAAwC,EAAE,CAA1C,EAA6C;cACvC,cAAc,YAAY,CAAZ,CAAlB;cACI,OAAO,WAAP,KAAsB,QAA1B,EAAoC;gBAC9B,eAAe,MAAnB,EAA2B;qBAClB,IAAP;;;;eAIC,KAAP;OATF;;;;;;;;;;;eAqBS,mBAAT,CAA6B,OAA7B,EAAsC;eAC3B,QAAQ,KAAR,CAAc,GAAd,EAAmB,MAA1B;;;;;;;;;;eAUK,GAAT,CAAa,GAAb,EAAkB,QAAlB,EAA4B;YACtB,SAAS,EAAb;YAAiB,CAAjB;YACI,MAAM,SAAN,CAAgB,GAApB,EAAyB;iBAChB,MAAM,SAAN,CAAgB,GAAhB,CAAoB,IAApB,CAAyB,GAAzB,EAA8B,QAA9B,CAAP;;aAEG,IAAI,CAAT,EAAY,IAAI,IAAI,MAApB,EAA4B,GAA5B,EAAiC;mBACtB,SAAS,IAAI,CAAJ,CAAT,CAAT;;eAEK,MAAP;;;;;;;;;;;;;;;eAeO,eAAT,CAAyB,QAAzB,EAAmC;;YAE3B,YAAY,KAAK,GAAL,CAAS,oBAAoB,SAAS,CAAT,CAApB,CAAT,EAA2C,oBAAoB,SAAS,CAAT,CAApB,CAA3C,CAAhB;YACI,SAAS,IAAI,QAAJ,EAAc,UAAU,OAAV,EAAmB;cACxC,QAAQ,YAAY,oBAAoB,OAApB,CAAxB;;;oBAGU,UAAU,IAAI,KAAJ,CAAU,QAAQ,CAAlB,EAAqB,IAArB,CAA0B,IAA1B,CAApB;;;iBAGO,IAAI,QAAQ,KAAR,CAAc,GAAd,CAAJ,EAAwB,UAAU,KAAV,EAAiB;mBACvC,IAAI,KAAJ,CAAU,KAAK,MAAM,MAArB,EAA6B,IAA7B,CAAkC,GAAlC,IAAyC,KAAhD;WADK,EAEJ,OAFI,EAAP;SAPW,CAAb;;;eAaO,EAAE,SAAF,IAAe,CAAtB,EAAyB;;cAEjB,OAAO,CAAP,EAAU,SAAV,IAAuB,OAAO,CAAP,EAAU,SAAV,CAA3B,EAAiD;mBACtC,CAAP;WADJ,MAGK,IAAI,OAAO,CAAP,EAAU,SAAV,MAAyB,OAAO,CAAP,EAAU,SAAV,CAA7B,EAAmD;gBAChD,cAAc,CAAlB,EAAqB;;qBAEV,CAAP;;WAHH,MAMA;mBACM,CAAC,CAAR;;;;;;;;;;;;;;;;;;;;;;;eAuBH,oBAAT,CAA8B,WAA9B,EAA2C,UAA3C,EAAuD,EAAvD,EAA2D;YACnD,UAAU,MAAd;;;YAGI,OAAO,UAAP,KAAsB,QAA1B,EAAoC;eAC7B,UAAL;uBACa,KAAK,CAAlB;;;YAGE,eAAe,KAAK,CAAxB,EAA4B;uBACb,KAAb;;YAEE,EAAJ,EAAQ;oBACI,OAAO,EAAP,CAAV;;;YAGE,UAAU,KAAK,QAAQ,OAA3B;aACK,IAAI,OAAT,IAAoB,WAApB,EAAiC;cACzB,YAAY,cAAZ,CAA2B,OAA3B,CAAJ,EAAyC;gBACjC,QAAQ,OAAR,CAAJ,EAAsB;;kBAEd,gBAAgB,CAAC,OAAD,EAAU,YAAY,OAAZ,CAAV,CAAhB,IAAmD,CAAvD,EAA0D;uBAC/C,IAAP;;;;;eAKT,UAAP;;;;;;;;;;eAUK,KAAT,CAAe,WAAf,EAA4B,UAA5B,EAAwC;eAC/B,CAAC,qBAAqB,WAArB,EAAkC,UAAlC,CAAR;;;aAGK,oBAAP,GAA8B,oBAA9B;aACO,eAAP,GAAyB,eAAzB;aACO,KAAP,GAAe,KAAf;;;;;;;aAOO,OAAP,GAAiB,MAAjB;;aAEO,MAAP;KAviBD,CAAD;;;;;ICLA,IAAM,iBAAiB;AACrB,IAAA,UAAQ,CAAE,QAAF,EAAY,QAAZ,EAAsB,KAAtB,EAA6B,SAA7B,EAAwC,SAAxC,EAAmD,OAAnD,EAA4D,OAA5D,EAAqE,YAArE,EAAmF,MAAnF,EAA2F,OAA3F,EAAoG,UAApG,EAAgH,SAAhH,CADa;AAErB,IAAA,OAAK,CAAE,SAAF,EAAa,WAAb,EAA0B,UAA1B,CAFgB;AAGrB,IAAA,MAAI,CAAE,MAAF,EAAU,QAAV;AAHiB,IAAA,CAAvB;AAKA,IAAA,IAAM,WAAW;AACf,IAAA,UAAQ,CAAE,CAAE,QAAF,CAAF,EAAgB,CAAE,UAAF,CAAhB,CADO;AAEf,IAAA,UAAQ,CAAE,CAAE,QAAF,CAAF,CAFO;AAGf,IAAA,WAAS,CAAE,CAAE,SAAF,CAAF,CAHM;AAIf,IAAA,QAAM,CAAE,CAAE,QAAF,CAAF,CAJS;AAKf,IAAA,SAAO,CAAE,CAAE,OAAF,CAAF,EAAe,CAAE,SAAF,CAAf,CALQ;AAMf,IAAA,WAAS,CAAE,CAAE,KAAF,EAAS,QAAT,CAAF,EAAuB,CAAE,KAAF,EAAS,QAAT,CAAvB,CANM;AAOf,IAAA,MAAI,CAAE,CAAE,MAAF,CAAF,CAPW;AAQf,IAAA,WAAS,CAAE,CAAE,OAAF,EAAW,QAAX,CAAF,EAAyB,CAAE,OAAF,EAAW,QAAX,CAAzB,CARM;AASf,IAAA,UAAQ,CAAE,CAAE,SAAF,EAAa,QAAb,CAAF,EAA2B,CAAE,SAAF,EAAa,QAAb,CAA3B,CATO;AAUf,IAAA,WAAS,CAAE,CAAE,SAAF,EAAa,QAAb,CAAF,EAA2B,CAAE,SAAF,EAAa,QAAb,CAA3B;AAVM,IAAA,CAAjB;;AAaA,IAAA,IAAM,gBAAgB,SAAhB,aAAgB,OAAQ;AAC5B,IAAA,MAAI,KAAK,OAAT,EAAkB;AAChB,IAAA,WAAO,SAAP;AACD,IAAA;AACD,IAAA,MAAI,OAAO,EAAX;;AAEA,IAAA,SAAO,IAAP,CAAY,QAAZ,EAAsB,OAAtB,CAA8B,mBAAW;AACvC,IAAA,aAAS,OAAT,EAAkB,OAAlB,CAA0B,qBAAa;AACrC,IAAA,UAAI,QAAQ,CAAZ;AACA,IAAA,gBAAU,OAAV,CAAkB,kBAAU;AAC1B,IAAA,YAAI,KAAK,MAAL,CAAJ,EAAkB;AAChB,IAAA,mBAAS,CAAT;AACD,IAAA;AACF,IAAA,OAJD;AAKA,IAAA,UAAI,UAAU,MAAV,KAAqB,KAAzB,EAAgC;AAC9B,IAAA,eAAO,OAAP;AACD,IAAA;AACF,IAAA,KAVD;AAWD,IAAA,GAZD;;AAcA,IAAA,SAAO,IAAP;AACD,IAAA,CArBD;;;;;;;AA4BA,iCAAe,qBAAa;AAC1B,IAAA,MAAI,CAAC,SAAL,EAAgB;AACd,IAAA,WAAO,KAAP;AACD,IAAA;AACD,IAAA,MAAM,OAAOC,SAAO,OAAP,CAAe,SAAf,CAAb;;AAEA,IAAA,SAAO,IAAP,CAAY,cAAZ,EAA4B,OAA5B,CAAoC,kBAAU;AAC5C,IAAA,mBAAe,MAAf,EAAuB,OAAvB,CAA+B,mBAAW;AACxC,IAAA,UAAI,KAAK,OAAL,CAAJ,EAAmB;AACjB,IAAA,aAAK,MAAL,GAAc;AACZ,IAAA,kBAAQ,MADI;AAEZ,IAAA,eAAK,MAAM,OAAO,WAAP,EAAN,GAA6B;AAFtB,IAAA,SAAd;AAID,IAAA;AACF,IAAA,KAPD;AAQD,IAAA,GATD;;AAWA,IAAA,OAAK,OAAL,GAAe,cAAc,IAAd,CAAf;;;AAGA,IAAA,OAAK,OAAL,GAAe,KAAK,OAAL,GAAe,WAAW,KAAK,OAAhB,CAAf,GAA0C,SAAS,WAAW,KAAK,SAAhB,CAAT,EAAqC,EAArC,CAAzD;AACA,IAAA,OAAK,SAAL,GAAiB,WAAW,KAAK,SAAhB,CAAjB;;;;;;AAOA,IAAA,MAAI,KAAK,OAAL,KAAiB,SAAjB,IAA8B,KAAK,OAAL,GAAe,KAAK,SAAtD,EAAiE;AAC/D,IAAA,SAAK,OAAL,GAAe,KAAK,SAApB;AACA,IAAA,SAAK,MAAL,GAAc,IAAd;AACD,IAAA;;;;AAKD,IAAA,MAAI,KAAK,OAAL,KAAiB,SAAjB,IAA8B,KAAK,MAAnC,IAA6C,KAAK,OAAL,GAAe,EAAhE,EAAoE;AAClE,IAAA,SAAK,OAAL,GAAe,SAAf;AACD,IAAA;;;;;AAKD,IAAA,MAAI,KAAK,OAAL,KAAiB,SAAjB,IAA8B,KAAK,SAAL,GAAiB,CAAnD,EAAsD;AACpD,IAAA,SAAK,OAAL,GAAe,KAAK,SAApB;AACD,IAAA;;AAED,IAAA,SAAO,IAAP;AACD,IAAA,CAhDD;;gCC/Ce,gBAAkC;AAAA,IAAA,MAA/B,OAA+B,QAA/B,OAA+B;AAAA,IAAA,MAAtB,OAAsB,QAAtB,OAAsB;AAAA,IAAA,MAAb,MAAa,QAAb,MAAa;;AAC/C,IAAA,MAAI,oBAAoB,WAAxB;;AAEA,IAAA,MACE,YAAY,QAAZ,IAAwB,UAAU,EAAlC,IACA,CAAC,YAAY,QAAZ,IAAwB,YAAY,SAArC,KAAmD,UAAU,CAD7D,IAEA,YAAY,OAAZ,IAAuB,UAAU,EAFjC,IAGA,YAAY,SAAZ,IAAyB,WAAW,GAHpC,IAIA,YAAY,QALd,EAME;AACA,IAAA,wBAAoB,OAAO,GAAP,GAAa,iBAAjC;AACD,IAAA;AACD,IAAA,SAAO,iBAAP;AACD,IAAA,CAbD;;wBCAe,EAAC,UAAS,EAAC,aAAY,EAAb,EAAgB,mBAAkB,EAAlC,EAAqC,oBAAmB,EAAxD,EAA2D,oBAAmB,EAA9E,EAAiF,sBAAqB,EAAtG,EAAyG,eAAc,EAAvH,EAA0H,qBAAoB,EAA9I,EAAiJ,kBAAiB,EAAlK,EAAqK,oBAAmB,EAAxL,EAA2L,aAAY,EAAvM,EAA0M,kBAAiB,EAA3N,EAA8N,sBAAqB,EAAnP,EAAsP,qBAAoB,EAA1Q,EAA6Q,qBAAoB,EAAjS,EAAoS,2BAA0B,EAA9T,EAAiU,iBAAgB,EAAjV,EAAoV,sBAAqB,EAAzW,EAA4W,2BAA0B,EAAtY,EAAyY,cAAa,EAAtZ,EAAyZ,cAAa,EAAta,EAAya,eAAc,EAAvb,EAA0b,wBAAuB,EAAjd,EAAod,gBAAe,EAAne,EAAse,qBAAoB,EAA1f,EAA6f,qBAAoB,EAAjhB,EAAohB,sBAAqB,EAAziB,EAA4iB,YAAW,EAAvjB,EAA0jB,aAAY,EAAtkB,EAAykB,YAAW,EAAplB,EAAulB,cAAa,EAApmB,EAAumB,gBAAe,EAAtnB,EAAynB,YAAW,EAApoB,EAAuoB,cAAa,EAAppB,EAAupB,YAAW,EAAlqB,EAAqqB,iBAAgB,EAArrB,EAAwrB,QAAO,EAA/rB,EAAksB,oBAAmB,EAArtB,EAAwtB,kBAAiB,EAAzuB,EAA4uB,mBAAkB,EAA9vB,EAAiwB,mBAAkB,EAAnxB,EAAsxB,oBAAmB,EAAzyB,EAA4yB,oBAAmB,EAA/zB,EAAk0B,cAAa,EAA/0B,EAAk1B,YAAW,EAA71B,EAAg2B,uBAAsB,EAAt3B,EAAy3B,sBAAqB,EAA94B,EAAi5B,sBAAqB,EAAt6B,EAAy6B,uBAAsB,EAA/7B,EAAk8B,UAAS,EAA38B,EAA88B,uBAAsB,EAAp+B,EAAu+B,cAAa,EAAp/B,EAAu/B,eAAc,EAArgC,EAAwgC,eAAc,EAAthC,EAAyhC,eAAc,EAAviC,EAA0iC,cAAa,EAAvjC,EAA0jC,aAAY,EAAtkC,EAAykC,cAAa,EAAtlC,EAAylC,mBAAkB,EAA3mC,EAA8mC,mBAAkB,EAAhoC,EAAmoC,mBAAkB,EAArpC,EAAwpC,WAAU,EAAlqC,EAAqqC,cAAa,EAAlrC,EAAqrC,eAAc,EAAnsC,EAAV,EAAitC,UAAS,EAAC,QAAO,CAAR,EAAU,aAAY,CAAtB,EAAwB,iBAAgB,CAAxC,EAA0C,YAAW,CAArD,EAAuD,YAAW,CAAlE,EAAoE,cAAa,CAAjF,EAAmF,YAAW,CAA9F,EAAgG,gBAAe,CAA/G,EAAiH,cAAa,CAA9H,EAAgI,aAAY,CAA5I,EAA8I,kBAAiB,CAA/J,EAAiK,SAAQ,CAAzK,EAA2K,cAAa,CAAxL,EAA0L,mBAAkB,CAA5M,EAA8M,sBAAqB,CAAnO,EAAqO,sBAAqB,CAA1P,EAA4P,4BAA2B,CAAvR,EAAyR,aAAY,CAArS,EAAuS,mBAAkB,CAAzT,EAA2T,oBAAmB,CAA9U,EAAgV,oBAAmB,CAAnW,EAAqW,sBAAqB,CAA1X,EAA4X,eAAc,CAA1Y,EAA4Y,qBAAoB,CAAha,EAAka,kBAAiB,CAAnb,EAAqb,oBAAmB,CAAxc,EAA0c,aAAY,CAAtd,EAAwd,kBAAiB,CAAze,EAA2e,sBAAqB,CAAhgB,EAAkgB,qBAAoB,CAAthB,EAAwhB,qBAAoB,CAA5iB,EAA8iB,2BAA0B,CAAxkB,EAA0kB,iBAAgB,CAA1lB,EAA4lB,sBAAqB,CAAjnB,EAAmnB,2BAA0B,CAA7oB,EAA+oB,cAAa,EAA5pB,EAA+pB,cAAa,EAA5qB,EAA+qB,kBAAiB,EAAhsB,EAAmsB,eAAc,CAAjtB,EAAmtB,kBAAiB,EAApuB,EAAuuB,qBAAoB,EAA3vB,EAA8vB,qBAAoB,EAAlxB,EAAqxB,yBAAwB,EAA7yB,EAAgzB,wBAAuB,EAAv0B,EAA00B,wBAAuB,CAAj2B,EAAm2B,gBAAe,CAAl3B,EAAo3B,qBAAoB,CAAx4B,EAA04B,qBAAoB,CAA95B,EAAg6B,sBAAqB,EAAr7B,EAAw7B,YAAW,EAAn8B,EAAs8B,aAAY,EAAl9B,EAAq9B,YAAW,EAAh+B,EAAm+B,cAAa,EAAh/B,EAAm/B,gBAAe,EAAlgC,EAAqgC,YAAW,EAAhhC,EAAmhC,cAAa,EAAhiC,EAAmiC,YAAW,EAA9iC,EAAijC,iBAAgB,EAAjkC,EAAokC,QAAO,EAA3kC,EAA8kC,oBAAmB,EAAjmC,EAAomC,kBAAiB,EAArnC,EAAwnC,mBAAkB,EAA1oC,EAA6oC,mBAAkB,EAA/pC,EAAkqC,oBAAmB,EAArrC,EAAwrC,oBAAmB,EAA3sC,EAA8sC,cAAa,EAA3tC,EAA8tC,YAAW,EAAzuC,EAA4uC,uBAAsB,EAAlwC,EAAqwC,sBAAqB,EAA1xC,EAA6xC,sBAAqB,EAAlzC,EAAqzC,uBAAsB,EAA30C,EAA80C,uBAAsB,EAAp2C,EAAu2C,oBAAmB,EAA13C,EAA63C,qBAAoB,EAAj5C,EAAo5C,UAAS,CAA75C,EAA+5C,WAAU,EAAz6C,EAA46C,YAAW,EAAv7C,EAA07C,YAAW,EAAr8C,EAAw8C,eAAc,CAAt9C,EAAw9C,cAAa,CAAr+C,EAAu+C,eAAc,CAAr/C,EAAu/C,kBAAiB,EAAxgD,EAA2gD,eAAc,CAAzhD,EAA2hD,cAAa,CAAxiD,EAA0iD,aAAY,CAAtjD,EAAwjD,cAAa,CAArkD,EAAukD,mBAAkB,CAAzlD,EAA2lD,mBAAkB,CAA7mD,EAA+mD,mBAAkB,CAAjoD,EAAmoD,WAAU,CAA7oD,EAA+oD,cAAa,CAA5pD,EAA8pD,eAAc,CAA5qD,EAA1tC,EAAy4F,WAAU,EAAC,cAAa,EAAd,EAAiB,cAAa,EAA9B,EAAiC,aAAY,EAA7C,EAAgD,iBAAgB,EAAhE,EAAmE,uBAAsB,EAAzF,EAA4F,sBAAqB,EAAjH,EAAoH,sBAAqB,EAAzI,EAA4I,uBAAsB,EAAlK,EAAqK,WAAU,EAA/K,EAAkL,WAAU,EAA5L,EAA+L,uBAAsB,EAArN,EAAwN,cAAa,EAArO,EAAwO,eAAc,EAAtP,EAAyP,eAAc,EAAvQ,EAA0Q,eAAc,EAAxR,EAA2R,cAAa,EAAxS,EAA2S,aAAY,EAAvT,EAA0T,cAAa,EAAvU,EAA0U,mBAAkB,EAA5V,EAA+V,mBAAkB,EAAjX,EAAoX,mBAAkB,EAAtY,EAAyY,WAAU,EAAnZ,EAAsZ,cAAa,EAAna,EAAsa,eAAc,EAApb,EAAn5F,EAA20G,SAAQ,EAAC,QAAO,EAAR,EAAW,aAAY,EAAvB,EAA0B,iBAAgB,EAA1C,EAA6C,YAAW,EAAxD,EAA2D,YAAW,EAAtE,EAAyE,cAAa,EAAtF,EAAyF,YAAW,EAApG,EAAuG,gBAAe,EAAtH,EAAyH,cAAa,EAAtI,EAAyI,aAAY,EAArJ,EAAwJ,kBAAiB,EAAzK,EAA4K,SAAQ,EAApL,EAAuL,aAAY,EAAnM,EAAsM,mBAAkB,EAAxN,EAA2N,oBAAmB,EAA9O,EAAiP,oBAAmB,EAApQ,EAAuQ,sBAAqB,EAA5R,EAA+R,eAAc,EAA7S,EAAgT,qBAAoB,EAApU,EAAuU,kBAAiB,EAAxV,EAA2V,oBAAmB,EAA9W,EAAiX,aAAY,EAA7X,EAAgY,kBAAiB,EAAjZ,EAAoZ,sBAAqB,EAAza,EAA4a,qBAAoB,EAAhc,EAAmc,qBAAoB,EAAvd,EAA0d,2BAA0B,EAApf,EAAuf,iBAAgB,EAAvgB,EAA0gB,sBAAqB,EAA/hB,EAAkiB,2BAA0B,EAA5jB,EAA+jB,cAAa,EAA5kB,EAA+kB,cAAa,EAA5lB,EAA+lB,eAAc,EAA7mB,EAAgnB,wBAAuB,EAAvoB,EAA0oB,gBAAe,EAAzpB,EAA4pB,qBAAoB,EAAhrB,EAAmrB,qBAAoB,EAAvsB,EAA0sB,sBAAqB,EAA/tB,EAAkuB,YAAW,EAA7uB,EAAgvB,aAAY,EAA5vB,EAA+vB,YAAW,EAA1wB,EAA6wB,cAAa,EAA1xB,EAA6xB,gBAAe,EAA5yB,EAA+yB,YAAW,EAA1zB,EAA6zB,cAAa,EAA10B,EAA60B,YAAW,EAAx1B,EAA21B,iBAAgB,EAA32B,EAA82B,QAAO,EAAr3B,EAAw3B,oBAAmB,EAA34B,EAA84B,kBAAiB,EAA/5B,EAAk6B,mBAAkB,EAAp7B,EAAu7B,mBAAkB,EAAz8B,EAA48B,oBAAmB,EAA/9B,EAAk+B,oBAAmB,EAAr/B,EAAw/B,cAAa,EAArgC,EAAwgC,YAAW,EAAnhC,EAAshC,uBAAsB,EAA5iC,EAA+iC,sBAAqB,EAApkC,EAAukC,sBAAqB,EAA5lC,EAA+lC,uBAAsB,EAArnC,EAAwnC,UAAS,EAAjoC,EAAooC,uBAAsB,EAA1pC,EAA6pC,cAAa,EAA1qC,EAA6qC,eAAc,EAA3rC,EAA8rC,eAAc,EAA5sC,EAA+sC,eAAc,EAA7tC,EAAguC,cAAa,EAA7uC,EAAgvC,aAAY,EAA5vC,EAA+vC,cAAa,EAA5wC,EAA+wC,mBAAkB,EAAjyC,EAAoyC,mBAAkB,EAAtzC,EAAyzC,mBAAkB,EAA30C,EAA80C,WAAU,EAAx1C,EAA21C,cAAa,EAAx2C,EAA22C,eAAc,EAAz3C,EAAn1G,EAAgtJ,MAAK,EAAC,QAAO,EAAR,EAAW,iBAAgB,EAA3B,EAA8B,YAAW,EAAzC,EAA4C,YAAW,EAAvD,EAA0D,aAAY,CAAtE,EAAwE,mBAAkB,CAA1F,EAA4F,oBAAmB,CAA/G,EAAiH,oBAAmB,CAApI,EAAsI,cAAa,EAAnJ,EAAsJ,YAAW,EAAjK,EAAoK,eAAc,EAAlL,EAAqL,cAAa,EAAlM,EAAqM,kBAAiB,EAAtN,EAAyN,qBAAoB,EAA7O,EAAgP,qBAAoB,EAApQ,EAAuQ,yBAAwB,EAA/R,EAAkS,wBAAuB,EAAzT,EAA4T,eAAc,EAA1U,EAA6U,WAAU,EAAvV,EAA0V,YAAW,EAArW,EAAwW,YAAW,EAAnX,EAAsX,eAAc,EAApY,EAAuY,cAAa,EAApZ,EAAuZ,eAAc,EAAra,EAAwa,kBAAiB,EAAzb,EAA4b,uBAAsB,EAAld,EAAqd,oBAAmB,EAAxe,EAA2e,qBAAoB,EAA/f,EAAkgB,gBAAe,EAAjhB,EAAohB,mBAAkB,EAAtiB,EAAyiB,gBAAe,EAAxjB,EAA2jB,gBAAe,EAA1kB,EAA6kB,QAAO,EAAplB,EAAulB,gBAAe,EAAtmB,EAAymB,mBAAkB,EAA3nB,EAA8nB,cAAa,EAA3oB,EAA8oB,WAAU,EAAxpB,EAA2pB,cAAa,EAAxqB,EAA2qB,iBAAgB,EAA3rB,EAA8rB,iBAAgB,EAA9sB,EAAitB,cAAa,EAA9tB,EAAiuB,YAAW,EAA5uB,EAA+uB,WAAU,EAAzvB,EAA4vB,kBAAiB,EAA7wB,EAArtJ,EAAs+K,QAAO,EAAC,cAAa,EAAd,EAAiB,YAAW,EAA5B,EAA+B,eAAc,EAA7C,EAAgD,cAAa,EAA7D,EAAgE,kBAAiB,EAAjF,EAAoF,qBAAoB,EAAxG,EAA2G,qBAAoB,EAA/H,EAAkI,yBAAwB,EAA1J,EAA6J,wBAAuB,EAApL,EAAuL,WAAU,EAAjM,EAAoM,YAAW,EAA/M,EAAkN,YAAW,EAA7N,EAAgO,eAAc,EAA9O,EAAiP,cAAa,EAA9P,EAAiQ,eAAc,EAA/Q,EAAkR,kBAAiB,EAAnS,EAAsS,uBAAsB,EAA5T,EAA+T,oBAAmB,EAAlV,EAAqV,qBAAoB,EAAzW,EAA4W,gBAAe,EAA3X,EAA8X,mBAAkB,EAAhZ,EAAmZ,gBAAe,EAAla,EAAqa,gBAAe,EAApb,EAAub,QAAO,EAA9b,EAAic,gBAAe,EAAhd,EAAmd,mBAAkB,EAAre,EAAwe,cAAa,EAArf,EAAwf,WAAU,EAAlgB,EAAqgB,cAAa,EAAlhB,EAAqhB,iBAAgB,EAAriB,EAAwiB,iBAAgB,EAAxjB,EAA2jB,cAAa,EAAxkB,EAA2kB,YAAW,EAAtlB,EAAylB,WAAU,EAAnmB,EAA7+K,EAAolM,WAAU,EAAC,QAAO,GAAR,EAAY,aAAY,GAAxB,EAA4B,iBAAgB,GAA5C,EAAgD,YAAW,GAA3D,EAA+D,YAAW,GAA1E,EAA8E,cAAa,GAA3F,EAA+F,YAAW,GAA1G,EAA8G,gBAAe,GAA7H,EAAiI,cAAa,GAA9I,EAAkJ,aAAY,GAA9J,EAAkK,kBAAiB,GAAnL,EAAuL,SAAQ,GAA/L,EAAmM,cAAa,CAAhN,EAAkN,mBAAkB,CAApO,EAAsO,sBAAqB,CAA3P,EAA6P,sBAAqB,CAAlR,EAAoR,4BAA2B,CAA/S,EAAiT,aAAY,GAA7T,EAAiU,mBAAkB,GAAnV,EAAuV,oBAAmB,GAA1W,EAA8W,oBAAmB,GAAjY,EAAqY,sBAAqB,GAA1Z,EAA8Z,eAAc,GAA5a,EAAgb,qBAAoB,GAApc,EAAwc,kBAAiB,GAAzd,EAA6d,oBAAmB,GAAhf,EAAof,aAAY,GAAhgB,EAAogB,kBAAiB,GAArhB,EAAyhB,sBAAqB,GAA9iB,EAAkjB,qBAAoB,GAAtkB,EAA0kB,qBAAoB,GAA9lB,EAAkmB,2BAA0B,GAA5nB,EAAgoB,iBAAgB,GAAhpB,EAAopB,sBAAqB,GAAzqB,EAA6qB,2BAA0B,GAAvsB,EAA2sB,cAAa,GAAxtB,EAA4tB,cAAa,GAAzuB,EAA6uB,kBAAiB,GAA9vB,EAAkwB,eAAc,GAAhxB,EAAoxB,kBAAiB,GAAryB,EAAyyB,qBAAoB,GAA7zB,EAAi0B,qBAAoB,GAAr1B,EAAy1B,yBAAwB,GAAj3B,EAAq3B,wBAAuB,GAA54B,EAAg5B,sBAAqB,GAAr6B,EAAy6B,YAAW,GAAp7B,EAAw7B,aAAY,GAAp8B,EAAw8B,YAAW,GAAn9B,EAAu9B,cAAa,GAAp+B,EAAw+B,gBAAe,GAAv/B,EAA2/B,YAAW,GAAtgC,EAA0gC,cAAa,GAAvhC,EAA2hC,YAAW,GAAtiC,EAA0iC,iBAAgB,GAA1jC,EAA8jC,QAAO,GAArkC,EAAykC,oBAAmB,GAA5lC,EAAgmC,kBAAiB,GAAjnC,EAAqnC,mBAAkB,GAAvoC,EAA2oC,mBAAkB,GAA7pC,EAAiqC,oBAAmB,GAAprC,EAAwrC,oBAAmB,GAA3sC,EAA+sC,cAAa,GAA5tC,EAAguC,YAAW,GAA3uC,EAA+uC,kBAAiB,GAAhwC,EAAowC,uBAAsB,GAA1xC,EAA8xC,sBAAqB,GAAnzC,EAAuzC,sBAAqB,GAA50C,EAAg1C,uBAAsB,GAAt2C,EAA02C,uBAAsB,GAAh4C,EAAo4C,oBAAmB,GAAv5C,EAA25C,qBAAoB,GAA/6C,EAAm7C,UAAS,CAA57C,EAA87C,WAAU,GAAx8C,EAA48C,YAAW,GAAv9C,EAA29C,YAAW,GAAt+C,EAA0+C,eAAc,GAAx/C,EAA4/C,cAAa,GAAzgD,EAA6gD,eAAc,GAA3hD,EAA+hD,kBAAiB,GAAhjD,EAAojD,eAAc,GAAlkD,EAAskD,cAAa,GAAnlD,EAAulD,aAAY,GAAnmD,EAAumD,cAAa,GAApnD,EAAwnD,mBAAkB,GAA1oD,EAA8oD,mBAAkB,GAAhqD,EAAoqD,mBAAkB,GAAtrD,EAA0rD,WAAU,GAApsD,EAAwsD,cAAa,GAArtD,EAAytD,eAAc,GAAvuD,EAA9lM,EAA00P,WAAU,EAAC,QAAO,GAAR,EAAY,aAAY,GAAxB,EAA4B,iBAAgB,GAA5C,EAAgD,YAAW,GAA3D,EAA+D,YAAW,GAA1E,EAA8E,cAAa,GAA3F,EAA+F,YAAW,GAA1G,EAA8G,gBAAe,GAA7H,EAAiI,cAAa,GAA9I,EAAkJ,aAAY,GAA9J,EAAkK,kBAAiB,GAAnL,EAAuL,SAAQ,GAA/L,EAAmM,cAAa,GAAhN,EAAoN,mBAAkB,GAAtO,EAA0O,sBAAqB,GAA/P,EAAmQ,sBAAqB,GAAxR,EAA4R,4BAA2B,GAAvT,EAA2T,aAAY,GAAvU,EAA2U,mBAAkB,GAA7V,EAAiW,oBAAmB,GAApX,EAAwX,oBAAmB,GAA3Y,EAA+Y,sBAAqB,GAApa,EAAwa,eAAc,GAAtb,EAA0b,qBAAoB,GAA9c,EAAkd,kBAAiB,GAAne,EAAue,oBAAmB,GAA1f,EAA8f,aAAY,GAA1gB,EAA8gB,kBAAiB,GAA/hB,EAAmiB,sBAAqB,GAAxjB,EAA4jB,qBAAoB,GAAhlB,EAAolB,qBAAoB,GAAxmB,EAA4mB,2BAA0B,GAAtoB,EAA0oB,iBAAgB,GAA1pB,EAA8pB,sBAAqB,GAAnrB,EAAurB,2BAA0B,GAAjtB,EAAqtB,cAAa,EAAluB,EAAquB,cAAa,EAAlvB,EAAqvB,eAAc,GAAnwB,EAAuwB,wBAAuB,EAA9xB,EAAiyB,gBAAe,EAAhzB,EAAmzB,qBAAoB,EAAv0B,EAA00B,qBAAoB,EAA91B,EAAi2B,sBAAqB,EAAt3B,EAAy3B,YAAW,EAAp4B,EAAu4B,aAAY,EAAn5B,EAAs5B,YAAW,EAAj6B,EAAo6B,cAAa,EAAj7B,EAAo7B,gBAAe,EAAn8B,EAAs8B,YAAW,EAAj9B,EAAo9B,cAAa,EAAj+B,EAAo+B,YAAW,EAA/+B,EAAk/B,iBAAgB,EAAlgC,EAAqgC,QAAO,EAA5gC,EAA+gC,oBAAmB,EAAliC,EAAqiC,kBAAiB,EAAtjC,EAAyjC,mBAAkB,EAA3kC,EAA8kC,mBAAkB,EAAhmC,EAAmmC,oBAAmB,EAAtnC,EAAynC,oBAAmB,EAA5oC,EAA+oC,cAAa,EAA5pC,EAA+pC,YAAW,EAA1qC,EAA6qC,UAAS,EAAtrC,EAAyrC,uBAAsB,GAA/sC,EAAmtC,cAAa,EAAhuC,EAAmuC,eAAc,EAAjvC,EAAovC,eAAc,EAAlwC,EAAqwC,eAAc,EAAnxC,EAAsxC,cAAa,EAAnyC,EAAsyC,aAAY,EAAlzC,EAAqzC,cAAa,EAAl0C,EAAq0C,mBAAkB,EAAv1C,EAA01C,mBAAkB,EAA52C,EAA+2C,mBAAkB,EAAj4C,EAAo4C,WAAU,EAA94C,EAAi5C,cAAa,EAA95C,EAAi6C,eAAc,EAA/6C,EAAp1P,EAAuwS,WAAU,EAAC,cAAa,EAAd,EAAiB,cAAa,EAA9B,EAAiC,wBAAuB,EAAxD,EAA2D,gBAAe,EAA1E,EAA6E,qBAAoB,EAAjG,EAAoG,qBAAoB,EAAxH,EAA2H,sBAAqB,EAAhJ,EAAmJ,YAAW,EAA9J,EAAiK,aAAY,EAA7K,EAAgL,YAAW,EAA3L,EAA8L,cAAa,EAA3M,EAA8M,gBAAe,EAA7N,EAAgO,YAAW,EAA3O,EAA8O,cAAa,EAA3P,EAA8P,YAAW,EAAzQ,EAA4Q,iBAAgB,EAA5R,EAA+R,QAAO,EAAtS,EAAyS,oBAAmB,EAA5T,EAA+T,kBAAiB,EAAhV,EAAmV,mBAAkB,EAArW,EAAwW,mBAAkB,EAA1X,EAA6X,oBAAmB,EAAhZ,EAAmZ,oBAAmB,EAAta,EAAya,cAAa,EAAtb,EAAyb,YAAW,EAApc,EAAuc,uBAAsB,EAA7d,EAAge,sBAAqB,EAArf,EAAwf,sBAAqB,EAA7gB,EAAghB,uBAAsB,EAAtiB,EAAyiB,UAAS,EAAljB,EAAjxS,EAAu0T,UAAS,EAAC,QAAO,GAAR,EAAY,aAAY,GAAxB,EAA4B,iBAAgB,GAA5C,EAAgD,YAAW,GAA3D,EAA+D,YAAW,GAA1E,EAA8E,cAAa,GAA3F,EAA+F,YAAW,GAA1G,EAA8G,gBAAe,GAA7H,EAAiI,cAAa,GAA9I,EAAkJ,aAAY,GAA9J,EAAkK,kBAAiB,GAAnL,EAAuL,SAAQ,GAA/L,EAAmM,cAAa,GAAhN,EAAoN,mBAAkB,GAAtO,EAA0O,sBAAqB,GAA/P,EAAmQ,sBAAqB,GAAxR,EAA4R,4BAA2B,GAAvT,EAA2T,aAAY,GAAvU,EAA2U,mBAAkB,GAA7V,EAAiW,oBAAmB,GAApX,EAAwX,oBAAmB,GAA3Y,EAA+Y,sBAAqB,GAApa,EAAwa,eAAc,GAAtb,EAA0b,qBAAoB,GAA9c,EAAkd,kBAAiB,GAAne,EAAue,oBAAmB,GAA1f,EAA8f,aAAY,GAA1gB,EAA8gB,kBAAiB,GAA/hB,EAAmiB,sBAAqB,GAAxjB,EAA4jB,qBAAoB,GAAhlB,EAAolB,qBAAoB,GAAxmB,EAA4mB,2BAA0B,GAAtoB,EAA0oB,iBAAgB,GAA1pB,EAA8pB,sBAAqB,GAAnrB,EAAurB,2BAA0B,GAAjtB,EAAqtB,cAAa,GAAluB,EAAsuB,cAAa,GAAnvB,EAAuvB,eAAc,GAArwB,EAAywB,wBAAuB,GAAhyB,EAAoyB,gBAAe,GAAnzB,EAAuzB,qBAAoB,GAA30B,EAA+0B,qBAAoB,GAAn2B,EAAu2B,aAAY,GAAn3B,EAAu3B,YAAW,GAAl4B,EAAs4B,cAAa,GAAn5B,EAAu5B,gBAAe,GAAt6B,EAA06B,YAAW,GAAr7B,EAAy7B,cAAa,GAAt8B,EAA08B,YAAW,GAAr9B,EAAy9B,iBAAgB,GAAz+B,EAA6+B,QAAO,GAAp/B,EAAw/B,oBAAmB,GAA3gC,EAA+gC,kBAAiB,GAAhiC,EAAoiC,mBAAkB,GAAtjC,EAA0jC,mBAAkB,GAA5kC,EAAglC,oBAAmB,GAAnmC,EAAumC,oBAAmB,GAA1nC,EAA8nC,cAAa,GAA3oC,EAA+oC,YAAW,GAA1pC,EAA8pC,kBAAiB,GAA/qC,EAAmrC,UAAS,GAA5rC,EAAgsC,WAAU,GAA1sC,EAA8sC,YAAW,GAAztC,EAA6tC,YAAW,GAAxuC,EAA4uC,eAAc,GAA1vC,EAA8vC,cAAa,GAA3wC,EAA+wC,eAAc,GAA7xC,EAAiyC,kBAAiB,GAAlzC,EAAszC,uBAAsB,GAA50C,EAAg1C,eAAc,GAA91C,EAAk2C,cAAa,GAA/2C,EAAm3C,aAAY,GAA/3C,EAAm4C,cAAa,GAAh5C,EAAo5C,mBAAkB,GAAt6C,EAA06C,mBAAkB,GAA57C,EAAg8C,mBAAkB,GAAl9C,EAAs9C,WAAU,GAAh+C,EAAo+C,cAAa,GAAj/C,EAAq/C,eAAc,GAAngD,EAAh1T,EAAw1W,WAAU,EAAl2W,EAAf;;4BCAe,UAAC,aAAD,EAAgB,KAAhB,EAAuB,cAAvB;AAAA,IAAA,SAA0C,iBAAiB,CAAE,aAAF,EAAiB,KAAjB,CAAjB,GAA4C,aAAtF;AAAA,IAAA,CAAf;;ICEe,SAASC,UAAT,OAAkG;AAAA,IAAA,MAA9E,QAA8E,QAA9E,QAA8E;AAAA,IAAA,MAApE,KAAoE,QAApE,KAAoE;AAAA,IAAA,MAA9C,OAA8C,QAA7D,WAA6D,CAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AAC/G,IAAA,MACE,aAAa,UAAb,IAA2B,UAAU,QAArC,KAEA,YAAY,QAAZ,IACA,YAAY,SAHZ,CADF,EAME;AACA,IAAA,2CACG,QADH,EACc,iBAAiB,MAAM,KAAvB,EAA8B,KAA9B,EAAqC,cAArC,CADd;AAGD,IAAA;AACF,IAAA;;ICZc,SAASC,MAAT,OAAuG;AAAA,IAAA,MAAvF,QAAuF,QAAvF,QAAuF;AAAA,IAAA,MAA7E,KAA6E,QAA7E,KAA6E;AAAA,IAAA,8BAAtE,WAAsE;AAAA,IAAA,MAAvD,OAAuD,oBAAvD,OAAuD;AAAA,IAAA,MAA9C,OAA8C,oBAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AACpH,IAAA,MACE,OAAO,KAAP,KAAiB,QAAjB,IAA6B,MAAM,OAAN,CAAc,OAAd,IAAyB,CAAC,CAAvD,KAEA,YAAY,SAAZ,IAAyB,UAAU,EAAnC,IACA,YAAY,QAAZ,IAAwB,UAAU,EADlC,IAEA,YAAY,QAAZ,IAAwB,UAAU,GAFlC,IAGA,YAAY,SAAZ,IAAyB,UAAU,CALnC,CADF,EAQE;AACA,IAAA,2CACG,QADH,EACc,iBAAiB,MAAM,OAAN,CAAc,SAAd,EAAyB,MAAM,OAA/B,CAAjB,EAA0D,KAA1D,EAAiE,cAAjE,CADd;AAGD,IAAA;AACF,IAAA;;ICdD,IAAMT,WAAS,EAAE,WAAW,IAAb,EAAmB,YAAY,IAA/B,EAAf;;AAEA,IAAe,SAAS,UAAT,OAA6G;AAAA,IAAA,MAAvF,QAAuF,QAAvF,QAAuF;AAAA,IAAA,MAA7E,KAA6E,QAA7E,KAA6E;AAAA,IAAA,8BAAtE,WAAsE;AAAA,IAAA,MAAvD,OAAuD,oBAAvD,OAAuD;AAAA,IAAA,MAA9C,OAA8C,oBAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AAC1H,IAAA,MACE,aAAa,QAAb,IAAyBA,SAAO,KAAP,CAAzB,KAEA,YAAY,SAAZ,IAAyB,UAAU,EAAnC,IACA,YAAY,QAAZ,IAAwB,UAAU,EADlC,IAEA,YAAY,QAAZ,IAAwB,UAAU,CAFlC,IAGA,YAAY,OAAZ,IAAuB,UAAU,EALjC,CADF,EAQE;AACA,IAAA,WAAO;AACL,IAAA,cAAQ,iBAAiB,MAAM,KAAvB,EAA8B,KAA9B,EAAqC,cAArC;AADH,IAAA,KAAP;AAGD,IAAA;AACF,IAAA;;IChBD,IAAMA,WAAS,EAAE,MAAM,IAAR,EAAc,UAAU,IAAxB,EAAf;;AAEA,IAAe,SAAS,UAAT,OAAoG;AAAA,IAAA,MAA9E,QAA8E,QAA9E,QAA8E;AAAA,IAAA,MAApE,KAAoE,QAApE,KAAoE;AAAA,IAAA,MAA9C,OAA8C,QAA7D,WAA6D,CAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;;AAEjH,IAAA,MACE,aAAa,QAAb,IAAyBA,SAAO,KAAP,CAAzB,KAEA,YAAY,SAAZ,IACA,YAAY,QADZ,IAEA,YAAY,QAFZ,IAGA,YAAY,OALZ,CADF,EAQE;AACA,IAAA,WAAO;AACL,IAAA,cAAQ,iBAAiB,MAAM,KAAvB,EAA8B,KAA9B,EAAqC,cAArC;AADH,IAAA,KAAP;AAGD,IAAA;AACF,IAAA;;ICjBD,IAAMA,WAAS,EAAE,MAAM,IAAR,EAAc,eAAe,IAA7B,EAAf;;AAEA,IAAe,SAASU,MAAT,OAAuG;AAAA,IAAA,MAAvF,QAAuF,QAAvF,QAAuF;AAAA,IAAA,MAA7E,KAA6E,QAA7E,KAA6E;AAAA,IAAA,8BAAtE,WAAsE;AAAA,IAAA,MAAvD,OAAuD,oBAAvD,OAAuD;AAAA,IAAA,MAA9C,OAA8C,oBAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AACpH,IAAA,MACE,aAAa,SAAb,IAA0BV,SAAO,KAAP,CAA1B,KAEA,YAAY,QAAZ,IAAyB,UAAU,EAAV,IAAgB,UAAU,EAAnD,IACA,CAAC,YAAY,QAAZ,IAAwB,YAAY,SAArC,KAAoD,UAAU,CAAV,IAAe,UAAU,CAD7E,IAEA,YAAY,OAAZ,KAAwB,WAAW,EAAX,IAAiB,WAAW,EAApD,CAJA,CADF,EAOE;AACA,IAAA,WAAO;AACL,IAAA,eAAS,iBAAiB,MAAM,KAAvB,EAA8B,KAA9B,EAAqC,cAArC;AADJ,IAAA,KAAP;AAGD,IAAA;AACF,IAAA;;ICfD,IAAMC,eAAa;AACjB,IAAA,aAAW,IADM;AAEjB,IAAA,YAAU,IAFO;AAGjB,IAAA,SAAO,IAHU;AAIjB,IAAA,UAAQ,IAJS;AAKjB,IAAA,eAAa,IALI;AAMjB,IAAA,YAAU,IANO;AAOjB,IAAA,aAAW;AAPM,IAAA,CAAnB;AASA,IAAA,IAAMD,WAAS;AACb,IAAA,iBAAe,IADF;AAEb,IAAA,iBAAe,IAFF;AAGb,IAAA,oBAAkB,IAHL;AAIb,IAAA,iBAAe,IAJF;AAKb,IAAA,oBAAkB;AALL,IAAA,CAAf;;AAQA,IAAe,SAASW,QAAT,OAAsE;AAAA,IAAA,MAApD,QAAoD,QAApD,QAAoD;AAAA,IAAA,MAA1C,KAA0C,QAA1C,KAA0C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;;;AAGnF,IAAA,MAAIV,aAAW,QAAX,KAAwBD,SAAO,KAAP,CAA5B,EAA2C;AACzC,IAAA,2CACG,QADH,EACc,iBAAiB,MAAM,KAAvB,EAA8B,KAA9B,EAAqC,cAArC,CADd;AAGD,IAAA;AACF,IAAA;;ICzBD,IAAMA,WAAS,qFAAf;;AAEA,IAAe,SAASY,UAAT,OAA2G;AAAA,IAAA,MAAvF,QAAuF,QAAvF,QAAuF;AAAA,IAAA,MAA7E,KAA6E,QAA7E,KAA6E;AAAA,IAAA,8BAAtE,WAAsE;AAAA,IAAA,MAAvD,OAAuD,oBAAvD,OAAuD;AAAA,IAAA,MAA9C,OAA8C,oBAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AACxH,IAAA,MACE,OAAO,KAAP,KAAiB,QAAjB,IAA6B,MAAM,KAAN,CAAYZ,QAAZ,MAAwB,IAArD,KAEA,YAAY,SAAZ,IAAyB,UAAU,EAAnC,IACA,YAAY,QAAZ,IAAwB,UAAU,EADlC,IAEA,CAAC,YAAY,QAAZ,IAAwB,YAAY,SAArC,KAAmD,UAAU,CAF7D,IAGA,CAAC,YAAY,OAAZ,IAAuB,YAAY,SAApC,KAAkD,UAAU,IAH5D,IAIA,YAAY,SAAZ,IAAyB,UAAU,GAJnC,IAKA,YAAY,QAPZ,CADF,EAUE;AACA,IAAA,2CACG,QADH,EACc,iBAAiB,MAAM,KAAvB,EAA8B,KAA9B,EAAqC,cAArC,CADd;AAGD,IAAA;AACF,IAAA;;4BCpBc,oBAAY;AACzB,IAAA,MAAM,aAAa,SAAS,OAAT,CAAiB,oBAAjB,EAAuC,EAAvC,CAAnB;AACA,IAAA,SAAO,WAAW,MAAX,CAAkB,CAAlB,EAAqB,WAArB,KAAqC,WAAW,KAAX,CAAiB,CAAjB,CAA5C;AACD,IAAA,CAHD;;ICGA,IAAMC,eAAa,EAAE,YAAY,IAAd,EAAoB,oBAAoB,IAAxC,EAAnB;;AAEA,IAAe,SAASY,YAAT,OAA0F;AAAA,IAAA,MAApE,QAAoE,QAApE,QAAoE;AAAA,IAAA,MAA1D,KAA0D,QAA1D,KAA0D;AAAA,IAAA,MAAzC,GAAyC,QAAnD,MAAmD,CAAzC,GAAyC;AAAA,IAAA,MAAlC,cAAkC,QAAlC,cAAkC;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;;AAEvG,IAAA,MAAM,qBAAqB,iBAAiB,QAAjB,CAA3B;;AAEA,IAAA,MAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6BZ,aAAW,kBAAX,CAAjC,EAAiE;AAAA,IAAA;;AAE/D,IAAA,UAAM,0BAA0B,OAAO,IAAP,CAAY,cAAZ,EAA4B,GAA5B,CAAgC;AAAA,IAAA,eAAQ,mBAAmB,IAAnB,CAAR;AAAA,IAAA,OAAhC,CAAhC;;;AAGA,IAAA,UAAM,iBAAiB,MAAM,KAAN,CAAY,+BAAZ,CAAvB;;AAEA,IAAA,8BAAwB,OAAxB,CAAgC,gBAAQ;AACtC,IAAA,uBAAe,OAAf,CAAuB,UAAC,GAAD,EAAM,KAAN,EAAgB;AACrC,IAAA,cAAI,IAAI,OAAJ,CAAY,IAAZ,IAAoB,CAAC,CAArB,IAA0B,SAAS,OAAvC,EAAgD;AAC9C,IAAA,2BAAe,KAAf,IAAwB,IAAI,OAAJ,CAAY,IAAZ,EAAkB,MAAM,IAAxB,KAAiC,iBAAiB,MAAM,GAAvB,GAA6B,EAA9D,CAAxB;AACD,IAAA;AACF,IAAA,SAJD;AAKD,IAAA,OAND;;AAQA,IAAA;AAAA,IAAA,2CAAW,QAAX,EAAsB,eAAe,IAAf,CAAoB,GAApB,CAAtB;AAAA,IAAA;AAf+D,IAAA;;AAAA,IAAA;AAgBhE,IAAA;AACF,IAAA;;ICxBD,IAAMC,sBAAoB;AACxB,IAAA,kBAAgB,YADQ;AAExB,IAAA,mBAAiB,SAFO;AAGxB,IAAA,gBAAc,OAHU;AAIxB,IAAA,cAAY,KAJY;AAKxB,IAAA,QAAM,SALkB;AAMxB,IAAA,iBAAe;AANS,IAAA,CAA1B;AAQA,IAAA,IAAMC,qBAAmB;AACvB,IAAA,gBAAc,gBADS;AAEvB,IAAA,aAAW,iBAFY;AAGvB,IAAA,cAAY,aAHW;AAIvB,IAAA,kBAAgB,YAJO;AAKvB,IAAA,SAAO,aALgB;AAMvB,IAAA,YAAU,gBANa;AAOvB,IAAA,cAAY,gBAPW;AAQvB,IAAA,aAAW;AARY,IAAA,CAAzB;;AAWA,IAAe,SAASW,WAAT,OAAoH;AAAA,IAAA,MAA/F,QAA+F,QAA/F,QAA+F;AAAA,IAAA,MAArF,KAAqF,QAArF,KAAqF;AAAA,IAAA,MAA9E,MAA8E,QAA9E,MAA8E;AAAA,IAAA,8BAAtE,WAAsE;AAAA,IAAA,MAAvD,OAAuD,oBAAvD,OAAuD;AAAA,IAAA,MAA9C,OAA8C,oBAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AACjI,IAAA,MACE,CAACX,mBAAiB,QAAjB,KAA8B,aAAa,SAAb,IAA0B,OAAO,KAAP,KAAiB,QAA3C,IAAuD,MAAM,OAAN,CAAc,MAAd,IAAwB,CAAC,CAA/G,KAEA,CAAC,YAAY,QAAZ,IAAwB,YAAY,IAArC,KAA8C,WAAW,EAH3D,EAIE;AACA,IAAA,QAAI,CAAC,cAAD,IAAmB,CAAC,MAAM,OAAN,CAAc,OAAO,QAAP,CAAd,CAAxB,EAAyD;AACvD,IAAA,aAAO,OAAO,QAAP,CAAP;AACD,IAAA;AACD,IAAA,QAAI,aAAa,SAAb,IAA0BD,oBAAkB,KAAlB,CAA9B,EAAwD;AACtD,IAAA,aAAO;AACL,IAAA,iBAAS,iBAAiB,MAAMA,oBAAkB,KAAlB,CAAvB,EAAiD,KAAjD,EAAwD,cAAxD;AADJ,IAAA,OAAP;AAGD,IAAA;AACD,IAAA,QAAIC,mBAAiB,QAAjB,CAAJ,EAAgC;AAC9B,IAAA,6CACGA,mBAAiB,QAAjB,CADH,EACgCD,oBAAkB,KAAlB,KAA4B,KAD5D;AAGD,IAAA;AACF,IAAA;AACF,IAAA;;ICvCD,IAAMA,sBAAoB;AACxB,IAAA,kBAAgB,SADQ;AAExB,IAAA,mBAAiB,SAFO;AAGxB,IAAA,gBAAc,OAHU;AAIxB,IAAA,cAAY,KAJY;AAKxB,IAAA,kBAAgB,UALQ;AAMxB,IAAA,QAAM,UANkB;AAOxB,IAAA,QAAM,KAPkB;AAQxB,IAAA,iBAAe;AARS,IAAA,CAA1B;;AAWA,IAAA,IAAMC,qBAAmB;AACvB,IAAA,cAAY,gBADW;AAEvB,IAAA,kBAAgB,eAFO;AAGvB,IAAA,YAAU;AAHa,IAAA,CAAzB;;AAMA,IAAA,IAAM,aAAa,CAAE,cAAF,EAAkB,WAAlB,EAA+B,OAA/B,EAAwC,UAAxC,EAAoD,YAApD,EAAkE,WAAlE,EAA+E,eAA/E,CAAnB;AACA,IAAA,IAAMF,eAAa,OAAO,IAAP,CAAYE,kBAAZ,EAA8B,MAA9B,CAAqC,UAArC,CAAnB;;AAEA,IAAe,SAASY,YAAT,OAAqH;AAAA,IAAA,MAA/F,QAA+F,QAA/F,QAA+F;AAAA,IAAA,MAArF,KAAqF,QAArF,KAAqF;AAAA,IAAA,MAA9E,MAA8E,QAA9E,MAA8E;AAAA,IAAA,8BAAtE,WAAsE;AAAA,IAAA,MAAvD,OAAuD,oBAAvD,OAAuD;AAAA,IAAA,MAA9C,OAA8C,oBAA9C,OAA8C;AAAA,IAAA,MAAzB,GAAyB,QAAnC,MAAmC,CAAzB,GAAyB;AAAA,IAAA,MAAlB,cAAkB,QAAlB,cAAkB;;AAClI,IAAA,MACE,CAACd,aAAW,OAAX,CAAmB,QAAnB,IAA+B,CAAC,CAAhC,IAAqC,aAAa,SAAb,IAA0B,OAAO,KAAP,KAAiB,QAA3C,IAAuD,MAAM,OAAN,CAAc,MAAd,IAAwB,CAAC,CAAtH,MAEA,YAAY,SAAZ,IAAyB,UAAU,EAAnC,IACA,YAAY,QAAZ,IAAwB,UAAU,EADlC,IAEA,CAAC,YAAY,QAAZ,IAAwB,YAAY,SAArC,KAAmD,WAAW,GAF9D,IAGA,YAAY,SAAZ,IAAyB,UAAU,GAHnC,IAIA,YAAY,QANZ,CADF,EASE;AACA,IAAA,QAAI,CAAC,cAAD,IAAmB,CAAC,MAAM,OAAN,CAAc,OAAO,QAAP,CAAd,CAAxB,EAAyD;AACvD,IAAA,aAAO,OAAO,QAAP,CAAP;AACD,IAAA;AACD,IAAA,QAAI,aAAa,eAAb,IAAgC,OAAO,KAAP,KAAiB,QAArD,EAA+D;AAC7D,IAAA,aAAO;AACL,IAAA,yBAAiB,MAAM,OAAN,CAAc,QAAd,IAA0B,CAAC,CAA3B,GAA+B,UAA/B,GAA4C,YADxD;AAEL,IAAA,4BAAoB,MAAM,OAAN,CAAc,SAAd,IAA2B,CAAC,CAA5B,GAAgC,SAAhC,GAA4C;AAF3D,IAAA,OAAP;AAID,IAAA;AACD,IAAA,QAAI,aAAa,SAAb,IAA0BC,oBAAkB,KAAlB,CAA9B,EAAwD;AACtD,IAAA,aAAO;AACL,IAAA,iBAAS,iBAAiB,MAAMA,oBAAkB,KAAlB,CAAvB,EAAiD,KAAjD,EAAwD,cAAxD;AADJ,IAAA,OAAP;AAGD,IAAA;AACD,IAAA,QAAIC,mBAAiB,QAAjB,CAAJ,EAAgC;AAC9B,IAAA,6CACGA,mBAAiB,QAAjB,CADH,EACgCD,oBAAkB,KAAlB,KAA4B,KAD5D;AAGD,IAAA;AACF,IAAA;AACF,IAAA;;IClCD,IAAM,UAAU,CACdM,UADc,EAEdC,MAFc,EAGd,UAHc,EAId,UAJc,EAKdE,QALc,EAMdC,UANc,EAOdC,YAPc,EAQdC,WARc,EASdC,YATc;;AAWdL,UAXc,CAAhB;;QAcqB;;;;;;;AAMnB,IAAA,sBAA2B;AAAA,IAAA;;AAAA,IAAA,QAAf,OAAe,yDAAL,EAAK;AAAA,IAAA;;AACzB,IAAA,QAAM,mBAAmB,OAAO,SAAP,KAAqB,WAArB,GAAmC,UAAU,SAA7C,GAAyD,SAAlF;;AAEA,IAAA,SAAK,UAAL,GAAkB,QAAQ,SAAR,IAAqB,gBAAvC;AACA,IAAA,SAAK,eAAL,GAAuB,QAAQ,cAAR,IAA0B,KAAjD;;AAEA,IAAA,SAAK,YAAL,GAAoB,sBAAsB,KAAK,UAA3B,CAApB;;;AAGA,IAAA,QAAI,KAAK,YAAL,IAAqB,KAAK,YAAL,CAAkB,MAA3C,EAAmD;;AAEjD,IAAA,WAAK,SAAL,GAAiB,KAAK,YAAL,CAAkB,MAAlB,CAAyB,GAA1C;AACA,IAAA,WAAK,QAAL,GAAgB,KAAK,YAAL,CAAkB,MAAlB,CAAyB,MAAzC;AACA,IAAA,WAAK,iBAAL,GAAyB,qBAAqB,KAAK,YAA1B,CAAzB;AACD,IAAA,KALD,MAKO;AACL,IAAA,WAAK,qBAAL,GAA6B,IAA7B;AACA,IAAA,aAAO,KAAP;AACD,IAAA;;AAED,IAAA,QAAM,OAAO,KAAK,YAAL,CAAkB,OAAlB,IAA6BM,cAAY,KAAK,YAAL,CAAkB,OAA9B,CAA1C;AACA,IAAA,QAAI,IAAJ,EAAU;AACR,IAAA,WAAK,eAAL,GAAuB,OAAO,IAAP,CAAY,IAAZ,EAAkB,MAAlB,CAAyB;AAAA,IAAA,eAAO,KAAK,GAAL,KAAa,MAAK,YAAL,CAAkB,OAAtC;AAAA,IAAA,OAAzB,EAAwE,MAAxE,CAA+E,UAAC,MAAD,EAAS,IAAT,EAAkB;AACtH,IAAA,eAAO,IAAP,IAAe,IAAf;AACA,IAAA,eAAO,MAAP;AACD,IAAA,OAHsB,EAGpB,EAHoB,CAAvB;AAIA,IAAA,WAAK,wBAAL,GAAgC,OAAO,IAAP,CAAY,KAAK,eAAjB,EAAkC,MAAlC,GAA2C,CAA3E;AACD,IAAA,KAND,MAMO;AACL,IAAA,WAAK,qBAAL,GAA6B,IAA7B;AACD,IAAA;AACF,IAAA;;;;;;;;;;;+BAOM,QAAQ;AAAA,IAAA;;;AAEb,IAAA,UAAI,KAAK,qBAAT,EAAgC;AAC9B,IAAA,eAAOC,UAAU,MAAV,CAAP;AACD,IAAA;;;AAGD,IAAA,UAAI,CAAC,KAAK,wBAAV,EAAoC;AAClC,IAAA,eAAO,MAAP;AACD,IAAA;;AAED,IAAA,aAAO,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,oBAAY;AACtC,IAAA,YAAI,QAAQ,OAAO,QAAP,CAAZ;AACA,IAAA,YAAI,iBAAiB,MAAjB,IAA2B,CAAC,MAAM,OAAN,CAAc,KAAd,CAAhC,EAAsD;;AAEpD,IAAA,iBAAO,QAAP,IAAmB,OAAK,MAAL,CAAY,KAAZ,CAAnB;AACD,IAAA,SAHD,MAGO;;AAEL,IAAA,cAAI,OAAK,eAAL,CAAqB,QAArB,CAAJ,EAAoC;AAClC,IAAA,mBAAO,OAAK,QAAL,GAAgB,iBAAiB,QAAjB,CAAvB,IAAqD,KAArD;AACA,IAAA,gBAAI,CAAC,OAAK,eAAV,EAA2B;AACzB,IAAA,qBAAO,OAAO,QAAP,CAAP;AACD,IAAA;AACF,IAAA;AACF,IAAA;AACF,IAAA,OAdD;;AAgBA,IAAA,aAAO,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,oBAAY;AACtC,IAAA,WAAI,MAAJ,CAAW,OAAO,QAAP,CAAX,EAA6B,OAA7B,CAAqC,iBAAS;;AAE5C,IAAA,kBAAQ,OAAR,CAAgB,kBAAU;;AAExB,IAAA,yBAAa,MAAb,EAAqB,OAAO;AAC1B,IAAA,wBAAU,QADgB;AAE1B,IAAA,qBAAO,KAFmB;AAG1B,IAAA,sBAAQ,MAHkB;AAI1B,IAAA,2BAAa,OAAK,YAJQ;AAK1B,IAAA,sBAAQ;AACN,IAAA,oBAAI,OAAK,QADH;AAEN,IAAA,qBAAK,OAAK,SAFJ;AAGN,IAAA,2BAAW,OAAK;AAHV,IAAA,eALkB;AAU1B,IAAA,8BAAgB,OAAK,eAVK;AAW1B,IAAA,8BAAgB,OAAK;AAXK,IAAA,aAAP,CAArB,EAYI,KAZJ,EAYW,OAAK,eAZhB;AAaD,IAAA,WAfD;AAgBD,IAAA,SAlBD;AAmBD,IAAA,OApBD;;AAsBA,IAAA,aAAO,kBAAkB,MAAlB,CAAP;AACD,IAAA;;;;;;;;;;oCAOgB,QAAQ;AACvB,IAAA,aAAOA,UAAU,MAAV,CAAP;AACD,IAAA;;;;;IAGH,SAAS,YAAT,CAAsB,IAAtB,EAAiE;AAAA,IAAA,MAArC,MAAqC,yDAA5B,EAA4B;AAAA,IAAA,MAAvB,KAAuB;AAAA,IAAA,MAAhB,cAAgB;;AAC/D,IAAA,SAAO,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,oBAAY;AACtC,IAAA,QAAM,YAAY,KAAK,QAAL,CAAlB;AACA,IAAA,QAAI,MAAM,OAAN,CAAc,SAAd,CAAJ,EAA8B;AAC5B,IAAA,SAAI,MAAJ,CAAW,OAAO,QAAP,CAAX,EAA6B,OAA7B,CAAqC,eAAO;AAC1C,IAAA,YAAI,KAAK,QAAL,EAAe,OAAf,CAAuB,GAAvB,MAAgC,CAAC,CAArC,EAAwC;AACtC,IAAA,eAAK,QAAL,EAAe,MAAf,CAAsB,UAAU,OAAV,CAAkB,KAAlB,CAAtB,EAAgD,iBAAiB,CAAjB,GAAqB,CAArE,EAAwE,GAAxE;AACD,IAAA;AACF,IAAA,OAJD;AAKD,IAAA,KAND,MAMO;AACL,IAAA,WAAK,QAAL,IAAiB,OAAO,QAAP,CAAjB;AACD,IAAA;AACF,IAAA,GAXD;AAYD,IAAA;;;;"} \ No newline at end of file diff --git a/dist/inline-style-prefixer.min.js b/dist/inline-style-prefixer.min.js deleted file mode 100644 index 5db36c5..0000000 --- a/dist/inline-style-prefixer.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):e.InlineStylePrefixer=i()}(this,function(){"use strict";function e(e,i){return i={exports:{}},e(i,i.exports),i.exports}function i(e){return Object.keys(e).sort(function(e,i){return D(e)&&!D(i)?-1:!D(e)&&D(i)?1:0}).reduce(function(i,r){return i[r]=e[r],i},{})}function r(e,i){if("position"===e&&"sticky"===i)return{position:["-webkit-sticky","sticky"]}}function n(e,i){if("string"==typeof i&&!I(i)&&i.indexOf("calc(")>-1)return F(e,i,function(e,i){return i.replace(/calc\(/g,e+"calc(")})}function o(e,i){if("cursor"===e&&A[i])return F(e,i)}function t(e,i){if("display"===e&&R[i])return{display:["-webkit-box","-moz-box","-ms-"+i+"box","-webkit-"+i,i]}}function a(e,i){if(W[e]&&E[i])return F(e,i)}function s(e,i){if("string"==typeof i&&!I(i)&&null!==i.match(j))return F(e,i)}function l(e,i){if("string"==typeof i&&z[e]){var r,n=m(i),o=n.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function(e){return null===e.match(/-moz-|-ms-/)}).join(",");return e.indexOf("Webkit")>-1?O.defineProperty({},e,o):(r={},O.defineProperty(r,"Webkit"+P(e),o),O.defineProperty(r,e,n),r)}}function m(e){if(I(e))return e;var i=e.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return i.forEach(function(e,r){i[r]=Object.keys(B).reduce(function(i,r){var n="-"+r.toLowerCase()+"-";return Object.keys(B[r]).forEach(function(r){var o=T(r);e.indexOf(o)>-1&&"order"!==o&&(i=e.replace(o,n+o)+","+i)}),i},e)}),i.join(",")}function f(e,i){if(G[e])return O.defineProperty({},G[e],M[i]||i)}function c(e,i){return"flexDirection"===e&&"string"==typeof i?{WebkitBoxOrient:i.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:i.indexOf("reverse")>-1?"reverse":"normal"}:U[e]?O.defineProperty({},U[e],L[i]||i):void 0}function u(e){return Object.keys(e).forEach(function(i){var r=e[i];r instanceof Object&&!Array.isArray(r)?e[i]=u(r):Object.keys(B).forEach(function(n){var o=B[n];o[i]&&(e[n+P(i)]=r)})}),Object.keys(e).forEach(function(i){[].concat(e[i]).forEach(function(r,n){Y.forEach(function(n){return p(e,n(i,r))})})}),i(e)}function p(e){var i=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];Object.keys(i).forEach(function(r){var n=e[r];Array.isArray(n)?[].concat(i[r]).forEach(function(i){var o=n.indexOf(i);o>-1&&e[r].splice(o,1),e[r].push(i)}):e[r]=i[r]})}function d(e){var i=e.property,r=e.value,n=e.browserInfo.browser,o=e.prefix.css,t=e.keepUnprefixed;if("position"===i&&"sticky"===r&&("safari"===n||"ios_saf"===n))return O.defineProperty({},i,Q(o+r,r,t))}function k(e){var i=e.property,r=e.value,n=e.browserInfo,o=n.browser,t=n.version,a=e.prefix.css,s=e.keepUnprefixed;if("string"==typeof r&&r.indexOf("calc(")>-1&&("firefox"===o&&t<15||"chrome"===o&&t<25||"safari"===o&&t<6.1||"ios_saf"===o&&t<7))return O.defineProperty({},i,Q(r.replace(/calc\(/g,a+"calc("),r,s))}function x(e){var i=e.property,r=e.value,n=e.browserInfo,o=n.browser,t=n.version,a=e.prefix.css,s=e.keepUnprefixed;if("cursor"===i&&$[r]&&("firefox"===o&&t<24||"chrome"===o&&t<37||"safari"===o&&t<9||"opera"===o&&t<24))return{cursor:Q(a+r,r,s)}}function g(e){var i=e.property,r=e.value,n=e.browserInfo.browser,o=e.prefix.css,t=e.keepUnprefixed;if("cursor"===i&&ee[r]&&("firefox"===n||"chrome"===n||"safari"===n||"opera"===n))return{cursor:Q(o+r,r,t)}}function h(e){var i=e.property,r=e.value,n=e.browserInfo,o=n.browser,t=n.version,a=e.prefix.css,s=e.keepUnprefixed;if("display"===i&&ie[r]&&("chrome"===o&&t<29&&t>20||("safari"===o||"ios_saf"===o)&&t<9&&t>6||"opera"===o&&(15==t||16==t)))return{display:Q(a+r,r,s)}}function b(e){var i=e.property,r=e.value,n=e.prefix.css,o=e.keepUnprefixed;if(re[i]&&ne[r])return O.defineProperty({},i,Q(n+r,r,o))}function y(e){var i=e.property,r=e.value,n=e.browserInfo,o=n.browser,t=n.version,a=e.prefix.css,s=e.keepUnprefixed;if("string"==typeof r&&null!==r.match(oe)&&("firefox"===o&&t<16||"chrome"===o&&t<26||("safari"===o||"ios_saf"===o)&&t<7||("opera"===o||"op_mini"===o)&&t<12.1||"android"===o&&t<4.4||"and_uc"===o))return O.defineProperty({},i,Q(a+r,r,s))}function v(e){var i=e.property,r=e.value,n=e.prefix.css,o=e.requiresPrefix,t=e.keepUnprefixed,a=te(i);if("string"==typeof r&&ae[a]){var s=function(){var e=Object.keys(o).map(function(e){return T(e)}),a=r.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return e.forEach(function(e){a.forEach(function(i,r){i.indexOf(e)>-1&&"order"!==e&&(a[r]=i.replace(e,n+e)+(t?","+i:""))})}),{v:O.defineProperty({},i,a.join(","))}}();if("object"===("undefined"==typeof s?"undefined":O["typeof"](s)))return s.v}}function S(e){var i=e.property,r=e.value,n=e.styles,o=e.browserInfo,t=o.browser,a=o.version,s=e.prefix.css,l=e.keepUnprefixed;if((le[i]||"display"===i&&"string"==typeof r&&r.indexOf("flex")>-1)&&("ie_mob"===t||"ie"===t)&&10==a){if(l||Array.isArray(n[i])||delete n[i],"display"===i&&se[r])return{display:Q(s+se[r],r,l)};if(le[i])return O.defineProperty({},le[i],se[r]||r)}}function w(e){var i=e.property,r=e.value,n=e.styles,o=e.browserInfo,t=o.browser,a=o.version,s=e.prefix.css,l=e.keepUnprefixed;if((ue.indexOf(i)>-1||"display"===i&&"string"==typeof r&&r.indexOf("flex")>-1)&&("firefox"===t&&a<22||"chrome"===t&&a<21||("safari"===t||"ios_saf"===t)&&a<=6.1||"android"===t&&a<4.4||"and_uc"===t)){if(l||Array.isArray(n[i])||delete n[i],"flexDirection"===i&&"string"==typeof r)return{WebkitBoxOrient:r.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:r.indexOf("reverse")>-1?"reverse":"normal"};if("display"===i&&me[r])return{display:Q(s+me[r],r,l)};if(fe[i])return O.defineProperty({},fe[i],me[r]||r)}}function C(e){var i=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],r=arguments[2],n=arguments[3];Object.keys(i).forEach(function(o){var t=e[o];Array.isArray(t)?[].concat(i[o]).forEach(function(i){e[o].indexOf(i)===-1&&e[o].splice(t.indexOf(r),n?0:1,i)}):e[o]=i[o]})}var O={};O["typeof"]="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},O.classCallCheck=function(e,i){if(!(e instanceof i))throw new TypeError("Cannot call a class as a function")},O.createClass=function(){function e(e,i){for(var r=0;r1&&r[1]||""}function r(i){var r=e.match(i);return r&&r.length>1&&r[2]||""}var n,o=i(/(ipod|iphone|ipad)/i).toLowerCase(),t=/like android/i.test(e),s=!t&&/android/i.test(e),l=/nexus\s*[0-6]\s*/i.test(e),m=!l&&/nexus\s*[0-9]+/i.test(e),f=/CrOS/.test(e),c=/silk/i.test(e),u=/sailfish/i.test(e),p=/tizen/i.test(e),d=/(web|hpw)os/i.test(e),k=/windows phone/i.test(e),x=!k&&/windows/i.test(e),g=!o&&!c&&/macintosh/i.test(e),h=!s&&!u&&!p&&!d&&/linux/i.test(e),b=i(/edge\/(\d+(\.\d+)?)/i),y=i(/version\/(\d+(\.\d+)?)/i),v=/tablet/i.test(e),S=!v&&/[^-]mobi/i.test(e),w=/xbox/i.test(e);/opera|opr|opios/i.test(e)?n={name:"Opera",opera:a,version:y||i(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}:/coast/i.test(e)?n={name:"Opera Coast",coast:a,version:y||i(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}:/yabrowser/i.test(e)?n={name:"Yandex Browser",yandexbrowser:a,version:y||i(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}:/ucbrowser/i.test(e)?n={name:"UC Browser",ucbrowser:a,version:i(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}:/mxios/i.test(e)?n={name:"Maxthon",maxthon:a,version:i(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}:/epiphany/i.test(e)?n={name:"Epiphany",epiphany:a,version:i(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}:/puffin/i.test(e)?n={name:"Puffin",puffin:a,version:i(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}:/sleipnir/i.test(e)?n={name:"Sleipnir",sleipnir:a,version:i(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}:/k-meleon/i.test(e)?n={name:"K-Meleon",kMeleon:a,version:i(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}:k?(n={name:"Windows Phone",windowsphone:a},b?(n.msedge=a,n.version=b):(n.msie=a,n.version=i(/iemobile\/(\d+(\.\d+)?)/i))):/msie|trident/i.test(e)?n={name:"Internet Explorer",msie:a,version:i(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:f?n={name:"Chrome",chromeos:a,chromeBook:a,chrome:a,version:i(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:/chrome.+? edge/i.test(e)?n={name:"Microsoft Edge",msedge:a,version:b}:/vivaldi/i.test(e)?n={name:"Vivaldi",vivaldi:a,version:i(/vivaldi\/(\d+(\.\d+)?)/i)||y}:u?n={name:"Sailfish",sailfish:a,version:i(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(e)?n={name:"SeaMonkey",seamonkey:a,version:i(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel|fxios/i.test(e)?(n={name:"Firefox",firefox:a,version:i(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(e)&&(n.firefoxos=a)):c?n={name:"Amazon Silk",silk:a,version:i(/silk\/(\d+(\.\d+)?)/i)}:/phantom/i.test(e)?n={name:"PhantomJS",phantom:a,version:i(/phantomjs\/(\d+(\.\d+)?)/i)}:/slimerjs/i.test(e)?n={name:"SlimerJS",slimer:a,version:i(/slimerjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(e)||/rim\stablet/i.test(e)?n={name:"BlackBerry",blackberry:a,version:y||i(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:d?(n={name:"WebOS",webos:a,version:y||i(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(e)&&(n.touchpad=a)):/bada/i.test(e)?n={name:"Bada",bada:a,version:i(/dolfin\/(\d+(\.\d+)?)/i)}:p?n={name:"Tizen",tizen:a,version:i(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||y}:/qupzilla/i.test(e)?n={name:"QupZilla",qupzilla:a,version:i(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||y}:/chromium/i.test(e)?n={name:"Chromium",chromium:a,version:i(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||y}:/chrome|crios|crmo/i.test(e)?n={name:"Chrome",chrome:a,version:i(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:s?n={name:"Android",version:y}:/safari|applewebkit/i.test(e)?(n={name:"Safari",safari:a},y&&(n.version=y)):o?(n={name:"iphone"==o?"iPhone":"ipad"==o?"iPad":"iPod"},y&&(n.version=y)):n=/googlebot/i.test(e)?{name:"Googlebot",googlebot:a,version:i(/googlebot\/(\d+(\.\d+))/i)||y}:{name:i(/^(.*)\/(.*) /),version:r(/^(.*)\/(.*) /)},!n.msedge&&/(apple)?webkit/i.test(e)?(/(apple)?webkit\/537\.36/i.test(e)?(n.name=n.name||"Blink",n.blink=a):(n.name=n.name||"Webkit",n.webkit=a),!n.version&&y&&(n.version=y)):!n.opera&&/gecko\//i.test(e)&&(n.name=n.name||"Gecko",n.gecko=a,n.version=n.version||i(/gecko\/(\d+(\.\d+)?)/i)),n.msedge||!s&&!n.silk?o?(n[o]=a,n.ios=a):g?n.mac=a:w?n.xbox=a:x?n.windows=a:h&&(n.linux=a):n.android=a;var C="";n.windowsphone?C=i(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):o?(C=i(/os (\d+([_\s]\d+)*) like mac os x/i),C=C.replace(/[_\s]/g,".")):s?C=i(/android[ \/-](\d+(\.\d+)*)/i):n.webos?C=i(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):n.blackberry?C=i(/rim\stablet\sos\s(\d+(\.\d+)*)/i):n.bada?C=i(/bada\/(\d+(\.\d+)*)/i):n.tizen&&(C=i(/tizen[\/\s](\d+(\.\d+)*)/i)),C&&(n.osversion=C);var O=C.split(".")[0];return v||m||"ipad"==o||s&&(3==O||O>=4&&!S)||n.silk?n.tablet=a:(S||"iphone"==o||"ipod"==o||s||l||n.blackberry||n.webos||n.bada)&&(n.mobile=a),n.msedge||n.msie&&n.version>=10||n.yandexbrowser&&n.version>=15||n.vivaldi&&n.version>=1||n.chrome&&n.version>=20||n.firefox&&n.version>=20||n.safari&&n.version>=6||n.opera&&n.version>=10||n.ios&&n.osversion&&n.osversion.split(".")[0]>=6||n.blackberry&&n.version>=10.1||n.chromium&&n.version>=20?n.a=a:n.msie&&n.version<10||n.chrome&&n.version<20||n.firefox&&n.version<20||n.safari&&n.version<6||n.opera&&n.version<10||n.ios&&n.osversion&&n.osversion.split(".")[0]<6||n.chromium&&n.version<20?n.c=a:n.x=a,n}function i(e){return e.split(".").length}function r(e,i){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,i);for(r=0;r=0;){if(o[0][n]>o[1][n])return 1;if(o[0][n]!==o[1][n])return-1;if(0===n)return 0}}function o(i,r,o){var t=s;"string"==typeof r&&(o=r,r=void 0),void 0===r&&(r=!1),o&&(t=e(o));var a=""+t.version;for(var l in i)if(i.hasOwnProperty(l)&&t[l]&&n([a,i[l]])<0)return!0;return r}function t(e,i){return!o(e,i)}var a=!0,s=e("undefined"!=typeof navigator?navigator.userAgent:"");return s.test=function(e){for(var i=0;ii.osversion&&(i.version=i.osversion,i.safari=!0),"android"===i.browser&&i.chrome&&i.version>37&&(i.browser="and_chr"),"android"===i.browser&&i.osversion<5&&(i.version=i.osversion),i},H=function(e){var i=e.browser,r=e.version,n=e.prefix,o="keyframes";return("chrome"===i&&r<43||("safari"===i||"ios_saf"===i)&&r<9||"opera"===i&&r<30||"android"===i&&r<=4.4||"and_uc"===i)&&(o=n.css+o),o},J={chrome:{transform:35,transformOrigin:35,transformOriginX:35,transformOriginY:35,backfaceVisibility:35,perspective:35,perspectiveOrigin:35,transformStyle:35,transformOriginZ:35,animation:42,animationDelay:42,animationDirection:42,animationFillMode:42,animationDuration:42,animationIterationCount:42,animationName:42,animationPlayState:42,animationTimingFunction:42,appearance:55,userSelect:55,fontKerning:32,textEmphasisPosition:55,textEmphasis:55,textEmphasisStyle:55,textEmphasisColor:55,boxDecorationBreak:55,clipPath:55,maskImage:55,maskMode:55,maskRepeat:55,maskPosition:55,maskClip:55,maskOrigin:55,maskSize:55,maskComposite:55,mask:55,maskBorderSource:55,maskBorderMode:55,maskBorderSlice:55,maskBorderWidth:55,maskBorderOutset:55,maskBorderRepeat:55,maskBorder:55,maskType:55,textDecorationStyle:55,textDecorationSkip:55,textDecorationLine:55,textDecorationColor:55,filter:52,fontFeatureSettings:47,breakAfter:49,breakBefore:49,breakInside:49,columnCount:49,columnFill:49,columnGap:49,columnRule:49,columnRuleColor:49,columnRuleStyle:49,columnRuleWidth:49,columns:49,columnSpan:49,columnWidth:49},safari:{flex:8,flexBasis:8,flexDirection:8,flexGrow:8,flexFlow:8,flexShrink:8,flexWrap:8,alignContent:8,alignItems:8,alignSelf:8,justifyContent:8,order:8,transition:6,transitionDelay:6,transitionDuration:6,transitionProperty:6,transitionTimingFunction:6,transform:8,transformOrigin:8,transformOriginX:8,transformOriginY:8,backfaceVisibility:8,perspective:8,perspectiveOrigin:8,transformStyle:8,transformOriginZ:8,animation:8,animationDelay:8,animationDirection:8,animationFillMode:8,animationDuration:8,animationIterationCount:8,animationName:8,animationPlayState:8,animationTimingFunction:8,appearance:10,userSelect:10,backdropFilter:10,fontKerning:9,scrollSnapType:10,scrollSnapPointsX:10,scrollSnapPointsY:10,scrollSnapDestination:10,scrollSnapCoordinate:10,textEmphasisPosition:7,textEmphasis:7,textEmphasisStyle:7,textEmphasisColor:7,boxDecorationBreak:10,clipPath:10,maskImage:10,maskMode:10,maskRepeat:10,maskPosition:10,maskClip:10,maskOrigin:10,maskSize:10,maskComposite:10,mask:10,maskBorderSource:10,maskBorderMode:10,maskBorderSlice:10,maskBorderWidth:10,maskBorderOutset:10,maskBorderRepeat:10,maskBorder:10,maskType:10,textDecorationStyle:10,textDecorationSkip:10,textDecorationLine:10,textDecorationColor:10,shapeImageThreshold:10,shapeImageMargin:10,shapeImageOutside:10,filter:9,hyphens:10,flowInto:10,flowFrom:10,breakBefore:8,breakAfter:8,breakInside:8,regionFragment:10,columnCount:8,columnFill:8,columnGap:8,columnRule:8,columnRuleColor:8,columnRuleStyle:8,columnRuleWidth:8,columns:8,columnSpan:8,columnWidth:8},firefox:{appearance:51,userSelect:51,boxSizing:28,textAlignLast:48,textDecorationStyle:35,textDecorationSkip:35,textDecorationLine:35,textDecorationColor:35,tabSize:51,hyphens:42,fontFeatureSettings:33,breakAfter:51,breakBefore:51,breakInside:51,columnCount:51,columnFill:51,columnGap:51,columnRule:51,columnRuleColor:51,columnRuleStyle:51,columnRuleWidth:51,columns:51,columnSpan:51,columnWidth:51},opera:{flex:16,flexBasis:16,flexDirection:16,flexGrow:16,flexFlow:16,flexShrink:16,flexWrap:16,alignContent:16,alignItems:16,alignSelf:16,justifyContent:16,order:16,transform:22,transformOrigin:22,transformOriginX:22,transformOriginY:22,backfaceVisibility:22,perspective:22,perspectiveOrigin:22,transformStyle:22,transformOriginZ:22,animation:29,animationDelay:29,animationDirection:29,animationFillMode:29,animationDuration:29,animationIterationCount:29,animationName:29,animationPlayState:29,animationTimingFunction:29,appearance:41,userSelect:41,fontKerning:19,textEmphasisPosition:41,textEmphasis:41,textEmphasisStyle:41,textEmphasisColor:41,boxDecorationBreak:41,clipPath:41,maskImage:41,maskMode:41,maskRepeat:41,maskPosition:41,maskClip:41,maskOrigin:41,maskSize:41,maskComposite:41,mask:41,maskBorderSource:41,maskBorderMode:41,maskBorderSlice:41,maskBorderWidth:41,maskBorderOutset:41,maskBorderRepeat:41,maskBorder:41,maskType:41,textDecorationStyle:41,textDecorationSkip:41,textDecorationLine:41,textDecorationColor:41,filter:39,fontFeatureSettings:34,breakAfter:36,breakBefore:36,breakInside:36,columnCount:36,columnFill:36,columnGap:36,columnRule:36,columnRuleColor:36,columnRuleStyle:36,columnRuleWidth:36,columns:36,columnSpan:36,columnWidth:36},ie:{flex:10,flexDirection:10,flexFlow:10,flexWrap:10,transform:9,transformOrigin:9,transformOriginX:9,transformOriginY:9,userSelect:11,wrapFlow:11,wrapThrough:11,wrapMargin:11,scrollSnapType:11,scrollSnapPointsX:11,scrollSnapPointsY:11,scrollSnapDestination:11,scrollSnapCoordinate:11,touchAction:10,hyphens:11,flowInto:11,flowFrom:11,breakBefore:11,breakAfter:11,breakInside:11,regionFragment:11,gridTemplateColumns:11,gridTemplateRows:11,gridTemplateAreas:11,gridTemplate:11,gridAutoColumns:11,gridAutoRows:11,gridAutoFlow:11,grid:11,gridRowStart:11,gridColumnStart:11,gridRowEnd:11,gridRow:11,gridColumn:11,gridColumnEnd:11,gridColumnGap:11,gridRowGap:11,gridArea:11,gridGap:11,textSizeAdjust:11},edge:{userSelect:14,wrapFlow:14,wrapThrough:14,wrapMargin:14,scrollSnapType:14,scrollSnapPointsX:14,scrollSnapPointsY:14,scrollSnapDestination:14,scrollSnapCoordinate:14,hyphens:14,flowInto:14,flowFrom:14,breakBefore:14,breakAfter:14,breakInside:14,regionFragment:14,gridTemplateColumns:14,gridTemplateRows:14,gridTemplateAreas:14,gridTemplate:14,gridAutoColumns:14,gridAutoRows:14,gridAutoFlow:14,grid:14,gridRowStart:14,gridColumnStart:14,gridRowEnd:14,gridRow:14,gridColumn:14,gridColumnEnd:14,gridColumnGap:14,gridRowGap:14,gridArea:14,gridGap:14},ios_saf:{flex:8.1,flexBasis:8.1,flexDirection:8.1,flexGrow:8.1,flexFlow:8.1,flexShrink:8.1,flexWrap:8.1,alignContent:8.1,alignItems:8.1,alignSelf:8.1,justifyContent:8.1,order:8.1,transition:6,transitionDelay:6,transitionDuration:6,transitionProperty:6,transitionTimingFunction:6,transform:8.1,transformOrigin:8.1,transformOriginX:8.1,transformOriginY:8.1,backfaceVisibility:8.1,perspective:8.1,perspectiveOrigin:8.1,transformStyle:8.1,transformOriginZ:8.1,animation:8.1,animationDelay:8.1,animationDirection:8.1,animationFillMode:8.1,animationDuration:8.1,animationIterationCount:8.1,animationName:8.1,animationPlayState:8.1,animationTimingFunction:8.1,appearance:9.3,userSelect:9.3,backdropFilter:9.3,fontKerning:9.3,scrollSnapType:9.3,scrollSnapPointsX:9.3,scrollSnapPointsY:9.3,scrollSnapDestination:9.3,scrollSnapCoordinate:9.3,boxDecorationBreak:9.3,clipPath:9.3,maskImage:9.3,maskMode:9.3,maskRepeat:9.3,maskPosition:9.3,maskClip:9.3,maskOrigin:9.3,maskSize:9.3,maskComposite:9.3,mask:9.3,maskBorderSource:9.3,maskBorderMode:9.3,maskBorderSlice:9.3,maskBorderWidth:9.3,maskBorderOutset:9.3,maskBorderRepeat:9.3,maskBorder:9.3,maskType:9.3,textSizeAdjust:9.3,textDecorationStyle:9.3,textDecorationSkip:9.3,textDecorationLine:9.3,textDecorationColor:9.3,shapeImageThreshold:9.3,shapeImageMargin:9.3,shapeImageOutside:9.3,filter:9,hyphens:9.3,flowInto:9.3,flowFrom:9.3,breakBefore:8.1,breakAfter:8.1,breakInside:8.1,regionFragment:9.3,columnCount:8.1,columnFill:8.1,columnGap:8.1,columnRule:8.1,columnRuleColor:8.1,columnRuleStyle:8.1,columnRuleWidth:8.1,columns:8.1,columnSpan:8.1,columnWidth:8.1},android:{flex:4.2,flexBasis:4.2,flexDirection:4.2,flexGrow:4.2,flexFlow:4.2,flexShrink:4.2,flexWrap:4.2,alignContent:4.2,alignItems:4.2,alignSelf:4.2,justifyContent:4.2,order:4.2,transition:4.2,transitionDelay:4.2,transitionDuration:4.2,transitionProperty:4.2,transitionTimingFunction:4.2,transform:4.4,transformOrigin:4.4,transformOriginX:4.4,transformOriginY:4.4,backfaceVisibility:4.4,perspective:4.4,perspectiveOrigin:4.4,transformStyle:4.4,transformOriginZ:4.4,animation:4.4,animationDelay:4.4,animationDirection:4.4,animationFillMode:4.4,animationDuration:4.4,animationIterationCount:4.4,animationName:4.4,animationPlayState:4.4,animationTimingFunction:4.4,appearance:51,userSelect:51,fontKerning:4.4,textEmphasisPosition:51,textEmphasis:51,textEmphasisStyle:51,textEmphasisColor:51,boxDecorationBreak:51,clipPath:51,maskImage:51,maskMode:51,maskRepeat:51,maskPosition:51,maskClip:51,maskOrigin:51,maskSize:51,maskComposite:51,mask:51,maskBorderSource:51,maskBorderMode:51,maskBorderSlice:51,maskBorderWidth:51,maskBorderOutset:51,maskBorderRepeat:51,maskBorder:51,maskType:51,filter:51,fontFeatureSettings:4.4,breakAfter:51,breakBefore:51,breakInside:51,columnCount:51,columnFill:51,columnGap:51,columnRule:51,columnRuleColor:51,columnRuleStyle:51,columnRuleWidth:51,columns:51,columnSpan:51,columnWidth:51},and_chr:{appearance:51,userSelect:51,textEmphasisPosition:51,textEmphasis:51,textEmphasisStyle:51,textEmphasisColor:51,boxDecorationBreak:51,clipPath:51,maskImage:51,maskMode:51,maskRepeat:51,maskPosition:51,maskClip:51,maskOrigin:51,maskSize:51,maskComposite:51,mask:51,maskBorderSource:51,maskBorderMode:51,maskBorderSlice:51,maskBorderWidth:51,maskBorderOutset:51,maskBorderRepeat:51,maskBorder:51,maskType:51,textDecorationStyle:51,textDecorationSkip:51,textDecorationLine:51,textDecorationColor:51,filter:51},and_uc:{flex:9.9,flexBasis:9.9,flexDirection:9.9,flexGrow:9.9,flexFlow:9.9,flexShrink:9.9,flexWrap:9.9,alignContent:9.9,alignItems:9.9,alignSelf:9.9,justifyContent:9.9,order:9.9,transition:9.9,transitionDelay:9.9,transitionDuration:9.9,transitionProperty:9.9,transitionTimingFunction:9.9,transform:9.9,transformOrigin:9.9,transformOriginX:9.9,transformOriginY:9.9,backfaceVisibility:9.9,perspective:9.9,perspectiveOrigin:9.9,transformStyle:9.9,transformOriginZ:9.9,animation:9.9,animationDelay:9.9,animationDirection:9.9,animationFillMode:9.9,animationDuration:9.9,animationIterationCount:9.9,animationName:9.9,animationPlayState:9.9,animationTimingFunction:9.9,appearance:9.9,userSelect:9.9,fontKerning:9.9,textEmphasisPosition:9.9,textEmphasis:9.9,textEmphasisStyle:9.9,textEmphasisColor:9.9,maskImage:9.9,maskMode:9.9,maskRepeat:9.9,maskPosition:9.9,maskClip:9.9,maskOrigin:9.9,maskSize:9.9,maskComposite:9.9,mask:9.9,maskBorderSource:9.9,maskBorderMode:9.9,maskBorderSlice:9.9,maskBorderWidth:9.9,maskBorderOutset:9.9,maskBorderRepeat:9.9,maskBorder:9.9,maskType:9.9,textSizeAdjust:9.9,filter:9.9,hyphens:9.9,flowInto:9.9,flowFrom:9.9,breakBefore:9.9,breakAfter:9.9,breakInside:9.9,regionFragment:9.9,fontFeatureSettings:9.9,columnCount:9.9,columnFill:9.9,columnGap:9.9,columnRule:9.9,columnRuleColor:9.9,columnRuleStyle:9.9,columnRuleWidth:9.9,columns:9.9,columnSpan:9.9,columnWidth:9.9},op_mini:{}},Q=function(e,i,r){return r?[e,i]:e},$={"zoom-in":!0,"zoom-out":!0},ee={grab:!0,grabbing:!0},ie={flex:!0,"inline-flex":!0},re={maxHeight:!0,maxWidth:!0,width:!0,height:!0,columnWidth:!0,minWidth:!0,minHeight:!0},ne={"min-content":!0,"max-content":!0,"fill-available":!0,"fit-content":!0,"contain-floats":!0},oe=/linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/,te=function(e){var i=e.replace(/^(ms|Webkit|Moz|O)/,"");return i.charAt(0).toLowerCase()+i.slice(1)},ae={transition:!0,transitionProperty:!0},se={"space-around":"distribute","space-between":"justify","flex-start":"start","flex-end":"end",flex:"flexbox","inline-flex":"inline-flexbox"},le={alignContent:"msFlexLinePack",alignSelf:"msFlexItemAlign",alignItems:"msFlexAlign",justifyContent:"msFlexPack",order:"msFlexOrder",flexGrow:"msFlexPositive",flexShrink:"msFlexNegative",flexBasis:"msPreferredSize"},me={"space-around":"justify","space-between":"justify","flex-start":"start","flex-end":"end","wrap-reverse":"multiple",wrap:"multiple",flex:"box","inline-flex":"inline-box"},fe={alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:"WebkitBoxLines"},ce=["alignContent","alignSelf","order","flexGrow","flexShrink","flexBasis","flexDirection"],ue=Object.keys(fe).concat(ce),pe=[d,k,x,g,b,y,v,S,w,h],de=function(){function e(){var i=this,r=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];O.classCallCheck(this,e);var n="undefined"!=typeof navigator?navigator.userAgent:void 0;if(this._userAgent=r.userAgent||n,this._keepUnprefixed=r.keepUnprefixed||!1,this._browserInfo=Z(this._userAgent),!this._browserInfo||!this._browserInfo.prefix)return this._usePrefixAllFallback=!0,!1;this.cssPrefix=this._browserInfo.prefix.css,this.jsPrefix=this._browserInfo.prefix.inline,this.prefixedKeyframes=H(this._browserInfo);var o=this._browserInfo.browser&&J[this._browserInfo.browser];o?(this._requiresPrefix=Object.keys(o).filter(function(e){return o[e]>=i._browserInfo.version}).reduce(function(e,i){return e[i]=!0,e},{}),this._hasPropsRequiringPrefix=Object.keys(this._requiresPrefix).length>0):this._usePrefixAllFallback=!0}return O.createClass(e,[{key:"prefix",value:function(e){var r=this;return this._usePrefixAllFallback?u(e):this._hasPropsRequiringPrefix?(Object.keys(e).forEach(function(i){var n=e[i];n instanceof Object&&!Array.isArray(n)?e[i]=r.prefix(n):r._requiresPrefix[i]&&(e[r.jsPrefix+P(i)]=n,r._keepUnprefixed||delete e[i])}),Object.keys(e).forEach(function(i){[].concat(e[i]).forEach(function(n){pe.forEach(function(o){C(e,o({property:i,value:n,styles:e,browserInfo:r._browserInfo,prefix:{js:r.jsPrefix,css:r.cssPrefix,keyframes:r.prefixedKeyframes},keepUnprefixed:r._keepUnprefixed,requiresPrefix:r._requiresPrefix}),n,r._keepUnprefixed)})})}),i(e)):e}}],[{key:"prefixAll",value:function(e){return u(e)}}]),e}();return de}); \ No newline at end of file diff --git a/flowtypes/PluginMetaData.js b/flowtypes/PluginMetaData.js new file mode 100644 index 0000000..bfaeb1c --- /dev/null +++ b/flowtypes/PluginMetaData.js @@ -0,0 +1,8 @@ +export type PluginMetaData = { + browserName: string, + browserVersion: number, + jsPrefix: string, + cssPrefix: string, + keepUnprefixed: boolean, + requiresPrefix: boolean +}; diff --git a/generator/generateData.js b/generator/generateData.js index 6ee09df..a3815da 100644 --- a/generator/generateData.js +++ b/generator/generateData.js @@ -24,11 +24,11 @@ const prefixBrowsers = { const prefixProperties = Object.keys(prefixBrowsers).reduce((out, browser) => { const prefix = prefixBrowsers[browser] - Object.keys(searchMap).forEach(searchKey => { + Object.keys(searchMap).forEach((searchKey) => { const versions = caniuse.getSupport(searchKey) - const properties = [ ].concat(searchMap[searchKey]) + const properties = [].concat(searchMap[searchKey]) - properties.forEach(prop => { + properties.forEach((prop) => { if (versions[browser].x >= config[browser]) { out[prefix][prop] = true } @@ -36,53 +36,83 @@ const prefixProperties = Object.keys(prefixBrowsers).reduce((out, browser) => { }) return out -}, { Webkit: { }, Moz: { }, ms: { } }) +}, { + Webkit: {}, + Moz: {}, + ms: {} +}) // remove flexprops from IE -const flexPropsIE = [ 'alignContent', 'alignSelf', 'alignItems', 'justifyContent', 'order', 'flexGrow', 'flexShrink', 'flexBasis' ] - -flexPropsIE.forEach(prop => { +const flexPropsIE = [ + 'alignContent', + 'alignSelf', + 'alignItems', + 'justifyContent', + 'order', + 'flexGrow', + 'flexShrink', + 'flexBasis' +] + +flexPropsIE.forEach((prop) => { delete prefixProperties.ms[prop] }) delete prefixProperties.Webkit.transition -const propertyPrefixes = Object.keys(prefixProperties).reduce((prefixes, prefix) => { - Object.keys(prefixProperties[prefix]).forEach(property => { +const propertyPrefixes = Object.keys(prefixProperties).reduce(( + prefixes, + prefix +) => { + Object.keys(prefixProperties[prefix]).forEach((property) => { if (!prefixes[property]) { - prefixes[property] = [ ] + prefixes[property] = [] } prefixes[property].push(prefix) }) return prefixes -}, { }) - -let file = 'export default ' + JSON.stringify(propertyPrefixes) +}, {}) +const file = `export default ${JSON.stringify(propertyPrefixes)}` -fs.writeFile('./modules/static/prefixProps.js', file, err => { +fs.writeFile('./modules/static/prefixProps.js', file, (err) => { if (err) { throw err } - console.log('Successfully generated static property vendor-prefix data based on before generated caniuse data mapping.') + console.log( + 'Successfully generated static property vendor-prefix data based on before generated caniuse data mapping.' + ) }) -const browsers = [ 'chrome', 'safari', 'firefox', 'opera', 'ie', 'edge', 'ios_saf', 'android', 'and_chr', 'and_uc', 'op_mini', 'ie_mob' ] +const browsers = [ + 'chrome', + 'safari', + 'firefox', + 'opera', + 'ie', + 'edge', + 'ios_saf', + 'android', + 'and_chr', + 'and_uc', + 'op_mini', + 'ie_mob' +] function gatherInformation() { - const prefixProperties = { } - browsers.forEach(function(browser) { - prefixProperties[browser] = { } + const prefixProperties = {} + browsers.forEach((browser) => { + prefixProperties[browser] = {} }) for (const search in searchMap) { let properties = searchMap[search] const versions = caniuse.getSupport(search, true) if (properties instanceof Array !== true) { - properties = [ properties ] + properties = [properties] } - properties.forEach(function(prop) { + properties.forEach((prop) => { for (const prefix in prefixProperties) { if (versions[prefix].x >= config[prefix]) { prefixProperties[prefix][prop] = versions[prefix].x @@ -91,18 +121,24 @@ function gatherInformation() { }) } - prefixProperties.ie = assign({ }, prefixProperties.ie, prefixProperties.ie_mob) + prefixProperties.ie = assign( + {}, + prefixProperties.ie, + prefixProperties.ie_mob + ) delete prefixProperties.ie_mob - flexPropsIE.forEach(function(prop) { + flexPropsIE.forEach((prop) => { delete prefixProperties.ie[prop] }) - return 'export default ' + JSON.stringify(prefixProperties) + return `export default ${JSON.stringify(prefixProperties)}` } -fs.writeFile('./modules/prefixProps.js', gatherInformation(), function(err) { +fs.writeFile('./modules/dynamic/prefixProps.js', gatherInformation(), (err) => { if (err) { throw err } - console.log('Successfully generated CSS property vendor-prefix data using latest caniuse.com data.') + console.log( + 'Successfully generated CSS property vendor-prefix data using latest caniuse.com data.' + ) console.log('Support following browser: ', browsers.join(', ')) }) diff --git a/modules/Prefixer.js b/modules/Prefixer.js deleted file mode 100644 index df26402..0000000 --- a/modules/Prefixer.js +++ /dev/null @@ -1,151 +0,0 @@ -import prefixAll from './static/prefixAll' -import getBrowserInformation from './utils/getBrowserInformation' -import getPrefixedKeyframes from './utils/getPrefixedKeyframes' -import capitalizeString from './utils/capitalizeString' -import sortPrefixedStyle from './utils/sortPrefixedStyle' -import prefixProps from './prefixProps' - -import position from './plugins/position' -import calc from './plugins/calc' -import zoomCursor from './plugins/zoomCursor' -import grabCursor from './plugins/grabCursor' -import flex from './plugins/flex' -import sizing from './plugins/sizing' -import gradient from './plugins/gradient' -import transition from './plugins/transition' -// special flexbox specifications -import flexboxIE from './plugins/flexboxIE' -import flexboxOld from './plugins/flexboxOld' - -const plugins = [ - position, - calc, - zoomCursor, - grabCursor, - sizing, - gradient, - transition, - flexboxIE, - flexboxOld, - // this must be run AFTER the flexbox specs - flex -] - -export default class Prefixer { - /** - * Instantiante a new prefixer - * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com - * @param {string} keepUnprefixed - keeps unprefixed properties and values - */ - constructor(options = { }) { - const defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined - - this._userAgent = options.userAgent || defaultUserAgent - this._keepUnprefixed = options.keepUnprefixed || false - - this._browserInfo = getBrowserInformation(this._userAgent) - - // Checks if the userAgent was resolved correctly - if (this._browserInfo && this._browserInfo.prefix) { - // set additional prefix information - this.cssPrefix = this._browserInfo.prefix.css - this.jsPrefix = this._browserInfo.prefix.inline - this.prefixedKeyframes = getPrefixedKeyframes(this._browserInfo) - } else { - this._usePrefixAllFallback = true - return false - } - - const data = this._browserInfo.browser && prefixProps[this._browserInfo.browser] - if (data) { - this._requiresPrefix = Object.keys(data).filter(key => data[key] >= this._browserInfo.version).reduce((result, name) => { - result[name] = true - return result - }, { }) - this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0 - } else { - this._usePrefixAllFallback = true - } - } - - /** - * Returns a prefixed version of the style object - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - prefix(styles) { - // use prefixAll as fallback if userAgent can not be resolved - if (this._usePrefixAllFallback) { - return prefixAll(styles) - } - - // only add prefixes if needed - if (!this._hasPropsRequiringPrefix) { - return styles - } - - Object.keys(styles).forEach(property => { - let value = styles[property] - if (value instanceof Object && !Array.isArray(value)) { - // recurse through nested style objects - styles[property] = this.prefix(value) - } else { - // add prefixes if needed - if (this._requiresPrefix[property]) { - styles[this.jsPrefix + capitalizeString(property)] = value - if (!this._keepUnprefixed) { - delete styles[property] - } - } - } - }) - - Object.keys(styles).forEach(property => { - [ ].concat(styles[property]).forEach(value => { - // resolve plugins - plugins.forEach(plugin => { - // generates a new plugin interface with current data - assignStyles(styles, plugin({ - property: property, - value: value, - styles: styles, - browserInfo: this._browserInfo, - prefix: { - js: this.jsPrefix, - css: this.cssPrefix, - keyframes: this.prefixedKeyframes - }, - keepUnprefixed: this._keepUnprefixed, - requiresPrefix: this._requiresPrefix - }), value, this._keepUnprefixed) - }) - }) - }) - - return sortPrefixedStyle(styles) - } - - /** - * Returns a prefixed version of the style object using all vendor prefixes - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - static prefixAll(styles) { - return prefixAll(styles) - } -} - -function assignStyles(base, extend = { }, value, keepUnprefixed) { - Object.keys(extend).forEach(property => { - const baseValue = base[property] - if (Array.isArray(baseValue)) { - [ ].concat(extend[property]).forEach(val => { - if (base[property].indexOf(val) === -1) { - base[property].splice(baseValue.indexOf(value), keepUnprefixed ? 0 : 1, val) - } - }) - } else { - base[property] = extend[property] - } - }) -} diff --git a/modules/dynamic/Prefixer.js b/modules/dynamic/Prefixer.js new file mode 100644 index 0000000..d32f9f7 --- /dev/null +++ b/modules/dynamic/Prefixer.js @@ -0,0 +1,154 @@ +import prefixValue from '../utils/prefixValue' + +import getBrowserInformation from '../utils/getBrowserInformation' +import getPrefixedKeyframes from '../utils/getPrefixedKeyframes' +import capitalizeString from '../utils/capitalizeString' +import addNewValuesOnly from '../utils/addNewValuesOnly' +import isObject from '../utils/isObject' + +import prefixProps from './prefixProps' +import prefixAll from '../static/prefixAll' + +import calc from './plugins/calc' +import flex from './plugins/flex' +import flexboxIE from './plugins/flexboxIE' +import flexboxOld from './plugins/flexboxOld' +import grabCursor from './plugins/grabCursor' +import gradient from './plugins/gradient' +import position from './plugins/position' +import sizing from './plugins/sizing' +import transition from './plugins/transition' +import zoomCursor from './plugins/zoomCursor' + +const plugins = [ + position, + calc, + zoomCursor, + grabCursor, + sizing, + gradient, + transition, + flexboxIE, + flexboxOld, + flex +] + +export default class Prefixer { + /** + * Instantiante a new prefixer + * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com + * @param {string} keepUnprefixed - keeps unprefixed properties and values + */ + constructor(options = {}) { + const defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined + + this._userAgent = options.userAgent || defaultUserAgent + this._keepUnprefixed = options.keepUnprefixed || false + + if (this._userAgent) { + this._browserInfo = getBrowserInformation(this._userAgent) + } + + // Checks if the userAgent was resolved correctly + if (this._browserInfo && this._browserInfo.cssPrefix) { + this.prefixedKeyframes = getPrefixedKeyframes( + this._browserInfo.browserName, + this._browserInfo.browserVersion, + this._browserInfo.cssPrefix + ) + } else { + this._useFallback = true + return false + } + + const prefixData = this._browserInfo.browserName && prefixProps[this._browserInfo.browserName] + if (prefixData) { + this._requiresPrefix = {} + + for (const property in prefixData) { + if (prefixData[property] >= this._browserInfo.browserVersion) { + this._requiresPrefix[property] = true + } + } + + this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0 + } else { + this._useFallback = true + } + + this._metaData = { + browserVersion: this._browserInfo.browserVersion, + browserName: this._browserInfo.browserName, + cssPrefix: this._browserInfo.cssPrefix, + jsPrefix: this._browserInfo.jsPrefix, + keepUnprefixed: this._keepUnprefixed, + requiresPrefix: this._requiresPrefix + } + } + + prefix(style: Object): Object { + // use prefixAll as fallback if userAgent can not be resolved + if (this._useFallback) { + return prefixAll(style) + } + + // only add prefixes if needed + if (!this._hasPropsRequiringPrefix) { + return style + } + + return this._prefixStyle(style) + } + + _prefixStyle(style: Object): Object { + for (const property in style) { + const value = style[property] + + // handle nested objects + if (isObject(value)) { + style[property] = this.prefix(value) + // handle array values + } else if (Array.isArray(value)) { + const combinedValue = [] + + for (let i = 0, len = value.length; i < len; ++i) { + const processedValue = prefixValue(plugins, property, value[i], style, this._metaData) + addNewValuesOnly(combinedValue, processedValue || value[i]) + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue + } + } else { + const processedValue = prefixValue(plugins, property, value, style, this._metaData) + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (processedValue) { + style[property] = processedValue + } + + // add prefixes to properties + if (this._requiresPrefix[property]) { + style[this._browserInfo.jsPrefix + capitalizeString(property)] = value + if (!this._keepUnprefixed) { + delete style[property] + } + } + } + } + + return style + } + + /** + * Returns a prefixed version of the style object using all vendor prefixes + * @param {Object} styles - Style object that gets prefixed properties added + * @returns {Object} - Style object with prefixed properties and values + */ + static prefixAll(styles) { + return prefixAll(styles) + } +} diff --git a/modules/dynamic/plugins/calc.js b/modules/dynamic/plugins/calc.js new file mode 100644 index 0000000..b1a54d7 --- /dev/null +++ b/modules/dynamic/plugins/calc.js @@ -0,0 +1,22 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +export default function calc( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + typeof value === 'string' && + value.indexOf('calc(') > -1 && + (browserName === 'firefox' && browserVersion < 15 || + browserName === 'chrome' && browserVersion < 25 || + browserName === 'safari' && browserVersion < 6.1 || + browserName === 'ios_saf' && browserVersion < 7) + ) { + return getPrefixedValue(value.replace(/calc\(/g, `${cssPrefix}calc(`), value, keepUnprefixed) + } +} diff --git a/modules/dynamic/plugins/flex.js b/modules/dynamic/plugins/flex.js new file mode 100644 index 0000000..7dd3f62 --- /dev/null +++ b/modules/dynamic/plugins/flex.js @@ -0,0 +1,27 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const values = { + flex: true, + 'inline-flex': true +} + +export default function flex( + property: string, + value: any, + style: ?Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + property === 'display' && + values[value] && + (browserName === 'chrome' && (browserVersion < 29 && browserVersion > 20) || + (browserName === 'safari' || browserName === 'ios_saf') && + (browserVersion < 9 && browserVersion > 6) || + browserName === 'opera' && (browserVersion === 15 || browserVersion === 16)) + ) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed) + } +} diff --git a/modules/dynamic/plugins/flexboxIE.js b/modules/dynamic/plugins/flexboxIE.js new file mode 100644 index 0000000..00e048b --- /dev/null +++ b/modules/dynamic/plugins/flexboxIE.js @@ -0,0 +1,46 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const alternativeValues = { + 'space-around': 'distribute', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + flex: 'flexbox', + 'inline-flex': 'inline-flexbox' +} +const alternativeProps = { + alignContent: 'msFlexLinePack', + alignSelf: 'msFlexItemAlign', + alignItems: 'msFlexAlign', + justifyContent: 'msFlexPack', + order: 'msFlexOrder', + flexGrow: 'msFlexPositive', + flexShrink: 'msFlexNegative', + flexBasis: 'msPreferredSize' +} + +export default function flexboxIE( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + (alternativeProps[property] || + property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && + ((browserName === 'ie_mob' || browserName === 'ie') && browserVersion === 10) + ) { + if (!keepUnprefixed && !Array.isArray(style[property])) { + delete style[property] + } + if (property === 'display' && alternativeValues[value]) { + return getPrefixedValue(cssPrefix + alternativeValues[value], value, keepUnprefixed) + } + if (alternativeProps[property]) { + style[alternativeProps[property]] = alternativeValues[value] || value + } + } +} diff --git a/modules/dynamic/plugins/flexboxOld.js b/modules/dynamic/plugins/flexboxOld.js new file mode 100644 index 0000000..14a7713 --- /dev/null +++ b/modules/dynamic/plugins/flexboxOld.js @@ -0,0 +1,71 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const alternativeValues = { + 'space-around': 'justify', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + 'wrap-reverse': 'multiple', + wrap: 'multiple', + flex: 'box', + 'inline-flex': 'inline-box' +} + +const alternativeProps = { + alignItems: 'WebkitBoxAlign', + justifyContent: 'WebkitBoxPack', + flexWrap: 'WebkitBoxLines' +} + +const otherProps = [ + 'alignContent', + 'alignSelf', + 'order', + 'flexGrow', + 'flexShrink', + 'flexBasis', + 'flexDirection' +] +const properties = Object.keys(alternativeProps).concat(otherProps) + +export default function flexboxOld( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + (properties.indexOf(property) > -1 || + property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && + (browserName === 'firefox' && browserVersion < 22 || + browserName === 'chrome' && browserVersion < 21 || + (browserName === 'safari' || browserName === 'ios_saf') && browserVersion <= 6.1 || + browserName === 'android' && browserVersion < 4.4 || + browserName === 'and_uc') + ) { + if (!keepUnprefixed && !Array.isArray(style[property])) { + delete style[property] + } + if (property === 'flexDirection' && typeof value === 'string') { + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical' + } else { + style.WebkitBoxOrient = 'horizontal' + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse' + } else { + style.WebkitBoxDirection = 'normal' + } + } + if (property === 'display' && alternativeValues[value]) { + return getPrefixedValue(cssPrefix + alternativeValues[value], value, keepUnprefixed) + } + if (alternativeProps[property]) { + style[alternativeProps[property]] = alternativeValues[value] || value + } + } +} diff --git a/modules/dynamic/plugins/grabCursor.js b/modules/dynamic/plugins/grabCursor.js new file mode 100644 index 0000000..7ee9df0 --- /dev/null +++ b/modules/dynamic/plugins/grabCursor.js @@ -0,0 +1,30 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const values = { + grab: true, + grabbing: true +} + +export default function grabCursor( + property: string, + value: any, + style: Object, + { browserName, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + // adds prefixes for firefox, chrome, safari, and opera regardless of + // version until a reliable brwoser support info can be found + // see: https://github.com/rofrischmann/inline-style-prefixer/issues/79 + if ( + property === 'cursor' && + values[value] && + (browserName === 'firefox' || + browserName === 'chrome' || + browserName === 'safari' || + browserName === 'opera') + ) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed) + } +} diff --git a/modules/dynamic/plugins/gradient.js b/modules/dynamic/plugins/gradient.js new file mode 100644 index 0000000..8cd4786 --- /dev/null +++ b/modules/dynamic/plugins/gradient.js @@ -0,0 +1,26 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/ + +export default function gradient( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + typeof value === 'string' && + value.match(values) !== null && + (browserName === 'firefox' && browserVersion < 16 || + browserName === 'chrome' && browserVersion < 26 || + (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 7 || + (browserName === 'opera' || browserName === 'op_mini') && browserVersion < 12.1 || + browserName === 'android' && browserVersion < 4.4 || + browserName === 'and_uc') + ) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed) + } +} diff --git a/modules/dynamic/plugins/position.js b/modules/dynamic/plugins/position.js new file mode 100644 index 0000000..c5f8cd3 --- /dev/null +++ b/modules/dynamic/plugins/position.js @@ -0,0 +1,18 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +export default function position( + property: string, + value: any, + { browserName, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + property === 'position' && + value === 'sticky' && + (browserName === 'safari' || browserName === 'ios_saf') + ) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed) + } +} diff --git a/modules/plugins/sizing.js b/modules/dynamic/plugins/sizing.js similarity index 52% rename from modules/plugins/sizing.js rename to modules/dynamic/plugins/sizing.js index a696ff0..0c62098 100644 --- a/modules/plugins/sizing.js +++ b/modules/dynamic/plugins/sizing.js @@ -1,4 +1,7 @@ -import getPrefixedValue from '../utils/getPrefixedValue' +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' const properties = { maxHeight: true, @@ -17,12 +20,15 @@ const values = { 'contain-floats': true } -export default function sizing({ property, value, prefix: { css }, keepUnprefixed }) { +export default function sizing( + property: string, + value: any, + style: Object, + { cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { // This might change in the future // Keep an eye on it if (properties[property] && values[value]) { - return { - [property]: getPrefixedValue(css + value, value, keepUnprefixed) - } + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed) } } diff --git a/modules/dynamic/plugins/transition.js b/modules/dynamic/plugins/transition.js new file mode 100644 index 0000000..49f1927 --- /dev/null +++ b/modules/dynamic/plugins/transition.js @@ -0,0 +1,44 @@ +/* @flow */ +import hyphenateStyleName from 'hyphenate-style-name' + +import unprefixProperty from '../../utils/unprefixProperty' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const properties = { + transition: true, + transitionProperty: true +} + +let requiresPrefixDashCased: Array + +export default function transition( + property: string, + value: any, + style: Object, + { cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData +): ?Array | ?any { + // also check for already prefixed transitions + const unprefixedProperty = unprefixProperty(property) + + if (typeof value === 'string' && properties[unprefixedProperty]) { + // memoize the prefix array for later use + if (!requiresPrefixDashCased) { + requiresPrefixDashCased = Object.keys(requiresPrefix).map(prop => hyphenateStyleName(prop)) + } + + // only split multi values, not cubic beziers + const multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g) + + requiresPrefixDashCased.forEach((prop) => { + multipleValues.forEach((val, index) => { + if (val.indexOf(prop) > -1 && prop !== 'order') { + multipleValues[index] = val.replace(prop, cssPrefix + prop) + + (keepUnprefixed ? `,${val}` : '') + } + }) + }) + + return multipleValues.join(',') + } +} diff --git a/modules/dynamic/plugins/zoomCursor.js b/modules/dynamic/plugins/zoomCursor.js new file mode 100644 index 0000000..fe25eda --- /dev/null +++ b/modules/dynamic/plugins/zoomCursor.js @@ -0,0 +1,27 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +const values = { + 'zoom-in': true, + 'zoom-out': true +} + +export default function zoomCursor( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + property === 'cursor' && + values[value] && + (browserName === 'firefox' && browserVersion < 24 || + browserName === 'chrome' && browserVersion < 37 || + browserName === 'safari' && browserVersion < 9 || + browserName === 'opera' && browserVersion < 24) + ) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed) + } +} diff --git a/modules/dynamic/prefixProps.js b/modules/dynamic/prefixProps.js new file mode 100644 index 0000000..cb3be66 --- /dev/null +++ b/modules/dynamic/prefixProps.js @@ -0,0 +1 @@ +export default {"chrome":{"transform":35,"transformOrigin":35,"transformOriginX":35,"transformOriginY":35,"backfaceVisibility":35,"perspective":35,"perspectiveOrigin":35,"transformStyle":35,"transformOriginZ":35,"animation":42,"animationDelay":42,"animationDirection":42,"animationFillMode":42,"animationDuration":42,"animationIterationCount":42,"animationName":42,"animationPlayState":42,"animationTimingFunction":42,"appearance":59,"userSelect":53,"fontKerning":32,"textEmphasisPosition":59,"textEmphasis":59,"textEmphasisStyle":59,"textEmphasisColor":59,"boxDecorationBreak":59,"clipPath":54,"maskImage":59,"maskMode":59,"maskRepeat":59,"maskPosition":59,"maskClip":59,"maskOrigin":59,"maskSize":59,"maskComposite":59,"mask":59,"maskBorderSource":59,"maskBorderMode":59,"maskBorderSlice":59,"maskBorderWidth":59,"maskBorderOutset":59,"maskBorderRepeat":59,"maskBorder":59,"maskType":59,"textDecorationStyle":56,"textDecorationSkip":56,"textDecorationLine":56,"textDecorationColor":56,"filter":52,"fontFeatureSettings":47,"breakAfter":49,"breakBefore":49,"breakInside":49,"columnCount":49,"columnFill":49,"columnGap":49,"columnRule":49,"columnRuleColor":49,"columnRuleStyle":49,"columnRuleWidth":49,"columns":49,"columnSpan":49,"columnWidth":49},"safari":{"flex":8,"flexBasis":8,"flexDirection":8,"flexGrow":8,"flexFlow":8,"flexShrink":8,"flexWrap":8,"alignContent":8,"alignItems":8,"alignSelf":8,"justifyContent":8,"order":8,"transition":6,"transitionDelay":6,"transitionDuration":6,"transitionProperty":6,"transitionTimingFunction":6,"transform":8,"transformOrigin":8,"transformOriginX":8,"transformOriginY":8,"backfaceVisibility":8,"perspective":8,"perspectiveOrigin":8,"transformStyle":8,"transformOriginZ":8,"animation":8,"animationDelay":8,"animationDirection":8,"animationFillMode":8,"animationDuration":8,"animationIterationCount":8,"animationName":8,"animationPlayState":8,"animationTimingFunction":8,"appearance":10.1,"userSelect":10.1,"backdropFilter":10.1,"fontKerning":9,"scrollSnapType":10.1,"scrollSnapPointsX":10.1,"scrollSnapPointsY":10.1,"scrollSnapDestination":10.1,"scrollSnapCoordinate":10.1,"textEmphasisPosition":7,"textEmphasis":7,"textEmphasisStyle":7,"textEmphasisColor":7,"boxDecorationBreak":10.1,"clipPath":10.1,"maskImage":10.1,"maskMode":10.1,"maskRepeat":10.1,"maskPosition":10.1,"maskClip":10.1,"maskOrigin":10.1,"maskSize":10.1,"maskComposite":10.1,"mask":10.1,"maskBorderSource":10.1,"maskBorderMode":10.1,"maskBorderSlice":10.1,"maskBorderWidth":10.1,"maskBorderOutset":10.1,"maskBorderRepeat":10.1,"maskBorder":10.1,"maskType":10.1,"textDecorationStyle":10.1,"textDecorationSkip":10.1,"textDecorationLine":10.1,"textDecorationColor":10.1,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10.1,"flowInto":10.1,"flowFrom":10.1,"breakBefore":8,"breakAfter":8,"breakInside":8,"regionFragment":10.1,"columnCount":8,"columnFill":8,"columnGap":8,"columnRule":8,"columnRuleColor":8,"columnRuleStyle":8,"columnRuleWidth":8,"columns":8,"columnSpan":8,"columnWidth":8},"firefox":{"appearance":54,"userSelect":54,"boxSizing":28,"textAlignLast":48,"textDecorationStyle":35,"textDecorationSkip":35,"textDecorationLine":35,"textDecorationColor":35,"tabSize":54,"hyphens":42,"fontFeatureSettings":33,"breakAfter":51,"breakBefore":51,"breakInside":51,"columnCount":51,"columnFill":51,"columnGap":51,"columnRule":51,"columnRuleColor":51,"columnRuleStyle":51,"columnRuleWidth":51,"columns":51,"columnSpan":51,"columnWidth":51},"opera":{"flex":16,"flexBasis":16,"flexDirection":16,"flexGrow":16,"flexFlow":16,"flexShrink":16,"flexWrap":16,"alignContent":16,"alignItems":16,"alignSelf":16,"justifyContent":16,"order":16,"transform":22,"transformOrigin":22,"transformOriginX":22,"transformOriginY":22,"backfaceVisibility":22,"perspective":22,"perspectiveOrigin":22,"transformStyle":22,"transformOriginZ":22,"animation":29,"animationDelay":29,"animationDirection":29,"animationFillMode":29,"animationDuration":29,"animationIterationCount":29,"animationName":29,"animationPlayState":29,"animationTimingFunction":29,"appearance":44,"userSelect":40,"fontKerning":19,"textEmphasisPosition":44,"textEmphasis":44,"textEmphasisStyle":44,"textEmphasisColor":44,"boxDecorationBreak":44,"clipPath":41,"maskImage":44,"maskMode":44,"maskRepeat":44,"maskPosition":44,"maskClip":44,"maskOrigin":44,"maskSize":44,"maskComposite":44,"mask":44,"maskBorderSource":44,"maskBorderMode":44,"maskBorderSlice":44,"maskBorderWidth":44,"maskBorderOutset":44,"maskBorderRepeat":44,"maskBorder":44,"maskType":44,"textDecorationStyle":43,"textDecorationSkip":43,"textDecorationLine":43,"textDecorationColor":43,"filter":39,"fontFeatureSettings":34,"breakAfter":36,"breakBefore":36,"breakInside":36,"columnCount":36,"columnFill":36,"columnGap":36,"columnRule":36,"columnRuleColor":36,"columnRuleStyle":36,"columnRuleWidth":36,"columns":36,"columnSpan":36,"columnWidth":36},"ie":{"flex":10,"flexDirection":10,"flexFlow":10,"flexWrap":10,"transform":9,"transformOrigin":9,"transformOriginX":9,"transformOriginY":9,"userSelect":11,"wrapFlow":11,"wrapThrough":11,"wrapMargin":11,"scrollSnapType":11,"scrollSnapPointsX":11,"scrollSnapPointsY":11,"scrollSnapDestination":11,"scrollSnapCoordinate":11,"touchAction":10,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"gridTemplateColumns":11,"gridTemplateRows":11,"gridTemplateAreas":11,"gridTemplate":11,"gridAutoColumns":11,"gridAutoRows":11,"gridAutoFlow":11,"grid":11,"gridRowStart":11,"gridColumnStart":11,"gridRowEnd":11,"gridRow":11,"gridColumn":11,"gridColumnEnd":11,"gridColumnGap":11,"gridRowGap":11,"gridArea":11,"gridGap":11,"textSizeAdjust":11},"edge":{"userSelect":15,"wrapFlow":15,"wrapThrough":15,"wrapMargin":15,"scrollSnapType":15,"scrollSnapPointsX":15,"scrollSnapPointsY":15,"scrollSnapDestination":15,"scrollSnapCoordinate":15,"hyphens":15,"flowInto":15,"flowFrom":15,"breakBefore":15,"breakAfter":15,"breakInside":15,"regionFragment":15,"gridTemplateColumns":15,"gridTemplateRows":15,"gridTemplateAreas":15,"gridTemplate":15,"gridAutoColumns":15,"gridAutoRows":15,"gridAutoFlow":15,"grid":15,"gridRowStart":15,"gridColumnStart":15,"gridRowEnd":15,"gridRow":15,"gridColumn":15,"gridColumnEnd":15,"gridColumnGap":15,"gridRowGap":15,"gridArea":15,"gridGap":15},"ios_saf":{"flex":8.1,"flexBasis":8.1,"flexDirection":8.1,"flexGrow":8.1,"flexFlow":8.1,"flexShrink":8.1,"flexWrap":8.1,"alignContent":8.1,"alignItems":8.1,"alignSelf":8.1,"justifyContent":8.1,"order":8.1,"transition":6,"transitionDelay":6,"transitionDuration":6,"transitionProperty":6,"transitionTimingFunction":6,"transform":8.1,"transformOrigin":8.1,"transformOriginX":8.1,"transformOriginY":8.1,"backfaceVisibility":8.1,"perspective":8.1,"perspectiveOrigin":8.1,"transformStyle":8.1,"transformOriginZ":8.1,"animation":8.1,"animationDelay":8.1,"animationDirection":8.1,"animationFillMode":8.1,"animationDuration":8.1,"animationIterationCount":8.1,"animationName":8.1,"animationPlayState":8.1,"animationTimingFunction":8.1,"appearance":10,"userSelect":10,"backdropFilter":10,"fontKerning":10,"scrollSnapType":10,"scrollSnapPointsX":10,"scrollSnapPointsY":10,"scrollSnapDestination":10,"scrollSnapCoordinate":10,"boxDecorationBreak":10,"clipPath":10,"maskImage":10,"maskMode":10,"maskRepeat":10,"maskPosition":10,"maskClip":10,"maskOrigin":10,"maskSize":10,"maskComposite":10,"mask":10,"maskBorderSource":10,"maskBorderMode":10,"maskBorderSlice":10,"maskBorderWidth":10,"maskBorderOutset":10,"maskBorderRepeat":10,"maskBorder":10,"maskType":10,"textSizeAdjust":10,"textDecorationStyle":10,"textDecorationSkip":10,"textDecorationLine":10,"textDecorationColor":10,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10,"flowInto":10,"flowFrom":10,"breakBefore":8.1,"breakAfter":8.1,"breakInside":8.1,"regionFragment":10,"columnCount":8.1,"columnFill":8.1,"columnGap":8.1,"columnRule":8.1,"columnRuleColor":8.1,"columnRuleStyle":8.1,"columnRuleWidth":8.1,"columns":8.1,"columnSpan":8.1,"columnWidth":8.1},"android":{"flex":4.2,"flexBasis":4.2,"flexDirection":4.2,"flexGrow":4.2,"flexFlow":4.2,"flexShrink":4.2,"flexWrap":4.2,"alignContent":4.2,"alignItems":4.2,"alignSelf":4.2,"justifyContent":4.2,"order":4.2,"transition":4.2,"transitionDelay":4.2,"transitionDuration":4.2,"transitionProperty":4.2,"transitionTimingFunction":4.2,"transform":4.4,"transformOrigin":4.4,"transformOriginX":4.4,"transformOriginY":4.4,"backfaceVisibility":4.4,"perspective":4.4,"perspectiveOrigin":4.4,"transformStyle":4.4,"transformOriginZ":4.4,"animation":4.4,"animationDelay":4.4,"animationDirection":4.4,"animationFillMode":4.4,"animationDuration":4.4,"animationIterationCount":4.4,"animationName":4.4,"animationPlayState":4.4,"animationTimingFunction":4.4,"appearance":53,"userSelect":53,"fontKerning":4.4,"textEmphasisPosition":53,"textEmphasis":53,"textEmphasisStyle":53,"textEmphasisColor":53,"boxDecorationBreak":53,"clipPath":53,"maskImage":53,"maskMode":53,"maskRepeat":53,"maskPosition":53,"maskClip":53,"maskOrigin":53,"maskSize":53,"maskComposite":53,"mask":53,"maskBorderSource":53,"maskBorderMode":53,"maskBorderSlice":53,"maskBorderWidth":53,"maskBorderOutset":53,"maskBorderRepeat":53,"maskBorder":53,"maskType":53,"filter":4.4,"fontFeatureSettings":4.4,"breakAfter":53,"breakBefore":53,"breakInside":53,"columnCount":53,"columnFill":53,"columnGap":53,"columnRule":53,"columnRuleColor":53,"columnRuleStyle":53,"columnRuleWidth":53,"columns":53,"columnSpan":53,"columnWidth":53},"and_chr":{"appearance":55,"textEmphasisPosition":55,"textEmphasis":55,"textEmphasisStyle":55,"textEmphasisColor":55,"boxDecorationBreak":55,"maskImage":55,"maskMode":55,"maskRepeat":55,"maskPosition":55,"maskClip":55,"maskOrigin":55,"maskSize":55,"maskComposite":55,"mask":55,"maskBorderSource":55,"maskBorderMode":55,"maskBorderSlice":55,"maskBorderWidth":55,"maskBorderOutset":55,"maskBorderRepeat":55,"maskBorder":55,"maskType":55,"textDecorationStyle":55,"textDecorationSkip":55,"textDecorationLine":55,"textDecorationColor":55},"and_uc":{"flex":11,"flexBasis":11,"flexDirection":11,"flexGrow":11,"flexFlow":11,"flexShrink":11,"flexWrap":11,"alignContent":11,"alignItems":11,"alignSelf":11,"justifyContent":11,"order":11,"transition":11,"transitionDelay":11,"transitionDuration":11,"transitionProperty":11,"transitionTimingFunction":11,"transform":11,"transformOrigin":11,"transformOriginX":11,"transformOriginY":11,"backfaceVisibility":11,"perspective":11,"perspectiveOrigin":11,"transformStyle":11,"transformOriginZ":11,"animation":11,"animationDelay":11,"animationDirection":11,"animationFillMode":11,"animationDuration":11,"animationIterationCount":11,"animationName":11,"animationPlayState":11,"animationTimingFunction":11,"appearance":11,"userSelect":11,"fontKerning":11,"textEmphasisPosition":11,"textEmphasis":11,"textEmphasisStyle":11,"textEmphasisColor":11,"maskImage":11,"maskMode":11,"maskRepeat":11,"maskPosition":11,"maskClip":11,"maskOrigin":11,"maskSize":11,"maskComposite":11,"mask":11,"maskBorderSource":11,"maskBorderMode":11,"maskBorderSlice":11,"maskBorderWidth":11,"maskBorderOutset":11,"maskBorderRepeat":11,"maskBorder":11,"maskType":11,"textSizeAdjust":11,"filter":11,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"fontFeatureSettings":11,"columnCount":11,"columnFill":11,"columnGap":11,"columnRule":11,"columnRuleColor":11,"columnRuleStyle":11,"columnRuleWidth":11,"columns":11,"columnSpan":11,"columnWidth":11},"op_mini":{}} \ No newline at end of file diff --git a/modules/plugins/calc.js b/modules/plugins/calc.js deleted file mode 100644 index 4ac5d4d..0000000 --- a/modules/plugins/calc.js +++ /dev/null @@ -1,17 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -export default function calc({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) { - if ( - typeof value === 'string' && value.indexOf('calc(') > -1 && - ( - browser === 'firefox' && version < 15 || - browser === 'chrome' && version < 25 || - browser === 'safari' && version < 6.1 || - browser === 'ios_saf' && version < 7 - ) - ) { - return { - [property]: getPrefixedValue(value.replace(/calc\(/g, css + 'calc('), value, keepUnprefixed) - } - } -} diff --git a/modules/plugins/flex.js b/modules/plugins/flex.js deleted file mode 100644 index 5df9e4a..0000000 --- a/modules/plugins/flex.js +++ /dev/null @@ -1,18 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -const values = { flex: true, 'inline-flex': true } - -export default function flex({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) { - if ( - property === 'display' && values[value] && - ( - browser === 'chrome' && (version < 29 && version > 20) || - (browser === 'safari' || browser === 'ios_saf') && (version < 9 && version > 6) || - browser === 'opera' && (version == 15 || version == 16) - ) - ) { - return { - display: getPrefixedValue(css + value, value, keepUnprefixed) - } - } -} diff --git a/modules/plugins/flexboxIE.js b/modules/plugins/flexboxIE.js deleted file mode 100644 index 45fec01..0000000 --- a/modules/plugins/flexboxIE.js +++ /dev/null @@ -1,42 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -const alternativeValues = { - 'space-around': 'distribute', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - flex: 'flexbox', - 'inline-flex': 'inline-flexbox' -} -const alternativeProps = { - alignContent: 'msFlexLinePack', - alignSelf: 'msFlexItemAlign', - alignItems: 'msFlexAlign', - justifyContent: 'msFlexPack', - order: 'msFlexOrder', - flexGrow: 'msFlexPositive', - flexShrink: 'msFlexNegative', - flexBasis: 'msPreferredSize' -} - -export default function flexboxIE({ property, value, styles, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) { - if ( - (alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && - ( - (browser === 'ie_mob' || browser === 'ie') && version == 10) - ) { - if (!keepUnprefixed && !Array.isArray(styles[property])) { - delete styles[property] - } - if (property === 'display' && alternativeValues[value]) { - return { - display: getPrefixedValue(css + alternativeValues[value], value, keepUnprefixed) - } - } - if (alternativeProps[property]) { - return { - [alternativeProps[property]]: alternativeValues[value] || value - } - } - } -} diff --git a/modules/plugins/flexboxOld.js b/modules/plugins/flexboxOld.js deleted file mode 100644 index 6e51f76..0000000 --- a/modules/plugins/flexboxOld.js +++ /dev/null @@ -1,54 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -const alternativeValues = { - 'space-around': 'justify', - 'space-between': 'justify', - 'flex-start': 'start', - 'flex-end': 'end', - 'wrap-reverse': 'multiple', - wrap: 'multiple', - flex: 'box', - 'inline-flex': 'inline-box' -} - -const alternativeProps = { - alignItems: 'WebkitBoxAlign', - justifyContent: 'WebkitBoxPack', - flexWrap: 'WebkitBoxLines' -} - -const otherProps = [ 'alignContent', 'alignSelf', 'order', 'flexGrow', 'flexShrink', 'flexBasis', 'flexDirection' ] -const properties = Object.keys(alternativeProps).concat(otherProps) - -export default function flexboxOld({ property, value, styles, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) { - if ( - (properties.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && - ( - browser === 'firefox' && version < 22 || - browser === 'chrome' && version < 21 || - (browser === 'safari' || browser === 'ios_saf') && version <= 6.1 || - browser === 'android' && version < 4.4 || - browser === 'and_uc' - ) - ) { - if (!keepUnprefixed && !Array.isArray(styles[property])) { - delete styles[property] - } - if (property === 'flexDirection' && typeof value === 'string') { - return { - WebkitBoxOrient: value.indexOf('column') > -1 ? 'vertical' : 'horizontal', - WebkitBoxDirection: value.indexOf('reverse') > -1 ? 'reverse' : 'normal' - } - } - if (property === 'display' && alternativeValues[value]) { - return { - display: getPrefixedValue(css + alternativeValues[value], value, keepUnprefixed) - } - } - if (alternativeProps[property]) { - return { - [alternativeProps[property]]: alternativeValues[value] || value - } - } - } -} diff --git a/modules/plugins/grabCursor.js b/modules/plugins/grabCursor.js deleted file mode 100644 index beae61f..0000000 --- a/modules/plugins/grabCursor.js +++ /dev/null @@ -1,20 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -const values = { grab: true, grabbing: true } - -export default function grabCursor({ property, value, browserInfo: { browser }, prefix: { css }, keepUnprefixed }) { - // adds prefixes for firefox, chrome, safari, and opera regardless of version until a reliable brwoser support info can be found (see: https://github.com/rofrischmann/inline-style-prefixer/issues/79) - if ( - property === 'cursor' && values[value] && - ( - browser === 'firefox' || - browser === 'chrome' || - browser === 'safari' || - browser === 'opera' - ) - ) { - return { - cursor: getPrefixedValue(css + value, value, keepUnprefixed) - } - } -} diff --git a/modules/plugins/gradient.js b/modules/plugins/gradient.js deleted file mode 100644 index 524eb97..0000000 --- a/modules/plugins/gradient.js +++ /dev/null @@ -1,21 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -const values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/ - -export default function gradient({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) { - if ( - typeof value === 'string' && value.match(values) !== null && - ( - browser === 'firefox' && version < 16 || - browser === 'chrome' && version < 26 || - (browser === 'safari' || browser === 'ios_saf') && version < 7 || - (browser === 'opera' || browser === 'op_mini') && version < 12.1 || - browser === 'android' && version < 4.4 || - browser === 'and_uc' - ) - ) { - return { - [property]: getPrefixedValue(css + value, value, keepUnprefixed) - } - } -} diff --git a/modules/plugins/position.js b/modules/plugins/position.js deleted file mode 100644 index 4d4333f..0000000 --- a/modules/plugins/position.js +++ /dev/null @@ -1,15 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -export default function position({ property, value, browserInfo: { browser }, prefix: { css }, keepUnprefixed }) { - if ( - property === 'position' && value === 'sticky' && - ( - browser === 'safari' || - browser === 'ios_saf' - ) - ) { - return { - [property]: getPrefixedValue(css + value, value, keepUnprefixed) - } - } -} diff --git a/modules/plugins/transition.js b/modules/plugins/transition.js deleted file mode 100644 index 88390ad..0000000 --- a/modules/plugins/transition.js +++ /dev/null @@ -1,27 +0,0 @@ -import hyphenateStyleName from 'hyphenate-style-name' -import unprefixProperty from '../utils/unprefixProperty' - -const properties = { transition: true, transitionProperty: true } - -export default function transition({ property, value, prefix: { css }, requiresPrefix, keepUnprefixed }) { - // also check for already prefixed transitions - const unprefixedProperty = unprefixProperty(property) - - if (typeof value === 'string' && properties[unprefixedProperty]) { - // TODO: memoize this array - const requiresPrefixDashCased = Object.keys(requiresPrefix).map(prop => hyphenateStyleName(prop)) - - // only split multi values, not cubic beziers - const multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g) - - requiresPrefixDashCased.forEach(prop => { - multipleValues.forEach((val, index) => { - if (val.indexOf(prop) > -1 && prop !== 'order') { - multipleValues[index] = val.replace(prop, css + prop) + (keepUnprefixed ? ',' + val : '') - } - }) - }) - - return { [ property]: multipleValues.join(',') } - } -} diff --git a/modules/plugins/zoomCursor.js b/modules/plugins/zoomCursor.js deleted file mode 100644 index 301f828..0000000 --- a/modules/plugins/zoomCursor.js +++ /dev/null @@ -1,19 +0,0 @@ -import getPrefixedValue from '../utils/getPrefixedValue' - -const values = { 'zoom-in': true, 'zoom-out': true } - -export default function zoomCursor({ property, value, browserInfo: { browser, version }, prefix: { css }, keepUnprefixed }) { - if ( - property === 'cursor' && values[value] && - ( - browser === 'firefox' && version < 24 || - browser === 'chrome' && version < 37 || - browser === 'safari' && version < 9 || - browser === 'opera' && version < 24 - ) - ) { - return { - cursor: getPrefixedValue(css + value, value, keepUnprefixed) - } - } -} diff --git a/modules/prefixProps.js b/modules/prefixProps.js deleted file mode 100644 index d55df75..0000000 --- a/modules/prefixProps.js +++ /dev/null @@ -1 +0,0 @@ -export default {"chrome":{"transform":35,"transformOrigin":35,"transformOriginX":35,"transformOriginY":35,"backfaceVisibility":35,"perspective":35,"perspectiveOrigin":35,"transformStyle":35,"transformOriginZ":35,"animation":42,"animationDelay":42,"animationDirection":42,"animationFillMode":42,"animationDuration":42,"animationIterationCount":42,"animationName":42,"animationPlayState":42,"animationTimingFunction":42,"appearance":58,"userSelect":53,"fontKerning":32,"textEmphasisPosition":58,"textEmphasis":58,"textEmphasisStyle":58,"textEmphasisColor":58,"boxDecorationBreak":58,"clipPath":54,"maskImage":58,"maskMode":58,"maskRepeat":58,"maskPosition":58,"maskClip":58,"maskOrigin":58,"maskSize":58,"maskComposite":58,"mask":58,"maskBorderSource":58,"maskBorderMode":58,"maskBorderSlice":58,"maskBorderWidth":58,"maskBorderOutset":58,"maskBorderRepeat":58,"maskBorder":58,"maskType":58,"textDecorationStyle":58,"textDecorationSkip":58,"textDecorationLine":58,"textDecorationColor":58,"filter":52,"fontFeatureSettings":47,"breakAfter":49,"breakBefore":49,"breakInside":49,"columnCount":49,"columnFill":49,"columnGap":49,"columnRule":49,"columnRuleColor":49,"columnRuleStyle":49,"columnRuleWidth":49,"columns":49,"columnSpan":49,"columnWidth":49},"safari":{"flex":8,"flexBasis":8,"flexDirection":8,"flexGrow":8,"flexFlow":8,"flexShrink":8,"flexWrap":8,"alignContent":8,"alignItems":8,"alignSelf":8,"justifyContent":8,"order":8,"transition":6,"transitionDelay":6,"transitionDuration":6,"transitionProperty":6,"transitionTimingFunction":6,"transform":8,"transformOrigin":8,"transformOriginX":8,"transformOriginY":8,"backfaceVisibility":8,"perspective":8,"perspectiveOrigin":8,"transformStyle":8,"transformOriginZ":8,"animation":8,"animationDelay":8,"animationDirection":8,"animationFillMode":8,"animationDuration":8,"animationIterationCount":8,"animationName":8,"animationPlayState":8,"animationTimingFunction":8,"appearance":10,"userSelect":10,"backdropFilter":10,"fontKerning":9,"scrollSnapType":10,"scrollSnapPointsX":10,"scrollSnapPointsY":10,"scrollSnapDestination":10,"scrollSnapCoordinate":10,"textEmphasisPosition":7,"textEmphasis":7,"textEmphasisStyle":7,"textEmphasisColor":7,"boxDecorationBreak":10,"clipPath":10,"maskImage":10,"maskMode":10,"maskRepeat":10,"maskPosition":10,"maskClip":10,"maskOrigin":10,"maskSize":10,"maskComposite":10,"mask":10,"maskBorderSource":10,"maskBorderMode":10,"maskBorderSlice":10,"maskBorderWidth":10,"maskBorderOutset":10,"maskBorderRepeat":10,"maskBorder":10,"maskType":10,"textDecorationStyle":10,"textDecorationSkip":10,"textDecorationLine":10,"textDecorationColor":10,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10,"flowInto":10,"flowFrom":10,"breakBefore":8,"breakAfter":8,"breakInside":8,"regionFragment":10,"columnCount":8,"columnFill":8,"columnGap":8,"columnRule":8,"columnRuleColor":8,"columnRuleStyle":8,"columnRuleWidth":8,"columns":8,"columnSpan":8,"columnWidth":8},"firefox":{"appearance":53,"userSelect":53,"boxSizing":28,"textAlignLast":48,"textDecorationStyle":35,"textDecorationSkip":35,"textDecorationLine":35,"textDecorationColor":35,"tabSize":53,"hyphens":42,"fontFeatureSettings":33,"breakAfter":51,"breakBefore":51,"breakInside":51,"columnCount":51,"columnFill":51,"columnGap":51,"columnRule":51,"columnRuleColor":51,"columnRuleStyle":51,"columnRuleWidth":51,"columns":51,"columnSpan":51,"columnWidth":51},"opera":{"flex":16,"flexBasis":16,"flexDirection":16,"flexGrow":16,"flexFlow":16,"flexShrink":16,"flexWrap":16,"alignContent":16,"alignItems":16,"alignSelf":16,"justifyContent":16,"order":16,"transform":22,"transformOrigin":22,"transformOriginX":22,"transformOriginY":22,"backfaceVisibility":22,"perspective":22,"perspectiveOrigin":22,"transformStyle":22,"transformOriginZ":22,"animation":29,"animationDelay":29,"animationDirection":29,"animationFillMode":29,"animationDuration":29,"animationIterationCount":29,"animationName":29,"animationPlayState":29,"animationTimingFunction":29,"appearance":43,"userSelect":40,"fontKerning":19,"textEmphasisPosition":43,"textEmphasis":43,"textEmphasisStyle":43,"textEmphasisColor":43,"boxDecorationBreak":43,"clipPath":41,"maskImage":43,"maskMode":43,"maskRepeat":43,"maskPosition":43,"maskClip":43,"maskOrigin":43,"maskSize":43,"maskComposite":43,"mask":43,"maskBorderSource":43,"maskBorderMode":43,"maskBorderSlice":43,"maskBorderWidth":43,"maskBorderOutset":43,"maskBorderRepeat":43,"maskBorder":43,"maskType":43,"textDecorationStyle":43,"textDecorationSkip":43,"textDecorationLine":43,"textDecorationColor":43,"filter":39,"fontFeatureSettings":34,"breakAfter":36,"breakBefore":36,"breakInside":36,"columnCount":36,"columnFill":36,"columnGap":36,"columnRule":36,"columnRuleColor":36,"columnRuleStyle":36,"columnRuleWidth":36,"columns":36,"columnSpan":36,"columnWidth":36},"ie":{"flex":10,"flexDirection":10,"flexFlow":10,"flexWrap":10,"transform":9,"transformOrigin":9,"transformOriginX":9,"transformOriginY":9,"userSelect":11,"wrapFlow":11,"wrapThrough":11,"wrapMargin":11,"scrollSnapType":11,"scrollSnapPointsX":11,"scrollSnapPointsY":11,"scrollSnapDestination":11,"scrollSnapCoordinate":11,"touchAction":10,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"gridTemplateColumns":11,"gridTemplateRows":11,"gridTemplateAreas":11,"gridTemplate":11,"gridAutoColumns":11,"gridAutoRows":11,"gridAutoFlow":11,"grid":11,"gridRowStart":11,"gridColumnStart":11,"gridRowEnd":11,"gridRow":11,"gridColumn":11,"gridColumnEnd":11,"gridColumnGap":11,"gridRowGap":11,"gridArea":11,"gridGap":11,"textSizeAdjust":11},"edge":{"userSelect":15,"wrapFlow":15,"wrapThrough":15,"wrapMargin":15,"scrollSnapType":15,"scrollSnapPointsX":15,"scrollSnapPointsY":15,"scrollSnapDestination":15,"scrollSnapCoordinate":15,"hyphens":15,"flowInto":15,"flowFrom":15,"breakBefore":15,"breakAfter":15,"breakInside":15,"regionFragment":15,"gridTemplateColumns":15,"gridTemplateRows":15,"gridTemplateAreas":15,"gridTemplate":15,"gridAutoColumns":15,"gridAutoRows":15,"gridAutoFlow":15,"grid":15,"gridRowStart":15,"gridColumnStart":15,"gridRowEnd":15,"gridRow":15,"gridColumn":15,"gridColumnEnd":15,"gridColumnGap":15,"gridRowGap":15,"gridArea":15,"gridGap":15},"ios_saf":{"flex":8.1,"flexBasis":8.1,"flexDirection":8.1,"flexGrow":8.1,"flexFlow":8.1,"flexShrink":8.1,"flexWrap":8.1,"alignContent":8.1,"alignItems":8.1,"alignSelf":8.1,"justifyContent":8.1,"order":8.1,"transition":6,"transitionDelay":6,"transitionDuration":6,"transitionProperty":6,"transitionTimingFunction":6,"transform":8.1,"transformOrigin":8.1,"transformOriginX":8.1,"transformOriginY":8.1,"backfaceVisibility":8.1,"perspective":8.1,"perspectiveOrigin":8.1,"transformStyle":8.1,"transformOriginZ":8.1,"animation":8.1,"animationDelay":8.1,"animationDirection":8.1,"animationFillMode":8.1,"animationDuration":8.1,"animationIterationCount":8.1,"animationName":8.1,"animationPlayState":8.1,"animationTimingFunction":8.1,"appearance":10,"userSelect":10,"backdropFilter":10,"fontKerning":10,"scrollSnapType":10,"scrollSnapPointsX":10,"scrollSnapPointsY":10,"scrollSnapDestination":10,"scrollSnapCoordinate":10,"boxDecorationBreak":10,"clipPath":10,"maskImage":10,"maskMode":10,"maskRepeat":10,"maskPosition":10,"maskClip":10,"maskOrigin":10,"maskSize":10,"maskComposite":10,"mask":10,"maskBorderSource":10,"maskBorderMode":10,"maskBorderSlice":10,"maskBorderWidth":10,"maskBorderOutset":10,"maskBorderRepeat":10,"maskBorder":10,"maskType":10,"textSizeAdjust":10,"textDecorationStyle":10,"textDecorationSkip":10,"textDecorationLine":10,"textDecorationColor":10,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10,"flowInto":10,"flowFrom":10,"breakBefore":8.1,"breakAfter":8.1,"breakInside":8.1,"regionFragment":10,"columnCount":8.1,"columnFill":8.1,"columnGap":8.1,"columnRule":8.1,"columnRuleColor":8.1,"columnRuleStyle":8.1,"columnRuleWidth":8.1,"columns":8.1,"columnSpan":8.1,"columnWidth":8.1},"android":{"flex":4.2,"flexBasis":4.2,"flexDirection":4.2,"flexGrow":4.2,"flexFlow":4.2,"flexShrink":4.2,"flexWrap":4.2,"alignContent":4.2,"alignItems":4.2,"alignSelf":4.2,"justifyContent":4.2,"order":4.2,"transition":4.2,"transitionDelay":4.2,"transitionDuration":4.2,"transitionProperty":4.2,"transitionTimingFunction":4.2,"transform":4.4,"transformOrigin":4.4,"transformOriginX":4.4,"transformOriginY":4.4,"backfaceVisibility":4.4,"perspective":4.4,"perspectiveOrigin":4.4,"transformStyle":4.4,"transformOriginZ":4.4,"animation":4.4,"animationDelay":4.4,"animationDirection":4.4,"animationFillMode":4.4,"animationDuration":4.4,"animationIterationCount":4.4,"animationName":4.4,"animationPlayState":4.4,"animationTimingFunction":4.4,"appearance":53,"userSelect":53,"fontKerning":4.4,"textEmphasisPosition":53,"textEmphasis":53,"textEmphasisStyle":53,"textEmphasisColor":53,"boxDecorationBreak":53,"clipPath":53,"maskImage":53,"maskMode":53,"maskRepeat":53,"maskPosition":53,"maskClip":53,"maskOrigin":53,"maskSize":53,"maskComposite":53,"mask":53,"maskBorderSource":53,"maskBorderMode":53,"maskBorderSlice":53,"maskBorderWidth":53,"maskBorderOutset":53,"maskBorderRepeat":53,"maskBorder":53,"maskType":53,"filter":4.4,"fontFeatureSettings":4.4,"breakAfter":53,"breakBefore":53,"breakInside":53,"columnCount":53,"columnFill":53,"columnGap":53,"columnRule":53,"columnRuleColor":53,"columnRuleStyle":53,"columnRuleWidth":53,"columns":53,"columnSpan":53,"columnWidth":53},"and_chr":{"appearance":54,"textEmphasisPosition":54,"textEmphasis":54,"textEmphasisStyle":54,"textEmphasisColor":54,"boxDecorationBreak":54,"clipPath":54,"maskImage":54,"maskMode":54,"maskRepeat":54,"maskPosition":54,"maskClip":54,"maskOrigin":54,"maskSize":54,"maskComposite":54,"mask":54,"maskBorderSource":54,"maskBorderMode":54,"maskBorderSlice":54,"maskBorderWidth":54,"maskBorderOutset":54,"maskBorderRepeat":54,"maskBorder":54,"maskType":54,"textDecorationStyle":54,"textDecorationSkip":54,"textDecorationLine":54,"textDecorationColor":54},"and_uc":{"flex":11,"flexBasis":11,"flexDirection":11,"flexGrow":11,"flexFlow":11,"flexShrink":11,"flexWrap":11,"alignContent":11,"alignItems":11,"alignSelf":11,"justifyContent":11,"order":11,"transition":11,"transitionDelay":11,"transitionDuration":11,"transitionProperty":11,"transitionTimingFunction":11,"transform":11,"transformOrigin":11,"transformOriginX":11,"transformOriginY":11,"backfaceVisibility":11,"perspective":11,"perspectiveOrigin":11,"transformStyle":11,"transformOriginZ":11,"animation":11,"animationDelay":11,"animationDirection":11,"animationFillMode":11,"animationDuration":11,"animationIterationCount":11,"animationName":11,"animationPlayState":11,"animationTimingFunction":11,"appearance":11,"userSelect":11,"fontKerning":11,"textEmphasisPosition":11,"textEmphasis":11,"textEmphasisStyle":11,"textEmphasisColor":11,"maskImage":11,"maskMode":11,"maskRepeat":11,"maskPosition":11,"maskClip":11,"maskOrigin":11,"maskSize":11,"maskComposite":11,"mask":11,"maskBorderSource":11,"maskBorderMode":11,"maskBorderSlice":11,"maskBorderWidth":11,"maskBorderOutset":11,"maskBorderRepeat":11,"maskBorder":11,"maskType":11,"textSizeAdjust":11,"filter":11,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"fontFeatureSettings":11,"columnCount":11,"columnFill":11,"columnGap":11,"columnRule":11,"columnRuleColor":11,"columnRuleStyle":11,"columnRuleWidth":11,"columns":11,"columnSpan":11,"columnWidth":11},"op_mini":{}} \ No newline at end of file diff --git a/modules/static/plugins/calc.js b/modules/static/plugins/calc.js index 13eb412..e61e89e 100644 --- a/modules/static/plugins/calc.js +++ b/modules/static/plugins/calc.js @@ -1,8 +1,10 @@ +/* @flow */ import isPrefixedValue from '../../utils/isPrefixedValue' -const prefixes = [ '-webkit-', '-moz-', '' ] -export default function calc(property, value) { +const prefixes = ['-webkit-', '-moz-', ''] + +export default function calc(property: string, value: any): ?Array { if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) { - return prefixes.map(prefix => value.replace(/calc\(/g, prefix + 'calc(')) + return prefixes.map(prefix => value.replace(/calc\(/g, `${prefix}calc(`)) } } diff --git a/modules/static/plugins/cursor.js b/modules/static/plugins/cursor.js index 571ee80..356e470 100644 --- a/modules/static/plugins/cursor.js +++ b/modules/static/plugins/cursor.js @@ -1,4 +1,5 @@ -const prefixes = [ '-webkit-', '-moz-', '' ] +/* @flow */ +const prefixes = ['-webkit-', '-moz-', ''] const values = { 'zoom-in': true, @@ -7,7 +8,7 @@ const values = { grabbing: true } -export default function cursor(property, value) { +export default function cursor(property: string, value: any): ?Array { if (property === 'cursor' && values[value]) { return prefixes.map(prefix => prefix + value) } diff --git a/modules/static/plugins/flex.js b/modules/static/plugins/flex.js index c79087f..3ba177a 100644 --- a/modules/static/plugins/flex.js +++ b/modules/static/plugins/flex.js @@ -1,7 +1,11 @@ -const values = { flex: true, 'inline-flex': true } +/* @flow */ +const values = { + flex: true, + 'inline-flex': true +} -export default function flex(property, value, style) { +export default function flex(property: string, value: any): ?Array { if (property === 'display' && values[value]) { - style.display = [ '-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value ] + return ['-webkit-box', '-moz-box', `-ms-${value}box`, `-webkit-${value}`, value] } } diff --git a/modules/static/plugins/flexboxIE.js b/modules/static/plugins/flexboxIE.js index 167a9a8..1569d84 100644 --- a/modules/static/plugins/flexboxIE.js +++ b/modules/static/plugins/flexboxIE.js @@ -1,3 +1,4 @@ +/* @flow */ const alternativeValues = { 'space-around': 'distribute', 'space-between': 'justify', @@ -15,7 +16,11 @@ const alternativeProps = { flexBasis: 'msPreferredSize' } -export default function flexboxIE(property, value, style) { +export default function flexboxIE( + property: string, + value: any, + style: Object +): void { if (alternativeProps[property]) { style[alternativeProps[property]] = alternativeValues[value] || value } diff --git a/modules/static/plugins/flexboxOld.js b/modules/static/plugins/flexboxOld.js index 8ff608e..3992392 100644 --- a/modules/static/plugins/flexboxOld.js +++ b/modules/static/plugins/flexboxOld.js @@ -1,3 +1,4 @@ +/* @flow */ const alternativeValues = { 'space-around': 'justify', 'space-between': 'justify', @@ -13,10 +14,22 @@ const alternativeProps = { flexWrap: 'WebkitBoxLines' } -export default function flexboxOld(property, value, style) { +export default function flexboxOld( + property: string, + value: any, + style: Object +): void { if (property === 'flexDirection' && typeof value === 'string') { - style.WebkitBoxOrient = value.indexOf('column') > -1 ? 'vertical' : 'horizontal', - style.WebkitBoxDirection = value.indexOf('reverse') > -1 ? 'reverse' : 'normal' + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical' + } else { + style.WebkitBoxOrient = 'horizontal' + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse' + } else { + style.WebkitBoxDirection = 'normal' + } } if (alternativeProps[property]) { style[alternativeProps[property]] = alternativeValues[value] || value diff --git a/modules/static/plugins/gradient.js b/modules/static/plugins/gradient.js index 2410ea0..b493333 100644 --- a/modules/static/plugins/gradient.js +++ b/modules/static/plugins/gradient.js @@ -1,10 +1,16 @@ +/* @flow */ + import isPrefixedValue from '../../utils/isPrefixedValue' -const prefixes = [ '-webkit-', '-moz-', '' ] +const prefixes = ['-webkit-', '-moz-', ''] const values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/ -export default function gradient(property, value) { - if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values) !== null) { +export default function gradient(property: string, value: any): ?Array { + if ( + typeof value === 'string' && + !isPrefixedValue(value) && + value.match(values) !== null + ) { return prefixes.map(prefix => prefix + value) } } diff --git a/modules/static/plugins/position.js b/modules/static/plugins/position.js index 6a70a88..83951cd 100644 --- a/modules/static/plugins/position.js +++ b/modules/static/plugins/position.js @@ -1,5 +1,6 @@ -export default function position(property, value, style) { +/* @flow */ +export default function position(property: string, value: any): ?Array { if (property === 'position' && value === 'sticky') { - style.position = [ '-webkit-sticky', 'sticky' ] + return ['-webkit-sticky', 'sticky'] } } diff --git a/modules/static/plugins/sizing.js b/modules/static/plugins/sizing.js index 032f12e..7e79acc 100644 --- a/modules/static/plugins/sizing.js +++ b/modules/static/plugins/sizing.js @@ -1,4 +1,5 @@ -const prefixes = [ '-webkit-', '-moz-', '' ] +/* @flow */ +const prefixes = ['-webkit-', '-moz-', ''] const properties = { maxHeight: true, @@ -17,7 +18,7 @@ const values = { 'contain-floats': true } -export default function sizing(property, value) { +export default function sizing(property: string, value: any): ?Array { if (properties[property] && values[value]) { return prefixes.map(prefix => prefix + value) } diff --git a/modules/static/plugins/transition.js b/modules/static/plugins/transition.js index a48b501..8cb0284 100644 --- a/modules/static/plugins/transition.js +++ b/modules/static/plugins/transition.js @@ -1,3 +1,4 @@ +/* @flow */ import hyphenateStyleName from 'hyphenate-style-name' import capitalizeString from '../../utils/capitalizeString' @@ -17,22 +18,7 @@ const prefixMapping = { ms: '-ms-' } -export default function transition(property, value, style) { - // also check for already prefixed transitions - if (typeof value === 'string' && properties[property]) { - const outputValue = prefixValue(value) - const webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(value => value.match(/-moz-|-ms-/) === null).join(',') - - // if the property is already prefixed - if (property.indexOf('Webkit') > -1) { - return webkitOutput - } - style['Webkit' + capitalizeString(property)] = webkitOutput - return outputValue - } -} - -function prefixValue(value) { +function prefixValue(value: string): string { if (isPrefixedValue(value)) { return value } @@ -42,15 +28,17 @@ function prefixValue(value) { for (let i = 0, len = multipleValues.length; i < len; ++i) { const singleValue = multipleValues[i] - const values = [ singleValue ] - for (let property in prefixProps) { + const values = [singleValue] + for (const property in prefixProps) { const dashCaseProperty = hyphenateStyleName(property) if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { const prefixes = prefixProps[property] for (let j = 0, pLen = prefixes.length; j < pLen; ++j) { // join all prefixes and create a new value - values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty)) + values.unshift( + singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty) + ) } } } @@ -60,3 +48,21 @@ function prefixValue(value) { return multipleValues.join(',') } + +export default function transition(property: string, value: any, style: Object): ?string { + // also check for already prefixed transitions + if (typeof value === 'string' && properties[property]) { + const outputValue = prefixValue(value) + const webkitOutput = outputValue + .split(/,(?![^()]*(?:\([^()]*\))?\))/g) + .filter(val => val.match(/-moz-|-ms-/) === null) + .join(',') + + // if the property is already prefixed + if (property.indexOf('Webkit') > -1) { + return webkitOutput + } + style[`Webkit${capitalizeString(property)}`] = webkitOutput + return outputValue + } +} diff --git a/modules/static/prefixAll.js b/modules/static/prefixAll.js index f1d1e08..78920fb 100644 --- a/modules/static/prefixAll.js +++ b/modules/static/prefixAll.js @@ -1,16 +1,21 @@ -import capitalizeString from '../utils/capitalizeString' +/* @flow */ +import prefixProperty from '../utils/prefixProperty' +import prefixValue from '../utils/prefixValue' + +import addNewValuesOnly from '../utils/addNewValuesOnly' +import isObject from '../utils/isObject' + import prefixProperties from './prefixProps' -import position from './plugins/position' import calc from './plugins/calc' import cursor from './plugins/cursor' import flex from './plugins/flex' -import sizing from './plugins/sizing' -import gradient from './plugins/gradient' -import transition from './plugins/transition' -// special flexbox specifications import flexboxIE from './plugins/flexboxIE' import flexboxOld from './plugins/flexboxOld' +import gradient from './plugins/gradient' +import position from './plugins/position' +import sizing from './plugins/sizing' +import transition from './plugins/transition' const plugins = [ position, @@ -24,58 +29,37 @@ const plugins = [ flex ] -function runPluginsOnValue(property, value, style, callback) { - let callbackCalled = false - - for (let i = 0, len = plugins.length; i < len; ++i) { - const newValue = plugins[i](property, value, style) - - if (newValue) { - callbackCalled = true - callback(newValue) - } - } - - return callbackCalled -} - - -export default function prefixAll(style) { - for (let property in style) { +export default function prefixAll(style: Object): Object { + for (const property in style) { const value = style[property] - if (value instanceof Object && !Array.isArray(value)) { - style[property] = prefixAll(value) - } else { - if (Array.isArray(value)) { - const combinedValue = [ ] - for (let i = 0, len = value.length; i < len; ++i) { - const called = runPluginsOnValue(property, value[i], style, newValue => { - [ ].concat(newValue).forEach(val => { - if (combinedValue.indexOf(val) === -1) { - combinedValue.push(val) - } - }) - }) + // handle nested objects + if (isObject(value)) { + style[property] = prefixAll(value) + // handle array values + } else if (Array.isArray(value)) { + const combinedValue = [] - if (!called && combinedValue.indexOf(value[i]) === -1) { - combinedValue.push(value[i]) - } - } + for (let i = 0, len = value.length; i < len; ++i) { + const processedValue = prefixValue(plugins, property, value[i], style) + addNewValuesOnly(combinedValue, processedValue || value[i]) + } + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { style[property] = combinedValue - } else { - runPluginsOnValue(property, value, style, newValue => { - style[property] = newValue - }) } + } else { + const processedValue = prefixValue(plugins, property, value, style) - const requiredPrefixes = prefixProperties[property] - if (requiredPrefixes) { - for (let i = 0, len = requiredPrefixes.length; i < len; ++i) { - style[requiredPrefixes[i] + capitalizeString(property)] = style[property] - } + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (processedValue) { + style[property] = processedValue } + + prefixProperty(prefixProperties, property, style) } } diff --git a/modules/utils/addNewValuesOnly.js b/modules/utils/addNewValuesOnly.js new file mode 100644 index 0000000..624264b --- /dev/null +++ b/modules/utils/addNewValuesOnly.js @@ -0,0 +1,16 @@ +/* @flow */ +function addIfNew(list: Array, value: any): void { + if (list.indexOf(value) === -1) { + list.push(value) + } +} + +export default function addNewValuesOnly(list: Array, values: Array | any): void { + if (Array.isArray(values)) { + for (let i = 0, len = values.length; i < len; ++i) { + addIfNew(list, values[i]) + } + } else { + addIfNew(list, values) + } +} diff --git a/modules/utils/capitalizeString.js b/modules/utils/capitalizeString.js index 2edb356..5a6fe1b 100644 --- a/modules/utils/capitalizeString.js +++ b/modules/utils/capitalizeString.js @@ -1,2 +1,4 @@ -// helper to capitalize strings -export default str => str.charAt(0).toUpperCase() + str.slice(1) +/* @flow */ +export default function capitalizeString(str: string): string { + return str.charAt(0).toUpperCase() + str.slice(1) +} diff --git a/modules/utils/getBrowserInformation.js b/modules/utils/getBrowserInformation.js index 98aec6a..235902b 100644 --- a/modules/utils/getBrowserInformation.js +++ b/modules/utils/getBrowserInformation.js @@ -1,96 +1,117 @@ +/* @flow */ import bowser from 'bowser' -const vendorPrefixes = { - Webkit: [ 'chrome', 'safari', 'ios', 'android', 'phantom', 'opera', 'webos', 'blackberry', 'bada', 'tizen', 'chromium', 'vivaldi' ], - Moz: [ 'firefox', 'seamonkey', 'sailfish' ], - ms: [ 'msie', 'msedge' ] + +const prefixByBrowser = { + chrome: 'Webkit', + safari: 'Webkit', + ios: 'Webkit', + android: 'Webkit', + phantom: 'Webkit', + opera: 'Webkit', + webos: 'Webkit', + blackberry: 'Webkit', + bada: 'Webkit', + tizen: 'Webkit', + chromium: 'Webkit', + vivaldi: 'Webkit', + firefox: 'Moz', + seamoney: 'Moz', + sailfish: 'Moz', + msie: 'ms', + msedge: 'ms' } -const browsers = { - chrome: [ [ 'chrome' ], [ 'chromium' ] ], - safari: [ [ 'safari' ] ], - firefox: [ [ 'firefox' ] ], - edge: [ [ 'msedge' ] ], - opera: [ [ 'opera' ], [ 'vivaldi' ] ], - ios_saf: [ [ 'ios', 'mobile' ], [ 'ios', 'tablet' ] ], - ie: [ [ 'msie' ] ], - op_mini: [ [ 'opera', 'mobile' ], [ 'opera', 'tablet' ] ], - and_uc: [ [ 'android', 'mobile' ], [ 'android', 'tablet' ] ], - android: [ [ 'android', 'mobile' ], [ 'android', 'tablet' ] ] + +const browserByCanIuseAlias = { + chrome: 'chrome', + chromium: 'chrome', + safari: 'safari', + firfox: 'firefox', + msedge: 'edge', + opera: 'opera', + vivaldi: 'opera', + msie: 'ie' } -const browserByInfo = info => { - if (info.firefox) { +function getBrowserName(browserInfo: Object): ?string { + if (browserInfo.firefox) { return 'firefox' } - let name = '' - - Object.keys(browsers).forEach(browser => { - browsers[browser].forEach(condition => { - let match = 0 - condition.forEach(single => { - if (info[single]) { - match += 1 - } - }) - if (condition.length === match) { - name = browser - } - }) - }) - - return name + + if (browserInfo.mobile || browserInfo.tablet) { + if (browserInfo.ios) { + return 'ios_saf' + } else if (browserInfo.android) { + return 'android' + } else if (browserInfo.opera) { + return 'op_mini' + } + } + + for (const browser in browserByCanIuseAlias) { + if (browserInfo[browser]) { + return browserByCanIuseAlias[browser] + } + } } /** - * Uses bowser to get default browser information such as version and name - * Evaluates bowser info and adds vendorPrefix information + * Uses bowser to get default browser browserInformation such as version and name + * Evaluates bowser browserInfo and adds vendorPrefix browserInformation * @param {string} userAgent - userAgent that gets evaluated */ -export default userAgent => { - if (!userAgent) { - return false - } - const info = bowser._detect(userAgent) +export default function getBrowserInformation(userAgent: string): Object | boolean { + const browserInfo = bowser._detect(userAgent) - Object.keys(vendorPrefixes).forEach(prefix => { - vendorPrefixes[prefix].forEach(browser => { - if (info[browser]) { - info.prefix = { - inline: prefix, - css: '-' + prefix.toLowerCase() + '-' - } - } - }) - }) + for (const browser in prefixByBrowser) { + if (browserInfo[browser]) { + const prefix = prefixByBrowser[browser] - info.browser = browserByInfo(info); + browserInfo.jsPrefix = prefix + browserInfo.cssPrefix = `-${prefix.toLowerCase()}-` + break + } + } + + browserInfo.browserName = getBrowserName(browserInfo) // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN - info.version = info.version ? parseFloat(info.version) : parseInt(parseFloat(info.osversion), 10) - info.osversion = parseFloat(info.osversion) + if (browserInfo.version) { + browserInfo.browserVersion = parseFloat(browserInfo.version) + } else { + browserInfo.browserVersion = parseInt(parseFloat(browserInfo.osversion), 10) + } + browserInfo.osVersion = parseFloat(browserInfo.osversion) // iOS forces all browsers to use Safari under the hood // as the Safari version seems to match the iOS version // we just explicitely use the osversion instead // https://github.com/rofrischmann/inline-style-prefixer/issues/72 - if (info.browser === 'ios_saf' && info.version > info.osversion) { - info.version = info.osversion - info.safari = true + if (browserInfo.browserName === 'ios_saf' && browserInfo.browserVersion > browserInfo.osVersion) { + browserInfo.browserVersion = browserInfo.osVersion } - // seperate native android chrome // https://github.com/rofrischmann/inline-style-prefixer/issues/45 - if (info.browser === 'android' && info.chrome && info.version > 37) { - info.browser = 'and_chr' + if ( + browserInfo.browserName === 'android' && browserInfo.chrome && browserInfo.browserVersion > 37 + ) { + browserInfo.browserName = 'and_chr' } // For android < 4.4 we want to check the osversion // not the chrome version, see issue #26 // https://github.com/rofrischmann/inline-style-prefixer/issues/26 - if (info.browser === 'android' && info.osversion < 5) { - info.version = info.osversion + if (browserInfo.browserName === 'android' && browserInfo.osVersion < 5) { + browserInfo.browserVersion = browserInfo.osVersion + } + + // Samsung browser are basically build on Chrome > 44 + // https://github.com/rofrischmann/inline-style-prefixer/issues/102 + if (browserInfo.browserName === 'android' && browserInfo.samsungBrowser) { + browserInfo.browserName = 'and_chr' + browserInfo.browserVersion = 44 } - return info + return browserInfo } diff --git a/modules/utils/getPrefixedKeyframes.js b/modules/utils/getPrefixedKeyframes.js index da84da7..1a9d267 100644 --- a/modules/utils/getPrefixedKeyframes.js +++ b/modules/utils/getPrefixedKeyframes.js @@ -1,14 +1,20 @@ -export default ({ browser, version, prefix }) => { - let prefixedKeyframes = 'keyframes' +/* @flow */ +export default function getPrefixedKeyframes( + browserName: string, + browserVersion: number, + cssPrefix: string +): string { + const prefixedKeyframes = 'keyframes' if ( - browser === 'chrome' && version < 43 || - (browser === 'safari' || browser === 'ios_saf') && version < 9 || - browser === 'opera' && version < 30 || - browser === 'android' && version <= 4.4 || - browser === 'and_uc' + browserName === 'chrome' && browserVersion < 43 || + (browserName === 'safari' || browserName === 'ios_saf') && + browserVersion < 9 || + browserName === 'opera' && browserVersion < 30 || + browserName === 'android' && browserVersion <= 4.4 || + browserName === 'and_uc' ) { - prefixedKeyframes = prefix.css + prefixedKeyframes + return cssPrefix + prefixedKeyframes } return prefixedKeyframes } diff --git a/modules/utils/getPrefixedValue.js b/modules/utils/getPrefixedValue.js index aa20835..76fb48e 100644 --- a/modules/utils/getPrefixedValue.js +++ b/modules/utils/getPrefixedValue.js @@ -1 +1,11 @@ -export default (prefixedValue, value, keepUnprefixed) => keepUnprefixed ? [ prefixedValue, value ] : prefixedValue +/* @flow */ +export default function getPrefixedValue( + prefixedValue: any, + value: any, + keepUnprefixed: boolean +): Array | any { + if (keepUnprefixed) { + return [prefixedValue, value] + } + return prefixedValue +} diff --git a/modules/utils/isObject.js b/modules/utils/isObject.js new file mode 100644 index 0000000..767b9a0 --- /dev/null +++ b/modules/utils/isObject.js @@ -0,0 +1,4 @@ +/* @flow */ +export default function isObject(value: any): boolean { + return value instanceof Object && !Array.isArray(value) +} diff --git a/modules/utils/isPrefixedProperty.js b/modules/utils/isPrefixedProperty.js index 3f0eddc..616ff4b 100644 --- a/modules/utils/isPrefixedProperty.js +++ b/modules/utils/isPrefixedProperty.js @@ -1 +1,6 @@ -export default property => property.match(/^(Webkit|Moz|O|ms)/) !== null +/* @flow */ +const regex = /^(Webkit|Moz|O|ms)/ + +export default function isPrefixedProperty(property: string): boolean { + return property.match(regex) !== null +} diff --git a/modules/utils/isPrefixedValue.js b/modules/utils/isPrefixedValue.js index 2907835..5cbe1b5 100644 --- a/modules/utils/isPrefixedValue.js +++ b/modules/utils/isPrefixedValue.js @@ -1,5 +1,10 @@ -export default value => { - if (Array.isArray(value)) value = value.join(',') +/* @flow */ - return value.match(/-webkit-|-moz-|-ms-/) !== null +const regex = /-webkit-|-moz-|-ms-/ +export default function isPrefixedValue(value: any): boolean { + if (Array.isArray(value)) { + value = value.join(',') + } + + return value.match(regex) !== null } diff --git a/modules/utils/prefixProperty.js b/modules/utils/prefixProperty.js new file mode 100644 index 0000000..301ac5f --- /dev/null +++ b/modules/utils/prefixProperty.js @@ -0,0 +1,16 @@ +import capitalizeString from './capitalizeString' + +/* @flow */ +export default function prefixProperty( + prefixProperties: Object, + property: string, + style: Object +): void { + const requiredPrefixes = prefixProperties[property] + + if (requiredPrefixes) { + for (let i = 0, len = requiredPrefixes.length; i < len; ++i) { + style[requiredPrefixes[i] + capitalizeString(property)] = style[property] + } + } +} diff --git a/modules/utils/prefixValue.js b/modules/utils/prefixValue.js new file mode 100644 index 0000000..4787a7c --- /dev/null +++ b/modules/utils/prefixValue.js @@ -0,0 +1,18 @@ +/* @flow */ +export default function prefixValue( + plugins: Array, + property: string, + value: any, + style: Object, + metaData: ?Object +): ?any { + for (let i = 0, len = plugins.length; i < len; ++i) { + const processedValue = plugins[i](property, value, style, metaData) + + // we can stop processing if a value is returned + // as all plugin criteria are unique + if (processedValue) { + return processedValue + } + } +} diff --git a/modules/utils/sortPrefixedStyle.js b/modules/utils/sortPrefixedStyle.js deleted file mode 100644 index 3eca1e9..0000000 --- a/modules/utils/sortPrefixedStyle.js +++ /dev/null @@ -1,20 +0,0 @@ -import isPrefixedProperty from './isPrefixedProperty' - -export default function sortPrefixedStyle(style) { - const sortedKeys = Object.keys(style).sort((left, right) => { - if (isPrefixedProperty(left) && !isPrefixedProperty(right)) { - return -1 - } else if (!isPrefixedProperty(left) && isPrefixedProperty(right)) { - return 1 - } - return 0 - }) - - const sortedStyle = { } - - for (let i = 0, len = sortedKeys.length; i < len; ++i) { - sortedStyle[sortedKeys[i]] = style[sortedKeys[i]] - } - - return sortedStyle -} diff --git a/modules/utils/unprefixProperty.js b/modules/utils/unprefixProperty.js index 00dcdff..e05a189 100644 --- a/modules/utils/unprefixProperty.js +++ b/modules/utils/unprefixProperty.js @@ -1,4 +1,11 @@ -export default property => { - const unprefixed = property.replace(/^(ms|Webkit|Moz|O)/, '') - return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1) +/* @flow */ +import isPrefixedProperty from './isPrefixedProperty' + +const regex = /^(Webkit|Moz|O|ms)/ +export default function unprefixProperty(property: string): string { + if (isPrefixedProperty(property)) { + const unprefixed = property.replace(regex, '') + return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1) + } + return property } diff --git a/modules/utils/valuePrefixes.js b/modules/utils/valuePrefixes.js deleted file mode 100644 index ea85d52..0000000 --- a/modules/utils/valuePrefixes.js +++ /dev/null @@ -1,2 +0,0 @@ -const valuePrefixes = [ '-webkit-', '-moz-', '' ] -export default valuePrefixes diff --git a/package.json b/package.json index 65ebc5b..12c2b19 100644 --- a/package.json +++ b/package.json @@ -1,32 +1,30 @@ { "name": "inline-style-prefixer", "version": "2.0.5", - "description": "Autoprefixer for inline styles using userAgent and caniuse data", + "description": "Run-time Autoprefixer for JavaScript style objects", "main": "lib/Prefixer.js", "files": [ "LICENSE", "README.md", "lib/", "dist/", - "static.js" + "static.js", + "generator.js" ], - "engines": { - "node": ">=0.12" - }, "scripts": { "babel": "babel modules/ --out-dir lib", "build": "npm run clean && mkdir dist && npm run babel && npm run generate && npm run dist", + "check": "npm run lint && npm test && npm run flow", "clean": "rimraf lib dist coverage", "dist": "cross-env NODE_ENV=production babel-node buildPackage && cross-env NODE_ENV=development babel-node buildPackage", + "flow": "flow", "generate": "babel-node generator/generateData.js", + "lint": "eslint modules", "pretest": "npm run clean && npm run babel && npm run generate", - "release": "npm run build && npm publish", - "test": "istanbul cover _mocha -- --recursive --compilers js:babel-core/register" - }, - "repository": { - "type": "git", - "url": "https://github.com/rofrischmann/inline-style-prefixer" + "release": "npm run check && npm run build && npm publish", + "test": "istanbul cover node_modules/mocha/bin/_mocha -- --recursive --compilers js:babel-core/register" }, + "repository": "https://github.com/rofrischmann/inline-style-prefixer", "keywords": [ "react", "react styling", @@ -40,37 +38,32 @@ "license": "MIT", "dependencies": { "bowser": "^1.6.0", - "hyphenate-style-name": "1.0.2" + "hyphenate-style-name": "^1.0.2" }, "devDependencies": { "babel": "^6.5.2", "babel-cli": "^6.6.0", "babel-core": "^6.6.0", - "babel-eslint": "^5.0.0", + "babel-eslint": "^7.1.1", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-class-properties": "^6.9.1", "babel-preset-es2015-rollup": "^1.1.1", + "babel-preset-es2015": "^6.6.0", + "babel-preset-react": "^6.5.0", "babel-preset-stage-0": "^6.5.0", "caniuse-api": "^1.5.2", "chai": "^3.2.0", "codeclimate-test-reporter": "^0.1.1", "cross-env": "^1.0.8", - "esformatter": "^0.8.1", - "esformatter-braces": "^1.2.1", - "esformatter-collapse-objects": "^0.5.1", - "esformatter-dot-notation": "^1.3.1", - "esformatter-literal-notation": "^1.0.1", - "esformatter-parseint": "^1.0.3", - "esformatter-quote-props": "^1.0.2", - "esformatter-quotes": "^1.0.3", - "esformatter-remove-trailing-commas": "^1.0.1", - "esformatter-spaced-lined-comment": "^2.0.1", - "esformatter-var-each": "^2.1.0", - "eslint": "^2.2.0", - "eslint-config-rackt": "^1.1.1", + "eslint": "^3.14.0", + "eslint-config-airbnb": "^14.0.0", + "eslint-plugin-flowtype": "^2.30.0", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-jsx-a11y": "^3.0.2", + "eslint-plugin-react": "^6.9.0", + "flow-bin": "^0.38.0", "istanbul": "1.0.0-alpha.2", - "mocha": "^2.2.5", - "object-assign": "^4.0.1", + "mocha": "^2.4.5", "rimraf": "^2.4.2", "rollup": "0.26.3", "rollup-plugin-babel": "2.4.0", diff --git a/test/prefixAll-test.js b/test/prefixAll-test.js index 3aa6890..b439d5a 100644 --- a/test/prefixAll-test.js +++ b/test/prefixAll-test.js @@ -1,255 +1,265 @@ import { expect } from 'chai' import prefixAll from '../modules/static/prefixAll' -describe('Prefixing all properties', () => { - it('should only add prefixes if browsers need it', () => { - const input = { transition: '200ms all linear' } - const output = { - WebkitTransition: '200ms all linear', - transition: '200ms all linear' - } - expect(prefixAll(input)).to.eql(output) - }) +describe('inline-style-prefixer/static', () => { + describe('Prefixing all properties', () => { + it('should only add prefixes if browsers need it', () => { + const input = { transition: '200ms all linear' } + const output = { + WebkitTransition: '200ms all linear', + transition: '200ms all linear' + } + expect(prefixAll(input)).to.eql(output) + }) - it('should add all prefixes', () => { - const input = { userSelect: 'none' } - const output = { - WebkitUserSelect: 'none', - MozUserSelect: 'none', - msUserSelect: 'none', - userSelect: 'none' - } - expect(prefixAll(input)).to.eql(output) - }) + it('should add all prefixes', () => { + const input = { userSelect: 'none' } + const output = { + WebkitUserSelect: 'none', + MozUserSelect: 'none', + msUserSelect: 'none', + userSelect: 'none' + } + expect(prefixAll(input)).to.eql(output) + }) - it('should use dash-cased alternative values in array', () => { - const input = { marginLeft: 'calc(30deg)' } - const output = { - marginLeft: [ '-webkit-calc(30deg)', '-moz-calc(30deg)', 'calc(30deg)' ] - } - expect(prefixAll(input)).to.eql(output) - }) + it('should use dash-cased alternative values in array', () => { + const input = { marginLeft: 'calc(30deg)' } + const output = { marginLeft: ['-webkit-calc(30deg)', '-moz-calc(30deg)', 'calc(30deg)'] } + expect(prefixAll(input)).to.eql(output) + }) - it('should also resolve nested objects', () => { - const input = { - transition: '200ms all linear', - innerStyles: { - transition: '300ms all ease-in' - } - } - const output = { - WebkitTransition: '200ms all linear', - transition: '200ms all linear', - innerStyles: { - WebkitTransition: '300ms all ease-in', - transition: '300ms all ease-in' - } - } - expect(prefixAll(input)).to.eql(output) + it('should also resolve nested objects', () => { + const input = { + transition: '200ms all linear', + innerStyles: { transition: '300ms all ease-in' } + } + const output = { + WebkitTransition: '200ms all linear', + transition: '200ms all linear', + innerStyles: { + WebkitTransition: '300ms all ease-in', + transition: '300ms all ease-in' + } + } + expect(prefixAll(input)).to.eql(output) + }) }) -}) -describe('Resolving special plugins', () => { - it('should prefix calc expressions', () => { - const input = { width: 'calc(30px)' } - const output = { - width: [ '-webkit-calc(30px)', '-moz-calc(30px)', 'calc(30px)' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + describe('Resolving special plugins', () => { + it('should prefix calc expressions', () => { + const input = { width: 'calc(30px)' } + const output = { width: ['-webkit-calc(30px)', '-moz-calc(30px)', 'calc(30px)'] } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix special cursor values', () => { - const input = { cursor: 'zoom-in' } - const output = { - cursor: [ '-webkit-zoom-in', '-moz-zoom-in', 'zoom-in' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix special cursor values', () => { + const input = { cursor: 'zoom-in' } + const output = { cursor: ['-webkit-zoom-in', '-moz-zoom-in', 'zoom-in'] } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should resolve flex-direction for all flexbox specification', () => { - const input = { flexDirection: 'column-reverse' } - const output = { - WebkitBoxOrient: 'vertical', - WebkitBoxDirection: 'reverse', - WebkitFlexDirection: 'column-reverse', - msFlexDirection: 'column-reverse', - flexDirection: 'column-reverse' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) - - it('should resolve alternative values for all flexbox specification', () => { - const input = { justifyContent: 'space-around' } - const output = { - WebkitBoxPack: 'justify', - WebkitJustifyContent: 'space-around', - justifyContent: 'space-around', - msFlexPack: 'distribute' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should resolve flex-direction for all flexbox specification', () => { + const input = { flexDirection: 'column-reverse' } + const output = { + WebkitBoxOrient: 'vertical', + WebkitBoxDirection: 'reverse', + WebkitFlexDirection: 'column-reverse', + msFlexDirection: 'column-reverse', + flexDirection: 'column-reverse' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should resolve flexbox variants', () => { - const input = { - alignItems: 'center', - height: '100px', - width: '200px' - } - const output = { - WebkitAlignItems: 'center', - WebkitBoxAlign: 'center', - msFlexAlign: 'center', - alignItems: 'center', - height: '100px', - width: '200px' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it( + 'should resolve alternative values for all flexbox specification', + () => { + const input = { justifyContent: 'space-around' } + const output = { + WebkitBoxPack: 'justify', + WebkitJustifyContent: 'space-around', + justifyContent: 'space-around', + msFlexPack: 'distribute' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + } + ) - it('should not resolve alternative values on alignSelf', () => { - const input = { alignSelf: 'flex-start' } - const output = { - msFlexItemAlign: 'start', - WebkitAlignSelf: 'flex-start', - alignSelf: 'flex-start' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should resolve flexbox variants', () => { + const input = { + alignItems: 'center', + height: '100px', + width: '200px' + } + const output = { + WebkitAlignItems: 'center', + WebkitBoxAlign: 'center', + msFlexAlign: 'center', + alignItems: 'center', + height: '100px', + width: '200px' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix gradients', () => { - const input = { - background: 'linear-gradient(to bottom right, red, yellow)' - } - const output = { - background: [ '-webkit-linear-gradient(to bottom right, red, yellow)', '-moz-linear-gradient(to bottom right, red, yellow)', 'linear-gradient(to bottom right, red, yellow)' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should not resolve alternative values on alignSelf', () => { + const input = { alignSelf: 'flex-start' } + const output = { + msFlexItemAlign: 'start', + WebkitAlignSelf: 'flex-start', + alignSelf: 'flex-start' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should add all flexbox display types', () => { - const input = { display: 'flex' } - const output = { - display: [ '-webkit-box', '-moz-box', '-ms-flexbox', '-webkit-flex', 'flex' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix gradients', () => { + const input = { background: 'linear-gradient(to bottom right, red, yellow)' } + const output = { + background: [ + '-webkit-linear-gradient(to bottom right, red, yellow)', + '-moz-linear-gradient(to bottom right, red, yellow)', + 'linear-gradient(to bottom right, red, yellow)' + ] + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should add all inline flexbox display types', () => { - const input = { display: 'inline-flex' } - const output = { - display: [ '-webkit-box', '-moz-box', '-ms-inline-flexbox', '-webkit-inline-flex', 'inline-flex' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should add all flexbox display types', () => { + const input = { display: 'flex' } + const output = { + display: [ + '-webkit-box', + '-moz-box', + '-ms-flexbox', + '-webkit-flex', + 'flex' + ] + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix special sizing values', () => { - const input = { width: 'min-content' } - const output = { - width: [ '-webkit-min-content', '-moz-min-content', 'min-content' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should add all inline flexbox display types', () => { + const input = { display: 'inline-flex' } + const output = { + display: [ + '-webkit-box', + '-moz-box', + '-ms-inline-flexbox', + '-webkit-inline-flex', + 'inline-flex' + ] + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix every property within transition values', () => { - const input = { - transition: '200ms linear appearance, 100ms linear width' - } - const output = { - WebkitTransition: '200ms linear -webkit-appearance,200ms linear appearance, 100ms linear width', - transition: '200ms linear -moz-appearance,200ms linear -webkit-appearance,200ms linear appearance, 100ms linear width' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix special sizing values', () => { + const input = { width: 'min-content' } + const output = { width: ['-webkit-min-content', '-moz-min-content', 'min-content'] } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix transitions with cubic beziers', () => { - const input = { - transition: 'transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' - } - const output = { - transition: '-ms-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)', - WebkitTransition: '-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix every property within transition values', () => { + const input = { transition: '200ms linear appearance, 100ms linear width' } + const output = { + WebkitTransition: '200ms linear -webkit-appearance,200ms linear appearance, 100ms linear width', + transition: '200ms linear -moz-appearance,200ms linear -webkit-appearance,200ms linear appearance, 100ms linear width' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) + it('should prefix transitions with cubic beziers', () => { + const input = { transition: 'transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' } + const output = { + transition: '-ms-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)', + WebkitTransition: '-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix transition values with border', () => { - const input = { transition: 'border 500ms linear' } - const output = { - transition: 'border 500ms linear', - WebkitTransition: 'border 500ms linear' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix transition values with border', () => { + const input = { transition: 'border 500ms linear' } + const output = { + transition: 'border 500ms linear', + WebkitTransition: 'border 500ms linear' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix transition values for prefixed properties', () => { - const input = { WebkitTransition: '200ms linear appearance' } - const output = { - WebkitTransition: '200ms linear -webkit-appearance,200ms linear appearance' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix transition values for prefixed properties', () => { + const input = { WebkitTransition: '200ms linear appearance' } + const output = { WebkitTransition: '200ms linear -webkit-appearance,200ms linear appearance' } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should not prefix msTransition or mozTransition', () => { - const input = { - msTransition: '200ms linear appearance', - mozTransition: '300ms linear width' - } - const output = { - msTransition: '200ms linear appearance', - mozTransition: '300ms linear width' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should not prefix msTransition or mozTransition', () => { + const input = { + msTransition: '200ms linear appearance', + mozTransition: '300ms linear width' + } + const output = { + msTransition: '200ms linear appearance', + mozTransition: '300ms linear width' + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix array values', () => { - const input = { width: [ 'calc(100%)' ] } - const output = { - width: [ '-webkit-calc(100%)', '-moz-calc(100%)', 'calc(100%)' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix array values', () => { + const input = { width: ['calc(100%)'] } + const output = { width: ['-webkit-calc(100%)', '-moz-calc(100%)', 'calc(100%)'] } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix multiple array values', () => { - const input = { width: [ 'calc(100%)', 'min-content' ] } - const output = { - width: [ '-webkit-calc(100%)', '-moz-calc(100%)', 'calc(100%)', '-webkit-min-content', '-moz-min-content', 'min-content' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix multiple array values', () => { + const input = { width: ['calc(100%)', 'min-content'] } + const output = { + width: [ + '-webkit-calc(100%)', + '-moz-calc(100%)', + 'calc(100%)', + '-webkit-min-content', + '-moz-min-content', + 'min-content' + ] + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix multiple array values and keep others', () => { - const input = { width: [ 'min-content', '100%' ] } - const output = { - width: [ '-webkit-min-content', '-moz-min-content', 'min-content', '100%' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) - }) + it('should prefix multiple array values and keep others', () => { + const input = { width: ['min-content', '100%'] } + const output = { + width: [ + '-webkit-min-content', + '-moz-min-content', + 'min-content', + '100%' + ] + } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) - it('should prefix calc values', () => { - const input = { width: 'calc(100%)' } - const output = { - width: [ '-webkit-calc(100%)', '-moz-calc(100%)', 'calc(100%)' ] - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) + it('should prefix calc values', () => { + const input = { width: 'calc(100%)' } + const output = { width: ['-webkit-calc(100%)', '-moz-calc(100%)', 'calc(100%)'] } + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) }) }) diff --git a/test/prefixer-test.js b/test/prefixer-test.js index 648bf75..829238e 100644 --- a/test/prefixer-test.js +++ b/test/prefixer-test.js @@ -1,5 +1,5 @@ import { expect } from 'chai' -import Prefixer from '../modules/Prefixer' +import Prefixer from '../modules/dynamic/Prefixer' const MSIE9 = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)' const MSIE10 = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)' const MSEdge12 = 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136' @@ -7,7 +7,7 @@ const Android4_4_4 = 'Mozilla/5.0 (Linux; Android 4.4.4; One Build/KTU84L.H4) Ap const CordovaIOS8_4 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141' const Android4_2_2Chrome47 = 'Mozilla/5.0 (Linux; Android 4.2.2; Galaxy Nexus Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36' const Android4_2_2Firefox48 = 'Mozilla/5.0 (Android 4.2.2; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0' -const iOSChrome47 = 'Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/47.0.2526.107 Mobile/12H321 Safari/600.1.4' +const iOSChrome47 = 'Mozilla/5.0 (iPad; CPU OS 8_0_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/47.0.2526.107 Mobile/12H321 Safari/600.1.4' const Chrome14 = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.812.0 Safari/535.1' const Chrome22 = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2' const Chrome45 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36' @@ -17,376 +17,367 @@ const Chromium = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, lik const PhantomJS = 'Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1' const Samsung = 'Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G900F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36' -console.log(new Prefixer({ userAgent: Samsung })._browserInfo) - -describe('Prefixing a property', () => { - it('should only add required prefixes', () => { - const input = { appearance: 'test', transition: 'test' } - const prefixed = { WebkitAppearance: 'test', transition: 'test' } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) - }) - it('should not break if the value is undefined or false', () => { - expect(new Prefixer({ userAgent: Chrome14 }).prefix({ - width: undefined - })).to.not.throw - }) - it('should also resolve nested objects', () => { - const input = { - appearance: 'none', - innerStyles: { - appearance: 'none' +describe('inline-style-prefixer', () => { + describe('Prefixing a property', () => { + it('should only add required prefixes', () => { + const input = { + appearance: 'test', + transition: 'test' } - } - const output = { - WebkitAppearance: 'none', - innerStyles: { - WebkitAppearance: 'none' + const prefixed = { + WebkitAppearance: 'test', + transition: 'test' + } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + }) + it('should not break if the value is undefined or false', () => { + expect(new Prefixer({ userAgent: Chrome14 }).prefix({ width: undefined })).to.not.throw + }) + it('should also resolve nested objects', () => { + const input = { + appearance: 'none', + innerStyles: { appearance: 'none' } } - } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + const output = { + WebkitAppearance: 'none', + innerStyles: { WebkitAppearance: 'none' } + } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + }) }) -}) -describe('Prefixing 2D transforms', () => { - const input = { transform: 'rotate(30deg)' } - const prefixed = { msTransform: 'rotate(30deg)' } + describe('Prefixing 2D transforms', () => { + const input = { transform: 'rotate(30deg)' } + const prefixed = { msTransform: 'rotate(30deg)' } - it('should be prefixed on IE 9', () => { - expect(new Prefixer({ userAgent: MSIE9 }).prefix(input)).to.eql(prefixed) - }) - it('should not be prefixed on IE 10', () => { - expect(new Prefixer({ userAgent: MSIE10 }).prefix(input)).to.eql(input) - }) -}) -describe('Running on android < 4.4', () => { - it('should use the osversion if its the native browser to check for required props', () => { - const andPrefixer = new Prefixer({ userAgent: Android4_4_4 }) - expect(andPrefixer._browserInfo.version).to.eql(andPrefixer._browserInfo.osversion) - expect(andPrefixer._browserInfo.version).to.eql(4.4) - const transform = { transform: 'rotate(40deg)' } - const output = { WebkitTransform: 'rotate(40deg)' } - expect(new Prefixer({ userAgent: Android4_4_4 }).prefix(transform)).to.eql(output) - }) - it('should use the chrome version if its chrome to check for required props', () => { - const andPrefixer = new Prefixer({ - userAgent: Android4_2_2Chrome47 + it('should be prefixed on IE 9', () => { + expect(new Prefixer({ userAgent: MSIE9 }).prefix(input)).to.eql(prefixed) }) - expect(andPrefixer._browserInfo.osversion).to.eql(4.2) - expect(andPrefixer._browserInfo.version).to.eql(47) - }) - it('Should use firefox version on android 4.2.2', () => { - const andPrefixer = new Prefixer({ - userAgent: Android4_2_2Firefox48 + it('should not be prefixed on IE 10', () => { + expect(new Prefixer({ userAgent: MSIE10 }).prefix(input)).to.eql(input) }) - expect(andPrefixer._browserInfo.osversion).to.eql(4.2) - expect(andPrefixer._browserInfo.version).to.eql(48) - }) -}) -describe('Running on iOS', () => { - it('always force Safari prefixing as iOS forces to use Safari under the hood', () => { - const iosPrefixer = new Prefixer({ userAgent: iOSChrome47 }) - expect(iosPrefixer._browserInfo.version).to.eql(iosPrefixer._browserInfo.osversion) - const input = { display: 'flex' } - const output = { display: '-webkit-flex' } - expect(iosPrefixer.prefix(input)).to.eql(output) - }) -}) -describe('Running on cordova ios <= 8.4', () => { - it('should be prefixed if the version is missing', () => { - const cdv8_4Prefixer = new Prefixer({ userAgent: CordovaIOS8_4 }) - const transform = { transform: 'rotate(40deg)' } - const output = { WebkitTransform: 'rotate(40deg)' } - expect(cdv8_4Prefixer.prefix(transform)).to.eql(output) - expect(cdv8_4Prefixer._browserInfo.version).to.eql(8) - }) -}) -describe('Prefixing with MS Edge', () => { - it('should not add -webkit- prefixes', () => { - const input = { alignItems: 'center', justifyContent: 'center' } - expect(new Prefixer({ userAgent: MSEdge12 }).prefix(input)).to.eql(input) - }) -}) -describe('Resolving array values', () => { - it('should resolve each value', () => { - const input = { - width: [ 'calc(30deg)', '100%' ], - display: [ 'inline-block', '-webkit-flex', 'flex', 'block' ] - } - const output = { - width: [ '-webkit-calc(30deg)', '100%' ], - display: [ 'inline-block', '-webkit-flex', '-webkit-box', 'block' ] - } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) }) - it('should should keep unprefixed', () => { - const input = { - width: [ 'calc(30deg)', '100%' ], - display: [ 'inline-block', '-webkit-flex', 'flex', 'block' ] - } - const output = { - width: [ '-webkit-calc(30deg)', 'calc(30deg)', '100%' ], - display: [ 'inline-block', '-webkit-flex', '-webkit-box', 'flex', 'block' ] - } - expect(new Prefixer({ - userAgent: Chrome14, - keepUnprefixed: true - }).prefix(input)).to.eql(output) - }) -}) -describe('Resolving calc values', () => { - it('should resolve calc values', () => { - const input = { width: 'calc(30deg)' } - const output = { width: '-webkit-calc(30deg)' } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) - }) -}) -describe('Resolving special sizing values', () => { - it('should add prefixes', () => { - const input = { width: 'min-content' } - const output = { width: '-webkit-min-content' } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) - }) -}) -describe('Resolving old 2009 flexbox specification', () => { - it('should prefix display value', () => { - const input = { display: 'flex' } - const output = { display: '-webkit-box' } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) - }) - it('should replace flexDirection', () => { - const input = { flexDirection: 'column-reverse' } - const output = { - WebkitBoxOrient: 'vertical', - WebkitBoxDirection: 'reverse' - } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) - }) - it('should resolve alternative values', () => { - const input2 = { justifyContent: 'space-between' } - const output2 = { WebkitBoxPack: 'justify' } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input2)).to.eql(output2) - }) -}) -describe('Resolving old 2012 flexbox specification', () => { - it('should resolve alternative properties', () => { - const input = { alignItems: 'center' } - const output = { msFlexAlign: 'center' } - expect(new Prefixer({ userAgent: MSIE10 }).prefix(input)).to.eql(output) - }) - it('should resolve alternative properties and values', () => { - const input = { justifyContent: 'space-between' } - const output = { msFlexPack: 'justify' } - expect(new Prefixer({ userAgent: MSIE10 }).prefix(input)).to.eql(output) - }) -}) -describe('Resolving zoom cursor values', () => { - it('should add prefixes when appropriate', () => { - const standard = { cursor: 'pointer' } - const input = { cursor: 'zoom-in' } - const output = { cursor: '-webkit-zoom-in' } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(standard)).to.eql(standard) - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) - expect(new Prefixer({ userAgent: Chrome49 }).prefix(input)).to.eql(input) - expect(new Prefixer({ userAgent: Chromium }).prefix(input)).to.eql(input) - expect(new Prefixer({ userAgent: PhantomJS }).prefix(input)).to.eql(input) + describe('Running on android < 4.4', () => { + it('should use the osversion if its the native browser to check for required props', () => { + const andPrefixer = new Prefixer({ userAgent: Android4_4_4 }) + console.log(andPrefixer._browserInfo) + expect(andPrefixer._browserInfo.browserVersion).to.eql(andPrefixer._browserInfo.osVersion) + expect(andPrefixer._browserInfo.browserVersion).to.eql(4.4) + const transform = { transform: 'rotate(40deg)' } + const output = { WebkitTransform: 'rotate(40deg)' } + expect(new Prefixer({ userAgent: Android4_4_4 }).prefix(transform)).to.eql(output) + }) + it('should use the chrome version if its chrome to check for required props', () => { + const andPrefixer = new Prefixer({ userAgent: Android4_2_2Chrome47 }) + expect(andPrefixer._browserInfo.osVersion).to.eql(4.2) + expect(andPrefixer._browserInfo.browserVersion).to.eql(47) + }) + it('Should use firefox version on android 4.2.2', () => { + const andPrefixer = new Prefixer({ userAgent: Android4_2_2Firefox48 }) + expect(andPrefixer._browserInfo.osVersion).to.eql(4.2) + expect(andPrefixer._browserInfo.browserVersion).to.eql(48) + }) }) -}) -describe('Resolving grab cursor values', () => { - it('should add prefixes when appropriate', () => { - const standard = { cursor: 'pointer' } - const input = { cursor: 'grab' } - const output = { cursor: '-webkit-grab' } - expect(new Prefixer({ userAgent: Chrome14 }).prefix(standard)).to.eql(standard) - expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) - expect(new Prefixer({ userAgent: Chrome49 }).prefix(input)).to.eql(output) - expect(new Prefixer({ userAgent: Chromium }).prefix(input)).to.eql(input) - expect(new Prefixer({ userAgent: PhantomJS }).prefix(input)).to.eql(input) + describe('Running on iOS', () => { + it('always force Safari prefixing as iOS forces to use Safari under the hood', () => { + const iosPrefixer = new Prefixer({ userAgent: iOSChrome47 }) + console.log(iosPrefixer._browserInfo) + expect(iosPrefixer._browserInfo.browserVersion).to.eql(iosPrefixer._browserInfo.osVersion) + const input = { display: 'flex' } + const output = { display: '-webkit-flex' } + expect(iosPrefixer.prefix(input)).to.eql(output) + }) }) -}) -describe('Using an invalid userAgent', () => { - it('should use prefixAll as fallback', () => { - const input = { appearance: 'test' } - const output = { - WebkitAppearance: 'test', - MozAppearance: 'test', - appearance: 'test' - } - expect(new Prefixer({ userAgent: 'bad userAgent' }).prefix(input)).to.eql(output) + describe('Running on cordova ios <= 8.4', () => { + it('should be prefixed if the version is missing', () => { + const cdv8_4Prefixer = new Prefixer({ userAgent: CordovaIOS8_4 }) + console.log(cdv8_4Prefixer._browserInfo) + const transform = { transform: 'rotate(40deg)' } + const output = { WebkitTransform: 'rotate(40deg)' } + expect(cdv8_4Prefixer.prefix(transform)).to.eql(output) + expect(cdv8_4Prefixer._browserInfo.browserVersion).to.eql(8) + }) }) -}) -describe('Prefixing keyframes', () => { - it('should return the correct keyframes string', () => { - expect(new Prefixer({ userAgent: Chrome14 }).prefixedKeyframes).to.eql('-webkit-keyframes') - expect(new Prefixer({ userAgent: Chrome49 }).prefixedKeyframes).to.eql('keyframes') - expect(new Prefixer({ userAgent: Chromium }).prefixedKeyframes).to.eql('keyframes') - expect(new Prefixer({ userAgent: PhantomJS }).prefixedKeyframes).to.eql('keyframes') + describe('Prefixing with MS Edge', () => { + it('should not add -webkit- prefixes', () => { + const input = { + alignItems: 'center', + justifyContent: 'center' + } + expect(new Prefixer({ userAgent: MSEdge12 }).prefix(input)).to.eql(input) + }) }) -}) -describe('Prefixing gradients', () => { - it('should add prefixes', () => { - const input = { background: 'linear-gradient()' } - const prefixed = { background: '-webkit-linear-gradient()' } - expect(new Prefixer({ userAgent: Chrome22 }).prefix(input)).to.eql(prefixed) + describe('Resolving array values', () => { + it('should resolve each value', () => { + const input = { + width: ['calc(30deg)', '100%'], + display: ['inline-block', '-webkit-flex', 'flex', 'block'] + } + const output = { + width: ['-webkit-calc(30deg)', '100%'], + display: ['inline-block', '-webkit-flex', '-webkit-box', 'block'] + } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + }) + it('should should keep unprefixed', () => { + const input = { + width: ['calc(30deg)', '100%'], + display: ['inline-block', '-webkit-flex', 'flex', 'block'] + } + const output = { + width: ['-webkit-calc(30deg)', 'calc(30deg)', '100%'], + display: ['inline-block', '-webkit-flex', '-webkit-box', 'flex', 'block'] + } + expect( + new Prefixer({ + userAgent: Chrome14, + keepUnprefixed: true + }).prefix(input) + ).to.eql(output) + }) }) -}) -describe('Prefixing transitions', () => { - it('should add prefixes to properties in value', () => { - const input = { transition: 'appearance 200ms linear' } - const prefixed = { transition: '-webkit-appearance 200ms linear' } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + describe('Resolving calc values', () => { + it('should resolve calc values', () => { + const input = { width: 'calc(30deg)' } + const output = { width: '-webkit-calc(30deg)' } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + }) }) - it('should not split cubic-beziers', () => { - const input = { - transition: 'appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0)' - } - const prefixed = { - transition: '-webkit-appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0)' - } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + describe('Resolving special sizing values', () => { + it('should add prefixes', () => { + const input = { width: 'min-content' } + const output = { width: '-webkit-min-content' } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + }) }) - it('should prefix multiple properties in value but not split cubic-beziers', () => { - const input = { - transition: 'appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0), user-select 100ms linear' - } - const prefixed = { - transition: '-webkit-appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0), -webkit-user-select 100ms linear' - } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + describe('Resolving old 2009 flexbox specification', () => { + it('should prefix display value', () => { + const input = { display: 'flex' } + const output = { display: '-webkit-box' } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + }) + it('should replace flexDirection', () => { + const input = { flexDirection: 'column-reverse' } + const output = { + WebkitBoxOrient: 'vertical', + WebkitBoxDirection: 'reverse' + } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + }) + it('should resolve alternative values', () => { + const input2 = { justifyContent: 'space-between' } + const output2 = { WebkitBoxPack: 'justify' } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input2)).to.eql(output2) + }) }) - it('should not prefix transition values with border', () => { - const input = { transition: 'border 500ms linear' } - const output = { transition: 'border 500ms linear' } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(output) + describe('Resolving old 2012 flexbox specification', () => { + it('should resolve alternative properties', () => { + const input = { alignItems: 'center' } + const output = { msFlexAlign: 'center' } + expect(new Prefixer({ userAgent: MSIE10 }).prefix(input)).to.eql(output) + }) + it('should resolve alternative properties and values', () => { + const input = { justifyContent: 'space-between' } + const output = { msFlexPack: 'justify' } + expect(new Prefixer({ userAgent: MSIE10 }).prefix(input)).to.eql(output) + }) }) - it('should add prefixes to multiple properties in value', () => { - const input = { - transition: 'appearance 200ms linear, user-select 100ms linear' - } - const prefixed = { - transition: '-webkit-appearance 200ms linear, -webkit-user-select 100ms linear' - } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) - const input2 = { transitionProperty: 'appearance, user-select' } - const prefixed2 = { - transitionProperty: '-webkit-appearance, -webkit-user-select' - } - expect(new Prefixer({ userAgent: Chrome45 }).prefix(input2)).to.eql(prefixed2) + describe('Resolving zoom cursor values', () => { + it('should add prefixes when appropriate', () => { + const standard = { cursor: 'pointer' } + const input = { cursor: 'zoom-in' } + const output = { cursor: '-webkit-zoom-in' } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(standard)).to.eql(standard) + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + expect(new Prefixer({ userAgent: Chrome49 }).prefix(input)).to.eql(input) + expect(new Prefixer({ userAgent: Chromium }).prefix(input)).to.eql(input) + expect(new Prefixer({ userAgent: PhantomJS }).prefix(input)).to.eql(input) + }) }) - it('should keep unprefixed properties', () => { - const input = { transition: 'appearance 200ms linear' } - const prefixed = { - transition: '-webkit-appearance 200ms linear,appearance 200ms linear' - } - expect(new Prefixer({ - userAgent: Chrome45, - keepUnprefixed: true - }).prefix(input)).to.eql(prefixed) - const input2 = { transitionProperty: 'appearance' } - const prefixed2 = { - transitionProperty: '-webkit-appearance,appearance' - } - expect(new Prefixer({ - userAgent: Chrome45, - keepUnprefixed: true - }).prefix(input2)).to.eql(prefixed2) + describe('Resolving grab cursor values', () => { + it('should add prefixes when appropriate', () => { + const standard = { cursor: 'pointer' } + const input = { cursor: 'grab' } + const output = { cursor: '-webkit-grab' } + expect(new Prefixer({ userAgent: Chrome14 }).prefix(standard)).to.eql(standard) + expect(new Prefixer({ userAgent: Chrome14 }).prefix(input)).to.eql(output) + expect(new Prefixer({ userAgent: Chrome49 }).prefix(input)).to.eql(output) + expect(new Prefixer({ userAgent: Chromium }).prefix(input)).to.eql(input) + expect(new Prefixer({ userAgent: PhantomJS }).prefix(input)).to.eql(input) + }) }) - it('should keep unprefixed properties with multiple properties in value', () => { - const input = { - transition: 'appearance 200ms linear, user-select 100ms linear' - } - const prefixed = { - transition: '-webkit-appearance 200ms linear,appearance 200ms linear, -webkit-user-select 100ms linear, user-select 100ms linear' - } - expect(new Prefixer({ - userAgent: Chrome45, - keepUnprefixed: true - }).prefix(input)).to.eql(prefixed) - const input2 = { transitionProperty: 'appearance, width' } - const prefixed2 = { - transitionProperty: '-webkit-appearance,appearance, width' - } - expect(new Prefixer({ - userAgent: Chrome45, - keepUnprefixed: true - }).prefix(input2)).to.eql(prefixed2) + describe('Using an invalid userAgent', () => { + it('should use prefixAll as fallback', () => { + const input = { appearance: 'test' } + const output = { + WebkitAppearance: 'test', + MozAppearance: 'test', + appearance: 'test' + } + expect(new Prefixer({ userAgent: 'bad userAgent' }).prefix(input)).to.eql(output) + }) }) -}) -describe('Keeping defaults', () => { - it('should not delete defaults properties', () => { - const input = { appearance: 'test', transition: 'test' } - const prefixed = { - WebkitAppearance: 'test', - appearance: 'test', - transition: 'test' - } - expect(new Prefixer({ - userAgent: Chrome45, - keepUnprefixed: true - }).prefix(input)).to.eql(prefixed) + describe('Prefixing keyframes', () => { + it('should return the correct keyframes string', () => { + expect(new Prefixer({ userAgent: Chrome14 }).prefixedKeyframes).to.eql('-webkit-keyframes') + expect(new Prefixer({ userAgent: Chrome49 }).prefixedKeyframes).to.eql('keyframes') + expect(new Prefixer({ userAgent: Chromium }).prefixedKeyframes).to.eql('keyframes') + expect(new Prefixer({ userAgent: PhantomJS }).prefixedKeyframes).to.eql('keyframes') + }) }) - it('should keep default values', () => { - expect(new Prefixer({ - userAgent: Chrome22, - keepUnprefixed: true - }).prefix({ display: 'flex' })).to.eql({ - display: [ '-webkit-flex', 'flex' ] - }) - expect(new Prefixer({ - userAgent: MSIE10, - keepUnprefixed: true - }).prefix({ display: 'flex' })).to.eql({ - display: [ '-ms-flexbox', 'flex' ] + describe('Prefixing gradients', () => { + it('should add prefixes', () => { + const input = { background: 'linear-gradient()' } + const prefixed = { background: '-webkit-linear-gradient()' } + expect(new Prefixer({ userAgent: Chrome22 }).prefix(input)).to.eql(prefixed) }) }) - it('should use dash-cased fallback properties', () => { - expect(new Prefixer({ - userAgent: Chrome22, - keepUnprefixed: true - }).prefix({ marginLeft: 'calc(30deg)' })).to.eql({ - marginLeft: [ '-webkit-calc(30deg)', 'calc(30deg)' ] - }) - expect(new Prefixer({ - userAgent: MSIE10, - keepUnprefixed: true - }).prefix({ display: 'flex' })).to.eql({ - display: [ '-ms-flexbox', 'flex' ] + describe('Prefixing transitions', () => { + it('should add prefixes to properties in value', () => { + const input = { transition: 'appearance 200ms linear' } + const prefixed = { transition: '-webkit-appearance 200ms linear' } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + }) + it('should not split cubic-beziers', () => { + const input = { transition: 'appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0)' } + const prefixed = { transition: '-webkit-appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0)' } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + }) + it('should prefix multiple properties in value but not split cubic-beziers', () => { + const input = { transition: 'appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0), user-select 100ms linear' } + const prefixed = { transition: '-webkit-appearance 200ms cubic-bezier(0.42, 0.0, 1.0, 1.0), -webkit-user-select 100ms linear' } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + }) + it('should not prefix transition values with border', () => { + const input = { transition: 'border 500ms linear' } + const output = { transition: 'border 500ms linear' } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(output) + }) + it('should add prefixes to multiple properties in value', () => { + const input = { transition: 'appearance 200ms linear, user-select 100ms linear' } + const prefixed = { transition: '-webkit-appearance 200ms linear, -webkit-user-select 100ms linear' } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input)).to.eql(prefixed) + const input2 = { transitionProperty: 'appearance, user-select' } + const prefixed2 = { transitionProperty: '-webkit-appearance, -webkit-user-select' } + expect(new Prefixer({ userAgent: Chrome45 }).prefix(input2)).to.eql(prefixed2) + }) + it('should keep unprefixed properties', () => { + const input = { transition: 'appearance 200ms linear' } + const prefixed = { transition: '-webkit-appearance 200ms linear,appearance 200ms linear' } + expect( + new Prefixer({ + userAgent: Chrome45, + keepUnprefixed: true + }).prefix(input) + ).to.eql(prefixed) + const input2 = { transitionProperty: 'appearance' } + const prefixed2 = { transitionProperty: '-webkit-appearance,appearance' } + expect( + new Prefixer({ + userAgent: Chrome45, + keepUnprefixed: true + }).prefix(input2) + ).to.eql(prefixed2) + }) + it('should keep unprefixed properties with multiple properties in value', () => { + const input = { transition: 'appearance 200ms linear, user-select 100ms linear' } + const prefixed = { transition: '-webkit-appearance 200ms linear,appearance 200ms linear, -webkit-user-select 100ms linear, user-select 100ms linear' } + expect( + new Prefixer({ + userAgent: Chrome45, + keepUnprefixed: true + }).prefix(input) + ).to.eql(prefixed) + const input2 = { transitionProperty: 'appearance, width' } + const prefixed2 = { transitionProperty: '-webkit-appearance,appearance, width' } + expect( + new Prefixer({ + userAgent: Chrome45, + keepUnprefixed: true + }).prefix(input2) + ).to.eql(prefixed2) }) }) -}) -describe('Evaluating unsupported browsers', () => { - it('should set a fallback flag', () => { - expect(new Prefixer({ userAgent: SeaMonkey })._usePrefixAllFallback).to.eql(true) + describe('Keeping defaults', () => { + it('should not delete defaults properties', () => { + const input = { + appearance: 'test', + transition: 'test' + } + const prefixed = { + WebkitAppearance: 'test', + appearance: 'test', + transition: 'test' + } + expect( + new Prefixer({ + userAgent: Chrome45, + keepUnprefixed: true + }).prefix(input) + ).to.eql(prefixed) + }) + it('should keep default values', () => { + expect( + new Prefixer({ + userAgent: Chrome22, + keepUnprefixed: true + }).prefix({ display: 'flex' }) + ).to.eql({ display: ['-webkit-flex', 'flex'] }) + expect( + new Prefixer({ + userAgent: MSIE10, + keepUnprefixed: true + }).prefix({ display: 'flex' }) + ).to.eql({ display: ['-ms-flexbox', 'flex'] }) + }) + it('should use dash-cased fallback properties', () => { + expect( + new Prefixer({ + userAgent: Chrome22, + keepUnprefixed: true + }).prefix({ marginLeft: 'calc(30deg)' }) + ).to.eql({ marginLeft: ['-webkit-calc(30deg)', 'calc(30deg)'] }) + expect( + new Prefixer({ + userAgent: MSIE10, + keepUnprefixed: true + }).prefix({ display: 'flex' }) + ).to.eql({ display: ['-ms-flexbox', 'flex'] }) + }) }) -}) -describe('Passing no userAgent', () => { - it('should not throw', () => { - global.navigator = { userAgent: Chrome45 } - expect(new Prefixer()._userAgent).to.eql(Chrome45) + describe('Evaluating unsupported browsers', () => { + it('should set a fallback flag', () => { + expect(new Prefixer({ userAgent: SeaMonkey })._useFallback).to.eql(true) + }) }) -}) -describe('Prefixing display', () => { - it('should not remove display property', () => { - expect(new Prefixer({ userAgent: MSIE10 }).prefix({ - display: 'block' - })).to.eql({ display: 'block' }) + describe('Passing no userAgent', () => { + it('should not throw', () => { + global.navigator = { userAgent: Chrome45 } + expect(new Prefixer()._userAgent).to.eql(Chrome45) + }) }) - it('should not throw if display is null or undefined', () => { - expect(new Prefixer({ userAgent: Chrome45 }).prefix({ - display: null - })).to.eql({ display: null }) - expect(new Prefixer({ userAgent: Chrome45 }).prefix({ - display: undefined - })).to.eql({ display: undefined }) + describe('Prefixing display', () => { + it('should not remove display property', () => { + expect( + new Prefixer({ userAgent: MSIE10 }).prefix({ display: 'block' }) + ).to.eql({ display: 'block' }) + }) + it('should not throw if display is null or undefined', () => { + expect(new Prefixer({ userAgent: Chrome45 }).prefix({ display: null })).to.eql({ display: null }) + expect( + new Prefixer({ userAgent: Chrome45 }).prefix({ display: undefined }) + ).to.eql({ display: undefined }) + }) }) -}) -describe('Using Prefixer.prefixAll', () => { - it(' should use inline-style-prefixer/static', () => { - const input = { userSelect: 'none' } - const output = { - WebkitUserSelect: 'none', - MozUserSelect: 'none', - msUserSelect: 'none', - userSelect: 'none' - } - expect(Prefixer.prefixAll(input)).to.eql(output) + describe('Using Prefixer.prefixAll', () => { + it(' should use inline-style-prefixer/static', () => { + const input = { userSelect: 'none' } + const output = { + WebkitUserSelect: 'none', + MozUserSelect: 'none', + msUserSelect: 'none', + userSelect: 'none' + } + expect(Prefixer.prefixAll(input)).to.eql(output) + }) }) }) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..a88d774 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3256 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" + +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0: + version "4.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array.prototype.find@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.3.tgz#08c3ec33e32ec4bab362a2958e686ae92f59271d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@1.x, async@^1.4.0, async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +async@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/async/-/async-0.7.0.tgz#4429e0e62f5de0a54f37458c49f0b897eb52ada5" + +async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + +babel-cli@^6.6.0: + version "6.22.2" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.22.2.tgz#3f814c8acf52759082b8fedd9627f938936ab559" + dependencies: + babel-core "^6.22.1" + babel-polyfill "^6.22.0" + babel-register "^6.22.0" + babel-runtime "^6.22.0" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^7.0.0" + lodash "^4.2.0" + output-file-sync "^1.1.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.6.1" + +babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@6, babel-core@^6.22.0, babel-core@^6.22.1, babel-core@^6.6.0: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.22.0" + babel-helpers "^6.22.0" + babel-messages "^6.22.0" + babel-register "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.1" + babel-types "^6.22.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-eslint@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" + dependencies: + babel-code-frame "^6.16.0" + babel-traverse "^6.15.0" + babel-types "^6.15.0" + babylon "^6.13.0" + lodash.pickby "^4.6.0" + +babel-generator@^6.18.0, babel-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" + dependencies: + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + +babel-helper-bindify-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" + dependencies: + babel-helper-explode-assignable-expression "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-builder-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + esutils "^2.0.0" + lodash "^4.2.0" + +babel-helper-call-delegate@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-define-map@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-explode-class@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" + dependencies: + babel-helper-bindify-decorators "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" + dependencies: + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-get-function-arity@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-hoist-variables@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-optimise-call-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-replace-supers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" + dependencies: + babel-helper-optimise-call-expression "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-messages@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-add-module-exports@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.4.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" + dependencies: + babel-helper-remap-async-to-generator "^6.22.0" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" + dependencies: + babel-helper-remap-async-to-generator "^6.22.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.22.0.tgz#11a4d2216abb5b0eef298b493748f4f2f4869120" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-class-properties@^6.22.0, babel-plugin-transform-class-properties@^6.9.1: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" + dependencies: + babel-helper-function-name "^6.22.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" + dependencies: + babel-helper-explode-class "^6.22.0" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.22.0, babel-plugin-transform-es2015-classes@^6.3.15: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" + dependencies: + babel-helper-define-map "^6.22.0" + babel-helper-function-name "^6.22.0" + babel-helper-optimise-call-expression "^6.22.0" + babel-helper-replace-supers "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-modules-commonjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" + dependencies: + babel-plugin-transform-strict-mode "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-modules-umd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" + dependencies: + babel-helper-replace-supers "^6.22.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" + dependencies: + babel-helper-call-delegate "^6.22.0" + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-function-bind@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-display-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" + dependencies: + babel-helper-builder-react-jsx "^6.22.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" + dependencies: + regenerator-transform "0.9.8" + +babel-plugin-transform-strict-mode@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-polyfill@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-preset-es2015-rollup@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015-rollup/-/babel-preset-es2015-rollup-1.2.0.tgz#feedf80346e01fa22d4de15e72cde1cefc59bf67" + dependencies: + babel-plugin-external-helpers "^6.4.0" + babel-preset-es2015 "^6.3.13" + modify-babel-preset "^2.1.1" + +babel-preset-es2015@^6.3.13, babel-preset-es2015@^6.6.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.22.0" + babel-plugin-transform-es2015-classes "^6.22.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-systemjs "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.22.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.22.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + +babel-preset-react@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" + dependencies: + babel-plugin-syntax-flow "^6.3.13" + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-flow-strip-types "^6.22.0" + babel-plugin-transform-react-display-name "^6.22.0" + babel-plugin-transform-react-jsx "^6.22.0" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + +babel-preset-stage-0@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz#707eeb5b415da769eff9c42f4547f644f9296ef9" + dependencies: + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.22.0" + +babel-preset-stage-1@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.22.0.tgz#7da05bffea6ad5a10aef93e320cfc6dd465dbc1a" + dependencies: + babel-plugin-transform-class-constructor-call "^6.22.0" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.22.0" + +babel-preset-stage-2@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.22.0" + babel-plugin-transform-decorators "^6.22.0" + babel-preset-stage-3 "^6.22.0" + +babel-preset-stage-3@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" + dependencies: + babel-core "^6.22.0" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babel@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +bcrypt-pbkdf@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +boom@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + dependencies: + hoek "0.9.x" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bowser@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserslist@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.0.tgz#738df5b2971354d198b2fbd5a22c560d2d896084" + dependencies: + caniuse-db "^1.0.30000617" + electron-to-chromium "^1.2.1" + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +builtin-modules@^1.1.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +caniuse-api@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.2.tgz#8f393c682f661c0a997b77bba6e826483fb3600e" + dependencies: + browserslist "^1.0.1" + caniuse-db "^1.0.30000346" + lodash.memoize "^4.1.0" + lodash.uniq "^4.3.0" + shelljs "^0.7.0" + +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000617: + version "1.0.30000617" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000617.tgz#9b7fd81f58a35526315c83e60cb5f076f0beb392" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chai@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +circular-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +codeclimate-test-reporter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/codeclimate-test-reporter/-/codeclimate-test-reporter-0.1.1.tgz#812936e53849af290b0585755252b198e81402a3" + dependencies: + async "~0.7.0" + lcov-parse "0.0.6" + request "~2.34.0" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +combined-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + dependencies: + delayed-stream "0.0.5" + +commander@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" + +commander@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" + +commander@^2.8.1, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +convert-source-map@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cross-env@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-1.0.8.tgz#2bde748efc780f56ddf07ea69fcad875357774ce" + dependencies: + cross-spawn "^3.0.1" + lodash.assign "^3.2.0" + +cross-spawn@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cryptiles@0.2.x: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + dependencies: + boom "0.4.x" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + +d@^0.1.1, d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + +damerau-levenshtein@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@^2.1.1, debug@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" + dependencies: + ms "0.7.2" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +doctrine@1.5.0, doctrine@^1.2.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +electron-to-chromium@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.1.tgz#63ac7579a1c5bedb296c8607621f2efc9a54b968" + +es-abstract@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: + version "0.10.12" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" + dependencies: + d "^0.1.1" + es5-ext "^0.10.7" + es6-symbol "3" + +es6-map@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-set "~0.1.3" + es6-symbol "~3.1.0" + event-emitter "~0.3.4" + +es6-set@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-symbol "3" + event-emitter "~0.3.4" + +es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + +es6-weak-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" + dependencies: + d "^0.1.1" + es5-ext "^0.10.8" + es6-iterator "2" + es6-symbol "3" + +escape-string-regexp@1.0.2, escape-string-regexp@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-airbnb-base@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.0.1.tgz#5401dba284c6b7d7c8fb1c2ee19aba018f9dfa21" + +eslint-config-airbnb@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.0.0.tgz#bfd87a71102ba3ee19c3733357000b3d5e39790f" + dependencies: + eslint-config-airbnb-base "^11.0.1" + +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + +eslint-module-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + dependencies: + debug "2.2.0" + pkg-dir "^1.0.0" + +eslint-plugin-flowtype@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.30.0.tgz#3054a265f9c8afe3046c3d41b72d32a736f9b4ae" + dependencies: + lodash "^4.15.0" + +eslint-plugin-import@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-jsx-a11y@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.2.tgz#9f0eabcafde3d2a2600d96a66adb90d099e841fe" + dependencies: + damerau-levenshtein "^1.0.0" + jsx-ast-utils "^1.0.0" + object-assign "^4.0.1" + +eslint-plugin-react@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz#54c2e9906b76f9d10142030bdc34e9d6840a0bb2" + dependencies: + array.prototype.find "^2.0.1" + doctrine "^1.2.2" + jsx-ast-utils "^1.3.4" + +eslint@^3.14.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.14.1.tgz#8a62175f2255109494747a1b25128d97b8eb3d97" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^1.2.2" + escope "^3.6.0" + espree "^3.3.1" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c" + dependencies: + acorn "^4.0.1" + acorn-jsx "^3.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + dependencies: + estraverse "~4.1.0" + object-assign "^4.0.1" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" + +estree-walker@^0.2.0, estree-walker@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-emitter@~0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" + dependencies: + d "~0.1.1" + es5-ext "~0.10.7" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flow-bin@^0.38.0: + version "0.38.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.38.0.tgz#3ae096d401c969cc8b5798253fb82381e2d0237a" + +for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + +for-own@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + +form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fs-readdir-recursive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.0.17" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +gauge@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + supports-color "^0.2.0" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@3.2.11: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0, globals@^9.14.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.4: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +handlebars@^4.0.3: + version "4.0.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.0.0.tgz#b90bb169807285411da7ffcb8dd2598502d3b52d" + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@0.9.x: + version "0.9.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +http-signature@~0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +hyphenate-style-name@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" + +ignore@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-regex@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.0.0-alpha: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.1.tgz#d36e2f1560d1a43ce304c4ff7338182de61c8f73" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.0.0" + istanbul-lib-hook "^1.0.0" + istanbul-lib-instrument "^1.3.0" + istanbul-lib-report "^1.0.0-alpha.3" + istanbul-lib-source-maps "^1.1.0" + istanbul-reports "^1.0.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" + +istanbul-lib-hook@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz#fc5367ee27f59268e8f060b0c7aaf051d9c425c5" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.3.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.0.0" + semver "^5.3.0" + +istanbul-lib-report@^1.0.0-alpha.3: + version "1.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" + dependencies: + async "^1.4.2" + istanbul-lib-coverage "^1.0.0-alpha" + mkdirp "^0.5.1" + path-parse "^1.0.5" + rimraf "^2.4.3" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f" + dependencies: + istanbul-lib-coverage "^1.0.0-alpha.0" + mkdirp "^0.5.1" + rimraf "^2.4.4" + source-map "^0.5.3" + +istanbul-reports@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777" + dependencies: + handlebars "^4.0.3" + +istanbul@1.0.0-alpha.2: + version "1.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-1.0.0-alpha.2.tgz#06096bc08e98baad744aae46962d8df9fac63d08" + dependencies: + abbrev "1.0.x" + async "1.x" + istanbul-api "^1.0.0-alpha" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + which "^1.1.1" + wordwrap "^1.0.0" + +jade@0.26.3: + version "0.26.3" + resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" + dependencies: + commander "0.6.1" + mkdirp "0.3.0" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-tokens@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" + +js-yaml@3.x, js-yaml@^3.5.1, js-yaml@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.5.tgz#9ba6297198d9f754594d62e59496ffb923778dd4" + dependencies: + acorn-jsx "^3.0.1" + object-assign "^4.1.0" + +kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcov-parse@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.assign@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.memoize@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.uniq@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lru-cache@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +magic-string@^0.10.0: + version "0.10.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.10.2.tgz#f25f1c3d9e484f0d8ad606d6c2faf404a3b6cf9d" + dependencies: + vlq "^0.2.1" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" + dependencies: + mime-db "~1.26.0" + +mime@~1.2.11, mime@~1.2.9: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^2.4.5: + version "2.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" + dependencies: + commander "2.3.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.2" + glob "3.2.11" + growl "1.9.2" + jade "0.26.3" + mkdirp "0.5.1" + supports-color "1.2.0" + to-iso-string "0.0.2" + +modify-babel-preset@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/modify-babel-preset/-/modify-babel-preset-2.1.1.tgz#2d3190162ee62fb67aaa3325c242f026322ebbac" + dependencies: + require-relative "^0.8.7" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +nan@^2.3.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +node-pre-gyp@^0.6.29: + version "0.6.32" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" + dependencies: + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.1" + rc "~1.1.6" + request "^2.79.0" + rimraf "~2.5.4" + semver "~5.3.0" + tar "~2.2.1" + tar-pack "~3.3.0" + +node-uuid@~1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + +nopt@3.x, nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +npmlog@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.0" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@~0.6.0: + version "0.6.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" + +qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +rc@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + +regenerator-transform@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +request@~2.34.0: + version "2.34.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.34.0.tgz#b5d8b9526add4a2d4629f4d417124573996445ae" + dependencies: + forever-agent "~0.5.0" + json-stringify-safe "~5.0.0" + mime "~1.2.9" + node-uuid "~1.4.0" + qs "~0.6.0" + optionalDependencies: + aws-sign2 "~0.5.0" + form-data "~0.1.0" + hawk "~1.0.0" + http-signature "~0.10.0" + oauth-sign "~0.3.0" + tough-cookie ">=0.12.0" + tunnel-agent "~0.3.0" + +require-relative@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.4.2, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +rollup-plugin-babel@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.4.0.tgz#82a7e164fa29142abd07b526b9c7c02d5ea33bbd" + dependencies: + babel-core "6" + babel-plugin-transform-es2015-classes "^6.3.15" + object-assign "^4.0.1" + rollup-pluginutils "^1.1.0" + +rollup-plugin-commonjs@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-2.2.1.tgz#8c9faa048e8acb70654f7c937bc9dedec50a6b39" + dependencies: + acorn "^2.4.0" + estree-walker "^0.2.0" + magic-string "^0.10.0" + resolve "^1.1.6" + rollup-pluginutils "^1.2.0" + +rollup-plugin-node-resolve@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-1.5.0.tgz#b3e433f36d636afed4379b5a47dd7c98c5d930c7" + dependencies: + browser-resolve "^1.11.0" + builtin-modules "^1.1.0" + resolve "^1.1.6" + +rollup-plugin-uglify@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-0.3.1.tgz#0d977f90a4ddbe2d5301403271a538783233486c" + dependencies: + uglify-js "^2.6.1" + +rollup-pluginutils@^1.1.0, rollup-pluginutils@^1.2.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + dependencies: + estree-walker "^0.2.1" + minimatch "^3.0.2" + +rollup@0.26.3: + version "0.26.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.26.3.tgz#cfb25d0b85a345db07c6ad9aa7295ba0fde00870" + dependencies: + chalk "^1.1.1" + minimist "^1.2.0" + source-map-support "^0.4.0" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +shelljs@^0.7.0, shelljs@^0.7.5: + version "0.7.6" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +sntp@0.2.x: + version "0.2.4" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + dependencies: + hoek "0.9.x" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.0, source-map-support@^0.4.2: + version "0.4.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.10.tgz#d7b19038040a14c0837a18e630a196453952b378" + dependencies: + source-map "^0.5.3" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" + +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + +tar@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +to-iso-string@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" + +tough-cookie@>=0.12.0, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tunnel-agent@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.3.0.tgz#ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@^2.6, uglify-js@^2.6.1: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +v8flags@^2.0.10: + version "2.0.11" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" + dependencies: + user-home "^1.1.1" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vlq@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c" + +which@^1.1.1, which@^1.2.9: + version "1.2.12" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + dependencies: + isexe "^1.1.1" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2, wordwrap@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yallist@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"