All Versions
114
Latest Version
Avg Release Cycle
34 days
Latest Release
15 days ago

Changelog History
Page 1

  • v5.2.0

    September 04, 2020

    ๐Ÿ’… Make sure StyleSheetManager renders all styles in iframe / child windows (see #3159) thanks @eramdam!

    ๐Ÿ’… Rework how components self-reference in extension scenarios (see #3236); should fix a bunch of subtle bugs around patterns like & + &

    ๐Ÿ›  Fix keyframes not receiving a modified stylis instance when using something like stylis-plugin-rtl (see #3239)

    ๐ŸŽ Big performance gain for components using style objects (see #3239)

    We no longer emit dynamic classNames for empty rulesets, so some className churn may occur in snapshots

    โš™ Preallocate global style placement to ensure cGS is consistently inserted at the top of the stylesheet; note that this is done in runtime order so, if you have multiple cGS that have overlapping styles, ensure they're defined in code in the sequence you would want them injected (see #3239)

    โž• Add "engines" to package.json (currently set to Node 10, the oldest supported LTS distribution) (see #3201) thanks @MichaelDeBoey!

    ๐Ÿš€ Finally, special thanks to @willheslam for testing and some last minute fixes on this release!

  • v5.2.0-test.10

    August 31, 2020

    We are planning to release 5.2 on September 2/3, please help us test!

    yarn add styled-components@5.2.0-test.10
    

    โš™ Preallocate global style placement to ensure cGS is consistently inserted at the top of the stylesheet; note that this is done in runtime order so, if you have multiple cGS that have overlapping styles, ensure they're defined in code in the sequence you would want them injected (see #3239)

    ๐Ÿ’… NOTE: This is a behavioral change and might require adjustment in your codebase if you have many createGlobalStyle components in use. We do not think it will affect the majority of projects other than fix existing bugs.

    ๐Ÿ’… createGlobalStyle is now React.StrictMode compliant

    ๐Ÿ’… Make sure StyleSheetManager renders all styles in iframe / child windows (see #3159) thanks @eramdam!

    ๐Ÿ’… Rework how components self-reference in extension scenarios (see #3236); should fix a bunch of subtle bugs around patterns like & + &

    ๐Ÿ›  Fix keyframes not receiving a modified stylis instance when using something like stylis-plugin-rtl (see #3239)

    ๐ŸŽ Big performance gain for components using style objects (see #3239)

    We no longer emit dynamic classNames for empty rulesets, so some className churn may occur in snapshots

    โž• Add "engines" to package.json (currently set to Node 10, the oldest supported LTS distribution) (see #3201) thanks @MichaelDeBoey!

  • v5.1.1

    April 07, 2020

    ๐Ÿ†• New Functionality

    • ๐Ÿ’… Implement shouldForwardProp API for native and primitive platforms, which was previously missing in [v5.1.0] (see #3093)
      ๐Ÿš€ This has been released under a patch bump instead of a minor, since it's only been missing from Native-support.

    ๐Ÿ›  Bugfixes

    • โž• Added useTheme hook to named exports for react-primitives entrypoint (see #2982) thanks @jladuval!
    • ๐Ÿ’… Escape every CSS ident character necessary when converting component display names to class names (see #3102) thanks @kripod!
  • v5.1.0

    April 07, 2020

    ๐Ÿ†• New Functionality

    โž• Add shouldForwardProp API (almost the same as emotion's, just a slightly different usage pattern); #3006

    ๐Ÿ’… Sometimes when composing multiple higher-order components together, it's possible to get into scenarios when multiple layers consume props by the same name. In the past we've introduced various workarounds for popular props like "as" but this power-user API allows for more granular customization of what props are passed down to descendant component children when using the styled() HOC wrapper.

    When combined with other APIs like .attrs() this becomes a very powerful constellation of abilities.

    Here's how you use it:

    const Comp = styled('div').withConfig({ shouldForwardProp: (prop, defaultValidatorFn) =\> !['filterThis'].includes(prop), })` color: red;`;render(\<Comp filterThis="abc" passThru="def" /\>); # Renders: \<div className="[generated]" passThru="def"\>\</div\>
    

    0๏ธโƒฃ The second argument defaultValidatorFn is what we use internally to validate props based on known HTML attributes. It's provided so you can filter exactly what props you don't wish to pass and then fall-back to the default filtering mechanism if desired.

    ๐Ÿ’… Other methods on the styled HOC like .attrs can be chained after withConfig(), and before opening your template literal:

    const Comp = styled('div').withConfig({ shouldForwardProp: (prop, defaultValidatorFn) =\> !['filterThis'].includes(prop), }).attrs({ className: 'foo' })` color: red;`;render(\<Comp filterThis="abc" passThru="def" /\>); # Renders: \<div className="[generated] foo" passThru="def"\>\</div\>
    

    Thanks @stevesims and all that contributed!

    โž• Add "transient props" API; #3052

    Think of transient props as a lightweight, but complementary API to shouldForwardProp. Because styled-components allows any kind of prop to be used for styling (a trait shared by most CSS-in-JS libraries, but not the third party library ecosystem in general), adding a filter for every possible prop you might use can get cumbersome.

    Transient props are a new pattern to pass props that are explicitly consumed only by styled components and are not meant to be passed down to deeper component layers. Here's how you use them:

    const Comp = styled.div`color: ${props =\> props.$fg || 'black'};`;render(\<Comp $fg="red"\>I'm red!\</Comp\>);
    

    Note the dollar sign ($) prefix on the prop; this marks it as transient and styled-components knows not to add it to the rendered DOM element or pass it further down the component hierarchy.

    ๐Ÿ›  Bugfixes

    ๐Ÿ›  Fix slow SSR Rehydration for malformed CSS and increase fault-tolerance (see #3018)

    ๐Ÿ’… Change isPlainObject (internal method) to support objects created in a different context (see #3068) thanks @keeganstreet!

    โž• Add support for the <video disablePictureInPicture> (see #3058) thanks @egdbear!

  • v5.0.1

    February 04, 2020

    โž• Added useTheme hook to named exports for react native (#2982)

    ๐ŸŽ Performance enhancements

    • Refactored hashing function that is a bit faster in benchmarks (#2983)

    - Fixed a bitwise math issue that was causing SSR performance degradations due to how we allocate typed arrays under the hood (#2996)

    โž• Added some helpful new dev-time warnings for antipatterns

    • Recommending against usage of css @import inside createGlobalStyle and what to do instead (#2997)
    • Catching and warning against dynamic creation of styled-components inside other component render paths (#2998)
  • v5.0.0

    July 01, 2019

    ๐Ÿš€ Read the v5 release announcement!

    • 19% smaller bundle size
    • 18% faster client-side mounting
    • ๐Ÿ’… 17% faster updating of dynamic styles
    • 45% faster server-side rendering
    • ๐Ÿ‘ RTL support

    ๐Ÿ’… NOTE: At this time we recommend not using @import inside of createGlobalStyle. We're working on better behavior for this functionality but it just doesn't really work at the moment and it's better if you just embed these imports in your HTML index file, etc.

    • ๐Ÿ’… StyleSheetManager enhancements

      • you can now supply stylis plugins like stylis-plugin-rtl; <StyleSheetManager stylisPlugins={[]}>...</StyleSheetManager>
      • disableVendorPrefixes removes autoprefixing if you don't need legacy browser support; <StyleSheetManager disableVendorPrefixes>...</StyleSheetManager>
      • disableCSSOMInjection forces using the slower injection mode if other integrations in your runtime environment can't parse CSSOM-injected styles; <StyleSheetManager disableCSSOMInjection>...</StyleSheetManager>
    • โœ‚ Remove deprecated attrs "subfunction" syntax variant

      styled.div.attrs({ color: p => p.color });
    

    should become

      styled.div.attrs(p => ({ color: p.color }));
    

    You can still pass objects to attrs but individual properties shouldn't have functions that receive props anymore.

    • ๐Ÿ›  Fix attrs not taking precedence over props when overriding a given prop

    • ๐Ÿš€ (ReactNative) upgrade css-to-react-native to v3 (changelog)

      • Removed support for unitless line height in font shorthand
    • ๐Ÿ’… Replace merge-anything with mixin-deep to save some bytes (this is what handles merging of defaultProps between folded styled components); this is inlined into since the library is written in IE-incompatible syntax

    • ๐Ÿ›  Fix certain adblockers messing up styling by purposefully not emitting the substring "ad" (case-insensitive) when generating dynamic class names

    • ๐Ÿ›  Fix regressed behavior between v3 and v4 where className was not correctly aggregated between folded .attrs invocations

  • v5.0.0-rc.3

    December 30, 2019

    ๐Ÿš€ This should be the last RC before general v5 release in a week or two!

    ๐Ÿ“ฆ NOTE: If you've been testing this stylisPlugins functionality with the stylis-rtl plugin, please switch from stylis-rtl to stylis-plugin-rtl.

    • ๐Ÿ’… make useTheme cleaner (#2879) props @sayjeyhi
    • unnecessary flattening and interleave of css without interpolations @vepor
    • ๐Ÿ’… switch back to mainline hoist-non-react-statics (#2934) โ€ฆ
    • ๐Ÿ’… use funding field instead of post install script (#2931) props @koba04
    • ๐Ÿ›  fix usage of nested stylesheetmanagers in SSR
    • ๐Ÿ’… expose version in API (#2888) props @jamesarmenta
    • ๐Ÿ’… refactor stylis management (#2936)
  • v5.0.0-rc.2

    November 12, 2019

    ๐Ÿš€ Note: we've switched from canary to v5 as the target branch for the new release. It's basically the same, but fixed up so it'll merge cleanly onto master.

    ๐Ÿ”„ Changes from rc.1:

    • ๐Ÿ›  fix a few missed cases where attrs were not preferred over props (d2f4509)
    • โœ‚ remove the theme usage dev-time check (df36f93); this was done in master already, just forward-porting
    • ๐Ÿ’… aggregate classNames passed via attrs (#2859, 12a9f3c)
    • ๐Ÿ’… replace rehydration from CSSOM with progressive regex (#2872)
  • v5.0.0-rc.1

    October 31, 2019

    Inline mixin-deep so it is transpiled consistently for IE

  • v5.0.0-rc.0

    October 30, 2019

    ๐Ÿš€ We're almost there! After several months of work (thank you beta testers!) this is the first v5 release candidate build.

    Overall v5 changes:

    ๐ŸŽ Major performance and bundle size improvements over v4, see the announcement blog for more details!

    ๐Ÿ’… StyleSheetManager enhancements

    • you can now supply stylis plugins like stylis-rtl; <StyleSheetManager stylisPlugins={[]}>...</StyleSheetManager>
    • disableVendorPrefixes removes autoprefixing if you don't need legacy browser support; <StyleSheetManager disableVendorPrefixes>...</StyleSheetManager>

    - disableCSSOMInjection forces using the slower injection mode if other integrations in your runtime environment can't parse CSSOM-injected styles; <StyleSheetManager disableCSSOMInjection>...</StyleSheetManager>

    โœ‚ Removed the "subfunction" attrs syntax that was deprecated in v4

    styled.div.attrs({ role: p =\> p.onClick ? 'button' : '' })` color: red;`
    

    becomes

    styled.div.attrs(p =\> ({ role: p.onClick ? 'button' : '' }))` color: red;`
    

    ๐Ÿ”„ Changes since the last beta:

    ๐Ÿ’… disallow /ad/i in generated class names (#2837); this change primarily helps to avoid some overly aggressive ad blockers that will mangle generated classnames containing the substring "ad"

    ๐Ÿ’… Update css-to-react-native to v3.0.0 (#2811); the one breaking change noted is that unitless line height is no longer allowed when setting font properties

    ๐Ÿ’… replace merge-anything with mixin-deep (#2838); saving bytes, this is used when merging defaultProps for extended styled components

    ๐Ÿ’… shard createGlobalStyle by runtime instance (#2824); cGS is implemented such that it's really meant to be used as a singleton, but it's not uncommon for people to have multiple instances of the same cGS component on the page at once. This change ensures that as instances and mounted and removed the existing global styles don't get removed as well

    ๐Ÿ“ memoize theme (#2820); a minor performance tweak when ThemeProvider is given a reference-equal theme prop

    ๐Ÿ’… make ThemeProvider error straightforward (#2787); more obvious messaging that the theme prop is required when using ThemeProvider