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