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
@@ -0,0 +1,34 @@
1
+ /** CSSStyleSheet-like Tag abstraction for CSS rules */
2
+ export interface Tag {
3
+ insertRule(index: number, rule: string): boolean;
4
+ deleteRule(index: number): void;
5
+ getRule(index: number): string;
6
+ length: number;
7
+ }
8
+ /** Group-aware Tag that sorts rules by indices */
9
+ export interface GroupedTag {
10
+ clearGroup(group: number): void;
11
+ getGroup(group: number): string;
12
+ groupSizes: Uint32Array;
13
+ insertRules(group: number, rules: string | string[]): void;
14
+ length: number;
15
+ tag: Tag;
16
+ }
17
+ export type SheetOptions = {
18
+ isServer: boolean;
19
+ target?: HTMLElement;
20
+ useCSSOMInjection: boolean;
21
+ };
22
+ export interface Sheet {
23
+ allocateGSInstance(id: string): number;
24
+ clearNames(id: string): void;
25
+ clearRules(id: string): void;
26
+ clearTag(): void;
27
+ getTag(): GroupedTag;
28
+ hasNameForId(id: string, name: string): boolean;
29
+ insertRules(id: string, name: string, rules: string | string[]): void;
30
+ options: SheetOptions;
31
+ names: Map<string, Set<string>>;
32
+ registerName(id: string, name: string): void;
33
+ toString(): string;
34
+ }
@@ -14,7 +14,7 @@ var unitless = _interopDefault(require('@emotion/unitless'));
14
14
  var supportsColor = _interopDefault(require('supports-color'));
15
15
  var hoist = _interopDefault(require('hoist-non-react-statics'));
16
16
 
17
- //
17
+ //
18
18
 
19
19
  /* eslint-disable no-bitwise */
20
20
  var AD_REPLACER_R = /(a)(d)/gi;
@@ -42,7 +42,7 @@ function generateAlphabeticName(code) {
42
42
  return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2');
43
43
  }
44
44
 
45
- //
45
+ //
46
46
 
47
47
  /* eslint-disable */
48
48
  var SEED = 5381; // When we have separate strings it's useful to run a progressive
@@ -63,34 +63,34 @@ var hash = function hash(x) {
63
63
  return phash(SEED, x);
64
64
  };
65
65
 
66
- //
66
+ //
67
67
  var generateComponentId = (function (str) {
68
68
  return generateAlphabeticName(hash(str) >>> 0);
69
69
  });
70
70
 
71
- //
71
+ //
72
72
  function getComponentName(target) {
73
73
  return (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) || // $FlowFixMe
74
74
  target.displayName || // $FlowFixMe
75
75
  target.name || 'Component';
76
76
  }
77
77
 
78
- //
78
+ //
79
79
  function isFunction(test) {
80
80
  return typeof test === 'function';
81
81
  }
82
82
 
83
- //
83
+ //
84
84
  function isStatelessFunction(test) {
85
85
  return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);
86
86
  }
87
87
 
88
- //
88
+ //
89
89
  var isPlainObject = (function (x) {
90
90
  return x !== null && typeof x === 'object' && (x.toString ? x.toString() : Object.prototype.toString.call(x)) === '[object Object]' && !reactIs.typeOf(x);
91
91
  });
92
92
 
93
- //
93
+ //
94
94
  function isStyledComponent(target) {
95
95
  return target && typeof target.styledComponentId === 'string';
96
96
  }
@@ -150,16 +150,16 @@ function _objectWithoutPropertiesLoose(source, excluded) {
150
150
  return target;
151
151
  }
152
152
 
153
- //
154
- var SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';
153
+ //
154
+ var SC_ATTR = typeof process !== 'undefined' && typeof process.env !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';
155
155
  var SC_ATTR_ACTIVE = 'active';
156
156
  var SC_ATTR_VERSION = 'data-styled-version';
157
- var SC_VERSION = "5.2.1";
157
+ var SC_VERSION = "5.3.11";
158
158
  var SPLITTER = '/*!sc*/\n';
159
159
  var IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;
160
- 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
160
+ 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
161
161
 
162
- //
162
+ //
163
163
  var EMPTY_ARRAY = Object.freeze([]);
164
164
  var EMPTY_OBJECT = Object.freeze({});
165
165
 
@@ -183,7 +183,7 @@ var errorMap = {
183
183
  "17": "CSSStyleSheet could not be found on HTMLStyleElement.\nHas styled-components' style tag been unmounted or altered by another script?\n"
184
184
  };
185
185
 
186
- //
186
+ //
187
187
  var ERRORS = process.env.NODE_ENV !== 'production' ? errorMap : {};
188
188
  /**
189
189
  * super basic version of sprintf
@@ -220,7 +220,7 @@ function throwStyledComponentsError(code) {
220
220
  }
221
221
  }
222
222
 
223
- //
223
+ //
224
224
  /** Create a GroupedTag with an underlying Tag implementation */
225
225
 
226
226
  var makeGroupedTag = function makeGroupedTag(tag) {
@@ -314,7 +314,7 @@ var DefaultGroupedTag = /*#__PURE__*/function () {
314
314
  return DefaultGroupedTag;
315
315
  }();
316
316
 
317
- //
317
+ //
318
318
  var MAX_SMI = 1 << 31 - 1;
319
319
  var groupIDRegister = new Map();
320
320
  var reverseRegister = new Map();
@@ -342,11 +342,15 @@ var getIdForGroup = function getIdForGroup(group) {
342
342
  return reverseRegister.get(group);
343
343
  };
344
344
  var setGroupForId = function setGroupForId(id, group) {
345
+ if (group >= nextFreeGroup) {
346
+ nextFreeGroup = group + 1;
347
+ }
348
+
345
349
  groupIDRegister.set(id, group);
346
350
  reverseRegister.set(group, id);
347
351
  };
348
352
 
349
- //
353
+ //
350
354
  var SELECTOR = "style[" + SC_ATTR + "][" + SC_ATTR_VERSION + "=\"" + SC_VERSION + "\"]";
351
355
  var MARKER_RE = new RegExp("^" + SC_ATTR + "\\.g(\\d+)\\[id=\"([\\w\\d-]+)\"\\].*?\"([^\"]*)");
352
356
  var outputSheet = function outputSheet(sheet) {
@@ -359,7 +363,7 @@ var outputSheet = function outputSheet(sheet) {
359
363
  if (id === undefined) continue;
360
364
  var names = sheet.names.get(id);
361
365
  var rules = tag.getGroup(group);
362
- if (names === undefined || rules.length === 0) continue;
366
+ if (!names || !rules || !names.size) continue;
363
367
  var selector = SC_ATTR + ".g" + group + "[id=\"" + id + "\"]";
364
368
  var content = '';
365
369
 
@@ -392,7 +396,7 @@ var rehydrateNamesFromContent = function rehydrateNamesFromContent(sheet, id, co
392
396
  };
393
397
 
394
398
  var rehydrateSheetFromTag = function rehydrateSheetFromTag(sheet, style) {
395
- var parts = style.innerHTML.split(SPLITTER);
399
+ var parts = (style.textContent || '').split(SPLITTER);
396
400
  var rules = [];
397
401
 
398
402
  for (var i = 0, l = parts.length; i < l; i++) {
@@ -436,14 +440,14 @@ var rehydrateSheet = function rehydrateSheet(sheet) {
436
440
  }
437
441
  };
438
442
 
439
- //
443
+ //
440
444
 
441
445
  /* eslint-disable camelcase, no-undef */
442
446
  var getNonce = function getNonce() {
443
447
  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;
444
448
  };
445
449
 
446
- //
450
+ //
447
451
  var ELEMENT_TYPE = 1;
448
452
  /* Node.ELEMENT_TYPE */
449
453
 
@@ -501,7 +505,7 @@ var getSheet = function getSheet(tag) {
501
505
  return undefined;
502
506
  };
503
507
 
504
- //
508
+ //
505
509
  /** Create a CSSStyleSheet-like tag depending on the environment */
506
510
 
507
511
  var makeTag = function makeTag(_ref) {
@@ -653,9 +657,10 @@ var StyleSheet = /*#__PURE__*/function () {
653
657
 
654
658
  this.options = _extends({}, defaultOptions, {}, options);
655
659
  this.gs = globalStyles;
656
- this.names = new Map(names); // We rehydrate only once and use the sheet that is created first
660
+ this.names = new Map(names);
661
+ this.server = !!options.isServer; // We rehydrate only once and use the sheet that is created first
657
662
 
658
- if (!this.options.isServer && IS_BROWSER && SHOULD_REHYDRATE) {
663
+ if (!this.server && IS_BROWSER && SHOULD_REHYDRATE) {
659
664
  SHOULD_REHYDRATE = false;
660
665
  rehydrateSheet(this);
661
666
  }
@@ -842,7 +847,7 @@ function createStylisInstance(_temp) {
842
847
 
843
848
  var selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) {
844
849
  if ( // do not replace the first occurrence if it is complex (has a modifier)
845
- (offset === 0 ? !COMPLEX_SELECTOR_PREFIX.includes(string[_selector.length]) : true) && // no consecutive self refs (.b.b); that is a precedence boost and treated differently
850
+ (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
846
851
  !string.match(_consecutiveSelfRefRegExp)) {
847
852
  return "." + _componentId;
848
853
  }
@@ -900,7 +905,7 @@ function createStylisInstance(_temp) {
900
905
  return stringifyRules;
901
906
  }
902
907
 
903
- //
908
+ //
904
909
  var StyleSheetContext = React__default.createContext();
905
910
  var StyleSheetConsumer = StyleSheetContext.Consumer;
906
911
  var StylisContext = React__default.createContext();
@@ -908,7 +913,7 @@ var StylisConsumer = StylisContext.Consumer;
908
913
  var masterSheet = new StyleSheet();
909
914
  var masterStylis = createStylisInstance();
910
915
 
911
- //
916
+ //
912
917
 
913
918
  var Keyframes = /*#__PURE__*/function () {
914
919
  function Keyframes(name, rules) {
@@ -948,7 +953,7 @@ var Keyframes = /*#__PURE__*/function () {
948
953
  return Keyframes;
949
954
  }();
950
955
 
951
- //
956
+ //
952
957
 
953
958
  /**
954
959
  * inlined version of
@@ -983,7 +988,7 @@ function hyphenateStyleName(string) {
983
988
  return uppercaseCheck.test(string) ? string.replace(uppercasePattern, prefixAndLowerCase).replace(msPattern, '-ms-') : string;
984
989
  }
985
990
 
986
- //
991
+ //
987
992
 
988
993
  function addUnitIfNeeded(name, value) {
989
994
  // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133
@@ -992,14 +997,14 @@ function addUnitIfNeeded(name, value) {
992
997
  return '';
993
998
  }
994
999
 
995
- if (typeof value === 'number' && value !== 0 && !(name in unitless)) {
996
- return value + "px"; // Presumes implicit 'px' suffix for unitless numbers
1000
+ if (typeof value === 'number' && value !== 0 && !(name in unitless) && !name.startsWith('--')) {
1001
+ return value + "px"; // Presumes implicit 'px' suffix for unitless numbers except for CSS variables
997
1002
  }
998
1003
 
999
1004
  return String(value).trim();
1000
1005
  }
1001
1006
 
1002
- //
1007
+ //
1003
1008
  /**
1004
1009
  * It's falsish not falsy because 0 is allowed.
1005
1010
  */
@@ -1014,10 +1019,10 @@ var objToCssArray = function objToCssArray(obj, prevKey) {
1014
1019
  for (var key in obj) {
1015
1020
  if (!obj.hasOwnProperty(key) || isFalsish(obj[key])) continue;
1016
1021
 
1017
- if (isPlainObject(obj[key])) {
1018
- rules.push.apply(rules, objToCssArray(obj[key], key));
1019
- } else if (isFunction(obj[key])) {
1022
+ if (Array.isArray(obj[key]) && obj[key].isCss || isFunction(obj[key])) {
1020
1023
  rules.push(hyphenateStyleName(key) + ":", obj[key], ';');
1024
+ } else if (isPlainObject(obj[key])) {
1025
+ rules.push.apply(rules, objToCssArray(obj[key], key));
1021
1026
  } else {
1022
1027
  rules.push(hyphenateStyleName(key) + ": " + addUnitIfNeeded(key, obj[key]) + ";");
1023
1028
  }
@@ -1074,7 +1079,7 @@ function flatten(chunk, executionContext, styleSheet, stylisInstance) {
1074
1079
  return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString();
1075
1080
  }
1076
1081
 
1077
- //
1082
+ //
1078
1083
  var printed = {};
1079
1084
  function warnOnce(message) {
1080
1085
  if (printed[message]) return;
@@ -1082,7 +1087,7 @@ function warnOnce(message) {
1082
1087
  if (typeof console !== 'undefined' && console.warn) console.warn(message);
1083
1088
  }
1084
1089
 
1085
- //
1090
+ //
1086
1091
  var SINGLE_QUOTE = "'".charCodeAt(0);
1087
1092
  var DOUBLE_QUOTE = '"'.charCodeAt(0);
1088
1093
  var BACKSLASH = '\\'.charCodeAt(0);
@@ -1353,7 +1358,7 @@ function tokenize(input, options) {
1353
1358
  return tokens;
1354
1359
  }
1355
1360
 
1356
- //
1361
+ //
1357
1362
  var HIGHLIGHT_THEME = {
1358
1363
  brackets: [36, 39],
1359
1364
  // cyan
@@ -1631,7 +1636,7 @@ var CssSyntaxError = /*#__PURE__*/function () {
1631
1636
  return CssSyntaxError;
1632
1637
  }();
1633
1638
 
1634
- //
1639
+ //
1635
1640
 
1636
1641
  /* eslint-disable valid-jsdoc */
1637
1642
  var defaultRaw = {
@@ -1977,7 +1982,7 @@ var Stringifier = /*#__PURE__*/function () {
1977
1982
  return Stringifier;
1978
1983
  }();
1979
1984
 
1980
- //
1985
+ //
1981
1986
  function stringify(node, builder) {
1982
1987
  var str = new Stringifier(builder);
1983
1988
  str.stringify(node);
@@ -2788,7 +2793,7 @@ var Comment = /*#__PURE__*/function (_Node) {
2788
2793
  return Comment;
2789
2794
  }(Node);
2790
2795
 
2791
- //
2796
+ //
2792
2797
 
2793
2798
  var Parser = /*#__PURE__*/function () {
2794
2799
  function Parser(input) {
@@ -3314,7 +3319,7 @@ var Parser = /*#__PURE__*/function () {
3314
3319
  return Parser;
3315
3320
  }();
3316
3321
 
3317
- //
3322
+ //
3318
3323
  function parse(css, opts) {
3319
3324
  if (opts && opts.safe) {
3320
3325
  throw new Error('Option safe was removed. ' + 'Use parser: require("postcss-safe-parser")');
@@ -4270,7 +4275,7 @@ var AtRule = /*#__PURE__*/function (_Container) {
4270
4275
  return AtRule;
4271
4276
  }(Container);
4272
4277
 
4273
- //
4278
+ //
4274
4279
 
4275
4280
  /**
4276
4281
  * Contains helpers for safely splitting lists of CSS values,
@@ -4463,7 +4468,7 @@ var Rule = /*#__PURE__*/function (_Container) {
4463
4468
  return Rule;
4464
4469
  }(Container);
4465
4470
 
4466
- //
4471
+ //
4467
4472
 
4468
4473
  /**
4469
4474
  * Represents a plugin’s warning. It can be created using {@link Node#warn}.
@@ -5146,7 +5151,7 @@ var LazyResult = /*#__PURE__*/function () {
5146
5151
  return LazyResult;
5147
5152
  }();
5148
5153
 
5149
- //
5154
+ //
5150
5155
  /**
5151
5156
  * @callback builder
5152
5157
  * @param {string} part - part of generated CSS connected to this node
@@ -5737,7 +5742,7 @@ var SafeParser = /*#__PURE__*/function (_Parser) {
5737
5742
  return SafeParser;
5738
5743
  }(Parser);
5739
5744
 
5740
- //
5745
+ //
5741
5746
  function safeParse(css, opts) {
5742
5747
  var input = new Input(css, opts);
5743
5748
  var parser = new SafeParser(input);
@@ -5746,7 +5751,7 @@ function safeParse(css, opts) {
5746
5751
  return parser.root;
5747
5752
  }
5748
5753
 
5749
- //
5754
+ //
5750
5755
  var generated = {};
5751
5756
  /*
5752
5757
  InlineStyle takes arbitrary CSS and generates a flat object
@@ -5861,7 +5866,7 @@ function mixinDeep(target) {
5861
5866
  return target;
5862
5867
  }
5863
5868
 
5864
- //
5869
+ //
5865
5870
  var determineTheme = (function (props, providedTheme, defaultProps) {
5866
5871
  if (defaultProps === void 0) {
5867
5872
  defaultProps = EMPTY_OBJECT;
@@ -5870,12 +5875,12 @@ var determineTheme = (function (props, providedTheme, defaultProps) {
5870
5875
  return props.theme !== defaultProps.theme && props.theme || providedTheme || defaultProps.theme;
5871
5876
  });
5872
5877
 
5873
- //
5878
+ //
5874
5879
  function isTag(target) {
5875
5880
  return typeof target === 'string' && (process.env.NODE_ENV !== 'production' ? target.charAt(0) === target.charAt(0).toLowerCase() : true);
5876
5881
  }
5877
5882
 
5878
- //
5883
+ //
5879
5884
  function generateDisplayName(target) {
5880
5885
  return isTag(target) ? "styled." + target : "Styled(" + getComponentName(target) + ")";
5881
5886
  }
@@ -5958,9 +5963,10 @@ var StyledNativeComponent = /*#__PURE__*/function (_Component) {
5958
5963
  forwardedComponent = _this2$props.forwardedComponent,
5959
5964
  forwardedAs = _this2$props.forwardedAs,
5960
5965
  forwardedRef = _this2$props.forwardedRef,
5966
+ testID = _this2$props.testID,
5961
5967
  _this2$props$style = _this2$props.style,
5962
5968
  style = _this2$props$style === void 0 ? [] : _this2$props$style,
5963
- props = _objectWithoutPropertiesLoose(_this2$props, ["$as", "as", "forwardedComponent", "forwardedAs", "forwardedRef", "style"]);
5969
+ props = _objectWithoutPropertiesLoose(_this2$props, ["$as", "as", "forwardedComponent", "forwardedAs", "forwardedRef", "testID", "style"]);
5964
5970
 
5965
5971
  var defaultProps = forwardedComponent.defaultProps,
5966
5972
  target = forwardedComponent.target,
@@ -5984,7 +5990,10 @@ var StyledNativeComponent = /*#__PURE__*/function (_Component) {
5984
5990
  }
5985
5991
  }
5986
5992
 
5987
- propsForElement.style = [generatedStyles].concat(style);
5993
+ propsForElement.style = typeof style === 'function' ? function (state) {
5994
+ return [generatedStyles].concat(style(state));
5995
+ } : [generatedStyles].concat(style);
5996
+ propsForElement.testID = testID || propsForElement.testID;
5988
5997
  if (forwardedRef) propsForElement.ref = forwardedRef;
5989
5998
  if (forwardedAs) propsForElement.as = forwardedAs;
5990
5999
  return React.createElement(elementToBeRendered, propsForElement);
@@ -6066,9 +6075,9 @@ var _StyledNativeComponent = (function (InlineStyle) {
6066
6075
  if (isTargetStyledComp && target.shouldForwardProp) {
6067
6076
  if (shouldForwardProp) {
6068
6077
  // compose nested shouldForwardProp calls
6069
- shouldForwardProp = function shouldForwardProp(prop, filterFn) {
6078
+ shouldForwardProp = function shouldForwardProp(prop, filterFn, elementToBeCreated) {
6070
6079
  return (// $FlowFixMe
6071
- target.shouldForwardProp(prop, filterFn) && options.shouldForwardProp(prop, filterFn)
6080
+ target.shouldForwardProp(prop, filterFn, elementToBeCreated) && options.shouldForwardProp(prop, filterFn, elementToBeCreated)
6072
6081
  );
6073
6082
  };
6074
6083
  } else {
@@ -6139,7 +6148,7 @@ var _StyledNativeComponent = (function (InlineStyle) {
6139
6148
  return createStyledNativeComponent;
6140
6149
  });
6141
6150
 
6142
- //
6151
+ //
6143
6152
  var interleave = (function (strings, interpolations) {
6144
6153
  var result = [strings[0]];
6145
6154
 
@@ -6150,7 +6159,21 @@ var interleave = (function (strings, interpolations) {
6150
6159
  return result;
6151
6160
  });
6152
6161
 
6153
- //
6162
+ //
6163
+ /**
6164
+ * Used when flattening object styles to determine if we should
6165
+ * expand an array of styles.
6166
+ */
6167
+
6168
+ var addTag = function addTag(arg) {
6169
+ if (Array.isArray(arg)) {
6170
+ // eslint-disable-next-line no-param-reassign
6171
+ arg.isCss = true;
6172
+ }
6173
+
6174
+ return arg;
6175
+ };
6176
+
6154
6177
  function css(styles) {
6155
6178
  for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
6156
6179
  interpolations[_key - 1] = arguments[_key];
@@ -6158,16 +6181,16 @@ function css(styles) {
6158
6181
 
6159
6182
  if (isFunction(styles) || isPlainObject(styles)) {
6160
6183
  // $FlowFixMe
6161
- return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));
6184
+ return addTag(flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations))));
6162
6185
  }
6163
6186
 
6164
- if (interpolations.length === 0 && styles.length === 1 && typeof styles[0] === "string") {
6187
+ if (interpolations.length === 0 && styles.length === 1 && typeof styles[0] === 'string') {
6165
6188
  // $FlowFixMe
6166
6189
  return styles;
6167
6190
  } // $FlowFixMe
6168
6191
 
6169
6192
 
6170
- return flatten(interleave(styles, interpolations));
6193
+ return addTag(flatten(interleave(styles, interpolations)));
6171
6194
  }
6172
6195
 
6173
6196
  function constructWithOptions(componentConstructor, tag, options) {
@@ -6232,13 +6255,13 @@ var withTheme = (function (Component) {
6232
6255
  return WithTheme;
6233
6256
  });
6234
6257
 
6235
- //
6258
+ //
6236
6259
 
6237
6260
  var useTheme = function useTheme() {
6238
6261
  return React.useContext(ThemeContext);
6239
6262
  };
6240
6263
 
6241
- //
6264
+ //
6242
6265
 
6243
6266
  var reactNative = require('react-native');
6244
6267