@alfalab/core-components-tabs 6.3.2 → 6.5.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 (151) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/components/primary-tablist/Component.d.ts +2 -1
  3. package/components/primary-tablist/Component.desktop.js +2 -2
  4. package/components/primary-tablist/Component.js +24 -19
  5. package/components/primary-tablist/Component.mobile.d.ts +1 -1
  6. package/components/primary-tablist/Component.mobile.js +3 -3
  7. package/components/primary-tablist/Component.responsive.d.ts +1 -1
  8. package/components/primary-tablist/Component.responsive.js +4 -4
  9. package/components/primary-tablist/index.css +27 -21
  10. package/components/primary-tablist/mobile.css +30 -24
  11. package/components/scrollable-container/Component.d.ts +2 -1
  12. package/components/scrollable-container/Component.js +14 -4
  13. package/components/scrollable-container/index.css +11 -6
  14. package/components/secondary-tablist/Component.d.ts +2 -1
  15. package/components/secondary-tablist/Component.desktop.d.ts +1 -1
  16. package/components/secondary-tablist/Component.desktop.js +2 -2
  17. package/components/secondary-tablist/Component.js +11 -6
  18. package/components/secondary-tablist/Component.mobile.d.ts +1 -1
  19. package/components/secondary-tablist/Component.mobile.js +3 -3
  20. package/components/secondary-tablist/Component.responsive.d.ts +1 -1
  21. package/components/secondary-tablist/Component.responsive.js +4 -4
  22. package/components/secondary-tablist/index.css +15 -14
  23. package/components/secondary-tablist/mobile.css +17 -16
  24. package/components/tab/Component.js +1 -1
  25. package/components/tab/index.css +3 -3
  26. package/components/tabs/Component.d.ts +1 -1
  27. package/components/tabs/Component.desktop.d.ts +1 -1
  28. package/components/tabs/Component.desktop.js +3 -3
  29. package/components/tabs/Component.js +4 -3
  30. package/components/tabs/Component.mobile.d.ts +1 -1
  31. package/components/tabs/Component.mobile.js +3 -3
  32. package/components/tabs/Component.responsive.d.ts +1 -1
  33. package/components/tabs/Component.responsive.js +3 -3
  34. package/cssm/components/primary-tablist/Component.d.ts +2 -1
  35. package/cssm/components/primary-tablist/Component.js +23 -18
  36. package/cssm/components/primary-tablist/Component.mobile.d.ts +1 -1
  37. package/cssm/components/primary-tablist/Component.responsive.d.ts +1 -1
  38. package/cssm/components/primary-tablist/Component.responsive.js +2 -2
  39. package/cssm/components/primary-tablist/index.module.css +8 -2
  40. package/cssm/components/scrollable-container/Component.d.ts +2 -1
  41. package/cssm/components/scrollable-container/Component.js +13 -3
  42. package/cssm/components/scrollable-container/index.module.css +7 -2
  43. package/cssm/components/secondary-tablist/Component.d.ts +2 -1
  44. package/cssm/components/secondary-tablist/Component.desktop.d.ts +1 -1
  45. package/cssm/components/secondary-tablist/Component.js +10 -5
  46. package/cssm/components/secondary-tablist/Component.mobile.d.ts +1 -1
  47. package/cssm/components/secondary-tablist/Component.responsive.d.ts +1 -1
  48. package/cssm/components/secondary-tablist/Component.responsive.js +2 -2
  49. package/cssm/components/secondary-tablist/index.module.css +5 -4
  50. package/cssm/components/tabs/Component.d.ts +1 -1
  51. package/cssm/components/tabs/Component.desktop.d.ts +1 -1
  52. package/cssm/components/tabs/Component.js +4 -3
  53. package/cssm/components/tabs/Component.mobile.d.ts +1 -1
  54. package/cssm/components/tabs/Component.responsive.d.ts +1 -1
  55. package/cssm/typings.d.ts +11 -2
  56. package/desktop.js +3 -3
  57. package/esm/components/primary-tablist/Component.d.ts +2 -1
  58. package/esm/components/primary-tablist/Component.desktop.js +2 -2
  59. package/esm/components/primary-tablist/Component.js +24 -19
  60. package/esm/components/primary-tablist/Component.mobile.d.ts +1 -1
  61. package/esm/components/primary-tablist/Component.mobile.js +3 -3
  62. package/esm/components/primary-tablist/Component.responsive.d.ts +1 -1
  63. package/esm/components/primary-tablist/Component.responsive.js +4 -4
  64. package/esm/components/primary-tablist/index.css +27 -21
  65. package/esm/components/primary-tablist/mobile.css +30 -24
  66. package/esm/components/scrollable-container/Component.d.ts +2 -1
  67. package/esm/components/scrollable-container/Component.js +14 -4
  68. package/esm/components/scrollable-container/index.css +11 -6
  69. package/esm/components/secondary-tablist/Component.d.ts +2 -1
  70. package/esm/components/secondary-tablist/Component.desktop.d.ts +1 -1
  71. package/esm/components/secondary-tablist/Component.desktop.js +2 -2
  72. package/esm/components/secondary-tablist/Component.js +11 -6
  73. package/esm/components/secondary-tablist/Component.mobile.d.ts +1 -1
  74. package/esm/components/secondary-tablist/Component.mobile.js +3 -3
  75. package/esm/components/secondary-tablist/Component.responsive.d.ts +1 -1
  76. package/esm/components/secondary-tablist/Component.responsive.js +4 -4
  77. package/esm/components/secondary-tablist/index.css +15 -14
  78. package/esm/components/secondary-tablist/mobile.css +17 -16
  79. package/esm/components/tab/Component.js +1 -1
  80. package/esm/components/tab/index.css +3 -3
  81. package/esm/components/tabs/Component.d.ts +1 -1
  82. package/esm/components/tabs/Component.desktop.d.ts +1 -1
  83. package/esm/components/tabs/Component.desktop.js +3 -3
  84. package/esm/components/tabs/Component.js +4 -3
  85. package/esm/components/tabs/Component.mobile.d.ts +1 -1
  86. package/esm/components/tabs/Component.mobile.js +3 -3
  87. package/esm/components/tabs/Component.responsive.d.ts +1 -1
  88. package/esm/components/tabs/Component.responsive.js +3 -3
  89. package/esm/desktop.js +3 -3
  90. package/esm/index.js +3 -3
  91. package/esm/index.module-4bf6c045.js +4 -0
  92. package/esm/index.module-c15e7c79.js +4 -0
  93. package/esm/mobile.js +3 -3
  94. package/esm/responsive.js +3 -3
  95. package/esm/{tslib.es6-d595f357.d.ts → tslib.es6-b50bf201.d.ts} +0 -0
  96. package/esm/{tslib.es6-d595f357.js → tslib.es6-b50bf201.js} +0 -0
  97. package/esm/typings.d.ts +11 -2
  98. package/index.js +3 -3
  99. package/index.module-960245fb.js +6 -0
  100. package/index.module-d67ef5e7.js +6 -0
  101. package/mobile.js +3 -3
  102. package/modern/components/primary-tablist/Component.d.ts +2 -1
  103. package/modern/components/primary-tablist/Component.desktop.js +1 -1
  104. package/modern/components/primary-tablist/Component.js +7 -5
  105. package/modern/components/primary-tablist/Component.mobile.d.ts +1 -1
  106. package/modern/components/primary-tablist/Component.mobile.js +2 -2
  107. package/modern/components/primary-tablist/Component.responsive.d.ts +1 -1
  108. package/modern/components/primary-tablist/Component.responsive.js +3 -3
  109. package/modern/components/primary-tablist/index.css +27 -21
  110. package/modern/components/primary-tablist/mobile.css +30 -24
  111. package/modern/components/scrollable-container/Component.d.ts +2 -1
  112. package/modern/components/scrollable-container/Component.js +13 -4
  113. package/modern/components/scrollable-container/index.css +11 -6
  114. package/modern/components/secondary-tablist/Component.d.ts +2 -1
  115. package/modern/components/secondary-tablist/Component.desktop.d.ts +1 -1
  116. package/modern/components/secondary-tablist/Component.desktop.js +1 -1
  117. package/modern/components/secondary-tablist/Component.js +9 -5
  118. package/modern/components/secondary-tablist/Component.mobile.d.ts +1 -1
  119. package/modern/components/secondary-tablist/Component.mobile.js +2 -2
  120. package/modern/components/secondary-tablist/Component.responsive.d.ts +1 -1
  121. package/modern/components/secondary-tablist/Component.responsive.js +3 -3
  122. package/modern/components/secondary-tablist/index.css +15 -14
  123. package/modern/components/secondary-tablist/mobile.css +17 -16
  124. package/modern/components/tab/Component.js +1 -1
  125. package/modern/components/tab/index.css +3 -3
  126. package/modern/components/tabs/Component.d.ts +1 -1
  127. package/modern/components/tabs/Component.desktop.d.ts +1 -1
  128. package/modern/components/tabs/Component.desktop.js +2 -2
  129. package/modern/components/tabs/Component.js +4 -3
  130. package/modern/components/tabs/Component.mobile.d.ts +1 -1
  131. package/modern/components/tabs/Component.mobile.js +2 -2
  132. package/modern/components/tabs/Component.responsive.d.ts +1 -1
  133. package/modern/components/tabs/Component.responsive.js +2 -2
  134. package/modern/desktop.js +2 -2
  135. package/modern/index.js +2 -2
  136. package/modern/index.module-4bf6c045.js +4 -0
  137. package/modern/index.module-c15e7c79.js +4 -0
  138. package/modern/mobile.js +2 -2
  139. package/modern/responsive.js +2 -2
  140. package/modern/typings.d.ts +11 -2
  141. package/package.json +4 -4
  142. package/responsive.js +3 -3
  143. package/{tslib.es6-21f3b6da.d.ts → tslib.es6-996824db.d.ts} +0 -0
  144. package/{tslib.es6-21f3b6da.js → tslib.es6-996824db.js} +0 -0
  145. package/typings.d.ts +11 -2
  146. package/esm/index.module-7be29ac4.js +0 -4
  147. package/esm/index.module-a7445354.js +0 -4
  148. package/index.module-5ed9b0e6.js +0 -6
  149. package/index.module-fa5020d4.js +0 -6
  150. package/modern/index.module-7be29ac4.js +0 -4
  151. package/modern/index.module-a7445354.js +0 -4
@@ -1,13 +1,14 @@
1
1
  /// <reference types="react" />
2
2
  import React from 'react';
3
3
  import { Styles } from "../../typings";
4
- declare const SecondaryTabList: ({ styles, className, containerClassName, size, titles, selectedId, scrollable, tagSize, onChange, dataTestId, }: Pick<import("../../typings").TabsProps, "className" | "onChange" | "size" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable"> & {
4
+ declare const SecondaryTabList: ({ styles, className, containerClassName, size, titles, selectedId, scrollable, fullWidthScroll, tagSize, onChange, dataTestId, }: Pick<import("../../typings").TabsProps, "className" | "onChange" | "size" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll"> & {
5
5
  titles?: {
6
6
  title: string;
7
7
  id: React.ReactText;
8
8
  disabled?: boolean | undefined;
9
9
  rightAddons?: React.ReactNode;
10
10
  hidden?: boolean | undefined;
11
+ toggleClassName?: string | undefined;
11
12
  }[] | undefined;
12
13
  } & {
13
14
  tagSize?: "xxs" | "xs" | "s" | "m" | "l" | "xl" | undefined;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { SecondaryTabListProps } from "../../typings";
3
3
  type SecondaryTabListDesktopProps = Omit<SecondaryTabListProps, 'tagSize'>;
4
- declare const SecondaryTabListDesktop: ({ size, ...restProps }: Pick<SecondaryTabListProps, "className" | "onChange" | "size" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "titles">) => JSX.Element;
4
+ declare const SecondaryTabListDesktop: ({ size, ...restProps }: Pick<SecondaryTabListProps, "className" | "onChange" | "size" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll" | "titles">) => JSX.Element;
5
5
  export { SecondaryTabListDesktopProps, SecondaryTabListDesktop };
@@ -17,18 +17,23 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
17
17
  var cn__default = /*#__PURE__*/_interopDefaultLegacy(cn);
18
18
 
19
19
  var SecondaryTabList = function (_a) {
20
- var _b = _a.styles, styles = _b === void 0 ? {} : _b, className = _a.className, containerClassName = _a.containerClassName, size = _a.size, _c = _a.titles, titles = _c === void 0 ? [] : _c, _d = _a.selectedId, selectedId = _d === void 0 ? titles.length ? titles[0].id : undefined : _d, _e = _a.scrollable, scrollable = _e === void 0 ? true : _e, _f = _a.tagSize, tagSize = _f === void 0 ? 'xs' : _f, onChange = _a.onChange, dataTestId = _a.dataTestId;
20
+ var _b = _a.styles, styles = _b === void 0 ? {} : _b, className = _a.className, containerClassName = _a.containerClassName, size = _a.size, _c = _a.titles, titles = _c === void 0 ? [] : _c, _d = _a.selectedId, selectedId = _d === void 0 ? titles.length ? titles[0].id : undefined : _d, _e = _a.scrollable, scrollable = _e === void 0 ? true : _e, fullWidthScroll = _a.fullWidthScroll, _f = _a.tagSize, tagSize = _f === void 0 ? 'xs' : _f, onChange = _a.onChange, dataTestId = _a.dataTestId;
21
21
  var _g = useTabs.useTabs({
22
22
  titles: titles,
23
23
  selectedId: selectedId,
24
24
  onChange: onChange,
25
25
  }), focusedTab = _g.focusedTab, selectedTab = _g.selectedTab, getTabListItemProps = _g.getTabListItemProps;
26
26
  var renderContent = function () {
27
- return titles
28
- .filter(function (item) { return !item.hidden; })
29
- .map(function (item, index) { return (React__default['default'].createElement(coreComponentsTag.Tag, tslib_es6.__assign({}, getTabListItemProps(index), { key: item.id, className: styles.title, checked: item.id === selectedId, size: tagSize, rightAddons: item.rightAddons }), item.title)); });
27
+ var _a;
28
+ return (React__default['default'].createElement("div", { role: 'tablist', "data-test-id": dataTestId, className: cn__default['default'](styles.component, className, size && styles[size], (_a = {},
29
+ _a[styles.fullWidthScroll] = fullWidthScroll,
30
+ _a)) }, titles.map(function (item, index) {
31
+ if (item.hidden)
32
+ return null;
33
+ return (React__default['default'].createElement(coreComponentsTag.Tag, tslib_es6.__assign({}, getTabListItemProps(index), { key: item.id, className: cn__default['default'](styles.title, item.toggleClassName), checked: item.id === selectedId, size: tagSize, rightAddons: item.rightAddons }), item.title));
34
+ })));
30
35
  };
31
- return (React__default['default'].createElement("div", { role: 'tablist', "data-test-id": dataTestId, className: cn__default['default'](styles.component, className, size && styles[size]) }, scrollable ? (React__default['default'].createElement(components_scrollableContainer_Component.ScrollableContainer, { activeChild: focusedTab || selectedTab, containerClassName: containerClassName }, renderContent())) : (React__default['default'].createElement("div", { className: cn__default['default'](styles.container, containerClassName) }, renderContent()))));
36
+ return scrollable ? (React__default['default'].createElement(components_scrollableContainer_Component.ScrollableContainer, { activeChild: focusedTab || selectedTab, containerClassName: containerClassName, fullWidthScroll: fullWidthScroll }, renderContent())) : (React__default['default'].createElement("div", { className: cn__default['default'](styles.container, containerClassName) }, renderContent()));
32
37
  };
33
38
 
34
39
  exports.SecondaryTabList = SecondaryTabList;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { SecondaryTabListProps } from "../../typings";
3
3
  type SecondaryTabListMobileProps = Omit<SecondaryTabListProps, 'size' | 'tagSize'>;
4
- declare const SecondaryTabListMobile: ({ className, ...restProps }: Pick<SecondaryTabListProps, "className" | "onChange" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "titles">) => JSX.Element;
4
+ declare const SecondaryTabListMobile: ({ className, ...restProps }: Pick<SecondaryTabListProps, "className" | "onChange" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll" | "titles">) => JSX.Element;
5
5
  export { SecondaryTabListMobileProps, SecondaryTabListMobile };
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { SecondaryTabListProps } from "../../typings";
3
- declare const SecondaryTabListResponsive: ({ size, defaultMatch, ...restProps }: SecondaryTabListProps) => JSX.Element;
3
+ declare const SecondaryTabListResponsive: ({ size, defaultMatch, fullWidthScroll, ...restProps }: SecondaryTabListProps) => JSX.Element;
4
4
  export { SecondaryTabListResponsive };
@@ -22,12 +22,12 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
22
22
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
23
 
24
24
  var SecondaryTabListResponsive = function (_a) {
25
- var size = _a.size, _b = _a.defaultMatch, defaultMatch = _b === void 0 ? 'desktop' : _b, restProps = tslib_es6.__rest(_a, ["size", "defaultMatch"]);
25
+ var size = _a.size, _b = _a.defaultMatch, defaultMatch = _b === void 0 ? 'desktop' : _b, fullWidthScroll = _a.fullWidthScroll, restProps = tslib_es6.__rest(_a, ["size", "defaultMatch", "fullWidthScroll"]);
26
26
  var view = hooks.useMedia([
27
27
  ['mobile', '(max-width: 767px)'],
28
28
  ['desktop', '(min-width: 768px)'],
29
29
  ], defaultMatch)[0];
30
- return view === 'desktop' ? (React__default['default'].createElement(components_secondaryTablist_Component_desktop.SecondaryTabListDesktop, tslib_es6.__assign({ size: size }, restProps))) : (React__default['default'].createElement(components_secondaryTablist_Component_mobile.SecondaryTabListMobile, tslib_es6.__assign({}, restProps)));
30
+ return view === 'desktop' ? (React__default['default'].createElement(components_secondaryTablist_Component_desktop.SecondaryTabListDesktop, tslib_es6.__assign({ size: size }, restProps))) : (React__default['default'].createElement(components_secondaryTablist_Component_mobile.SecondaryTabListMobile, tslib_es6.__assign({ fullWidthScroll: fullWidthScroll }, restProps)));
31
31
  };
32
32
 
33
33
  exports.SecondaryTabListResponsive = SecondaryTabListResponsive;
@@ -45,12 +45,13 @@
45
45
  }
46
46
  .component {
47
47
  position: relative;
48
- display: flex;
49
- align-items: center;
48
+ display: inline-flex;
49
+ }
50
+ .fullWidthScroll {
51
+ margin: 0 var(--gap-m);
50
52
  }
51
53
  .container {
52
- display: flex;
53
- align-items: center;
54
+ overflow: hidden;
54
55
  }
55
56
  .title {
56
57
  white-space: nowrap;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { TabsProps } from "../../typings";
3
- declare const Tabs: ({ TabList, className, containerClassName, size, defaultMatch, children, selectedId, scrollable, keepMounted, dataTestId, onChange, }: Pick<TabsProps, "children" | "className" | "onChange" | "size" | "dataTestId" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "keepMounted" | "TabList">) => JSX.Element;
3
+ declare const Tabs: ({ TabList, className, containerClassName, size, defaultMatch, children, selectedId, scrollable, fullWidthScroll, keepMounted, dataTestId, onChange, }: Pick<TabsProps, "children" | "className" | "onChange" | "size" | "dataTestId" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll" | "keepMounted" | "TabList">) => JSX.Element;
4
4
  export { Tabs };
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { TabsProps } from "../../typings";
3
- type TabsDesktopProps = Omit<TabsProps, 'TabList'>;
3
+ type TabsDesktopProps = Omit<TabsProps, 'TabList' | 'fullWidthScroll'>;
4
4
  declare const TabsDesktop: ({ view, scrollable, size, ...restProps }: Pick<TabsProps, "children" | "className" | "onChange" | "size" | "dataTestId" | "view" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "keepMounted">) => JSX.Element;
5
5
  export { TabsDesktopProps, TabsDesktop };
@@ -9,21 +9,22 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
9
9
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
10
10
 
11
11
  var Tabs = function (_a) {
12
- var TabList = _a.TabList, className = _a.className, containerClassName = _a.containerClassName, size = _a.size, defaultMatch = _a.defaultMatch, children = _a.children, selectedId = _a.selectedId, scrollable = _a.scrollable, _b = _a.keepMounted, keepMounted = _b === void 0 ? false : _b, dataTestId = _a.dataTestId, onChange = _a.onChange;
12
+ var TabList = _a.TabList, className = _a.className, containerClassName = _a.containerClassName, size = _a.size, defaultMatch = _a.defaultMatch, children = _a.children, selectedId = _a.selectedId, scrollable = _a.scrollable, _b = _a.fullWidthScroll, fullWidthScroll = _b === void 0 ? false : _b, _c = _a.keepMounted, keepMounted = _c === void 0 ? false : _c, dataTestId = _a.dataTestId, onChange = _a.onChange;
13
13
  var tabsArray = React__default['default'].Children.toArray(children);
14
14
  var titles = tabsArray.map(function (_a) {
15
- var _b = _a.props, title = _b.title, id = _b.id, rightAddons = _b.rightAddons, disabled = _b.disabled, hidden = _b.hidden;
15
+ var _b = _a.props, title = _b.title, id = _b.id, rightAddons = _b.rightAddons, disabled = _b.disabled, hidden = _b.hidden, toggleClassName = _b.toggleClassName;
16
16
  return ({
17
17
  title: title,
18
18
  id: id,
19
19
  disabled: disabled,
20
20
  rightAddons: rightAddons,
21
21
  hidden: hidden,
22
+ toggleClassName: toggleClassName,
22
23
  });
23
24
  });
24
25
  var tabs = tabsArray.filter(function (tab) { return tab.props.id === selectedId || tab.props.keepMounted || keepMounted; });
25
26
  return (React__default['default'].createElement("div", { className: className },
26
- React__default['default'].createElement(TabList, { containerClassName: containerClassName, size: size, titles: titles, selectedId: selectedId, scrollable: scrollable, onChange: onChange, dataTestId: dataTestId, defaultMatch: defaultMatch }),
27
+ React__default['default'].createElement(TabList, { containerClassName: containerClassName, size: size, titles: titles, selectedId: selectedId, scrollable: scrollable, onChange: onChange, dataTestId: dataTestId, defaultMatch: defaultMatch, fullWidthScroll: fullWidthScroll }),
27
28
  tabs.map(function (tab) { return React.cloneElement(tab, { hidden: tab.props.id !== selectedId }); })));
28
29
  };
29
30
 
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { TabsProps } from "../../typings";
3
3
  type TabsMobileProps = Omit<TabsProps, 'TabList' | 'size'>;
4
- declare const TabsMobile: ({ view, scrollable, ...restProps }: Pick<TabsProps, "children" | "className" | "onChange" | "dataTestId" | "view" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "keepMounted">) => JSX.Element;
4
+ declare const TabsMobile: ({ view, scrollable, ...restProps }: Pick<TabsProps, "children" | "className" | "onChange" | "dataTestId" | "view" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll" | "keepMounted">) => JSX.Element;
5
5
  export { TabsMobileProps, TabsMobile };
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { TabsProps } from "../../typings";
3
3
  type TabsResponsiveProps = Omit<TabsProps, 'TabList'>;
4
- declare const TabsResponsive: ({ view, scrollable, ...restProps }: Pick<TabsProps, "children" | "className" | "onChange" | "size" | "dataTestId" | "view" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "keepMounted">) => JSX.Element;
4
+ declare const TabsResponsive: ({ view, scrollable, ...restProps }: Pick<TabsProps, "children" | "className" | "onChange" | "size" | "dataTestId" | "view" | "mobile" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll" | "keepMounted">) => JSX.Element;
5
5
  export { TabsResponsiveProps, TabsResponsive };
package/cssm/typings.d.ts CHANGED
@@ -39,6 +39,10 @@ type TabsProps = {
39
39
  * Рендерить заголовки табов в контейнере со скроллом
40
40
  */
41
41
  scrollable?: boolean;
42
+ /**
43
+ * При скроле табы будут уходить в край экрана
44
+ */
45
+ fullWidthScroll?: boolean;
42
46
  /**
43
47
  * Компоненты табов
44
48
  */
@@ -68,9 +72,13 @@ type TabProps = {
68
72
  */
69
73
  title: string;
70
74
  /**
71
- * Дополнительный класс
75
+ * Дополнительный класс для контейнера содержимого таба
72
76
  */
73
77
  className?: string;
78
+ /**
79
+ * Дополнительный класс для кнопки таба
80
+ */
81
+ toggleClassName?: string;
74
82
  /**
75
83
  * Блокирует таб
76
84
  */
@@ -96,7 +104,7 @@ type TabProps = {
96
104
  */
97
105
  dataTestId?: string;
98
106
  };
99
- type TabListProps = Pick<TabsProps, 'className' | 'containerClassName' | 'size' | 'defaultMatch' | 'selectedId' | 'scrollable' | 'onChange' | 'dataTestId'> & {
107
+ type TabListProps = Pick<TabsProps, 'className' | 'containerClassName' | 'size' | 'defaultMatch' | 'selectedId' | 'scrollable' | 'onChange' | 'dataTestId' | 'fullWidthScroll'> & {
100
108
  /**
101
109
  * Заголовки табов
102
110
  */
@@ -106,6 +114,7 @@ type TabListProps = Pick<TabsProps, 'className' | 'containerClassName' | 'size'
106
114
  disabled?: boolean;
107
115
  rightAddons?: ReactNode;
108
116
  hidden?: boolean;
117
+ toggleClassName?: string;
109
118
  }>;
110
119
  };
111
120
  type SecondaryTabListProps = TabListProps & {
package/desktop.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('./tslib.es6-21f3b6da.js');
5
+ require('./tslib.es6-996824db.js');
6
6
  require('react');
7
7
  require('@alfalab/core-components-keyboard-focusable');
8
8
  require('classnames');
@@ -10,11 +10,11 @@ require('compute-scroll-into-view');
10
10
  var components_scrollableContainer_Component = require('./components/scrollable-container/Component.js');
11
11
  var useTabs = require('./useTabs.js');
12
12
  require('./components/primary-tablist/Component.js');
13
- require('./index.module-5ed9b0e6.js');
13
+ require('./index.module-d67ef5e7.js');
14
14
  var components_primaryTablist_Component_desktop = require('./components/primary-tablist/Component.desktop.js');
15
15
  require('@alfalab/core-components-tag');
16
16
  require('./components/secondary-tablist/Component.js');
17
- require('./index.module-fa5020d4.js');
17
+ require('./index.module-960245fb.js');
18
18
  var components_secondaryTablist_Component_desktop = require('./components/secondary-tablist/Component.desktop.js');
19
19
  var components_tab_Component = require('./components/tab/Component.js');
20
20
  require('./components/tabs/Component.js');
@@ -1,13 +1,14 @@
1
1
  /// <reference types="react" />
2
2
  import React from 'react';
3
3
  import { Styles } from "../../typings";
4
- declare const PrimaryTabList: ({ size, styles, className, containerClassName, titles, selectedId, scrollable, onChange, dataTestId, }: Pick<import("../../typings").TabsProps, "className" | "onChange" | "size" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable"> & {
4
+ declare const PrimaryTabList: ({ size, styles, className, containerClassName, titles, selectedId, scrollable, fullWidthScroll, onChange, dataTestId, }: Pick<import("../../typings").TabsProps, "className" | "onChange" | "size" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll"> & {
5
5
  titles?: {
6
6
  title: string;
7
7
  id: React.ReactText;
8
8
  disabled?: boolean | undefined;
9
9
  rightAddons?: React.ReactNode;
10
10
  hidden?: boolean | undefined;
11
+ toggleClassName?: string | undefined;
11
12
  }[] | undefined;
12
13
  } & Styles) => JSX.Element;
13
14
  export { PrimaryTabList };
@@ -1,4 +1,4 @@
1
- import { _ as __rest, a as __assign } from '../../tslib.es6-d595f357.js';
1
+ import { _ as __rest, a as __assign } from '../../tslib.es6-b50bf201.js';
2
2
  import React from 'react';
3
3
  import '@alfalab/core-components-keyboard-focusable/esm';
4
4
  import 'classnames';
@@ -6,7 +6,7 @@ import 'compute-scroll-into-view';
6
6
  import '../scrollable-container/Component.js';
7
7
  import '../../useTabs.js';
8
8
  import { PrimaryTabList } from './Component.js';
9
- import { c as commonStyles } from '../../index.module-7be29ac4.js';
9
+ import { c as commonStyles } from '../../index.module-4bf6c045.js';
10
10
 
11
11
  var PrimaryTabListDesktop = function (_a) {
12
12
  var _b = _a.size, size = _b === void 0 ? 'm' : _b, restProps = __rest(_a, ["size"]);
@@ -1,4 +1,4 @@
1
- import { a as __assign } from '../../tslib.es6-d595f357.js';
1
+ import { a as __assign } from '../../tslib.es6-b50bf201.js';
2
2
  import React, { useRef, useEffect } from 'react';
3
3
  import { KeyboardFocusable } from '@alfalab/core-components-keyboard-focusable/esm';
4
4
  import cn from 'classnames';
@@ -7,7 +7,7 @@ import { ScrollableContainer } from '../scrollable-container/Component.js';
7
7
  import { useTabs } from '../../useTabs.js';
8
8
 
9
9
  var PrimaryTabList = function (_a) {
10
- var size = _a.size, _b = _a.styles, styles = _b === void 0 ? {} : _b, className = _a.className, containerClassName = _a.containerClassName, _c = _a.titles, titles = _c === void 0 ? [] : _c, _d = _a.selectedId, selectedId = _d === void 0 ? titles.length ? titles[0].id : undefined : _d, _e = _a.scrollable, scrollable = _e === void 0 ? true : _e, onChange = _a.onChange, dataTestId = _a.dataTestId;
10
+ var size = _a.size, _b = _a.styles, styles = _b === void 0 ? {} : _b, className = _a.className, containerClassName = _a.containerClassName, _c = _a.titles, titles = _c === void 0 ? [] : _c, _d = _a.selectedId, selectedId = _d === void 0 ? titles.length ? titles[0].id : undefined : _d, _e = _a.scrollable, scrollable = _e === void 0 ? true : _e, fullWidthScroll = _a.fullWidthScroll, onChange = _a.onChange, dataTestId = _a.dataTestId;
11
11
  var lineRef = useRef(null);
12
12
  var _f = useTabs({
13
13
  titles: titles,
@@ -19,23 +19,28 @@ var PrimaryTabList = function (_a) {
19
19
  lineRef.current.style.width = selectedTab.offsetWidth + "px";
20
20
  lineRef.current.style.transform = "translateX(" + selectedTab.offsetLeft + "px)";
21
21
  }
22
- });
23
- var renderContent = function () { return (React.createElement(React.Fragment, null,
24
- titles.map(function (item, index) {
25
- if (item.hidden)
26
- return null;
27
- return (React.createElement(KeyboardFocusable, { key: item.id }, function (ref, focused) {
28
- var _a;
29
- return (React.createElement("button", __assign({}, getTabListItemProps(index, ref), { type: 'button', className: cn(styles.title, (_a = {},
30
- _a[styles.selected] = item.id === selectedId,
31
- _a[styles.disabled] = item.disabled,
32
- _a)) }),
33
- React.createElement("span", { className: focused ? styles.focused : undefined }, item.title),
34
- item.rightAddons && (React.createElement("span", { className: styles.rightAddons }, item.rightAddons))));
35
- }));
36
- }),
37
- React.createElement("div", { className: styles.line, ref: lineRef }))); };
38
- return (React.createElement("div", { role: 'tablist', "data-test-id": dataTestId, className: cn(styles.component, className, size && styles[size]) }, scrollable ? (React.createElement(ScrollableContainer, { activeChild: focusedTab || selectedTab, containerClassName: containerClassName }, renderContent())) : (React.createElement("div", { className: cn(styles.container, containerClassName) }, renderContent()))));
22
+ }, [selectedTab]);
23
+ var renderContent = function () {
24
+ var _a;
25
+ return (React.createElement("div", { role: 'tablist', "data-test-id": dataTestId, className: cn(styles.component, className, size && styles[size], (_a = {},
26
+ _a[styles.fullWidthScroll] = fullWidthScroll,
27
+ _a)) },
28
+ titles.map(function (item, index) {
29
+ if (item.hidden)
30
+ return null;
31
+ return (React.createElement(KeyboardFocusable, { key: item.id }, function (ref, focused) {
32
+ var _a;
33
+ return (React.createElement("button", __assign({}, getTabListItemProps(index, ref), { type: 'button', className: cn(styles.title, (_a = {},
34
+ _a[styles.selected] = item.id === selectedId,
35
+ _a[styles.disabled] = item.disabled,
36
+ _a), item.toggleClassName) }),
37
+ React.createElement("span", { className: focused ? styles.focused : undefined }, item.title),
38
+ item.rightAddons && (React.createElement("span", { className: styles.rightAddons }, item.rightAddons))));
39
+ }));
40
+ }),
41
+ React.createElement("div", { className: styles.line, ref: lineRef })));
42
+ };
43
+ return scrollable ? (React.createElement(ScrollableContainer, { activeChild: focusedTab || selectedTab, containerClassName: containerClassName, fullWidthScroll: fullWidthScroll }, renderContent())) : (React.createElement("div", { className: cn(styles.container, containerClassName) }, renderContent()));
39
44
  };
40
45
 
41
46
  export { PrimaryTabList };
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { TabListProps } from "../../typings";
3
3
  type PrimaryTabListMobileProps = Omit<TabListProps, 'size'>;
4
- declare const PrimaryTabListMobile: ({ className, ...restProps }: Pick<TabListProps, "className" | "onChange" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "titles">) => JSX.Element;
4
+ declare const PrimaryTabListMobile: ({ className, ...restProps }: Pick<TabListProps, "className" | "onChange" | "dataTestId" | "containerClassName" | "defaultMatch" | "selectedId" | "scrollable" | "fullWidthScroll" | "titles">) => JSX.Element;
5
5
  export { PrimaryTabListMobileProps, PrimaryTabListMobile };
@@ -1,4 +1,4 @@
1
- import { a as __assign, _ as __rest } from '../../tslib.es6-d595f357.js';
1
+ import { a as __assign, _ as __rest } from '../../tslib.es6-b50bf201.js';
2
2
  import React from 'react';
3
3
  import '@alfalab/core-components-keyboard-focusable/esm';
4
4
  import cn from 'classnames';
@@ -6,9 +6,9 @@ import 'compute-scroll-into-view';
6
6
  import '../scrollable-container/Component.js';
7
7
  import '../../useTabs.js';
8
8
  import { PrimaryTabList } from './Component.js';
9
- import { c as commonStyles } from '../../index.module-7be29ac4.js';
9
+ import { c as commonStyles } from '../../index.module-4bf6c045.js';
10
10
 
11
- var mobileStyles = {"title":"tabs__title_1q8rm tabs__title_1dx1o","mobile":"tabs__mobile_1q8rm"};
11
+ var mobileStyles = {"title":"tabs__title_dhwzv tabs__title_astus","mobile":"tabs__mobile_dhwzv"};
12
12
  require('./mobile.css')
13
13
 
14
14
  var styles = __assign(__assign({}, commonStyles), mobileStyles);
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { TabListProps } from "../../typings";
3
- declare const PrimaryTabListResponsive: ({ size, defaultMatch, ...restProps }: TabListProps) => JSX.Element;
3
+ declare const PrimaryTabListResponsive: ({ size, defaultMatch, fullWidthScroll, ...restProps }: TabListProps) => JSX.Element;
4
4
  export { PrimaryTabListResponsive };
@@ -1,4 +1,4 @@
1
- import { _ as __rest, a as __assign } from '../../tslib.es6-d595f357.js';
1
+ import { _ as __rest, a as __assign } from '../../tslib.es6-b50bf201.js';
2
2
  import React from 'react';
3
3
  import '@alfalab/core-components-keyboard-focusable/esm';
4
4
  import 'classnames';
@@ -6,18 +6,18 @@ import 'compute-scroll-into-view';
6
6
  import '../scrollable-container/Component.js';
7
7
  import '../../useTabs.js';
8
8
  import './Component.js';
9
- import '../../index.module-7be29ac4.js';
9
+ import '../../index.module-4bf6c045.js';
10
10
  import { PrimaryTabListDesktop } from './Component.desktop.js';
11
11
  import { useMedia } from '@alfalab/hooks';
12
12
  import { PrimaryTabListMobile } from './Component.mobile.js';
13
13
 
14
14
  var PrimaryTabListResponsive = function (_a) {
15
- var size = _a.size, _b = _a.defaultMatch, defaultMatch = _b === void 0 ? 'desktop' : _b, restProps = __rest(_a, ["size", "defaultMatch"]);
15
+ var size = _a.size, _b = _a.defaultMatch, defaultMatch = _b === void 0 ? 'desktop' : _b, fullWidthScroll = _a.fullWidthScroll, restProps = __rest(_a, ["size", "defaultMatch", "fullWidthScroll"]);
16
16
  var view = useMedia([
17
17
  ['mobile', '(max-width: 767px)'],
18
18
  ['desktop', '(min-width: 768px)'],
19
19
  ], defaultMatch)[0];
20
- return view === 'desktop' ? (React.createElement(PrimaryTabListDesktop, __assign({ size: size }, restProps))) : (React.createElement(PrimaryTabListMobile, __assign({}, restProps)));
20
+ return view === 'desktop' ? (React.createElement(PrimaryTabListDesktop, __assign({ size: size }, restProps))) : (React.createElement(PrimaryTabListMobile, __assign({ fullWidthScroll: fullWidthScroll }, restProps)));
21
21
  };
22
22
 
23
23
  export { PrimaryTabListResponsive };
@@ -1,4 +1,4 @@
1
- /* hash: uu6pi */
1
+ /* hash: t09rb */
2
2
  :root {
3
3
  --color-light-border-accent: #ef3124;
4
4
  --color-light-border-link: #007aff;
@@ -82,10 +82,12 @@
82
82
 
83
83
  /* size xl */
84
84
  }
85
- .tabs__component_1dx1o {
86
- position: relative
85
+ .tabs__component_astus {
86
+ position: relative;
87
+ display: inline-flex;
88
+ min-width: 100%
87
89
  }
88
- .tabs__component_1dx1o:before {
90
+ .tabs__component_astus:before {
89
91
  content: '';
90
92
  display: block;
91
93
  position: absolute;
@@ -94,11 +96,15 @@
94
96
  width: 100%;
95
97
  background-color: var(--primary-tablist-bottom-border-color);
96
98
  }
97
- .tabs__container_1dx1o {
99
+ .tabs__fullWidthScroll_astus {
100
+ min-width: calc(100% - 2 * var(--gap-m));
101
+ margin: 0 var(--gap-m);
102
+ }
103
+ .tabs__container_astus {
98
104
  position: relative;
99
- display: flex;
105
+ overflow: hidden;
100
106
  }
101
- .tabs__title_1dx1o {
107
+ .tabs__title_astus {
102
108
  display: flex;
103
109
  align-items: center;
104
110
  height: 100%;
@@ -116,22 +122,22 @@
116
122
  cursor: pointer;
117
123
  outline: none
118
124
  }
119
- .tabs__title_1dx1o:not(.tabs__disabled_1dx1o):hover {
125
+ .tabs__title_astus:not(.tabs__disabled_astus):hover {
120
126
  color: var(--primary-tablist-hover-color);
121
127
  }
122
- .tabs__focused_1dx1o {
128
+ .tabs__focused_astus {
123
129
  outline: 2px solid var(--focus-color);
124
130
  outline-offset: 2px;
125
131
  }
126
- .tabs__selected_1dx1o {
132
+ .tabs__selected_astus {
127
133
  cursor: default;
128
134
  color: var(--primary-tablist-selected-color);
129
135
  }
130
- .tabs__disabled_1dx1o {
136
+ .tabs__disabled_astus {
131
137
  cursor: var(--disabled-cursor);
132
138
  color: var(--primary-tablist-disabled-color);
133
139
  }
134
- .tabs__line_1dx1o {
140
+ .tabs__line_astus {
135
141
  position: absolute;
136
142
  height: 3px;
137
143
  bottom: 0;
@@ -140,46 +146,46 @@
140
146
  transition: transform 0.2s ease, width 0.2s ease;
141
147
  }
142
148
  /* sizes */
143
- .tabs__s_1dx1o .tabs__title_1dx1o, .tabs__xs_1dx1o .tabs__title_1dx1o, .tabs__xxs_1dx1o .tabs__title_1dx1o {
149
+ .tabs__s_astus .tabs__title_astus, .tabs__xs_astus .tabs__title_astus, .tabs__xxs_astus .tabs__title_astus {
144
150
  padding: var(--primary-tablist-s-padding);
145
151
  font-size: var(--primary-tablist-s-font-size);
146
152
  font-weight: var(--primary-tablist-s-font-weight);
147
153
  font-family: var(--primary-tablist-s-font-family);
148
154
  line-height: 24px;
149
155
  }
150
- .tabs__s_1dx1o .tabs__title_1dx1o + .tabs__title_1dx1o, .tabs__xs_1dx1o .tabs__title_1dx1o + .tabs__title_1dx1o, .tabs__xxs_1dx1o .tabs__title_1dx1o + .tabs__title_1dx1o {
156
+ .tabs__s_astus .tabs__title_astus + .tabs__title_astus, .tabs__xs_astus .tabs__title_astus + .tabs__title_astus, .tabs__xxs_astus .tabs__title_astus + .tabs__title_astus {
151
157
  margin-left: var(--primary-tablist-s-gaps);
152
158
  }
153
- .tabs__m_1dx1o .tabs__title_1dx1o {
159
+ .tabs__m_astus .tabs__title_astus {
154
160
  padding: var(--primary-tablist-m-padding);
155
161
  font-size: var(--primary-tablist-m-font-size);
156
162
  font-weight: var(--primary-tablist-m-font-weight);
157
163
  font-family: var(--primary-tablist-m-font-family);
158
164
  line-height: 24px;
159
165
  }
160
- .tabs__m_1dx1o .tabs__title_1dx1o + .tabs__title_1dx1o {
166
+ .tabs__m_astus .tabs__title_astus + .tabs__title_astus {
161
167
  margin-left: var(--primary-tablist-m-gaps);
162
168
  }
163
- .tabs__l_1dx1o .tabs__title_1dx1o {
169
+ .tabs__l_astus .tabs__title_astus {
164
170
  padding: var(--primary-tablist-l-padding);
165
171
  font-size: var(--primary-tablist-l-font-size);
166
172
  font-weight: var(--primary-tablist-l-font-weight);
167
173
  font-family: var(--primary-tablist-l-font-family);
168
174
  line-height: 24px;
169
175
  }
170
- .tabs__l_1dx1o .tabs__title_1dx1o + .tabs__title_1dx1o {
176
+ .tabs__l_astus .tabs__title_astus + .tabs__title_astus {
171
177
  margin-left: var(--primary-tablist-l-gaps);
172
178
  }
173
- .tabs__xl_1dx1o .tabs__title_1dx1o {
179
+ .tabs__xl_astus .tabs__title_astus {
174
180
  padding: var(--primary-tablist-xl-padding);
175
181
  font-size: var(--primary-tablist-xl-font-size);
176
182
  font-weight: var(--primary-tablist-xl-font-weight);
177
183
  font-family: var(--primary-tablist-xl-font-family);
178
184
  line-height: 32px;
179
185
  }
180
- .tabs__xl_1dx1o .tabs__title_1dx1o + .tabs__title_1dx1o {
186
+ .tabs__xl_astus .tabs__title_astus + .tabs__title_astus {
181
187
  margin-left: var(--primary-tablist-xl-gaps);
182
188
  }
183
- .tabs__rightAddons_1dx1o {
189
+ .tabs__rightAddons_astus {
184
190
  margin-left: var(--gap-xs);
185
191
  }