@helsenorge/designsystem-react 5.0.0-beta.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AnchorLink.js +1 -1
- package/AnchorLink.js.map +1 -1
- package/Button.js.map +1 -1
- package/CHANGELOG.md +64 -3
- package/Checkbox.js +1 -1
- package/Close.js +1 -1
- package/Close.js.map +1 -1
- package/FormGroup.js +1 -1
- package/FormGroup.js.map +1 -1
- package/FormLayout.js.map +1 -1
- package/HighlightBox.js +2 -0
- package/HighlightBox.js.map +1 -0
- package/Input.js +1 -1
- package/Input.js.map +1 -1
- package/ListHeader.js.map +1 -1
- package/ListHeaderText.js +1 -1
- package/ListHeaderText.js.map +1 -1
- package/MaxCharacters.js.map +1 -1
- package/Modal.js +1 -1
- package/Modal.js.map +1 -1
- package/Panel.js +1 -1
- package/Panel.js.map +1 -1
- package/README.md +9 -51
- package/RadioButton.js +1 -1
- package/Select.js.map +1 -1
- package/StatusDot.js +1 -1
- package/StatusDot.js.map +1 -1
- package/Table.js +1 -1
- package/Table.js.map +1 -1
- package/TableBody.js +1 -1
- package/TableBody.js.map +1 -1
- package/TableExpandedRow.js +1 -1
- package/TableExpandedRow.js.map +1 -1
- package/TableHead.js +1 -1
- package/TableHead.js.map +1 -1
- package/TableRow.js +1 -1
- package/TableRow.js.map +1 -1
- package/Textarea.js +1 -1
- package/Textarea.js.map +1 -1
- package/Title.js.map +1 -1
- package/Trigger.js +2 -0
- package/Trigger.js.map +1 -0
- package/__mocks__/useHover.d.ts +2 -0
- package/__mocks__/useHover.d.ts.map +1 -0
- package/__mocks__/useHover.js +2 -0
- package/__mocks__/useHover.js.map +1 -0
- package/__mocks__/useOutsideEvent.d.ts +2 -0
- package/__mocks__/useOutsideEvent.d.ts.map +1 -0
- package/__mocks__/useOutsideEvent.js +2 -0
- package/__mocks__/useOutsideEvent.js.map +1 -0
- package/__mocks__/useSize.d.ts +2 -0
- package/__mocks__/useSize.d.ts.map +1 -0
- package/__mocks__/useSize.js +2 -0
- package/__mocks__/useSize.js.map +1 -0
- package/__mocks__/uuid.js +1 -1
- package/__mocks__/uuid.js.map +1 -1
- package/components/AnchorLink/index.js +1 -1
- package/components/Button/index.js +1 -1
- package/components/ButtonWithModal/index.js +1 -1
- package/components/ButtonWithModal/index.js.map +1 -1
- package/components/Checkbox/styles.module.scss +13 -0
- package/components/Close/Close.d.ts +0 -2
- package/components/Close/Close.d.ts.map +1 -1
- package/components/Close/componentdata.json +1 -1
- package/components/Close/index.js +1 -1
- package/components/DictionaryTrigger/DictionaryTrigger.d.ts +22 -0
- package/components/DictionaryTrigger/DictionaryTrigger.d.ts.map +1 -0
- package/components/DictionaryTrigger/componentdata.json +1 -0
- package/components/DictionaryTrigger/index.d.ts +4 -0
- package/components/DictionaryTrigger/index.d.ts.map +1 -0
- package/components/DictionaryTrigger/index.js +2 -0
- package/components/DictionaryTrigger/index.js.map +1 -0
- package/components/DictionaryTrigger/styles.module.scss +41 -0
- package/components/DictionaryTrigger/styles.module.scss.d.ts +9 -0
- package/components/Dropdown/index.js +1 -1
- package/components/Dropdown/index.js.map +1 -1
- package/components/Dropdown/styles.module.scss +1 -0
- package/components/Duolist/index.js.map +1 -1
- package/components/Expander/index.js +1 -1
- package/components/Expander/index.js.map +1 -1
- package/components/ExpanderHierarchy/ExpanderButton.d.ts.map +1 -1
- package/components/ExpanderHierarchy/expander.module.scss +14 -7
- package/components/ExpanderHierarchy/expander.module.scss.d.ts +2 -0
- package/components/ExpanderHierarchy/index.js +1 -1
- package/components/ExpanderHierarchy/index.js.map +1 -1
- package/components/ExpanderList/index.js +1 -1
- package/components/ExpanderList/index.js.map +1 -1
- package/components/FormExample/index.js +3 -3
- package/components/FormExample/index.js.map +1 -1
- package/components/FormGroup/FormGroup.d.ts +3 -1
- package/components/FormGroup/FormGroup.d.ts.map +1 -1
- package/components/FormGroup/componentdata.json +1 -1
- package/components/HelpBubble/index.js +1 -1
- package/components/HelpBubbleExample/index.js +1 -1
- package/components/HelpBubbleExample/index.js.map +1 -1
- package/components/HelpPanel/HelpPanel.d.ts +17 -0
- package/components/HelpPanel/HelpPanel.d.ts.map +1 -0
- package/components/HelpPanel/componentdata.json +1 -0
- package/components/HelpPanel/index.d.ts +4 -0
- package/components/HelpPanel/index.d.ts.map +1 -0
- package/components/HelpPanel/index.js +2 -0
- package/components/HelpPanel/index.js.map +1 -0
- package/components/HelpPanel/styles.module.scss +5 -0
- package/components/HelpPanel/styles.module.scss.d.ts +9 -0
- package/components/HelpQuestion/HelpQuestion.d.ts +22 -0
- package/components/HelpQuestion/HelpQuestion.d.ts.map +1 -0
- package/components/HelpQuestion/componentdata.json +1 -0
- package/components/HelpQuestion/index.d.ts +4 -0
- package/components/HelpQuestion/index.d.ts.map +1 -0
- package/components/HelpQuestion/index.js +2 -0
- package/components/HelpQuestion/index.js.map +1 -0
- package/components/HelpQuestion/styles.module.scss +49 -0
- package/components/HelpQuestion/styles.module.scss.d.ts +10 -0
- package/components/HighlightBox/HighlightBox.d.ts +7 -0
- package/components/HighlightBox/HighlightBox.d.ts.map +1 -1
- package/components/HighlightBox/componentdata.json +1 -1
- package/components/HighlightBox/index.js +1 -1
- package/components/HighlightBox/index.js.map +1 -1
- package/components/HighlightBox/styles.module.scss +15 -0
- package/components/HighlightBox/styles.module.scss.d.ts +2 -0
- package/components/Label/componentdata.json +1 -1
- package/components/LinkList/index.js +1 -1
- package/components/List/index.js.map +1 -1
- package/components/ListHeader/ListHeader.d.ts +1 -0
- package/components/ListHeader/ListHeader.d.ts.map +1 -1
- package/components/ListHeader/ListHeaderText/ListHeaderText.d.ts.map +1 -1
- package/components/Loader/index.js +1 -1
- package/components/Logo/Logo.d.ts +2 -2
- package/components/Logo/Logo.d.ts.map +1 -1
- package/components/Logo/componentdata.json +1 -1
- package/components/Logo/index.js +1 -1
- package/components/Logo/index.js.map +1 -1
- package/components/Modal/index.js +1 -1
- package/components/Modal/styles.module.scss +1 -0
- package/components/NotificationPanel/NotificationPanel.d.ts +1 -1
- package/components/NotificationPanel/NotificationPanel.d.ts.map +1 -1
- package/components/NotificationPanel/componentdata.json +1 -1
- package/components/NotificationPanel/index.js +1 -1
- package/components/NotificationPanel/index.js.map +1 -1
- package/components/Panel/Panel.d.ts +3 -1
- package/components/Panel/Panel.d.ts.map +1 -1
- package/components/Panel/componentdata.json +1 -1
- package/components/Panel/index.js +1 -1
- package/components/Panel/styles.module.scss +1 -0
- package/components/PanelList/index.js +1 -1
- package/components/PanelList/index.js.map +1 -1
- package/components/PopMenu/PopMenu.d.ts.map +1 -1
- package/components/PopMenu/index.js +1 -1
- package/components/PopMenu/index.js.map +1 -1
- package/components/RadioButton/styles.module.scss +13 -0
- package/components/ServiceMessage/ServiceMessage.d.ts +6 -3
- package/components/ServiceMessage/ServiceMessage.d.ts.map +1 -1
- package/components/ServiceMessage/componentdata.json +1 -1
- package/components/ServiceMessage/index.js +1 -1
- package/components/ServiceMessage/index.js.map +1 -1
- package/components/ServiceMessage/styles.module.scss +139 -238
- package/components/ServiceMessage/styles.module.scss.d.ts +17 -34
- package/components/Slider/index.js.map +1 -1
- package/components/Step/Step.d.ts +2 -0
- package/components/Step/Step.d.ts.map +1 -1
- package/components/Step/componentdata.json +1 -1
- package/components/Step/index.js +1 -1
- package/components/Step/index.js.map +1 -1
- package/components/Step/styles.module.scss +23 -1
- package/components/Step/styles.module.scss.d.ts +5 -1
- package/components/Stepper/index.js.map +1 -1
- package/components/Table/TableExpandedRow/TableExpandedRow.d.ts +3 -1
- package/components/Table/TableExpandedRow/TableExpandedRow.d.ts.map +1 -1
- package/components/Table/TableExpandedRow/componentdata.json +1 -1
- package/components/Table/TableExpandedRow/index.js +1 -1
- package/components/Table/TableExpanderCell/index.js +1 -1
- package/components/Table/TableRow/index.js +1 -1
- package/components/Table/index.js +1 -1
- package/components/Table/styles.module.scss +2 -2
- package/components/Tag/index.js +1 -1
- package/components/Tag/index.js.map +1 -1
- package/components/Tag/styles.module.scss +0 -15
- package/components/Tile/Tile.d.ts +1 -7
- package/components/Tile/Tile.d.ts.map +1 -1
- package/components/Tile/componentdata.json +1 -1
- package/components/Tile/index.js +1 -1
- package/components/Tile/index.js.map +1 -1
- package/components/Tile/styles.module.scss +0 -4
- package/components/Tile/styles.module.scss.d.ts +0 -1
- package/components/Tooltip/index.js +1 -1
- package/components/TooltipExample/index.js +1 -1
- package/components/TooltipExample/index.js.map +1 -1
- package/components/Trigger/HelpSign.d.ts +5 -0
- package/components/Trigger/HelpSign.d.ts.map +1 -0
- package/components/Trigger/InfoSignStroke.d.ts +5 -0
- package/components/Trigger/InfoSignStroke.d.ts.map +1 -0
- package/components/Trigger/Trigger.d.ts +50 -0
- package/components/Trigger/Trigger.d.ts.map +1 -0
- package/components/Trigger/componentdata.json +1 -0
- package/components/Trigger/index.d.ts +4 -0
- package/components/Trigger/index.d.ts.map +1 -0
- package/components/Trigger/index.js +2 -0
- package/components/Trigger/index.js.map +1 -0
- package/components/Trigger/styles.module.scss +88 -0
- package/components/Trigger/styles.module.scss.d.ts +16 -0
- package/constants.d.ts +6 -3
- package/constants.d.ts.map +1 -1
- package/constants.js +1 -1
- package/constants.js.map +1 -1
- package/hooks/useFocusToggle.js.map +1 -1
- package/hooks/useFocusTrap.js.map +1 -1
- package/hooks/useHover.d.ts.map +1 -1
- package/hooks/useHover.js +1 -1
- package/hooks/useHover.js.map +1 -1
- package/hooks/useSize.js.map +1 -1
- package/hooks/useSticky.d.ts +5 -4
- package/hooks/useSticky.d.ts.map +1 -1
- package/hooks/useSticky.js +1 -1
- package/hooks/useSticky.js.map +1 -1
- package/hooks/useUuid.js +1 -1
- package/hooks/useUuid.js.map +1 -1
- package/index.js +1 -1
- package/package.json +4 -1
- package/scss/_palette.scss +15 -0
- package/theme/currys/color.js.map +1 -1
- package/theme/currys/spacing.js.map +1 -1
- package/theme/grid.js.map +1 -1
- package/utils/focus.js.map +1 -1
- package/utils/uuid.js +1 -1
- package/uuid.js +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
1
2
|
@import '../../scss/spacers';
|
|
2
3
|
@import '../../scss/palette';
|
|
3
4
|
@import '../../scss/breakpoints';
|
|
@@ -5,322 +6,222 @@
|
|
|
5
6
|
@import '../../scss/grid';
|
|
6
7
|
|
|
7
8
|
.service-message {
|
|
8
|
-
|
|
9
|
+
$servicemessage: &;
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
background-color: $kiwi50;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
&--info {
|
|
16
|
-
background-color: $blueberry50;
|
|
17
|
-
}
|
|
11
|
+
border-width: 1px;
|
|
12
|
+
border-bottom-style: solid;
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
&--alert {
|
|
24
|
-
background-color: $cherry50;
|
|
25
|
-
}
|
|
14
|
+
&:first-of-type {
|
|
15
|
+
border-top-style: solid;
|
|
26
16
|
}
|
|
27
17
|
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
&--success {
|
|
19
|
+
background-color: $kiwi50;
|
|
30
20
|
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
&:hover {
|
|
22
|
+
background-color: rgba-to-rgb(rgba($kiwi500, 0.1), $kiwi50);
|
|
33
23
|
}
|
|
34
24
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@include make-container-max-widths;
|
|
39
|
-
}
|
|
25
|
+
&#{$servicemessage},
|
|
26
|
+
&#{$servicemessage}__label-container {
|
|
27
|
+
border-color: $kiwi900;
|
|
40
28
|
}
|
|
29
|
+
}
|
|
41
30
|
|
|
42
|
-
|
|
43
|
-
|
|
31
|
+
&--info {
|
|
32
|
+
background-color: $blueberry50;
|
|
44
33
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
&--expanded {
|
|
50
|
-
border-bottom: 0.0625rem solid $kiwi900;
|
|
51
|
-
}
|
|
34
|
+
&:hover {
|
|
35
|
+
background-color: rgba-to-rgb(rgba($blueberry500, 0.1), $blueberry50);
|
|
52
36
|
}
|
|
53
37
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
&:hover {
|
|
58
|
-
background-color: rgb(24 128 151 / 10%);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
&--expanded {
|
|
62
|
-
border-bottom: 0.0625rem solid $blueberry700;
|
|
63
|
-
}
|
|
38
|
+
&#{$servicemessage},
|
|
39
|
+
&#{$servicemessage}__label-container {
|
|
40
|
+
border-color: $blueberry700;
|
|
64
41
|
}
|
|
42
|
+
}
|
|
65
43
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
&:hover {
|
|
70
|
-
background-color: rgb(221 171 6 / 10%);
|
|
71
|
-
}
|
|
44
|
+
&--warn {
|
|
45
|
+
background-color: $banana50;
|
|
72
46
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
47
|
+
&:hover {
|
|
48
|
+
background-color: rgba-to-rgb(rgba($banana500, 0.1), $banana50);
|
|
76
49
|
}
|
|
77
50
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
&:hover {
|
|
82
|
-
background-color: rgb(200 53 33 / 10%);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
&--expanded {
|
|
86
|
-
border-bottom: 0.0625rem solid $cherry700;
|
|
87
|
-
}
|
|
51
|
+
&#{$servicemessage},
|
|
52
|
+
&#{$servicemessage}__label-container {
|
|
53
|
+
border-color: $banana700;
|
|
88
54
|
}
|
|
55
|
+
}
|
|
89
56
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
border: 0.0625rem solid $kiwi900;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
&--info {
|
|
96
|
-
border: 0.0625rem solid $blueberry700;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
&--warn {
|
|
100
|
-
border: 0.0625rem solid $banana700;
|
|
101
|
-
}
|
|
57
|
+
&--alert {
|
|
58
|
+
background-color: $cherry50;
|
|
102
59
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
60
|
+
&:hover {
|
|
61
|
+
background-color: rgba-to-rgb(rgba($cherry500, 0.1), $cherry50);
|
|
106
62
|
}
|
|
107
63
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
&--width {
|
|
115
|
-
width: 100%;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
&--not-first {
|
|
119
|
-
border-top-color: transparent;
|
|
120
|
-
border-right-color: transparent;
|
|
121
|
-
border-left-color: transparent;
|
|
122
|
-
}
|
|
64
|
+
&#{$servicemessage},
|
|
65
|
+
&#{$servicemessage}__label-container {
|
|
66
|
+
border-color: $cherry700;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
123
69
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
70
|
+
&__container {
|
|
71
|
+
@include make-container;
|
|
72
|
+
@include make-container-max-widths;
|
|
73
|
+
}
|
|
128
74
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
padding-bottom: 0.3125rem;
|
|
75
|
+
&__row {
|
|
76
|
+
@include make-row;
|
|
77
|
+
}
|
|
133
78
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
79
|
+
&__col {
|
|
80
|
+
@include make-col-ready;
|
|
81
|
+
@include make-col(12);
|
|
82
|
+
}
|
|
139
83
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
84
|
+
&__label-container {
|
|
85
|
+
position: relative;
|
|
86
|
+
padding-top: getSpacer(3xs);
|
|
87
|
+
padding-bottom: getSpacer(3xs);
|
|
143
88
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
89
|
+
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
90
|
+
padding-top: getSpacer(2xs);
|
|
91
|
+
padding-bottom: getSpacer(2xs);
|
|
92
|
+
}
|
|
147
93
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
94
|
+
&--has-expander:has(:focus-visible) {
|
|
95
|
+
box-shadow: inset 0 0 0 2px $black;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
152
98
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
99
|
+
&__label {
|
|
100
|
+
display: flex;
|
|
101
|
+
width: 100%;
|
|
102
|
+
align-items: center;
|
|
103
|
+
gap: getSpacer(2xs);
|
|
159
104
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
105
|
+
@media (min-width: map-get($grid-breakpoints, md)) {
|
|
106
|
+
gap: getSpacer(m);
|
|
163
107
|
}
|
|
164
108
|
}
|
|
165
109
|
|
|
166
|
-
&
|
|
167
|
-
|
|
168
|
-
|
|
110
|
+
&__title {
|
|
111
|
+
width: 100%;
|
|
112
|
+
font-weight: 700;
|
|
169
113
|
font-size: $font-size-xs;
|
|
170
114
|
line-height: 1.25rem;
|
|
171
|
-
padding: getSpacer(3xs) 0 getSpacer(xs) 0;
|
|
172
115
|
|
|
173
116
|
@media (min-width: map-get($grid-breakpoints, md)) {
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
178
|
-
padding: getSpacer(2xs) 0 getSpacer(s) 0;
|
|
179
|
-
margin: 0 4.5625rem;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
&__info {
|
|
183
|
-
display: block;
|
|
184
|
-
font-size: $font-size-xs;
|
|
185
|
-
line-height: 1.25rem;
|
|
186
|
-
|
|
187
|
-
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
188
|
-
padding-top: getSpacer(xs);
|
|
189
|
-
line-height: 1.625rem;
|
|
190
|
-
font-size: $font-size-sm;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
&--smaller {
|
|
194
|
-
display: block;
|
|
195
|
-
font-size: 0.875rem;
|
|
196
|
-
padding-top: getSpacer(2xs);
|
|
197
|
-
line-height: 1.25rem;
|
|
198
|
-
|
|
199
|
-
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
200
|
-
padding-top: getSpacer(xs);
|
|
201
|
-
font-size: $font-size-xs;
|
|
202
|
-
line-height: $lineheight-size-xs;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
117
|
+
font-size: $font-size-sm;
|
|
205
118
|
}
|
|
119
|
+
}
|
|
206
120
|
|
|
207
|
-
|
|
208
|
-
|
|
121
|
+
&__toggle {
|
|
122
|
+
all: unset;
|
|
209
123
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
124
|
+
// Triks for at hele labelen skal trigge klikk på knappen
|
|
125
|
+
&::after {
|
|
126
|
+
inset: 0;
|
|
127
|
+
content: '';
|
|
128
|
+
position: absolute;
|
|
214
129
|
}
|
|
215
130
|
}
|
|
216
131
|
|
|
217
|
-
&
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
132
|
+
&__content {
|
|
133
|
+
margin-left: calc(38px + getSpacer(2xs));
|
|
134
|
+
margin-right: calc(38px + getSpacer(2xs));
|
|
135
|
+
padding-top: getSpacer(xs);
|
|
136
|
+
padding-bottom: getSpacer(xs);
|
|
222
137
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
138
|
+
@media (min-width: map-get($grid-breakpoints, md)) {
|
|
139
|
+
margin-left: calc(38px + getSpacer(m));
|
|
140
|
+
margin-right: calc(38px + getSpacer(m));
|
|
226
141
|
}
|
|
227
142
|
|
|
228
|
-
|
|
229
|
-
margin-left:
|
|
230
|
-
|
|
231
|
-
|
|
143
|
+
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
144
|
+
margin-left: calc(48px + getSpacer(m));
|
|
145
|
+
margin-right: calc(48px + getSpacer(m));
|
|
146
|
+
padding-top: getSpacer(2xs);
|
|
147
|
+
padding-bottom: getSpacer(s);
|
|
232
148
|
}
|
|
233
149
|
}
|
|
234
150
|
|
|
235
|
-
&
|
|
236
|
-
text-align: left;
|
|
237
|
-
font-weight: 700;
|
|
151
|
+
&__info {
|
|
238
152
|
font-size: $font-size-xs;
|
|
239
153
|
line-height: 1.25rem;
|
|
154
|
+
margin: 0;
|
|
240
155
|
|
|
241
|
-
@media (min-width: map-get($grid-breakpoints,
|
|
156
|
+
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
157
|
+
margin-top: getSpacer(xs);
|
|
158
|
+
line-height: 1.625rem;
|
|
242
159
|
font-size: $font-size-sm;
|
|
243
160
|
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
&__top-row {
|
|
247
|
-
line-height: $lineheight-size-xs;
|
|
248
|
-
align-items: center;
|
|
249
161
|
|
|
250
|
-
|
|
251
|
-
font-size:
|
|
252
|
-
|
|
253
|
-
}
|
|
162
|
+
&--extra {
|
|
163
|
+
font-size: 0.875rem;
|
|
164
|
+
margin-top: getSpacer(2xs);
|
|
254
165
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
166
|
+
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
167
|
+
margin-top: getSpacer(xs);
|
|
168
|
+
font-size: $font-size-xs;
|
|
169
|
+
line-height: $lineheight-size-xs;
|
|
170
|
+
}
|
|
259
171
|
}
|
|
260
172
|
}
|
|
261
173
|
|
|
262
|
-
&
|
|
174
|
+
&__actions {
|
|
263
175
|
display: flex;
|
|
264
176
|
justify-content: space-between;
|
|
265
177
|
flex-flow: column wrap;
|
|
266
|
-
padding: getSpacer(2xs) 0 0 0;
|
|
267
178
|
gap: getSpacer(2xs);
|
|
179
|
+
margin-top: getSpacer(2xs);
|
|
268
180
|
|
|
269
181
|
@media (min-width: map-get($grid-breakpoints, sm)) {
|
|
270
182
|
flex-direction: row;
|
|
271
183
|
}
|
|
272
184
|
|
|
273
185
|
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
274
|
-
|
|
186
|
+
margin-top: getSpacer(s);
|
|
275
187
|
}
|
|
188
|
+
}
|
|
276
189
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
190
|
+
&__action {
|
|
191
|
+
display: flex;
|
|
192
|
+
align-items: center;
|
|
193
|
+
border: none;
|
|
194
|
+
width: fit-content;
|
|
195
|
+
color: $blueberry700;
|
|
196
|
+
font-weight: 600;
|
|
197
|
+
font-size: $font-size-xs;
|
|
198
|
+
line-height: 1.25rem;
|
|
199
|
+
background-color: transparent;
|
|
200
|
+
text-decoration: none;
|
|
201
|
+
padding: 0.5rem;
|
|
202
|
+
margin-left: -0.5rem;
|
|
203
|
+
gap: getSpacer(xs);
|
|
204
|
+
|
|
205
|
+
&:hover,
|
|
206
|
+
&:active {
|
|
207
|
+
background-color: rgb(88 170 187 / 10%);
|
|
281
208
|
}
|
|
282
209
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
align-items: center;
|
|
286
|
-
border: none;
|
|
287
|
-
width: fit-content;
|
|
288
|
-
color: $blueberry700;
|
|
289
|
-
font-weight: 600;
|
|
290
|
-
font-size: $font-size-xs;
|
|
291
|
-
line-height: 1.25rem;
|
|
210
|
+
&:focus-visible {
|
|
211
|
+
box-shadow: 0 0 0 2px $black;
|
|
292
212
|
background-color: transparent;
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
margin-left: -0.5rem;
|
|
296
|
-
|
|
297
|
-
&:hover,
|
|
298
|
-
&:active {
|
|
299
|
-
background-color: rgb(88 170 187 / 10%);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
&:focus {
|
|
303
|
-
box-shadow: 0 0 0 2px $black;
|
|
304
|
-
background-color: transparent;
|
|
305
|
-
border-radius: 0;
|
|
306
|
-
border: 0;
|
|
307
|
-
outline: none;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
svg {
|
|
311
|
-
margin-left: getSpacer(xs);
|
|
312
|
-
}
|
|
213
|
+
border: 0;
|
|
214
|
+
outline: none;
|
|
313
215
|
}
|
|
314
216
|
|
|
315
|
-
|
|
316
|
-
|
|
217
|
+
&--close {
|
|
218
|
+
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
317
219
|
margin-left: auto;
|
|
318
|
-
padding: 0;
|
|
319
|
-
|
|
320
|
-
svg {
|
|
321
|
-
margin-left: 0;
|
|
322
|
-
}
|
|
323
220
|
}
|
|
324
221
|
}
|
|
325
222
|
}
|
|
223
|
+
|
|
224
|
+
&__close {
|
|
225
|
+
z-index: 1;
|
|
226
|
+
}
|
|
326
227
|
}
|
|
@@ -1,41 +1,24 @@
|
|
|
1
1
|
export type Styles = {
|
|
2
2
|
'service-message': string;
|
|
3
|
-
'service-
|
|
4
|
-
'service-
|
|
5
|
-
'service-
|
|
6
|
-
'service-
|
|
3
|
+
'service-message__action': string;
|
|
4
|
+
'service-message__action--close': string;
|
|
5
|
+
'service-message__actions': string;
|
|
6
|
+
'service-message__close': string;
|
|
7
|
+
'service-message__col': string;
|
|
8
|
+
'service-message__container': string;
|
|
7
9
|
'service-message__content': string;
|
|
8
|
-
'service-
|
|
9
|
-
'service-
|
|
10
|
-
'service-message__content--spacing': string;
|
|
11
|
-
'service-message__icon--expander': string;
|
|
12
|
-
'service-message__icon--signal': string;
|
|
10
|
+
'service-message__info': string;
|
|
11
|
+
'service-message__info--extra': string;
|
|
13
12
|
'service-message__label': string;
|
|
14
|
-
'service-
|
|
15
|
-
'service-
|
|
16
|
-
'service-
|
|
17
|
-
'service-
|
|
18
|
-
'service-
|
|
19
|
-
'service-
|
|
20
|
-
'service-
|
|
21
|
-
'service-
|
|
22
|
-
'service-
|
|
23
|
-
'service-message__wrapper__border--success': string;
|
|
24
|
-
'service-message__wrapper__border--warn': string;
|
|
25
|
-
'service-message__wrapper__btn': string;
|
|
26
|
-
'service-message__wrapper__btn--expanded': string;
|
|
27
|
-
'service-message__wrapper__btn--first': string;
|
|
28
|
-
'service-message__wrapper__btn--not-first': string;
|
|
29
|
-
'service-message__wrapper__btn--width': string;
|
|
30
|
-
'service-message__wrapper--alert': string;
|
|
31
|
-
'service-message__wrapper--alert--expanded': string;
|
|
32
|
-
'service-message__wrapper--info': string;
|
|
33
|
-
'service-message__wrapper--info--expanded': string;
|
|
34
|
-
'service-message__wrapper--inner': string;
|
|
35
|
-
'service-message__wrapper--success': string;
|
|
36
|
-
'service-message__wrapper--success--expanded': string;
|
|
37
|
-
'service-message__wrapper--warn': string;
|
|
38
|
-
'service-message__wrapper--warn--expanded': string;
|
|
13
|
+
'service-message__label-container': string;
|
|
14
|
+
'service-message__label-container--has-expander': string;
|
|
15
|
+
'service-message__row': string;
|
|
16
|
+
'service-message__title': string;
|
|
17
|
+
'service-message__toggle': string;
|
|
18
|
+
'service-message--alert': string;
|
|
19
|
+
'service-message--info': string;
|
|
20
|
+
'service-message--success': string;
|
|
21
|
+
'service-message--warn': string;
|
|
39
22
|
};
|
|
40
23
|
|
|
41
24
|
export type ClassNames = keyof Styles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useSize } from '../../hooks/useSize';\nimport { useUuid } from '../../hooks/useUuid';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\nimport Title from '../Title';\n\nimport styles from './styles.module.scss';\n\nconst useSafeNumberValue = (initial: number, min: number, max: number): [number, (value: number) => void] => {\n const [value, setValue] = useState(initial);\n\n const setSafeValue = (newValue: number): void => {\n if (newValue > max) {\n setValue(max);\n } else if (newValue < min) {\n setValue(min);\n } else {\n setValue(newValue);\n }\n };\n\n return [value, setSafeValue];\n};\n\ninterface SliderProps {\n /**\tSets the title of the slider. */\n title?: string;\n /** Adds the left hand label to the element. */\n labelLeft?: string;\n /** Adds the right hand label to the element. */\n labelRight?: string;\n /**\tSets aria-label of the slider. */\n ariaLabel?: string;\n /** Disables the slider element. */\n disabled?: boolean;\n /** Function to be called when the value state has changed. */\n onChange?: (value: number) => void;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst MAX_VALUE = 100;\nconst MIN_VALUE = 0;\nconst STEP = 1;\nconst LARGE_STEP = 10;\n\nexport const Slider: React.FC<SliderProps> = ({ title, ariaLabel, labelLeft, labelRight, disabled = false, onChange, testId }) => {\n const [isMoving, setIsMoving] = useState(false);\n const [value, setValue] = useSafeNumberValue((MAX_VALUE - MIN_VALUE) / 2, MIN_VALUE, MAX_VALUE);\n const titleId = useUuid();\n const labelLeftId = useUuid();\n const labelRightId = useUuid();\n const trackRef = useRef<HTMLDivElement>(null);\n const markerRef = useRef<HTMLDivElement>(null);\n const { width: trackWidth } = useSize(trackRef) || { width: 0 };\n const { width: markerWidth } = useSize(markerRef) || { width: 0 };\n\n useEffect(() => {\n const handlePointerUp = (): void => {\n setIsMoving(false);\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, []);\n\n const getValueBasedOnMarkerPosition = (markerPosition: number): number => {\n const trackPosition = trackRef.current?.getBoundingClientRect().x ?? 0;\n\n return Math.round(((markerPosition - trackPosition) / trackWidth) * (MAX_VALUE - MIN_VALUE));\n };\n\n useEffect(() => {\n const handlePointerMove = (e: PointerEvent): void => {\n if (!disabled && isMoving) {\n const newValue = getValueBasedOnMarkerPosition(e.clientX);\n setValue(newValue);\n }\n };\n\n document.addEventListener('pointermove', handlePointerMove);\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n };\n }, [isMoving]);\n\n useEffect(() => {\n if (!disabled && onChange) {\n onChange(value);\n }\n }, [value]);\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n let flag = false;\n\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n setValue(value - STEP);\n flag = true;\n break;\n case 'PageDown':\n setValue(value - LARGE_STEP);\n flag = true;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n setValue(value + STEP);\n flag = true;\n break;\n case 'PageUp':\n setValue(value + LARGE_STEP);\n flag = true;\n break;\n case 'Home':\n setValue(MIN_VALUE);\n flag = true;\n break;\n case 'End':\n setValue(MAX_VALUE);\n flag = true;\n break;\n default:\n break;\n }\n\n if (flag) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const handleTrackClick: React.MouseEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n const newValue = getValueBasedOnMarkerPosition(e.clientX);\n setValue(newValue);\n markerRef.current?.focus();\n };\n\n const handlePointerDown: React.PointerEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n setIsMoving(true);\n\n e.preventDefault();\n e.stopPropagation();\n\n markerRef.current?.focus();\n };\n\n const markerXPos = ((trackWidth - markerWidth) / (MAX_VALUE - MIN_VALUE)) * value;\n\n const getAriaLabeledById = (): string | undefined => {\n if (title && labelLeft && labelRight) {\n return [titleId, labelLeftId, labelRightId].join(' ');\n }\n if (title && labelLeft) {\n return [titleId, labelLeftId].join(' ');\n }\n if (title && labelRight) {\n return [titleId, labelRightId].join(' ');\n }\n if (title) {\n return titleId;\n }\n };\n\n const ariaLabelAttributes = getAriaLabelAttributes({\n label: ariaLabel,\n id: getAriaLabeledById(),\n prefer: 'label',\n });\n\n return (\n <div className={styles.slider} data-testid={testId} data-analyticsid={AnalyticsId.Slider}>\n {title && (\n <Title htmlMarkup={'h3'} margin={1.5} appearance={'title3'} id={titleId}>\n {title}\n </Title>\n )}\n {/* Komponenten er tilgjengelig for mus/keyboard gjennom bruk av slideren */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n ref={trackRef}\n className={classNames(styles['slider__track-wrapper'], disabled && styles['slider__track-wrapper--disabled'])}\n onClick={handleTrackClick}\n onPointerDown={handlePointerDown}\n >\n <div className={classNames(styles.slider__track, disabled && styles['slider__track--disabled'])} />\n <div\n role={disabled ? undefined : 'slider'}\n ref={markerRef}\n className={classNames(styles.slider__marker, disabled && styles['slider__marker--disabled'])}\n style={{\n left: `${markerXPos}px`,\n }}\n onKeyDown={handleKeyDown}\n aria-valuenow={value}\n aria-valuemin={MIN_VALUE}\n aria-valuemax={MAX_VALUE}\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled}\n {...ariaLabelAttributes}\n />\n </div>\n {(labelLeft || labelRight) && (\n <span className={styles.slider__options}>\n <span id={labelLeftId}>{labelLeft}</span>\n <span id={labelRightId}>{labelRight}</span>\n </span>\n )}\n </div>\n );\n};\n\nexport default Slider;\n"],"names":["useSafeNumberValue","initial","min","max","value","setValue","useState","newValue","MAX_VALUE","MIN_VALUE","STEP","LARGE_STEP","Slider","title","ariaLabel","labelLeft","labelRight","disabled","onChange","testId","isMoving","setIsMoving","titleId","useUuid","labelLeftId","labelRightId","trackRef","useRef","markerRef","trackWidth","useSize","markerWidth","useEffect","handlePointerUp","getValueBasedOnMarkerPosition","markerPosition","trackPosition","_a","handlePointerMove","e","handleKeyDown","flag","handleTrackClick","handlePointerDown","markerXPos","ariaLabelAttributes","getAriaLabelAttributes","React","styles","AnalyticsId","Title","classNames","Slider$1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AnalyticsId } from '../../constants';\nimport { useSize } from '../../hooks/useSize';\nimport { useUuid } from '../../hooks/useUuid';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\nimport Title from '../Title';\n\nimport styles from './styles.module.scss';\n\nconst useSafeNumberValue = (initial: number, min: number, max: number): [number, (value: number) => void] => {\n const [value, setValue] = useState(initial);\n\n const setSafeValue = (newValue: number): void => {\n if (newValue > max) {\n setValue(max);\n } else if (newValue < min) {\n setValue(min);\n } else {\n setValue(newValue);\n }\n };\n\n return [value, setSafeValue];\n};\n\ninterface SliderProps {\n /**\tSets the title of the slider. */\n title?: string;\n /** Adds the left hand label to the element. */\n labelLeft?: string;\n /** Adds the right hand label to the element. */\n labelRight?: string;\n /**\tSets aria-label of the slider. */\n ariaLabel?: string;\n /** Disables the slider element. */\n disabled?: boolean;\n /** Function to be called when the value state has changed. */\n onChange?: (value: number) => void;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst MAX_VALUE = 100;\nconst MIN_VALUE = 0;\nconst STEP = 1;\nconst LARGE_STEP = 10;\n\nexport const Slider: React.FC<SliderProps> = ({ title, ariaLabel, labelLeft, labelRight, disabled = false, onChange, testId }) => {\n const [isMoving, setIsMoving] = useState(false);\n const [value, setValue] = useSafeNumberValue((MAX_VALUE - MIN_VALUE) / 2, MIN_VALUE, MAX_VALUE);\n const titleId = useUuid();\n const labelLeftId = useUuid();\n const labelRightId = useUuid();\n const trackRef = useRef<HTMLDivElement>(null);\n const markerRef = useRef<HTMLDivElement>(null);\n const { width: trackWidth } = useSize(trackRef) || { width: 0 };\n const { width: markerWidth } = useSize(markerRef) || { width: 0 };\n\n useEffect(() => {\n const handlePointerUp = (): void => {\n setIsMoving(false);\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, []);\n\n const getValueBasedOnMarkerPosition = (markerPosition: number): number => {\n const trackPosition = trackRef.current?.getBoundingClientRect().x ?? 0;\n\n return Math.round(((markerPosition - trackPosition) / trackWidth) * (MAX_VALUE - MIN_VALUE));\n };\n\n useEffect(() => {\n const handlePointerMove = (e: PointerEvent): void => {\n if (!disabled && isMoving) {\n const newValue = getValueBasedOnMarkerPosition(e.clientX);\n setValue(newValue);\n }\n };\n\n document.addEventListener('pointermove', handlePointerMove);\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n };\n }, [isMoving]);\n\n useEffect(() => {\n if (!disabled && onChange) {\n onChange(value);\n }\n }, [value]);\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n let flag = false;\n\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n setValue(value - STEP);\n flag = true;\n break;\n case 'PageDown':\n setValue(value - LARGE_STEP);\n flag = true;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n setValue(value + STEP);\n flag = true;\n break;\n case 'PageUp':\n setValue(value + LARGE_STEP);\n flag = true;\n break;\n case 'Home':\n setValue(MIN_VALUE);\n flag = true;\n break;\n case 'End':\n setValue(MAX_VALUE);\n flag = true;\n break;\n default:\n break;\n }\n\n if (flag) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const handleTrackClick: React.MouseEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n const newValue = getValueBasedOnMarkerPosition(e.clientX);\n setValue(newValue);\n markerRef.current?.focus();\n };\n\n const handlePointerDown: React.PointerEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n setIsMoving(true);\n\n e.preventDefault();\n e.stopPropagation();\n\n markerRef.current?.focus();\n };\n\n const markerXPos = ((trackWidth - markerWidth) / (MAX_VALUE - MIN_VALUE)) * value;\n\n const getAriaLabeledById = (): string | undefined => {\n if (title && labelLeft && labelRight) {\n return [titleId, labelLeftId, labelRightId].join(' ');\n }\n if (title && labelLeft) {\n return [titleId, labelLeftId].join(' ');\n }\n if (title && labelRight) {\n return [titleId, labelRightId].join(' ');\n }\n if (title) {\n return titleId;\n }\n };\n\n const ariaLabelAttributes = getAriaLabelAttributes({\n label: ariaLabel,\n id: getAriaLabeledById(),\n prefer: 'label',\n });\n\n return (\n <div className={styles.slider} data-testid={testId} data-analyticsid={AnalyticsId.Slider}>\n {title && (\n <Title htmlMarkup={'h3'} margin={1.5} appearance={'title3'} id={titleId}>\n {title}\n </Title>\n )}\n {/* Komponenten er tilgjengelig for mus/keyboard gjennom bruk av slideren */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n ref={trackRef}\n className={classNames(styles['slider__track-wrapper'], disabled && styles['slider__track-wrapper--disabled'])}\n onClick={handleTrackClick}\n onPointerDown={handlePointerDown}\n >\n <div className={classNames(styles.slider__track, disabled && styles['slider__track--disabled'])} />\n <div\n role={disabled ? undefined : 'slider'}\n ref={markerRef}\n className={classNames(styles.slider__marker, disabled && styles['slider__marker--disabled'])}\n style={{\n left: `${markerXPos}px`,\n }}\n onKeyDown={handleKeyDown}\n aria-valuenow={value}\n aria-valuemin={MIN_VALUE}\n aria-valuemax={MAX_VALUE}\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled}\n {...ariaLabelAttributes}\n />\n </div>\n {(labelLeft || labelRight) && (\n <span className={styles.slider__options}>\n <span id={labelLeftId}>{labelLeft}</span>\n <span id={labelRightId}>{labelRight}</span>\n </span>\n )}\n </div>\n );\n};\n\nexport default Slider;\n"],"names":["useSafeNumberValue","initial","min","max","value","setValue","useState","newValue","MAX_VALUE","MIN_VALUE","STEP","LARGE_STEP","Slider","title","ariaLabel","labelLeft","labelRight","disabled","onChange","testId","isMoving","setIsMoving","titleId","useUuid","labelLeftId","labelRightId","trackRef","useRef","markerRef","trackWidth","useSize","markerWidth","useEffect","handlePointerUp","getValueBasedOnMarkerPosition","markerPosition","trackPosition","_a","handlePointerMove","e","handleKeyDown","flag","handleTrackClick","handlePointerDown","markerXPos","ariaLabelAttributes","getAriaLabelAttributes","React","styles","AnalyticsId","Title","classNames","Slider$1"],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ interface StepProps {
|
|
|
14
14
|
additionalButtons?: React.ReactElement<ButtonProps>[];
|
|
15
15
|
/** Knapp for å avbryte eller fortsette senere. Vises med "borderless" variant. */
|
|
16
16
|
cancelButton?: React.ReactElement<ButtonProps>;
|
|
17
|
+
/** Knappene vil vises sticky nederst på skjermen dersom innholdet i Step tar mer plass enn vinduet. Default: false */
|
|
18
|
+
stickyButtons?: boolean;
|
|
17
19
|
}
|
|
18
20
|
declare const Step: React.FC<StepProps>;
|
|
19
21
|
export default Step;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/components/Step/Step.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/components/Step/Step.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAKtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,UAAU,SAAS;IACjB,gCAAgC;IAChC,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC3C,uBAAuB;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,uDAAuD;IACvD,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAChD,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;IACtD,kFAAkF;IAClF,YAAY,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC/C,uHAAuH;IACvH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAoE7B,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"props":{"stepper":{"defaultValue":null,"description":"Stepper viser fremdriften","name":"stepper","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<StepperProps, string | JSXElementConstructor<any>>"}},"children":{"defaultValue":null,"description":"Innhold i steget","name":"children","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},{"fileName":"designsystem/node_modules/@types/react/index.d.ts","name":"TypeLiteral"}],"required":false,"type":{"name":"ReactNode"}},"backButton":{"defaultValue":null,"description":"Knapp for å gå tilbake. Vises med \"outline\" variant.","name":"backButton","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>"}},"forwardButton":{"defaultValue":null,"description":"Knapp for å gå videre. Vises med \"fill\" variant.","name":"forwardButton","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>"}},"additionalButtons":{"defaultValue":null,"description":"Ekstra knapper. Valgfritt utseende.","name":"additionalButtons","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>[]"}},"cancelButton":{"defaultValue":null,"description":"Knapp for å avbryte eller fortsette senere. Vises med \"borderless\" variant.","name":"cancelButton","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>"}}}}
|
|
1
|
+
{"props":{"stepper":{"defaultValue":null,"description":"Stepper viser fremdriften","name":"stepper","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<StepperProps, string | JSXElementConstructor<any>>"}},"children":{"defaultValue":null,"description":"Innhold i steget","name":"children","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},{"fileName":"designsystem/node_modules/@types/react/index.d.ts","name":"TypeLiteral"}],"required":false,"type":{"name":"ReactNode"}},"backButton":{"defaultValue":null,"description":"Knapp for å gå tilbake. Vises med \"outline\" variant.","name":"backButton","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>"}},"forwardButton":{"defaultValue":null,"description":"Knapp for å gå videre. Vises med \"fill\" variant.","name":"forwardButton","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>"}},"additionalButtons":{"defaultValue":null,"description":"Ekstra knapper. Valgfritt utseende.","name":"additionalButtons","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>[]"}},"cancelButton":{"defaultValue":null,"description":"Knapp for å avbryte eller fortsette senere. Vises med \"borderless\" variant.","name":"cancelButton","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"ReactElement<ButtonProps, string | JSXElementConstructor<any>>"}},"stickyButtons":{"defaultValue":{"value":"false"},"description":"Knappene vil vises sticky nederst på skjermen dersom innholdet i Step tar mer plass enn vinduet. Default: false","name":"stickyButtons","parent":{"fileName":"src/components/Step/Step.tsx","name":"StepProps"},"declarations":[{"fileName":"src/components/Step/Step.tsx","name":"StepProps"}],"required":false,"type":{"name":"boolean"}}}}
|
package/components/Step/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import t,{useRef as d}from"react";import s from"classnames";import{useSticky as h}from"../../hooks/useSticky.js";import e from"./styles.module.scss";import"../../hooks/useLayoutEvent.js";import"../../utils/debounce.js";const y=({stepper:m,children:f,backButton:n,forwardButton:i,additionalButtons:o,cancelButton:l,stickyButtons:a=!1})=>{const p=d(null),c=d(null),{isOutsideWindow:g,offsetHeight:r,contentWidth:_}=h(p,c,"bottom"),N=a&&g,v=n||i||o||l,E=s(!v&&e["step__content--no-navigation"]),b=s(e.step__navigation,!v&&e["step__navigation--hidden"],a&&e["step__navigation--has-sticky-buttons"],N&&e["step__navigation--is-sticky"]);return t.createElement("div",{className:s(a&&e["step--has-sticky-buttons"])},m&&t.createElement("div",{className:e.step__stepper},m),t.createElement("div",{className:E,ref:p,style:{paddingBottom:a&&r?`${r}px`:void 0}},f),t.createElement("div",{className:b,ref:c,style:{width:a&&_?`${_}px`:void 0}},(n||i)&&t.createElement("div",{className:s(e.step__buttons,e["step__buttons--navigation"])},n&&t.cloneElement(n,{variant:"outline",wrapperClassName:s(e["step__button--back"])}),i&&t.cloneElement(i,{variant:"fill",wrapperClassName:s(e["step__button--forward"])})),o&&t.createElement("div",{className:s(e.step__buttons,e["step__buttons--additional"])},o),l&&t.createElement("div",{className:e.step__buttons},t.cloneElement(l,{variant:"borderless"}))))},w=y;export{w as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|