@helsenorge/designsystem-react 4.3.0 → 4.4.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +28 -3
  2. package/Close.js +1 -1
  3. package/Close.js.map +1 -1
  4. package/ListHeader.js +1 -1
  5. package/ListHeader.js.map +1 -1
  6. package/Panel.js +1 -1
  7. package/Panel.js.map +1 -1
  8. package/Table.js +1 -1
  9. package/Table.js.map +1 -1
  10. package/TableBody.js +1 -1
  11. package/TableBody.js.map +1 -1
  12. package/TableExpandedRow.js +1 -1
  13. package/TableExpandedRow.js.map +1 -1
  14. package/TableHead.js +1 -1
  15. package/TableHead.js.map +1 -1
  16. package/TableRow.js +1 -1
  17. package/TableRow.js.map +1 -1
  18. package/Textarea.js +1 -1
  19. package/Textarea.js.map +1 -1
  20. package/Trigger.js +2 -0
  21. package/Trigger.js.map +1 -0
  22. package/components/AnchorLink/index.js +1 -1
  23. package/components/Button/index.js +1 -1
  24. package/components/ButtonWithModal/index.js +1 -1
  25. package/components/ButtonWithModal/index.js.map +1 -1
  26. package/components/Checkbox/styles.module.scss +13 -0
  27. package/components/Close/Close.d.ts +0 -2
  28. package/components/Close/Close.d.ts.map +1 -1
  29. package/components/Close/componentdata.json +1 -1
  30. package/components/Close/index.js +1 -1
  31. package/components/Dropdown/index.js +1 -1
  32. package/components/Dropdown/index.js.map +1 -1
  33. package/components/Dropdown/styles.module.scss +1 -0
  34. package/components/Expander/index.js +1 -1
  35. package/components/Expander/index.js.map +1 -1
  36. package/components/ExpanderHierarchy/ExpanderButton.d.ts.map +1 -1
  37. package/components/ExpanderHierarchy/expander.module.scss +14 -7
  38. package/components/ExpanderHierarchy/expander.module.scss.d.ts +2 -0
  39. package/components/ExpanderHierarchy/index.js +1 -1
  40. package/components/ExpanderHierarchy/index.js.map +1 -1
  41. package/components/ExpanderList/index.js +1 -1
  42. package/components/ExpanderList/index.js.map +1 -1
  43. package/components/FormExample/index.js +1 -1
  44. package/components/HelpBubble/index.js +1 -1
  45. package/components/HelpBubbleExample/index.js +1 -1
  46. package/components/HelpBubbleExample/index.js.map +1 -1
  47. package/components/HelpQuestion/HelpQuestion.d.ts +22 -0
  48. package/components/HelpQuestion/HelpQuestion.d.ts.map +1 -0
  49. package/components/HelpQuestion/componentdata.json +1 -0
  50. package/components/HelpQuestion/index.d.ts +4 -0
  51. package/components/HelpQuestion/index.d.ts.map +1 -0
  52. package/components/HelpQuestion/index.js +2 -0
  53. package/components/HelpQuestion/index.js.map +1 -0
  54. package/components/HelpQuestion/styles.module.scss +49 -0
  55. package/components/HelpQuestion/styles.module.scss.d.ts +10 -0
  56. package/components/Label/componentdata.json +1 -1
  57. package/components/LinkList/index.js +1 -1
  58. package/components/Logo/Logo.d.ts +2 -2
  59. package/components/Logo/Logo.d.ts.map +1 -1
  60. package/components/Logo/componentdata.json +1 -1
  61. package/components/Logo/index.js +1 -1
  62. package/components/Logo/index.js.map +1 -1
  63. package/components/Modal/index.js +1 -1
  64. package/components/Modal/styles.module.scss +1 -0
  65. package/components/NotificationPanel/index.js +1 -1
  66. package/components/NotificationPanel/index.js.map +1 -1
  67. package/components/Panel/Panel.d.ts +2 -2
  68. package/components/Panel/Panel.d.ts.map +1 -1
  69. package/components/Panel/componentdata.json +1 -1
  70. package/components/Panel/index.js +1 -1
  71. package/components/Panel/styles.module.scss +1 -0
  72. package/components/PanelList/index.js +1 -1
  73. package/components/PanelList/index.js.map +1 -1
  74. package/components/PopMenu/PopMenu.d.ts.map +1 -1
  75. package/components/PopMenu/index.js +1 -1
  76. package/components/PopMenu/index.js.map +1 -1
  77. package/components/RadioButton/styles.module.scss +13 -0
  78. package/components/ServiceMessage/ServiceMessage.d.ts +6 -3
  79. package/components/ServiceMessage/ServiceMessage.d.ts.map +1 -1
  80. package/components/ServiceMessage/componentdata.json +1 -1
  81. package/components/ServiceMessage/index.js +1 -1
  82. package/components/ServiceMessage/index.js.map +1 -1
  83. package/components/ServiceMessage/styles.module.scss +139 -238
  84. package/components/ServiceMessage/styles.module.scss.d.ts +17 -34
  85. package/components/Step/Step.d.ts +2 -0
  86. package/components/Step/Step.d.ts.map +1 -1
  87. package/components/Step/componentdata.json +1 -1
  88. package/components/Step/index.js +1 -1
  89. package/components/Step/index.js.map +1 -1
  90. package/components/Step/styles.module.scss +23 -1
  91. package/components/Step/styles.module.scss.d.ts +5 -1
  92. package/components/Table/TableExpandedRow/TableExpandedRow.d.ts +3 -1
  93. package/components/Table/TableExpandedRow/TableExpandedRow.d.ts.map +1 -1
  94. package/components/Table/TableExpandedRow/componentdata.json +1 -1
  95. package/components/Table/TableExpandedRow/index.js +1 -1
  96. package/components/Table/TableExpanderCell/index.js +1 -1
  97. package/components/Table/TableRow/index.js +1 -1
  98. package/components/Table/index.js +1 -1
  99. package/components/Tag/index.js +1 -1
  100. package/components/Tag/index.js.map +1 -1
  101. package/components/Tile/index.js +1 -1
  102. package/components/Tile/index.js.map +1 -1
  103. package/components/Tooltip/index.js +1 -1
  104. package/components/TooltipExample/index.js +1 -1
  105. package/components/TooltipExample/index.js.map +1 -1
  106. package/components/Trigger/Trigger.d.ts +9 -0
  107. package/components/Trigger/Trigger.d.ts.map +1 -1
  108. package/components/Trigger/componentdata.json +1 -1
  109. package/components/Trigger/index.js +1 -1
  110. package/components/Trigger/index.js.map +1 -1
  111. package/components/Trigger/styles.module.scss +23 -20
  112. package/components/Trigger/styles.module.scss.d.ts +2 -0
  113. package/constants.d.ts +4 -3
  114. package/constants.d.ts.map +1 -1
  115. package/constants.js +1 -1
  116. package/constants.js.map +1 -1
  117. package/hooks/useHover.d.ts.map +1 -1
  118. package/hooks/useHover.js +1 -1
  119. package/hooks/useHover.js.map +1 -1
  120. package/hooks/useSticky.d.ts +5 -4
  121. package/hooks/useSticky.d.ts.map +1 -1
  122. package/hooks/useSticky.js +1 -1
  123. package/hooks/useSticky.js.map +1 -1
  124. package/index.js +1 -1
  125. package/package.json +4 -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
- font-family: 'Source Sans Pro', Arial, Verdana, sans-serif;
9
+ $servicemessage: &;
9
10
 
10
- &__outer-wrapper {
11
- &--success {
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
- &--warn {
20
- background-color: $banana50;
21
- }
22
-
23
- &--alert {
24
- background-color: $cherry50;
25
- }
14
+ &:first-of-type {
15
+ border-top-style: solid;
26
16
  }
27
17
 
28
- &__wrapper {
29
- padding: getSpacer(3xs) getSpacer(xs);
18
+ &--success {
19
+ background-color: $kiwi50;
30
20
 
31
- @media (min-width: map-get($grid-breakpoints, md)) {
32
- padding: getSpacer(2xs) getSpacer(l);
21
+ &:hover {
22
+ background-color: rgba-to-rgb(rgba($kiwi500, 0.1), $kiwi50);
33
23
  }
34
24
 
35
- &--inner {
36
- @media (min-width: map-get($grid-breakpoints, lg)) {
37
- @include make-container;
38
- @include make-container-max-widths;
39
- }
25
+ &#{$servicemessage},
26
+ &#{$servicemessage}__label-container {
27
+ border-color: $kiwi900;
40
28
  }
29
+ }
41
30
 
42
- &--success {
43
- background-color: $kiwi50;
31
+ &--info {
32
+ background-color: $blueberry50;
44
33
 
45
- &:hover {
46
- background-color: rgb(51 190 132 / 10%);
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
- &--info {
55
- background-color: $blueberry50;
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
- &--warn {
67
- background-color: $banana50;
68
-
69
- &:hover {
70
- background-color: rgb(221 171 6 / 10%);
71
- }
44
+ &--warn {
45
+ background-color: $banana50;
72
46
 
73
- &--expanded {
74
- border-bottom: 0.0625rem solid $banana700;
75
- }
47
+ &:hover {
48
+ background-color: rgba-to-rgb(rgba($banana500, 0.1), $banana50);
76
49
  }
77
50
 
78
- &--alert {
79
- background-color: $cherry50;
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
- &__border {
91
- &--success {
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
- &--alert {
104
- border: 0.0625rem solid $cherry700;
105
- }
60
+ &:hover {
61
+ background-color: rgba-to-rgb(rgba($cherry500, 0.1), $cherry50);
106
62
  }
107
63
 
108
- &__btn {
109
- background-color: transparent;
110
- display: flex;
111
- flex-direction: row;
112
- align-items: center;
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
- &:focus {
125
- border: none;
126
- outline: 0.125rem solid #000;
127
- outline-offset: -2px;
70
+ &__container {
71
+ @include make-container;
72
+ @include make-container-max-widths;
73
+ }
128
74
 
129
- // offset colliding border.
130
- margin-top: -1px;
131
- padding-top: 0.375rem;
132
- padding-bottom: 0.3125rem;
75
+ &__row {
76
+ @include make-row;
77
+ }
133
78
 
134
- @media (min-width: map-get($grid-breakpoints, md)) {
135
- padding-top: 0.625rem;
136
- padding-bottom: 0.5625rem;
137
- }
138
- }
79
+ &__col {
80
+ @include make-col-ready;
81
+ @include make-col(12);
82
+ }
139
83
 
140
- &--first {
141
- border-right-color: transparent;
142
- border-left-color: transparent;
84
+ &__label-container {
85
+ position: relative;
86
+ padding-top: getSpacer(3xs);
87
+ padding-bottom: getSpacer(3xs);
143
88
 
144
- @media (max-width: map-get($grid-breakpoints, lg)) {
145
- border-top-color: transparent;
146
- }
89
+ @media (min-width: map-get($grid-breakpoints, lg)) {
90
+ padding-top: getSpacer(2xs);
91
+ padding-bottom: getSpacer(2xs);
92
+ }
147
93
 
148
- &:focus {
149
- padding-top: 0.3125rem;
150
- padding-bottom: 0.3125rem;
151
- margin-top: 0;
94
+ &--has-expander:has(:focus-visible) {
95
+ box-shadow: inset 0 0 0 2px $black;
96
+ }
97
+ }
152
98
 
153
- @media (min-width: map-get($grid-breakpoints, md)) {
154
- padding-top: 0.5625rem;
155
- padding-bottom: 0.5625rem;
156
- }
157
- }
158
- }
99
+ &__label {
100
+ display: flex;
101
+ width: 100%;
102
+ align-items: center;
103
+ gap: getSpacer(2xs);
159
104
 
160
- &--expanded {
161
- border-bottom-color: transparent;
162
- }
105
+ @media (min-width: map-get($grid-breakpoints, md)) {
106
+ gap: getSpacer(m);
163
107
  }
164
108
  }
165
109
 
166
- &__content {
167
- display: block;
168
- margin: 0 3.75rem;
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
- margin: 0 getSpacer(4xl);
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
- &--spacing {
208
- margin-top: getSpacer(2xs);
121
+ &__toggle {
122
+ all: unset;
209
123
 
210
- @media (min-width: map-get($grid-breakpoints, lg)) {
211
- margin-top: 0;
212
- padding: 0 getSpacer(l);
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
- &__icon {
218
- &--signal {
219
- display: flex;
220
- align-items: center;
221
- margin-right: getSpacer(2xs);
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
- @media (min-width: map-get($grid-breakpoints, md)) {
224
- margin-right: getSpacer(m);
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
- &--expander {
229
- margin-left: auto;
230
- display: flex;
231
- align-items: center;
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
- &__label {
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, md)) {
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
- @media (min-width: map-get($grid-breakpoints, md)) {
251
- font-size: $font-size-sm;
252
- line-height: 1.25rem;
253
- }
162
+ &--extra {
163
+ font-size: 0.875rem;
164
+ margin-top: getSpacer(2xs);
254
165
 
255
- &--container {
256
- display: flex;
257
- width: 100%;
258
- align-items: center;
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
- &__bottom-row {
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
- padding: getSpacer(s) 0 0 0;
186
+ margin-top: getSpacer(s);
275
187
  }
188
+ }
276
189
 
277
- &--only-close-button {
278
- @media (min-width: map-get($grid-breakpoints, sm)) {
279
- flex-direction: row-reverse;
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
- &__button {
284
- display: flex;
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
- text-decoration: none;
294
- padding: 0.5rem;
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
- &__close-button {
316
- &--top {
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-message__bottom-row': string;
4
- 'service-message__bottom-row__button': string;
5
- 'service-message__bottom-row__close-button--top': string;
6
- 'service-message__bottom-row--only-close-button': string;
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-message__content__info': string;
9
- 'service-message__content__info--smaller': string;
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-message__outer-wrapper--alert': string;
15
- 'service-message__outer-wrapper--info': string;
16
- 'service-message__outer-wrapper--success': string;
17
- 'service-message__outer-wrapper--warn': string;
18
- 'service-message__top-row': string;
19
- 'service-message__top-row--container': string;
20
- 'service-message__wrapper': string;
21
- 'service-message__wrapper__border--alert': string;
22
- 'service-message__wrapper__border--info': string;
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;
@@ -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,KAAK,MAAM,OAAO,CAAC;AAI1B,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;CAChD;AAED,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAiC7B,CAAC;AAEF,eAAe,IAAI,CAAC"}
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"}}}}
@@ -1,2 +1,2 @@
1
- import e from"react";import s from"classnames";import t from"./styles.module.scss";const _=({stepper:n,children:p,backButton:a,forwardButton:l,additionalButtons:m,cancelButton:r})=>e.createElement(e.Fragment,null,n&&e.createElement("div",{className:t.step__stepper},n),e.createElement("div",{className:t.step__content},p),e.createElement("div",{className:t.step__navigation},(a||l)&&e.createElement("div",{className:s(t.step__buttons,t["step__buttons--navigation"])},a&&e.cloneElement(a,{variant:"outline",wrapperClassName:s(t["step__button--back"])}),l&&e.cloneElement(l,{variant:"fill",wrapperClassName:s(t["step__button--forward"])})),m&&e.createElement("div",{className:s(t.step__buttons,t["step__buttons--additional"])},m),r&&e.createElement("div",{className:t.step__buttons},e.cloneElement(r,{variant:"borderless"})))),v=_;export{v as default};
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Step/Step.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { ButtonProps } from '../Button';\nimport { StepperProps } from '../Stepper';\n\nimport styles from './styles.module.scss';\n\ninterface StepProps {\n /** Stepper viser fremdriften */\n stepper?: React.ReactElement<StepperProps>;\n /** Innhold i steget */\n children: React.ReactNode;\n /** Knapp for å gå tilbake. Vises med \"outline\" variant. */\n backButton?: React.ReactElement<ButtonProps>;\n /** Knapp for å gå videre. Vises med \"fill\" variant. */\n forwardButton?: React.ReactElement<ButtonProps>;\n /** Ekstra knapper. Valgfritt utseende. */\n additionalButtons?: React.ReactElement<ButtonProps>[];\n /** Knapp for å avbryte eller fortsette senere. Vises med \"borderless\" variant. */\n cancelButton?: React.ReactElement<ButtonProps>;\n}\n\nconst Step: React.FC<StepProps> = ({ stepper, children, backButton, forwardButton, additionalButtons, cancelButton }) => {\n return (\n <>\n {stepper && <div className={styles.step__stepper}>{stepper}</div>}\n <div className={styles.step__content}>{children}</div>\n <div className={styles.step__navigation}>\n {(backButton || forwardButton) && (\n <div className={classNames(styles.step__buttons, styles['step__buttons--navigation'])}>\n {backButton &&\n React.cloneElement(backButton, {\n variant: 'outline',\n wrapperClassName: classNames(styles['step__button--back']),\n })}\n {forwardButton &&\n React.cloneElement(forwardButton, {\n variant: 'fill',\n wrapperClassName: classNames(styles['step__button--forward']),\n })}\n </div>\n )}\n {additionalButtons && (\n <div className={classNames(styles.step__buttons, styles['step__buttons--additional'])}>{additionalButtons}</div>\n )}\n {cancelButton && (\n <div className={styles.step__buttons}>\n {React.cloneElement(cancelButton, {\n variant: 'borderless',\n })}\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport default Step;\n"],"names":["Step","stepper","children","backButton","forwardButton","additionalButtons","cancelButton","React","styles","classNames","Step$1"],"mappings":"mFAwBA,MAAMA,EAA4B,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,WAAAC,EAAY,cAAAC,EAAe,kBAAAC,EAAmB,aAAAC,qCAG/FL,GAAWM,EAAA,cAAC,MAAI,CAAA,UAAWC,EAAO,eAAgBP,CAAQ,EAC3DM,EAAA,cAAC,OAAI,UAAWC,EAAO,aAAgB,EAAAN,CAAS,EAC/CK,EAAA,cAAA,MAAA,CAAI,UAAWC,EAAO,mBACnBL,GAAcC,IACbG,EAAA,cAAA,MAAA,CAAI,UAAWE,EAAWD,EAAO,cAAeA,EAAO,2BAA2B,CAAC,CAAA,EACjFL,GACCI,EAAM,aAAaJ,EAAY,CAC7B,QAAS,UACT,iBAAkBM,EAAWD,EAAO,oBAAoB,CAAC,CAC1D,CAAA,EACFJ,GACCG,EAAM,aAAaH,EAAe,CAChC,QAAS,OACT,iBAAkBK,EAAWD,EAAO,uBAAuB,CAAC,CAC7D,CAAA,CACL,EAEDH,GACCE,EAAA,cAAC,OAAI,UAAWE,EAAWD,EAAO,cAAeA,EAAO,2BAA2B,CAAC,GAAIH,CAAkB,EAE3GC,GACEC,EAAA,cAAA,MAAA,CAAI,UAAWC,EAAO,aAAA,EACpBD,EAAM,aAAaD,EAAc,CAChC,QAAS,YAAA,CACV,CACH,CAEJ,CACF,EAIJI,EAAeV"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Step/Step.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useSticky } from '../../hooks/useSticky';\nimport { ButtonProps } from '../Button';\nimport { StepperProps } from '../Stepper';\n\nimport styles from './styles.module.scss';\n\ninterface StepProps {\n /** Stepper viser fremdriften */\n stepper?: React.ReactElement<StepperProps>;\n /** Innhold i steget */\n children: React.ReactNode;\n /** Knapp for å gå tilbake. Vises med \"outline\" variant. */\n backButton?: React.ReactElement<ButtonProps>;\n /** Knapp for å gå videre. Vises med \"fill\" variant. */\n forwardButton?: React.ReactElement<ButtonProps>;\n /** Ekstra knapper. Valgfritt utseende. */\n additionalButtons?: React.ReactElement<ButtonProps>[];\n /** Knapp for å avbryte eller fortsette senere. Vises med \"borderless\" variant. */\n cancelButton?: React.ReactElement<ButtonProps>;\n /** Knappene vil vises sticky nederst på skjermen dersom innholdet i Step tar mer plass enn vinduet. Default: false */\n stickyButtons?: boolean;\n}\n\nconst Step: React.FC<StepProps> = ({\n stepper,\n children,\n backButton,\n forwardButton,\n additionalButtons,\n cancelButton,\n stickyButtons = false,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const navigationRef = useRef<HTMLDivElement>(null);\n const { isOutsideWindow, offsetHeight, contentWidth } = useSticky(contentRef, navigationRef, 'bottom');\n\n const isSticky = stickyButtons && isOutsideWindow;\n const hasNavigation = backButton || forwardButton || additionalButtons || cancelButton;\n\n const contentClasses = classNames(!hasNavigation && styles['step__content--no-navigation']);\n const navigationClasses = classNames(\n styles.step__navigation,\n !hasNavigation && styles['step__navigation--hidden'],\n stickyButtons && styles['step__navigation--has-sticky-buttons'],\n isSticky && styles['step__navigation--is-sticky']\n );\n\n return (\n <div className={classNames(stickyButtons && styles['step--has-sticky-buttons'])}>\n {stepper && <div className={styles.step__stepper}>{stepper}</div>}\n <div\n className={contentClasses}\n ref={contentRef}\n style={{ paddingBottom: stickyButtons && offsetHeight ? `${offsetHeight}px` : undefined }}\n >\n {children}\n </div>\n <div\n className={navigationClasses}\n ref={navigationRef}\n style={{\n width: stickyButtons && contentWidth ? `${contentWidth}px` : undefined,\n }}\n >\n {(backButton || forwardButton) && (\n <div className={classNames(styles.step__buttons, styles['step__buttons--navigation'])}>\n {backButton &&\n React.cloneElement(backButton, {\n variant: 'outline',\n wrapperClassName: classNames(styles['step__button--back']),\n })}\n {forwardButton &&\n React.cloneElement(forwardButton, {\n variant: 'fill',\n wrapperClassName: classNames(styles['step__button--forward']),\n })}\n </div>\n )}\n {additionalButtons && (\n <div className={classNames(styles.step__buttons, styles['step__buttons--additional'])}>{additionalButtons}</div>\n )}\n {cancelButton && (\n <div className={styles.step__buttons}>\n {React.cloneElement(cancelButton, {\n variant: 'borderless',\n })}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Step;\n"],"names":["Step","stepper","children","backButton","forwardButton","additionalButtons","cancelButton","stickyButtons","contentRef","useRef","navigationRef","isOutsideWindow","offsetHeight","contentWidth","useSticky","isSticky","hasNavigation","contentClasses","classNames","styles","navigationClasses","React","Step$1"],"mappings":"2NA2BA,MAAMA,EAA4B,CAAC,CACjC,QAAAC,EACA,SAAAC,EACA,WAAAC,EACA,cAAAC,EACA,kBAAAC,EACA,aAAAC,EACA,cAAAC,EAAgB,EAClB,IAAM,CACE,MAAAC,EAAaC,EAAuB,IAAI,EACxCC,EAAgBD,EAAuB,IAAI,EAC3C,CAAE,gBAAAE,EAAiB,aAAAC,EAAc,aAAAC,CAAA,EAAiBC,EAAUN,EAAYE,EAAe,QAAQ,EAE/FK,EAAWR,GAAiBI,EAC5BK,EAAgBb,GAAcC,GAAiBC,GAAqBC,EAEpEW,EAAiBC,EAAW,CAACF,GAAiBG,EAAO,8BAA8B,CAAC,EACpFC,EAAoBF,EACxBC,EAAO,iBACP,CAACH,GAAiBG,EAAO,0BAA0B,EACnDZ,GAAiBY,EAAO,sCAAsC,EAC9DJ,GAAYI,EAAO,6BAA6B,CAAA,EAGlD,uBACG,MAAI,CAAA,UAAWD,EAAWX,GAAiBY,EAAO,0BAA0B,CAAC,CAC3E,EAAAlB,mBAAY,MAAI,CAAA,UAAWkB,EAAO,eAAgBlB,CAAQ,EAC3DoB,EAAA,cAAC,MAAA,CACC,UAAWJ,EACX,IAAKT,EACL,MAAO,CAAE,cAAeD,GAAiBK,EAAe,GAAGA,MAAmB,MAAU,CAAA,EAEvFV,CAEH,EAAAmB,EAAA,cAAC,MAAA,CACC,UAAWD,EACX,IAAKV,EACL,MAAO,CACL,MAAOH,GAAiBM,EAAe,GAAGA,MAAmB,MAC/D,CAAA,GAEEV,GAAcC,IACbiB,EAAA,cAAA,MAAA,CAAI,UAAWH,EAAWC,EAAO,cAAeA,EAAO,2BAA2B,CAAC,CAAA,EACjFhB,GACCkB,EAAM,aAAalB,EAAY,CAC7B,QAAS,UACT,iBAAkBe,EAAWC,EAAO,oBAAoB,CAAC,CAC1D,CAAA,EACFf,GACCiB,EAAM,aAAajB,EAAe,CAChC,QAAS,OACT,iBAAkBc,EAAWC,EAAO,uBAAuB,CAAC,CAAA,CAC7D,CACL,EAEDd,GACEgB,EAAA,cAAA,MAAA,CAAI,UAAWH,EAAWC,EAAO,cAAeA,EAAO,2BAA2B,CAAC,CAAA,EAAId,CAAkB,EAE3GC,mBACE,MAAI,CAAA,UAAWa,EAAO,aACpB,EAAAE,EAAM,aAAaf,EAAc,CAChC,QAAS,YAAA,CACV,CACH,CAAA,CAGN,CAEJ,EAEAgB,EAAetB"}
@@ -6,19 +6,41 @@
6
6
  @import '../../scss/screen-reader';
7
7
 
8
8
  .step {
9
+ &--has-sticky-buttons {
10
+ position: relative;
11
+ }
12
+
9
13
  &__stepper {
10
14
  margin-bottom: getSpacer(m);
11
15
  }
12
16
 
13
17
  &__content {
14
- margin-bottom: getSpacer(m);
18
+ &--no-navigation {
19
+ margin-bottom: getSpacer(m);
20
+ }
15
21
  }
16
22
 
17
23
  &__navigation {
24
+ padding-top: getSpacer(m);
25
+ padding-bottom: getSpacer(s);
18
26
  display: flex;
19
27
  flex-wrap: wrap;
20
28
  column-gap: getSpacer(l);
21
29
  row-gap: getSpacer(m);
30
+
31
+ &--hidden {
32
+ display: none;
33
+ }
34
+
35
+ &--has-sticky-buttons {
36
+ position: absolute;
37
+ bottom: 0;
38
+ }
39
+
40
+ &--is-sticky {
41
+ background-color: $white;
42
+ position: fixed;
43
+ }
22
44
  }
23
45
 
24
46
  &__buttons {
@@ -3,9 +3,13 @@ export type Styles = {
3
3
  'step__button--forward': string;
4
4
  step__buttons: string;
5
5
  'step__buttons--additional': string;
6
- step__content: string;
6
+ 'step__content--no-navigation': string;
7
7
  step__navigation: string;
8
+ 'step__navigation--has-sticky-buttons': string;
9
+ 'step__navigation--hidden': string;
10
+ 'step__navigation--is-sticky': string;
8
11
  step__stepper: string;
12
+ 'step--has-sticky-buttons': string;
9
13
  };
10
14
 
11
15
  export type ClassNames = keyof Styles;