@helsenorge/designsystem-react 13.0.0 → 13.1.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 (185) hide show
  1. package/lib/AnchorLink.js +2 -2
  2. package/lib/AnchorLink.js.map +1 -1
  3. package/lib/Avatar.js +2 -2
  4. package/lib/Avatar.js.map +1 -1
  5. package/lib/Badge.js +2 -2
  6. package/lib/Badge.js.map +1 -1
  7. package/lib/Button.js +6 -6
  8. package/lib/Button.js.map +1 -1
  9. package/lib/CHANGELOG.md +29 -1
  10. package/lib/Checkbox.js +6 -6
  11. package/lib/Checkbox.js.map +1 -1
  12. package/lib/Close.js +3 -3
  13. package/lib/Close.js.map +1 -1
  14. package/lib/DictionaryTrigger.js +2 -2
  15. package/lib/DictionaryTrigger.js.map +1 -1
  16. package/lib/Drawer.js +5 -5
  17. package/lib/Drawer.js.map +1 -1
  18. package/lib/Duolist.js +5 -5
  19. package/lib/Duolist.js.map +1 -1
  20. package/lib/ElementHeader.js +36 -17
  21. package/lib/ElementHeader.js.map +1 -1
  22. package/lib/ElementHeaderText.js +4 -4
  23. package/lib/ElementHeaderText.js.map +1 -1
  24. package/lib/ErrorWrapper.js +2 -2
  25. package/lib/ErrorWrapper.js.map +1 -1
  26. package/lib/Expander.js +7 -7
  27. package/lib/Expander.js.map +1 -1
  28. package/lib/FormFieldTag.js +2 -2
  29. package/lib/FormFieldTag.js.map +1 -1
  30. package/lib/FormGroup.js +5 -5
  31. package/lib/FormGroup.js.map +1 -1
  32. package/lib/FormLayout.js +3 -3
  33. package/lib/FormLayout.js.map +1 -1
  34. package/lib/HelpDetails.js +3 -3
  35. package/lib/HelpDetails.js.map +1 -1
  36. package/lib/HelpTriggerIcon.js +2 -2
  37. package/lib/HelpTriggerIcon.js.map +1 -1
  38. package/lib/HelpTriggerStandalone.js +2 -2
  39. package/lib/HelpTriggerStandalone.js.map +1 -1
  40. package/lib/HighlightPanel.js +3 -3
  41. package/lib/HighlightPanel.js.map +1 -1
  42. package/lib/HorizontalScroll.js +4 -4
  43. package/lib/HorizontalScroll.js.map +1 -1
  44. package/lib/Icon.js +2 -2
  45. package/lib/Icon.js.map +1 -1
  46. package/lib/InfoTeaser.js +3 -3
  47. package/lib/InfoTeaser.js.map +1 -1
  48. package/lib/Input.js +4 -4
  49. package/lib/Input.js.map +1 -1
  50. package/lib/Label.js +5 -5
  51. package/lib/Label.js.map +1 -1
  52. package/lib/LinkList.js +52 -25
  53. package/lib/LinkList.js.map +1 -1
  54. package/lib/List.js +2 -2
  55. package/lib/List.js.map +1 -1
  56. package/lib/ListEditMode.js +14 -10
  57. package/lib/ListEditMode.js.map +1 -1
  58. package/lib/MaxCharacters.js +2 -2
  59. package/lib/MaxCharacters.js.map +1 -1
  60. package/lib/Panel.js +12 -12
  61. package/lib/Panel.js.map +1 -1
  62. package/lib/PanelOld.js +14 -14
  63. package/lib/PanelOld.js.map +1 -1
  64. package/lib/PanelTitle.js +2 -2
  65. package/lib/PanelTitle.js.map +1 -1
  66. package/lib/PopOver.js +2 -2
  67. package/lib/PopOver.js.map +1 -1
  68. package/lib/RadioButton.js +5 -5
  69. package/lib/RadioButton.js.map +1 -1
  70. package/lib/Select.js +4 -4
  71. package/lib/Select.js.map +1 -1
  72. package/lib/SingleSelectItem.js +3 -3
  73. package/lib/SingleSelectItem.js.map +1 -1
  74. package/lib/Slider.js +4 -4
  75. package/lib/Slider.js.map +1 -1
  76. package/lib/Spacer.js +2 -2
  77. package/lib/Spacer.js.map +1 -1
  78. package/lib/StatusDot.js +4 -4
  79. package/lib/StatusDot.js.map +1 -1
  80. package/lib/StatusDotList.js +2 -2
  81. package/lib/StatusDotList.js.map +1 -1
  82. package/lib/StepButtons.js +5 -5
  83. package/lib/StepButtons.js.map +1 -1
  84. package/lib/TabList.js +8 -8
  85. package/lib/TabList.js.map +1 -1
  86. package/lib/TabPanel.js +2 -2
  87. package/lib/TabPanel.js.map +1 -1
  88. package/lib/Table.js +2 -2
  89. package/lib/Table.js.map +1 -1
  90. package/lib/TableBody.js +2 -2
  91. package/lib/TableBody.js.map +1 -1
  92. package/lib/TableCell.js +2 -2
  93. package/lib/TableCell.js.map +1 -1
  94. package/lib/TableExpandedRow.js +4 -4
  95. package/lib/TableExpandedRow.js.map +1 -1
  96. package/lib/TableExpanderCell.js +2 -2
  97. package/lib/TableExpanderCell.js.map +1 -1
  98. package/lib/TableHead.js +2 -2
  99. package/lib/TableHead.js.map +1 -1
  100. package/lib/TableHeadCell.js +3 -3
  101. package/lib/TableHeadCell.js.map +1 -1
  102. package/lib/TableRow.js +3 -3
  103. package/lib/TableRow.js.map +1 -1
  104. package/lib/Textarea.js +4 -4
  105. package/lib/Textarea.js.map +1 -1
  106. package/lib/Title.js +2 -2
  107. package/lib/Title.js.map +1 -1
  108. package/lib/Toast.js +3 -3
  109. package/lib/Toast.js.map +1 -1
  110. package/lib/components/ArticleTeaser/index.js +4 -4
  111. package/lib/components/ArticleTeaser/index.js.map +1 -1
  112. package/lib/components/Chip/index.js +2 -2
  113. package/lib/components/Chip/index.js.map +1 -1
  114. package/lib/components/Dropdown/index.js +5 -5
  115. package/lib/components/Dropdown/index.js.map +1 -1
  116. package/lib/components/DropdownOld/index.js +3 -3
  117. package/lib/components/DropdownOld/index.js.map +1 -1
  118. package/lib/components/ElementHeader/ElementHeader.d.ts +4 -2
  119. package/lib/components/ElementHeader/styles.module.scss +30 -0
  120. package/lib/components/ElementHeader/styles.module.scss.d.ts +2 -0
  121. package/lib/components/EmptyState/index.js +2 -2
  122. package/lib/components/EmptyState/index.js.map +1 -1
  123. package/lib/components/ExpanderHierarchy/index.js +7 -7
  124. package/lib/components/ExpanderHierarchy/index.js.map +1 -1
  125. package/lib/components/ExpanderList/index.js +28 -25
  126. package/lib/components/ExpanderList/index.js.map +1 -1
  127. package/lib/components/ExpanderList/styles.module.scss +1 -0
  128. package/lib/components/FavoriteButton/index.js +3 -3
  129. package/lib/components/FavoriteButton/index.js.map +1 -1
  130. package/lib/components/HelpBubble/index.js +3 -3
  131. package/lib/components/HelpBubble/index.js.map +1 -1
  132. package/lib/components/HelpPanel/index.js +2 -2
  133. package/lib/components/HelpPanel/index.js.map +1 -1
  134. package/lib/components/HelpTriggerInline/index.js +2 -2
  135. package/lib/components/HelpTriggerInline/index.js.map +1 -1
  136. package/lib/components/LinkList/LinkList.d.ts +7 -0
  137. package/lib/components/LinkList/index.js +1 -0
  138. package/lib/components/LinkList/resourceHelper.d.ts +3 -0
  139. package/lib/components/LinkList/styles.module.scss +4 -0
  140. package/lib/components/ListEditMode/ListEditMode.d.ts +6 -1
  141. package/lib/components/ListEditMode/styles.module.scss +4 -8
  142. package/lib/components/Loader/index.js +4 -4
  143. package/lib/components/Loader/index.js.map +1 -1
  144. package/lib/components/Modal/index.js +9 -9
  145. package/lib/components/Modal/index.js.map +1 -1
  146. package/lib/components/NotificationPanel/index.js +6 -6
  147. package/lib/components/NotificationPanel/index.js.map +1 -1
  148. package/lib/components/PanelList/index.js +3 -3
  149. package/lib/components/PanelList/index.js.map +1 -1
  150. package/lib/components/PanelListOld/index.js +2 -2
  151. package/lib/components/PanelListOld/index.js.map +1 -1
  152. package/lib/components/PopMenu/index.js +4 -3
  153. package/lib/components/PopMenu/index.js.map +1 -1
  154. package/lib/components/Progressbar/index.js +2 -2
  155. package/lib/components/Progressbar/index.js.map +1 -1
  156. package/lib/components/PromoPanel/index.js +2 -2
  157. package/lib/components/PromoPanel/index.js.map +1 -1
  158. package/lib/components/ServiceMessage/index.js +71 -33
  159. package/lib/components/ServiceMessage/index.js.map +1 -1
  160. package/lib/components/ServiceMessage/styles.module.scss +87 -56
  161. package/lib/components/ServiceMessage/styles.module.scss.d.ts +5 -0
  162. package/lib/components/SharingStatus/index.js +4 -4
  163. package/lib/components/SharingStatus/index.js.map +1 -1
  164. package/lib/components/Step/index.js +2 -2
  165. package/lib/components/Step/index.js.map +1 -1
  166. package/lib/components/Stepper/index.js +2 -2
  167. package/lib/components/Stepper/index.js.map +1 -1
  168. package/lib/components/StickyNote/index.js +8 -8
  169. package/lib/components/StickyNote/index.js.map +1 -1
  170. package/lib/components/Tabs/index.js +4 -4
  171. package/lib/components/Tabs/index.js.map +1 -1
  172. package/lib/components/Tag/index.js +2 -2
  173. package/lib/components/Tag/index.js.map +1 -1
  174. package/lib/components/Tile/index.js +4 -4
  175. package/lib/components/Tile/index.js.map +1 -1
  176. package/lib/components/Toggle/index.js +9 -9
  177. package/lib/components/Toggle/index.js.map +1 -1
  178. package/lib/components/Validation/index.js +2 -2
  179. package/lib/components/Validation/index.js.map +1 -1
  180. package/lib/designsystem-react.css +8 -0
  181. package/lib/resources/HN.Designsystem.LinkList.en-GB.json.d.ts +6 -0
  182. package/lib/resources/HN.Designsystem.LinkList.nb-NO.json.d.ts +6 -0
  183. package/lib/scss/supernova/styles/colors.css +8 -0
  184. package/package.json +1 -1
  185. package/scss/supernova/styles/colors.css +8 -0
@@ -1,3 +1,5 @@
1
+ import "../../uuid.js";
2
+ import "../../environment.js";
1
3
  import { a as IconSize } from "../../constants2.js";
2
4
  import { t as usePseudoClasses } from "../../usePseudoClasses.js";
3
5
  import { t as breakpoints } from "../../grid.js";
@@ -9,30 +11,78 @@ import "../../spacing.js";
9
11
  import "../../currys.js";
10
12
  import "../../refs.js";
11
13
  import { t as Icon_default } from "../../Icon.js";
14
+ import "../../Check.js";
15
+ import "../../Avatar.js";
12
16
  import "../../CheckFill.js";
13
17
  import "../../ErrorSignFill.js";
14
18
  import "../../InfoSignFill.js";
15
19
  import "../../TriangleX.js";
16
20
  import { t as NotificationBadge_default } from "../../NotificationBadge.js";
21
+ import "../../Badge.js";
22
+ import "../../_rolldown_dynamic_import_helper.js";
23
+ import "../../useIsServerSide.js";
24
+ import "../../LazyIcon.js";
25
+ import "../../component.js";
17
26
  import { n as useBreakpoint } from "../../useBreakpoint.js";
18
27
  import "../../useIsMobileBreakpoint.js";
19
28
  import { n as getAriaLabelAttributes } from "../../accessibility.js";
29
+ import "../../Spacer.js";
30
+ import "../../useElementList.js";
31
+ import "../../useFocusableElements.js";
32
+ import "../../useFocusToggle.js";
33
+ import "../../focus.js";
34
+ import "../../useFocusTrap.js";
35
+ import "../../useIntersectionObserver.js";
36
+ import "../../useIsVisible.js";
37
+ import "../../debounce.js";
38
+ import "../../useLayoutEvent.js";
39
+ import "../../usePrevious.js";
40
+ import "../../useSize.js";
41
+ import "../../useResizeObserver.js";
42
+ import "../../useToggle.js";
43
+ import "../../useKeyboardEvent.js";
44
+ import "../../useOutsideEvent.js";
45
+ import "../../mobile.js";
46
+ import "../../src.js";
47
+ import "../../StatusDot.js";
20
48
  import { t as X_default } from "../../X.js";
21
49
  import { t as Close_default } from "../../Close.js";
22
50
  import { t as ChevronDown_default } from "../../ChevronDown.js";
23
51
  import { t as ChevronUp_default } from "../../ChevronUp.js";
52
+ import "../../Duolist.js";
53
+ import "../../Highlighter.js";
54
+ import "../../ElementHeaderText.js";
55
+ import "../../StatusDotList.js";
56
+ import { i as renderElementHeader } from "../../ElementHeader.js";
24
57
  import { t as Forward_default } from "../../Forward.js";
25
58
  import React, { useId, useState } from "react";
26
- import cn from "classnames";
59
+ import classNames from "classnames";
27
60
  import { jsx, jsxs } from "react/jsx-runtime";
28
61
  import styles from "./styles.module.scss";
29
62
  var Label = ({ label, variant, id, hasExpander, isExpanded, dismissable, onExpand, onDismiss, closeBtnText }) => {
30
63
  const breakpoint = useBreakpoint();
31
64
  const { isHovered, refObject } = usePseudoClasses();
32
65
  const iconSize = breakpoint < breakpoints.lg ? IconSize.XSmall : IconSize.Small;
33
- const CustomTag = hasExpander ? "button" : "span";
66
+ const labelContainerClasses = classNames(styles["service-message__label-container"], styles[`service-message__label-container--${variant}`], hasExpander && styles[`service-message__label-container--has-expander`]);
67
+ const elementHeader = renderElementHeader(label, {
68
+ titleHtmlMarkup: "span",
69
+ isHovered,
70
+ size: "compact",
71
+ parentType: "expanderlist",
72
+ chevronIcon: hasExpander ? isExpanded ? ChevronUp_default : ChevronDown_default : void 0,
73
+ icon: /* @__PURE__ */ jsx(NotificationBadge_default, {
74
+ variant,
75
+ size: iconSize,
76
+ isHovered: hasExpander && isHovered
77
+ }),
78
+ closeButton: !hasExpander && dismissable ? /* @__PURE__ */ jsx(Close_default, {
79
+ onClick: onDismiss,
80
+ ariaLabel: closeBtnText,
81
+ className: styles["service-message__close"]
82
+ }) : void 0
83
+ });
34
84
  return /* @__PURE__ */ jsx("div", {
35
- className: cn(styles["service-message__label-container"], hasExpander && styles[`service-message__label-container--has-expander`]),
85
+ className: labelContainerClasses,
36
86
  ref: refObject,
37
87
  children: /* @__PURE__ */ jsx("div", {
38
88
  className: styles["service-message__container"],
@@ -40,35 +90,23 @@ var Label = ({ label, variant, id, hasExpander, isExpanded, dismissable, onExpan
40
90
  className: styles["service-message__row"],
41
91
  children: /* @__PURE__ */ jsx("div", {
42
92
  className: styles["service-message__col"],
43
- children: /* @__PURE__ */ jsxs("div", {
93
+ children: /* @__PURE__ */ jsx("div", {
44
94
  className: styles["service-message__label"],
45
- children: [
46
- /* @__PURE__ */ jsx(NotificationBadge_default, {
47
- variant,
48
- size: iconSize,
49
- isHovered
50
- }),
51
- /* @__PURE__ */ jsx("h1", {
52
- className: styles["service-message__title"],
53
- id,
54
- children: /* @__PURE__ */ jsx(CustomTag, {
55
- className: styles["service-message__toggle"],
56
- onClick: hasExpander ? onExpand : void 0,
57
- "aria-expanded": hasExpander ? isExpanded : void 0,
58
- children: label
59
- })
60
- }),
61
- hasExpander && /* @__PURE__ */ jsx(Icon_default, {
62
- size: iconSize,
63
- svgIcon: isExpanded ? ChevronUp_default : ChevronDown_default,
64
- isHovered
65
- }),
66
- !hasExpander && dismissable && /* @__PURE__ */ jsx(Close_default, {
67
- onClick: onDismiss,
68
- ariaLabel: closeBtnText,
69
- className: styles["service-message__close"]
95
+ children: hasExpander ? /* @__PURE__ */ jsx("h1", {
96
+ className: styles["service-message__title"],
97
+ id,
98
+ children: /* @__PURE__ */ jsx("button", {
99
+ type: "button",
100
+ className: styles["service-message__toggle"],
101
+ onClick: onExpand,
102
+ "aria-expanded": isExpanded,
103
+ children: elementHeader
70
104
  })
71
- ]
105
+ }) : /* @__PURE__ */ jsx("h1", {
106
+ className: styles["service-message__title"],
107
+ id,
108
+ children: elementHeader
109
+ })
72
110
  })
73
111
  })
74
112
  })
@@ -93,7 +131,7 @@ var Content = ({ info, extraInfo, urlTitle, url, target, dismissable, closeBtnTe
93
131
  children: info
94
132
  }),
95
133
  extraInfo && /* @__PURE__ */ jsx("p", {
96
- className: cn(styles["service-message__info"], styles["service-message__info--extra"]),
134
+ className: classNames(styles["service-message__info"], styles["service-message__info--extra"]),
97
135
  children: extraInfo
98
136
  }),
99
137
  /* @__PURE__ */ jsxs("div", {
@@ -111,7 +149,7 @@ var Content = ({ info, extraInfo, urlTitle, url, target, dismissable, closeBtnTe
111
149
  })]
112
150
  }), dismissable && /* @__PURE__ */ jsxs("button", {
113
151
  ref: closeButtonRef,
114
- className: cn(styles["service-message__action"], styles["service-message__action--close"]),
152
+ className: classNames(styles["service-message__action"], styles["service-message__action--close"]),
115
153
  "aria-label": closeBtnText,
116
154
  onClick: onDismiss,
117
155
  children: [closeBtnText, /* @__PURE__ */ jsx(Icon_default, {
@@ -141,7 +179,7 @@ var ServiceMessage = ({ label, dismissable = true, onDismiss, info, extraInfo, u
141
179
  if (hasExpander) setIsExpanded(!isExpanded);
142
180
  };
143
181
  return /* @__PURE__ */ jsxs("div", {
144
- className: cn(styles["service-message"], styles[`service-message--${variant}`]),
182
+ className: classNames(styles["service-message"], styles[`service-message--${variant}`]),
145
183
  role: ariaRole,
146
184
  ...ariaLabelAttributes,
147
185
  "data-testid": testId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Label: React.FC<LabelProps>","Content: React.FC<ContentProps>","ServiceMessage: React.FC<ServiceMessageProps>"],"sources":["../../../src/components/ServiceMessage/ServiceMessage.tsx","../../../src/components/ServiceMessage/index.ts"],"sourcesContent":["import React, { useId, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { getColor } from '../../theme/currys';\nimport { breakpoints } from '../../theme/grid';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\nimport { AnchorLinkTargets } from '../AnchorLink';\nimport NotificationBadge from '../Badge/NotificationBadge';\nimport Close from '../Close';\nimport Icon, { IconSize } from '../Icon';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\nimport Forward from '../Icons/Forward';\nimport X from '../Icons/X';\nimport { NotificationPanelVariants } from '../NotificationPanel';\n\nimport styles from './styles.module.scss';\n\ninterface LabelProps {\n label: string;\n variant: NotificationPanelVariants;\n id: string;\n hasExpander: boolean;\n isExpanded: boolean;\n dismissable: boolean;\n onExpand: () => void;\n onDismiss?: () => void;\n closeBtnText?: string;\n}\n\nconst Label: React.FC<LabelProps> = ({ label, variant, id, hasExpander, isExpanded, dismissable, onExpand, onDismiss, closeBtnText }) => {\n const breakpoint = useBreakpoint();\n const { isHovered, refObject } = usePseudoClasses<HTMLDivElement>();\n\n const iconSize = breakpoint < breakpoints.lg ? IconSize.XSmall : IconSize.Small;\n const CustomTag = hasExpander ? 'button' : 'span';\n\n const labelContainerClasses = classNames(\n styles['service-message__label-container'],\n hasExpander && styles[`service-message__label-container--has-expander`]\n );\n\n return (\n <div className={labelContainerClasses} ref={refObject}>\n <div className={styles['service-message__container']}>\n <div className={styles['service-message__row']}>\n <div className={styles['service-message__col']}>\n <div className={styles['service-message__label']}>\n <NotificationBadge variant={variant} size={iconSize} isHovered={isHovered} />\n <h1 className={styles['service-message__title']} id={id}>\n <CustomTag\n className={styles['service-message__toggle']}\n onClick={hasExpander ? onExpand : undefined}\n aria-expanded={hasExpander ? isExpanded : undefined}\n >\n {label}\n </CustomTag>\n </h1>\n {hasExpander && <Icon size={iconSize} svgIcon={isExpanded ? ChevronUp : ChevronDown} isHovered={isHovered} />}\n {!hasExpander && dismissable && (\n <Close onClick={onDismiss} ariaLabel={closeBtnText} className={styles['service-message__close']} />\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\ninterface ContentProps {\n info?: string;\n extraInfo?: string;\n urlTitle?: string;\n url?: string;\n target?: AnchorLinkTargets;\n dismissable: boolean;\n onDismiss?: () => void;\n closeBtnText?: string;\n}\n\nconst Content: React.FC<ContentProps> = ({ info, extraInfo, urlTitle, url, target, dismissable, closeBtnText, onDismiss }) => {\n const { refObject: readMoreRef, isHovered: readMoreHoverRefIsHovered } = usePseudoClasses<HTMLAnchorElement>();\n const { refObject: closeButtonRef, isHovered: closeButtonIsHovered } = usePseudoClasses<HTMLButtonElement>();\n\n const hasUrl = url && urlTitle;\n\n return (\n <div className={styles['service-message__container']}>\n <div className={styles['service-message__row']}>\n <div className={styles['service-message__col']}>\n <div className={styles['service-message__content']}>\n {info && <p className={styles['service-message__info']}>{info}</p>}\n {extraInfo && (\n <p className={classNames(styles['service-message__info'], styles['service-message__info--extra'])}>{extraInfo}</p>\n )}\n <div className={styles['service-message__actions']}>\n {hasUrl && (\n <a className={styles['service-message__action']} href={url} ref={readMoreRef} target={target}>\n {urlTitle}\n <Icon size={IconSize.XSmall} svgIcon={Forward} color={getColor('blueberry', 700)} isHovered={readMoreHoverRefIsHovered} />\n </a>\n )}\n\n {dismissable && (\n <button\n ref={closeButtonRef}\n className={classNames(styles['service-message__action'], styles['service-message__action--close'])}\n aria-label={closeBtnText}\n onClick={onDismiss}\n >\n {closeBtnText}\n <Icon size={IconSize.XSmall} svgIcon={X} color={getColor('blueberry', 700)} isHovered={closeButtonIsHovered} />\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport interface ServiceMessageProps {\n /** Sets a label for the notification panel. */\n label: string;\n /** String displayed in service-message when expanded */\n info?: string;\n /** String displayed in service-message when expanded, with a smaller font */\n extraInfo?: string;\n /** function that runs on dismiss */\n onDismiss?: () => void;\n /** Allows for dismiss to be an option, also for ServiceMessage with only label as content */\n dismissable?: boolean;\n /** Makes expander be open from start. */\n expanderOpenFromStart?: boolean;\n /** Name that describes a url-link for the user*/\n urlTitle?: string;\n /** Url for further information*/\n url?: string;\n /** Sets target for the anchorlink to the url*/\n target?: AnchorLinkTargets;\n /** Text on close-button in service messages. */\n closeBtnText?: string;\n /** Changes the visual representation. */\n variant?: NotificationPanelVariants;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst ServiceMessage: React.FC<ServiceMessageProps> = ({\n label,\n dismissable = true,\n onDismiss,\n info,\n extraInfo,\n urlTitle,\n url,\n target = '_self',\n closeBtnText = 'fjern melding',\n expanderOpenFromStart = false,\n variant = 'error',\n testId,\n}) => {\n const [isExpanded, setIsExpanded] = useState<boolean>(expanderOpenFromStart);\n\n const labelId = useId();\n const hasExpander = !!info || !!extraInfo;\n\n const ariaRole = variant === 'error' ? 'alert' : 'region';\n const ariaLabelAttributes = getAriaLabelAttributes({ label, id: labelId });\n\n const handleClick = (): void => {\n if (hasExpander) setIsExpanded(!isExpanded);\n };\n\n const classes = classNames(styles['service-message'], styles[`service-message--${variant}`]);\n\n return (\n <div className={classes} role={ariaRole} {...ariaLabelAttributes} data-testid={testId}>\n <Label\n label={label}\n variant={variant}\n id={labelId}\n hasExpander={hasExpander}\n isExpanded={isExpanded}\n dismissable={dismissable}\n onExpand={handleClick}\n onDismiss={onDismiss}\n closeBtnText={closeBtnText}\n />\n {hasExpander && isExpanded && (\n <Content\n info={info}\n extraInfo={extraInfo}\n urlTitle={urlTitle}\n url={url}\n target={target}\n dismissable={dismissable}\n onDismiss={onDismiss}\n closeBtnText={closeBtnText}\n />\n )}\n </div>\n );\n};\n\nexport default ServiceMessage;\n","import ServiceMessage from './ServiceMessage';\nexport * from './ServiceMessage';\nexport default ServiceMessage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["Label: React.FC<LabelProps>","Content: React.FC<ContentProps>","ServiceMessage: React.FC<ServiceMessageProps>"],"sources":["../../../src/components/ServiceMessage/ServiceMessage.tsx","../../../src/components/ServiceMessage/index.ts"],"sourcesContent":["import React, { useId, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { getColor } from '../../theme/currys';\nimport { breakpoints } from '../../theme/grid';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\nimport { AnchorLinkTargets } from '../AnchorLink';\nimport NotificationBadge from '../Badge/NotificationBadge';\nimport Close from '../Close';\nimport { renderElementHeader } from '../ElementHeader/ElementHeader';\nimport Icon, { IconSize } from '../Icon';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\nimport Forward from '../Icons/Forward';\nimport X from '../Icons/X';\nimport { NotificationPanelVariants } from '../NotificationPanel';\n\nimport styles from './styles.module.scss';\n\ninterface LabelProps {\n label: string;\n variant: NotificationPanelVariants;\n id: string;\n hasExpander: boolean;\n isExpanded: boolean;\n dismissable: boolean;\n onExpand: () => void;\n onDismiss?: () => void;\n closeBtnText?: string;\n}\n\nconst Label: React.FC<LabelProps> = ({ label, variant, id, hasExpander, isExpanded, dismissable, onExpand, onDismiss, closeBtnText }) => {\n const breakpoint = useBreakpoint();\n const { isHovered, refObject } = usePseudoClasses<HTMLDivElement>();\n\n const iconSize = breakpoint < breakpoints.lg ? IconSize.XSmall : IconSize.Small;\n const labelContainerClasses = classNames(\n styles['service-message__label-container'],\n styles[`service-message__label-container--${variant}`],\n hasExpander && styles[`service-message__label-container--has-expander`]\n );\n\n const elementHeader = renderElementHeader(label, {\n titleHtmlMarkup: 'span',\n isHovered,\n size: 'compact',\n parentType: 'expanderlist',\n chevronIcon: hasExpander ? (isExpanded ? ChevronUp : ChevronDown) : undefined,\n icon: <NotificationBadge variant={variant} size={iconSize} isHovered={hasExpander && isHovered} />,\n closeButton:\n !hasExpander && dismissable ? (\n <Close onClick={onDismiss} ariaLabel={closeBtnText} className={styles['service-message__close']} />\n ) : undefined,\n });\n\n return (\n <div className={labelContainerClasses} ref={refObject}>\n <div className={styles['service-message__container']}>\n <div className={styles['service-message__row']}>\n <div className={styles['service-message__col']}>\n <div className={styles['service-message__label']}>\n {hasExpander ? (\n <h1 className={styles['service-message__title']} id={id}>\n <button type=\"button\" className={styles['service-message__toggle']} onClick={onExpand} aria-expanded={isExpanded}>\n {elementHeader}\n </button>\n </h1>\n ) : (\n <h1 className={styles['service-message__title']} id={id}>\n {elementHeader}\n </h1>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\ninterface ContentProps {\n info?: string;\n extraInfo?: string;\n urlTitle?: string;\n url?: string;\n target?: AnchorLinkTargets;\n dismissable: boolean;\n onDismiss?: () => void;\n closeBtnText?: string;\n}\n\nconst Content: React.FC<ContentProps> = ({ info, extraInfo, urlTitle, url, target, dismissable, closeBtnText, onDismiss }) => {\n const { refObject: readMoreRef, isHovered: readMoreHoverRefIsHovered } = usePseudoClasses<HTMLAnchorElement>();\n const { refObject: closeButtonRef, isHovered: closeButtonIsHovered } = usePseudoClasses<HTMLButtonElement>();\n\n const hasUrl = url && urlTitle;\n\n return (\n <div className={styles['service-message__container']}>\n <div className={styles['service-message__row']}>\n <div className={styles['service-message__col']}>\n <div className={styles['service-message__content']}>\n {info && <p className={styles['service-message__info']}>{info}</p>}\n {extraInfo && (\n <p className={classNames(styles['service-message__info'], styles['service-message__info--extra'])}>{extraInfo}</p>\n )}\n <div className={styles['service-message__actions']}>\n {hasUrl && (\n <a className={styles['service-message__action']} href={url} ref={readMoreRef} target={target}>\n {urlTitle}\n <Icon size={IconSize.XSmall} svgIcon={Forward} color={getColor('blueberry', 700)} isHovered={readMoreHoverRefIsHovered} />\n </a>\n )}\n\n {dismissable && (\n <button\n ref={closeButtonRef}\n className={classNames(styles['service-message__action'], styles['service-message__action--close'])}\n aria-label={closeBtnText}\n onClick={onDismiss}\n >\n {closeBtnText}\n <Icon size={IconSize.XSmall} svgIcon={X} color={getColor('blueberry', 700)} isHovered={closeButtonIsHovered} />\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport interface ServiceMessageProps {\n /** Sets a label for the notification panel. */\n label: string;\n /** String displayed in service-message when expanded */\n info?: string;\n /** String displayed in service-message when expanded, with a smaller font */\n extraInfo?: string;\n /** function that runs on dismiss */\n onDismiss?: () => void;\n /** Allows for dismiss to be an option, also for ServiceMessage with only label as content */\n dismissable?: boolean;\n /** Makes expander be open from start. */\n expanderOpenFromStart?: boolean;\n /** Name that describes a url-link for the user*/\n urlTitle?: string;\n /** Url for further information*/\n url?: string;\n /** Sets target for the anchorlink to the url*/\n target?: AnchorLinkTargets;\n /** Text on close-button in service messages. */\n closeBtnText?: string;\n /** Changes the visual representation. */\n variant?: NotificationPanelVariants;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst ServiceMessage: React.FC<ServiceMessageProps> = ({\n label,\n dismissable = true,\n onDismiss,\n info,\n extraInfo,\n urlTitle,\n url,\n target = '_self',\n closeBtnText = 'fjern melding',\n expanderOpenFromStart = false,\n variant = 'error',\n testId,\n}) => {\n const [isExpanded, setIsExpanded] = useState<boolean>(expanderOpenFromStart);\n\n const labelId = useId();\n const hasExpander = !!info || !!extraInfo;\n\n const ariaRole = variant === 'error' ? 'alert' : 'region';\n const ariaLabelAttributes = getAriaLabelAttributes({ label, id: labelId });\n\n const handleClick = (): void => {\n if (hasExpander) setIsExpanded(!isExpanded);\n };\n\n const classes = classNames(styles['service-message'], styles[`service-message--${variant}`]);\n\n return (\n <div className={classes} role={ariaRole} {...ariaLabelAttributes} data-testid={testId}>\n <Label\n label={label}\n variant={variant}\n id={labelId}\n hasExpander={hasExpander}\n isExpanded={isExpanded}\n dismissable={dismissable}\n onExpand={handleClick}\n onDismiss={onDismiss}\n closeBtnText={closeBtnText}\n />\n {hasExpander && isExpanded && (\n <Content\n info={info}\n extraInfo={extraInfo}\n urlTitle={urlTitle}\n url={url}\n target={target}\n dismissable={dismissable}\n onDismiss={onDismiss}\n closeBtnText={closeBtnText}\n />\n )}\n </div>\n );\n};\n\nexport default ServiceMessage;\n","import ServiceMessage from './ServiceMessage';\nexport * from './ServiceMessage';\nexport default ServiceMessage;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  @use 'sass:map';
2
- @use '../../scss/spacers' as spacers;
3
- @use '../../scss/palette' as palette;
4
2
  @use '../../scss/font-settings' as font-settings;
3
+ @import '../../scss/supernova/styles/colors.css';
4
+ @import '../../scss/supernova/styles/spacers.css';
5
5
  @import '../../scss/breakpoints';
6
6
  @import '../../scss/grid';
7
7
 
@@ -16,57 +16,45 @@
16
16
  }
17
17
 
18
18
  &--success {
19
- background-color: palette.$kiwi50;
20
-
21
- &:hover {
22
- background-color: rgba-to-rgb(rgba(palette.$kiwi500, 0.1), palette.$kiwi50);
23
- }
19
+ background-color: var(--color-notification-background-success);
24
20
 
25
21
  &#{$servicemessage},
26
22
  &#{$servicemessage}__label-container {
27
- border-color: palette.$kiwi900;
23
+ border-color: var(--color-notification-border-success);
28
24
  }
29
25
  }
30
26
 
31
27
  &--info {
32
- background-color: palette.$blueberry50;
33
-
34
- &:hover {
35
- background-color: rgba-to-rgb(rgba(palette.$blueberry500, 0.1), palette.$blueberry50);
36
- }
28
+ background-color: var(--color-notification-background-info);
37
29
 
38
30
  &#{$servicemessage},
39
31
  &#{$servicemessage}__label-container {
40
- border-color: palette.$blueberry700;
32
+ border-color: var(--color-notification-border-info);
41
33
  }
42
34
  }
43
35
 
44
36
  &--warn {
45
- background-color: palette.$banana50;
46
-
47
- &:hover {
48
- background-color: rgba-to-rgb(rgba(palette.$banana500, 0.1), palette.$banana50);
49
- }
37
+ background-color: var(--color-notification-background-warning);
50
38
 
51
39
  &#{$servicemessage},
52
40
  &#{$servicemessage}__label-container {
53
- border-color: palette.$banana700;
41
+ border-color: var(--color-notification-border-warning);
54
42
  }
55
43
  }
56
44
 
57
45
  &--error {
58
- background-color: palette.$cherry50;
59
-
60
- &:hover {
61
- background-color: rgba-to-rgb(rgba(palette.$cherry500, 0.1), palette.$cherry50);
62
- }
46
+ background-color: var(--color-notification-background-error);
63
47
 
64
48
  &#{$servicemessage},
65
49
  &#{$servicemessage}__label-container {
66
- border-color: palette.$cherry700;
50
+ border-color: var(--color-notification-border-error);
67
51
  }
68
52
  }
69
53
 
54
+ &__icon {
55
+ fill: var(--color-action-graphics-onlight);
56
+ }
57
+
70
58
  &__container {
71
59
  @include make-container;
72
60
  @include make-container-max-widths;
@@ -83,16 +71,53 @@
83
71
 
84
72
  &__label-container {
85
73
  position: relative;
86
- padding-top: spacers.getSpacer(3xs);
87
- padding-bottom: spacers.getSpacer(3xs);
88
74
 
89
- @media (min-width: map.get($grid-breakpoints, lg)) {
90
- padding-top: spacers.getSpacer(2xs);
91
- padding-bottom: spacers.getSpacer(2xs);
75
+ &--has-expander {
76
+ cursor: pointer;
92
77
  }
93
78
 
94
79
  &--has-expander:has(:focus-visible) {
95
- box-shadow: inset 0 0 0 2px palette.$black;
80
+ box-shadow: inset 0 0 0 4px var(--color-action-border-onlight-focus);
81
+ }
82
+
83
+ &--info#{&}--has-expander {
84
+ &:hover {
85
+ background-color: var(--color-notification-background-info-hover);
86
+ }
87
+
88
+ &:active {
89
+ background-color: var(--color-notification-background-info-active);
90
+ }
91
+ }
92
+
93
+ &--success#{&}--has-expander {
94
+ &:hover {
95
+ background-color: var(--color-notification-background-success-hover);
96
+ }
97
+
98
+ &:active {
99
+ background-color: var(--color-notification-background-success-active);
100
+ }
101
+ }
102
+
103
+ &--warn#{&}--has-expander {
104
+ &:hover {
105
+ background-color: var(--color-notification-background-warning-hover);
106
+ }
107
+
108
+ &:active {
109
+ background-color: var(--color-notification-background-warning-active);
110
+ }
111
+ }
112
+
113
+ &--error#{&}--has-expander {
114
+ &:hover {
115
+ background-color: var(--color-notification-background-error-hover);
116
+ }
117
+
118
+ &:active {
119
+ background-color: var(--color-notification-background-error-active);
120
+ }
96
121
  }
97
122
  }
98
123
 
@@ -100,18 +125,20 @@
100
125
  display: flex;
101
126
  width: 100%;
102
127
  align-items: center;
103
- gap: spacers.getSpacer(2xs);
128
+ gap: var(--core-space-2xs);
104
129
 
105
130
  @media (min-width: map.get($grid-breakpoints, md)) {
106
- gap: spacers.getSpacer(m);
131
+ gap: var(--core-space-m);
107
132
  }
108
133
  }
109
134
 
110
135
  &__title {
136
+ display: flex;
111
137
  width: 100%;
112
138
  font-weight: 700;
113
139
  font-size: font-settings.$font-size-xs;
114
- line-height: 1.25rem;
140
+ line-height: inherit;
141
+ margin: 0;
115
142
 
116
143
  @media (min-width: map.get($grid-breakpoints, md)) {
117
144
  font-size: font-settings.$font-size-sm;
@@ -120,6 +147,8 @@
120
147
 
121
148
  &__toggle {
122
149
  all: unset;
150
+ width: 100%;
151
+ box-sizing: border-box;
123
152
 
124
153
  // Triks for at hele labelen skal trigge klikk på knappen
125
154
  &::after {
@@ -127,24 +156,26 @@
127
156
  content: '';
128
157
  position: absolute;
129
158
  }
159
+
160
+ &:focus-visible {
161
+ outline: none !important;
162
+ }
130
163
  }
131
164
 
132
165
  &__content {
133
- margin-left: calc(38px + spacers.getSpacer(2xs));
134
- margin-right: calc(38px + spacers.getSpacer(2xs));
135
- padding-top: spacers.getSpacer(xs);
136
- padding-bottom: spacers.getSpacer(xs);
166
+ margin-left: 3.375rem;
167
+ margin-right: 3.375rem;
168
+ padding-top: var(--core-space-3xs);
169
+ padding-bottom: var(--core-space-2xs);
137
170
 
138
171
  @media (min-width: map.get($grid-breakpoints, md)) {
139
- margin-left: calc(38px + spacers.getSpacer(m));
140
- margin-right: calc(38px + spacers.getSpacer(m));
172
+ margin-left: 4.375rem;
173
+ margin-right: 4.375rem;
141
174
  }
142
175
 
143
176
  @media (min-width: map.get($grid-breakpoints, lg)) {
144
- margin-left: calc(48px + spacers.getSpacer(m));
145
- margin-right: calc(48px + spacers.getSpacer(m));
146
- padding-top: spacers.getSpacer(2xs);
147
- padding-bottom: spacers.getSpacer(s);
177
+ margin-left: 4rem;
178
+ margin-right: 4rem;
148
179
  }
149
180
  }
150
181
 
@@ -154,17 +185,16 @@
154
185
  margin: 0;
155
186
 
156
187
  @media (min-width: map.get($grid-breakpoints, lg)) {
157
- margin-top: spacers.getSpacer(xs);
158
188
  line-height: 1.625rem;
159
189
  font-size: font-settings.$font-size-sm;
160
190
  }
161
191
 
162
192
  &--extra {
163
193
  font-size: 0.875rem;
164
- margin-top: spacers.getSpacer(2xs);
194
+ margin-top: var(--core-space-2xs);
165
195
 
166
196
  @media (min-width: map.get($grid-breakpoints, lg)) {
167
- margin-top: spacers.getSpacer(xs);
197
+ margin-top: var(--core-space-xs);
168
198
  font-size: font-settings.$font-size-xs;
169
199
  line-height: font-settings.$lineheight-size-xs;
170
200
  }
@@ -175,32 +205,33 @@
175
205
  display: flex;
176
206
  justify-content: space-between;
177
207
  flex-flow: column wrap;
178
- gap: spacers.getSpacer(2xs);
179
- margin-top: spacers.getSpacer(2xs);
208
+ gap: var(--core-space-2xs);
209
+ margin-top: var(--core-space-2xs);
180
210
 
181
211
  @media (min-width: map.get($grid-breakpoints, sm)) {
182
212
  flex-direction: row;
183
213
  }
184
214
 
185
215
  @media (min-width: map.get($grid-breakpoints, lg)) {
186
- margin-top: spacers.getSpacer(s);
216
+ margin-top: var(--core-space-s);
187
217
  }
188
218
  }
189
219
 
190
220
  &__action {
221
+ cursor: pointer;
191
222
  display: flex;
192
223
  align-items: center;
193
224
  border: none;
194
225
  width: fit-content;
195
- color: palette.$blueberry700;
226
+ color: var(--color-action-text-onlight);
196
227
  font-weight: 600;
197
228
  font-size: font-settings.$font-size-xs;
198
229
  line-height: 1.25rem;
199
230
  background-color: transparent;
200
231
  text-decoration: none;
201
- padding: 0.5rem;
202
- margin-left: -0.5rem;
203
- gap: spacers.getSpacer(xs);
232
+ padding: var(--core-space-xs);
233
+ margin-left: calc(var(--core-space-xs) * -1);
234
+ gap: var(--core-space-xs);
204
235
 
205
236
  &:hover,
206
237
  &:active {
@@ -208,7 +239,7 @@
208
239
  }
209
240
 
210
241
  &:focus-visible {
211
- box-shadow: 0 0 0 2px palette.$black;
242
+ box-shadow: 0 0 0 4px var(--color-action-border-onlight-focus);
212
243
  background-color: transparent;
213
244
  border: 0;
214
245
  outline: none;
@@ -7,11 +7,16 @@ export type Styles = {
7
7
  'service-message__col': string;
8
8
  'service-message__container': string;
9
9
  'service-message__content': string;
10
+ 'service-message__icon': string;
10
11
  'service-message__info': string;
11
12
  'service-message__info--extra': string;
12
13
  'service-message__label': string;
13
14
  'service-message__label-container': string;
15
+ 'service-message__label-container--error': string;
14
16
  'service-message__label-container--has-expander': string;
17
+ 'service-message__label-container--info': string;
18
+ 'service-message__label-container--success': string;
19
+ 'service-message__label-container--warn': string;
15
20
  'service-message__row': string;
16
21
  'service-message__title': string;
17
22
  'service-message__toggle': string;
@@ -2,14 +2,14 @@ import { a as IconSize, n as AnalyticsId } from "../../constants2.js";
2
2
  import { t as palette } from "../../palette.js";
3
3
  import { t as Icon_default } from "../../Icon.js";
4
4
  import React from "react";
5
- import cn from "classnames";
5
+ import classNames from "classnames";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import styles from "./styles.module.scss";
8
8
  var SharingStatus = (props) => {
9
9
  const { color = "neutral", icon, children, className, testId, wrapText } = props;
10
- const sharingStatusClasses = cn(styles["sharing-status"], className);
11
- const dotClasses = cn(styles["sharing-status__dot"], styles[`sharing-status__dot--${color}`]);
12
- const labelClasses = cn(styles["sharing-status__label"], styles[`sharing-status__label--${color}`], { [styles["sharing-status__label--wrap"]]: wrapText });
10
+ const sharingStatusClasses = classNames(styles["sharing-status"], className);
11
+ const dotClasses = classNames(styles["sharing-status__dot"], styles[`sharing-status__dot--${color}`]);
12
+ const labelClasses = classNames(styles["sharing-status__label"], styles[`sharing-status__label--${color}`], { [styles["sharing-status__label--wrap"]]: wrapText });
13
13
  return /* @__PURE__ */ jsxs("span", {
14
14
  className: sharingStatusClasses,
15
15
  "data-testid": testId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SharingStatus: React.FC<SharingStatusProps>"],"sources":["../../../src/components/SharingStatus/SharingStatus.tsx","../../../src/components/SharingStatus/index.ts"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId, IconSize } from '../../constants';\nimport { PaletteNames, palette } from '../../theme/palette';\nimport Icon, { SvgIcon } from '../Icon';\n\nimport styles from './styles.module.scss';\n\nexport type SharingStatusColor = Extract<PaletteNames, 'kiwi' | 'cherry' | 'neutral'>;\n\nexport interface SharingStatusProps {\n /** Color choices represent variants of sharingstatus */\n color?: SharingStatusColor;\n /** Adds custom classes to the element. */\n className?: string;\n /** Icon to be displayed next to the sharingstatus */\n icon: SvgIcon;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets the text placed to the right of the sharingstatus */\n children: string;\n /** turn on and off word wrapping */\n wrapText?: boolean;\n}\n\nconst SharingStatus: React.FC<SharingStatusProps> = props => {\n const { color = 'neutral', icon, children, className, testId, wrapText } = props;\n\n const sharingStatusClasses = classNames(styles['sharing-status'], className);\n const dotClasses = classNames(styles['sharing-status__dot'], styles[`sharing-status__dot--${color}`]);\n const labelClasses = classNames(styles['sharing-status__label'], styles[`sharing-status__label--${color}`], {\n [styles['sharing-status__label--wrap']]: wrapText,\n });\n\n return (\n <span className={sharingStatusClasses} data-testid={testId} data-analyticsid={AnalyticsId.SharingStatus}>\n <span className={dotClasses}>\n <Icon color={palette.white} svgIcon={icon} size={IconSize.XXSmall} />\n </span>\n <span className={labelClasses}>{children}</span>\n </span>\n );\n};\n\nexport default SharingStatus;\n","import SharingStatus from './SharingStatus';\nexport * from './SharingStatus';\nexport default SharingStatus;\n"],"mappings":";;;;;;;AA2BA,IAAMA,iBAA8C,UAAS;CAC3D,MAAM,EAAE,QAAQ,WAAW,MAAM,UAAU,WAAW,QAAQ,aAAa;CAE3E,MAAM,uBAAuB,GAAW,OAAO,mBAAmB,UAAU;CAC5E,MAAM,aAAa,GAAW,OAAO,wBAAwB,OAAO,wBAAwB,SAAS;CACrG,MAAM,eAAe,GAAW,OAAO,0BAA0B,OAAO,0BAA0B,UAAU,GACzG,OAAO,iCAAiC,UAC1C,CAAC;AAEF,QACE,qBAAC,QAAA;EAAK,WAAW;EAAsB,eAAa;EAAQ,oBAAkB,YAAY;aACxF,oBAAC,QAAA;GAAK,WAAW;aACf,oBAAC,cAAA;IAAK,OAAO,QAAQ;IAAO,SAAS;IAAM,MAAM,SAAS;KAAW;IAChE,EACP,oBAAC,QAAA;GAAK,WAAW;GAAe;IAAgB,CAAA;GAC3C;;ACxCX,IAAA,wBD4Ce"}
1
+ {"version":3,"file":"index.js","names":["SharingStatus: React.FC<SharingStatusProps>"],"sources":["../../../src/components/SharingStatus/SharingStatus.tsx","../../../src/components/SharingStatus/index.ts"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId, IconSize } from '../../constants';\nimport { PaletteNames, palette } from '../../theme/palette';\nimport Icon, { SvgIcon } from '../Icon';\n\nimport styles from './styles.module.scss';\n\nexport type SharingStatusColor = Extract<PaletteNames, 'kiwi' | 'cherry' | 'neutral'>;\n\nexport interface SharingStatusProps {\n /** Color choices represent variants of sharingstatus */\n color?: SharingStatusColor;\n /** Adds custom classes to the element. */\n className?: string;\n /** Icon to be displayed next to the sharingstatus */\n icon: SvgIcon;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets the text placed to the right of the sharingstatus */\n children: string;\n /** turn on and off word wrapping */\n wrapText?: boolean;\n}\n\nconst SharingStatus: React.FC<SharingStatusProps> = props => {\n const { color = 'neutral', icon, children, className, testId, wrapText } = props;\n\n const sharingStatusClasses = classNames(styles['sharing-status'], className);\n const dotClasses = classNames(styles['sharing-status__dot'], styles[`sharing-status__dot--${color}`]);\n const labelClasses = classNames(styles['sharing-status__label'], styles[`sharing-status__label--${color}`], {\n [styles['sharing-status__label--wrap']]: wrapText,\n });\n\n return (\n <span className={sharingStatusClasses} data-testid={testId} data-analyticsid={AnalyticsId.SharingStatus}>\n <span className={dotClasses}>\n <Icon color={palette.white} svgIcon={icon} size={IconSize.XXSmall} />\n </span>\n <span className={labelClasses}>{children}</span>\n </span>\n );\n};\n\nexport default SharingStatus;\n","import SharingStatus from './SharingStatus';\nexport * from './SharingStatus';\nexport default SharingStatus;\n"],"mappings":";;;;;;;AA2BA,IAAMA,iBAA8C,UAAS;CAC3D,MAAM,EAAE,QAAQ,WAAW,MAAM,UAAU,WAAW,QAAQ,aAAa;CAE3E,MAAM,uBAAuB,WAAW,OAAO,mBAAmB,UAAU;CAC5E,MAAM,aAAa,WAAW,OAAO,wBAAwB,OAAO,wBAAwB,SAAS;CACrG,MAAM,eAAe,WAAW,OAAO,0BAA0B,OAAO,0BAA0B,UAAU,GACzG,OAAO,iCAAiC,UAC1C,CAAC;AAEF,QACE,qBAAC,QAAA;EAAK,WAAW;EAAsB,eAAa;EAAQ,oBAAkB,YAAY;aACxF,oBAAC,QAAA;GAAK,WAAW;aACf,oBAAC,cAAA;IAAK,OAAO,QAAQ;IAAO,SAAS;IAAM,MAAM,SAAS;KAAW;IAChE,EACP,oBAAC,QAAA;GAAK,WAAW;GAAe;IAAgB,CAAA;GAC3C;;ACxCX,IAAA,wBD4Ce"}
@@ -1,7 +1,7 @@
1
1
  import { n as AnalyticsId } from "../../constants2.js";
2
2
  import { t as StepButtons_default } from "../../StepButtons.js";
3
3
  import React from "react";
4
- import cn from "classnames";
4
+ import classNames from "classnames";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import styles from "./styles.module.scss";
7
7
  var Step = ({ stepper, children, className, contentClassName, backButton, forwardButton, additionalButtons, cancelButton, stickyButtons = false, testId }) => {
@@ -16,7 +16,7 @@ var Step = ({ stepper, children, className, contentClassName, backButton, forwar
16
16
  children: stepper
17
17
  }),
18
18
  /* @__PURE__ */ jsx("div", {
19
- className: cn(styles.step__content, contentClassName),
19
+ className: classNames(styles.step__content, contentClassName),
20
20
  children
21
21
  }),
22
22
  hasNavigation && /* @__PURE__ */ jsx(StepButtons_default, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Step: React.FC<StepProps>"],"sources":["../../../src/components/Step/Step.tsx","../../../src/components/Step/index.ts"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { ButtonProps } from '../Button';\nimport StepButtons from '../StepButtons';\nimport { StepperProps } from '../Stepper';\n\nimport styles from './styles.module.scss';\n\nexport interface StepProps {\n /** Stepper viser fremdriften */\n stepper?: React.ReactElement<StepperProps>;\n /** Innhold i steget */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Adds custom classes to the content element. */\n contentClassName?: string;\n /** Knapp for å gå tilbake. Vises med \"outline\" variant. */\n backButton?: React.ReactElement<ButtonProps>;\n /** Knapp for å gå videre. Vises med \"fill\" variant. */\n forwardButton?: React.ReactElement<ButtonProps>;\n /** Ekstra knapper. Valgfritt utseende. */\n additionalButtons?: React.ReactElement<ButtonProps>[];\n /** Knapp for å avbryte eller fortsette senere. Vises med \"borderless\" variant. */\n cancelButton?: React.ReactElement<ButtonProps>;\n /** Knappene vil vises sticky nederst på skjermen dersom innholdet i Step tar mer plass enn vinduet. Default: false */\n stickyButtons?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst Step: React.FC<StepProps> = ({\n stepper,\n children,\n className,\n contentClassName,\n backButton,\n forwardButton,\n additionalButtons,\n cancelButton,\n stickyButtons = false,\n testId,\n}) => {\n const hasNavigation = backButton || forwardButton || additionalButtons || cancelButton;\n\n return (\n <div data-testid={testId} data-analyticsid={AnalyticsId.Step} className={className}>\n {stepper && <div className={styles.step__stepper}>{stepper}</div>}\n <div className={classNames(styles.step__content, contentClassName)}>{children}</div>\n {hasNavigation && (\n <StepButtons\n backButton={backButton}\n forwardButton={forwardButton}\n additionalButtons={additionalButtons}\n cancelButton={cancelButton}\n sticky={stickyButtons}\n />\n )}\n </div>\n );\n};\n\nexport default Step;\n","import Step from './Step';\nexport * from './Step';\nexport default Step;\n"],"mappings":";;;;;;AAkCA,IAAMA,QAA6B,EACjC,SACA,UACA,WACA,kBACA,YACA,eACA,mBACA,cACA,gBAAgB,OAChB,aACI;CACJ,MAAM,gBAAgB,cAAc,iBAAiB,qBAAqB;AAE1E,QACE,qBAAC,OAAA;EAAI,eAAa;EAAQ,oBAAkB,YAAY;EAAiB;;GACtE,WAAW,oBAAC,OAAA;IAAI,WAAW,OAAO;cAAgB;KAAc;GACjE,oBAAC,OAAA;IAAI,WAAW,GAAW,OAAO,eAAe,iBAAiB;IAAG;KAAe;GACnF,iBACC,oBAAC,qBAAA;IACa;IACG;IACI;IACL;IACd,QAAQ;KACR;;GAEA;;AC3DV,IAAA,eD+De"}
1
+ {"version":3,"file":"index.js","names":["Step: React.FC<StepProps>"],"sources":["../../../src/components/Step/Step.tsx","../../../src/components/Step/index.ts"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { ButtonProps } from '../Button';\nimport StepButtons from '../StepButtons';\nimport { StepperProps } from '../Stepper';\n\nimport styles from './styles.module.scss';\n\nexport interface StepProps {\n /** Stepper viser fremdriften */\n stepper?: React.ReactElement<StepperProps>;\n /** Innhold i steget */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Adds custom classes to the content element. */\n contentClassName?: string;\n /** Knapp for å gå tilbake. Vises med \"outline\" variant. */\n backButton?: React.ReactElement<ButtonProps>;\n /** Knapp for å gå videre. Vises med \"fill\" variant. */\n forwardButton?: React.ReactElement<ButtonProps>;\n /** Ekstra knapper. Valgfritt utseende. */\n additionalButtons?: React.ReactElement<ButtonProps>[];\n /** Knapp for å avbryte eller fortsette senere. Vises med \"borderless\" variant. */\n cancelButton?: React.ReactElement<ButtonProps>;\n /** Knappene vil vises sticky nederst på skjermen dersom innholdet i Step tar mer plass enn vinduet. Default: false */\n stickyButtons?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst Step: React.FC<StepProps> = ({\n stepper,\n children,\n className,\n contentClassName,\n backButton,\n forwardButton,\n additionalButtons,\n cancelButton,\n stickyButtons = false,\n testId,\n}) => {\n const hasNavigation = backButton || forwardButton || additionalButtons || cancelButton;\n\n return (\n <div data-testid={testId} data-analyticsid={AnalyticsId.Step} className={className}>\n {stepper && <div className={styles.step__stepper}>{stepper}</div>}\n <div className={classNames(styles.step__content, contentClassName)}>{children}</div>\n {hasNavigation && (\n <StepButtons\n backButton={backButton}\n forwardButton={forwardButton}\n additionalButtons={additionalButtons}\n cancelButton={cancelButton}\n sticky={stickyButtons}\n />\n )}\n </div>\n );\n};\n\nexport default Step;\n","import Step from './Step';\nexport * from './Step';\nexport default Step;\n"],"mappings":";;;;;;AAkCA,IAAMA,QAA6B,EACjC,SACA,UACA,WACA,kBACA,YACA,eACA,mBACA,cACA,gBAAgB,OAChB,aACI;CACJ,MAAM,gBAAgB,cAAc,iBAAiB,qBAAqB;AAE1E,QACE,qBAAC,OAAA;EAAI,eAAa;EAAQ,oBAAkB,YAAY;EAAiB;;GACtE,WAAW,oBAAC,OAAA;IAAI,WAAW,OAAO;cAAgB;KAAc;GACjE,oBAAC,OAAA;IAAI,WAAW,WAAW,OAAO,eAAe,iBAAiB;IAAG;KAAe;GACnF,iBACC,oBAAC,qBAAA;IACa;IACG;IACI;IACL;IACd,QAAQ;KACR;;GAEA;;AC3DV,IAAA,eD+De"}
@@ -3,7 +3,7 @@ import { n as getAriaLabelAttributes } from "../../accessibility.js";
3
3
  import "../../debounce.js";
4
4
  import { t as useSize } from "../../useSize.js";
5
5
  import React, { useRef } from "react";
6
- import cn from "classnames";
6
+ import classNames from "classnames";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  import styles from "./styles.module.scss";
9
9
  var MARKER_DOT_MIN_DISTANCE_PX = 4;
@@ -29,7 +29,7 @@ const getValidatedProps = (value, min, max) => {
29
29
  };
30
30
  var Dot = ({ index, completed, distanceBetweenDots, position }) => {
31
31
  return /* @__PURE__ */ jsx("span", {
32
- className: cn(styles.stepper__dot, completed && styles["stepper__dot--completed"], position && styles[`stepper__dot--${position}`]),
32
+ className: classNames(styles.stepper__dot, completed && styles["stepper__dot--completed"], position && styles[`stepper__dot--${position}`]),
33
33
  style: !position && typeof index !== "undefined" && typeof distanceBetweenDots !== "undefined" ? { left: `${index * distanceBetweenDots + 8}px` } : void 0,
34
34
  "data-testid": "dot"
35
35
  });