@helsenorge/designsystem-react 7.13.4 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +80 -3
  2. package/__mocks__/matchMedia.d.ts +1 -1
  3. package/components/Checkbox/Checkbox.js +47 -46
  4. package/components/Checkbox/Checkbox.js.map +1 -1
  5. package/components/Checkbox/styles.module.scss +101 -29
  6. package/components/Checkbox/styles.module.scss.d.ts +0 -1
  7. package/components/Chip/Chip.d.ts +31 -0
  8. package/components/Chip/Chip.js +30 -0
  9. package/components/Chip/Chip.js.map +1 -0
  10. package/components/Chip/index.d.ts +3 -0
  11. package/components/Chip/index.js +9 -0
  12. package/components/Chip/styles.module.scss +98 -0
  13. package/components/Chip/styles.module.scss.d.ts +21 -0
  14. package/components/ErrorWrapper/ErrorWrapper.js +5 -5
  15. package/components/ErrorWrapper/ErrorWrapper.js.map +1 -1
  16. package/components/ErrorWrapper/styles.module.scss +0 -5
  17. package/components/EyebrowHeader/EyebrowHeader.d.ts +17 -0
  18. package/components/EyebrowHeader/EyebrowHeader.js +12 -0
  19. package/components/EyebrowHeader/EyebrowHeader.js.map +1 -0
  20. package/components/EyebrowHeader/index.d.ts +3 -0
  21. package/components/EyebrowHeader/index.js +5 -0
  22. package/components/EyebrowHeader/styles.module.scss +5 -0
  23. package/components/FormGroup/styles.module.scss +3 -0
  24. package/components/GridExample/GridExample.d.ts +1 -0
  25. package/components/GridExample/GridExample.js.map +1 -1
  26. package/components/HelpPanel/HelpPanel.d.ts +2 -2
  27. package/components/HelpPanel/HelpPanel.js +10 -10
  28. package/components/HelpPanel/HelpPanel.js.map +1 -1
  29. package/components/{HighlightBox/HighlightBox.d.ts → HighlightPanel/HighlightPanel.d.ts} +10 -10
  30. package/components/HighlightPanel/HighlightPanel.js +61 -0
  31. package/components/HighlightPanel/HighlightPanel.js.map +1 -0
  32. package/components/HighlightPanel/index.d.ts +3 -0
  33. package/components/HighlightPanel/index.js +7 -0
  34. package/components/HighlightPanel/index.js.map +1 -0
  35. package/components/{HighlightBox → HighlightPanel}/styles.module.scss +17 -17
  36. package/components/HighlightPanel/styles.module.scss.d.ts +25 -0
  37. package/components/HorizontalScroll/HorizontalScroll.d.ts +1 -0
  38. package/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  39. package/components/NotificationPanel/NotificationPanel.d.ts +1 -1
  40. package/components/NotificationPanel/NotificationPanel.js +23 -23
  41. package/components/NotificationPanel/NotificationPanel.js.map +1 -1
  42. package/components/NotificationPanel/styles.module.scss +0 -14
  43. package/components/NotificationPanel/styles.module.scss.d.ts +0 -1
  44. package/components/RadioButton/RadioButton.js +42 -41
  45. package/components/RadioButton/RadioButton.js.map +1 -1
  46. package/components/RadioButton/styles.module.scss +41 -35
  47. package/components/ServiceMessage/ServiceMessage.js +25 -25
  48. package/components/ServiceMessage/ServiceMessage.js.map +1 -1
  49. package/components/ServiceMessage/styles.module.scss +0 -13
  50. package/components/ServiceMessage/styles.module.scss.d.ts +0 -1
  51. package/components/Tabs/Tabs.d.ts +1 -0
  52. package/components/Tabs/Tabs.js.map +1 -1
  53. package/components/Tag/Tag.d.ts +3 -9
  54. package/components/Tag/Tag.js +16 -42
  55. package/components/Tag/Tag.js.map +1 -1
  56. package/components/Tag/index.js +5 -6
  57. package/components/Tag/styles.module.scss +5 -105
  58. package/components/Tag/styles.module.scss.d.ts +0 -4
  59. package/components/TagList/TagList.d.ts +1 -0
  60. package/components/TagList/TagList.js.map +1 -1
  61. package/components/Tooltip/Tooltip.d.ts +4 -1
  62. package/components/Tooltip/Tooltip.js.map +1 -1
  63. package/components/Validation/Validation.d.ts +0 -5
  64. package/components/Validation/Validation.js +11 -12
  65. package/components/Validation/Validation.js.map +1 -1
  66. package/components/Validation/ValidationSummary.js +2 -2
  67. package/components/Validation/ValidationSummary.js.map +1 -1
  68. package/components/Validation/styles.module.scss +20 -14
  69. package/components/Validation/styles.module.scss.d.ts +5 -5
  70. package/constants.d.ts +5 -2
  71. package/constants.js +2 -2
  72. package/constants.js.map +1 -1
  73. package/package.json +3 -3
  74. package/scss/supernova/index.css +2 -2
  75. package/scss/supernova/styles/colors.css +1 -1
  76. package/utils/tests/setup-test.d.ts +1 -1
  77. package/_virtual/assert.js +0 -5
  78. package/_virtual/assert.js.map +0 -1
  79. package/_virtual/ast.js +0 -5
  80. package/_virtual/ast.js.map +0 -1
  81. package/_virtual/code.js +0 -5
  82. package/_virtual/code.js.map +0 -1
  83. package/_virtual/doctrine.js +0 -5
  84. package/_virtual/doctrine.js.map +0 -1
  85. package/_virtual/errors.js +0 -5
  86. package/_virtual/errors.js.map +0 -1
  87. package/_virtual/index.js +0 -5
  88. package/_virtual/inherits_browser.js +0 -5
  89. package/_virtual/inherits_browser.js.map +0 -1
  90. package/_virtual/keyword.js +0 -5
  91. package/_virtual/keyword.js.map +0 -1
  92. package/_virtual/typed.js +0 -5
  93. package/_virtual/typed.js.map +0 -1
  94. package/_virtual/types.js +0 -5
  95. package/_virtual/types.js.map +0 -1
  96. package/_virtual/util.js +0 -5
  97. package/_virtual/util.js.map +0 -1
  98. package/_virtual/utility.js +0 -5
  99. package/_virtual/utility.js.map +0 -1
  100. package/_virtual/utils.js +0 -5
  101. package/_virtual/utils.js.map +0 -1
  102. package/components/HighlightBox/HighlightBox.js +0 -61
  103. package/components/HighlightBox/HighlightBox.js.map +0 -1
  104. package/components/HighlightBox/index.d.ts +0 -3
  105. package/components/HighlightBox/index.js +0 -7
  106. package/components/HighlightBox/styles.module.scss.d.ts +0 -25
  107. /package/components/{HighlightBox → Chip}/index.js.map +0 -0
  108. /package/{_virtual → components/EyebrowHeader}/index.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceMessage.js","sources":["../../../src/components/ServiceMessage/ServiceMessage.tsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\nimport { useHover } from '../../hooks/useHover';\nimport { useUuid } from '../../hooks/useUuid';\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, hoverRef } = useHover<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={hoverRef}>\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 == 'alert' ? 'error' : 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 { hoverRef: readMoreRef, isHovered: readMoreHoverRefIsHovered } = useHover<HTMLAnchorElement>();\n const { hoverRef: closeButtonRef, isHovered: closeButtonIsHovered } = useHover<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 = useUuid();\n const hasExpander = !!info || !!extraInfo;\n\n const ariaRole = variant === 'alert' || variant === 'error' ? 'alert' : 'region';\n const ariaLabelAttributes = getAriaLabelAttributes({ label, id: labelId });\n\n const handleClick = (): void => {\n 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"],"names":["Label","label","variant","id","hasExpander","isExpanded","dismissable","onExpand","onDismiss","closeBtnText","breakpoint","useBreakpoint","isHovered","hoverRef","useHover","iconSize","breakpoints","IconSize","CustomTag","labelContainerClasses","classNames","styles","React","NotificationBadge","Icon","ChevronUp","ChevronDown","Close","Content","info","extraInfo","urlTitle","url","target","readMoreRef","readMoreHoverRefIsHovered","closeButtonRef","closeButtonIsHovered","hasUrl","Forward","getColor","X","ServiceMessage","expanderOpenFromStart","testId","setIsExpanded","useState","labelId","useUuid","ariaRole","ariaLabelAttributes","getAriaLabelAttributes","handleClick","classes"],"mappings":"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"}
1
+ {"version":3,"file":"ServiceMessage.js","sources":["../../../src/components/ServiceMessage/ServiceMessage.tsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useBreakpoint } from '../../hooks/useBreakpoint';\nimport { useHover } from '../../hooks/useHover';\nimport { useUuid } from '../../hooks/useUuid';\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, hoverRef } = useHover<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={hoverRef}>\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 { hoverRef: readMoreRef, isHovered: readMoreHoverRefIsHovered } = useHover<HTMLAnchorElement>();\n const { hoverRef: closeButtonRef, isHovered: closeButtonIsHovered } = useHover<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 = useUuid();\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 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"],"names":["Label","label","variant","id","hasExpander","isExpanded","dismissable","onExpand","onDismiss","closeBtnText","breakpoint","useBreakpoint","isHovered","hoverRef","useHover","iconSize","breakpoints","IconSize","CustomTag","labelContainerClasses","classNames","styles","NotificationBadge","React","Icon","ChevronUp","ChevronDown","Close","Content","info","extraInfo","urlTitle","url","target","readMoreRef","readMoreHoverRefIsHovered","closeButtonRef","closeButtonIsHovered","hasUrl","Forward","getColor","X","ServiceMessage","expanderOpenFromStart","testId","setIsExpanded","useState","labelId","useUuid","ariaRole","ariaLabelAttributes","getAriaLabelAttributes","handleClick","classes"],"mappings":"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"}
@@ -54,19 +54,6 @@
54
54
  }
55
55
  }
56
56
 
57
- &--alert {
58
- background-color: $cherry50;
59
-
60
- &:hover {
61
- background-color: rgba-to-rgb(rgba($cherry500, 0.1), $cherry50);
62
- }
63
-
64
- &#{$servicemessage},
65
- &#{$servicemessage}__label-container {
66
- border-color: $cherry700;
67
- }
68
- }
69
-
70
57
  &--error {
71
58
  background-color: $cherry50;
72
59
 
@@ -15,7 +15,6 @@ export type Styles = {
15
15
  'service-message__row': string;
16
16
  'service-message__title': string;
17
17
  'service-message__toggle': string;
18
- 'service-message--alert': string;
19
18
  'service-message--error': string;
20
19
  'service-message--info': string;
21
20
  'service-message--success': string;
@@ -5,6 +5,7 @@ export type { TabProps } from './Tab';
5
5
  export type TabsColors = Extract<PaletteNames, 'blueberry' | 'neutral' | 'white'>;
6
6
  export type TabsType = 'normal' | 'framed';
7
7
  export interface TabsProps {
8
+ children?: React.ReactNode;
8
9
  /** Controlled state for Tabs component */
9
10
  activeTab?: number;
10
11
  /** Adds custom classes to the element. */
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport { useSticky } from '../../hooks/useSticky';\nimport { PaletteNames } from '../../theme/palette';\nimport { isMobileUA } from '../../utils/mobile';\n\nimport styles from './styles.module.scss';\n\nexport type { TabProps } from './Tab';\nexport type TabsColors = Extract<PaletteNames, 'blueberry' | 'neutral' | 'white'>;\nexport type TabsType = 'normal' | 'framed';\n\nexport interface TabsProps {\n /** Controlled state for Tabs component */\n activeTab?: number;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the color of the tabs. Default: white */\n color?: TabsColors;\n /** Whether the tab list should be sticky */\n sticky?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets the visual type of the tabs */\n type?: TabsType;\n}\n\nconst swipeDistanceThreshold = 75;\n\nconst TabsRoot: React.FC<TabsProps> = ({ activeTab, children, className, color = 'white', sticky = true, testId, type = 'normal' }) => {\n const isControlled = activeTab !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(0);\n const [touchStartX, setTouchStartX] = useState(0);\n const [touchEndX, setTouchEndX] = useState(0);\n const [translateX, setTranslateX] = useState(0);\n const [panelAnimation, setPanelAnimation] = useState<'left' | 'right' | null>(null);\n const mobile = isMobileUA();\n const tabsRef = useRef<HTMLDivElement>(null);\n const tabPanelRef = useRef<HTMLDivElement>(null);\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const onValueChange = (newValue: number, oldValue: number): void => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n if (newValue > oldValue) {\n // make sure that the translateX is reset so the animation does not go outside the screen\n setTranslateX(0);\n onLeftSwipe();\n } else if (newValue < oldValue) {\n // make sure that the translateX is reset so the animation does not go outside the screen\n setTranslateX(0);\n onRightSwipe();\n }\n }\n };\n\n const onRightSwipe = (): void => {\n mobile && setPanelAnimation('right');\n };\n\n const onLeftSwipe = (): void => {\n mobile && setPanelAnimation('left');\n };\n\n const resetAnimation = (): void => {\n setPanelAnimation(null);\n };\n\n const activeTabIndex = isControlled ? activeTab : uncontrolledValue;\n\n useEffect(() => {\n const handleTouchStart = (event: TouchEvent): void => {\n setTouchStartX(event.touches[0].clientX);\n };\n\n const handleTouchMove = (event: TouchEvent): void => {\n setTouchEndX(event.touches[0].clientX);\n const newTranslateX = event.touches[0].clientX - touchStartX;\n\n if (activeTabIndex === 0 && newTranslateX > 0) {\n setTranslateX(0);\n } else if (activeTabIndex === React.Children.count(children) - 1 && newTranslateX < 0) {\n setTranslateX(0);\n } else {\n setTranslateX(newTranslateX);\n }\n };\n\n const handleTouchEnd = (): void => {\n const swipeDistance = Math.abs(touchEndX - touchStartX);\n if (swipeDistance >= swipeDistanceThreshold) {\n if (touchEndX > touchStartX) {\n // User swiped right\n onValueChange(Math.max(0, activeTabIndex - 1), activeTabIndex);\n } else {\n // User swiped left\n onValueChange(Math.min(React.Children.count(children) - 1, activeTabIndex + 1), activeTabIndex);\n }\n }\n setTranslateX(0);\n };\n\n if (tabsRef.current) {\n tabsRef.current.addEventListener('touchstart', handleTouchStart);\n tabsRef.current.addEventListener('touchmove', handleTouchMove);\n tabsRef.current.addEventListener('touchend', handleTouchEnd);\n }\n return () => {\n if (tabsRef.current) {\n tabsRef.current.removeEventListener('touchstart', handleTouchStart);\n tabsRef.current.removeEventListener('touchmove', handleTouchMove);\n tabsRef.current.removeEventListener('touchend', handleTouchEnd);\n }\n };\n }, [touchStartX, touchEndX, activeTabIndex]);\n\n useEffect(() => {\n const handleAnimationEnd = (): void => {\n resetAnimation();\n };\n\n if (tabPanelRef.current) {\n tabPanelRef.current.addEventListener('animationend', handleAnimationEnd);\n }\n\n return () => {\n if (tabPanelRef.current) {\n tabPanelRef.current.removeEventListener('animationend', handleAnimationEnd);\n }\n };\n }, []);\n\n const { isOutsideWindow } = useSticky(tabListRef, tabsRef);\n\n return (\n <div className={className} data-testid={testId}>\n <div\n ref={tabListRef}\n className={classNames(styles['tab-list-wrapper'], {\n [styles['tab-list-wrapper--sticky']]: sticky && isOutsideWindow,\n })}\n >\n <TabList\n onTabListClick={(index: number) => onValueChange(index, activeTabIndex)}\n selectedTab={activeTabIndex}\n color={color}\n type={type}\n >\n {children}\n </TabList>\n <div\n className={classNames(styles['panel-wrapper'], styles[`panel-wrapper--${color}`], {\n [styles['panel-wrapper--framed']]: type == 'framed',\n })}\n ></div>\n </div>\n <div ref={tabsRef} style={{ marginTop: type == 'framed' ? '-40px' : '' }}>\n <TabPanel\n ref={tabPanelRef}\n color={color}\n type={type}\n isFirst={activeTabIndex == 0}\n translateX={translateX}\n animate={panelAnimation}\n >\n {React.Children.toArray(children)[activeTabIndex]}\n </TabPanel>\n </div>\n </div>\n );\n};\n\ntype TabsComponent = typeof TabsRoot & {\n Tab: typeof Tab;\n};\nconst Tabs = TabsRoot as TabsComponent;\nTabs.displayName = 'Tabs';\nTabs.Tab = Tab;\nTabs.Tab.displayName = 'Tabs.Tab';\n\nexport default Tabs;\n"],"names":["swipeDistanceThreshold","TabsRoot","activeTab","children","className","color","sticky","testId","type","isControlled","uncontrolledValue","setUncontrolledValue","useState","touchStartX","setTouchStartX","touchEndX","setTouchEndX","translateX","setTranslateX","panelAnimation","setPanelAnimation","mobile","isMobileUA","tabsRef","useRef","tabPanelRef","tabListRef","onValueChange","newValue","oldValue","onLeftSwipe","onRightSwipe","resetAnimation","activeTabIndex","useEffect","handleTouchStart","event","handleTouchMove","newTranslateX","React","handleTouchEnd","handleAnimationEnd","isOutsideWindow","useSticky","classNames","styles","TabList","index","TabPanel","Tabs","Tab"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport { useSticky } from '../../hooks/useSticky';\nimport { PaletteNames } from '../../theme/palette';\nimport { isMobileUA } from '../../utils/mobile';\n\nimport styles from './styles.module.scss';\n\nexport type { TabProps } from './Tab';\nexport type TabsColors = Extract<PaletteNames, 'blueberry' | 'neutral' | 'white'>;\nexport type TabsType = 'normal' | 'framed';\n\nexport interface TabsProps {\n children?: React.ReactNode;\n /** Controlled state for Tabs component */\n activeTab?: number;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the color of the tabs. Default: white */\n color?: TabsColors;\n /** Whether the tab list should be sticky */\n sticky?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets the visual type of the tabs */\n type?: TabsType;\n}\n\nconst swipeDistanceThreshold = 75;\n\nconst TabsRoot: React.FC<TabsProps> = ({ activeTab, children, className, color = 'white', sticky = true, testId, type = 'normal' }) => {\n const isControlled = activeTab !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(0);\n const [touchStartX, setTouchStartX] = useState(0);\n const [touchEndX, setTouchEndX] = useState(0);\n const [translateX, setTranslateX] = useState(0);\n const [panelAnimation, setPanelAnimation] = useState<'left' | 'right' | null>(null);\n const mobile = isMobileUA();\n const tabsRef = useRef<HTMLDivElement>(null);\n const tabPanelRef = useRef<HTMLDivElement>(null);\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const onValueChange = (newValue: number, oldValue: number): void => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n if (newValue > oldValue) {\n // make sure that the translateX is reset so the animation does not go outside the screen\n setTranslateX(0);\n onLeftSwipe();\n } else if (newValue < oldValue) {\n // make sure that the translateX is reset so the animation does not go outside the screen\n setTranslateX(0);\n onRightSwipe();\n }\n }\n };\n\n const onRightSwipe = (): void => {\n mobile && setPanelAnimation('right');\n };\n\n const onLeftSwipe = (): void => {\n mobile && setPanelAnimation('left');\n };\n\n const resetAnimation = (): void => {\n setPanelAnimation(null);\n };\n\n const activeTabIndex = isControlled ? activeTab : uncontrolledValue;\n\n useEffect(() => {\n const handleTouchStart = (event: TouchEvent): void => {\n setTouchStartX(event.touches[0].clientX);\n };\n\n const handleTouchMove = (event: TouchEvent): void => {\n setTouchEndX(event.touches[0].clientX);\n const newTranslateX = event.touches[0].clientX - touchStartX;\n\n if (activeTabIndex === 0 && newTranslateX > 0) {\n setTranslateX(0);\n } else if (activeTabIndex === React.Children.count(children) - 1 && newTranslateX < 0) {\n setTranslateX(0);\n } else {\n setTranslateX(newTranslateX);\n }\n };\n\n const handleTouchEnd = (): void => {\n const swipeDistance = Math.abs(touchEndX - touchStartX);\n if (swipeDistance >= swipeDistanceThreshold) {\n if (touchEndX > touchStartX) {\n // User swiped right\n onValueChange(Math.max(0, activeTabIndex - 1), activeTabIndex);\n } else {\n // User swiped left\n onValueChange(Math.min(React.Children.count(children) - 1, activeTabIndex + 1), activeTabIndex);\n }\n }\n setTranslateX(0);\n };\n\n if (tabsRef.current) {\n tabsRef.current.addEventListener('touchstart', handleTouchStart);\n tabsRef.current.addEventListener('touchmove', handleTouchMove);\n tabsRef.current.addEventListener('touchend', handleTouchEnd);\n }\n return () => {\n if (tabsRef.current) {\n tabsRef.current.removeEventListener('touchstart', handleTouchStart);\n tabsRef.current.removeEventListener('touchmove', handleTouchMove);\n tabsRef.current.removeEventListener('touchend', handleTouchEnd);\n }\n };\n }, [touchStartX, touchEndX, activeTabIndex]);\n\n useEffect(() => {\n const handleAnimationEnd = (): void => {\n resetAnimation();\n };\n\n if (tabPanelRef.current) {\n tabPanelRef.current.addEventListener('animationend', handleAnimationEnd);\n }\n\n return () => {\n if (tabPanelRef.current) {\n tabPanelRef.current.removeEventListener('animationend', handleAnimationEnd);\n }\n };\n }, []);\n\n const { isOutsideWindow } = useSticky(tabListRef, tabsRef);\n\n return (\n <div className={className} data-testid={testId}>\n <div\n ref={tabListRef}\n className={classNames(styles['tab-list-wrapper'], {\n [styles['tab-list-wrapper--sticky']]: sticky && isOutsideWindow,\n })}\n >\n <TabList\n onTabListClick={(index: number) => onValueChange(index, activeTabIndex)}\n selectedTab={activeTabIndex}\n color={color}\n type={type}\n >\n {children}\n </TabList>\n <div\n className={classNames(styles['panel-wrapper'], styles[`panel-wrapper--${color}`], {\n [styles['panel-wrapper--framed']]: type == 'framed',\n })}\n ></div>\n </div>\n <div ref={tabsRef} style={{ marginTop: type == 'framed' ? '-40px' : '' }}>\n <TabPanel\n ref={tabPanelRef}\n color={color}\n type={type}\n isFirst={activeTabIndex == 0}\n translateX={translateX}\n animate={panelAnimation}\n >\n {React.Children.toArray(children)[activeTabIndex]}\n </TabPanel>\n </div>\n </div>\n );\n};\n\ntype TabsComponent = typeof TabsRoot & {\n Tab: typeof Tab;\n};\nconst Tabs = TabsRoot as TabsComponent;\nTabs.displayName = 'Tabs';\nTabs.Tab = Tab;\nTabs.Tab.displayName = 'Tabs.Tab';\n\nexport default Tabs;\n"],"names":["swipeDistanceThreshold","TabsRoot","activeTab","children","className","color","sticky","testId","type","isControlled","uncontrolledValue","setUncontrolledValue","useState","touchStartX","setTouchStartX","touchEndX","setTouchEndX","translateX","setTranslateX","panelAnimation","setPanelAnimation","mobile","isMobileUA","tabsRef","useRef","tabPanelRef","tabListRef","onValueChange","newValue","oldValue","onLeftSwipe","onRightSwipe","resetAnimation","activeTabIndex","useEffect","handleTouchStart","event","handleTouchMove","newTranslateX","React","handleTouchEnd","handleAnimationEnd","isOutsideWindow","useSticky","classNames","styles","TabList","index","TabPanel","Tabs","Tab"],"mappings":"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"}
@@ -6,10 +6,6 @@ export declare enum TagSize {
6
6
  medium = "medium",
7
7
  large = "large"
8
8
  }
9
- export declare enum TagAction {
10
- remove = "remove",
11
- undo = "undo"
12
- }
13
9
  export declare enum TagVariant {
14
10
  normal = "normal",
15
11
  oncolor = "oncolor",
@@ -19,15 +15,13 @@ export type TagColors = Extract<PaletteNames, 'blueberry' | 'neutral' | 'cherry'
19
15
  export interface TagProps {
20
16
  /** Sets the text of the tag */
21
17
  children: string;
22
- /** Sets the size of the tag. Default: small */
18
+ /** Sets the size of the tag. Default: medium */
23
19
  size?: keyof typeof TagSize;
24
- /** Sets the background of the tag. Not used if action is "undo". Default: blueberry */
20
+ /** Sets the background of the tag. Default: blueberry */
25
21
  color?: TagColors;
26
- /** Adds an icon to the tag. Not shown if action is set. */
22
+ /** Adds an icon to the tag. */
27
23
  svgIcon?: SvgIcon | IconName;
28
24
  variant?: keyof typeof TagVariant;
29
- action?: keyof typeof TagAction;
30
- onClick?: () => void;
31
25
  /** Sets the data-testid attribute on the expander button. */
32
26
  testId?: string;
33
27
  }
@@ -1,48 +1,22 @@
1
- import n from "react";
1
+ import r from "react";
2
2
  import p from "classnames";
3
- import { AnalyticsId as f, IconSize as u } from "../../constants.js";
4
- import { useHover as I } from "../../hooks/useHover.js";
5
- import { palette as g } from "../../theme/palette.js";
6
- import { Icon as v } from "../Icon/Icon.js";
7
- import h from "../Icons/Undo.js";
8
- import X from "../Icons/X.js";
9
- import { LazyIcon as b } from "../LazyIcon/LazyIcon.js";
10
- import t from "../Tag/styles.module.scss";
11
- var z = /* @__PURE__ */ ((e) => (e.medium = "medium", e.large = "large", e))(z || {}), E = /* @__PURE__ */ ((e) => (e.remove = "remove", e.undo = "undo", e))(E || {}), N = /* @__PURE__ */ ((e) => (e.normal = "normal", e.oncolor = "oncolor", e.emphasised = "emphasised", e))(N || {});
12
- const _ = (e) => {
13
- const { children: s, size: c, color: a, variant: r, action: o, onClick: m, testId: l } = e, { hoverRef: i, isHovered: d } = I(), $ = p(
14
- t.tag,
15
- t[`tag--${c}`],
16
- o === "undo" && t[`tag--${o}`],
17
- t["tag--has-action"],
18
- o === "remove" && [t[`tag--${a}`], t[`tag--${r}`]]
19
- ), y = () => {
20
- switch (o) {
21
- case "remove":
22
- return X;
23
- case "undo":
24
- return h;
25
- }
26
- };
27
- return /* @__PURE__ */ n.createElement("button", { className: $, onClick: m, ref: i, type: "button", "data-testid": l, "data-analyticsid": f.Tag }, s, /* @__PURE__ */ n.createElement(
28
- v,
29
- {
30
- svgIcon: y(),
31
- size: u.XXSmall,
32
- color: g[`${o === "undo" ? "blueberry" : a}800`],
33
- isHovered: d
34
- }
35
- ));
36
- }, j = (e) => {
37
- const { children: s, size: c = "medium", color: a = "blueberry", svgIcon: r, variant: o = "normal", action: m, onClick: l, testId: i } = e, d = p(t.tag, t[`tag--${c}`], t[`tag--${a}`], t[`tag--${o}`], {
38
- [t["tag--has-icon"]]: r
3
+ import { AnalyticsId as g, IconSize as m } from "../../constants.js";
4
+ import { palette as s } from "../../theme/palette.js";
5
+ import { Icon as f } from "../Icon/Icon.js";
6
+ import { LazyIcon as u } from "../LazyIcon/LazyIcon.js";
7
+ import a from "../Tag/styles.module.scss";
8
+ var h = /* @__PURE__ */ ((e) => (e.medium = "medium", e.large = "large", e))(h || {}), y = /* @__PURE__ */ ((e) => (e.normal = "normal", e.oncolor = "oncolor", e.emphasised = "emphasised", e))(y || {});
9
+ const E = (e) => {
10
+ const { children: l, size: c = "medium", color: o = "blueberry", svgIcon: t, variant: i = "normal", testId: n } = e, d = p(a.tag, a[`tag--${c}`], a[`tag--${o}`], {
11
+ [a["tag--has-icon"]]: t,
12
+ [a["tag--emphasised"]]: i == "emphasised"
13
+ /* emphasised */
39
14
  });
40
- return m && l ? /* @__PURE__ */ n.createElement(_, { size: c, color: a, variant: o, action: m, onClick: l, testId: i }, s) : /* @__PURE__ */ n.createElement("span", { className: d, "data-testid": i, "data-analyticsid": f.Tag }, r && (typeof r == "string" ? /* @__PURE__ */ n.createElement(b, { iconName: r, size: u.XXSmall, color: g[`${a}800`], className: t.tag__icon }) : /* @__PURE__ */ n.createElement(v, { svgIcon: r, size: u.XXSmall, color: g[`${a}800`], className: t.tag__icon })), s);
15
+ return /* @__PURE__ */ r.createElement("span", { className: d, "data-testid": n, "data-analyticsid": g.Tag }, t && (typeof t == "string" ? /* @__PURE__ */ r.createElement(u, { iconName: t, size: m.XXSmall, color: s[`${o}800`], className: a.tag__icon }) : /* @__PURE__ */ r.createElement(f, { svgIcon: t, size: m.XXSmall, color: s[`${o}800`], className: a.tag__icon })), l);
41
16
  };
42
17
  export {
43
- E as TagAction,
44
- z as TagSize,
45
- N as TagVariant,
46
- j as default
18
+ h as TagSize,
19
+ y as TagVariant,
20
+ E as default
47
21
  };
48
22
  //# sourceMappingURL=Tag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","sources":["../../../src/components/Tag/Tag.tsx"],"sourcesContent":["import React from 'react';\n\nimport cn from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useHover } from '../../hooks/useHover';\nimport { palette, PaletteNames } from '../../theme/palette';\nimport Icon, { IconSize, SvgIcon } from '../Icon';\nimport { IconName } from '../Icons/IconNames';\nimport Undo from '../Icons/Undo';\nimport X from '../Icons/X';\nimport LazyIcon from '../LazyIcon';\n\nimport styles from './styles.module.scss';\n\nexport enum TagSize {\n medium = 'medium',\n large = 'large',\n}\n\nexport enum TagAction {\n remove = 'remove',\n undo = 'undo',\n}\n\nexport enum TagVariant {\n normal = 'normal',\n oncolor = 'oncolor',\n emphasised = 'emphasised',\n}\n\nexport type TagColors = Extract<PaletteNames, 'blueberry' | 'neutral' | 'cherry' | 'banana' | 'kiwi' | 'plum'>;\n\nexport interface TagProps {\n /** Sets the text of the tag */\n children: string;\n /** Sets the size of the tag. Default: small */\n size?: keyof typeof TagSize;\n /** Sets the background of the tag. Not used if action is \"undo\". Default: blueberry */\n color?: TagColors;\n /** Adds an icon to the tag. Not shown if action is set. */\n svgIcon?: SvgIcon | IconName;\n /* Changes the appearance of the tag. Not used if action is \"undo\". Default: normal */\n variant?: keyof typeof TagVariant;\n /* Makes the tag a clickable button that performs an action. onClick must also be set. */\n action?: keyof typeof TagAction;\n /* Called when action is set and the tag is clicked on. action must also be set. */\n onClick?: () => void;\n /** Sets the data-testid attribute on the expander button. */\n testId?: string;\n}\n\ntype ActionTagProps = Required<Pick<TagProps, 'children' | 'size' | 'color' | 'variant' | 'action' | 'onClick'>> & Pick<TagProps, 'testId'>;\n\nconst ActionTag: React.FC<ActionTagProps> = props => {\n const { children, size, color, variant, action, onClick, testId } = props;\n\n const { hoverRef, isHovered } = useHover<HTMLButtonElement>();\n\n const tagClasses = cn(\n styles.tag,\n styles[`tag--${size}`],\n action === 'undo' && styles[`tag--${action}`],\n styles['tag--has-action'],\n action === 'remove' && [styles[`tag--${color}`], styles[`tag--${variant}`]]\n );\n\n const getActionIcon = (): SvgIcon => {\n switch (action) {\n case 'remove':\n return X;\n case 'undo':\n return Undo;\n }\n };\n\n return (\n <button className={tagClasses} onClick={onClick} ref={hoverRef} type=\"button\" data-testid={testId} data-analyticsid={AnalyticsId.Tag}>\n {children}\n <Icon\n svgIcon={getActionIcon()}\n size={IconSize.XXSmall}\n color={palette[`${action === 'undo' ? 'blueberry' : color}800`]}\n isHovered={isHovered}\n />\n </button>\n );\n};\n\nconst Tag: React.FC<TagProps> = props => {\n const { children, size = TagSize.medium, color = 'blueberry', svgIcon, variant = 'normal', action, onClick, testId } = props;\n\n const tagClasses = cn(styles.tag, styles[`tag--${size}`], styles[`tag--${color}`], styles[`tag--${variant}`], {\n [styles['tag--has-icon']]: svgIcon,\n });\n\n if (action && onClick) {\n return (\n <ActionTag size={size} color={color} variant={variant} action={action} onClick={onClick} testId={testId}>\n {children}\n </ActionTag>\n );\n }\n\n return (\n <span className={tagClasses} data-testid={testId} data-analyticsid={AnalyticsId.Tag}>\n {svgIcon &&\n (typeof svgIcon === 'string' ? (\n <LazyIcon iconName={svgIcon} size={IconSize.XXSmall} color={palette[`${color}800`]} className={styles.tag__icon} />\n ) : (\n <Icon svgIcon={svgIcon} size={IconSize.XXSmall} color={palette[`${color}800`]} className={styles.tag__icon} />\n ))}\n {children}\n </span>\n );\n};\n\nexport default Tag;\n"],"names":["TagSize","TagAction","TagVariant","ActionTag","props","children","size","color","variant","action","onClick","testId","hoverRef","isHovered","useHover","tagClasses","cn","styles","getActionIcon","Undo","React","AnalyticsId","Icon","IconSize","palette","Tag","svgIcon","LazyIcon"],"mappings":";;;;;;;;;;AAeY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,OAAO,QAFGA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,UAAU,WACVA,EAAA,aAAa,cAHHA,IAAAA,KAAA,CAAA,CAAA;AA6BZ,MAAMC,IAAsC,CAASC,MAAA;AAC7C,QAAA,EAAE,UAAAC,GAAU,MAAAC,GAAM,OAAAC,GAAO,SAAAC,GAAS,QAAAC,GAAQ,SAAAC,GAAS,QAAAC,EAAW,IAAAP,GAE9D,EAAE,UAAAQ,GAAU,WAAAC,EAAU,IAAIC,EAA4B,GAEtDC,IAAaC;AAAAA,IACjBC,EAAO;AAAA,IACPA,EAAO,QAAQX,CAAI,EAAE;AAAA,IACrBG,MAAW,UAAUQ,EAAO,QAAQR,CAAM,EAAE;AAAA,IAC5CQ,EAAO,iBAAiB;AAAA,IACxBR,MAAW,YAAY,CAACQ,EAAO,QAAQV,CAAK,EAAE,GAAGU,EAAO,QAAQT,CAAO,EAAE,CAAC;AAAA,EAAA,GAGtEU,IAAgB,MAAe;AACnC,YAAQT,GAAQ;AAAA,MACd,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAAU;AAAA,IACX;AAAA,EAAA;AAGF,SACGC,gBAAAA,EAAA,cAAA,UAAA,EAAO,WAAWL,GAAY,SAAAL,GAAkB,KAAKE,GAAU,MAAK,UAAS,eAAaD,GAAQ,oBAAkBU,EAAY,OAC9HhB,GACDe,gBAAAA,EAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,SAASJ,EAAc;AAAA,MACvB,MAAMK,EAAS;AAAA,MACf,OAAOC,EAAQ,GAAGf,MAAW,SAAS,cAAcF,CAAK,KAAK;AAAA,MAC9D,WAAAM;AAAA,IAAA;AAAA,EAAA,CAEJ;AAEJ,GAEMY,IAA0B,CAASrB,MAAA;AACvC,QAAM,EAAE,UAAAC,GAAU,MAAAC,IAAO,UAAgB,OAAAC,IAAQ,aAAa,SAAAmB,GAAS,SAAAlB,IAAU,UAAU,QAAAC,GAAQ,SAAAC,GAAS,QAAAC,EAAA,IAAWP,GAEjHW,IAAaC,EAAGC,EAAO,KAAKA,EAAO,QAAQX,CAAI,EAAE,GAAGW,EAAO,QAAQV,CAAK,EAAE,GAAGU,EAAO,QAAQT,CAAO,EAAE,GAAG;AAAA,IAC5G,CAACS,EAAO,eAAe,CAAC,GAAGS;AAAA,EAAA,CAC5B;AAED,SAAIjB,KAAUC,IAEVU,gBAAAA,EAAA,cAACjB,KAAU,MAAAG,GAAY,OAAAC,GAAc,SAAAC,GAAkB,QAAAC,GAAgB,SAAAC,GAAkB,QAAAC,KACtFN,CACH,IAKFe,gBAAAA,EAAA,cAAC,UAAK,WAAWL,GAAY,eAAaJ,GAAQ,oBAAkBU,EAAY,IAC7E,GAAAK,MACE,OAAOA,KAAY,2CACjBC,GAAS,EAAA,UAAUD,GAAS,MAAMH,EAAS,SAAS,OAAOC,EAAQ,GAAGjB,CAAK,KAAK,GAAG,WAAWU,EAAO,UAAA,CAAW,IAEhHG,gBAAAA,EAAA,cAAAE,GAAA,EAAK,SAAAI,GAAkB,MAAMH,EAAS,SAAS,OAAOC,EAAQ,GAAGjB,CAAK,KAAK,GAAG,WAAWU,EAAO,UAAW,CAAA,IAE/GZ,CACH;AAEJ;"}
1
+ {"version":3,"file":"Tag.js","sources":["../../../src/components/Tag/Tag.tsx"],"sourcesContent":["import React from 'react';\n\nimport cn from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { palette, PaletteNames } from '../../theme/palette';\nimport Icon, { IconSize, SvgIcon } from '../Icon';\nimport { IconName } from '../Icons/IconNames';\nimport LazyIcon from '../LazyIcon';\n\nimport styles from './styles.module.scss';\n\nexport enum TagSize {\n medium = 'medium',\n large = 'large',\n}\n\nexport enum TagVariant {\n normal = 'normal',\n oncolor = 'oncolor',\n emphasised = 'emphasised',\n}\n\nexport type TagColors = Extract<PaletteNames, 'blueberry' | 'neutral' | 'cherry' | 'banana' | 'kiwi' | 'plum'>;\n\nexport interface TagProps {\n /** Sets the text of the tag */\n children: string;\n /** Sets the size of the tag. Default: medium */\n size?: keyof typeof TagSize;\n /** Sets the background of the tag. Default: blueberry */\n color?: TagColors;\n /** Adds an icon to the tag. */\n svgIcon?: SvgIcon | IconName;\n /* Changes the appearance of the tag. Default: normal */\n variant?: keyof typeof TagVariant;\n /** Sets the data-testid attribute on the expander button. */\n testId?: string;\n}\n\nconst Tag: React.FC<TagProps> = props => {\n const { children, size = TagSize.medium, color = 'blueberry', svgIcon, variant = 'normal', testId } = props;\n\n const tagClasses = cn(styles.tag, styles[`tag--${size}`], styles[`tag--${color}`], {\n [styles['tag--has-icon']]: svgIcon,\n [styles['tag--emphasised']]: variant == TagVariant.emphasised,\n });\n\n return (\n <span className={tagClasses} data-testid={testId} data-analyticsid={AnalyticsId.Tag}>\n {svgIcon &&\n (typeof svgIcon === 'string' ? (\n <LazyIcon iconName={svgIcon} size={IconSize.XXSmall} color={palette[`${color}800`]} className={styles.tag__icon} />\n ) : (\n <Icon svgIcon={svgIcon} size={IconSize.XXSmall} color={palette[`${color}800`]} className={styles.tag__icon} />\n ))}\n {children}\n </span>\n );\n};\n\nexport default Tag;\n"],"names":["TagSize","TagVariant","Tag","props","children","size","color","svgIcon","variant","testId","tagClasses","cn","styles","React","AnalyticsId","LazyIcon","IconSize","palette","Icon"],"mappings":";;;;;;;AAYY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,UAAU,WACVA,EAAA,aAAa,cAHHA,IAAAA,KAAA,CAAA,CAAA;AAuBZ,MAAMC,IAA0B,CAASC,MAAA;AACjC,QAAA,EAAE,UAAAC,GAAU,MAAAC,IAAO,UAAgB,OAAAC,IAAQ,aAAa,SAAAC,GAAS,SAAAC,IAAU,UAAU,QAAAC,EAAA,IAAWN,GAEhGO,IAAaC,EAAGC,EAAO,KAAKA,EAAO,QAAQP,CAAI,EAAE,GAAGO,EAAO,QAAQN,CAAK,EAAE,GAAG;AAAA,IACjF,CAACM,EAAO,eAAe,CAAC,GAAGL;AAAA,IAC3B,CAACK,EAAO,iBAAiB,CAAC,GAAGJ,KAAW;AAAA;AAAA,EAAA,CACzC;AAGC,SAAAK,gBAAAA,EAAA,cAAC,UAAK,WAAWH,GAAY,eAAaD,GAAQ,oBAAkBK,EAAY,IAC7E,GAAAP,MACE,OAAOA,KAAY,2CACjBQ,GAAS,EAAA,UAAUR,GAAS,MAAMS,EAAS,SAAS,OAAOC,EAAQ,GAAGX,CAAK,KAAK,GAAG,WAAWM,EAAO,UAAA,CAAW,IAEhHC,gBAAAA,EAAA,cAAAK,GAAA,EAAK,SAAAX,GAAkB,MAAMS,EAAS,SAAS,OAAOC,EAAQ,GAAGX,CAAK,KAAK,GAAG,WAAWM,EAAO,UAAW,CAAA,IAE/GR,CACH;AAEJ;"}
@@ -1,9 +1,8 @@
1
- import o from "./Tag.js";
2
- import { TagAction as e, TagSize as g, TagVariant as i } from "./Tag.js";
1
+ import r from "./Tag.js";
2
+ import { TagSize as e, TagVariant as f } from "./Tag.js";
3
3
  export {
4
- e as TagAction,
5
- g as TagSize,
6
- i as TagVariant,
7
- o as default
4
+ e as TagSize,
5
+ f as TagVariant,
6
+ r as default
8
7
  };
9
8
  //# sourceMappingURL=index.js.map
@@ -21,11 +21,6 @@
21
21
  font-weight: 600;
22
22
  border-radius: 100px;
23
23
 
24
- @media (min-width: map.get($grid-breakpoints, md)) {
25
- font-size: $font-size-xs;
26
- line-height: 1.25rem;
27
- }
28
-
29
24
  $colors: 'blueberry', 'neutral', 'cherry', 'banana', 'kiwi', 'plum';
30
25
 
31
26
  @each $color in $colors {
@@ -44,93 +39,18 @@
44
39
  border-color: map.get($palette-map, #{$color}200);
45
40
  }
46
41
 
47
- &#{$tag}--normal {
48
- &#{$tag}--has-action {
49
- &:hover {
50
- background-color: rgba-to-rgb(rgba(map.get($palette-map, #{$color}200), 0.2));
51
- }
52
- }
53
- }
54
-
55
- &#{$tag}--oncolor {
56
- background-color: transparent;
57
- &#{$tag}--has-action {
58
- &:hover {
59
- background-color: map.get($palette-map, #{$color}100);
60
- border-color: map.get($palette-map, #{$color}100);
61
- }
62
-
63
- &:focus {
64
- background-color: $white;
65
- border-color: $white;
66
- box-shadow: 0 0 0 3px $black;
67
- }
68
- }
69
- }
70
-
71
42
  &#{$tag}--emphasised {
72
- @if $color == 'banana' {
73
- background-color: rgba-to-rgb(rgba(map.get($palette-map, #{$color}300), 0.4));
74
- } @else {
75
- background-color: rgba-to-rgb(rgba(map.get($palette-map, #{$color}200), 0.4));
76
- }
77
- &#{$tag}--has-action {
78
- &:hover {
79
- @if $color == 'banana' {
80
- background-color: rgba-to-rgb(rgba(map.get($palette-map, #{$color}300), 0.5));
81
- } @else {
82
- background-color: rgba-to-rgb(rgba(map.get($palette-map, #{$color}200), 0.5));
83
- }
84
- }
85
- }
86
- }
87
- }
88
- }
89
-
90
- &--has-action[type='button'] {
91
- cursor: pointer;
92
- font-family: inherit;
93
-
94
- &:focus {
95
- outline: none;
96
- border-color: $black;
97
- box-shadow: inset 0 0 0 2px $black;
98
- }
99
- &#{$tag}--undo {
100
- color: $blueberry800;
101
- background-color: $blueberry100;
102
- border-color: $blueberry100;
103
- text-decoration: line-through;
104
-
105
- &:hover {
106
- background-color: $white;
107
- border-color: $blueberry200;
43
+ background-color: map.get($palette-map, #{$color}50);
108
44
  }
109
45
  }
110
46
  }
111
47
 
112
48
  &--medium {
113
49
  padding: 0 getSpacer(xs);
114
- min-height: 26px;
115
-
116
- @media (min-width: map.get($grid-breakpoints, md)) {
117
- min-height: 30px;
118
- }
50
+ min-height: 1.625rem;
119
51
 
120
52
  &#{$tag}--has-icon {
121
- padding: 0 getSpacer(xs) 0 6px;
122
-
123
- @media (min-width: map.get($grid-breakpoints, md)) {
124
- padding: getSpacer(4xs) getSpacer(xs) getSpacer(4xs) 6px;
125
- }
126
- }
127
-
128
- &#{$tag}--has-action {
129
- padding: 0 getSpacer(3xs) 0 getSpacer(xs);
130
-
131
- @media (min-width: map.get($grid-breakpoints, md)) {
132
- padding: getSpacer(4xs) getSpacer(3xs) getSpacer(4xs) getSpacer(xs);
133
- }
53
+ padding: 0 getSpacer(xs) 0 0.375rem;
134
54
  }
135
55
 
136
56
  #{$tag}__icon {
@@ -140,34 +60,14 @@
140
60
 
141
61
  &--large {
142
62
  padding: 0 getSpacer(xs);
143
- min-height: 30px;
144
-
145
- @media (min-width: map.get($grid-breakpoints, md)) {
146
- min-height: 34px;
147
- }
63
+ min-height: 1.875rem;
148
64
 
149
65
  &#{$tag}--has-icon {
150
- padding: getSpacer(4xs) getSpacer(xs) getSpacer(4xs) 6px;
151
-
152
- @media (min-width: map.get($grid-breakpoints, md)) {
153
- padding: getSpacer(3xs) getSpacer(xs) getSpacer(3xs) getSpacer(2xs);
154
- }
155
- }
156
-
157
- &#{$tag}--has-action {
158
- padding: getSpacer(4xs) getSpacer(3xs) getSpacer(4xs) getSpacer(xs);
159
-
160
- @media (min-width: map.get($grid-breakpoints, md)) {
161
- padding: getSpacer(3xs) getSpacer(2xs) getSpacer(3xs) getSpacer(xs);
162
- }
66
+ padding: getSpacer(4xs) getSpacer(xs) getSpacer(4xs) 0.375rem;
163
67
  }
164
68
 
165
69
  #{$tag}__icon {
166
70
  margin-right: getSpacer(4xs);
167
-
168
- @media (min-width: map.get($grid-breakpoints, md)) {
169
- margin-right: getSpacer(3xs);
170
- }
171
71
  }
172
72
  }
173
73
  }
@@ -5,16 +5,12 @@ export type Styles = {
5
5
  'tag--blueberry': string;
6
6
  'tag--cherry': string;
7
7
  'tag--emphasised': string;
8
- 'tag--has-action': string;
9
8
  'tag--has-icon': string;
10
9
  'tag--kiwi': string;
11
10
  'tag--large': string;
12
11
  'tag--medium': string;
13
12
  'tag--neutral': string;
14
- 'tag--normal': string;
15
- 'tag--oncolor': string;
16
13
  'tag--plum': string;
17
- 'tag--undo': string;
18
14
  };
19
15
 
20
16
  export type ClassNames = keyof Styles;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  export interface TagListPropsProps {
3
+ children?: React.ReactNode;
3
4
  /** Sets the data-testid attribute on the expander button. */
4
5
  testId?: string;
5
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TagList.js","sources":["../../../src/components/TagList/TagList.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AnalyticsId } from '../../constants';\n\nimport styles from './styles.module.scss';\n\nexport interface TagListPropsProps {\n /** Sets the data-testid attribute on the expander button. */\n testId?: string;\n}\n\nconst TagList: React.FC<TagListPropsProps> = ({ children, testId }) => {\n return (\n <ul className={styles['tag-list']} data-testid={testId} data-analyticsid={AnalyticsId.TagList}>\n {React.Children.map(children, child => (\n <li className={styles['tag-list__item']}>{child}</li>\n ))}\n </ul>\n );\n};\n\nexport default TagList;\n"],"names":["TagList","children","testId","React","styles","AnalyticsId","child"],"mappings":";;;AAWA,MAAMA,IAAuC,CAAC,EAAE,UAAAC,GAAU,QAAAC,QAEtDC,gBAAAA,EAAA,cAAC,MAAG,EAAA,WAAWC,EAAO,UAAU,GAAG,eAAaF,GAAQ,oBAAkBG,EAAY,QACnF,GAAAF,EAAM,SAAS,IAAIF,GAAU,CAC5BK,MAAAH,gBAAAA,EAAA,cAAC,MAAG,EAAA,WAAWC,EAAO,gBAAgB,EAAA,GAAIE,CAAM,CACjD,CACH;"}
1
+ {"version":3,"file":"TagList.js","sources":["../../../src/components/TagList/TagList.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AnalyticsId } from '../../constants';\n\nimport styles from './styles.module.scss';\n\nexport interface TagListPropsProps {\n children?: React.ReactNode;\n /** Sets the data-testid attribute on the expander button. */\n testId?: string;\n}\n\nconst TagList: React.FC<TagListPropsProps> = ({ children, testId }) => {\n return (\n <ul className={styles['tag-list']} data-testid={testId} data-analyticsid={AnalyticsId.TagList}>\n {React.Children.map(children, child => (\n <li className={styles['tag-list__item']}>{child}</li>\n ))}\n </ul>\n );\n};\n\nexport default TagList;\n"],"names":["TagList","children","testId","React","styles","AnalyticsId","child"],"mappings":";;;AAYA,MAAMA,IAAuC,CAAC,EAAE,UAAAC,GAAU,QAAAC,QAEtDC,gBAAAA,EAAA,cAAC,MAAG,EAAA,WAAWC,EAAO,UAAU,GAAG,eAAaF,GAAQ,oBAAkBG,EAAY,QACnF,GAAAF,EAAM,SAAS,IAAIF,GAAU,CAC5BK,MAAAH,gBAAAA,EAAA,cAAC,MAAG,EAAA,WAAWC,EAAO,gBAAgB,EAAA,GAAIE,CAAM,CACjD,CACH;"}
@@ -12,5 +12,8 @@ export type TooltipContext = {
12
12
  currentTooltip?: string;
13
13
  setCurrentTooltip?: (id?: string) => void;
14
14
  };
15
- export declare const TooltipOpenProvider: React.FC;
15
+ interface TooltipOpenProviderProps {
16
+ children?: React.ReactNode;
17
+ }
18
+ export declare const TooltipOpenProvider: React.FC<TooltipOpenProviderProps>;
16
19
  export default Tooltip;
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useContext, useState, useEffect, useRef } from 'react';\n\nimport TooltipWord from './TooltipWord';\nimport { useDelayedState } from '../../hooks/useDelayedState';\nimport { useUuid } from '../../hooks/useUuid';\nimport HelpBubble from '../HelpBubble';\n\nconst HOVER_DELAY_MS = 200;\n\nexport interface TooltipProps {\n /** Ordet som skal ha en tilhørende tooltip */\n children: string;\n /** Teksten som skal vises i tooltip */\n description: React.ReactNode;\n /** Valgfri test-id */\n testId?: string;\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({ children, description, testId }) => {\n const helpBubbleId = useUuid();\n const wordRef = useRef<HTMLButtonElement>(null);\n const { currentTooltip, setCurrentTooltip } = useContext(TooltipOpenContext);\n const [{ showTooltip, keepOpen }, setShowTooltipDelayed, setShowTooltip] = useDelayedState(\n { showTooltip: false, keepOpen: false },\n HOVER_DELAY_MS\n );\n\n useEffect(() => {\n if (!setCurrentTooltip) {\n return;\n }\n if (showTooltip) {\n setCurrentTooltip(helpBubbleId);\n } else {\n setCurrentTooltip(undefined);\n }\n }, [showTooltip]);\n\n useEffect(() => {\n if (currentTooltip !== helpBubbleId && typeof currentTooltip !== 'undefined') {\n setShowTooltip(prevState => ({ showTooltip: false, keepOpen: prevState.keepOpen }));\n }\n }, [currentTooltip]);\n\n const handleDocumentClick = (): void => {\n if (!showTooltip) {\n setShowTooltip({ showTooltip: false, keepOpen: false });\n }\n };\n\n useEffect(() => {\n document.addEventListener('mouseup', handleDocumentClick);\n return (): void => {\n document.removeEventListener('mouseup', handleDocumentClick);\n };\n }, []);\n\n const handleTooltipClick = (): void => {\n setShowTooltip(prevState => ({ showTooltip: !prevState.showTooltip, keepOpen: !prevState.keepOpen }));\n };\n\n const handleFocus = (): void => {\n if (!currentTooltip) {\n setShowTooltipDelayed(prevState => ({ showTooltip: true, keepOpen: prevState.keepOpen }));\n }\n };\n\n const handleBlur = (): void => {\n setShowTooltip(prevState => ({ showTooltip: false, keepOpen: prevState.keepOpen }));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>): void => {\n if (e.key === 'Enter') {\n setShowTooltip(prevState => ({ showTooltip: !prevState.showTooltip, keepOpen: !prevState.keepOpen }));\n }\n if (e.key === 'Escape') {\n setShowTooltip({ showTooltip: false, keepOpen: false });\n }\n };\n\n return (\n <>\n <TooltipWord\n ref={wordRef}\n onClick={handleTooltipClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n ariaDescribedById={helpBubbleId}\n testId={testId}\n >\n {children}\n </TooltipWord>\n <HelpBubble helpBubbleId={helpBubbleId} controllerRef={wordRef} role=\"tooltip\" showBubble={showTooltip || keepOpen}>\n {description}\n </HelpBubble>\n </>\n );\n};\n\nexport type TooltipContext = {\n currentTooltip?: string;\n setCurrentTooltip?: (id?: string) => void;\n};\n\nconst TooltipOpenContext = React.createContext<TooltipContext>({\n currentTooltip: undefined,\n});\n\nexport const TooltipOpenProvider: React.FC = ({ children }) => {\n const [currentTooltip, setCurrentTooltip] = useState<string>();\n\n return <TooltipOpenContext.Provider value={{ currentTooltip, setCurrentTooltip }}>{children}</TooltipOpenContext.Provider>;\n};\n\nexport default Tooltip;\n"],"names":["HOVER_DELAY_MS","Tooltip","children","description","testId","helpBubbleId","useUuid","wordRef","useRef","currentTooltip","setCurrentTooltip","useContext","TooltipOpenContext","showTooltip","keepOpen","setShowTooltipDelayed","setShowTooltip","useDelayedState","useEffect","prevState","handleDocumentClick","handleTooltipClick","handleFocus","handleBlur","handleKeyDown","React","TooltipWord","HelpBubble","TooltipOpenProvider","useState"],"mappings":";;;;;AAOA,MAAMA,IAAiB,KAWVC,IAAkC,CAAC,EAAE,UAAAC,GAAU,aAAAC,GAAa,QAAAC,QAAa;AACpF,QAAMC,IAAeC,KACfC,IAAUC,EAA0B,IAAI,GACxC,EAAE,gBAAAC,GAAgB,mBAAAC,EAAkB,IAAIC,EAAWC,CAAkB,GACrE,CAAC,EAAE,aAAAC,GAAa,UAAAC,EAAY,GAAAC,GAAuBC,CAAc,IAAIC;AAAA,IACzE,EAAE,aAAa,IAAO,UAAU,GAAM;AAAA,IACtCjB;AAAA,EAAA;AAGF,EAAAkB,EAAU,MAAM;AACd,IAAKR,KAIHA,EADEG,IACgBR,IAEA,MAFY;AAAA,EAGhC,GACC,CAACQ,CAAW,CAAC,GAEhBK,EAAU,MAAM;AACd,IAAIT,MAAmBJ,KAAgB,OAAOI,IAAmB,OAC/DO,EAAe,QAAc,EAAE,aAAa,IAAO,UAAUG,EAAU,SAAW,EAAA;AAAA,EACpF,GACC,CAACV,CAAc,CAAC;AAEnB,QAAMW,IAAsB,MAAY;AACtC,IAAKP,KACHG,EAAe,EAAE,aAAa,IAAO,UAAU,GAAO,CAAA;AAAA,EACxD;AAGF,EAAAE,EAAU,OACC,SAAA,iBAAiB,WAAWE,CAAmB,GACjD,MAAY;AACR,aAAA,oBAAoB,WAAWA,CAAmB;AAAA,EAAA,IAE5D,CAAE,CAAA;AAEL,QAAMC,IAAqB,MAAY;AACtB,IAAAL,EAAA,CAAAG,OAAc,EAAE,aAAa,CAACA,EAAU,aAAa,UAAU,CAACA,EAAU,SAAA,EAAW;AAAA,EAAA,GAGhGG,IAAc,MAAY;AAC9B,IAAKb,KACHM,EAAsB,QAAc,EAAE,aAAa,IAAM,UAAUI,EAAU,SAAW,EAAA;AAAA,EAC1F,GAGII,IAAa,MAAY;AAC7B,IAAAP,EAAe,QAAc,EAAE,aAAa,IAAO,UAAUG,EAAU,SAAW,EAAA;AAAA,EAAA,GAG9EK,IAAgB,CAAC,MAAkD;AACnE,IAAA,EAAE,QAAQ,WACGR,EAAA,CAAAG,OAAc,EAAE,aAAa,CAACA,EAAU,aAAa,UAAU,CAACA,EAAU,SAAA,EAAW,GAElG,EAAE,QAAQ,YACZH,EAAe,EAAE,aAAa,IAAO,UAAU,GAAO,CAAA;AAAA,EACxD;AAGF,SAEIS,gBAAAA,EAAA,cAAAA,EAAA,UAAA,MAAAA,gBAAAA,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKnB;AAAA,MACL,SAASc;AAAA,MACT,SAASC;AAAA,MACT,QAAQC;AAAA,MACR,WAAWC;AAAA,MACX,mBAAmBnB;AAAA,MACnB,QAAAD;AAAA,IAAA;AAAA,IAECF;AAAA,EAAA,GAEHuB,gBAAAA,EAAA,cAACE,GAAW,EAAA,cAAAtB,GAA4B,eAAeE,GAAS,MAAK,WAAU,YAAYM,KAAeC,EACvG,GAAAX,CACH,CACF;AAEJ,GAOMS,IAAqBa,EAAM,cAA8B;AAAA,EAC7D,gBAAgB;AAClB,CAAC,GAEYG,IAAgC,CAAC,EAAE,UAAA1B,QAAe;AAC7D,QAAM,CAACO,GAAgBC,CAAiB,IAAImB,EAAiB;AAEtD,SAAAJ,gBAAAA,EAAA,cAACb,EAAmB,UAAnB,EAA4B,OAAO,EAAE,gBAAAH,GAAgB,mBAAAC,IAAkB,GAAIR,CAAS;AAC9F;"}
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useContext, useState, useEffect, useRef } from 'react';\n\nimport TooltipWord from './TooltipWord';\nimport { useDelayedState } from '../../hooks/useDelayedState';\nimport { useUuid } from '../../hooks/useUuid';\nimport HelpBubble from '../HelpBubble';\n\nconst HOVER_DELAY_MS = 200;\n\nexport interface TooltipProps {\n /** Ordet som skal ha en tilhørende tooltip */\n children: string;\n /** Teksten som skal vises i tooltip */\n description: React.ReactNode;\n /** Valgfri test-id */\n testId?: string;\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({ children, description, testId }) => {\n const helpBubbleId = useUuid();\n const wordRef = useRef<HTMLButtonElement>(null);\n const { currentTooltip, setCurrentTooltip } = useContext(TooltipOpenContext);\n const [{ showTooltip, keepOpen }, setShowTooltipDelayed, setShowTooltip] = useDelayedState(\n { showTooltip: false, keepOpen: false },\n HOVER_DELAY_MS\n );\n\n useEffect(() => {\n if (!setCurrentTooltip) {\n return;\n }\n if (showTooltip) {\n setCurrentTooltip(helpBubbleId);\n } else {\n setCurrentTooltip(undefined);\n }\n }, [showTooltip]);\n\n useEffect(() => {\n if (currentTooltip !== helpBubbleId && typeof currentTooltip !== 'undefined') {\n setShowTooltip(prevState => ({ showTooltip: false, keepOpen: prevState.keepOpen }));\n }\n }, [currentTooltip]);\n\n const handleDocumentClick = (): void => {\n if (!showTooltip) {\n setShowTooltip({ showTooltip: false, keepOpen: false });\n }\n };\n\n useEffect(() => {\n document.addEventListener('mouseup', handleDocumentClick);\n return (): void => {\n document.removeEventListener('mouseup', handleDocumentClick);\n };\n }, []);\n\n const handleTooltipClick = (): void => {\n setShowTooltip(prevState => ({ showTooltip: !prevState.showTooltip, keepOpen: !prevState.keepOpen }));\n };\n\n const handleFocus = (): void => {\n if (!currentTooltip) {\n setShowTooltipDelayed(prevState => ({ showTooltip: true, keepOpen: prevState.keepOpen }));\n }\n };\n\n const handleBlur = (): void => {\n setShowTooltip(prevState => ({ showTooltip: false, keepOpen: prevState.keepOpen }));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>): void => {\n if (e.key === 'Enter') {\n setShowTooltip(prevState => ({ showTooltip: !prevState.showTooltip, keepOpen: !prevState.keepOpen }));\n }\n if (e.key === 'Escape') {\n setShowTooltip({ showTooltip: false, keepOpen: false });\n }\n };\n\n return (\n <>\n <TooltipWord\n ref={wordRef}\n onClick={handleTooltipClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n ariaDescribedById={helpBubbleId}\n testId={testId}\n >\n {children}\n </TooltipWord>\n <HelpBubble helpBubbleId={helpBubbleId} controllerRef={wordRef} role=\"tooltip\" showBubble={showTooltip || keepOpen}>\n {description}\n </HelpBubble>\n </>\n );\n};\n\nexport type TooltipContext = {\n currentTooltip?: string;\n setCurrentTooltip?: (id?: string) => void;\n};\n\nconst TooltipOpenContext = React.createContext<TooltipContext>({\n currentTooltip: undefined,\n});\n\ninterface TooltipOpenProviderProps {\n children?: React.ReactNode;\n}\n\nexport const TooltipOpenProvider: React.FC<TooltipOpenProviderProps> = ({ children }) => {\n const [currentTooltip, setCurrentTooltip] = useState<string>();\n\n return <TooltipOpenContext.Provider value={{ currentTooltip, setCurrentTooltip }}>{children}</TooltipOpenContext.Provider>;\n};\n\nexport default Tooltip;\n"],"names":["HOVER_DELAY_MS","Tooltip","children","description","testId","helpBubbleId","useUuid","wordRef","useRef","currentTooltip","setCurrentTooltip","useContext","TooltipOpenContext","showTooltip","keepOpen","setShowTooltipDelayed","setShowTooltip","useDelayedState","useEffect","prevState","handleDocumentClick","handleTooltipClick","handleFocus","handleBlur","handleKeyDown","React","TooltipWord","HelpBubble","TooltipOpenProvider","useState"],"mappings":";;;;;AAOA,MAAMA,IAAiB,KAWVC,IAAkC,CAAC,EAAE,UAAAC,GAAU,aAAAC,GAAa,QAAAC,QAAa;AACpF,QAAMC,IAAeC,KACfC,IAAUC,EAA0B,IAAI,GACxC,EAAE,gBAAAC,GAAgB,mBAAAC,EAAkB,IAAIC,EAAWC,CAAkB,GACrE,CAAC,EAAE,aAAAC,GAAa,UAAAC,EAAY,GAAAC,GAAuBC,CAAc,IAAIC;AAAA,IACzE,EAAE,aAAa,IAAO,UAAU,GAAM;AAAA,IACtCjB;AAAA,EAAA;AAGF,EAAAkB,EAAU,MAAM;AACd,IAAKR,KAIHA,EADEG,IACgBR,IAEA,MAFY;AAAA,EAGhC,GACC,CAACQ,CAAW,CAAC,GAEhBK,EAAU,MAAM;AACd,IAAIT,MAAmBJ,KAAgB,OAAOI,IAAmB,OAC/DO,EAAe,QAAc,EAAE,aAAa,IAAO,UAAUG,EAAU,SAAW,EAAA;AAAA,EACpF,GACC,CAACV,CAAc,CAAC;AAEnB,QAAMW,IAAsB,MAAY;AACtC,IAAKP,KACHG,EAAe,EAAE,aAAa,IAAO,UAAU,GAAO,CAAA;AAAA,EACxD;AAGF,EAAAE,EAAU,OACC,SAAA,iBAAiB,WAAWE,CAAmB,GACjD,MAAY;AACR,aAAA,oBAAoB,WAAWA,CAAmB;AAAA,EAAA,IAE5D,CAAE,CAAA;AAEL,QAAMC,IAAqB,MAAY;AACtB,IAAAL,EAAA,CAAAG,OAAc,EAAE,aAAa,CAACA,EAAU,aAAa,UAAU,CAACA,EAAU,SAAA,EAAW;AAAA,EAAA,GAGhGG,IAAc,MAAY;AAC9B,IAAKb,KACHM,EAAsB,QAAc,EAAE,aAAa,IAAM,UAAUI,EAAU,SAAW,EAAA;AAAA,EAC1F,GAGII,IAAa,MAAY;AAC7B,IAAAP,EAAe,QAAc,EAAE,aAAa,IAAO,UAAUG,EAAU,SAAW,EAAA;AAAA,EAAA,GAG9EK,IAAgB,CAAC,MAAkD;AACnE,IAAA,EAAE,QAAQ,WACGR,EAAA,CAAAG,OAAc,EAAE,aAAa,CAACA,EAAU,aAAa,UAAU,CAACA,EAAU,SAAA,EAAW,GAElG,EAAE,QAAQ,YACZH,EAAe,EAAE,aAAa,IAAO,UAAU,GAAO,CAAA;AAAA,EACxD;AAGF,SAEIS,gBAAAA,EAAA,cAAAA,EAAA,UAAA,MAAAA,gBAAAA,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKnB;AAAA,MACL,SAASc;AAAA,MACT,SAASC;AAAA,MACT,QAAQC;AAAA,MACR,WAAWC;AAAA,MACX,mBAAmBnB;AAAA,MACnB,QAAAD;AAAA,IAAA;AAAA,IAECF;AAAA,EAAA,GAEHuB,gBAAAA,EAAA,cAACE,GAAW,EAAA,cAAAtB,GAA4B,eAAeE,GAAS,MAAK,WAAU,YAAYM,KAAeC,EACvG,GAAAX,CACH,CACF;AAEJ,GAOMS,IAAqBa,EAAM,cAA8B;AAAA,EAC7D,gBAAgB;AAClB,CAAC,GAMYG,IAA0D,CAAC,EAAE,UAAA1B,QAAe;AACvF,QAAM,CAACO,GAAgBC,CAAiB,IAAImB,EAAiB;AAEtD,SAAAJ,gBAAAA,EAAA,cAACb,EAAmB,UAAnB,EAA4B,OAAO,EAAE,gBAAAH,GAAgB,mBAAAC,IAAkB,GAAIR,CAAS;AAC9F;"}
@@ -6,11 +6,6 @@ interface ValidationProps {
6
6
  errorTitle?: string;
7
7
  /** Validation errors. If errors include references to HTML elements, the errors will be rendered as links with an onClick handler to focus the element. */
8
8
  errors?: ValidationErrors;
9
- /**
10
- * Summary of form errors
11
- * @deprecated Use errorTitle and errors instead
12
- * */
13
- errorSummary?: string;
14
9
  /** Items in the Validation compontent */
15
10
  children?: React.ReactNode;
16
11
  /** Adds custom classes to the element. */
@@ -1,15 +1,14 @@
1
- import e from "react";
2
- import s from "classnames";
3
- import l from "./ValidationSummary.js";
4
- import { AnalyticsId as n } from "../../constants.js";
5
- import { isComponent as d } from "../../utils/component.js";
6
- import { FormGroup as c } from "../FormGroup/FormGroup.js";
7
- import t from "../Validation/styles.module.scss";
8
- const f = e.forwardRef((r, m) => {
9
- const o = r.errors || r.errorSummary ? t["form-group-wrapper--error-sibling"] : "", i = s(t["validation-errors"], r.errorSummary && t["validation-errors--visible"]);
10
- return /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", { "data-testid": r.testId, "data-analyticsid": n.Validation, className: r.className, ref: m }, e.Children.map(r.children, (a) => d(a, c) ? e.cloneElement(a, {
11
- className: o
12
- }) : a)), /* @__PURE__ */ e.createElement(l, { errorTitle: r.errorTitle, errors: r.errors }, r.errorSummary && /* @__PURE__ */ e.createElement("div", { className: i }, r.errorSummary)));
1
+ import r from "react";
2
+ import m from "./ValidationSummary.js";
3
+ import { AnalyticsId as o } from "../../constants.js";
4
+ import { isComponent as l } from "../../utils/component.js";
5
+ import { FormGroup as d } from "../FormGroup/FormGroup.js";
6
+ import s from "../Validation/styles.module.scss";
7
+ const f = r.forwardRef((t, n) => {
8
+ const a = (e) => l(e, d) ? r.cloneElement(e, {
9
+ errorWrapperClassName: s["validation__error-wrapper"]
10
+ }) : r.isValidElement(e) && e.type === r.Fragment ? r.Children.map(e.props.children, (i) => a(i)) : e;
11
+ return /* @__PURE__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement("div", { "data-testid": t.testId, "data-analyticsid": o.Validation, className: t.className, ref: n }, r.Children.map(t.children, (e) => a(e))), /* @__PURE__ */ r.createElement(m, { errorTitle: t.errorTitle, errors: t.errors }));
13
12
  });
14
13
  f.displayName = "Validation";
15
14
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Validation.js","sources":["../../../src/components/Validation/Validation.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { ValidationErrors } from './types';\nimport ValidationSummary from './ValidationSummary';\nimport { AnalyticsId, FormSize } from '../../constants';\nimport { isComponent } from '../../utils/component';\nimport FormGroup, { FormGroupProps } from '../FormGroup/FormGroup';\n\nimport styles from './styles.module.scss';\n\ninterface ValidationProps {\n /** Error summary title */\n errorTitle?: string;\n /** Validation errors. If errors include references to HTML elements, the errors will be rendered as links with an onClick handler to focus the element. */\n errors?: ValidationErrors;\n /**\n * Summary of form errors\n * @deprecated Use errorTitle and errors instead\n * */\n errorSummary?: string;\n /** Items in the Validation compontent */\n children?: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Changes the visuals of the formgroup */\n size?: keyof typeof FormSize;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nexport const Validation = React.forwardRef((props: ValidationProps, ref: React.ForwardedRef<HTMLDivElement>) => {\n const hasErrors = props.errors || props.errorSummary;\n const formGroupClasses = hasErrors ? styles['form-group-wrapper--error-sibling'] : '';\n const errorClasses = classNames(styles['validation-errors'], props.errorSummary && styles['validation-errors--visible']);\n\n return (\n <>\n <div data-testid={props.testId} data-analyticsid={AnalyticsId.Validation} className={props.className} ref={ref}>\n {React.Children.map(props.children, (child: React.ReactNode) => {\n if (isComponent<FormGroupProps>(child, FormGroup)) {\n return React.cloneElement(child, {\n className: formGroupClasses,\n });\n }\n\n return child;\n })}\n </div>\n <ValidationSummary errorTitle={props.errorTitle} errors={props.errors}>\n {props.errorSummary && <div className={errorClasses}>{props.errorSummary}</div>}\n </ValidationSummary>\n </>\n );\n});\n\nValidation.displayName = 'Validation';\n\nexport default Validation;\n"],"names":["Validation","React","props","ref","formGroupClasses","styles","errorClasses","classNames","AnalyticsId","child","isComponent","FormGroup","ValidationSummary"],"mappings":";;;;;;;AAgCO,MAAMA,IAAaC,EAAM,WAAW,CAACC,GAAwBC,MAA4C;AAE9G,QAAMC,IADYF,EAAM,UAAUA,EAAM,eACHG,EAAO,mCAAmC,IAAI,IAC7EC,IAAeC,EAAWF,EAAO,mBAAmB,GAAGH,EAAM,gBAAgBG,EAAO,4BAA4B,CAAC;AAEvH,2DAEKJ,gBAAAA,EAAA,cAAA,OAAA,EAAI,eAAaC,EAAM,QAAQ,oBAAkBM,EAAY,YAAY,WAAWN,EAAM,WAAW,KAAAC,KACnGF,EAAM,SAAS,IAAIC,EAAM,UAAU,CAACO,MAC/BC,EAA4BD,GAAOE,CAAS,IACvCV,EAAM,aAAaQ,GAAO;AAAA,IAC/B,WAAWL;AAAA,EAAA,CACZ,IAGIK,CACR,CACH,GACAR,gBAAAA,EAAA,cAACW,KAAkB,YAAYV,EAAM,YAAY,QAAQA,EAAM,UAC5DA,EAAM,gDAAiB,OAAI,EAAA,WAAWI,KAAeJ,EAAM,YAAa,CAC3E,CACF;AAEJ,CAAC;AAEDF,EAAW,cAAc;"}
1
+ {"version":3,"file":"Validation.js","sources":["../../../src/components/Validation/Validation.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ValidationErrors } from './types';\nimport ValidationSummary from './ValidationSummary';\nimport { AnalyticsId, FormSize } from '../../constants';\nimport { isComponent } from '../../utils/component';\nimport FormGroup, { FormGroupProps } from '../FormGroup/FormGroup';\n\nimport styles from './styles.module.scss';\n\ninterface ValidationProps {\n /** Error summary title */\n errorTitle?: string;\n /** Validation errors. If errors include references to HTML elements, the errors will be rendered as links with an onClick handler to focus the element. */\n errors?: ValidationErrors;\n /** Items in the Validation compontent */\n children?: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Changes the visuals of the formgroup */\n size?: keyof typeof FormSize;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nexport const Validation = React.forwardRef((props: ValidationProps, ref: React.ForwardedRef<HTMLDivElement>) => {\n const renderChild = (child: React.ReactNode): React.ReactNode => {\n if (isComponent<FormGroupProps>(child, FormGroup)) {\n return React.cloneElement(child, {\n errorWrapperClassName: styles['validation__error-wrapper'],\n });\n }\n if (React.isValidElement(child) && child.type === React.Fragment) {\n return React.Children.map(child.props.children, (child: React.ReactNode) => {\n return renderChild(child);\n });\n }\n\n return child;\n };\n\n return (\n <>\n <div data-testid={props.testId} data-analyticsid={AnalyticsId.Validation} className={props.className} ref={ref}>\n {React.Children.map(props.children, (child: React.ReactNode) => renderChild(child))}\n </div>\n <ValidationSummary errorTitle={props.errorTitle} errors={props.errors} />\n </>\n );\n});\n\nValidation.displayName = 'Validation';\n\nexport default Validation;\n"],"names":["Validation","React","props","ref","renderChild","child","isComponent","FormGroup","styles","AnalyticsId","ValidationSummary"],"mappings":";;;;;;AAyBO,MAAMA,IAAaC,EAAM,WAAW,CAACC,GAAwBC,MAA4C;AACxG,QAAAC,IAAc,CAACC,MACfC,EAA4BD,GAAOE,CAAS,IACvCN,EAAM,aAAaI,GAAO;AAAA,IAC/B,uBAAuBG,EAAO,2BAA2B;AAAA,EAAA,CAC1D,IAECP,EAAM,eAAeI,CAAK,KAAKA,EAAM,SAASJ,EAAM,WAC/CA,EAAM,SAAS,IAAII,EAAM,MAAM,UAAU,CAACA,MACxCD,EAAYC,CAAK,CACzB,IAGIA;AAGT,SAEIJ,gBAAAA,EAAA,cAAAA,EAAA,UAAA,MAAAA,gBAAAA,EAAA,cAAC,OAAI,EAAA,eAAaC,EAAM,QAAQ,oBAAkBO,EAAY,YAAY,WAAWP,EAAM,WAAW,KAAAC,KACnGF,EAAM,SAAS,IAAIC,EAAM,UAAU,CAACG,MAA2BD,EAAYC,CAAK,CAAC,CACpF,GACCJ,gBAAAA,EAAA,cAAAS,GAAA,EAAkB,YAAYR,EAAM,YAAY,QAAQA,EAAM,OAAQ,CAAA,CACzE;AAEJ,CAAC;AAEDF,EAAW,cAAc;"}
@@ -6,8 +6,8 @@ import { Title as s } from "../Title/Title.js";
6
6
  import a from "../Validation/styles.module.scss";
7
7
  const y = (e) => {
8
8
  const { errorTitleHtmlMarkup: l = "h2" } = e, t = n(), i = m(
9
- a["validation-summary"],
10
- !!e.errors && Object.entries(e.errors).length > 0 && a["validation-summary--visible"]
9
+ a.validation__summary,
10
+ !!e.errors && Object.entries(e.errors).length > 0 && a["validation__summary--visible"]
11
11
  );
12
12
  return /* @__PURE__ */ r.createElement("div", { role: "alert", "aria-live": "polite", "aria-relevant": "all", "aria-labelledby": t, className: i }, !!e.errors && Object.entries(e.errors).length > 0 && /* @__PURE__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement(s, { appearance: "title4", id: t, htmlMarkup: l, margin: { marginTop: 0, marginBottom: 1 } }, e.errorTitle), /* @__PURE__ */ r.createElement(o, { errors: e.errors })), e.children);
13
13
  };