@helsenorge/designsystem-react 11.4.0 → 11.5.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 +955 -1594
- package/Checkbox.js +1 -1
- package/Checkbox.js.map +1 -1
- package/Duolist.js +92 -0
- package/Duolist.js.map +1 -0
- package/Highlighter.js +44 -0
- package/Highlighter.js.map +1 -0
- package/LinkList.js +11 -4
- package/LinkList.js.map +1 -1
- package/ListHeader.js +19 -6
- package/ListHeader.js.map +1 -1
- package/ListHeaderText.js +5 -3
- package/ListHeaderText.js.map +1 -1
- package/Panel.js +25 -11
- package/Panel.js.map +1 -1
- package/PanelTitle.js +3 -2
- package/PanelTitle.js.map +1 -1
- package/components/Checkbox/styles.module.scss +7 -1
- package/components/Checkbox/styles.module.scss.d.ts +1 -0
- package/components/Dropdown/styles.module.scss +9 -1
- package/components/Duolist/index.js +3 -88
- package/components/Duolist/index.js.map +1 -1
- package/components/ExpanderList/ExpanderList.d.ts +4 -0
- package/components/ExpanderList/index.js +11 -5
- package/components/ExpanderList/index.js.map +1 -1
- package/components/Highlighter/Highlighter.d.ts +7 -0
- package/components/Highlighter/Highlighter.test.d.ts +1 -0
- package/components/Highlighter/index.d.ts +3 -0
- package/components/Highlighter/index.js +6 -0
- package/components/Highlighter/index.js.map +1 -0
- package/components/Highlighter/styles.module.scss +4 -0
- package/components/Highlighter/styles.module.scss.d.ts +9 -0
- package/components/LinkList/LinkList.d.ts +4 -0
- package/components/ListHeader/ListHeader.d.ts +3 -1
- package/components/ListHeader/ListHeaderText/ListHeaderText.d.ts +2 -0
- package/components/Panel/Panel.d.ts +6 -0
- package/components/Panel/PanelTitle/PanelTitle.d.ts +3 -1
- package/components/PanelList/PanelList.d.ts +2 -0
- package/components/PanelList/index.js +3 -2
- package/components/PanelList/index.js.map +1 -1
- package/components/RadioButton/styles.module.scss +7 -1
- package/components/Toggle/index.js +2 -1
- package/components/Toggle/index.js.map +1 -1
- package/package.json +1 -1
- package/scss/helsenorge.scss +2 -0
- package/scss/typography.stories.tsx +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/PanelList/PanelList.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport Panel, { PanelProps, PanelVariant } from '../Panel/Panel';\n\nimport styles from './styles.module.scss';\n\nexport interface PanelListProps {\n /** Panels to render inside the PanelList */\n children?: React.ReactNode;\n /** Changes the visual representation of the panel. Default: fill */\n variant?: PanelVariant;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst isPanelComponent = (element: {} | null | undefined): element is React.ReactElement<PanelProps> =>\n React.isValidElement<PanelProps>(element) && (element as React.ReactElement).type === Panel;\n\nconst PanelList = React.forwardRef(function BadgeForwardedRef(props: PanelListProps, ref: React.ForwardedRef<HTMLDivElement>) {\n const { testId, children, variant = PanelVariant.fill } = props;\n\n const renderPanel = (panel: React.ReactElement<PanelProps>): React.ReactElement<PanelProps> =>\n React.cloneElement(panel, {\n variant: variant,\n className: classNames(panel.props.className, styles[`panel-list__panel--${variant}`]),\n });\n\n return (\n <div\n ref={ref}\n data-testid={testId}\n data-analyticsid={AnalyticsId.PanelList}\n className={classNames({ [styles['panel-list--outline']]: variant === PanelVariant.outline })}\n >\n {React.Children.map(children, child => (isPanelComponent(child) ? renderPanel(child) : child))}\n </div>\n );\n});\n\nexport default PanelList;\n"],"names":["React"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/PanelList/PanelList.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport Panel, { PanelProps, PanelVariant } from '../Panel/Panel';\n\nimport styles from './styles.module.scss';\n\nexport interface PanelListProps {\n /** Panels to render inside the PanelList */\n children?: React.ReactNode;\n /** Changes the visual representation of the panel. Default: fill */\n variant?: PanelVariant;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Highlights text in title and content. Used for search results */\n highlightText?: string;\n}\n\nconst isPanelComponent = (element: {} | null | undefined): element is React.ReactElement<PanelProps> =>\n React.isValidElement<PanelProps>(element) && (element as React.ReactElement).type === Panel;\n\nconst PanelList = React.forwardRef(function BadgeForwardedRef(props: PanelListProps, ref: React.ForwardedRef<HTMLDivElement>) {\n const { testId, children, variant = PanelVariant.fill, highlightText } = props;\n\n const renderPanel = (panel: React.ReactElement<PanelProps>): React.ReactElement<PanelProps> =>\n React.cloneElement(panel, {\n variant: variant,\n className: classNames(panel.props.className, styles[`panel-list__panel--${variant}`]),\n highlightText: panel.props.highlightText || highlightText,\n });\n\n return (\n <div\n ref={ref}\n data-testid={testId}\n data-analyticsid={AnalyticsId.PanelList}\n className={classNames({ [styles['panel-list--outline']]: variant === PanelVariant.outline })}\n >\n {React.Children.map(children, child => (isPanelComponent(child) ? renderPanel(child) : child))}\n </div>\n );\n});\n\nexport default PanelList;\n"],"names":["React"],"mappings":";;;;;;AAoBA,MAAM,mBAAmB,CAAC,YACxBA,eAAM,eAA2B,OAAO,KAAM,QAA+B,SAAS;AAExF,MAAM,YAAYA,eAAM,WAAW,SAAS,kBAAkB,OAAuB,KAAyC;AAC5H,QAAM,EAAE,QAAQ,UAAU,UAAU,aAAa,MAAM,kBAAkB;AAEzE,QAAM,cAAc,CAAC,UACnBA,eAAM,aAAa,OAAO;AAAA,IACxB;AAAA,IACA,WAAW,WAAW,MAAM,MAAM,WAAW,OAAO,sBAAsB,OAAO,EAAE,CAAC;AAAA,IACpF,eAAe,MAAM,MAAM,iBAAiB;AAAA,EAAA,CAC7C;AAGD,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,oBAAkB,YAAY;AAAA,MAC9B,WAAW,WAAW,EAAE,CAAC,OAAO,qBAAqB,CAAC,GAAG,YAAY,aAAa,SAAS;AAAA,MAE1F,UAAAA,eAAM,SAAS,IAAI,UAAU,CAAA,UAAU,iBAAiB,KAAK,IAAI,YAAY,KAAK,IAAI,KAAM;AAAA,IAAA;AAAA,EAC/F;AAEJ,CAAC;"}
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
@use '../../scss/font-settings' as font-settings;
|
|
7
7
|
@use '../../scss/breakpoints' as breakpoints;
|
|
8
8
|
|
|
9
|
+
$padding-clickable-area-top-bottom: 8px;
|
|
10
|
+
$padding-clickable-area-left: 8px;
|
|
11
|
+
|
|
9
12
|
@mixin dashed-border() {
|
|
10
13
|
box-shadow: none;
|
|
11
14
|
|
|
@@ -24,6 +27,7 @@
|
|
|
24
27
|
|
|
25
28
|
.radio-button-wrapper {
|
|
26
29
|
cursor: pointer;
|
|
30
|
+
margin-left: -$padding-clickable-area-left;
|
|
27
31
|
|
|
28
32
|
&__large {
|
|
29
33
|
margin: spacers.getSpacer(2xs) 0;
|
|
@@ -51,6 +55,7 @@
|
|
|
51
55
|
cursor: pointer;
|
|
52
56
|
line-height: font-settings.$lineheight-size-sm;
|
|
53
57
|
color: palette.$black;
|
|
58
|
+
padding: $padding-clickable-area-top-bottom 0 $padding-clickable-area-top-bottom $padding-clickable-area-left;
|
|
54
59
|
|
|
55
60
|
&--on-dark {
|
|
56
61
|
color: palette.$white;
|
|
@@ -412,7 +417,8 @@
|
|
|
412
417
|
}
|
|
413
418
|
|
|
414
419
|
.radiobutton-sublabel-wrapper {
|
|
415
|
-
|
|
420
|
+
margin-top: -$padding-clickable-area-top-bottom;
|
|
421
|
+
padding-left: calc(2.8rem + $padding-clickable-area-left);
|
|
416
422
|
}
|
|
417
423
|
|
|
418
424
|
/******** RESET *********/
|
|
@@ -103,7 +103,8 @@ const Toggle = ({
|
|
|
103
103
|
onChange: handleChange,
|
|
104
104
|
className: styles["toggle-container__input"],
|
|
105
105
|
"aria-label": label.map((l) => l.text).join(" "),
|
|
106
|
-
"aria-describedby": subLabel ? subLabelId : void 0
|
|
106
|
+
"aria-describedby": subLabel ? subLabelId : void 0,
|
|
107
|
+
role: "switch"
|
|
107
108
|
}
|
|
108
109
|
),
|
|
109
110
|
/* @__PURE__ */ jsx("span", { id: toggleId, className: toggleClassNames, "aria-hidden": "true", children: /* @__PURE__ */ jsx("span", { id: toggleDotId, className: toggleDotClassNames, "aria-hidden": "true", children: /* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { useAnimate } from 'motion/react';\n\nimport { AnalyticsId } from '../../constants';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { useUuid } from '../../hooks/useUuid';\n\nimport styles from './styles.module.scss';\nimport '../../scss/supernova/styles/colors.css';\n\nexport type LabelText = {\n text: string;\n type?: 'subdued' | 'normal';\n};\n\nexport enum TogglePosition {\n left = 'left',\n right = 'right',\n}\n\nexport enum ToggleOnColor {\n onwhite = 'onwhite',\n onneutral = 'onneutral',\n onblueberry = 'onblueberry',\n}\n\nexport interface ToggleProps extends Pick<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /** Determines if the Toggle is checked */\n checked?: boolean;\n /** Sets the label of the Toggle */\n label: LabelText[];\n /** Defines the color of the toggle */\n onColor?: keyof typeof ToggleOnColor;\n /** Sets the sublabel of the Toggle */\n subLabel?: string;\n /** Sets the position of the toggle relative to the label */\n togglePosition?: keyof typeof TogglePosition;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst Toggle: React.FC<ToggleProps> = ({\n checked = false,\n label,\n onChange,\n onColor = ToggleOnColor.onwhite,\n subLabel,\n togglePosition = TogglePosition.left,\n testId,\n}: ToggleProps) => {\n const [checkedState, setCheckedState] = useState(checked);\n const [showToggleAnimation, setShowToggleAnimation] = useState(false);\n const [scope, animate] = useAnimate();\n const inputId = useUuid();\n const toggleId = useUuid();\n const toggleDotId = useUuid();\n const labelId = useUuid();\n const subLabelId = useUuid();\n const { refObject, isHovered, isActive } = usePseudoClasses<HTMLLabelElement>(scope);\n const showHoveredStyling = isHovered && !showToggleAnimation;\n const isOnWhite = onColor === ToggleOnColor.onwhite;\n\n useEffect(() => {\n if (showToggleAnimation) {\n const timer = setTimeout(() => setShowToggleAnimation(false), 300);\n return (): void => clearTimeout(timer);\n }\n }, [showToggleAnimation]);\n\n useEffect(() => {\n setCheckedState(checked);\n }, [checked]);\n\n useEffect(() => {\n animate('#' + toggleId, { background: getBackgroundColor() }, { duration: 0.2, ease: 'easeInOut' });\n animate(\n '#' + toggleDotId,\n { background: checkedState ? 'var(--color-action-graphics-ondark)' : 'var(--core-color-neutral-700)' },\n { duration: 0.2, ease: 'easeInOut' }\n );\n animate('#' + toggleDotId, { x: showHoveredStyling ? 9 : checkedState ? 18 : 0 }, { duration: 0.2, ease: 'easeInOut' });\n animate('svg', { opacity: checkedState ? 1 : 0 }, { duration: 0.2, ease: 'easeInOut' });\n }, [checkedState, showHoveredStyling, isActive]);\n\n const getBackgroundColor = (): string => {\n if (checkedState && isActive) {\n return 'var(--core-color-blueberry-800)';\n } else if (checkedState) {\n return showHoveredStyling ? 'var(--color-action-graphics-onlight-hover)' : 'var(--color-action-graphics-onlight)';\n } else if (isOnWhite && isActive) {\n return 'var(--core-color-neutral-400)';\n } else if (isOnWhite) {\n return showHoveredStyling ? 'var(--core-color-neutral-200)' : 'var(--core-color-neutral-50)';\n } else if (isActive) {\n return 'var(--core-color-neutral-200)';\n } else {\n return showHoveredStyling ? 'var(--core-color-neutral-50)' : 'var(--core-color-white)';\n }\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n setCheckedState(event.target.checked);\n setShowToggleAnimation(true);\n onChange?.(event);\n };\n\n const toggleContainerClassNames = classNames(styles['toggle-container']);\n\n const toggleRowClassNames = classNames(styles['toggle-container__row'], {\n [styles['toggle-container__row--right']]: togglePosition === TogglePosition.right,\n });\n\n const subLabelClassNames = classNames(styles['toggle-container__sublabel'], {\n [styles['toggle-container__sublabel--toggle-right']]: togglePosition === TogglePosition.right,\n });\n\n const toggleClassNames = classNames(styles['toggle-container__toggle'], {\n [styles['toggle-container__toggle--ignore-hover']]: showToggleAnimation,\n [styles['toggle-container__toggle--on-white']]: onColor === ToggleOnColor.onwhite,\n });\n\n const toggleDotClassNames = classNames(styles['toggle-container__toggle__dot'], {\n [styles['toggle-container__toggle__dot--ignore-hover']]: showToggleAnimation,\n });\n\n const renderToggle = (): React.ReactElement => (\n <label ref={refObject} className={styles['toggle-container__toggle-group']}>\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checkedState}\n onChange={handleChange}\n className={styles['toggle-container__input']}\n aria-label={label.map(l => l.text).join(' ')}\n aria-describedby={subLabel ? subLabelId : undefined}\n />\n <span id={toggleId} className={toggleClassNames} aria-hidden=\"true\">\n <span id={toggleDotId} className={toggleDotClassNames} aria-hidden=\"true\">\n <svg\n width=\"17\"\n height=\"13\"\n viewBox=\"0 0 17 13\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={styles['toggle-container__toggle__dot__icon']}\n >\n <path d=\"M15 2L6.80839 10.548L2 5.53145\" fill=\"none\" strokeWidth=\"3\" />\n </svg>\n </span>\n </span>\n </label>\n );\n\n const renderLabelText = (): React.ReactElement => {\n return (\n <span\n id={labelId}\n className={classNames(styles['toggle-container__label'], {\n [styles['toggle-container__label--toggle-right']]: togglePosition === TogglePosition.right,\n })}\n >\n {label.map(labelText => {\n const labelClassNames = classNames({\n [styles['toggle-container__label__text--subdued']]: labelText.type === 'subdued',\n });\n\n return (\n <span key={labelId + labelText.text} className={labelClassNames}>\n {labelText.text}\n </span>\n );\n })}\n </span>\n );\n };\n\n return (\n <div className={toggleContainerClassNames} data-testid={testId} data-analyticsid={AnalyticsId.Toggle}>\n <div className={toggleRowClassNames}>\n {togglePosition === TogglePosition.left && (\n <>\n {renderToggle()}\n {renderLabelText()}\n </>\n )}\n {togglePosition === TogglePosition.right && (\n <>\n {renderLabelText()}\n {renderToggle()}\n </>\n )}\n </div>\n {subLabel && (\n <div id={subLabelId} className={subLabelClassNames}>\n {subLabel}\n </div>\n )}\n </div>\n );\n};\n\nexport default Toggle;\n"],"names":["TogglePosition","ToggleOnColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { useAnimate } from 'motion/react';\n\nimport { AnalyticsId } from '../../constants';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { useUuid } from '../../hooks/useUuid';\n\nimport styles from './styles.module.scss';\nimport '../../scss/supernova/styles/colors.css';\n\nexport type LabelText = {\n text: string;\n type?: 'subdued' | 'normal';\n};\n\nexport enum TogglePosition {\n left = 'left',\n right = 'right',\n}\n\nexport enum ToggleOnColor {\n onwhite = 'onwhite',\n onneutral = 'onneutral',\n onblueberry = 'onblueberry',\n}\n\nexport interface ToggleProps extends Pick<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /** Determines if the Toggle is checked */\n checked?: boolean;\n /** Sets the label of the Toggle */\n label: LabelText[];\n /** Defines the color of the toggle */\n onColor?: keyof typeof ToggleOnColor;\n /** Sets the sublabel of the Toggle */\n subLabel?: string;\n /** Sets the position of the toggle relative to the label */\n togglePosition?: keyof typeof TogglePosition;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst Toggle: React.FC<ToggleProps> = ({\n checked = false,\n label,\n onChange,\n onColor = ToggleOnColor.onwhite,\n subLabel,\n togglePosition = TogglePosition.left,\n testId,\n}: ToggleProps) => {\n const [checkedState, setCheckedState] = useState(checked);\n const [showToggleAnimation, setShowToggleAnimation] = useState(false);\n const [scope, animate] = useAnimate();\n const inputId = useUuid();\n const toggleId = useUuid();\n const toggleDotId = useUuid();\n const labelId = useUuid();\n const subLabelId = useUuid();\n const { refObject, isHovered, isActive } = usePseudoClasses<HTMLLabelElement>(scope);\n const showHoveredStyling = isHovered && !showToggleAnimation;\n const isOnWhite = onColor === ToggleOnColor.onwhite;\n\n useEffect(() => {\n if (showToggleAnimation) {\n const timer = setTimeout(() => setShowToggleAnimation(false), 300);\n return (): void => clearTimeout(timer);\n }\n }, [showToggleAnimation]);\n\n useEffect(() => {\n setCheckedState(checked);\n }, [checked]);\n\n useEffect(() => {\n animate('#' + toggleId, { background: getBackgroundColor() }, { duration: 0.2, ease: 'easeInOut' });\n animate(\n '#' + toggleDotId,\n { background: checkedState ? 'var(--color-action-graphics-ondark)' : 'var(--core-color-neutral-700)' },\n { duration: 0.2, ease: 'easeInOut' }\n );\n animate('#' + toggleDotId, { x: showHoveredStyling ? 9 : checkedState ? 18 : 0 }, { duration: 0.2, ease: 'easeInOut' });\n animate('svg', { opacity: checkedState ? 1 : 0 }, { duration: 0.2, ease: 'easeInOut' });\n }, [checkedState, showHoveredStyling, isActive]);\n\n const getBackgroundColor = (): string => {\n if (checkedState && isActive) {\n return 'var(--core-color-blueberry-800)';\n } else if (checkedState) {\n return showHoveredStyling ? 'var(--color-action-graphics-onlight-hover)' : 'var(--color-action-graphics-onlight)';\n } else if (isOnWhite && isActive) {\n return 'var(--core-color-neutral-400)';\n } else if (isOnWhite) {\n return showHoveredStyling ? 'var(--core-color-neutral-200)' : 'var(--core-color-neutral-50)';\n } else if (isActive) {\n return 'var(--core-color-neutral-200)';\n } else {\n return showHoveredStyling ? 'var(--core-color-neutral-50)' : 'var(--core-color-white)';\n }\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n setCheckedState(event.target.checked);\n setShowToggleAnimation(true);\n onChange?.(event);\n };\n\n const toggleContainerClassNames = classNames(styles['toggle-container']);\n\n const toggleRowClassNames = classNames(styles['toggle-container__row'], {\n [styles['toggle-container__row--right']]: togglePosition === TogglePosition.right,\n });\n\n const subLabelClassNames = classNames(styles['toggle-container__sublabel'], {\n [styles['toggle-container__sublabel--toggle-right']]: togglePosition === TogglePosition.right,\n });\n\n const toggleClassNames = classNames(styles['toggle-container__toggle'], {\n [styles['toggle-container__toggle--ignore-hover']]: showToggleAnimation,\n [styles['toggle-container__toggle--on-white']]: onColor === ToggleOnColor.onwhite,\n });\n\n const toggleDotClassNames = classNames(styles['toggle-container__toggle__dot'], {\n [styles['toggle-container__toggle__dot--ignore-hover']]: showToggleAnimation,\n });\n\n const renderToggle = (): React.ReactElement => (\n <label ref={refObject} className={styles['toggle-container__toggle-group']}>\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checkedState}\n onChange={handleChange}\n className={styles['toggle-container__input']}\n aria-label={label.map(l => l.text).join(' ')}\n aria-describedby={subLabel ? subLabelId : undefined}\n role=\"switch\"\n />\n <span id={toggleId} className={toggleClassNames} aria-hidden=\"true\">\n <span id={toggleDotId} className={toggleDotClassNames} aria-hidden=\"true\">\n <svg\n width=\"17\"\n height=\"13\"\n viewBox=\"0 0 17 13\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={styles['toggle-container__toggle__dot__icon']}\n >\n <path d=\"M15 2L6.80839 10.548L2 5.53145\" fill=\"none\" strokeWidth=\"3\" />\n </svg>\n </span>\n </span>\n </label>\n );\n\n const renderLabelText = (): React.ReactElement => {\n return (\n <span\n id={labelId}\n className={classNames(styles['toggle-container__label'], {\n [styles['toggle-container__label--toggle-right']]: togglePosition === TogglePosition.right,\n })}\n >\n {label.map(labelText => {\n const labelClassNames = classNames({\n [styles['toggle-container__label__text--subdued']]: labelText.type === 'subdued',\n });\n\n return (\n <span key={labelId + labelText.text} className={labelClassNames}>\n {labelText.text}\n </span>\n );\n })}\n </span>\n );\n };\n\n return (\n <div className={toggleContainerClassNames} data-testid={testId} data-analyticsid={AnalyticsId.Toggle}>\n <div className={toggleRowClassNames}>\n {togglePosition === TogglePosition.left && (\n <>\n {renderToggle()}\n {renderLabelText()}\n </>\n )}\n {togglePosition === TogglePosition.right && (\n <>\n {renderLabelText()}\n {renderToggle()}\n </>\n )}\n </div>\n {subLabel && (\n <div id={subLabelId} className={subLabelClassNames}>\n {subLabel}\n </div>\n )}\n </div>\n );\n};\n\nexport default Toggle;\n"],"names":["TogglePosition","ToggleOnColor"],"mappings":"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"}
|
package/package.json
CHANGED
package/scss/helsenorge.scss
CHANGED