@speakapbv/dough-component-library 9.28.2 → 9.30.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.
@@ -39,5 +39,6 @@ export interface DropMenuProps {
39
39
  overlaySelector?: string;
40
40
  customClickHandler?: (e: MouseEvent) => void;
41
41
  alwaysTop?: boolean;
42
+ desktopOnly?: boolean;
42
43
  }
43
44
  export declare const DropMenu: React.ForwardRefExoticComponent<DropMenuProps & React.RefAttributes<DoughDropMenuRef>>;
@@ -1,6 +1,7 @@
1
1
  import { ReactNode } from "react";
2
2
  import { Colors, DoughDataAttributes } from "../../utils/constants";
3
3
  import "./tabs.scss";
4
+ import { BoxProps } from "../containers/box/box";
4
5
  export interface TabsContainerProps {
5
6
  className?: string;
6
7
  children?: ReactNode;
@@ -8,8 +9,11 @@ export interface TabsContainerProps {
8
9
  borderOnTop?: boolean;
9
10
  showDivider?: boolean;
10
11
  color?: Colors;
12
+ padding?: BoxProps["padding"];
13
+ withBorderOnHover?: boolean;
11
14
  stretchTabs?: boolean;
12
15
  small?: boolean;
16
+ compact?: boolean;
13
17
  iconOnly?: boolean;
14
18
  onChange(selectedTabId: string): void;
15
19
  value?: string;
package/dist/index.es.js CHANGED
@@ -1326,16 +1326,17 @@ var generateUID = function () {
1326
1326
  ("000" + secondPart.toString(36)).slice(-3));
1327
1327
  };
1328
1328
 
1329
- var css_248z$b = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-drop-area-wrapper {\n position: fixed;\n background-color: rgba(0, 0, 0, 0);\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n width: auto;\n height: auto;\n overflow: hidden;\n pointer-events: none;\n opacity: 0;\n transform-origin: center center;\n font-family: \"Roboto\", sans-serif;\n}\nbody:not(.no-transition) .dough-drop-area-wrapper {\n transition: opacity 350ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-container {\n pointer-events: fill;\n max-height: calc(80vh - 16px);\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n box-sizing: border-box;\n border-radius: 12px;\n box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1), 0px 1px 4px 0px rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow {\n pointer-events: none;\n position: absolute;\n z-index: 50;\n width: 32px !important;\n height: 16px !important;\n margin-top: -16px;\n overflow: hidden;\n min-width: initial !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow:before {\n content: \"\";\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n position: absolute;\n top: 8px;\n left: 4px;\n z-index: 10;\n width: 16px;\n height: 16px;\n transform: translate3d(0, 0, 0) rotateZ(45deg);\n box-shadow: 0 24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up {\n margin-top: initial;\n margin-bottom: -16px;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up:before {\n top: -8px;\n box-shadow: 0 -24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow,\n.dough-drop-area-wrapper > .dough-drop-area-container {\n transform: translate3d(0, -4px, 0);\n}\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: transform 250ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper.visible {\n opacity: 1;\n}\n.dough-drop-area-wrapper.visible > .dough-drop-area-arrow,\n.dough-drop-area-wrapper.visible > .dough-drop-area-container {\n transform: translate3d(0, 0, 0) !important;\n}\n\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper.visible {\n pointer-events: all;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper > .dough-drop-area-arrow {\n display: none !important;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper.visible {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n@media only screen and (max-width: 576px) {\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper.visible {\n pointer-events: all;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper > .dough-drop-area-arrow {\n display: none !important;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper.visible {\n background-color: rgba(0, 0, 0, 0.4);\n }\n}";
1329
+ var css_248z$b = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-drop-area-wrapper {\n position: fixed;\n background-color: rgba(0, 0, 0, 0);\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n width: auto;\n height: auto;\n overflow: hidden;\n pointer-events: none;\n opacity: 0;\n transform-origin: center center;\n font-family: \"Roboto\", sans-serif;\n}\nbody:not(.no-transition) .dough-drop-area-wrapper {\n transition: opacity 350ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-container {\n pointer-events: fill;\n max-height: calc(80vh - 16px);\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n box-sizing: border-box;\n border-radius: 12px;\n box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1), 0px 1px 4px 0px rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow {\n pointer-events: none;\n position: absolute;\n z-index: 50;\n width: 32px !important;\n height: 16px !important;\n margin-top: -16px;\n overflow: hidden;\n min-width: initial !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow:before {\n content: \"\";\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n position: absolute;\n top: 8px;\n left: 4px;\n z-index: 10;\n width: 16px;\n height: 16px;\n transform: translate3d(0, 0, 0) rotateZ(45deg);\n box-shadow: 0 24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up {\n margin-top: initial;\n margin-bottom: -16px;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up:before {\n top: -8px;\n box-shadow: 0 -24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow,\n.dough-drop-area-wrapper > .dough-drop-area-container {\n transform: translate3d(0, -4px, 0);\n}\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: transform 250ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper.visible {\n opacity: 1;\n}\n.dough-drop-area-wrapper.visible > .dough-drop-area-arrow,\n.dough-drop-area-wrapper.visible > .dough-drop-area-container {\n transform: translate3d(0, 0, 0) !important;\n}\n\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only).visible {\n pointer-events: all;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-arrow {\n display: none !important;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only).visible {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n@media only screen and (max-width: 576px) {\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only).visible {\n pointer-events: all;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-arrow {\n display: none !important;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only).visible {\n background-color: rgba(0, 0, 0, 0.4);\n }\n}";
1330
1330
  styleInject(css_248z$b);
1331
1331
 
1332
1332
  var TOP_MARGIN = 4;
1333
1333
  var TOUP = "to-up";
1334
1334
  var TODOWN = "to-down";
1335
1335
  var DropArea = function (props) {
1336
- var _a = props.rightShift, rightShift = _a === void 0 ? 0 : _a, _b = props.topShift, topShift = _b === void 0 ? 0 : _b, _c = props.closeOnClickOutside, closeOnClickOutside = _c === void 0 ? true : _c, _d = props.closeOnEscape, closeOnEscape = _d === void 0 ? true : _d;
1336
+ var _a;
1337
+ var _b = props.rightShift, rightShift = _b === void 0 ? 0 : _b, _c = props.topShift, topShift = _c === void 0 ? 0 : _c, _d = props.closeOnClickOutside, closeOnClickOutside = _d === void 0 ? true : _d, _e = props.closeOnEscape, closeOnEscape = _e === void 0 ? true : _e, _f = props.desktopOnly, desktopOnly = _f === void 0 ? false : _f;
1337
1338
  var scrollLockId = useState(generateUID)[0];
1338
- var _e = useState(null), showDropArea = _e[0], setShowDropArea = _e[1];
1339
+ var _g = useState(null), showDropArea = _g[0], setShowDropArea = _g[1];
1339
1340
  var dropAreaWrapperRef = useRef(null);
1340
1341
  var dropAreaArrowRef = useRef(null);
1341
1342
  var dropAreaContainerRef = useRef(null);
@@ -1521,7 +1522,9 @@ var DropArea = function (props) {
1521
1522
  };
1522
1523
  }, [props.show]);
1523
1524
  return (React.createElement(React.Fragment, null, showDropArea &&
1524
- createPortal(React.createElement("div", { ref: dropAreaWrapperRef, className: cn("dough-drop-area-wrapper"), onClick: function (e) {
1525
+ createPortal(React.createElement("div", { ref: dropAreaWrapperRef, className: cn("dough-drop-area-wrapper", (_a = {},
1526
+ _a["desktop-only"] = desktopOnly,
1527
+ _a)), onClick: function (e) {
1525
1528
  if (e.target &&
1526
1529
  e.target.classList.contains("dough-drop-area-wrapper")) {
1527
1530
  cancelEvent(e);
@@ -1539,7 +1542,7 @@ var css_248z$c = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium
1539
1542
  styleInject(css_248z$c);
1540
1543
 
1541
1544
  var DropMenu = forwardRef(function (_a, ref) {
1542
- var _b = _a.alignIconRight, alignIconRight = _b === void 0 ? false : _b, _c = _a.color, color = _c === void 0 ? Colors.TRANSPARENT : _c, _d = _a.closeOnClickOutside, closeOnClickOutside = _d === void 0 ? true : _d, _e = _a.closeOnEscape, closeOnEscape = _e === void 0 ? true : _e, _f = _a.disabled, disabled = _f === void 0 ? false : _f, _g = _a.showCaret, showCaret = _g === void 0 ? true : _g, _h = _a.rightShift, rightShift = _h === void 0 ? 0 : _h, _j = _a.topShift, topShift = _j === void 0 ? 0 : _j, _k = _a.shadow, shadow = _k === void 0 ? false : _k, _l = _a.show, show = _l === void 0 ? false : _l, _m = _a.rounded, rounded = _m === void 0 ? true : _m, _o = _a.icon, icon = _o === void 0 ? React.createElement(EllipsisVIcon, null) : _o, _p = _a.size, size = _p === void 0 ? Sizes.SMALL : _p, _q = _a.innerButtonSize, innerButtonSize = _q === void 0 ? Sizes.NORMAL : _q, ButtonComponent = _a.ButtonComponent, className = _a.className, onOpen = _a.onOpen, onClose = _a.onClose, children = _a.children, asInvisibleLine = _a.asInvisibleLine, alignFromRight = _a.alignFromRight, alignToCenter = _a.alignToCenter, dataAttributes = _a.dataAttributes, padding = _a.padding, label = _a.label, fullWidth = _a.fullWidth, strictToReferenceWidth = _a.strictToReferenceWidth, buttonClassName = _a.buttonClassName, overlaySelector = _a.overlaySelector, overlayWidth = _a.overlayWidth, customClickHandler = _a.customClickHandler, alwaysTop = _a.alwaysTop;
1545
+ var _b = _a.alignIconRight, alignIconRight = _b === void 0 ? false : _b, _c = _a.color, color = _c === void 0 ? Colors.TRANSPARENT : _c, _d = _a.closeOnClickOutside, closeOnClickOutside = _d === void 0 ? true : _d, _e = _a.closeOnEscape, closeOnEscape = _e === void 0 ? true : _e, _f = _a.disabled, disabled = _f === void 0 ? false : _f, _g = _a.showCaret, showCaret = _g === void 0 ? true : _g, _h = _a.rightShift, rightShift = _h === void 0 ? 0 : _h, _j = _a.topShift, topShift = _j === void 0 ? 0 : _j, _k = _a.shadow, shadow = _k === void 0 ? false : _k, _l = _a.show, show = _l === void 0 ? false : _l, _m = _a.rounded, rounded = _m === void 0 ? true : _m, _o = _a.icon, icon = _o === void 0 ? React.createElement(EllipsisVIcon, null) : _o, _p = _a.size, size = _p === void 0 ? Sizes.SMALL : _p, _q = _a.innerButtonSize, innerButtonSize = _q === void 0 ? Sizes.NORMAL : _q, ButtonComponent = _a.ButtonComponent, className = _a.className, onOpen = _a.onOpen, onClose = _a.onClose, children = _a.children, asInvisibleLine = _a.asInvisibleLine, alignFromRight = _a.alignFromRight, alignToCenter = _a.alignToCenter, dataAttributes = _a.dataAttributes, padding = _a.padding, label = _a.label, fullWidth = _a.fullWidth, strictToReferenceWidth = _a.strictToReferenceWidth, buttonClassName = _a.buttonClassName, overlaySelector = _a.overlaySelector, overlayWidth = _a.overlayWidth, customClickHandler = _a.customClickHandler, alwaysTop = _a.alwaysTop, desktopOnly = _a.desktopOnly;
1543
1546
  var componentRef = useRef(null);
1544
1547
  var _r = useState(false), showDropArea = _r[0], setShowDropArea = _r[1];
1545
1548
  var openDropArea = function (e) {
@@ -1637,7 +1640,7 @@ var DropMenu = forwardRef(function (_a, ref) {
1637
1640
  "dough-dropmenu-full-width": fullWidth,
1638
1641
  }), ref: componentRef }, dataAttributes),
1639
1642
  asInvisibleLine !== true && renderButtonComponent(),
1640
- React.createElement(DropArea, { overlaySelector: overlaySelector, rightShift: rightShift, topShift: topShift, alignFromRight: alignFromRight, alignToCenter: alignToCenter, closeOnClickOutside: closeOnClickOutside, closeOnEscape: closeOnEscape, onHide: closeDropArea, referenceElement: componentRef, show: showDropArea, showCaret: showCaret, strictToReferenceWidth: strictToReferenceWidth, alwaysTop: alwaysTop, width: overlayWidth || "auto" },
1643
+ React.createElement(DropArea, { overlaySelector: overlaySelector, rightShift: rightShift, topShift: topShift, alignFromRight: alignFromRight, alignToCenter: alignToCenter, closeOnClickOutside: closeOnClickOutside, closeOnEscape: closeOnEscape, onHide: closeDropArea, referenceElement: componentRef, show: showDropArea, showCaret: showCaret, strictToReferenceWidth: strictToReferenceWidth, alwaysTop: alwaysTop, desktopOnly: desktopOnly, width: overlayWidth || "auto" },
1641
1644
  React.createElement(LayoutContainer, { className: cn("dough-drop-menu-buttons-container", className), layoutType: Direction.VERTICAL, dataAttributes: dataAttributes }, getButtons()))));
1642
1645
  });
1643
1646
  DropMenu.displayName = "DropMenu";
@@ -4611,14 +4614,20 @@ var Notification = function (props) {
4611
4614
  };
4612
4615
  Notification.displayName = "Notification";
4613
4616
 
4614
- var css_248z$z = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-tabs-container {\n flex-flow: row nowrap !important;\n align-items: stretch !important;\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n margin-bottom: -1px;\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-top-border {\n border-top: 1px solid rgb(230, 230, 230);\n border-top: 1px solid var(--dough-color-gray-5);\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-bottom-border {\n border-bottom: 1px solid rgb(230, 230, 230);\n border-bottom: 1px solid var(--dough-color-gray-5);\n}\nhtml.dough-IE11 .dough-tabs-container {\n margin-bottom: 0;\n}\n.dough-tabs-container > .dough-tab-item {\n padding: 0 !important;\n overflow: hidden;\n position: relative;\n height: 100%;\n}\nbody:not(.no-transition) .dough-tabs-container > .dough-tab-item {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tabs-container > .dough-tab-item {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-tabs-container > .dough-tab-item.dough-tab-item-stretch-tabs {\n flex-grow: 1;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-button {\n width: 100% !important;\n height: 100% !important;\n min-width: 40px;\n color: rgb(158, 158, 158);\n color: var(--dough-color-text-light);\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 700;\n font-family: \"Roboto\", sans-serif;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-button > .dough-box {\n max-height: 60px;\n min-height: 60px;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border {\n position: absolute;\n right: 0;\n left: 0;\n z-index: 5;\n width: auto;\n height: 4px;\n transform: translate3d(0, 4px, 0);\n opacity: 0;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border.dough-tabs-container-top-border {\n top: 0;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border:not(.dough-tabs-container-top-border) {\n bottom: 0;\n}\nbody:not(.no-transition) .dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-tabs-container > .dough-tab-item:hover > .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n.dough-tabs-container > .dough-tab-item.active > .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n.dough-tabs-container > .dough-tab-item.active > .dough-tab-item-selection-border {\n opacity: 1;\n transform: translate3d(0, 0, 0);\n}\n.dough-tabs-container > .dough-tab-item.dough-tab-item-small > .dough-tab-item-button > .dough-box {\n max-height: 40px;\n min-height: 40px;\n}";
4617
+ var css_248z$z = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-tab-item-selection-border {\n position: absolute;\n right: 0;\n left: 0;\n z-index: 5;\n width: auto;\n height: 4px;\n border-radius: 12px;\n transform: translate3d(0, 0, 0);\n opacity: 1;\n}\n.dough-tab-item-selection-border.dough-tabs-container-top-border {\n top: 0;\n}\n.dough-tab-item-selection-border:not(.dough-tabs-container-top-border) {\n bottom: 0;\n}\nbody:not(.no-transition) .dough-tab-item-selection-border {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tab-item-selection-border {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n\n.dough-tab-item-button {\n width: 100% !important;\n height: 100% !important;\n min-width: 40px;\n color: rgb(158, 158, 158);\n color: var(--dough-color-text-light);\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 700;\n font-family: \"Roboto\", sans-serif;\n line-height: 1.5;\n}\n.dough-tab-item-button .dough-box {\n max-height: 60px;\n min-height: 60px;\n}\n.dough-tab-item-button.dough-item-small .dough-box {\n max-height: 40px;\n min-height: 40px;\n}\n\n.dough-tab-item {\n padding: 0 !important;\n overflow: hidden;\n position: relative;\n height: 100%;\n}\nbody:not(.no-transition) .dough-tab-item {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tab-item {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-tab-item.dough-tab-item-stretch-tabs {\n flex-grow: 1;\n}\n.dough-tab-item .dough-tab-item-selection-border {\n opacity: 0;\n}\n.dough-tab-item:hover .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n.dough-tab-item:hover .dough-tab-item-selection-border.dough-tab-item-selection-border-hover {\n opacity: 0.25;\n}\n.dough-tab-item.active .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n\n.dough-tabs-container {\n position: relative;\n flex-flow: row nowrap !important;\n align-items: stretch !important;\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n margin-bottom: -1px;\n}\n.dough-tabs-container.dough-tabs-container-divider {\n border-top: 1px solid rgb(230, 230, 230);\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-top-border {\n border-top: 1px solid var(--dough-color-gray-5);\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-bottom-border {\n border-bottom: 1px solid var(--dough-color-gray-5);\n}\n.dough-tabs-container.dough-tabs-container-compact .dough-tab-item + .dough-tab-item {\n margin-left: 16px;\n}\n.dough-tabs-container.dough-tabs-container-compact .dough-tab-item-button {\n padding-bottom: 16px;\n}\n.dough-tabs-container.dough-tabs-container-compact .dough-tab-item-button .dough-box {\n max-height: unset;\n min-height: 0;\n}\n.dough-tabs-container.dough-tabs-container-compact.dough-tabs-container-top-border .dough-tab-item.dough-tab-item-compact .dough-tab-item-button {\n padding-bottom: 0;\n padding-top: 16px;\n}";
4615
4618
  styleInject(css_248z$z);
4616
4619
 
4617
4620
  var simplifyKey = function (key) {
4618
4621
  return key ? key.slice(key.indexOf("$") + 1) : key;
4619
4622
  };
4620
4623
 
4624
+ var Border = function (props) { return (React.createElement("span", { className: cn("dough-tab-item-selection-border", props.color ? props.color : Colors.HEADER, {
4625
+ "dough-tab-item-selection-border-hover": props.withBorderOnHover,
4626
+ "dough-tabs-container-top-border": props.borderOnTop,
4627
+ }), style: props.style })); };
4621
4628
  var TabsContainer = function (props) {
4629
+ var tabRefs = useRef({});
4630
+ var _a = useState(undefined), selectedIndex = _a[0], setSelectedIndex = _a[1];
4622
4631
  var handleChange = function (val) {
4623
4632
  if (val && val !== props.value) {
4624
4633
  if (props.onChange) {
@@ -4626,34 +4635,52 @@ var TabsContainer = function (props) {
4626
4635
  }
4627
4636
  }
4628
4637
  };
4638
+ var currentTab = selectedIndex === undefined
4639
+ ? undefined
4640
+ : tabRefs.current[selectedIndex];
4641
+ var underlineWidth = currentTab === null || currentTab === void 0 ? void 0 : currentTab.clientWidth;
4642
+ var underlineLeftPosition = currentTab === null || currentTab === void 0 ? void 0 : currentTab.offsetLeft;
4629
4643
  return (React.createElement(Box, { display: BoxDisplay.FLEX, direction: BoxDirection.ROW, className: cn("dough-tabs-container", props.className, {
4630
4644
  "dough-tabs-container-divider": props.showDivider !== false,
4631
4645
  "dough-tabs-container-top-border": props.borderOnTop,
4632
- "dough-tabs-container-bottom-border": props.borderOnTop !== false,
4633
- }), dataAttributes: props.dataAttributes }, props.children &&
4634
- Children.toArray(props.children).map(function (child) {
4635
- var simplifiedKey = simplifyKey(child.key);
4636
- return (React.createElement(Box, { className: cn("dough-tab-item", {
4637
- active: props.value === simplifiedKey,
4638
- "dough-tab-item-small": props.small || props.iconOnly,
4639
- "dough-tab-item-stretch-tabs": props.stretchTabs,
4640
- }), key: "tab-" + simplifiedKey + "-wrapper" },
4641
- React.createElement("span", { className: cn("dough-tab-item-selection-border", props.color ? props.color : Colors.HEADER, {
4642
- "dough-tabs-container-top-border": props.borderOnTop,
4643
- }) }),
4644
- React.createElement("div", { className: cn("dough-tab-item-button", {
4645
- "dough-tab-item-button-disabled": child.props.disabled,
4646
- }), onClick: function (e) {
4647
- cancelEvent(e);
4648
- hideLastDoughTooltip();
4649
- handleChange(simplifiedKey);
4650
- } },
4651
- React.createElement(Box, { height: "100%", display: BoxDisplay.FLEX, justifyContent: BoxJustifyContent.CENTER, alignItems: BoxAlign.CENTER, padding: props.iconOnly
4652
- ? Sizes.XS
4653
- : props.small
4654
- ? Sizes.SMALL
4655
- : Sizes.NORMAL }, child))));
4656
- })));
4646
+ "dough-tabs-container-bottom-border": props.borderOnTop !== true,
4647
+ "dough-tabs-container-compact": props.compact,
4648
+ }), padding: props.padding, dataAttributes: props.dataAttributes },
4649
+ props.children &&
4650
+ Children.toArray(props.children).map(function (child, index) {
4651
+ var simplifiedKey = simplifyKey(child.key);
4652
+ var isActive = props.value === simplifiedKey;
4653
+ return (React.createElement(Box, { className: cn("dough-tab-item", {
4654
+ active: props.value === simplifiedKey,
4655
+ "dough-tab-item-small": props.small || props.iconOnly,
4656
+ "dough-tab-item-stretch-tabs": props.stretchTabs,
4657
+ }), ref: function (ref) {
4658
+ tabRefs.current[index] = ref;
4659
+ if (isActive) {
4660
+ setSelectedIndex(index);
4661
+ }
4662
+ }, key: "tab-" + simplifiedKey + "-wrapper" },
4663
+ React.createElement(Border, { borderOnTop: props.borderOnTop, color: props.color, withBorderOnHover: props.withBorderOnHover }),
4664
+ React.createElement("div", { className: cn("dough-tab-item-button", {
4665
+ "dough-tab-item-button-disabled": child.props.disabled,
4666
+ }), onClick: function (e) {
4667
+ cancelEvent(e);
4668
+ hideLastDoughTooltip();
4669
+ setSelectedIndex(index);
4670
+ handleChange(simplifiedKey);
4671
+ } },
4672
+ React.createElement(Box, { height: "100%", display: BoxDisplay.FLEX, justifyContent: BoxJustifyContent.CENTER, alignItems: BoxAlign.CENTER, padding: props.iconOnly
4673
+ ? Sizes.XS
4674
+ : props.small
4675
+ ? Sizes.SMALL
4676
+ : props.compact
4677
+ ? undefined
4678
+ : Sizes.NORMAL }, child))));
4679
+ }),
4680
+ selectedIndex !== undefined && (React.createElement(Border, { borderOnTop: props.borderOnTop, color: props.color, withBorderOnHover: props.withBorderOnHover, style: {
4681
+ width: underlineWidth || 0,
4682
+ left: underlineLeftPosition,
4683
+ } }))));
4657
4684
  };
4658
4685
  TabsContainer.displayName = "TabsContainer";
4659
4686
 
package/dist/index.js CHANGED
@@ -1311,16 +1311,17 @@ var generateUID = function () {
1311
1311
  ("000" + secondPart.toString(36)).slice(-3));
1312
1312
  };
1313
1313
 
1314
- var css_248z$b = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-drop-area-wrapper {\n position: fixed;\n background-color: rgba(0, 0, 0, 0);\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n width: auto;\n height: auto;\n overflow: hidden;\n pointer-events: none;\n opacity: 0;\n transform-origin: center center;\n font-family: \"Roboto\", sans-serif;\n}\nbody:not(.no-transition) .dough-drop-area-wrapper {\n transition: opacity 350ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-container {\n pointer-events: fill;\n max-height: calc(80vh - 16px);\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n box-sizing: border-box;\n border-radius: 12px;\n box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1), 0px 1px 4px 0px rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow {\n pointer-events: none;\n position: absolute;\n z-index: 50;\n width: 32px !important;\n height: 16px !important;\n margin-top: -16px;\n overflow: hidden;\n min-width: initial !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow:before {\n content: \"\";\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n position: absolute;\n top: 8px;\n left: 4px;\n z-index: 10;\n width: 16px;\n height: 16px;\n transform: translate3d(0, 0, 0) rotateZ(45deg);\n box-shadow: 0 24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up {\n margin-top: initial;\n margin-bottom: -16px;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up:before {\n top: -8px;\n box-shadow: 0 -24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow,\n.dough-drop-area-wrapper > .dough-drop-area-container {\n transform: translate3d(0, -4px, 0);\n}\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: transform 250ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper.visible {\n opacity: 1;\n}\n.dough-drop-area-wrapper.visible > .dough-drop-area-arrow,\n.dough-drop-area-wrapper.visible > .dough-drop-area-container {\n transform: translate3d(0, 0, 0) !important;\n}\n\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper.visible {\n pointer-events: all;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper > .dough-drop-area-arrow {\n display: none !important;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper.visible {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n@media only screen and (max-width: 576px) {\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper.visible {\n pointer-events: all;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper > .dough-drop-area-arrow {\n display: none !important;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper.visible {\n background-color: rgba(0, 0, 0, 0.4);\n }\n}";
1314
+ var css_248z$b = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-drop-area-wrapper {\n position: fixed;\n background-color: rgba(0, 0, 0, 0);\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n width: auto;\n height: auto;\n overflow: hidden;\n pointer-events: none;\n opacity: 0;\n transform-origin: center center;\n font-family: \"Roboto\", sans-serif;\n}\nbody:not(.no-transition) .dough-drop-area-wrapper {\n transition: opacity 350ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-container {\n pointer-events: fill;\n max-height: calc(80vh - 16px);\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n box-sizing: border-box;\n border-radius: 12px;\n box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1), 0px 1px 4px 0px rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow {\n pointer-events: none;\n position: absolute;\n z-index: 50;\n width: 32px !important;\n height: 16px !important;\n margin-top: -16px;\n overflow: hidden;\n min-width: initial !important;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow:before {\n content: \"\";\n background-color: rgb(255, 255, 255);\n background-color: var(--dough-color-theme);\n position: absolute;\n top: 8px;\n left: 4px;\n z-index: 10;\n width: 16px;\n height: 16px;\n transform: translate3d(0, 0, 0) rotateZ(45deg);\n box-shadow: 0 24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up {\n margin-top: initial;\n margin-bottom: -16px;\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow.to-up:before {\n top: -8px;\n box-shadow: 0 -24px 10px 0 rgba(0, 0, 0, 0.07), 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n}\n.dough-drop-area-wrapper > .dough-drop-area-arrow,\n.dough-drop-area-wrapper > .dough-drop-area-container {\n transform: translate3d(0, -4px, 0);\n}\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody:not(.no-transition) .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: transform 250ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-arrow,\nbody.no-transition .dough-drop-area-wrapper > .dough-drop-area-container {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-drop-area-wrapper.visible {\n opacity: 1;\n}\n.dough-drop-area-wrapper.visible > .dough-drop-area-arrow,\n.dough-drop-area-wrapper.visible > .dough-drop-area-container {\n transform: translate3d(0, 0, 0) !important;\n}\n\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only).visible {\n pointer-events: all;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-arrow {\n display: none !important;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n}\nbody:not(.dough-no-viewport-control) .dough-max-viewport-size-small .dough-drop-area-wrapper:not(.desktop-only).visible {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n@media only screen and (max-width: 576px) {\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only).visible {\n pointer-events: all;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-arrow {\n display: none !important;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only) > .dough-drop-area-container {\n position: absolute;\n top: initial !important;\n bottom: 0 !important;\n left: 0 !important;\n z-index: 2;\n width: 100% !important;\n height: auto !important;\n min-height: 1vh !important;\n max-height: 85vh !important;\n box-shadow: 0 -2px 20px 0 rgba(0, 0, 0, 0.1);\n transform: translate3d(0, 20vh, 0);\n border-radius: 0;\n }\n body:not(.dough-no-viewport-control) .dough-drop-area-wrapper:not(.desktop-only).visible {\n background-color: rgba(0, 0, 0, 0.4);\n }\n}";
1315
1315
  styleInject(css_248z$b);
1316
1316
 
1317
1317
  var TOP_MARGIN = 4;
1318
1318
  var TOUP = "to-up";
1319
1319
  var TODOWN = "to-down";
1320
1320
  var DropArea = function (props) {
1321
- var _a = props.rightShift, rightShift = _a === void 0 ? 0 : _a, _b = props.topShift, topShift = _b === void 0 ? 0 : _b, _c = props.closeOnClickOutside, closeOnClickOutside = _c === void 0 ? true : _c, _d = props.closeOnEscape, closeOnEscape = _d === void 0 ? true : _d;
1321
+ var _a;
1322
+ var _b = props.rightShift, rightShift = _b === void 0 ? 0 : _b, _c = props.topShift, topShift = _c === void 0 ? 0 : _c, _d = props.closeOnClickOutside, closeOnClickOutside = _d === void 0 ? true : _d, _e = props.closeOnEscape, closeOnEscape = _e === void 0 ? true : _e, _f = props.desktopOnly, desktopOnly = _f === void 0 ? false : _f;
1322
1323
  var scrollLockId = React.useState(generateUID)[0];
1323
- var _e = React.useState(null), showDropArea = _e[0], setShowDropArea = _e[1];
1324
+ var _g = React.useState(null), showDropArea = _g[0], setShowDropArea = _g[1];
1324
1325
  var dropAreaWrapperRef = React.useRef(null);
1325
1326
  var dropAreaArrowRef = React.useRef(null);
1326
1327
  var dropAreaContainerRef = React.useRef(null);
@@ -1506,7 +1507,9 @@ var DropArea = function (props) {
1506
1507
  };
1507
1508
  }, [props.show]);
1508
1509
  return (React__default.createElement(React__default.Fragment, null, showDropArea &&
1509
- reactDom.createPortal(React__default.createElement("div", { ref: dropAreaWrapperRef, className: cn("dough-drop-area-wrapper"), onClick: function (e) {
1510
+ reactDom.createPortal(React__default.createElement("div", { ref: dropAreaWrapperRef, className: cn("dough-drop-area-wrapper", (_a = {},
1511
+ _a["desktop-only"] = desktopOnly,
1512
+ _a)), onClick: function (e) {
1510
1513
  if (e.target &&
1511
1514
  e.target.classList.contains("dough-drop-area-wrapper")) {
1512
1515
  cancelEvent(e);
@@ -1524,7 +1527,7 @@ var css_248z$c = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium
1524
1527
  styleInject(css_248z$c);
1525
1528
 
1526
1529
  var DropMenu = React.forwardRef(function (_a, ref) {
1527
- var _b = _a.alignIconRight, alignIconRight = _b === void 0 ? false : _b, _c = _a.color, color = _c === void 0 ? exports.Colors.TRANSPARENT : _c, _d = _a.closeOnClickOutside, closeOnClickOutside = _d === void 0 ? true : _d, _e = _a.closeOnEscape, closeOnEscape = _e === void 0 ? true : _e, _f = _a.disabled, disabled = _f === void 0 ? false : _f, _g = _a.showCaret, showCaret = _g === void 0 ? true : _g, _h = _a.rightShift, rightShift = _h === void 0 ? 0 : _h, _j = _a.topShift, topShift = _j === void 0 ? 0 : _j, _k = _a.shadow, shadow = _k === void 0 ? false : _k, _l = _a.show, show = _l === void 0 ? false : _l, _m = _a.rounded, rounded = _m === void 0 ? true : _m, _o = _a.icon, icon = _o === void 0 ? React__default.createElement(EllipsisVIcon, null) : _o, _p = _a.size, size = _p === void 0 ? exports.Sizes.SMALL : _p, _q = _a.innerButtonSize, innerButtonSize = _q === void 0 ? exports.Sizes.NORMAL : _q, ButtonComponent = _a.ButtonComponent, className = _a.className, onOpen = _a.onOpen, onClose = _a.onClose, children = _a.children, asInvisibleLine = _a.asInvisibleLine, alignFromRight = _a.alignFromRight, alignToCenter = _a.alignToCenter, dataAttributes = _a.dataAttributes, padding = _a.padding, label = _a.label, fullWidth = _a.fullWidth, strictToReferenceWidth = _a.strictToReferenceWidth, buttonClassName = _a.buttonClassName, overlaySelector = _a.overlaySelector, overlayWidth = _a.overlayWidth, customClickHandler = _a.customClickHandler, alwaysTop = _a.alwaysTop;
1530
+ var _b = _a.alignIconRight, alignIconRight = _b === void 0 ? false : _b, _c = _a.color, color = _c === void 0 ? exports.Colors.TRANSPARENT : _c, _d = _a.closeOnClickOutside, closeOnClickOutside = _d === void 0 ? true : _d, _e = _a.closeOnEscape, closeOnEscape = _e === void 0 ? true : _e, _f = _a.disabled, disabled = _f === void 0 ? false : _f, _g = _a.showCaret, showCaret = _g === void 0 ? true : _g, _h = _a.rightShift, rightShift = _h === void 0 ? 0 : _h, _j = _a.topShift, topShift = _j === void 0 ? 0 : _j, _k = _a.shadow, shadow = _k === void 0 ? false : _k, _l = _a.show, show = _l === void 0 ? false : _l, _m = _a.rounded, rounded = _m === void 0 ? true : _m, _o = _a.icon, icon = _o === void 0 ? React__default.createElement(EllipsisVIcon, null) : _o, _p = _a.size, size = _p === void 0 ? exports.Sizes.SMALL : _p, _q = _a.innerButtonSize, innerButtonSize = _q === void 0 ? exports.Sizes.NORMAL : _q, ButtonComponent = _a.ButtonComponent, className = _a.className, onOpen = _a.onOpen, onClose = _a.onClose, children = _a.children, asInvisibleLine = _a.asInvisibleLine, alignFromRight = _a.alignFromRight, alignToCenter = _a.alignToCenter, dataAttributes = _a.dataAttributes, padding = _a.padding, label = _a.label, fullWidth = _a.fullWidth, strictToReferenceWidth = _a.strictToReferenceWidth, buttonClassName = _a.buttonClassName, overlaySelector = _a.overlaySelector, overlayWidth = _a.overlayWidth, customClickHandler = _a.customClickHandler, alwaysTop = _a.alwaysTop, desktopOnly = _a.desktopOnly;
1528
1531
  var componentRef = React.useRef(null);
1529
1532
  var _r = React.useState(false), showDropArea = _r[0], setShowDropArea = _r[1];
1530
1533
  var openDropArea = function (e) {
@@ -1622,7 +1625,7 @@ var DropMenu = React.forwardRef(function (_a, ref) {
1622
1625
  "dough-dropmenu-full-width": fullWidth,
1623
1626
  }), ref: componentRef }, dataAttributes),
1624
1627
  asInvisibleLine !== true && renderButtonComponent(),
1625
- React__default.createElement(DropArea, { overlaySelector: overlaySelector, rightShift: rightShift, topShift: topShift, alignFromRight: alignFromRight, alignToCenter: alignToCenter, closeOnClickOutside: closeOnClickOutside, closeOnEscape: closeOnEscape, onHide: closeDropArea, referenceElement: componentRef, show: showDropArea, showCaret: showCaret, strictToReferenceWidth: strictToReferenceWidth, alwaysTop: alwaysTop, width: overlayWidth || "auto" },
1628
+ React__default.createElement(DropArea, { overlaySelector: overlaySelector, rightShift: rightShift, topShift: topShift, alignFromRight: alignFromRight, alignToCenter: alignToCenter, closeOnClickOutside: closeOnClickOutside, closeOnEscape: closeOnEscape, onHide: closeDropArea, referenceElement: componentRef, show: showDropArea, showCaret: showCaret, strictToReferenceWidth: strictToReferenceWidth, alwaysTop: alwaysTop, desktopOnly: desktopOnly, width: overlayWidth || "auto" },
1626
1629
  React__default.createElement(LayoutContainer, { className: cn("dough-drop-menu-buttons-container", className), layoutType: exports.Direction.VERTICAL, dataAttributes: dataAttributes }, getButtons()))));
1627
1630
  });
1628
1631
  DropMenu.displayName = "DropMenu";
@@ -4594,14 +4597,20 @@ var Notification = function (props) {
4594
4597
  };
4595
4598
  Notification.displayName = "Notification";
4596
4599
 
4597
- var css_248z$z = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-tabs-container {\n flex-flow: row nowrap !important;\n align-items: stretch !important;\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n margin-bottom: -1px;\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-top-border {\n border-top: 1px solid rgb(230, 230, 230);\n border-top: 1px solid var(--dough-color-gray-5);\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-bottom-border {\n border-bottom: 1px solid rgb(230, 230, 230);\n border-bottom: 1px solid var(--dough-color-gray-5);\n}\nhtml.dough-IE11 .dough-tabs-container {\n margin-bottom: 0;\n}\n.dough-tabs-container > .dough-tab-item {\n padding: 0 !important;\n overflow: hidden;\n position: relative;\n height: 100%;\n}\nbody:not(.no-transition) .dough-tabs-container > .dough-tab-item {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tabs-container > .dough-tab-item {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-tabs-container > .dough-tab-item.dough-tab-item-stretch-tabs {\n flex-grow: 1;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-button {\n width: 100% !important;\n height: 100% !important;\n min-width: 40px;\n color: rgb(158, 158, 158);\n color: var(--dough-color-text-light);\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 700;\n font-family: \"Roboto\", sans-serif;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-button > .dough-box {\n max-height: 60px;\n min-height: 60px;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border {\n position: absolute;\n right: 0;\n left: 0;\n z-index: 5;\n width: auto;\n height: 4px;\n transform: translate3d(0, 4px, 0);\n opacity: 0;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border.dough-tabs-container-top-border {\n top: 0;\n}\n.dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border:not(.dough-tabs-container-top-border) {\n bottom: 0;\n}\nbody:not(.no-transition) .dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tabs-container > .dough-tab-item > .dough-tab-item-selection-border {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-tabs-container > .dough-tab-item:hover > .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n.dough-tabs-container > .dough-tab-item.active > .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n.dough-tabs-container > .dough-tab-item.active > .dough-tab-item-selection-border {\n opacity: 1;\n transform: translate3d(0, 0, 0);\n}\n.dough-tabs-container > .dough-tab-item.dough-tab-item-small > .dough-tab-item-button > .dough-box {\n max-height: 40px;\n min-height: 40px;\n}";
4600
+ var css_248z$z = "/* COLORS */\n/* Typography*/\n/*Dennis should provide medium font size*/\n.dough-tab-item-selection-border {\n position: absolute;\n right: 0;\n left: 0;\n z-index: 5;\n width: auto;\n height: 4px;\n border-radius: 12px;\n transform: translate3d(0, 0, 0);\n opacity: 1;\n}\n.dough-tab-item-selection-border.dough-tabs-container-top-border {\n top: 0;\n}\n.dough-tab-item-selection-border:not(.dough-tabs-container-top-border) {\n bottom: 0;\n}\nbody:not(.no-transition) .dough-tab-item-selection-border {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tab-item-selection-border {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n\n.dough-tab-item-button {\n width: 100% !important;\n height: 100% !important;\n min-width: 40px;\n color: rgb(158, 158, 158);\n color: var(--dough-color-text-light);\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 700;\n font-family: \"Roboto\", sans-serif;\n line-height: 1.5;\n}\n.dough-tab-item-button .dough-box {\n max-height: 60px;\n min-height: 60px;\n}\n.dough-tab-item-button.dough-item-small .dough-box {\n max-height: 40px;\n min-height: 40px;\n}\n\n.dough-tab-item {\n padding: 0 !important;\n overflow: hidden;\n position: relative;\n height: 100%;\n}\nbody:not(.no-transition) .dough-tab-item {\n transition: all 750ms cubic-bezier(0.25, 1, 0, 1);\n}\nbody.no-transition .dough-tab-item {\n transition: none 0ms linear !important;\n transition-delay: 0ms !important;\n}\n.dough-tab-item.dough-tab-item-stretch-tabs {\n flex-grow: 1;\n}\n.dough-tab-item .dough-tab-item-selection-border {\n opacity: 0;\n}\n.dough-tab-item:hover .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n.dough-tab-item:hover .dough-tab-item-selection-border.dough-tab-item-selection-border-hover {\n opacity: 0.25;\n}\n.dough-tab-item.active .dough-tab-item-button {\n color: rgb(68, 68, 68);\n color: var(--dough-color-text-dark);\n}\n\n.dough-tabs-container {\n position: relative;\n flex-flow: row nowrap !important;\n align-items: stretch !important;\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n margin-bottom: -1px;\n}\n.dough-tabs-container.dough-tabs-container-divider {\n border-top: 1px solid rgb(230, 230, 230);\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-top-border {\n border-top: 1px solid var(--dough-color-gray-5);\n}\n.dough-tabs-container.dough-tabs-container-divider.dough-tabs-container-bottom-border {\n border-bottom: 1px solid var(--dough-color-gray-5);\n}\n.dough-tabs-container.dough-tabs-container-compact .dough-tab-item + .dough-tab-item {\n margin-left: 16px;\n}\n.dough-tabs-container.dough-tabs-container-compact .dough-tab-item-button {\n padding-bottom: 16px;\n}\n.dough-tabs-container.dough-tabs-container-compact .dough-tab-item-button .dough-box {\n max-height: unset;\n min-height: 0;\n}\n.dough-tabs-container.dough-tabs-container-compact.dough-tabs-container-top-border .dough-tab-item.dough-tab-item-compact .dough-tab-item-button {\n padding-bottom: 0;\n padding-top: 16px;\n}";
4598
4601
  styleInject(css_248z$z);
4599
4602
 
4600
4603
  var simplifyKey = function (key) {
4601
4604
  return key ? key.slice(key.indexOf("$") + 1) : key;
4602
4605
  };
4603
4606
 
4607
+ var Border = function (props) { return (React__default.createElement("span", { className: cn("dough-tab-item-selection-border", props.color ? props.color : exports.Colors.HEADER, {
4608
+ "dough-tab-item-selection-border-hover": props.withBorderOnHover,
4609
+ "dough-tabs-container-top-border": props.borderOnTop,
4610
+ }), style: props.style })); };
4604
4611
  var TabsContainer = function (props) {
4612
+ var tabRefs = React.useRef({});
4613
+ var _a = React.useState(undefined), selectedIndex = _a[0], setSelectedIndex = _a[1];
4605
4614
  var handleChange = function (val) {
4606
4615
  if (val && val !== props.value) {
4607
4616
  if (props.onChange) {
@@ -4609,34 +4618,52 @@ var TabsContainer = function (props) {
4609
4618
  }
4610
4619
  }
4611
4620
  };
4621
+ var currentTab = selectedIndex === undefined
4622
+ ? undefined
4623
+ : tabRefs.current[selectedIndex];
4624
+ var underlineWidth = currentTab === null || currentTab === void 0 ? void 0 : currentTab.clientWidth;
4625
+ var underlineLeftPosition = currentTab === null || currentTab === void 0 ? void 0 : currentTab.offsetLeft;
4612
4626
  return (React__default.createElement(Box, { display: exports.BoxDisplay.FLEX, direction: exports.BoxDirection.ROW, className: cn("dough-tabs-container", props.className, {
4613
4627
  "dough-tabs-container-divider": props.showDivider !== false,
4614
4628
  "dough-tabs-container-top-border": props.borderOnTop,
4615
- "dough-tabs-container-bottom-border": props.borderOnTop !== false,
4616
- }), dataAttributes: props.dataAttributes }, props.children &&
4617
- React.Children.toArray(props.children).map(function (child) {
4618
- var simplifiedKey = simplifyKey(child.key);
4619
- return (React__default.createElement(Box, { className: cn("dough-tab-item", {
4620
- active: props.value === simplifiedKey,
4621
- "dough-tab-item-small": props.small || props.iconOnly,
4622
- "dough-tab-item-stretch-tabs": props.stretchTabs,
4623
- }), key: "tab-" + simplifiedKey + "-wrapper" },
4624
- React__default.createElement("span", { className: cn("dough-tab-item-selection-border", props.color ? props.color : exports.Colors.HEADER, {
4625
- "dough-tabs-container-top-border": props.borderOnTop,
4626
- }) }),
4627
- React__default.createElement("div", { className: cn("dough-tab-item-button", {
4628
- "dough-tab-item-button-disabled": child.props.disabled,
4629
- }), onClick: function (e) {
4630
- cancelEvent(e);
4631
- hideLastDoughTooltip();
4632
- handleChange(simplifiedKey);
4633
- } },
4634
- React__default.createElement(Box, { height: "100%", display: exports.BoxDisplay.FLEX, justifyContent: exports.BoxJustifyContent.CENTER, alignItems: exports.BoxAlign.CENTER, padding: props.iconOnly
4635
- ? exports.Sizes.XS
4636
- : props.small
4637
- ? exports.Sizes.SMALL
4638
- : exports.Sizes.NORMAL }, child))));
4639
- })));
4629
+ "dough-tabs-container-bottom-border": props.borderOnTop !== true,
4630
+ "dough-tabs-container-compact": props.compact,
4631
+ }), padding: props.padding, dataAttributes: props.dataAttributes },
4632
+ props.children &&
4633
+ React.Children.toArray(props.children).map(function (child, index) {
4634
+ var simplifiedKey = simplifyKey(child.key);
4635
+ var isActive = props.value === simplifiedKey;
4636
+ return (React__default.createElement(Box, { className: cn("dough-tab-item", {
4637
+ active: props.value === simplifiedKey,
4638
+ "dough-tab-item-small": props.small || props.iconOnly,
4639
+ "dough-tab-item-stretch-tabs": props.stretchTabs,
4640
+ }), ref: function (ref) {
4641
+ tabRefs.current[index] = ref;
4642
+ if (isActive) {
4643
+ setSelectedIndex(index);
4644
+ }
4645
+ }, key: "tab-" + simplifiedKey + "-wrapper" },
4646
+ React__default.createElement(Border, { borderOnTop: props.borderOnTop, color: props.color, withBorderOnHover: props.withBorderOnHover }),
4647
+ React__default.createElement("div", { className: cn("dough-tab-item-button", {
4648
+ "dough-tab-item-button-disabled": child.props.disabled,
4649
+ }), onClick: function (e) {
4650
+ cancelEvent(e);
4651
+ hideLastDoughTooltip();
4652
+ setSelectedIndex(index);
4653
+ handleChange(simplifiedKey);
4654
+ } },
4655
+ React__default.createElement(Box, { height: "100%", display: exports.BoxDisplay.FLEX, justifyContent: exports.BoxJustifyContent.CENTER, alignItems: exports.BoxAlign.CENTER, padding: props.iconOnly
4656
+ ? exports.Sizes.XS
4657
+ : props.small
4658
+ ? exports.Sizes.SMALL
4659
+ : props.compact
4660
+ ? undefined
4661
+ : exports.Sizes.NORMAL }, child))));
4662
+ }),
4663
+ selectedIndex !== undefined && (React__default.createElement(Border, { borderOnTop: props.borderOnTop, color: props.color, withBorderOnHover: props.withBorderOnHover, style: {
4664
+ width: underlineWidth || 0,
4665
+ left: underlineLeftPosition,
4666
+ } }))));
4640
4667
  };
4641
4668
  TabsContainer.displayName = "TabsContainer";
4642
4669
 
@@ -17,6 +17,7 @@ export interface DropAreaProps {
17
17
  topShift?: number;
18
18
  overlaySelector?: string;
19
19
  alwaysTop?: boolean;
20
+ desktopOnly?: boolean;
20
21
  }
21
22
  export declare const DropArea: {
22
23
  (props: DropAreaProps): JSX.Element;
@@ -0,0 +1,4 @@
1
+ declare const _default: import("@storybook/csf").ComponentAnnotations<import("@storybook/react").ReactFramework, import("./tabs").TabsContainerProps>;
2
+ export default _default;
3
+ export declare const Default: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactFramework, import("./tabs").TabsContainerProps>;
4
+ export declare const Compact: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactFramework, import("./tabs").TabsContainerProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speakapbv/dough-component-library",
3
- "version": "9.28.2",
3
+ "version": "9.30.0",
4
4
  "description": "DOUGH: Speakap React Component Library",
5
5
  "author": "Speakap",
6
6
  "license": "MIT",
@@ -10,7 +10,7 @@
10
10
  "module": "dist/index.es.js",
11
11
  "jsnext:main": "dist/index.es.js",
12
12
  "engines": {
13
- "node": ">=8",
13
+ "node": ">=16.17.1",
14
14
  "npm": ">=5"
15
15
  },
16
16
  "scripts": {