@dnanpm/styleguide 3.11.5 → 3.12.0

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 (39) 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/Drawer/Drawer.js +9 -8
  4. package/build/cjs/components/Floater/Floater.js +3 -3
  5. package/build/cjs/components/Hero/Hero.d.ts +88 -0
  6. package/build/cjs/components/Hero/Hero.js +202 -0
  7. package/build/cjs/components/Input/Input.d.ts +10 -1
  8. package/build/cjs/components/Input/Input.js +4 -2
  9. package/build/cjs/components/MainNavigation/ChildComponents/BusinessMenu.js +7 -7
  10. package/build/cjs/components/MainNavigation/ChildComponents/DesktopMenu.js +7 -7
  11. package/build/cjs/components/MainNavigation/MainNavigation.js +7 -7
  12. package/build/cjs/components/PixelLoader/PixelLoader.js +5 -5
  13. package/build/cjs/components/PriorityNavigation/PriorityNavigation.js +7 -5
  14. package/build/cjs/components/ProgressIndicator/ProgressIndicator.js +18 -18
  15. package/build/cjs/components/SecondaryNavigation/SecondaryNavigation.js +27 -27
  16. package/build/cjs/components/Textarea/Textarea.js +1 -1
  17. package/build/cjs/components/index.d.ts +1 -0
  18. package/build/cjs/index.js +2 -0
  19. package/build/cjs/themes/themeComponents/breakpoints.js +1 -0
  20. package/build/es/components/ButtonPrimary/ButtonPrimary.js +1 -0
  21. package/build/es/components/ButtonSecondary/ButtonSecondary.js +1 -0
  22. package/build/es/components/Drawer/Drawer.js +9 -8
  23. package/build/es/components/Floater/Floater.js +3 -3
  24. package/build/es/components/Hero/Hero.d.ts +88 -0
  25. package/build/es/components/Hero/Hero.js +194 -0
  26. package/build/es/components/Input/Input.d.ts +10 -1
  27. package/build/es/components/Input/Input.js +4 -2
  28. package/build/es/components/MainNavigation/ChildComponents/BusinessMenu.js +7 -7
  29. package/build/es/components/MainNavigation/ChildComponents/DesktopMenu.js +7 -7
  30. package/build/es/components/MainNavigation/MainNavigation.js +7 -7
  31. package/build/es/components/PixelLoader/PixelLoader.js +5 -5
  32. package/build/es/components/PriorityNavigation/PriorityNavigation.js +7 -5
  33. package/build/es/components/ProgressIndicator/ProgressIndicator.js +18 -18
  34. package/build/es/components/SecondaryNavigation/SecondaryNavigation.js +27 -27
  35. package/build/es/components/Textarea/Textarea.js +1 -1
  36. package/build/es/components/index.d.ts +1 -0
  37. package/build/es/index.js +1 -0
  38. package/build/es/themes/themeComponents/breakpoints.js +1 -0
  39. package/package.json +3 -2
@@ -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
  };
@@ -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 `
@@ -319,7 +321,7 @@ const PriorityNavigation = (_a) => {
319
321
  !isMobile && props.categoryLabel && (React__default.createElement(Category, { id: categoryId }, props.categoryLabel)),
320
322
  React__default.createElement("nav", { "aria-labelledby": categoryId },
321
323
  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) },
324
+ 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
325
  React__default.createElement(MobileDropdownContent, null,
324
326
  props.categoryLabel && React__default.createElement(Category, null, props.categoryLabel),
325
327
  selectedItem),
@@ -346,7 +348,7 @@ const PriorityNavigation = (_a) => {
346
348
  !isMobile && Boolean(state.dropdownItems.length) && (React__default.createElement(React__default.Fragment, null,
347
349
  React__default.createElement("div", null,
348
350
  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) &&
351
+ isDropdownListOpen && (React__default.createElement(DropdownList, { "$isDropdownListOpen": isDropdownListOpen }, state.dropdownItems.map(dropdownItem => isValidElement(dropdownItem) &&
350
352
  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
353
  props.onKeyDown, isActive: dropdownItem.props.isActive, className: dropdownItem.props.className, "data-testid": dropdownItem.props['data-testid'] }, dropdownItem.props.children)))))))))));
352
354
  };
@@ -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
  };
@@ -10,13 +10,13 @@ import Icon from '../Icon/Icon.js';
10
10
  const SecondaryNavigationWrapper = styled.nav `
11
11
  font-size: ${theme.fontSize.default};
12
12
  padding: 0;
13
- background-color: ${({ whiteBg }) => whiteBg ? theme.color.background.white.default : 'transparent'};
13
+ background-color: ${({ $whiteBg }) => $whiteBg ? theme.color.background.white.default : 'transparent'};
14
14
 
15
- ${({ mobileOnly }) => media.sm `
16
- display: ${mobileOnly ? 'none' : 'inherit'};
15
+ ${({ $mobileOnly }) => media.sm `
16
+ display: ${$mobileOnly ? 'none' : 'inherit'};
17
17
  `};
18
18
 
19
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
19
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
20
20
  border-bottom: 1px solid ${theme.color.line.L03};
21
21
  }
22
22
  `;
@@ -37,7 +37,7 @@ const MobileSelector = styled.button `
37
37
  cursor: pointer;
38
38
  }
39
39
 
40
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
40
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
41
41
  display: none;
42
42
  }
43
43
  `;
@@ -49,14 +49,14 @@ const MobileSelectorArrow = styled.span `
49
49
 
50
50
  .dnasg-icon svg {
51
51
  transition: transform 0.15s ease-in-out;
52
- transform: rotate(${({ isOpen }) => (isOpen ? '180deg' : '0deg')});
52
+ transform: rotate(${({ $isOpen }) => ($isOpen ? '180deg' : '0deg')});
53
53
  }
54
54
  `;
55
55
  const MobileSelectorCheck = styled.span `
56
56
  margin-left: auto;
57
57
 
58
58
  .dnasg-icon {
59
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
59
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
60
60
  display: none;
61
61
  }
62
62
  }
@@ -71,11 +71,11 @@ const SecondaryNavigationList = styled.ul `
71
71
  transition:
72
72
  max-height 0.2s ease-in-out,
73
73
  border-bottom 0.2s linear;
74
- background-color: ${({ isOpen }) => isOpen ? theme.color.background.white.default : 'transparent'};
75
- max-height: ${({ isOpen }) => (isOpen ? '500vh' : '0')};
76
- border-bottom: ${({ isOpen }) => (isOpen ? `1px solid ${theme.color.line.L03}` : 'none')};
74
+ background-color: ${({ $isOpen }) => $isOpen ? theme.color.background.white.default : 'transparent'};
75
+ max-height: ${({ $isOpen }) => ($isOpen ? '500vh' : '0')};
76
+ border-bottom: ${({ $isOpen }) => ($isOpen ? `1px solid ${theme.color.line.L03}` : 'none')};
77
77
 
78
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
78
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
79
79
  padding: 0 ${getMultipliedSize(theme.base.baseWidth, 2)};
80
80
  max-height: none;
81
81
  position: static;
@@ -93,28 +93,28 @@ const SecondaryNavigationListElement = styled.li `
93
93
  text-decoration: none;
94
94
  padding: 1rem 0;
95
95
  justify-content: start;
96
- color: ${({ isActive }) => (isActive ? theme.color.text.pink : theme.color.text.black)};
97
- font-weight: ${({ isActive }) => isActive ? theme.fontWeight.bold : theme.fontWeight.book};
96
+ color: ${({ $isActive }) => ($isActive ? theme.color.text.pink : theme.color.text.black)};
97
+ font-weight: ${({ $isActive }) => $isActive ? theme.fontWeight.bold : theme.fontWeight.book};
98
98
  display: flex;
99
99
  align-items: center;
100
100
 
101
101
  &:hover {
102
102
  color: ${theme.color.text.pink};
103
103
  text-decoration: none;
104
- cursor: ${({ isActive }) => (isActive ? 'auto' : 'pointer')};
104
+ cursor: ${({ $isActive }) => ($isActive ? 'auto' : 'pointer')};
105
105
  }
106
106
 
107
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
107
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
108
108
  padding: ${getMultipliedSize(theme.base.baseHeight, 1.5)} 0;
109
109
  font-weight: ${theme.fontWeight.book};
110
110
  }
111
111
  }
112
112
 
113
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
113
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
114
114
  margin: 0 ${getMultipliedSize(theme.base.baseWidth, 1.5)};
115
115
  white-space: nowrap;
116
116
  transition: border-bottom 0.2s linear;
117
- border-bottom: ${({ isActive }) => isActive ? `1px solid ${theme.color.default.pink}` : 'none'};
117
+ border-bottom: ${({ $isActive }) => $isActive ? `1px solid ${theme.color.default.pink}` : 'none'};
118
118
 
119
119
  &:first-of-type {
120
120
  margin-left: 0;
@@ -127,7 +127,7 @@ const IconWrapper = styled.span `
127
127
  margin-right: ${getMultipliedSize(theme.base.baseWidth, 1)};
128
128
 
129
129
  &:after {
130
- display: ${({ showNotification }) => (showNotification ? 'inline' : 'none')};
130
+ display: ${({ $showNotification }) => ($showNotification ? 'inline' : 'none')};
131
131
  content: '';
132
132
  position: absolute;
133
133
  border-radius: ${theme.radius.circle};
@@ -139,7 +139,7 @@ const IconWrapper = styled.span `
139
139
  background-color: ${theme.color.default.pink};
140
140
  }
141
141
 
142
- @media (min-width: ${({ collapseSize }) => collapseSize + 1}px) {
142
+ @media (min-width: ${({ $collapseSize }) => $collapseSize + 1}px) {
143
143
  display: none;
144
144
  }
145
145
  `;
@@ -168,16 +168,16 @@ const SecondaryNavigation = (_a) => {
168
168
  const selectedElement = (_b = props.data.pages) === null || _b === void 0 ? void 0 : _b.find(listElement => currentUrl === listElement.urls[lang]);
169
169
  const shouldHighlightSelectedElement = (_c = (selectedElement && highlightIds.some(el => el === selectedElement.id))) !== null && _c !== void 0 ? _c : false;
170
170
  const checkIsMenuItemLinkAbsolute = (menuItemLink) => menuItemLink.includes('http');
171
- return (React__default.createElement(SecondaryNavigationWrapper, { ref: ref, collapseSize: collapseSize, "data-testid": dataTestId, className: className, mobileOnly: props.mobileOnly, whiteBg: props.whiteBg },
172
- selectedElement && (React__default.createElement(MobileSelector, { onClick: toggleNav, collapseSize: collapseSize, "data-testid": "secondary-navigation-dropdown-selector" },
171
+ return (React__default.createElement(SecondaryNavigationWrapper, { ref: ref, "data-testid": dataTestId, className: className, "$collapseSize": collapseSize, "$mobileOnly": props.mobileOnly, "$whiteBg": props.whiteBg },
172
+ selectedElement && (React__default.createElement(MobileSelector, { onClick: toggleNav, "$collapseSize": collapseSize, "data-testid": "secondary-navigation-dropdown-selector" },
173
173
  React__default.createElement(MobileSelectorTitleWrapper, null,
174
- (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.icon) && (React__default.createElement(IconWrapper, { showNotification: shouldHighlightSelectedElement, collapseSize: collapseSize },
174
+ (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.icon) && (React__default.createElement(IconWrapper, { "$showNotification": shouldHighlightSelectedElement, "$collapseSize": collapseSize },
175
175
  React__default.createElement(Icon, { name: selectedElement.icon }))),
176
176
  React__default.createElement("span", null, selectedElement.titles[lang])),
177
- React__default.createElement(MobileSelectorArrow, { isOpen: isSecondaryNavOpen },
177
+ React__default.createElement(MobileSelectorArrow, { "$isOpen": isSecondaryNavOpen },
178
178
  React__default.createElement(Icon, { icon: ChevronDown })))),
179
179
  React__default.createElement(SecondaryNavigationList, { id: props.data.name ||
180
- `secondary-navigation-category-${(_d = props.data.categoryId) !== null && _d !== void 0 ? _d : ''}`, isOpen: isSecondaryNavOpen, collapseSize: collapseSize, "max-width": maxWidth, "data-testid": "secondary-nav-menu-ul" }, (_e = props.data.pages) === null || _e === void 0 ? void 0 : _e.map((listElement, index) => {
180
+ `secondary-navigation-category-${(_d = props.data.categoryId) !== null && _d !== void 0 ? _d : ''}`, "$isOpen": isSecondaryNavOpen, "$collapseSize": collapseSize, "max-width": maxWidth, "data-testid": "secondary-nav-menu-ul" }, (_e = props.data.pages) === null || _e === void 0 ? void 0 : _e.map((listElement, index) => {
181
181
  const linkUrl = listElement.urls[lang];
182
182
  const linkTitle = listElement.titles[lang];
183
183
  const iconName = listElement.icon || '';
@@ -186,12 +186,12 @@ const SecondaryNavigation = (_a) => {
186
186
  : currentUrl.indexOf(linkUrl) > -1;
187
187
  const showNotification = highlightIds.some(el => el === listElement.id);
188
188
  const isMenuItemLinkAbsolute = checkIsMenuItemLinkAbsolute(linkUrl);
189
- return (React__default.createElement(SecondaryNavigationListElement, { key: listElement.id, isActive: isActive, onClick: closeNav, collapseSize: collapseSize }, NextJSSecondaryNavLink && !isMenuItemLinkAbsolute ? (React__default.createElement(NextJSSecondaryNavLink, { linkUrl: linkUrl, linkTitle: linkTitle, iconName: iconName, showNotification: showNotification, collapseSize: collapseSize, "data-testid": `secondary-nav-item-link-${index + 1}` }, isActive && (React__default.createElement(MobileSelectorCheck, { collapseSize: collapseSize },
189
+ return (React__default.createElement(SecondaryNavigationListElement, { key: listElement.id, onClick: closeNav, "$isActive": isActive, "$collapseSize": collapseSize }, NextJSSecondaryNavLink && !isMenuItemLinkAbsolute ? (React__default.createElement(NextJSSecondaryNavLink, { linkUrl: linkUrl, linkTitle: linkTitle, iconName: iconName, showNotification: showNotification, collapseSize: collapseSize, "data-testid": `secondary-nav-item-link-${index + 1}` }, isActive && (React__default.createElement(MobileSelectorCheck, { "$collapseSize": collapseSize },
190
190
  React__default.createElement(Icon, { icon: Check }))))) : (React__default.createElement("a", { href: linkUrl, "data-testid": `secondary-nav-item-link-${index + 1}` },
191
- iconName && (React__default.createElement(IconWrapper, { showNotification: showNotification, collapseSize: collapseSize },
191
+ iconName && (React__default.createElement(IconWrapper, { "$showNotification": showNotification, "$collapseSize": collapseSize },
192
192
  React__default.createElement(Icon, { name: iconName }))),
193
193
  React__default.createElement("span", null, linkTitle),
194
- isActive && (React__default.createElement(MobileSelectorCheck, { collapseSize: collapseSize },
194
+ isActive && (React__default.createElement(MobileSelectorCheck, { "$collapseSize": collapseSize },
195
195
  React__default.createElement(Icon, { icon: Check })))))));
196
196
  }))));
197
197
  };
@@ -80,7 +80,7 @@ const Textarea = (_a) => {
80
80
  props.label && (React__default.createElement(LabelText, { htmlFor: props.id, "data-testid": dataTestId && `${dataTestId}-label`, status: isErrorStatus ? 'error' : undefined, isMandatory: props.required }, props.label)),
81
81
  React__default.createElement(StyledTextarea, { id: props.id, name: props.name, ref: inputRef, value: props.value, rows: height, placeholder: props.placeholder, tabIndex: props.tabIndex, onChange: handleChange, onBlur: handleOnBlur, onFocus: props.onFocus, onClick: onClick, onKeyDown: props.onKeyDown, onKeyPress: props.onKeyPress, required: props.required, disabled: props.disabled, "aria-label": !props.label ? ariaLabel : undefined, "aria-invalid": isErrorStatus, "aria-describedby": describedBy, "data-testid": dataTestId }),
82
82
  props.commentMessage && (React__default.createElement(Message, { id: commentId, "data-testid": dataTestId && `${dataTestId}-comment` }, props.commentMessage)),
83
- isErrorStatus && props.errorMessage && (React__default.createElement(ErrorMessage, { id: errorId, "data-testid": dataTestId && `${dataTestId}-error` }, props.errorMessage))));
83
+ isErrorStatus && props.errorMessage && (React__default.createElement(ErrorMessage, { id: errorId, role: "alert", "data-testid": dataTestId && `${dataTestId}-error` }, props.errorMessage))));
84
84
  };
85
85
 
86
86
  export { Textarea as default };
@@ -22,6 +22,7 @@ export { default as EnergyLabel } from './EnergyLabel/EnergyLabel';
22
22
  export { default as Expander } from './Expander/Expander';
23
23
  export { default as Floater } from './Floater/Floater';
24
24
  export { default as Footer } from './Footer/Footer';
25
+ export { default as Hero } from './Hero/Hero';
25
26
  export { default as Icon } from './Icon/Icon';
26
27
  export * from './Icons';
27
28
  export { default as InfoDialog } from './InfoDialog/InfoDialog';
package/build/es/index.js CHANGED
@@ -22,6 +22,7 @@ export { default as EnergyLabel } from './components/EnergyLabel/EnergyLabel.js'
22
22
  export { default as Expander } from './components/Expander/Expander.js';
23
23
  export { default as Floater } from './components/Floater/Floater.js';
24
24
  export { default as Footer } from './components/Footer/Footer.js';
25
+ export { default as Hero } from './components/Hero/Hero.js';
25
26
  export { default as Icon } from './components/Icon/Icon.js';
26
27
  export { default as hlArrowBackSmall } from './components/Icons/Small/hlArrowBackSmall.js';
27
28
  export { default as hlArrowForwardSmall } from './components/Icons/Small/hlArrowForwardSmall.js';
@@ -1,4 +1,5 @@
1
1
  const breakpoints = {
2
+ xxl: 1440,
2
3
  xl: 1200,
3
4
  lg: 992,
4
5
  md: 768,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dnanpm/styleguide",
3
3
  "sideEffects": false,
4
- "version": "v3.11.5",
4
+ "version": "v3.12.0",
5
5
  "main": "build/cjs/index.js",
6
6
  "module": "build/es/index.js",
7
7
  "jsnext:main": "build/es/index.js",
@@ -71,11 +71,12 @@
71
71
  "eslint-config-airbnb-typescript": "^17.1.0",
72
72
  "eslint-config-prettier": "^10.1.8",
73
73
  "eslint-plugin-import": "2.32.0",
74
- "eslint-plugin-jsdoc": "^56.1.2",
74
+ "eslint-plugin-jsdoc": "^60.4.0",
75
75
  "eslint-plugin-jsx-a11y": "^6.10.2",
76
76
  "eslint-plugin-prefer-arrow": "^1.2.3",
77
77
  "eslint-plugin-react": "^7.37.4",
78
78
  "eslint-plugin-react-hooks": "^4.6.2",
79
+ "eslint-plugin-transient-props": "file:eslint-plugins/eslint-plugin-transient-props",
79
80
  "jest": "^30.0.5",
80
81
  "jest-environment-jsdom": "^29.7.0",
81
82
  "jest-styled-components": "^7.2.0",