@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
@@ -6,6 +6,7 @@ var styledComponents = require('styled-components');
6
6
  var theme = require('../../themes/theme.js');
7
7
  var Button = require('../Button/Button.js');
8
8
 
9
+ /* eslint-disable transient-props/transient-props */
9
10
  /** @visibleName Button Primary */
10
11
  const ButtonPrimary = styledComponents.styled(Button.default) `
11
12
  color: ${theme.default.color.text.white};
@@ -6,6 +6,7 @@ var styledComponents = require('styled-components');
6
6
  var theme = require('../../themes/theme.js');
7
7
  var Button = require('../Button/Button.js');
8
8
 
9
+ /* eslint-disable transient-props/transient-props */
9
10
  /** @visibleName Button Secondary */
10
11
  const ButtonSecondary = styledComponents.styled(Button.default) `
11
12
  color: ${theme.default.color.text.plum};
@@ -260,6 +260,10 @@ const CurrentMonth = styledComponents.styled.div `
260
260
  line-height: ${theme.default.lineHeight.default};
261
261
  font-weight: ${theme.default.fontWeight.bold};
262
262
  `;
263
+ /**
264
+ * TODO: Replace the VisuallyHiddenStatus styled component with the global class name.
265
+ * Ticket: https://jira.dna.fi/browse/STYLE-916
266
+ */
263
267
  const VisuallyHiddenStatus = styledComponents.styled.div `
264
268
  position: absolute;
265
269
  left: -9999px;
@@ -49,16 +49,17 @@ const slideIn = styledComponents.keyframes `
49
49
  const StyledReactModal = styledComponents.styled(ReactModal__default.default) `
50
50
  position: fixed;
51
51
  top: 0;
52
- ${({ side }) => (side === 'left' ? 'left: 0' : 'right: 0')};
53
- width: ${({ size }) => sizeMap[size]};
52
+ ${({ $side }) => ($side === 'left' ? 'left: 0' : 'right: 0')};
53
+ width: ${({ $size }) => sizeMap[$size]};
54
54
  height: 100dvh;
55
55
  max-height: 100%;
56
56
  max-width: calc(100vw - ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 4)});
57
- transform: translateX(${({ side }) => side === 'left' && '-'}100%);
58
- animation: ${slideIn} ${({ size }) => animationMap[size][0]}s forwards;
57
+ transform: translateX(${({ $side }) => $side === 'left' && '-'}100%);
58
+ animation: ${slideIn} ${({ $size }) => animationMap[$size][0]}s forwards;
59
59
 
60
60
  &.ReactModal__Content--before-close {
61
- animation: ${({ side }) => slideOut(side)} ${({ size }) => animationMap[size][1]}s forwards;
61
+ animation: ${({ $side }) => slideOut($side)} ${({ $size }) => animationMap[$size][1]}s
62
+ forwards;
62
63
  }
63
64
 
64
65
  @media (max-width: ${sizeMap.small}) {
@@ -152,7 +153,7 @@ const CloseButton = styledComponents.styled(ButtonClose.default) `
152
153
  margin: 0;
153
154
  padding: 0.5rem;
154
155
  border-radius: 0 0 0 ${theme.default.radius.default};
155
- background-color: ${({ variant }) => variant === 'light'
156
+ background-color: ${({ $variant }) => $variant === 'light'
156
157
  ? theme.default.color.background.sand.E01
157
158
  : theme.default.color.background.plum.default};
158
159
  `;
@@ -177,13 +178,13 @@ const Drawer = (_a) => {
177
178
  var { appElement = '#__next', size = 'medium', side = 'right', variant = 'light', padding = '1.25rem', closeButton = true, isClosable = true, 'data-testid': dataTestId } = _a, props = tslib.__rest(_a, ["appElement", "size", "side", "variant", "padding", "closeButton", "isClosable", 'data-testid']);
178
179
  ReactModal__default.default.setAppElement(appElement);
179
180
  return (React__default.default.createElement(React__default.default.Fragment, null,
180
- React__default.default.createElement(StyledReactModal, { id: props.id, isOpen: props.isOpen, overlayElement: ModalOverlay, contentElement: ModalContent, onRequestClose: props.onRequestClose, portalClassName: props.className, contentLabel: props.contentLabel, shouldCloseOnEsc: isClosable, shouldCloseOnOverlayClick: isClosable, closeTimeoutMS: 300, size: size, side: side },
181
+ React__default.default.createElement(StyledReactModal, { id: props.id, isOpen: props.isOpen, overlayElement: ModalOverlay, contentElement: ModalContent, onRequestClose: props.onRequestClose, portalClassName: props.className, contentLabel: props.contentLabel, shouldCloseOnEsc: isClosable, shouldCloseOnOverlayClick: isClosable, closeTimeoutMS: 300, "$size": size, "$side": side },
181
182
  React__default.default.createElement(StyledBox, { "data-testid": dataTestId, elevation: "extraHigh", margin: props.margin, padding: "0" },
182
183
  React__default.default.createElement(ContentContainer, null,
183
184
  React__default.default.createElement(Header, { "$variant": variant, "data-testid": dataTestId && `${dataTestId}-header` },
184
185
  React__default.default.createElement(Title, { "$size": size, "$variant": variant }, props.title),
185
186
  props.subtitle && (React__default.default.createElement(Subtitle, { "$size": size, "$variant": variant }, props.subtitle))),
186
- closeButton && isClosable && (React__default.default.createElement(CloseButton, { onClick: props.onRequestClose, "aria-label": props.closeLabel, "data-testid": dataTestId && `${dataTestId}-close-button`, variant: variant },
187
+ closeButton && isClosable && (React__default.default.createElement(CloseButton, { onClick: props.onRequestClose, "aria-label": props.closeLabel, "data-testid": dataTestId && `${dataTestId}-close-button`, "$variant": variant },
187
188
  React__default.default.createElement(icons.Close, { color: variant === 'light'
188
189
  ? theme.default.color.default.plum
189
190
  : theme.default.color.default.white }))),
@@ -19,12 +19,12 @@ const getInset = ({ position, offset, }) => {
19
19
  };
20
20
  const Element = styledComponents.styled.div `
21
21
  position: sticky;
22
- ${({ zIndex }) => zIndex && `z-index: ${zIndex}`};
23
- ${({ $position, offset }) => getInset({ position: $position, offset })}
22
+ ${({ $zIndex }) => $zIndex && `z-index: ${$zIndex}`};
23
+ ${({ $position = 'top', $offset }) => getInset({ position: $position, offset: $offset })}
24
24
  `;
25
25
  const Floater = (_a) => {
26
26
  var { position = 'top', offset = '0', 'data-testid': dataTestId } = _a, props = tslib.__rest(_a, ["position", "offset", 'data-testid']);
27
- return (React__default.default.createElement(Element, { id: props.id, "$position": position, offset: offset, zIndex: props.zIndex, className: props.className, "data-testid": dataTestId }, props.children));
27
+ return (React__default.default.createElement(Element, { id: props.id, "$position": position, "$offset": offset, "$zIndex": props.zIndex, className: props.className, "data-testid": dataTestId }, props.children));
28
28
  };
29
29
 
30
30
  exports.default = Floater;
@@ -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,202 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var React = require('react');
7
+ var styledComponents = require('styled-components');
8
+ var theme = require('../../themes/theme.js');
9
+ var styledUtils = require('../../utils/styledUtils.js');
10
+ var Box = require('../Box/Box.js');
11
+
12
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
13
+
14
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
15
+
16
+ const HERO_CONSTANTS = {
17
+ mobileHeight: 220,
18
+ desktopMinHeight: 460,
19
+ logoMaxWidth: 500,
20
+ };
21
+ const HeroContainer = styledComponents.styled.div `
22
+ position: relative;
23
+ margin-bottom: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
24
+
25
+ @media (min-width: ${theme.default.breakpoints.md}px) {
26
+ min-height: calc(
27
+ ${HERO_CONSTANTS.desktopMinHeight}px + ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 4)}
28
+ );
29
+ display: flex;
30
+ justify-content: ${({ $variant }) => $variant === 'centered' || $variant === 'centered-text-left' ? 'center' : 'flex-start'};
31
+ }
32
+ `;
33
+ const HeroImage = styledComponents.styled.div `
34
+ position: relative;
35
+ height: ${HERO_CONSTANTS.mobileHeight}px;
36
+ background-color: ${({ $backgroundColor }) => $backgroundColor || 'transparent'};
37
+
38
+ ${({ $hasGradient }) => $hasGradient &&
39
+ `
40
+ linear-gradient(180deg, ${theme.default.color.background.plum.default}${theme.default.color.transparency.T0} 0%, ${theme.default.color.background.plum.default}${theme.default.color.transparency.T30} 100%);
41
+ background-size: 100% 33.33%;
42
+ background-repeat: no-repeat;
43
+ background-position: bottom;
44
+ `}
45
+
46
+ @media (min-width: ${theme.default.breakpoints.md}px) {
47
+ height: auto;
48
+ position: absolute;
49
+ top: 0;
50
+ left: 0;
51
+ right: 0;
52
+ bottom: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 4)};
53
+ }
54
+
55
+ img {
56
+ width: 100%;
57
+ height: 100%;
58
+ object-fit: cover;
59
+ display: block;
60
+ }
61
+ `;
62
+ const LogoImageWrap = styledComponents.styled.div `
63
+ position: relative;
64
+ height: 100%;
65
+ width: 100%;
66
+ margin: 0 auto;
67
+ padding: 0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
68
+ `;
69
+ const LogoImageContainer = styledComponents.styled.div `
70
+ position: absolute;
71
+ top: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 1)};
72
+ bottom: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 4)};
73
+ left: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
74
+ right: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
75
+ padding: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ max-width: ${HERO_CONSTANTS.logoMaxWidth}px;
80
+ margin: 0 auto;
81
+
82
+ img {
83
+ max-width: 100%;
84
+ max-height: 100%;
85
+ object-fit: contain;
86
+ }
87
+
88
+ @media (min-width: ${theme.default.breakpoints.md}px) {
89
+ top: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
90
+ bottom: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
91
+ right: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
92
+ left: 50%;
93
+ }
94
+
95
+ @media (min-width: ${theme.default.breakpoints.lg}px) {
96
+ left: calc(min(64%, 750px));
97
+ }
98
+ `;
99
+ const ContentWrap = styledComponents.styled.div `
100
+ width: 100%;
101
+ padding: 0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
102
+ margin: -${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 4)} auto 0;
103
+ z-index: 1;
104
+
105
+ @media (min-width: ${theme.default.breakpoints.md}px) {
106
+ display: flex;
107
+ align-items: flex-end;
108
+ padding: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 4)}
109
+ ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 4)} 0;
110
+ margin: 0 auto;
111
+ justify-content: ${({ $variant }) => $variant === 'centered' || $variant === 'centered-text-left' ? 'center' : 'flex-start'};
112
+ }
113
+ `;
114
+ const Content = styledComponents.styled(Box.default).attrs({
115
+ elevation: 'extraHigh',
116
+ padding: styledUtils.getMultipliedSize(theme.default.base.baseWidth, 2),
117
+ }) `
118
+ position: relative;
119
+ text-align: ${({ $variant }) => ($variant === 'centered' ? 'center' : 'left')};
120
+
121
+ @media (min-width: ${theme.default.breakpoints.md}px) {
122
+ padding: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 3)};
123
+ width: 50%;
124
+ max-width: 650px;
125
+ }
126
+
127
+ @media (min-width: ${theme.default.breakpoints.lg}px) {
128
+ padding: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 4)};
129
+ width: 60%;
130
+ margin-left: ${({ $variant }) => $variant === 'centered' || $variant === 'centered-text-left'
131
+ ? '0'
132
+ : `${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 4)}`};
133
+ }
134
+ `;
135
+ const LabelContainer = styledComponents.styled.div `
136
+ margin: 0 0 ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 1)};
137
+ `;
138
+ const TextContent = styledComponents.styled.div `
139
+ h1,
140
+ h2,
141
+ h3,
142
+ h4,
143
+ h5,
144
+ h6 {
145
+ margin: 0 0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)};
146
+ color: ${theme.default.color.text.black};
147
+ font-family: ${theme.default.fontFamily.default};
148
+ }
149
+
150
+ p {
151
+ margin: 0 0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1)};
152
+ color: ${theme.default.color.text.black};
153
+ font-family: ${theme.default.fontFamily.default};
154
+ line-height: ${theme.default.lineHeight.default};
155
+
156
+ &:last-child {
157
+ margin-bottom: 0;
158
+ }
159
+ }
160
+ `;
161
+ const CtaArea = styledComponents.styled.div `
162
+ margin: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 3)} 0 0;
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.5)};
166
+ justify-content: ${({ $variant }) => ($variant === 'centered' ? 'center' : 'flex-start')};
167
+
168
+ @media (min-width: ${theme.default.breakpoints.md}px) {
169
+ flex-direction: row;
170
+ margin: ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 4)} 0 0;
171
+ }
172
+ `;
173
+ const renderImage = (ImageComponent, imageProps) => {
174
+ if (!imageProps)
175
+ return null;
176
+ if (typeof ImageComponent === 'string') {
177
+ // eslint-disable-next-line jsx-a11y/alt-text, react/jsx-props-no-spreading
178
+ return React__default.default.createElement("img", Object.assign({}, imageProps));
179
+ }
180
+ // eslint-disable-next-line react/jsx-props-no-spreading
181
+ return React__default.default.createElement(ImageComponent, Object.assign({}, imageProps));
182
+ };
183
+ const Hero = (_a) => {
184
+ var { variant = 'default', headingLevel = 'h1', Image = 'img', LogoImage = 'img', 'data-testid': dataTestId } = _a, props = tslib.__rest(_a, ["variant", "headingLevel", "Image", "LogoImage", 'data-testid']);
185
+ const HeadingTag = headingLevel;
186
+ return (React__default.default.createElement(HeroContainer, { "$variant": variant, className: props.className, "data-testid": dataTestId },
187
+ React__default.default.createElement(HeroImage, { "$hasGradient": props.hasGradient, "$backgroundColor": props.backgroundColor },
188
+ props.logoImageProps && (React__default.default.createElement(LogoImageWrap, null,
189
+ React__default.default.createElement(LogoImageContainer, null, renderImage(LogoImage, props.logoImageProps)))),
190
+ !props.logoImageProps && props.imageProps && renderImage(Image, props.imageProps)),
191
+ React__default.default.createElement(ContentWrap, { "$variant": variant },
192
+ React__default.default.createElement(Content, { "$variant": variant },
193
+ props.label && React__default.default.createElement(LabelContainer, null, props.label),
194
+ React__default.default.createElement(TextContent, null,
195
+ props.heading && React__default.default.createElement(HeadingTag, null, props.heading),
196
+ props.description),
197
+ (props.primaryCta || props.secondaryCta) && (React__default.default.createElement(CtaArea, { "$variant": variant },
198
+ props.primaryCta,
199
+ props.secondaryCta))))));
200
+ };
201
+
202
+ exports.default = Hero;
@@ -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
  /**
@@ -130,7 +130,7 @@ const ErrorMessage = styledComponents.styled(Message) `
130
130
  color: ${theme.default.color.notification.error};
131
131
  `;
132
132
  const Input = React.forwardRef((_a, ref) => {
133
- var _b;
133
+ var _b, _c, _d;
134
134
  var { type = 'text', 'data-testid': dataTestId } = _a, props = tslib.__rest(_a, ["type", 'data-testid']);
135
135
  const [showPassword, setShowPassword] = React.useState(false);
136
136
  const togglePasswordVisibility = () => {
@@ -178,7 +178,9 @@ const Input = React.forwardRef((_a, ref) => {
178
178
  props.readonly ||
179
179
  props.readonlyUnstyled ||
180
180
  props.onClearableButtonClick) && (React__default.default.createElement(IconWrapper, null,
181
- props.showPasswordToggle && (React__default.default.createElement(StyledButtonIcon, { icon: showPassword ? icons.EyeOpen : icons.EyeClosed, onClick: togglePasswordVisibility, ariaLabel: props.passwordToggleLabel })),
181
+ props.showPasswordToggle && (React__default.default.createElement(StyledButtonIcon, { icon: showPassword ? icons.EyeOpen : icons.EyeClosed, onClick: togglePasswordVisibility, ariaLabel: showPassword
182
+ ? ((_c = props.hidePasswordLabel) !== null && _c !== void 0 ? _c : props.passwordToggleLabel)
183
+ : ((_d = props.showPasswordLabel) !== null && _d !== void 0 ? _d : props.passwordToggleLabel) })),
182
184
  (props.status === 'success' || props.status === 'error') && (React__default.default.createElement(Icon.default, { "aria-hidden": true, icon: iconsMap[props.status], color: theme.default.color.notification[props.status] })),
183
185
  (props.disabled || (props.readonly && !props.readonlyUnstyled)) && (React__default.default.createElement(Icon.default, { "aria-hidden": true, icon: icons.Lock, className: props.className && `${props.className}-lock-icon` })),
184
186
  props.onClearableButtonClick &&
@@ -13,10 +13,10 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
13
13
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
14
14
 
15
15
  const BusinessMenuLink = styledComponents.styled.a `
16
- color: ${p => (p.isActive ? theme.default.color.text.pink : theme.default.color.text.black)};
16
+ color: ${p => (p.$isActive ? theme.default.color.text.pink : theme.default.color.text.black)};
17
17
  display: block;
18
18
  text-decoration: none;
19
- margin: ${p => !p.isMobileMenu
19
+ margin: ${p => !p.$isMobileMenu
20
20
  ? `0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1)}`
21
21
  : `${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 1.25)} ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 2)} `};
22
22
  &:hover,
@@ -31,14 +31,14 @@ const BusinessMenuItem = styledComponents.styled.li `
31
31
  overflow: hidden;
32
32
  `;
33
33
  const BusinessMenuList = styledComponents.styled.ul `
34
- display: ${({ isMobileMenu }) => (!isMobileMenu ? 'inline-flex' : 'block')};
34
+ display: ${({ $isMobileMenu }) => (!$isMobileMenu ? 'inline-flex' : 'block')};
35
35
  align-items: center;
36
36
  position: relative;
37
37
  list-style: none;
38
- margin: ${({ isMobileMenu }) => isMobileMenu ? '1rem 0' : `0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 0.5)}`};
38
+ margin: ${({ $isMobileMenu }) => $isMobileMenu ? '1rem 0' : `0 ${styledUtils.getMultipliedSize(theme.default.base.baseWidth, 0.5)}`};
39
39
  padding: 0;
40
40
  background-color: ${theme.default.color.background.white.default};
41
- font-size: ${({ isMobileMenu }) => (isMobileMenu ? theme.default.fontSize.default : theme.default.fontSize.s)};
41
+ font-size: ${({ $isMobileMenu }) => $isMobileMenu ? theme.default.fontSize.default : theme.default.fontSize.s};
42
42
  height: 100%;
43
43
  `;
44
44
  const BusinessMenu = () => {
@@ -52,8 +52,8 @@ const BusinessMenu = () => {
52
52
  (!items.businessSelector && (businessMenuItems === null || businessMenuItems === void 0 ? void 0 : businessMenuItems.length) > 0)) {
53
53
  return null;
54
54
  }
55
- return (React__default.default.createElement(BusinessMenuList, { isMobileMenu: isMobileMenu, ref: ref, role: "menubar", "aria-hidden": "false", "data-testid": "business-menu-ul" }, businessMenuItems.map((item, index) => (React__default.default.createElement(BusinessMenuItem, { className: "menu-item", key: item.businessId, "data-testid": `business-menu-selection-item-${index + 1}`, role: "none" },
56
- React__default.default.createElement(BusinessMenuLink, { className: "menu-link", href: item.urls[lang], onClick: resetMenuEvents, isActive: item.businessId === currentBusinessId, isMobileMenu: isMobileMenu, role: "menuitem" }, item.titles[lang]))))));
55
+ return (React__default.default.createElement(BusinessMenuList, { "$isMobileMenu": isMobileMenu, ref: ref, role: "menubar", "aria-hidden": "false", "data-testid": "business-menu-ul" }, businessMenuItems.map((item, index) => (React__default.default.createElement(BusinessMenuItem, { className: "menu-item", key: item.businessId, "data-testid": `business-menu-selection-item-${index + 1}`, role: "none" },
56
+ React__default.default.createElement(BusinessMenuLink, { className: "menu-link", href: item.urls[lang], onClick: resetMenuEvents, "$isActive": item.businessId === currentBusinessId, "$isMobileMenu": isMobileMenu, role: "menuitem" }, item.titles[lang]))))));
57
57
  };
58
58
 
59
59
  exports.default = BusinessMenu;
@@ -49,10 +49,10 @@ const noAnimation = styledComponents.css `
49
49
  animation: none;
50
50
  `;
51
51
  const SubMenuListRight = styledComponents.styled.div `
52
- display: ${({ menuStates, navItemId }) => menuStates.level1 && menuStates.level2 && menuStates.level2 === navItemId
52
+ display: ${({ $menuStates, $navItemId }) => $menuStates.level1 && $menuStates.level2 && $menuStates.level2 === $navItemId
53
53
  ? 'block'
54
54
  : 'none'};
55
- ${({ menuStates }) => menuStates.level2 && menuStates.animate2 ? fadeRightAnimation : noAnimation};
55
+ ${({ $menuStates }) => $menuStates.level2 && $menuStates.animate2 ? fadeRightAnimation : noAnimation};
56
56
  top: -${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 2)};
57
57
  padding: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 1)};
58
58
  position: absolute;
@@ -154,10 +154,10 @@ const DesktopMenuItem = styledComponents.styled(globalNavStyles.MenuItem) `
154
154
  const SubMenuList = styledComponents.styled.div `
155
155
  position: absolute;
156
156
  left: -${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 0.5)};
157
- display: ${({ menuStates, navItemId }) => (menuStates === null || menuStates === void 0 ? void 0 : menuStates.level1) === navItemId ? 'block' : 'none'};
158
- z-index: ${({ navZIndex }) => navZIndex + 1};
157
+ display: ${({ $menuStates, $navItemId }) => ($menuStates === null || $menuStates === void 0 ? void 0 : $menuStates.level1) === $navItemId ? 'block' : 'none'};
158
+ z-index: ${({ $navZIndex }) => $navZIndex + 1};
159
159
  margin-top: 1px;
160
- ${({ menuStates }) => menuStates.level1 && menuStates.animate2 && !menuStates.level2
160
+ ${({ $menuStates }) => $menuStates.level1 && $menuStates.animate2 && !$menuStates.level2
161
161
  ? fadeInAnimation
162
162
  : noAnimation};
163
163
 
@@ -186,7 +186,7 @@ const SubMenuLevel2 = ({ menuItem }) => {
186
186
  };
187
187
  handleOffSet();
188
188
  }, [menuLevel.level2, menuItem.id]);
189
- return (React__default.default.createElement(SubMenuListRight, { role: "menu", menuStates: menuLevel, navItemId: menuItem.id, "data-testid": "desktop-nav-menu-ul-level-3", ref: measureRef },
189
+ return (React__default.default.createElement(SubMenuListRight, { role: "menu", "$menuStates": menuLevel, "$navItemId": menuItem.id, "data-testid": "desktop-nav-menu-ul-level-3", ref: measureRef },
190
190
  React__default.default.createElement(Box.default, { elevation: "high", padding: styledUtils.getMultipliedSize(theme.default.base.baseHeight, 1) },
191
191
  React__default.default.createElement("ul", null, menuItem.pages.map((item, index) => {
192
192
  const menuUrl = item.urls[lang];
@@ -204,7 +204,7 @@ const SubMenuLevel1 = ({ menuItem }) => {
204
204
  if (!level1HasElements) {
205
205
  return null;
206
206
  }
207
- return (React__default.default.createElement(SubMenuList, { "aria-hidden": false, menuStates: menuLevel, navItemId: menuItem.id, "data-testid": "desktop-nav-menu-ul-level-2", navZIndex: navZIndex },
207
+ return (React__default.default.createElement(SubMenuList, { "aria-hidden": false, "$menuStates": menuLevel, "$navItemId": menuItem.id, "$navZIndex": navZIndex, "data-testid": "desktop-nav-menu-ul-level-2" },
208
208
  React__default.default.createElement(Box.default, { elevation: "high", padding: styledUtils.getMultipliedSize(theme.default.base.baseHeight, 1) },
209
209
  React__default.default.createElement("ul", null, menuItem.pages.map((element, index) => {
210
210
  const menuUrl = element.urls[lang];
@@ -73,7 +73,7 @@ const PageOverlay = styledComponents.styled.div `
73
73
  width: 100%;
74
74
  height: 100%;
75
75
  background: ${theme.default.color.background.plum.default + theme.default.color.transparency.T10};
76
- z-index: ${({ navZIndex }) => navZIndex - 1};
76
+ z-index: ${({ $navZIndex }) => $navZIndex - 1};
77
77
  `;
78
78
  const scrollThreshold = 82;
79
79
  const checkThreshold = (prevPos, currPos) => {
@@ -83,7 +83,7 @@ const checkThreshold = (prevPos, currPos) => {
83
83
  return currPos - prevPos > scrollThreshold;
84
84
  };
85
85
  const GlobalNavigationContainer = styledComponents.styled.nav `
86
- z-index: ${({ navZIndex }) => navZIndex};
86
+ z-index: ${({ $navZIndex }) => $navZIndex};
87
87
  position: relative;
88
88
  position: sticky;
89
89
  display: block;
@@ -92,7 +92,7 @@ const GlobalNavigationContainer = styledComponents.styled.nav `
92
92
  width: 100%;
93
93
  background-color: ${theme.default.color.background.white.default};
94
94
  color: ${theme.default.color.text.black};
95
- top: ${({ menuLevel, tooltipMenuActive }) => (menuLevel === null || menuLevel === void 0 ? void 0 : menuLevel.hideOnScroll) && !(menuLevel === null || menuLevel === void 0 ? void 0 : menuLevel.level1) && !tooltipMenuActive
95
+ top: ${({ $menuLevel, $tooltipMenuActive }) => ($menuLevel === null || $menuLevel === void 0 ? void 0 : $menuLevel.hideOnScroll) && !($menuLevel === null || $menuLevel === void 0 ? void 0 : $menuLevel.level1) && !$tooltipMenuActive
96
96
  ? `calc(-${navigation.desktopNavMaxHeight} - ${navigation.ribbonHeight})`
97
97
  : '0px'} !important;
98
98
  transition: top 0.2s ease-in-out;
@@ -104,7 +104,7 @@ const NavigationWrapper = styledComponents.styled.div `
104
104
  max-width: ${styledUtils.getMultipliedSize(theme.default.base.baseHeight, 256)};
105
105
  margin: 0 auto;
106
106
  height: ${navigation.mobileNavMaxHeight};
107
- @media (min-width: ${p => p.collapseSize + 1}px) {
107
+ @media (min-width: ${p => p.$collapseSize + 1}px) {
108
108
  height: ${navigation.desktopNavMaxHeight};
109
109
  }
110
110
  `;
@@ -305,13 +305,13 @@ const MainNavigation = ({ items = {}, language = 'fi', zIndex = 1030, languageSe
305
305
  }
306
306
  }, undefined, false, 200);
307
307
  return (React__default.default.createElement(React__default.default.Fragment, null,
308
- isPageOverlay && React__default.default.createElement(PageOverlay, { "data-testid": "navigation-overlay", navZIndex: zIndex }),
309
- React__default.default.createElement(GlobalNavigationContainer, { className: className, ref: navigationEl, collapseSize: collapseSize, menuLevel: menuLevel, "data-testid": "main-navigation", navZIndex: zIndex, tooltipMenuActive: tooltipMenuActive },
308
+ isPageOverlay && React__default.default.createElement(PageOverlay, { "data-testid": "navigation-overlay", "$navZIndex": zIndex }),
309
+ React__default.default.createElement(GlobalNavigationContainer, { className: className, ref: navigationEl, "$collapseSize": collapseSize, "$menuLevel": menuLevel, "$navZIndex": zIndex, "$tooltipMenuActive": tooltipMenuActive, "data-testid": "main-navigation" },
310
310
  React__default.default.createElement(NavContext.default.Provider, { value: navigationContext },
311
311
  React__default.default.createElement(GlobalStyle, null),
312
312
  !items.mainNavigation && notificationText && (React__default.default.createElement(Notification.default, { type: "info" }, notificationText)),
313
313
  ribbon && ribbonData && React__default.default.createElement(Ribbon.default, { ribbonData: ribbonData, lang: language }),
314
- React__default.default.createElement(NavigationWrapper, { collapseSize: collapseSize },
314
+ React__default.default.createElement(NavigationWrapper, { "$collapseSize": collapseSize },
315
315
  React__default.default.createElement(HeaderNavigationElements.default, { navElementProps: props }),
316
316
  isMobile && React__default.default.createElement(MobileMenu.default, null))))));
317
317
  };
@@ -26,6 +26,10 @@ const NotificationBadgeElement = styledComponents.styled.div `
26
26
  background-color: ${theme.default.color.notification.error};
27
27
  border-radius: ${theme.default.radius.circle};
28
28
  `;
29
+ /**
30
+ * TODO: Replace the VisuallyHidden styled component with the global class name.
31
+ * Ticket: https://jira.dna.fi/browse/STYLE-916
32
+ */
29
33
  const VisuallyHidden = styledComponents.styled.span `
30
34
  position: absolute;
31
35
  width: 1px;
@@ -29,7 +29,7 @@ const PixelLoaderWrapper = styledComponents.styled.div `
29
29
  padding: 0.125rem;
30
30
  `;
31
31
  const Pixel = styledComponents.styled.div `
32
- background-color: ${({ color }) => color || theme.default.color.default.pink};
32
+ background-color: ${({ $color }) => $color || theme.default.color.default.pink};
33
33
  display: inline-block;
34
34
  width: 0.625rem;
35
35
  height: 0.625rem;
@@ -42,10 +42,10 @@ const PixelLoader = (_a) => {
42
42
  var { className, 'data-testid': dataTestId } = _a, props = tslib.__rest(_a, ["className", 'data-testid']);
43
43
  return (React__default.default.createElement(PixelLoaderWrapper, { className: className, "data-testid": dataTestId },
44
44
  props.label && React__default.default.createElement("span", { className: "visually-hidden" }, props.label),
45
- React__default.default.createElement(Pixel, { color: props.color, "$delay": "-0.27" }),
46
- React__default.default.createElement(Pixel, { color: props.color, "$delay": "-0.18" }),
47
- React__default.default.createElement(Pixel, { color: props.color, "$delay": "-0.09" }),
48
- React__default.default.createElement(Pixel, { color: props.color, "$delay": "0" })));
45
+ React__default.default.createElement(Pixel, { "$color": props.color, "$delay": "-0.27" }),
46
+ React__default.default.createElement(Pixel, { "$color": props.color, "$delay": "-0.18" }),
47
+ React__default.default.createElement(Pixel, { "$color": props.color, "$delay": "-0.09" }),
48
+ React__default.default.createElement(Pixel, { "$color": props.color, "$delay": "0" })));
49
49
  };
50
50
 
51
51
  exports.default = PixelLoader;