@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.
Files changed (225) hide show
  1. package/AnchorLink.js +1 -1
  2. package/AnchorLink.js.map +1 -1
  3. package/Button.js.map +1 -1
  4. package/CHANGELOG.md +64 -3
  5. package/Checkbox.js +1 -1
  6. package/Close.js +1 -1
  7. package/Close.js.map +1 -1
  8. package/FormGroup.js +1 -1
  9. package/FormGroup.js.map +1 -1
  10. package/FormLayout.js.map +1 -1
  11. package/HighlightBox.js +2 -0
  12. package/HighlightBox.js.map +1 -0
  13. package/Input.js +1 -1
  14. package/Input.js.map +1 -1
  15. package/ListHeader.js.map +1 -1
  16. package/ListHeaderText.js +1 -1
  17. package/ListHeaderText.js.map +1 -1
  18. package/MaxCharacters.js.map +1 -1
  19. package/Modal.js +1 -1
  20. package/Modal.js.map +1 -1
  21. package/Panel.js +1 -1
  22. package/Panel.js.map +1 -1
  23. package/README.md +9 -51
  24. package/RadioButton.js +1 -1
  25. package/Select.js.map +1 -1
  26. package/StatusDot.js +1 -1
  27. package/StatusDot.js.map +1 -1
  28. package/Table.js +1 -1
  29. package/Table.js.map +1 -1
  30. package/TableBody.js +1 -1
  31. package/TableBody.js.map +1 -1
  32. package/TableExpandedRow.js +1 -1
  33. package/TableExpandedRow.js.map +1 -1
  34. package/TableHead.js +1 -1
  35. package/TableHead.js.map +1 -1
  36. package/TableRow.js +1 -1
  37. package/TableRow.js.map +1 -1
  38. package/Textarea.js +1 -1
  39. package/Textarea.js.map +1 -1
  40. package/Title.js.map +1 -1
  41. package/Trigger.js +2 -0
  42. package/Trigger.js.map +1 -0
  43. package/__mocks__/useHover.d.ts +2 -0
  44. package/__mocks__/useHover.d.ts.map +1 -0
  45. package/__mocks__/useHover.js +2 -0
  46. package/__mocks__/useHover.js.map +1 -0
  47. package/__mocks__/useOutsideEvent.d.ts +2 -0
  48. package/__mocks__/useOutsideEvent.d.ts.map +1 -0
  49. package/__mocks__/useOutsideEvent.js +2 -0
  50. package/__mocks__/useOutsideEvent.js.map +1 -0
  51. package/__mocks__/useSize.d.ts +2 -0
  52. package/__mocks__/useSize.d.ts.map +1 -0
  53. package/__mocks__/useSize.js +2 -0
  54. package/__mocks__/useSize.js.map +1 -0
  55. package/__mocks__/uuid.js +1 -1
  56. package/__mocks__/uuid.js.map +1 -1
  57. package/components/AnchorLink/index.js +1 -1
  58. package/components/Button/index.js +1 -1
  59. package/components/ButtonWithModal/index.js +1 -1
  60. package/components/ButtonWithModal/index.js.map +1 -1
  61. package/components/Checkbox/styles.module.scss +13 -0
  62. package/components/Close/Close.d.ts +0 -2
  63. package/components/Close/Close.d.ts.map +1 -1
  64. package/components/Close/componentdata.json +1 -1
  65. package/components/Close/index.js +1 -1
  66. package/components/DictionaryTrigger/DictionaryTrigger.d.ts +22 -0
  67. package/components/DictionaryTrigger/DictionaryTrigger.d.ts.map +1 -0
  68. package/components/DictionaryTrigger/componentdata.json +1 -0
  69. package/components/DictionaryTrigger/index.d.ts +4 -0
  70. package/components/DictionaryTrigger/index.d.ts.map +1 -0
  71. package/components/DictionaryTrigger/index.js +2 -0
  72. package/components/DictionaryTrigger/index.js.map +1 -0
  73. package/components/DictionaryTrigger/styles.module.scss +41 -0
  74. package/components/DictionaryTrigger/styles.module.scss.d.ts +9 -0
  75. package/components/Dropdown/index.js +1 -1
  76. package/components/Dropdown/index.js.map +1 -1
  77. package/components/Dropdown/styles.module.scss +1 -0
  78. package/components/Duolist/index.js.map +1 -1
  79. package/components/Expander/index.js +1 -1
  80. package/components/Expander/index.js.map +1 -1
  81. package/components/ExpanderHierarchy/ExpanderButton.d.ts.map +1 -1
  82. package/components/ExpanderHierarchy/expander.module.scss +14 -7
  83. package/components/ExpanderHierarchy/expander.module.scss.d.ts +2 -0
  84. package/components/ExpanderHierarchy/index.js +1 -1
  85. package/components/ExpanderHierarchy/index.js.map +1 -1
  86. package/components/ExpanderList/index.js +1 -1
  87. package/components/ExpanderList/index.js.map +1 -1
  88. package/components/FormExample/index.js +3 -3
  89. package/components/FormExample/index.js.map +1 -1
  90. package/components/FormGroup/FormGroup.d.ts +3 -1
  91. package/components/FormGroup/FormGroup.d.ts.map +1 -1
  92. package/components/FormGroup/componentdata.json +1 -1
  93. package/components/HelpBubble/index.js +1 -1
  94. package/components/HelpBubbleExample/index.js +1 -1
  95. package/components/HelpBubbleExample/index.js.map +1 -1
  96. package/components/HelpPanel/HelpPanel.d.ts +17 -0
  97. package/components/HelpPanel/HelpPanel.d.ts.map +1 -0
  98. package/components/HelpPanel/componentdata.json +1 -0
  99. package/components/HelpPanel/index.d.ts +4 -0
  100. package/components/HelpPanel/index.d.ts.map +1 -0
  101. package/components/HelpPanel/index.js +2 -0
  102. package/components/HelpPanel/index.js.map +1 -0
  103. package/components/HelpPanel/styles.module.scss +5 -0
  104. package/components/HelpPanel/styles.module.scss.d.ts +9 -0
  105. package/components/HelpQuestion/HelpQuestion.d.ts +22 -0
  106. package/components/HelpQuestion/HelpQuestion.d.ts.map +1 -0
  107. package/components/HelpQuestion/componentdata.json +1 -0
  108. package/components/HelpQuestion/index.d.ts +4 -0
  109. package/components/HelpQuestion/index.d.ts.map +1 -0
  110. package/components/HelpQuestion/index.js +2 -0
  111. package/components/HelpQuestion/index.js.map +1 -0
  112. package/components/HelpQuestion/styles.module.scss +49 -0
  113. package/components/HelpQuestion/styles.module.scss.d.ts +10 -0
  114. package/components/HighlightBox/HighlightBox.d.ts +7 -0
  115. package/components/HighlightBox/HighlightBox.d.ts.map +1 -1
  116. package/components/HighlightBox/componentdata.json +1 -1
  117. package/components/HighlightBox/index.js +1 -1
  118. package/components/HighlightBox/index.js.map +1 -1
  119. package/components/HighlightBox/styles.module.scss +15 -0
  120. package/components/HighlightBox/styles.module.scss.d.ts +2 -0
  121. package/components/Label/componentdata.json +1 -1
  122. package/components/LinkList/index.js +1 -1
  123. package/components/List/index.js.map +1 -1
  124. package/components/ListHeader/ListHeader.d.ts +1 -0
  125. package/components/ListHeader/ListHeader.d.ts.map +1 -1
  126. package/components/ListHeader/ListHeaderText/ListHeaderText.d.ts.map +1 -1
  127. package/components/Loader/index.js +1 -1
  128. package/components/Logo/Logo.d.ts +2 -2
  129. package/components/Logo/Logo.d.ts.map +1 -1
  130. package/components/Logo/componentdata.json +1 -1
  131. package/components/Logo/index.js +1 -1
  132. package/components/Logo/index.js.map +1 -1
  133. package/components/Modal/index.js +1 -1
  134. package/components/Modal/styles.module.scss +1 -0
  135. package/components/NotificationPanel/NotificationPanel.d.ts +1 -1
  136. package/components/NotificationPanel/NotificationPanel.d.ts.map +1 -1
  137. package/components/NotificationPanel/componentdata.json +1 -1
  138. package/components/NotificationPanel/index.js +1 -1
  139. package/components/NotificationPanel/index.js.map +1 -1
  140. package/components/Panel/Panel.d.ts +3 -1
  141. package/components/Panel/Panel.d.ts.map +1 -1
  142. package/components/Panel/componentdata.json +1 -1
  143. package/components/Panel/index.js +1 -1
  144. package/components/Panel/styles.module.scss +1 -0
  145. package/components/PanelList/index.js +1 -1
  146. package/components/PanelList/index.js.map +1 -1
  147. package/components/PopMenu/PopMenu.d.ts.map +1 -1
  148. package/components/PopMenu/index.js +1 -1
  149. package/components/PopMenu/index.js.map +1 -1
  150. package/components/RadioButton/styles.module.scss +13 -0
  151. package/components/ServiceMessage/ServiceMessage.d.ts +6 -3
  152. package/components/ServiceMessage/ServiceMessage.d.ts.map +1 -1
  153. package/components/ServiceMessage/componentdata.json +1 -1
  154. package/components/ServiceMessage/index.js +1 -1
  155. package/components/ServiceMessage/index.js.map +1 -1
  156. package/components/ServiceMessage/styles.module.scss +139 -238
  157. package/components/ServiceMessage/styles.module.scss.d.ts +17 -34
  158. package/components/Slider/index.js.map +1 -1
  159. package/components/Step/Step.d.ts +2 -0
  160. package/components/Step/Step.d.ts.map +1 -1
  161. package/components/Step/componentdata.json +1 -1
  162. package/components/Step/index.js +1 -1
  163. package/components/Step/index.js.map +1 -1
  164. package/components/Step/styles.module.scss +23 -1
  165. package/components/Step/styles.module.scss.d.ts +5 -1
  166. package/components/Stepper/index.js.map +1 -1
  167. package/components/Table/TableExpandedRow/TableExpandedRow.d.ts +3 -1
  168. package/components/Table/TableExpandedRow/TableExpandedRow.d.ts.map +1 -1
  169. package/components/Table/TableExpandedRow/componentdata.json +1 -1
  170. package/components/Table/TableExpandedRow/index.js +1 -1
  171. package/components/Table/TableExpanderCell/index.js +1 -1
  172. package/components/Table/TableRow/index.js +1 -1
  173. package/components/Table/index.js +1 -1
  174. package/components/Table/styles.module.scss +2 -2
  175. package/components/Tag/index.js +1 -1
  176. package/components/Tag/index.js.map +1 -1
  177. package/components/Tag/styles.module.scss +0 -15
  178. package/components/Tile/Tile.d.ts +1 -7
  179. package/components/Tile/Tile.d.ts.map +1 -1
  180. package/components/Tile/componentdata.json +1 -1
  181. package/components/Tile/index.js +1 -1
  182. package/components/Tile/index.js.map +1 -1
  183. package/components/Tile/styles.module.scss +0 -4
  184. package/components/Tile/styles.module.scss.d.ts +0 -1
  185. package/components/Tooltip/index.js +1 -1
  186. package/components/TooltipExample/index.js +1 -1
  187. package/components/TooltipExample/index.js.map +1 -1
  188. package/components/Trigger/HelpSign.d.ts +5 -0
  189. package/components/Trigger/HelpSign.d.ts.map +1 -0
  190. package/components/Trigger/InfoSignStroke.d.ts +5 -0
  191. package/components/Trigger/InfoSignStroke.d.ts.map +1 -0
  192. package/components/Trigger/Trigger.d.ts +50 -0
  193. package/components/Trigger/Trigger.d.ts.map +1 -0
  194. package/components/Trigger/componentdata.json +1 -0
  195. package/components/Trigger/index.d.ts +4 -0
  196. package/components/Trigger/index.d.ts.map +1 -0
  197. package/components/Trigger/index.js +2 -0
  198. package/components/Trigger/index.js.map +1 -0
  199. package/components/Trigger/styles.module.scss +88 -0
  200. package/components/Trigger/styles.module.scss.d.ts +16 -0
  201. package/constants.d.ts +6 -3
  202. package/constants.d.ts.map +1 -1
  203. package/constants.js +1 -1
  204. package/constants.js.map +1 -1
  205. package/hooks/useFocusToggle.js.map +1 -1
  206. package/hooks/useFocusTrap.js.map +1 -1
  207. package/hooks/useHover.d.ts.map +1 -1
  208. package/hooks/useHover.js +1 -1
  209. package/hooks/useHover.js.map +1 -1
  210. package/hooks/useSize.js.map +1 -1
  211. package/hooks/useSticky.d.ts +5 -4
  212. package/hooks/useSticky.d.ts.map +1 -1
  213. package/hooks/useSticky.js +1 -1
  214. package/hooks/useSticky.js.map +1 -1
  215. package/hooks/useUuid.js +1 -1
  216. package/hooks/useUuid.js.map +1 -1
  217. package/index.js +1 -1
  218. package/package.json +4 -1
  219. package/scss/_palette.scss +15 -0
  220. package/theme/currys/color.js.map +1 -1
  221. package/theme/currys/spacing.js.map +1 -1
  222. package/theme/grid.js.map +1 -1
  223. package/utils/focus.js.map +1 -1
  224. package/utils/uuid.js +1 -1
  225. 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
- 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;
@@ -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,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