@dnanpm/styleguide 3.11.5 → 3.12.1

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 (49) hide show
  1. package/build/cjs/components/ButtonPrimary/ButtonPrimary.js +1 -0
  2. package/build/cjs/components/ButtonSecondary/ButtonSecondary.js +1 -0
  3. package/build/cjs/components/DateTimePicker/DateTimePicker.js +4 -0
  4. package/build/cjs/components/Drawer/Drawer.js +9 -8
  5. package/build/cjs/components/Floater/Floater.js +3 -3
  6. package/build/cjs/components/Hero/Hero.d.ts +88 -0
  7. package/build/cjs/components/Hero/Hero.js +202 -0
  8. package/build/cjs/components/Input/Input.d.ts +10 -1
  9. package/build/cjs/components/Input/Input.js +4 -2
  10. package/build/cjs/components/MainNavigation/ChildComponents/BusinessMenu.js +7 -7
  11. package/build/cjs/components/MainNavigation/ChildComponents/DesktopMenu.js +7 -7
  12. package/build/cjs/components/MainNavigation/MainNavigation.js +7 -7
  13. package/build/cjs/components/NotificationBadge/NotificationBadge.js +4 -0
  14. package/build/cjs/components/PixelLoader/PixelLoader.js +5 -5
  15. package/build/cjs/components/PriorityNavigation/PriorityNavigation.js +11 -5
  16. package/build/cjs/components/ProgressIndicator/ProgressIndicator.js +18 -18
  17. package/build/cjs/components/SecondaryNavigation/SecondaryNavigation.js +27 -27
  18. package/build/cjs/components/Skeleton/Skeleton.d.ts +63 -0
  19. package/build/cjs/components/Skeleton/Skeleton.js +73 -0
  20. package/build/cjs/components/Textarea/Textarea.js +1 -1
  21. package/build/cjs/components/Tooltip/Tooltip.js +1 -1
  22. package/build/cjs/components/index.d.ts +2 -0
  23. package/build/cjs/index.js +4 -0
  24. package/build/cjs/themes/themeComponents/breakpoints.js +1 -0
  25. package/build/es/components/ButtonPrimary/ButtonPrimary.js +1 -0
  26. package/build/es/components/ButtonSecondary/ButtonSecondary.js +1 -0
  27. package/build/es/components/DateTimePicker/DateTimePicker.js +4 -0
  28. package/build/es/components/Drawer/Drawer.js +9 -8
  29. package/build/es/components/Floater/Floater.js +3 -3
  30. package/build/es/components/Hero/Hero.d.ts +88 -0
  31. package/build/es/components/Hero/Hero.js +194 -0
  32. package/build/es/components/Input/Input.d.ts +10 -1
  33. package/build/es/components/Input/Input.js +4 -2
  34. package/build/es/components/MainNavigation/ChildComponents/BusinessMenu.js +7 -7
  35. package/build/es/components/MainNavigation/ChildComponents/DesktopMenu.js +7 -7
  36. package/build/es/components/MainNavigation/MainNavigation.js +7 -7
  37. package/build/es/components/NotificationBadge/NotificationBadge.js +4 -0
  38. package/build/es/components/PixelLoader/PixelLoader.js +5 -5
  39. package/build/es/components/PriorityNavigation/PriorityNavigation.js +11 -5
  40. package/build/es/components/ProgressIndicator/ProgressIndicator.js +18 -18
  41. package/build/es/components/SecondaryNavigation/SecondaryNavigation.js +27 -27
  42. package/build/es/components/Skeleton/Skeleton.d.ts +63 -0
  43. package/build/es/components/Skeleton/Skeleton.js +65 -0
  44. package/build/es/components/Textarea/Textarea.js +1 -1
  45. package/build/es/components/Tooltip/Tooltip.js +1 -1
  46. package/build/es/components/index.d.ts +2 -0
  47. package/build/es/index.js +2 -0
  48. package/build/es/themes/themeComponents/breakpoints.js +1 -0
  49. package/package.json +7 -6
@@ -0,0 +1,88 @@
1
+ import type { ComponentProps, ComponentType, ReactElement, ReactNode } from 'react';
2
+ import React from 'react';
3
+ import type Label from '../Label/Label';
4
+ import type ButtonPrimary from '../ButtonPrimary/ButtonPrimary';
5
+ import type Button from '../Button/Button';
6
+ interface CommonImageProps {
7
+ [key: string]: unknown;
8
+ src: string;
9
+ alt: string;
10
+ }
11
+ type HeroVariant = 'default' | 'centered' | 'centered-text-left';
12
+ type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
13
+ type ImageComponent = ComponentType<CommonImageProps> | 'img';
14
+ interface HeroProps {
15
+ /**
16
+ * Visual variant of the hero component
17
+ * - default: Content aligned to left with offset
18
+ * - centered: Content and text centered
19
+ * - centered-text-left: Content centered but text left-aligned
20
+ *
21
+ * @default 'default'
22
+ */
23
+ variant?: HeroVariant;
24
+ /**
25
+ * Image component to use for background - can be 'img' for plain HTML or a component like Next.js Image
26
+ * @default 'img'
27
+ */
28
+ Image?: ImageComponent;
29
+ /**
30
+ * Props to pass to the background Image component
31
+ */
32
+ imageProps?: CommonImageProps;
33
+ /**
34
+ * Background color when no image is provided
35
+ */
36
+ backgroundColor?: string;
37
+ /**
38
+ * Enable gradient overlay on background
39
+ *
40
+ * @default false
41
+ */
42
+ hasGradient?: boolean;
43
+ /**
44
+ * Logo image component for logo-style heroes
45
+ */
46
+ LogoImage?: ImageComponent;
47
+ /**
48
+ * Props to pass to the Logo image component
49
+ */
50
+ logoImageProps?: CommonImageProps;
51
+ /**
52
+ * Label content (must use Label component)
53
+ */
54
+ label?: ReactElement<ComponentProps<typeof Label>>;
55
+ /**
56
+ * Main heading content
57
+ */
58
+ heading?: ReactNode;
59
+ /**
60
+ * Heading level for semantic HTML
61
+ *
62
+ * @default 'h1'
63
+ */
64
+ headingLevel?: HeadingLevel;
65
+ /**
66
+ * Description text content
67
+ */
68
+ description?: ReactNode;
69
+ /**
70
+ * Primary call-to-action button
71
+ */
72
+ primaryCta?: ReactElement<ComponentProps<typeof ButtonPrimary>>;
73
+ /**
74
+ * Optional secondary call-to-action button
75
+ */
76
+ secondaryCta?: ReactElement<ComponentProps<typeof Button>>;
77
+ /**
78
+ * Allows to pass a custom className
79
+ */
80
+ className?: string;
81
+ /**
82
+ * Allows to pass testid string for testing purposes
83
+ */
84
+ 'data-testid'?: string;
85
+ }
86
+ declare const Hero: ({ variant, headingLevel, Image, LogoImage, "data-testid": dataTestId, ...props }: HeroProps) => React.JSX.Element;
87
+ /** @component */
88
+ export default Hero;
@@ -0,0 +1,194 @@
1
+ import { __rest } from 'tslib';
2
+ import React__default from 'react';
3
+ import { styled } from 'styled-components';
4
+ import theme from '../../themes/theme.js';
5
+ import { getMultipliedSize } from '../../utils/styledUtils.js';
6
+ import Box from '../Box/Box.js';
7
+
8
+ const HERO_CONSTANTS = {
9
+ mobileHeight: 220,
10
+ desktopMinHeight: 460,
11
+ logoMaxWidth: 500,
12
+ };
13
+ const HeroContainer = styled.div `
14
+ position: relative;
15
+ margin-bottom: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
16
+
17
+ @media (min-width: ${theme.breakpoints.md}px) {
18
+ min-height: calc(
19
+ ${HERO_CONSTANTS.desktopMinHeight}px + ${getMultipliedSize(theme.base.baseHeight, 4)}
20
+ );
21
+ display: flex;
22
+ justify-content: ${({ $variant }) => $variant === 'centered' || $variant === 'centered-text-left' ? 'center' : 'flex-start'};
23
+ }
24
+ `;
25
+ const HeroImage = styled.div `
26
+ position: relative;
27
+ height: ${HERO_CONSTANTS.mobileHeight}px;
28
+ background-color: ${({ $backgroundColor }) => $backgroundColor || 'transparent'};
29
+
30
+ ${({ $hasGradient }) => $hasGradient &&
31
+ `
32
+ linear-gradient(180deg, ${theme.color.background.plum.default}${theme.color.transparency.T0} 0%, ${theme.color.background.plum.default}${theme.color.transparency.T30} 100%);
33
+ background-size: 100% 33.33%;
34
+ background-repeat: no-repeat;
35
+ background-position: bottom;
36
+ `}
37
+
38
+ @media (min-width: ${theme.breakpoints.md}px) {
39
+ height: auto;
40
+ position: absolute;
41
+ top: 0;
42
+ left: 0;
43
+ right: 0;
44
+ bottom: ${getMultipliedSize(theme.base.baseHeight, 4)};
45
+ }
46
+
47
+ img {
48
+ width: 100%;
49
+ height: 100%;
50
+ object-fit: cover;
51
+ display: block;
52
+ }
53
+ `;
54
+ const LogoImageWrap = styled.div `
55
+ position: relative;
56
+ height: 100%;
57
+ width: 100%;
58
+ margin: 0 auto;
59
+ padding: 0 ${getMultipliedSize(theme.base.baseWidth, 1.25)};
60
+ `;
61
+ const LogoImageContainer = styled.div `
62
+ position: absolute;
63
+ top: ${getMultipliedSize(theme.base.baseHeight, 1)};
64
+ bottom: ${getMultipliedSize(theme.base.baseHeight, 4)};
65
+ left: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
66
+ right: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
67
+ padding: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ max-width: ${HERO_CONSTANTS.logoMaxWidth}px;
72
+ margin: 0 auto;
73
+
74
+ img {
75
+ max-width: 100%;
76
+ max-height: 100%;
77
+ object-fit: contain;
78
+ }
79
+
80
+ @media (min-width: ${theme.breakpoints.md}px) {
81
+ top: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
82
+ bottom: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
83
+ right: ${getMultipliedSize(theme.base.baseWidth, 1.25)};
84
+ left: 50%;
85
+ }
86
+
87
+ @media (min-width: ${theme.breakpoints.lg}px) {
88
+ left: calc(min(64%, 750px));
89
+ }
90
+ `;
91
+ const ContentWrap = styled.div `
92
+ width: 100%;
93
+ padding: 0 ${getMultipliedSize(theme.base.baseWidth, 1.25)};
94
+ margin: -${getMultipliedSize(theme.base.baseHeight, 4)} auto 0;
95
+ z-index: 1;
96
+
97
+ @media (min-width: ${theme.breakpoints.md}px) {
98
+ display: flex;
99
+ align-items: flex-end;
100
+ padding: ${getMultipliedSize(theme.base.baseHeight, 4)}
101
+ ${getMultipliedSize(theme.base.baseWidth, 4)} 0;
102
+ margin: 0 auto;
103
+ justify-content: ${({ $variant }) => $variant === 'centered' || $variant === 'centered-text-left' ? 'center' : 'flex-start'};
104
+ }
105
+ `;
106
+ const Content = styled(Box).attrs({
107
+ elevation: 'extraHigh',
108
+ padding: getMultipliedSize(theme.base.baseWidth, 2),
109
+ }) `
110
+ position: relative;
111
+ text-align: ${({ $variant }) => ($variant === 'centered' ? 'center' : 'left')};
112
+
113
+ @media (min-width: ${theme.breakpoints.md}px) {
114
+ padding: ${getMultipliedSize(theme.base.baseWidth, 3)};
115
+ width: 50%;
116
+ max-width: 650px;
117
+ }
118
+
119
+ @media (min-width: ${theme.breakpoints.lg}px) {
120
+ padding: ${getMultipliedSize(theme.base.baseWidth, 4)};
121
+ width: 60%;
122
+ margin-left: ${({ $variant }) => $variant === 'centered' || $variant === 'centered-text-left'
123
+ ? '0'
124
+ : `${getMultipliedSize(theme.base.baseWidth, 4)}`};
125
+ }
126
+ `;
127
+ const LabelContainer = styled.div `
128
+ margin: 0 0 ${getMultipliedSize(theme.base.baseHeight, 1)};
129
+ `;
130
+ const TextContent = styled.div `
131
+ h1,
132
+ h2,
133
+ h3,
134
+ h4,
135
+ h5,
136
+ h6 {
137
+ margin: 0 0 ${getMultipliedSize(theme.base.baseWidth, 1.25)};
138
+ color: ${theme.color.text.black};
139
+ font-family: ${theme.fontFamily.default};
140
+ }
141
+
142
+ p {
143
+ margin: 0 0 ${getMultipliedSize(theme.base.baseWidth, 1)};
144
+ color: ${theme.color.text.black};
145
+ font-family: ${theme.fontFamily.default};
146
+ line-height: ${theme.lineHeight.default};
147
+
148
+ &:last-child {
149
+ margin-bottom: 0;
150
+ }
151
+ }
152
+ `;
153
+ const CtaArea = styled.div `
154
+ margin: ${getMultipliedSize(theme.base.baseWidth, 3)} 0 0;
155
+ display: flex;
156
+ flex-direction: column;
157
+ gap: ${getMultipliedSize(theme.base.baseWidth, 1.5)};
158
+ justify-content: ${({ $variant }) => ($variant === 'centered' ? 'center' : 'flex-start')};
159
+
160
+ @media (min-width: ${theme.breakpoints.md}px) {
161
+ flex-direction: row;
162
+ margin: ${getMultipliedSize(theme.base.baseWidth, 4)} 0 0;
163
+ }
164
+ `;
165
+ const renderImage = (ImageComponent, imageProps) => {
166
+ if (!imageProps)
167
+ return null;
168
+ if (typeof ImageComponent === 'string') {
169
+ // eslint-disable-next-line jsx-a11y/alt-text, react/jsx-props-no-spreading
170
+ return React__default.createElement("img", Object.assign({}, imageProps));
171
+ }
172
+ // eslint-disable-next-line react/jsx-props-no-spreading
173
+ return React__default.createElement(ImageComponent, Object.assign({}, imageProps));
174
+ };
175
+ const Hero = (_a) => {
176
+ var { variant = 'default', headingLevel = 'h1', Image = 'img', LogoImage = 'img', 'data-testid': dataTestId } = _a, props = __rest(_a, ["variant", "headingLevel", "Image", "LogoImage", 'data-testid']);
177
+ const HeadingTag = headingLevel;
178
+ return (React__default.createElement(HeroContainer, { "$variant": variant, className: props.className, "data-testid": dataTestId },
179
+ React__default.createElement(HeroImage, { "$hasGradient": props.hasGradient, "$backgroundColor": props.backgroundColor },
180
+ props.logoImageProps && (React__default.createElement(LogoImageWrap, null,
181
+ React__default.createElement(LogoImageContainer, null, renderImage(LogoImage, props.logoImageProps)))),
182
+ !props.logoImageProps && props.imageProps && renderImage(Image, props.imageProps)),
183
+ React__default.createElement(ContentWrap, { "$variant": variant },
184
+ React__default.createElement(Content, { "$variant": variant },
185
+ props.label && React__default.createElement(LabelContainer, null, props.label),
186
+ React__default.createElement(TextContent, null,
187
+ props.heading && React__default.createElement(HeadingTag, null, props.heading),
188
+ props.description),
189
+ (props.primaryCta || props.secondaryCta) && (React__default.createElement(CtaArea, { "$variant": variant },
190
+ props.primaryCta,
191
+ props.secondaryCta))))));
192
+ };
193
+
194
+ export { Hero as default };
@@ -142,7 +142,16 @@ interface Props {
142
142
  */
143
143
  ariaLabel?: string;
144
144
  /**
145
- * Screen reader label describing the password toggle
145
+ * Screen reader label for "Show password" toggle
146
+ */
147
+ showPasswordLabel?: string;
148
+ /**
149
+ * Screen reader label for "Hide password" toggle
150
+ */
151
+ hidePasswordLabel?: string;
152
+ /**
153
+ * @deprecated Use `showPasswordLabel` and `hidePasswordLabel`
154
+ * Screen reader label describing the password toggle (same for both states)
146
155
  */
147
156
  passwordToggleLabel?: string;
148
157
  /**
@@ -122,7 +122,7 @@ const ErrorMessage = styled(Message) `
122
122
  color: ${theme.color.notification.error};
123
123
  `;
124
124
  const Input = forwardRef((_a, ref) => {
125
- var _b;
125
+ var _b, _c, _d;
126
126
  var { type = 'text', 'data-testid': dataTestId } = _a, props = __rest(_a, ["type", 'data-testid']);
127
127
  const [showPassword, setShowPassword] = useState(false);
128
128
  const togglePasswordVisibility = () => {
@@ -170,7 +170,9 @@ const Input = forwardRef((_a, ref) => {
170
170
  props.readonly ||
171
171
  props.readonlyUnstyled ||
172
172
  props.onClearableButtonClick) && (React__default.createElement(IconWrapper, null,
173
- props.showPasswordToggle && (React__default.createElement(StyledButtonIcon, { icon: showPassword ? EyeOpen : EyeClosed, onClick: togglePasswordVisibility, ariaLabel: props.passwordToggleLabel })),
173
+ props.showPasswordToggle && (React__default.createElement(StyledButtonIcon, { icon: showPassword ? EyeOpen : EyeClosed, onClick: togglePasswordVisibility, ariaLabel: showPassword
174
+ ? ((_c = props.hidePasswordLabel) !== null && _c !== void 0 ? _c : props.passwordToggleLabel)
175
+ : ((_d = props.showPasswordLabel) !== null && _d !== void 0 ? _d : props.passwordToggleLabel) })),
174
176
  (props.status === 'success' || props.status === 'error') && (React__default.createElement(Icon, { "aria-hidden": true, icon: iconsMap[props.status], color: theme.color.notification[props.status] })),
175
177
  (props.disabled || (props.readonly && !props.readonlyUnstyled)) && (React__default.createElement(Icon, { "aria-hidden": true, icon: Lock, className: props.className && `${props.className}-lock-icon` })),
176
178
  props.onClearableButtonClick &&
@@ -5,10 +5,10 @@ import { getMultipliedSize } from '../../../utils/styledUtils.js';
5
5
  import NavContext from '../context/NavContext.js';
6
6
 
7
7
  const BusinessMenuLink = styled.a `
8
- color: ${p => (p.isActive ? theme.color.text.pink : theme.color.text.black)};
8
+ color: ${p => (p.$isActive ? theme.color.text.pink : theme.color.text.black)};
9
9
  display: block;
10
10
  text-decoration: none;
11
- margin: ${p => !p.isMobileMenu
11
+ margin: ${p => !p.$isMobileMenu
12
12
  ? `0 ${getMultipliedSize(theme.base.baseWidth, 1)}`
13
13
  : `${getMultipliedSize(theme.base.baseWidth, 1.25)} ${getMultipliedSize(theme.base.baseWidth, 2)} `};
14
14
  &:hover,
@@ -23,14 +23,14 @@ const BusinessMenuItem = styled.li `
23
23
  overflow: hidden;
24
24
  `;
25
25
  const BusinessMenuList = styled.ul `
26
- display: ${({ isMobileMenu }) => (!isMobileMenu ? 'inline-flex' : 'block')};
26
+ display: ${({ $isMobileMenu }) => (!$isMobileMenu ? 'inline-flex' : 'block')};
27
27
  align-items: center;
28
28
  position: relative;
29
29
  list-style: none;
30
- margin: ${({ isMobileMenu }) => isMobileMenu ? '1rem 0' : `0 ${getMultipliedSize(theme.base.baseWidth, 0.5)}`};
30
+ margin: ${({ $isMobileMenu }) => $isMobileMenu ? '1rem 0' : `0 ${getMultipliedSize(theme.base.baseWidth, 0.5)}`};
31
31
  padding: 0;
32
32
  background-color: ${theme.color.background.white.default};
33
- font-size: ${({ isMobileMenu }) => (isMobileMenu ? theme.fontSize.default : theme.fontSize.s)};
33
+ font-size: ${({ $isMobileMenu }) => $isMobileMenu ? theme.fontSize.default : theme.fontSize.s};
34
34
  height: 100%;
35
35
  `;
36
36
  const BusinessMenu = () => {
@@ -44,8 +44,8 @@ const BusinessMenu = () => {
44
44
  (!items.businessSelector && (businessMenuItems === null || businessMenuItems === void 0 ? void 0 : businessMenuItems.length) > 0)) {
45
45
  return null;
46
46
  }
47
- return (React__default.createElement(BusinessMenuList, { isMobileMenu: isMobileMenu, ref: ref, role: "menubar", "aria-hidden": "false", "data-testid": "business-menu-ul" }, businessMenuItems.map((item, index) => (React__default.createElement(BusinessMenuItem, { className: "menu-item", key: item.businessId, "data-testid": `business-menu-selection-item-${index + 1}`, role: "none" },
48
- React__default.createElement(BusinessMenuLink, { className: "menu-link", href: item.urls[lang], onClick: resetMenuEvents, isActive: item.businessId === currentBusinessId, isMobileMenu: isMobileMenu, role: "menuitem" }, item.titles[lang]))))));
47
+ return (React__default.createElement(BusinessMenuList, { "$isMobileMenu": isMobileMenu, ref: ref, role: "menubar", "aria-hidden": "false", "data-testid": "business-menu-ul" }, businessMenuItems.map((item, index) => (React__default.createElement(BusinessMenuItem, { className: "menu-item", key: item.businessId, "data-testid": `business-menu-selection-item-${index + 1}`, role: "none" },
48
+ React__default.createElement(BusinessMenuLink, { className: "menu-link", href: item.urls[lang], onClick: resetMenuEvents, "$isActive": item.businessId === currentBusinessId, "$isMobileMenu": isMobileMenu, role: "menuitem" }, item.titles[lang]))))));
49
49
  };
50
50
 
51
51
  export { BusinessMenu as default };
@@ -41,10 +41,10 @@ const noAnimation = css `
41
41
  animation: none;
42
42
  `;
43
43
  const SubMenuListRight = styled.div `
44
- display: ${({ menuStates, navItemId }) => menuStates.level1 && menuStates.level2 && menuStates.level2 === navItemId
44
+ display: ${({ $menuStates, $navItemId }) => $menuStates.level1 && $menuStates.level2 && $menuStates.level2 === $navItemId
45
45
  ? 'block'
46
46
  : 'none'};
47
- ${({ menuStates }) => menuStates.level2 && menuStates.animate2 ? fadeRightAnimation : noAnimation};
47
+ ${({ $menuStates }) => $menuStates.level2 && $menuStates.animate2 ? fadeRightAnimation : noAnimation};
48
48
  top: -${getMultipliedSize(theme.base.baseHeight, 2)};
49
49
  padding: ${getMultipliedSize(theme.base.baseHeight, 1)};
50
50
  position: absolute;
@@ -146,10 +146,10 @@ const DesktopMenuItem = styled(MenuItem) `
146
146
  const SubMenuList = styled.div `
147
147
  position: absolute;
148
148
  left: -${getMultipliedSize(theme.base.baseHeight, 0.5)};
149
- display: ${({ menuStates, navItemId }) => (menuStates === null || menuStates === void 0 ? void 0 : menuStates.level1) === navItemId ? 'block' : 'none'};
150
- z-index: ${({ navZIndex }) => navZIndex + 1};
149
+ display: ${({ $menuStates, $navItemId }) => ($menuStates === null || $menuStates === void 0 ? void 0 : $menuStates.level1) === $navItemId ? 'block' : 'none'};
150
+ z-index: ${({ $navZIndex }) => $navZIndex + 1};
151
151
  margin-top: 1px;
152
- ${({ menuStates }) => menuStates.level1 && menuStates.animate2 && !menuStates.level2
152
+ ${({ $menuStates }) => $menuStates.level1 && $menuStates.animate2 && !$menuStates.level2
153
153
  ? fadeInAnimation
154
154
  : noAnimation};
155
155
 
@@ -178,7 +178,7 @@ const SubMenuLevel2 = ({ menuItem }) => {
178
178
  };
179
179
  handleOffSet();
180
180
  }, [menuLevel.level2, menuItem.id]);
181
- return (React__default.createElement(SubMenuListRight, { role: "menu", menuStates: menuLevel, navItemId: menuItem.id, "data-testid": "desktop-nav-menu-ul-level-3", ref: measureRef },
181
+ return (React__default.createElement(SubMenuListRight, { role: "menu", "$menuStates": menuLevel, "$navItemId": menuItem.id, "data-testid": "desktop-nav-menu-ul-level-3", ref: measureRef },
182
182
  React__default.createElement(Box, { elevation: "high", padding: getMultipliedSize(theme.base.baseHeight, 1) },
183
183
  React__default.createElement("ul", null, menuItem.pages.map((item, index) => {
184
184
  const menuUrl = item.urls[lang];
@@ -196,7 +196,7 @@ const SubMenuLevel1 = ({ menuItem }) => {
196
196
  if (!level1HasElements) {
197
197
  return null;
198
198
  }
199
- return (React__default.createElement(SubMenuList, { "aria-hidden": false, menuStates: menuLevel, navItemId: menuItem.id, "data-testid": "desktop-nav-menu-ul-level-2", navZIndex: navZIndex },
199
+ return (React__default.createElement(SubMenuList, { "aria-hidden": false, "$menuStates": menuLevel, "$navItemId": menuItem.id, "$navZIndex": navZIndex, "data-testid": "desktop-nav-menu-ul-level-2" },
200
200
  React__default.createElement(Box, { elevation: "high", padding: getMultipliedSize(theme.base.baseHeight, 1) },
201
201
  React__default.createElement("ul", null, menuItem.pages.map((element, index) => {
202
202
  const menuUrl = element.urls[lang];
@@ -65,7 +65,7 @@ const PageOverlay = styled.div `
65
65
  width: 100%;
66
66
  height: 100%;
67
67
  background: ${theme.color.background.plum.default + theme.color.transparency.T10};
68
- z-index: ${({ navZIndex }) => navZIndex - 1};
68
+ z-index: ${({ $navZIndex }) => $navZIndex - 1};
69
69
  `;
70
70
  const scrollThreshold = 82;
71
71
  const checkThreshold = (prevPos, currPos) => {
@@ -75,7 +75,7 @@ const checkThreshold = (prevPos, currPos) => {
75
75
  return currPos - prevPos > scrollThreshold;
76
76
  };
77
77
  const GlobalNavigationContainer = styled.nav `
78
- z-index: ${({ navZIndex }) => navZIndex};
78
+ z-index: ${({ $navZIndex }) => $navZIndex};
79
79
  position: relative;
80
80
  position: sticky;
81
81
  display: block;
@@ -84,7 +84,7 @@ const GlobalNavigationContainer = styled.nav `
84
84
  width: 100%;
85
85
  background-color: ${theme.color.background.white.default};
86
86
  color: ${theme.color.text.black};
87
- top: ${({ menuLevel, tooltipMenuActive }) => (menuLevel === null || menuLevel === void 0 ? void 0 : menuLevel.hideOnScroll) && !(menuLevel === null || menuLevel === void 0 ? void 0 : menuLevel.level1) && !tooltipMenuActive
87
+ top: ${({ $menuLevel, $tooltipMenuActive }) => ($menuLevel === null || $menuLevel === void 0 ? void 0 : $menuLevel.hideOnScroll) && !($menuLevel === null || $menuLevel === void 0 ? void 0 : $menuLevel.level1) && !$tooltipMenuActive
88
88
  ? `calc(-${desktopNavMaxHeight} - ${ribbonHeight})`
89
89
  : '0px'} !important;
90
90
  transition: top 0.2s ease-in-out;
@@ -96,7 +96,7 @@ const NavigationWrapper = styled.div `
96
96
  max-width: ${getMultipliedSize(theme.base.baseHeight, 256)};
97
97
  margin: 0 auto;
98
98
  height: ${mobileNavMaxHeight};
99
- @media (min-width: ${p => p.collapseSize + 1}px) {
99
+ @media (min-width: ${p => p.$collapseSize + 1}px) {
100
100
  height: ${desktopNavMaxHeight};
101
101
  }
102
102
  `;
@@ -297,13 +297,13 @@ const MainNavigation = ({ items = {}, language = 'fi', zIndex = 1030, languageSe
297
297
  }
298
298
  }, undefined, false, 200);
299
299
  return (React__default.createElement(React__default.Fragment, null,
300
- isPageOverlay && React__default.createElement(PageOverlay, { "data-testid": "navigation-overlay", navZIndex: zIndex }),
301
- React__default.createElement(GlobalNavigationContainer, { className: className, ref: navigationEl, collapseSize: collapseSize, menuLevel: menuLevel, "data-testid": "main-navigation", navZIndex: zIndex, tooltipMenuActive: tooltipMenuActive },
300
+ isPageOverlay && React__default.createElement(PageOverlay, { "data-testid": "navigation-overlay", "$navZIndex": zIndex }),
301
+ React__default.createElement(GlobalNavigationContainer, { className: className, ref: navigationEl, "$collapseSize": collapseSize, "$menuLevel": menuLevel, "$navZIndex": zIndex, "$tooltipMenuActive": tooltipMenuActive, "data-testid": "main-navigation" },
302
302
  React__default.createElement(NavContext.Provider, { value: navigationContext },
303
303
  React__default.createElement(GlobalStyle, null),
304
304
  !items.mainNavigation && notificationText && (React__default.createElement(Notification, { type: "info" }, notificationText)),
305
305
  ribbon && ribbonData && React__default.createElement(Ribbon, { ribbonData: ribbonData, lang: language }),
306
- React__default.createElement(NavigationWrapper, { collapseSize: collapseSize },
306
+ React__default.createElement(NavigationWrapper, { "$collapseSize": collapseSize },
307
307
  React__default.createElement(HeaderNavigationElements, { navElementProps: props }),
308
308
  isMobile && React__default.createElement(RenderMobileMenu, null))))));
309
309
  };
@@ -18,6 +18,10 @@ const NotificationBadgeElement = styled.div `
18
18
  background-color: ${theme.color.notification.error};
19
19
  border-radius: ${theme.radius.circle};
20
20
  `;
21
+ /**
22
+ * TODO: Replace the VisuallyHidden styled component with the global class name.
23
+ * Ticket: https://jira.dna.fi/browse/STYLE-916
24
+ */
21
25
  const VisuallyHidden = styled.span `
22
26
  position: absolute;
23
27
  width: 1px;
@@ -21,7 +21,7 @@ const PixelLoaderWrapper = styled.div `
21
21
  padding: 0.125rem;
22
22
  `;
23
23
  const Pixel = styled.div `
24
- background-color: ${({ color }) => color || theme.color.default.pink};
24
+ background-color: ${({ $color }) => $color || theme.color.default.pink};
25
25
  display: inline-block;
26
26
  width: 0.625rem;
27
27
  height: 0.625rem;
@@ -34,10 +34,10 @@ const PixelLoader = (_a) => {
34
34
  var { className, 'data-testid': dataTestId } = _a, props = __rest(_a, ["className", 'data-testid']);
35
35
  return (React__default.createElement(PixelLoaderWrapper, { className: className, "data-testid": dataTestId },
36
36
  props.label && React__default.createElement("span", { className: "visually-hidden" }, props.label),
37
- React__default.createElement(Pixel, { color: props.color, "$delay": "-0.27" }),
38
- React__default.createElement(Pixel, { color: props.color, "$delay": "-0.18" }),
39
- React__default.createElement(Pixel, { color: props.color, "$delay": "-0.09" }),
40
- React__default.createElement(Pixel, { color: props.color, "$delay": "0" })));
37
+ React__default.createElement(Pixel, { "$color": props.color, "$delay": "-0.27" }),
38
+ React__default.createElement(Pixel, { "$color": props.color, "$delay": "-0.18" }),
39
+ React__default.createElement(Pixel, { "$color": props.color, "$delay": "-0.09" }),
40
+ React__default.createElement(Pixel, { "$color": props.color, "$delay": "0" })));
41
41
  };
42
42
 
43
43
  export { PixelLoader as default };
@@ -56,7 +56,7 @@ const MobileDropdown = styled.button `
56
56
  cursor: pointer;
57
57
  background: none;
58
58
  border: none;
59
- padding: ${({ isCategoryLabel }) => (isCategoryLabel ? '0.5rem' : '0.75rem')} 1.25rem;
59
+ padding: ${({ $isCategoryLabel }) => ($isCategoryLabel ? '0.5rem' : '0.75rem')} 1.25rem;
60
60
  color: ${theme.color.text.pink};
61
61
  font-size: ${theme.fontSize.default};
62
62
  line-height: ${theme.lineHeight.default};
@@ -117,8 +117,10 @@ const DropdownList = styled(CoreULStyles) `
117
117
  background-color: ${theme.color.background.white.default};
118
118
  border: 1px solid ${theme.color.line.L04};
119
119
  border-radius: 0 0 ${theme.radius.default} ${theme.radius.default};
120
- visibility: ${({ isDropdownListOpen }) => (isDropdownListOpen ? 'visible' : 'hidden')};
121
- clip-path: inset(0% 0% ${({ isDropdownListOpen }) => (isDropdownListOpen ? '0%' : '100%')} 0%);
120
+ visibility: ${({ $isDropdownListOpen }) => ($isDropdownListOpen ? 'visible' : 'hidden')};
121
+ clip-path: inset(
122
+ 0% 0% ${({ $isDropdownListOpen }) => ($isDropdownListOpen ? '0%' : '100%')} 0%
123
+ );
122
124
  transition: all 0.2s ease-in-out;
123
125
 
124
126
  ${media.md `
@@ -129,6 +131,10 @@ const DropdownList = styled(CoreULStyles) `
129
131
 
130
132
  ${getElevationShadow({ elevation: 'low' })}
131
133
  `;
134
+ /**
135
+ * TODO: Replace the VisuallyHidden styled component with the global class name.
136
+ * Ticket: https://jira.dna.fi/browse/STYLE-916
137
+ */
132
138
  const VisuallyHidden = styled.span `
133
139
  position: absolute;
134
140
  width: 1px;
@@ -319,7 +325,7 @@ const PriorityNavigation = (_a) => {
319
325
  !isMobile && props.categoryLabel && (React__default.createElement(Category, { id: categoryId }, props.categoryLabel)),
320
326
  React__default.createElement("nav", { "aria-labelledby": categoryId },
321
327
  React__default.createElement(ListsContainer, { ref: listsContainerRef },
322
- isMobile && selectedItem && (React__default.createElement(MobileDropdown, { onClick: toggleMobileNavigation, "aria-label": mobileDropdownAriaLabel !== null && mobileDropdownAriaLabel !== void 0 ? mobileDropdownAriaLabel : `${props.categoryLabel ? `${props.categoryLabel}, ` : ''}${selectedItem}.`, "aria-expanded": isMobileNavigationOpen, isCategoryLabel: Boolean(props.categoryLabel) },
328
+ isMobile && selectedItem && (React__default.createElement(MobileDropdown, { onClick: toggleMobileNavigation, "aria-label": mobileDropdownAriaLabel !== null && mobileDropdownAriaLabel !== void 0 ? mobileDropdownAriaLabel : `${props.categoryLabel ? `${props.categoryLabel}, ` : ''}${selectedItem}.`, "aria-expanded": isMobileNavigationOpen, "$isCategoryLabel": Boolean(props.categoryLabel) },
323
329
  React__default.createElement(MobileDropdownContent, null,
324
330
  props.categoryLabel && React__default.createElement(Category, null, props.categoryLabel),
325
331
  selectedItem),
@@ -346,7 +352,7 @@ const PriorityNavigation = (_a) => {
346
352
  !isMobile && Boolean(state.dropdownItems.length) && (React__default.createElement(React__default.Fragment, null,
347
353
  React__default.createElement("div", null,
348
354
  React__default.createElement(ButtonIcon, { ref: dropdownButtonRef, ariaLabel: openMoreSubpagesAriaLabel, ariaExpanded: isDropdownListOpen, onClick: toggleDropdown, icon: isDropdownListOpen ? ChevronUp : ChevronDown, isReversed: true, "data-testid": "dropdown-button" }, dropdownButtonLabel)),
349
- isDropdownListOpen && (React__default.createElement(DropdownList, { isDropdownListOpen: isDropdownListOpen }, state.dropdownItems.map(dropdownItem => isValidElement(dropdownItem) &&
355
+ isDropdownListOpen && (React__default.createElement(DropdownList, { "$isDropdownListOpen": isDropdownListOpen }, state.dropdownItems.map(dropdownItem => isValidElement(dropdownItem) &&
350
356
  dropdownItem.type === PriorityNavigationItem && (React__default.createElement(PriorityNavigationItem, { id: dropdownItem.props.id, key: dropdownItem.key, onClick: dropdownItem.props.onClick || props.onClick, onKeyDown: dropdownItem.props.onKeyDown ||
351
357
  props.onKeyDown, isActive: dropdownItem.props.isActive, className: dropdownItem.props.className, "data-testid": dropdownItem.props['data-testid'] }, dropdownItem.props.children)))))))))));
352
358
  };
@@ -32,7 +32,7 @@ const ProgressIndicatorItem = styled.li `
32
32
  flex-direction: column;
33
33
  align-items: center;
34
34
  flex: 1.5 1 0%;
35
- gap: ${({ small }) => getMultipliedSize(theme.base.baseWidth, small ? 0.5 : 1)};
35
+ gap: ${({ $small }) => getMultipliedSize(theme.base.baseWidth, $small ? 0.5 : 1)};
36
36
 
37
37
  &:first-of-type {
38
38
  align-items: flex-start;
@@ -62,34 +62,34 @@ const ProgressIndicatorItem = styled.li `
62
62
  `;
63
63
  const ProgressIndicatorItemConnector = styled.div `
64
64
  position: absolute;
65
- top: ${({ small }) => getMultipliedSize(theme.base.baseHeight, small ? 1.5 : 2)};
65
+ top: ${({ $small }) => getMultipliedSize(theme.base.baseHeight, $small ? 1.5 : 2)};
66
66
  left: -50%;
67
67
  right: 50%;
68
68
  width: 100%;
69
- height: ${({ small }) => (small ? '2px' : '4px')};
70
- background-color: ${({ isActive, isCompleted }) => isActive || isCompleted ? theme.color.default.pink : theme.color.line.L02};
69
+ height: ${({ $small }) => ($small ? '2px' : '4px')};
70
+ background-color: ${({ $isActive, $isCompleted }) => $isActive || $isCompleted ? theme.color.default.pink : theme.color.line.L02};
71
71
  `;
72
72
  const ProgressIndicatorItemNumber = styled.div `
73
73
  display: flex;
74
74
  justify-content: center;
75
75
  align-items: center;
76
- font-size: ${({ small }) => (small ? theme.fontSize.s : theme.fontSize.l)};
76
+ font-size: ${({ $small }) => ($small ? theme.fontSize.s : theme.fontSize.l)};
77
77
  font-weight: ${theme.fontWeight.bold};
78
- width: ${({ small }) => getMultipliedSize(theme.base.baseWidth, small ? 3 : 4)};
79
- height: ${({ small }) => getMultipliedSize(theme.base.baseHeight, small ? 3 : 4)};
80
- cursor: ${({ isClickable }) => (isClickable ? 'pointer' : 'default')};
81
- color: ${({ isActive }) => (isActive ? theme.color.text.white : theme.color.text.gray)};
78
+ width: ${({ $small }) => getMultipliedSize(theme.base.baseWidth, $small ? 3 : 4)};
79
+ height: ${({ $small }) => getMultipliedSize(theme.base.baseHeight, $small ? 3 : 4)};
80
+ cursor: ${({ $isClickable }) => ($isClickable ? 'pointer' : 'default')};
81
+ color: ${({ $isActive }) => ($isActive ? theme.color.text.white : theme.color.text.gray)};
82
82
  border-radius: ${theme.radius.circle};
83
- border: ${({ small, isActive, isCompleted, isError }) => `${small ? '3px' : '4px'} solid ${getBorderColor({ isActive, isCompleted, isError })}`};
83
+ border: ${({ $small, $isActive, $isCompleted, $isError }) => `${$small ? '3px' : '4px'} solid ${getBorderColor({ isActive: $isActive, isCompleted: $isCompleted, isError: $isError })}`};
84
84
  z-index: 1;
85
85
 
86
- ${({ isActive, isError }) => getBackgroundColor({ isActive, isError })}
86
+ ${({ $isActive, $isError }) => getBackgroundColor({ isActive: $isActive, isError: $isError })}
87
87
  `;
88
88
  const ProgressIndicatorItemLabel = styled.div `
89
- font-size: ${({ small }) => (small ? theme.fontSize.xs : theme.fontSize.s)};
90
- line-height: ${({ small }) => (small ? theme.lineHeight.xs : theme.lineHeight.s)};
89
+ font-size: ${({ $small }) => ($small ? theme.fontSize.xs : theme.fontSize.s)};
90
+ line-height: ${({ $small }) => ($small ? theme.lineHeight.xs : theme.lineHeight.s)};
91
91
  font-weight: ${theme.fontWeight.bold};
92
- color: ${({ isActive }) => (isActive ? theme.color.text.black : theme.color.text.gray)};
92
+ color: ${({ $isActive }) => ($isActive ? theme.color.text.black : theme.color.text.gray)};
93
93
 
94
94
  ${media.sm `
95
95
  &.visually-hidden {
@@ -125,12 +125,12 @@ const ProgressIndicator = (_a) => {
125
125
  }
126
126
  };
127
127
  const isClickable = isCompleted && Boolean(props.onStepClick);
128
- return (React__default.createElement(ProgressIndicatorItem, { key: id, small: props.small },
129
- index > 0 && (React__default.createElement(ProgressIndicatorItemConnector, { small: props.small, isActive: isActive, isCompleted: isCompleted })),
130
- React__default.createElement(ProgressIndicatorItemNumber, { small: props.small, onClick: handleClick, isActive: isActive, isCompleted: isCompleted, isError: isError, onKeyDown: handleKeyDown, tabIndex: isClickable || isActive ? 0 : -1, isClickable: isClickable, role: "tab", "aria-current": isActive ? 'step' : 'false', "aria-label": isCompleted && props.completedStepLabel
128
+ return (React__default.createElement(ProgressIndicatorItem, { key: id, "$small": props.small },
129
+ index > 0 && (React__default.createElement(ProgressIndicatorItemConnector, { "$small": props.small, "$isActive": isActive, "$isCompleted": isCompleted })),
130
+ React__default.createElement(ProgressIndicatorItemNumber, { "$small": props.small, "$isActive": isActive, "$isCompleted": isCompleted, "$isError": isError, "$isClickable": isClickable, onClick: handleClick, onKeyDown: handleKeyDown, tabIndex: isClickable || isActive ? 0 : -1, role: "tab", "aria-current": isActive ? 'step' : 'false', "aria-label": isCompleted && props.completedStepLabel
131
131
  ? `${label}, ${props.completedStepLabel}`
132
132
  : label }, isCompleted || isError ? (React__default.createElement(Icon, { icon: isError ? Warning : Check, color: isError ? theme.color.text.white : theme.color.text.pink, size: "1rem", "aria-hidden": true })) : (stepNumber)),
133
- label && (React__default.createElement(ProgressIndicatorItemLabel, { "aria-hidden": true, small: props.small, onClick: handleClick, isActive: isActive, className: "visually-hidden" }, label))));
133
+ label && (React__default.createElement(ProgressIndicatorItemLabel, { "aria-hidden": true, "$small": props.small, "$isActive": isActive, onClick: handleClick, className: "visually-hidden" }, label))));
134
134
  });
135
135
  return (React__default.createElement(ProgressIndicatorWrapper, { className: props.className, "data-testid": dataTestId, "aria-label": props.ariaLabel, role: "tablist" }, progressIndicatorItems));
136
136
  };