@elliemae/ds-tabs 2.3.1 → 3.0.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 (174) hide show
  1. package/dist/cjs/DSTabs.js +63 -0
  2. package/dist/cjs/DSTabs.js.map +7 -0
  3. package/dist/cjs/DSTabsCTX.js +56 -0
  4. package/dist/cjs/DSTabsCTX.js.map +7 -0
  5. package/dist/cjs/DSTabsDatatestid.js +46 -0
  6. package/dist/cjs/DSTabsDatatestid.js.map +7 -0
  7. package/dist/cjs/DSTabsTypes.js +27 -0
  8. package/dist/cjs/DSTabsTypes.js.map +7 -0
  9. package/dist/cjs/config/useCrossRef.js +44 -0
  10. package/dist/cjs/config/useCrossRef.js.map +7 -0
  11. package/dist/cjs/config/useTabs.js +74 -0
  12. package/dist/cjs/config/useTabs.js.map +7 -0
  13. package/dist/cjs/defaultProps.js +53 -0
  14. package/dist/cjs/defaultProps.js.map +7 -0
  15. package/dist/cjs/exportsRelated/DSTab.js +58 -0
  16. package/dist/cjs/exportsRelated/DSTab.js.map +7 -0
  17. package/dist/cjs/index.js +38 -0
  18. package/dist/cjs/index.js.map +7 -0
  19. package/dist/cjs/parts/carousel/Carousel.js +77 -0
  20. package/dist/cjs/parts/carousel/Carousel.js.map +7 -0
  21. package/dist/cjs/parts/carousel/styles.js +79 -0
  22. package/dist/cjs/parts/carousel/styles.js.map +7 -0
  23. package/dist/cjs/parts/carousel/useCarousel.js +80 -0
  24. package/dist/cjs/parts/carousel/useCarousel.js.map +7 -0
  25. package/dist/cjs/parts/carousel/useCarouselCallbacks.js +89 -0
  26. package/dist/cjs/parts/carousel/useCarouselCallbacks.js.map +7 -0
  27. package/dist/cjs/parts/tabBar/TabBar.js +171 -0
  28. package/dist/cjs/parts/tabBar/TabBar.js.map +7 -0
  29. package/dist/cjs/parts/tabBar/styles.js +294 -0
  30. package/dist/cjs/parts/tabBar/styles.js.map +7 -0
  31. package/dist/cjs/parts/tabBar/useTabBar.js +100 -0
  32. package/dist/cjs/parts/tabBar/useTabBar.js.map +7 -0
  33. package/dist/cjs/parts/tabsContent/TabsContent.js +69 -0
  34. package/dist/cjs/parts/tabsContent/TabsContent.js.map +7 -0
  35. package/dist/cjs/parts/tabsContent/styles.js +39 -0
  36. package/dist/cjs/parts/tabsContent/styles.js.map +7 -0
  37. package/dist/cjs/parts/tabsPanel/TabsPanels.js +95 -0
  38. package/dist/cjs/parts/tabsPanel/TabsPanels.js.map +7 -0
  39. package/dist/cjs/parts/tabsPanel/styles.js +45 -0
  40. package/dist/cjs/parts/tabsPanel/styles.js.map +7 -0
  41. package/dist/cjs/propTypes.js +58 -0
  42. package/dist/cjs/propTypes.js.map +7 -0
  43. package/dist/cjs/utils/constants.js +56 -0
  44. package/dist/cjs/utils/constants.js.map +7 -0
  45. package/dist/cjs/utils/helpers.js +84 -0
  46. package/dist/cjs/utils/helpers.js.map +7 -0
  47. package/dist/cjs/utils/hooks/useKeyboardNavigation.js +77 -0
  48. package/dist/cjs/utils/hooks/useKeyboardNavigation.js.map +7 -0
  49. package/dist/cjs/utils/hooks/useTabsCallbacks.js +60 -0
  50. package/dist/cjs/utils/hooks/useTabsCallbacks.js.map +7 -0
  51. package/dist/esm/DSTabs.js +34 -0
  52. package/dist/esm/DSTabs.js.map +7 -0
  53. package/dist/esm/DSTabsCTX.js +27 -0
  54. package/dist/esm/DSTabsCTX.js.map +7 -0
  55. package/dist/esm/DSTabsDatatestid.js +17 -0
  56. package/dist/esm/DSTabsDatatestid.js.map +7 -0
  57. package/dist/esm/DSTabsTypes.js +2 -0
  58. package/dist/esm/DSTabsTypes.js.map +7 -0
  59. package/{esm → dist/esm}/config/useCrossRef.js +6 -4
  60. package/dist/esm/config/useCrossRef.js.map +7 -0
  61. package/dist/esm/config/useTabs.js +45 -0
  62. package/dist/esm/config/useTabs.js.map +7 -0
  63. package/{esm → dist/esm}/defaultProps.js +9 -8
  64. package/dist/esm/defaultProps.js.map +7 -0
  65. package/dist/esm/exportsRelated/DSTab.js +31 -0
  66. package/dist/esm/exportsRelated/DSTab.js.map +7 -0
  67. package/dist/esm/index.js +9 -0
  68. package/dist/esm/index.js.map +7 -0
  69. package/dist/esm/parts/carousel/Carousel.js +48 -0
  70. package/dist/esm/parts/carousel/Carousel.js.map +7 -0
  71. package/dist/esm/parts/carousel/styles.js +50 -0
  72. package/dist/esm/parts/carousel/styles.js.map +7 -0
  73. package/{esm → dist/esm}/parts/carousel/useCarousel.js +15 -34
  74. package/dist/esm/parts/carousel/useCarousel.js.map +7 -0
  75. package/{esm → dist/esm}/parts/carousel/useCarouselCallbacks.js +20 -28
  76. package/dist/esm/parts/carousel/useCarouselCallbacks.js.map +7 -0
  77. package/dist/esm/parts/tabBar/TabBar.js +149 -0
  78. package/dist/esm/parts/tabBar/TabBar.js.map +7 -0
  79. package/dist/esm/parts/tabBar/styles.js +265 -0
  80. package/dist/esm/parts/tabBar/styles.js.map +7 -0
  81. package/{esm → dist/esm}/parts/tabBar/useTabBar.js +27 -35
  82. package/dist/esm/parts/tabBar/useTabBar.js.map +7 -0
  83. package/dist/esm/parts/tabsContent/TabsContent.js +42 -0
  84. package/dist/esm/parts/tabsContent/TabsContent.js.map +7 -0
  85. package/dist/esm/parts/tabsContent/styles.js +10 -0
  86. package/dist/esm/parts/tabsContent/styles.js.map +7 -0
  87. package/dist/esm/parts/tabsPanel/TabsPanels.js +66 -0
  88. package/dist/esm/parts/tabsPanel/TabsPanels.js.map +7 -0
  89. package/dist/esm/parts/tabsPanel/styles.js +16 -0
  90. package/dist/esm/parts/tabsPanel/styles.js.map +7 -0
  91. package/dist/esm/propTypes.js +29 -0
  92. package/dist/esm/propTypes.js.map +7 -0
  93. package/dist/esm/utils/constants.js +27 -0
  94. package/dist/esm/utils/constants.js.map +7 -0
  95. package/{esm → dist/esm}/utils/helpers.js +19 -26
  96. package/dist/esm/utils/helpers.js.map +7 -0
  97. package/dist/esm/utils/hooks/useKeyboardNavigation.js +48 -0
  98. package/dist/esm/utils/hooks/useKeyboardNavigation.js.map +7 -0
  99. package/dist/esm/utils/hooks/useTabsCallbacks.js +31 -0
  100. package/dist/esm/utils/hooks/useTabsCallbacks.js.map +7 -0
  101. package/package.json +78 -69
  102. package/cjs/DSTabs.js +0 -45
  103. package/cjs/DSTabsCTX.js +0 -30
  104. package/cjs/DSTabsDatatestid.js +0 -18
  105. package/cjs/DSTabsTypes.js +0 -2
  106. package/cjs/config/useCrossRef.js +0 -17
  107. package/cjs/config/useTabs.js +0 -54
  108. package/cjs/defaultProps.js +0 -27
  109. package/cjs/exportsRelated/DSTab.js +0 -32
  110. package/cjs/index.js +0 -17
  111. package/cjs/parts/carousel/Carousel.js +0 -69
  112. package/cjs/parts/carousel/styles.js +0 -65
  113. package/cjs/parts/carousel/useCarousel.js +0 -78
  114. package/cjs/parts/carousel/useCarouselCallbacks.js +0 -72
  115. package/cjs/parts/tabBar/TabBar.js +0 -168
  116. package/cjs/parts/tabBar/styles.js +0 -200
  117. package/cjs/parts/tabBar/useTabBar.js +0 -87
  118. package/cjs/parts/tabsContent/TabsContent.js +0 -49
  119. package/cjs/parts/tabsContent/styles.js +0 -15
  120. package/cjs/parts/tabsPanel/TabsPanels.js +0 -102
  121. package/cjs/parts/tabsPanel/styles.js +0 -25
  122. package/cjs/propTypes.js +0 -33
  123. package/cjs/utils/constants.js +0 -28
  124. package/cjs/utils/helpers.js +0 -71
  125. package/cjs/utils/hooks/useKeyboardNavigation.js +0 -61
  126. package/cjs/utils/hooks/useTabsCallbacks.js +0 -41
  127. package/esm/DSTabs.js +0 -35
  128. package/esm/DSTabsCTX.js +0 -25
  129. package/esm/DSTabsDatatestid.js +0 -14
  130. package/esm/DSTabsTypes.js +0 -1
  131. package/esm/config/useTabs.js +0 -50
  132. package/esm/exportsRelated/DSTab.js +0 -21
  133. package/esm/index.js +0 -4
  134. package/esm/parts/carousel/Carousel.js +0 -61
  135. package/esm/parts/carousel/styles.js +0 -54
  136. package/esm/parts/tabBar/TabBar.js +0 -159
  137. package/esm/parts/tabBar/styles.js +0 -186
  138. package/esm/parts/tabsContent/TabsContent.js +0 -40
  139. package/esm/parts/tabsContent/styles.js +0 -7
  140. package/esm/parts/tabsPanel/TabsPanels.js +0 -92
  141. package/esm/parts/tabsPanel/styles.js +0 -17
  142. package/esm/propTypes.js +0 -28
  143. package/esm/utils/constants.js +0 -20
  144. package/esm/utils/hooks/useKeyboardNavigation.js +0 -57
  145. package/esm/utils/hooks/useTabsCallbacks.js +0 -37
  146. package/types/DSTabs.d.ts +0 -14
  147. package/types/DSTabsCTX.d.ts +0 -4
  148. package/types/DSTabsDatatestid.d.ts +0 -12
  149. package/types/DSTabsTypes.d.ts +0 -205
  150. package/types/config/useCrossRef.d.ts +0 -2
  151. package/types/config/useTabs.d.ts +0 -2
  152. package/types/defaultProps.d.ts +0 -2
  153. package/types/exportsRelated/DSTab.d.ts +0 -14
  154. package/types/index.d.ts +0 -5
  155. package/types/parts/carousel/Carousel.d.ts +0 -3
  156. package/types/parts/carousel/styles.d.ts +0 -6
  157. package/types/parts/carousel/useCarousel.d.ts +0 -2
  158. package/types/parts/carousel/useCarouselCallbacks.d.ts +0 -2
  159. package/types/parts/tabBar/TabBar.d.ts +0 -2
  160. package/types/parts/tabBar/styles.d.ts +0 -7
  161. package/types/parts/tabBar/useTabBar.d.ts +0 -2
  162. package/types/parts/tabsContent/TabsContent.d.ts +0 -2
  163. package/types/parts/tabsContent/styles.d.ts +0 -1
  164. package/types/parts/tabsPanel/TabsPanels.d.ts +0 -2
  165. package/types/parts/tabsPanel/styles.d.ts +0 -2
  166. package/types/propTypes.d.ts +0 -54
  167. package/types/tests/DSTabs.callbacks.test.d.ts +0 -1
  168. package/types/tests/DSTabs.func.test.d.ts +0 -1
  169. package/types/tests/DSTabs.keyboard.test.d.ts +0 -1
  170. package/types/tests/DSTabs.test.d.ts +0 -1
  171. package/types/utils/constants.d.ts +0 -18
  172. package/types/utils/helpers.d.ts +0 -7
  173. package/types/utils/hooks/useKeyboardNavigation.d.ts +0 -2
  174. package/types/utils/hooks/useTabsCallbacks.d.ts +0 -2
@@ -0,0 +1,66 @@
1
+ import * as React from "react";
2
+ import React2, { useMemo, useContext, useCallback } from "react";
3
+ import SwipeableViews from "react-swipeable-views";
4
+ import { StyledPanelContainer } from "./styles";
5
+ import { DSTabsContext } from "../../DSTabsCTX";
6
+ import { useTabsCallbacks } from "../../utils/hooks/useTabsCallbacks";
7
+ const TabsPanels = () => {
8
+ const {
9
+ actualActiveTab,
10
+ focusableTabsRef,
11
+ props: { animated, enableMouseEvents, onlyRenderActiveTab, children: tabs, isDSMobile }
12
+ } = useContext(DSTabsContext);
13
+ const { handleOnTabChange, handleOnMouseDown } = useTabsCallbacks();
14
+ const handleOnChangeIndex = useCallback((index, indexLatest) => {
15
+ if (!focusableTabsRef.current)
16
+ return;
17
+ const offset = index - indexLatest;
18
+ if (focusableTabsRef.current) {
19
+ const currentIndexFocusable = focusableTabsRef.current?.findIndex((el) => el.dataset.tabId === actualActiveTab);
20
+ const newFocusableIndex = currentIndexFocusable >= 0 ? currentIndexFocusable + offset : -1;
21
+ if (newFocusableIndex < 0 || newFocusableIndex > focusableTabsRef.current?.length || !focusableTabsRef.current?.[newFocusableIndex])
22
+ return;
23
+ handleOnTabChange(focusableTabsRef.current[newFocusableIndex].dataset?.tabId);
24
+ focusableTabsRef.current[newFocusableIndex].click();
25
+ }
26
+ }, [actualActiveTab, focusableTabsRef, handleOnTabChange]);
27
+ const firstSlideToShow = useMemo(() => {
28
+ const childrenArray = React2.Children.toArray(tabs);
29
+ const index = childrenArray.filter((tab) => tab.props.disabled !== true).findIndex((tab) => tab.props.tabId === actualActiveTab);
30
+ if (index === -1)
31
+ return 0;
32
+ return index;
33
+ }, [actualActiveTab, tabs]);
34
+ const panels = useMemo(() => React2.Children.map(tabs, (tab) => {
35
+ const { tabId: panelId = "", style, children: content, disabled } = tab.props;
36
+ const isActive = actualActiveTab === panelId;
37
+ const shouldRender = !onlyRenderActiveTab || isActive;
38
+ if (disabled)
39
+ return null;
40
+ return shouldRender && /* @__PURE__ */ React2.createElement(StyledPanelContainer, {
41
+ key: panelId,
42
+ id: panelId,
43
+ "aria-labelledby": `${panelId}-label`,
44
+ "aria-hidden": !isActive,
45
+ "data-panel-id": panelId,
46
+ "data-testid": "ds-tabs-tab-panel",
47
+ hidden: !isActive,
48
+ onMouseDown: handleOnMouseDown,
49
+ role: "tabpanel",
50
+ style,
51
+ isDSMobile
52
+ }, content);
53
+ }), [actualActiveTab, handleOnMouseDown, isDSMobile, onlyRenderActiveTab, tabs]);
54
+ if (animated) {
55
+ return /* @__PURE__ */ React2.createElement(SwipeableViews, {
56
+ enableMouseEvents,
57
+ index: firstSlideToShow,
58
+ onChangeIndex: handleOnChangeIndex
59
+ }, panels);
60
+ }
61
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, panels);
62
+ };
63
+ export {
64
+ TabsPanels
65
+ };
66
+ //# sourceMappingURL=TabsPanels.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/tabsPanel/TabsPanels.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, { useMemo, useContext, useCallback } from 'react';\nimport SwipeableViews from 'react-swipeable-views';\nimport { StyledPanelContainer } from './styles';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport { useTabsCallbacks } from '../../utils/hooks/useTabsCallbacks';\nimport { DSTabPropsWithDefaultT } from '../../DSTabsTypes';\n\nexport const TabsPanels = (): JSX.Element => {\n const {\n actualActiveTab,\n focusableTabsRef,\n props: { animated, enableMouseEvents, onlyRenderActiveTab, children: tabs, isDSMobile },\n } = useContext(DSTabsContext);\n\n const { handleOnTabChange, handleOnMouseDown } = useTabsCallbacks();\n\n const handleOnChangeIndex = useCallback(\n (index: number, indexLatest: number) => {\n if (!focusableTabsRef.current) return;\n\n const offset = index - indexLatest;\n\n if (focusableTabsRef.current) {\n const currentIndexFocusable = focusableTabsRef.current?.findIndex((el) => el.dataset.tabId === actualActiveTab);\n\n const newFocusableIndex = currentIndexFocusable >= 0 ? currentIndexFocusable + offset : -1;\n\n if (\n newFocusableIndex < 0 ||\n newFocusableIndex > focusableTabsRef.current?.length ||\n !focusableTabsRef.current?.[newFocusableIndex]\n )\n return;\n handleOnTabChange(focusableTabsRef.current[newFocusableIndex].dataset?.tabId as string);\n\n // swiping does not trigger centerTab function inside handleOnTabChange because there is no event\n // by clicking we are manually forcing to center the tab\n\n focusableTabsRef.current[newFocusableIndex].click();\n }\n },\n [actualActiveTab, focusableTabsRef, handleOnTabChange],\n );\n\n const firstSlideToShow = useMemo(() => {\n const childrenArray = React.Children.toArray(tabs) as React.ReactElement<DSTabPropsWithDefaultT>[];\n const index = childrenArray\n .filter((tab) => tab.props.disabled !== true)\n .findIndex((tab) => tab.props.tabId === actualActiveTab);\n\n if (index === -1) return 0;\n return index;\n }, [actualActiveTab, tabs]);\n\n const panels = useMemo(\n () =>\n React.Children.map(tabs, (tab: React.ReactElement<DSTabPropsWithDefaultT>) => {\n const { tabId: panelId = '', style, children: content, disabled } = tab.props;\n const isActive = actualActiveTab === panelId;\n const shouldRender = !onlyRenderActiveTab || isActive;\n\n if (disabled) return null;\n return (\n shouldRender && (\n <StyledPanelContainer\n key={panelId}\n id={panelId}\n aria-labelledby={`${panelId}-label`}\n aria-hidden={!isActive}\n data-panel-id={panelId}\n data-testid=\"ds-tabs-tab-panel\"\n hidden={!isActive}\n onMouseDown={handleOnMouseDown}\n role=\"tabpanel\"\n style={style}\n isDSMobile={isDSMobile}\n >\n {content}\n </StyledPanelContainer>\n )\n );\n }),\n [actualActiveTab, handleOnMouseDown, isDSMobile, onlyRenderActiveTab, tabs],\n );\n\n if (animated) {\n return (\n <SwipeableViews\n enableMouseEvents={enableMouseEvents}\n index={firstSlideToShow}\n onChangeIndex={handleOnChangeIndex}\n >\n {panels}\n </SwipeableViews>\n );\n }\n\n return <>{panels}</>;\n};\n"],
5
+ "mappings": "AAAA;ACCA;AACA;AACA;AACA;AACA;AAGO,MAAM,aAAa,MAAmB;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO,EAAE,UAAU,mBAAmB,qBAAqB,UAAU,MAAM;AAAA,MACzE,WAAW;AAEf,QAAM,EAAE,mBAAmB,sBAAsB;AAEjD,QAAM,sBAAsB,YAC1B,CAAC,OAAe,gBAAwB;AACtC,QAAI,CAAC,iBAAiB;AAAS;AAE/B,UAAM,SAAS,QAAQ;AAEvB,QAAI,iBAAiB,SAAS;AAC5B,YAAM,wBAAwB,iBAAiB,SAAS,UAAU,CAAC,OAAO,GAAG,QAAQ,UAAU;AAE/F,YAAM,oBAAoB,yBAAyB,IAAI,wBAAwB,SAAS;AAExF,UACE,oBAAoB,KACpB,oBAAoB,iBAAiB,SAAS,UAC9C,CAAC,iBAAiB,UAAU;AAE5B;AACF,wBAAkB,iBAAiB,QAAQ,mBAAmB,SAAS;AAKvE,uBAAiB,QAAQ,mBAAmB;AAAA;AAAA,KAGhD,CAAC,iBAAiB,kBAAkB;AAGtC,QAAM,mBAAmB,QAAQ,MAAM;AACrC,UAAM,gBAAgB,OAAM,SAAS,QAAQ;AAC7C,UAAM,QAAQ,cACX,OAAO,CAAC,QAAQ,IAAI,MAAM,aAAa,MACvC,UAAU,CAAC,QAAQ,IAAI,MAAM,UAAU;AAE1C,QAAI,UAAU;AAAI,aAAO;AACzB,WAAO;AAAA,KACN,CAAC,iBAAiB;AAErB,QAAM,SAAS,QACb,MACE,OAAM,SAAS,IAAI,MAAM,CAAC,QAAoD;AAC5E,UAAM,EAAE,OAAO,UAAU,IAAI,OAAO,UAAU,SAAS,aAAa,IAAI;AACxE,UAAM,WAAW,oBAAoB;AACrC,UAAM,eAAe,CAAC,uBAAuB;AAE7C,QAAI;AAAU,aAAO;AACrB,WACE,gBACE,qCAAC,sBAAD;AAAA,MACE,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,mBAAiB,GAAG;AAAA,MACpB,eAAa,CAAC;AAAA,MACd,iBAAe;AAAA,MACf,eAAY;AAAA,MACZ,QAAQ,CAAC;AAAA,MACT,aAAa;AAAA,MACb,MAAK;AAAA,MACL;AAAA,MACA;AAAA,OAEC;AAAA,MAKX,CAAC,iBAAiB,mBAAmB,YAAY,qBAAqB;AAGxE,MAAI,UAAU;AACZ,WACE,qCAAC,gBAAD;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP,eAAe;AAAA,OAEd;AAAA;AAKP,SAAO,4DAAG;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ import styled from "styled-components";
3
+ const StyledPanelContainer = styled.div`
4
+ padding-top: 8px;
5
+ &:focus {
6
+ outline: none;
7
+ }
8
+
9
+ ${({ hidden }) => hidden ? "visibility: hidden;" : ""}
10
+
11
+ ${({ isDSMobile }) => isDSMobile ? `padding-top: 0;` : ``}
12
+ `;
13
+ export {
14
+ StyledPanelContainer
15
+ };
16
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/tabsPanel/styles.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import styled from 'styled-components';\nimport type { StyledPanelContainerPropsT } from '../../DSTabsTypes';\n\nexport const StyledPanelContainer = styled.div<StyledPanelContainerPropsT>`\n padding-top: 8px;\n &:focus {\n outline: none;\n }\n\n ${({ hidden }) => (hidden ? 'visibility: hidden;' : '')}\n\n ${({ isDSMobile }) => (isDSMobile ? `padding-top: 0;` : ``)}\n`;\n"],
5
+ "mappings": "AAAA;ACAA;AAGO,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvC,CAAC,EAAE,aAAc,SAAS,wBAAwB;AAAA;AAAA,IAElD,CAAC,EAAE,iBAAkB,aAAa,oBAAoB;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ import { PropTypes } from "react-desc";
3
+ import { TabTypesValuesAsArray } from "./utils/constants";
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(void 0),
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({ current: PropTypes.any })]).description("Ref to the container.").defaultValue(void 0)
24
+ };
25
+ export {
26
+ tabPropTypes,
27
+ tabsPropTypes
28
+ };
29
+ //# sourceMappingURL=propTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/propTypes.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { PropTypes } from 'react-desc';\nimport { TabTypesValuesAsArray } from './utils/constants';\n\nexport const tabPropTypes = {\n tabId: PropTypes.string.description('Unique Tab id.').defaultValue(''),\n title: PropTypes.string.description('Tab title.').defaultValue(''),\n required: PropTypes.bool.description('Show a required mark next to the title.').defaultValue(false),\n disabled: PropTypes.bool.description('Disables Tab.').defaultValue(false),\n};\n\nexport const tabsPropTypes = {\n animated: PropTypes.bool.description('Whether the Tab transition should animate or not.').defaultValue(true),\n enableMouseEvents: PropTypes.bool.description('Enables Tab transition with mouse drag events.').defaultValue(false),\n allowTextSelection: PropTypes.bool\n .description('Allows text selection when mouse drag events are active.')\n .defaultValue(false),\n onTabChange: PropTypes.func.description('Handler when a user clicks on a different Tab.').defaultValue('() => {}'),\n type: PropTypes.oneOf(TabTypesValuesAsArray).description('Tab type.').defaultValue(TabTypesValuesAsArray[0]),\n tabBarExtraContent: PropTypes.element.description('Extra content next to the Tab Bar.').defaultValue(undefined),\n onlyRenderActiveTab: PropTypes.bool.description('Only renders the active Tab in the DOM.').defaultValue(false),\n withCarousel: PropTypes.bool.description('Activate carousel behavior.').defaultValue(false),\n activeTab: PropTypes.string\n .description('Passing a value makes DSTabs a controlled component.')\n .defaultValue('First DSTab children.'),\n children: PropTypes.node.description('Use DSTab component as children.').isRequired,\n tabsListAriaLabel: PropTypes.string.description('Aria label for the list.').defaultValue('Tab list.'),\n containerProps: PropTypes.object.description('Additional properties for the container.').defaultValue({}),\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({ current: PropTypes.any })])\n .description('Ref to the container.')\n .defaultValue(undefined),\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AAEO,MAAM,eAAe;AAAA,EAC1B,OAAO,UAAU,OAAO,YAAY,kBAAkB,aAAa;AAAA,EACnE,OAAO,UAAU,OAAO,YAAY,cAAc,aAAa;AAAA,EAC/D,UAAU,UAAU,KAAK,YAAY,2CAA2C,aAAa;AAAA,EAC7F,UAAU,UAAU,KAAK,YAAY,iBAAiB,aAAa;AAAA;AAG9D,MAAM,gBAAgB;AAAA,EAC3B,UAAU,UAAU,KAAK,YAAY,qDAAqD,aAAa;AAAA,EACvG,mBAAmB,UAAU,KAAK,YAAY,kDAAkD,aAAa;AAAA,EAC7G,oBAAoB,UAAU,KAC3B,YAAY,4DACZ,aAAa;AAAA,EAChB,aAAa,UAAU,KAAK,YAAY,kDAAkD,aAAa;AAAA,EACvG,MAAM,UAAU,MAAM,uBAAuB,YAAY,aAAa,aAAa,sBAAsB;AAAA,EACzG,oBAAoB,UAAU,QAAQ,YAAY,sCAAsC,aAAa;AAAA,EACrG,qBAAqB,UAAU,KAAK,YAAY,2CAA2C,aAAa;AAAA,EACxG,cAAc,UAAU,KAAK,YAAY,+BAA+B,aAAa;AAAA,EACrF,WAAW,UAAU,OAClB,YAAY,wDACZ,aAAa;AAAA,EAChB,UAAU,UAAU,KAAK,YAAY,oCAAoC;AAAA,EACzE,mBAAmB,UAAU,OAAO,YAAY,4BAA4B,aAAa;AAAA,EACzF,gBAAgB,UAAU,OAAO,YAAY,4CAA4C,aAAa;AAAA,EACtG,UAAU,UAAU,UAAU,CAAC,UAAU,MAAM,UAAU,MAAM,EAAE,SAAS,UAAU,SACjF,YAAY,yBACZ,aAAa;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ const TabTypes = {
3
+ NORMAL: "normal",
4
+ NORMAL_SMALL: "normal_small",
5
+ SUBTABS: "subtabs"
6
+ };
7
+ const TabTypesValuesAsArray = Object.values(TabTypes);
8
+ const MOBILE_GRADIENT_WIDTH = 24;
9
+ const defaultIndicatorStyles = {
10
+ left: "0px",
11
+ width: "0px",
12
+ backgroundWithTransparent: ""
13
+ };
14
+ const gradientOffsetsAccordingType = {
15
+ normal_small: 14,
16
+ normal: 16,
17
+ subtabs: 16,
18
+ fixedTabsHeaders: 0
19
+ };
20
+ export {
21
+ MOBILE_GRADIENT_WIDTH,
22
+ TabTypes,
23
+ TabTypesValuesAsArray,
24
+ defaultIndicatorStyles,
25
+ gradientOffsetsAccordingType
26
+ };
27
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/utils/constants.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const TabTypes = {\n NORMAL: 'normal' as const,\n NORMAL_SMALL: 'normal_small' as const,\n SUBTABS: 'subtabs' as const,\n};\n\nexport const TabTypesValuesAsArray = Object.values(TabTypes);\n\nexport const MOBILE_GRADIENT_WIDTH = 24;\n\nexport const defaultIndicatorStyles = {\n left: '0px',\n width: '0px',\n backgroundWithTransparent: '',\n};\n\nexport const gradientOffsetsAccordingType = {\n normal_small: 14,\n normal: 16,\n subtabs: 16,\n fixedTabsHeaders: 0,\n};\n"],
5
+ "mappings": "AAAA;ACAO,MAAM,WAAW;AAAA,EACtB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,SAAS;AAAA;AAGJ,MAAM,wBAAwB,OAAO,OAAO;AAE5C,MAAM,wBAAwB;AAE9B,MAAM,yBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,2BAA2B;AAAA;AAGtB,MAAM,+BAA+B;AAAA,EAC1C,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,kBAAkB;AAAA;",
6
+ "names": []
7
+ }
@@ -1,13 +1,11 @@
1
- import { MOBILE_GRADIENT_WIDTH } from './constants.js';
2
-
1
+ import * as React from "react";
2
+ import { MOBILE_GRADIENT_WIDTH } from "./constants";
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 = function (tab, tabContainer) {
9
- let firstOrLastItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
10
-
8
+ const isElementVisibleCarousel = (tab, tabContainer, firstOrLastItem = true) => {
11
9
  if (tab && tabContainer) {
12
10
  const tabDimensions = tab.getBoundingClientRect();
13
11
  const tabContainerDimensions = tabContainer.getBoundingClientRect();
@@ -18,34 +16,22 @@ const isElementVisibleCarousel = function (tab, tabContainer) {
18
16
  const tabContainerDimensionsRight = Math.floor(tabContainerDimensions.right);
19
17
  return tabDimensionsLeft >= tabContainerDimensionsLeft && tabDimensionsRight <= tabContainerDimensionsRight;
20
18
  }
21
-
22
19
  return false;
23
20
  };
24
- const centerTab = _ref => {
25
- let {
26
- e,
27
- listRef
28
- } = _ref;
29
-
21
+ const centerTab = ({ e, listRef }) => {
30
22
  if (listRef.current) {
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();
23
+ const { offsetLeft } = e?.target;
24
+ const { width: tabWidth } = (e?.target).getBoundingClientRect();
25
+ const { width: listWidth } = listRef.current.getBoundingClientRect();
40
26
  const extraSideSpace = listWidth - tabWidth;
41
27
  const leftOffsetToCenter = extraSideSpace > 0 ? extraSideSpace / 2 : 0;
42
28
  const centeredLeftOffset = offsetLeft > leftOffsetToCenter ? offsetLeft - leftOffsetToCenter : 0;
43
29
  listRef.current.scrollTo({
44
30
  top: 0,
45
31
  left: centeredLeftOffset,
46
- behavior: 'smooth'
32
+ behavior: "smooth"
47
33
  });
48
- e === null || e === void 0 ? void 0 : e.preventDefault();
34
+ e?.preventDefault();
49
35
  }
50
36
  };
51
37
  const getVisibleDimensions = (node, referenceNode) => {
@@ -56,7 +42,14 @@ const getVisibleDimensions = (node, referenceNode) => {
56
42
  height: Math.min(node.clientHeight, referenceNodeDimensions.top + referenceNode.clientHeight - nodeDimensions.top, node.clientHeight - (referenceNodeDimensions.top - nodeDimensions.top))
57
43
  };
58
44
  };
59
- const shouldHaveLeftGradient = scrollLeft => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;
45
+ const shouldHaveLeftGradient = (scrollLeft) => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;
60
46
  const shouldHaveRightGradient = (scrollLeft, clientWidth, scrollWidth) => Math.abs(scrollLeft) <= scrollWidth - (clientWidth + MOBILE_GRADIENT_WIDTH);
61
-
62
- export { centerTab, getVisibleDimensions, isElementVisible, isElementVisibleCarousel, shouldHaveLeftGradient, shouldHaveRightGradient };
47
+ export {
48
+ centerTab,
49
+ getVisibleDimensions,
50
+ isElementVisible,
51
+ isElementVisibleCarousel,
52
+ shouldHaveLeftGradient,
53
+ shouldHaveRightGradient
54
+ };
55
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/utils/helpers.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport type { CenterTabPropsT, VisibleDimensionsT } from '../DSTabsTypes';\nimport { MOBILE_GRADIENT_WIDTH } from './constants';\n\nexport const isElementVisible = (tab: HTMLElement, tabList: HTMLElement): boolean => {\n const tabDimensions = tab.getBoundingClientRect();\n const tabListDimensions = tabList.getBoundingClientRect();\n\n return tabDimensions.left <= tabListDimensions.left\n ? tabListDimensions.left - tabDimensions.left <= tabDimensions.width\n : tabDimensions.right - tabListDimensions.right <= tabDimensions.width;\n};\n\nexport const isElementVisibleCarousel = (\n tab: HTMLElement | null,\n tabContainer: HTMLDivElement | null,\n firstOrLastItem = true,\n): boolean => {\n if (tab && tabContainer) {\n const tabDimensions = tab.getBoundingClientRect();\n const tabContainerDimensions = tabContainer.getBoundingClientRect();\n\n const offset = firstOrLastItem ? 16 : 32;\n const tabDimensionsLeft = Math.floor(tabDimensions.left - offset);\n const tabDimensionsRight = Math.floor(tabDimensions.right + offset);\n\n const tabContainerDimensionsLeft = Math.floor(tabContainerDimensions.left);\n const tabContainerDimensionsRight = Math.floor(tabContainerDimensions.right);\n\n return tabDimensionsLeft >= tabContainerDimensionsLeft && tabDimensionsRight <= tabContainerDimensionsRight;\n }\n return false;\n};\n\nexport const centerTab = ({ e, listRef }: CenterTabPropsT) => {\n if (listRef.current) {\n const { offsetLeft } = e?.target as HTMLButtonElement;\n const { width: tabWidth } = (e?.target as HTMLButtonElement).getBoundingClientRect();\n const { width: listWidth } = listRef.current.getBoundingClientRect();\n const extraSideSpace = listWidth - tabWidth;\n const leftOffsetToCenter = extraSideSpace > 0 ? extraSideSpace / 2 : 0;\n const centeredLeftOffset = offsetLeft > leftOffsetToCenter ? offsetLeft - leftOffsetToCenter : 0;\n listRef.current.scrollTo({\n top: 0,\n left: centeredLeftOffset,\n behavior: 'smooth',\n });\n\n e?.preventDefault();\n }\n};\n\nexport const getVisibleDimensions = (node: HTMLElement, referenceNode: HTMLElement): VisibleDimensionsT => {\n const nodeDimensions = node.getBoundingClientRect();\n const referenceNodeDimensions = referenceNode.getBoundingClientRect();\n\n return {\n width: Math.min(\n node.clientWidth,\n referenceNodeDimensions.left + referenceNode.clientWidth - nodeDimensions.left,\n node.clientWidth - (referenceNodeDimensions.left - nodeDimensions.left),\n ),\n height: Math.min(\n node.clientHeight,\n referenceNodeDimensions.top + referenceNode.clientHeight - nodeDimensions.top,\n node.clientHeight - (referenceNodeDimensions.top - nodeDimensions.top),\n ),\n };\n};\n\nexport const shouldHaveLeftGradient = (scrollLeft: number): boolean => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;\n\nexport const shouldHaveRightGradient = (scrollLeft: number, clientWidth: number, scrollWidth: number): boolean =>\n Math.abs(scrollLeft) <= scrollWidth - (clientWidth + MOBILE_GRADIENT_WIDTH);\n"],
5
+ "mappings": "AAAA;ACEA;AAEO,MAAM,mBAAmB,CAAC,KAAkB,YAAkC;AACnF,QAAM,gBAAgB,IAAI;AAC1B,QAAM,oBAAoB,QAAQ;AAElC,SAAO,cAAc,QAAQ,kBAAkB,OAC3C,kBAAkB,OAAO,cAAc,QAAQ,cAAc,QAC7D,cAAc,QAAQ,kBAAkB,SAAS,cAAc;AAAA;AAG9D,MAAM,2BAA2B,CACtC,KACA,cACA,kBAAkB,SACN;AACZ,MAAI,OAAO,cAAc;AACvB,UAAM,gBAAgB,IAAI;AAC1B,UAAM,yBAAyB,aAAa;AAE5C,UAAM,SAAS,kBAAkB,KAAK;AACtC,UAAM,oBAAoB,KAAK,MAAM,cAAc,OAAO;AAC1D,UAAM,qBAAqB,KAAK,MAAM,cAAc,QAAQ;AAE5D,UAAM,6BAA6B,KAAK,MAAM,uBAAuB;AACrE,UAAM,8BAA8B,KAAK,MAAM,uBAAuB;AAEtE,WAAO,qBAAqB,8BAA8B,sBAAsB;AAAA;AAElF,SAAO;AAAA;AAGF,MAAM,YAAY,CAAC,EAAE,GAAG,cAA+B;AAC5D,MAAI,QAAQ,SAAS;AACnB,UAAM,EAAE,eAAe,GAAG;AAC1B,UAAM,EAAE,OAAO,aAAc,IAAG,QAA6B;AAC7D,UAAM,EAAE,OAAO,cAAc,QAAQ,QAAQ;AAC7C,UAAM,iBAAiB,YAAY;AACnC,UAAM,qBAAqB,iBAAiB,IAAI,iBAAiB,IAAI;AACrE,UAAM,qBAAqB,aAAa,qBAAqB,aAAa,qBAAqB;AAC/F,YAAQ,QAAQ,SAAS;AAAA,MACvB,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA;AAGZ,OAAG;AAAA;AAAA;AAIA,MAAM,uBAAuB,CAAC,MAAmB,kBAAmD;AACzG,QAAM,iBAAiB,KAAK;AAC5B,QAAM,0BAA0B,cAAc;AAE9C,SAAO;AAAA,IACL,OAAO,KAAK,IACV,KAAK,aACL,wBAAwB,OAAO,cAAc,cAAc,eAAe,MAC1E,KAAK,cAAe,yBAAwB,OAAO,eAAe;AAAA,IAEpE,QAAQ,KAAK,IACX,KAAK,cACL,wBAAwB,MAAM,cAAc,eAAe,eAAe,KAC1E,KAAK,eAAgB,yBAAwB,MAAM,eAAe;AAAA;AAAA;AAKjE,MAAM,yBAAyB,CAAC,eAAgC,KAAK,IAAI,cAAc;AAEvF,MAAM,0BAA0B,CAAC,YAAoB,aAAqB,gBAC/E,KAAK,IAAI,eAAe,cAAe,eAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,48 @@
1
+ import * as React from "react";
2
+ import { useCallback, useContext } from "react";
3
+ import { DSTabsContext, DSTabsCrossRefContext } from "../../DSTabsCTX";
4
+ const useKeyboardNavigation = () => {
5
+ const { focusableTabsRef } = useContext(DSTabsContext);
6
+ const { firstSubtabInternalRef, lastTabInternalRef } = useContext(DSTabsCrossRefContext);
7
+ const handleOnKeyDown = useCallback((e) => {
8
+ if (e.key === "ArrowRight" && focusableTabsRef.current) {
9
+ e.preventDefault();
10
+ e.stopPropagation();
11
+ const nextTab = focusableTabsRef.current[focusableTabsRef?.current?.indexOf?.(e.target) + 1];
12
+ if (nextTab)
13
+ nextTab.focus();
14
+ if (!nextTab)
15
+ return;
16
+ }
17
+ if (e.key === "ArrowLeft" && focusableTabsRef.current) {
18
+ e.preventDefault();
19
+ e.stopPropagation();
20
+ const prevTab = focusableTabsRef.current[focusableTabsRef?.current?.indexOf?.(e.target) - 1];
21
+ if (prevTab)
22
+ prevTab.focus();
23
+ if (!prevTab)
24
+ return;
25
+ }
26
+ if (e.key === "ArrowDown") {
27
+ e.preventDefault();
28
+ e.stopPropagation();
29
+ const canFocusCrossTabs = firstSubtabInternalRef?.current && lastTabInternalRef?.current;
30
+ if (canFocusCrossTabs)
31
+ firstSubtabInternalRef.current?.focus();
32
+ }
33
+ if (e.key === "ArrowUp") {
34
+ e.preventDefault();
35
+ e.stopPropagation();
36
+ const canFocusCrossTabs = firstSubtabInternalRef?.current && lastTabInternalRef?.current;
37
+ if (canFocusCrossTabs)
38
+ lastTabInternalRef.current?.focus();
39
+ }
40
+ }, [firstSubtabInternalRef, lastTabInternalRef, focusableTabsRef]);
41
+ return {
42
+ handleOnKeyDown
43
+ };
44
+ };
45
+ export {
46
+ useKeyboardNavigation
47
+ };
48
+ //# sourceMappingURL=useKeyboardNavigation.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/utils/hooks/useKeyboardNavigation.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useCallback, useContext } from 'react';\nimport { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX';\nimport type { UseKeyboardNavigationReturnTypeT } from '../../DSTabsTypes';\n\nexport const useKeyboardNavigation = (): UseKeyboardNavigationReturnTypeT => {\n const { focusableTabsRef } = useContext(DSTabsContext);\n const { firstSubtabInternalRef, lastTabInternalRef } = useContext(DSTabsCrossRefContext);\n\n const handleOnKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowRight' && focusableTabsRef.current) {\n e.preventDefault();\n e.stopPropagation();\n const nextTab =\n focusableTabsRef.current[focusableTabsRef?.current?.indexOf?.(e.target as HTMLButtonElement) + 1];\n if (nextTab) nextTab.focus();\n if (!nextTab) return;\n }\n\n if (e.key === 'ArrowLeft' && focusableTabsRef.current) {\n e.preventDefault();\n e.stopPropagation();\n const prevTab =\n focusableTabsRef.current[focusableTabsRef?.current?.indexOf?.(e.target as HTMLButtonElement) - 1];\n if (prevTab) prevTab.focus();\n if (!prevTab) return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n const canFocusCrossTabs = firstSubtabInternalRef?.current && lastTabInternalRef?.current;\n if (canFocusCrossTabs) firstSubtabInternalRef.current?.focus();\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n const canFocusCrossTabs = firstSubtabInternalRef?.current && lastTabInternalRef?.current;\n if (canFocusCrossTabs) lastTabInternalRef.current?.focus();\n }\n },\n [firstSubtabInternalRef, lastTabInternalRef, focusableTabsRef],\n );\n\n return {\n handleOnKeyDown,\n };\n};\n"],
5
+ "mappings": "AAAA;ACEA;AACA;AAGO,MAAM,wBAAwB,MAAwC;AAC3E,QAAM,EAAE,qBAAqB,WAAW;AACxC,QAAM,EAAE,wBAAwB,uBAAuB,WAAW;AAElE,QAAM,kBAAkB,YACtB,CAAC,MAA2B;AAC1B,QAAI,EAAE,QAAQ,gBAAgB,iBAAiB,SAAS;AACtD,QAAE;AACF,QAAE;AACF,YAAM,UACJ,iBAAiB,QAAQ,kBAAkB,SAAS,UAAU,EAAE,UAA+B;AACjG,UAAI;AAAS,gBAAQ;AACrB,UAAI,CAAC;AAAS;AAAA;AAGhB,QAAI,EAAE,QAAQ,eAAe,iBAAiB,SAAS;AACrD,QAAE;AACF,QAAE;AACF,YAAM,UACJ,iBAAiB,QAAQ,kBAAkB,SAAS,UAAU,EAAE,UAA+B;AACjG,UAAI;AAAS,gBAAQ;AACrB,UAAI,CAAC;AAAS;AAAA;AAGhB,QAAI,EAAE,QAAQ,aAAa;AACzB,QAAE;AACF,QAAE;AACF,YAAM,oBAAoB,wBAAwB,WAAW,oBAAoB;AACjF,UAAI;AAAmB,+BAAuB,SAAS;AAAA;AAGzD,QAAI,EAAE,QAAQ,WAAW;AACvB,QAAE;AACF,QAAE;AACF,YAAM,oBAAoB,wBAAwB,WAAW,oBAAoB;AACjF,UAAI;AAAmB,2BAAmB,SAAS;AAAA;AAAA,KAGvD,CAAC,wBAAwB,oBAAoB;AAG/C,SAAO;AAAA,IACL;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ import { useCallback, useContext } from "react";
3
+ import { centerTab } from "../helpers";
4
+ import { DSTabsContext } from "../../DSTabsCTX";
5
+ const useTabsCallbacks = () => {
6
+ const {
7
+ setInternalActiveTab,
8
+ tabsListRef,
9
+ props: { onTabChange, isDSMobile, allowTextSelection, fixedTabsHeaders }
10
+ } = useContext(DSTabsContext);
11
+ const handleOnTabChange = useCallback((tabId, e) => {
12
+ setInternalActiveTab(tabId);
13
+ onTabChange(tabId, e);
14
+ if (isDSMobile && !fixedTabsHeaders && e) {
15
+ centerTab({ e, listRef: tabsListRef });
16
+ }
17
+ }, [fixedTabsHeaders, isDSMobile, onTabChange, setInternalActiveTab, tabsListRef]);
18
+ const handleOnMouseDown = useCallback((e) => {
19
+ const role = e.target.getAttribute("role");
20
+ if (role !== "tabpanel" && allowTextSelection)
21
+ e.stopPropagation();
22
+ }, [allowTextSelection]);
23
+ return {
24
+ handleOnTabChange,
25
+ handleOnMouseDown
26
+ };
27
+ };
28
+ export {
29
+ useTabsCallbacks
30
+ };
31
+ //# sourceMappingURL=useTabsCallbacks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/utils/hooks/useTabsCallbacks.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useCallback, useContext } from 'react';\nimport { centerTab } from '../helpers';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport type { UseTabsCallbacksReturnTypeT } from '../../DSTabsTypes';\n\nexport const useTabsCallbacks = (): UseTabsCallbacksReturnTypeT => {\n const {\n setInternalActiveTab,\n tabsListRef,\n props: { onTabChange, isDSMobile, allowTextSelection, fixedTabsHeaders },\n } = useContext(DSTabsContext);\n\n const handleOnTabChange = useCallback(\n (tabId: string, e?: React.MouseEvent) => {\n setInternalActiveTab(tabId);\n onTabChange(tabId, e);\n if (isDSMobile && !fixedTabsHeaders && e) {\n centerTab({ e, listRef: tabsListRef });\n }\n },\n [fixedTabsHeaders, isDSMobile, onTabChange, setInternalActiveTab, tabsListRef],\n );\n\n const handleOnMouseDown = useCallback(\n (e: React.MouseEvent) => {\n const role = (e.target as HTMLElement).getAttribute('role');\n if (role !== 'tabpanel' && allowTextSelection) e.stopPropagation();\n },\n [allowTextSelection],\n );\n\n return {\n handleOnTabChange,\n handleOnMouseDown,\n };\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AAGO,MAAM,mBAAmB,MAAmC;AACjE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO,EAAE,aAAa,YAAY,oBAAoB;AAAA,MACpD,WAAW;AAEf,QAAM,oBAAoB,YACxB,CAAC,OAAe,MAAyB;AACvC,yBAAqB;AACrB,gBAAY,OAAO;AACnB,QAAI,cAAc,CAAC,oBAAoB,GAAG;AACxC,gBAAU,EAAE,GAAG,SAAS;AAAA;AAAA,KAG5B,CAAC,kBAAkB,YAAY,aAAa,sBAAsB;AAGpE,QAAM,oBAAoB,YACxB,CAAC,MAAwB;AACvB,UAAM,OAAQ,EAAE,OAAuB,aAAa;AACpD,QAAI,SAAS,cAAc;AAAoB,QAAE;AAAA,KAEnD,CAAC;AAGH,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,111 +1,114 @@
1
1
  {
2
2
  "name": "@elliemae/ds-tabs",
3
- "version": "2.3.1",
3
+ "version": "3.0.0-alpha.3",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Tabs",
6
- "module": "./esm/index.js",
7
- "main": "./cjs/index.js",
8
- "types": "./types/index.d.ts",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "module": "./dist/esm/index.js",
10
+ "main": "./dist/cjs/index.js",
11
+ "types": "./dist/types/index.d.ts",
9
12
  "exports": {
10
13
  ".": {
11
- "import": "./esm/index.js",
12
- "require": "./cjs/index.js"
14
+ "import": "./dist/esm/index.js",
15
+ "require": "./dist/cjs/index.js"
13
16
  },
14
17
  "./utils/hooks/useTabsCallbacks": {
15
- "import": "./esm/utils/hooks/useTabsCallbacks.js",
16
- "require": "./cjs/utils/hooks/useTabsCallbacks.js"
18
+ "import": "./dist/esm/utils/hooks/useTabsCallbacks.js",
19
+ "require": "./dist/cjs/utils/hooks/useTabsCallbacks.js"
17
20
  },
18
21
  "./utils/hooks/useKeyboardNavigation": {
19
- "import": "./esm/utils/hooks/useKeyboardNavigation.js",
20
- "require": "./cjs/utils/hooks/useKeyboardNavigation.js"
22
+ "import": "./dist/esm/utils/hooks/useKeyboardNavigation.js",
23
+ "require": "./dist/cjs/utils/hooks/useKeyboardNavigation.js"
21
24
  },
22
25
  "./utils/helpers": {
23
- "import": "./esm/utils/helpers.js",
24
- "require": "./cjs/utils/helpers.js"
26
+ "import": "./dist/esm/utils/helpers.js",
27
+ "require": "./dist/cjs/utils/helpers.js"
25
28
  },
26
29
  "./utils/constants": {
27
- "import": "./esm/utils/constants.js",
28
- "require": "./cjs/utils/constants.js"
30
+ "import": "./dist/esm/utils/constants.js",
31
+ "require": "./dist/cjs/utils/constants.js"
29
32
  },
30
33
  "./propTypes": {
31
- "import": "./esm/propTypes.js",
32
- "require": "./cjs/propTypes.js"
34
+ "import": "./dist/esm/propTypes.js",
35
+ "require": "./dist/cjs/propTypes.js"
33
36
  },
34
37
  "./parts/tabsPanel/TabsPanels": {
35
- "import": "./esm/parts/tabsPanel/TabsPanels.js",
36
- "require": "./cjs/parts/tabsPanel/TabsPanels.js"
38
+ "import": "./dist/esm/parts/tabsPanel/TabsPanels.js",
39
+ "require": "./dist/cjs/parts/tabsPanel/TabsPanels.js"
37
40
  },
38
41
  "./parts/tabsPanel/styles": {
39
- "import": "./esm/parts/tabsPanel/styles.js",
40
- "require": "./cjs/parts/tabsPanel/styles.js"
42
+ "import": "./dist/esm/parts/tabsPanel/styles.js",
43
+ "require": "./dist/cjs/parts/tabsPanel/styles.js"
41
44
  },
42
45
  "./parts/tabsContent/TabsContent": {
43
- "import": "./esm/parts/tabsContent/TabsContent.js",
44
- "require": "./cjs/parts/tabsContent/TabsContent.js"
46
+ "import": "./dist/esm/parts/tabsContent/TabsContent.js",
47
+ "require": "./dist/cjs/parts/tabsContent/TabsContent.js"
45
48
  },
46
49
  "./parts/tabsContent/styles": {
47
- "import": "./esm/parts/tabsContent/styles.js",
48
- "require": "./cjs/parts/tabsContent/styles.js"
50
+ "import": "./dist/esm/parts/tabsContent/styles.js",
51
+ "require": "./dist/cjs/parts/tabsContent/styles.js"
49
52
  },
50
53
  "./parts/tabBar/useTabBar": {
51
- "import": "./esm/parts/tabBar/useTabBar.js",
52
- "require": "./cjs/parts/tabBar/useTabBar.js"
54
+ "import": "./dist/esm/parts/tabBar/useTabBar.js",
55
+ "require": "./dist/cjs/parts/tabBar/useTabBar.js"
53
56
  },
54
57
  "./parts/tabBar/TabBar": {
55
- "import": "./esm/parts/tabBar/TabBar.js",
56
- "require": "./cjs/parts/tabBar/TabBar.js"
58
+ "import": "./dist/esm/parts/tabBar/TabBar.js",
59
+ "require": "./dist/cjs/parts/tabBar/TabBar.js"
57
60
  },
58
61
  "./parts/tabBar/styles": {
59
- "import": "./esm/parts/tabBar/styles.js",
60
- "require": "./cjs/parts/tabBar/styles.js"
62
+ "import": "./dist/esm/parts/tabBar/styles.js",
63
+ "require": "./dist/cjs/parts/tabBar/styles.js"
61
64
  },
62
65
  "./parts/carousel/useCarouselCallbacks": {
63
- "import": "./esm/parts/carousel/useCarouselCallbacks.js",
64
- "require": "./cjs/parts/carousel/useCarouselCallbacks.js"
66
+ "import": "./dist/esm/parts/carousel/useCarouselCallbacks.js",
67
+ "require": "./dist/cjs/parts/carousel/useCarouselCallbacks.js"
65
68
  },
66
69
  "./parts/carousel/useCarousel": {
67
- "import": "./esm/parts/carousel/useCarousel.js",
68
- "require": "./cjs/parts/carousel/useCarousel.js"
70
+ "import": "./dist/esm/parts/carousel/useCarousel.js",
71
+ "require": "./dist/cjs/parts/carousel/useCarousel.js"
69
72
  },
70
73
  "./parts/carousel/styles": {
71
- "import": "./esm/parts/carousel/styles.js",
72
- "require": "./cjs/parts/carousel/styles.js"
74
+ "import": "./dist/esm/parts/carousel/styles.js",
75
+ "require": "./dist/cjs/parts/carousel/styles.js"
73
76
  },
74
77
  "./parts/carousel/Carousel": {
75
- "import": "./esm/parts/carousel/Carousel.js",
76
- "require": "./cjs/parts/carousel/Carousel.js"
78
+ "import": "./dist/esm/parts/carousel/Carousel.js",
79
+ "require": "./dist/cjs/parts/carousel/Carousel.js"
77
80
  },
78
81
  "./exportsRelated/DSTab": {
79
- "import": "./esm/exportsRelated/DSTab.js",
80
- "require": "./cjs/exportsRelated/DSTab.js"
82
+ "import": "./dist/esm/exportsRelated/DSTab.js",
83
+ "require": "./dist/cjs/exportsRelated/DSTab.js"
81
84
  },
82
85
  "./DSTabsTypes": {
83
- "import": "./esm/DSTabsTypes.js",
84
- "require": "./cjs/DSTabsTypes.js"
86
+ "import": "./dist/esm/DSTabsTypes.js",
87
+ "require": "./dist/cjs/DSTabsTypes.js"
85
88
  },
86
89
  "./DSTabsDatatestid": {
87
- "import": "./esm/DSTabsDatatestid.js",
88
- "require": "./cjs/DSTabsDatatestid.js"
90
+ "import": "./dist/esm/DSTabsDatatestid.js",
91
+ "require": "./dist/cjs/DSTabsDatatestid.js"
89
92
  },
90
93
  "./DSTabsCTX": {
91
- "import": "./esm/DSTabsCTX.js",
92
- "require": "./cjs/DSTabsCTX.js"
94
+ "import": "./dist/esm/DSTabsCTX.js",
95
+ "require": "./dist/cjs/DSTabsCTX.js"
93
96
  },
94
97
  "./DSTabs": {
95
- "import": "./esm/DSTabs.js",
96
- "require": "./cjs/DSTabs.js"
98
+ "import": "./dist/esm/DSTabs.js",
99
+ "require": "./dist/cjs/DSTabs.js"
97
100
  },
98
101
  "./defaultProps": {
99
- "import": "./esm/defaultProps.js",
100
- "require": "./cjs/defaultProps.js"
102
+ "import": "./dist/esm/defaultProps.js",
103
+ "require": "./dist/cjs/defaultProps.js"
101
104
  },
102
105
  "./config/useTabs": {
103
- "import": "./esm/config/useTabs.js",
104
- "require": "./cjs/config/useTabs.js"
106
+ "import": "./dist/esm/config/useTabs.js",
107
+ "require": "./dist/cjs/config/useTabs.js"
105
108
  },
106
109
  "./config/useCrossRef": {
107
- "import": "./esm/config/useCrossRef.js",
108
- "require": "./cjs/config/useCrossRef.js"
110
+ "import": "./dist/esm/config/useCrossRef.js",
111
+ "require": "./dist/cjs/config/useCrossRef.js"
109
112
  }
110
113
  },
111
114
  "sideEffects": [
@@ -117,29 +120,29 @@
117
120
  "url": "https://git.elliemae.io/platform-ui/dimsum.git"
118
121
  },
119
122
  "engines": {
120
- "npm": ">=7",
121
- "node": ">=14"
123
+ "pnpm": ">=6",
124
+ "node": ">=16"
122
125
  },
123
126
  "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"
127
+ "jestSonar": {
128
+ "sonar56x": true,
129
+ "reportPath": "reports",
130
+ "reportFile": "tests.xml",
131
+ "indent": 4
129
132
  },
130
133
  "dependencies": {
131
- "@elliemae/ds-button": "2.3.1",
132
- "@elliemae/ds-icon": "2.3.1",
133
- "@elliemae/ds-icons": "2.3.1",
134
- "@elliemae/ds-props-helpers": "2.3.1",
135
- "@elliemae/ds-system": "2.3.1",
134
+ "@elliemae/ds-button": "3.0.0-alpha.3",
135
+ "@elliemae/ds-icon": "3.0.0-alpha.3",
136
+ "@elliemae/ds-icons": "3.0.0-alpha.3",
137
+ "@elliemae/ds-props-helpers": "3.0.0-alpha.3",
138
+ "@elliemae/ds-system": "3.0.0-alpha.3",
136
139
  "@react-hook/resize-observer": "~1.2.5",
137
140
  "prop-types": "~15.7.2",
138
141
  "react-desc": "~4.1.3",
139
142
  "react-swipeable-views": "~0.13.9"
140
143
  },
141
144
  "devDependencies": {
142
- "@testing-library/jest-dom": "~5.15.0",
145
+ "@testing-library/jest-dom": "~5.15.1",
143
146
  "@testing-library/react": "~12.1.2",
144
147
  "@testing-library/user-event": "~13.5.0",
145
148
  "styled-components": "~5.3.3"
@@ -152,7 +155,13 @@
152
155
  },
153
156
  "publishConfig": {
154
157
  "access": "public",
155
- "directory": "dist",
156
- "generateSubmodules": true
158
+ "typeSafety": false
159
+ },
160
+ "scripts": {
161
+ "dev": "cross-env NODE_ENV=development node ../../scripts/build/build.mjs --watch",
162
+ "test": "node ../../scripts/testing/test.mjs",
163
+ "lint": "node ../../scripts/lint.mjs",
164
+ "dts": "node ../../scripts/dts.mjs",
165
+ "build": "cross-env NODE_ENV=production node ../../scripts/build/build.mjs"
157
166
  }
158
167
  }