Update dependency styled-components to v5 - abandoned
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| styled-components (source) | ^3 -> ^5.0.0 |
Release Notes
styled-components/styled-components
v5.3.9
What's Changed
- [v5] Make styled components work when the Object prototype is frozen by @jportner in https://github.com/styled-components/styled-components/pull/3964
Full Changelog: https://github.com/styled-components/styled-components/compare/v5.3.8...v5.3.9
v5.3.8
What's Changed
fix(constants): rework process env guard
Full Changelog: https://github.com/styled-components/styled-components/compare/v5.3.7-fixed...v5.3.8
v5.3.7
v5.3.6
What's Changed
- Fix statement on Ukraine by @Fer0x in https://github.com/styled-components/styled-components/pull/3724
- Fix/nonce in ssr by @samimakicc in https://github.com/styled-components/styled-components/pull/3755
Deprecations
-
$asand$forwardedAswill be removed in the next major version, use the unprefixed props instead
New Contributors
- @samimakicc made their first contribution in https://github.com/styled-components/styled-components/pull/3755
Full Changelog: https://github.com/styled-components/styled-components/compare/v5.3.5...v5.3.6
v5.3.5
Add statement of solidarity against the war on Ukraine 🇺🇦
v5.3.3
What's Changed
- Backport #3568 (read from textContent rather than innerHTML during rehydrate) to v5 by @keeganstreet in https://github.com/styled-components/styled-components/pull/3591
- [v5] generate more complete sourcemaps by @henryqdineen in https://github.com/styled-components/styled-components/pull/3597
New Contributors
- @henryqdineen made their first contribution in https://github.com/styled-components/styled-components/pull/3597
Full Changelog: https://github.com/styled-components/styled-components/compare/v5.3.1...v5.3.3
v5.3.1
-
Fix forced server-side mode not triggering global styles (See #3566)
-
Fix SSR collisions caused by insufficient hash inputs and reordering of groups on the client, which is a regression in v5.2.0 (See #3563)
-
Fix dynamic creation React warning for React v18, backported to v5 by @lynndylanhurley (See #3564)
-
Add missing typeof window check when checking for duplicate instances of styled-components (See #3553)
-
Prevent ServerStyleSheet from emitting empty style tags, which would cause issues in IE11 (See #3555)
-
Support css tagged templates inside style objects, by @roginfarrer and @dvingo (See #3469)
v5.3.0
-
Pass
elementToBeCreatedas a third parameter toshouldForwardPropso that the user-specified function can decide whether to pass through props based on whether the created element will be a tag or another component. (see #3436) -
Fix React Native components accepts function as style prop. (see #3389)
v5.2.3
fix an issue with an unguarded window accessor in a SSR path (see #3446)
v5.2.2
-
For React Native based components, pass
testIDdown to the native component if specified for an easier time testing. (see #3365) -
Enable users of the babel macro to customize the styled-components import with
importModuleName(see #3422) -
[fix] COMPLEX_SELECTOR_PREFIX.includes wasn't transpiled (see #3397)
v5.2.1
Tweak server-side build settings to resolve an issue with jest-dom not being able to pick up generated styles (see #3308) thanks @Lazyuki
v5.2.0
-
Make sure
StyleSheetManagerrenders 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
keyframesnot receiving a modified stylis instance when using something likestylis-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.1.1
New Functionality
- Implement
shouldForwardPropAPI 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
useThemehook 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
New Functionality
-
Add
shouldForwardPropAPI (almost the same as emotion's, just a slightly different usage pattern); https://github.com/styled-components/styled-components/pull/3006Sometimes 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 thestyled()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">
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:
```jsx
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; https://github.com/styled-components/styled-components/pull/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
-
Added useTheme hook to named exports for react native (#2982)
-
Performance enhancements
-
Added some helpful new dev-time warnings for antipatterns
v5.0.0
It's finally here!!! 🚀See the migrating to v5 FAQ page for easy upgrade instructions!
Read the v5 release announcement!
TL;DR:
- 19% smaller bundle size
- 18% faster client-side mounting
- 17% faster updating of dynamic styles
- 45% faster server-side rendering
- RTL support
...and much more all, with no breaking changes!
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.
Changes
-
StyleSheetManagerenhancements- you can now supply stylis plugins like stylis-plugin-rtl;
<StyleSheetManager stylisPlugins={[]}>...</StyleSheetManager> -
disableVendorPrefixesremoves autoprefixing if you don't need legacy browser support;<StyleSheetManager disableVendorPrefixes>...</StyleSheetManager> -
disableCSSOMInjectionforces using the slower injection mode if other integrations in your runtime environment can't parse CSSOM-injected styles;<StyleSheetManager disableCSSOMInjection>...</StyleSheetManager>
- you can now supply stylis plugins like stylis-plugin-rtl;
-
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; ` -
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
- if you get a lot of warnings at dev time from not having units in your styles, this codemod is available to help expedite updates: https://github.com/styled-components/styled-components-native-code-mod thanks @jacobp100
-
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"
-
if you use styled-components from CDN, in v5 the "react-is" dependency was added (make sure you add this to your project)
v4.4.1
-
Fix
styled-components'sreact-nativeimport for React Native Web, by @fiberjw (see #2797) -
Remove dev-time warning if referencing a theme prop without an outer
ThemeProvider, the check for it isn't smart enough to handle cases with "or" or ternary fallbacks and creates undesirable noise in various third party integrations
v4.4.0
This is the last minor release before v5, please start using the beta and give us feedback!
This is a minor release not a patch release due to this change: #2738. Apologies if this causes some code churn in your projects, it was a long-standing bug that needed fixing.
-
Fix to use
ownerDocumentinstead of globaldocument, by @yamachig (see #2721) -
Backport fix for SSR classname mismatches in development mode for some environments like next.js (see #2701)
-
Fix attrs not properly taking precedence over props
-
Backport fix where classnames are composed in the wrong order if custom class names are passed in (see #2760)
-
Fix add check for style tag detached - sheet in the style tag is null in this case, by @newying61 (see #2707)
v4.3.2
Fix usage of the "css" prop with the styled-components babel macro (relevant to CRA 2.x users), by @jamesknelson (see #2633)
v4.3.1
- Revert #2586; breaks rehydration in dev for certain runtimes like next.js
We'll explore reintroducing it in v5 but better safe than sorry.
v4.3.0
-
Make it possible to initialize
SC_ATTRandSC_DISABLE_SPEEDYviaREACT_APP_*.env variables for easier integration with CRA applications (see #2501) -
Fix components being folded inappropriately when an interim HOC is present (see #2586)
-
Fix
themeprop for styled native components, also fixesthemeindefaultPropsfor them (see #2576) -
Add "forwardedAs" prop to allow deeply passing a different "as" prop value to underlying components when using
styled()as a higher-order component (see #2580) -
Implement defaultProps folding (see #2597)
v4.2.1
Major thanks to our wonderful contributors!
-
Remove className usage checker dev utility due to excessive false-positive noise in certain runtime environments like next.js and the related warning suppression prop (see #2563).
-
Attach displayName to forwardRef function as described in React docs (see #2508).
-
Compatibility with react-native-web 0.11 (see #2453).
-
Add stack trace to .attrs warning (see #2486).
-
Fix functions as values for object literals. (see 2489)
-
Remove validation in Babel macro, by @mAAdhaTTah (see #2427)
v4.2.0
Thanks to our amazing contributors for leading the charge on this big minor release! Awesome perf stuff in there and QOL changes in preparation for v5.
-
Reduced GC pressure when using component selector styles. (see #2424).
-
Add svg tag
markerto domElements.js (see #2389) -
Make the
GlobalStyleComponentcreated bycreateGlobalStylecall the base constructor withprops(see #2321). -
Move to Mono repository structure with lerna @imbhargav5 (see #2326)
-
Expose
StyleSheetContextandStyleSheetConsumerfor you fancy babes doing wild stuff -
Filter
suppressClassNameWarningto not to pass down to the wrapped components @taneba (see #2365) -
Fix an edge case where React would break streaming inside
<textarea>elements, which have special child behavior and aren't a suitable place to inject a style tag (see #2413)
v4.1.3
Under the hood code cleanup of the Babel macro, by @lucleray (see #2286)
v4.1.2
-
Fix function-form attrs to receive the full execution context (including theme) (see #2210)
-
Adjust
innerRefdeprecation warning to not be fired if wrapping a custom component, since that underlying component may not be on forwardRef yet and actually using the prop (see #2211) -
Expose the
ThemeConsumerandThemeContextexports for the native and primitives entries (see #2217) -
Remove
createGlobalStylemultimount warning; Concurrent and Strict modes intentionally render the same component multiple times, which causes this warning to be triggered always even when usage is correct in the application (see #2216) -
Folded components are now targetable via component selector as in v3 if you used the old
.extendAPI (see #2239) -
Don't treat uppercased strings as tag-like components and don't filter out props from them (see #2225)
v4.1.1
- Put back the try/catch guard around a part of the flattener that sometimes receives undetectable SFCs (fixes an errant hard error in an edge case)
v4.1.0
-
Performance optimization for fully static (no function interpolation) styled-components by avoiding using
ThemeConsumersince it isn't necessary, by @mxstbr (see #2166) -
Allow disabling "speedy" mode via global
SC_DISABLE_SPEEDYvariable, by @devrelm (see #2185)To make use of this, you can either set
SC_DISABLE_SPEEDYin your app's entry file or use something likewebpack.DefinePluginto do it at build time:webpack.DefinePlugin({ SC_DISABLE_SPEEDY: true, }); -
Attrs can now be passed a function (see #2200); thanks @oliverlaz for providing an early PoC PR for this!
e.g.:
styled.div.attrs(props => ({ 'aria-title': props.title }))``; -
Fix the
warnTooManyClassesdev helper not being totally dead code eliminated in production (see #2200) -
Deprecate functions as object keys for object-form attrs (see #2200)
e.g.:
styled.div.attrs({ 'aria-title': props => props.title })``; // bad styled.div.attrs(props => ({ 'aria-title': props.title }))``; // goodSupport for this will be removed in styled-components v5. The primary impetus behind this change is to eliminate confusion around basic functions vs styled-components vs React components provided as values in the object-form attrs constructor, each of which has different handling behaviors. The single outer function to receive the props and then return a props object is conceptually simpler.
-
The standalone CDN build is now UMD-compliant and can be used with RequireJS, etc.
-
Add pixels to unitless numbers when object interpolation is used, by @Fer0x (see #2173)
-
Trying to interpolate a non-styled component into CSS is now a hard error, rather than a warning (see #2173)
v4.0.3
-
Interpolating a styled component into a string now returns the static component selector (emotion cross-compat)
import styled from 'styled-components'; const Comp = styled.div` color: red; `; `${Comp}`; // .sc-hash -
Add
suppressClassNameWarningprop to disable warning when wrapping a React component withstyled()and theclassNameisn't used, by @Fer0x (see #2156) -
Expose ThemeContext to enable static contextType support for React 16.6, by @imbhargav5 (see #2152)
-
Filter out invalid HTML attributes from
attrs, by @Fer0x (see #2133) -
Add warning if an
attrsprop is a function that returns an element, by @timswalling (see #2162)
v4.0.2
- Handle an edge case where an at-rule was being supplied to the self-reference stylis plugin at an incorrect context setting, by @probablyup (see #2114)
v4.0.1
-
Add suppressMultiMountWarning prop to disable warning on multiple cgs mount, by @imbhargav5 (see #2107)
-
Fix self-reference replacement edge cases, by @probablyup (see #2109)
v4.0.0
This is a rollup of the highlights of beta 0-11 for convenience. See the migration guide for easy updating steps and the beta announcement blog for our summary of v4's changes, thought process, etc.
New stuff
-
Add babel macro for full-featured interop with create react app v2+, by @lucleray (see #2032)
-
Expose
ThemeConsumercomponent, context consumer render prop component from theReact.createContextAPI if people are interested in using it rather than / in addition to thewithThemeHOC, by @probablyup -
Add
createGlobalStylethat returns a component which, when mounting, will apply global styles. This is a replacement for theinjectGlobalAPI. It can be updated, replaced, removed, etc like any normal component and the global scope will update accordingly, by @JamieDixon @marionebl, @yjimk, and @imbhargav5 (see #1416)const GlobalStyles = createGlobalStyle` html { color: 'red'; } `; // then put it in your React tree somewhere: // <GlobalStyles /> -
Added a first-class API for rendering polymorphism via "as" prop. In most cases, this new prop will replace your need to use the
.withComponentAPI. It allows you to control what underlying element or component is rendered at runtime, while not messing with the styles, by @probablyup (see #1962)import { Link } from 'react-router' const Component = styled.div` color: red; ` // Examples <Component>Hello world!</Component> <Component as="span">Hello world!</Component> <Component as={Link} to="home">Hello world!</Component>
Breaking changes
-
Fix how ampersand is handled in self-referential selector combinations, e.g.
& + &(see #2071) -
Remove deprecated
consolidateStreamedStylesAPI, by @probablyup (see #1906) -
Remove deprecated
jsnext:mainentry point from package.json, by @probablyup (see #1907) -
Remove deprecated
.extendAPI, by @probablyup (see #1908) -
Migrate to new context API, by @alexandernanberg (see #1894)
-
Remove TS typings; they are now to be found in DefinitelyTyped, by @probablyup. See https://github.com/styled-components/styled-components/issues/1778 for more information.
-
Add new
data-styled-versionattribute to generated<style>tags to allow multiple versions of styled-components to function on the page at once without clobbering each other, by @probablyupIt's still highly recommended to use aliasing via your bundler to dedupe libraries like styled-components and react.
-
[Breaking change] Refactor
keyframeshelper, by @fer0x (see #1930).Keyframes is now implemented in a "lazy" manner: its styles will be injected with the render phase of components using them.
keyframesno longer returns an animation name, instead it returns an object which has method.getName()for the purpose of getting the animation name. -
Migrate to use new
React.forwardRefAPI, by @probablyup; note that this removes theinnerRefAPI since it is no longer needed. -
Implement
styled()wrapper folding. In a nutshell, when you nest styled wrappers (e.g.styled(styled.div)) the components are now folded such that only one is mounted that contains the merged styles of its ancestors. This is conceptually equivalent to the removed "extend" functionality, but without many of the downsides -- and it's automatic, by @probablyup (see #1962)
Developer experience improvements
-
Add warning when component is not a styled component and cannot be referred via component selector, by @egdbear (see #2070)
When using CRA v2, import styled components from
styled-components/macroinstead to gain all the benefits of our babel plugin. -
Add a warning when wrapping a React component with
styled()and theclassNameisn't used (meaning styling isn't applied), by @Fer0x (see #2073) -
Tweak the styled components base component naming to look nicer in DevTools, by @probablyup (see #2012)
-
Beef up the error message that sometimes occurs when multiple versions of styled components are used together and the StyleSheet instance can't be found, by @probablyup (see #2012)
Misc
-
Add
enzymeFindtest utility to easily grab instances of a styled-component from enyzme mounted testing scenarios, by @probablyup (see #2049)import { mount } from 'enzyme'; import React from 'react'; import styled from 'styled-components'; import { enzymeFind } from 'styled-components/test-utils'; const Thing = styled.div` color: red; `; const wrapper = mount( <div> <Thing isCool /> </div> ); const thing = enzymeFind(wrapper, Thing); // expect(thing.props()).toHaveProperty('isCool') etc -
Inline and optimize the static hoisting functionality to avoid a bundler bug and shed a bit of package weight, by @probablyup (see #2021
Configuration
📅 Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
Edited/Blocked Notification
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
⚠ Warning: custom changes will be lost.
Autoclosing Skipped
This PR has been flagged for autoclosing. However, it is being skipped due to the branch being already modified. Please close/delete it manually or report a bug if you think this is in error.