@helsenorge/designsystem-react 15.4.0 → 15.5.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/lib/AnchorLink.js +4 -4
- package/lib/AnchorLink.js.map +1 -1
- package/lib/AsChildSlot.js.map +1 -1
- package/lib/Avatar.js +2 -2
- package/lib/Avatar.js.map +1 -1
- package/lib/Badge.js +2 -2
- package/lib/Badge.js.map +1 -1
- package/lib/Button.js +6 -6
- package/lib/Button.js.map +1 -1
- package/lib/CHANGELOG.md +25 -0
- package/lib/Checkbox.js +12 -10
- package/lib/Checkbox.js.map +1 -1
- package/lib/Checkbox2.js +2 -2
- package/lib/Checkbox2.js.map +1 -1
- package/lib/CheckboxMarker.js +2 -2
- package/lib/CheckboxMarker.js.map +1 -1
- package/lib/Chip.js +4 -4
- package/lib/Chip.js.map +1 -1
- package/lib/Close.js +3 -3
- package/lib/Close.js.map +1 -1
- package/lib/DictionaryTrigger.js +2 -2
- package/lib/DictionaryTrigger.js.map +1 -1
- package/lib/Drawer.js +13 -13
- package/lib/Drawer.js.map +1 -1
- package/lib/DrawerNavigation.js +1 -1
- package/lib/DrawerNavigation.js.map +1 -1
- package/lib/Duolist.js +5 -5
- package/lib/Duolist.js.map +1 -1
- package/lib/ElementHeader.js +9 -9
- package/lib/ElementHeader.js.map +1 -1
- package/lib/ElementHeaderText.js +4 -4
- package/lib/ElementHeaderText.js.map +1 -1
- package/lib/ErrorWrapper.js +3 -2
- package/lib/ErrorWrapper.js.map +1 -1
- package/lib/Expander.js +9 -8
- package/lib/Expander.js.map +1 -1
- package/lib/FilterButton.js +2 -2
- package/lib/FilterButton.js.map +1 -1
- package/lib/FilterButtonAndChipsWrapper.js +2 -2
- package/lib/FilterButtonAndChipsWrapper.js.map +1 -1
- package/lib/FilterDrawer.js.map +1 -1
- package/lib/FilterLinkList.js +5 -4
- package/lib/FilterLinkList.js.map +1 -1
- package/lib/FilterOverviewSearch.js +2 -2
- package/lib/FilterOverviewSearch.js.map +1 -1
- package/lib/FilterResultCountAndSortWrapper.js.map +1 -1
- package/lib/FilterSearch.js +31 -18
- package/lib/FilterSearch.js.map +1 -1
- package/lib/FormFieldTag.js +2 -2
- package/lib/FormFieldTag.js.map +1 -1
- package/lib/FormGroup.js +5 -5
- package/lib/FormGroup.js.map +1 -1
- package/lib/FormLayout.js +3 -3
- package/lib/FormLayout.js.map +1 -1
- package/lib/HelpDetails.js +5 -4
- package/lib/HelpDetails.js.map +1 -1
- package/lib/HelpTriggerIcon.js +2 -2
- package/lib/HelpTriggerIcon.js.map +1 -1
- package/lib/HelpTriggerStandalone.js +2 -2
- package/lib/HelpTriggerStandalone.js.map +1 -1
- package/lib/HighlightPanel.js +4 -4
- package/lib/HighlightPanel.js.map +1 -1
- package/lib/Highlighter.js +1 -1
- package/lib/Highlighter.js.map +1 -1
- package/lib/HorizontalScroll.js +4 -4
- package/lib/HorizontalScroll.js.map +1 -1
- package/lib/Icon.js +2 -2
- package/lib/Icon.js.map +1 -1
- package/lib/Illustration.js.map +1 -1
- package/lib/InfoTeaser.js +3 -3
- package/lib/InfoTeaser.js.map +1 -1
- package/lib/Input.js +12 -6
- package/lib/Input.js.map +1 -1
- package/lib/LazyIcon.js +1 -0
- package/lib/LazyIcon.js.map +1 -1
- package/lib/LazyIllustration.js.map +1 -1
- package/lib/LinkList.js +36 -33
- package/lib/LinkList.js.map +1 -1
- package/lib/List.js +5 -3
- package/lib/List.js.map +1 -1
- package/lib/ListEditMode.js +8 -7
- package/lib/ListEditMode.js.map +1 -1
- package/lib/LoaderSpinner.js.map +1 -1
- package/lib/MaxCharacters.js +2 -2
- package/lib/MaxCharacters.js.map +1 -1
- package/lib/PanelTitle.js +2 -2
- package/lib/PanelTitle.js.map +1 -1
- package/lib/PopOver.js +7 -4
- package/lib/PopOver.js.map +1 -1
- package/lib/Radio.js +2 -2
- package/lib/Radio.js.map +1 -1
- package/lib/RadioButton.js +5 -5
- package/lib/RadioButton.js.map +1 -1
- package/lib/RadioMarker.js +12 -11
- package/lib/RadioMarker.js.map +1 -1
- package/lib/Select.js +4 -4
- package/lib/Select.js.map +1 -1
- package/lib/SingleSelectItem.js +3 -3
- package/lib/SingleSelectItem.js.map +1 -1
- package/lib/Slider.js +10 -8
- package/lib/Slider.js.map +1 -1
- package/lib/Spacer.js +17 -16
- package/lib/Spacer.js.map +1 -1
- package/lib/StatusDot.js +4 -4
- package/lib/StatusDot.js.map +1 -1
- package/lib/StatusDotList.js +2 -2
- package/lib/StatusDotList.js.map +1 -1
- package/lib/StepButtons.js +5 -5
- package/lib/StepButtons.js.map +1 -1
- package/lib/TabList.js +8 -8
- package/lib/TabList.js.map +1 -1
- package/lib/TabPanel.js +3 -2
- package/lib/TabPanel.js.map +1 -1
- package/lib/TableBody.js +4 -3
- package/lib/TableBody.js.map +1 -1
- package/lib/TableCell.js +4 -3
- package/lib/TableCell.js.map +1 -1
- package/lib/TableExpandedRow.js +8 -5
- package/lib/TableExpandedRow.js.map +1 -1
- package/lib/TableExpanderCell.js +4 -3
- package/lib/TableExpanderCell.js.map +1 -1
- package/lib/TableHead.js +9 -8
- package/lib/TableHead.js.map +1 -1
- package/lib/TableHeadCell.js +6 -6
- package/lib/TableHeadCell.js.map +1 -1
- package/lib/TableRow.js +9 -7
- package/lib/TableRow.js.map +1 -1
- package/lib/Textarea.js +6 -6
- package/lib/Textarea.js.map +1 -1
- package/lib/Title.js +21 -18
- package/lib/Title.js.map +1 -1
- package/lib/Toast.js +3 -3
- package/lib/Toast.js.map +1 -1
- package/lib/VisualCheckbox.js +3 -3
- package/lib/VisualCheckbox.js.map +1 -1
- package/lib/VisualRadio.js +3 -3
- package/lib/VisualRadio.js.map +1 -1
- package/lib/__mocks__/matchMedia.js.map +1 -1
- package/lib/__mocks__/usePseudoClasses.js.map +1 -1
- package/lib/__mocks__/useSize.js.map +1 -1
- package/lib/__mocks__/uuid.js +1 -1
- package/lib/__mocks__/uuid.js.map +1 -1
- package/lib/components/ArticleTeaser/index.js +4 -4
- package/lib/components/ArticleTeaser/index.js.map +1 -1
- package/lib/components/Dropdown/index.js +5 -5
- package/lib/components/Dropdown/index.js.map +1 -1
- package/lib/components/DropdownOld/index.js +3 -3
- package/lib/components/DropdownOld/index.js.map +1 -1
- package/lib/components/EmptyState/index.js +3 -5
- package/lib/components/EmptyState/index.js.map +1 -1
- package/lib/components/ExpanderHierarchy/index.js +8 -7
- package/lib/components/ExpanderHierarchy/index.js.map +1 -1
- package/lib/components/ExpanderList/index.js +12 -11
- package/lib/components/ExpanderList/index.js.map +1 -1
- package/lib/components/EyebrowHeader/index.js.map +1 -1
- package/lib/components/FavoriteButton/index.js +11 -9
- package/lib/components/FavoriteButton/index.js.map +1 -1
- package/lib/components/Filter/FilterSearch/FilterSearch.d.ts +2 -0
- package/lib/components/Filter/FilterSearch/styles.module.scss +32 -7
- package/lib/components/Filter/FilterSearch/styles.module.scss.d.ts +2 -0
- package/lib/components/Filter/index.js.map +1 -1
- package/lib/components/HelpBubble/index.js +3 -3
- package/lib/components/HelpBubble/index.js.map +1 -1
- package/lib/components/HelpExpanderInline/index.js.map +1 -1
- package/lib/components/HelpExpanderStandalone/index.js.map +1 -1
- package/lib/components/HelpPanel/index.js +2 -2
- package/lib/components/HelpPanel/index.js.map +1 -1
- package/lib/components/HelpTooltip/index.js +6 -3
- package/lib/components/HelpTooltip/index.js.map +1 -1
- package/lib/components/HelpTriggerInline/index.js +2 -2
- package/lib/components/HelpTriggerInline/index.js.map +1 -1
- package/lib/components/Icons/AlarmClock.js.map +1 -1
- package/lib/components/Icons/ArrowUpRight.js +4 -4
- package/lib/components/Icons/ArrowUpRight.js.map +1 -1
- package/lib/components/Icons/ArrowUpRightLight.d.ts +3 -0
- package/lib/components/Icons/ArrowUpRightLight.js +17 -0
- package/lib/components/Icons/ArrowUpRightLight.js.map +1 -0
- package/lib/components/Icons/Bus.js.map +1 -1
- package/lib/components/Icons/IconNames.d.ts +1 -1
- package/lib/components/Icons/IconNames.js +1 -0
- package/lib/components/Icons/IconNames.js.map +1 -1
- package/lib/components/Illustrations/BabyMobile.js +5 -4
- package/lib/components/Illustrations/BabyMobile.js.map +1 -1
- package/lib/components/Illustrations/BabyMobileMedium.js.map +1 -1
- package/lib/components/Illustrations/Child.js +5 -4
- package/lib/components/Illustrations/Child.js.map +1 -1
- package/lib/components/Illustrations/ChildMedium.js.map +1 -1
- package/lib/components/Illustrations/Doctor.js +10 -8
- package/lib/components/Illustrations/Doctor.js.map +1 -1
- package/lib/components/Illustrations/DoctorMedium.js.map +1 -1
- package/lib/components/Illustrations/DoctorSmall.js.map +1 -1
- package/lib/components/Illustrations/EyeContact.js +5 -4
- package/lib/components/Illustrations/EyeContact.js.map +1 -1
- package/lib/components/Illustrations/EyeContactMedium.js.map +1 -1
- package/lib/components/Illustrations/FacialRecognitionFingerprint.js +5 -4
- package/lib/components/Illustrations/FacialRecognitionFingerprint.js.map +1 -1
- package/lib/components/Illustrations/FacialRecognitionFingerprintMedium.js.map +1 -1
- package/lib/components/Illustrations/GiveBabyFood.js +5 -4
- package/lib/components/Illustrations/GiveBabyFood.js.map +1 -1
- package/lib/components/Illustrations/GiveBabyFoodMedium.js.map +1 -1
- package/lib/components/Illustrations/HealthcarePersonnel.js +10 -8
- package/lib/components/Illustrations/HealthcarePersonnel.js.map +1 -1
- package/lib/components/Illustrations/HealthcarePersonnelMedium.js.map +1 -1
- package/lib/components/Illustrations/HealthcarePersonnelSmall.js.map +1 -1
- package/lib/components/Illustrations/ReadLetters.js +5 -4
- package/lib/components/Illustrations/ReadLetters.js.map +1 -1
- package/lib/components/Illustrations/ReadLettersMedium.js.map +1 -1
- package/lib/components/Illustrations/SkinToSkin.js +5 -4
- package/lib/components/Illustrations/SkinToSkin.js.map +1 -1
- package/lib/components/Illustrations/SkinToSkinMedium.js.map +1 -1
- package/lib/components/Illustrations/Stork.js +5 -4
- package/lib/components/Illustrations/Stork.js.map +1 -1
- package/lib/components/Illustrations/StorkMedium.js.map +1 -1
- package/lib/components/Illustrations/Stroller.js +5 -4
- package/lib/components/Illustrations/Stroller.js.map +1 -1
- package/lib/components/Illustrations/StrollerMedium.js.map +1 -1
- package/lib/components/Illustrations/Support2.js +5 -4
- package/lib/components/Illustrations/Support2.js.map +1 -1
- package/lib/components/Illustrations/Support2Medium.js.map +1 -1
- package/lib/components/Illustrations/Thinking.js +5 -4
- package/lib/components/Illustrations/Thinking.js.map +1 -1
- package/lib/components/Illustrations/ThinkingMedium.js.map +1 -1
- package/lib/components/Loader/index.js +19 -18
- package/lib/components/Loader/index.js.map +1 -1
- package/lib/components/Logo/index.js.map +1 -1
- package/lib/components/Modal/index.js +10 -10
- package/lib/components/Modal/index.js.map +1 -1
- package/lib/components/NotificationPanel/index.js +12 -9
- package/lib/components/NotificationPanel/index.js.map +1 -1
- package/lib/components/Panel/index.js +25 -24
- package/lib/components/Panel/index.js.map +1 -1
- package/lib/components/PanelList/index.js +3 -3
- package/lib/components/PanelList/index.js.map +1 -1
- package/lib/components/PopMenu/index.js +3 -3
- package/lib/components/PopMenu/index.js.map +1 -1
- package/lib/components/Portal/index.js.map +1 -1
- package/lib/components/Progressbar/index.js +7 -6
- package/lib/components/Progressbar/index.js.map +1 -1
- package/lib/components/PromoPanel/PromoPanel.d.ts +2 -2
- package/lib/components/PromoPanel/index.js +13 -9
- package/lib/components/PromoPanel/index.js.map +1 -1
- package/lib/components/RadioButton/RadioMarker/styles.module.scss +3 -9
- package/lib/components/ServiceMessage/index.js +6 -5
- package/lib/components/ServiceMessage/index.js.map +1 -1
- package/lib/components/SharingStatus/index.js +4 -4
- package/lib/components/SharingStatus/index.js.map +1 -1
- package/lib/components/Step/index.js +2 -2
- package/lib/components/Step/index.js.map +1 -1
- package/lib/components/Stepper/index.js +5 -3
- package/lib/components/Stepper/index.js.map +1 -1
- package/lib/components/StickyNote/index.js +8 -8
- package/lib/components/StickyNote/index.js.map +1 -1
- package/lib/components/Table/index.js +5 -8
- package/lib/components/Table/index.js.map +1 -1
- package/lib/components/Tabs/index.js +4 -4
- package/lib/components/Tabs/index.js.map +1 -1
- package/lib/components/Tag/index.js +3 -2
- package/lib/components/Tag/index.js.map +1 -1
- package/lib/components/TagList/index.js.map +1 -1
- package/lib/components/Tile/index.js +8 -7
- package/lib/components/Tile/index.js.map +1 -1
- package/lib/components/ToastList/index.js +3 -2
- package/lib/components/ToastList/index.js.map +1 -1
- package/lib/components/Toggle/index.js +13 -10
- package/lib/components/Toggle/index.js.map +1 -1
- package/lib/components/Validation/index.js +2 -2
- package/lib/components/Validation/index.js.map +1 -1
- package/lib/components/VisualCheckboxCloud/index.js +2 -2
- package/lib/components/VisualCheckboxCloud/index.js.map +1 -1
- package/lib/components/VisualCheckboxGroup/index.js +3 -3
- package/lib/components/VisualCheckboxGroup/index.js.map +1 -1
- package/lib/components/VisualContentgroupWithImage/index.js +2 -2
- package/lib/components/VisualContentgroupWithImage/index.js.map +1 -1
- package/lib/components/VisualRadioCloud/index.js +2 -2
- package/lib/components/VisualRadioCloud/index.js.map +1 -1
- package/lib/components/VisualRadioGroup/index.js +3 -3
- package/lib/components/VisualRadioGroup/index.js.map +1 -1
- package/lib/floating-ui.react.js +100 -117
- package/lib/floating-ui.react.js.map +1 -1
- package/lib/getFilterChips.js.map +1 -1
- package/lib/hooks/useBreakpoint.js.map +1 -1
- package/lib/hooks/useFocusableElements.js.map +1 -1
- package/lib/hooks/useIsVisible.js.map +1 -1
- package/lib/hooks/useOutsideEvent.js.map +1 -1
- package/lib/hooks/useResizeObserver.js.map +1 -1
- package/lib/hooks/useRovingFocus.js.map +1 -1
- package/lib/hooks/useSize.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/theme/spacers.js +2 -2
- package/lib/theme/spacers.js.map +1 -1
- package/lib/utils/focus.js.map +1 -1
- package/lib/utils/mobile.js.map +1 -1
- package/lib/utils/uuid.js +29 -2
- package/lib/utils/uuid.js.map +1 -0
- package/lib/utils2.js +7 -7
- package/lib/utils2.js.map +1 -1
- package/lib/utils5.js +2 -2
- package/lib/utils5.js.map +1 -1
- package/package.json +1 -1
- package/lib/uuid.js +0 -29
- package/lib/uuid.js.map +0 -1
package/lib/Input.js
CHANGED
|
@@ -10,7 +10,7 @@ import { getAriaDescribedBy } from "./utils/accessibility.js";
|
|
|
10
10
|
import { t as ErrorWrapper_default } from "./ErrorWrapper.js";
|
|
11
11
|
import { n as renderLabel } from "./utils2.js";
|
|
12
12
|
import { t as MaxCharacters } from "./MaxCharacters.js";
|
|
13
|
-
import
|
|
13
|
+
import classNames from "classnames";
|
|
14
14
|
import { useRef, useState } from "react";
|
|
15
15
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
16
|
import styles from "./components/Input/styles.module.scss";
|
|
@@ -48,7 +48,7 @@ var getInputMaxWidth = (characters, hasIcon, iconSize) => {
|
|
|
48
48
|
return `calc(${characters * 12}px + ${paddingWidth} + ${iconWidth} + 4px)`;
|
|
49
49
|
};
|
|
50
50
|
var Input = (props) => {
|
|
51
|
-
const { className, defaultValue, placeholder, type = InputTypes.text, name, transparent = false, icon, iconRight, inputWrapperRef, onColor = FormOnColor.onwhite, size, baseIncrementValue, label, error, errorText, errorTextId: errorTextIdProp, inputId: inputIdProp, errorWrapperClassName, testId, disabled, readOnly, autoComplete = "off", afterInputChildren, rightOfInput, width, required, onChange, onKeyDown, autoFocus, maxCharacters, inputContainerRef, resources, ref, ...rest } = props;
|
|
51
|
+
const { className, defaultValue, placeholder, type = InputTypes.text, name, transparent = false, icon, iconRight, inputWrapperRef, onColor = FormOnColor.onwhite, size, baseIncrementValue, label, error, errorText, errorTextId: errorTextIdProp, inputId: inputIdProp, errorWrapperClassName, testId, disabled, readOnly, autoComplete = "off", afterInputChildren, rightOfInput, width, required, onChange, onKeyDown, autoFocus, maxCharacters, inputContainerRef, resources, ref, value, ...rest } = props;
|
|
52
52
|
const { language } = useLanguage(LanguageLocales.NORWEGIAN);
|
|
53
53
|
const mergedResources = {
|
|
54
54
|
...getResources(language),
|
|
@@ -57,9 +57,10 @@ var Input = (props) => {
|
|
|
57
57
|
const breakpoint = useBreakpoint();
|
|
58
58
|
const inputContainerRefLocal = useRef(null);
|
|
59
59
|
const inputId = useIdWithFallback(inputIdProp);
|
|
60
|
-
const [input, setInput] = useState(defaultValue
|
|
60
|
+
const [input, setInput] = useState(value ?? defaultValue ?? "");
|
|
61
61
|
const [prevDefaultValue, setPrevDefaultValue] = useState(defaultValue);
|
|
62
62
|
const [prevValue, setPrevValue] = useState(void 0);
|
|
63
|
+
const [prevControlledValue, setPrevControlledValue] = useState(value);
|
|
63
64
|
const numKeyPressed = useRef(false);
|
|
64
65
|
const errorTextId = useIdWithFallback(errorTextIdProp);
|
|
65
66
|
const numRegex = /^[0-9]$/;
|
|
@@ -67,14 +68,18 @@ var Input = (props) => {
|
|
|
67
68
|
setPrevDefaultValue(defaultValue);
|
|
68
69
|
setInput(defaultValue || "");
|
|
69
70
|
}
|
|
71
|
+
if (value !== prevControlledValue) {
|
|
72
|
+
setPrevControlledValue(value);
|
|
73
|
+
if (value !== void 0) setInput(value);
|
|
74
|
+
}
|
|
70
75
|
const onDark = onColor === FormOnColor.ondark;
|
|
71
76
|
const onBlueberry = onColor === FormOnColor.onblueberry;
|
|
72
77
|
const maxCharactersExceeded = !!maxCharacters && input.toString().length > maxCharacters;
|
|
73
78
|
const onError = onColor === FormOnColor.oninvalid || !!errorText || !!error || maxCharactersExceeded;
|
|
74
79
|
const isLarge = size === FormSize.large;
|
|
75
80
|
const isTransparent = transparent && onColor !== FormOnColor.ondark && !onError;
|
|
76
|
-
const inputWrapperClass =
|
|
77
|
-
const inputContainer =
|
|
81
|
+
const inputWrapperClass = classNames(styles["input-wrapper"], className);
|
|
82
|
+
const inputContainer = classNames(styles["input-container"], {
|
|
78
83
|
[styles["input-container--transparent"]]: isTransparent,
|
|
79
84
|
[styles["input-container--on-blueberry"]]: onBlueberry,
|
|
80
85
|
[styles["input-container--on-dark"]]: onDark,
|
|
@@ -83,7 +88,7 @@ var Input = (props) => {
|
|
|
83
88
|
[styles["input-container--with-icon"]]: icon,
|
|
84
89
|
[styles["input-container--with-icon--right"]]: icon && iconRight
|
|
85
90
|
});
|
|
86
|
-
const inputClass =
|
|
91
|
+
const inputClass = classNames(styles["input-container__input"], {
|
|
87
92
|
[styles["input-container__input--large"]]: isLarge,
|
|
88
93
|
[styles["input-container__input--disabled"]]: disabled
|
|
89
94
|
});
|
|
@@ -163,6 +168,7 @@ var Input = (props) => {
|
|
|
163
168
|
name,
|
|
164
169
|
type,
|
|
165
170
|
defaultValue,
|
|
171
|
+
value,
|
|
166
172
|
id: inputId,
|
|
167
173
|
className: inputClass,
|
|
168
174
|
ref,
|
package/lib/Input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","names":[],"sources":["../src/components/Input/constants.ts","../src/resources/HN.Designsystem.Input.en-GB.json","../src/resources/HN.Designsystem.Input.nb-NO.json","../src/resources/HN.Designsystem.Input.nn-NO.json","../src/components/Input/resourceHelper.ts","../src/components/Input/Input.tsx"],"sourcesContent":["export enum InputTypes {\n text = 'text',\n number = 'number',\n email = 'email',\n password = 'password',\n search = 'search',\n tel = 'tel',\n url = 'url',\n date = 'date',\n time = 'time',\n}\n","{\n \"characters\": \"characters\"\n}\n","{\n \"characters\": \"tegn\"\n}\n","{\n \"characters\": \"teikn\"\n}\n","import type { HNDesignsystemInput } from '../../resources/Resources';\n\nimport { LanguageLocales } from '../../constants';\nimport enGB from '../../resources/HN.Designsystem.Input.en-GB.json';\nimport nbNO from '../../resources/HN.Designsystem.Input.nb-NO.json';\nimport nnNO from '../../resources/HN.Designsystem.Input.nn-NO.json';\n\nexport const getResources = (language: LanguageLocales): HNDesignsystemInput => {\n switch (language) {\n case LanguageLocales.ENGLISH:\n return enGB;\n case LanguageLocales.NORWEGIAN_NYNORSK:\n return nnNO;\n case LanguageLocales.NORWEGIAN:\n default:\n return nbNO;\n }\n};\n","import { useRef, useState } from 'react';\n\nimport cn from 'classnames';\n\nimport type { HNDesignsystemInput } from '../../resources/Resources';\nimport type { ErrorWrapperClassNameProps } from '../ErrorWrapper';\nimport type { SvgIcon } from '../Icon';\nimport type { IconName } from '../Icons/IconNames';\n\nimport { InputTypes } from './constants';\nimport { getResources } from './resourceHelper';\nimport { FormOnColor, FormSize, AnalyticsId, AVERAGE_CHARACTER_WIDTH_PX, LanguageLocales } from '../../constants';\nimport { Breakpoint, useBreakpoint } from '../../hooks/useBreakpoint';\nimport { useIdWithFallback } from '../../hooks/useIdWithFallback';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport { getColor } from '../../theme/currys';\nimport { getAriaDescribedBy } from '../../utils/accessibility';\nimport { mergeRefs } from '../../utils/refs';\nimport ErrorWrapper from '../ErrorWrapper';\nimport Icon, { IconSize } from '../Icon';\nimport { renderLabel } from '../Label/utils';\nimport LazyIcon from '../LazyIcon';\nimport MaxCharacters from '../MaxCharacters/MaxCharacters';\n\nimport styles from './styles.module.scss';\n\nexport interface InputProps\n extends\n ErrorWrapperClassNameProps,\n Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'disabled'\n | 'readOnly'\n | 'autoComplete'\n | 'name'\n | 'placeholder'\n | 'defaultValue'\n | 'required'\n | 'value'\n | 'min'\n | 'max'\n | 'aria-describedby'\n | 'aria-labelledby'\n | 'onBlur'\n | 'onClick'\n | 'onChange'\n | 'onFocus'\n | 'onKeyDown'\n | 'autoFocus'\n | 'inputMode'\n > {\n /** The number at which the input field starts when you increment or decrement it */\n baseIncrementValue?: number;\n /** Adds custom classes to the element. */\n className?: string;\n /** HMTL Input type */\n type?: keyof typeof InputTypes;\n /** input id */\n inputId?: string;\n /** Width of input field in characters (approximate) */\n width?: number;\n /** If true, the component will be transparent. */\n transparent?: boolean;\n /** Icon to be displayed next to the input field */\n icon?: SvgIcon | IconName;\n /** Places the icon to the right */\n iconRight?: boolean;\n /** Ref that is placed on the inputContainerRef */\n inputContainerRef?: React.RefObject<HTMLDivElement | null>;\n /** Ref that is placed on the inputWrapper */\n inputWrapperRef?: React.RefObject<HTMLDivElement | null>;\n /** Changes the color profile of the input */\n onColor?: keyof typeof FormOnColor;\n /** Changes the visuals of the input */\n size?: keyof typeof FormSize;\n /** Label of the input */\n label?: React.ReactNode;\n /** Activates Error style for the input */\n error?: boolean;\n /** Error text to show above the component */\n errorText?: string;\n /** Error text id */\n errorTextId?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Component shown after input */\n afterInputChildren?: React.ReactNode;\n /** Component shown to the right of input */\n rightOfInput?: React.ReactNode;\n /** max character limit in input */\n maxCharacters?: number;\n /** Resources for component */\n resources?: Partial<HNDesignsystemInput>;\n /** Ref passed to the input element */\n ref?: React.Ref<HTMLInputElement | null>;\n}\n\nconst getInputMaxWidth = (characters: number, hasIcon: boolean, iconSize: number): string => {\n const paddingWidth = hasIcon ? '1.5rem' : '2rem';\n const iconWidth = hasIcon ? `${iconSize}px` : '0px';\n const borderWidth = '4px';\n\n return `calc(${characters * AVERAGE_CHARACTER_WIDTH_PX}px + ${paddingWidth} + ${iconWidth} + ${borderWidth})`;\n};\n\nconst Input: React.FC<InputProps> = props => {\n const {\n className,\n defaultValue,\n placeholder,\n type = InputTypes.text,\n name,\n transparent = false,\n icon,\n iconRight,\n inputWrapperRef,\n onColor = FormOnColor.onwhite,\n size,\n baseIncrementValue,\n label,\n error,\n errorText,\n errorTextId: errorTextIdProp,\n inputId: inputIdProp,\n errorWrapperClassName,\n testId,\n disabled,\n readOnly,\n autoComplete = 'off',\n afterInputChildren,\n rightOfInput,\n width,\n required,\n onChange,\n onKeyDown,\n autoFocus,\n maxCharacters,\n inputContainerRef,\n resources,\n ref,\n ...rest\n } = props;\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources: HNDesignsystemInput = {\n ...defaultResources,\n ...resources,\n };\n\n const breakpoint = useBreakpoint();\n const inputContainerRefLocal = useRef<HTMLDivElement>(null);\n const inputId = useIdWithFallback(inputIdProp);\n const [input, setInput] = useState(defaultValue || '');\n const [prevDefaultValue, setPrevDefaultValue] = useState(defaultValue);\n const [prevValue, setPrevValue] = useState<string | number | undefined>(undefined);\n const numKeyPressed = useRef<boolean>(false);\n const errorTextId = useIdWithFallback(errorTextIdProp);\n const numRegex = /^[0-9]$/;\n\n if (defaultValue !== prevDefaultValue) {\n setPrevDefaultValue(defaultValue);\n setInput(defaultValue || '');\n }\n\n const onDark = onColor === FormOnColor.ondark;\n const onBlueberry = onColor === FormOnColor.onblueberry;\n const maxCharactersExceeded = !!maxCharacters && input.toString().length > maxCharacters;\n const onError = onColor === FormOnColor.oninvalid || !!errorText || !!error || maxCharactersExceeded;\n const isLarge = size === FormSize.large;\n const isTransparent = transparent && onColor !== FormOnColor.ondark && !onError;\n\n const inputWrapperClass = cn(styles['input-wrapper'], className);\n\n const inputContainer = cn(styles['input-container'], {\n [styles['input-container--transparent']]: isTransparent,\n [styles['input-container--on-blueberry']]: onBlueberry,\n [styles['input-container--on-dark']]: onDark,\n [styles['input-container--invalid']]: onError,\n [styles['input-container--disabled']]: disabled,\n [styles['input-container--with-icon']]: icon,\n [styles['input-container--with-icon--right']]: icon && iconRight,\n });\n\n const inputClass = cn(styles['input-container__input'], {\n [styles['input-container__input--large']]: isLarge,\n [styles['input-container__input--disabled']]: disabled,\n });\n\n const iconColor = disabled ? getColor('neutral', 700) : getColor('black');\n const iconSize = breakpoint === Breakpoint.xs || !isLarge ? IconSize.XSmall : IconSize.Small;\n\n const renderIcon = (): React.ReactNode => {\n if (!icon) {\n return;\n }\n\n if (typeof icon === 'string') {\n return <LazyIcon className={styles['input-container__input__icon']} color={iconColor} size={iconSize} iconName={icon} />;\n }\n\n return <Icon className={styles['input-container__input__icon']} color={iconColor} size={iconSize} svgIcon={icon} />;\n };\n\n // eslint-disable-next-line\n const handleClick = (e: React.MouseEvent<any>): void => {\n if (inputContainerRefLocal && inputContainerRefLocal.current && icon) {\n const selectedChild = iconRight ? 0 : 1;\n const input = inputContainerRefLocal.current.children[selectedChild] as HTMLInputElement;\n input.focus();\n\n if (props.onClick) props.onClick(e);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n const newValue = getIncrementValue(e);\n\n if (onChange) {\n onChange(e);\n }\n\n setInput(newValue);\n setPrevValue(newValue);\n };\n\n // Hvis bruker endrer number value med 1 og det skal startes på en annen verdi enn 0\n const getIncrementValue = (e: React.ChangeEvent<HTMLInputElement>): string => {\n if (typeof baseIncrementValue === 'undefined' || type !== 'number') return e.target.value;\n\n const valueAsNumber = Number(e.target.value);\n\n if (!prevValue && !numKeyPressed.current && (valueAsNumber === 1 || valueAsNumber === -1)) {\n e.target.value = baseIncrementValue + '';\n }\n\n return e.target.value;\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n if (numRegex.test(e.key)) {\n numKeyPressed.current = true;\n }\n if (onKeyDown) onKeyDown(e);\n };\n\n const handleKeyUp = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n if (numRegex.test(e.key)) {\n numKeyPressed.current = false;\n }\n };\n\n const maxWidth = width ? getInputMaxWidth(width, !!icon, iconSize) : undefined;\n\n return (\n <ErrorWrapper className={errorWrapperClassName} errorText={errorText} errorTextId={errorTextId}>\n <div data-testid={testId} data-analyticsid={AnalyticsId.Input} className={inputWrapperClass} ref={inputWrapperRef}>\n {renderLabel({ label: label, inputId: inputId, onColor: onColor as FormOnColor })}\n {/* input-elementet tillater keyboard-interaksjon */}\n <div className={styles['content-wrapper']}>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n onClick={handleClick}\n ref={mergeRefs([inputContainerRefLocal, inputContainerRef])}\n className={inputContainer}\n style={{ maxWidth }}\n >\n {!iconRight && renderIcon()}\n <input\n {...rest}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n name={name}\n type={type}\n defaultValue={defaultValue}\n id={inputId}\n className={inputClass}\n ref={ref}\n aria-describedby={getAriaDescribedBy(props, errorTextId)}\n aria-invalid={!!onError}\n disabled={disabled}\n placeholder={placeholder}\n readOnly={readOnly}\n autoComplete={autoComplete || 'off'}\n required={required}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n />\n {iconRight && renderIcon()}\n </div>\n <div className={styles['content-wrapper__right-of-input']}>{rightOfInput}</div>\n </div>\n {maxCharacters && (\n <MaxCharacters\n maxCharacters={maxCharacters}\n length={input.toString().length}\n maxText={mergedResources.characters}\n onColor={onColor}\n maxWidth={maxWidth}\n />\n )}\n {afterInputChildren}\n </div>\n </ErrorWrapper>\n );\n};\n\nInput.displayName = 'Input';\n\nexport default Input;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Input.js","names":[],"sources":["../src/components/Input/constants.ts","../src/resources/HN.Designsystem.Input.en-GB.json","../src/resources/HN.Designsystem.Input.nb-NO.json","../src/resources/HN.Designsystem.Input.nn-NO.json","../src/components/Input/resourceHelper.ts","../src/components/Input/Input.tsx"],"sourcesContent":["export enum InputTypes {\n text = 'text',\n number = 'number',\n email = 'email',\n password = 'password',\n search = 'search',\n tel = 'tel',\n url = 'url',\n date = 'date',\n time = 'time',\n}\n","{\n \"characters\": \"characters\"\n}\n","{\n \"characters\": \"tegn\"\n}\n","{\n \"characters\": \"teikn\"\n}\n","import type { HNDesignsystemInput } from '../../resources/Resources';\n\nimport { LanguageLocales } from '../../constants';\nimport enGB from '../../resources/HN.Designsystem.Input.en-GB.json';\nimport nbNO from '../../resources/HN.Designsystem.Input.nb-NO.json';\nimport nnNO from '../../resources/HN.Designsystem.Input.nn-NO.json';\n\nexport const getResources = (language: LanguageLocales): HNDesignsystemInput => {\n switch (language) {\n case LanguageLocales.ENGLISH:\n return enGB;\n case LanguageLocales.NORWEGIAN_NYNORSK:\n return nnNO;\n case LanguageLocales.NORWEGIAN:\n default:\n return nbNO;\n }\n};\n","import { useRef, useState } from 'react';\n\nimport cn from 'classnames';\n\nimport type { HNDesignsystemInput } from '../../resources/Resources';\nimport type { ErrorWrapperClassNameProps } from '../ErrorWrapper';\nimport type { SvgIcon } from '../Icon';\nimport type { IconName } from '../Icons/IconNames';\n\nimport { InputTypes } from './constants';\nimport { getResources } from './resourceHelper';\nimport { FormOnColor, FormSize, AnalyticsId, AVERAGE_CHARACTER_WIDTH_PX, LanguageLocales } from '../../constants';\nimport { Breakpoint, useBreakpoint } from '../../hooks/useBreakpoint';\nimport { useIdWithFallback } from '../../hooks/useIdWithFallback';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport { getColor } from '../../theme/currys';\nimport { getAriaDescribedBy } from '../../utils/accessibility';\nimport { mergeRefs } from '../../utils/refs';\nimport ErrorWrapper from '../ErrorWrapper';\nimport Icon, { IconSize } from '../Icon';\nimport { renderLabel } from '../Label/utils';\nimport LazyIcon from '../LazyIcon';\nimport MaxCharacters from '../MaxCharacters/MaxCharacters';\n\nimport styles from './styles.module.scss';\n\nexport interface InputProps\n extends\n ErrorWrapperClassNameProps,\n Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'disabled'\n | 'readOnly'\n | 'autoComplete'\n | 'name'\n | 'placeholder'\n | 'defaultValue'\n | 'required'\n | 'value'\n | 'min'\n | 'max'\n | 'aria-describedby'\n | 'aria-labelledby'\n | 'onBlur'\n | 'onClick'\n | 'onChange'\n | 'onFocus'\n | 'onKeyDown'\n | 'autoFocus'\n | 'inputMode'\n > {\n /** The number at which the input field starts when you increment or decrement it */\n baseIncrementValue?: number;\n /** Adds custom classes to the element. */\n className?: string;\n /** HMTL Input type */\n type?: keyof typeof InputTypes;\n /** input id */\n inputId?: string;\n /** Width of input field in characters (approximate) */\n width?: number;\n /** If true, the component will be transparent. */\n transparent?: boolean;\n /** Icon to be displayed next to the input field */\n icon?: SvgIcon | IconName;\n /** Places the icon to the right */\n iconRight?: boolean;\n /** Ref that is placed on the inputContainerRef */\n inputContainerRef?: React.RefObject<HTMLDivElement | null>;\n /** Ref that is placed on the inputWrapper */\n inputWrapperRef?: React.RefObject<HTMLDivElement | null>;\n /** Changes the color profile of the input */\n onColor?: keyof typeof FormOnColor;\n /** Changes the visuals of the input */\n size?: keyof typeof FormSize;\n /** Label of the input */\n label?: React.ReactNode;\n /** Activates Error style for the input */\n error?: boolean;\n /** Error text to show above the component */\n errorText?: string;\n /** Error text id */\n errorTextId?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Component shown after input */\n afterInputChildren?: React.ReactNode;\n /** Component shown to the right of input */\n rightOfInput?: React.ReactNode;\n /** max character limit in input */\n maxCharacters?: number;\n /** Resources for component */\n resources?: Partial<HNDesignsystemInput>;\n /** Ref passed to the input element */\n ref?: React.Ref<HTMLInputElement | null>;\n}\n\nconst getInputMaxWidth = (characters: number, hasIcon: boolean, iconSize: number): string => {\n const paddingWidth = hasIcon ? '1.5rem' : '2rem';\n const iconWidth = hasIcon ? `${iconSize}px` : '0px';\n const borderWidth = '4px';\n\n return `calc(${characters * AVERAGE_CHARACTER_WIDTH_PX}px + ${paddingWidth} + ${iconWidth} + ${borderWidth})`;\n};\n\nconst Input: React.FC<InputProps> = props => {\n const {\n className,\n defaultValue,\n placeholder,\n type = InputTypes.text,\n name,\n transparent = false,\n icon,\n iconRight,\n inputWrapperRef,\n onColor = FormOnColor.onwhite,\n size,\n baseIncrementValue,\n label,\n error,\n errorText,\n errorTextId: errorTextIdProp,\n inputId: inputIdProp,\n errorWrapperClassName,\n testId,\n disabled,\n readOnly,\n autoComplete = 'off',\n afterInputChildren,\n rightOfInput,\n width,\n required,\n onChange,\n onKeyDown,\n autoFocus,\n maxCharacters,\n inputContainerRef,\n resources,\n ref,\n value,\n ...rest\n } = props;\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources: HNDesignsystemInput = {\n ...defaultResources,\n ...resources,\n };\n\n const breakpoint = useBreakpoint();\n const inputContainerRefLocal = useRef<HTMLDivElement>(null);\n const inputId = useIdWithFallback(inputIdProp);\n const [input, setInput] = useState(value ?? defaultValue ?? '');\n const [prevDefaultValue, setPrevDefaultValue] = useState(defaultValue);\n const [prevValue, setPrevValue] = useState<string | number | undefined>(undefined);\n const [prevControlledValue, setPrevControlledValue] = useState<string | number | readonly string[] | undefined>(value);\n const numKeyPressed = useRef<boolean>(false);\n const errorTextId = useIdWithFallback(errorTextIdProp);\n const numRegex = /^[0-9]$/;\n\n if (defaultValue !== prevDefaultValue) {\n setPrevDefaultValue(defaultValue);\n setInput(defaultValue || '');\n }\n\n if (value !== prevControlledValue) {\n setPrevControlledValue(value);\n\n if (value !== undefined) {\n setInput(value);\n }\n }\n\n const onDark = onColor === FormOnColor.ondark;\n const onBlueberry = onColor === FormOnColor.onblueberry;\n const maxCharactersExceeded = !!maxCharacters && input.toString().length > maxCharacters;\n const onError = onColor === FormOnColor.oninvalid || !!errorText || !!error || maxCharactersExceeded;\n const isLarge = size === FormSize.large;\n const isTransparent = transparent && onColor !== FormOnColor.ondark && !onError;\n\n const inputWrapperClass = cn(styles['input-wrapper'], className);\n\n const inputContainer = cn(styles['input-container'], {\n [styles['input-container--transparent']]: isTransparent,\n [styles['input-container--on-blueberry']]: onBlueberry,\n [styles['input-container--on-dark']]: onDark,\n [styles['input-container--invalid']]: onError,\n [styles['input-container--disabled']]: disabled,\n [styles['input-container--with-icon']]: icon,\n [styles['input-container--with-icon--right']]: icon && iconRight,\n });\n\n const inputClass = cn(styles['input-container__input'], {\n [styles['input-container__input--large']]: isLarge,\n [styles['input-container__input--disabled']]: disabled,\n });\n\n const iconColor = disabled ? getColor('neutral', 700) : getColor('black');\n const iconSize = breakpoint === Breakpoint.xs || !isLarge ? IconSize.XSmall : IconSize.Small;\n\n const renderIcon = (): React.ReactNode => {\n if (!icon) {\n return;\n }\n\n if (typeof icon === 'string') {\n return <LazyIcon className={styles['input-container__input__icon']} color={iconColor} size={iconSize} iconName={icon} />;\n }\n\n return <Icon className={styles['input-container__input__icon']} color={iconColor} size={iconSize} svgIcon={icon} />;\n };\n\n // eslint-disable-next-line\n const handleClick = (e: React.MouseEvent<any>): void => {\n if (inputContainerRefLocal && inputContainerRefLocal.current && icon) {\n const selectedChild = iconRight ? 0 : 1;\n const input = inputContainerRefLocal.current.children[selectedChild] as HTMLInputElement;\n input.focus();\n\n if (props.onClick) props.onClick(e);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n const newValue = getIncrementValue(e);\n\n if (onChange) {\n onChange(e);\n }\n\n setInput(newValue);\n setPrevValue(newValue);\n };\n\n // Hvis bruker endrer number value med 1 og det skal startes på en annen verdi enn 0\n const getIncrementValue = (e: React.ChangeEvent<HTMLInputElement>): string => {\n if (typeof baseIncrementValue === 'undefined' || type !== 'number') return e.target.value;\n\n const valueAsNumber = Number(e.target.value);\n\n if (!prevValue && !numKeyPressed.current && (valueAsNumber === 1 || valueAsNumber === -1)) {\n e.target.value = baseIncrementValue + '';\n }\n\n return e.target.value;\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n if (numRegex.test(e.key)) {\n numKeyPressed.current = true;\n }\n if (onKeyDown) onKeyDown(e);\n };\n\n const handleKeyUp = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n if (numRegex.test(e.key)) {\n numKeyPressed.current = false;\n }\n };\n\n const maxWidth = width ? getInputMaxWidth(width, !!icon, iconSize) : undefined;\n\n return (\n <ErrorWrapper className={errorWrapperClassName} errorText={errorText} errorTextId={errorTextId}>\n <div data-testid={testId} data-analyticsid={AnalyticsId.Input} className={inputWrapperClass} ref={inputWrapperRef}>\n {renderLabel({ label: label, inputId: inputId, onColor: onColor as FormOnColor })}\n {/* input-elementet tillater keyboard-interaksjon */}\n <div className={styles['content-wrapper']}>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n onClick={handleClick}\n ref={mergeRefs([inputContainerRefLocal, inputContainerRef])}\n className={inputContainer}\n style={{ maxWidth }}\n >\n {!iconRight && renderIcon()}\n <input\n {...rest}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n name={name}\n type={type}\n defaultValue={defaultValue}\n value={value}\n id={inputId}\n className={inputClass}\n ref={ref}\n aria-describedby={getAriaDescribedBy(props, errorTextId)}\n aria-invalid={!!onError}\n disabled={disabled}\n placeholder={placeholder}\n readOnly={readOnly}\n autoComplete={autoComplete || 'off'}\n required={required}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n />\n {iconRight && renderIcon()}\n </div>\n <div className={styles['content-wrapper__right-of-input']}>{rightOfInput}</div>\n </div>\n {maxCharacters && (\n <MaxCharacters\n maxCharacters={maxCharacters}\n length={input.toString().length}\n maxText={mergedResources.characters}\n onColor={onColor}\n maxWidth={maxWidth}\n />\n )}\n {afterInputChildren}\n </div>\n </ErrorWrapper>\n );\n};\n\nInput.displayName = 'Input';\n\nexport default Input;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAY,aAAL,yBAAA,YAAA;CACL,WAAA,UAAA;CACA,WAAA,YAAA;CACA,WAAA,WAAA;CACA,WAAA,cAAA;CACA,WAAA,YAAA;CACA,WAAA,SAAA;CACA,WAAA,SAAA;CACA,WAAA,UAAA;CACA,WAAA,UAAA;;AACF,EAAA,CAAA,CAAA;;;;;;AIHA,IAAa,gBAAgB,aAAmD;CAC9E,QAAQ,UAAR;EACE,KAAK,gBAAgB,SACnB,OAAO;EACT,KAAK,gBAAgB,mBACnB,OAAO;EACT,KAAK,gBAAgB;EACrB,SACE,OAAO;CACX;AACF;;;ACgFA,IAAM,oBAAoB,YAAoB,SAAkB,aAA6B;CAC3F,MAAM,eAAe,UAAU,WAAW;CAC1C,MAAM,YAAY,UAAU,GAAG,SAAS,MAAM;CAG9C,OAAO,QAAQ,aAAA,GAAwC,OAAO,aAAa,KAAK,UAAU;AAC5F;AAEA,IAAM,SAA8B,UAAS;CAC3C,MAAM,EACJ,WACA,cACA,aACA,OAAO,WAAW,MAClB,MACA,cAAc,OACd,MACA,WACA,iBACA,UAAU,YAAY,SACtB,MACA,oBACA,OACA,OACA,WACA,aAAa,iBACb,SAAS,aACT,uBACA,QACA,UACA,UACA,eAAe,OACf,oBACA,cACA,OACA,UACA,UACA,WACA,WACA,eACA,mBACA,WACA,KACA,OACA,GAAG,SACD;CACJ,MAAM,EAAE,aAAa,YAA6B,gBAAgB,SAAS;CAG3E,MAAM,kBAAuC;EAC3C,GAHuB,aAAa,QAGjC;EACH,GAAG;CACL;CAEA,MAAM,aAAa,cAAc;CACjC,MAAM,yBAAyB,OAAuB,IAAI;CAC1D,MAAM,UAAU,kBAAkB,WAAW;CAC7C,MAAM,CAAC,OAAO,YAAY,SAAS,SAAS,gBAAgB,EAAE;CAC9D,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,YAAY;CACrE,MAAM,CAAC,WAAW,gBAAgB,SAAsC,KAAA,CAAS;CACjF,MAAM,CAAC,qBAAqB,0BAA0B,SAA0D,KAAK;CACrH,MAAM,gBAAgB,OAAgB,KAAK;CAC3C,MAAM,cAAc,kBAAkB,eAAe;CACrD,MAAM,WAAW;CAEjB,IAAI,iBAAiB,kBAAkB;EACrC,oBAAoB,YAAY;EAChC,SAAS,gBAAgB,EAAE;CAC7B;CAEA,IAAI,UAAU,qBAAqB;EACjC,uBAAuB,KAAK;EAE5B,IAAI,UAAU,KAAA,GACZ,SAAS,KAAK;CAElB;CAEA,MAAM,SAAS,YAAY,YAAY;CACvC,MAAM,cAAc,YAAY,YAAY;CAC5C,MAAM,wBAAwB,CAAC,CAAC,iBAAiB,MAAM,SAAS,CAAC,CAAC,SAAS;CAC3E,MAAM,UAAU,YAAY,YAAY,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS;CAC/E,MAAM,UAAU,SAAS,SAAS;CAClC,MAAM,gBAAgB,eAAe,YAAY,YAAY,UAAU,CAAC;CAExE,MAAM,oBAAoB,WAAG,OAAO,kBAAkB,SAAS;CAE/D,MAAM,iBAAiB,WAAG,OAAO,oBAAoB;GAClD,OAAO,kCAAkC;GACzC,OAAO,mCAAmC;GAC1C,OAAO,8BAA8B;GACrC,OAAO,8BAA8B;GACrC,OAAO,+BAA+B;GACtC,OAAO,gCAAgC;GACvC,OAAO,uCAAuC,QAAQ;CACzD,CAAC;CAED,MAAM,aAAa,WAAG,OAAO,2BAA2B;GACrD,OAAO,mCAAmC;GAC1C,OAAO,sCAAsC;CAChD,CAAC;CAED,MAAM,YAAY,WAAW,SAAS,WAAW,GAAG,IAAI,SAAS,OAAO;CACxE,MAAM,WAAW,eAAe,WAAW,MAAM,CAAC,UAAU,SAAS,SAAS,SAAS;CAEvF,MAAM,mBAAoC;EACxC,IAAI,CAAC,MACH;EAGF,IAAI,OAAO,SAAS,UAClB,OAAO,oBAAC,kBAAD;GAAU,WAAW,OAAO;GAAiC,OAAO;GAAW,MAAM;GAAU,UAAU;EAAO,CAAA;EAGzH,OAAO,oBAAC,cAAD;GAAM,WAAW,OAAO;GAAiC,OAAO;GAAW,MAAM;GAAU,SAAS;EAAO,CAAA;CACpH;CAGA,MAAM,eAAe,MAAmC;EACtD,IAAI,0BAA0B,uBAAuB,WAAW,MAAM;GACpE,MAAM,gBAAgB,YAAY,IAAI;GAEtC,uBADqC,QAAQ,SAAS,cACtD,CAAM,MAAM;GAEZ,IAAI,MAAM,SAAS,MAAM,QAAQ,CAAC;EACpC;CACF;CAEA,MAAM,gBAAgB,MAAiD;EACrE,MAAM,WAAW,kBAAkB,CAAC;EAEpC,IAAI,UACF,SAAS,CAAC;EAGZ,SAAS,QAAQ;EACjB,aAAa,QAAQ;CACvB;CAGA,MAAM,qBAAqB,MAAmD;EAC5E,IAAI,OAAO,uBAAuB,eAAe,SAAS,UAAU,OAAO,EAAE,OAAO;EAEpF,MAAM,gBAAgB,OAAO,EAAE,OAAO,KAAK;EAE3C,IAAI,CAAC,aAAa,CAAC,cAAc,YAAY,kBAAkB,KAAK,kBAAkB,KACpF,EAAE,OAAO,QAAQ,qBAAqB;EAGxC,OAAO,EAAE,OAAO;CAClB;CAEA,MAAM,iBAAiB,MAAmD;EACxE,IAAI,SAAS,KAAK,EAAE,GAAG,GACrB,cAAc,UAAU;EAE1B,IAAI,WAAW,UAAU,CAAC;CAC5B;CAEA,MAAM,eAAe,MAAmD;EACtE,IAAI,SAAS,KAAK,EAAE,GAAG,GACrB,cAAc,UAAU;CAE5B;CAEA,MAAM,WAAW,QAAQ,iBAAiB,OAAO,CAAC,CAAC,MAAM,QAAQ,IAAI,KAAA;CAErE,OACE,oBAAC,sBAAD;EAAc,WAAW;EAAkC;EAAwB;EACjF,UAAA,qBAAC,OAAD;GAAK,eAAa;GAAQ,oBAAkB,YAAY;GAAO,WAAW;GAAmB,KAAK;GAAlG,UAAA;IACG,YAAY;KAAS;KAAgB;KAAkB;IAAuB,CAAC;IAEhF,qBAAC,OAAD;KAAK,WAAW,OAAO;KAAvB,UAAA,CAEE,qBAAC,OAAD;MACE,SAAS;MACT,KAAK,UAAU,CAAC,wBAAwB,iBAAiB,CAAC;MAC1D,WAAW;MACX,OAAO,EAAE,SAAS;MAJpB,UAAA;OAMG,CAAC,aAAa,WAAW;OAC1B,oBAAC,SAAD;QACE,GAAI;QACJ,UAAU;QACV,WAAW;QACX,SAAS;QACH;QACA;QACQ;QACP;QACP,IAAI;QACJ,WAAW;QACN;QACL,oBAAkB,mBAAmB,OAAO,WAAW;QACvD,gBAAc,CAAC,CAAC;QACN;QACG;QACH;QACV,cAAc,gBAAgB;QACpB;QAEC;OACZ,CAAA;OACA,aAAa,WAAW;MACtB;KACL,CAAA,GAAA,oBAAC,OAAD;MAAK,WAAW,OAAO;MAAqC,UAAA;KAAkB,CAAA,CAC3E;;IACJ,iBACC,oBAAC,eAAD;KACiB;KACf,QAAQ,MAAM,SAAS,CAAC,CAAC;KACzB,SAAS,gBAAgB;KAChB;KACC;IACX,CAAA;IAEF;GACE;;CACO,CAAA;AAElB;AAEA,MAAM,cAAc"}
|
package/lib/LazyIcon.js
CHANGED
|
@@ -22,6 +22,7 @@ var LazyIcon = ({ iconName, size = IconSize.Small, ...rest }) => {
|
|
|
22
22
|
"../Icons/ArrowRight.tsx": () => import("./components/Icons/ArrowRight.js"),
|
|
23
23
|
"../Icons/ArrowUp.tsx": () => import("./components/Icons/ArrowUp.js"),
|
|
24
24
|
"../Icons/ArrowUpRight.tsx": () => import("./components/Icons/ArrowUpRight.js"),
|
|
25
|
+
"../Icons/ArrowUpRightLight.tsx": () => import("./components/Icons/ArrowUpRightLight.js"),
|
|
25
26
|
"../Icons/Attachment.tsx": () => import("./components/Icons/Attachment.js"),
|
|
26
27
|
"../Icons/Atv.tsx": () => import("./components/Icons/Atv.js"),
|
|
27
28
|
"../Icons/Avatar.tsx": () => import("./components/Icons/Avatar.js"),
|
package/lib/LazyIcon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LazyIcon.js","names":[],"sources":["../src/components/LazyIcon/LazyIcon.tsx","../src/components/LazyIcon/utils.ts","../src/components/LazyIcon/index.ts"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\n\nimport type { BaseIconProps, SvgIcon } from '../Icon';\nimport type { IconName } from '../Icons/IconNames';\n\nimport ErrorBoundary from './ErrorBoundary';\nimport { useIsServerSide } from '../../hooks/useIsServerSide';\nimport Icon, { IconSize } from '../Icon';\n\nexport interface LazyIconProps extends BaseIconProps {\n // Navnet på ikonet som skal vises. Tilsvarer filnavnet til ikonet i Icons-mappen\n iconName: IconName;\n}\n\nexport const LazyIcon: React.FC<LazyIconProps> = ({ iconName, size = IconSize.Small, ...rest }) => {\n const lazyLoadIcon = (iconName: IconName): React.LazyExoticComponent<SvgIcon> => lazy<SvgIcon>(() => import(`../Icons/${iconName}.tsx`));\n\n const icon = useMemo(() => lazyLoadIcon(iconName), [iconName]);\n const isServerSide = useIsServerSide();\n\n if (isServerSide) {\n return null;\n }\n\n const fallback = (\n <svg\n data-testid={'fallback'}\n role={'presentation'}\n focusable={false}\n aria-hidden={true}\n viewBox=\"0 0 48 48\"\n style={{ minWidth: size, minHeight: size }}\n width={size}\n height={size}\n />\n );\n\n return (\n <ErrorBoundary fallback={fallback} reset={iconName}>\n <Suspense fallback={fallback}>\n <Icon svgIcon={icon} size={size} {...rest} />\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport default LazyIcon;\n","/** @deprecated Use the useIsServerSide hook instead */\nexport const isServerSide = (): boolean => typeof document === 'undefined';\n","import LazyIcon from './LazyIcon';\nexport * from './LazyIcon';\nexport * from './utils';\nexport default LazyIcon;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"LazyIcon.js","names":[],"sources":["../src/components/LazyIcon/LazyIcon.tsx","../src/components/LazyIcon/utils.ts","../src/components/LazyIcon/index.ts"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\n\nimport type { BaseIconProps, SvgIcon } from '../Icon';\nimport type { IconName } from '../Icons/IconNames';\n\nimport ErrorBoundary from './ErrorBoundary';\nimport { useIsServerSide } from '../../hooks/useIsServerSide';\nimport Icon, { IconSize } from '../Icon';\n\nexport interface LazyIconProps extends BaseIconProps {\n // Navnet på ikonet som skal vises. Tilsvarer filnavnet til ikonet i Icons-mappen\n iconName: IconName;\n}\n\nexport const LazyIcon: React.FC<LazyIconProps> = ({ iconName, size = IconSize.Small, ...rest }) => {\n const lazyLoadIcon = (iconName: IconName): React.LazyExoticComponent<SvgIcon> => lazy<SvgIcon>(() => import(`../Icons/${iconName}.tsx`));\n\n const icon = useMemo(() => lazyLoadIcon(iconName), [iconName]);\n const isServerSide = useIsServerSide();\n\n if (isServerSide) {\n return null;\n }\n\n const fallback = (\n <svg\n data-testid={'fallback'}\n role={'presentation'}\n focusable={false}\n aria-hidden={true}\n viewBox=\"0 0 48 48\"\n style={{ minWidth: size, minHeight: size }}\n width={size}\n height={size}\n />\n );\n\n return (\n <ErrorBoundary fallback={fallback} reset={iconName}>\n <Suspense fallback={fallback}>\n <Icon svgIcon={icon} size={size} {...rest} />\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport default LazyIcon;\n","/** @deprecated Use the useIsServerSide hook instead */\nexport const isServerSide = (): boolean => typeof document === 'undefined';\n","import LazyIcon from './LazyIcon';\nexport * from './LazyIcon';\nexport * from './utils';\nexport default LazyIcon;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LazyIllustration.js","names":[],"sources":["../src/components/LazyIllustration/LazyIllustration.tsx","../src/components/LazyIllustration/index.ts"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\n\nimport type { BaseIllustrationProps, SvgIllustration } from '../Illustration';\nimport type { IllustrationName } from '../Illustrations/IllustrationNames';\n\nimport { useIsServerSide } from '../../hooks/useIsServerSide';\nimport Illustration from '../Illustration';\nimport { getIllustration } from '../Illustration/utils';\nimport { IllustrationSizeList } from '../Illustrations/IllustrationNames';\nimport ErrorBoundary from '../LazyIcon/ErrorBoundary';\n\nexport interface LazyIllustrationProps extends BaseIllustrationProps {\n // Navnet på illustrasjonen som skal vises. Tilsvarer filnavnet til illustrasjonen i Icons-mappen\n illustrationName: IllustrationName;\n}\n\nexport const LazyIllustration: React.FC<LazyIllustrationProps> = ({ illustrationName, size = 512, ...rest }) => {\n const lazyLoadIllustration = (illustrationName: IllustrationName, size: number): React.LazyExoticComponent<SvgIllustration> => {\n const sizes = IllustrationSizeList[illustrationName];\n const illustrationFileName = getIllustration({ size, ...sizes });\n\n return lazy<SvgIllustration>(() => import(`../Illustrations/${illustrationFileName}.tsx`));\n };\n\n const illustration = useMemo(() => lazyLoadIllustration(illustrationName, size), [illustrationName, size]);\n const isServerSide = useIsServerSide();\n\n if (isServerSide) {\n return null;\n }\n\n const fallback = (\n <svg\n data-testid={'fallback'}\n role={'presentation'}\n focusable={false}\n aria-hidden={true}\n viewBox=\"0 0 512 512\"\n style={{ minWidth: size, minHeight: size }}\n width={size}\n height={size}\n />\n );\n\n return (\n <ErrorBoundary fallback={fallback} reset={illustrationName}>\n <Suspense fallback={fallback}>\n <Illustration illustration={illustration} size={size} {...rest} />\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport default LazyIllustration;\n","import LazyIllustration from './LazyIllustration';\nexport * from './LazyIllustration';\nexport default LazyIllustration;\n"],"mappings":";;;;;;;;AAgBA,IAAa,oBAAqD,EAAE,kBAAkB,OAAO,KAAK,GAAG,WAAW;CAC9G,MAAM,wBAAwB,kBAAoC,SAA6D;EAC7H,MAAM,QAAQ,qBAAqB;EACnC,MAAM,uBAAuB,gBAAgB;GAAE;GAAM,GAAG;EAAM,CAAC;EAE/D,OAAO,WAA4B,wCAAA,uBAAA,OAAA;GAAA,yCAAA,OAAA;GAAA,+CAAA,OAAA;GAAA,oCAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,qCAAA,OAAA;GAAA,2CAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,yCAAA,OAAA;GAAA,+CAAA,OAAA;GAAA,2DAAA,OAAA;GAAA,iEAAA,OAAA;GAAA,2CAAA,OAAA;GAAA,iDAAA,OAAA;GAAA,kDAAA,OAAA;GAAA,wDAAA,OAAA;GAAA,uDAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,gDAAA,OAAA;GAAA,yCAAA,OAAA;GAAA,+CAAA,OAAA;GAAA,oCAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,uCAAA,OAAA;GAAA,6CAAA,OAAA;GAAA,uCAAA,OAAA;GAAA,6CAAA,OAAA;GAAA,uCAAA,OAAA;GAAA,6CAAA,OAAA;EAAA,CAAA,GAAA,oBAAA,qBAAA,OAAA,CAAA,CAAsD;CAC3F;CAEA,MAAM,eAAe,cAAc,qBAAqB,kBAAkB,IAAI,GAAG,CAAC,kBAAkB,IAAI,CAAC;CAGzG,IAFqB,gBAEjB,GACF,OAAO;CAGT,MAAM,WACJ,oBAAC,OAAD;EACE,eAAa;EACb,MAAM;EACN,WAAW;EACX,eAAa;EACb,SAAQ;EACR,OAAO;GAAE,UAAU;GAAM,WAAW;EAAK;EACzC,OAAO;EACP,QAAQ;CACT,CAAA;CAGH,OACE,oBAAC,eAAD;EAAyB;EAAU,OAAO;
|
|
1
|
+
{"version":3,"file":"LazyIllustration.js","names":[],"sources":["../src/components/LazyIllustration/LazyIllustration.tsx","../src/components/LazyIllustration/index.ts"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\n\nimport type { BaseIllustrationProps, SvgIllustration } from '../Illustration';\nimport type { IllustrationName } from '../Illustrations/IllustrationNames';\n\nimport { useIsServerSide } from '../../hooks/useIsServerSide';\nimport Illustration from '../Illustration';\nimport { getIllustration } from '../Illustration/utils';\nimport { IllustrationSizeList } from '../Illustrations/IllustrationNames';\nimport ErrorBoundary from '../LazyIcon/ErrorBoundary';\n\nexport interface LazyIllustrationProps extends BaseIllustrationProps {\n // Navnet på illustrasjonen som skal vises. Tilsvarer filnavnet til illustrasjonen i Icons-mappen\n illustrationName: IllustrationName;\n}\n\nexport const LazyIllustration: React.FC<LazyIllustrationProps> = ({ illustrationName, size = 512, ...rest }) => {\n const lazyLoadIllustration = (illustrationName: IllustrationName, size: number): React.LazyExoticComponent<SvgIllustration> => {\n const sizes = IllustrationSizeList[illustrationName];\n const illustrationFileName = getIllustration({ size, ...sizes });\n\n return lazy<SvgIllustration>(() => import(`../Illustrations/${illustrationFileName}.tsx`));\n };\n\n const illustration = useMemo(() => lazyLoadIllustration(illustrationName, size), [illustrationName, size]);\n const isServerSide = useIsServerSide();\n\n if (isServerSide) {\n return null;\n }\n\n const fallback = (\n <svg\n data-testid={'fallback'}\n role={'presentation'}\n focusable={false}\n aria-hidden={true}\n viewBox=\"0 0 512 512\"\n style={{ minWidth: size, minHeight: size }}\n width={size}\n height={size}\n />\n );\n\n return (\n <ErrorBoundary fallback={fallback} reset={illustrationName}>\n <Suspense fallback={fallback}>\n <Illustration illustration={illustration} size={size} {...rest} />\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport default LazyIllustration;\n","import LazyIllustration from './LazyIllustration';\nexport * from './LazyIllustration';\nexport default LazyIllustration;\n"],"mappings":";;;;;;;;AAgBA,IAAa,oBAAqD,EAAE,kBAAkB,OAAO,KAAK,GAAG,WAAW;CAC9G,MAAM,wBAAwB,kBAAoC,SAA6D;EAC7H,MAAM,QAAQ,qBAAqB;EACnC,MAAM,uBAAuB,gBAAgB;GAAE;GAAM,GAAG;EAAM,CAAC;EAE/D,OAAO,WAA4B,wCAAA,uBAAA,OAAA;GAAA,yCAAA,OAAA;GAAA,+CAAA,OAAA;GAAA,oCAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,qCAAA,OAAA;GAAA,2CAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,yCAAA,OAAA;GAAA,+CAAA,OAAA;GAAA,2DAAA,OAAA;GAAA,iEAAA,OAAA;GAAA,2CAAA,OAAA;GAAA,iDAAA,OAAA;GAAA,kDAAA,OAAA;GAAA,wDAAA,OAAA;GAAA,uDAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,gDAAA,OAAA;GAAA,yCAAA,OAAA;GAAA,+CAAA,OAAA;GAAA,oCAAA,OAAA;GAAA,0CAAA,OAAA;GAAA,uCAAA,OAAA;GAAA,6CAAA,OAAA;GAAA,uCAAA,OAAA;GAAA,6CAAA,OAAA;GAAA,uCAAA,OAAA;GAAA,6CAAA,OAAA;EAAA,CAAA,GAAA,oBAAA,qBAAA,OAAA,CAAA,CAAsD;CAC3F;CAEA,MAAM,eAAe,cAAc,qBAAqB,kBAAkB,IAAI,GAAG,CAAC,kBAAkB,IAAI,CAAC;CAGzG,IAFqB,gBAEjB,GACF,OAAO;CAGT,MAAM,WACJ,oBAAC,OAAD;EACE,eAAa;EACb,MAAM;EACN,WAAW;EACX,eAAa;EACb,SAAQ;EACR,OAAO;GAAE,UAAU;GAAM,WAAW;EAAK;EACzC,OAAO;EACP,QAAQ;CACT,CAAA;CAGH,OACE,oBAAC,eAAD;EAAyB;EAAU,OAAO;EACxC,UAAA,oBAAC,UAAD;GAAoB;GAClB,UAAA,oBAAC,sBAAD;IAA4B;IAAoB;IAAM,GAAI;GAAO,CAAA;EACzD,CAAA;CACG,CAAA;AAEnB;;;ACjDA,IAAA,2BAAe"}
|
package/lib/LinkList.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { AnalyticsId, LanguageLocales } from "./constants.js";
|
|
2
2
|
import { usePseudoClasses } from "./hooks/usePseudoClasses.js";
|
|
3
|
-
import ArrowUpRight from "./components/Icons/ArrowUpRight.js";
|
|
4
3
|
import { useLanguage } from "./hooks/useLanguage.js";
|
|
5
4
|
import { i as renderElementHeader } from "./ElementHeader.js";
|
|
6
5
|
import { n as listEditModeWrapperClassnames, t as ListEditMode_default } from "./ListEditMode.js";
|
|
7
6
|
import ChevronRight from "./components/Icons/ChevronRight.js";
|
|
8
|
-
import
|
|
7
|
+
import ArrowUpRight from "./components/Icons/ArrowUpRight.js";
|
|
8
|
+
import classNames from "classnames";
|
|
9
9
|
import React from "react";
|
|
10
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
import LinkListStyles from "./components/LinkList/styles.module.scss";
|
|
@@ -29,12 +29,12 @@ var Link = (props) => {
|
|
|
29
29
|
const isFillNegative = variant === "fill-negative";
|
|
30
30
|
const isOutline = variant === "outline";
|
|
31
31
|
const isLine = variant === "line";
|
|
32
|
-
const liClasses =
|
|
32
|
+
const liClasses = classNames(LinkListStyles["link-list"], {
|
|
33
33
|
[LinkListStyles["link-list__list-item--line"]]: isLine,
|
|
34
34
|
[LinkListStyles["link-list__list-item--outline"]]: isOutline,
|
|
35
35
|
[LinkListStyles[`link-list__list-item--outline--${color}`]]: isOutline
|
|
36
36
|
});
|
|
37
|
-
const linkClasses =
|
|
37
|
+
const linkClasses = classNames(LinkListStyles["link-list__anchor"], LinkListStyles[`link-list__anchor--${color}`], {
|
|
38
38
|
[LinkListStyles[`link-list__anchor--line--${color}`]]: isLine,
|
|
39
39
|
[LinkListStyles["link-list__anchor--fill"]]: isFill,
|
|
40
40
|
[LinkListStyles[`link-list__anchor--fill--${color}`]]: isFill,
|
|
@@ -46,7 +46,7 @@ var Link = (props) => {
|
|
|
46
46
|
[LinkListStyles["link-list__anchor--button"]]: htmlMarkup === "button",
|
|
47
47
|
[LinkListStyles["link-list__anchor--new"]]: status === "new"
|
|
48
48
|
}, className);
|
|
49
|
-
const statusMarkerClasses =
|
|
49
|
+
const statusMarkerClasses = classNames(LinkListStyles["link-list__status-marker"], { [LinkListStyles["link-list__status-marker--new"]]: status === "new" });
|
|
50
50
|
const imageContainer = /* @__PURE__ */ jsx("span", {
|
|
51
51
|
className: LinkListStyles["link-list__image-container"],
|
|
52
52
|
children: image
|
|
@@ -114,42 +114,45 @@ var LinkListComponent = (props) => {
|
|
|
114
114
|
...getResources(language),
|
|
115
115
|
...resources
|
|
116
116
|
};
|
|
117
|
+
const listClassNames = classNames(LinkListStyles["link-list"], className, {
|
|
118
|
+
[LinkListStyles[`link-list--outline--${color}`]]: variant === "outline",
|
|
119
|
+
[listEditModeWrapperClassnames]: editMode
|
|
120
|
+
});
|
|
117
121
|
return /* @__PURE__ */ jsx("ul", {
|
|
118
122
|
ref,
|
|
119
|
-
className:
|
|
120
|
-
[LinkListStyles[`link-list--outline--${color}`]]: variant === "outline",
|
|
121
|
-
[listEditModeWrapperClassnames]: editMode
|
|
122
|
-
}),
|
|
123
|
+
className: listClassNames,
|
|
123
124
|
"data-testid": testId,
|
|
124
125
|
"data-analyticsid": AnalyticsId.LinkList,
|
|
125
126
|
children: React.Children.map(children, (child, index) => {
|
|
126
|
-
if (React.isValidElement(child) && child.type === Link)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
variant,
|
|
132
|
-
onDelete: child.props.onDelete,
|
|
133
|
-
contentId: itemId,
|
|
134
|
-
deleteButtonAriaLabel: deleteAriaLabel,
|
|
135
|
-
children: React.cloneElement(child, {
|
|
127
|
+
if (React.isValidElement(child) && child.type === Link) {
|
|
128
|
+
if (editMode) {
|
|
129
|
+
const deleteAriaLabel = child.props.resources?.editMode_deleteButtonAriaLabel ?? mergedResources.editMode_deleteButtonAriaLabel;
|
|
130
|
+
const itemId = `linklist-item-${index}`;
|
|
131
|
+
return /* @__PURE__ */ jsx(ListEditMode_default, {
|
|
136
132
|
color,
|
|
137
|
-
size,
|
|
138
|
-
chevron: false,
|
|
139
133
|
variant,
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
134
|
+
onDelete: child.props.onDelete,
|
|
135
|
+
contentId: itemId,
|
|
136
|
+
deleteButtonAriaLabel: deleteAriaLabel,
|
|
137
|
+
children: React.cloneElement(child, {
|
|
138
|
+
color,
|
|
139
|
+
size,
|
|
140
|
+
chevron: false,
|
|
141
|
+
variant,
|
|
142
|
+
highlightText,
|
|
143
|
+
editMode: true,
|
|
144
|
+
contentId: itemId
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
} else return React.cloneElement(child, {
|
|
148
|
+
color,
|
|
149
|
+
size,
|
|
150
|
+
chevron,
|
|
151
|
+
variant,
|
|
152
|
+
highlightText,
|
|
153
|
+
editMode: false
|
|
144
154
|
});
|
|
145
|
-
}
|
|
146
|
-
color,
|
|
147
|
-
size,
|
|
148
|
-
chevron,
|
|
149
|
-
variant,
|
|
150
|
-
highlightText,
|
|
151
|
-
editMode: false
|
|
152
|
-
});
|
|
155
|
+
}
|
|
153
156
|
return null;
|
|
154
157
|
})
|
|
155
158
|
});
|
package/lib/LinkList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkList.js","names":[],"sources":["../src/resources/HN.Designsystem.LinkList.en-GB.json","../src/resources/HN.Designsystem.LinkList.nb-NO.json","../src/components/LinkList/resourceHelper.ts","../src/components/LinkList/LinkList.tsx","../src/components/LinkList/index.ts"],"sourcesContent":["{\n \"editMode_deleteButtonAriaLabel\": \"Delete\"\n}\n","{\n \"editMode_deleteButtonAriaLabel\": \"Slett\"\n}\n","import type { HNDesignsystemLinkList } from '../../resources/Resources';\n\nimport { LanguageLocales } from '../../constants';\nimport enGB from '../../resources/HN.Designsystem.LinkList.en-GB.json';\nimport nbNO from '../../resources/HN.Designsystem.LinkList.nb-NO.json';\n\nexport const getResources = (language: LanguageLocales): HNDesignsystemLinkList => {\n switch (language) {\n case LanguageLocales.ENGLISH:\n return enGB;\n case LanguageLocales.NORWEGIAN:\n default:\n return nbNO;\n }\n};\n","import React from 'react';\n\nimport cn from 'classnames';\n\nimport type { HNDesignsystemLinkList } from '../../resources/Resources';\nimport type { PaletteNames } from '../../theme/palette';\nimport type { ElementHeaderType } from '../ElementHeader/ElementHeader';\nimport type { ListEditModeItemProps } from '../ListEditMode';\n\nimport { getResources } from './resourceHelper';\nimport { AnalyticsId, LanguageLocales } from '../../constants';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { renderElementHeader } from '../ElementHeader/utils';\nimport ArrowUpRight from '../Icons/ArrowUpRight';\nimport ChevronRight from '../Icons/ChevronRight';\nimport ListEditModeItem from '../ListEditMode';\nimport { listEditModeWrapperClassnames } from '../ListEditMode/constants';\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.FC<LinkProps> {\n ElementHeader?: ElementHeaderType;\n}\n\nexport type LinkTags = 'button' | 'a';\nexport interface CompoundComponent extends React.FC<LinkListProps> {\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 /** Resources for component */\n resources?: Partial<HNDesignsystemLinkList>;\n /** Ref passed to the ul element */\n ref?: React.Ref<HTMLUListElement | null>;\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 /** @private Turns chevron icon on/off. Overwritten by LinkList so not possible to set on LinkList.Link */\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 /** Ref for lenke/knapp */\n linkRef?: React.RefObject<HTMLButtonElement | HTMLAnchorElement | null>;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Highlights text. Override if different from list */\n highlightText?: string;\n /** Resources for component */\n resources?: Partial<HNDesignsystemLinkList>;\n /** @experimental id for content (only used in edit mode for aria-describedby) */\n contentId?: string;\n /** Ref passed to the list item element */\n ref?: React.Ref<HTMLLIElement | null>;\n /** Replaces the chevron with an arrow up right which is used for indicating external links */\n external?: boolean;\n }\n> &\n Pick<LinkListProps, 'color' | 'size' | 'variant'> &\n ListEditModeItemProps;\n\nexport const Link: LinkType = (props: LinkProps) => {\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 contentId,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n resources, // used by ListEditModeItem in LinkList\n ref,\n external = false,\n ...restProps\n } = props;\n const { refObject, isHovered } = usePseudoClasses<HTMLButtonElement | HTMLAnchorElement | null>(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']]: isOutline,\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 let chevronIcon = undefined;\n if (external) {\n chevronIcon = ArrowUpRight;\n } else if (chevron) {\n chevronIcon = ChevronRight;\n }\n\n return editMode ? (\n <div id={contentId} className={liClasses} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n <div className={linkClasses}>\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n size,\n parentType: 'linklist',\n chevronIcon: chevronIcon,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </div>\n </div>\n ) : (\n <li className={liClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n {htmlMarkup === 'a' ? (\n <a\n className={linkClasses}\n ref={refObject 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: chevronIcon,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </a>\n ) : (\n htmlMarkup === 'button' && (\n <button className={linkClasses} ref={refObject 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: chevronIcon,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </button>\n )\n )}\n </li>\n );\n};\n\nconst LinkListComponent: React.FC<LinkListProps> = (props: LinkListProps) => {\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 resources,\n ref,\n } = props;\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources: HNDesignsystemLinkList = {\n ...defaultResources,\n ...resources,\n };\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, index) => {\n if (React.isValidElement<LinkProps>(child) && child.type === Link) {\n if (editMode) {\n const childResources = child.props.resources;\n const deleteAriaLabel = childResources?.editMode_deleteButtonAriaLabel ?? mergedResources.editMode_deleteButtonAriaLabel;\n const itemId = `linklist-item-${index}`;\n\n return (\n <ListEditModeItem\n color={color}\n variant={variant}\n onDelete={child.props.onDelete}\n contentId={itemId}\n deleteButtonAriaLabel={deleteAriaLabel}\n >\n {React.cloneElement(child, {\n color,\n size,\n chevron: false,\n variant,\n highlightText: highlightText,\n editMode: true,\n contentId: itemId,\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};\n\nexport const LinkList = LinkListComponent as CompoundComponent;\n\nLinkList.displayName = 'LinkList';\nLinkList.Link = Link;\nLink.displayName = 'LinkList.Link';\n\nexport default LinkList;\n","import LinkList from './LinkList';\nexport * from './LinkList';\nexport default LinkList;\n"],"mappings":";;;;;;;;;;;;;;;AEMA,IAAa,gBAAgB,aAAsD;CACjF,QAAQ,UAAR;EACE,KAAK,gBAAgB,SACnB,OAAO;EACT,KAAK,gBAAgB;EACrB,SACE,OAAO;CACX;AACF;;;AC0FA,IAAa,QAAkB,UAAqB;CAClD,MAAM,EACJ,UACA,YAAY,IACZ,QAAQ,SACR,MACA,OACA,OAAO,UACP,UAAU,OACV,SACA,SAAS,QACT,QACA,QACA,SACA,aAAa,KACb,eACA,WAAW,OACX,WAEA,WACA,KACA,WAAW,OACX,GAAG,cACD;CACJ,MAAM,EAAE,WAAW,cAAc,iBAA+D,OAAO;CAEvG,MAAM,SAAS,YAAY;CAC3B,MAAM,iBAAiB,YAAY;CACnC,MAAM,YAAY,YAAY;CAC9B,MAAM,SAAS,YAAY;CAE3B,MAAM,YAAY,GAAG,eAAe,cAAc;GAC/C,eAAe,gCAAgC;GAC/C,eAAe,mCAAmC;GAClD,eAAe,kCAAkC,WAAW;CAC/D,CAAC;CACD,MAAM,cAAc,GAClB,eAAe,sBACf,eAAe,sBAAsB,UACrC;GACG,eAAe,4BAA4B,WAAW;GACtD,eAAe,6BAA6B;GAC5C,eAAe,4BAA4B,WAAW;GACtD,eAAe,gCAAgC;GAC/C,eAAe,+BAA+B,WAAW;GACzD,eAAe,sCAAsC;GACrD,eAAe,qCAAqC,WAAW;GAC/D,eAAe,sBAAsB,UAAU;GAC/C,eAAe,+BAA+B,eAAe;GAC7D,eAAe,4BAA4B,WAAW;CACzD,GACA,SACF;CAEA,MAAM,sBAAsB,GAAG,eAAe,6BAA6B,GACxE,eAAe,mCAAmC,WAAW,MAChE,CAAC;CAED,MAAM,iBAAiB,oBAAC,QAAD;EAAM,WAAW,eAAe;YAAgC;CAAY,CAAA;CAEnG,IAAI,cAAc,KAAA;CAClB,IAAI,UACF,cAAc;MACT,IAAI,SACT,cAAc;CAGhB,OAAO,WACL,oBAAC,OAAD;EAAK,IAAI;EAAW,WAAW;EAAW,eAAa;EAAQ,oBAAkB,YAAY;YAC3F,qBAAC,OAAD;GAAK,WAAW;aAAhB,CACE,oBAAC,OAAD,EAAK,WAAW,oBAA0B,CAAA,GACzC,oBAAoB,UAAU;IAC7B,iBAAiB;IACjB;IACA,YAAY;IACC;IACb,MAAM,QAAQ;IACd;GACF,CAAC,CACE;;CACF,CAAA,IAEL,oBAAC,MAAD;EAAI,WAAW;EAAgB;EAAK,eAAa;EAAQ,oBAAkB,YAAY;YACpF,eAAe,MACd,qBAAC,KAAD;GACE,WAAW;GACX,KAAK;GACL,KAAK,WAAW,WAAW,wBAAwB,KAAA;GAC3C;GACR,GAAI;aALN,CAOE,oBAAC,OAAD,EAAK,WAAW,oBAA0B,CAAA,GACzC,oBAAoB,UAAU;IAC7B,iBAAiB;IACjB;IACA;IACA,YAAY;IACC;IACb,MAAM,QAAQ;IACd;GACF,CAAC,CACA;OAEH,eAAe,YACb,qBAAC,UAAD;GAAQ,WAAW;GAAa,KAAK;GAAiD,MAAK;GAAS,GAAI;aAAxG,CACE,oBAAC,OAAD,EAAK,WAAW,oBAA0B,CAAA,GACzC,oBAAoB,UAAU;IAC7B,iBAAiB;IACjB;IACA;IACA,YAAY;IACC;IACb,MAAM,QAAQ;IACd;GACF,CAAC,CACK;;CAGV,CAAA;AAER;AAEA,IAAM,qBAA8C,UAAyB;CAC3E,MAAM,EACJ,UACA,YAAY,IACZ,UAAU,OACV,OAAO,UACP,QAAQ,SACR,QACA,UAAU,QACV,eACA,WAAW,OACX,WACA,QACE;CAEJ,MAAM,EAAE,aAAa,YAA6B,gBAAgB,SAAS;CAG3E,MAAM,kBAA0C;EAC9C,GAHuB,aAAa,QAGjC;EACH,GAAG;CACL;CAOA,OACE,oBAAC,MAAD;EAAS;EAAK,WANO,GAAG,eAAe,cAAc,WAAW;IAC/D,eAAe,uBAAuB,WAAW,YAAY;IAC7D,gCAAgC;EACnC,CAG2B;EAAgB,eAAa;EAAQ,oBAAkB,YAAY;YACzF,MAAM,SAAS,IAAI,WAAW,OAAwB,UAAU;GAC/D,IAAI,MAAM,eAA0B,KAAK,KAAK,MAAM,SAAS,MAC3D,IAAI,UAAU;IAEZ,MAAM,kBADiB,MAAM,MAAM,WACK,kCAAkC,gBAAgB;IAC1F,MAAM,SAAS,iBAAiB;IAEhC,OACE,oBAAC,sBAAD;KACS;KACE;KACT,UAAU,MAAM,MAAM;KACtB,WAAW;KACX,uBAAuB;eAEtB,MAAM,aAAa,OAAO;MACzB;MACA;MACA,SAAS;MACT;MACe;MACf,UAAU;MACV,WAAW;KACb,CAAC;IACe,CAAA;GAEtB,OACE,OAAO,MAAM,aAAa,OAAO;IAC/B;IACA;IACA;IACA;IACe;IACf,UAAU;GACZ,CAAC;GAGL,OAAO;EACT,CAAC;CACC,CAAA;AAER;AAEA,IAAa,WAAW;AAExB,SAAS,cAAc;AACvB,SAAS,OAAO;AAChB,KAAK,cAAc;;;AC7SnB,IAAA,mBAAe"}
|
|
1
|
+
{"version":3,"file":"LinkList.js","names":[],"sources":["../src/resources/HN.Designsystem.LinkList.en-GB.json","../src/resources/HN.Designsystem.LinkList.nb-NO.json","../src/components/LinkList/resourceHelper.ts","../src/components/LinkList/LinkList.tsx","../src/components/LinkList/index.ts"],"sourcesContent":["{\n \"editMode_deleteButtonAriaLabel\": \"Delete\"\n}\n","{\n \"editMode_deleteButtonAriaLabel\": \"Slett\"\n}\n","import type { HNDesignsystemLinkList } from '../../resources/Resources';\n\nimport { LanguageLocales } from '../../constants';\nimport enGB from '../../resources/HN.Designsystem.LinkList.en-GB.json';\nimport nbNO from '../../resources/HN.Designsystem.LinkList.nb-NO.json';\n\nexport const getResources = (language: LanguageLocales): HNDesignsystemLinkList => {\n switch (language) {\n case LanguageLocales.ENGLISH:\n return enGB;\n case LanguageLocales.NORWEGIAN:\n default:\n return nbNO;\n }\n};\n","import React from 'react';\n\nimport cn from 'classnames';\n\nimport type { HNDesignsystemLinkList } from '../../resources/Resources';\nimport type { PaletteNames } from '../../theme/palette';\nimport type { ElementHeaderType } from '../ElementHeader/ElementHeader';\nimport type { ListEditModeItemProps } from '../ListEditMode';\n\nimport { getResources } from './resourceHelper';\nimport { AnalyticsId, LanguageLocales } from '../../constants';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport { renderElementHeader } from '../ElementHeader/utils';\nimport ArrowUpRight from '../Icons/ArrowUpRight';\nimport ChevronRight from '../Icons/ChevronRight';\nimport ListEditModeItem from '../ListEditMode';\nimport { listEditModeWrapperClassnames } from '../ListEditMode/constants';\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.FC<LinkProps> {\n ElementHeader?: ElementHeaderType;\n}\n\nexport type LinkTags = 'button' | 'a';\nexport interface CompoundComponent extends React.FC<LinkListProps> {\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 /** Resources for component */\n resources?: Partial<HNDesignsystemLinkList>;\n /** Ref passed to the ul element */\n ref?: React.Ref<HTMLUListElement | null>;\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 /** @private Turns chevron icon on/off. Overwritten by LinkList so not possible to set on LinkList.Link */\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 /** Ref for lenke/knapp */\n linkRef?: React.RefObject<HTMLButtonElement | HTMLAnchorElement | null>;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Highlights text. Override if different from list */\n highlightText?: string;\n /** Resources for component */\n resources?: Partial<HNDesignsystemLinkList>;\n /** @experimental id for content (only used in edit mode for aria-describedby) */\n contentId?: string;\n /** Ref passed to the list item element */\n ref?: React.Ref<HTMLLIElement | null>;\n /** Replaces the chevron with an arrow up right which is used for indicating external links */\n external?: boolean;\n }\n> &\n Pick<LinkListProps, 'color' | 'size' | 'variant'> &\n ListEditModeItemProps;\n\nexport const Link: LinkType = (props: LinkProps) => {\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 contentId,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n resources, // used by ListEditModeItem in LinkList\n ref,\n external = false,\n ...restProps\n } = props;\n const { refObject, isHovered } = usePseudoClasses<HTMLButtonElement | HTMLAnchorElement | null>(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']]: isOutline,\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 let chevronIcon = undefined;\n if (external) {\n chevronIcon = ArrowUpRight;\n } else if (chevron) {\n chevronIcon = ChevronRight;\n }\n\n return editMode ? (\n <div id={contentId} className={liClasses} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n <div className={linkClasses}>\n <div className={statusMarkerClasses}></div>\n {renderElementHeader(children, {\n titleHtmlMarkup: 'span',\n size,\n parentType: 'linklist',\n chevronIcon: chevronIcon,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </div>\n </div>\n ) : (\n <li className={liClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n {htmlMarkup === 'a' ? (\n <a\n className={linkClasses}\n ref={refObject 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: chevronIcon,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </a>\n ) : (\n htmlMarkup === 'button' && (\n <button className={linkClasses} ref={refObject 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: chevronIcon,\n icon: icon ?? imageContainer,\n highlightText,\n })}\n </button>\n )\n )}\n </li>\n );\n};\n\nconst LinkListComponent: React.FC<LinkListProps> = (props: LinkListProps) => {\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 resources,\n ref,\n } = props;\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources: HNDesignsystemLinkList = {\n ...defaultResources,\n ...resources,\n };\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, index) => {\n if (React.isValidElement<LinkProps>(child) && child.type === Link) {\n if (editMode) {\n const childResources = child.props.resources;\n const deleteAriaLabel = childResources?.editMode_deleteButtonAriaLabel ?? mergedResources.editMode_deleteButtonAriaLabel;\n const itemId = `linklist-item-${index}`;\n\n return (\n <ListEditModeItem\n color={color}\n variant={variant}\n onDelete={child.props.onDelete}\n contentId={itemId}\n deleteButtonAriaLabel={deleteAriaLabel}\n >\n {React.cloneElement(child, {\n color,\n size,\n chevron: false,\n variant,\n highlightText: highlightText,\n editMode: true,\n contentId: itemId,\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};\n\nexport const LinkList = LinkListComponent as CompoundComponent;\n\nLinkList.displayName = 'LinkList';\nLinkList.Link = Link;\nLink.displayName = 'LinkList.Link';\n\nexport default LinkList;\n","import LinkList from './LinkList';\nexport * from './LinkList';\nexport default LinkList;\n"],"mappings":"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"}
|
package/lib/List.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnalyticsId } from "./constants.js";
|
|
2
|
-
import
|
|
2
|
+
import classNames from "classnames";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import styles from "./components/List/styles.module.scss";
|
|
5
5
|
//#region src/components/List/List.tsx
|
|
@@ -8,8 +8,10 @@ var Item = ({ children }) => /* @__PURE__ */ jsx("li", {
|
|
|
8
8
|
children
|
|
9
9
|
});
|
|
10
10
|
var List = ({ children, className, testId, variant = "bullet", margin }) => {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const CustomTag = ["numbered", "alphabetical"].includes(variant) ? "ol" : "ul";
|
|
12
|
+
const listClasses = classNames(styles.list, styles[`list--${variant}`], margin && styles["list--margin"], className);
|
|
13
|
+
return /* @__PURE__ */ jsx(CustomTag, {
|
|
14
|
+
className: listClasses,
|
|
13
15
|
"data-testid": testId,
|
|
14
16
|
"data-analyticsid": AnalyticsId.List,
|
|
15
17
|
children
|
package/lib/List.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","names":[],"sources":["../src/components/List/List.tsx","../src/components/List/index.ts"],"sourcesContent":["import classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\n\nimport styles from './styles.module.scss';\n\nexport type ListVariant = 'bullet' | 'dashed' | 'numbered' | 'alphabetical';\n\nexport interface ItemProps {\n children: React.ReactNode;\n}\n\nconst Item: React.FC<ItemProps> = ({ children }: ItemProps) => <li className={styles.list__item}>{children}</li>;\n\nexport interface ListProps {\n /** List contents */\n children: React.ReactNode;\n /** Changes the visual representation of the list. */\n variant?: ListVariant;\n /** Adds margin above/below list */\n margin?: boolean;\n /** Adds className to list element */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nexport interface ListCompound extends React.FC<ListProps> {\n Item: typeof Item;\n}\n\nconst List: ListCompound = ({ children, className, testId, variant = 'bullet', margin }: ListProps) => {\n const CustomTag = ['numbered', 'alphabetical'].includes(variant) ? 'ol' : 'ul';\n\n const listClasses = classNames(styles.list, styles[`list--${variant}`], margin && styles['list--margin'], className);\n\n return (\n <CustomTag className={listClasses} data-testid={testId} data-analyticsid={AnalyticsId.List}>\n {children}\n </CustomTag>\n );\n};\n\nList.Item = Item;\n\nexport default List;\n","import List from './List';\nexport * from './List';\nexport default List;\n"],"mappings":";;;;;AAYA,IAAM,QAA6B,EAAE,eAA0B,oBAAC,MAAD;CAAI,WAAW,OAAO;CAAa;AAAa,CAAA;AAmB/G,IAAM,QAAsB,EAAE,UAAU,WAAW,QAAQ,UAAU,UAAU,aAAwB;
|
|
1
|
+
{"version":3,"file":"List.js","names":[],"sources":["../src/components/List/List.tsx","../src/components/List/index.ts"],"sourcesContent":["import classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\n\nimport styles from './styles.module.scss';\n\nexport type ListVariant = 'bullet' | 'dashed' | 'numbered' | 'alphabetical';\n\nexport interface ItemProps {\n children: React.ReactNode;\n}\n\nconst Item: React.FC<ItemProps> = ({ children }: ItemProps) => <li className={styles.list__item}>{children}</li>;\n\nexport interface ListProps {\n /** List contents */\n children: React.ReactNode;\n /** Changes the visual representation of the list. */\n variant?: ListVariant;\n /** Adds margin above/below list */\n margin?: boolean;\n /** Adds className to list element */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nexport interface ListCompound extends React.FC<ListProps> {\n Item: typeof Item;\n}\n\nconst List: ListCompound = ({ children, className, testId, variant = 'bullet', margin }: ListProps) => {\n const CustomTag = ['numbered', 'alphabetical'].includes(variant) ? 'ol' : 'ul';\n\n const listClasses = classNames(styles.list, styles[`list--${variant}`], margin && styles['list--margin'], className);\n\n return (\n <CustomTag className={listClasses} data-testid={testId} data-analyticsid={AnalyticsId.List}>\n {children}\n </CustomTag>\n );\n};\n\nList.Item = Item;\n\nexport default List;\n","import List from './List';\nexport * from './List';\nexport default List;\n"],"mappings":";;;;;AAYA,IAAM,QAA6B,EAAE,eAA0B,oBAAC,MAAD;CAAI,WAAW,OAAO;CAAa;AAAa,CAAA;AAmB/G,IAAM,QAAsB,EAAE,UAAU,WAAW,QAAQ,UAAU,UAAU,aAAwB;CACrG,MAAM,YAAY,CAAC,YAAY,cAAc,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO;CAE1E,MAAM,cAAc,WAAW,OAAO,MAAM,OAAO,SAAS,YAAY,UAAU,OAAO,iBAAiB,SAAS;CAEnH,OACE,oBAAC,WAAD;EAAW,WAAW;EAAa,eAAa;EAAQ,oBAAkB,YAAY;EACnF;CACQ,CAAA;AAEf;AAEA,KAAK,OAAO;;;ACzCZ,IAAA,eAAe"}
|
package/lib/ListEditMode.js
CHANGED
|
@@ -2,7 +2,7 @@ import { IconSize } from "./constants.js";
|
|
|
2
2
|
import { usePseudoClasses } from "./hooks/usePseudoClasses.js";
|
|
3
3
|
import { t as Icon_default } from "./Icon.js";
|
|
4
4
|
import X from "./components/Icons/X.js";
|
|
5
|
-
import
|
|
5
|
+
import classNames from "classnames";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import styles from "./components/ListEditMode/styles.module.scss";
|
|
8
8
|
//#region src/components/ListEditMode/ListEditMode.tsx
|
|
@@ -12,7 +12,7 @@ var IconButton = ({ icon, color, onClick, ariaLabel, ariaDescribedby }) => {
|
|
|
12
12
|
ref: refObject,
|
|
13
13
|
onClick,
|
|
14
14
|
type: "button",
|
|
15
|
-
className:
|
|
15
|
+
className: classNames(styles["list-edit-mode__icon-button"]),
|
|
16
16
|
"aria-label": ariaLabel,
|
|
17
17
|
"aria-describedby": ariaDescribedby,
|
|
18
18
|
children: /* @__PURE__ */ jsx(Icon_default, {
|
|
@@ -25,11 +25,12 @@ var IconButton = ({ icon, color, onClick, ariaLabel, ariaDescribedby }) => {
|
|
|
25
25
|
};
|
|
26
26
|
var ListEditModeItem = (props) => {
|
|
27
27
|
const { children, variant = "line", color = "neutral", onDelete, deleteButtonAriaLabel, contentId } = props;
|
|
28
|
+
const listClassNames = classNames(styles["list-edit-mode__item"], color && styles[`list-edit-mode__item--${color}`], {
|
|
29
|
+
[styles["list-edit-mode__item--line"]]: variant === "line",
|
|
30
|
+
[styles["list-edit-mode__item--fill"]]: variant === "fill" || variant === "fill-negative"
|
|
31
|
+
});
|
|
28
32
|
return /* @__PURE__ */ jsxs("li", {
|
|
29
|
-
className:
|
|
30
|
-
[styles["list-edit-mode__item--line"]]: variant === "line",
|
|
31
|
-
[styles["list-edit-mode__item--fill"]]: variant === "fill" || variant === "fill-negative"
|
|
32
|
-
}),
|
|
33
|
+
className: listClassNames,
|
|
33
34
|
children: [children, onDelete && /* @__PURE__ */ jsx(IconButton, {
|
|
34
35
|
icon: X,
|
|
35
36
|
onClick: onDelete,
|
|
@@ -42,7 +43,7 @@ var ListEditModeItem = (props) => {
|
|
|
42
43
|
ListEditModeItem.displayName = "ListEditModeItem";
|
|
43
44
|
//#endregion
|
|
44
45
|
//#region src/components/ListEditMode/constants.ts
|
|
45
|
-
var listEditModeWrapperClassnames =
|
|
46
|
+
var listEditModeWrapperClassnames = classNames([styles[`list-edit-mode`]]);
|
|
46
47
|
//#endregion
|
|
47
48
|
//#region src/components/ListEditMode/index.ts
|
|
48
49
|
var ListEditMode_default = ListEditModeItem;
|
package/lib/ListEditMode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListEditMode.js","names":[],"sources":["../src/components/ListEditMode/ListEditMode.tsx","../src/components/ListEditMode/constants.ts","../src/components/ListEditMode/index.ts"],"sourcesContent":["import classNames from 'classnames';\n\nimport type { ExpanderListColors, ExpanderListVariant } from '../ExpanderList';\nimport type { SvgIcon } from '../Icon';\nimport type { LinkListColors, LinkListVariant } from '../LinkList';\n\nimport { IconSize } from '../../constants';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport Icon from '../Icon';\nimport X from '../Icons/X';\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 /** Aria label for delete button */\n deleteButtonAriaLabel?: string;\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 contentId?: string;\n}\n\nexport const IconButton = ({\n icon,\n color,\n onClick,\n ariaLabel,\n ariaDescribedby,\n}: {\n icon: SvgIcon;\n color: 'red' | 'blue';\n onClick?: (e?: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n ariaLabel?: string;\n ariaDescribedby?: string;\n}): React.JSX.Element => {\n const { refObject, isHovered } = usePseudoClasses<HTMLButtonElement>();\n\n return (\n <button\n ref={refObject}\n onClick={onClick}\n type=\"button\"\n className={classNames(styles['list-edit-mode__icon-button'])}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedby}\n >\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, deleteButtonAriaLabel, contentId } = 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 <li className={listClassNames}>\n {children}\n {onDelete && <IconButton icon={X} onClick={onDelete} color=\"red\" ariaLabel={deleteButtonAriaLabel} ariaDescribedby={contentId} />}\n </li>\n );\n};\n\nListEditModeItem.displayName = 'ListEditModeItem';\n\nexport default ListEditModeItem;\n","import classNames from 'classnames';\n\nimport styles from './styles.module.scss';\n\nexport const listEditModeWrapperClassnames = classNames([styles[`list-edit-mode`]]);\n","import ListEditModeItem from './ListEditMode';\nexport * from './ListEditMode';\nexport * from './constants';\nexport default ListEditModeItem;\n"],"mappings":";;;;;;;;AAgCA,IAAa,cAAc,EACzB,MACA,OACA,SACA,WACA,sBAOuB;CACvB,MAAM,EAAE,WAAW,cAAc,iBAAoC;CAErE,OACE,oBAAC,UAAD;EACE,KAAK;EACI;EACT,MAAK;EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"ListEditMode.js","names":[],"sources":["../src/components/ListEditMode/ListEditMode.tsx","../src/components/ListEditMode/constants.ts","../src/components/ListEditMode/index.ts"],"sourcesContent":["import classNames from 'classnames';\n\nimport type { ExpanderListColors, ExpanderListVariant } from '../ExpanderList';\nimport type { SvgIcon } from '../Icon';\nimport type { LinkListColors, LinkListVariant } from '../LinkList';\n\nimport { IconSize } from '../../constants';\nimport { usePseudoClasses } from '../../hooks/usePseudoClasses';\nimport Icon from '../Icon';\nimport X from '../Icons/X';\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 /** Aria label for delete button */\n deleteButtonAriaLabel?: string;\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 contentId?: string;\n}\n\nexport const IconButton = ({\n icon,\n color,\n onClick,\n ariaLabel,\n ariaDescribedby,\n}: {\n icon: SvgIcon;\n color: 'red' | 'blue';\n onClick?: (e?: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n ariaLabel?: string;\n ariaDescribedby?: string;\n}): React.JSX.Element => {\n const { refObject, isHovered } = usePseudoClasses<HTMLButtonElement>();\n\n return (\n <button\n ref={refObject}\n onClick={onClick}\n type=\"button\"\n className={classNames(styles['list-edit-mode__icon-button'])}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedby}\n >\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, deleteButtonAriaLabel, contentId } = 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 <li className={listClassNames}>\n {children}\n {onDelete && <IconButton icon={X} onClick={onDelete} color=\"red\" ariaLabel={deleteButtonAriaLabel} ariaDescribedby={contentId} />}\n </li>\n );\n};\n\nListEditModeItem.displayName = 'ListEditModeItem';\n\nexport default ListEditModeItem;\n","import classNames from 'classnames';\n\nimport styles from './styles.module.scss';\n\nexport const listEditModeWrapperClassnames = classNames([styles[`list-edit-mode`]]);\n","import ListEditModeItem from './ListEditMode';\nexport * from './ListEditMode';\nexport * from './constants';\nexport default ListEditModeItem;\n"],"mappings":";;;;;;;;AAgCA,IAAa,cAAc,EACzB,MACA,OACA,SACA,WACA,sBAOuB;CACvB,MAAM,EAAE,WAAW,cAAc,iBAAoC;CAErE,OACE,oBAAC,UAAD;EACE,KAAK;EACI;EACT,MAAK;EACL,WAAW,WAAW,OAAO,8BAA8B;EAC3D,cAAY;EACZ,oBAAkB;EAElB,UAAA,oBAAC,cAAD;GACa;GACX,SAAS;GACT,MAAM,SAAS;GACf,OAAO,UAAU,SAAS,yCAAyC;EACpE,CAAA;CACK,CAAA;AAEZ;AAEA,IAAa,oBAAoB,UAAgD;CAC/E,MAAM,EAAE,UAAU,UAAU,QAAQ,QAAQ,WAAW,UAAU,uBAAuB,cAAc;CAEtG,MAAM,iBAAiB,WAAW,OAAO,yBAAyB,SAAS,OAAO,yBAAyB,UAAU;GAClH,OAAO,gCAAgC,YAAY;GACnD,OAAO,gCAAgC,YAAY,UAAU,YAAY;CAC5E,CAAC;CAED,OACE,qBAAC,MAAD;EAAI,WAAW;EAAf,UAAA,CACG,UACA,YAAY,oBAAC,YAAD;GAAY,MAAM;GAAG,SAAS;GAAU,OAAM;GAAM,WAAW;GAAuB,iBAAiB;EAAY,CAAA,CAC9H;;AAER;AAEA,iBAAiB,cAAc;;;AC9E/B,IAAa,gCAAgC,WAAW,CAAC,OAAO,iBAAiB,CAAC;;;ACDlF,IAAA,uBAAe"}
|
package/lib/LoaderSpinner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoaderSpinner.js","names":[],"sources":["../src/components/Filter/LoaderSpinner/LoaderSpinner.tsx"],"sourcesContent":["import { useEffect, useId } from 'react';\n\nimport { useAnimate } from 'motion/react';\n\nimport type { HNDesignsystemFilter } from '../../../resources/Resources';\n\nimport { AnalyticsId, LanguageLocales } from '../../../constants';\nimport { useIsMobileBreakpoint } from '../../../hooks/useIsMobileBreakpoint';\nimport { useLanguage } from '../../../hooks/useLanguage';\nimport { getResources } from '../resourceHelper';\n\nimport styles from './styles.module.scss';\n\nexport interface LoaderSpinnerProps {\n /** Resources for the component */\n resources?: Partial<HNDesignsystemFilter>;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst LoaderSpinner: React.FC<LoaderSpinnerProps> = props => {\n const { resources, testId } = props;\n const textId = useId();\n const isMobile = useIsMobileBreakpoint();\n const svgSize = isMobile ? 14 : 19;\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n const mergedResources = {\n ...defaultResources,\n ...resources,\n };\n const [scope, animate] = useAnimate();\n\n useEffect(() => {\n if (!scope.current) {\n return;\n }\n\n animate(scope.current, { rotate: 360 }, { duration: 1.3, ease: 'linear', repeat: Infinity });\n }, []);\n\n return (\n <div\n data-testid={testId}\n data-analyticsid={AnalyticsId.Loader}\n role=\"progressbar\"\n aria-labelledby={textId}\n className={styles['loader-spinner']}\n >\n <svg\n ref={scope}\n className={styles['loader-spinner__svg']}\n width={svgSize}\n height={svgSize}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {isMobile ? (\n <path d=\"M1 7a6 6 0 1 1 6 6\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n ) : (\n <path d=\"M1.5 9.5a8 8 0 1 1 8 8\" strokeWidth=\"2.3\" strokeLinecap=\"round\" />\n )}\n </svg>\n <span id={textId} className={styles['loader-spinner__text']}>\n {mergedResources.loadingText}\n </span>\n </div>\n );\n};\n\nexport default LoaderSpinner;\n"],"mappings":";;;;;;;;;AAoBA,IAAM,iBAA8C,UAAS;CAC3D,MAAM,EAAE,WAAW,WAAW;CAC9B,MAAM,SAAS,MAAM;CACrB,MAAM,WAAW,sBAAsB;CACvC,MAAM,UAAU,WAAW,KAAK;CAChC,MAAM,EAAE,aAAa,YAA6B,gBAAgB,SAAS;CAE3E,MAAM,kBAAkB;EACtB,GAFuB,aAAa,QAEjC;EACH,GAAG;CACL;CACA,MAAM,CAAC,OAAO,WAAW,WAAW;CAEpC,gBAAgB;EACd,IAAI,CAAC,MAAM,SACT;EAGF,QAAQ,MAAM,SAAS,EAAE,QAAQ,IAAI,GAAG;GAAE,UAAU;GAAK,MAAM;GAAU,QAAQ;EAAS,CAAC;CAC7F,GAAG,CAAC,CAAC;CAEL,OACE,qBAAC,OAAD;EACE,eAAa;EACb,oBAAkB,YAAY;EAC9B,MAAK;EACL,mBAAiB;EACjB,WAAW,OAAO;
|
|
1
|
+
{"version":3,"file":"LoaderSpinner.js","names":[],"sources":["../src/components/Filter/LoaderSpinner/LoaderSpinner.tsx"],"sourcesContent":["import { useEffect, useId } from 'react';\n\nimport { useAnimate } from 'motion/react';\n\nimport type { HNDesignsystemFilter } from '../../../resources/Resources';\n\nimport { AnalyticsId, LanguageLocales } from '../../../constants';\nimport { useIsMobileBreakpoint } from '../../../hooks/useIsMobileBreakpoint';\nimport { useLanguage } from '../../../hooks/useLanguage';\nimport { getResources } from '../resourceHelper';\n\nimport styles from './styles.module.scss';\n\nexport interface LoaderSpinnerProps {\n /** Resources for the component */\n resources?: Partial<HNDesignsystemFilter>;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst LoaderSpinner: React.FC<LoaderSpinnerProps> = props => {\n const { resources, testId } = props;\n const textId = useId();\n const isMobile = useIsMobileBreakpoint();\n const svgSize = isMobile ? 14 : 19;\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n const mergedResources = {\n ...defaultResources,\n ...resources,\n };\n const [scope, animate] = useAnimate();\n\n useEffect(() => {\n if (!scope.current) {\n return;\n }\n\n animate(scope.current, { rotate: 360 }, { duration: 1.3, ease: 'linear', repeat: Infinity });\n }, []);\n\n return (\n <div\n data-testid={testId}\n data-analyticsid={AnalyticsId.Loader}\n role=\"progressbar\"\n aria-labelledby={textId}\n className={styles['loader-spinner']}\n >\n <svg\n ref={scope}\n className={styles['loader-spinner__svg']}\n width={svgSize}\n height={svgSize}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {isMobile ? (\n <path d=\"M1 7a6 6 0 1 1 6 6\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n ) : (\n <path d=\"M1.5 9.5a8 8 0 1 1 8 8\" strokeWidth=\"2.3\" strokeLinecap=\"round\" />\n )}\n </svg>\n <span id={textId} className={styles['loader-spinner__text']}>\n {mergedResources.loadingText}\n </span>\n </div>\n );\n};\n\nexport default LoaderSpinner;\n"],"mappings":";;;;;;;;;AAoBA,IAAM,iBAA8C,UAAS;CAC3D,MAAM,EAAE,WAAW,WAAW;CAC9B,MAAM,SAAS,MAAM;CACrB,MAAM,WAAW,sBAAsB;CACvC,MAAM,UAAU,WAAW,KAAK;CAChC,MAAM,EAAE,aAAa,YAA6B,gBAAgB,SAAS;CAE3E,MAAM,kBAAkB;EACtB,GAFuB,aAAa,QAEjC;EACH,GAAG;CACL;CACA,MAAM,CAAC,OAAO,WAAW,WAAW;CAEpC,gBAAgB;EACd,IAAI,CAAC,MAAM,SACT;EAGF,QAAQ,MAAM,SAAS,EAAE,QAAQ,IAAI,GAAG;GAAE,UAAU;GAAK,MAAM;GAAU,QAAQ;EAAS,CAAC;CAC7F,GAAG,CAAC,CAAC;CAEL,OACE,qBAAC,OAAD;EACE,eAAa;EACb,oBAAkB,YAAY;EAC9B,MAAK;EACL,mBAAiB;EACjB,WAAW,OAAO;EALpB,UAAA,CAOE,oBAAC,OAAD;GACE,KAAK;GACL,WAAW,OAAO;GAClB,OAAO;GACP,QAAQ;GACR,MAAK;GACL,OAAM;GAEL,UAAA,WACC,oBAAC,QAAD;IAAM,GAAE;IAAqB,aAAY;IAAI,eAAc;GAAS,CAAA,IAEpE,oBAAC,QAAD;IAAM,GAAE;IAAyB,aAAY;IAAM,eAAc;GAAS,CAAA;EAEzE,CAAA,GACL,oBAAC,QAAD;GAAM,IAAI;GAAQ,WAAW,OAAO;GACjC,UAAA,gBAAgB;EACb,CAAA,CACH;;AAET"}
|
package/lib/MaxCharacters.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { FormOnColor } from "./constants.js";
|
|
2
|
-
import
|
|
2
|
+
import classNames from "classnames";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import styles from "./components/MaxCharacters/styles.module.scss";
|
|
5
5
|
//#region src/components/MaxCharacters/MaxCharacters.tsx
|
|
6
6
|
var MaxCharacters = ({ maxCharacters, maxText, length, onColor, maxWidth }) => {
|
|
7
7
|
const progress = length / maxCharacters;
|
|
8
|
-
const counterTextClass =
|
|
8
|
+
const counterTextClass = classNames(styles["max-characters"], {
|
|
9
9
|
[styles[`max-characters--on-dark`]]: onColor === FormOnColor.ondark,
|
|
10
10
|
[styles[`max-characters--invalid`]]: progress > 1
|
|
11
11
|
});
|
package/lib/MaxCharacters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaxCharacters.js","names":[],"sources":["../src/components/MaxCharacters/MaxCharacters.tsx"],"sourcesContent":["import classNames from 'classnames';\n\nimport { FormOnColor } from '../../constants';\n\nimport styles from './styles.module.scss';\n\ninterface MaxCharactersProps {\n /** Current input length */\n length: number;\n /** max character limit in textarea */\n maxCharacters: number;\n /** The text is displayed in the end of the text-counter */\n maxText: string;\n /** Changes the visuals of the textarea */\n onColor?: keyof typeof FormOnColor;\n /** Max width of the component */\n maxWidth?: string;\n}\n\nconst MaxCharacters: React.FC<MaxCharactersProps> = ({ maxCharacters, maxText, length, onColor, maxWidth }) => {\n const progress = length / maxCharacters;\n\n const counterTextClass = classNames(styles['max-characters'], {\n [styles[`max-characters--on-dark`]]: onColor === FormOnColor.ondark,\n [styles[`max-characters--invalid`]]: progress > 1,\n });\n\n const ariaLevel = progress > 0.95 ? 'polite' : 'off';\n\n return (\n <div aria-live={ariaLevel} aria-atomic={'true'} className={counterTextClass} style={{ maxWidth }}>\n {`${length}/${maxCharacters} ${maxText}`}\n </div>\n );\n};\n\nexport default MaxCharacters;\n"],"mappings":";;;;;AAmBA,IAAM,iBAA+C,EAAE,eAAe,SAAS,QAAQ,SAAS,eAAe;CAC7G,MAAM,WAAW,SAAS;CAE1B,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"MaxCharacters.js","names":[],"sources":["../src/components/MaxCharacters/MaxCharacters.tsx"],"sourcesContent":["import classNames from 'classnames';\n\nimport { FormOnColor } from '../../constants';\n\nimport styles from './styles.module.scss';\n\ninterface MaxCharactersProps {\n /** Current input length */\n length: number;\n /** max character limit in textarea */\n maxCharacters: number;\n /** The text is displayed in the end of the text-counter */\n maxText: string;\n /** Changes the visuals of the textarea */\n onColor?: keyof typeof FormOnColor;\n /** Max width of the component */\n maxWidth?: string;\n}\n\nconst MaxCharacters: React.FC<MaxCharactersProps> = ({ maxCharacters, maxText, length, onColor, maxWidth }) => {\n const progress = length / maxCharacters;\n\n const counterTextClass = classNames(styles['max-characters'], {\n [styles[`max-characters--on-dark`]]: onColor === FormOnColor.ondark,\n [styles[`max-characters--invalid`]]: progress > 1,\n });\n\n const ariaLevel = progress > 0.95 ? 'polite' : 'off';\n\n return (\n <div aria-live={ariaLevel} aria-atomic={'true'} className={counterTextClass} style={{ maxWidth }}>\n {`${length}/${maxCharacters} ${maxText}`}\n </div>\n );\n};\n\nexport default MaxCharacters;\n"],"mappings":";;;;;AAmBA,IAAM,iBAA+C,EAAE,eAAe,SAAS,QAAQ,SAAS,eAAe;CAC7G,MAAM,WAAW,SAAS;CAE1B,MAAM,mBAAmB,WAAW,OAAO,mBAAmB;GAC3D,OAAO,6BAA6B,YAAY,YAAY;GAC5D,OAAO,6BAA6B,WAAW;CAClD,CAAC;CAID,OACE,oBAAC,OAAD;EAAK,aAHW,WAAW,MAAO,WAAW;EAGlB,eAAa;EAAQ,WAAW;EAAkB,OAAO,EAAE,SAAS;EAC5F,UAAA,GAAG,OAAO,GAAG,cAAc,GAAG;CAC5B,CAAA;AAET"}
|
package/lib/PanelTitle.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import Title_default from "./components/Title/index.js";
|
|
2
2
|
import { t as Highlighter_default } from "./Highlighter.js";
|
|
3
|
-
import
|
|
3
|
+
import classNames from "classnames";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import styles from "./components/Panel/PanelTitle/styles.module.scss";
|
|
6
6
|
//#region src/components/Panel/PanelTitle/PanelTitle.tsx
|
|
7
7
|
var PanelTitle = (props) => {
|
|
8
8
|
const { testId, icon, badge, title, titleMarkup = "h3", highlightText } = props;
|
|
9
9
|
return /* @__PURE__ */ jsxs("div", {
|
|
10
|
-
className:
|
|
10
|
+
className: classNames(styles["paneltitle"], { [styles["paneltitle--has-icon"]]: icon }),
|
|
11
11
|
"data-testid": testId,
|
|
12
12
|
children: [icon && /* @__PURE__ */ jsx("div", {
|
|
13
13
|
className: styles["paneltitle__icon"],
|
package/lib/PanelTitle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelTitle.js","names":[],"sources":["../src/components/Panel/PanelTitle/PanelTitle.tsx","../src/components/Panel/PanelTitle/index.ts"],"sourcesContent":["import classNames from 'classnames';\n\nimport Highlighter from '../../Highlighter';\nimport Title from '../../Title';\n\nimport styles from './styles.module.scss';\n\nexport interface PanelTitleProps {\n /** Badge displayed in title */\n badge?: React.ReactNode;\n /** Icon displayed in title. Only IconSize Small is supported */\n icon?: React.ReactNode;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Title text */\n title: string | React.ReactNode;\n /** Title HTML markup */\n titleMarkup?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n /** Highlights text in title and content. Used for search results */\n highlightText?: string;\n}\n\nconst PanelTitle: React.FC<PanelTitleProps> = (props: PanelTitleProps) => {\n const { testId, icon, badge, title, titleMarkup = 'h3', highlightText } = props;\n return (\n <div className={classNames(styles['paneltitle'], { [styles['paneltitle--has-icon']]: icon })} data-testid={testId}>\n {icon && <div className={styles['paneltitle__icon']}>{icon}</div>}\n {title && (\n <div className={styles['paneltitle__title']}>\n <Title appearance=\"title3\" htmlMarkup={titleMarkup}>\n <Highlighter searchText={highlightText}>{title}</Highlighter>\n </Title>\n {badge && <div className={styles['paneltitle__badge']}>{badge}</div>}\n </div>\n )}\n </div>\n );\n};\n\nexport default PanelTitle;\n","import PanelTitle from './PanelTitle';\nexport * from './PanelTitle';\nexport default PanelTitle;\n"],"mappings":";;;;;;AAsBA,IAAM,cAAyC,UAA2B;CACxE,MAAM,EAAE,QAAQ,MAAM,OAAO,OAAO,cAAc,MAAM,kBAAkB;CAC1E,OACE,qBAAC,OAAD;EAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"PanelTitle.js","names":[],"sources":["../src/components/Panel/PanelTitle/PanelTitle.tsx","../src/components/Panel/PanelTitle/index.ts"],"sourcesContent":["import classNames from 'classnames';\n\nimport Highlighter from '../../Highlighter';\nimport Title from '../../Title';\n\nimport styles from './styles.module.scss';\n\nexport interface PanelTitleProps {\n /** Badge displayed in title */\n badge?: React.ReactNode;\n /** Icon displayed in title. Only IconSize Small is supported */\n icon?: React.ReactNode;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Title text */\n title: string | React.ReactNode;\n /** Title HTML markup */\n titleMarkup?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n /** Highlights text in title and content. Used for search results */\n highlightText?: string;\n}\n\nconst PanelTitle: React.FC<PanelTitleProps> = (props: PanelTitleProps) => {\n const { testId, icon, badge, title, titleMarkup = 'h3', highlightText } = props;\n return (\n <div className={classNames(styles['paneltitle'], { [styles['paneltitle--has-icon']]: icon })} data-testid={testId}>\n {icon && <div className={styles['paneltitle__icon']}>{icon}</div>}\n {title && (\n <div className={styles['paneltitle__title']}>\n <Title appearance=\"title3\" htmlMarkup={titleMarkup}>\n <Highlighter searchText={highlightText}>{title}</Highlighter>\n </Title>\n {badge && <div className={styles['paneltitle__badge']}>{badge}</div>}\n </div>\n )}\n </div>\n );\n};\n\nexport default PanelTitle;\n","import PanelTitle from './PanelTitle';\nexport * from './PanelTitle';\nexport default PanelTitle;\n"],"mappings":";;;;;;AAsBA,IAAM,cAAyC,UAA2B;CACxE,MAAM,EAAE,QAAQ,MAAM,OAAO,OAAO,cAAc,MAAM,kBAAkB;CAC1E,OACE,qBAAC,OAAD;EAAK,WAAW,WAAW,OAAO,eAAe,GAAG,OAAO,0BAA0B,KAAK,CAAC;EAAG,eAAa;EAA3G,UAAA,CACG,QAAQ,oBAAC,OAAD;GAAK,WAAW,OAAO;GAAsB,UAAA;EAAU,CAAA,GAC/D,SACC,qBAAC,OAAD;GAAK,WAAW,OAAO;GAAvB,UAAA,CACE,oBAAC,eAAD;IAAO,YAAW;IAAS,YAAY;IACrC,UAAA,oBAAC,qBAAD;KAAa,YAAY;KAAgB,UAAA;IAAmB,CAAA;GACvD,CAAA,GACN,SAAS,oBAAC,OAAD;IAAK,WAAW,OAAO;IAAuB,UAAA;GAAW,CAAA,CAChE;EAEJ,CAAA,CAAA;;AAET;;;ACnCA,IAAA,qBAAe"}
|