@elliemae/ds-tabs 2.1.0 → 2.2.0-alpha.3

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 (102) hide show
  1. package/cjs/DSTabs.js +58 -40
  2. package/cjs/DSTabs.js.map +7 -0
  3. package/cjs/DSTabsCTX.js +51 -25
  4. package/cjs/DSTabsCTX.js.map +7 -0
  5. package/cjs/DSTabsDatatestid.js +42 -14
  6. package/cjs/DSTabsDatatestid.js.map +7 -0
  7. package/cjs/DSTabsTypes.js +27 -2
  8. package/cjs/DSTabsTypes.js.map +7 -0
  9. package/cjs/config/useCrossRef.js +38 -11
  10. package/cjs/config/useCrossRef.js.map +7 -0
  11. package/cjs/config/useTabs.js +53 -36
  12. package/cjs/config/useTabs.js.map +7 -0
  13. package/cjs/defaultProps.js +39 -13
  14. package/cjs/defaultProps.js.map +7 -0
  15. package/cjs/exportsRelated/DSTab.js +46 -32
  16. package/cjs/exportsRelated/DSTab.js.map +7 -0
  17. package/cjs/index.js +38 -17
  18. package/cjs/index.js.map +7 -0
  19. package/cjs/parts/carousel/Carousel.js +61 -53
  20. package/cjs/parts/carousel/Carousel.js.map +7 -0
  21. package/cjs/parts/carousel/styles.js +77 -63
  22. package/cjs/parts/carousel/styles.js.map +7 -0
  23. package/cjs/parts/carousel/useCarousel.js +51 -49
  24. package/cjs/parts/carousel/useCarousel.js.map +7 -0
  25. package/cjs/parts/carousel/useCarouselCallbacks.js +53 -36
  26. package/cjs/parts/carousel/useCarouselCallbacks.js.map +7 -0
  27. package/cjs/parts/tabBar/TabBar.js +124 -120
  28. package/cjs/parts/tabBar/TabBar.js.map +7 -0
  29. package/cjs/parts/tabBar/styles.js +289 -195
  30. package/cjs/parts/tabBar/styles.js.map +7 -0
  31. package/cjs/parts/tabBar/useTabBar.js +67 -55
  32. package/cjs/parts/tabBar/useTabBar.js.map +7 -0
  33. package/cjs/parts/tabsContent/TabsContent.js +49 -45
  34. package/cjs/parts/tabsContent/TabsContent.js.map +7 -0
  35. package/cjs/parts/tabsContent/styles.js +39 -15
  36. package/cjs/parts/tabsContent/styles.js.map +7 -0
  37. package/cjs/parts/tabsPanel/TabsPanels.js +60 -58
  38. package/cjs/parts/tabsPanel/TabsPanels.js.map +7 -0
  39. package/cjs/parts/tabsPanel/styles.js +43 -23
  40. package/cjs/parts/tabsPanel/styles.js.map +7 -0
  41. package/cjs/propTypes.js +54 -29
  42. package/cjs/propTypes.js.map +7 -0
  43. package/cjs/utils/constants.js +44 -16
  44. package/cjs/utils/constants.js.map +7 -0
  45. package/cjs/utils/helpers.js +46 -22
  46. package/cjs/utils/helpers.js.map +7 -0
  47. package/cjs/utils/hooks/useKeyboardNavigation.js +59 -43
  48. package/cjs/utils/hooks/useKeyboardNavigation.js.map +7 -0
  49. package/cjs/utils/hooks/useTabsCallbacks.js +49 -33
  50. package/cjs/utils/hooks/useTabsCallbacks.js.map +7 -0
  51. package/esm/DSTabs.js +24 -25
  52. package/esm/DSTabs.js.map +7 -0
  53. package/esm/DSTabsCTX.js +22 -20
  54. package/esm/DSTabsCTX.js.map +7 -0
  55. package/esm/DSTabsDatatestid.js +13 -10
  56. package/esm/DSTabsDatatestid.js.map +7 -0
  57. package/esm/DSTabsTypes.js +2 -1
  58. package/esm/DSTabsTypes.js.map +7 -0
  59. package/esm/config/useCrossRef.js +6 -4
  60. package/esm/config/useCrossRef.js.map +7 -0
  61. package/esm/config/useTabs.js +14 -22
  62. package/esm/config/useTabs.js.map +7 -0
  63. package/esm/defaultProps.js +9 -8
  64. package/esm/defaultProps.js.map +7 -0
  65. package/esm/exportsRelated/DSTab.js +15 -19
  66. package/esm/exportsRelated/DSTab.js.map +7 -0
  67. package/esm/index.js +9 -4
  68. package/esm/index.js.map +7 -0
  69. package/esm/parts/carousel/Carousel.js +25 -38
  70. package/esm/parts/carousel/Carousel.js.map +7 -0
  71. package/esm/parts/carousel/styles.js +48 -52
  72. package/esm/parts/carousel/styles.js.map +7 -0
  73. package/esm/parts/carousel/useCarousel.js +15 -34
  74. package/esm/parts/carousel/useCarousel.js.map +7 -0
  75. package/esm/parts/carousel/useCarouselCallbacks.js +20 -28
  76. package/esm/parts/carousel/useCarouselCallbacks.js.map +7 -0
  77. package/esm/parts/tabBar/TabBar.js +93 -102
  78. package/esm/parts/tabBar/TabBar.js.map +7 -0
  79. package/esm/parts/tabBar/styles.js +262 -183
  80. package/esm/parts/tabBar/styles.js.map +7 -0
  81. package/esm/parts/tabBar/useTabBar.js +27 -36
  82. package/esm/parts/tabBar/useTabBar.js.map +7 -0
  83. package/esm/parts/tabsContent/TabsContent.js +19 -35
  84. package/esm/parts/tabsContent/TabsContent.js.map +7 -0
  85. package/esm/parts/tabsContent/styles.js +10 -7
  86. package/esm/parts/tabsContent/styles.js.map +7 -0
  87. package/esm/parts/tabsPanel/TabsPanels.js +28 -45
  88. package/esm/parts/tabsPanel/TabsPanels.js.map +7 -0
  89. package/esm/parts/tabsPanel/styles.js +14 -15
  90. package/esm/parts/tabsPanel/styles.js.map +7 -0
  91. package/esm/propTypes.js +25 -24
  92. package/esm/propTypes.js.map +7 -0
  93. package/esm/utils/constants.js +15 -8
  94. package/esm/utils/constants.js.map +7 -0
  95. package/esm/utils/helpers.js +16 -11
  96. package/esm/utils/helpers.js.map +7 -0
  97. package/esm/utils/hooks/useKeyboardNavigation.js +30 -39
  98. package/esm/utils/hooks/useKeyboardNavigation.js.map +7 -0
  99. package/esm/utils/hooks/useTabsCallbacks.js +18 -27
  100. package/esm/utils/hooks/useTabsCallbacks.js.map +7 -0
  101. package/package.json +6 -6
  102. package/types/DSTabs.d.ts +2 -2
@@ -1,18 +1,13 @@
1
- import { useContext, useCallback } from 'react';
2
- import { isElementVisibleCarousel } from '../../utils/helpers.js';
3
- import { DSTabsContext } from '../../DSTabsCTX.js';
4
-
5
- /* eslint-disable max-statements */
6
- const useCarouselCallbacks = _ref => {
7
- let {
8
- getVisibleItemsOffset,
9
- updateIndicatorStyle,
10
- recalcChevrons
11
- } = _ref;
12
- const {
13
- focusableTabsRef,
14
- carouselOnlyListRef
15
- } = useContext(DSTabsContext);
1
+ import * as React from "react";
2
+ import { useCallback, useContext } from "react";
3
+ import { isElementVisibleCarousel } from "../../utils/helpers";
4
+ import { DSTabsContext } from "../../DSTabsCTX";
5
+ const useCarouselCallbacks = ({
6
+ getVisibleItemsOffset,
7
+ updateIndicatorStyle,
8
+ recalcChevrons
9
+ }) => {
10
+ const { focusableTabsRef, carouselOnlyListRef } = useContext(DSTabsContext);
16
11
  const rightButtonOnClick = useCallback(() => {
17
12
  if (carouselOnlyListRef.current) {
18
13
  carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();
@@ -25,30 +20,25 @@ const useCarouselCallbacks = _ref => {
25
20
  }, [getVisibleItemsOffset, carouselOnlyListRef]);
26
21
  const handleOnScroll = useCallback(() => {
27
22
  recalcChevrons();
28
- if (updateIndicatorStyle) updateIndicatorStyle();
23
+ if (updateIndicatorStyle)
24
+ updateIndicatorStyle();
29
25
  }, [recalcChevrons, updateIndicatorStyle]);
30
- const handleOnClick = useCallback(_ref2 => {
31
- let {
32
- target
33
- } = _ref2;
34
-
35
- if (focusableTabsRef.current && target.getAttribute('role') === 'tab') {
26
+ const handleOnClick = useCallback(({ target }) => {
27
+ if (focusableTabsRef.current && target.getAttribute("role") === "tab") {
36
28
  const tabList = carouselOnlyListRef.current;
37
29
  const tabButton = target;
38
30
  const tabButtonDimensions = tabButton.getBoundingClientRect();
39
- const tabListDimensions = tabList === null || tabList === void 0 ? void 0 : tabList.getBoundingClientRect();
31
+ const tabListDimensions = tabList?.getBoundingClientRect();
40
32
  const tabButtonIndex = tabButton.dataset.index;
41
33
  const lastItemIndex = focusableTabsRef.current.length.toString();
42
34
  const magicNumber = 34;
43
- const firstOrLastItem = tabButtonIndex === '0' || tabButtonIndex === lastItemIndex;
44
-
35
+ const firstOrLastItem = tabButtonIndex === "0" || tabButtonIndex === lastItemIndex;
45
36
  if (!isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
46
37
  const containerWidth = tabListDimensions.width;
47
38
  const halfContainer = containerWidth / 2;
48
39
  const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;
49
40
  const positionInContainer = elementScrollPosition % containerWidth;
50
41
  const width = tabButton.offsetWidth + magicNumber;
51
-
52
42
  if (positionInContainer > halfContainer) {
53
43
  carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;
54
44
  } else {
@@ -64,5 +54,7 @@ const useCarouselCallbacks = _ref => {
64
54
  handleOnScroll
65
55
  };
66
56
  };
67
-
68
- export { useCarouselCallbacks };
57
+ export {
58
+ useCarouselCallbacks
59
+ };
60
+ //# sourceMappingURL=useCarouselCallbacks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/carousel/useCarouselCallbacks.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport { useCallback, useContext } from 'react';\nimport type { MouseEvent } from 'react';\nimport { isElementVisibleCarousel } from '../../utils/helpers';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport type { UseCarouselCallbacksPropsT, UseCarouselCallbacksReturnTypeT } from '../../DSTabsTypes';\n\nexport const useCarouselCallbacks = ({\n getVisibleItemsOffset,\n updateIndicatorStyle,\n recalcChevrons,\n}: UseCarouselCallbacksPropsT): UseCarouselCallbacksReturnTypeT => {\n const { focusableTabsRef, carouselOnlyListRef } = useContext(DSTabsContext);\n\n const rightButtonOnClick = useCallback(() => {\n if (carouselOnlyListRef.current) {\n carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();\n }\n }, [getVisibleItemsOffset, carouselOnlyListRef]);\n\n const leftButtonOnClick = useCallback(() => {\n if (carouselOnlyListRef.current) {\n carouselOnlyListRef.current.scrollLeft -= getVisibleItemsOffset();\n }\n }, [getVisibleItemsOffset, carouselOnlyListRef]);\n\n const handleOnScroll = useCallback(() => {\n recalcChevrons();\n if (updateIndicatorStyle) updateIndicatorStyle();\n }, [recalcChevrons, updateIndicatorStyle]);\n\n const handleOnClick = useCallback(\n ({ target }: MouseEvent) => {\n if (focusableTabsRef.current && (target as HTMLButtonElement).getAttribute('role') === 'tab') {\n const tabList = carouselOnlyListRef.current;\n const tabButton = target as HTMLButtonElement;\n const tabButtonDimensions = tabButton.getBoundingClientRect();\n const tabListDimensions = tabList?.getBoundingClientRect();\n const tabButtonIndex = tabButton.dataset.index as string;\n const lastItemIndex = focusableTabsRef.current.length.toString();\n const magicNumber = 34;\n\n const firstOrLastItem = tabButtonIndex === '0' || tabButtonIndex === lastItemIndex;\n\n if (\n !isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) &&\n tabListDimensions &&\n carouselOnlyListRef.current\n ) {\n const containerWidth = tabListDimensions.width;\n const halfContainer = containerWidth / 2;\n const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;\n const positionInContainer = elementScrollPosition % containerWidth;\n const width = tabButton.offsetWidth + magicNumber;\n\n if (positionInContainer > halfContainer) {\n carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;\n } else {\n carouselOnlyListRef.current.scrollLeft += positionInContainer - magicNumber;\n }\n }\n }\n },\n [focusableTabsRef, carouselOnlyListRef],\n );\n\n return {\n handleOnClick,\n rightButtonOnClick,\n leftButtonOnClick,\n handleOnScroll,\n };\n};\n"],
5
+ "mappings": "AAAA;ACCA;AAEA;AACA;AAGO,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,MACiE;AACjE,QAAM,EAAE,kBAAkB,wBAAwB,WAAW;AAE7D,QAAM,qBAAqB,YAAY,MAAM;AAC3C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc;AAAA;AAAA,KAE3C,CAAC,uBAAuB;AAE3B,QAAM,oBAAoB,YAAY,MAAM;AAC1C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc;AAAA;AAAA,KAE3C,CAAC,uBAAuB;AAE3B,QAAM,iBAAiB,YAAY,MAAM;AACvC;AACA,QAAI;AAAsB;AAAA,KACzB,CAAC,gBAAgB;AAEpB,QAAM,gBAAgB,YACpB,CAAC,EAAE,aAAyB;AAC1B,QAAI,iBAAiB,WAAY,OAA6B,aAAa,YAAY,OAAO;AAC5F,YAAM,UAAU,oBAAoB;AACpC,YAAM,YAAY;AAClB,YAAM,sBAAsB,UAAU;AACtC,YAAM,oBAAoB,SAAS;AACnC,YAAM,iBAAiB,UAAU,QAAQ;AACzC,YAAM,gBAAgB,iBAAiB,QAAQ,OAAO;AACtD,YAAM,cAAc;AAEpB,YAAM,kBAAkB,mBAAmB,OAAO,mBAAmB;AAErE,UACE,CAAC,yBAAyB,WAAW,SAAS,oBAC9C,qBACA,oBAAoB,SACpB;AACA,cAAM,iBAAiB,kBAAkB;AACzC,cAAM,gBAAgB,iBAAiB;AACvC,cAAM,wBAAwB,oBAAoB,OAAO,kBAAkB;AAC3E,cAAM,sBAAsB,wBAAwB;AACpD,cAAM,QAAQ,UAAU,cAAc;AAEtC,YAAI,sBAAsB,eAAe;AACvC,8BAAoB,QAAQ,cAAc,QAAQ,sBAAsB;AAAA,eACnE;AACL,8BAAoB,QAAQ,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,KAKxE,CAAC,kBAAkB;AAGrB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -1,18 +1,20 @@
1
- import _jsx from '@babel/runtime/helpers/esm/jsx';
2
- import 'core-js/modules/esnext.async-iterator.map.js';
3
- import 'core-js/modules/esnext.iterator.map.js';
4
- import React, { useContext, useMemo } from 'react';
5
- import { Carousel } from '../carousel/Carousel.js';
6
- import { useTabBar } from './useTabBar.js';
7
- import { StyledTabButton, StyledRequiredMark, StyledSubTabsList, StyledTabList, StyledTabWrapper, StyledSelectionIndicator } from './styles.js';
8
- import { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX.js';
9
- import { useKeyboardNavigation } from '../../utils/hooks/useKeyboardNavigation.js';
10
- import { TabTypes } from '../../utils/constants.js';
11
- import { useTabsCallbacks } from '../../utils/hooks/useTabsCallbacks.js';
12
- import { DSTabsDatatestid } from '../../DSTabsDatatestid.js';
13
- import { jsxs, jsx } from 'react/jsx-runtime';
14
-
15
- var _StyledRequiredMark;
1
+ import * as React from "react";
2
+ import React2, { useMemo, useContext } from "react";
3
+ import { Carousel } from "../carousel/Carousel";
4
+ import { useTabBar } from "./useTabBar";
5
+ import {
6
+ StyledTabButton,
7
+ StyledTabList,
8
+ StyledTabWrapper,
9
+ StyledSelectionIndicator,
10
+ StyledSubTabsList,
11
+ StyledRequiredMark
12
+ } from "./styles";
13
+ import { DSTabsContext, DSTabsCrossRefContext } from "../../DSTabsCTX";
14
+ import { useKeyboardNavigation } from "../../utils/hooks/useKeyboardNavigation";
15
+ import { TabTypes } from "../../utils/constants";
16
+ import { useTabsCallbacks } from "../../utils/hooks/useTabsCallbacks";
17
+ import { DSTabsDatatestid } from "../../DSTabsDatatestid";
16
18
  const TabBar = () => {
17
19
  const {
18
20
  tabsRef,
@@ -20,132 +22,121 @@ const TabBar = () => {
20
22
  tabsListRef,
21
23
  tabsRefAsArray,
22
24
  actualActiveTab,
23
- props: {
24
- type,
25
- fixedTabsHeaders,
26
- withCarousel,
27
- isDSMobile,
28
- showSeparator,
29
- children: tabs
30
- }
25
+ props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs }
31
26
  } = useContext(DSTabsContext);
32
- const {
33
- lastTabInternalRef,
34
- firstSubtabInternalRef
35
- } = useContext(DSTabsCrossRefContext);
36
- const {
37
- handleOnTabChange
38
- } = useTabsCallbacks();
39
- const {
40
- handleOnKeyDown
41
- } = useKeyboardNavigation();
42
- const {
43
- indicatorStyle,
44
- mobileGradients,
45
- updateMobileGradients,
46
- updateIndicatorStyle
47
- } = useTabBar();
27
+ const { lastTabInternalRef, firstSubtabInternalRef } = useContext(DSTabsCrossRefContext);
28
+ const { handleOnTabChange } = useTabsCallbacks();
29
+ const { handleOnKeyDown } = useKeyboardNavigation();
30
+ const { indicatorStyle, mobileGradients, updateMobileGradients, updateIndicatorStyle } = useTabBar();
48
31
  const renderTabs = useMemo(() => {
49
32
  const availableTabIndexes = [];
50
- return React.Children.map(tabs, (tab, index) => {
51
- const {
52
- tabId = '',
53
- title = '',
54
- style,
55
- required = false,
56
- disabled = false,
57
- ref,
58
- onClick,
59
- onKeyDown
60
- } = tab.props;
61
- if (!disabled) availableTabIndexes.push(index);
62
- return /*#__PURE__*/jsxs(StyledTabButton, {
33
+ return React2.Children.map(tabs, (tab, index) => {
34
+ const { tabId = "", title = "", style, required = false, disabled = false, ref, onClick, onKeyDown } = tab.props;
35
+ if (!disabled)
36
+ availableTabIndexes.push(index);
37
+ return /* @__PURE__ */ React2.createElement(StyledTabButton, {
38
+ key: tabId,
63
39
  role: "tab",
64
- ref: t => {
40
+ ref: (t) => {
65
41
  if (tabsRefAsArray.current && focusableTabsRef.current && tabsRef.current) {
66
42
  tabsRefAsArray.current[index] = t;
67
- if (!disabled && !focusableTabsRef.current.includes(t)) focusableTabsRef.current.push(t);
43
+ if (!disabled && !focusableTabsRef.current.includes(t))
44
+ focusableTabsRef.current.push(t);
68
45
  tabsRef.current[index] = t;
69
-
70
46
  if (type === TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {
71
47
  firstSubtabInternalRef.current = t;
72
48
  }
73
-
74
49
  if (type !== TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {
75
50
  lastTabInternalRef.current = t;
76
51
  }
77
-
78
- if (ref) ref.current = t;
52
+ if (ref)
53
+ ref.current = t;
79
54
  }
80
55
  },
81
56
  type: "button",
82
57
  "aria-controls": tabId,
83
58
  "aria-selected": actualActiveTab === tabId,
84
59
  "aria-disabled": disabled,
85
- "aria-labelledby": "".concat(tabId, "-label"),
86
- isDSMobile: isDSMobile,
87
- fixedTabsHeaders: fixedTabsHeaders,
60
+ "aria-labelledby": `${tabId}-label`,
61
+ isDSMobile,
62
+ fixedTabsHeaders,
88
63
  tabType: type,
89
- title: title,
64
+ title,
90
65
  "data-required": required,
91
66
  "data-tab-id": tabId,
92
67
  "data-index": index,
93
- withCarousel: withCarousel,
68
+ withCarousel,
94
69
  isActive: actualActiveTab === tabId,
95
- disabled: disabled,
70
+ disabled,
96
71
  showSeparator: showSeparator && type !== TabTypes.NORMAL,
97
72
  "data-testid": type === TabTypes.NORMAL ? DSTabsDatatestid.TAB_BUTTON : DSTabsDatatestid.SUBTAB_BUTTON,
98
- id: "".concat(tabId, "-label"),
99
- onClick: e => {
73
+ id: `${tabId}-label`,
74
+ onClick: (e) => {
100
75
  if (!disabled) {
101
76
  handleOnTabChange(tabId, e);
102
77
  updateIndicatorStyle();
103
78
  }
104
-
105
- if (onClick && !disabled) onClick(tabId, e);
79
+ if (onClick && !disabled)
80
+ onClick(tabId, e);
106
81
  },
107
- onKeyDown: e => {
108
- if (e.key === 'Enter') e.stopPropagation();
109
- if (!disabled) handleOnKeyDown(e);
110
- if (onKeyDown && !disabled) onKeyDown(e);
82
+ onKeyDown: (e) => {
83
+ if (e.key === "Enter")
84
+ e.stopPropagation();
85
+ if (!disabled)
86
+ handleOnKeyDown(e);
87
+ if (onKeyDown && !disabled)
88
+ onKeyDown(e);
111
89
  },
112
- style: style,
113
- children: [title, required && (_StyledRequiredMark || (_StyledRequiredMark = /*#__PURE__*/_jsx(StyledRequiredMark, {}, void 0, "\u25CF")))]
114
- }, tabId);
90
+ style
91
+ }, title, required && /* @__PURE__ */ React2.createElement(StyledRequiredMark, null, "\u25CF"));
115
92
  });
116
- }, [tabs, actualActiveTab, isDSMobile, fixedTabsHeaders, type, withCarousel, showSeparator, tabsRefAsArray, focusableTabsRef, tabsRef, firstSubtabInternalRef, lastTabInternalRef, handleOnTabChange, updateIndicatorStyle, handleOnKeyDown]);
117
-
93
+ }, [
94
+ tabs,
95
+ actualActiveTab,
96
+ isDSMobile,
97
+ fixedTabsHeaders,
98
+ type,
99
+ withCarousel,
100
+ showSeparator,
101
+ tabsRefAsArray,
102
+ focusableTabsRef,
103
+ tabsRef,
104
+ firstSubtabInternalRef,
105
+ lastTabInternalRef,
106
+ handleOnTabChange,
107
+ updateIndicatorStyle,
108
+ handleOnKeyDown
109
+ ]);
118
110
  if (type === TabTypes.SUBTABS && !isDSMobile) {
119
- return /*#__PURE__*/jsx(StyledSubTabsList, {
120
- withCarousel: withCarousel,
111
+ return /* @__PURE__ */ React2.createElement(StyledSubTabsList, {
112
+ withCarousel,
121
113
  "data-testid": DSTabsDatatestid.SUB_TAB_LIST,
122
114
  ref: tabsListRef,
123
- role: "tablist",
124
- children: withCarousel ? /*#__PURE__*/_jsx(Carousel, {}, void 0, renderTabs) : renderTabs
125
- });
115
+ role: "tablist"
116
+ }, withCarousel ? /* @__PURE__ */ React2.createElement(Carousel, null, renderTabs) : renderTabs);
126
117
  }
127
-
128
- return /*#__PURE__*/jsxs(StyledTabList, {
129
- withCarousel: withCarousel,
118
+ return /* @__PURE__ */ React2.createElement(StyledTabList, {
119
+ withCarousel,
130
120
  ref: tabsListRef,
131
121
  role: "tablist",
132
122
  "data-testid": DSTabsDatatestid.TAB_LIST,
133
- isDSMobile: isDSMobile,
134
- fixedTabsHeaders: fixedTabsHeaders,
135
- mobileGradients: mobileGradients,
123
+ isDSMobile,
124
+ fixedTabsHeaders,
125
+ mobileGradients,
136
126
  onScroll: updateMobileGradients,
137
- indicatorStyle: indicatorStyle,
138
- tabType: type,
139
- children: [/*#__PURE__*/_jsx(StyledTabWrapper, {
140
- isDSMobile: isDSMobile,
141
- fixedTabsHeaders: fixedTabsHeaders
142
- }, void 0, !isDSMobile && withCarousel ? /*#__PURE__*/_jsx(Carousel, {
143
- updateIndicatorStyle: updateIndicatorStyle
144
- }, void 0, renderTabs) : renderTabs), /*#__PURE__*/_jsx(StyledSelectionIndicator, {
145
- isDSMobile: isDSMobile,
146
- tabType: type
147
- })]
148
- });
127
+ indicatorStyle,
128
+ tabType: type
129
+ }, /* @__PURE__ */ React2.createElement(StyledTabWrapper, {
130
+ isDSMobile,
131
+ fixedTabsHeaders
132
+ }, !isDSMobile && withCarousel ? /* @__PURE__ */ React2.createElement(Carousel, {
133
+ updateIndicatorStyle
134
+ }, renderTabs) : renderTabs), /* @__PURE__ */ React2.createElement(StyledSelectionIndicator, {
135
+ isDSMobile,
136
+ tabType: type
137
+ }));
138
+ };
139
+ export {
140
+ TabBar
149
141
  };
150
-
151
- export { TabBar };
142
+ //# sourceMappingURL=TabBar.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/tabBar/TabBar.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nimport React, { useMemo, useContext } from 'react';\nimport { Carousel } from '../carousel/Carousel';\nimport { useTabBar } from './useTabBar';\nimport {\n StyledTabButton,\n StyledTabList,\n StyledTabWrapper,\n StyledSelectionIndicator,\n StyledSubTabsList,\n StyledRequiredMark,\n} from './styles';\nimport { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX';\nimport { useKeyboardNavigation } from '../../utils/hooks/useKeyboardNavigation';\nimport { TabTypes } from '../../utils/constants';\nimport { useTabsCallbacks } from '../../utils/hooks/useTabsCallbacks';\nimport { DSTabsDatatestid } from '../../DSTabsDatatestid';\nimport type { DSTabPropsWithDefaultT } from '../../DSTabsTypes';\n\nexport const TabBar = (): JSX.Element => {\n const {\n tabsRef,\n focusableTabsRef,\n tabsListRef,\n tabsRefAsArray,\n actualActiveTab,\n props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs },\n } = useContext(DSTabsContext);\n\n const { lastTabInternalRef, firstSubtabInternalRef } = useContext(DSTabsCrossRefContext);\n const { handleOnTabChange } = useTabsCallbacks();\n const { handleOnKeyDown } = useKeyboardNavigation();\n\n const { indicatorStyle, mobileGradients, updateMobileGradients, updateIndicatorStyle } = useTabBar();\n\n const renderTabs: React.ReactNode[] = useMemo(() => {\n const availableTabIndexes: number[] = [];\n\n return React.Children.map(tabs, (tab: React.ReactElement<DSTabPropsWithDefaultT>, index) => {\n const { tabId = '', title = '', style, required = false, disabled = false, ref, onClick, onKeyDown } = tab.props;\n if (!disabled) availableTabIndexes.push(index);\n return (\n <StyledTabButton\n key={tabId}\n role=\"tab\"\n ref={(t: HTMLButtonElement) => {\n if (tabsRefAsArray.current && focusableTabsRef.current && tabsRef.current) {\n tabsRefAsArray.current[index] = t;\n if (!disabled && !focusableTabsRef.current.includes(t)) focusableTabsRef.current.push(t);\n tabsRef.current[index] = t;\n if (type === TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {\n firstSubtabInternalRef.current = t;\n }\n if (type !== TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {\n lastTabInternalRef.current = t;\n }\n if (ref) ref.current = t;\n }\n }}\n type=\"button\"\n aria-controls={tabId}\n aria-selected={actualActiveTab === tabId}\n aria-disabled={disabled}\n aria-labelledby={`${tabId}-label`}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n tabType={type}\n title={title}\n data-required={required}\n data-tab-id={tabId}\n data-index={index}\n withCarousel={withCarousel}\n isActive={actualActiveTab === tabId}\n disabled={disabled}\n showSeparator={showSeparator && type !== TabTypes.NORMAL}\n data-testid={type === TabTypes.NORMAL ? DSTabsDatatestid.TAB_BUTTON : DSTabsDatatestid.SUBTAB_BUTTON}\n id={`${tabId}-label`}\n onClick={(e) => {\n if (!disabled) {\n handleOnTabChange(tabId, e);\n updateIndicatorStyle();\n }\n if (onClick && !disabled) onClick(tabId, e);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.stopPropagation();\n if (!disabled) handleOnKeyDown(e);\n if (onKeyDown && !disabled) onKeyDown(e);\n }}\n style={style}\n >\n {title}\n {required && <StyledRequiredMark>&#9679;</StyledRequiredMark>}\n </StyledTabButton>\n );\n });\n }, [\n tabs,\n actualActiveTab,\n isDSMobile,\n fixedTabsHeaders,\n type,\n withCarousel,\n showSeparator,\n tabsRefAsArray,\n focusableTabsRef,\n tabsRef,\n firstSubtabInternalRef,\n lastTabInternalRef,\n handleOnTabChange,\n updateIndicatorStyle,\n handleOnKeyDown,\n ]);\n\n if (type === TabTypes.SUBTABS && !isDSMobile) {\n return (\n <StyledSubTabsList\n withCarousel={withCarousel}\n data-testid={DSTabsDatatestid.SUB_TAB_LIST}\n ref={tabsListRef}\n role=\"tablist\"\n >\n {withCarousel ? <Carousel>{renderTabs}</Carousel> : renderTabs}\n </StyledSubTabsList>\n );\n }\n\n return (\n <StyledTabList\n withCarousel={withCarousel}\n ref={tabsListRef}\n role=\"tablist\"\n data-testid={DSTabsDatatestid.TAB_LIST}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n mobileGradients={mobileGradients}\n onScroll={updateMobileGradients}\n indicatorStyle={indicatorStyle}\n tabType={type}\n >\n <StyledTabWrapper isDSMobile={isDSMobile} fixedTabsHeaders={fixedTabsHeaders}>\n {!isDSMobile && withCarousel ? (\n <Carousel updateIndicatorStyle={updateIndicatorStyle}>{renderTabs}</Carousel>\n ) : (\n renderTabs\n )}\n </StyledTabWrapper>\n <StyledSelectionIndicator isDSMobile={isDSMobile} tabType={type} />\n </StyledTabList>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }