Version 8: XStyled and styled-component upgrades
Welcome UI V8 upgrades:
@xstyled/styled-componenttov4styled-componentstov6
This upgrade is a major version because it includes breaking changes.

Upgrade steps
1. Upgrade your dependencies
Upgrade @xstyled/styled-components and styled-component packages:
yarn upgrade @xstyled/styled-components@^4.0.0 styled-components@^6.1.15
2. Remove useless dependency
Remove @types/styled-components package (types are now included in styled-components v6):
yarn remove @types/styled-components
3. Script to migrate
In welcome-ui repository, run this script:
yarn migrate '../your_project_path/**/*.{ts,tsx}'
This not cover all changes, so please check:
- Move typescript on styled component
+ export const Component = styled.divBox<{ property: string }>(+ ({ property }) => css`- export const Component = styled.divBox(- ({ property }: {property: string }) => css`
- Use
styled.*Boxinstead ofstyled.*with${system}pattern (The definition of the return type of the styled function has change)
+ export const Component = styled.spanBox`- export const Component = styled.span`- ${system}
v7
Welcome UI V7 brings back everything into a mono-package: welcome-ui

Upgrade steps
1. Script to migrate
In your project, run this script to rename all @welcome-ui/* imports to welcome-ui/* with CamelCase:
yarn migrate "../your-project/src/**/**.*{ts,tsx}"
2. Update your dependencies
In your project, remove all @welcome-ui packages:
yarn remove $(grep -o "@welcome-ui/[.a-zA-Z0-9-]*" package.json | sort | uniq)
And add new package:
yarn add welcome-ui
4. Other changes
WuiThemebecomesThemeValuesWuiProvideris now exported fromwelcome-ui/WuiProvider- Import for IconsFont is now
- import { Icons } from '@welcome-ui/icons.font'+ import { IconsFont } from 'welcome-ui/IconsFont'
- Import for cardStyles is now
- import { cardStyles } from '@welcome-ui/utils'+ ${th('cards.default')}'
v6
Welcome UI V6 focuses on the rebranding of our colors and tokens, and we add a Logo component.

Upgrade steps
1. Update your dependencies
Make sure you update all @welcome-ui packages to v6:
{"dependencies": {+ "@welcome-ui/YOUR_PACKAGE": "^6.0.0","@xstyled/styled-components": "^3.7.3","react": "^18.0.0","styled-components": "^5.3.9"}}
On VSCode search:
("@welcome-ui\/[^"]+":\s*)"\^?[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9\.]+)?"
And replace by:
$1"6.0.0"
2. Script to migrate
We reworked our theme's colors and variants name. Use the migration script to migrate easily to V6 on a welcome-ui project.
Create js file with:
/* eslint-disable no-console *//* eslint-disable @typescript-eslint/no-var-requires */// This script will help you to migrate from Welcome-UI v5 to Welcome-UI v6// node ./scripts/upgrade-v6.js "../your-project/src/**/**.**(ts|tsx)"const fs = require('fs/promises')const glob = require('glob')// const pattern = 'src/**/**.*(ts|tsx)'const [pattern = ''] = process.argv.slice(2)const newColorValues = {'danger-100': 'v6.red-10','danger-200': 'v6.red-30','danger-300': 'v6.red-60','danger-400': 'v6.red-70','danger-500': 'v6.red-80','dark-100': 'v6.neutral-30','dark-200': 'v6.neutral-30','dark-400': 'v6.neutral-50','dark-500': 'v6.neutral-60','dark-700': 'v6.neutral-70','dark-900': 'v6.neutral-90','info-100': 'v6.blue-10','info-200': 'v6.blue-40','info-300': 'v6.blue-50','info-400': 'v6.blue-60','info-500': 'v6.blue-70','light-100': 'v6.neutral-80','light-200': 'v6.neutral-70','light-400': 'v6.neutral-60','light-500': 'v6.neutral-50','light-700': 'v6.neutral-40','light-900': 'v6.neutral-10','nude-100': 'v6.beige-20','nude-200': 'v6.beige-30','nude-400': 'v6.beige-40','nude-600': 'v6.beige-60','nude-700': 'v6.beige-70','nude-900': 'v6.beige-80','primary-100': 'v6.primary-10','primary-200': 'v6.primary-30','primary-500': 'v6.primary-40','primary-600': 'v6.primary-50','primary-700': 'v6.primary-50','primary-800': 'v6.primary-80','primary-900': 'v6.primary-90','sub-1': 'secondary-blue','sub-2': 'secondary-teal','sub-3': 'secondary-pink','sub-4': 'secondary-orange','sub-5': 'secondary-green','sub-6': 'secondary-green','sub-7': 'secondary-violet','success-100': 'v6.green-10','success-200': 'v6.green-40','success-300': 'v6.green-50','success-400': 'v6.green-60','success-500': 'v6.green-70','warning-100': 'v6.orange-10','warning-200': 'v6.orange-30','warning-300': 'v6.orange-50','warning-400': 'v6.orange-60','warning-500': 'v6.orange-80',black: 'neutral-90',white: 'neutral-10',}const specialColorsValues = {border: 'neutral-30',underline: 'primary-40',}const getNewColorValue = value => newColorValues[value] || valueconst getNewColorSpecialValue = value => specialColorsValues[value] || valueconst upgradeColors = content => {const regex =/(primary|nude|success|danger|info|warning|dark|light)-(100|200|300|400|500|600|700|800|900)|(sub-(1|2|3|4|5|6|7)|("black"|"border"|"underline"|"white"|'black'|'border'|'underline'|'white'))/gmconst regexForSpecials =/\b(borderColor|border-color|color)\s*[:=]\s*["']?(border|underline|black|white)["']?\b/gif (regex.test(content)) {const newContent = content.replaceAll(regex, getNewColorValue)return newContent}if (regexForSpecials.test(content)) {const newContent = content.replaceAll(regex, getNewColorSpecialValue)return newContent}return content}const removePrefix = content => {const regex = /v6\./gmif (regex.test(content)) {const newContent = content.replaceAll(regex, prefix => prefix.replace('v6.', ''))return newContent}return content}const replaceErrorVariant = content => {const regex =/<(Tag|Label|Hint|Alert|Table.Tr|Toast.Growl|Toast.Snackbar)\b([^>]*?)\bvariant\s*=\s*["']error["']/gif (regex.test(content)) {const newContent = content.replaceAll(regex, '<$1$2variant="danger"')return newContent}return content}glob(pattern, (error, matches) => {if (error) console.log('error', error)matches.forEach(async match => {if (match === './packages/Core/src/theme/colors.ts' ||match === './packages/Core/src/theme/dark.ts')returnconst file = await fs.readFile(match)let content = file.toString()content = upgradeColors(content)content = removePrefix(content)content = replaceErrorVariant(content)await fs.writeFile(match, content)})console.log('done')})
Then:
node ./your_file "./yourProject/src/**/**.{tsx,ts,js,mdx}"
3. Remove welcomeTheme & welcomeDarkTheme
To simplify our developements, we removed the 2 welcome themes. Now the default have primary colors from welcome ui brand:
+ import { createTheme, darkTheme } from '@welcome-ui/core'- import { welcomeTheme } from '@welcome-ui/themes.welcome'- import { darkTheme } from '@welcome-ui/dark'- import { welcomeDarkTheme } from '@welcome-ui/themes.welcome-dark'- const theme = createTheme(welcomeTheme)+ const theme = createTheme()- const darkTheme = createTheme(welcomeDarkTheme)+ const darkTheme = createTheme(darkTheme)
and remove also from your packages.json:
- "@welcome-ui/themes.dark": "^5.22.1"- "@welcome-ui/themes.welcome": "^5.22.1"- "@welcome-ui/themes.welcome-dark": "^5.22.1"
4. Change variant error to danger on:
Alert
- <Alert variant="error">+ <Alert variant="danger">
Table
- <Table.Tr variant="error">+ <Table.Tr variant="danger">
Tag
- <Tag variant="error">+ <Tag variant="danger">
Hint
- <Hint variant="error">+ <Hint variant="danger">
Label
- <Label variant="error">+ <Label variant="danger">
Colors
We reworked our colors to prepare the next steps for tokenization.
Range
Now the range is color-10 to color-90.
- primary-100+ primary-10
Neutral replace Dark and Light
We merged Dark and Light colors in a Neutral new one, without opacity.
- light-100+ neutral-10- dark-900+ neutral-90
New colors
Hello green teal blue violet pink red red-orange orange and yellow 🥰
Beige instead of Nude
The nude naming is changed for beige.
- nude-100+ beige-10
State colors removed
We've removed the state colors danger, success, warning and info. They'll be replaced with new tokens in the future.
- danger-100+ red-10
Secondary
Sub colors replaced by 6 new colors for the secondary palette:
- sub-1+ secondary-blue
- sub-2+ secondary-teal
- sub-3+ secondary-pink
- sub-4+ secondary-orange
- sub-5- sub-6+ secondary-green
- sub-7+ secondary-violet
Dark mode
Dark mode is still on Beta 🚨 and will be released in a few minor versions.
import { createTheme, darkTheme } from '@welcome-ui/core'const theme = createTheme(darkTheme)
Components
Logo
A new Logo component is available, with svg export of:
import { Logo, SolutionsSymbol, Symbol, WelcomeUILogo } from '@welcome-ui/logo'return <Logo w={100} />
- Logo: Welcome to the Jungle new logo
- Symbol
- SolutionsSymbol: Welcome to the solution new logo with symbol
- WelcomeUILogo: Welcome UI new logo
Icons & IconsFont
- New icon Symbol on Icons
<SymbolIcon />
- New icon Symbol on IconsFont
<Icons.Symbol />
Fields
On the fields we removed the info variant property:
- All fields
- Labels
- Hints
Button
We removed some variants property on states and add danger property for red button.
- <Button variant="primary-success">Primary success</Button>- <Button variant="primary-warning">Primary warning</Button>- <Button variant="primary-danger">Primary danger</Button>+ <Button danger>Primary danger</Button>- <Button variant="primary-info">Primary info</Button>- <Button variant="secondary-success">Secondary success</Button>- <Button variant="secondary-warning">Secondary warning</Button>- <Button variant="secondary-danger">Secondary danger</Button>+ <Button variant="tertiary" danger>Tertiary danger</Button>- <Button variant="secondary-info">Secondary info</Button>
+ <Button variant="ghost" danger>Ghost danger</Button>
Badge
We removed shape property on Badge component, now you will only have rounded badge.
- <Badge shape="square">Name</Badge>+ <Badge>Name</Badge>
Tag
We removed the secondary variant and replaced the sub-* variants. To use the secondary color please use the Badge component instead.
- <Tag variant="secondary">Name</Tag>+ <Tag variant="green">Name</Tag>
- <Tag variant="1">Name</Tag>+ <Tag variant="blue">Name</Tag>
v5
Welcome UI V5 focuses on the rework of our foundations and moving from reakit to ariakit (reakit v2).
Upgrade steps
1. Update your dependencies
Make sure you update all @welcome-ui packages and styled-components packages:
{"dependencies": {"@welcome-ui/YOUR_PACKAGE": "^5.0.0","@xstyled/styled-components": "^3.7.3","react": "^18.0.0","styled-components": "^5.3.9"}}
2. Migrate foundations
We reworked our theme's colors, spacing, typography, and many other properties. Use the migration script to migrate easily to V5 on a welcome-ui project.
yarn migrate:v5 "../yourProject/src/**/**.**(tsx|ts|js)"
3. Migrate Reakit to Ariakit
We also migrated to the new Ariakit library (reakit v2) on some of our components. To migrate easily, you can find components migration below.
To resume:
- We now pass on a
storeproperty the component's state and remove "State" from the hook name.
- const drawerState = useDrawerState()+ const drawer = useDrawer()- <Drawer {...useDrawerState}>+ <Drawer store={drawer}>
visibleis now replaced by theopenproperty- To force open a component, use now the
defaultOpenproperty
- const drawerState = useDrawerState({ open: true })+ const drawer = useDrawer({ defaultOpen: true })
- Access the actual component's state with
useState:
- const drawerState = useDrawerState()- const isOpen = drawerState.visible+ const drawer = useDrawer()+ const isOpen = drawer.useState('open')
Theme
Colors
We changed our colors dark and light to be fully compatible with the coming dark mode (in beta). Now dark are black rgba with transparency, and light white rgba with transparency.
We also had to rework our colors naming for typescript compatibility reasons:
- Before:
colors.dark.900 - After:
colors['neutral-90']
We rework some colors:
- v4 compare to v5
- [success/danger/warning/info].500 to [success/danger/warning/info]-300
- [success/danger/warning/info].700 to [success/danger/warning/info]-400
- new color [success/danger/warning/info]-500
- nude.400 to nude-500
- nude.500 to beige-40
- nude.700 to beige-60
- nude.800 to beige-70
- ** the light colors are all white with opacity, you need to replace the old light color for text with new black color **
- light.800 to neutral-30
- light.700 to neutral-30
- light.500 to neutral-50
- light.200 to neutral-50
- light.100 to neutral-60
- now the light colors variants are 100, 200, 400, 500, 700, 900(without opacity)
- ** the dark colors are all black with opacity, it's also used for text color **
- dark.100 to neutral-60
- dark.200 to neutral-70
- dark.500 to dark.900
- dark.700 to dark.900
- dark.800 to dark.900
- now the dark colors variants are 100, 200, 400, 500, 700, 900(without opacity)
- new color white (get the light.900 for dark mode)
- new color black (get the dark.900 for dark mode)
- the color for html is now neutral-60
Spacing
We rework our spacing:
- v5 compare to v4
- xxs (2px) to new size (before it was 6px)
- xs (4px) to new size (before it was 8px)
- sm (8px) to xs
- md (12px) to same size
- lg (16px) to lg (15px)
- xl (24px) to xxl
- xxl (32px) to 3xl (30px)
- 3xl (48px) to 5xl (50px)
- 4xl (64px) to 6xl
- 5xl (96px) -> new size
- 6xl (128px) -> new size
- 7xl (192px) -> new size
Typography
We change the name of variants to xs s m lg and remove useless variants.
- meta1 and meta2 has been removed and replaced by
smandxs - body1 become
lg - body2 become
md - body3 become
sm - body4 become
xs - subtitle1 become
subtitle-md - subtitle2 become
subtitle-sm
Components
Accordion
We migrated to Ariakit and added an useAccordion hook to play with the component's store.
+ const accordion = useAccordion()- <Accordion title="accordion">+ <Accordion store={accordion} title="accordion">= ...= </Accordion>
Alert / Toast / Growl
-
All components
- We have adjusted colors and spacing.
- Position
tophas been replaced withtop-centerand positionbottomhas been replaced withbottom-center. - We removed the property
closeButtonDataTestId. Now we add-close-buttonafter yourdataTestIdproperty.
-
Alert
- The props
iconis now given to the Alert component and not to Alert.Title. - You must use the
ctaprop instead of pass the Alert.Button as a Children - You must use the
isFullWidthprop to have an alert with a 100% max width
- The props
-
Toast
- In order to use
Toastcomponent, you must add theNotificationscomponent in your project root. - The
useToasthook is deprecated. Instead, you can directly usetoastfunction. - The props
iconis now given to Toast.Growl / Toast.Snackbar component and not to Toast.Title.
- In order to use
Badges
- rework
Badgecomponent now rounded
Buttons
- We have adjusted colors and spacing.
- The
xlsize has been removed. - The
ternary-negativehas been removed. - The
quaternaryvariant is now namedghost. - The icon size now adjusts to the size of the button.
Drawer
We migrated to Ariakit. We now pass the component's state from useDrawer to the store property:
- const drawerState = useDrawerState()+ const drawer = useDrawer()- <Drawer {...drawerState}>+ <Drawer store={drawer}>= ...= </Drawer>
We replace props by:
hideOnClickOutsidebecomehideOnInteractOutside<Drawer.Backdrop>is removed and replace by a propertywithBackdrop. You can personalize your backdrop with thebackdropproperty.
DropdownMenu
We migrated to Ariakit. Now we pass the component's state from useDropdownMenu to the store property:
- const dropdownMenuState = useDropdownMenuState()+ const dropdownMenu = useDropdownMenu()- <DropdownMenu.Trigger {...dropdownMenuState}>+ <DropdownMenu.Trigger store{dropdownMenu}>= ...= </DropdownMenu.Trigger>- <DropdownMenu {...dropdownMenuState}>+ <DropdownMenu store={dropdownMenu}>- <DropdownMenu.Item {...dropdownMenuState}>+ <DropdownMenu.Item store={dropdownMenu}>= ...= </DropdownMenu.Item>= ...= </DropdownMenu>
If you want to not close DropdownMenu item on click please add a hideOnClose={false} on DropdownMenu.Item:
<DropdownMenu.Item hideOnClose={false} store={dropdownMenu}>...</DropdownMenu.Item>
EmojiPicker
We migrated to Ariakit. Now we pass the component's state from useEmojiPicker on the store property:
- const emojiPickerState = useEmojiPicker()+ const emojiPicker = useEmojiPicker()- <EmojiPicker.Trigger {...emojiPickerState}>+ <EmojiPicker.Trigger store{useEmojiPicker}>= ...= </EmojiPicker.Trigger>- <EmojiPicker.Trigger {...emojiPickerState} />+ <EmojiPicker.Trigger store={useEmojiPicker} />
and defaultTabState becomes defaultTabStore
FileDrop
accept property changed on v14 of react-dropzone:
- Before:
accept: "image/*" - After:
accept: { "image/*": [] }
See more about showOpenFilePicker and media type.
Icons
We rework our icon size:
- v5 compare to v4
- This size has been removed to xxs (7px)
- xs (12px) to xs (10px)
- sm (16px) to sm (12px)
- md (24px) to md (15px)
- lg (32px) to lg (20px)
- xl (48px) to xl (27.574px)
- xxl (64px) to new size
We remove all @welcome-ui/icons.* packages (except icons.font). There is now two packages available:
- @welcome-ui/icons using svg
- @welcome-ui/icons.font using webfont
We renamed some icons:
<GetIcon>become<DownloadIcon><EyeIcon>become<ShowIcon><ThumbupIcon>become<ThumbUpIcon><ThumbdownIcon>become<ThumbDownIcon><FlagFillIcon>become<FlagIcon><FlagIcon>become<FlagOutlineIcon><ChevronIcon>become<CodeIcon><DuplicateIcon>become<CopyIcon><TagsIcon>become<TagIcon><SalaryIcon>become<EuroCurrencyIcon>- new
<SalaryIcon>icon
Link
- the
isExternalLinkbecomeisExternal
Modal
- We have adjusted colors and spacing.
- Modal.Title is now named Modal.Header and has props
title(mandatory) andsubtitle(optional). - To ensure good spacing between modal's sub-components, they must be wrapped with Modal.Content.
- Modal.Body is now the content box for Modal.
- Modal.Cover has been removed.
- We migrated to Ariakit and added an
useModalhook to play with the component store.
- const modalState = useModalState()+ const modal = useModal()- <Modal {...modalState}>- <Modal.Content>...- </Modal.Content>+ <Modal store={modal}>+ <Modal.Content store={modal}>+ <Modal.Body>...+ </Modal.Body>+ </Modal.Content>= ...= </Modal>
Popover
- We migrated to Ariakit and added a
usePopoverhook to play with the component store.
- const popoverState = usePopoverState()+ const popover = usePopover()- <Popover.Trigger {...popoverState}>+ <Popover.Trigger store={popover}>= ...= </Popover.Trigger>- <Popover {...popoverState}>+ <Popover store={popover}>= ...= </Popover>
RadioGroup
We removed the check icon on radio input and changed the style of it. We also reworked accessibility.
Tabs
We migrated to Ariakit. Now we pass the component state from useTab on the store property:
- const tabState = useTabState()+ const tab = useTab()- <Tab.List {...tabState}>+ <Tab.List store={tab}>- <Tab {...tabState}>+ <Tab store={tab}>= ...= </Tab>= </Tab.List>- <Tab.Panel {...tabState}>+ <Tab.Panel store={tab}>= ...= </Tab.Panel>
and selectedId become defaultSelectedId
Tag
- We have adjusted colors and spacing.
- The
lgsize has been removed. - The
shapeprop has been removed. - The icon size now adjusts to the size of the tag.
Tooltip
We added a div around the Children of the tooltip when the children has a disabled prop otherwise the tooltip does not trigger. We removed popper.js and only use Ariakit for fixed or not fixed tooltip.
Swiper
We rework the swiper component:
<Swiper.Slide>has been removed, you can embed and style your slides as you wantslidesToShowoption becomeslidesPerViewand now takes an object to define the number of slides per device{ mobile: 1, tablet: 1, desktop: 1 }renderPaginationItem,nextButton,prevButtonandslidesToSwipeoptions have been removed
Now we pass the component state from useSwiper on the store property:
- const state = useSwiperState()+ const swiper = useSwiper()- <Swiper state={state}>+ <Swiper store={swiper}>= ...= </Swiper>
v4
Version 4: Welcome to Typescript!
Typescript!
We are so excited to add Typescript on Welcome UI 😍
Breaking Changes
xStyled
We upgraded xStyled core libraries to V3.
- Use
w="100%"instead ofw={1} - Use
h="100%"instead ofh={1}
Check the migration here: Changelog of xstyled v3
Theme
Colors
theme.colors.success[500]becomestheme.colors.success[700]theme.colors.success[200]becomestheme.colors.success[500]theme.colors.info[500]becomestheme.colors.info[700]theme.colors.info[200]becomestheme.colors.info[500]- for welcome theme:
theme.colors.success[200]has been changed for the new color##45BE98theme.colors.info[200]has been changed for the new color##9AC7F7
- for the core theme:
theme.colors.success[200]has been changed for the new color##7EC784theme.colors.info[200]has been changed for the new color##6696DF
textsTextTransform
- removed uppercase on
h0 - add uppercase on
subtitle1andsubtitle2
Icons
- 1 icon deleted (doublon with
EditIcon)pen
- 12 new icons added:
avatar_accessoryavatar_bodyavatar_bottomavatar_costumeavatar_headavatar_topcommon_areameeting_roombookmarkbookmark_outlineequal
- 2 icons modified:
screenshare_offscreenshare_on
Text component
We reduced the size (and variant) of headings on mobile:
- h0 > h1
- h1 > h2
- h2 > h3
- h3 > h4
- h4 > h5
- h5 > h6
Components
Drawer
The Drawer component has to be wrapped with a Backdrop component, visible by default. If you don't want the Backdrop to be visible, you can pass it a backdropVisible prop set to false.
This decision was made for browser compatibility purpose.
ConnectedField
The ConnectedField component was built to work with react-final-form and was not generic enough so we have decided to remove it on v4.
Field
The Field component will not accept component prop anymore but wrap your input directly, this makes it possible to give styled props to the Wrapper and the Input component. For more information on the new syntax, check the documentation
You can also check an example with React Hook Form.
Group
Group component become ButtonGroup
New components
v3
11 March 2021
We upgraded some core libraries:
- React: 17
- xStyled: 2
- Reakit: 1.3.6
- React Final Form: 6.5.2
- DatePicker: 3.6.0
- Downshift: 6.1.0
Breaking Changes
After the upgrade to xStyled 2 there are some breaking changes:
- Change
width&heightprops tow&h, except for DOM elements (e.g. images) - Change
gridGapprop togap - Add
theme.inset(equal to space) fortop,left,right,bottom theme.breakpointsis nowtheme.screenstheme.transitionCurvesis nowtheme.timingFunctionsstyled.boxmight not work as expected anymore
v2
27 July 2020
We have changed the core theme on this new version of Welcome UI, and created our new theme Welcome.
Typography
- Added new font: Work Sans on texts and it's now a variable font
- Reworked Text components with new sizes for Headings
- Added default line height and letter spacing
- Now all our fonts are on our cnd.welcome-ui.com
Colors
- Added
- Primary: 800 / 900
- Light: 100 / 800
- Dark: 100 / 800
- Nude: 900
- Removed
- Secondary colors
- Nude: 300 / 400 / 600
Spacing
xxlis smaller (now 20) and3xlreplaces the oldxxl- Added
3xland4xl
Buttons
- secondary have become tertiary style and vice versa
- Added tertiary-negative
Icons
- Added
- ExpandText
- Diamond
- Caddy
- Factory
- House
- Renamed
- EmployerBranding > Fingerprint
- Ats > Pictures
- Marketplace > Masonry
- WelcomeHome > Teepee
- Removed
- WelcomeKit
Modal
- Added animation on open/close
- Added
Modal.Titlecomponent - Changed the way of use trigger: before
<Button as={Modal.Trigger} {...modal}>and now<Modal.Trigger as={Button} {...modal}>
Link
Removed underline for Text component on a Link, and fixed animation
Tabs
Removed the ::before border element on theme and added the ability to remove the border on tab item from style props
Swiper
Completely changed the way the Swiper works (now uses hooks)
Other theming
- Added global focus on
theme.focus() - Added global card style on
theme.defaultCards - Added global fields style on
theme.defaultFields
styled-components
Added shouldForwardProps from styled components v5.1
And lots of small fixes 🙃