@salutejs/plasma-new-hope 0.268.1-dev.0 → 0.268.2-canary.1780.13373736245.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. package/cjs/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js +10 -4
  2. package/cjs/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js.map +1 -1
  3. package/cjs/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js +21 -28
  4. package/cjs/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js.map +1 -1
  5. package/cjs/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js +10 -4
  6. package/cjs/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js.map +1 -1
  7. package/cjs/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js +21 -28
  8. package/cjs/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js.map +1 -1
  9. package/cjs/components/Tabs/utils/index.js +26 -0
  10. package/cjs/components/Tabs/utils/index.js.map +1 -0
  11. package/emotion/cjs/components/Tabs/Tabs.template-doc.mdx +7 -2
  12. package/emotion/cjs/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js +10 -4
  13. package/emotion/cjs/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js +11 -18
  14. package/emotion/cjs/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js +10 -4
  15. package/emotion/cjs/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js +11 -18
  16. package/emotion/cjs/components/Tabs/utils/index.js +24 -0
  17. package/emotion/es/components/Tabs/Tabs.template-doc.mdx +7 -2
  18. package/emotion/es/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js +11 -5
  19. package/emotion/es/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js +12 -19
  20. package/emotion/es/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js +11 -5
  21. package/emotion/es/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js +12 -19
  22. package/emotion/es/components/Tabs/utils/index.js +18 -0
  23. package/es/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js +11 -5
  24. package/es/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js.map +1 -1
  25. package/es/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js +12 -19
  26. package/es/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js.map +1 -1
  27. package/es/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js +11 -5
  28. package/es/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js.map +1 -1
  29. package/es/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js +12 -19
  30. package/es/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js.map +1 -1
  31. package/es/components/Tabs/utils/index.js +21 -0
  32. package/es/components/Tabs/utils/index.js.map +1 -0
  33. package/package.json +2 -2
  34. package/styled-components/cjs/components/Tabs/Tabs.template-doc.mdx +7 -2
  35. package/styled-components/cjs/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js +10 -4
  36. package/styled-components/cjs/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js +11 -18
  37. package/styled-components/cjs/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js +10 -4
  38. package/styled-components/cjs/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js +11 -18
  39. package/styled-components/cjs/components/Tabs/utils/index.js +24 -0
  40. package/styled-components/es/components/Tabs/Tabs.template-doc.mdx +7 -2
  41. package/styled-components/es/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.js +11 -5
  42. package/styled-components/es/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.js +12 -19
  43. package/styled-components/es/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.js +11 -5
  44. package/styled-components/es/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.js +12 -19
  45. package/styled-components/es/components/Tabs/utils/index.js +18 -0
  46. package/types/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.d.ts.map +1 -1
  47. package/types/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.d.ts.map +1 -1
  48. package/types/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.d.ts.map +1 -1
  49. package/types/components/Tabs/ui/vertical/VerticalTabs/VerticalTabs.d.ts.map +1 -1
  50. package/types/components/Tabs/utils/index.d.ts +4 -0
  51. package/types/components/Tabs/utils/index.d.ts.map +1 -0
@@ -63,6 +63,16 @@ var horizontalTabItemRoot = function horizontalTabItemRoot(Root) {
63
63
  return refs.unregister(innerRef);
64
64
  };
65
65
  }, [refs]);
66
+ React.useLayoutEffect(function () {
67
+ var _innerRef$current;
68
+ if (!selected) {
69
+ return;
70
+ }
71
+ (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 || _innerRef$current.scrollIntoView({
72
+ block: 'nearest',
73
+ inline: 'nearest'
74
+ });
75
+ }, [selected]);
66
76
  var onItemFocus = React.useCallback(function (event) {
67
77
  if (disabled) {
68
78
  return;
@@ -88,10 +98,6 @@ var horizontalTabItemRoot = function horizontalTabItemRoot(Root) {
88
98
  refs.setCurrent(focusIndex);
89
99
  }, [refs, innerRef, onIndexChange, disabled]);
90
100
  var handleClick = function handleClick(event) {
91
- event.currentTarget.scrollIntoView({
92
- block: 'nearest',
93
- inline: 'nearest'
94
- });
95
101
  if (!onClick) {
96
102
  return;
97
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalTabItem.js","sources":["../../../../../../src/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.tsx"],"sourcesContent":["import React, { forwardRef, useRef, useContext, useEffect, useCallback } from 'react';\nimport { useForkRef } from '@salutejs/plasma-core';\n\nimport { RootProps } from '../../../../../engines';\nimport { classes } from '../../../tokens';\nimport { cx } from '../../../../../utils';\nimport { TabsContext } from '../../../TabsContext';\nimport { HorizontalTabItemProps } from '../../../TabItem.types';\n\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as pilledCSS } from './variations/_pilled/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\nimport { LeftContent, RightContent, StyledContent, TabItemValue, base } from './HorizontalTabItem.styles';\n\nexport const horizontalTabItemRoot = (Root: RootProps<HTMLDivElement, HorizontalTabItemProps>) =>\n forwardRef<HTMLDivElement, HorizontalTabItemProps>((props, outerRef) => {\n const {\n size,\n view,\n isActive,\n selected,\n disabled = false,\n pilled = false,\n children,\n value,\n contentLeft,\n contentRight,\n animated = true,\n onIndexChange,\n itemIndex,\n tabIndex,\n className,\n onClick,\n maxItemWidth: maxWidth = 'auto',\n ...rest\n } = props;\n\n const innerRef = useRef<HTMLDivElement>(null);\n const ref = useForkRef(outerRef, innerRef);\n const refs = useContext(TabsContext);\n\n const role = 'tab';\n\n const pilledAttr = view !== 'clear' && pilled;\n const animatedClass = animated ? classes.tabItemAnimated : undefined;\n const pilledClass = pilledAttr ? classes.tabsPilled : undefined;\n const selectedClass = isActive || selected ? classes.selectedTabsItem : undefined;\n const truncateClass = maxWidth !== 'auto' ? classes.tabsTruncate : undefined;\n\n const hasKeyNavigation = itemIndex !== undefined && onIndexChange !== undefined;\n const navigationTabIndex = !disabled && refs?.current === itemIndex ? 0 : -1;\n\n useEffect(() => {\n if (!refs) {\n return;\n }\n\n refs.register(innerRef);\n\n return () => refs.unregister(innerRef);\n }, [refs]);\n\n const onItemFocus = useCallback<React.FocusEventHandler>(\n (event) => {\n if (disabled) {\n return;\n }\n\n if (!hasKeyNavigation && innerRef?.current) {\n innerRef.current.scrollTo({\n top: 0,\n left: innerRef.current.offsetLeft,\n behavior: 'smooth',\n });\n\n return;\n }\n\n if (!refs) {\n return;\n }\n\n const focusIndex = refs.items.findIndex((itemRef) => itemRef.current === event.target);\n\n if (focusIndex === refs.current) {\n return;\n }\n\n onIndexChange?.(focusIndex);\n refs.setCurrent(focusIndex);\n },\n [refs, innerRef, onIndexChange, disabled],\n );\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.currentTarget.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n\n if (!onClick) {\n return;\n }\n\n onClick(event);\n };\n\n return (\n <Root\n ref={ref}\n disabled={disabled}\n pilled={pilled}\n role={role}\n view={view}\n // TODO: убрать каст any, когда будут удалены deprecated props\n size={size as any}\n onFocus={onItemFocus}\n tabIndex={hasKeyNavigation ? navigationTabIndex : tabIndex}\n className={cx(pilledClass, selectedClass, animatedClass, truncateClass, className)}\n onClick={handleClick}\n {...rest}\n style={{\n ...rest.style,\n maxWidth,\n }}\n >\n <>\n {contentLeft && <LeftContent className={classes.tabLeftContent}>{contentLeft}</LeftContent>}\n <StyledContent className={classes.tabContent}>{children}</StyledContent>\n {!contentRight && value && <TabItemValue>{value}</TabItemValue>}\n {!value && contentRight && (\n <RightContent className={classes.tabRightContent}>{contentRight}</RightContent>\n )}\n </>\n </Root>\n );\n });\n\nexport const horizontalTabItemConfig = {\n name: 'HorizontalTabItem',\n tag: 'button',\n layout: horizontalTabItemRoot,\n base,\n variations: {\n size: {\n css: sizeCSS,\n },\n view: {\n css: viewCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n pilled: {\n css: pilledCSS,\n },\n },\n defaults: {\n view: 'default',\n },\n};\n"],"names":["horizontalTabItemRoot","Root","forwardRef","props","outerRef","size","view","isActive","selected","_props$disabled","disabled","_props$pilled","pilled","children","value","contentLeft","contentRight","_props$animated","animated","onIndexChange","itemIndex","tabIndex","className","onClick","_props$maxItemWidth","maxItemWidth","maxWidth","rest","_objectWithoutProperties","_excluded","innerRef","useRef","ref","useForkRef","refs","useContext","TabsContext","role","pilledAttr","animatedClass","classes","tabItemAnimated","undefined","pilledClass","tabsPilled","selectedClass","selectedTabsItem","truncateClass","tabsTruncate","hasKeyNavigation","navigationTabIndex","current","useEffect","register","unregister","onItemFocus","useCallback","event","scrollTo","top","left","offsetLeft","behavior","focusIndex","items","findIndex","itemRef","target","setCurrent","handleClick","currentTarget","scrollIntoView","block","inline","React","createElement","_extends","onFocus","cx","style","_objectSpread","Fragment","LeftContent","tabLeftContent","StyledContent","tabContent","TabItemValue","RightContent","tabRightContent","horizontalTabItemConfig","name","tag","layout","base","variations","css","sizeCSS","viewCSS","disabledCSS","attrs","pilledCSS","defaults"],"mappings":"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"}
1
+ {"version":3,"file":"HorizontalTabItem.js","sources":["../../../../../../src/components/Tabs/ui/horizontal/HorizontalTabItem/HorizontalTabItem.tsx"],"sourcesContent":["import React, { forwardRef, useRef, useContext, useEffect, useCallback, useLayoutEffect } from 'react';\nimport { useForkRef } from '@salutejs/plasma-core';\n\nimport { RootProps } from '../../../../../engines';\nimport { classes } from '../../../tokens';\nimport { cx } from '../../../../../utils';\nimport { TabsContext } from '../../../TabsContext';\nimport { HorizontalTabItemProps } from '../../../TabItem.types';\n\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as pilledCSS } from './variations/_pilled/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\nimport { LeftContent, RightContent, StyledContent, TabItemValue, base } from './HorizontalTabItem.styles';\n\nexport const horizontalTabItemRoot = (Root: RootProps<HTMLDivElement, HorizontalTabItemProps>) =>\n forwardRef<HTMLDivElement, HorizontalTabItemProps>((props, outerRef) => {\n const {\n size,\n view,\n isActive,\n selected,\n disabled = false,\n pilled = false,\n children,\n value,\n contentLeft,\n contentRight,\n animated = true,\n onIndexChange,\n itemIndex,\n tabIndex,\n className,\n onClick,\n maxItemWidth: maxWidth = 'auto',\n ...rest\n } = props;\n\n const innerRef = useRef<HTMLDivElement>(null);\n const ref = useForkRef(outerRef, innerRef);\n const refs = useContext(TabsContext);\n\n const role = 'tab';\n\n const pilledAttr = view !== 'clear' && pilled;\n const animatedClass = animated ? classes.tabItemAnimated : undefined;\n const pilledClass = pilledAttr ? classes.tabsPilled : undefined;\n const selectedClass = isActive || selected ? classes.selectedTabsItem : undefined;\n const truncateClass = maxWidth !== 'auto' ? classes.tabsTruncate : undefined;\n\n const hasKeyNavigation = itemIndex !== undefined && onIndexChange !== undefined;\n const navigationTabIndex = !disabled && refs?.current === itemIndex ? 0 : -1;\n\n useEffect(() => {\n if (!refs) {\n return;\n }\n\n refs.register(innerRef);\n\n return () => refs.unregister(innerRef);\n }, [refs]);\n\n useLayoutEffect(() => {\n if (!selected) {\n return;\n }\n\n innerRef.current?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }, [selected]);\n\n const onItemFocus = useCallback<React.FocusEventHandler>(\n (event) => {\n if (disabled) {\n return;\n }\n\n if (!hasKeyNavigation && innerRef?.current) {\n innerRef.current.scrollTo({\n top: 0,\n left: innerRef.current.offsetLeft,\n behavior: 'smooth',\n });\n\n return;\n }\n\n if (!refs) {\n return;\n }\n\n const focusIndex = refs.items.findIndex((itemRef) => itemRef.current === event.target);\n\n if (focusIndex === refs.current) {\n return;\n }\n\n onIndexChange?.(focusIndex);\n refs.setCurrent(focusIndex);\n },\n [refs, innerRef, onIndexChange, disabled],\n );\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!onClick) {\n return;\n }\n\n onClick(event);\n };\n\n return (\n <Root\n ref={ref}\n disabled={disabled}\n pilled={pilled}\n role={role}\n view={view}\n // TODO: убрать каст any, когда будут удалены deprecated props\n size={size as any}\n onFocus={onItemFocus}\n tabIndex={hasKeyNavigation ? navigationTabIndex : tabIndex}\n className={cx(pilledClass, selectedClass, animatedClass, truncateClass, className)}\n onClick={handleClick}\n {...rest}\n style={{\n ...rest.style,\n maxWidth,\n }}\n >\n <>\n {contentLeft && <LeftContent className={classes.tabLeftContent}>{contentLeft}</LeftContent>}\n <StyledContent className={classes.tabContent}>{children}</StyledContent>\n {!contentRight && value && <TabItemValue>{value}</TabItemValue>}\n {!value && contentRight && (\n <RightContent className={classes.tabRightContent}>{contentRight}</RightContent>\n )}\n </>\n </Root>\n );\n });\n\nexport const horizontalTabItemConfig = {\n name: 'HorizontalTabItem',\n tag: 'button',\n layout: horizontalTabItemRoot,\n base,\n variations: {\n size: {\n css: sizeCSS,\n },\n view: {\n css: viewCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n pilled: {\n css: pilledCSS,\n },\n },\n defaults: {\n view: 'default',\n },\n};\n"],"names":["horizontalTabItemRoot","Root","forwardRef","props","outerRef","size","view","isActive","selected","_props$disabled","disabled","_props$pilled","pilled","children","value","contentLeft","contentRight","_props$animated","animated","onIndexChange","itemIndex","tabIndex","className","onClick","_props$maxItemWidth","maxItemWidth","maxWidth","rest","_objectWithoutProperties","_excluded","innerRef","useRef","ref","useForkRef","refs","useContext","TabsContext","role","pilledAttr","animatedClass","classes","tabItemAnimated","undefined","pilledClass","tabsPilled","selectedClass","selectedTabsItem","truncateClass","tabsTruncate","hasKeyNavigation","navigationTabIndex","current","useEffect","register","unregister","useLayoutEffect","_innerRef$current","scrollIntoView","block","inline","onItemFocus","useCallback","event","scrollTo","top","left","offsetLeft","behavior","focusIndex","items","findIndex","itemRef","target","setCurrent","handleClick","React","createElement","_extends","onFocus","cx","style","_objectSpread","Fragment","LeftContent","tabLeftContent","StyledContent","tabContent","TabItemValue","RightContent","tabRightContent","horizontalTabItemConfig","name","tag","layout","base","variations","css","sizeCSS","viewCSS","disabledCSS","attrs","pilledCSS","defaults"],"mappings":"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"}
@@ -6,8 +6,9 @@ var _rollupPluginBabelHelpers = require('../../../../../_virtual/_rollupPluginBa
6
6
  var React = require('react');
7
7
  var plasmaCore = require('@salutejs/plasma-core');
8
8
  var tokens = require('../../../tokens.js');
9
- var index = require('../../../../../utils/index.js');
9
+ var index$1 = require('../../../../../utils/index.js');
10
10
  var TabsContext = require('../../../TabsContext.js');
11
+ var index = require('../../../utils/index.js');
11
12
  var base = require('./variations/_size/base.js');
12
13
  var base$1 = require('./variations/_view/base.js');
13
14
  var base$2 = require('./variations/_disabled/base.js');
@@ -48,7 +49,7 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
48
49
  children = props.children,
49
50
  _props$pilled = props.pilled,
50
51
  pilled = _props$pilled === void 0 ? false : _props$pilled,
51
- index$1 = props.index,
52
+ index$2 = props.index,
52
53
  className = props.className,
53
54
  _props$hasDivider = props.hasDivider,
54
55
  hasDivider = _props$hasDivider === void 0 ? true : _props$hasDivider,
@@ -62,7 +63,7 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
62
63
  lastItemVisible = _useState4[0],
63
64
  setLastItemVisible = _useState4[1];
64
65
  var refs = React.useMemo(function () {
65
- return new TabsContext.TabItemRefs(index$1);
66
+ return new TabsContext.TabItemRefs(index$2);
66
67
  }, []);
67
68
  var uniqId = plasmaCore.safeUseId();
68
69
  var tabsId = id || uniqId;
@@ -84,13 +85,7 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
84
85
  return;
85
86
  }
86
87
  var scrollLeft = Math.round(scrollRef.current.scrollLeft);
87
- var firstOverflowingTab = refs.items.slice().reverse().find(function (item) {
88
- if (!item.current || item.current.offsetLeft === undefined) {
89
- return;
90
- }
91
- var tabStartX = item.current.offsetLeft;
92
- return tabStartX < scrollLeft;
93
- });
88
+ var firstOverflowingTab = index.getFirstOverflowingTab(refs.items.slice().reverse(), scrollLeft);
94
89
  firstOverflowingTab === null || firstOverflowingTab === void 0 || (_firstOverflowingTab$ = firstOverflowingTab.current) === null || _firstOverflowingTab$ === void 0 || _firstOverflowingTab$.scrollIntoView({
95
90
  block: 'nearest',
96
91
  inline: 'start'
@@ -102,13 +97,7 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
102
97
  return;
103
98
  }
104
99
  var scrollRight = Math.round(scrollRef.current.scrollLeft + scrollRef.current.clientWidth);
105
- var lastOverflowingTab = refs.items.find(function (item) {
106
- if (!item.current || item.current.offsetLeft === undefined) {
107
- return;
108
- }
109
- var tabEndX = item.current.offsetLeft + item.current.offsetWidth;
110
- return tabEndX > scrollRight;
111
- });
100
+ var lastOverflowingTab = index.getLastOverflowingTab(refs.items, scrollRight);
112
101
  lastOverflowingTab === null || lastOverflowingTab === void 0 || (_lastOverflowingTab$c = lastOverflowingTab.current) === null || _lastOverflowingTab$c === void 0 || _lastOverflowingTab$c.scrollIntoView({
113
102
  block: 'nearest',
114
103
  inline: 'end'
@@ -150,7 +139,7 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
150
139
  setLastItemVisible(scrollLeft >= maxScrollLeft);
151
140
  }, [setFirstItemVisible, setLastItemVisible]);
152
141
  var onKeyDown = React.useCallback(function (event) {
153
- if (index$1 === undefined) {
142
+ if (index$2 === undefined) {
154
143
  return;
155
144
  }
156
145
  var minIndex = 0;
@@ -161,10 +150,10 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
161
150
  nextIndex = maxIndex;
162
151
  break;
163
152
  case Keys.left:
164
- nextIndex = index$1 > minIndex ? index$1 - 1 : index$1;
153
+ nextIndex = index$2 > minIndex ? index$2 - 1 : index$2;
165
154
  break;
166
155
  case Keys.right:
167
- nextIndex = index$1 < maxIndex ? index$1 + 1 : index$1;
156
+ nextIndex = index$2 < maxIndex ? index$2 + 1 : index$2;
168
157
  break;
169
158
  case Keys.home:
170
159
  nextIndex = minIndex;
@@ -172,7 +161,7 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
172
161
  default:
173
162
  return;
174
163
  }
175
- if (nextIndex !== index$1) {
164
+ if (nextIndex !== index$2) {
176
165
  var _refs$items$nextIndex, _refs$items$nextIndex2;
177
166
  event.preventDefault();
178
167
  (_refs$items$nextIndex = refs.items[nextIndex].current) === null || _refs$items$nextIndex === void 0 || _refs$items$nextIndex.focus();
@@ -182,19 +171,23 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
182
171
  behavior: 'smooth'
183
172
  });
184
173
  }
185
- }, [index$1]);
186
- React.useEffect(function () {
174
+ }, [index$2]);
175
+ React.useLayoutEffect(function () {
187
176
  var _scrollRef$current, _scrollRef$current2;
188
177
  setLastItemVisible(((_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.scrollWidth) === ((_scrollRef$current2 = scrollRef.current) === null || _scrollRef$current2 === void 0 ? void 0 : _scrollRef$current2.clientWidth));
189
178
  }, []);
190
179
 
191
180
  // Этот хук компенсирует появление левой стрелки при прокрутке
192
- React.useEffect(function () {
181
+ React.useLayoutEffect(function () {
182
+ var _lastOverflowingTab$c2;
193
183
  if (firstItemVisible || !scrollRef.current || !leftArrowRef.current) {
194
184
  return;
195
185
  }
196
- scrollRef.current.scrollTo({
197
- left: Math.round(scrollRef.current.scrollLeft + leftArrowRef.current.clientWidth)
186
+ var scrollRight = Math.round(scrollRef.current.scrollLeft + scrollRef.current.clientWidth);
187
+ var lastOverflowingTab = index.getLastOverflowingTab(refs.items, scrollRight);
188
+ lastOverflowingTab === null || lastOverflowingTab === void 0 || (_lastOverflowingTab$c2 = lastOverflowingTab.current) === null || _lastOverflowingTab$c2 === void 0 || _lastOverflowingTab$c2.scrollIntoView({
189
+ block: 'nearest',
190
+ inline: 'end'
198
191
  });
199
192
  }, [firstItemVisible, scrollRef, leftArrowRef]);
200
193
  return /*#__PURE__*/React__default.default.createElement(TabsContext.TabsContext.Provider, {
@@ -209,10 +202,10 @@ var horizontalTabsRoot = function horizontalTabsRoot(Root) {
209
202
  id: tabsId,
210
203
  ref: outerRef,
211
204
  disabled: disabled,
212
- className: index.cx(pilledClass, stretchClass, hasLeftArrowClass, hasRightArrowClass, noDividerClass, className),
205
+ className: index$1.cx(pilledClass, stretchClass, hasLeftArrowClass, hasRightArrowClass, noDividerClass, className),
213
206
  onKeyDown: onKeyDown
214
207
  }, rest), !firstItemVisible && PreviousButton, /*#__PURE__*/React__default.default.createElement(HorizontalTabs_styles.StyledContentWrapper, {
215
- className: index.cx(clipScrollClass, clipShowAllClass),
208
+ className: index$1.cx(clipScrollClass, clipShowAllClass),
216
209
  ref: scrollRef,
217
210
  onScroll: handleScroll
218
211
  }, /*#__PURE__*/React__default.default.createElement(HorizontalTabs_styles.StyledContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalTabs.js","sources":["../../../../../../src/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo, useState, useEffect, useRef, KeyboardEvent } from 'react';\nimport type { MutableRefObject } from 'react';\nimport { safeUseId } from '@salutejs/plasma-core';\n\nimport type { RootProps } from '../../../../../engines/types';\nimport { IconDisclosureLeft, IconDisclosureRight } from '../../../../_Icon';\nimport { classes } from '../../../tokens';\nimport { cx } from '../../../../../utils';\nimport { TabItemRefs, TabsContext } from '../../../TabsContext';\nimport type { HorizontalTabsProps } from '../../../Tabs.types';\n\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\nimport { base as pilledCSS } from './variations/_pilled/base';\nimport { base as stretchCSS } from './variations/_stretch/base';\nimport { StyledArrow, StyledContent, StyledContentWrapper, base } from './HorizontalTabs.styles';\n\nenum Keys {\n end = 35,\n home = 36,\n left = 37,\n right = 39,\n}\n\nconst getIconSize = (size?: string) => {\n return size === 'h1' || size === 'h2' ? 'm' : 's';\n};\n\n// TODO: https://github.com/salute-developers/plasma/issues/1474\nexport const horizontalTabsRoot = (Root: RootProps<HTMLDivElement, HorizontalTabsProps>) =>\n forwardRef<HTMLDivElement, HorizontalTabsProps>((props, outerRef) => {\n const {\n id,\n stretch = false,\n disabled = false,\n clip = 'scroll',\n size,\n view,\n children,\n pilled = false,\n index,\n className,\n hasDivider = true,\n ...rest\n } = props;\n const [firstItemVisible, setFirstItemVisible] = useState(true);\n const [lastItemVisible, setLastItemVisible] = useState(true);\n\n const refs = useMemo(() => new TabItemRefs(index), []);\n\n const uniqId = safeUseId();\n const tabsId = id || uniqId;\n\n const isFilled = view === 'filled'; // outer padding is only for filled view\n const pilledAttr = view !== 'clear' && pilled;\n const pilledClass = pilledAttr ? classes.tabsPilled : undefined;\n\n const noDividerClass = !hasDivider ? classes.tabsNoDivider : undefined;\n const stretchClass = firstItemVisible && lastItemVisible && stretch ? classes.tabsStretch : undefined;\n const hasLeftArrowClass = !firstItemVisible ? classes.tabsHasLeftArrow : undefined;\n const hasRightArrowClass = !lastItemVisible ? classes.tabsHasRightArrow : undefined;\n const clipScrollClass = clip === 'scroll' ? classes.tabsClipScroll : undefined;\n const clipShowAllClass = clip === 'showAll' ? classes.tabsClipShowAll : undefined;\n\n const scrollRef = useRef<HTMLElement | null>(null);\n const trackRef = useRef<HTMLElement | null>(null);\n const leftArrowRef = useRef<HTMLButtonElement | null>(null);\n\n const onPrev = useCallback(() => {\n if (disabled || !scrollRef.current) {\n return;\n }\n\n const scrollLeft = Math.round(scrollRef.current.scrollLeft);\n const firstOverflowingTab = refs.items\n .slice()\n .reverse()\n .find((item: MutableRefObject<HTMLElement | null>) => {\n if (!item.current || item.current.offsetLeft === undefined) {\n return;\n }\n const tabStartX = item.current.offsetLeft;\n\n return tabStartX < scrollLeft;\n });\n\n firstOverflowingTab?.current?.scrollIntoView({ block: 'nearest', inline: 'start' });\n }, [disabled, scrollRef, refs]);\n\n const onNext = useCallback(() => {\n if (disabled || !scrollRef.current) {\n return;\n }\n\n const scrollRight = Math.round(scrollRef.current.scrollLeft + scrollRef.current.clientWidth);\n const lastOverflowingTab = refs.items.find((item: MutableRefObject<HTMLElement | null>) => {\n if (!item.current || item.current.offsetLeft === undefined) {\n return;\n }\n const tabEndX = item.current.offsetLeft + item.current.offsetWidth;\n\n return tabEndX > scrollRight;\n });\n\n lastOverflowingTab?.current?.scrollIntoView({ block: 'nearest', inline: 'end' });\n }, [disabled, scrollRef, refs]);\n\n const PreviousButton = useMemo(\n () => (\n <StyledArrow\n type=\"button\"\n aria-label=\"Предыдущий таб\"\n onClick={onPrev}\n tabIndex={disabled ? -1 : 0}\n disabled={disabled}\n isFilled={isFilled}\n ref={leftArrowRef}\n isLeftArrow\n >\n <IconDisclosureLeft size={getIconSize(size)} color=\"inherit\" />\n </StyledArrow>\n ),\n [onPrev, size, disabled, isFilled],\n );\n\n const NextButton = useMemo(\n () => (\n <StyledArrow\n type=\"button\"\n aria-label=\"Следующий таб\"\n onClick={onNext}\n tabIndex={disabled ? -1 : 0}\n disabled={disabled}\n isFilled={isFilled}\n >\n <IconDisclosureRight size={getIconSize(size)} color=\"inherit\" />\n </StyledArrow>\n ),\n [onNext, size, disabled, isFilled],\n );\n\n const handleScroll = useCallback(\n (event: React.UIEvent<HTMLElement>): void => {\n event.stopPropagation();\n const maxScrollLeft = event.currentTarget.scrollWidth - event.currentTarget.clientWidth;\n const scrollLeft = Math.round(event.currentTarget.scrollLeft);\n\n setFirstItemVisible(scrollLeft <= 0);\n setLastItemVisible(scrollLeft >= maxScrollLeft);\n },\n [setFirstItemVisible, setLastItemVisible],\n );\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (index === undefined) {\n return;\n }\n\n const minIndex = 0;\n const maxIndex = refs.items.length - 1;\n let nextIndex: number;\n\n switch (event.keyCode) {\n case Keys.end:\n nextIndex = maxIndex;\n break;\n case Keys.left:\n nextIndex = index > minIndex ? index - 1 : index;\n break;\n case Keys.right:\n nextIndex = index < maxIndex ? index + 1 : index;\n break;\n case Keys.home:\n nextIndex = minIndex;\n break;\n default:\n return;\n }\n\n if (nextIndex !== index) {\n event.preventDefault();\n refs.items[nextIndex].current?.focus();\n refs.items[nextIndex].current?.scrollIntoView({\n block: 'nearest',\n inline: 'center',\n behavior: 'smooth',\n });\n }\n },\n [index],\n );\n\n useEffect(() => {\n setLastItemVisible(scrollRef.current?.scrollWidth === scrollRef.current?.clientWidth);\n }, []);\n\n // Этот хук компенсирует появление левой стрелки при прокрутке\n useEffect(() => {\n if (firstItemVisible || !scrollRef.current || !leftArrowRef.current) {\n return;\n }\n\n scrollRef.current.scrollTo({\n left: Math.round(scrollRef.current.scrollLeft + leftArrowRef.current.clientWidth),\n });\n }, [firstItemVisible, scrollRef, leftArrowRef]);\n\n return (\n <TabsContext.Provider value={refs}>\n <Root\n view={view}\n role=\"tablist\"\n // TODO: убрать каст any, когда будут удалены deprecated props\n size={size as any}\n pilled={pilled}\n id={tabsId}\n ref={outerRef}\n disabled={disabled}\n className={cx(\n pilledClass,\n stretchClass,\n hasLeftArrowClass,\n hasRightArrowClass,\n noDividerClass,\n className,\n )}\n onKeyDown={onKeyDown}\n {...rest}\n >\n {!firstItemVisible && PreviousButton}\n <StyledContentWrapper\n className={cx(clipScrollClass, clipShowAllClass)}\n ref={scrollRef as MutableRefObject<HTMLDivElement | null>}\n onScroll={handleScroll}\n >\n <StyledContent ref={trackRef as MutableRefObject<HTMLDivElement | null>}>\n {children}\n </StyledContent>\n </StyledContentWrapper>\n {!lastItemVisible && NextButton}\n </Root>\n </TabsContext.Provider>\n );\n });\n\nexport const horizontalTabsConfig = {\n name: 'HorizontalTabs',\n tag: 'div',\n layout: horizontalTabsRoot,\n base,\n variations: {\n size: {\n css: sizeCSS,\n },\n view: {\n css: viewCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n stretch: {\n css: stretchCSS,\n attrs: true,\n },\n pilled: {\n css: pilledCSS,\n },\n },\n defaults: {\n view: 'clear',\n size: 'xs',\n },\n};\n"],"names":["Keys","getIconSize","size","horizontalTabsRoot","Root","forwardRef","props","outerRef","id","_props$stretch","stretch","_props$disabled","disabled","_props$clip","clip","view","children","_props$pilled","pilled","index","className","_props$hasDivider","hasDivider","rest","_objectWithoutProperties","_excluded","_useState","useState","_useState2","_slicedToArray","firstItemVisible","setFirstItemVisible","_useState3","_useState4","lastItemVisible","setLastItemVisible","refs","useMemo","TabItemRefs","uniqId","safeUseId","tabsId","isFilled","pilledAttr","pilledClass","classes","tabsPilled","undefined","noDividerClass","tabsNoDivider","stretchClass","tabsStretch","hasLeftArrowClass","tabsHasLeftArrow","hasRightArrowClass","tabsHasRightArrow","clipScrollClass","tabsClipScroll","clipShowAllClass","tabsClipShowAll","scrollRef","useRef","trackRef","leftArrowRef","onPrev","useCallback","_firstOverflowingTab$","current","scrollLeft","Math","round","firstOverflowingTab","items","slice","reverse","find","item","offsetLeft","tabStartX","scrollIntoView","block","inline","onNext","_lastOverflowingTab$c","scrollRight","clientWidth","lastOverflowingTab","tabEndX","offsetWidth","PreviousButton","React","createElement","StyledArrow","type","onClick","tabIndex","ref","isLeftArrow","IconDisclosureLeft","color","NextButton","IconDisclosureRight","handleScroll","event","stopPropagation","maxScrollLeft","currentTarget","scrollWidth","onKeyDown","minIndex","maxIndex","length","nextIndex","keyCode","end","left","right","home","_refs$items$nextIndex","_refs$items$nextIndex2","preventDefault","focus","behavior","useEffect","_scrollRef$current","_scrollRef$current2","scrollTo","TabsContext","Provider","value","_extends","role","cx","StyledContentWrapper","onScroll","StyledContent","horizontalTabsConfig","name","tag","layout","base","variations","css","sizeCSS","viewCSS","disabledCSS","attrs","stretchCSS","pilledCSS","defaults"],"mappings":"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"}
1
+ {"version":3,"file":"HorizontalTabs.js","sources":["../../../../../../src/components/Tabs/ui/horizontal/HorizontalTabs/HorizontalTabs.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo, useState, useRef, KeyboardEvent, useLayoutEffect } from 'react';\nimport type { MutableRefObject } from 'react';\nimport { safeUseId } from '@salutejs/plasma-core';\n\nimport type { RootProps } from '../../../../../engines/types';\nimport { IconDisclosureLeft, IconDisclosureRight } from '../../../../_Icon';\nimport { classes } from '../../../tokens';\nimport { cx } from '../../../../../utils';\nimport { TabItemRefs, TabsContext } from '../../../TabsContext';\nimport type { HorizontalTabsProps } from '../../../Tabs.types';\nimport { getFirstOverflowingTab, getLastOverflowingTab } from '../../../utils';\n\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\nimport { base as pilledCSS } from './variations/_pilled/base';\nimport { base as stretchCSS } from './variations/_stretch/base';\nimport { StyledArrow, StyledContent, StyledContentWrapper, base } from './HorizontalTabs.styles';\n\nenum Keys {\n end = 35,\n home = 36,\n left = 37,\n right = 39,\n}\n\nconst getIconSize = (size?: string) => {\n return size === 'h1' || size === 'h2' ? 'm' : 's';\n};\n\n// TODO: https://github.com/salute-developers/plasma/issues/1474\nexport const horizontalTabsRoot = (Root: RootProps<HTMLDivElement, HorizontalTabsProps>) =>\n forwardRef<HTMLDivElement, HorizontalTabsProps>((props, outerRef) => {\n const {\n id,\n stretch = false,\n disabled = false,\n clip = 'scroll',\n size,\n view,\n children,\n pilled = false,\n index,\n className,\n hasDivider = true,\n ...rest\n } = props;\n const [firstItemVisible, setFirstItemVisible] = useState(true);\n const [lastItemVisible, setLastItemVisible] = useState(true);\n\n const refs = useMemo(() => new TabItemRefs(index), []);\n\n const uniqId = safeUseId();\n const tabsId = id || uniqId;\n\n const isFilled = view === 'filled'; // outer padding is only for filled view\n const pilledAttr = view !== 'clear' && pilled;\n const pilledClass = pilledAttr ? classes.tabsPilled : undefined;\n\n const noDividerClass = !hasDivider ? classes.tabsNoDivider : undefined;\n const stretchClass = firstItemVisible && lastItemVisible && stretch ? classes.tabsStretch : undefined;\n const hasLeftArrowClass = !firstItemVisible ? classes.tabsHasLeftArrow : undefined;\n const hasRightArrowClass = !lastItemVisible ? classes.tabsHasRightArrow : undefined;\n const clipScrollClass = clip === 'scroll' ? classes.tabsClipScroll : undefined;\n const clipShowAllClass = clip === 'showAll' ? classes.tabsClipShowAll : undefined;\n\n const scrollRef = useRef<HTMLElement | null>(null);\n const trackRef = useRef<HTMLElement | null>(null);\n const leftArrowRef = useRef<HTMLButtonElement | null>(null);\n\n const onPrev = useCallback(() => {\n if (disabled || !scrollRef.current) {\n return;\n }\n\n const scrollLeft = Math.round(scrollRef.current.scrollLeft);\n const firstOverflowingTab = getFirstOverflowingTab(refs.items.slice().reverse(), scrollLeft);\n\n firstOverflowingTab?.current?.scrollIntoView({ block: 'nearest', inline: 'start' });\n }, [disabled, scrollRef, refs]);\n\n const onNext = useCallback(() => {\n if (disabled || !scrollRef.current) {\n return;\n }\n\n const scrollRight = Math.round(scrollRef.current.scrollLeft + scrollRef.current.clientWidth);\n const lastOverflowingTab = getLastOverflowingTab(refs.items, scrollRight);\n\n lastOverflowingTab?.current?.scrollIntoView({ block: 'nearest', inline: 'end' });\n }, [disabled, scrollRef, refs]);\n\n const PreviousButton = useMemo(\n () => (\n <StyledArrow\n type=\"button\"\n aria-label=\"Предыдущий таб\"\n onClick={onPrev}\n tabIndex={disabled ? -1 : 0}\n disabled={disabled}\n isFilled={isFilled}\n ref={leftArrowRef}\n isLeftArrow\n >\n <IconDisclosureLeft size={getIconSize(size)} color=\"inherit\" />\n </StyledArrow>\n ),\n [onPrev, size, disabled, isFilled],\n );\n\n const NextButton = useMemo(\n () => (\n <StyledArrow\n type=\"button\"\n aria-label=\"Следующий таб\"\n onClick={onNext}\n tabIndex={disabled ? -1 : 0}\n disabled={disabled}\n isFilled={isFilled}\n >\n <IconDisclosureRight size={getIconSize(size)} color=\"inherit\" />\n </StyledArrow>\n ),\n [onNext, size, disabled, isFilled],\n );\n\n const handleScroll = useCallback(\n (event: React.UIEvent<HTMLElement>): void => {\n event.stopPropagation();\n const maxScrollLeft = event.currentTarget.scrollWidth - event.currentTarget.clientWidth;\n const scrollLeft = Math.round(event.currentTarget.scrollLeft);\n\n setFirstItemVisible(scrollLeft <= 0);\n setLastItemVisible(scrollLeft >= maxScrollLeft);\n },\n [setFirstItemVisible, setLastItemVisible],\n );\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (index === undefined) {\n return;\n }\n\n const minIndex = 0;\n const maxIndex = refs.items.length - 1;\n let nextIndex: number;\n\n switch (event.keyCode) {\n case Keys.end:\n nextIndex = maxIndex;\n break;\n case Keys.left:\n nextIndex = index > minIndex ? index - 1 : index;\n break;\n case Keys.right:\n nextIndex = index < maxIndex ? index + 1 : index;\n break;\n case Keys.home:\n nextIndex = minIndex;\n break;\n default:\n return;\n }\n\n if (nextIndex !== index) {\n event.preventDefault();\n refs.items[nextIndex].current?.focus();\n refs.items[nextIndex].current?.scrollIntoView({\n block: 'nearest',\n inline: 'center',\n behavior: 'smooth',\n });\n }\n },\n [index],\n );\n\n useLayoutEffect(() => {\n setLastItemVisible(scrollRef.current?.scrollWidth === scrollRef.current?.clientWidth);\n }, []);\n\n // Этот хук компенсирует появление левой стрелки при прокрутке\n useLayoutEffect(() => {\n if (firstItemVisible || !scrollRef.current || !leftArrowRef.current) {\n return;\n }\n\n const scrollRight = Math.round(scrollRef.current.scrollLeft + scrollRef.current.clientWidth);\n const lastOverflowingTab = getLastOverflowingTab(refs.items, scrollRight);\n\n lastOverflowingTab?.current?.scrollIntoView({ block: 'nearest', inline: 'end' });\n }, [firstItemVisible, scrollRef, leftArrowRef]);\n\n return (\n <TabsContext.Provider value={refs}>\n <Root\n view={view}\n role=\"tablist\"\n // TODO: убрать каст any, когда будут удалены deprecated props\n size={size as any}\n pilled={pilled}\n id={tabsId}\n ref={outerRef}\n disabled={disabled}\n className={cx(\n pilledClass,\n stretchClass,\n hasLeftArrowClass,\n hasRightArrowClass,\n noDividerClass,\n className,\n )}\n onKeyDown={onKeyDown}\n {...rest}\n >\n {!firstItemVisible && PreviousButton}\n <StyledContentWrapper\n className={cx(clipScrollClass, clipShowAllClass)}\n ref={scrollRef as MutableRefObject<HTMLDivElement | null>}\n onScroll={handleScroll}\n >\n <StyledContent ref={trackRef as MutableRefObject<HTMLDivElement | null>}>\n {children}\n </StyledContent>\n </StyledContentWrapper>\n {!lastItemVisible && NextButton}\n </Root>\n </TabsContext.Provider>\n );\n });\n\nexport const horizontalTabsConfig = {\n name: 'HorizontalTabs',\n tag: 'div',\n layout: horizontalTabsRoot,\n base,\n variations: {\n size: {\n css: sizeCSS,\n },\n view: {\n css: viewCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n stretch: {\n css: stretchCSS,\n attrs: true,\n },\n pilled: {\n css: pilledCSS,\n },\n },\n defaults: {\n view: 'clear',\n size: 'xs',\n },\n};\n"],"names":["Keys","getIconSize","size","horizontalTabsRoot","Root","forwardRef","props","outerRef","id","_props$stretch","stretch","_props$disabled","disabled","_props$clip","clip","view","children","_props$pilled","pilled","index","className","_props$hasDivider","hasDivider","rest","_objectWithoutProperties","_excluded","_useState","useState","_useState2","_slicedToArray","firstItemVisible","setFirstItemVisible","_useState3","_useState4","lastItemVisible","setLastItemVisible","refs","useMemo","TabItemRefs","uniqId","safeUseId","tabsId","isFilled","pilledAttr","pilledClass","classes","tabsPilled","undefined","noDividerClass","tabsNoDivider","stretchClass","tabsStretch","hasLeftArrowClass","tabsHasLeftArrow","hasRightArrowClass","tabsHasRightArrow","clipScrollClass","tabsClipScroll","clipShowAllClass","tabsClipShowAll","scrollRef","useRef","trackRef","leftArrowRef","onPrev","useCallback","_firstOverflowingTab$","current","scrollLeft","Math","round","firstOverflowingTab","getFirstOverflowingTab","items","slice","reverse","scrollIntoView","block","inline","onNext","_lastOverflowingTab$c","scrollRight","clientWidth","lastOverflowingTab","getLastOverflowingTab","PreviousButton","React","createElement","StyledArrow","type","onClick","tabIndex","ref","isLeftArrow","IconDisclosureLeft","color","NextButton","IconDisclosureRight","handleScroll","event","stopPropagation","maxScrollLeft","currentTarget","scrollWidth","onKeyDown","minIndex","maxIndex","length","nextIndex","keyCode","end","left","right","home","_refs$items$nextIndex","_refs$items$nextIndex2","preventDefault","focus","behavior","useLayoutEffect","_scrollRef$current","_scrollRef$current2","_lastOverflowingTab$c2","TabsContext","Provider","value","_extends","role","cx","StyledContentWrapper","onScroll","StyledContent","horizontalTabsConfig","name","tag","layout","base","variations","css","sizeCSS","viewCSS","disabledCSS","attrs","stretchCSS","pilledCSS","defaults"],"mappings":"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"}
@@ -54,6 +54,16 @@ var verticalTabItemRoot = function verticalTabItemRoot(Root) {
54
54
  return refs.unregister(innerRef);
55
55
  };
56
56
  }, [refs]);
57
+ React.useLayoutEffect(function () {
58
+ var _innerRef$current;
59
+ if (!selected) {
60
+ return;
61
+ }
62
+ (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 || _innerRef$current.scrollIntoView({
63
+ block: 'nearest',
64
+ inline: 'nearest'
65
+ });
66
+ }, [selected]);
57
67
  var onItemFocus = React.useCallback(function (event) {
58
68
  if (disabled) {
59
69
  return;
@@ -78,10 +88,6 @@ var verticalTabItemRoot = function verticalTabItemRoot(Root) {
78
88
  refs.setCurrent(focusIndex);
79
89
  }, [refs, innerRef, onIndexChange, disabled]);
80
90
  var handleClick = function handleClick(event) {
81
- event.currentTarget.scrollIntoView({
82
- block: 'nearest',
83
- inline: 'nearest'
84
- });
85
91
  if (!onClick) {
86
92
  return;
87
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalTabItem.js","sources":["../../../../../../src/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.tsx"],"sourcesContent":["import React, { forwardRef, useRef, useContext, useEffect, useCallback } from 'react';\nimport { useForkRef } from '@salutejs/plasma-core';\n\nimport { RootProps } from '../../../../../engines';\nimport { classes } from '../../../tokens';\nimport { cx } from '../../../../../utils';\nimport { TabsContext } from '../../../TabsContext';\nimport { VerticalTabItemProps } from '../../../TabItem.types';\n\nimport { base, LeftContent, RightContent, StyledContent, TabItemValue } from './VerticalTabItem.styles';\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\n\nexport const verticalTabItemRoot = (Root: RootProps<HTMLButtonElement, VerticalTabItemProps>) =>\n forwardRef<HTMLButtonElement, VerticalTabItemProps>((props, outerRef) => {\n const {\n size,\n view,\n selected,\n disabled = false,\n children,\n value,\n contentLeft,\n contentRight,\n onIndexChange,\n itemIndex,\n tabIndex,\n className,\n onClick,\n maxItemWidth: maxWidth = 'auto',\n ...rest\n } = props;\n\n const innerRef = useRef<HTMLButtonElement>(null);\n const ref = useForkRef(outerRef, innerRef);\n const refs = useContext(TabsContext);\n\n const role = 'tab';\n\n const selectedClass = selected ? classes.selectedTabsItem : undefined;\n const truncateClass = maxWidth !== 'auto' ? classes.tabsTruncate : undefined;\n\n const hasKeyNavigation = itemIndex !== undefined && onIndexChange !== undefined;\n const navigationTabIndex = !disabled && refs?.current === itemIndex ? 0 : -1;\n\n useEffect(() => {\n if (!refs) {\n return;\n }\n\n refs.register(innerRef);\n\n return () => refs.unregister(innerRef);\n }, [refs]);\n\n const onItemFocus = useCallback<React.FocusEventHandler>(\n (event) => {\n if (disabled) {\n return;\n }\n\n if (!hasKeyNavigation && innerRef?.current) {\n innerRef.current.scrollTo({\n top: innerRef.current.offsetTop,\n behavior: 'smooth',\n });\n\n return;\n }\n\n if (!refs) {\n return;\n }\n\n const focusIndex = refs.items.findIndex((itemRef) => itemRef.current === event.target);\n\n if (focusIndex === refs.current) {\n return;\n }\n\n onIndexChange?.(focusIndex);\n refs.setCurrent(focusIndex);\n },\n [refs, innerRef, onIndexChange, disabled],\n );\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.currentTarget.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n\n if (!onClick) {\n return;\n }\n\n onClick(event);\n };\n\n return (\n <Root\n ref={ref}\n disabled={disabled}\n role={role}\n view={view}\n size={size}\n onFocus={onItemFocus}\n tabIndex={hasKeyNavigation ? navigationTabIndex : tabIndex}\n className={cx(selectedClass, truncateClass, className)}\n onClick={handleClick}\n {...rest}\n style={{\n ...rest.style,\n maxWidth,\n }}\n >\n <>\n {contentLeft && <LeftContent className={classes.tabLeftContent}>{contentLeft}</LeftContent>}\n <StyledContent className={classes.tabContent}>{children}</StyledContent>\n {!contentRight && value && <TabItemValue>{value}</TabItemValue>}\n {!value && contentRight && (\n <RightContent className={classes.tabRightContent}>{contentRight}</RightContent>\n )}\n </>\n </Root>\n );\n });\n\nexport const verticalTabItemConfig = {\n name: 'VerticalTabItem',\n tag: 'button',\n layout: verticalTabItemRoot,\n base,\n variations: {\n size: {\n css: sizeCSS,\n },\n view: {\n css: viewCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n },\n defaults: {\n view: 'divider',\n },\n};\n"],"names":["verticalTabItemRoot","Root","forwardRef","props","outerRef","size","view","selected","_props$disabled","disabled","children","value","contentLeft","contentRight","onIndexChange","itemIndex","tabIndex","className","onClick","_props$maxItemWidth","maxItemWidth","maxWidth","rest","_objectWithoutProperties","_excluded","innerRef","useRef","ref","useForkRef","refs","useContext","TabsContext","role","selectedClass","classes","selectedTabsItem","undefined","truncateClass","tabsTruncate","hasKeyNavigation","navigationTabIndex","current","useEffect","register","unregister","onItemFocus","useCallback","event","scrollTo","top","offsetTop","behavior","focusIndex","items","findIndex","itemRef","target","setCurrent","handleClick","currentTarget","scrollIntoView","block","inline","React","createElement","_extends","onFocus","cx","style","_objectSpread","Fragment","LeftContent","tabLeftContent","StyledContent","tabContent","TabItemValue","RightContent","tabRightContent","verticalTabItemConfig","name","tag","layout","base","variations","css","sizeCSS","viewCSS","disabledCSS","attrs","defaults"],"mappings":"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"}
1
+ {"version":3,"file":"VerticalTabItem.js","sources":["../../../../../../src/components/Tabs/ui/vertical/VerticalTabItem/VerticalTabItem.tsx"],"sourcesContent":["import React, { forwardRef, useRef, useContext, useEffect, useCallback, useLayoutEffect } from 'react';\nimport { useForkRef } from '@salutejs/plasma-core';\n\nimport { RootProps } from '../../../../../engines';\nimport { classes } from '../../../tokens';\nimport { cx } from '../../../../../utils';\nimport { TabsContext } from '../../../TabsContext';\nimport { VerticalTabItemProps } from '../../../TabItem.types';\n\nimport { base, LeftContent, RightContent, StyledContent, TabItemValue } from './VerticalTabItem.styles';\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\n\nexport const verticalTabItemRoot = (Root: RootProps<HTMLButtonElement, VerticalTabItemProps>) =>\n forwardRef<HTMLButtonElement, VerticalTabItemProps>((props, outerRef) => {\n const {\n size,\n view,\n selected,\n disabled = false,\n children,\n value,\n contentLeft,\n contentRight,\n onIndexChange,\n itemIndex,\n tabIndex,\n className,\n onClick,\n maxItemWidth: maxWidth = 'auto',\n ...rest\n } = props;\n\n const innerRef = useRef<HTMLButtonElement>(null);\n const ref = useForkRef(outerRef, innerRef);\n const refs = useContext(TabsContext);\n\n const role = 'tab';\n\n const selectedClass = selected ? classes.selectedTabsItem : undefined;\n const truncateClass = maxWidth !== 'auto' ? classes.tabsTruncate : undefined;\n\n const hasKeyNavigation = itemIndex !== undefined && onIndexChange !== undefined;\n const navigationTabIndex = !disabled && refs?.current === itemIndex ? 0 : -1;\n\n useEffect(() => {\n if (!refs) {\n return;\n }\n\n refs.register(innerRef);\n\n return () => refs.unregister(innerRef);\n }, [refs]);\n\n useLayoutEffect(() => {\n if (!selected) {\n return;\n }\n\n innerRef.current?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }, [selected]);\n\n const onItemFocus = useCallback<React.FocusEventHandler>(\n (event) => {\n if (disabled) {\n return;\n }\n\n if (!hasKeyNavigation && innerRef?.current) {\n innerRef.current.scrollTo({\n top: innerRef.current.offsetTop,\n behavior: 'smooth',\n });\n\n return;\n }\n\n if (!refs) {\n return;\n }\n\n const focusIndex = refs.items.findIndex((itemRef) => itemRef.current === event.target);\n\n if (focusIndex === refs.current) {\n return;\n }\n\n onIndexChange?.(focusIndex);\n refs.setCurrent(focusIndex);\n },\n [refs, innerRef, onIndexChange, disabled],\n );\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!onClick) {\n return;\n }\n\n onClick(event);\n };\n\n return (\n <Root\n ref={ref}\n disabled={disabled}\n role={role}\n view={view}\n size={size}\n onFocus={onItemFocus}\n tabIndex={hasKeyNavigation ? navigationTabIndex : tabIndex}\n className={cx(selectedClass, truncateClass, className)}\n onClick={handleClick}\n {...rest}\n style={{\n ...rest.style,\n maxWidth,\n }}\n >\n <>\n {contentLeft && <LeftContent className={classes.tabLeftContent}>{contentLeft}</LeftContent>}\n <StyledContent className={classes.tabContent}>{children}</StyledContent>\n {!contentRight && value && <TabItemValue>{value}</TabItemValue>}\n {!value && contentRight && (\n <RightContent className={classes.tabRightContent}>{contentRight}</RightContent>\n )}\n </>\n </Root>\n );\n });\n\nexport const verticalTabItemConfig = {\n name: 'VerticalTabItem',\n tag: 'button',\n layout: verticalTabItemRoot,\n base,\n variations: {\n size: {\n css: sizeCSS,\n },\n view: {\n css: viewCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n },\n defaults: {\n view: 'divider',\n },\n};\n"],"names":["verticalTabItemRoot","Root","forwardRef","props","outerRef","size","view","selected","_props$disabled","disabled","children","value","contentLeft","contentRight","onIndexChange","itemIndex","tabIndex","className","onClick","_props$maxItemWidth","maxItemWidth","maxWidth","rest","_objectWithoutProperties","_excluded","innerRef","useRef","ref","useForkRef","refs","useContext","TabsContext","role","selectedClass","classes","selectedTabsItem","undefined","truncateClass","tabsTruncate","hasKeyNavigation","navigationTabIndex","current","useEffect","register","unregister","useLayoutEffect","_innerRef$current","scrollIntoView","block","inline","onItemFocus","useCallback","event","scrollTo","top","offsetTop","behavior","focusIndex","items","findIndex","itemRef","target","setCurrent","handleClick","React","createElement","_extends","onFocus","cx","style","_objectSpread","Fragment","LeftContent","tabLeftContent","StyledContent","tabContent","TabItemValue","RightContent","tabRightContent","verticalTabItemConfig","name","tag","layout","base","variations","css","sizeCSS","viewCSS","disabledCSS","attrs","defaults"],"mappings":";;;;;;;;;;;;;;;;;;;;IAcaA,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,IAAwD,EAAA;AAAA,EAAA,oBACxFC,gBAAU,CAA0C,UAACC,KAAK,EAAEC,QAAQ,EAAK;AACrE,IAAA,IACIC,IAAI,GAeJF,KAAK,CAfLE,IAAI;MACJC,IAAI,GAcJH,KAAK,CAdLG,IAAI;MACJC,QAAQ,GAaRJ,KAAK,CAbLI,QAAQ;MAAAC,eAAA,GAaRL,KAAK,CAZLM,QAAQ;AAARA,MAAAA,QAAQ,GAAAD,eAAA,KAAG,KAAA,CAAA,GAAA,KAAK,GAAAA,eAAA;MAChBE,QAAQ,GAWRP,KAAK,CAXLO,QAAQ;MACRC,KAAK,GAULR,KAAK,CAVLQ,KAAK;MACLC,WAAW,GASXT,KAAK,CATLS,WAAW;MACXC,YAAY,GAQZV,KAAK,CARLU,YAAY;MACZC,aAAa,GAObX,KAAK,CAPLW,aAAa;MACbC,SAAS,GAMTZ,KAAK,CANLY,SAAS;MACTC,QAAQ,GAKRb,KAAK,CALLa,QAAQ;MACRC,SAAS,GAITd,KAAK,CAJLc,SAAS;MACTC,OAAO,GAGPf,KAAK,CAHLe,OAAO;MAAAC,mBAAA,GAGPhB,KAAK,CAFLiB,YAAY;AAAEC,MAAAA,QAAQ,GAAAF,mBAAA,KAAG,KAAA,CAAA,GAAA,MAAM,GAAAA,mBAAA;AAC5BG,MAAAA,IAAI,GAAAC,iDAAA,CACPpB,KAAK,EAAAqB,SAAA,CAAA,CAAA;AAET,IAAA,IAAMC,QAAQ,GAAGC,YAAM,CAAoB,IAAI,CAAC,CAAA;AAChD,IAAA,IAAMC,GAAG,GAAGC,qBAAU,CAACxB,QAAQ,EAAEqB,QAAQ,CAAC,CAAA;AAC1C,IAAA,IAAMI,IAAI,GAAGC,gBAAU,CAACC,uBAAW,CAAC,CAAA;IAEpC,IAAMC,IAAI,GAAG,KAAK,CAAA;IAElB,IAAMC,aAAa,GAAG1B,QAAQ,GAAG2B,cAAO,CAACC,gBAAgB,GAAGC,SAAS,CAAA;IACrE,IAAMC,aAAa,GAAGhB,QAAQ,KAAK,MAAM,GAAGa,cAAO,CAACI,YAAY,GAAGF,SAAS,CAAA;IAE5E,IAAMG,gBAAgB,GAAGxB,SAAS,KAAKqB,SAAS,IAAItB,aAAa,KAAKsB,SAAS,CAAA;AAC/E,IAAA,IAAMI,kBAAkB,GAAG,CAAC/B,QAAQ,IAAI,CAAAoB,IAAI,KAAJA,IAAAA,IAAAA,IAAI,uBAAJA,IAAI,CAAEY,OAAO,MAAK1B,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAE5E2B,IAAAA,eAAS,CAAC,YAAM;MACZ,IAAI,CAACb,IAAI,EAAE;AACP,QAAA,OAAA;AACJ,OAAA;AAEAA,MAAAA,IAAI,CAACc,QAAQ,CAAClB,QAAQ,CAAC,CAAA;MAEvB,OAAO,YAAA;AAAA,QAAA,OAAMI,IAAI,CAACe,UAAU,CAACnB,QAAQ,CAAC,CAAA;AAAA,OAAA,CAAA;AAC1C,KAAC,EAAE,CAACI,IAAI,CAAC,CAAC,CAAA;AAEVgB,IAAAA,qBAAe,CAAC,YAAM;AAAA,MAAA,IAAAC,iBAAA,CAAA;MAClB,IAAI,CAACvC,QAAQ,EAAE;AACX,QAAA,OAAA;AACJ,OAAA;MAEA,CAAAuC,iBAAA,GAAArB,QAAQ,CAACgB,OAAO,MAAAK,IAAAA,IAAAA,iBAAA,KAAhBA,KAAAA,CAAAA,IAAAA,iBAAA,CAAkBC,cAAc,CAAC;AAAEC,QAAAA,KAAK,EAAE,SAAS;AAAEC,QAAAA,MAAM,EAAE,SAAA;AAAU,OAAC,CAAC,CAAA;AAC7E,KAAC,EAAE,CAAC1C,QAAQ,CAAC,CAAC,CAAA;AAEd,IAAA,IAAM2C,WAAW,GAAGC,iBAAW,CAC3B,UAACC,KAAK,EAAK;AACP,MAAA,IAAI3C,QAAQ,EAAE;AACV,QAAA,OAAA;AACJ,OAAA;MAEA,IAAI,CAAC8B,gBAAgB,IAAId,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,CAAEgB,OAAO,EAAE;AACxChB,QAAAA,QAAQ,CAACgB,OAAO,CAACY,QAAQ,CAAC;AACtBC,UAAAA,GAAG,EAAE7B,QAAQ,CAACgB,OAAO,CAACc,SAAS;AAC/BC,UAAAA,QAAQ,EAAE,QAAA;AACd,SAAC,CAAC,CAAA;AAEF,QAAA,OAAA;AACJ,OAAA;MAEA,IAAI,CAAC3B,IAAI,EAAE;AACP,QAAA,OAAA;AACJ,OAAA;MAEA,IAAM4B,UAAU,GAAG5B,IAAI,CAAC6B,KAAK,CAACC,SAAS,CAAC,UAACC,OAAO,EAAA;AAAA,QAAA,OAAKA,OAAO,CAACnB,OAAO,KAAKW,KAAK,CAACS,MAAM,CAAA;OAAC,CAAA,CAAA;AAEtF,MAAA,IAAIJ,UAAU,KAAK5B,IAAI,CAACY,OAAO,EAAE;AAC7B,QAAA,OAAA;AACJ,OAAA;AAEA3B,MAAAA,aAAa,aAAbA,aAAa,KAAA,KAAA,CAAA,IAAbA,aAAa,CAAG2C,UAAU,CAAC,CAAA;AAC3B5B,MAAAA,IAAI,CAACiC,UAAU,CAACL,UAAU,CAAC,CAAA;KAC9B,EACD,CAAC5B,IAAI,EAAEJ,QAAQ,EAAEX,aAAa,EAAEL,QAAQ,CAC5C,CAAC,CAAA;AAED,IAAA,IAAMsD,WAAW,GAAG,SAAdA,WAAWA,CAAIX,KAA0C,EAAK;MAChE,IAAI,CAAClC,OAAO,EAAE;AACV,QAAA,OAAA;AACJ,OAAA;MAEAA,OAAO,CAACkC,KAAK,CAAC,CAAA;KACjB,CAAA;AAED,IAAA,oBACIY,sBAAA,CAAAC,aAAA,CAAChE,IAAI,EAAAiE,iCAAA,CAAA;AACDvC,MAAAA,GAAG,EAAEA,GAAI;AACTlB,MAAAA,QAAQ,EAAEA,QAAS;AACnBuB,MAAAA,IAAI,EAAEA,IAAK;AACX1B,MAAAA,IAAI,EAAEA,IAAK;AACXD,MAAAA,IAAI,EAAEA,IAAK;AACX8D,MAAAA,OAAO,EAAEjB,WAAY;AACrBlC,MAAAA,QAAQ,EAAEuB,gBAAgB,GAAGC,kBAAkB,GAAGxB,QAAS;MAC3DC,SAAS,EAAEmD,QAAE,CAACnC,aAAa,EAAEI,aAAa,EAAEpB,SAAS,CAAE;AACvDC,MAAAA,OAAO,EAAE6C,WAAAA;AAAY,KAAA,EACjBzC,IAAI,EAAA;AACR+C,MAAAA,KAAK,EAAAC,uCAAA,CAAAA,uCAAA,CACEhD,EAAAA,EAAAA,IAAI,CAAC+C,KAAK,CAAA,EAAA,EAAA,EAAA;AACbhD,QAAAA,QAAQ,EAARA,QAAAA;AAAQ,OAAA,CAAA;AACV,KAAA,CAAA,eAEF2C,sBAAA,CAAAC,aAAA,CAAAD,sBAAA,CAAAO,QAAA,EACK3D,IAAAA,EAAAA,WAAW,iBAAIoD,sBAAA,CAAAC,aAAA,CAACO,kCAAW,EAAA;MAACvD,SAAS,EAAEiB,cAAO,CAACuC,cAAAA;AAAe,KAAA,EAAE7D,WAAyB,CAAC,eAC3FoD,sBAAA,CAAAC,aAAA,CAACS,oCAAa,EAAA;MAACzD,SAAS,EAAEiB,cAAO,CAACyC,UAAAA;KAAajE,EAAAA,QAAwB,CAAC,EACvE,CAACG,YAAY,IAAIF,KAAK,iBAAIqD,sBAAA,CAAAC,aAAA,CAACW,mCAAY,QAAEjE,KAAoB,CAAC,EAC9D,CAACA,KAAK,IAAIE,YAAY,iBACnBmD,sBAAA,CAAAC,aAAA,CAACY,mCAAY,EAAA;MAAC5D,SAAS,EAAEiB,cAAO,CAAC4C,eAAAA;KAAkBjE,EAAAA,YAA2B,CAEpF,CACA,CAAC,CAAA;AAEf,GAAC,CAAC,CAAA;AAAA,EAAA;AAEC,IAAMkE,qBAAqB,GAAG;AACjCC,EAAAA,IAAI,EAAE,iBAAiB;AACvBC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAElF,mBAAmB;AAC3BmF,EAAAA,IAAI,EAAJA,2BAAI;AACJC,EAAAA,UAAU,EAAE;AACR/E,IAAAA,IAAI,EAAE;AACFgF,MAAAA,GAAG,EAAEC,SAAAA;KACR;AACDhF,IAAAA,IAAI,EAAE;AACF+E,MAAAA,GAAG,EAAEE,WAAAA;KACR;AACD9E,IAAAA,QAAQ,EAAE;AACN4E,MAAAA,GAAG,EAAEG,WAAW;AAChBC,MAAAA,KAAK,EAAE,IAAA;AACX,KAAA;GACH;AACDC,EAAAA,QAAQ,EAAE;AACNpF,IAAAA,IAAI,EAAE,SAAA;AACV,GAAA;AACJ;;;;;"}
@@ -6,8 +6,9 @@ var _rollupPluginBabelHelpers = require('../../../../../_virtual/_rollupPluginBa
6
6
  var React = require('react');
7
7
  var plasmaCore = require('@salutejs/plasma-core');
8
8
  var tokens = require('../../../tokens.js');
9
- var index = require('../../../../../utils/index.js');
9
+ var index$1 = require('../../../../../utils/index.js');
10
10
  var TabsContext = require('../../../TabsContext.js');
11
+ var index = require('../../../utils/index.js');
11
12
  var VerticalTabs_styles = require('./VerticalTabs.styles.js');
12
13
  var base = require('./variations/_size/base.js');
13
14
  var base$1 = require('./variations/_view/base.js');
@@ -38,7 +39,7 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
38
39
  size = props.size,
39
40
  view = props.view,
40
41
  children = props.children,
41
- index$1 = props.index,
42
+ index$2 = props.index,
42
43
  className = props.className,
43
44
  orientation = props.orientation,
44
45
  _props$hasDivider = props.hasDivider,
@@ -53,7 +54,7 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
53
54
  lastItemVisible = _useState4[0],
54
55
  setLastItemVisible = _useState4[1];
55
56
  var refs = React.useMemo(function () {
56
- return new TabsContext.TabItemRefs(index$1);
57
+ return new TabsContext.TabItemRefs(index$2);
57
58
  }, []);
58
59
  var uniqId = plasmaCore.safeUseId();
59
60
  var tabsId = id || uniqId;
@@ -71,13 +72,7 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
71
72
  return;
72
73
  }
73
74
  var scrollTop = Math.round(scrollRef.current.scrollTop);
74
- var firstOverflowingTab = refs.items.slice().reverse().find(function (item) {
75
- if (!item.current || item.current.offsetTop === undefined) {
76
- return;
77
- }
78
- var tabStartY = item.current.offsetTop;
79
- return tabStartY < scrollTop;
80
- });
75
+ var firstOverflowingTab = index.getFirstOverflowingTab(refs.items.slice().reverse(), scrollTop);
81
76
  firstOverflowingTab === null || firstOverflowingTab === void 0 || (_firstOverflowingTab$ = firstOverflowingTab.current) === null || _firstOverflowingTab$ === void 0 || _firstOverflowingTab$.scrollIntoView({
82
77
  block: 'start',
83
78
  inline: 'nearest'
@@ -89,13 +84,7 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
89
84
  return;
90
85
  }
91
86
  var scrollBottom = Math.round(scrollRef.current.scrollTop + scrollRef.current.clientHeight);
92
- var lastOverflowingTab = refs.items.find(function (item) {
93
- if (!item.current || item.current.offsetTop === undefined) {
94
- return;
95
- }
96
- var tabEndY = item.current.offsetTop + item.current.offsetHeight;
97
- return tabEndY > scrollBottom;
98
- });
87
+ var lastOverflowingTab = index.getLastOverflowingTab(refs.items, scrollBottom);
99
88
  lastOverflowingTab === null || lastOverflowingTab === void 0 || (_lastOverflowingTab$c = lastOverflowingTab.current) === null || _lastOverflowingTab$c === void 0 || _lastOverflowingTab$c.scrollIntoView({
100
89
  block: 'end',
101
90
  inline: 'nearest'
@@ -128,7 +117,7 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
128
117
  setLastItemVisible(scrollTop >= maxScrollTop);
129
118
  }, [setFirstItemVisible, setLastItemVisible]);
130
119
  var onKeyDown = React.useCallback(function (event) {
131
- if (index$1 === undefined) {
120
+ if (index$2 === undefined) {
132
121
  return;
133
122
  }
134
123
  var minIndex = 0;
@@ -139,10 +128,10 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
139
128
  nextIndex = maxIndex;
140
129
  break;
141
130
  case Keys.up:
142
- nextIndex = index$1 > minIndex ? index$1 - 1 : index$1;
131
+ nextIndex = index$2 > minIndex ? index$2 - 1 : index$2;
143
132
  break;
144
133
  case Keys.down:
145
- nextIndex = index$1 < maxIndex ? index$1 + 1 : index$1;
134
+ nextIndex = index$2 < maxIndex ? index$2 + 1 : index$2;
146
135
  break;
147
136
  case Keys.home:
148
137
  nextIndex = minIndex;
@@ -150,7 +139,7 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
150
139
  default:
151
140
  return;
152
141
  }
153
- if (nextIndex !== index$1) {
142
+ if (nextIndex !== index$2) {
154
143
  var _refs$items$nextIndex, _refs$items$nextIndex2;
155
144
  event.preventDefault();
156
145
  (_refs$items$nextIndex = refs.items[nextIndex].current) === null || _refs$items$nextIndex === void 0 || _refs$items$nextIndex.focus();
@@ -160,19 +149,23 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
160
149
  behavior: 'smooth'
161
150
  });
162
151
  }
163
- }, [index$1]);
164
- React.useEffect(function () {
152
+ }, [index$2]);
153
+ React.useLayoutEffect(function () {
165
154
  var _scrollRef$current, _scrollRef$current2;
166
155
  setLastItemVisible(((_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.scrollHeight) === ((_scrollRef$current2 = scrollRef.current) === null || _scrollRef$current2 === void 0 ? void 0 : _scrollRef$current2.clientHeight));
167
156
  }, []);
168
157
 
169
158
  // Этот хук компенсирует появление верхней стрелки при прокрутке
170
- React.useEffect(function () {
159
+ React.useLayoutEffect(function () {
160
+ var _lastOverflowingTab$c2;
171
161
  if (firstItemVisible || !scrollRef.current || !upArrowRef.current) {
172
162
  return;
173
163
  }
174
- scrollRef.current.scrollTo({
175
- top: Math.round(scrollRef.current.scrollTop + upArrowRef.current.clientHeight)
164
+ var scrollBottom = Math.round(scrollRef.current.scrollTop + scrollRef.current.clientHeight);
165
+ var lastOverflowingTab = index.getLastOverflowingTab(refs.items, scrollBottom);
166
+ lastOverflowingTab === null || lastOverflowingTab === void 0 || (_lastOverflowingTab$c2 = lastOverflowingTab.current) === null || _lastOverflowingTab$c2 === void 0 || _lastOverflowingTab$c2.scrollIntoView({
167
+ block: 'end',
168
+ inline: 'nearest'
176
169
  });
177
170
  }, [firstItemVisible, scrollRef, upArrowRef]);
178
171
  return /*#__PURE__*/React__default.default.createElement(TabsContext.TabsContext.Provider, {
@@ -184,11 +177,11 @@ var verticalTabsRoot = function verticalTabsRoot(Root) {
184
177
  id: tabsId,
185
178
  ref: outerRef,
186
179
  disabled: disabled,
187
- className: index.cx(hasTopArrowClass, hasBottomArrowClass, noDividerClass, className),
180
+ className: index$1.cx(hasTopArrowClass, hasBottomArrowClass, noDividerClass, className),
188
181
  onKeyDown: onKeyDown,
189
182
  orientation: orientation
190
183
  }, rest), !firstItemVisible && PreviousButton, /*#__PURE__*/React__default.default.createElement(VerticalTabs_styles.StyledContentWrapper, {
191
- className: index.cx(clipScrollClass, clipShowAllClass),
184
+ className: index$1.cx(clipScrollClass, clipShowAllClass),
192
185
  ref: scrollRef,
193
186
  onScroll: handleScroll
194
187
  }, /*#__PURE__*/React__default.default.createElement(VerticalTabs_styles.StyledContent, {