@dnb/eufemia 9.23.0-beta.4 → 9.23.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 (44) hide show
  1. package/CHANGELOG.md +8 -31
  2. package/cjs/components/tabs/Tabs.js +104 -69
  3. package/cjs/components/tabs/style/_tabs.scss +10 -35
  4. package/cjs/components/tabs/style/dnb-tabs.css +13 -25
  5. package/cjs/components/tabs/style/dnb-tabs.min.css +1 -1
  6. package/cjs/components/tag/style/_tag.scss +10 -6
  7. package/cjs/components/tag/style/dnb-tag.css +13 -5
  8. package/cjs/components/tag/style/dnb-tag.min.css +1 -1
  9. package/cjs/shared/Eufemia.js +1 -1
  10. package/cjs/style/dnb-ui-components.css +26 -30
  11. package/cjs/style/dnb-ui-components.min.css +1 -1
  12. package/components/tabs/Tabs.js +104 -69
  13. package/components/tabs/style/_tabs.scss +10 -35
  14. package/components/tabs/style/dnb-tabs.css +13 -25
  15. package/components/tabs/style/dnb-tabs.min.css +1 -1
  16. package/components/tag/style/_tag.scss +10 -6
  17. package/components/tag/style/dnb-tag.css +13 -5
  18. package/components/tag/style/dnb-tag.min.css +1 -1
  19. package/es/components/tabs/Tabs.js +53 -23
  20. package/es/components/tabs/style/_tabs.scss +10 -35
  21. package/es/components/tabs/style/dnb-tabs.css +13 -25
  22. package/es/components/tabs/style/dnb-tabs.min.css +1 -1
  23. package/es/components/tag/style/_tag.scss +10 -6
  24. package/es/components/tag/style/dnb-tag.css +13 -5
  25. package/es/components/tag/style/dnb-tag.min.css +1 -1
  26. package/es/shared/Eufemia.js +1 -1
  27. package/es/style/dnb-ui-components.css +26 -30
  28. package/es/style/dnb-ui-components.min.css +1 -1
  29. package/esm/dnb-ui-basis.min.mjs +1 -1
  30. package/esm/dnb-ui-components.min.mjs +1 -1
  31. package/esm/dnb-ui-elements.min.mjs +1 -1
  32. package/esm/dnb-ui-extensions.min.mjs +1 -1
  33. package/esm/dnb-ui-lib.min.mjs +3 -3
  34. package/esm/dnb-ui-web-components.min.mjs +2 -2
  35. package/package.json +1 -1
  36. package/shared/Eufemia.js +1 -1
  37. package/style/dnb-ui-components.css +26 -30
  38. package/style/dnb-ui-components.min.css +1 -1
  39. package/umd/dnb-ui-basis.min.js +1 -1
  40. package/umd/dnb-ui-components.min.js +3 -3
  41. package/umd/dnb-ui-elements.min.js +1 -1
  42. package/umd/dnb-ui-extensions.min.js +1 -1
  43. package/umd/dnb-ui-lib.min.js +3 -3
  44. package/umd/dnb-ui-web-components.min.js +4 -4
@@ -68,18 +68,25 @@ var Tabs = function (_React$PureComponent) {
68
68
  if (_this._isMounted) {
69
69
  _this.addScrollBehaviour();
70
70
 
71
- _this.setScrollbarState();
71
+ var hasScrollbar = _this.hasScrollbar();
72
72
 
73
- _this.scrollToTab({
74
- type: 'focus',
75
- behavior: 'auto'
76
- });
73
+ var hasLastPosition = _this.hasLastPosition();
77
74
 
78
- _this.scrollToTab({
79
- type: 'selected',
80
- behavior: 'auto'
75
+ _this.setScrollbarState({
76
+ hasScrollbar: hasScrollbar
81
77
  });
82
78
 
79
+ if (hasLastPosition) {
80
+ _this.setLeftPosition(_this.state.lastPosition);
81
+ }
82
+
83
+ if (hasScrollbar) {
84
+ _this.scrollToTab({
85
+ type: 'selected',
86
+ behavior: hasLastPosition ? 'smooth' : 'auto'
87
+ });
88
+ }
89
+
83
90
  if (_this.hasLastUsedTab() !== null) {
84
91
  _this.setState(null, _this.setFocusOnTabButton);
85
92
  }
@@ -87,19 +94,25 @@ var Tabs = function (_React$PureComponent) {
87
94
  });
88
95
 
89
96
  _defineProperty(_assertThisInitialized(_this), "setScrollbarState", function () {
90
- var hasScrollbar = _this.hasScrollbar();
97
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
98
+ _ref$hasScrollbar = _ref.hasScrollbar,
99
+ hasScrollbar = _ref$hasScrollbar === void 0 ? _this.hasScrollbar() : _ref$hasScrollbar;
91
100
 
92
101
  if (hasScrollbar !== _this.state.hasScrollbar) {
93
102
  _this.setState({
94
103
  hasScrollbar: hasScrollbar
95
104
  });
96
105
  }
97
-
98
- return hasScrollbar;
99
106
  });
100
107
 
101
108
  _defineProperty(_assertThisInitialized(_this), "onResizeHandler", function () {
102
- if (_this.setScrollbarState()) {
109
+ var hasScrollbar = _this.hasScrollbar();
110
+
111
+ _this.setScrollbarState({
112
+ hasScrollbar: hasScrollbar
113
+ });
114
+
115
+ if (hasScrollbar) {
103
116
  _this.scrollToTab({
104
117
  type: 'selected'
105
118
  });
@@ -272,8 +285,8 @@ var Tabs = function (_React$PureComponent) {
272
285
  _defineProperty(_assertThisInitialized(_this), "getCurrentTitle", function () {
273
286
  var selected_key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.state.selected_key;
274
287
 
275
- var current = _this.state.data.filter(function (_ref) {
276
- var key = _ref.key;
288
+ var current = _this.state.data.filter(function (_ref2) {
289
+ var key = _ref2.key;
277
290
  return key == selected_key;
278
291
  })[0];
279
292
 
@@ -387,11 +400,11 @@ var Tabs = function (_React$PureComponent) {
387
400
  }
388
401
 
389
402
  if (items) {
390
- content = items.filter(function (_ref2) {
391
- var key = _ref2.key;
403
+ content = items.filter(function (_ref3) {
404
+ var key = _ref3.key;
392
405
  return key && selected_key && key == selected_key;
393
- }).reduce(function (acc, _ref3) {
394
- var content = _ref3.content;
406
+ }).reduce(function (acc, _ref4) {
407
+ var content = _ref4.content;
395
408
  return content || acc;
396
409
  }, null);
397
410
  }
@@ -405,9 +418,9 @@ var Tabs = function (_React$PureComponent) {
405
418
  return content;
406
419
  });
407
420
 
408
- _defineProperty(_assertThisInitialized(_this), "TabsWrapperHandler", function (_ref4) {
409
- var children = _ref4.children,
410
- rest = _objectWithoutProperties(_ref4, _excluded);
421
+ _defineProperty(_assertThisInitialized(_this), "TabsWrapperHandler", function (_ref5) {
422
+ var children = _ref5.children,
423
+ rest = _objectWithoutProperties(_ref5, _excluded);
411
424
 
412
425
  var _this$props2 = _this.props,
413
426
  className = _this$props2.className,
@@ -424,10 +437,10 @@ var Tabs = function (_React$PureComponent) {
424
437
  return React.createElement("div", _extends({}, params, rest), children);
425
438
  });
426
439
 
427
- _defineProperty(_assertThisInitialized(_this), "TabsListHandler", function (_ref5) {
428
- var children = _ref5.children,
429
- className = _ref5.className,
430
- rest = _objectWithoutProperties(_ref5, _excluded2);
440
+ _defineProperty(_assertThisInitialized(_this), "TabsListHandler", function (_ref6) {
441
+ var children = _ref6.children,
442
+ className = _ref6.className,
443
+ rest = _objectWithoutProperties(_ref6, _excluded2);
431
444
 
432
445
  var _this$props3 = _this.props,
433
446
  align = _this$props3.align,
@@ -442,11 +455,11 @@ var Tabs = function (_React$PureComponent) {
442
455
  }, rest), React.createElement(ScrollNavButton, {
443
456
  onMouseDown: _this.openPrevTab,
444
457
  icon: "chevron_left",
445
- className: classnames(hasScrollbar && typeof _this.state.isFirst !== 'undefined' && 'dnb-tabs__scroll-nav-button--visible', _this.state.isFirst && 'dnb-tabs__scroll-nav-button--hide')
458
+ className: classnames(hasScrollbar && (typeof _this.state.isFirst !== 'undefined' || _this.hasLastPosition()) && 'dnb-tabs__scroll-nav-button--visible', _this.state.isFirst && 'dnb-tabs__scroll-nav-button--hide')
446
459
  }), children, React.createElement(ScrollNavButton, {
447
460
  onMouseDown: _this.openNextTab,
448
461
  icon: "chevron_right",
449
- className: classnames(hasScrollbar && typeof _this.state.isLast !== 'undefined' && 'dnb-tabs__scroll-nav-button--visible', _this.state.isLast && 'dnb-tabs__scroll-nav-button--hide')
462
+ className: classnames(hasScrollbar && (typeof _this.state.isLast !== 'undefined' || _this.hasLastPosition()) && 'dnb-tabs__scroll-nav-button--visible', _this.state.isLast && 'dnb-tabs__scroll-nav-button--hide')
450
463
  }));
451
464
  });
452
465
 
@@ -476,13 +489,13 @@ var Tabs = function (_React$PureComponent) {
476
489
  var selected_key = _this.state.selected_key;
477
490
  var TabElement = tab_element || 'button';
478
491
 
479
- var tabs = _this.state.data.map(function (_ref6) {
480
- var title = _ref6.title,
481
- key = _ref6.key,
482
- _ref6$disabled = _ref6.disabled,
483
- disabled = _ref6$disabled === void 0 ? false : _ref6$disabled,
484
- to = _ref6.to,
485
- href = _ref6.href;
492
+ var tabs = _this.state.data.map(function (_ref7) {
493
+ var title = _ref7.title,
494
+ key = _ref7.key,
495
+ _ref7$disabled = _ref7.disabled,
496
+ disabled = _ref7$disabled === void 0 ? false : _ref7$disabled,
497
+ to = _ref7.to,
498
+ href = _ref7.href;
486
499
  var itemParams = {
487
500
  to: to,
488
501
  href: href
@@ -566,6 +579,7 @@ var Tabs = function (_React$PureComponent) {
566
579
  selected_key: _selected_key,
567
580
  focus_key: _selected_key,
568
581
  atEdge: false,
582
+ lastPosition: lastPosition,
569
583
  hasScrollbar: lastPosition > -1,
570
584
  _selected_key: _selected_key,
571
585
  _data: _props.data || _props.children,
@@ -628,14 +642,19 @@ var Tabs = function (_React$PureComponent) {
628
642
  }
629
643
  }
630
644
  }
645
+ }, {
646
+ key: "hasLastPosition",
647
+ value: function hasLastPosition() {
648
+ return this.state.lastPosition > -1;
649
+ }
631
650
  }, {
632
651
  key: "getLastPosition",
633
652
  value: function getLastPosition() {
634
653
  if (typeof window !== 'undefined') {
635
654
  try {
636
- var pos = parseFloat(window.localStorage.getItem("tabs-pos-".concat(this._id))) || -1;
655
+ var pos = parseFloat(window.localStorage.getItem("tabs-pos-".concat(this._id)));
637
656
  window.localStorage.removeItem("tabs-pos-".concat(this._id));
638
- return pos;
657
+ return isNaN(pos) ? -1 : pos;
639
658
  } catch (e) {
640
659
  warn(e);
641
660
  }
@@ -672,11 +691,11 @@ var Tabs = function (_React$PureComponent) {
672
691
  }, {
673
692
  key: "saveLastPosition",
674
693
  value: function saveLastPosition() {
675
- var pos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._tablistRef.current.scrollLeft;
694
+ var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._tablistRef.current.scrollLeft;
676
695
 
677
696
  if (typeof window !== 'undefined') {
678
697
  try {
679
- window.localStorage.setItem("tabs-pos-".concat(this._id), pos);
698
+ window.localStorage.setItem("tabs-pos-".concat(this._id), position);
680
699
  } catch (e) {
681
700
  warn(e);
682
701
  }
@@ -694,14 +713,23 @@ var Tabs = function (_React$PureComponent) {
694
713
  window.addEventListener('resize', this.onResizeHandler);
695
714
  }
696
715
  }
716
+ }, {
717
+ key: "setLeftPosition",
718
+ value: function setLeftPosition(scrollLeft) {
719
+ try {
720
+ this._tablistRef.current.style.scrollBehavior = 'auto';
721
+ this._tablistRef.current.scrollLeft = scrollLeft;
722
+ this._tablistRef.current.style.scrollBehavior = 'smooth';
723
+ } catch (e) {}
724
+ }
697
725
  }, {
698
726
  key: "scrollToTab",
699
- value: function scrollToTab(_ref7) {
727
+ value: function scrollToTab(_ref8) {
700
728
  var _this2 = this;
701
729
 
702
- var type = _ref7.type,
703
- _ref7$behavior = _ref7.behavior,
704
- behavior = _ref7$behavior === void 0 ? 'smooth' : _ref7$behavior;
730
+ var type = _ref8.type,
731
+ _ref8$behavior = _ref8.behavior,
732
+ behavior = _ref8$behavior === void 0 ? 'smooth' : _ref8$behavior;
705
733
 
706
734
  if (typeof window === 'undefined') {
707
735
  return;
@@ -727,6 +755,14 @@ var Tabs = function (_React$PureComponent) {
727
755
  var style = window.getComputedStyle(_this2._tabsRef.current);
728
756
  var margin = parseFloat(style.marginLeft);
729
757
  var padding = margin < 0 ? parseFloat(style.paddingLeft) : 0;
758
+
759
+ if (!isFirst && !isLast && parseFloat(style.paddingLeft) < 16) {
760
+ var navButton = _this2._tabsRef.current.querySelector('.dnb-tabs__scroll-nav-button:first-of-type');
761
+
762
+ var additionalSpace = parseFloat(window.getComputedStyle(navButton).width) * 1.5;
763
+ padding += additionalSpace;
764
+ }
765
+
730
766
  var leftPadding = (margin < 0 ? Math.abs(margin) : 0) + padding + parseFloat(window.getComputedStyle(first).paddingLeft);
731
767
  var offsetLeft = elem.offsetLeft;
732
768
  var left = elem && !isFirst ? offsetLeft - leftPadding : 0;
@@ -763,12 +799,12 @@ var Tabs = function (_React$PureComponent) {
763
799
  }, {
764
800
  key: "getStepKey",
765
801
  value: function getStepKey(useKey, stateKey) {
766
- var currentData = this.state.data.filter(function (_ref8) {
767
- var disabled = _ref8.disabled;
802
+ var currentData = this.state.data.filter(function (_ref9) {
803
+ var disabled = _ref9.disabled;
768
804
  return !disabled;
769
805
  });
770
- var currentIndex = currentData.reduce(function (acc, _ref9, i) {
771
- var key = _ref9.key;
806
+ var currentIndex = currentData.reduce(function (acc, _ref10, i) {
807
+ var key = _ref10.key;
772
808
  return key == stateKey ? i : acc;
773
809
  }, -1);
774
810
  var nextIndex = currentIndex + useKey;
@@ -781,8 +817,8 @@ var Tabs = function (_React$PureComponent) {
781
817
  nextIndex = 0;
782
818
  }
783
819
 
784
- return currentData.reduce(function (acc, _ref10, i) {
785
- var key = _ref10.key;
820
+ return currentData.reduce(function (acc, _ref11, i) {
821
+ var key = _ref11.key;
786
822
  return i === nextIndex ? key : acc;
787
823
  }, null);
788
824
  }
@@ -838,10 +874,10 @@ var Tabs = function (_React$PureComponent) {
838
874
  prerender = _this$props4.prerender;
839
875
 
840
876
  if (isTrue(prerender)) {
841
- this._cache = Object.entries(data).reduce(function (acc, _ref11) {
842
- var _ref12 = _slicedToArray(_ref11, 2),
843
- idx = _ref12[0],
844
- cur = _ref12[1];
877
+ this._cache = Object.entries(data).reduce(function (acc, _ref12) {
878
+ var _ref13 = _slicedToArray(_ref12, 2),
879
+ idx = _ref13[0],
880
+ cur = _ref13[1];
845
881
 
846
882
  acc[cur.key] = _objectSpread(_objectSpread({}, cur), {}, {
847
883
  content: _this3.getContent(cur.key)
@@ -854,10 +890,10 @@ var Tabs = function (_React$PureComponent) {
854
890
  }));
855
891
  }
856
892
 
857
- var cachedContent = Object.entries(this._cache).map(function (_ref13) {
858
- var _ref14 = _slicedToArray(_ref13, 2),
859
- key = _ref14[0],
860
- content = _ref14[1].content;
893
+ var cachedContent = Object.entries(this._cache).map(function (_ref14) {
894
+ var _ref15 = _slicedToArray(_ref14, 2),
895
+ key = _ref15[0],
896
+ content = _ref15[1].content;
861
897
 
862
898
  var params = {};
863
899
 
@@ -926,14 +962,14 @@ var Tabs = function (_React$PureComponent) {
926
962
  var useKey = selected_key;
927
963
 
928
964
  if (!useKey) {
929
- useKey = data.reduce(function (acc, _ref15) {
930
- var selected = _ref15.selected,
931
- key = _ref15.key;
965
+ useKey = data.reduce(function (acc, _ref16) {
966
+ var selected = _ref16.selected,
967
+ key = _ref16.key;
932
968
  return selected ? key : acc;
933
969
  }, null) || data[0] && data[0].key;
934
970
  } else {
935
- var keyExists = data.findIndex(function (_ref16) {
936
- var key = _ref16.key;
971
+ var keyExists = data.findIndex(function (_ref17) {
972
+ var key = _ref17.key;
937
973
  return key == selected_key;
938
974
  });
939
975
 
@@ -1010,10 +1046,10 @@ var Tabs = function (_React$PureComponent) {
1010
1046
  } else if (typeof data === 'string') {
1011
1047
  res = data[0] === '[' ? JSON.parse(data) : [];
1012
1048
  } else if (data && _typeof(data) === 'object') {
1013
- res = Object.entries(data).reduce(function (acc, _ref17) {
1014
- var _ref18 = _slicedToArray(_ref17, 2),
1015
- key = _ref18[0],
1016
- obj = _ref18[1];
1049
+ res = Object.entries(data).reduce(function (acc, _ref18) {
1050
+ var _ref19 = _slicedToArray(_ref18, 2),
1051
+ key = _ref19[0],
1052
+ obj = _ref19[1];
1017
1053
 
1018
1054
  if (obj) {
1019
1055
  acc.push(_objectSpread({
@@ -1109,8 +1145,8 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes = _objectSpread(_objectSp
1109
1145
  on_click: PropTypes.func,
1110
1146
  on_focus: PropTypes.func
1111
1147
  }) : void 0;
1112
- export var Dummy = function Dummy(_ref19) {
1113
- var children = _ref19.children;
1148
+ export var Dummy = function Dummy(_ref20) {
1149
+ var children = _ref20.children;
1114
1150
  return React.createElement("span", {
1115
1151
  "aria-hidden": true,
1116
1152
  hidden: true,
@@ -1127,8 +1163,7 @@ var ScrollNavButton = function ScrollNavButton(props) {
1127
1163
  variant: "primary",
1128
1164
  tabIndex: "-1",
1129
1165
  bounding: true,
1130
- "aria-hidden": true,
1131
- icon_size: "medium"
1166
+ "aria-hidden": true
1132
1167
  }, props, {
1133
1168
  className: classnames('dnb-tabs__scroll-nav-button', props.className)
1134
1169
  }));
@@ -58,11 +58,13 @@
58
58
  }
59
59
 
60
60
  &__scroll-nav-button {
61
- position: relative;
61
+ position: absolute;
62
62
  z-index: 2;
63
63
 
64
- &.dnb-button--primary {
65
- background-color: var(--color-emerald-green);
64
+ right: -2px;
65
+ &:first-of-type {
66
+ left: -2px;
67
+ right: auto;
66
68
  }
67
69
 
68
70
  display: none; // use "none" to remove it from markup by default
@@ -155,39 +157,19 @@
155
157
  padding-right: 0.5rem;
156
158
  }
157
159
 
158
- // Make the transition smooth when its the first or last item
159
- // keep focus and selected separate
160
- &:first-of-type.selected.focus,
161
- &:last-of-type.focus,
162
- &:last-of-type.selected {
163
- transition: padding 1s #{$defaultEasing} 10ms;
164
- }
160
+ will-change: padding;
161
+ transition: padding 1s #{$defaultEasing};
165
162
  }
166
163
 
167
- &--has-scrollbar &__button__snap {
168
- &:first-of-type {
169
- margin-left: -3rem;
170
- padding-left: 3rem;
171
- }
172
- &:last-of-type {
173
- margin-right: -3rem;
174
- padding-right: 3rem;
175
- }
176
-
177
- &:first-of-type.focus,
178
- &:first-of-type.selected.focus {
179
- padding-left: 0;
180
-
164
+ html[data-whatinput='keyboard'] &__button__snap {
165
+ &:first-of-type.focus {
181
166
  // add space so the focus ring is visible within our overflow
182
167
  .dnb-tabs__button:focus {
183
168
  margin-left: 0.5rem;
184
169
  }
185
170
  }
186
171
 
187
- &:last-of-type.focus,
188
- &:last-of-type.selected.focus {
189
- padding-right: 0;
190
-
172
+ &:last-of-type.focus {
191
173
  // add space so the focus ring is visible within our overflow
192
174
  /* stylelint-disable */
193
175
  .dnb-tabs__button:focus {
@@ -197,13 +179,6 @@
197
179
  }
198
180
  }
199
181
 
200
- // Do this in order to have the selected tab to be nice aligned during scrollTo
201
- &--has-scrollbar &__tabs__tablist {
202
- margin: 0 -2rem; // The width of the nav-button
203
- padding-left: 3rem;
204
- padding-right: 3rem;
205
- }
206
-
207
182
  /* stylelint-disable */
208
183
  html[data-visual-test] & &__button,
209
184
  html[data-visual-test] & &__button__snap,
@@ -152,16 +152,17 @@
152
152
  .dnb-tabs__tabs--no-border::before {
153
153
  content: none; }
154
154
  .dnb-tabs__scroll-nav-button {
155
- position: relative;
155
+ position: absolute;
156
156
  z-index: 2;
157
+ right: -2px;
157
158
  display: none;
158
159
  opacity: 0;
159
160
  pointer-events: none;
160
161
  -webkit-transition: opacity 600ms ease-out;
161
162
  transition: opacity 600ms ease-out; }
162
- .dnb-tabs__scroll-nav-button.dnb-button--primary {
163
- background-color: #14555a;
164
- background-color: var(--color-emerald-green); }
163
+ .dnb-tabs__scroll-nav-button:first-of-type {
164
+ left: -2px;
165
+ right: auto; }
165
166
  .dnb-tabs__scroll-nav-button--visible {
166
167
  display: -webkit-box;
167
168
  display: -ms-flexbox;
@@ -230,7 +231,10 @@
230
231
  display: -webkit-box;
231
232
  display: -ms-flexbox;
232
233
  display: flex;
233
- padding: 0 1rem 0 1.5rem; }
234
+ padding: 0 1rem 0 1.5rem;
235
+ will-change: padding;
236
+ -webkit-transition: padding 1s cubic-bezier(0.42, 0, 0, 1);
237
+ transition: padding 1s cubic-bezier(0.42, 0, 0, 1); }
234
238
  @media screen and (max-width: 40em) {
235
239
  .dnb-tabs__button__snap {
236
240
  padding: 0 1rem; } }
@@ -238,29 +242,13 @@
238
242
  padding-left: 0; }
239
243
  .dnb-tabs__button__snap:last-of-type {
240
244
  padding-right: 0.5rem; }
241
- .dnb-tabs__button__snap:first-of-type.selected.focus, .dnb-tabs__button__snap:last-of-type.focus, .dnb-tabs__button__snap:last-of-type.selected {
242
- -webkit-transition: padding 1s cubic-bezier(0.42, 0, 0, 1) 10ms;
243
- transition: padding 1s cubic-bezier(0.42, 0, 0, 1) 10ms; }
244
- .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type {
245
- margin-left: -3rem;
246
- padding-left: 3rem; }
247
- .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type {
248
- margin-right: -3rem;
249
- padding-right: 3rem; }
250
- .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.focus, .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.selected.focus {
251
- padding-left: 0; }
252
- .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.focus .dnb-tabs__button:focus, .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.selected.focus .dnb-tabs__button:focus {
253
- margin-left: 0.5rem; }
254
- .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.focus, .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.selected.focus {
255
- padding-right: 0;
245
+ html[data-whatinput='keyboard'] .dnb-tabs__button__snap:first-of-type.focus .dnb-tabs__button:focus {
246
+ margin-left: 0.5rem; }
247
+ html[data-whatinput='keyboard'] .dnb-tabs__button__snap:last-of-type.focus {
256
248
  /* stylelint-disable */
257
249
  /* stylelint-enable */ }
258
- .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.focus .dnb-tabs__button:focus, .dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.selected.focus .dnb-tabs__button:focus {
250
+ html[data-whatinput='keyboard'] .dnb-tabs__button__snap:last-of-type.focus .dnb-tabs__button:focus {
259
251
  margin-right: 0.5rem; }
260
- .dnb-tabs--has-scrollbar .dnb-tabs__tabs__tablist {
261
- margin: 0 -2rem;
262
- padding-left: 3rem;
263
- padding-right: 3rem; }
264
252
  html[data-visual-test] .dnb-tabs .dnb-tabs__button,
265
253
  html[data-visual-test] .dnb-tabs .dnb-tabs__button__snap,
266
254
  html[data-visual-test] .dnb-tabs .dnb-tabs__scroll-nav-button {
@@ -1 +1 @@
1
- .dnb-tabs{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;color:var(--color-black-80,#333);font-family:DNB,sans-serif;font-family:var(--font-family-default);font-size:1rem;font-size:var(--font-size-small);font-style:normal;font-weight:400;font-weight:var(--font-weight-basis);line-height:1.5rem;line-height:var(--line-height-basis);margin:0;padding:0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-break:break-word}.dnb-tabs *,.dnb-tabs :after,.dnb-tabs :before{background-repeat:no-repeat;-webkit-box-sizing:border-box;box-sizing:border-box}.dnb-tabs :after,.dnb-tabs :before{text-decoration:inherit;vertical-align:inherit}.dnb-tabs__tabs{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;z-index:1}.dnb-tabs__tabs,.dnb-tabs__tabs.dnb-section--spacing{padding-bottom:0}.dnb-tabs__tabs__tablist{-webkit-box-flex:0;-ms-scroll-chaining:none;-webkit-overflow-scrolling:touch;-ms-overflow-style:auto;-ms-overflow-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;overflow-x:auto;overscroll-behavior:contain;scrollbar-color:#14555a transparent;scrollbar-color:var(--color-emerald-green) transparent;scrollbar-width:thin;scrollbar-width:none}.dnb-tabs__tabs__tablist:focus{outline:none}html[data-whatinput=keyboard] .dnb-tabs__tabs__tablist:focus{--border-color:var(--color-emerald-green);border-color:transparent;-webkit-box-shadow:0 0 0 .125rem var(--border-color);box-shadow:0 0 0 .125rem var(--border-color)}@media screen and (-ms-high-contrast:none){html[data-whatinput=keyboard] .dnb-tabs__tabs__tablist:focus{-webkit-box-shadow:0 0 0 .125rem #14555a;box-shadow:0 0 0 .125rem #14555a;-webkit-box-shadow:0 0 0 .125rem var(--color-emerald-green);box-shadow:0 0 0 .125rem var(--color-emerald-green)}}html:not([data-visual-test]) .dnb-tabs__tabs__tablist{scroll-behavior:smooth}html[data-visual-test] .dnb-tabs__tabs__tablist{scroll-behavior:auto!important}.dnb-tabs__tabs__tablist::-webkit-scrollbar{display:none}.dnb-tabs__tabs--left .dnb-tabs__tabs__tablist{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.dnb-tabs__tabs--right .dnb-tabs__tabs__tablist{-webkit-box-flex:1;-webkit-box-pack:end;-ms-flex-pack:end;-ms-flex:1;flex:1;justify-content:flex-end}.dnb-tabs__tabs--center .dnb-tabs__tabs__tablist{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.dnb-tabs__tabs:before{bottom:0;content:"";height:1px;left:-100vw;position:absolute;width:100vw;z-index:-1}.dnb-tabs__tabs--no-border:before{content:none}.dnb-tabs__scroll-nav-button{display:none;opacity:0;pointer-events:none;position:relative;-webkit-transition:opacity .6s ease-out;transition:opacity .6s ease-out;z-index:2}.dnb-tabs__scroll-nav-button.dnb-button--primary{background-color:#14555a;background-color:var(--color-emerald-green)}.dnb-tabs__scroll-nav-button--visible{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:1;pointer-events:auto}.dnb-tabs__scroll-nav-button--hide{opacity:0!important;pointer-events:none}.dnb-core-style .dnb-tabs .dnb-tabs__button,.dnb-tabs__button{background-color:transparent;border:none;cursor:pointer;font-size:1.125rem;font-size:var(--font-size-basis);line-height:1.5rem;line-height:var(--line-height-basis);margin:0;outline:none;padding:0 .125rem;position:relative;text-decoration:none;-webkit-transition:margin .4s ease-out;transition:margin .4s ease-out;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none;white-space:nowrap;z-index:1}.dnb-core-style .dnb-tabs .dnb-tabs__button__title .dnb-icon,.dnb-tabs__button__title .dnb-icon{font-size:1rem;font-size:var(--font-size-small);-webkit-transform:translateY(-.125rem);transform:translateY(-.125rem)}.dnb-core-style .dnb-tabs .dnb-tabs__button .dnb-dummy,.dnb-tabs__button .dnb-dummy{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:0;margin-top:.25rem;overflow:hidden;visibility:hidden}.dnb-core-style .dnb-tabs .dnb-tabs__button:after,.dnb-tabs__button:after{bottom:0;content:"";height:1px;left:0;position:absolute;right:0;width:100%;z-index:-1}.dnb-tabs__button__snap{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 1rem 0 1.5rem}@media screen and (max-width:40em){.dnb-tabs__button__snap{padding:0 1rem}}.dnb-tabs__button__snap:first-of-type{padding-left:0}.dnb-tabs__button__snap:last-of-type{padding-right:.5rem}.dnb-tabs__button__snap:first-of-type.selected.focus,.dnb-tabs__button__snap:last-of-type.focus,.dnb-tabs__button__snap:last-of-type.selected{-webkit-transition:padding 1s cubic-bezier(.42,0,0,1) 10ms;transition:padding 1s cubic-bezier(.42,0,0,1) 10ms}.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type{margin-left:-3rem;padding-left:3rem}.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type{margin-right:-3rem;padding-right:3rem}.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.focus,.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.selected.focus{padding-left:0}.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.focus .dnb-tabs__button:focus,.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:first-of-type.selected.focus .dnb-tabs__button:focus{margin-left:.5rem}.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.focus,.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.selected.focus{padding-right:0}.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.focus .dnb-tabs__button:focus,.dnb-tabs--has-scrollbar .dnb-tabs__button__snap:last-of-type.selected.focus .dnb-tabs__button:focus{margin-right:.5rem}.dnb-tabs--has-scrollbar .dnb-tabs__tabs__tablist{margin:0 -2rem;padding-left:3rem;padding-right:3rem}html[data-visual-test] .dnb-tabs .dnb-tabs__button,html[data-visual-test] .dnb-tabs .dnb-tabs__button__snap,html[data-visual-test] .dnb-tabs .dnb-tabs__scroll-nav-button{-webkit-transition:none!important;transition:none!important}.dnb-tabs__content--spacing{padding-top:2rem}
1
+ .dnb-tabs{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;color:var(--color-black-80,#333);font-family:DNB,sans-serif;font-family:var(--font-family-default);font-size:1rem;font-size:var(--font-size-small);font-style:normal;font-weight:400;font-weight:var(--font-weight-basis);line-height:1.5rem;line-height:var(--line-height-basis);margin:0;padding:0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-break:break-word}.dnb-tabs *,.dnb-tabs :after,.dnb-tabs :before{background-repeat:no-repeat;-webkit-box-sizing:border-box;box-sizing:border-box}.dnb-tabs :after,.dnb-tabs :before{text-decoration:inherit;vertical-align:inherit}.dnb-tabs__tabs{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;z-index:1}.dnb-tabs__tabs,.dnb-tabs__tabs.dnb-section--spacing{padding-bottom:0}.dnb-tabs__tabs__tablist{-webkit-box-flex:0;-ms-scroll-chaining:none;-webkit-overflow-scrolling:touch;-ms-overflow-style:auto;-ms-overflow-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;overflow-x:auto;overscroll-behavior:contain;scrollbar-color:#14555a transparent;scrollbar-color:var(--color-emerald-green) transparent;scrollbar-width:thin;scrollbar-width:none}.dnb-tabs__tabs__tablist:focus{outline:none}html[data-whatinput=keyboard] .dnb-tabs__tabs__tablist:focus{--border-color:var(--color-emerald-green);border-color:transparent;-webkit-box-shadow:0 0 0 .125rem var(--border-color);box-shadow:0 0 0 .125rem var(--border-color)}@media screen and (-ms-high-contrast:none){html[data-whatinput=keyboard] .dnb-tabs__tabs__tablist:focus{-webkit-box-shadow:0 0 0 .125rem #14555a;box-shadow:0 0 0 .125rem #14555a;-webkit-box-shadow:0 0 0 .125rem var(--color-emerald-green);box-shadow:0 0 0 .125rem var(--color-emerald-green)}}html:not([data-visual-test]) .dnb-tabs__tabs__tablist{scroll-behavior:smooth}html[data-visual-test] .dnb-tabs__tabs__tablist{scroll-behavior:auto!important}.dnb-tabs__tabs__tablist::-webkit-scrollbar{display:none}.dnb-tabs__tabs--left .dnb-tabs__tabs__tablist{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.dnb-tabs__tabs--right .dnb-tabs__tabs__tablist{-webkit-box-flex:1;-webkit-box-pack:end;-ms-flex-pack:end;-ms-flex:1;flex:1;justify-content:flex-end}.dnb-tabs__tabs--center .dnb-tabs__tabs__tablist{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.dnb-tabs__tabs:before{bottom:0;content:"";height:1px;left:-100vw;position:absolute;width:100vw;z-index:-1}.dnb-tabs__tabs--no-border:before{content:none}.dnb-tabs__scroll-nav-button{display:none;opacity:0;pointer-events:none;position:absolute;right:-2px;-webkit-transition:opacity .6s ease-out;transition:opacity .6s ease-out;z-index:2}.dnb-tabs__scroll-nav-button:first-of-type{left:-2px;right:auto}.dnb-tabs__scroll-nav-button--visible{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:1;pointer-events:auto}.dnb-tabs__scroll-nav-button--hide{opacity:0!important;pointer-events:none}.dnb-core-style .dnb-tabs .dnb-tabs__button,.dnb-tabs__button{background-color:transparent;border:none;cursor:pointer;font-size:1.125rem;font-size:var(--font-size-basis);line-height:1.5rem;line-height:var(--line-height-basis);margin:0;outline:none;padding:0 .125rem;position:relative;text-decoration:none;-webkit-transition:margin .4s ease-out;transition:margin .4s ease-out;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none;white-space:nowrap;z-index:1}.dnb-core-style .dnb-tabs .dnb-tabs__button__title .dnb-icon,.dnb-tabs__button__title .dnb-icon{font-size:1rem;font-size:var(--font-size-small);-webkit-transform:translateY(-.125rem);transform:translateY(-.125rem)}.dnb-core-style .dnb-tabs .dnb-tabs__button .dnb-dummy,.dnb-tabs__button .dnb-dummy{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:0;margin-top:.25rem;overflow:hidden;visibility:hidden}.dnb-core-style .dnb-tabs .dnb-tabs__button:after,.dnb-tabs__button:after{bottom:0;content:"";height:1px;left:0;position:absolute;right:0;width:100%;z-index:-1}.dnb-tabs__button__snap{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 1rem 0 1.5rem;-webkit-transition:padding 1s cubic-bezier(.42,0,0,1);transition:padding 1s cubic-bezier(.42,0,0,1);will-change:padding}@media screen and (max-width:40em){.dnb-tabs__button__snap{padding:0 1rem}}.dnb-tabs__button__snap:first-of-type{padding-left:0}.dnb-tabs__button__snap:last-of-type{padding-right:.5rem}html[data-whatinput=keyboard] .dnb-tabs__button__snap:first-of-type.focus .dnb-tabs__button:focus{margin-left:.5rem}html[data-whatinput=keyboard] .dnb-tabs__button__snap:last-of-type.focus .dnb-tabs__button:focus{margin-right:.5rem}html[data-visual-test] .dnb-tabs .dnb-tabs__button,html[data-visual-test] .dnb-tabs .dnb-tabs__button__snap,html[data-visual-test] .dnb-tabs .dnb-tabs__scroll-nav-button{-webkit-transition:none!important;transition:none!important}.dnb-tabs__content--spacing{padding-top:2rem}
@@ -90,12 +90,16 @@
90
90
 
91
91
  // Default space between tags
92
92
  &__group {
93
- .dnb-button:not([class*='dnb-space']) {
94
- &:not(:last-of-type) {
95
- margin-right: 0.25rem;
96
- }
97
- &:not(:first-of-type) {
98
- margin-left: 0.25rem;
93
+ display: inline-flex;
94
+ flex-wrap: wrap;
95
+ gap: 0.5rem;
96
+
97
+ @include IS_IE {
98
+ .dnb-button:not([class*='dnb-space']) {
99
+ margin-bottom: 0.5rem;
100
+ &:not(:last-of-type) {
101
+ margin-right: 0.5rem;
102
+ }
99
103
  }
100
104
  }
101
105
  }
@@ -1116,8 +1116,16 @@ button.dnb-button::-moz-focus-inner {
1116
1116
  .dnb-tag--removable.dnb-button--size-small.dnb-button--has-icon {
1117
1117
  padding-right: 0; }
1118
1118
 
1119
- .dnb-tag__group .dnb-button:not([class*='dnb-space']):not(:last-of-type) {
1120
- margin-right: 0.25rem; }
1121
-
1122
- .dnb-tag__group .dnb-button:not([class*='dnb-space']):not(:first-of-type) {
1123
- margin-left: 0.25rem; }
1119
+ .dnb-tag__group {
1120
+ display: -webkit-inline-box;
1121
+ display: -ms-inline-flexbox;
1122
+ display: inline-flex;
1123
+ -ms-flex-wrap: wrap;
1124
+ flex-wrap: wrap;
1125
+ grid-gap: 0.5rem;
1126
+ gap: 0.5rem; }
1127
+ @media screen and (-ms-high-contrast: none) {
1128
+ .dnb-tag__group .dnb-button:not([class*='dnb-space']) {
1129
+ margin-bottom: 0.5rem; }
1130
+ .dnb-tag__group .dnb-button:not([class*='dnb-space']):not(:last-of-type) {
1131
+ margin-right: 0.5rem; } }