@helsenorge/designsystem-react 12.4.0 → 12.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/Drawer.js +33 -8
- package/Drawer.js.map +1 -1
- package/FormFieldTag.js +48 -0
- package/FormFieldTag.js.map +1 -0
- package/FormGroup.js +19 -6
- package/FormGroup.js.map +1 -1
- package/HelpTriggerIcon.js +13 -2
- package/HelpTriggerIcon.js.map +1 -1
- package/Label.js +3 -0
- package/Label.js.map +1 -1
- package/LazyIcon.js +1 -1
- package/LazyIcon.js.map +1 -1
- package/LinkList.js +81 -47
- package/LinkList.js.map +1 -1
- package/ListEditMode.js +42 -0
- package/ListEditMode.js.map +1 -0
- package/components/Drawer/Drawer.d.ts +6 -1
- package/components/Drawer/resourceHelper.d.ts +3 -0
- package/components/ExpanderList/ExpanderList.d.ts +8 -1
- package/components/ExpanderList/index.js +51 -20
- package/components/ExpanderList/index.js.map +1 -1
- package/components/ExpanderList/styles.module.scss +37 -33
- package/components/FavoriteButton/StarIcon.d.ts +4 -4
- package/components/FavoriteButton/index.js +23 -18
- package/components/FavoriteButton/index.js.map +1 -1
- package/components/FavoriteButton/styles.module.scss +8 -0
- package/components/FavoriteButton/styles.module.scss.d.ts +1 -0
- package/components/FormFieldTag/FormFieldTag.d.ts +15 -0
- package/components/FormFieldTag/FormFieldTag.test.d.ts +1 -0
- package/components/FormFieldTag/index.d.ts +3 -0
- package/components/FormFieldTag/index.js +5 -0
- package/components/FormFieldTag/index.js.map +1 -0
- package/components/FormFieldTag/resourceHelper.d.ts +3 -0
- package/components/FormFieldTag/styles.module.scss +23 -0
- package/components/FormFieldTag/styles.module.scss.d.ts +10 -0
- package/components/FormGroup/FormGroup.d.ts +4 -0
- package/components/FormGroup/styles.module.scss +3 -0
- package/components/HelpTriggerIcon/HelpTriggerIcon.d.ts +2 -0
- package/components/HelpTriggerIcon/styles.module.scss +1 -1
- package/components/Icons/AdditionalIconInformation.d.ts +4 -0
- package/components/Icons/AdditionalIconInformation.js +2 -1
- package/components/Icons/AdditionalIconInformation.js.map +1 -1
- package/components/Icons/Feedback.d.ts +4 -0
- package/components/Icons/Feedback.js +25 -0
- package/components/Icons/Feedback.js.map +1 -0
- package/components/Icons/IconNames.d.ts +1 -1
- package/components/Icons/IconNames.js +1 -0
- package/components/Icons/IconNames.js.map +1 -1
- package/components/Label/Label.d.ts +2 -0
- package/components/LinkList/LinkList.d.ts +8 -1
- package/components/LinkList/index.js +2 -0
- package/components/LinkList/index.js.map +1 -1
- package/components/LinkList/styles.module.scss +30 -22
- package/components/List/stories.module.scss +7 -0
- package/components/List/stories.module.scss.d.ts +9 -0
- package/components/ListEditMode/ListEditMode.d.ts +29 -0
- package/components/ListEditMode/index.d.ts +3 -0
- package/components/ListEditMode/index.js +9 -0
- package/components/ListEditMode/index.js.map +1 -0
- package/components/ListEditMode/styles.module.scss +79 -0
- package/components/ListEditMode/styles.module.scss.d.ts +18 -0
- package/components/Panel/styles.module.scss +5 -2
- package/components/PopMenu/index.js +1 -1
- package/components/PopMenu/index.js.map +1 -1
- package/components/PopMenu/styles.module.scss +4 -0
- package/components/PopMenu/styles.module.scss.d.ts +1 -0
- package/components/RadioButton/styles.module.scss +22 -4
- package/components/StickyNote/Close.d.ts +11 -0
- package/components/StickyNote/Triangle.d.ts +5 -1
- package/components/StickyNote/index.js +100 -49
- package/components/StickyNote/index.js.map +1 -1
- package/components/StickyNote/styles.module.scss +106 -34
- package/components/StickyNote/styles.module.scss.d.ts +6 -1
- package/components/Tabs/Tabs.d.ts +6 -3
- package/components/Tabs/index.js +38 -4
- package/components/Tabs/index.js.map +1 -1
- package/components/Tabs/resourceHelper.d.ts +3 -0
- package/constants.d.ts +1 -0
- package/constants.js +1 -0
- package/constants.js.map +1 -1
- package/designsystem-react.css +136 -98
- package/package.json +1 -1
- package/resources/HN.Designsystem.Drawer.en-GB.json.d.ts +6 -0
- package/resources/HN.Designsystem.Drawer.nb-NO.json.d.ts +6 -0
- package/resources/HN.Designsystem.FormFieldTag.nb-NO.json.d.ts +8 -0
- package/resources/HN.Designsystem.Tabs.en-GB.json.d.ts +7 -0
- package/resources/HN.Designsystem.Tabs.nb-NO.json.d.ts +7 -0
- package/scss/supernova/styles/colors.css +136 -98
- package/scss/supernova/styles/typography.css +2 -2
- package/components/Tabs/TabsDocs.d.ts +0 -1
package/LinkList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkList.js","sources":["../src/components/LinkList/LinkList.tsx"],"sourcesContent":["import React from 'react';\n\nimport cn from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useHover } from '../../hooks/useHover';\nimport { PaletteNames } from '../../theme/palette';\nimport { ElementHeaderType, renderElementHeader } from '../ElementHeader/ElementHeader';\nimport ChevronRight from '../Icons/ChevronRight';\n\nimport LinkListStyles from './styles.module.scss';\n\nexport type LinkListSize = 'small' | 'medium' | 'large';\n\nexport type LinkListStatus = 'none' | 'new';\n\nexport type LinkAnchorTargets = '_self' | '_blank' | '_parent';\n\nexport type LinkListColors = Extract<PaletteNames, 'white' | 'blueberry' | 'cherry' | 'neutral'>;\nexport type LinkListVariant = 'line' | 'outline' | 'fill' | 'fill-negative';\n\nexport interface LinkType extends React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLLIElement>> {\n ElementHeader?: ElementHeaderType;\n}\n\nexport type LinkTags = 'button' | 'a';\nexport interface CompoundComponent extends React.ForwardRefExoticComponent<LinkListProps & React.RefAttributes<HTMLUListElement>> {\n Link: LinkType;\n}\n\nexport interface LinkListProps {\n /** Items in the LinkList */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Changes the colors of the list. */\n color?: LinkListColors;\n /** Toggles chevron icon on or off. */\n chevron?: boolean;\n /** Changes size of the LinkList. */\n size?: LinkListSize;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets visual priority */\n variant?: LinkListVariant;\n /** Highlights text. Used for search results */\n highlightText?: string;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\nexport type LinkProps = Modify<\n React.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement>,\n {\n children: React.ReactNode;\n chevron?: boolean;\n className?: string;\n icon?: React.ReactElement;\n /** Renders the image in the LinkList header */\n image?: React.ReactElement;\n /** Displays a status on the left side: default none */\n status?: LinkListStatus;\n href?: string;\n target?: LinkAnchorTargets;\n /** HTML markup for link. Default: a */\n htmlMarkup?: LinkTags;\n /**\n * Ref for lenke/knapp\n */\n linkRef?: React.RefObject<HTMLButtonElement | HTMLAnchorElement>;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Highlights text. Override if different from list */\n highlightText?: string;\n }\n> &\n Pick<LinkListProps, 'color' | 'size' | 'variant'>;\n\nconst Link: LinkType = React.forwardRef((props: LinkProps, ref: React.Ref<HTMLLIElement>) => {\n const {\n children,\n className = '',\n color = 'white',\n icon,\n image,\n size = 'medium',\n chevron = false,\n linkRef,\n status = 'none',\n testId,\n target,\n variant,\n htmlMarkup = 'a',\n highlightText,\n ...restProps\n } = props;\n const { hoverRef, isHovered } = useHover<HTMLButtonElement | HTMLAnchorElement>(linkRef);\n\n const isFill = variant === 'fill';\n const isFillNegative = variant === 'fill-negative';\n const isOutline = variant === 'outline';\n const isLine = variant === 'line';\n\n const liClasses = cn(LinkListStyles['link-list'], {\n [LinkListStyles['link-list__list-item--line']]: isLine,\n [LinkListStyles[`link-list__list-item--outline--${color}`]]: isOutline,\n });\n const linkClasses = cn(\n LinkListStyles['link-list__anchor'],\n LinkListStyles[`link-list__anchor--${color}`],\n {\n [LinkListStyles[`link-list__anchor--line--${color}`]]: isLine,\n [LinkListStyles['link-list__anchor--fill']]: isFill,\n [LinkListStyles[`link-list__anchor--fill--${color}`]]: isFill,\n [LinkListStyles['link-list__anchor--outline']]: isOutline,\n [LinkListStyles[`link-list__anchor--outline--${color}`]]: isOutline,\n [LinkListStyles['link-list__anchor--fill-negative']]: isFillNegative,\n [LinkListStyles[`link-list__anchor--fill-negative--${color}`]]: isFillNegative,\n [LinkListStyles[`link-list__anchor--${size}`]]: size,\n [LinkListStyles['link-list__anchor--button']]: htmlMarkup === 'button',\n [LinkListStyles['link-list__anchor--new']]: status === 'new',\n },\n className\n );\n\n const statusMarkerClasses = cn(LinkListStyles['link-list__status-marker'], {\n [LinkListStyles['link-list__status-marker--new']]: status === 'new',\n });\n\n const imageContainer = <span className={LinkListStyles['link-list__image-container']}>{image}</span>;\n\n return (\n <li className={liClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n {htmlMarkup === 'a' && (\n <a\n className={linkClasses}\n ref={hoverRef as React.RefObject<HTMLAnchorElement>}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n target={target}\n {...restProps}\n >\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n isHovered,\n size,\n parentType: 'linklist',\n chevronIcon: chevron ? ChevronRight : undefined,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </a>\n )}\n {htmlMarkup === 'button' && (\n <button className={linkClasses} ref={hoverRef as React.RefObject<HTMLButtonElement>} type=\"button\" {...restProps}>\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n isHovered,\n size,\n parentType: 'linklist',\n chevronIcon: chevron ? ChevronRight : undefined,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </button>\n )}\n </li>\n );\n});\n\nexport const LinkList = React.forwardRef(function LinkListForwardedRef(props: LinkListProps, ref: React.Ref<HTMLUListElement>) {\n const { children, className = '', chevron = false, size = 'medium', color = 'white', testId, variant = 'line', highlightText } = props;\n\n const listClassNames = cn(LinkListStyles['link-list'], className, {\n [LinkListStyles[`link-list--outline--${color}`]]: variant === 'outline',\n });\n\n return (\n <ul ref={ref} className={listClassNames} data-testid={testId} data-analyticsid={AnalyticsId.LinkList}>\n {React.Children.map(children, (child: React.ReactNode | React.ReactElement<LinkProps>) => {\n if ((child as React.ReactElement<LinkProps>).type === Link) {\n return React.cloneElement(child as React.ReactElement<LinkProps>, {\n color,\n size,\n chevron,\n variant,\n highlightText: highlightText,\n });\n }\n })}\n </ul>\n );\n}) as CompoundComponent;\n\nLinkList.displayName = 'LinkList';\nLinkList.Link = Link;\nLink.displayName = 'LinkList.Link';\n\nexport default LinkList;\n"],"names":["React","cn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkList.js","sources":["../src/components/LinkList/LinkList.tsx"],"sourcesContent":["import React from 'react';\n\nimport cn from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useHover } from '../../hooks/useHover';\nimport { PaletteNames } from '../../theme/palette';\nimport { ElementHeaderType, renderElementHeader } from '../ElementHeader/ElementHeader';\nimport ChevronRight from '../Icons/ChevronRight';\nimport ListEditModeItem, { ListEditModeItemProps, listEditModeWrapperClassnames } from '../ListEditMode';\n\nimport LinkListStyles from './styles.module.scss';\n\nexport type LinkListSize = 'small' | 'medium' | 'large';\n\nexport type LinkListStatus = 'none' | 'new';\n\nexport type LinkAnchorTargets = '_self' | '_blank' | '_parent';\n\nexport type LinkListColors = Extract<PaletteNames, 'white' | 'blueberry' | 'cherry' | 'neutral'>;\nexport type LinkListVariant = 'line' | 'outline' | 'fill' | 'fill-negative';\n\nexport interface LinkType extends React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLLIElement>> {\n ElementHeader?: ElementHeaderType;\n}\n\nexport type LinkTags = 'button' | 'a';\nexport interface CompoundComponent extends React.ForwardRefExoticComponent<LinkListProps & React.RefAttributes<HTMLUListElement>> {\n Link: LinkType;\n}\n\nexport interface LinkListProps {\n /** Items in the LinkList */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Changes the colors of the list. */\n color?: LinkListColors;\n /** Toggles chevron icon on or off. */\n chevron?: boolean;\n /** Changes size of the LinkList. */\n size?: LinkListSize;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets visual priority */\n variant?: LinkListVariant;\n /** Highlights text. Used for search results */\n highlightText?: string;\n /**\n * @experimental This prop is experimental and may change in the future.\n * Enables ListEditMode\n */\n editMode?: boolean;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\nexport type LinkProps = Modify<\n React.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement>,\n {\n children: React.ReactNode;\n chevron?: boolean;\n className?: string;\n icon?: React.ReactElement;\n /** Renders the image in the LinkList header */\n image?: React.ReactElement;\n /** Displays a status on the left side: default none */\n status?: LinkListStatus;\n href?: string;\n target?: LinkAnchorTargets;\n /** HTML markup for link. Default: a */\n htmlMarkup?: LinkTags;\n /**\n * Ref for lenke/knapp\n */\n linkRef?: React.RefObject<HTMLButtonElement | HTMLAnchorElement>;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Highlights text. Override if different from list */\n highlightText?: string;\n }\n> &\n Pick<LinkListProps, 'color' | 'size' | 'variant'> &\n ListEditModeItemProps;\n\nexport const Link: LinkType = React.forwardRef((props: LinkProps, ref: React.Ref<HTMLLIElement>) => {\n const {\n children,\n className = '',\n color = 'white',\n icon,\n image,\n size = 'medium',\n chevron = false,\n linkRef,\n status = 'none',\n testId,\n target,\n variant,\n htmlMarkup = 'a',\n highlightText,\n editMode = false,\n ...restProps\n } = props;\n const { hoverRef, isHovered } = useHover<HTMLButtonElement | HTMLAnchorElement>(linkRef);\n\n const isFill = variant === 'fill';\n const isFillNegative = variant === 'fill-negative';\n const isOutline = variant === 'outline';\n const isLine = variant === 'line';\n\n const liClasses = cn(LinkListStyles['link-list'], {\n [LinkListStyles['link-list__list-item--line']]: isLine,\n [LinkListStyles[`link-list__list-item--outline--${color}`]]: isOutline,\n });\n const linkClasses = cn(\n LinkListStyles['link-list__anchor'],\n LinkListStyles[`link-list__anchor--${color}`],\n {\n [LinkListStyles[`link-list__anchor--line--${color}`]]: isLine,\n [LinkListStyles['link-list__anchor--fill']]: isFill,\n [LinkListStyles[`link-list__anchor--fill--${color}`]]: isFill,\n [LinkListStyles['link-list__anchor--outline']]: isOutline,\n [LinkListStyles[`link-list__anchor--outline--${color}`]]: isOutline,\n [LinkListStyles['link-list__anchor--fill-negative']]: isFillNegative,\n [LinkListStyles[`link-list__anchor--fill-negative--${color}`]]: isFillNegative,\n [LinkListStyles[`link-list__anchor--${size}`]]: size,\n [LinkListStyles['link-list__anchor--button']]: htmlMarkup === 'button',\n [LinkListStyles['link-list__anchor--new']]: status === 'new',\n },\n className\n );\n\n const statusMarkerClasses = cn(LinkListStyles['link-list__status-marker'], {\n [LinkListStyles['link-list__status-marker--new']]: status === 'new',\n });\n\n const imageContainer = <span className={LinkListStyles['link-list__image-container']}>{image}</span>;\n\n return (\n <li className={liClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n {editMode ? (\n <div className={linkClasses}>\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n size,\n parentType: 'linklist',\n chevronIcon: chevron ? ChevronRight : undefined,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </div>\n ) : htmlMarkup === 'a' ? (\n <a\n className={linkClasses}\n ref={hoverRef as React.RefObject<HTMLAnchorElement>}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n target={target}\n {...restProps}\n >\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n isHovered,\n size,\n parentType: 'linklist',\n chevronIcon: chevron ? ChevronRight : undefined,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </a>\n ) : (\n htmlMarkup === 'button' && (\n <button className={linkClasses} ref={hoverRef as React.RefObject<HTMLButtonElement>} type=\"button\" {...restProps}>\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n isHovered,\n size,\n parentType: 'linklist',\n chevronIcon: chevron ? ChevronRight : undefined,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </button>\n )\n )}\n </li>\n );\n});\n\nexport const LinkList = React.forwardRef(function LinkListForwardedRef(props: LinkListProps, ref: React.Ref<HTMLUListElement>) {\n const {\n children,\n className = '',\n chevron = false,\n size = 'medium',\n color = 'white',\n testId,\n variant = 'line',\n highlightText,\n editMode = false,\n } = props;\n\n const listClassNames = cn(LinkListStyles['link-list'], className, {\n [LinkListStyles[`link-list--outline--${color}`]]: variant === 'outline',\n [listEditModeWrapperClassnames]: editMode,\n });\n\n return (\n <ul ref={ref} className={listClassNames} data-testid={testId} data-analyticsid={AnalyticsId.LinkList}>\n {React.Children.map(children, (child: React.ReactNode) => {\n if (React.isValidElement<LinkProps>(child) && child.type === Link) {\n if (editMode) {\n return (\n <ListEditModeItem color={color} variant={variant} onDelete={child.props.onDelete}>\n {React.cloneElement(child, {\n color,\n size,\n chevron: false,\n variant,\n highlightText: highlightText,\n editMode: true,\n })}\n </ListEditModeItem>\n );\n } else {\n return React.cloneElement(child, {\n color,\n size,\n chevron,\n variant,\n highlightText: highlightText,\n editMode: false,\n });\n }\n }\n return null;\n })}\n </ul>\n );\n}) as CompoundComponent;\n\nLinkList.displayName = 'LinkList';\nLinkList.Link = Link;\nLink.displayName = 'LinkList.Link';\n\nexport default LinkList;\n"],"names":["React","cn"],"mappings":"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"}
|
package/ListEditMode.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import { IconSize } from "./constants.js";
|
|
4
|
+
import { useHover } from "./hooks/useHover.js";
|
|
5
|
+
import { I as Icon } from "./Icon.js";
|
|
6
|
+
import X from "./components/Icons/X.js";
|
|
7
|
+
import styles from "./components/ListEditMode/styles.module.scss";
|
|
8
|
+
const listEditModeWrapperClassnames = classNames([styles[`list-edit-mode`]]);
|
|
9
|
+
const IconButton = ({
|
|
10
|
+
icon,
|
|
11
|
+
color,
|
|
12
|
+
onClick
|
|
13
|
+
}) => {
|
|
14
|
+
const { hoverRef, isHovered } = useHover();
|
|
15
|
+
return /* @__PURE__ */ jsx("button", { ref: hoverRef, onClick, type: "button", className: classNames(styles["list-edit-mode__icon-button"]), children: /* @__PURE__ */ jsx(
|
|
16
|
+
Icon,
|
|
17
|
+
{
|
|
18
|
+
isHovered,
|
|
19
|
+
svgIcon: icon,
|
|
20
|
+
size: IconSize.Small,
|
|
21
|
+
color: color === "blue" ? "var(--color-action-graphics-onlight)" : "var(--color-destructive-graphics-normal"
|
|
22
|
+
}
|
|
23
|
+
) });
|
|
24
|
+
};
|
|
25
|
+
const ListEditModeItem = (props) => {
|
|
26
|
+
const { children, variant = "line", color = "neutral", onDelete } = props;
|
|
27
|
+
const listClassNames = classNames(styles["list-edit-mode__item"], color && styles[`list-edit-mode__item--${color}`], {
|
|
28
|
+
[styles["list-edit-mode__item--line"]]: variant === "line",
|
|
29
|
+
[styles["list-edit-mode__item--fill"]]: variant === "fill" || variant === "fill-negative"
|
|
30
|
+
});
|
|
31
|
+
return /* @__PURE__ */ jsxs("div", { className: listClassNames, children: [
|
|
32
|
+
onDelete && /* @__PURE__ */ jsx(IconButton, { icon: X, onClick: onDelete, color: "red" }),
|
|
33
|
+
children
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
36
|
+
ListEditModeItem.displayName = "ListEditModeItem";
|
|
37
|
+
export {
|
|
38
|
+
IconButton as I,
|
|
39
|
+
ListEditModeItem as L,
|
|
40
|
+
listEditModeWrapperClassnames as l
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=ListEditMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListEditMode.js","sources":["../src/components/ListEditMode/ListEditMode.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { IconSize } from '../../constants';\nimport { useHover } from '../../hooks/useHover';\nimport { ExpanderListColors, ExpanderListVariant } from '../ExpanderList';\nimport Icon, { SvgIcon } from '../Icon';\nimport X from '../Icons/X';\nimport { LinkListColors, LinkListVariant } from '../LinkList';\n\nimport styles from './styles.module.scss';\n\nexport interface ListEditModeProps extends ListEditModeItemProps {\n /** Items in the ListEditMode */\n children: React.ReactNode;\n /** Sets visual priority */\n variant?: LinkListVariant | ExpanderListVariant;\n /** Sets color */\n color?: LinkListColors | ExpanderListColors;\n}\n\nexport interface ListEditModeItemProps {\n /** Enables ListEditMode */\n editMode?: boolean;\n /** Callback for delete button */\n onDelete?: (e?: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n}\n\nexport const listEditModeWrapperClassnames = classNames([styles[`list-edit-mode`]]);\n\nexport const IconButton = ({\n icon,\n color,\n onClick,\n}: {\n icon: SvgIcon;\n color: 'red' | 'blue';\n onClick?: (e?: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n}): React.JSX.Element => {\n const { hoverRef, isHovered } = useHover<HTMLButtonElement>();\n\n return (\n <button ref={hoverRef} onClick={onClick} type=\"button\" className={classNames(styles['list-edit-mode__icon-button'])}>\n <Icon\n isHovered={isHovered}\n svgIcon={icon}\n size={IconSize.Small}\n color={color === 'blue' ? 'var(--color-action-graphics-onlight)' : 'var(--color-destructive-graphics-normal'}\n />\n </button>\n );\n};\n\nexport const ListEditModeItem = (props: ListEditModeProps): React.JSX.Element => {\n const { children, variant = 'line', color = 'neutral', onDelete } = props;\n\n const listClassNames = classNames(styles['list-edit-mode__item'], color && styles[`list-edit-mode__item--${color}`], {\n [styles['list-edit-mode__item--line']]: variant === 'line',\n [styles['list-edit-mode__item--fill']]: variant === 'fill' || variant === 'fill-negative',\n });\n\n return (\n <div className={listClassNames}>\n {onDelete && <IconButton icon={X} onClick={onDelete} color=\"red\" />}\n {children}\n </div>\n );\n};\n\nListEditModeItem.displayName = 'ListEditModeItem';\n\nexport default ListEditModeItem;\n"],"names":[],"mappings":";;;;;;;AA6BO,MAAM,gCAAgC,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE3E,MAAM,aAAa,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,MAIyB;AACvB,QAAM,EAAE,UAAU,UAAA,IAAc,SAAA;AAEhC,SACE,oBAAC,UAAA,EAAO,KAAK,UAAU,SAAkB,MAAK,UAAS,WAAW,WAAW,OAAO,6BAA6B,CAAC,GAChH,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,MAAM,SAAS;AAAA,MACf,OAAO,UAAU,SAAS,yCAAyC;AAAA,IAAA;AAAA,EAAA,GAEvE;AAEJ;AAEO,MAAM,mBAAmB,CAAC,UAAgD;AAC/E,QAAM,EAAE,UAAU,UAAU,QAAQ,QAAQ,WAAW,aAAa;AAEpE,QAAM,iBAAiB,WAAW,OAAO,sBAAsB,GAAG,SAAS,OAAO,yBAAyB,KAAK,EAAE,GAAG;AAAA,IACnH,CAAC,OAAO,4BAA4B,CAAC,GAAG,YAAY;AAAA,IACpD,CAAC,OAAO,4BAA4B,CAAC,GAAG,YAAY,UAAU,YAAY;AAAA,EAAA,CAC3E;AAED,SACE,qBAAC,OAAA,EAAI,WAAW,gBACb,UAAA;AAAA,IAAA,gCAAa,YAAA,EAAW,MAAM,GAAG,SAAS,UAAU,OAAM,OAAM;AAAA,IAChE;AAAA,EAAA,GACH;AAEJ;AAEA,iBAAiB,cAAc;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
+
import { HNDesignsystemDrawer } from '../../resources/Resources';
|
|
2
3
|
import { TitleTags } from '../Title';
|
|
3
4
|
type DesktopDirections = 'left' | 'right';
|
|
4
5
|
export interface DrawerProps extends InnerDrawerProps {
|
|
@@ -10,7 +11,7 @@ export interface InnerDrawerProps {
|
|
|
10
11
|
ariaLabel?: string;
|
|
11
12
|
/** Sets the aria-labelledby of the drawer */
|
|
12
13
|
ariaLabelledBy?: string;
|
|
13
|
-
/** Close button aria-label */
|
|
14
|
+
/** @deprecated Close button aria-label */
|
|
14
15
|
ariaLabelCloseBtn?: string;
|
|
15
16
|
/** Sets the style of the Drawer Close button. Meant for use by HelpDrawer */
|
|
16
17
|
closeColor?: 'blueberry' | 'plum';
|
|
@@ -42,6 +43,10 @@ export interface InnerDrawerProps {
|
|
|
42
43
|
onSecondaryAction?: () => void;
|
|
43
44
|
/** Customize the z-index of the drawer */
|
|
44
45
|
zIndex?: number;
|
|
46
|
+
/** Resources for component */
|
|
47
|
+
resources?: Partial<HNDesignsystemDrawer>;
|
|
48
|
+
/** Sets mobile styling and animation from outer level Drawer */
|
|
49
|
+
isMobile?: boolean;
|
|
45
50
|
}
|
|
46
51
|
declare const Drawer: React.FC<DrawerProps>;
|
|
47
52
|
export default Drawer;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { PaletteNames } from '../../theme/palette';
|
|
3
3
|
import { ElementHeaderType } from '../ElementHeader/ElementHeader';
|
|
4
|
+
import { ListEditModeItemProps } from '../ListEditMode';
|
|
4
5
|
import { TitleTags } from '../Title';
|
|
5
6
|
export type ExpanderListColors = Extract<PaletteNames, 'white' | 'blueberry' | 'cherry' | 'neutral'>;
|
|
6
7
|
export interface ExpanderType extends React.ForwardRefExoticComponent<ExpanderProps & React.RefAttributes<HTMLLIElement>> {
|
|
@@ -34,6 +35,11 @@ interface ExpanderListProps {
|
|
|
34
35
|
zIndex?: number;
|
|
35
36
|
/** Highlights text in title and content. Used for search results */
|
|
36
37
|
highlightText?: string;
|
|
38
|
+
/**
|
|
39
|
+
* @experimental This prop is experimental and may change in the future.
|
|
40
|
+
* Enables ListEditMode
|
|
41
|
+
*/
|
|
42
|
+
editMode?: boolean;
|
|
37
43
|
}
|
|
38
44
|
type Modify<T, R> = Omit<T, keyof R> & R;
|
|
39
45
|
type ExpanderProps = Modify<React.HTMLAttributes<HTMLButtonElement>, {
|
|
@@ -58,6 +64,7 @@ type ExpanderProps = Modify<React.HTMLAttributes<HTMLButtonElement>, {
|
|
|
58
64
|
highlightText?: string;
|
|
59
65
|
/** Displays a status on the left side: default none */
|
|
60
66
|
status?: ExpanderListStatus;
|
|
61
|
-
}> & Pick<ExpanderListProps, 'renderChildrenWhenClosed' | 'variant'
|
|
67
|
+
}> & Pick<ExpanderListProps, 'renderChildrenWhenClosed' | 'variant'> & ListEditModeItemProps;
|
|
68
|
+
export declare const Expander: ExpanderType;
|
|
62
69
|
export declare const ExpanderList: ExpanderListCompound;
|
|
63
70
|
export default ExpanderList;
|
|
@@ -11,6 +11,7 @@ import { r as renderElementHeader } from "../../ElementHeader.js";
|
|
|
11
11
|
import { H as Highlighter } from "../../Highlighter.js";
|
|
12
12
|
import ChevronDown from "../Icons/ChevronDown.js";
|
|
13
13
|
import ChevronUp from "../Icons/ChevronUp.js";
|
|
14
|
+
import { l as listEditModeWrapperClassnames, L as ListEditModeItem } from "../../ListEditMode.js";
|
|
14
15
|
import expanderListStyles from "./styles.module.scss";
|
|
15
16
|
const Expander = React__default.forwardRef((props, ref) => {
|
|
16
17
|
const {
|
|
@@ -31,7 +32,8 @@ const Expander = React__default.forwardRef((props, ref) => {
|
|
|
31
32
|
variant = "line",
|
|
32
33
|
zIndex = 0,
|
|
33
34
|
highlightText,
|
|
34
|
-
status = "none"
|
|
35
|
+
status = "none",
|
|
36
|
+
editMode = false
|
|
35
37
|
} = props;
|
|
36
38
|
const [isExpanded] = useExpand(expanded, onExpand);
|
|
37
39
|
const expanderRef = useRef(null);
|
|
@@ -80,7 +82,15 @@ const Expander = React__default.forwardRef((props, ref) => {
|
|
|
80
82
|
});
|
|
81
83
|
return /* @__PURE__ */ jsxs("li", { className: itemClasses, ref: mergeRefs([ref, expanderRef]), children: [
|
|
82
84
|
status !== "none" && /* @__PURE__ */ jsx("div", { className: statusMarkerClasses }),
|
|
83
|
-
/* @__PURE__ */ jsx(
|
|
85
|
+
editMode ? /* @__PURE__ */ jsx("div", { id, "data-testid": testId, "data-analyticsid": AnalyticsId.ExpanderListExpander, className: expanderClasses, children: renderElementHeader(title, {
|
|
86
|
+
titleHtmlMarkup,
|
|
87
|
+
isHovered: false,
|
|
88
|
+
size: large ? "large" : "medium",
|
|
89
|
+
parentType: "expanderlist",
|
|
90
|
+
chevronIcon: void 0,
|
|
91
|
+
icon,
|
|
92
|
+
highlightText
|
|
93
|
+
}) }) : /* @__PURE__ */ jsx(
|
|
84
94
|
"button",
|
|
85
95
|
{
|
|
86
96
|
type: "button",
|
|
@@ -105,7 +115,7 @@ const Expander = React__default.forwardRef((props, ref) => {
|
|
|
105
115
|
})
|
|
106
116
|
}
|
|
107
117
|
),
|
|
108
|
-
renderContent()
|
|
118
|
+
!editMode && renderContent()
|
|
109
119
|
] });
|
|
110
120
|
});
|
|
111
121
|
const isExpanderComponent = (element) => React__default.isValidElement(element) && element.type === Expander;
|
|
@@ -121,14 +131,16 @@ const ExpanderList = React__default.forwardRef((props, ref) => {
|
|
|
121
131
|
testId,
|
|
122
132
|
variant,
|
|
123
133
|
zIndex,
|
|
124
|
-
highlightText
|
|
134
|
+
highlightText,
|
|
135
|
+
editMode = false
|
|
125
136
|
} = props;
|
|
126
137
|
const [activeExpander, setActiveExpander] = useState();
|
|
127
138
|
const [latestExpander, setLatestExpander] = useState();
|
|
128
139
|
const uuid = useUuid();
|
|
129
140
|
const expanderListClasses = classNames(expanderListStyles["expander-list"], className, {
|
|
130
141
|
[expanderListStyles[`expander-list--outline--${color}`]]: variant === "outline",
|
|
131
|
-
[expanderListStyles[`expander-list--fill`]]: variant === "fill" || variant === "fill-negative"
|
|
142
|
+
[expanderListStyles[`expander-list--fill`]]: variant === "fill" || variant === "fill-negative",
|
|
143
|
+
[listEditModeWrapperClassnames]: editMode
|
|
132
144
|
});
|
|
133
145
|
function handleExpanderClick(event, id) {
|
|
134
146
|
setActiveExpander((prevState) => accordion ? { [id]: !(prevState == null ? void 0 : prevState[id]) } : { ...prevState, [id]: !(prevState == null ? void 0 : prevState[id]) });
|
|
@@ -159,21 +171,39 @@ const ExpanderList = React__default.forwardRef((props, ref) => {
|
|
|
159
171
|
const id = getExpanderId(index);
|
|
160
172
|
const expanded = activeExpander == null ? void 0 : activeExpander[id];
|
|
161
173
|
const highlightTextChild = child.props.highlightText || highlightText;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
if (editMode) {
|
|
175
|
+
return /* @__PURE__ */ jsx(ListEditModeItem, { color, variant, onDelete: child.props.onDelete, children: React__default.cloneElement(child, {
|
|
176
|
+
id,
|
|
177
|
+
key: index,
|
|
178
|
+
expanded,
|
|
179
|
+
padding: childPadding,
|
|
180
|
+
color,
|
|
181
|
+
large,
|
|
182
|
+
"aria-expanded": false,
|
|
183
|
+
className: expanderListStyles["expander-list__item"],
|
|
184
|
+
renderChildrenWhenClosed: false,
|
|
185
|
+
variant,
|
|
186
|
+
zIndex,
|
|
187
|
+
highlightText: highlightTextChild,
|
|
188
|
+
editMode: true
|
|
189
|
+
}) });
|
|
190
|
+
} else {
|
|
191
|
+
return React__default.cloneElement(child, {
|
|
192
|
+
id,
|
|
193
|
+
key: index,
|
|
194
|
+
expanded,
|
|
195
|
+
padding: childPadding,
|
|
196
|
+
color,
|
|
197
|
+
large,
|
|
198
|
+
"aria-expanded": expanded,
|
|
199
|
+
className: expanderListStyles["expander-list__item"],
|
|
200
|
+
handleExpanderClick: (event) => handleExpanderClick(event, `${uuid}-${index}`),
|
|
201
|
+
renderChildrenWhenClosed,
|
|
202
|
+
variant,
|
|
203
|
+
zIndex,
|
|
204
|
+
highlightText: highlightTextChild
|
|
205
|
+
});
|
|
206
|
+
}
|
|
177
207
|
}
|
|
178
208
|
return child;
|
|
179
209
|
}) });
|
|
@@ -182,6 +212,7 @@ ExpanderList.displayName = "ExpanderList";
|
|
|
182
212
|
ExpanderList.Expander = Expander;
|
|
183
213
|
Expander.displayName = "ExpanderList.Expander";
|
|
184
214
|
export {
|
|
215
|
+
Expander,
|
|
185
216
|
ExpanderList,
|
|
186
217
|
ExpanderList as default
|
|
187
218
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/ExpanderList/ExpanderList.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useExpand } from '../../hooks/useExpand';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { useUuid } from '../../hooks/useUuid';\nimport { PaletteNames } from '../../theme/palette';\nimport { mergeRefs } from '../../utils/refs';\nimport { isElementInViewport } from '../../utils/viewport';\nimport { ElementHeaderType, renderElementHeader } from '../ElementHeader/ElementHeader';\nimport Highlighter from '../Highlighter';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\nimport { TitleTags } from '../Title';\n\nimport expanderListStyles from './styles.module.scss';\n\nexport type ExpanderListColors = Extract<PaletteNames, 'white' | 'blueberry' | 'cherry' | 'neutral'>;\nexport interface ExpanderType extends React.ForwardRefExoticComponent<ExpanderProps & React.RefAttributes<HTMLLIElement>> {\n ElementHeader?: ElementHeaderType;\n}\n\nexport interface ExpanderListCompound extends React.ForwardRefExoticComponent<ExpanderListProps & React.RefAttributes<HTMLUListElement>> {\n Expander: ExpanderType;\n}\n\nexport type ExpanderListVariant = 'line' | 'outline' | 'fill' | 'fill-negative';\n\nexport type ExpanderListStatus = 'none' | 'new';\n\ninterface ExpanderListProps {\n /** Toggles accordion functionality for the expanders. */\n accordion?: boolean;\n /** Items in the ExpanderList */\n children: React.ReactNode;\n /** Toggles padding of child elements */\n childPadding?: boolean;\n /** Adds custom classes to the element. */\n className?: string;\n /** Changes the colors of the list. */\n color?: ExpanderListColors;\n /** Changes the font size. */\n large?: boolean;\n /** Whether to render children when closed (in which case they are hidden with CSS). Default: false */\n renderChildrenWhenClosed?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets visual priority */\n variant?: ExpanderListVariant;\n /** Overrides the default z-index of the expander header */\n zIndex?: number;\n /** Highlights text in title and content. Used for search results */\n highlightText?: string;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\ntype ExpanderProps = Modify<\n React.HTMLAttributes<HTMLButtonElement>,\n {\n id?: string;\n title: JSX.Element | string;\n /** Changes the underlying element of the title. Default: span*/\n titleHtmlMarkup?: TitleTags;\n children: React.ReactNode;\n className?: string;\n color?: ExpanderListColors;\n icon?: React.ReactElement;\n padding?: boolean;\n expanded?: boolean;\n large?: boolean;\n testId?: string;\n handleExpanderClick?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n /** Called when expander is open/closed. */\n onExpand?: (isExpanded: boolean) => void;\n /** Overrides the default z-index of the expander header */\n zIndex?: number;\n /** Highlights text in title and content. Override if different from list. */\n highlightText?: string;\n /** Displays a status on the left side: default none */\n status?: ExpanderListStatus;\n }\n> &\n Pick<ExpanderListProps, 'renderChildrenWhenClosed' | 'variant'>;\n\nconst Expander: ExpanderType = React.forwardRef<HTMLLIElement, ExpanderProps>((props, ref) => {\n const {\n id,\n children,\n padding = true,\n color = 'neutral',\n className = '',\n icon,\n large = false,\n title,\n titleHtmlMarkup = 'span',\n expanded = false,\n testId,\n handleExpanderClick,\n onExpand,\n renderChildrenWhenClosed,\n variant = 'line',\n zIndex = 0,\n highlightText,\n status = 'none',\n } = props;\n const [isExpanded] = useExpand(expanded, onExpand);\n const expanderRef = useRef<HTMLLIElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const { isHovered, isFocused } = usePseudoClasses(triggerRef);\n\n const isFill = variant === 'fill';\n const isFillNegative = variant === 'fill-negative';\n const isOutline = variant === 'outline';\n const isLine = variant === 'line';\n\n const itemClasses = classNames(className, expanderListStyles['expander-list__item'], {\n [expanderListStyles[`expander-list__item--fill`]]: isFill,\n [expanderListStyles[`expander-list__item--fill--${color}`]]: isFill,\n [expanderListStyles[`expander-list__item--fill-negative`]]: isFillNegative,\n [expanderListStyles[`expander-list__item--fill-negative--${color}`]]: isFillNegative,\n [expanderListStyles['expander-list__item--outline']]: isOutline,\n [expanderListStyles[`expander-list__item--outline--${color}`]]: isOutline,\n [expanderListStyles['expander-list__item--line']]: isLine,\n [expanderListStyles[`expander-list__item--line--${color}`]]: isLine,\n [expanderListStyles[`expander-list__item--new`]]: status === 'new',\n });\n\n const expanderClasses = classNames(expanderListStyles['expander-list-link'], expanderListStyles[`expander-list-link--${color}`], {\n [expanderListStyles[`expander-list-link--fill--${color}`]]: isFill,\n [expanderListStyles[`expander-list-link--fill-negative`]]: isFillNegative,\n [expanderListStyles[`expander-list-link--fill-negative--${color}`]]: isFillNegative,\n [expanderListStyles['expander-list-link--outline']]: isOutline,\n [expanderListStyles[`expander-list-link--outline--${color}`]]: isOutline,\n [expanderListStyles[`expander-list-link--line--${color}`]]: isLine,\n [expanderListStyles['expander-list-link--open']]: isExpanded,\n [expanderListStyles['expander-list-link--large']]: large,\n [expanderListStyles[`expander-list-link--new`]]: status === 'new',\n });\n\n const renderContent = (): React.ReactNode => {\n if (!renderChildrenWhenClosed && !isExpanded) {\n return null;\n }\n\n const mainContentClasses = classNames(expanderListStyles['expander-list-link__main-content'], {\n [expanderListStyles['expander-list-link__main-content--expanded']]: isExpanded,\n [expanderListStyles['expander-list-link__main-content--padding']]: padding,\n [expanderListStyles[`expander-list-link__main-content--outline--${color}`]]: isOutline,\n [expanderListStyles[`expander-list-link__main-content--new`]]: status === 'new',\n });\n\n return (\n <div className={mainContentClasses} data-state={isExpanded ? 'open' : 'closed'}>\n <Highlighter searchText={highlightText}>{children}</Highlighter>\n </div>\n );\n };\n\n const statusMarkerClasses = classNames(expanderListStyles['expander-list__item__status-marker'], {\n [expanderListStyles['expander-list__item__status-marker--new']]: status === 'new',\n });\n\n return (\n <li className={itemClasses} ref={mergeRefs([ref, expanderRef])}>\n {status !== 'none' && <div className={statusMarkerClasses}></div>}\n <button\n type=\"button\"\n id={id}\n onClick={handleExpanderClick}\n data-testid={testId}\n data-analyticsid={AnalyticsId.ExpanderListExpander}\n className={expanderClasses}\n ref={triggerRef}\n aria-expanded={isExpanded}\n style={{\n zIndex: isFocused ? zIndex + 1 : zIndex,\n }}\n >\n {renderElementHeader(title, {\n titleHtmlMarkup,\n isHovered: isHovered || isFocused,\n size: large ? 'large' : 'medium',\n parentType: 'expanderlist',\n chevronIcon: isExpanded ? ChevronUp : ChevronDown,\n icon,\n highlightText,\n })}\n </button>\n {renderContent()}\n </li>\n );\n});\n\ntype ActiveExpander = Record<string, boolean>;\n\nconst isExpanderComponent = (element: unknown | null | undefined): element is React.ReactElement<ExpanderProps> =>\n React.isValidElement<ExpanderProps>(element) && (element as React.ReactElement).type === Expander;\n\nexport const ExpanderList = React.forwardRef((props: ExpanderListProps, ref: React.Ref<HTMLUListElement>) => {\n const {\n children,\n childPadding = true,\n large,\n renderChildrenWhenClosed = false,\n color = 'white',\n className = '',\n accordion = false,\n testId,\n variant,\n zIndex,\n highlightText,\n } = props;\n const [activeExpander, setActiveExpander] = useState<ActiveExpander>();\n const [latestExpander, setLatestExpander] = useState<HTMLElement>();\n const uuid = useUuid();\n const expanderListClasses = classNames(expanderListStyles['expander-list'], className, {\n [expanderListStyles[`expander-list--outline--${color}`]]: variant === 'outline',\n [expanderListStyles[`expander-list--fill`]]: variant === 'fill' || variant === 'fill-negative',\n });\n\n function handleExpanderClick(event: React.MouseEvent<HTMLElement, MouseEvent>, id: string): void {\n setActiveExpander(prevState => (accordion ? { [id]: !prevState?.[id] } : { ...prevState, [id]: !prevState?.[id] }));\n setLatestExpander(event.currentTarget);\n }\n\n const getExpanderId = (index: number): string => `${uuid}-${index}`;\n\n useEffect(() => {\n if (accordion && latestExpander && !isElementInViewport(latestExpander)) {\n latestExpander.scrollIntoView();\n }\n }, [accordion, latestExpander]);\n\n useEffect(() => {\n const newActiveExpander = React.Children.map(children, child => {\n if (isExpanderComponent(child)) {\n return child;\n }\n })?.reduce((acc, child, index) => {\n // Expanded-status skal bare settes dersom prop er satt av den som bruker komponenten\n if (typeof child.props.expanded !== 'undefined') {\n acc[getExpanderId(index)] = child.props.expanded;\n }\n return acc;\n }, {} as ActiveExpander);\n\n setActiveExpander({ ...activeExpander, ...newActiveExpander });\n }, [children]);\n\n return (\n <ul className={expanderListClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.ExpanderList}>\n {React.Children.map(children, (child, index) => {\n if (isExpanderComponent(child)) {\n const id = getExpanderId(index);\n const expanded = activeExpander?.[id];\n const highlightTextChild: string | undefined = child.props.highlightText || highlightText;\n\n return React.cloneElement(child as React.ReactElement<ExpanderProps>, {\n id,\n key: index,\n expanded,\n padding: childPadding,\n color,\n large,\n 'aria-expanded': expanded,\n className: expanderListStyles['expander-list__item'],\n handleExpanderClick: (event: React.MouseEvent<HTMLElement>) => handleExpanderClick(event, `${uuid}-${index}`),\n renderChildrenWhenClosed,\n variant,\n zIndex: zIndex,\n highlightText: highlightTextChild,\n });\n }\n return child;\n })}\n </ul>\n );\n}) as ExpanderListCompound;\n\nExpanderList.displayName = 'ExpanderList';\nExpanderList.Expander = Expander;\nExpander.displayName = 'ExpanderList.Expander';\n\nexport default ExpanderList;\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/ExpanderList/ExpanderList.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useExpand } from '../../hooks/useExpand';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { useUuid } from '../../hooks/useUuid';\nimport { PaletteNames } from '../../theme/palette';\nimport { mergeRefs } from '../../utils/refs';\nimport { isElementInViewport } from '../../utils/viewport';\nimport { ElementHeaderType, renderElementHeader } from '../ElementHeader/ElementHeader';\nimport Highlighter from '../Highlighter';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\nimport ListEditModeItem, { ListEditModeItemProps, listEditModeWrapperClassnames } from '../ListEditMode';\nimport { TitleTags } from '../Title';\n\nimport expanderListStyles from './styles.module.scss';\n\nexport type ExpanderListColors = Extract<PaletteNames, 'white' | 'blueberry' | 'cherry' | 'neutral'>;\nexport interface ExpanderType extends React.ForwardRefExoticComponent<ExpanderProps & React.RefAttributes<HTMLLIElement>> {\n ElementHeader?: ElementHeaderType;\n}\n\nexport interface ExpanderListCompound extends React.ForwardRefExoticComponent<ExpanderListProps & React.RefAttributes<HTMLUListElement>> {\n Expander: ExpanderType;\n}\n\nexport type ExpanderListVariant = 'line' | 'outline' | 'fill' | 'fill-negative';\n\nexport type ExpanderListStatus = 'none' | 'new';\n\ninterface ExpanderListProps {\n /** Toggles accordion functionality for the expanders. */\n accordion?: boolean;\n /** Items in the ExpanderList */\n children: React.ReactNode;\n /** Toggles padding of child elements */\n childPadding?: boolean;\n /** Adds custom classes to the element. */\n className?: string;\n /** Changes the colors of the list. */\n color?: ExpanderListColors;\n /** Changes the font size. */\n large?: boolean;\n /** Whether to render children when closed (in which case they are hidden with CSS). Default: false */\n renderChildrenWhenClosed?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Sets visual priority */\n variant?: ExpanderListVariant;\n /** Overrides the default z-index of the expander header */\n zIndex?: number;\n /** Highlights text in title and content. Used for search results */\n highlightText?: string;\n /**\n * @experimental This prop is experimental and may change in the future.\n * Enables ListEditMode\n */\n editMode?: boolean;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\ntype ExpanderProps = Modify<\n React.HTMLAttributes<HTMLButtonElement>,\n {\n id?: string;\n title: JSX.Element | string;\n /** Changes the underlying element of the title. Default: span*/\n titleHtmlMarkup?: TitleTags;\n children: React.ReactNode;\n className?: string;\n color?: ExpanderListColors;\n icon?: React.ReactElement;\n padding?: boolean;\n expanded?: boolean;\n large?: boolean;\n testId?: string;\n handleExpanderClick?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n /** Called when expander is open/closed. */\n onExpand?: (isExpanded: boolean) => void;\n /** Overrides the default z-index of the expander header */\n zIndex?: number;\n /** Highlights text in title and content. Override if different from list. */\n highlightText?: string;\n /** Displays a status on the left side: default none */\n status?: ExpanderListStatus;\n }\n> &\n Pick<ExpanderListProps, 'renderChildrenWhenClosed' | 'variant'> &\n ListEditModeItemProps;\n\nexport const Expander: ExpanderType = React.forwardRef<HTMLLIElement, ExpanderProps>((props, ref) => {\n const {\n id,\n children,\n padding = true,\n color = 'neutral',\n className = '',\n icon,\n large = false,\n title,\n titleHtmlMarkup = 'span',\n expanded = false,\n testId,\n handleExpanderClick,\n onExpand,\n renderChildrenWhenClosed,\n variant = 'line',\n zIndex = 0,\n highlightText,\n status = 'none',\n editMode = false,\n } = props;\n const [isExpanded] = useExpand(expanded, onExpand);\n const expanderRef = useRef<HTMLLIElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const { isHovered, isFocused } = usePseudoClasses(triggerRef);\n\n const isFill = variant === 'fill';\n const isFillNegative = variant === 'fill-negative';\n const isOutline = variant === 'outline';\n const isLine = variant === 'line';\n\n const itemClasses = classNames(className, expanderListStyles['expander-list__item'], {\n [expanderListStyles[`expander-list__item--fill`]]: isFill,\n [expanderListStyles[`expander-list__item--fill--${color}`]]: isFill,\n [expanderListStyles[`expander-list__item--fill-negative`]]: isFillNegative,\n [expanderListStyles[`expander-list__item--fill-negative--${color}`]]: isFillNegative,\n [expanderListStyles['expander-list__item--outline']]: isOutline,\n [expanderListStyles[`expander-list__item--outline--${color}`]]: isOutline,\n [expanderListStyles['expander-list__item--line']]: isLine,\n [expanderListStyles[`expander-list__item--line--${color}`]]: isLine,\n [expanderListStyles[`expander-list__item--new`]]: status === 'new',\n });\n\n const expanderClasses = classNames(expanderListStyles['expander-list-link'], expanderListStyles[`expander-list-link--${color}`], {\n [expanderListStyles[`expander-list-link--fill--${color}`]]: isFill,\n [expanderListStyles[`expander-list-link--fill-negative`]]: isFillNegative,\n [expanderListStyles[`expander-list-link--fill-negative--${color}`]]: isFillNegative,\n [expanderListStyles['expander-list-link--outline']]: isOutline,\n [expanderListStyles[`expander-list-link--outline--${color}`]]: isOutline,\n [expanderListStyles[`expander-list-link--line--${color}`]]: isLine,\n [expanderListStyles['expander-list-link--open']]: isExpanded,\n [expanderListStyles['expander-list-link--large']]: large,\n [expanderListStyles[`expander-list-link--new`]]: status === 'new',\n });\n\n const renderContent = (): React.ReactNode => {\n if (!renderChildrenWhenClosed && !isExpanded) {\n return null;\n }\n\n const mainContentClasses = classNames(expanderListStyles['expander-list-link__main-content'], {\n [expanderListStyles['expander-list-link__main-content--expanded']]: isExpanded,\n [expanderListStyles['expander-list-link__main-content--padding']]: padding,\n [expanderListStyles[`expander-list-link__main-content--outline--${color}`]]: isOutline,\n [expanderListStyles[`expander-list-link__main-content--new`]]: status === 'new',\n });\n\n return (\n <div className={mainContentClasses} data-state={isExpanded ? 'open' : 'closed'}>\n <Highlighter searchText={highlightText}>{children}</Highlighter>\n </div>\n );\n };\n\n const statusMarkerClasses = classNames(expanderListStyles['expander-list__item__status-marker'], {\n [expanderListStyles['expander-list__item__status-marker--new']]: status === 'new',\n });\n\n return (\n <li className={itemClasses} ref={mergeRefs([ref, expanderRef])}>\n {status !== 'none' && <div className={statusMarkerClasses}></div>}\n {editMode ? (\n <div id={id} data-testid={testId} data-analyticsid={AnalyticsId.ExpanderListExpander} className={expanderClasses}>\n {renderElementHeader(title, {\n titleHtmlMarkup,\n isHovered: false,\n size: large ? 'large' : 'medium',\n parentType: 'expanderlist',\n chevronIcon: undefined,\n icon,\n highlightText,\n })}\n </div>\n ) : (\n <button\n type=\"button\"\n id={id}\n onClick={handleExpanderClick}\n data-testid={testId}\n data-analyticsid={AnalyticsId.ExpanderListExpander}\n className={expanderClasses}\n ref={triggerRef}\n aria-expanded={isExpanded}\n style={{\n zIndex: isFocused ? zIndex + 1 : zIndex,\n }}\n >\n {renderElementHeader(title, {\n titleHtmlMarkup,\n isHovered: isHovered || isFocused,\n size: large ? 'large' : 'medium',\n parentType: 'expanderlist',\n chevronIcon: isExpanded ? ChevronUp : ChevronDown,\n icon,\n highlightText,\n })}\n </button>\n )}\n {!editMode && renderContent()}\n </li>\n );\n});\n\ntype ActiveExpander = Record<string, boolean>;\n\nconst isExpanderComponent = (element: unknown | null | undefined): element is React.ReactElement<ExpanderProps> =>\n React.isValidElement<ExpanderProps>(element) && (element as React.ReactElement).type === Expander;\n\nexport const ExpanderList = React.forwardRef((props: ExpanderListProps, ref: React.Ref<HTMLUListElement>) => {\n const {\n children,\n childPadding = true,\n large,\n renderChildrenWhenClosed = false,\n color = 'white',\n className = '',\n accordion = false,\n testId,\n variant,\n zIndex,\n highlightText,\n editMode = false,\n } = props;\n const [activeExpander, setActiveExpander] = useState<ActiveExpander>();\n const [latestExpander, setLatestExpander] = useState<HTMLElement>();\n const uuid = useUuid();\n const expanderListClasses = classNames(expanderListStyles['expander-list'], className, {\n [expanderListStyles[`expander-list--outline--${color}`]]: variant === 'outline',\n [expanderListStyles[`expander-list--fill`]]: variant === 'fill' || variant === 'fill-negative',\n [listEditModeWrapperClassnames]: editMode,\n });\n\n function handleExpanderClick(event: React.MouseEvent<HTMLElement, MouseEvent>, id: string): void {\n setActiveExpander(prevState => (accordion ? { [id]: !prevState?.[id] } : { ...prevState, [id]: !prevState?.[id] }));\n setLatestExpander(event.currentTarget);\n }\n\n const getExpanderId = (index: number): string => `${uuid}-${index}`;\n\n useEffect(() => {\n if (accordion && latestExpander && !isElementInViewport(latestExpander)) {\n latestExpander.scrollIntoView();\n }\n }, [accordion, latestExpander]);\n\n useEffect(() => {\n const newActiveExpander = React.Children.map(children, child => {\n if (isExpanderComponent(child)) {\n return child;\n }\n })?.reduce((acc, child, index) => {\n // Expanded-status skal bare settes dersom prop er satt av den som bruker komponenten\n if (typeof child.props.expanded !== 'undefined') {\n acc[getExpanderId(index)] = child.props.expanded;\n }\n return acc;\n }, {} as ActiveExpander);\n\n setActiveExpander({ ...activeExpander, ...newActiveExpander });\n }, [children]);\n\n return (\n <ul className={expanderListClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.ExpanderList}>\n {React.Children.map(children, (child, index) => {\n if (isExpanderComponent(child)) {\n const id = getExpanderId(index);\n const expanded = activeExpander?.[id];\n const highlightTextChild: string | undefined = child.props.highlightText || highlightText;\n\n if (editMode) {\n return (\n <ListEditModeItem color={color} variant={variant} onDelete={child.props.onDelete}>\n {React.cloneElement(child, {\n id,\n key: index,\n expanded,\n padding: childPadding,\n color,\n large,\n 'aria-expanded': false,\n className: expanderListStyles['expander-list__item'],\n renderChildrenWhenClosed: false,\n variant,\n zIndex: zIndex,\n highlightText: highlightTextChild,\n editMode: true,\n })}\n </ListEditModeItem>\n );\n } else {\n return React.cloneElement(child as React.ReactElement<ExpanderProps>, {\n id,\n key: index,\n expanded,\n padding: childPadding,\n color,\n large,\n 'aria-expanded': expanded,\n className: expanderListStyles['expander-list__item'],\n handleExpanderClick: (event: React.MouseEvent<HTMLElement>) => handleExpanderClick(event, `${uuid}-${index}`),\n renderChildrenWhenClosed,\n variant,\n zIndex: zIndex,\n highlightText: highlightTextChild,\n });\n }\n }\n return child;\n })}\n </ul>\n );\n}) as ExpanderListCompound;\n\nExpanderList.displayName = 'ExpanderList';\nExpanderList.Expander = Expander;\nExpander.displayName = 'ExpanderList.Expander';\n\nexport default ExpanderList;\n"],"names":["React"],"mappings":"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"}
|
|
@@ -187,7 +187,6 @@
|
|
|
187
187
|
font-size: font-settings.$font-size-sm;
|
|
188
188
|
line-height: font-settings.$lineheight-size-sm;
|
|
189
189
|
display: flex;
|
|
190
|
-
cursor: pointer;
|
|
191
190
|
font-family: inherit;
|
|
192
191
|
text-decoration: none;
|
|
193
192
|
justify-content: space-between;
|
|
@@ -200,6 +199,10 @@
|
|
|
200
199
|
grid-area: header;
|
|
201
200
|
padding-left: var(--statusmarker-left-space);
|
|
202
201
|
|
|
202
|
+
&:not(div) {
|
|
203
|
+
cursor: pointer;
|
|
204
|
+
}
|
|
205
|
+
|
|
203
206
|
@media (min-width: map.get(breakpoints.$grid-breakpoints, md)) {
|
|
204
207
|
font-size: font-settings.$font-size-md;
|
|
205
208
|
line-height: font-settings.$lineheight-size-md;
|
|
@@ -223,11 +226,12 @@
|
|
|
223
226
|
|
|
224
227
|
&--white:not(.expander-list-link--outline, .expander-list-link--fill-negative) {
|
|
225
228
|
&[aria-expanded='false'] {
|
|
226
|
-
|
|
229
|
+
// expander settes til div om man er i edit mode, og skal da ikke ha hover/active effekter
|
|
230
|
+
&:hover:not(div) {
|
|
227
231
|
background-color: var(--core-color-neutral-50);
|
|
228
232
|
}
|
|
229
233
|
|
|
230
|
-
&:active {
|
|
234
|
+
&:active:not(div) {
|
|
231
235
|
background-color: var(--core-color-neutral-100);
|
|
232
236
|
}
|
|
233
237
|
}
|
|
@@ -235,11 +239,11 @@
|
|
|
235
239
|
&[aria-expanded='true'] {
|
|
236
240
|
background-color: var(--core-color-neutral-50);
|
|
237
241
|
|
|
238
|
-
&:hover {
|
|
242
|
+
&:hover:not(div) {
|
|
239
243
|
background-color: var(--core-color-neutral-100);
|
|
240
244
|
}
|
|
241
245
|
|
|
242
|
-
&:active {
|
|
246
|
+
&:active:not(div) {
|
|
243
247
|
background-color: var(--core-color-neutral-200);
|
|
244
248
|
}
|
|
245
249
|
}
|
|
@@ -247,11 +251,11 @@
|
|
|
247
251
|
|
|
248
252
|
&--blueberry:not(.expander-list-link--outline, .expander-list-link--fill-negative) {
|
|
249
253
|
&[aria-expanded='false'] {
|
|
250
|
-
&:hover {
|
|
254
|
+
&:hover:not(div) {
|
|
251
255
|
background-color: var(--core-color-blueberry-100);
|
|
252
256
|
}
|
|
253
257
|
|
|
254
|
-
&:active {
|
|
258
|
+
&:active:not(div) {
|
|
255
259
|
background-color: var(--color-action-background-ondark-hoverselected);
|
|
256
260
|
}
|
|
257
261
|
}
|
|
@@ -259,11 +263,11 @@
|
|
|
259
263
|
&[aria-expanded='true'] {
|
|
260
264
|
background-color: var(--core-color-blueberry-100);
|
|
261
265
|
|
|
262
|
-
&:hover {
|
|
266
|
+
&:hover:not(div) {
|
|
263
267
|
background-color: var(--core-color-blueberry-200);
|
|
264
268
|
}
|
|
265
269
|
|
|
266
|
-
&:active {
|
|
270
|
+
&:active:not(div) {
|
|
267
271
|
background-color: var(--core-color-blueberry-300);
|
|
268
272
|
}
|
|
269
273
|
}
|
|
@@ -271,11 +275,11 @@
|
|
|
271
275
|
|
|
272
276
|
&--cherry:not(.expander-list-link--outline, .expander-list-link--fill-negative) {
|
|
273
277
|
&[aria-expanded='false'] {
|
|
274
|
-
&:hover {
|
|
278
|
+
&:hover:not(div) {
|
|
275
279
|
background-color: var(--core-color-cherry-100);
|
|
276
280
|
}
|
|
277
281
|
|
|
278
|
-
&:active {
|
|
282
|
+
&:active:not(div) {
|
|
279
283
|
background-color: var(--core-color-cherry-200);
|
|
280
284
|
}
|
|
281
285
|
}
|
|
@@ -283,11 +287,11 @@
|
|
|
283
287
|
&[aria-expanded='true'] {
|
|
284
288
|
background-color: var(--core-color-cherry-100);
|
|
285
289
|
|
|
286
|
-
&:hover {
|
|
290
|
+
&:hover:not(div) {
|
|
287
291
|
background-color: var(--core-color-cherry-200);
|
|
288
292
|
}
|
|
289
293
|
|
|
290
|
-
&:active {
|
|
294
|
+
&:active:not(div) {
|
|
291
295
|
background-color: var(--core-color-cherry-300);
|
|
292
296
|
}
|
|
293
297
|
}
|
|
@@ -295,11 +299,11 @@
|
|
|
295
299
|
|
|
296
300
|
&--neutral:not(.expander-list-link--outline, .expander-list-link--fill-negative) {
|
|
297
301
|
&[aria-expanded='false'] {
|
|
298
|
-
&:hover {
|
|
302
|
+
&:hover:not(div) {
|
|
299
303
|
background-color: var(--core-color-neutral-100);
|
|
300
304
|
}
|
|
301
305
|
|
|
302
|
-
&:active {
|
|
306
|
+
&:active:not(div) {
|
|
303
307
|
background-color: var(--core-color-neutral-200);
|
|
304
308
|
}
|
|
305
309
|
}
|
|
@@ -307,11 +311,11 @@
|
|
|
307
311
|
&[aria-expanded='true'] {
|
|
308
312
|
background-color: var(--core-color-neutral-100);
|
|
309
313
|
|
|
310
|
-
&:hover {
|
|
314
|
+
&:hover:not(div) {
|
|
311
315
|
background-color: var(--core-color-neutral-200);
|
|
312
316
|
}
|
|
313
317
|
|
|
314
|
-
&:active {
|
|
318
|
+
&:active:not(div) {
|
|
315
319
|
background-color: var(--core-color-neutral-300);
|
|
316
320
|
}
|
|
317
321
|
}
|
|
@@ -349,11 +353,11 @@
|
|
|
349
353
|
|
|
350
354
|
&--blueberry {
|
|
351
355
|
&[aria-expanded='false'] {
|
|
352
|
-
&:hover {
|
|
356
|
+
&:hover:not(div) {
|
|
353
357
|
background-color: var(--core-color-blueberry-50);
|
|
354
358
|
}
|
|
355
359
|
|
|
356
|
-
&:active {
|
|
360
|
+
&:active:not(div) {
|
|
357
361
|
background-color: var(--core-color-blueberry-100);
|
|
358
362
|
}
|
|
359
363
|
}
|
|
@@ -361,11 +365,11 @@
|
|
|
361
365
|
&[aria-expanded='true'] {
|
|
362
366
|
background-color: var(--core-color-blueberry-50);
|
|
363
367
|
|
|
364
|
-
&:hover {
|
|
368
|
+
&:hover:not(div) {
|
|
365
369
|
background-color: var(--core-color-blueberry-100);
|
|
366
370
|
}
|
|
367
371
|
|
|
368
|
-
&:active {
|
|
372
|
+
&:active:not(div) {
|
|
369
373
|
background-color: var(--core-color-blueberry-200);
|
|
370
374
|
}
|
|
371
375
|
}
|
|
@@ -373,11 +377,11 @@
|
|
|
373
377
|
|
|
374
378
|
&--cherry {
|
|
375
379
|
&[aria-expanded='false'] {
|
|
376
|
-
&:hover {
|
|
380
|
+
&:hover:not(div) {
|
|
377
381
|
background-color: var(--core-color-cherry-50);
|
|
378
382
|
}
|
|
379
383
|
|
|
380
|
-
&:active {
|
|
384
|
+
&:active:not(div) {
|
|
381
385
|
background-color: var(--core-color-cherry-100);
|
|
382
386
|
}
|
|
383
387
|
}
|
|
@@ -385,11 +389,11 @@
|
|
|
385
389
|
&[aria-expanded='true'] {
|
|
386
390
|
background-color: var(--core-color-cherry-50);
|
|
387
391
|
|
|
388
|
-
&:hover {
|
|
392
|
+
&:hover:not(div) {
|
|
389
393
|
background-color: var(--core-color-cherry-100);
|
|
390
394
|
}
|
|
391
395
|
|
|
392
|
-
&:active {
|
|
396
|
+
&:active:not(div) {
|
|
393
397
|
background-color: var(--core-color-cherry-200);
|
|
394
398
|
}
|
|
395
399
|
}
|
|
@@ -398,11 +402,11 @@
|
|
|
398
402
|
&--neutral,
|
|
399
403
|
&--white {
|
|
400
404
|
&[aria-expanded='false'] {
|
|
401
|
-
&:hover {
|
|
405
|
+
&:hover:not(div) {
|
|
402
406
|
background-color: var(--core-color-neutral-50);
|
|
403
407
|
}
|
|
404
408
|
|
|
405
|
-
&:active {
|
|
409
|
+
&:active:not(div) {
|
|
406
410
|
background-color: var(--core-color-neutral-100);
|
|
407
411
|
}
|
|
408
412
|
}
|
|
@@ -410,11 +414,11 @@
|
|
|
410
414
|
&[aria-expanded='true'] {
|
|
411
415
|
background-color: var(--core-color-neutral-50);
|
|
412
416
|
|
|
413
|
-
&:hover {
|
|
417
|
+
&:hover:not(div) {
|
|
414
418
|
background-color: var(--core-color-neutral-100);
|
|
415
419
|
}
|
|
416
420
|
|
|
417
|
-
&:active {
|
|
421
|
+
&:active:not(div) {
|
|
418
422
|
background-color: var(--core-color-neutral-200);
|
|
419
423
|
}
|
|
420
424
|
}
|
|
@@ -429,22 +433,22 @@
|
|
|
429
433
|
&--new {
|
|
430
434
|
background-color: var(--core-color-blueberry-50) !important;
|
|
431
435
|
|
|
432
|
-
&:hover {
|
|
436
|
+
&:hover:not(div) {
|
|
433
437
|
background-color: var(--core-color-blueberry-100) !important;
|
|
434
438
|
}
|
|
435
439
|
|
|
436
|
-
&:active {
|
|
440
|
+
&:active:not(div) {
|
|
437
441
|
background-color: var(--core-color-blueberry-200) !important;
|
|
438
442
|
}
|
|
439
443
|
|
|
440
444
|
&[aria-expanded='true'] {
|
|
441
445
|
background-color: var(--core-color-blueberry-100) !important;
|
|
442
446
|
|
|
443
|
-
&:hover {
|
|
447
|
+
&:hover:not(div) {
|
|
444
448
|
background-color: var(--core-color-blueberry-200) !important;
|
|
445
449
|
}
|
|
446
450
|
|
|
447
|
-
&:active {
|
|
451
|
+
&:active:not(div) {
|
|
448
452
|
background-color: var(--core-color-blueberry-300) !important;
|
|
449
453
|
}
|
|
450
454
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const starIconNormalMobile: (
|
|
2
|
-
export declare const starIconHoverMobile: (
|
|
3
|
-
export declare const starIconNormalDesktop: (
|
|
4
|
-
export declare const starIconHoverDesktop: (
|
|
1
|
+
export declare const starIconNormalMobile: (isChecked: boolean, isActive: boolean) => React.JSX.Element;
|
|
2
|
+
export declare const starIconHoverMobile: (isChecked: boolean, isActive: boolean) => React.JSX.Element;
|
|
3
|
+
export declare const starIconNormalDesktop: (isChecked: boolean, isActive: boolean) => React.JSX.Element;
|
|
4
|
+
export declare const starIconHoverDesktop: (isChecked: boolean, isActive: boolean) => React.JSX.Element;
|