You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					865 lines
				
				24 KiB
			
		
		
			
		
	
	
					865 lines
				
				24 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, '__esModule', {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopDefault(ex) {
							 | 
						||
| 
								 | 
							
								  return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var parse = require('postcss-value-parser');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var parse__default = _interopDefault(parse);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var camelizeStyleName = _interopDefault(require('camelize'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var cssColorKeywords = _interopDefault(require('css-color-keywords'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var matchString = function matchString(node) {
							 | 
						||
| 
								 | 
							
								  if (node.type !== 'string') return null;
							 | 
						||
| 
								 | 
							
								  return node.value.replace(/\\([0-9a-f]{1,6})(?:\s|$)/gi, function (match, charCode) {
							 | 
						||
| 
								 | 
							
								    return String.fromCharCode(parseInt(charCode, 16));
							 | 
						||
| 
								 | 
							
								  }).replace(/\\/g, '');
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var hexColorRe = /^(#(?:[0-9a-f]{3,4}){1,2})$/i;
							 | 
						||
| 
								 | 
							
								var cssFunctionNameRe = /^(rgba?|hsla?|hwb|lab|lch|gray|color)$/;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var matchColor = function matchColor(node) {
							 | 
						||
| 
								 | 
							
								  if (node.type === 'word' && (hexColorRe.test(node.value) || node.value in cssColorKeywords || node.value === 'transparent')) {
							 | 
						||
| 
								 | 
							
								    return node.value;
							 | 
						||
| 
								 | 
							
								  } else if (node.type === 'function' && cssFunctionNameRe.test(node.value)) {
							 | 
						||
| 
								 | 
							
								    return parse.stringify(node);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return null;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var noneRe = /^(none)$/i;
							 | 
						||
| 
								 | 
							
								var autoRe = /^(auto)$/i;
							 | 
						||
| 
								 | 
							
								var identRe = /(^-?[_a-z][_a-z0-9-]*$)/i; // Note if these are wrong, you'll need to change index.js too
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var numberRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)$/i; // Note lengthRe is sneaky: you can omit units for 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)(?=px$))/i;
							 | 
						||
| 
								 | 
							
								var unsupportedUnitRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(ch|em|ex|rem|vh|vw|vmin|vmax|cm|mm|in|pc|pt))$/i;
							 | 
						||
| 
								 | 
							
								var angleRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(?:deg|rad))$/i;
							 | 
						||
| 
								 | 
							
								var percentRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?%)$/i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var noopToken = function noopToken(predicate) {
							 | 
						||
| 
								 | 
							
								  return function (node) {
							 | 
						||
| 
								 | 
							
								    return predicate(node) ? '<token>' : null;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var valueForTypeToken = function valueForTypeToken(type) {
							 | 
						||
| 
								 | 
							
								  return function (node) {
							 | 
						||
| 
								 | 
							
								    return node.type === type ? node.value : null;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var regExpToken = function regExpToken(regExp, transform) {
							 | 
						||
| 
								 | 
							
								  if (transform === void 0) {
							 | 
						||
| 
								 | 
							
								    transform = String;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return function (node) {
							 | 
						||
| 
								 | 
							
								    if (node.type !== 'word') return null;
							 | 
						||
| 
								 | 
							
								    var match = node.value.match(regExp);
							 | 
						||
| 
								 | 
							
								    if (match === null) return null;
							 | 
						||
| 
								 | 
							
								    var value = transform(match[1]);
							 | 
						||
| 
								 | 
							
								    return value;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var SPACE = noopToken(function (node) {
							 | 
						||
| 
								 | 
							
								  return node.type === 'space';
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var SLASH = noopToken(function (node) {
							 | 
						||
| 
								 | 
							
								  return node.type === 'div' && node.value === '/';
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var COMMA = noopToken(function (node) {
							 | 
						||
| 
								 | 
							
								  return node.type === 'div' && node.value === ',';
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var WORD = valueForTypeToken('word');
							 | 
						||
| 
								 | 
							
								var NONE = regExpToken(noneRe);
							 | 
						||
| 
								 | 
							
								var AUTO = regExpToken(autoRe);
							 | 
						||
| 
								 | 
							
								var NUMBER = regExpToken(numberRe, Number);
							 | 
						||
| 
								 | 
							
								var LENGTH = regExpToken(lengthRe, Number);
							 | 
						||
| 
								 | 
							
								var UNSUPPORTED_LENGTH_UNIT = regExpToken(unsupportedUnitRe);
							 | 
						||
| 
								 | 
							
								var ANGLE = regExpToken(angleRe, function (angle) {
							 | 
						||
| 
								 | 
							
								  return angle.toLowerCase();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var PERCENT = regExpToken(percentRe);
							 | 
						||
| 
								 | 
							
								var IDENT = regExpToken(identRe);
							 | 
						||
| 
								 | 
							
								var STRING = matchString;
							 | 
						||
| 
								 | 
							
								var COLOR = matchColor;
							 | 
						||
| 
								 | 
							
								var LINE = regExpToken(/^(none|underline|line-through)$/i);
							 | 
						||
| 
								 | 
							
								var BORDER_STYLE = regExpToken(/^(solid|dashed|dotted)$/);
							 | 
						||
| 
								 | 
							
								var defaultBorderWidth = 1;
							 | 
						||
| 
								 | 
							
								var defaultBorderColor = 'black';
							 | 
						||
| 
								 | 
							
								var defaultBorderStyle = 'solid';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var border = function border(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var borderWidth;
							 | 
						||
| 
								 | 
							
								  var borderColor;
							 | 
						||
| 
								 | 
							
								  var borderStyle;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.matches(NONE)) {
							 | 
						||
| 
								 | 
							
								    tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      borderWidth: 0,
							 | 
						||
| 
								 | 
							
								      borderColor: 'black',
							 | 
						||
| 
								 | 
							
								      borderStyle: 'solid'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var partsParsed = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (partsParsed < 3 && tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (partsParsed !== 0) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (borderWidth === undefined && tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT)) {
							 | 
						||
| 
								 | 
							
								      borderWidth = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (borderColor === undefined && tokenStream.matches(COLOR)) {
							 | 
						||
| 
								 | 
							
								      borderColor = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (borderStyle === undefined && tokenStream.matches(BORDER_STYLE)) {
							 | 
						||
| 
								 | 
							
								      borderStyle = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      tokenStream["throw"]();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    partsParsed += 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								  if (borderWidth === undefined) borderWidth = defaultBorderWidth;
							 | 
						||
| 
								 | 
							
								  if (borderColor === undefined) borderColor = defaultBorderColor;
							 | 
						||
| 
								 | 
							
								  if (borderStyle === undefined) borderStyle = defaultBorderStyle;
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    borderWidth: borderWidth,
							 | 
						||
| 
								 | 
							
								    borderColor: borderColor,
							 | 
						||
| 
								 | 
							
								    borderStyle: borderStyle
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var directionFactory = function directionFactory(_ref) {
							 | 
						||
| 
								 | 
							
								  var _ref$types = _ref.types,
							 | 
						||
| 
								 | 
							
								      types = _ref$types === void 0 ? [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT] : _ref$types,
							 | 
						||
| 
								 | 
							
								      _ref$directions = _ref.directions,
							 | 
						||
| 
								 | 
							
								      directions = _ref$directions === void 0 ? ['Top', 'Right', 'Bottom', 'Left'] : _ref$directions,
							 | 
						||
| 
								 | 
							
								      _ref$prefix = _ref.prefix,
							 | 
						||
| 
								 | 
							
								      prefix = _ref$prefix === void 0 ? '' : _ref$prefix,
							 | 
						||
| 
								 | 
							
								      _ref$suffix = _ref.suffix,
							 | 
						||
| 
								 | 
							
								      suffix = _ref$suffix === void 0 ? '' : _ref$suffix;
							 | 
						||
| 
								 | 
							
								  return function (tokenStream) {
							 | 
						||
| 
								 | 
							
								    var _ref2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var values = []; // borderWidth doesn't currently allow a percent value, but may do in the future
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    values.push(tokenStream.expect.apply(tokenStream, types));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while (values.length < 4 && tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								      tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								      values.push(tokenStream.expect.apply(tokenStream, types));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								    var top = values[0],
							 | 
						||
| 
								 | 
							
								        _values$ = values[1],
							 | 
						||
| 
								 | 
							
								        right = _values$ === void 0 ? top : _values$,
							 | 
						||
| 
								 | 
							
								        _values$2 = values[2],
							 | 
						||
| 
								 | 
							
								        bottom = _values$2 === void 0 ? top : _values$2,
							 | 
						||
| 
								 | 
							
								        _values$3 = values[3],
							 | 
						||
| 
								 | 
							
								        left = _values$3 === void 0 ? right : _values$3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var keyFor = function keyFor(n) {
							 | 
						||
| 
								 | 
							
								      return "" + prefix + directions[n] + suffix;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return _ref2 = {}, _ref2[keyFor(0)] = top, _ref2[keyFor(1)] = right, _ref2[keyFor(2)] = bottom, _ref2[keyFor(3)] = left, _ref2;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var parseShadowOffset = function parseShadowOffset(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var width = tokenStream.expect(LENGTH);
							 | 
						||
| 
								 | 
							
								  var height = tokenStream.matches(SPACE) ? tokenStream.expect(LENGTH) : width;
							 | 
						||
| 
								 | 
							
								  tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    width: width,
							 | 
						||
| 
								 | 
							
								    height: height
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var parseShadow = function parseShadow(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var offsetX;
							 | 
						||
| 
								 | 
							
								  var offsetY;
							 | 
						||
| 
								 | 
							
								  var radius;
							 | 
						||
| 
								 | 
							
								  var color;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.matches(NONE)) {
							 | 
						||
| 
								 | 
							
								    tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      offset: {
							 | 
						||
| 
								 | 
							
								        width: 0,
							 | 
						||
| 
								 | 
							
								        height: 0
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      radius: 0,
							 | 
						||
| 
								 | 
							
								      color: 'black'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var didParseFirst = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (didParseFirst) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (offsetX === undefined && tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT)) {
							 | 
						||
| 
								 | 
							
								      offsetX = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								      tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								      offsetY = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT);
							 | 
						||
| 
								 | 
							
								      tokenStream.saveRewindPoint();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (tokenStream.matches(SPACE) && tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT)) {
							 | 
						||
| 
								 | 
							
								        radius = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        tokenStream.rewind();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    } else if (color === undefined && tokenStream.matches(COLOR)) {
							 | 
						||
| 
								 | 
							
								      color = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      tokenStream["throw"]();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    didParseFirst = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (offsetX === undefined) tokenStream["throw"]();
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    offset: {
							 | 
						||
| 
								 | 
							
								      width: offsetX,
							 | 
						||
| 
								 | 
							
								      height: offsetY
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    radius: radius !== undefined ? radius : 0,
							 | 
						||
| 
								 | 
							
								    color: color !== undefined ? color : 'black'
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var boxShadow = function boxShadow(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var _parseShadow = parseShadow(tokenStream),
							 | 
						||
| 
								 | 
							
								      offset = _parseShadow.offset,
							 | 
						||
| 
								 | 
							
								      radius = _parseShadow.radius,
							 | 
						||
| 
								 | 
							
								      color = _parseShadow.color;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    shadowOffset: offset,
							 | 
						||
| 
								 | 
							
								    shadowRadius: radius,
							 | 
						||
| 
								 | 
							
								    shadowColor: color,
							 | 
						||
| 
								 | 
							
								    shadowOpacity: 1
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var defaultFlexGrow = 1;
							 | 
						||
| 
								 | 
							
								var defaultFlexShrink = 1;
							 | 
						||
| 
								 | 
							
								var defaultFlexBasis = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var flex = function flex(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var flexGrow;
							 | 
						||
| 
								 | 
							
								  var flexShrink;
							 | 
						||
| 
								 | 
							
								  var flexBasis;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.matches(NONE)) {
							 | 
						||
| 
								 | 
							
								    tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      flexGrow: 0,
							 | 
						||
| 
								 | 
							
								      flexShrink: 0,
							 | 
						||
| 
								 | 
							
								      flexBasis: 'auto'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.saveRewindPoint();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.matches(AUTO) && !tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      flexGrow: 1,
							 | 
						||
| 
								 | 
							
								      flexShrink: 1,
							 | 
						||
| 
								 | 
							
								      flexBasis: 'auto'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.rewind();
							 | 
						||
| 
								 | 
							
								  var partsParsed = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (partsParsed < 2 && tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (partsParsed !== 0) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (flexGrow === undefined && tokenStream.matches(NUMBER)) {
							 | 
						||
| 
								 | 
							
								      flexGrow = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								      tokenStream.saveRewindPoint();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (tokenStream.matches(SPACE) && tokenStream.matches(NUMBER)) {
							 | 
						||
| 
								 | 
							
								        flexShrink = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        tokenStream.rewind();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    } else if (flexBasis === undefined && tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT)) {
							 | 
						||
| 
								 | 
							
								      flexBasis = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (flexBasis === undefined && tokenStream.matches(AUTO)) {
							 | 
						||
| 
								 | 
							
								      flexBasis = 'auto';
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      tokenStream["throw"]();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    partsParsed += 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								  if (flexGrow === undefined) flexGrow = defaultFlexGrow;
							 | 
						||
| 
								 | 
							
								  if (flexShrink === undefined) flexShrink = defaultFlexShrink;
							 | 
						||
| 
								 | 
							
								  if (flexBasis === undefined) flexBasis = defaultFlexBasis;
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    flexGrow: flexGrow,
							 | 
						||
| 
								 | 
							
								    flexShrink: flexShrink,
							 | 
						||
| 
								 | 
							
								    flexBasis: flexBasis
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var FLEX_WRAP = regExpToken(/(nowrap|wrap|wrap-reverse)/);
							 | 
						||
| 
								 | 
							
								var FLEX_DIRECTION = regExpToken(/(row|row-reverse|column|column-reverse)/);
							 | 
						||
| 
								 | 
							
								var defaultFlexWrap = 'nowrap';
							 | 
						||
| 
								 | 
							
								var defaultFlexDirection = 'row';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var flexFlow = function flexFlow(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var flexWrap;
							 | 
						||
| 
								 | 
							
								  var flexDirection;
							 | 
						||
| 
								 | 
							
								  var partsParsed = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (partsParsed < 2 && tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (partsParsed !== 0) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (flexWrap === undefined && tokenStream.matches(FLEX_WRAP)) {
							 | 
						||
| 
								 | 
							
								      flexWrap = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (flexDirection === undefined && tokenStream.matches(FLEX_DIRECTION)) {
							 | 
						||
| 
								 | 
							
								      flexDirection = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      tokenStream["throw"]();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    partsParsed += 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								  if (flexWrap === undefined) flexWrap = defaultFlexWrap;
							 | 
						||
| 
								 | 
							
								  if (flexDirection === undefined) flexDirection = defaultFlexDirection;
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    flexWrap: flexWrap,
							 | 
						||
| 
								 | 
							
								    flexDirection: flexDirection
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fontFamily = function fontFamily(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var fontFamily;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.matches(STRING)) {
							 | 
						||
| 
								 | 
							
								    fontFamily = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    fontFamily = tokenStream.expect(IDENT);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    while (tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								      tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								      var nextIdent = tokenStream.expect(IDENT);
							 | 
						||
| 
								 | 
							
								      fontFamily += " " + nextIdent;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    fontFamily: fontFamily
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var NORMAL = regExpToken(/^(normal)$/);
							 | 
						||
| 
								 | 
							
								var STYLE = regExpToken(/^(italic)$/);
							 | 
						||
| 
								 | 
							
								var WEIGHT = regExpToken(/^([1-9]00|bold)$/);
							 | 
						||
| 
								 | 
							
								var VARIANT = regExpToken(/^(small-caps)$/);
							 | 
						||
| 
								 | 
							
								var defaultFontStyle = 'normal';
							 | 
						||
| 
								 | 
							
								var defaultFontWeight = 'normal';
							 | 
						||
| 
								 | 
							
								var defaultFontVariant = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var font = function font(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var fontStyle;
							 | 
						||
| 
								 | 
							
								  var fontWeight;
							 | 
						||
| 
								 | 
							
								  var fontVariant; // let fontSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var lineHeight; // let fontFamily;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var numStyleWeightVariantMatched = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (numStyleWeightVariantMatched < 3 && tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (tokenStream.matches(NORMAL)) ;else if (fontStyle === undefined && tokenStream.matches(STYLE)) {
							 | 
						||
| 
								 | 
							
								      fontStyle = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (fontWeight === undefined && tokenStream.matches(WEIGHT)) {
							 | 
						||
| 
								 | 
							
								      fontWeight = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (fontVariant === undefined && tokenStream.matches(VARIANT)) {
							 | 
						||
| 
								 | 
							
								      fontVariant = [tokenStream.lastValue];
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								    numStyleWeightVariantMatched += 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var fontSize = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.matches(SLASH)) {
							 | 
						||
| 
								 | 
							
								    lineHeight = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var _fontFamily = fontFamily(tokenStream),
							 | 
						||
| 
								 | 
							
								      fontFamily$1 = _fontFamily.fontFamily;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (fontStyle === undefined) fontStyle = defaultFontStyle;
							 | 
						||
| 
								 | 
							
								  if (fontWeight === undefined) fontWeight = defaultFontWeight;
							 | 
						||
| 
								 | 
							
								  if (fontVariant === undefined) fontVariant = defaultFontVariant;
							 | 
						||
| 
								 | 
							
								  var out = {
							 | 
						||
| 
								 | 
							
								    fontStyle: fontStyle,
							 | 
						||
| 
								 | 
							
								    fontWeight: fontWeight,
							 | 
						||
| 
								 | 
							
								    fontVariant: fontVariant,
							 | 
						||
| 
								 | 
							
								    fontSize: fontSize,
							 | 
						||
| 
								 | 
							
								    fontFamily: fontFamily$1
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  if (lineHeight !== undefined) out.lineHeight = lineHeight;
							 | 
						||
| 
								 | 
							
								  return out;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var ALIGN_CONTENT = regExpToken(/(flex-(?:start|end)|center|stretch|space-(?:between|around))/);
							 | 
						||
| 
								 | 
							
								var JUSTIFY_CONTENT = regExpToken(/(flex-(?:start|end)|center|space-(?:between|around|evenly))/);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var placeContent = function placeContent(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var alignContent = tokenStream.expect(ALIGN_CONTENT);
							 | 
						||
| 
								 | 
							
								  var justifyContent;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								    justifyContent = tokenStream.expect(JUSTIFY_CONTENT);
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    justifyContent = 'stretch';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  tokenStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    alignContent: alignContent,
							 | 
						||
| 
								 | 
							
								    justifyContent: justifyContent
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var STYLE$1 = regExpToken(/^(solid|double|dotted|dashed)$/);
							 | 
						||
| 
								 | 
							
								var defaultTextDecorationLine = 'none';
							 | 
						||
| 
								 | 
							
								var defaultTextDecorationStyle = 'solid';
							 | 
						||
| 
								 | 
							
								var defaultTextDecorationColor = 'black';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var textDecoration = function textDecoration(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var line;
							 | 
						||
| 
								 | 
							
								  var style;
							 | 
						||
| 
								 | 
							
								  var color;
							 | 
						||
| 
								 | 
							
								  var didParseFirst = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (didParseFirst) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (line === undefined && tokenStream.matches(LINE)) {
							 | 
						||
| 
								 | 
							
								      var lines = [tokenStream.lastValue.toLowerCase()];
							 | 
						||
| 
								 | 
							
								      tokenStream.saveRewindPoint();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (lines[0] !== 'none' && tokenStream.matches(SPACE) && tokenStream.matches(LINE)) {
							 | 
						||
| 
								 | 
							
								        lines.push(tokenStream.lastValue.toLowerCase()); // Underline comes before line-through
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        lines.sort().reverse();
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        tokenStream.rewind();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      line = lines.join(' ');
							 | 
						||
| 
								 | 
							
								    } else if (style === undefined && tokenStream.matches(STYLE$1)) {
							 | 
						||
| 
								 | 
							
								      style = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else if (color === undefined && tokenStream.matches(COLOR)) {
							 | 
						||
| 
								 | 
							
								      color = tokenStream.lastValue;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      tokenStream["throw"]();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    didParseFirst = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    textDecorationLine: line !== undefined ? line : defaultTextDecorationLine,
							 | 
						||
| 
								 | 
							
								    textDecorationColor: color !== undefined ? color : defaultTextDecorationColor,
							 | 
						||
| 
								 | 
							
								    textDecorationStyle: style !== undefined ? style : defaultTextDecorationStyle
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var textDecorationLine = function textDecorationLine(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var lines = [];
							 | 
						||
| 
								 | 
							
								  var didParseFirst = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (didParseFirst) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								    lines.push(tokenStream.expect(LINE).toLowerCase());
							 | 
						||
| 
								 | 
							
								    didParseFirst = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  lines.sort().reverse();
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    textDecorationLine: lines.join(' ')
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var textShadow = function textShadow(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var _parseShadow2 = parseShadow(tokenStream),
							 | 
						||
| 
								 | 
							
								      offset = _parseShadow2.offset,
							 | 
						||
| 
								 | 
							
								      radius = _parseShadow2.radius,
							 | 
						||
| 
								 | 
							
								      color = _parseShadow2.color;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    textShadowOffset: offset,
							 | 
						||
| 
								 | 
							
								    textShadowRadius: radius,
							 | 
						||
| 
								 | 
							
								    textShadowColor: color
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var oneOfType = function oneOfType(tokenType) {
							 | 
						||
| 
								 | 
							
								  return function (functionStream) {
							 | 
						||
| 
								 | 
							
								    var value = functionStream.expect(tokenType);
							 | 
						||
| 
								 | 
							
								    functionStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								    return value;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var singleNumber = oneOfType(NUMBER);
							 | 
						||
| 
								 | 
							
								var singleLength = oneOfType(LENGTH);
							 | 
						||
| 
								 | 
							
								var singleAngle = oneOfType(ANGLE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var xyTransformFactory = function xyTransformFactory(tokenType) {
							 | 
						||
| 
								 | 
							
								  return function (key, valueIfOmitted) {
							 | 
						||
| 
								 | 
							
								    return function (functionStream) {
							 | 
						||
| 
								 | 
							
								      var _ref3, _ref4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var x = functionStream.expect(tokenType);
							 | 
						||
| 
								 | 
							
								      var y;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (functionStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								        functionStream.expect(COMMA);
							 | 
						||
| 
								 | 
							
								        y = functionStream.expect(tokenType);
							 | 
						||
| 
								 | 
							
								      } else if (valueIfOmitted !== undefined) {
							 | 
						||
| 
								 | 
							
								        y = valueIfOmitted;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        // Assumption, if x === y, then we can omit XY
							 | 
						||
| 
								 | 
							
								        // I.e. scale(5) => [{ scale: 5 }] rather than [{ scaleX: 5 }, { scaleY: 5 }]
							 | 
						||
| 
								 | 
							
								        return x;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      functionStream.expectEmpty();
							 | 
						||
| 
								 | 
							
								      return [(_ref3 = {}, _ref3[key + "Y"] = y, _ref3), (_ref4 = {}, _ref4[key + "X"] = x, _ref4)];
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var xyNumber = xyTransformFactory(NUMBER);
							 | 
						||
| 
								 | 
							
								var xyLength = xyTransformFactory(LENGTH);
							 | 
						||
| 
								 | 
							
								var xyAngle = xyTransformFactory(ANGLE);
							 | 
						||
| 
								 | 
							
								var partTransforms = {
							 | 
						||
| 
								 | 
							
								  perspective: singleNumber,
							 | 
						||
| 
								 | 
							
								  scale: xyNumber('scale'),
							 | 
						||
| 
								 | 
							
								  scaleX: singleNumber,
							 | 
						||
| 
								 | 
							
								  scaleY: singleNumber,
							 | 
						||
| 
								 | 
							
								  translate: xyLength('translate', 0),
							 | 
						||
| 
								 | 
							
								  translateX: singleLength,
							 | 
						||
| 
								 | 
							
								  translateY: singleLength,
							 | 
						||
| 
								 | 
							
								  rotate: singleAngle,
							 | 
						||
| 
								 | 
							
								  rotateX: singleAngle,
							 | 
						||
| 
								 | 
							
								  rotateY: singleAngle,
							 | 
						||
| 
								 | 
							
								  rotateZ: singleAngle,
							 | 
						||
| 
								 | 
							
								  skewX: singleAngle,
							 | 
						||
| 
								 | 
							
								  skewY: singleAngle,
							 | 
						||
| 
								 | 
							
								  skew: xyAngle('skew', '0deg')
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var transform = function transform(tokenStream) {
							 | 
						||
| 
								 | 
							
								  var transforms = [];
							 | 
						||
| 
								 | 
							
								  var didParseFirst = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (tokenStream.hasTokens()) {
							 | 
						||
| 
								 | 
							
								    if (didParseFirst) tokenStream.expect(SPACE);
							 | 
						||
| 
								 | 
							
								    var functionStream = tokenStream.expectFunction();
							 | 
						||
| 
								 | 
							
								    var functionName = functionStream.functionName;
							 | 
						||
| 
								 | 
							
								    var transformedValues = partTransforms[functionName](functionStream);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (!Array.isArray(transformedValues)) {
							 | 
						||
| 
								 | 
							
								      var _ref5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      transformedValues = [(_ref5 = {}, _ref5[functionName] = transformedValues, _ref5)];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    transforms = transformedValues.concat(transforms);
							 | 
						||
| 
								 | 
							
								    didParseFirst = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    transform: transforms
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var background = function background(tokenStream) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    backgroundColor: tokenStream.expect(COLOR)
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var borderColor = directionFactory({
							 | 
						||
| 
								 | 
							
								  types: [COLOR],
							 | 
						||
| 
								 | 
							
								  prefix: 'border',
							 | 
						||
| 
								 | 
							
								  suffix: 'Color'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var borderRadius = directionFactory({
							 | 
						||
| 
								 | 
							
								  directions: ['TopLeft', 'TopRight', 'BottomRight', 'BottomLeft'],
							 | 
						||
| 
								 | 
							
								  prefix: 'border',
							 | 
						||
| 
								 | 
							
								  suffix: 'Radius'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var borderWidth = directionFactory({
							 | 
						||
| 
								 | 
							
								  prefix: 'border',
							 | 
						||
| 
								 | 
							
								  suffix: 'Width'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var margin = directionFactory({
							 | 
						||
| 
								 | 
							
								  types: [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT, AUTO],
							 | 
						||
| 
								 | 
							
								  prefix: 'margin'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								var padding = directionFactory({
							 | 
						||
| 
								 | 
							
								  prefix: 'padding'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fontVariant = function fontVariant(tokenStream) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    fontVariant: [tokenStream.expect(IDENT)]
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fontWeight = function fontWeight(tokenStream) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    fontWeight: tokenStream.expect(WORD) // Also match numbers as strings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var shadowOffset = function shadowOffset(tokenStream) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    shadowOffset: parseShadowOffset(tokenStream)
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var textShadowOffset = function textShadowOffset(tokenStream) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    textShadowOffset: parseShadowOffset(tokenStream)
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var transforms = {
							 | 
						||
| 
								 | 
							
								  background: background,
							 | 
						||
| 
								 | 
							
								  border: border,
							 | 
						||
| 
								 | 
							
								  borderColor: borderColor,
							 | 
						||
| 
								 | 
							
								  borderRadius: borderRadius,
							 | 
						||
| 
								 | 
							
								  borderWidth: borderWidth,
							 | 
						||
| 
								 | 
							
								  boxShadow: boxShadow,
							 | 
						||
| 
								 | 
							
								  flex: flex,
							 | 
						||
| 
								 | 
							
								  flexFlow: flexFlow,
							 | 
						||
| 
								 | 
							
								  font: font,
							 | 
						||
| 
								 | 
							
								  fontFamily: fontFamily,
							 | 
						||
| 
								 | 
							
								  fontVariant: fontVariant,
							 | 
						||
| 
								 | 
							
								  fontWeight: fontWeight,
							 | 
						||
| 
								 | 
							
								  margin: margin,
							 | 
						||
| 
								 | 
							
								  padding: padding,
							 | 
						||
| 
								 | 
							
								  placeContent: placeContent,
							 | 
						||
| 
								 | 
							
								  shadowOffset: shadowOffset,
							 | 
						||
| 
								 | 
							
								  textShadow: textShadow,
							 | 
						||
| 
								 | 
							
								  textShadowOffset: textShadowOffset,
							 | 
						||
| 
								 | 
							
								  textDecoration: textDecoration,
							 | 
						||
| 
								 | 
							
								  textDecorationLine: textDecorationLine,
							 | 
						||
| 
								 | 
							
								  transform: transform
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								var propertiesWithoutUnits;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (process.env.NODE_ENV !== 'production') {
							 | 
						||
| 
								 | 
							
								  propertiesWithoutUnits = ['aspectRatio', 'elevation', 'flexGrow', 'flexShrink', 'opacity', 'shadowOpacity', 'zIndex'];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var devPropertiesWithUnitsRegExp = propertiesWithoutUnits != null ? new RegExp(propertiesWithoutUnits.join('|')) : null;
							 | 
						||
| 
								 | 
							
								var SYMBOL_MATCH = 'SYMBOL_MATCH';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var TokenStream =
							 | 
						||
| 
								 | 
							
								/*#__PURE__*/
							 | 
						||
| 
								 | 
							
								function () {
							 | 
						||
| 
								 | 
							
								  function TokenStream(nodes, parent) {
							 | 
						||
| 
								 | 
							
								    this.index = 0;
							 | 
						||
| 
								 | 
							
								    this.nodes = nodes;
							 | 
						||
| 
								 | 
							
								    this.functionName = parent != null ? parent.value : null;
							 | 
						||
| 
								 | 
							
								    this.lastValue = null;
							 | 
						||
| 
								 | 
							
								    this.rewindIndex = -1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var _proto = TokenStream.prototype;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.hasTokens = function hasTokens() {
							 | 
						||
| 
								 | 
							
								    return this.index <= this.nodes.length - 1;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto[SYMBOL_MATCH] = function () {
							 | 
						||
| 
								 | 
							
								    if (!this.hasTokens()) return null;
							 | 
						||
| 
								 | 
							
								    var node = this.nodes[this.index];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (var i = 0; i < arguments.length; i += 1) {
							 | 
						||
| 
								 | 
							
								      var tokenDescriptor = i < 0 || arguments.length <= i ? undefined : arguments[i];
							 | 
						||
| 
								 | 
							
								      var value = tokenDescriptor(node);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (value !== null) {
							 | 
						||
| 
								 | 
							
								        this.index += 1;
							 | 
						||
| 
								 | 
							
								        this.lastValue = value;
							 | 
						||
| 
								 | 
							
								        return value;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return null;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.matches = function matches() {
							 | 
						||
| 
								 | 
							
								    return this[SYMBOL_MATCH].apply(this, arguments) !== null;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.expect = function expect() {
							 | 
						||
| 
								 | 
							
								    var value = this[SYMBOL_MATCH].apply(this, arguments);
							 | 
						||
| 
								 | 
							
								    return value !== null ? value : this["throw"]();
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.matchesFunction = function matchesFunction() {
							 | 
						||
| 
								 | 
							
								    var node = this.nodes[this.index];
							 | 
						||
| 
								 | 
							
								    if (node.type !== 'function') return null;
							 | 
						||
| 
								 | 
							
								    var value = new TokenStream(node.nodes, node);
							 | 
						||
| 
								 | 
							
								    this.index += 1;
							 | 
						||
| 
								 | 
							
								    this.lastValue = null;
							 | 
						||
| 
								 | 
							
								    return value;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.expectFunction = function expectFunction() {
							 | 
						||
| 
								 | 
							
								    var value = this.matchesFunction();
							 | 
						||
| 
								 | 
							
								    return value !== null ? value : this["throw"]();
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.expectEmpty = function expectEmpty() {
							 | 
						||
| 
								 | 
							
								    if (this.hasTokens()) this["throw"]();
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto["throw"] = function _throw() {
							 | 
						||
| 
								 | 
							
								    throw new Error("Unexpected token type: " + this.nodes[this.index].type);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.saveRewindPoint = function saveRewindPoint() {
							 | 
						||
| 
								 | 
							
								    this.rewindIndex = this.index;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.rewind = function rewind() {
							 | 
						||
| 
								 | 
							
								    if (this.rewindIndex === -1) throw new Error('Internal error');
							 | 
						||
| 
								 | 
							
								    this.index = this.rewindIndex;
							 | 
						||
| 
								 | 
							
								    this.lastValue = null;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return TokenStream;
							 | 
						||
| 
								 | 
							
								}();
							 | 
						||
| 
								 | 
							
								/* eslint-disable no-param-reassign */
							 | 
						||
| 
								 | 
							
								// Note if this is wrong, you'll need to change tokenTypes.js too
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)(?:px)?$/i;
							 | 
						||
| 
								 | 
							
								var numberOnlyRe = /^[+-]?(?:\d*\.\d*|[1-9]\d*)(?:e[+-]?\d+)?$/i;
							 | 
						||
| 
								 | 
							
								var boolRe = /^true|false$/i;
							 | 
						||
| 
								 | 
							
								var nullRe = /^null$/i;
							 | 
						||
| 
								 | 
							
								var undefinedRe = /^undefined$/i; // Undocumented export
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var transformRawValue = function transformRawValue(propName, value) {
							 | 
						||
| 
								 | 
							
								  if (process.env.NODE_ENV !== 'production') {
							 | 
						||
| 
								 | 
							
								    var needsUnit = !devPropertiesWithUnitsRegExp.test(propName);
							 | 
						||
| 
								 | 
							
								    var isNumberWithoutUnit = numberOnlyRe.test(value);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (needsUnit && isNumberWithoutUnit) {
							 | 
						||
| 
								 | 
							
								      // eslint-disable-next-line no-console
							 | 
						||
| 
								 | 
							
								      console.warn("Expected style \"" + propName + ": " + value + "\" to contain units");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (!needsUnit && value !== '0' && !isNumberWithoutUnit) {
							 | 
						||
| 
								 | 
							
								      // eslint-disable-next-line no-console
							 | 
						||
| 
								 | 
							
								      console.warn("Expected style \"" + propName + ": " + value + "\" to be unitless");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var numberMatch = value.match(numberOrLengthRe);
							 | 
						||
| 
								 | 
							
								  if (numberMatch !== null) return Number(numberMatch[1]);
							 | 
						||
| 
								 | 
							
								  var boolMatch = value.match(boolRe);
							 | 
						||
| 
								 | 
							
								  if (boolMatch !== null) return boolMatch[0].toLowerCase() === 'true';
							 | 
						||
| 
								 | 
							
								  var nullMatch = value.match(nullRe);
							 | 
						||
| 
								 | 
							
								  if (nullMatch !== null) return null;
							 | 
						||
| 
								 | 
							
								  var undefinedMatch = value.match(undefinedRe);
							 | 
						||
| 
								 | 
							
								  if (undefinedMatch !== null) return undefined;
							 | 
						||
| 
								 | 
							
								  return value;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var baseTransformShorthandValue = function baseTransformShorthandValue(propName, value) {
							 | 
						||
| 
								 | 
							
								  var ast = parse__default(value);
							 | 
						||
| 
								 | 
							
								  var tokenStream = new TokenStream(ast.nodes);
							 | 
						||
| 
								 | 
							
								  return transforms[propName](tokenStream);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var transformShorthandValue = process.env.NODE_ENV === 'production' ? baseTransformShorthandValue : function (propName, value) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    return baseTransformShorthandValue(propName, value);
							 | 
						||
| 
								 | 
							
								  } catch (e) {
							 | 
						||
| 
								 | 
							
								    throw new Error("Failed to parse declaration \"" + propName + ": " + value + "\"");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var getStylesForProperty = function getStylesForProperty(propName, inputValue, allowShorthand) {
							 | 
						||
| 
								 | 
							
								  var _ref6;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var isRawValue = allowShorthand === false || !(propName in transforms);
							 | 
						||
| 
								 | 
							
								  var value = inputValue.trim();
							 | 
						||
| 
								 | 
							
								  var propValues = isRawValue ? (_ref6 = {}, _ref6[propName] = transformRawValue(propName, value), _ref6) : transformShorthandValue(propName, value);
							 | 
						||
| 
								 | 
							
								  return propValues;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var getPropertyName = function getPropertyName(propName) {
							 | 
						||
| 
								 | 
							
								  var isCustomProp = /^--\w+/.test(propName);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (isCustomProp) {
							 | 
						||
| 
								 | 
							
								    return propName;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return camelizeStyleName(propName);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var index = function index(rules, shorthandBlacklist) {
							 | 
						||
| 
								 | 
							
								  if (shorthandBlacklist === void 0) {
							 | 
						||
| 
								 | 
							
								    shorthandBlacklist = [];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return rules.reduce(function (accum, rule) {
							 | 
						||
| 
								 | 
							
								    var propertyName = getPropertyName(rule[0]);
							 | 
						||
| 
								 | 
							
								    var value = rule[1];
							 | 
						||
| 
								 | 
							
								    var allowShorthand = shorthandBlacklist.indexOf(propertyName) === -1;
							 | 
						||
| 
								 | 
							
								    return Object.assign(accum, getStylesForProperty(propertyName, value, allowShorthand));
							 | 
						||
| 
								 | 
							
								  }, {});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports["default"] = index;
							 | 
						||
| 
								 | 
							
								exports.getPropertyName = getPropertyName;
							 | 
						||
| 
								 | 
							
								exports.getStylesForProperty = getStylesForProperty;
							 | 
						||
| 
								 | 
							
								exports.transformRawValue = transformRawValue;
							 |