@elliemae/ds-tabs 2.3.0-alpha.8 → 2.3.0-next.2

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 (174) hide show
  1. package/cjs/DSTabs.js +45 -0
  2. package/cjs/DSTabsCTX.js +30 -0
  3. package/cjs/DSTabsDatatestid.js +18 -0
  4. package/cjs/DSTabsTypes.js +2 -0
  5. package/cjs/config/useCrossRef.js +17 -0
  6. package/cjs/config/useTabs.js +51 -0
  7. package/cjs/defaultProps.js +27 -0
  8. package/cjs/exportsRelated/DSTab.js +32 -0
  9. package/cjs/index.js +17 -0
  10. package/cjs/parts/carousel/Carousel.js +69 -0
  11. package/cjs/parts/carousel/styles.js +65 -0
  12. package/cjs/parts/carousel/useCarousel.js +78 -0
  13. package/cjs/parts/carousel/useCarouselCallbacks.js +72 -0
  14. package/cjs/parts/tabBar/TabBar.js +168 -0
  15. package/cjs/parts/tabBar/styles.js +200 -0
  16. package/cjs/parts/tabBar/useTabBar.js +87 -0
  17. package/cjs/parts/tabsContent/TabsContent.js +49 -0
  18. package/cjs/parts/tabsContent/styles.js +15 -0
  19. package/cjs/parts/tabsPanel/TabsPanels.js +77 -0
  20. package/cjs/parts/tabsPanel/styles.js +25 -0
  21. package/cjs/propTypes.js +33 -0
  22. package/cjs/utils/constants.js +28 -0
  23. package/cjs/utils/helpers.js +75 -0
  24. package/cjs/utils/hooks/useKeyboardNavigation.js +61 -0
  25. package/cjs/utils/hooks/useTabsCallbacks.js +41 -0
  26. package/esm/DSTabs.js +35 -0
  27. package/esm/DSTabsCTX.js +25 -0
  28. package/esm/DSTabsDatatestid.js +14 -0
  29. package/esm/DSTabsTypes.js +1 -0
  30. package/{dist/esm → esm}/config/useCrossRef.js +4 -6
  31. package/esm/config/useTabs.js +47 -0
  32. package/{dist/esm → esm}/defaultProps.js +8 -9
  33. package/esm/exportsRelated/DSTab.js +21 -0
  34. package/esm/index.js +4 -0
  35. package/esm/parts/carousel/Carousel.js +61 -0
  36. package/esm/parts/carousel/styles.js +54 -0
  37. package/{dist/esm → esm}/parts/carousel/useCarousel.js +34 -15
  38. package/{dist/esm → esm}/parts/carousel/useCarouselCallbacks.js +28 -20
  39. package/esm/parts/tabBar/TabBar.js +159 -0
  40. package/esm/parts/tabBar/styles.js +186 -0
  41. package/{dist/esm → esm}/parts/tabBar/useTabBar.js +35 -27
  42. package/esm/parts/tabsContent/TabsContent.js +40 -0
  43. package/esm/parts/tabsContent/styles.js +7 -0
  44. package/esm/parts/tabsPanel/TabsPanels.js +67 -0
  45. package/esm/parts/tabsPanel/styles.js +17 -0
  46. package/esm/propTypes.js +28 -0
  47. package/esm/utils/constants.js +20 -0
  48. package/{dist/esm → esm}/utils/helpers.js +28 -23
  49. package/esm/utils/hooks/useKeyboardNavigation.js +57 -0
  50. package/esm/utils/hooks/useTabsCallbacks.js +37 -0
  51. package/package.json +70 -72
  52. package/types/DSTabs.d.ts +14 -0
  53. package/types/DSTabsCTX.d.ts +4 -0
  54. package/types/DSTabsDatatestid.d.ts +12 -0
  55. package/types/DSTabsTypes.d.ts +205 -0
  56. package/types/config/useCrossRef.d.ts +2 -0
  57. package/types/config/useTabs.d.ts +2 -0
  58. package/types/defaultProps.d.ts +2 -0
  59. package/types/exportsRelated/DSTab.d.ts +14 -0
  60. package/types/index.d.ts +5 -0
  61. package/types/parts/carousel/Carousel.d.ts +3 -0
  62. package/types/parts/carousel/styles.d.ts +9 -0
  63. package/types/parts/carousel/useCarousel.d.ts +2 -0
  64. package/types/parts/carousel/useCarouselCallbacks.d.ts +2 -0
  65. package/types/parts/tabBar/TabBar.d.ts +2 -0
  66. package/types/parts/tabBar/styles.d.ts +7 -0
  67. package/types/parts/tabBar/useTabBar.d.ts +2 -0
  68. package/types/parts/tabsContent/TabsContent.d.ts +2 -0
  69. package/types/parts/tabsContent/styles.d.ts +1 -0
  70. package/types/parts/tabsPanel/TabsPanels.d.ts +2 -0
  71. package/types/parts/tabsPanel/styles.d.ts +2 -0
  72. package/types/propTypes.d.ts +54 -0
  73. package/types/tests/DSTabs.callbacks.test.d.ts +1 -0
  74. package/types/tests/DSTabs.func.test.d.ts +1 -0
  75. package/types/tests/DSTabs.keyboard.test.d.ts +1 -0
  76. package/types/tests/DSTabs.test.d.ts +1 -0
  77. package/types/utils/constants.d.ts +18 -0
  78. package/types/utils/helpers.d.ts +9 -0
  79. package/types/utils/hooks/useKeyboardNavigation.d.ts +2 -0
  80. package/types/utils/hooks/useTabsCallbacks.d.ts +2 -0
  81. package/dist/cjs/DSTabs.js +0 -63
  82. package/dist/cjs/DSTabs.js.map +0 -7
  83. package/dist/cjs/DSTabsCTX.js +0 -56
  84. package/dist/cjs/DSTabsCTX.js.map +0 -7
  85. package/dist/cjs/DSTabsDatatestid.js +0 -46
  86. package/dist/cjs/DSTabsDatatestid.js.map +0 -7
  87. package/dist/cjs/DSTabsTypes.js +0 -27
  88. package/dist/cjs/DSTabsTypes.js.map +0 -7
  89. package/dist/cjs/config/useCrossRef.js +0 -44
  90. package/dist/cjs/config/useCrossRef.js.map +0 -7
  91. package/dist/cjs/config/useTabs.js +0 -68
  92. package/dist/cjs/config/useTabs.js.map +0 -7
  93. package/dist/cjs/defaultProps.js +0 -53
  94. package/dist/cjs/defaultProps.js.map +0 -7
  95. package/dist/cjs/exportsRelated/DSTab.js +0 -46
  96. package/dist/cjs/exportsRelated/DSTab.js.map +0 -7
  97. package/dist/cjs/index.js +0 -38
  98. package/dist/cjs/index.js.map +0 -7
  99. package/dist/cjs/parts/carousel/Carousel.js +0 -77
  100. package/dist/cjs/parts/carousel/Carousel.js.map +0 -7
  101. package/dist/cjs/parts/carousel/styles.js +0 -79
  102. package/dist/cjs/parts/carousel/styles.js.map +0 -7
  103. package/dist/cjs/parts/carousel/useCarousel.js +0 -80
  104. package/dist/cjs/parts/carousel/useCarousel.js.map +0 -7
  105. package/dist/cjs/parts/carousel/useCarouselCallbacks.js +0 -89
  106. package/dist/cjs/parts/carousel/useCarouselCallbacks.js.map +0 -7
  107. package/dist/cjs/parts/tabBar/TabBar.js +0 -171
  108. package/dist/cjs/parts/tabBar/TabBar.js.map +0 -7
  109. package/dist/cjs/parts/tabBar/styles.js +0 -294
  110. package/dist/cjs/parts/tabBar/styles.js.map +0 -7
  111. package/dist/cjs/parts/tabBar/useTabBar.js +0 -100
  112. package/dist/cjs/parts/tabBar/useTabBar.js.map +0 -7
  113. package/dist/cjs/parts/tabsContent/TabsContent.js +0 -53
  114. package/dist/cjs/parts/tabsContent/TabsContent.js.map +0 -7
  115. package/dist/cjs/parts/tabsContent/styles.js +0 -39
  116. package/dist/cjs/parts/tabsContent/styles.js.map +0 -7
  117. package/dist/cjs/parts/tabsPanel/TabsPanels.js +0 -79
  118. package/dist/cjs/parts/tabsPanel/TabsPanels.js.map +0 -7
  119. package/dist/cjs/parts/tabsPanel/styles.js +0 -45
  120. package/dist/cjs/parts/tabsPanel/styles.js.map +0 -7
  121. package/dist/cjs/propTypes.js +0 -58
  122. package/dist/cjs/propTypes.js.map +0 -7
  123. package/dist/cjs/utils/constants.js +0 -56
  124. package/dist/cjs/utils/constants.js.map +0 -7
  125. package/dist/cjs/utils/helpers.js +0 -88
  126. package/dist/cjs/utils/helpers.js.map +0 -7
  127. package/dist/cjs/utils/hooks/useKeyboardNavigation.js +0 -77
  128. package/dist/cjs/utils/hooks/useKeyboardNavigation.js.map +0 -7
  129. package/dist/cjs/utils/hooks/useTabsCallbacks.js +0 -60
  130. package/dist/cjs/utils/hooks/useTabsCallbacks.js.map +0 -7
  131. package/dist/esm/DSTabs.js +0 -34
  132. package/dist/esm/DSTabs.js.map +0 -7
  133. package/dist/esm/DSTabsCTX.js +0 -27
  134. package/dist/esm/DSTabsCTX.js.map +0 -7
  135. package/dist/esm/DSTabsDatatestid.js +0 -17
  136. package/dist/esm/DSTabsDatatestid.js.map +0 -7
  137. package/dist/esm/DSTabsTypes.js +0 -2
  138. package/dist/esm/DSTabsTypes.js.map +0 -7
  139. package/dist/esm/config/useCrossRef.js.map +0 -7
  140. package/dist/esm/config/useTabs.js +0 -39
  141. package/dist/esm/config/useTabs.js.map +0 -7
  142. package/dist/esm/defaultProps.js.map +0 -7
  143. package/dist/esm/exportsRelated/DSTab.js +0 -17
  144. package/dist/esm/exportsRelated/DSTab.js.map +0 -7
  145. package/dist/esm/index.js +0 -9
  146. package/dist/esm/index.js.map +0 -7
  147. package/dist/esm/parts/carousel/Carousel.js +0 -48
  148. package/dist/esm/parts/carousel/Carousel.js.map +0 -7
  149. package/dist/esm/parts/carousel/styles.js +0 -50
  150. package/dist/esm/parts/carousel/styles.js.map +0 -7
  151. package/dist/esm/parts/carousel/useCarousel.js.map +0 -7
  152. package/dist/esm/parts/carousel/useCarouselCallbacks.js.map +0 -7
  153. package/dist/esm/parts/tabBar/TabBar.js +0 -149
  154. package/dist/esm/parts/tabBar/TabBar.js.map +0 -7
  155. package/dist/esm/parts/tabBar/styles.js +0 -265
  156. package/dist/esm/parts/tabBar/styles.js.map +0 -7
  157. package/dist/esm/parts/tabBar/useTabBar.js.map +0 -7
  158. package/dist/esm/parts/tabsContent/TabsContent.js +0 -24
  159. package/dist/esm/parts/tabsContent/TabsContent.js.map +0 -7
  160. package/dist/esm/parts/tabsContent/styles.js +0 -10
  161. package/dist/esm/parts/tabsContent/styles.js.map +0 -7
  162. package/dist/esm/parts/tabsPanel/TabsPanels.js +0 -50
  163. package/dist/esm/parts/tabsPanel/TabsPanels.js.map +0 -7
  164. package/dist/esm/parts/tabsPanel/styles.js +0 -16
  165. package/dist/esm/parts/tabsPanel/styles.js.map +0 -7
  166. package/dist/esm/propTypes.js +0 -29
  167. package/dist/esm/propTypes.js.map +0 -7
  168. package/dist/esm/utils/constants.js +0 -27
  169. package/dist/esm/utils/constants.js.map +0 -7
  170. package/dist/esm/utils/helpers.js.map +0 -7
  171. package/dist/esm/utils/hooks/useKeyboardNavigation.js +0 -48
  172. package/dist/esm/utils/hooks/useKeyboardNavigation.js.map +0 -7
  173. package/dist/esm/utils/hooks/useTabsCallbacks.js +0 -31
  174. package/dist/esm/utils/hooks/useTabsCallbacks.js.map +0 -7
@@ -0,0 +1,28 @@
1
+ import { PropTypes } from 'react-desc';
2
+ import { TabTypesValuesAsArray } from './utils/constants.js';
3
+
4
+ const tabPropTypes = {
5
+ tabId: PropTypes.string.description('Unique Tab id.').defaultValue(''),
6
+ title: PropTypes.string.description('Tab title.').defaultValue(''),
7
+ required: PropTypes.bool.description('Show a required mark next to the title.').defaultValue(false),
8
+ disabled: PropTypes.bool.description('Disables Tab.').defaultValue(false)
9
+ };
10
+ const tabsPropTypes = {
11
+ animated: PropTypes.bool.description('Whether the Tab transition should animate or not.').defaultValue(true),
12
+ enableMouseEvents: PropTypes.bool.description('Enables Tab transition with mouse drag events.').defaultValue(false),
13
+ allowTextSelection: PropTypes.bool.description('Allows text selection when mouse drag events are active.').defaultValue(false),
14
+ onTabChange: PropTypes.func.description('Handler when a user clicks on a different Tab.').defaultValue('() => {}'),
15
+ type: PropTypes.oneOf(TabTypesValuesAsArray).description('Tab type.').defaultValue(TabTypesValuesAsArray[0]),
16
+ tabBarExtraContent: PropTypes.element.description('Extra content next to the Tab Bar.').defaultValue(undefined),
17
+ onlyRenderActiveTab: PropTypes.bool.description('Only renders the active Tab in the DOM.').defaultValue(false),
18
+ withCarousel: PropTypes.bool.description('Activate carousel behavior.').defaultValue(false),
19
+ activeTab: PropTypes.string.description('Passing a value makes DSTabs a controlled component.').defaultValue('First DSTab children.'),
20
+ children: PropTypes.node.description('Use DSTab component as children.').isRequired,
21
+ tabsListAriaLabel: PropTypes.string.description('Aria label for the list.').defaultValue('Tab list.'),
22
+ containerProps: PropTypes.object.description('Additional properties for the container.').defaultValue({}),
23
+ innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
24
+ current: PropTypes.any
25
+ })]).description('Ref to the container.').defaultValue(undefined)
26
+ };
27
+
28
+ export { tabPropTypes, tabsPropTypes };
@@ -0,0 +1,20 @@
1
+ const TabTypes = {
2
+ NORMAL: 'normal',
3
+ NORMAL_SMALL: 'normal_small',
4
+ SUBTABS: 'subtabs'
5
+ };
6
+ const TabTypesValuesAsArray = Object.values(TabTypes);
7
+ const MOBILE_GRADIENT_WIDTH = 24;
8
+ const defaultIndicatorStyles = {
9
+ left: '0px',
10
+ width: '0px',
11
+ backgroundWithTransparent: ''
12
+ };
13
+ const gradientOffsetsAccordingType = {
14
+ normal_small: 14,
15
+ normal: 16,
16
+ subtabs: 16,
17
+ fixedTabsHeaders: 0
18
+ };
19
+
20
+ export { MOBILE_GRADIENT_WIDTH, TabTypes, TabTypesValuesAsArray, defaultIndicatorStyles, gradientOffsetsAccordingType };
@@ -1,11 +1,13 @@
1
- import * as React from "react";
2
- import { MOBILE_GRADIENT_WIDTH } from "./constants";
1
+ import { MOBILE_GRADIENT_WIDTH } from './constants.js';
2
+
3
3
  const isElementVisible = (tab, tabList) => {
4
4
  const tabDimensions = tab.getBoundingClientRect();
5
5
  const tabListDimensions = tabList.getBoundingClientRect();
6
6
  return tabDimensions.left <= tabListDimensions.left ? tabListDimensions.left - tabDimensions.left <= tabDimensions.width : tabDimensions.right - tabListDimensions.right <= tabDimensions.width;
7
7
  };
8
- const isElementVisibleCarousel = (tab, tabContainer, firstOrLastItem = true) => {
8
+ const isElementVisibleCarousel = function (tab, tabContainer) {
9
+ let firstOrLastItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
10
+
9
11
  if (tab && tabContainer) {
10
12
  const tabDimensions = tab.getBoundingClientRect();
11
13
  const tabContainerDimensions = tabContainer.getBoundingClientRect();
@@ -16,22 +18,34 @@ const isElementVisibleCarousel = (tab, tabContainer, firstOrLastItem = true) =>
16
18
  const tabContainerDimensionsRight = Math.floor(tabContainerDimensions.right);
17
19
  return tabDimensionsLeft >= tabContainerDimensionsLeft && tabDimensionsRight <= tabContainerDimensionsRight;
18
20
  }
21
+
19
22
  return false;
20
23
  };
21
- const centerTab = ({ e, listRef }) => {
24
+ const centerTab = _ref => {
25
+ let {
26
+ e,
27
+ listRef
28
+ } = _ref;
29
+
22
30
  if (listRef.current) {
23
- const { offsetLeft } = e?.target;
24
- const { width: tabWidth } = (e?.target).getBoundingClientRect();
25
- const { width: listWidth } = listRef.current.getBoundingClientRect();
31
+ const {
32
+ offsetLeft
33
+ } = e === null || e === void 0 ? void 0 : e.target;
34
+ const {
35
+ width: tabWidth
36
+ } = (e === null || e === void 0 ? void 0 : e.target).getBoundingClientRect();
37
+ const {
38
+ width: listWidth
39
+ } = listRef.current.getBoundingClientRect();
26
40
  const extraSideSpace = listWidth - tabWidth;
27
41
  const leftOffsetToCenter = extraSideSpace > 0 ? extraSideSpace / 2 : 0;
28
42
  const centeredLeftOffset = offsetLeft > leftOffsetToCenter ? offsetLeft - leftOffsetToCenter : 0;
29
43
  listRef.current.scrollTo({
30
44
  top: 0,
31
45
  left: centeredLeftOffset,
32
- behavior: "smooth"
46
+ behavior: 'smooth'
33
47
  });
34
- e?.preventDefault();
48
+ e === null || e === void 0 ? void 0 : e.preventDefault();
35
49
  }
36
50
  };
37
51
  const getVisibleDimensions = (node, referenceNode) => {
@@ -42,18 +56,9 @@ const getVisibleDimensions = (node, referenceNode) => {
42
56
  height: Math.min(node.clientHeight, referenceNodeDimensions.top + referenceNode.clientHeight - nodeDimensions.top, node.clientHeight - (referenceNodeDimensions.top - nodeDimensions.top))
43
57
  };
44
58
  };
45
- const getIndexById = (children, activeId) => children && children.findIndex((item) => item.props.tabId === activeId);
46
- const getIdByIndex = (children, index) => children && children[index].props.tabId || "";
47
- const shouldHaveLeftGradient = (scrollLeft) => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;
59
+ const getIndexById = (children, activeId) => children && children.findIndex(item => item.props.tabId === activeId);
60
+ const getIdByIndex = (children, index) => children && children[index].props.tabId || '';
61
+ const shouldHaveLeftGradient = scrollLeft => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;
48
62
  const shouldHaveRightGradient = (scrollLeft, clientWidth, scrollWidth) => Math.abs(scrollLeft) <= scrollWidth - (clientWidth + MOBILE_GRADIENT_WIDTH);
49
- export {
50
- centerTab,
51
- getIdByIndex,
52
- getIndexById,
53
- getVisibleDimensions,
54
- isElementVisible,
55
- isElementVisibleCarousel,
56
- shouldHaveLeftGradient,
57
- shouldHaveRightGradient
58
- };
59
- //# sourceMappingURL=helpers.js.map
63
+
64
+ export { centerTab, getIdByIndex, getIndexById, getVisibleDimensions, isElementVisible, isElementVisibleCarousel, shouldHaveLeftGradient, shouldHaveRightGradient };
@@ -0,0 +1,57 @@
1
+ import { useContext, useCallback } from 'react';
2
+ import { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX.js';
3
+
4
+ /* eslint-disable max-statements */
5
+ const useKeyboardNavigation = () => {
6
+ const {
7
+ focusableTabsRef
8
+ } = useContext(DSTabsContext);
9
+ const {
10
+ firstSubtabInternalRef,
11
+ lastTabInternalRef
12
+ } = useContext(DSTabsCrossRefContext);
13
+ const handleOnKeyDown = useCallback(e => {
14
+ if (e.key === 'ArrowRight' && focusableTabsRef.current) {
15
+ var _focusableTabsRef$cur, _focusableTabsRef$cur2;
16
+
17
+ e.preventDefault();
18
+ e.stopPropagation();
19
+ const nextTab = focusableTabsRef.current[(focusableTabsRef === null || focusableTabsRef === void 0 ? void 0 : (_focusableTabsRef$cur = focusableTabsRef.current) === null || _focusableTabsRef$cur === void 0 ? void 0 : (_focusableTabsRef$cur2 = _focusableTabsRef$cur.indexOf) === null || _focusableTabsRef$cur2 === void 0 ? void 0 : _focusableTabsRef$cur2.call(_focusableTabsRef$cur, e.target)) + 1];
20
+ if (nextTab) nextTab.focus();
21
+ if (!nextTab) return;
22
+ }
23
+
24
+ if (e.key === 'ArrowLeft' && focusableTabsRef.current) {
25
+ var _focusableTabsRef$cur3, _focusableTabsRef$cur4;
26
+
27
+ e.preventDefault();
28
+ e.stopPropagation();
29
+ const prevTab = focusableTabsRef.current[(focusableTabsRef === null || focusableTabsRef === void 0 ? void 0 : (_focusableTabsRef$cur3 = focusableTabsRef.current) === null || _focusableTabsRef$cur3 === void 0 ? void 0 : (_focusableTabsRef$cur4 = _focusableTabsRef$cur3.indexOf) === null || _focusableTabsRef$cur4 === void 0 ? void 0 : _focusableTabsRef$cur4.call(_focusableTabsRef$cur3, e.target)) - 1];
30
+ if (prevTab) prevTab.focus();
31
+ if (!prevTab) return;
32
+ }
33
+
34
+ if (e.key === 'ArrowDown') {
35
+ var _firstSubtabInternalR;
36
+
37
+ e.preventDefault();
38
+ e.stopPropagation();
39
+ const canFocusCrossTabs = (firstSubtabInternalRef === null || firstSubtabInternalRef === void 0 ? void 0 : firstSubtabInternalRef.current) && (lastTabInternalRef === null || lastTabInternalRef === void 0 ? void 0 : lastTabInternalRef.current);
40
+ if (canFocusCrossTabs) (_firstSubtabInternalR = firstSubtabInternalRef.current) === null || _firstSubtabInternalR === void 0 ? void 0 : _firstSubtabInternalR.focus();
41
+ }
42
+
43
+ if (e.key === 'ArrowUp') {
44
+ var _lastTabInternalRef$c;
45
+
46
+ e.preventDefault();
47
+ e.stopPropagation();
48
+ const canFocusCrossTabs = (firstSubtabInternalRef === null || firstSubtabInternalRef === void 0 ? void 0 : firstSubtabInternalRef.current) && (lastTabInternalRef === null || lastTabInternalRef === void 0 ? void 0 : lastTabInternalRef.current);
49
+ if (canFocusCrossTabs) (_lastTabInternalRef$c = lastTabInternalRef.current) === null || _lastTabInternalRef$c === void 0 ? void 0 : _lastTabInternalRef$c.focus();
50
+ }
51
+ }, [firstSubtabInternalRef, lastTabInternalRef, focusableTabsRef]);
52
+ return {
53
+ handleOnKeyDown
54
+ };
55
+ };
56
+
57
+ export { useKeyboardNavigation };
@@ -0,0 +1,37 @@
1
+ import { useContext, useCallback } from 'react';
2
+ import { centerTab } from '../helpers.js';
3
+ import { DSTabsContext } from '../../DSTabsCTX.js';
4
+
5
+ const useTabsCallbacks = () => {
6
+ const {
7
+ setInternalActiveTab,
8
+ tabsListRef,
9
+ props: {
10
+ onTabChange,
11
+ isDSMobile,
12
+ allowTextSelection,
13
+ fixedTabsHeaders
14
+ }
15
+ } = useContext(DSTabsContext);
16
+ const handleOnTabChange = useCallback((tabId, e) => {
17
+ setInternalActiveTab(tabId);
18
+ onTabChange(tabId, e);
19
+
20
+ if (isDSMobile && !fixedTabsHeaders && e) {
21
+ centerTab({
22
+ e,
23
+ listRef: tabsListRef
24
+ });
25
+ }
26
+ }, [fixedTabsHeaders, isDSMobile, onTabChange, setInternalActiveTab, tabsListRef]);
27
+ const handleOnMouseDown = useCallback(e => {
28
+ const role = e.target.getAttribute('role');
29
+ if (role !== 'tabpanel' && allowTextSelection) e.stopPropagation();
30
+ }, [allowTextSelection]);
31
+ return {
32
+ handleOnTabChange,
33
+ handleOnMouseDown
34
+ };
35
+ };
36
+
37
+ export { useTabsCallbacks };
package/package.json CHANGED
@@ -1,114 +1,111 @@
1
1
  {
2
2
  "name": "@elliemae/ds-tabs",
3
- "version": "2.3.0-alpha.8",
3
+ "version": "2.3.0-next.2",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Tabs",
6
- "files": [
7
- "dist"
8
- ],
9
- "module": "./dist/esm/index.js",
10
- "main": "./dist/cjs/index.js",
11
- "types": "./dist/types/index.d.ts",
6
+ "module": "./esm/index.js",
7
+ "main": "./cjs/index.js",
8
+ "types": "./types/index.d.ts",
12
9
  "exports": {
13
10
  ".": {
14
- "import": "./dist/esm/index.js",
15
- "require": "./dist/cjs/index.js"
11
+ "import": "./esm/index.js",
12
+ "require": "./cjs/index.js"
16
13
  },
17
14
  "./utils/hooks/useTabsCallbacks": {
18
- "import": "./dist/esm/utils/hooks/useTabsCallbacks.js",
19
- "require": "./dist/cjs/utils/hooks/useTabsCallbacks.js"
15
+ "import": "./esm/utils/hooks/useTabsCallbacks.js",
16
+ "require": "./cjs/utils/hooks/useTabsCallbacks.js"
20
17
  },
21
18
  "./utils/hooks/useKeyboardNavigation": {
22
- "import": "./dist/esm/utils/hooks/useKeyboardNavigation.js",
23
- "require": "./dist/cjs/utils/hooks/useKeyboardNavigation.js"
19
+ "import": "./esm/utils/hooks/useKeyboardNavigation.js",
20
+ "require": "./cjs/utils/hooks/useKeyboardNavigation.js"
24
21
  },
25
22
  "./utils/helpers": {
26
- "import": "./dist/esm/utils/helpers.js",
27
- "require": "./dist/cjs/utils/helpers.js"
23
+ "import": "./esm/utils/helpers.js",
24
+ "require": "./cjs/utils/helpers.js"
28
25
  },
29
26
  "./utils/constants": {
30
- "import": "./dist/esm/utils/constants.js",
31
- "require": "./dist/cjs/utils/constants.js"
27
+ "import": "./esm/utils/constants.js",
28
+ "require": "./cjs/utils/constants.js"
32
29
  },
33
30
  "./propTypes": {
34
- "import": "./dist/esm/propTypes.js",
35
- "require": "./dist/cjs/propTypes.js"
31
+ "import": "./esm/propTypes.js",
32
+ "require": "./cjs/propTypes.js"
36
33
  },
37
34
  "./parts/tabsPanel/TabsPanels": {
38
- "import": "./dist/esm/parts/tabsPanel/TabsPanels.js",
39
- "require": "./dist/cjs/parts/tabsPanel/TabsPanels.js"
35
+ "import": "./esm/parts/tabsPanel/TabsPanels.js",
36
+ "require": "./cjs/parts/tabsPanel/TabsPanels.js"
40
37
  },
41
38
  "./parts/tabsPanel/styles": {
42
- "import": "./dist/esm/parts/tabsPanel/styles.js",
43
- "require": "./dist/cjs/parts/tabsPanel/styles.js"
39
+ "import": "./esm/parts/tabsPanel/styles.js",
40
+ "require": "./cjs/parts/tabsPanel/styles.js"
44
41
  },
45
42
  "./parts/tabsContent/TabsContent": {
46
- "import": "./dist/esm/parts/tabsContent/TabsContent.js",
47
- "require": "./dist/cjs/parts/tabsContent/TabsContent.js"
43
+ "import": "./esm/parts/tabsContent/TabsContent.js",
44
+ "require": "./cjs/parts/tabsContent/TabsContent.js"
48
45
  },
49
46
  "./parts/tabsContent/styles": {
50
- "import": "./dist/esm/parts/tabsContent/styles.js",
51
- "require": "./dist/cjs/parts/tabsContent/styles.js"
47
+ "import": "./esm/parts/tabsContent/styles.js",
48
+ "require": "./cjs/parts/tabsContent/styles.js"
52
49
  },
53
50
  "./parts/tabBar/useTabBar": {
54
- "import": "./dist/esm/parts/tabBar/useTabBar.js",
55
- "require": "./dist/cjs/parts/tabBar/useTabBar.js"
51
+ "import": "./esm/parts/tabBar/useTabBar.js",
52
+ "require": "./cjs/parts/tabBar/useTabBar.js"
56
53
  },
57
54
  "./parts/tabBar/TabBar": {
58
- "import": "./dist/esm/parts/tabBar/TabBar.js",
59
- "require": "./dist/cjs/parts/tabBar/TabBar.js"
55
+ "import": "./esm/parts/tabBar/TabBar.js",
56
+ "require": "./cjs/parts/tabBar/TabBar.js"
60
57
  },
61
58
  "./parts/tabBar/styles": {
62
- "import": "./dist/esm/parts/tabBar/styles.js",
63
- "require": "./dist/cjs/parts/tabBar/styles.js"
59
+ "import": "./esm/parts/tabBar/styles.js",
60
+ "require": "./cjs/parts/tabBar/styles.js"
64
61
  },
65
62
  "./parts/carousel/useCarouselCallbacks": {
66
- "import": "./dist/esm/parts/carousel/useCarouselCallbacks.js",
67
- "require": "./dist/cjs/parts/carousel/useCarouselCallbacks.js"
63
+ "import": "./esm/parts/carousel/useCarouselCallbacks.js",
64
+ "require": "./cjs/parts/carousel/useCarouselCallbacks.js"
68
65
  },
69
66
  "./parts/carousel/useCarousel": {
70
- "import": "./dist/esm/parts/carousel/useCarousel.js",
71
- "require": "./dist/cjs/parts/carousel/useCarousel.js"
67
+ "import": "./esm/parts/carousel/useCarousel.js",
68
+ "require": "./cjs/parts/carousel/useCarousel.js"
72
69
  },
73
70
  "./parts/carousel/styles": {
74
- "import": "./dist/esm/parts/carousel/styles.js",
75
- "require": "./dist/cjs/parts/carousel/styles.js"
71
+ "import": "./esm/parts/carousel/styles.js",
72
+ "require": "./cjs/parts/carousel/styles.js"
76
73
  },
77
74
  "./parts/carousel/Carousel": {
78
- "import": "./dist/esm/parts/carousel/Carousel.js",
79
- "require": "./dist/cjs/parts/carousel/Carousel.js"
75
+ "import": "./esm/parts/carousel/Carousel.js",
76
+ "require": "./cjs/parts/carousel/Carousel.js"
80
77
  },
81
78
  "./exportsRelated/DSTab": {
82
- "import": "./dist/esm/exportsRelated/DSTab.js",
83
- "require": "./dist/cjs/exportsRelated/DSTab.js"
79
+ "import": "./esm/exportsRelated/DSTab.js",
80
+ "require": "./cjs/exportsRelated/DSTab.js"
84
81
  },
85
82
  "./DSTabsTypes": {
86
- "import": "./dist/esm/DSTabsTypes.js",
87
- "require": "./dist/cjs/DSTabsTypes.js"
83
+ "import": "./esm/DSTabsTypes.js",
84
+ "require": "./cjs/DSTabsTypes.js"
88
85
  },
89
86
  "./DSTabsDatatestid": {
90
- "import": "./dist/esm/DSTabsDatatestid.js",
91
- "require": "./dist/cjs/DSTabsDatatestid.js"
87
+ "import": "./esm/DSTabsDatatestid.js",
88
+ "require": "./cjs/DSTabsDatatestid.js"
92
89
  },
93
90
  "./DSTabsCTX": {
94
- "import": "./dist/esm/DSTabsCTX.js",
95
- "require": "./dist/cjs/DSTabsCTX.js"
91
+ "import": "./esm/DSTabsCTX.js",
92
+ "require": "./cjs/DSTabsCTX.js"
96
93
  },
97
94
  "./DSTabs": {
98
- "import": "./dist/esm/DSTabs.js",
99
- "require": "./dist/cjs/DSTabs.js"
95
+ "import": "./esm/DSTabs.js",
96
+ "require": "./cjs/DSTabs.js"
100
97
  },
101
98
  "./defaultProps": {
102
- "import": "./dist/esm/defaultProps.js",
103
- "require": "./dist/cjs/defaultProps.js"
99
+ "import": "./esm/defaultProps.js",
100
+ "require": "./cjs/defaultProps.js"
104
101
  },
105
102
  "./config/useTabs": {
106
- "import": "./dist/esm/config/useTabs.js",
107
- "require": "./dist/cjs/config/useTabs.js"
103
+ "import": "./esm/config/useTabs.js",
104
+ "require": "./cjs/config/useTabs.js"
108
105
  },
109
106
  "./config/useCrossRef": {
110
- "import": "./dist/esm/config/useCrossRef.js",
111
- "require": "./dist/cjs/config/useCrossRef.js"
107
+ "import": "./esm/config/useCrossRef.js",
108
+ "require": "./cjs/config/useCrossRef.js"
112
109
  }
113
110
  },
114
111
  "sideEffects": [
@@ -120,23 +117,29 @@
120
117
  "url": "https://git.elliemae.io/platform-ui/dimsum.git"
121
118
  },
122
119
  "engines": {
123
- "pnpm": ">=6",
124
- "node": ">=16"
120
+ "npm": ">=7",
121
+ "node": ">=14"
125
122
  },
126
123
  "author": "ICE MT",
124
+ "scripts": {
125
+ "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
126
+ "prebuild": "exit 0",
127
+ "predev": "exit 0",
128
+ "build": "node ../../scripts/build/build.js"
129
+ },
127
130
  "dependencies": {
128
- "@elliemae/ds-button": "2.3.0-alpha.8",
129
- "@elliemae/ds-icon": "2.3.0-alpha.8",
130
- "@elliemae/ds-icons": "2.3.0-alpha.8",
131
- "@elliemae/ds-props-helpers": "2.3.0-alpha.8",
132
- "@elliemae/ds-system": "2.3.0-alpha.8",
131
+ "@elliemae/ds-button": "2.3.0-next.2",
132
+ "@elliemae/ds-icon": "2.3.0-next.2",
133
+ "@elliemae/ds-icons": "2.3.0-next.2",
134
+ "@elliemae/ds-props-helpers": "2.3.0-next.2",
135
+ "@elliemae/ds-system": "2.3.0-next.1",
133
136
  "@react-hook/resize-observer": "~1.2.5",
134
137
  "prop-types": "~15.7.2",
135
138
  "react-desc": "~4.1.3",
136
139
  "react-swipeable-views": "~0.13.9"
137
140
  },
138
141
  "devDependencies": {
139
- "@testing-library/jest-dom": "~5.15.1",
142
+ "@testing-library/jest-dom": "~5.15.0",
140
143
  "@testing-library/react": "~12.1.2",
141
144
  "@testing-library/user-event": "~13.5.0",
142
145
  "styled-components": "~5.3.3"
@@ -149,12 +152,7 @@
149
152
  },
150
153
  "publishConfig": {
151
154
  "access": "public",
152
- "typeSafety": false
153
- },
154
- "scripts": {
155
- "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
156
- "prebuild": "exit 0",
157
- "predev": "exit 0",
158
- "build": "node ../../scripts/build/build.js"
155
+ "directory": "dist",
156
+ "generateSubmodules": true
159
157
  }
160
158
  }
@@ -0,0 +1,14 @@
1
+ /// <reference path="../../../../shared/typings/react-desc.d.ts" />
2
+ import type { WeakValidationMap } from 'react';
3
+ import type { DSTabsPropsT } from './DSTabsTypes';
4
+ declare const DSTabs: {
5
+ (props: DSTabsPropsT): JSX.Element;
6
+ propTypes: WeakValidationMap<unknown>;
7
+ };
8
+ declare const DSTabsWithSchema: {
9
+ (props?: DSTabsPropsT | undefined): JSX.Element;
10
+ propTypes: unknown;
11
+ toTypescript: () => import("react-desc").TypescriptSchema;
12
+ };
13
+ export { DSTabs, DSTabsWithSchema };
14
+ export default DSTabs;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import type { DSTabsUseCrossRefContextT, DSTabsUseTabsContextT } from './DSTabsTypes';
3
+ export declare const DSTabsContext: import("react").Context<DSTabsUseTabsContextT>;
4
+ export declare const DSTabsCrossRefContext: import("react").Context<DSTabsUseCrossRefContextT>;
@@ -0,0 +1,12 @@
1
+ export declare const DSTabsDatatestid: {
2
+ TABS_CONTAINER: string;
3
+ TAB_BUTTON: string;
4
+ SUBTAB_BUTTON: string;
5
+ TAB_PANEL: string;
6
+ SUB_TAB_LIST: string;
7
+ TAB_LIST: string;
8
+ CAROUSEL: {
9
+ BUTTON_RIGHT: string;
10
+ BUTTON_LEFT: string;
11
+ };
12
+ };