@helsenorge/designsystem-react 10.5.0 → 10.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +852 -1397
- package/Trigger.js.map +1 -1
- package/components/AnchorLink/styles.module.scss +0 -1
- package/components/Button/styles.module.scss +13 -13
- package/components/Checkbox/styles.module.scss +2 -2
- package/components/Chip/styles.module.scss +0 -1
- package/components/Close/styles.module.scss +2 -2
- package/components/Drawer/styles.module.scss +12 -12
- package/components/Dropdown/index.js +9 -6
- package/components/Dropdown/index.js.map +1 -1
- package/components/Dropdown/styles.module.scss +5 -5
- package/components/Duolist/styles.module.scss +2 -2
- package/components/EmptyState/styles.module.scss +5 -5
- package/components/ErrorWrapper/styles.module.scss +2 -2
- package/components/Expander/styles.module.scss +8 -8
- package/components/ExpanderHierarchy/expander.module.scss +7 -7
- package/components/ExpanderList/styles.module.scss +3 -3
- package/components/FormGroup/styles.module.scss +1 -1
- package/components/HelpBubble/styles.module.scss +2 -2
- package/components/HelpQuestion/styles.module.scss +2 -2
- package/components/HighlightPanel/styles.module.scss +2 -2
- package/components/HorizontalScroll/styles.module.scss +1 -1
- package/components/Input/styles.module.scss +3 -3
- package/components/Label/styles.module.scss +2 -2
- package/components/LinkList/styles.module.scss +3 -3
- package/components/ListHeader/styles.module.scss +1 -1
- package/components/MaxCharacters/styles.module.scss +2 -2
- package/components/Modal/styles.module.scss +16 -16
- package/components/NotificationPanel/styles.module.scss +8 -8
- package/components/Panel/styles.module.scss +16 -16
- package/components/PanelList/styles.module.scss +2 -2
- package/components/PopMenu/index.js.map +1 -1
- package/components/PopMenu/styles.module.scss +10 -4
- package/components/PopOver/styles.module.scss +2 -2
- package/components/PromoPanel/styles.module.scss +9 -9
- package/components/RadioButton/styles.module.scss +2 -2
- package/components/Select/styles.module.scss +3 -3
- package/components/ServiceMessage/styles.module.scss +1 -1
- package/components/SharingStatus/styles.module.scss +1 -1
- package/components/Slider/styles.module.scss +2 -2
- package/components/StatusDot/styles.module.scss +3 -3
- package/components/StepButtons/styles.module.scss +3 -3
- package/components/Stepper/styles.module.scss +2 -2
- package/components/StickyNote/styles.module.scss +1 -1
- package/components/Table/styles.module.scss +1 -1
- package/components/Tabs/TabList/styles.module.scss +2 -2
- package/components/Tabs/TabPanel/styles.module.scss +3 -3
- package/components/Tabs/styles.module.scss +3 -3
- package/components/Tag/styles.module.scss +1 -1
- package/components/TagList/styles.module.scss +1 -1
- package/components/Textarea/styles.module.scss +1 -1
- package/components/Tile/styles.module.scss +7 -7
- package/components/Toggle/styles.module.scss +5 -5
- package/components/Trigger/Trigger.d.ts +1 -0
- package/components/Validation/styles.module.scss +2 -2
- package/package.json +1 -1
- package/scss/_font-mixins.scss +21 -21
- package/scss/_input.scss +2 -2
- package/scss/_print.scss +3 -3
- package/scss/_reset.scss +1 -1
- package/scss/helsenorge.scss +7 -7
- package/scss/typography.module.scss +4 -4
package/Trigger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Trigger.js","sources":["../src/components/Trigger/HelpSign.tsx","../src/components/Trigger/Trigger.tsx"],"sourcesContent":["import React from 'react';\n\nimport { getIcon, SvgPathProps } from '../Icon';\n\nconst HelpSign: React.FC<SvgPathProps> = ({ size, isHovered }: SvgPathProps): React.ReactElement => {\n const normal = (\n <path d=\"M18.854 19.678c0-2.268 1.701-4.74 5.126-4.74 3.358 0 5.172 2.222 5.172 4.536 0 1.793-.952 3.064-2.268 3.992l-.976.682c-.749.521-1.134 1.27-1.134 2.154 0 .047 0 .16.023.296h-2.269a46.85 46.85 0 0 0-.01-.139 8.554 8.554 0 0 1-.036-.724c0-1.36.522-2.471 1.84-3.424l1.042-.75c.75-.544 1.066-1.201 1.066-1.974 0-1.178-.793-2.29-2.45-2.29-1.679 0-2.563 1.293-2.563 2.585 0 .34.045.772.136 1.022l-2.564-.181a3.903 3.903 0 0 1-.135-1.044Zm3.176 10.186c0-.908.726-1.678 1.656-1.678.908 0 1.656.77 1.656 1.678 0 .907-.748 1.657-1.656 1.657-.93 0-1.656-.75-1.656-1.657Z\" />\n );\n\n const normalHover = (\n <path d=\"M18.854 18.178c0-2.268 1.701-4.74 5.126-4.74 3.358 0 5.172 2.223 5.172 4.536 0 1.793-.952 3.064-2.268 3.992l-.976.682c-.749.521-1.134 1.27-1.134 2.154 0 .047 0 .16.023.296h-2.269a46.85 46.85 0 0 0-.01-.139 8.554 8.554 0 0 1-.036-.724c0-1.36.522-2.471 1.838-3.424l1.044-.75c.75-.544 1.066-1.201 1.066-1.974 0-1.178-.793-2.29-2.45-2.29-1.679 0-2.563 1.293-2.563 2.585 0 .34.045.772.135 1.022l-2.563-.181a3.903 3.903 0 0 1-.135-1.044Zm3.176 11.686c0-.908.725-1.678 1.655-1.678.908 0 1.657.77 1.657 1.678 0 .907-.749 1.657-1.657 1.657-.93 0-1.655-.75-1.655-1.657Z\" />\n );\n\n const xSmall = (\n <path d=\"M23.98 14.937c-3.425 0-5.127 2.473-5.127 4.741 0 .363.047.726.137 1.044l2.563.182c-.09-.25-.136-.681-.136-1.022 0-1.292.885-2.586 2.563-2.586 1.658 0 2.45 1.112 2.45 2.291 0 .772-.317 1.43-1.065 1.974l-1.043.749c-1.317.953-1.84 2.065-1.84 3.425 0 .319.024.567.047.862h2.267c-.021-.135-.021-.25-.021-.295 0-.884.385-1.633 1.133-2.154l.976-.681c1.317-.93 2.27-2.2 2.27-3.993 0-2.314-1.816-4.537-5.174-4.537m-.294 13.248c-.93 0-1.656.773-1.656 1.678a1.65 1.65 0 0 0 1.656 1.657c.907 0 1.656-.748 1.656-1.657 0-.905-.749-1.678-1.656-1.678\" />\n );\n\n const xSmallHover = (\n <path d=\"M18.853 18.289c0-2.268 1.701-4.742 5.127-4.742 3.357 0 5.173 2.223 5.173 4.537 0 1.794-.953 3.065-2.27 3.994l-.976.681c-.747.52-1.133 1.27-1.133 2.154 0 .046 0 .16.022.295h-2.267a39.324 39.324 0 0 0-.01-.125 8.468 8.468 0 0 1-.037-.737c0-1.36.523-2.472 1.839-3.425l1.043-.75c.748-.543 1.065-1.201 1.065-1.973 0-1.18-.792-2.29-2.45-2.29-1.678 0-2.562 1.293-2.562 2.585 0 .341.045.772.135 1.022l-2.563-.183a3.914 3.914 0 0 1-.136-1.043Zm3.176 11.575c0-.907.726-1.679 1.656-1.679.908 0 1.657.772 1.657 1.68 0 .907-.749 1.656-1.657 1.656-.93 0-1.656-.749-1.656-1.657Z\" />\n );\n\n return getIcon({ size, isHovered, normal, normalHover, xSmall, xSmallHover });\n};\n\nexport default HelpSign;\n","import React from 'react';\n\nimport classNames from 'classnames';\n\nimport HelpSign from './HelpSign';\nimport { AnalyticsId, IconSize } from '../../constants';\nimport { useHover } from '../../hooks/useHover';\nimport { getColor } from '../../theme/currys';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\nimport { mergeRefs } from '../../utils/refs';\nimport Icon, { SvgIcon } from '../Icon';\n\nimport styles from './styles.module.scss';\n\nexport type TriggerTags = 'button' | 'span';\n\nexport type TriggerVariant = 'help'; // @todo Support variant='info' in later version\n\nexport type TriggerSize = 'medium' | 'large';\n\nexport type TriggerOnColor = 'onlight' | 'ondark';\n\nexport interface TriggerProps extends Pick<React.InputHTMLAttributes<HTMLButtonElement>, 'onClick' | 'aria-haspopup' | 'aria-controls'> {\n /**\n * Sets aria-label of the trigger. ariaLabel or ariaLabelledById MUST be set!\n */\n ariaLabel?: string;\n /**\n * Sets aria-labelledby of the trigger. ariaLabel or ariaLabelledById MUST be set!\n */\n ariaLabelledById?: string;\n /**\n * Controls the icon and color. Default: help.\n */\n variant?: TriggerVariant;\n /**\n * Changes the design based on the background the trigger is placed on. Default: onlight.\n */\n onColor?: TriggerOnColor;\n /**\n * Size of the trigger. Default: medium.\n */\n size?: TriggerSize;\n /**\n * Indicates that the trigger is in use.\n */\n selected?: boolean;\n /**\n * Indicates that the trigger is hovered. Used in combination with htmlMarkup=span to force visual hover state.\n */\n isHovered?: boolean;\n /**\n * Changes the underlying element of the trigger. If set to span, the trigger will be a non-interactive icon. Default: button\n */\n htmlMarkup?: TriggerTags;\n /**\n * Classname will be applied to the button element.\n */\n className?: string;\n /**\n * Optional test id.\n */\n testId?: string;\n}\n\nconst iconMap: Record<TriggerVariant, SvgIcon> = {\n help: HelpSign,\n //info: InfoSignStroke, // @todo Support variant='info' in later version\n};\n\nconst iconSizeMap: Record<TriggerSize, IconSize> = {\n medium: IconSize.XSmall,\n large: IconSize.Small,\n};\n\nconst getIconColor = (onColor: TriggerOnColor, variant: TriggerVariant, isActive: boolean): string | undefined => {\n if (onColor === 'ondark') {\n return 'white';\n }\n\n const depth = isActive ? 800 : 600;\n\n if (variant === 'help') {\n return getColor('plum', depth);\n }\n\n if (variant === 'info') {\n return getColor('blueberry', depth);\n }\n};\n\nconst Trigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n (\n {\n ariaLabel,\n ariaLabelledById,\n variant = 'help',\n onColor = 'onlight',\n size = 'medium',\n selected = false,\n isHovered,\n htmlMarkup = 'button',\n className,\n testId,\n ...rest\n },\n ref\n ) => {\n const { isHovered: buttonIsHovered, hoverRef } = useHover<HTMLButtonElement>();\n\n const triggerClasses = classNames(\n styles.trigger,\n onColor === 'onlight' && styles[`trigger--${variant}`], // variants look the same when onColor=ondark\n onColor === 'ondark' && styles[`trigger--${onColor}`],\n styles[`trigger--${size}`],\n isHovered && styles[`trigger--hovered`],\n selected && styles[`trigger--selected`],\n className\n );\n\n const iconColor = getIconColor(onColor, variant, isHovered || buttonIsHovered || selected);\n\n const icon = <Icon svgIcon={iconMap[variant]} size={iconSizeMap[size]} color={iconColor} isHovered={isHovered || buttonIsHovered} />;\n\n if (htmlMarkup === 'span') {\n return (\n <span data-testid={testId} data-analyticsid={AnalyticsId.Trigger} className={triggerClasses}>\n {icon}\n </span>\n );\n }\n\n const ariaLabelAttributes = getAriaLabelAttributes({ label: ariaLabel, id: ariaLabelledById });\n\n return (\n <button\n aria-label={ariaLabel}\n type=\"button\"\n data-testid={testId}\n data-analyticsid={AnalyticsId.Trigger}\n className={triggerClasses}\n ref={mergeRefs([ref, hoverRef])}\n aria-expanded={selected}\n {...ariaLabelAttributes}\n {...rest}\n >\n {icon}\n </button>\n );\n }\n);\n\nTrigger.displayName = 'Trigger';\n\nexport default Trigger;\n"],"names":["React"],"mappings":";;;;;;;;;;AAIA,MAAM,WAAmC,CAAC,EAAE,MAAM,gBAAkD;AAClG,QAAM,SACJ,oBAAC,QAAK,EAAA,GAAE,ijBAAijB,CAAA;AAG3jB,QAAM,cACJ,oBAAC,QAAK,EAAA,GAAE,kjBAAkjB,CAAA;AAG5jB,QAAM,SACJ,oBAAC,QAAK,EAAA,GAAE,yhBAAyhB,CAAA;AAGniB,QAAM,cACJ,oBAAC,QAAK,EAAA,GAAE,sjBAAsjB,CAAA;AAGzjB,SAAA,QAAQ,EAAE,MAAM,WAAW,QAAQ,aAAa,QAAQ,aAAa;AAC9E;
|
|
1
|
+
{"version":3,"file":"Trigger.js","sources":["../src/components/Trigger/HelpSign.tsx","../src/components/Trigger/Trigger.tsx"],"sourcesContent":["import React from 'react';\n\nimport { getIcon, SvgPathProps } from '../Icon';\n\nconst HelpSign: React.FC<SvgPathProps> = ({ size, isHovered }: SvgPathProps): React.ReactElement => {\n const normal = (\n <path d=\"M18.854 19.678c0-2.268 1.701-4.74 5.126-4.74 3.358 0 5.172 2.222 5.172 4.536 0 1.793-.952 3.064-2.268 3.992l-.976.682c-.749.521-1.134 1.27-1.134 2.154 0 .047 0 .16.023.296h-2.269a46.85 46.85 0 0 0-.01-.139 8.554 8.554 0 0 1-.036-.724c0-1.36.522-2.471 1.84-3.424l1.042-.75c.75-.544 1.066-1.201 1.066-1.974 0-1.178-.793-2.29-2.45-2.29-1.679 0-2.563 1.293-2.563 2.585 0 .34.045.772.136 1.022l-2.564-.181a3.903 3.903 0 0 1-.135-1.044Zm3.176 10.186c0-.908.726-1.678 1.656-1.678.908 0 1.656.77 1.656 1.678 0 .907-.748 1.657-1.656 1.657-.93 0-1.656-.75-1.656-1.657Z\" />\n );\n\n const normalHover = (\n <path d=\"M18.854 18.178c0-2.268 1.701-4.74 5.126-4.74 3.358 0 5.172 2.223 5.172 4.536 0 1.793-.952 3.064-2.268 3.992l-.976.682c-.749.521-1.134 1.27-1.134 2.154 0 .047 0 .16.023.296h-2.269a46.85 46.85 0 0 0-.01-.139 8.554 8.554 0 0 1-.036-.724c0-1.36.522-2.471 1.838-3.424l1.044-.75c.75-.544 1.066-1.201 1.066-1.974 0-1.178-.793-2.29-2.45-2.29-1.679 0-2.563 1.293-2.563 2.585 0 .34.045.772.135 1.022l-2.563-.181a3.903 3.903 0 0 1-.135-1.044Zm3.176 11.686c0-.908.725-1.678 1.655-1.678.908 0 1.657.77 1.657 1.678 0 .907-.749 1.657-1.657 1.657-.93 0-1.655-.75-1.655-1.657Z\" />\n );\n\n const xSmall = (\n <path d=\"M23.98 14.937c-3.425 0-5.127 2.473-5.127 4.741 0 .363.047.726.137 1.044l2.563.182c-.09-.25-.136-.681-.136-1.022 0-1.292.885-2.586 2.563-2.586 1.658 0 2.45 1.112 2.45 2.291 0 .772-.317 1.43-1.065 1.974l-1.043.749c-1.317.953-1.84 2.065-1.84 3.425 0 .319.024.567.047.862h2.267c-.021-.135-.021-.25-.021-.295 0-.884.385-1.633 1.133-2.154l.976-.681c1.317-.93 2.27-2.2 2.27-3.993 0-2.314-1.816-4.537-5.174-4.537m-.294 13.248c-.93 0-1.656.773-1.656 1.678a1.65 1.65 0 0 0 1.656 1.657c.907 0 1.656-.748 1.656-1.657 0-.905-.749-1.678-1.656-1.678\" />\n );\n\n const xSmallHover = (\n <path d=\"M18.853 18.289c0-2.268 1.701-4.742 5.127-4.742 3.357 0 5.173 2.223 5.173 4.537 0 1.794-.953 3.065-2.27 3.994l-.976.681c-.747.52-1.133 1.27-1.133 2.154 0 .046 0 .16.022.295h-2.267a39.324 39.324 0 0 0-.01-.125 8.468 8.468 0 0 1-.037-.737c0-1.36.523-2.472 1.839-3.425l1.043-.75c.748-.543 1.065-1.201 1.065-1.973 0-1.18-.792-2.29-2.45-2.29-1.678 0-2.562 1.293-2.562 2.585 0 .341.045.772.135 1.022l-2.563-.183a3.914 3.914 0 0 1-.136-1.043Zm3.176 11.575c0-.907.726-1.679 1.656-1.679.908 0 1.657.772 1.657 1.68 0 .907-.749 1.656-1.657 1.656-.93 0-1.656-.749-1.656-1.657Z\" />\n );\n\n return getIcon({ size, isHovered, normal, normalHover, xSmall, xSmallHover });\n};\n\nexport default HelpSign;\n","import React from 'react';\n\nimport classNames from 'classnames';\n\nimport HelpSign from './HelpSign';\nimport { AnalyticsId, IconSize } from '../../constants';\nimport { useHover } from '../../hooks/useHover';\nimport { getColor } from '../../theme/currys';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\nimport { mergeRefs } from '../../utils/refs';\nimport Icon, { SvgIcon } from '../Icon';\n\nimport styles from './styles.module.scss';\n\nexport type TriggerTags = 'button' | 'span';\n\nexport type TriggerVariant = 'help'; // @todo Support variant='info' in later version\n\nexport type TriggerSize = 'medium' | 'large';\n\nexport type TriggerOnColor = 'onlight' | 'ondark';\n\nexport interface TriggerProps extends Pick<React.InputHTMLAttributes<HTMLButtonElement>, 'onClick' | 'aria-haspopup' | 'aria-controls'> {\n /**\n * Sets aria-label of the trigger. ariaLabel or ariaLabelledById MUST be set!\n */\n ariaLabel?: string;\n /**\n * Sets aria-labelledby of the trigger. ariaLabel or ariaLabelledById MUST be set!\n */\n ariaLabelledById?: string;\n /**\n * Controls the icon and color. Default: help.\n */\n /** @deprecated This will be removed in next major version */\n variant?: TriggerVariant;\n /**\n * Changes the design based on the background the trigger is placed on. Default: onlight.\n */\n onColor?: TriggerOnColor;\n /**\n * Size of the trigger. Default: medium.\n */\n size?: TriggerSize;\n /**\n * Indicates that the trigger is in use.\n */\n selected?: boolean;\n /**\n * Indicates that the trigger is hovered. Used in combination with htmlMarkup=span to force visual hover state.\n */\n isHovered?: boolean;\n /**\n * Changes the underlying element of the trigger. If set to span, the trigger will be a non-interactive icon. Default: button\n */\n htmlMarkup?: TriggerTags;\n /**\n * Classname will be applied to the button element.\n */\n className?: string;\n /**\n * Optional test id.\n */\n testId?: string;\n}\n\nconst iconMap: Record<TriggerVariant, SvgIcon> = {\n help: HelpSign,\n //info: InfoSignStroke, // @todo Support variant='info' in later version\n};\n\nconst iconSizeMap: Record<TriggerSize, IconSize> = {\n medium: IconSize.XSmall,\n large: IconSize.Small,\n};\n\nconst getIconColor = (onColor: TriggerOnColor, variant: TriggerVariant, isActive: boolean): string | undefined => {\n if (onColor === 'ondark') {\n return 'white';\n }\n\n const depth = isActive ? 800 : 600;\n\n if (variant === 'help') {\n return getColor('plum', depth);\n }\n\n if (variant === 'info') {\n return getColor('blueberry', depth);\n }\n};\n\nconst Trigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n (\n {\n ariaLabel,\n ariaLabelledById,\n variant = 'help',\n onColor = 'onlight',\n size = 'medium',\n selected = false,\n isHovered,\n htmlMarkup = 'button',\n className,\n testId,\n ...rest\n },\n ref\n ) => {\n const { isHovered: buttonIsHovered, hoverRef } = useHover<HTMLButtonElement>();\n\n const triggerClasses = classNames(\n styles.trigger,\n onColor === 'onlight' && styles[`trigger--${variant}`], // variants look the same when onColor=ondark\n onColor === 'ondark' && styles[`trigger--${onColor}`],\n styles[`trigger--${size}`],\n isHovered && styles[`trigger--hovered`],\n selected && styles[`trigger--selected`],\n className\n );\n\n const iconColor = getIconColor(onColor, variant, isHovered || buttonIsHovered || selected);\n\n const icon = <Icon svgIcon={iconMap[variant]} size={iconSizeMap[size]} color={iconColor} isHovered={isHovered || buttonIsHovered} />;\n\n if (htmlMarkup === 'span') {\n return (\n <span data-testid={testId} data-analyticsid={AnalyticsId.Trigger} className={triggerClasses}>\n {icon}\n </span>\n );\n }\n\n const ariaLabelAttributes = getAriaLabelAttributes({ label: ariaLabel, id: ariaLabelledById });\n\n return (\n <button\n aria-label={ariaLabel}\n type=\"button\"\n data-testid={testId}\n data-analyticsid={AnalyticsId.Trigger}\n className={triggerClasses}\n ref={mergeRefs([ref, hoverRef])}\n aria-expanded={selected}\n {...ariaLabelAttributes}\n {...rest}\n >\n {icon}\n </button>\n );\n }\n);\n\nTrigger.displayName = 'Trigger';\n\nexport default Trigger;\n"],"names":["React"],"mappings":";;;;;;;;;;AAIA,MAAM,WAAmC,CAAC,EAAE,MAAM,gBAAkD;AAClG,QAAM,SACJ,oBAAC,QAAK,EAAA,GAAE,ijBAAijB,CAAA;AAG3jB,QAAM,cACJ,oBAAC,QAAK,EAAA,GAAE,kjBAAkjB,CAAA;AAG5jB,QAAM,SACJ,oBAAC,QAAK,EAAA,GAAE,yhBAAyhB,CAAA;AAGniB,QAAM,cACJ,oBAAC,QAAK,EAAA,GAAE,sjBAAsjB,CAAA;AAGzjB,SAAA,QAAQ,EAAE,MAAM,WAAW,QAAQ,aAAa,QAAQ,aAAa;AAC9E;AC4CA,MAAM,UAA2C;AAAA,EAC/C,MAAM;AAAA;AAER;AAEA,MAAM,cAA6C;AAAA,EACjD,QAAQ,SAAS;AAAA,EACjB,OAAO,SAAS;AAClB;AAEA,MAAM,eAAe,CAAC,SAAyB,SAAyB,aAA0C;AAChH,MAAI,YAAY,UAAU;AACjB,WAAA;AAAA,EAAA;AAGH,QAAA,QAAQ,WAAW,MAAM;AAE/B,MAAI,YAAY,QAAQ;AACf,WAAA,SAAS,QAAQ,KAAK;AAAA,EAAA;AAG/B,MAAI,YAAY,QAAQ;AACf,WAAA,SAAS,aAAa,KAAK;AAAA,EAAA;AAEtC;AAEA,MAAM,UAAUA,eAAM;AAAA,EACpB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,GAAG;AAAA,KAEL,QACG;AACH,UAAM,EAAE,WAAW,iBAAiB,SAAA,IAAa,SAA4B;AAE7E,UAAM,iBAAiB;AAAA,MACrB,OAAO;AAAA,MACP,YAAY,aAAa,OAAO,YAAY,OAAO,EAAE;AAAA;AAAA,MACrD,YAAY,YAAY,OAAO,YAAY,OAAO,EAAE;AAAA,MACpD,OAAO,YAAY,IAAI,EAAE;AAAA,MACzB,aAAa,OAAO,kBAAkB;AAAA,MACtC,YAAY,OAAO,mBAAmB;AAAA,MACtC;AAAA,IACF;AAEA,UAAM,YAAY,aAAa,SAAS,SAAS,aAAa,mBAAmB,QAAQ;AAEzF,UAAM,OAAO,oBAAC,MAAK,EAAA,SAAS,QAAQ,OAAO,GAAG,MAAM,YAAY,IAAI,GAAG,OAAO,WAAW,WAAW,aAAa,iBAAiB;AAElI,QAAI,eAAe,QAAQ;AAEvB,aAAA,oBAAC,UAAK,eAAa,QAAQ,oBAAkB,YAAY,SAAS,WAAW,gBAC1E,UACH,KAAA,CAAA;AAAA,IAAA;AAIJ,UAAM,sBAAsB,uBAAuB,EAAE,OAAO,WAAW,IAAI,kBAAkB;AAG3F,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,eAAa;AAAA,QACb,oBAAkB,YAAY;AAAA,QAC9B,WAAW;AAAA,QACX,KAAK,UAAU,CAAC,KAAK,QAAQ,CAAC;AAAA,QAC9B,iBAAe;AAAA,QACd,GAAG;AAAA,QACH,GAAG;AAAA,QAEH,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AAEA,QAAQ,cAAc;"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
@use '../../scss/palette' as palette;
|
|
4
4
|
@use '../../scss/font-settings' as font-settings;
|
|
5
5
|
@use '../../scss/screen-reader' as *;
|
|
6
|
-
@use '../../scss/breakpoints' as
|
|
7
|
-
@import '../../scss/supernova/styles/colors';
|
|
6
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
7
|
+
@import '../../scss/supernova/styles/colors.css';
|
|
8
8
|
|
|
9
9
|
$dark-mode-disabled-transparrent: #ffffffb3;
|
|
10
10
|
$with-icons: // icon-class, size-class, padding-left, padding-right, padding-left desktop, padding-right desktop, svg-margin-left, svg-margin-right, svg-margin-left desktop, svg-margin-right desktop
|
|
@@ -70,7 +70,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
70
70
|
:disabled > & {
|
|
71
71
|
outline-color: palette.$neutral700;
|
|
72
72
|
|
|
73
|
-
@media (min-width: map.get(
|
|
73
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
74
74
|
outline-color: palette.$neutral500;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -84,7 +84,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
:disabled > & {
|
|
87
|
-
@media (min-width: map.get(
|
|
87
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
88
88
|
color: palette.$neutral700;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -147,7 +147,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
147
147
|
outline-color: palette.$white;
|
|
148
148
|
|
|
149
149
|
:disabled > & {
|
|
150
|
-
@media (min-width: map.get(
|
|
150
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
151
151
|
outline-color: $dark-mode-disabled-transparrent;
|
|
152
152
|
}
|
|
153
153
|
}
|
|
@@ -169,7 +169,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
169
169
|
color: palette.$white;
|
|
170
170
|
|
|
171
171
|
:disabled > & {
|
|
172
|
-
@media (min-width: map.get(
|
|
172
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
173
173
|
color: $dark-mode-disabled-transparrent;
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -232,7 +232,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
232
232
|
color: palette.$neutral800;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
@media (min-width: map.get(
|
|
235
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
236
236
|
min-height: 3.125rem;
|
|
237
237
|
padding: 0 spacers.getSpacer(l);
|
|
238
238
|
font-size: font-settings.$font-size-md;
|
|
@@ -244,7 +244,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
244
244
|
padding: 0 spacers.getSpacer(l);
|
|
245
245
|
font-size: 1.3125rem;
|
|
246
246
|
|
|
247
|
-
@media (min-width: map.get(
|
|
247
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
248
248
|
min-height: 4.5rem;
|
|
249
249
|
padding: 0 spacers.getSpacer(xl);
|
|
250
250
|
font-size: font-settings.$font-size-lg;
|
|
@@ -257,7 +257,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
257
257
|
padding-left: $pl;
|
|
258
258
|
padding-right: $pr;
|
|
259
259
|
|
|
260
|
-
@media (min-width: map.get(
|
|
260
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
261
261
|
padding-left: $pld;
|
|
262
262
|
padding-right: $prd;
|
|
263
263
|
}
|
|
@@ -269,7 +269,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
269
269
|
margin-left: $svgml;
|
|
270
270
|
margin-right: $svgmr;
|
|
271
271
|
|
|
272
|
-
@media (min-width: map.get(
|
|
272
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
273
273
|
margin-left: $svgmld;
|
|
274
274
|
margin-right: $svgmrd;
|
|
275
275
|
}
|
|
@@ -336,7 +336,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
336
336
|
align-items: center;
|
|
337
337
|
justify-content: center;
|
|
338
338
|
|
|
339
|
-
@media (min-width: map.get(
|
|
339
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
340
340
|
margin: 0 auto 0 0;
|
|
341
341
|
}
|
|
342
342
|
|
|
@@ -372,7 +372,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
372
372
|
|
|
373
373
|
@include on-dark;
|
|
374
374
|
|
|
375
|
-
@include tiny-screens-media-query {
|
|
375
|
+
@include breakpoints.tiny-screens-media-query {
|
|
376
376
|
min-height: spacers.getSpacer(l);
|
|
377
377
|
padding: 0 spacers.getSpacer(xs);
|
|
378
378
|
}
|
|
@@ -395,7 +395,7 @@ $with-icons: // icon-class, size-class, padding-left, padding-right, padding-lef
|
|
|
395
395
|
&--on-dark &__line {
|
|
396
396
|
border-color: palette.$white;
|
|
397
397
|
|
|
398
|
-
@media (min-width: map.get(
|
|
398
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
399
399
|
border-color: $dark-mode-disabled-transparrent;
|
|
400
400
|
}
|
|
401
401
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
@use '../../scss/palette' as palette;
|
|
4
4
|
@use '../../scss/font-settings' as font-settings;
|
|
5
5
|
@use '../../scss/screen-reader' as *;
|
|
6
|
-
@use '../../scss/breakpoints' as
|
|
6
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
7
7
|
|
|
8
8
|
@mixin dashed-dotted-border() {
|
|
9
9
|
box-shadow: none;
|
|
@@ -245,7 +245,7 @@ $checkbox-icon-size: 1.625rem;
|
|
|
245
245
|
background-color: palette.$blueberry800;
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
@media (min-width: map.get(
|
|
248
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
249
249
|
&--large {
|
|
250
250
|
padding: 1.68rem spacers.getSpacer(l);
|
|
251
251
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use '../../scss/spacers' as spacers;
|
|
3
3
|
@use '../../scss/palette' as palette;
|
|
4
|
-
@use '../../scss/breakpoints' as
|
|
4
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
5
5
|
|
|
6
6
|
.close {
|
|
7
7
|
display: flex;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
background-color: transparent;
|
|
15
15
|
cursor: pointer;
|
|
16
16
|
|
|
17
|
-
@media (max-width: map.get(
|
|
17
|
+
@media (max-width: map.get(breakpoints.$grid-breakpoints, sm)) {
|
|
18
18
|
height: 2.375rem;
|
|
19
19
|
width: 2.375rem;
|
|
20
20
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
@use '../../scss/spacers' as spacers;
|
|
3
3
|
@use '../../scss/palette' as palette;
|
|
4
4
|
@use '../../scss/font-settings' as font-settings;
|
|
5
|
-
@use '../../scss/breakpoints' as
|
|
6
|
-
@import '../../scss/supernova/styles/colors';
|
|
5
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
6
|
+
@import '../../scss/supernova/styles/colors.css';
|
|
7
7
|
|
|
8
8
|
.drawer {
|
|
9
9
|
position: fixed;
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
border-radius: 0.75rem 0.75rem 0 0;
|
|
33
33
|
outline: none;
|
|
34
34
|
|
|
35
|
-
@media (min-width: map.get(
|
|
35
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
36
36
|
justify-content: space-between;
|
|
37
37
|
height: 100%;
|
|
38
38
|
max-height: 100dvh;
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
&--right {
|
|
46
|
-
@media (min-width: map.get(
|
|
46
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
47
47
|
transform: translateX(100%);
|
|
48
48
|
right: 0;
|
|
49
49
|
left: unset;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
@include tiny-screens-media-query {
|
|
53
|
+
@include breakpoints.tiny-screens-media-query {
|
|
54
54
|
max-height: 100dvh;
|
|
55
55
|
border-radius: 0;
|
|
56
56
|
}
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
max-height: inherit;
|
|
62
62
|
overflow: hidden;
|
|
63
63
|
|
|
64
|
-
@include tiny-screens-media-query {
|
|
64
|
+
@include breakpoints.tiny-screens-media-query {
|
|
65
65
|
overflow-y: auto;
|
|
66
66
|
|
|
67
67
|
&:focus-visible {
|
|
@@ -79,11 +79,11 @@
|
|
|
79
79
|
padding: spacers.getSpacer(xs) spacers.getSpacer(2xs);
|
|
80
80
|
border-bottom: 1px solid var(--color-base-border-neutral);
|
|
81
81
|
|
|
82
|
-
@media (min-width: map.get(
|
|
82
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
83
83
|
padding: spacers.getSpacer(xs);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
@include tiny-screens-media-query {
|
|
86
|
+
@include breakpoints.tiny-screens-media-query {
|
|
87
87
|
padding: spacers.getSpacer(4xs) 0;
|
|
88
88
|
flex-direction: column-reverse;
|
|
89
89
|
align-items: flex-start;
|
|
@@ -99,11 +99,11 @@
|
|
|
99
99
|
outline-offset: -1px;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
@media (min-width: map.get(
|
|
102
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
103
103
|
padding: spacers.getSpacer(s) spacers.getSpacer(xs);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
@include tiny-screens-media-query {
|
|
106
|
+
@include breakpoints.tiny-screens-media-query {
|
|
107
107
|
overflow-y: unset;
|
|
108
108
|
}
|
|
109
109
|
}
|
|
@@ -114,11 +114,11 @@
|
|
|
114
114
|
border-top: 1px solid var(--color-base-border-neutral);
|
|
115
115
|
padding: spacers.getSpacer(s) spacers.getSpacer(2xs);
|
|
116
116
|
|
|
117
|
-
@media (min-width: map.get(
|
|
117
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
118
118
|
padding: spacers.getSpacer(m) spacers.getSpacer(xs);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
@include tiny-screens-media-query {
|
|
121
|
+
@include breakpoints.tiny-screens-media-query {
|
|
122
122
|
flex-wrap: wrap;
|
|
123
123
|
gap: spacers.getSpacer(2xs) 0;
|
|
124
124
|
padding: spacers.getSpacer(2xs) 0;
|
|
@@ -44,13 +44,15 @@ const Dropdown = (props) => {
|
|
|
44
44
|
const dropdownRef = useRef(null);
|
|
45
45
|
const optionsRef = useRef(null);
|
|
46
46
|
const { hoverRef: buttonRef, isHovered } = useHover();
|
|
47
|
+
const openedByKeyboard = useRef(false);
|
|
47
48
|
const { value: isOpen, toggleValue: toggleIsOpen } = useToggle(!disabled && open, onToggle);
|
|
48
49
|
const inputRefList = useRef(React__default.Children.map(children, () => React__default.createRef()));
|
|
49
50
|
const [currentIndex, setCurrentIndex] = useState();
|
|
50
51
|
const labelId = useUuid();
|
|
51
52
|
const toggleLabelId = useUuid();
|
|
52
53
|
const optionIdPrefix = useUuid();
|
|
53
|
-
const handleOpen = () => {
|
|
54
|
+
const handleOpen = (isKeyboard) => {
|
|
55
|
+
openedByKeyboard.current = isKeyboard;
|
|
54
56
|
toggleIsOpen();
|
|
55
57
|
};
|
|
56
58
|
const handleClose = () => {
|
|
@@ -60,7 +62,7 @@ const Dropdown = (props) => {
|
|
|
60
62
|
};
|
|
61
63
|
useEffect(() => {
|
|
62
64
|
var _a, _b, _c;
|
|
63
|
-
if (isOpen) {
|
|
65
|
+
if (isOpen && openedByKeyboard.current) {
|
|
64
66
|
(_c = (_b = (_a = inputRefList.current) == null ? void 0 : _a.find((inputRef, index) => {
|
|
65
67
|
if (inputRef.current && !inputRef.current.hasAttribute("disabled")) {
|
|
66
68
|
setCurrentIndex(index);
|
|
@@ -75,7 +77,7 @@ const Dropdown = (props) => {
|
|
|
75
77
|
return;
|
|
76
78
|
}
|
|
77
79
|
if (!isOpen) {
|
|
78
|
-
handleOpen();
|
|
80
|
+
handleOpen(true);
|
|
79
81
|
event.preventDefault();
|
|
80
82
|
return;
|
|
81
83
|
} else if (event.key === KeyboardEventKey.Escape && isOpen) {
|
|
@@ -95,7 +97,7 @@ const Dropdown = (props) => {
|
|
|
95
97
|
} else if (event.key === KeyboardEventKey.Enter && index !== -1) {
|
|
96
98
|
nextIndex = index;
|
|
97
99
|
}
|
|
98
|
-
if (nextIndex !== -1) {
|
|
100
|
+
if (nextIndex !== -1 && event.key !== KeyboardEventKey.Space) {
|
|
99
101
|
event.preventDefault();
|
|
100
102
|
(_a = inputRefList.current[nextIndex].current) == null ? void 0 : _a.focus();
|
|
101
103
|
setCurrentIndex(nextIndex);
|
|
@@ -107,7 +109,8 @@ const Dropdown = (props) => {
|
|
|
107
109
|
KeyboardEventKey.End,
|
|
108
110
|
KeyboardEventKey.Enter,
|
|
109
111
|
KeyboardEventKey.Escape,
|
|
110
|
-
KeyboardEventKey.Home
|
|
112
|
+
KeyboardEventKey.Home,
|
|
113
|
+
KeyboardEventKey.Space
|
|
111
114
|
]);
|
|
112
115
|
useOutsideEvent(dropdownRef, () => isOpen && handleClose());
|
|
113
116
|
const toggleClasses = classNames(
|
|
@@ -133,7 +136,7 @@ const Dropdown = (props) => {
|
|
|
133
136
|
"button",
|
|
134
137
|
{
|
|
135
138
|
type: "button",
|
|
136
|
-
onClick: () => !isOpen && handleOpen(),
|
|
139
|
+
onClick: () => !isOpen && handleOpen(false),
|
|
137
140
|
className: toggleClasses,
|
|
138
141
|
ref: buttonRef,
|
|
139
142
|
"data-testid": testId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n AnalyticsId,\n IconSize,\n KeyboardEventKey,\n ZIndex,\n theme,\n useHover,\n useKeyboardEvent,\n useOutsideEvent,\n useToggle,\n useUuid,\n} from '../..';\nimport { isComponent } from '../../utils/component';\nimport { mergeRefs } from '../../utils/refs';\nimport Button from '../Button';\nimport Checkbox, { CheckboxProps } from '../Checkbox';\nimport Icon from '../Icon';\nimport PlusSmall from '../Icons/PlusSmall';\nimport RadioButton, { RadioButtonProps } from '../RadioButton';\n\nimport styles from './styles.module.scss';\n\nexport enum DropdownOnColor {\n onwhite = 'onwhite',\n ongrey = 'ongrey',\n onblueberry = 'onblueberry',\n oncherry = 'oncherry',\n}\n\nexport interface DropdownProps {\n /** Label for dropdown. Visible for screen readers */\n label: string;\n /** Text on the trigger button that opens the dropdown */\n placeholder: string;\n /** Sets the dropdown content */\n children: React.ReactNode;\n /** Close button text */\n closeText?: string;\n /** Minimum width for the dropdown in pixels. Does not affect trigger button */\n dropdownMinWidth?: number;\n /** No close button */\n noCloseButton?: boolean;\n /** Called when dropdown is open/closed */\n onToggle?: (isOpen: boolean) => void;\n /** Whether the dropdown is open or not */\n open?: boolean;\n /** Changes the visuals of the dropdown */\n onColor?: keyof typeof DropdownOnColor;\n /** Makes the background of the trigger transparent */\n transparent?: boolean;\n /** Makes the width of the full component adjust to its parent */\n fluid?: boolean;\n /** Makes the dropdown disabled */\n disabled?: boolean;\n /** Sets the data-testid attribute on the dropdown button */\n testId?: string;\n /** Overrides the default z-index of the DropDownContent */\n zIndex?: number;\n}\n\nconst Dropdown: React.FC<DropdownProps> = props => {\n const {\n label,\n placeholder,\n closeText = 'Lukk',\n noCloseButton = false,\n onToggle,\n dropdownMinWidth,\n open = false,\n children,\n onColor = DropdownOnColor.onwhite,\n transparent = false,\n fluid = false,\n testId,\n disabled,\n zIndex = ZIndex.PopOver,\n } = props;\n const dropdownRef = useRef<HTMLDivElement>(null);\n const optionsRef = useRef<HTMLUListElement>(null);\n const { hoverRef: buttonRef, isHovered } = useHover<HTMLButtonElement>();\n const { value: isOpen, toggleValue: toggleIsOpen } = useToggle(!disabled && open, onToggle);\n const inputRefList = useRef(React.Children.map(children, () => React.createRef<HTMLElement>()));\n const [currentIndex, setCurrentIndex] = useState<number>();\n const labelId = useUuid();\n const toggleLabelId = useUuid();\n const optionIdPrefix = useUuid();\n\n const handleOpen = (): void => {\n toggleIsOpen();\n };\n\n const handleClose = (): void => {\n toggleIsOpen();\n buttonRef.current?.focus();\n };\n\n useEffect(() => {\n if (isOpen) {\n inputRefList.current\n ?.find((inputRef, index) => {\n if (inputRef.current && !inputRef.current.hasAttribute('disabled')) {\n setCurrentIndex(index);\n return true;\n }\n })\n ?.current?.focus();\n }\n }, [isOpen]);\n\n const handleKeyboardNavigation = (event: KeyboardEvent): void => {\n if (!inputRefList.current) {\n return;\n }\n\n if (!isOpen) {\n handleOpen();\n event.preventDefault();\n return;\n } else if (event.key === KeyboardEventKey.Escape && isOpen) {\n handleClose();\n return;\n }\n\n const index = inputRefList.current.findIndex(x => x.current === event.target);\n let nextIndex = index;\n\n if (event.key === KeyboardEventKey.Home) {\n nextIndex = 0;\n } else if (event.key === KeyboardEventKey.End) {\n nextIndex = inputRefList.current.length - 1;\n } else if (event.key === KeyboardEventKey.ArrowDown && index < inputRefList.current.length - 1) {\n nextIndex = index + 1;\n } else if (event.key === KeyboardEventKey.ArrowUp && index > 0) {\n nextIndex = index - 1;\n } else if (event.key === KeyboardEventKey.Enter && index !== -1) {\n nextIndex = index;\n }\n\n if (nextIndex !== -1) {\n event.preventDefault();\n\n inputRefList.current[nextIndex].current?.focus();\n setCurrentIndex(nextIndex);\n }\n };\n\n useKeyboardEvent(dropdownRef, handleKeyboardNavigation, [\n KeyboardEventKey.ArrowDown,\n KeyboardEventKey.ArrowUp,\n KeyboardEventKey.End,\n KeyboardEventKey.Enter,\n KeyboardEventKey.Escape,\n KeyboardEventKey.Home,\n ]);\n\n useOutsideEvent(dropdownRef, () => isOpen && handleClose());\n\n const toggleClasses = classNames(\n styles.dropdown__toggle,\n !disabled && {\n [styles['dropdown__toggle--on-white']]: onColor === DropdownOnColor.onwhite,\n [styles['dropdown__toggle--on-grey']]: onColor === DropdownOnColor.ongrey,\n [styles['dropdown__toggle--on-blueberry']]: onColor === DropdownOnColor.onblueberry,\n [styles['dropdown__toggle--on-cherry']]: onColor === DropdownOnColor.oncherry,\n [styles['dropdown__toggle--transparent']]: transparent,\n [styles['dropdown__toggle--fluid']]: fluid,\n [styles['dropdown__toggle--open']]: isOpen,\n }\n );\n\n const contentClasses = classNames(styles.dropdown__content, isOpen && styles['dropdown__content--open']);\n\n const renderChildren = React.Children.map(children, (child, index) => {\n const role = isComponent<RadioButtonProps>(child, RadioButton)\n ? 'menuitemradio'\n : isComponent<CheckboxProps>(child, Checkbox)\n ? 'menuitemcheckbox'\n : 'menuitem';\n\n return (\n <li className={styles.dropdown__input} role={role} id={`${optionIdPrefix}-${index}`}>\n {React.isValidElement(child) && inputRefList.current && inputRefList.current[index]\n ? React.cloneElement(child as React.ReactElement, { ref: mergeRefs([child.props.ref, inputRefList.current[index]]) })\n : child}\n </li>\n );\n });\n\n return (\n <div className={styles.dropdown} ref={dropdownRef}>\n <span id={labelId} className={styles.dropdown__label}>\n {label}\n </span>\n <button\n type=\"button\"\n onClick={(): false | void => !isOpen && handleOpen()}\n className={toggleClasses}\n ref={buttonRef}\n data-testid={testId}\n data-analyticsid={AnalyticsId.Dropdown}\n disabled={disabled}\n aria-labelledby={toggleLabelId}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n >\n <span id={toggleLabelId} className={styles.dropdown__toggle__label}>\n {placeholder}\n </span>\n <Icon\n color={disabled ? theme.palette.neutral700 : theme.palette.blueberry600}\n svgIcon={PlusSmall}\n className={styles.dropdown__icon}\n isHovered={!disabled && isHovered}\n size={IconSize.XSmall}\n />\n </button>\n <div className={contentClasses} style={{ width: fluid ? '100%' : `auto`, minWidth: dropdownMinWidth ?? 'auto', zIndex: zIndex }}>\n <ul\n className={styles.dropdown__options}\n role=\"menu\"\n aria-labelledby={labelId}\n tabIndex={-1}\n aria-activedescendant={typeof currentIndex !== 'undefined' ? `${optionIdPrefix}-${currentIndex}` : undefined}\n ref={optionsRef}\n >\n {renderChildren}\n </ul>\n {!noCloseButton && (\n <div className={styles.dropdown__close}>\n <Button onClick={handleClose} aria-expanded={isOpen}>\n {closeText}\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Dropdown;\n"],"names":["DropdownOnColor","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n AnalyticsId,\n IconSize,\n KeyboardEventKey,\n ZIndex,\n theme,\n useHover,\n useKeyboardEvent,\n useOutsideEvent,\n useToggle,\n useUuid,\n} from '../..';\nimport { isComponent } from '../../utils/component';\nimport { mergeRefs } from '../../utils/refs';\nimport Button from '../Button';\nimport Checkbox, { CheckboxProps } from '../Checkbox';\nimport Icon from '../Icon';\nimport PlusSmall from '../Icons/PlusSmall';\nimport RadioButton, { RadioButtonProps } from '../RadioButton';\n\nimport styles from './styles.module.scss';\n\nexport enum DropdownOnColor {\n onwhite = 'onwhite',\n ongrey = 'ongrey',\n onblueberry = 'onblueberry',\n oncherry = 'oncherry',\n}\n\nexport interface DropdownProps {\n /** Label for dropdown. Visible for screen readers */\n label: string;\n /** Text on the trigger button that opens the dropdown */\n placeholder: string;\n /** Sets the dropdown content */\n children: React.ReactNode;\n /** Close button text */\n closeText?: string;\n /** Minimum width for the dropdown in pixels. Does not affect trigger button */\n dropdownMinWidth?: number;\n /** No close button */\n noCloseButton?: boolean;\n /** Called when dropdown is open/closed */\n onToggle?: (isOpen: boolean) => void;\n /** Whether the dropdown is open or not */\n open?: boolean;\n /** Changes the visuals of the dropdown */\n onColor?: keyof typeof DropdownOnColor;\n /** Makes the background of the trigger transparent */\n transparent?: boolean;\n /** Makes the width of the full component adjust to its parent */\n fluid?: boolean;\n /** Makes the dropdown disabled */\n disabled?: boolean;\n /** Sets the data-testid attribute on the dropdown button */\n testId?: string;\n /** Overrides the default z-index of the DropDownContent */\n zIndex?: number;\n}\n\nconst Dropdown: React.FC<DropdownProps> = props => {\n const {\n label,\n placeholder,\n closeText = 'Lukk',\n noCloseButton = false,\n onToggle,\n dropdownMinWidth,\n open = false,\n children,\n onColor = DropdownOnColor.onwhite,\n transparent = false,\n fluid = false,\n testId,\n disabled,\n zIndex = ZIndex.PopOver,\n } = props;\n const dropdownRef = useRef<HTMLDivElement>(null);\n const optionsRef = useRef<HTMLUListElement>(null);\n const { hoverRef: buttonRef, isHovered } = useHover<HTMLButtonElement>();\n const openedByKeyboard = useRef<boolean>(false);\n const { value: isOpen, toggleValue: toggleIsOpen } = useToggle(!disabled && open, onToggle);\n const inputRefList = useRef(React.Children.map(children, () => React.createRef<HTMLElement>()));\n const [currentIndex, setCurrentIndex] = useState<number>();\n const labelId = useUuid();\n const toggleLabelId = useUuid();\n const optionIdPrefix = useUuid();\n\n const handleOpen = (isKeyboard: boolean): void => {\n openedByKeyboard.current = isKeyboard;\n toggleIsOpen();\n };\n\n const handleClose = (): void => {\n toggleIsOpen();\n buttonRef.current?.focus();\n };\n\n useEffect(() => {\n if (isOpen && openedByKeyboard.current) {\n inputRefList.current\n ?.find((inputRef, index) => {\n if (inputRef.current && !inputRef.current.hasAttribute('disabled')) {\n setCurrentIndex(index);\n return true;\n }\n })\n ?.current?.focus();\n }\n }, [isOpen]);\n\n const handleKeyboardNavigation = (event: KeyboardEvent): void => {\n if (!inputRefList.current) {\n return;\n }\n\n if (!isOpen) {\n handleOpen(true);\n event.preventDefault();\n return;\n } else if (event.key === KeyboardEventKey.Escape && isOpen) {\n handleClose();\n return;\n }\n\n const index = inputRefList.current.findIndex(x => x.current === event.target);\n let nextIndex = index;\n\n if (event.key === KeyboardEventKey.Home) {\n nextIndex = 0;\n } else if (event.key === KeyboardEventKey.End) {\n nextIndex = inputRefList.current.length - 1;\n } else if (event.key === KeyboardEventKey.ArrowDown && index < inputRefList.current.length - 1) {\n nextIndex = index + 1;\n } else if (event.key === KeyboardEventKey.ArrowUp && index > 0) {\n nextIndex = index - 1;\n } else if (event.key === KeyboardEventKey.Enter && index !== -1) {\n nextIndex = index;\n }\n\n if (nextIndex !== -1 && event.key !== KeyboardEventKey.Space) {\n event.preventDefault();\n\n inputRefList.current[nextIndex].current?.focus();\n setCurrentIndex(nextIndex);\n }\n };\n\n useKeyboardEvent(dropdownRef, handleKeyboardNavigation, [\n KeyboardEventKey.ArrowDown,\n KeyboardEventKey.ArrowUp,\n KeyboardEventKey.End,\n KeyboardEventKey.Enter,\n KeyboardEventKey.Escape,\n KeyboardEventKey.Home,\n KeyboardEventKey.Space,\n ]);\n\n useOutsideEvent(dropdownRef, () => isOpen && handleClose());\n\n const toggleClasses = classNames(\n styles.dropdown__toggle,\n !disabled && {\n [styles['dropdown__toggle--on-white']]: onColor === DropdownOnColor.onwhite,\n [styles['dropdown__toggle--on-grey']]: onColor === DropdownOnColor.ongrey,\n [styles['dropdown__toggle--on-blueberry']]: onColor === DropdownOnColor.onblueberry,\n [styles['dropdown__toggle--on-cherry']]: onColor === DropdownOnColor.oncherry,\n [styles['dropdown__toggle--transparent']]: transparent,\n [styles['dropdown__toggle--fluid']]: fluid,\n [styles['dropdown__toggle--open']]: isOpen,\n }\n );\n\n const contentClasses = classNames(styles.dropdown__content, isOpen && styles['dropdown__content--open']);\n\n const renderChildren = React.Children.map(children, (child, index) => {\n const role = isComponent<RadioButtonProps>(child, RadioButton)\n ? 'menuitemradio'\n : isComponent<CheckboxProps>(child, Checkbox)\n ? 'menuitemcheckbox'\n : 'menuitem';\n\n return (\n <li className={styles.dropdown__input} role={role} id={`${optionIdPrefix}-${index}`}>\n {React.isValidElement(child) && inputRefList.current && inputRefList.current[index]\n ? React.cloneElement(child as React.ReactElement, { ref: mergeRefs([child.props.ref, inputRefList.current[index]]) })\n : child}\n </li>\n );\n });\n\n return (\n <div className={styles.dropdown} ref={dropdownRef}>\n <span id={labelId} className={styles.dropdown__label}>\n {label}\n </span>\n <button\n type=\"button\"\n onClick={(): false | void => !isOpen && handleOpen(false)}\n className={toggleClasses}\n ref={buttonRef}\n data-testid={testId}\n data-analyticsid={AnalyticsId.Dropdown}\n disabled={disabled}\n aria-labelledby={toggleLabelId}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n >\n <span id={toggleLabelId} className={styles.dropdown__toggle__label}>\n {placeholder}\n </span>\n <Icon\n color={disabled ? theme.palette.neutral700 : theme.palette.blueberry600}\n svgIcon={PlusSmall}\n className={styles.dropdown__icon}\n isHovered={!disabled && isHovered}\n size={IconSize.XSmall}\n />\n </button>\n <div className={contentClasses} style={{ width: fluid ? '100%' : `auto`, minWidth: dropdownMinWidth ?? 'auto', zIndex: zIndex }}>\n <ul\n className={styles.dropdown__options}\n role=\"menu\"\n aria-labelledby={labelId}\n tabIndex={-1}\n aria-activedescendant={typeof currentIndex !== 'undefined' ? `${optionIdPrefix}-${currentIndex}` : undefined}\n ref={optionsRef}\n >\n {renderChildren}\n </ul>\n {!noCloseButton && (\n <div className={styles.dropdown__close}>\n <Button onClick={handleClose} aria-expanded={isOpen}>\n {closeText}\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Dropdown;\n"],"names":["DropdownOnColor","React"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
@use '../../scss/palette' as palette;
|
|
4
4
|
@use '../../scss/font-settings' as font-settings;
|
|
5
5
|
@use '../../scss/screen-reader' as *;
|
|
6
|
-
@use '../../scss/breakpoints' as
|
|
6
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
7
7
|
|
|
8
8
|
.dropdown {
|
|
9
9
|
position: relative;
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
font-size: font-settings.$font-size-sm;
|
|
26
26
|
line-height: 1.3rem; // Custom fordi teksten skal henge bedre sammen om den går over to linjer
|
|
27
27
|
|
|
28
|
-
@media (min-width: map.get(
|
|
28
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
29
29
|
padding: spacers.getSpacer(3xs) spacers.getSpacer(3xs) spacers.getSpacer(3xs) spacers.getSpacer(s);
|
|
30
30
|
font-size: font-settings.$font-size-md;
|
|
31
31
|
line-height: 1.5rem;
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
&__label {
|
|
168
168
|
padding: spacers.getSpacer(3xs) 0;
|
|
169
169
|
|
|
170
|
-
@media (min-width: map.get(
|
|
170
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
171
171
|
padding: spacers.getSpacer(2xs) 0;
|
|
172
172
|
}
|
|
173
173
|
}
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
padding: 0;
|
|
198
198
|
margin: 0;
|
|
199
199
|
|
|
200
|
-
@media (min-width: map.get(
|
|
200
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
201
201
|
max-height: 464px;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
border-bottom: 1px solid palette.$neutral300;
|
|
211
211
|
padding: spacers.getSpacer(2xs) spacers.getSpacer(s);
|
|
212
212
|
|
|
213
|
-
@media (min-width: map.get(
|
|
213
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
214
214
|
padding: spacers.getSpacer(s);
|
|
215
215
|
}
|
|
216
216
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
@use '../../scss/spacers' as spacers;
|
|
4
4
|
@use '../../scss/font-settings' as font-settings;
|
|
5
5
|
@use '../../scss/palette' as palette;
|
|
6
|
-
@use '../../scss/breakpoints' as
|
|
7
|
-
@import '../../scss/supernova/styles/colors';
|
|
6
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
7
|
+
@import '../../scss/supernova/styles/colors.css';
|
|
8
8
|
|
|
9
9
|
.duolist-wrapper {
|
|
10
10
|
&--border {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use '../../scss/font-mixins' as fonts;
|
|
3
3
|
@use '../../scss/spacers' as spacers;
|
|
4
|
-
@use '../../scss/breakpoints' as
|
|
5
|
-
@import '../../scss/supernova/styles/colors';
|
|
4
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
5
|
+
@import '../../scss/supernova/styles/colors.css';
|
|
6
6
|
|
|
7
7
|
.emptystate {
|
|
8
8
|
display: flex;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
padding: spacers.getSpacer(s);
|
|
12
12
|
align-items: center;
|
|
13
13
|
|
|
14
|
-
@media (min-width: map.get(
|
|
14
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
15
15
|
gap: spacers.getSpacer(m);
|
|
16
16
|
padding: spacers.getSpacer(l);
|
|
17
17
|
}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
&--blank {
|
|
27
27
|
border: none;
|
|
28
28
|
|
|
29
|
-
@media (min-width: map.get(
|
|
29
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
30
30
|
padding-left: spacers.getSpacer(2xs);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
flex-flow: column;
|
|
52
52
|
gap: spacers.getSpacer(3xs);
|
|
53
53
|
|
|
54
|
-
@media (min-width: map.get(
|
|
54
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
55
55
|
gap: spacers.getSpacer(xs);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use '../../scss/spacers' as spacers;
|
|
3
|
-
@use '../../scss/breakpoints' as
|
|
3
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
4
4
|
@use '../../scss/font-mixins' as fonts;
|
|
5
5
|
|
|
6
6
|
.error-wrapper {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
border: 1px solid var(--core-color-cherry-400);
|
|
11
11
|
border-left: 4px solid var(--color-notification-border-error);
|
|
12
12
|
|
|
13
|
-
@media (min-width: map.get(
|
|
13
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
14
14
|
padding: spacers.getSpacer(s) spacers.getSpacer(m) spacers.getSpacer(l) spacers.getSpacer(m);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
@use '../../scss/palette' as palette;
|
|
5
5
|
@use '../../scss/font-settings' as font-settings;
|
|
6
6
|
@use '../Button/styles.module' as button;
|
|
7
|
-
@use '../../scss/breakpoints' as
|
|
8
|
-
@import '../../scss/supernova/styles/colors';
|
|
7
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
8
|
+
@import '../../scss/supernova/styles/colors.css';
|
|
9
9
|
|
|
10
10
|
.expander {
|
|
11
11
|
position: initial;
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
font-weight: 600;
|
|
61
61
|
text-align: left;
|
|
62
62
|
|
|
63
|
-
@media (min-width: map.get(
|
|
63
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
64
64
|
font-size: font-settings.$font-size-md;
|
|
65
65
|
line-height: font-settings.$lineheight-size-md;
|
|
66
66
|
}
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
padding: spacers.getSpacer(xs) spacers.getSpacer(2xs) spacers.getSpacer(xs) spacers.getSpacer(s);
|
|
71
71
|
cursor: pointer;
|
|
72
72
|
|
|
73
|
-
@media (min-width: map.get(
|
|
73
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
74
74
|
padding: spacers.getSpacer(xs) spacers.getSpacer(s) spacers.getSpacer(xs) spacers.getSpacer(l);
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
&--icon {
|
|
79
79
|
padding-left: spacers.getSpacer(2xs);
|
|
80
80
|
|
|
81
|
-
@media (min-width: map.get(
|
|
81
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
82
82
|
padding-left: spacers.getSpacer(s);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
padding-left: spacers.getSpacer(s);
|
|
174
174
|
border-left: solid 3px palette.$neutral200;
|
|
175
175
|
|
|
176
|
-
@media (min-width: map.get(
|
|
176
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
177
177
|
margin-left: calc(38px / 2 - 1px); // Halvparten av chevron-ikonets bredde minus halve bredden på border
|
|
178
178
|
padding-left: calc(
|
|
179
179
|
38px / 2 + 12px - 2px
|
|
@@ -184,11 +184,11 @@
|
|
|
184
184
|
&--large {
|
|
185
185
|
padding: spacers.getSpacer(s) spacers.getSpacer(m) spacers.getSpacer(l) spacers.getSpacer(s);
|
|
186
186
|
|
|
187
|
-
@media (min-width: map.get(
|
|
187
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
188
188
|
padding: spacers.getSpacer(m) spacers.getSpacer(l) spacers.getSpacer(xl);
|
|
189
189
|
}
|
|
190
190
|
&#{$content}--icon {
|
|
191
|
-
@media (min-width: map.get(
|
|
191
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
192
192
|
padding-left: 70px;
|
|
193
193
|
}
|
|
194
194
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
@use '../../scss/palette' as palette;
|
|
3
3
|
@use '../../scss/spacers' as spacers;
|
|
4
4
|
@use '../../scss/font-mixins' as fonts;
|
|
5
|
-
@use '../../scss/breakpoints' as
|
|
5
|
+
@use '../../scss/breakpoints' as breakpoints;
|
|
6
6
|
|
|
7
7
|
.expander {
|
|
8
8
|
$item: &;
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
border-bottom: 1px solid palette.$neutral500;
|
|
24
24
|
padding: spacers.getSpacer(xs) 0;
|
|
25
25
|
|
|
26
|
-
@media (min-width: map.get(
|
|
26
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, lg)) {
|
|
27
27
|
flex-direction: row-reverse;
|
|
28
28
|
justify-content: start;
|
|
29
29
|
padding: spacers.getSpacer(s) spacers.getSpacer(s) spacers.getSpacer(s) spacers.getSpacer(2xs);
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
&--2-and-lower {
|
|
54
54
|
padding: spacers.getSpacer(2xs) 0;
|
|
55
55
|
|
|
56
|
-
@media (min-width: map.get(
|
|
56
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, lg)) {
|
|
57
57
|
padding: spacers.getSpacer(xs) spacers.getSpacer(s) spacers.getSpacer(xs) spacers.getSpacer(2xs);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -106,13 +106,13 @@
|
|
|
106
106
|
|
|
107
107
|
&--1,
|
|
108
108
|
&--2 {
|
|
109
|
-
@media (min-width: map.get(
|
|
109
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, lg)) {
|
|
110
110
|
padding-left: spacers.getSpacer(2xl);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
&--3-and-lower {
|
|
115
|
-
@media (min-width: map.get(
|
|
115
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, lg)) {
|
|
116
116
|
padding-left: spacers.getSpacer(xl);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -125,13 +125,13 @@
|
|
|
125
125
|
margin-left: spacers.getSpacer(xs);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
@media (min-width: map.get(
|
|
128
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, lg)) {
|
|
129
129
|
margin-left: 0;
|
|
130
130
|
margin-right: spacers.getSpacer(s);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
&--3-and-lower {
|
|
134
|
-
@media (min-width: map.get(
|
|
134
|
+
@media (min-width: map.get(breakpoints.$grid-breakpoints, lg)) {
|
|
135
135
|
margin-right: spacers.getSpacer(xs);
|
|
136
136
|
}
|
|
137
137
|
}
|