v10
How to migrate
v10 of @dnb/eufemia contains breaking changes. As a migration process from v9, you should follow all of the guides below.
Install
To upgrade to @dnb/eufemia v10 with Yarn, run:
yarn workspace <your-workspace> add @dnb/eufemia@10# oryarn add @dnb/eufemia@10
Deprecations
- Helper class
.dnb-sr-only--inline
and SCSS mixinsrOnlyInline
was removed. - Helper class
.dnb-not-sr-only
and SCSS mixinnotSrOnly
was removed. import { SpacingHelper } from '@dnb/eufemia/shared'
was removed due to low usage. Use one of the other exported helpers.- Stylis plugin,
import stylisPlugin from '@dnb/eufemia/style/stylis'
, has been removed.
TypeScript
- Updated multiple types from
string | boolean
toboolean
, as there was a lot of properties who should only support boolean values and not strings. Examples of changes to do would be to find Eufemia components using"false"
or"true"
, and replace it with boolean values. i.e.,vertical="false"
tovertical={false}
orselectall="true"
toselectall={true}
. Following is a non-exhaustive list of affected properties:vertical
prevent_selection
show_label
stretch
no_scroll_animation
disable_filter
more_menu
inherit
import { LocaleProps, DataAttributeTypes, DynamicElement } from '@dnb/eufemia/shared/interfaces'
was removed, and moved to@dnb/eufemia/shared/types
.
Discontinued Internet Explorer (IE) support
The support for Internet Explorer (IE) was removed, as Microsoft formally ended support for IE in June, 2022. Have a look at the supported browsers and platforms.
With that change, Eufemia will support modern browsers that supports ES6.
- The helpers
isIE11
andIS_IE11
was removed.
Web Components support
The support for Web Components, Vue and Angular was discontinued and removed.
Breakpoints
Some breakpoints sizes have changed:
- xx-large:
1280
is now1440
– and80em
is now90em
- x-large:
1152
is now1280
– and72em
is now80em
- large:
960
is now1152
– and60em
is now72em
- medium:
800
is now960
– and50em
is now60em
- Find
$layout-x-large
and replace with$layout-large
- Find
$layout-xx-large
and replace with$layout-x-large
- Find
--layout-x-large
and replace with--layout-large
- Find
--layout-xx-large
and replace with--layout-x-large
NB: Import and use the Eufemia breakpoints directly in your code:
// breakpoints.scss@import '@dnb/eufemia/style/core/utilities';$layout-small: map-get($breakpoints, 'small');$layout-medium: map-get($breakpoints, 'medium');$layout-large: map-get($breakpoints, 'large');
Breaking changes to CSS packages and imports
Find the place where you import the Eufemia styles.
- If you did import them as so:
import '@dnb/eufemia/style'
then you don't need to make any changes.
- If you did import
/core
etc. – then you have to change it to the the import above(see 1.):
import '@dnb/eufemia/style/core'import '@dnb/eufemia/style/themes/ui'
- If you did import the styles as CSS files, then you have to change it to the the import above(see 1.):
import '@dnb/eufemia/style/dnb-ui-core.min.css'import '@dnb/eufemia/style/themes/theme-ui/ui-theme-components.min.css'import '@dnb/eufemia/style/themes/theme-ui/ui-theme-basis.min.css'
- If you did import
/basis
,/components
, andthemes/ui
like so(commonly done inEufemiaStyleImporter
files):
import '@dnb/eufemia/style/basis'import '@dnb/eufemia/style/components'import '@dnb/eufemia/style/themes/ui'
Change to:
import '@dnb/eufemia/style/basis'import '@dnb/eufemia/style/themes/ui'
More details about the change:
- The package
dnb-theme-ui
was renamed toui-theme-basis
. - The package
dnb-ui-components
was renamed and moved inside a theme/style/themes/theme-ui/ui-theme-components.*
. dnb-ui-tags
was renamed and moved from/style/dnb-ui-tags.*
to/style/themes/theme-ui/ui-theme-tags.*
.- NB: When using the
eiendom
theme, the same applies as withui
, just useeiendom
instead.
Properties
The DNB properties.scss
and properties.js
files were moved inside a theme folder /style/themes/theme-ui/properties.*
.
Packages such as:
dnb-ui-basis
dnb-ui-core
do not contain the properties anymore. Properties are only a part of a theme file, such as: /style/themes/theme-ui/ui-theme-basis.*
.
As long as you don't import them in your application, you don't need to make any changes in your codebase.
Following is a non-exhaustive list of examples of changes that could be relevant for your application:
-
Find references to
@dnb/eufemia/style/properties
and replace it with@dnb/eufemia/style/themes/theme-ui/properties
.From:
import properties from '@dnb/eufemia/style/properties'To:
import properties from '@dnb/eufemia/style/themes/theme-ui/properties' -
Find references to
@dnb/eufemia/cjs/style/properties
and replace it with@dnb/eufemia/cjs/style/themes/theme-ui/properties
.From:
import properties from '@dnb/eufemia/style/properties'To:
import properties from '@dnb/eufemia/cjs/style/themes/theme-ui/properties' -
Find references to
@dnb/eufemia/style/dnb-ui-properties.min.css
and replace it with@dnb/eufemia/style/themes/theme-ui/ui-theme-properties.min.css
.
data-testid
in components
Removal of You may use other methods to select and test the inner parts of Eufemia components. You could use e.g. screen.queryByRole
, screen.queryByRole
or document.querySelector
. All of the following components are effected by the change:
SCSS mixins
Find the SCSS @mixin fakeFocus
and replace it with focusRing
.
Find the SCSS @mixin removeFakeFocus
and replace it with removeFocusRing
.
Fonts assets
The DNB font is moved inside a subfolder in /assets/fonts/dnb/...
.
The CSS package dnb-ui-fonts
is moved inside a theme folder /themes/theme-ui
.
CSS Packages such as:
dnb-ui-basis
dnb-ui-core
do not contain the fonts anymore. Fonts are now only a part of a theme file, such as: /style/themes/theme-ui/ui-theme-basis.*
.
As long as you don't import them manually, you don't need to make any changes in your codebase.
Find references to @dnb/eufemia/assets/fonts/
and replace it with @dnb/eufemia/assets/fonts/dnb/
.
For instance, changing from:
import exampleFont from '@dnb/eufemia/assets/fonts/exampleFont.woff2'
To:
import exampleFont from '@dnb/eufemia/assets/fonts/dnb/exampleFont.woff2'
SVG assets
All svg
icon files were moved inside a subfolder in /assets/icons/dnb/...
.
Browser assets
- DNB browser assets (
assets/browser
) have been moved inside a subfolder:assets/browser/dnb
.
Component changes
StepIndicator
- Find the
active_item
property and replace it withcurrent_step
. - Find
use_navigation
and remove it or replace it withmode="strict"
ormode="loose"
. - URL support has been removed – so props like
active_url
,url
,url_future
, andurl_passed
are not supported anymore. You have to handle it by yourself from inside your application. Here is an example.
Table
- Find the
sticky_offset
property and replace it withstickyOffset
. - Find the
/elements/Table
property and replace it with/components/Table
. - Alignment classes are removed (
.dnb-table--left
,.dnb-table--right
and.dnb-table--center
). Use thealign
attribute instead. - Font-sizing classes are removed (
.dnb-table--small
and.dnb-table--x-small
). Use thesize
property instead. - Find and remove
Table.StickyHelper
. - Consider to add a CSS Class to each sub element or import it from the package:
tr
=>.dnb-table__tr
orimport { Tr } from '@dnb/eufemia'
.th
=>.dnb-table__th
orimport { Th } from '@dnb/eufemia'
.td
=>.dnb-table__td
orimport { Td } from '@dnb/eufemia'
.
Slider
- Find the
thump_title
property and replace it withthumbTitle
. - Find the snake_case
add_title
property and replace it withaddTitle
. - Find the snake_case
subtract_title
property and replace it withsubtractTitle
. - Remove
@dnb/eufemia/components/slider/style/dnb-range.min.css
and use the Eufemia Slider component instead. use_scrollwheel
andon_init
properties, as well as theraw_value
event value from Slider was removed in order to support multiple buttons.
Timeline
- Find the
name
property in your Timeline JSX syntax and replace it withtitle
. - Find the
date
property in your Timeline JSX syntax and replace it withsubtitle
.
Anchor
The Anchor was moved form /elements
to /components
.
- Find imports like
from '@dnb/eufemia/elements'
orfrom '@dnb/eufemia/elements/anchor'
, and change the import toimport { Anchor } from '@dnb/eufemia'
. - Find the
target_blank_title
property and replace it withtargetBlankTitle
.
NB: ESM and UMD packages: The Anchor is now also a part if dnb-ui-components
instead of dnb-ui-elements
.
Button
- The padding of the
tertiary
button is removed. Please, check your application and add back the padding of0.5rem
if needed.
Pagination and InfinityScroller
- Replace the deprecated event return parameter
page
withpageNumber
.
Tooltip
- Find the
target_element
property and replace it withtargetElement
. - Find the
target_selector
property and replace it withtargetSelector
. - Find the
animate_position
property and replace it withanimatePosition
. - Find the
fixed_position
property and replace it withfixedPosition
. - Find the
skip_portal
property and replace it withskipPortal
. - Find the
no_animation
property and replace it withnoAnimation
. - Find the
show_delay
property and replace it withshowDelay
. - Find the
hide_delay
property and replace it withhideDelay
.
Icon
- Find the
data-test-id
property and replace it withdata-testid
. The usage ofdata-test-id
will most likely be found in your tests.
Modal, Dialog and Drawer
1.closeButtonAttributes
of Modal, Dialog, and Drawer is deprecated and no longer supported.
-
Modal's
mode
property is now deprecated and removed.<Modal />
now behaves as<Modal mode="custom" />
did previously.When you convert from
<Modal mode="custom" />
simply change to<Modal />
.When you convert from
<Modal mode="drawer" />
to<Drawer />
– follow these steps:-
All
trigger_*
props are not supported for Drawer, usetriggerAttributes
instead to pass in props for the trigger button.- Change prop
trigger_hidden
toomitTriggerButton
to omit the default trigger button from Modal.
- Change prop
-
Only camelCase props are supported for Drawer, so you will need to update the prop names.
-
Modal.Inner
orModal.Content
converts toDrawer.Body
. -
Modal.Bar
converts toDrawer.Navigaton
. -
Modal
was a class component andDrawer
is a functional component.
When you convert from
<Modal />
or<Modal mode="dialog" />
to<Dialog />
– follow these steps:-
All
trigger_*
props are not supported for Dialog, usetriggerAttributes
instead to pass in props for the trigger button.- Change prop
trigger_hidden
toomitTriggerButton
to omit the default trigger button from Modal.
- Change prop
-
Only camelCase props are supported for Dialog, so you will need to update the prop names.
-
Modal.Inner
orModal.Content
converts toDialog.Body
. -
Modal.Bar
converts toDialog.Navigaton
. -
Modal
was a class component andDialog
is a functional component.
-
Lists
- New Definition List layout direction:
direction="horizontal"
includingDl.Item
demo.
InputMasked
- In v10, InputMasked allows leading zeros. To prevent that behavior, the property
allowLeadingZeroes
has changed todisallowLeadingZeroes
.
FormRow
- The FormRow properties
indent
andindent_offset
were removed.
FormStatus
- The FormStatus property
status
was renamed tostate
. Find thestatus
property and replace it withstate
.
Switch
- type
SwitchChecked
was removed. Useboolean
instead.
HelpButton
- The properties
modal_props
andmodal_content
where removed. You may replace these props with the newrender
property. See this example.
Element changes
Paragraph
-
Removed
small
as prop. Usesize="small"
instead. -
Removed deprecated
style_type
prop. Usemedium
,bold
ormodifier
instead.
Img
Changed img_class
prop to be imgClass
.
- Find all instances of
img_class
and change it toimgClass
Extension changes
PaymentCard
Type
'sDNB
value/optionMetalic
was removed.Type
'sSaga
value/optionVisaPlatinum
was removed.Type
'sPB
value/optionPlatinum
was removed.Type
'sMastercard
value/optionDefaultWhite
was removed.Type
'sMastercard
value/optionMetalic
was removed.Type
'sMastercard
value/optionBlackMetalic
was removed.Type
'sVisa
value/optionMetalic
was removed.CardDesign
's value/optionwhite
was removed. If used as a default design, consider replacing it withdefaultDesign
.CardDesign
's value/optionsilver
was removed.ProductType
's value/optionBankAxept
was removed.
April, 20. 2023