styled-components 5.2.1 → 5.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +187 -0
  2. package/dist/styled-components-macro.cjs.js +1 -1
  3. package/dist/styled-components-macro.cjs.js.map +1 -1
  4. package/dist/styled-components-macro.esm.js +1 -1
  5. package/dist/styled-components-macro.esm.js.map +1 -1
  6. package/dist/styled-components.browser.cjs.js +1 -1
  7. package/dist/styled-components.browser.cjs.js.map +1 -1
  8. package/dist/styled-components.browser.esm.js +1 -1
  9. package/dist/styled-components.browser.esm.js.map +1 -1
  10. package/dist/styled-components.cjs.js +1 -1
  11. package/dist/styled-components.cjs.js.map +1 -1
  12. package/dist/styled-components.esm.js +1 -1
  13. package/dist/styled-components.esm.js.map +1 -1
  14. package/dist/styled-components.js +1 -1
  15. package/dist/styled-components.js.map +1 -1
  16. package/dist/styled-components.min.js +1 -1
  17. package/dist/styled-components.min.js.map +1 -1
  18. package/native/dist/base.d.ts +12 -0
  19. package/native/dist/constants.d.ts +8 -0
  20. package/native/dist/constructors/constructWithOptions.d.ts +40 -0
  21. package/native/dist/constructors/createGlobalStyle.d.ts +3 -0
  22. package/native/dist/constructors/css.d.ts +4 -0
  23. package/native/dist/constructors/keyframes.d.ts +3 -0
  24. package/native/dist/constructors/styled.d.ts +181 -0
  25. package/native/dist/hoc/withTheme.d.ts +3 -0
  26. package/native/dist/hoc/withTheme.spec.d.ts +1 -0
  27. package/native/dist/index-standalone.d.ts +2 -0
  28. package/native/dist/index.d.ts +4 -0
  29. package/native/dist/macro/index.d.ts +2 -0
  30. package/native/dist/models/ComponentStyle.d.ts +15 -0
  31. package/native/dist/models/GlobalStyle.d.ts +11 -0
  32. package/native/dist/models/InlineStyle.d.ts +6 -0
  33. package/native/dist/models/Keyframes.d.ts +11 -0
  34. package/native/dist/models/ServerStyleSheet.d.ts +15 -0
  35. package/native/dist/models/StyleSheetManager.d.ts +64 -0
  36. package/native/dist/models/StyledComponent.d.ts +3 -0
  37. package/native/dist/models/StyledNativeComponent.d.ts +3 -0
  38. package/native/dist/models/ThemeProvider.d.ts +40 -0
  39. package/native/dist/native/index.d.ts +36 -0
  40. package/native/dist/secretInternals.d.ts +5 -0
  41. package/native/dist/sheet/GroupIDAllocator.d.ts +4 -0
  42. package/native/dist/sheet/GroupedTag.d.ts +11 -0
  43. package/native/dist/sheet/Rehydration.d.ts +3 -0
  44. package/native/dist/sheet/Sheet.d.ts +40 -0
  45. package/native/dist/sheet/Tag.d.ts +54 -0
  46. package/native/dist/sheet/dom.d.ts +4 -0
  47. package/native/dist/sheet/index.d.ts +1 -0
  48. package/native/dist/sheet/types.d.ts +34 -0
  49. package/native/dist/styled-components.native.cjs.js +84 -61
  50. package/native/dist/styled-components.native.cjs.js.map +1 -1
  51. package/native/dist/styled-components.native.esm.js +84 -61
  52. package/native/dist/styled-components.native.esm.js.map +1 -1
  53. package/native/dist/test/globals.d.ts +2 -0
  54. package/native/dist/test/types.d.ts +9 -0
  55. package/native/dist/test/utils.d.ts +187 -0
  56. package/native/dist/test/veryLargeUnionType.d.ts +1 -0
  57. package/native/dist/types.d.ts +153 -0
  58. package/native/dist/utils/addUnitIfNeeded.d.ts +1 -0
  59. package/native/dist/utils/checkDynamicCreation.d.ts +1 -0
  60. package/native/dist/utils/createWarnTooManyClasses.d.ts +3 -0
  61. package/native/dist/utils/determineTheme.d.ts +4 -0
  62. package/native/dist/utils/domElements.d.ts +2 -0
  63. package/native/dist/utils/empties.d.ts +3 -0
  64. package/native/dist/utils/error.d.ts +5 -0
  65. package/native/dist/utils/errors.d.ts +20 -0
  66. package/native/dist/utils/escape.d.ts +5 -0
  67. package/native/dist/utils/flatten.d.ts +4 -0
  68. package/native/dist/utils/generateAlphabeticName.d.ts +1 -0
  69. package/native/dist/utils/generateComponentId.d.ts +1 -0
  70. package/native/dist/utils/generateDisplayName.d.ts +2 -0
  71. package/native/dist/utils/getComponentName.d.ts +2 -0
  72. package/native/dist/utils/hash.d.ts +3 -0
  73. package/native/dist/utils/hoist.d.ts +51 -0
  74. package/native/dist/utils/hyphenateStyleName.d.ts +14 -0
  75. package/native/dist/utils/interleave.d.ts +2 -0
  76. package/native/dist/utils/isFunction.d.ts +1 -0
  77. package/native/dist/utils/isPlainObject.d.ts +1 -0
  78. package/native/dist/utils/isStatelessFunction.d.ts +1 -0
  79. package/native/dist/utils/isStaticRules.d.ts +2 -0
  80. package/native/dist/utils/isStyledComponent.d.ts +2 -0
  81. package/native/dist/utils/isTag.d.ts +2 -0
  82. package/native/dist/utils/joinStrings.d.ts +5 -0
  83. package/native/dist/utils/mixinDeep.d.ts +6 -0
  84. package/native/dist/utils/nonce.d.ts +1 -0
  85. package/native/dist/utils/stylis.d.ts +10 -0
  86. package/package.json +4 -4
  87. package/primitives/dist/styled-components-primitives.cjs.js +84 -61
  88. package/primitives/dist/styled-components-primitives.cjs.js.map +1 -1
  89. package/primitives/dist/styled-components-primitives.esm.js +84 -61
  90. package/primitives/dist/styled-components-primitives.esm.js.map +1 -1
@@ -7,7 +7,7 @@ import unitless from '@emotion/unitless';
7
7
  import supportsColor from 'supports-color';
8
8
  import hoist from 'hoist-non-react-statics';
9
9
 
10
- //
10
+ //
11
11
 
12
12
  /* eslint-disable no-bitwise */
13
13
  var AD_REPLACER_R = /(a)(d)/gi;
@@ -35,7 +35,7 @@ function generateAlphabeticName(code) {
35
35
  return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2');
36
36
  }
37
37
 
38
- //
38
+ //
39
39
 
40
40
  /* eslint-disable */
41
41
  var SEED = 5381; // When we have separate strings it's useful to run a progressive
@@ -56,34 +56,34 @@ var hash = function hash(x) {
56
56
  return phash(SEED, x);
57
57
  };
58
58
 
59
- //
59
+ //
60
60
  var generateComponentId = (function (str) {
61
61
  return generateAlphabeticName(hash(str) >>> 0);
62
62
  });
63
63
 
64
- //
64
+ //
65
65
  function getComponentName(target) {
66
66
  return (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) || // $FlowFixMe
67
67
  target.displayName || // $FlowFixMe
68
68
  target.name || 'Component';
69
69
  }
70
70
 
71
- //
71
+ //
72
72
  function isFunction(test) {
73
73
  return typeof test === 'function';
74
74
  }
75
75
 
76
- //
76
+ //
77
77
  function isStatelessFunction(test) {
78
78
  return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);
79
79
  }
80
80
 
81
- //
81
+ //
82
82
  var isPlainObject = (function (x) {
83
83
  return x !== null && typeof x === 'object' && (x.toString ? x.toString() : Object.prototype.toString.call(x)) === '[object Object]' && !typeOf(x);
84
84
  });
85
85
 
86
- //
86
+ //
87
87
  function isStyledComponent(target) {
88
88
  return target && typeof target.styledComponentId === 'string';
89
89
  }
@@ -143,16 +143,16 @@ function _objectWithoutPropertiesLoose(source, excluded) {
143
143
  return target;
144
144
  }
145
145
 
146
- //
147
- var SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';
146
+ //
147
+ var SC_ATTR = typeof process !== 'undefined' && typeof process.env !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';
148
148
  var SC_ATTR_ACTIVE = 'active';
149
149
  var SC_ATTR_VERSION = 'data-styled-version';
150
- var SC_VERSION = "5.2.1";
150
+ var SC_VERSION = "5.3.11";
151
151
  var SPLITTER = '/*!sc*/\n';
152
152
  var IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;
153
- var DISABLE_SPEEDY = Boolean(typeof SC_DISABLE_SPEEDY === 'boolean' ? SC_DISABLE_SPEEDY : typeof process !== 'undefined' && typeof process.env.REACT_APP_SC_DISABLE_SPEEDY !== 'undefined' && process.env.REACT_APP_SC_DISABLE_SPEEDY !== '' ? process.env.REACT_APP_SC_DISABLE_SPEEDY === 'false' ? false : process.env.REACT_APP_SC_DISABLE_SPEEDY : typeof process !== 'undefined' && typeof process.env.SC_DISABLE_SPEEDY !== 'undefined' && process.env.SC_DISABLE_SPEEDY !== '' ? process.env.SC_DISABLE_SPEEDY === 'false' ? false : process.env.SC_DISABLE_SPEEDY : process.env.NODE_ENV !== 'production'); // Shared empty execution context when generating static styles
153
+ var DISABLE_SPEEDY = Boolean(typeof SC_DISABLE_SPEEDY === 'boolean' ? SC_DISABLE_SPEEDY : typeof process !== 'undefined' && typeof process.env !== 'undefined' ? typeof process.env.REACT_APP_SC_DISABLE_SPEEDY !== 'undefined' && process.env.REACT_APP_SC_DISABLE_SPEEDY !== '' ? process.env.REACT_APP_SC_DISABLE_SPEEDY === 'false' ? false : process.env.REACT_APP_SC_DISABLE_SPEEDY : typeof process.env.SC_DISABLE_SPEEDY !== 'undefined' && process.env.SC_DISABLE_SPEEDY !== '' ? process.env.SC_DISABLE_SPEEDY === 'false' ? false : process.env.SC_DISABLE_SPEEDY : process.env.NODE_ENV !== 'production' : false); // Shared empty execution context when generating static styles
154
154
 
155
- //
155
+ //
156
156
  var EMPTY_ARRAY = Object.freeze([]);
157
157
  var EMPTY_OBJECT = Object.freeze({});
158
158
 
@@ -176,7 +176,7 @@ var errorMap = {
176
176
  "17": "CSSStyleSheet could not be found on HTMLStyleElement.\nHas styled-components' style tag been unmounted or altered by another script?\n"
177
177
  };
178
178
 
179
- //
179
+ //
180
180
  var ERRORS = process.env.NODE_ENV !== 'production' ? errorMap : {};
181
181
  /**
182
182
  * super basic version of sprintf
@@ -213,7 +213,7 @@ function throwStyledComponentsError(code) {
213
213
  }
214
214
  }
215
215
 
216
- //
216
+ //
217
217
  /** Create a GroupedTag with an underlying Tag implementation */
218
218
 
219
219
  var makeGroupedTag = function makeGroupedTag(tag) {
@@ -307,7 +307,7 @@ var DefaultGroupedTag = /*#__PURE__*/function () {
307
307
  return DefaultGroupedTag;
308
308
  }();
309
309
 
310
- //
310
+ //
311
311
  var MAX_SMI = 1 << 31 - 1;
312
312
  var groupIDRegister = new Map();
313
313
  var reverseRegister = new Map();
@@ -335,11 +335,15 @@ var getIdForGroup = function getIdForGroup(group) {
335
335
  return reverseRegister.get(group);
336
336
  };
337
337
  var setGroupForId = function setGroupForId(id, group) {
338
+ if (group >= nextFreeGroup) {
339
+ nextFreeGroup = group + 1;
340
+ }
341
+
338
342
  groupIDRegister.set(id, group);
339
343
  reverseRegister.set(group, id);
340
344
  };
341
345
 
342
- //
346
+ //
343
347
  var SELECTOR = "style[" + SC_ATTR + "][" + SC_ATTR_VERSION + "=\"" + SC_VERSION + "\"]";
344
348
  var MARKER_RE = new RegExp("^" + SC_ATTR + "\\.g(\\d+)\\[id=\"([\\w\\d-]+)\"\\].*?\"([^\"]*)");
345
349
  var outputSheet = function outputSheet(sheet) {
@@ -352,7 +356,7 @@ var outputSheet = function outputSheet(sheet) {
352
356
  if (id === undefined) continue;
353
357
  var names = sheet.names.get(id);
354
358
  var rules = tag.getGroup(group);
355
- if (names === undefined || rules.length === 0) continue;
359
+ if (!names || !rules || !names.size) continue;
356
360
  var selector = SC_ATTR + ".g" + group + "[id=\"" + id + "\"]";
357
361
  var content = '';
358
362
 
@@ -385,7 +389,7 @@ var rehydrateNamesFromContent = function rehydrateNamesFromContent(sheet, id, co
385
389
  };
386
390
 
387
391
  var rehydrateSheetFromTag = function rehydrateSheetFromTag(sheet, style) {
388
- var parts = style.innerHTML.split(SPLITTER);
392
+ var parts = (style.textContent || '').split(SPLITTER);
389
393
  var rules = [];
390
394
 
391
395
  for (var i = 0, l = parts.length; i < l; i++) {
@@ -429,14 +433,14 @@ var rehydrateSheet = function rehydrateSheet(sheet) {
429
433
  }
430
434
  };
431
435
 
432
- //
436
+ //
433
437
 
434
438
  /* eslint-disable camelcase, no-undef */
435
439
  var getNonce = function getNonce() {
436
440
  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;
437
441
  };
438
442
 
439
- //
443
+ //
440
444
  var ELEMENT_TYPE = 1;
441
445
  /* Node.ELEMENT_TYPE */
442
446
 
@@ -494,7 +498,7 @@ var getSheet = function getSheet(tag) {
494
498
  return undefined;
495
499
  };
496
500
 
497
- //
501
+ //
498
502
  /** Create a CSSStyleSheet-like tag depending on the environment */
499
503
 
500
504
  var makeTag = function makeTag(_ref) {
@@ -646,9 +650,10 @@ var StyleSheet = /*#__PURE__*/function () {
646
650
 
647
651
  this.options = _extends({}, defaultOptions, {}, options);
648
652
  this.gs = globalStyles;
649
- this.names = new Map(names); // We rehydrate only once and use the sheet that is created first
653
+ this.names = new Map(names);
654
+ this.server = !!options.isServer; // We rehydrate only once and use the sheet that is created first
650
655
 
651
- if (!this.options.isServer && IS_BROWSER && SHOULD_REHYDRATE) {
656
+ if (!this.server && IS_BROWSER && SHOULD_REHYDRATE) {
652
657
  SHOULD_REHYDRATE = false;
653
658
  rehydrateSheet(this);
654
659
  }
@@ -835,7 +840,7 @@ function createStylisInstance(_temp) {
835
840
 
836
841
  var selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) {
837
842
  if ( // do not replace the first occurrence if it is complex (has a modifier)
838
- (offset === 0 ? !COMPLEX_SELECTOR_PREFIX.includes(string[_selector.length]) : true) && // no consecutive self refs (.b.b); that is a precedence boost and treated differently
843
+ (offset === 0 ? COMPLEX_SELECTOR_PREFIX.indexOf(string[_selector.length]) === -1 : true) && // no consecutive self refs (.b.b); that is a precedence boost and treated differently
839
844
  !string.match(_consecutiveSelfRefRegExp)) {
840
845
  return "." + _componentId;
841
846
  }
@@ -893,7 +898,7 @@ function createStylisInstance(_temp) {
893
898
  return stringifyRules;
894
899
  }
895
900
 
896
- //
901
+ //
897
902
  var StyleSheetContext = React.createContext();
898
903
  var StyleSheetConsumer = StyleSheetContext.Consumer;
899
904
  var StylisContext = React.createContext();
@@ -901,7 +906,7 @@ var StylisConsumer = StylisContext.Consumer;
901
906
  var masterSheet = new StyleSheet();
902
907
  var masterStylis = createStylisInstance();
903
908
 
904
- //
909
+ //
905
910
 
906
911
  var Keyframes = /*#__PURE__*/function () {
907
912
  function Keyframes(name, rules) {
@@ -941,7 +946,7 @@ var Keyframes = /*#__PURE__*/function () {
941
946
  return Keyframes;
942
947
  }();
943
948
 
944
- //
949
+ //
945
950
 
946
951
  /**
947
952
  * inlined version of
@@ -976,7 +981,7 @@ function hyphenateStyleName(string) {
976
981
  return uppercaseCheck.test(string) ? string.replace(uppercasePattern, prefixAndLowerCase).replace(msPattern, '-ms-') : string;
977
982
  }
978
983
 
979
- //
984
+ //
980
985
 
981
986
  function addUnitIfNeeded(name, value) {
982
987
  // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133
@@ -985,14 +990,14 @@ function addUnitIfNeeded(name, value) {
985
990
  return '';
986
991
  }
987
992
 
988
- if (typeof value === 'number' && value !== 0 && !(name in unitless)) {
989
- return value + "px"; // Presumes implicit 'px' suffix for unitless numbers
993
+ if (typeof value === 'number' && value !== 0 && !(name in unitless) && !name.startsWith('--')) {
994
+ return value + "px"; // Presumes implicit 'px' suffix for unitless numbers except for CSS variables
990
995
  }
991
996
 
992
997
  return String(value).trim();
993
998
  }
994
999
 
995
- //
1000
+ //
996
1001
  /**
997
1002
  * It's falsish not falsy because 0 is allowed.
998
1003
  */
@@ -1007,10 +1012,10 @@ var objToCssArray = function objToCssArray(obj, prevKey) {
1007
1012
  for (var key in obj) {
1008
1013
  if (!obj.hasOwnProperty(key) || isFalsish(obj[key])) continue;
1009
1014
 
1010
- if (isPlainObject(obj[key])) {
1011
- rules.push.apply(rules, objToCssArray(obj[key], key));
1012
- } else if (isFunction(obj[key])) {
1015
+ if (Array.isArray(obj[key]) && obj[key].isCss || isFunction(obj[key])) {
1013
1016
  rules.push(hyphenateStyleName(key) + ":", obj[key], ';');
1017
+ } else if (isPlainObject(obj[key])) {
1018
+ rules.push.apply(rules, objToCssArray(obj[key], key));
1014
1019
  } else {
1015
1020
  rules.push(hyphenateStyleName(key) + ": " + addUnitIfNeeded(key, obj[key]) + ";");
1016
1021
  }
@@ -1067,7 +1072,7 @@ function flatten(chunk, executionContext, styleSheet, stylisInstance) {
1067
1072
  return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString();
1068
1073
  }
1069
1074
 
1070
- //
1075
+ //
1071
1076
  var printed = {};
1072
1077
  function warnOnce(message) {
1073
1078
  if (printed[message]) return;
@@ -1075,7 +1080,7 @@ function warnOnce(message) {
1075
1080
  if (typeof console !== 'undefined' && console.warn) console.warn(message);
1076
1081
  }
1077
1082
 
1078
- //
1083
+ //
1079
1084
  var SINGLE_QUOTE = "'".charCodeAt(0);
1080
1085
  var DOUBLE_QUOTE = '"'.charCodeAt(0);
1081
1086
  var BACKSLASH = '\\'.charCodeAt(0);
@@ -1346,7 +1351,7 @@ function tokenize(input, options) {
1346
1351
  return tokens;
1347
1352
  }
1348
1353
 
1349
- //
1354
+ //
1350
1355
  var HIGHLIGHT_THEME = {
1351
1356
  brackets: [36, 39],
1352
1357
  // cyan
@@ -1624,7 +1629,7 @@ var CssSyntaxError = /*#__PURE__*/function () {
1624
1629
  return CssSyntaxError;
1625
1630
  }();
1626
1631
 
1627
- //
1632
+ //
1628
1633
 
1629
1634
  /* eslint-disable valid-jsdoc */
1630
1635
  var defaultRaw = {
@@ -1970,7 +1975,7 @@ var Stringifier = /*#__PURE__*/function () {
1970
1975
  return Stringifier;
1971
1976
  }();
1972
1977
 
1973
- //
1978
+ //
1974
1979
  function stringify(node, builder) {
1975
1980
  var str = new Stringifier(builder);
1976
1981
  str.stringify(node);
@@ -2781,7 +2786,7 @@ var Comment = /*#__PURE__*/function (_Node) {
2781
2786
  return Comment;
2782
2787
  }(Node);
2783
2788
 
2784
- //
2789
+ //
2785
2790
 
2786
2791
  var Parser = /*#__PURE__*/function () {
2787
2792
  function Parser(input) {
@@ -3307,7 +3312,7 @@ var Parser = /*#__PURE__*/function () {
3307
3312
  return Parser;
3308
3313
  }();
3309
3314
 
3310
- //
3315
+ //
3311
3316
  function parse(css, opts) {
3312
3317
  if (opts && opts.safe) {
3313
3318
  throw new Error('Option safe was removed. ' + 'Use parser: require("postcss-safe-parser")');
@@ -4263,7 +4268,7 @@ var AtRule = /*#__PURE__*/function (_Container) {
4263
4268
  return AtRule;
4264
4269
  }(Container);
4265
4270
 
4266
- //
4271
+ //
4267
4272
 
4268
4273
  /**
4269
4274
  * Contains helpers for safely splitting lists of CSS values,
@@ -4456,7 +4461,7 @@ var Rule = /*#__PURE__*/function (_Container) {
4456
4461
  return Rule;
4457
4462
  }(Container);
4458
4463
 
4459
- //
4464
+ //
4460
4465
 
4461
4466
  /**
4462
4467
  * Represents a plugin’s warning. It can be created using {@link Node#warn}.
@@ -5139,7 +5144,7 @@ var LazyResult = /*#__PURE__*/function () {
5139
5144
  return LazyResult;
5140
5145
  }();
5141
5146
 
5142
- //
5147
+ //
5143
5148
  /**
5144
5149
  * @callback builder
5145
5150
  * @param {string} part - part of generated CSS connected to this node
@@ -5730,7 +5735,7 @@ var SafeParser = /*#__PURE__*/function (_Parser) {
5730
5735
  return SafeParser;
5731
5736
  }(Parser);
5732
5737
 
5733
- //
5738
+ //
5734
5739
  function safeParse(css, opts) {
5735
5740
  var input = new Input(css, opts);
5736
5741
  var parser = new SafeParser(input);
@@ -5739,7 +5744,7 @@ function safeParse(css, opts) {
5739
5744
  return parser.root;
5740
5745
  }
5741
5746
 
5742
- //
5747
+ //
5743
5748
  var generated = {};
5744
5749
  /*
5745
5750
  InlineStyle takes arbitrary CSS and generates a flat object
@@ -5854,7 +5859,7 @@ function mixinDeep(target) {
5854
5859
  return target;
5855
5860
  }
5856
5861
 
5857
- //
5862
+ //
5858
5863
  var determineTheme = (function (props, providedTheme, defaultProps) {
5859
5864
  if (defaultProps === void 0) {
5860
5865
  defaultProps = EMPTY_OBJECT;
@@ -5863,12 +5868,12 @@ var determineTheme = (function (props, providedTheme, defaultProps) {
5863
5868
  return props.theme !== defaultProps.theme && props.theme || providedTheme || defaultProps.theme;
5864
5869
  });
5865
5870
 
5866
- //
5871
+ //
5867
5872
  function isTag(target) {
5868
5873
  return typeof target === 'string' && (process.env.NODE_ENV !== 'production' ? target.charAt(0) === target.charAt(0).toLowerCase() : true);
5869
5874
  }
5870
5875
 
5871
- //
5876
+ //
5872
5877
  function generateDisplayName(target) {
5873
5878
  return isTag(target) ? "styled." + target : "Styled(" + getComponentName(target) + ")";
5874
5879
  }
@@ -5951,9 +5956,10 @@ var StyledNativeComponent = /*#__PURE__*/function (_Component) {
5951
5956
  forwardedComponent = _this2$props.forwardedComponent,
5952
5957
  forwardedAs = _this2$props.forwardedAs,
5953
5958
  forwardedRef = _this2$props.forwardedRef,
5959
+ testID = _this2$props.testID,
5954
5960
  _this2$props$style = _this2$props.style,
5955
5961
  style = _this2$props$style === void 0 ? [] : _this2$props$style,
5956
- props = _objectWithoutPropertiesLoose(_this2$props, ["$as", "as", "forwardedComponent", "forwardedAs", "forwardedRef", "style"]);
5962
+ props = _objectWithoutPropertiesLoose(_this2$props, ["$as", "as", "forwardedComponent", "forwardedAs", "forwardedRef", "testID", "style"]);
5957
5963
 
5958
5964
  var defaultProps = forwardedComponent.defaultProps,
5959
5965
  target = forwardedComponent.target,
@@ -5977,7 +5983,10 @@ var StyledNativeComponent = /*#__PURE__*/function (_Component) {
5977
5983
  }
5978
5984
  }
5979
5985
 
5980
- propsForElement.style = [generatedStyles].concat(style);
5986
+ propsForElement.style = typeof style === 'function' ? function (state) {
5987
+ return [generatedStyles].concat(style(state));
5988
+ } : [generatedStyles].concat(style);
5989
+ propsForElement.testID = testID || propsForElement.testID;
5981
5990
  if (forwardedRef) propsForElement.ref = forwardedRef;
5982
5991
  if (forwardedAs) propsForElement.as = forwardedAs;
5983
5992
  return createElement(elementToBeRendered, propsForElement);
@@ -6059,9 +6068,9 @@ var _StyledNativeComponent = (function (InlineStyle) {
6059
6068
  if (isTargetStyledComp && target.shouldForwardProp) {
6060
6069
  if (shouldForwardProp) {
6061
6070
  // compose nested shouldForwardProp calls
6062
- shouldForwardProp = function shouldForwardProp(prop, filterFn) {
6071
+ shouldForwardProp = function shouldForwardProp(prop, filterFn, elementToBeCreated) {
6063
6072
  return (// $FlowFixMe
6064
- target.shouldForwardProp(prop, filterFn) && options.shouldForwardProp(prop, filterFn)
6073
+ target.shouldForwardProp(prop, filterFn, elementToBeCreated) && options.shouldForwardProp(prop, filterFn, elementToBeCreated)
6065
6074
  );
6066
6075
  };
6067
6076
  } else {
@@ -6132,7 +6141,7 @@ var _StyledNativeComponent = (function (InlineStyle) {
6132
6141
  return createStyledNativeComponent;
6133
6142
  });
6134
6143
 
6135
- //
6144
+ //
6136
6145
  var interleave = (function (strings, interpolations) {
6137
6146
  var result = [strings[0]];
6138
6147
 
@@ -6143,7 +6152,21 @@ var interleave = (function (strings, interpolations) {
6143
6152
  return result;
6144
6153
  });
6145
6154
 
6146
- //
6155
+ //
6156
+ /**
6157
+ * Used when flattening object styles to determine if we should
6158
+ * expand an array of styles.
6159
+ */
6160
+
6161
+ var addTag = function addTag(arg) {
6162
+ if (Array.isArray(arg)) {
6163
+ // eslint-disable-next-line no-param-reassign
6164
+ arg.isCss = true;
6165
+ }
6166
+
6167
+ return arg;
6168
+ };
6169
+
6147
6170
  function css(styles) {
6148
6171
  for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
6149
6172
  interpolations[_key - 1] = arguments[_key];
@@ -6151,16 +6174,16 @@ function css(styles) {
6151
6174
 
6152
6175
  if (isFunction(styles) || isPlainObject(styles)) {
6153
6176
  // $FlowFixMe
6154
- return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));
6177
+ return addTag(flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations))));
6155
6178
  }
6156
6179
 
6157
- if (interpolations.length === 0 && styles.length === 1 && typeof styles[0] === "string") {
6180
+ if (interpolations.length === 0 && styles.length === 1 && typeof styles[0] === 'string') {
6158
6181
  // $FlowFixMe
6159
6182
  return styles;
6160
6183
  } // $FlowFixMe
6161
6184
 
6162
6185
 
6163
- return flatten(interleave(styles, interpolations));
6186
+ return addTag(flatten(interleave(styles, interpolations)));
6164
6187
  }
6165
6188
 
6166
6189
  function constructWithOptions(componentConstructor, tag, options) {
@@ -6225,13 +6248,13 @@ var withTheme = (function (Component) {
6225
6248
  return WithTheme;
6226
6249
  });
6227
6250
 
6228
- //
6251
+ //
6229
6252
 
6230
6253
  var useTheme = function useTheme() {
6231
6254
  return useContext(ThemeContext);
6232
6255
  };
6233
6256
 
6234
- //
6257
+ //
6235
6258
 
6236
6259
  var reactNative = require('react-native');
6237
6260