@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.
- package/build/cjs/components/ButtonPrimary/ButtonPrimary.js +1 -0
- package/build/cjs/components/ButtonSecondary/ButtonSecondary.js +1 -0
- package/build/cjs/components/DateTimePicker/DateTimePicker.js +4 -0
- package/build/cjs/components/Drawer/Drawer.js +9 -8
- package/build/cjs/components/Floater/Floater.js +3 -3
- package/build/cjs/components/Hero/Hero.d.ts +88 -0
- package/build/cjs/components/Hero/Hero.js +202 -0
- package/build/cjs/components/Input/Input.d.ts +10 -1
- package/build/cjs/components/Input/Input.js +4 -2
- package/build/cjs/components/MainNavigation/ChildComponents/BusinessMenu.js +7 -7
- package/build/cjs/components/MainNavigation/ChildComponents/DesktopMenu.js +7 -7
- package/build/cjs/components/MainNavigation/MainNavigation.js +7 -7
- package/build/cjs/components/NotificationBadge/NotificationBadge.js +4 -0
- package/build/cjs/components/PixelLoader/PixelLoader.js +5 -5
- package/build/cjs/components/PriorityNavigation/PriorityNavigation.js +11 -5
- package/build/cjs/components/ProgressIndicator/ProgressIndicator.js +18 -18
- package/build/cjs/components/SecondaryNavigation/SecondaryNavigation.js +27 -27
- package/build/cjs/components/Skeleton/Skeleton.d.ts +63 -0
- package/build/cjs/components/Skeleton/Skeleton.js +73 -0
- package/build/cjs/components/Textarea/Textarea.js +1 -1
- package/build/cjs/components/Tooltip/Tooltip.js +1 -1
- package/build/cjs/components/index.d.ts +2 -0
- package/build/cjs/index.js +4 -0
- package/build/cjs/themes/themeComponents/breakpoints.js +1 -0
- package/build/es/components/ButtonPrimary/ButtonPrimary.js +1 -0
- package/build/es/components/ButtonSecondary/ButtonSecondary.js +1 -0
- package/build/es/components/DateTimePicker/DateTimePicker.js +4 -0
- package/build/es/components/Drawer/Drawer.js +9 -8
- package/build/es/components/Floater/Floater.js +3 -3
- package/build/es/components/Hero/Hero.d.ts +88 -0
- package/build/es/components/Hero/Hero.js +194 -0
- package/build/es/components/Input/Input.d.ts +10 -1
- package/build/es/components/Input/Input.js +4 -2
- package/build/es/components/MainNavigation/ChildComponents/BusinessMenu.js +7 -7
- package/build/es/components/MainNavigation/ChildComponents/DesktopMenu.js +7 -7
- package/build/es/components/MainNavigation/MainNavigation.js +7 -7
- package/build/es/components/NotificationBadge/NotificationBadge.js +4 -0
- package/build/es/components/PixelLoader/PixelLoader.js +5 -5
- package/build/es/components/PriorityNavigation/PriorityNavigation.js +11 -5
- package/build/es/components/ProgressIndicator/ProgressIndicator.js +18 -18
- package/build/es/components/SecondaryNavigation/SecondaryNavigation.js +27 -27
- package/build/es/components/Skeleton/Skeleton.d.ts +63 -0
- package/build/es/components/Skeleton/Skeleton.js +65 -0
- package/build/es/components/Textarea/Textarea.js +1 -1
- package/build/es/components/Tooltip/Tooltip.js +1 -1
- package/build/es/components/index.d.ts +2 -0
- package/build/es/index.js +2 -0
- package/build/es/themes/themeComponents/breakpoints.js +1 -0
- 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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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 }) => (
|
|
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 }) =>
|
|
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 &&
|
|
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"
|
|
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) &&
|
|
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
|
|
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"
|
|
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;
|