@alfalab/core-components-tabs 8.5.1 → 8.6.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 (197) hide show
  1. package/collapsible/index.js +0 -18
  2. package/components/primary-tablist/Component.collapsible.d.ts +1 -1
  3. package/components/primary-tablist/Component.collapsible.js +9 -14
  4. package/components/primary-tablist/Component.d.ts +1 -1
  5. package/components/primary-tablist/Component.desktop.js +1 -15
  6. package/components/primary-tablist/Component.js +5 -11
  7. package/components/primary-tablist/Component.mobile.d.ts +1 -1
  8. package/components/primary-tablist/Component.mobile.js +3 -21
  9. package/components/primary-tablist/Component.responsive.js +0 -16
  10. package/components/primary-tablist/index.css +288 -30
  11. package/components/primary-tablist/mobile.css +499 -33
  12. package/components/scroll-controls/Component.d.ts +1 -0
  13. package/components/scroll-controls/Component.js +7 -7
  14. package/components/scroll-controls/index.css +23 -26
  15. package/components/scroll-controls/index.js +0 -8
  16. package/components/scrollable-container/Component.d.ts +5 -1
  17. package/components/scrollable-container/Component.js +3 -9
  18. package/components/scrollable-container/index.css +6 -6
  19. package/components/scrollable-container/index.js +0 -10
  20. package/components/secondary-tablist/Component.desktop.js +1 -12
  21. package/components/secondary-tablist/Component.js +0 -8
  22. package/components/secondary-tablist/Component.mobile.js +2 -12
  23. package/components/secondary-tablist/Component.responsive.js +0 -15
  24. package/components/secondary-tablist/index.css +11 -11
  25. package/components/secondary-tablist/mobile.css +13 -13
  26. package/components/tab/Component.js +1 -1
  27. package/components/tab/index.css +3 -3
  28. package/components/tab/index.js +0 -2
  29. package/components/tabs/Component.collapsible.js +0 -14
  30. package/components/tabs/Component.d.ts +1 -1
  31. package/components/tabs/Component.desktop.js +0 -19
  32. package/components/tabs/Component.js +4 -3
  33. package/components/tabs/Component.mobile.js +0 -19
  34. package/components/tabs/Component.responsive.js +0 -25
  35. package/components/title/index.js +0 -3
  36. package/cssm/collapsible/index.js +0 -19
  37. package/cssm/components/primary-tablist/Component.collapsible.d.ts +1 -1
  38. package/cssm/components/primary-tablist/Component.collapsible.js +8 -13
  39. package/cssm/components/primary-tablist/Component.d.ts +1 -1
  40. package/cssm/components/primary-tablist/Component.desktop.js +0 -16
  41. package/cssm/components/primary-tablist/Component.js +5 -13
  42. package/cssm/components/primary-tablist/Component.mobile.d.ts +1 -1
  43. package/cssm/components/primary-tablist/Component.mobile.js +1 -21
  44. package/cssm/components/primary-tablist/Component.responsive.js +0 -19
  45. package/cssm/components/primary-tablist/index.module.css +259 -1
  46. package/cssm/components/primary-tablist/mobile.module.css +210 -0
  47. package/cssm/components/primary-tablist/text-styles.module.css +16 -0
  48. package/cssm/components/scroll-controls/Component.d.ts +1 -0
  49. package/cssm/components/scroll-controls/Component.js +6 -6
  50. package/cssm/components/scroll-controls/index.js +0 -9
  51. package/cssm/components/scroll-controls/index.module.css +12 -15
  52. package/cssm/components/scrollable-container/Component.d.ts +5 -1
  53. package/cssm/components/scrollable-container/Component.js +2 -9
  54. package/cssm/components/scrollable-container/index.js +0 -12
  55. package/cssm/components/secondary-tablist/Component.desktop.js +0 -13
  56. package/cssm/components/secondary-tablist/Component.js +0 -10
  57. package/cssm/components/secondary-tablist/Component.mobile.js +0 -12
  58. package/cssm/components/secondary-tablist/Component.responsive.js +0 -18
  59. package/cssm/components/tab/index.js +0 -3
  60. package/cssm/components/tabs/Component.collapsible.js +0 -14
  61. package/cssm/components/tabs/Component.d.ts +1 -1
  62. package/cssm/components/tabs/Component.desktop.js +0 -21
  63. package/cssm/components/tabs/Component.js +4 -3
  64. package/cssm/components/tabs/Component.mobile.js +0 -23
  65. package/cssm/components/tabs/Component.responsive.js +0 -29
  66. package/cssm/components/title/index.js +0 -3
  67. package/cssm/desktop/index.js +0 -25
  68. package/cssm/hooks/use-tablist-titles.d.ts +2 -1
  69. package/cssm/hooks/use-tablist-titles.js +0 -3
  70. package/cssm/hooks/use-tabs.d.ts +2 -1
  71. package/cssm/hooks/use-tabs.js +17 -6
  72. package/cssm/index.js +0 -33
  73. package/cssm/mobile/index.js +0 -27
  74. package/cssm/shared/index.js +0 -15
  75. package/cssm/typings.d.ts +11 -2
  76. package/desktop/index.js +0 -22
  77. package/esm/collapsible/index.js +0 -18
  78. package/esm/components/primary-tablist/Component.collapsible.d.ts +1 -1
  79. package/esm/components/primary-tablist/Component.collapsible.js +10 -15
  80. package/esm/components/primary-tablist/Component.d.ts +1 -1
  81. package/esm/components/primary-tablist/Component.desktop.js +1 -15
  82. package/esm/components/primary-tablist/Component.js +5 -11
  83. package/esm/components/primary-tablist/Component.mobile.d.ts +1 -1
  84. package/esm/components/primary-tablist/Component.mobile.js +4 -21
  85. package/esm/components/primary-tablist/Component.responsive.js +0 -16
  86. package/esm/components/primary-tablist/index.css +288 -30
  87. package/esm/components/primary-tablist/mobile.css +499 -33
  88. package/esm/components/scroll-controls/Component.d.ts +1 -0
  89. package/esm/components/scroll-controls/Component.js +7 -7
  90. package/esm/components/scroll-controls/index.css +23 -26
  91. package/esm/components/scroll-controls/index.js +0 -8
  92. package/esm/components/scrollable-container/Component.d.ts +5 -1
  93. package/esm/components/scrollable-container/Component.js +3 -9
  94. package/esm/components/scrollable-container/index.css +6 -6
  95. package/esm/components/scrollable-container/index.js +0 -10
  96. package/esm/components/secondary-tablist/Component.desktop.js +1 -12
  97. package/esm/components/secondary-tablist/Component.js +0 -8
  98. package/esm/components/secondary-tablist/Component.mobile.js +2 -12
  99. package/esm/components/secondary-tablist/Component.responsive.js +0 -15
  100. package/esm/components/secondary-tablist/index.css +11 -11
  101. package/esm/components/secondary-tablist/mobile.css +13 -13
  102. package/esm/components/tab/Component.js +1 -1
  103. package/esm/components/tab/index.css +3 -3
  104. package/esm/components/tab/index.js +0 -2
  105. package/esm/components/tabs/Component.collapsible.js +0 -14
  106. package/esm/components/tabs/Component.d.ts +1 -1
  107. package/esm/components/tabs/Component.desktop.js +0 -19
  108. package/esm/components/tabs/Component.js +4 -3
  109. package/esm/components/tabs/Component.mobile.js +0 -19
  110. package/esm/components/tabs/Component.responsive.js +0 -25
  111. package/esm/components/title/index.js +0 -3
  112. package/esm/desktop/index.js +0 -22
  113. package/esm/hooks/use-tablist-titles.d.ts +2 -1
  114. package/esm/hooks/use-tablist-titles.js +0 -3
  115. package/esm/hooks/use-tabs.d.ts +2 -1
  116. package/esm/hooks/use-tabs.js +13 -6
  117. package/esm/index.js +0 -28
  118. package/esm/index.module-09631eda.js +4 -0
  119. package/esm/index.module-b24b51c6.js +4 -0
  120. package/esm/mobile/index.js +0 -22
  121. package/esm/shared/index.js +0 -13
  122. package/esm/typings.d.ts +11 -2
  123. package/hooks/use-tablist-titles.d.ts +2 -1
  124. package/hooks/use-tablist-titles.js +0 -3
  125. package/hooks/use-tabs.d.ts +2 -1
  126. package/hooks/use-tabs.js +17 -6
  127. package/index.js +0 -28
  128. package/index.module-8583a636.js +6 -0
  129. package/index.module-fe7d33d0.js +6 -0
  130. package/mobile/index.js +0 -22
  131. package/modern/collapsible/index.js +0 -17
  132. package/modern/components/primary-tablist/Component.collapsible.d.ts +1 -1
  133. package/modern/components/primary-tablist/Component.collapsible.js +8 -14
  134. package/modern/components/primary-tablist/Component.d.ts +1 -1
  135. package/modern/components/primary-tablist/Component.desktop.js +1 -15
  136. package/modern/components/primary-tablist/Component.js +5 -11
  137. package/modern/components/primary-tablist/Component.mobile.d.ts +1 -1
  138. package/modern/components/primary-tablist/Component.mobile.js +3 -17
  139. package/modern/components/primary-tablist/Component.responsive.js +0 -16
  140. package/modern/components/primary-tablist/index.css +288 -30
  141. package/modern/components/primary-tablist/mobile.css +499 -33
  142. package/modern/components/scroll-controls/Component.d.ts +1 -0
  143. package/modern/components/scroll-controls/Component.js +7 -7
  144. package/modern/components/scroll-controls/index.css +23 -26
  145. package/modern/components/scroll-controls/index.js +0 -7
  146. package/modern/components/scrollable-container/Component.d.ts +5 -1
  147. package/modern/components/scrollable-container/Component.js +3 -8
  148. package/modern/components/scrollable-container/index.css +6 -6
  149. package/modern/components/scrollable-container/index.js +0 -9
  150. package/modern/components/secondary-tablist/Component.desktop.js +1 -12
  151. package/modern/components/secondary-tablist/Component.js +0 -8
  152. package/modern/components/secondary-tablist/Component.mobile.js +2 -12
  153. package/modern/components/secondary-tablist/Component.responsive.js +0 -15
  154. package/modern/components/secondary-tablist/index.css +11 -11
  155. package/modern/components/secondary-tablist/mobile.css +13 -13
  156. package/modern/components/tab/Component.js +1 -1
  157. package/modern/components/tab/index.css +3 -3
  158. package/modern/components/tab/index.js +0 -2
  159. package/modern/components/tabs/Component.collapsible.js +0 -14
  160. package/modern/components/tabs/Component.d.ts +1 -1
  161. package/modern/components/tabs/Component.desktop.js +0 -19
  162. package/modern/components/tabs/Component.js +4 -3
  163. package/modern/components/tabs/Component.mobile.js +0 -19
  164. package/modern/components/tabs/Component.responsive.js +0 -25
  165. package/modern/components/title/index.js +0 -2
  166. package/modern/desktop/index.js +0 -21
  167. package/modern/hooks/use-tablist-titles.d.ts +2 -1
  168. package/modern/hooks/use-tablist-titles.js +0 -3
  169. package/modern/hooks/use-tabs.d.ts +2 -1
  170. package/modern/hooks/use-tabs.js +13 -6
  171. package/modern/index.js +0 -27
  172. package/modern/index.module-819ff0ab.js +4 -0
  173. package/modern/index.module-ee14bf5a.js +4 -0
  174. package/modern/mobile/index.js +0 -21
  175. package/modern/shared/index.js +0 -12
  176. package/modern/typings.d.ts +11 -2
  177. package/package.json +5 -5
  178. package/shared/index.js +0 -13
  179. package/src/components/primary-tablist/Component.collapsible.tsx +34 -15
  180. package/src/components/primary-tablist/Component.mobile.tsx +2 -8
  181. package/src/components/primary-tablist/Component.tsx +11 -4
  182. package/src/components/primary-tablist/index.module.css +6 -0
  183. package/src/components/primary-tablist/mobile.module.css +4 -0
  184. package/src/components/primary-tablist/text-styles.module.css +228 -0
  185. package/src/components/scroll-controls/Component.tsx +15 -8
  186. package/src/components/scroll-controls/index.module.css +12 -19
  187. package/src/components/scrollable-container/Component.tsx +7 -0
  188. package/src/components/tabs/Component.tsx +4 -0
  189. package/src/hooks/use-tabs.tsx +23 -6
  190. package/src/typings.ts +32 -1
  191. package/typings.d.ts +11 -2
  192. package/esm/index.module-aa0c1143.js +0 -4
  193. package/esm/index.module-d07623e2.js +0 -4
  194. package/index.module-abadb192.js +0 -6
  195. package/index.module-b293cf9b.js +0 -6
  196. package/modern/index.module-50acb6fd.js +0 -4
  197. package/modern/index.module-b97c5648.js +0 -4
@@ -13,6 +13,7 @@ declare const useTablistTitles: ({ titles, selectedId, collapsedTabsIds, breakpo
13
13
  hidden?: boolean | undefined;
14
14
  toggleClassName?: string | undefined;
15
15
  dataTestId?: string | undefined;
16
+ toggleRef?: import("react").Ref<HTMLDivElement> | undefined;
16
17
  }[];
17
18
  selectedTab: HTMLButtonElement | null;
18
19
  focusedTab: HTMLButtonElement | null;
@@ -23,7 +24,7 @@ declare const useTablistTitles: ({ titles, selectedId, collapsedTabsIds, breakpo
23
24
  selected: boolean;
24
25
  'data-test-id': string | undefined;
25
26
  disabled: boolean | undefined;
26
- ref: (node: HTMLButtonElement) => void;
27
+ ref: (instance: HTMLElement | null) => void;
27
28
  onKeyDown: (event: import("react").KeyboardEvent<HTMLButtonElement>) => void;
28
29
  onClick: (event?: import("react").MouseEvent<Element, MouseEvent> | undefined) => void;
29
30
  };
@@ -2,9 +2,6 @@ import { useMemo } from 'react';
2
2
  import { useMatchMedia } from '@alfalab/core-components-mq/modern';
3
3
  import { useCollapsibleElements } from './use-collapsible-elements.js';
4
4
  import { useTabs } from './use-tabs.js';
5
- import '@juggle/resize-observer';
6
- import '@alfalab/hooks';
7
- import '@alfalab/core-components-shared/modern';
8
5
 
9
6
  const useTablistTitles = ({ titles = [], selectedId, collapsedTabsIds, breakpoint, onChange, defaultMatchMediaValue, }) => {
10
7
  const { containerRef, addonRef, idsCollapsedElements } = useCollapsibleElements('[role=tab]', [titles, collapsedTabsIds]);
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { KeyboardEvent, MouseEvent, MutableRefObject } from 'react';
2
3
  import { UseTabsProps } from "../typings";
3
4
  declare function useTabs({ titles, selectedId, onChange }: UseTabsProps): {
@@ -8,7 +9,7 @@ declare function useTabs({ titles, selectedId, onChange }: UseTabsProps): {
8
9
  selected: boolean;
9
10
  'data-test-id': string | undefined;
10
11
  disabled: boolean | undefined;
11
- ref: (node: HTMLButtonElement) => void;
12
+ ref: (instance: HTMLElement | null) => void;
12
13
  onKeyDown: (event: KeyboardEvent<HTMLButtonElement>) => void;
13
14
  onClick: (event?: MouseEvent) => void;
14
15
  };
@@ -1,4 +1,5 @@
1
1
  import { useState, useRef, useCallback } from 'react';
2
+ import mergeRefs from 'react-merge-refs';
2
3
  import { getDataTestId } from '@alfalab/core-components-shared/modern';
3
4
 
4
5
  function useTabs({ titles = [], selectedId, onChange }) {
@@ -69,6 +70,17 @@ function useTabs({ titles = [], selectedId, onChange }) {
69
70
  const getTabListItemProps = (index, outerRef) => {
70
71
  const item = titles[index];
71
72
  const itemSelected = item.id === selectedId;
73
+ const refs = [
74
+ (node) => {
75
+ // eslint-disable-next-line no-param-reassign
76
+ if (outerRef)
77
+ outerRef.current = node;
78
+ handleItemRef(node, item, index);
79
+ },
80
+ ];
81
+ if (item.toggleRef) {
82
+ refs.push(item.toggleRef);
83
+ }
72
84
  return {
73
85
  role: 'tab',
74
86
  tabIndex: itemSelected ? 0 : -1,
@@ -76,12 +88,7 @@ function useTabs({ titles = [], selectedId, onChange }) {
76
88
  selected: itemSelected,
77
89
  'data-test-id': getDataTestId(item.dataTestId, 'toggle'),
78
90
  disabled: item.disabled,
79
- ref: (node) => {
80
- // eslint-disable-next-line no-param-reassign
81
- if (outerRef)
82
- outerRef.current = node;
83
- handleItemRef(node, item, index);
84
- },
91
+ ref: mergeRefs(refs),
85
92
  onKeyDown: handleKeyDown,
86
93
  onClick: (event) => handleItemClick(event, item),
87
94
  };
package/modern/index.js CHANGED
@@ -2,30 +2,3 @@ export { PrimaryTabListResponsive } from './components/primary-tablist/Component
2
2
  export { SecondaryTabListResponsive } from './components/secondary-tablist/Component.responsive.js';
3
3
  export { Tab } from './components/tab/Component.js';
4
4
  export { TabsResponsive as Tabs } from './components/tabs/Component.responsive.js';
5
- import 'react';
6
- import '@alfalab/core-components-mq/modern';
7
- import './components/primary-tablist/Component.desktop.js';
8
- import './components/primary-tablist/Component.js';
9
- import '@juggle/resize-observer';
10
- import 'classnames';
11
- import '@alfalab/core-components-keyboard-focusable/modern';
12
- import '@alfalab/core-components-shared/modern';
13
- import './hooks/use-tabs.js';
14
- import './components/scrollable-container/Component.js';
15
- import 'compute-scroll-into-view';
16
- import './components/scroll-controls/Component.js';
17
- import 'lodash.debounce';
18
- import '@alfalab/core-components-icon-button/modern';
19
- import '@alfalab/icons-glyph/ChevronLeftMIcon';
20
- import '@alfalab/icons-glyph/ChevronRightMIcon';
21
- import './components/scroll-controls/utils.js';
22
- import './components/title/Component.js';
23
- import './index.module-b97c5648.js';
24
- import './components/primary-tablist/Component.mobile.js';
25
- import './components/secondary-tablist/Component.desktop.js';
26
- import '@alfalab/core-components-tag/modern/desktop';
27
- import './components/secondary-tablist/Component.js';
28
- import './index.module-50acb6fd.js';
29
- import './components/secondary-tablist/Component.mobile.js';
30
- import '@alfalab/core-components-tag/modern/mobile';
31
- import './components/tabs/Component.js';
@@ -0,0 +1,4 @@
1
+ const commonStyles = {"component":"tabs__component_12vn9","fullWidthScroll":"tabs__fullWidthScroll_12vn9","container":"tabs__container_12vn9","title":"tabs__title_12vn9","xxs":"tabs__xxs_12vn9","xs":"tabs__xs_12vn9","s":"tabs__s_12vn9","m":"tabs__m_12vn9","l":"tabs__l_12vn9","xl":"tabs__xl_12vn9"};
2
+ require('./components/secondary-tablist/index.css')
3
+
4
+ export { commonStyles as c };
@@ -0,0 +1,4 @@
1
+ const styles = {"component":"tabs__component_ravim","desktop":"tabs__desktop_ravim","paragraph-primary-large":"tabs__paragraph-primary-large_ravim","title":"tabs__title_ravim","paragraph-primary-medium":"tabs__paragraph-primary-medium_ravim","paragraph-primary-small":"tabs__paragraph-primary-small_ravim","action-primary-large":"tabs__action-primary-large_ravim","action-primary-medium":"tabs__action-primary-medium_ravim","action-primary-small":"tabs__action-primary-small_ravim","accent-primary-large":"tabs__accent-primary-large_ravim","accent-primary-medium":"tabs__accent-primary-medium_ravim","accent-primary-small":"tabs__accent-primary-small_ravim","pickerWrapper":"tabs__pickerWrapper_ravim","option":"tabs__option_ravim","scrollControls":"tabs__scrollControls_ravim","headline-system-xlarge":"tabs__headline-system-xlarge_ravim","headline-system-large":"tabs__headline-system-large_ravim","headline-system-medium":"tabs__headline-system-medium_ravim","headline-system-small":"tabs__headline-system-small_ravim","headline-system-xsmall":"tabs__headline-system-xsmall_ravim","headline-xlarge":"tabs__headline-xlarge_ravim","headline-large":"tabs__headline-large_ravim","headline-medium":"tabs__headline-medium_ravim","headline-small":"tabs__headline-small_ravim","headline-xsmall":"tabs__headline-xsmall_ravim","fullWidthScroll":"tabs__fullWidthScroll_ravim","container":"tabs__container_ravim","disabled":"tabs__disabled_ravim","focused":"tabs__focused_ravim","collapsed":"tabs__collapsed_ravim","selected":"tabs__selected_ravim","line":"tabs__line_ravim","s":"tabs__s_ravim","xs":"tabs__xs_ravim","xxs":"tabs__xxs_ravim","m":"tabs__m_ravim","l":"tabs__l_ravim","xl":"tabs__xl_ravim","rightAddons":"tabs__rightAddons_ravim"};
2
+ require('./components/primary-tablist/index.css')
3
+
4
+ export { styles as s };
@@ -2,24 +2,3 @@ export { PrimaryTabListMobile } from '../components/primary-tablist/Component.mo
2
2
  export { SecondaryTabListMobile } from '../components/secondary-tablist/Component.mobile.js';
3
3
  export { Tab } from '../components/tab/Component.js';
4
4
  export { TabsMobile } from '../components/tabs/Component.mobile.js';
5
- import 'react';
6
- import 'classnames';
7
- import '../components/primary-tablist/Component.js';
8
- import '@juggle/resize-observer';
9
- import '@alfalab/core-components-keyboard-focusable/modern';
10
- import '@alfalab/core-components-shared/modern';
11
- import '../hooks/use-tabs.js';
12
- import '../components/scrollable-container/Component.js';
13
- import 'compute-scroll-into-view';
14
- import '../components/scroll-controls/Component.js';
15
- import 'lodash.debounce';
16
- import '@alfalab/core-components-icon-button/modern';
17
- import '@alfalab/icons-glyph/ChevronLeftMIcon';
18
- import '@alfalab/icons-glyph/ChevronRightMIcon';
19
- import '../components/scroll-controls/utils.js';
20
- import '../components/title/Component.js';
21
- import '../index.module-b97c5648.js';
22
- import '@alfalab/core-components-tag/modern/mobile';
23
- import '../components/secondary-tablist/Component.js';
24
- import '../index.module-50acb6fd.js';
25
- import '../components/tabs/Component.js';
@@ -1,15 +1,3 @@
1
1
  export { ScrollableContainer } from '../components/scrollable-container/Component.js';
2
2
  export { useTabs } from '../hooks/use-tabs.js';
3
3
  export { useCollapsibleElements } from '../hooks/use-collapsible-elements.js';
4
- import 'react';
5
- import 'classnames';
6
- import 'compute-scroll-into-view';
7
- import '../components/scroll-controls/Component.js';
8
- import 'lodash.debounce';
9
- import '@alfalab/core-components-icon-button/modern';
10
- import '@alfalab/icons-glyph/ChevronLeftMIcon';
11
- import '@alfalab/icons-glyph/ChevronRightMIcon';
12
- import '../components/scroll-controls/utils.js';
13
- import '@alfalab/core-components-shared/modern';
14
- import '@juggle/resize-observer';
15
- import '@alfalab/hooks';
@@ -1,4 +1,4 @@
1
- import { FC, MouseEvent, ReactElement, ReactNode } from 'react';
1
+ import { FC, MouseEvent, ReactElement, ReactNode, Ref } from 'react';
2
2
  import { TagProps } from "@alfalab/core-components-tag";
3
3
  type SelectedId = string | number;
4
4
  type TabsProps = {
@@ -22,6 +22,10 @@ type TabsProps = {
22
22
  * Внешний вид заголовков табов
23
23
  */
24
24
  view?: 'primary' | 'secondary';
25
+ /**
26
+ * Стиль текста. Имеет приоритет над size. Работает только в primary табах.
27
+ */
28
+ textStyle?: 'paragraph-primary-large' | 'paragraph-primary-medium' | 'paragraph-primary-small' | 'action-primary-large' | 'action-primary-medium' | 'action-primary-small' | 'accent-primary-large' | 'accent-primary-medium' | 'accent-primary-small' | 'headline-system-xlarge' | 'headline-system-large' | 'headline-system-medium' | 'headline-system-small' | 'headline-system-xsmall' | 'headline-xlarge' | 'headline-large' | 'headline-medium' | 'headline-small' | 'headline-xsmall';
25
29
  /**
26
30
  * Высота заголовков табов
27
31
  */
@@ -119,6 +123,10 @@ type TabProps = {
119
123
  * Идентификатор для систем автоматизированного тестирования
120
124
  */
121
125
  dataTestId?: string;
126
+ /**
127
+ * Реф для кнопки переключения таба
128
+ */
129
+ toggleRef?: Ref<HTMLDivElement>;
122
130
  };
123
131
  type TabListTitle = {
124
132
  title: string;
@@ -130,8 +138,9 @@ type TabListTitle = {
130
138
  selected?: boolean;
131
139
  collapsed?: boolean;
132
140
  dataTestId?: string;
141
+ toggleRef?: Ref<HTMLDivElement>;
133
142
  };
134
- type TabListProps = Pick<TabsProps, 'className' | 'containerClassName' | 'size' | 'defaultMatchMediaValue' | 'selectedId' | 'scrollable' | 'collapsedTabsIds' | 'onChange' | 'dataTestId' | 'fullWidthScroll' | 'tagShape' | 'tagView'> & {
143
+ type TabListProps = Pick<TabsProps, 'className' | 'containerClassName' | 'size' | 'defaultMatchMediaValue' | 'selectedId' | 'scrollable' | 'collapsedTabsIds' | 'onChange' | 'dataTestId' | 'fullWidthScroll' | 'tagShape' | 'tagView' | 'textStyle'> & {
135
144
  /**
136
145
  * Заголовки табов
137
146
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-tabs",
3
- "version": "8.5.1",
3
+ "version": "8.6.0",
4
4
  "description": "Tabs components",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -15,13 +15,13 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@alfalab/core-components-keyboard-focusable": "^4.1.0",
18
- "@alfalab/core-components-tag": "^8.0.1",
19
- "@alfalab/core-components-picker-button": "^11.5.1",
20
- "@alfalab/core-components-badge": "^5.5.0",
18
+ "@alfalab/core-components-tag": "^8.1.0",
19
+ "@alfalab/core-components-picker-button": "^11.5.3",
20
+ "@alfalab/core-components-badge": "^5.5.1",
21
21
  "@alfalab/core-components-mq": "^4.2.0",
22
22
  "@alfalab/hooks": "^1.13.0",
23
23
  "@alfalab/core-components-shared": "^0.9.1",
24
- "@alfalab/core-components-icon-button": "^6.5.1",
24
+ "@alfalab/core-components-icon-button": "^6.5.2",
25
25
  "@alfalab/icons-glyph": "^2.139.0",
26
26
  "classnames": "^2.3.1",
27
27
  "compute-scroll-into-view": "^3.1.0",
package/shared/index.js CHANGED
@@ -5,19 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var components_scrollableContainer_Component = require('../components/scrollable-container/Component.js');
6
6
  var hooks_useTabs = require('../hooks/use-tabs.js');
7
7
  var hooks_useCollapsibleElements = require('../hooks/use-collapsible-elements.js');
8
- require('react');
9
- require('classnames');
10
- require('compute-scroll-into-view');
11
- require('../components/scroll-controls/Component.js');
12
- require('tslib');
13
- require('lodash.debounce');
14
- require('@alfalab/core-components-icon-button');
15
- require('@alfalab/icons-glyph/ChevronLeftMIcon');
16
- require('@alfalab/icons-glyph/ChevronRightMIcon');
17
- require('../components/scroll-controls/utils.js');
18
- require('@alfalab/core-components-shared');
19
- require('@juggle/resize-observer');
20
- require('@alfalab/hooks');
21
8
 
22
9
 
23
10
 
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useMemo, useRef } from 'react';
1
+ import React, { Ref, useEffect, useMemo, useRef } from 'react';
2
2
  import cn from 'classnames';
3
3
 
4
4
  import { Badge } from '@alfalab/core-components-badge';
@@ -27,6 +27,7 @@ export const CollapsiblePrimaryTabList = ({
27
27
  dataTestId,
28
28
  breakpoint = 1024,
29
29
  defaultMatchMediaValue,
30
+ textStyle,
30
31
  }: TabListProps) => {
31
32
  const lineRef = useRef<HTMLDivElement>(null);
32
33
 
@@ -49,17 +50,27 @@ export const CollapsiblePrimaryTabList = ({
49
50
 
50
51
  const collapsedOptions = useMemo(
51
52
  () =>
52
- tablistTitles.reduce<PickerButtonDesktopProps['options']>((options, title) => {
53
- if (title.collapsed) {
54
- options.push({
55
- key: title.title,
56
- value: title.id,
57
- content: <Title {...title} styles={styles} isOption={true} />,
58
- });
59
- }
53
+ tablistTitles.reduce<PickerButtonDesktopProps['options']>(
54
+ (options, { toggleRef, ...title }) => {
55
+ if (title.collapsed) {
56
+ options.push({
57
+ key: title.title,
58
+ value: title.id,
59
+ content: (
60
+ <Title
61
+ {...title}
62
+ ref={toggleRef as Ref<HTMLButtonElement>}
63
+ styles={styles}
64
+ isOption={true}
65
+ />
66
+ ),
67
+ });
68
+ }
60
69
 
61
- return options;
62
- }, []),
70
+ return options;
71
+ },
72
+ [],
73
+ ),
63
74
  [tablistTitles],
64
75
  );
65
76
 
@@ -82,11 +93,11 @@ export const CollapsiblePrimaryTabList = ({
82
93
  <div
83
94
  role='tablist'
84
95
  data-test-id={dataTestId}
85
- className={cn(styles.component, className, size && styles[size], {
96
+ className={cn(styles.component, className, !textStyle && size && styles[size], {
86
97
  [styles.fullWidthScroll]: fullWidthScroll,
87
98
  })}
88
99
  >
89
- {tablistTitles.map(({ dataTestId: _, ...restTitleProps }, index) => (
100
+ {tablistTitles.map(({ dataTestId: _, toggleRef: __, ...restTitleProps }, index) => (
90
101
  <KeyboardFocusable key={restTitleProps.id}>
91
102
  {(ref, focused) => (
92
103
  <Title
@@ -103,7 +114,7 @@ export const CollapsiblePrimaryTabList = ({
103
114
  <span ref={addonRef} role='menu' className={styles.pickerWrapper}>
104
115
  <PickerButtonDesktop
105
116
  fieldClassName={styles.title}
106
- optionClassName={cn(styles.pickerOption, size && styles[size])}
117
+ optionClassName={cn(size && styles[size])}
107
118
  options={collapsedOptions}
108
119
  onChange={handleOptionsChange}
109
120
  rightAddons={
@@ -124,7 +135,15 @@ export const CollapsiblePrimaryTabList = ({
124
135
  );
125
136
 
126
137
  return (
127
- <div ref={containerRef} className={cn(styles.container, containerClassName)}>
138
+ <div
139
+ ref={containerRef}
140
+ className={cn(
141
+ styles.container,
142
+ textStyle && styles[textStyle],
143
+ styles.desktop,
144
+ containerClassName,
145
+ )}
146
+ >
128
147
  {renderContent()}
129
148
  </div>
130
149
  );
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import cn from 'classnames';
3
2
 
4
3
  import { TabListProps } from '../../typings';
5
4
 
@@ -15,11 +14,6 @@ const styles = {
15
14
 
16
15
  export type PrimaryTabListMobileProps = Omit<TabListProps, 'size' | 'collapsedTabsIds'>;
17
16
 
18
- export const PrimaryTabListMobile = ({ className, ...restProps }: PrimaryTabListMobileProps) => (
19
- <PrimaryTabList
20
- {...restProps}
21
- styles={styles}
22
- className={cn(className, styles.mobile)}
23
- platform='mobile'
24
- />
17
+ export const PrimaryTabListMobile = (props: PrimaryTabListMobileProps) => (
18
+ <PrimaryTabList {...props} styles={styles} platform='mobile' />
25
19
  );
@@ -22,6 +22,7 @@ export const PrimaryTabList = ({
22
22
  onChange,
23
23
  dataTestId,
24
24
  platform,
25
+ textStyle,
25
26
  }: TabListProps & Styles & PlatformProps) => {
26
27
  const lineRef = useRef<HTMLDivElement>(null);
27
28
 
@@ -55,11 +56,11 @@ export const PrimaryTabList = ({
55
56
  <div
56
57
  role='tablist'
57
58
  data-test-id={dataTestId}
58
- className={cn(styles.component, className, size && styles[size], {
59
+ className={cn(styles.component, className, !textStyle && size && styles[size], {
59
60
  [styles.fullWidthScroll]: fullWidthScroll,
60
61
  })}
61
62
  >
62
- {titles.map(({ dataTestId: _, ...restTitleProps }, index) => (
63
+ {titles.map(({ dataTestId: _, toggleRef: __, ...restTitleProps }, index) => (
63
64
  <KeyboardFocusable key={restTitleProps.id}>
64
65
  {(ref, focused) => (
65
66
  <Title
@@ -76,18 +77,24 @@ export const PrimaryTabList = ({
76
77
  </div>
77
78
  );
78
79
 
80
+ const wrapperClassName = cn(textStyle && styles[textStyle], styles[platform]);
81
+
79
82
  return scrollable ? (
80
83
  <ScrollableContainer
84
+ containerWrapperClassName={wrapperClassName}
81
85
  activeChild={focusedTab || selectedTab}
82
86
  containerClassName={containerClassName}
87
+ scrollControlsClassName={cn(textStyle && styles.scrollControls)}
83
88
  fullWidthScroll={fullWidthScroll}
84
89
  view='primary'
85
- size={size}
90
+ size={textStyle ? undefined : size}
86
91
  platform={platform}
87
92
  >
88
93
  {renderContent()}
89
94
  </ScrollableContainer>
90
95
  ) : (
91
- <div className={cn(styles.container, containerClassName)}>{renderContent()}</div>
96
+ <div className={cn(styles.container, wrapperClassName, containerClassName)}>
97
+ {renderContent()}
98
+ </div>
92
99
  );
93
100
  };
@@ -1,5 +1,6 @@
1
1
  @import '@alfalab/core-components-themes/src/default.css';
2
2
  @import '../../vars.css';
3
+ @import './text-styles.module.css';
3
4
 
4
5
  .component {
5
6
  position: relative;
@@ -17,6 +18,11 @@
17
18
  }
18
19
  }
19
20
 
21
+ .desktop {
22
+ @mixin text-style;
23
+ @mixin text-style-desktop;
24
+ }
25
+
20
26
  .fullWidthScroll {
21
27
  min-width: calc(100% - 2 * var(--gap-m));
22
28
  margin: 0 var(--gap-m);
@@ -1,5 +1,6 @@
1
1
  @import '@alfalab/core-components-themes/src/default.css';
2
2
  @import '../../vars.css';
3
+ @import './text-styles.module.css';
3
4
 
4
5
  .title {
5
6
  composes: title from 'index.module.css';
@@ -17,4 +18,7 @@
17
18
  margin-left: var(--primary-tablist-mobile-gaps);
18
19
  }
19
20
  }
21
+
22
+ @mixin text-style;
23
+ @mixin text-style-mobile;
20
24
  }