@norges-domstoler/dds-components 5.2.0-beta.2 → 5.3.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/README.md +14 -3
- package/dist/cjs/components/DescriptionList/DescriptionList.tokens.d.ts +70 -0
- package/dist/cjs/components/InternalHeader/InternalHeader.styles.d.ts +1 -1
- package/dist/cjs/components/InternalHeader/InternalHeader.tokens.d.ts +39 -27
- package/dist/cjs/components/Modal/Modal.tokens.d.ts +0 -6
- package/dist/cjs/components/Modal/ModalBody.d.ts +6 -1
- package/dist/cjs/components/OverflowMenu/OverflowMenu.tokens.d.ts +25 -10
- package/dist/cjs/components/ScrollableContainer/ScrollableContainer.d.ts +7 -0
- package/dist/cjs/components/ScrollableContainer/ScrollableContainer.stories.d.ts +15 -0
- package/dist/cjs/components/ScrollableContainer/ScrollableContainer.tokens.d.ts +25 -0
- package/dist/cjs/components/ScrollableContainer/Scrollbar.d.ts +7 -0
- package/dist/cjs/components/ScrollableContainer/index.d.ts +3 -0
- package/dist/cjs/components/ScrollableContainer/scrollbarStyling.d.ts +26 -0
- package/dist/cjs/components/Select/Select.tokens.d.ts +0 -3
- package/dist/cjs/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/cjs/helpers/styling/index.d.ts +0 -1
- package/dist/cjs/icons/tsx/closeSmall.d.ts +2 -0
- package/dist/cjs/icons/tsx/index.d.ts +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1322 -1100
- package/dist/components/Card/CardAccordion/CardAccordion.js +3 -8
- package/dist/components/Checkbox/Checkbox.js +3 -7
- package/dist/components/Checkbox/CheckboxGroup.js +3 -7
- package/dist/components/Datepicker/Datepicker.js +3 -7
- package/dist/components/DescriptionList/DescriptionList.js +6 -3
- package/dist/components/DescriptionList/DescriptionList.tokens.d.ts +70 -0
- package/dist/components/DescriptionList/DescriptionList.tokens.js +60 -0
- package/dist/components/DescriptionList/DescriptionListDesc.js +2 -2
- package/dist/components/DescriptionList/DescriptionListGroup.js +4 -4
- package/dist/components/Drawer/Drawer.js +15 -17
- package/dist/components/Drawer/DrawerGroup.js +7 -12
- package/dist/components/InternalHeader/InternalHeader.js +2 -2
- package/dist/components/InternalHeader/InternalHeader.styles.d.ts +1 -1
- package/dist/components/InternalHeader/InternalHeader.styles.js +17 -11
- package/dist/components/InternalHeader/InternalHeader.tokens.d.ts +39 -27
- package/dist/components/InternalHeader/InternalHeader.tokens.js +48 -80
- package/dist/components/InternalHeader/NavigationItem.js +4 -2
- package/dist/components/Modal/Modal.js +3 -9
- package/dist/components/Modal/Modal.tokens.d.ts +0 -6
- package/dist/components/Modal/Modal.tokens.js +0 -10
- package/dist/components/Modal/ModalBody.d.ts +6 -1
- package/dist/components/Modal/ModalBody.js +13 -13
- package/dist/components/OverflowMenu/OverflowMenu.js +6 -4
- package/dist/components/OverflowMenu/OverflowMenu.tokens.d.ts +25 -10
- package/dist/components/OverflowMenu/OverflowMenu.tokens.js +33 -45
- package/dist/components/OverflowMenu/OverflowMenuGroup.js +3 -7
- package/dist/components/OverflowMenu/OverflowMenuItem.js +7 -3
- package/dist/components/Pagination/Pagination.js +1 -1
- package/dist/components/Popover/PopoverGroup.js +3 -7
- package/dist/components/RadioButton/RadioButton.js +3 -8
- package/dist/components/RadioButton/RadioButtonGroup.js +3 -6
- package/dist/components/ScrollableContainer/ScrollableContainer.d.ts +7 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.js +47 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.stories.d.ts +15 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.tokens.d.ts +25 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.tokens.js +36 -0
- package/dist/components/ScrollableContainer/Scrollbar.d.ts +7 -0
- package/dist/components/ScrollableContainer/Scrollbar.js +178 -0
- package/dist/components/ScrollableContainer/index.d.ts +3 -0
- package/dist/components/ScrollableContainer/scrollbarStyling.d.ts +26 -0
- package/dist/components/ScrollableContainer/scrollbarStyling.js +40 -0
- package/dist/components/Search/Search.js +3 -7
- package/dist/components/Select/Select.js +41 -10
- package/dist/components/Select/Select.styles.js +7 -4
- package/dist/components/Select/Select.tokens.d.ts +0 -3
- package/dist/components/Select/Select.tokens.js +6 -18
- package/dist/components/Spinner/Spinner.js +3 -8
- package/dist/components/Table/SortCell.js +1 -1
- package/dist/components/Table/Table.js +2 -2
- package/dist/components/Table/TableWrapper.js +3 -3
- package/dist/components/Tabs/TabList.js +4 -7
- package/dist/components/Tabs/Tabs.js +11 -13
- package/dist/components/TextInput/CharCounter.js +3 -7
- package/dist/components/TextInput/TextInput.js +3 -6
- package/dist/components/TextInput/TextInput.styles.js +2 -2
- package/dist/components/TextInput/TextInput.tokens.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.js +3 -7
- package/dist/components/ToggleButton/ToggleButtonGroup.js +3 -7
- package/dist/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.js +10 -14
- package/dist/helpers/styling/focusVisible.js +3 -2
- package/dist/helpers/styling/index.d.ts +0 -1
- package/dist/icons/tsx/closeSmall.d.ts +2 -0
- package/dist/icons/tsx/closeSmall.js +25 -0
- package/dist/icons/tsx/index.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/package.json +2 -4
- package/dist/cjs/components/DescriptionList/DescriptionListDesc.tokens.d.ts +0 -7
- package/dist/cjs/components/DescriptionList/DescriptionListGroup.tokens.d.ts +0 -4
- package/dist/cjs/components/DescriptionList/DescriptionListTerm.tokens.d.ts +0 -13
- package/dist/cjs/helpers/styling/scrollbarStyling.d.ts +0 -3
- package/dist/components/DescriptionList/DescriptionListDesc.tokens.d.ts +0 -7
- package/dist/components/DescriptionList/DescriptionListDesc.tokens.js +0 -22
- package/dist/components/DescriptionList/DescriptionListGroup.tokens.d.ts +0 -4
- package/dist/components/DescriptionList/DescriptionListGroup.tokens.js +0 -11
- package/dist/components/DescriptionList/DescriptionListTerm.tokens.d.ts +0 -13
- package/dist/components/DescriptionList/DescriptionListTerm.tokens.js +0 -27
- package/dist/helpers/styling/scrollbarStyling.d.ts +0 -3
- package/dist/helpers/styling/scrollbarStyling.js +0 -8
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { __rest } from 'tslib';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useRef } from 'react';
|
|
4
|
+
import styled from 'styled-components';
|
|
5
|
+
import { Scrollbar } from './Scrollbar.js';
|
|
6
|
+
import { scrollbarTokens } from './ScrollableContainer.tokens.js';
|
|
7
|
+
import { focusVisibleTransitionValue, focusVisible } from '../../helpers/styling/focusVisible.js';
|
|
8
|
+
import { getBaseHTMLProps } from '../../types/BaseComponentProps.js';
|
|
9
|
+
|
|
10
|
+
var track = scrollbarTokens.track,
|
|
11
|
+
content = scrollbarTokens.content,
|
|
12
|
+
outerContainer = scrollbarTokens.outerContainer;
|
|
13
|
+
var StyledScrollableContainer = styled.div.withConfig({
|
|
14
|
+
displayName: "ScrollableContainer__StyledScrollableContainer",
|
|
15
|
+
componentId: "sc-t0dczu-0"
|
|
16
|
+
})(["grid-template:auto / 1fr ", ";overflow:hidden;position:relative;display:grid;padding:", ";"], track.width, outerContainer.padding);
|
|
17
|
+
var Content = styled.div.withConfig({
|
|
18
|
+
displayName: "ScrollableContainer__Content",
|
|
19
|
+
componentId: "sc-t0dczu-1"
|
|
20
|
+
})(["height:", ";overflow:auto;scrollbar-width:none;::-webkit-scrollbar{display:none;}padding-right:", ";@media (prefers-reduced-motion:no-preference){transition:", ";}:focus-visible,.focus-visible{outline:", ";outline-offset:", ";}"], function (_ref) {
|
|
21
|
+
var height = _ref.height;
|
|
22
|
+
return height;
|
|
23
|
+
}, content.paddingRight, focusVisibleTransitionValue, focusVisible.outline, focusVisible.outlineOffset);
|
|
24
|
+
var ScrollableContainer = function ScrollableContainer(props) {
|
|
25
|
+
var children = props.children,
|
|
26
|
+
id = props.id,
|
|
27
|
+
className = props.className,
|
|
28
|
+
_props$contentHeight = props.contentHeight,
|
|
29
|
+
contentHeight = _props$contentHeight === void 0 ? '90vh' : _props$contentHeight,
|
|
30
|
+
htmlProps = props.htmlProps,
|
|
31
|
+
rest = __rest(props, ["children", "id", "className", "contentHeight", "htmlProps"]);
|
|
32
|
+
|
|
33
|
+
var ref = useRef(null);
|
|
34
|
+
return jsxs(StyledScrollableContainer, Object.assign({}, getBaseHTMLProps(id, className, htmlProps, rest), {
|
|
35
|
+
children: [jsx(Content, Object.assign({
|
|
36
|
+
height: contentHeight,
|
|
37
|
+
ref: ref,
|
|
38
|
+
tabIndex: 0
|
|
39
|
+
}, {
|
|
40
|
+
children: children
|
|
41
|
+
})), jsx(Scrollbar, {
|
|
42
|
+
contentRef: ref
|
|
43
|
+
})]
|
|
44
|
+
}));
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { ScrollableContainer };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ScrollableContainerProps } from '.';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
title: string;
|
|
4
|
+
component: (props: ScrollableContainerProps) => JSX.Element;
|
|
5
|
+
argTypes: {
|
|
6
|
+
contentHeight: {
|
|
7
|
+
control: {
|
|
8
|
+
type: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
14
|
+
export declare const Default: (args: ScrollableContainerProps) => JSX.Element;
|
|
15
|
+
export declare const JustScrollbar: () => JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const scrollbarWidthNumberPx = 10;
|
|
2
|
+
export declare const scrollbarTokens: {
|
|
3
|
+
minThumbHeightPx: number;
|
|
4
|
+
track: {
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
borderRadius: string;
|
|
7
|
+
width: string;
|
|
8
|
+
};
|
|
9
|
+
thumb: {
|
|
10
|
+
base: {
|
|
11
|
+
backgroundColor: string;
|
|
12
|
+
borderRadius: string;
|
|
13
|
+
width: string;
|
|
14
|
+
};
|
|
15
|
+
hover: {
|
|
16
|
+
backgroundColor: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
content: {
|
|
20
|
+
paddingRight: string;
|
|
21
|
+
};
|
|
22
|
+
outerContainer: {
|
|
23
|
+
padding: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ddsBaseTokens } from '@norges-domstoler/dds-design-tokens';
|
|
2
|
+
|
|
3
|
+
var scrollbarWidthNumberPx = 10;
|
|
4
|
+
var scrollbarWidth = "".concat(scrollbarWidthNumberPx, "px");
|
|
5
|
+
var colors = ddsBaseTokens.colors,
|
|
6
|
+
spacing = ddsBaseTokens.spacing;
|
|
7
|
+
var track = {
|
|
8
|
+
backgroundColor: 'transparent',
|
|
9
|
+
borderRadius: '100px',
|
|
10
|
+
width: scrollbarWidth
|
|
11
|
+
};
|
|
12
|
+
var thumb = {
|
|
13
|
+
base: {
|
|
14
|
+
backgroundColor: colors.DdsColorPrimaryDarkest.slice(0, -2) + '0.35)',
|
|
15
|
+
borderRadius: '100px',
|
|
16
|
+
width: scrollbarWidth
|
|
17
|
+
},
|
|
18
|
+
hover: {
|
|
19
|
+
backgroundColor: colors.DdsColorPrimaryDarkest.slice(0, -2) + '0.5)'
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var content = {
|
|
23
|
+
paddingRight: spacing.SizesDdsSpacingLocalX05
|
|
24
|
+
};
|
|
25
|
+
var outerContainer = {
|
|
26
|
+
padding: spacing.SizesDdsSpacingLocalX025
|
|
27
|
+
};
|
|
28
|
+
var scrollbarTokens = {
|
|
29
|
+
minThumbHeightPx: 15,
|
|
30
|
+
track: track,
|
|
31
|
+
thumb: thumb,
|
|
32
|
+
content: content,
|
|
33
|
+
outerContainer: outerContainer
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { scrollbarTokens, scrollbarWidthNumberPx };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export declare type ScrollbarProps = BaseComponentProps<HTMLDivElement, {
|
|
4
|
+
/** Ref til container med innholdet som skal scrolles. */
|
|
5
|
+
contentRef?: RefObject<HTMLDivElement>;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const Scrollbar: (props: ScrollbarProps) => JSX.Element | null;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { __rest } from 'tslib';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import { useRef, useState, useCallback, useEffect } from 'react';
|
|
5
|
+
import styled from 'styled-components';
|
|
6
|
+
import { scrollbarTokens } from './ScrollableContainer.tokens.js';
|
|
7
|
+
import { getBaseHTMLProps } from '../../types/BaseComponentProps.js';
|
|
8
|
+
|
|
9
|
+
var track = scrollbarTokens.track,
|
|
10
|
+
thumb = scrollbarTokens.thumb,
|
|
11
|
+
minThumbHeightPx = scrollbarTokens.minThumbHeightPx;
|
|
12
|
+
var ScrollbarOuterWrapper = styled.div.withConfig({
|
|
13
|
+
displayName: "Scrollbar__ScrollbarOuterWrapper",
|
|
14
|
+
componentId: "sc-mphi5n-0"
|
|
15
|
+
})([""]);
|
|
16
|
+
var ScrollbarElements = styled.div.withConfig({
|
|
17
|
+
displayName: "Scrollbar__ScrollbarElements",
|
|
18
|
+
componentId: "sc-mphi5n-1"
|
|
19
|
+
})(["display:block;height:100%;position:relative;display:grid;justify-items:center;"]);
|
|
20
|
+
var Track = styled.div.withConfig({
|
|
21
|
+
displayName: "Scrollbar__Track",
|
|
22
|
+
componentId: "sc-mphi5n-2"
|
|
23
|
+
})(["bottom:0;top:0;position:absolute;background-color:", ";border-radius:", ";width:", ";"], track.backgroundColor, track.borderRadius, track.width);
|
|
24
|
+
var Thumb = styled.div.withConfig({
|
|
25
|
+
displayName: "Scrollbar__Thumb",
|
|
26
|
+
componentId: "sc-mphi5n-3"
|
|
27
|
+
})(["position:absolute;background-color:", ";border-radius:", ";width:", ";transition:background-color 0.2s;&:hover{background-color:", ";}"], thumb.base.backgroundColor, thumb.base.borderRadius, thumb.base.width, thumb.hover.backgroundColor);
|
|
28
|
+
var Scrollbar = function Scrollbar(props) {
|
|
29
|
+
var id = props.id,
|
|
30
|
+
className = props.className,
|
|
31
|
+
htmlProps = props.htmlProps,
|
|
32
|
+
contentRef = props.contentRef,
|
|
33
|
+
rest = __rest(props, ["id", "className", "htmlProps", "contentRef"]);
|
|
34
|
+
|
|
35
|
+
var trackRef = useRef(null);
|
|
36
|
+
var thumbRef = useRef(null);
|
|
37
|
+
|
|
38
|
+
var _useState = useState(minThumbHeightPx),
|
|
39
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
40
|
+
thumbHeight = _useState2[0],
|
|
41
|
+
setThumbHeight = _useState2[1];
|
|
42
|
+
|
|
43
|
+
var _useState3 = useState(true),
|
|
44
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
45
|
+
isScrollable = _useState4[0],
|
|
46
|
+
setIsScrollable = _useState4[1];
|
|
47
|
+
|
|
48
|
+
var _useState5 = useState(0),
|
|
49
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
50
|
+
thumbTop = _useState6[0],
|
|
51
|
+
setThumbTop = _useState6[1];
|
|
52
|
+
|
|
53
|
+
var observer = useRef(null);
|
|
54
|
+
|
|
55
|
+
var _useState7 = useState(0),
|
|
56
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
57
|
+
scrollStartPosition = _useState8[0],
|
|
58
|
+
setScrollStartPosition = _useState8[1];
|
|
59
|
+
|
|
60
|
+
var _useState9 = useState(0),
|
|
61
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
62
|
+
initialScrollTop = _useState10[0],
|
|
63
|
+
setInitialScrollTop = _useState10[1];
|
|
64
|
+
|
|
65
|
+
var _useState11 = useState(false),
|
|
66
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
67
|
+
isDragging = _useState12[0],
|
|
68
|
+
setIsDragging = _useState12[1];
|
|
69
|
+
|
|
70
|
+
function handleResize(ref, trackSize) {
|
|
71
|
+
var clientHeight = ref.clientHeight,
|
|
72
|
+
scrollHeight = ref.scrollHeight;
|
|
73
|
+
setIsScrollable(clientHeight !== scrollHeight);
|
|
74
|
+
setThumbHeight(Math.max(clientHeight / scrollHeight * trackSize, minThumbHeightPx));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var handleTrackClick = useCallback(function (e) {
|
|
78
|
+
if (contentRef && contentRef.current) {
|
|
79
|
+
var trackCurrent = trackRef.current;
|
|
80
|
+
var contentCurrent = contentRef.current;
|
|
81
|
+
|
|
82
|
+
if (trackCurrent && contentCurrent) {
|
|
83
|
+
var clientY = e.clientY;
|
|
84
|
+
var target = e.target;
|
|
85
|
+
var rect = target.getBoundingClientRect();
|
|
86
|
+
var trackTop = rect.top;
|
|
87
|
+
var thumbOffset = -(thumbHeight / 2);
|
|
88
|
+
var clickRatio = (clientY - trackTop + thumbOffset) / trackCurrent.clientHeight;
|
|
89
|
+
var scrollAmount = Math.floor(clickRatio * contentCurrent.scrollHeight);
|
|
90
|
+
contentCurrent.scrollTo({
|
|
91
|
+
top: scrollAmount,
|
|
92
|
+
behavior: 'smooth'
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}, [thumbHeight]);
|
|
97
|
+
var handleThumbPositioning = useCallback(function () {
|
|
98
|
+
console.log('positioning');
|
|
99
|
+
|
|
100
|
+
if (!(contentRef === null || contentRef === void 0 ? void 0 : contentRef.current) || !trackRef.current || !thumbRef.current) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
var _contentRef$current = contentRef.current,
|
|
105
|
+
contentTop = _contentRef$current.scrollTop,
|
|
106
|
+
contentHeight = _contentRef$current.scrollHeight;
|
|
107
|
+
var clientHeight = trackRef.current.clientHeight;
|
|
108
|
+
var newTop = +contentTop / +contentHeight * clientHeight;
|
|
109
|
+
newTop = Math.min(newTop, clientHeight - thumbHeight);
|
|
110
|
+
setThumbTop(newTop);
|
|
111
|
+
}, []);
|
|
112
|
+
useEffect(function () {
|
|
113
|
+
if (contentRef && contentRef.current && trackRef.current) {
|
|
114
|
+
var ref = contentRef.current;
|
|
115
|
+
var clientHeight = trackRef.current.clientHeight;
|
|
116
|
+
observer.current = new ResizeObserver(function () {
|
|
117
|
+
handleResize(ref, clientHeight);
|
|
118
|
+
});
|
|
119
|
+
observer.current.observe(ref);
|
|
120
|
+
ref.addEventListener('scroll', handleThumbPositioning);
|
|
121
|
+
return function () {
|
|
122
|
+
var _a;
|
|
123
|
+
|
|
124
|
+
(_a = observer.current) === null || _a === void 0 ? void 0 : _a.unobserve(ref);
|
|
125
|
+
ref.removeEventListener('scroll', handleThumbPositioning);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}, []);
|
|
129
|
+
var handleThumbMousedown = useCallback(function (e) {
|
|
130
|
+
setScrollStartPosition(e.clientY);
|
|
131
|
+
if (contentRef && contentRef.current) setInitialScrollTop(contentRef.current.scrollTop);
|
|
132
|
+
setIsDragging(true);
|
|
133
|
+
}, []);
|
|
134
|
+
var handleThumbMouseup = useCallback(function () {
|
|
135
|
+
if (isDragging) {
|
|
136
|
+
setIsDragging(false);
|
|
137
|
+
}
|
|
138
|
+
}, [isDragging]);
|
|
139
|
+
var handleThumbMousemove = useCallback(function (e) {
|
|
140
|
+
if (contentRef && contentRef.current) {
|
|
141
|
+
if (isDragging) {
|
|
142
|
+
var _contentRef$current2 = contentRef.current,
|
|
143
|
+
contentScrollHeight = _contentRef$current2.scrollHeight,
|
|
144
|
+
contentOffsetHeight = _contentRef$current2.offsetHeight;
|
|
145
|
+
var deltaY = (e.clientY - scrollStartPosition) * (contentOffsetHeight / thumbHeight);
|
|
146
|
+
var newScrollTop = Math.min(initialScrollTop + deltaY, contentScrollHeight - contentOffsetHeight);
|
|
147
|
+
contentRef.current.scrollTop = newScrollTop;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}, [isDragging, scrollStartPosition, thumbHeight]);
|
|
151
|
+
useEffect(function () {
|
|
152
|
+
document.addEventListener('mousemove', handleThumbMousemove);
|
|
153
|
+
document.addEventListener('mouseup', handleThumbMouseup);
|
|
154
|
+
document.addEventListener('mouseleave', handleThumbMouseup);
|
|
155
|
+
return function () {
|
|
156
|
+
document.removeEventListener('mousemove', handleThumbMousemove);
|
|
157
|
+
document.removeEventListener('mouseup', handleThumbMouseup);
|
|
158
|
+
document.removeEventListener('mouseleave', handleThumbMouseup);
|
|
159
|
+
};
|
|
160
|
+
}, [handleThumbMousemove, handleThumbMouseup]);
|
|
161
|
+
return isScrollable ? jsx(ScrollbarOuterWrapper, Object.assign({}, getBaseHTMLProps(id, className, htmlProps, rest), {
|
|
162
|
+
children: jsxs(ScrollbarElements, {
|
|
163
|
+
children: [jsx(Track, {
|
|
164
|
+
ref: trackRef,
|
|
165
|
+
onClick: handleTrackClick
|
|
166
|
+
}), jsx(Thumb, {
|
|
167
|
+
style: {
|
|
168
|
+
height: thumbHeight,
|
|
169
|
+
top: thumbTop
|
|
170
|
+
},
|
|
171
|
+
ref: thumbRef,
|
|
172
|
+
onMouseDown: handleThumbMousedown
|
|
173
|
+
})]
|
|
174
|
+
})
|
|
175
|
+
})) : null;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export { Scrollbar };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSS-in-JS scrollbar styling til bruk der det ikke passer å bruke dedikerte komponenter. Inkluderer styling for webkit pseudo-elementer og for Firefox.
|
|
3
|
+
*/
|
|
4
|
+
export declare const scrollbarStyling: {
|
|
5
|
+
webkit: {
|
|
6
|
+
'&::-webkit-scrollbar': {
|
|
7
|
+
width: string;
|
|
8
|
+
height: string;
|
|
9
|
+
};
|
|
10
|
+
'&::-webkit-scrollbar-track': {
|
|
11
|
+
background: string;
|
|
12
|
+
borderRadius: string;
|
|
13
|
+
};
|
|
14
|
+
'&::-webkit-scrollbar-thumb': {
|
|
15
|
+
background: string;
|
|
16
|
+
borderRadius: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
'&::-webkit-scrollbar-thumb:hover': {
|
|
20
|
+
background: string;
|
|
21
|
+
};
|
|
22
|
+
firefox: {
|
|
23
|
+
scrollbarColor: string;
|
|
24
|
+
scrollbarWidth: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { scrollbarTokens } from './ScrollableContainer.tokens.js';
|
|
2
|
+
|
|
3
|
+
var thumb = scrollbarTokens.thumb,
|
|
4
|
+
track = scrollbarTokens.track;
|
|
5
|
+
/**
|
|
6
|
+
* CSS-in-JS scrollbar styling til bruk der det ikke passer å bruke dedikerte komponenter. Inkluderer styling for webkit pseudo-elementer og for Firefox.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
var scrollbarStyling = {
|
|
10
|
+
webkit: {
|
|
11
|
+
/* width */
|
|
12
|
+
'&::-webkit-scrollbar': {
|
|
13
|
+
width: track.width,
|
|
14
|
+
height: track.width
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
/* Track */
|
|
18
|
+
'&::-webkit-scrollbar-track': {
|
|
19
|
+
background: track.backgroundColor,
|
|
20
|
+
borderRadius: track.borderRadius
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
/* Handle */
|
|
24
|
+
'&::-webkit-scrollbar-thumb': {
|
|
25
|
+
background: thumb.base.backgroundColor,
|
|
26
|
+
borderRadius: thumb.base.borderRadius
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
/* Handle on hover */
|
|
31
|
+
'&::-webkit-scrollbar-thumb:hover': {
|
|
32
|
+
background: thumb.hover.backgroundColor
|
|
33
|
+
},
|
|
34
|
+
firefox: {
|
|
35
|
+
scrollbarColor: thumb.base.backgroundColor + ' ' + track.backgroundColor,
|
|
36
|
+
scrollbarWidth: 'thin'
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { scrollbarStyling };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import { __rest } from 'tslib';
|
|
3
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
-
import { forwardRef,
|
|
3
|
+
import { forwardRef, useId } from 'react';
|
|
5
4
|
import styled, { css } from 'styled-components';
|
|
6
5
|
import { searchTokens } from './Search.tokens.js';
|
|
7
6
|
import { Input as Input$1, OuterInputContainer, InputContainer } from '../../helpers/Input/Input.styles.js';
|
|
@@ -33,7 +32,6 @@ var ButtonWrapper = styled.div.withConfig({
|
|
|
33
32
|
displayName: "Search__ButtonWrapper",
|
|
34
33
|
componentId: "sc-1ax3s9s-3"
|
|
35
34
|
})([""]);
|
|
36
|
-
var nextUniqueId = 0;
|
|
37
35
|
var Search = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
38
36
|
var _a$componentSize = _a.componentSize,
|
|
39
37
|
componentSize = _a$componentSize === void 0 ? 'medium' : _a$componentSize,
|
|
@@ -46,10 +44,8 @@ var Search = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
46
44
|
ariaDescribedby = _a['aria-describedby'],
|
|
47
45
|
rest = __rest(_a, ["componentSize", "buttonProps", "name", "tip", "id", "className", "style", 'aria-describedby']);
|
|
48
46
|
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
uniqueId = _useState2[0];
|
|
52
|
-
|
|
47
|
+
var generatedId = useId();
|
|
48
|
+
var uniqueId = id !== null && id !== void 0 ? id : "".concat(generatedId, "-searchInput");
|
|
53
49
|
var hasTip = !!tip;
|
|
54
50
|
var tipId = derivativeIdGenerator(uniqueId, 'tip', tip);
|
|
55
51
|
var containerProps = {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import { __rest } from 'tslib';
|
|
3
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
-
import React, {
|
|
3
|
+
import React, { useId } from 'react';
|
|
5
4
|
import ReactSelect, { components } from 'react-select';
|
|
6
5
|
import { prefix, getCustomStyles, Wrapper, Container, Label } from './Select.styles.js';
|
|
7
6
|
import { selectTokens } from './Select.tokens.js';
|
|
8
7
|
import { CheckIcon } from '../../icons/tsx/check.js';
|
|
8
|
+
import { CloseSmallIcon } from '../../icons/tsx/closeSmall.js';
|
|
9
|
+
import { ChevronDownIcon } from '../../icons/tsx/chevronDown.js';
|
|
9
10
|
import { RequiredMarker } from '../../helpers/RequiredMarker/RequiredMarker.js';
|
|
10
11
|
import { InputMessage } from '../InputMessage/InputMessage.js';
|
|
11
12
|
import { Icon } from '../Icon/Icon.js';
|
|
@@ -14,7 +15,10 @@ import { derivativeIdGenerator, spaceSeparatedIdListGenerator } from '../../util
|
|
|
14
15
|
var DdsOption = components.Option,
|
|
15
16
|
NoOptionsMessage = components.NoOptionsMessage,
|
|
16
17
|
Input = components.Input,
|
|
17
|
-
SingleValue = components.SingleValue
|
|
18
|
+
SingleValue = components.SingleValue,
|
|
19
|
+
ClearIndicator = components.ClearIndicator,
|
|
20
|
+
DropdownIndicator = components.DropdownIndicator,
|
|
21
|
+
MultiValueRemove = components.MultiValueRemove;
|
|
18
22
|
var createSelectOptions = function createSelectOptions() {
|
|
19
23
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
20
24
|
args[_key] = arguments[_key];
|
|
@@ -32,7 +36,7 @@ var IconOption = function IconOption(props) {
|
|
|
32
36
|
return jsxs(DdsOption, Object.assign({}, props, {
|
|
33
37
|
children: [props.isSelected && jsx(Icon, {
|
|
34
38
|
icon: CheckIcon,
|
|
35
|
-
iconSize: "
|
|
39
|
+
iconSize: "medium"
|
|
36
40
|
}), props.children]
|
|
37
41
|
}));
|
|
38
42
|
};
|
|
@@ -55,6 +59,33 @@ var NoOptionsMessageCustom = function NoOptionsMessageCustom(props) {
|
|
|
55
59
|
}));
|
|
56
60
|
};
|
|
57
61
|
|
|
62
|
+
var CustomClearIndicator = function CustomClearIndicator(props) {
|
|
63
|
+
return jsx(ClearIndicator, Object.assign({}, props, {
|
|
64
|
+
children: jsx(Icon, {
|
|
65
|
+
icon: CloseSmallIcon,
|
|
66
|
+
iconSize: "medium"
|
|
67
|
+
})
|
|
68
|
+
}));
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
var CustomMultiValueRemove = function CustomMultiValueRemove(props) {
|
|
72
|
+
return jsx(MultiValueRemove, Object.assign({}, props, {
|
|
73
|
+
children: jsx(Icon, {
|
|
74
|
+
icon: CloseSmallIcon,
|
|
75
|
+
iconSize: "medium"
|
|
76
|
+
})
|
|
77
|
+
}));
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
var CustomDropdownIndicator = function CustomDropdownIndicator(props) {
|
|
81
|
+
return jsx(DropdownIndicator, Object.assign({}, props, {
|
|
82
|
+
children: jsx(Icon, {
|
|
83
|
+
icon: ChevronDownIcon,
|
|
84
|
+
iconSize: "medium"
|
|
85
|
+
})
|
|
86
|
+
}));
|
|
87
|
+
};
|
|
88
|
+
|
|
58
89
|
function escapeRegexCharacters(text) {
|
|
59
90
|
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
|
|
60
91
|
}
|
|
@@ -64,7 +95,6 @@ function searchFilter(text, search) {
|
|
|
64
95
|
var searchFilterRegex = new RegExp("(?:^|[\\s-(])".concat(escapeRegexCharacters(search.toLowerCase())));
|
|
65
96
|
return searchFilterRegex.test(text.toLowerCase());
|
|
66
97
|
}
|
|
67
|
-
var nextUniqueId = 0;
|
|
68
98
|
|
|
69
99
|
var SelectInner = function SelectInner(_a, ref) {
|
|
70
100
|
var id = _a.id,
|
|
@@ -91,10 +121,8 @@ var SelectInner = function SelectInner(_a, ref) {
|
|
|
91
121
|
customSingleValueElement = _a.customSingleValueElement,
|
|
92
122
|
rest = __rest(_a, ["id", "label", "errorMessage", "tip", "required", "readOnly", "options", "isMulti", "value", "defaultValue", "width", "closeMenuOnSelect", "className", "style", "isDisabled", "isClearable", "placeholder", "customOptionElement", "customSingleValueElement"]);
|
|
93
123
|
|
|
94
|
-
var
|
|
95
|
-
|
|
96
|
-
uniqueId = _useState2[0];
|
|
97
|
-
|
|
124
|
+
var generatedId = useId();
|
|
125
|
+
var uniqueId = id !== null && id !== void 0 ? id : "".concat(generatedId, "-select");
|
|
98
126
|
var hasLabel = !!label;
|
|
99
127
|
var hasErrorMessage = !!errorMessage;
|
|
100
128
|
var tipId = derivativeIdGenerator(uniqueId, 'tip', tip);
|
|
@@ -143,7 +171,10 @@ var SelectInner = function SelectInner(_a, ref) {
|
|
|
143
171
|
Input: CustomInput,
|
|
144
172
|
SingleValue: customSingleValueElement ? function (props) {
|
|
145
173
|
return CustomSingleValue(props, customSingleValueElement);
|
|
146
|
-
} : SingleValue
|
|
174
|
+
} : SingleValue,
|
|
175
|
+
ClearIndicator: CustomClearIndicator,
|
|
176
|
+
DropdownIndicator: CustomDropdownIndicator,
|
|
177
|
+
MultiValueRemove: CustomMultiValueRemove
|
|
147
178
|
},
|
|
148
179
|
'aria-invalid': hasErrorMessage ? true : undefined
|
|
149
180
|
}, rest);
|
|
@@ -2,7 +2,7 @@ import styled, { css } from 'styled-components';
|
|
|
2
2
|
import { typographyTokens } from '../Typography/Typography.tokens.js';
|
|
3
3
|
import { selectTokens } from './Select.tokens.js';
|
|
4
4
|
import { Typography } from '../Typography/Typography.js';
|
|
5
|
-
import { scrollbarStyling } from '
|
|
5
|
+
import { scrollbarStyling } from '../ScrollableContainer/scrollbarStyling.js';
|
|
6
6
|
|
|
7
7
|
var prefix = 'dds-select';
|
|
8
8
|
var Label = styled(Typography).withConfig({
|
|
@@ -12,14 +12,14 @@ var Label = styled(Typography).withConfig({
|
|
|
12
12
|
var Container = styled.div.withConfig({
|
|
13
13
|
displayName: "Selectstyles__Container",
|
|
14
14
|
componentId: "sc-19jkd5s-1"
|
|
15
|
-
})(["@media (prefers-reduced-motion:no-preference){transition:box-shadow 0.2s,border-color 0.2s,background-color 0.2s;}position:relative;", "
|
|
15
|
+
})(["@media (prefers-reduced-motion:no-preference){transition:box-shadow 0.2s,border-color 0.2s,background-color 0.2s;}position:relative;", " *::selection{", "}", " &:hover{", " ", "{", "}}&:focus-within{", " ", "{", "}}", " .", "__menu-list{", " ", "}&:hover .", "__dropdown-indicator,&:focus-within .", "__dropdown-indicator{", "}", " ", ""], selectTokens.container.base, typographyTokens.selection.base, function (_ref) {
|
|
16
16
|
var hasLabel = _ref.hasLabel,
|
|
17
17
|
isMulti = _ref.isMulti;
|
|
18
18
|
return isMulti && hasLabel ? css([".", "__value-container{", "}.", "__indicators{", "}"], prefix, selectTokens.valueContainer.isMulti.withLabel.base, prefix, selectTokens.indicatorsContainer.isMulti.withLabel.base) : isMulti && !hasLabel ? css([".", "__control{", "}.", "__value-container{", "}.", "__indicators{", "}"], prefix, selectTokens.input.isMulti.noLabel.base, prefix, selectTokens.valueContainer.isMulti.noLabel.base, prefix, selectTokens.indicatorsContainer.isMulti.noLabel.base) : hasLabel ? css([".", "__value-container{", "}.", "__indicators{", "}"], prefix, selectTokens.valueContainer.withLabel.base, prefix, selectTokens.indicatorsContainer.withLabel.base) : css([".", "__control{", "}.", "__value-container{", "}.", "__indicators{", "}"], prefix, selectTokens.input.noLabel.base, prefix, selectTokens.valueContainer.noLabel.base, prefix, selectTokens.indicatorsContainer.noLabel.base);
|
|
19
19
|
}, selectTokens.container.hover.base, Label, selectTokens.label.hover.base, selectTokens.container.focus.base, Label, selectTokens.label.focus.base, function (_ref2) {
|
|
20
20
|
var errorMessage = _ref2.errorMessage;
|
|
21
21
|
return errorMessage && css(["", " &:hover{", "}&:focus-within{", "}"], selectTokens.container.danger.base, selectTokens.container.danger.hover.base, selectTokens.container.danger.focus.base);
|
|
22
|
-
}, prefix, scrollbarStyling, prefix, prefix, selectTokens.dropdownIndicator.hover.base, function (_ref3) {
|
|
22
|
+
}, prefix, scrollbarStyling.webkit, scrollbarStyling.firefox, prefix, prefix, selectTokens.dropdownIndicator.hover.base, function (_ref3) {
|
|
23
23
|
var isDisabled = _ref3.isDisabled;
|
|
24
24
|
return isDisabled && css(["cursor:not-allowed;", " &:hover{box-shadow:none;", " ", "{", "}&:hover .", "__dropdown-indicator{", "}}"], selectTokens.container.disabled.base, selectTokens.container.disabled.base, Label, selectTokens.label.base, prefix, selectTokens.dropdownIndicator.base);
|
|
25
25
|
}, function (_ref4) {
|
|
@@ -89,7 +89,7 @@ var getCustomStyles = function getCustomStyles() {
|
|
|
89
89
|
transition: 'color 0.2s, background-color 0.2s'
|
|
90
90
|
}
|
|
91
91
|
}), selectTokens.multiValueRemove.base), {
|
|
92
|
-
|
|
92
|
+
padding: 0,
|
|
93
93
|
'&:hover': Object.assign({}, selectTokens.multiValueRemove.hover.base),
|
|
94
94
|
'&:focus': {
|
|
95
95
|
backgroundColor: 'blue'
|
|
@@ -127,6 +127,9 @@ var getCustomStyles = function getCustomStyles() {
|
|
|
127
127
|
return Object.assign(Object.assign({
|
|
128
128
|
display: 'inline-flex'
|
|
129
129
|
}, selectTokens.clearIndicator.base), {
|
|
130
|
+
'@media (prefers-reduced-motion: no-preference)': {
|
|
131
|
+
transition: 'color 0.2s'
|
|
132
|
+
},
|
|
130
133
|
'&:hover': Object.assign({}, selectTokens.clearIndicator.hover.base)
|
|
131
134
|
});
|
|
132
135
|
},
|
|
@@ -8,8 +8,7 @@ var Colors = ddsBaseTokens.colors,
|
|
|
8
8
|
Spacing = ddsBaseTokens.spacing,
|
|
9
9
|
FontPackages = ddsBaseTokens.fontPackages,
|
|
10
10
|
BorderRadius = ddsBaseTokens.borderRadius,
|
|
11
|
-
Border = ddsBaseTokens.border
|
|
12
|
-
IconSizes = ddsBaseTokens.iconSizes;
|
|
11
|
+
Border = ddsBaseTokens.border;
|
|
13
12
|
var textDefault = ddsReferenceTokens.textDefault;
|
|
14
13
|
var multiValueContainerMinHeight = "".concat(Spacing.SizesDdsSpacingLocalX0125NumberPx * 2 + Spacing.SizesDdsSpacingLocalX025NumberPx * 2 + calculateHeightWithLineHeight(FontPackages.supportingStyle_inputtext_01.numbers.lineHeightNumber, FontPackages.supportingStyle_inputtext_01.numbers.fontSizeNumber), "px"); //custom spacing so that multiselect has same height as single value select
|
|
15
14
|
|
|
@@ -90,8 +89,7 @@ var drodownIndicatorReadOnlyBase = {
|
|
|
90
89
|
color: 'transparent'
|
|
91
90
|
};
|
|
92
91
|
var clearIndicatorBase = {
|
|
93
|
-
color: Colors.DdsColorNeutralsGray6
|
|
94
|
-
padding: " 0 ".concat(Spacing.SizesDdsSpacingLocalX025, " 0 0")
|
|
92
|
+
color: Colors.DdsColorNeutralsGray6
|
|
95
93
|
};
|
|
96
94
|
var loadingIndicatorBase = {
|
|
97
95
|
color: Colors.DdsColorNeutralsGray6,
|
|
@@ -117,13 +115,11 @@ var optionBase = Object.assign(Object.assign({
|
|
|
117
115
|
color: textDefault.textColor
|
|
118
116
|
});
|
|
119
117
|
var optionHoverBase = {
|
|
120
|
-
backgroundColor: Colors.DdsColorInteractiveLighter
|
|
121
|
-
};
|
|
122
|
-
var optionSelectedBase = Object.assign(Object.assign({
|
|
123
118
|
backgroundColor: Colors.DdsColorInteractiveLightest
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
119
|
+
};
|
|
120
|
+
var optionSelectedBase = Object.assign({
|
|
121
|
+
backgroundColor: Colors.DdsColorNeutralsWhite
|
|
122
|
+
}, FontPackages.body_sans_02.base);
|
|
127
123
|
var noOptionsMessageBase = Object.assign({
|
|
128
124
|
padding: "".concat(Spacing.SizesDdsSpacingLocalX05, " ").concat(Spacing.SizesDdsSpacingLocalX1),
|
|
129
125
|
color: Colors.DdsColorNeutralsGray6
|
|
@@ -148,17 +144,12 @@ var multiValueLabelBase = Object.assign(Object.assign({
|
|
|
148
144
|
fontWeight: 'bold'
|
|
149
145
|
});
|
|
150
146
|
var multiValueRemoveBase = {
|
|
151
|
-
padding: "".concat(Spacing.SizesDdsSpacingLocalX025),
|
|
152
147
|
color: Colors.DdsColorNeutralsGray9
|
|
153
148
|
};
|
|
154
149
|
var multiValueRemoveHoverBase = {
|
|
155
150
|
color: Colors.DdsColorNeutralsWhite,
|
|
156
151
|
backgroundColor: Colors.DdsColorInteractiveBase
|
|
157
152
|
};
|
|
158
|
-
var multiValueRemoveIconBase = {
|
|
159
|
-
height: IconSizes.DdsIconsizeSmall,
|
|
160
|
-
width: IconSizes.DdsIconsizeSmall
|
|
161
|
-
};
|
|
162
153
|
var containerDisabledBase = {
|
|
163
154
|
backgroundColor: Colors.DdsColorNeutralsGray1,
|
|
164
155
|
borderColor: Colors.DdsColorNeutralsGray5
|
|
@@ -267,9 +258,6 @@ var selectTokens = {
|
|
|
267
258
|
base: multiValueRemoveBase,
|
|
268
259
|
hover: {
|
|
269
260
|
base: multiValueRemoveHoverBase
|
|
270
|
-
},
|
|
271
|
-
icon: {
|
|
272
|
-
base: multiValueRemoveIconBase
|
|
273
261
|
}
|
|
274
262
|
},
|
|
275
263
|
indicatorsContainer: {
|