@elliemae/ds-tabs 3.0.0-next.1 → 3.0.0-next.13

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 (171) 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/config/useCrossRef.js +44 -0
  8. package/dist/cjs/config/useCrossRef.js.map +7 -0
  9. package/dist/cjs/config/useTabs.js +74 -0
  10. package/dist/cjs/config/useTabs.js.map +7 -0
  11. package/dist/cjs/exported-related/DSTab.js +58 -0
  12. package/dist/cjs/exported-related/DSTab.js.map +7 -0
  13. package/dist/cjs/index.js +38 -0
  14. package/dist/cjs/index.js.map +7 -0
  15. package/dist/cjs/parts/carousel/Carousel.js +77 -0
  16. package/dist/cjs/parts/carousel/Carousel.js.map +7 -0
  17. package/dist/cjs/parts/carousel/styles.js +79 -0
  18. package/dist/cjs/parts/carousel/styles.js.map +7 -0
  19. package/dist/cjs/parts/carousel/useCarousel.js +80 -0
  20. package/dist/cjs/parts/carousel/useCarousel.js.map +7 -0
  21. package/dist/cjs/parts/carousel/useCarouselCallbacks.js +89 -0
  22. package/dist/cjs/parts/carousel/useCarouselCallbacks.js.map +7 -0
  23. package/dist/cjs/parts/tabBar/TabBar.js +171 -0
  24. package/dist/cjs/parts/tabBar/TabBar.js.map +7 -0
  25. package/dist/cjs/parts/tabBar/styles.js +294 -0
  26. package/dist/cjs/parts/tabBar/styles.js.map +7 -0
  27. package/dist/cjs/parts/tabBar/useTabBar.js +103 -0
  28. package/dist/cjs/parts/tabBar/useTabBar.js.map +7 -0
  29. package/dist/cjs/parts/tabsContent/TabsContent.js +69 -0
  30. package/dist/cjs/parts/tabsContent/TabsContent.js.map +7 -0
  31. package/dist/cjs/parts/tabsContent/styles.js +39 -0
  32. package/dist/cjs/parts/tabsContent/styles.js.map +7 -0
  33. package/dist/cjs/parts/tabsPanel/TabsPanels.js +95 -0
  34. package/dist/cjs/parts/tabsPanel/TabsPanels.js.map +7 -0
  35. package/dist/cjs/parts/tabsPanel/styles.js +45 -0
  36. package/dist/cjs/parts/tabsPanel/styles.js.map +7 -0
  37. package/dist/cjs/propTypes.js +77 -0
  38. package/dist/cjs/propTypes.js.map +7 -0
  39. package/dist/cjs/sharedTypes.js +27 -0
  40. package/dist/cjs/sharedTypes.js.map +7 -0
  41. package/dist/cjs/utils/constants.js +56 -0
  42. package/dist/cjs/utils/constants.js.map +7 -0
  43. package/dist/cjs/utils/helpers.js +84 -0
  44. package/dist/cjs/utils/helpers.js.map +7 -0
  45. package/dist/cjs/utils/hooks/useKeyboardNavigation.js +77 -0
  46. package/dist/cjs/utils/hooks/useKeyboardNavigation.js.map +7 -0
  47. package/dist/cjs/utils/hooks/useTabsCallbacks.js +60 -0
  48. package/dist/cjs/utils/hooks/useTabsCallbacks.js.map +7 -0
  49. package/dist/esm/DSTabs.js +34 -0
  50. package/dist/esm/DSTabs.js.map +7 -0
  51. package/dist/esm/DSTabsCTX.js +27 -0
  52. package/dist/esm/DSTabsCTX.js.map +7 -0
  53. package/dist/esm/DSTabsDatatestid.js +17 -0
  54. package/dist/esm/DSTabsDatatestid.js.map +7 -0
  55. package/{esm → dist/esm}/config/useCrossRef.js +6 -4
  56. package/dist/esm/config/useCrossRef.js.map +7 -0
  57. package/dist/esm/config/useTabs.js +45 -0
  58. package/dist/esm/config/useTabs.js.map +7 -0
  59. package/dist/esm/exported-related/DSTab.js +31 -0
  60. package/dist/esm/exported-related/DSTab.js.map +7 -0
  61. package/dist/esm/index.js +9 -0
  62. package/dist/esm/index.js.map +7 -0
  63. package/dist/esm/parts/carousel/Carousel.js +48 -0
  64. package/dist/esm/parts/carousel/Carousel.js.map +7 -0
  65. package/dist/esm/parts/carousel/styles.js +50 -0
  66. package/dist/esm/parts/carousel/styles.js.map +7 -0
  67. package/{esm → dist/esm}/parts/carousel/useCarousel.js +15 -34
  68. package/dist/esm/parts/carousel/useCarousel.js.map +7 -0
  69. package/{esm → dist/esm}/parts/carousel/useCarouselCallbacks.js +20 -28
  70. package/dist/esm/parts/carousel/useCarouselCallbacks.js.map +7 -0
  71. package/dist/esm/parts/tabBar/TabBar.js +149 -0
  72. package/dist/esm/parts/tabBar/TabBar.js.map +7 -0
  73. package/dist/esm/parts/tabBar/styles.js +265 -0
  74. package/dist/esm/parts/tabBar/styles.js.map +7 -0
  75. package/{esm → dist/esm}/parts/tabBar/useTabBar.js +26 -31
  76. package/dist/esm/parts/tabBar/useTabBar.js.map +7 -0
  77. package/dist/esm/parts/tabsContent/TabsContent.js +42 -0
  78. package/dist/esm/parts/tabsContent/TabsContent.js.map +7 -0
  79. package/dist/esm/parts/tabsContent/styles.js +10 -0
  80. package/dist/esm/parts/tabsContent/styles.js.map +7 -0
  81. package/dist/esm/parts/tabsPanel/TabsPanels.js +66 -0
  82. package/dist/esm/parts/tabsPanel/TabsPanels.js.map +7 -0
  83. package/dist/esm/parts/tabsPanel/styles.js +16 -0
  84. package/dist/esm/parts/tabsPanel/styles.js.map +7 -0
  85. package/dist/esm/propTypes.js +48 -0
  86. package/dist/esm/propTypes.js.map +7 -0
  87. package/dist/esm/sharedTypes.js +2 -0
  88. package/dist/esm/sharedTypes.js.map +7 -0
  89. package/dist/esm/utils/constants.js +27 -0
  90. package/dist/esm/utils/constants.js.map +7 -0
  91. package/{esm → dist/esm}/utils/helpers.js +19 -28
  92. package/dist/esm/utils/helpers.js.map +7 -0
  93. package/dist/esm/utils/hooks/useKeyboardNavigation.js +48 -0
  94. package/dist/esm/utils/hooks/useKeyboardNavigation.js.map +7 -0
  95. package/dist/esm/utils/hooks/useTabsCallbacks.js +31 -0
  96. package/dist/esm/utils/hooks/useTabsCallbacks.js.map +7 -0
  97. package/package.json +79 -70
  98. package/cjs/DSTabs.js +0 -45
  99. package/cjs/DSTabsCTX.js +0 -30
  100. package/cjs/DSTabsDatatestid.js +0 -18
  101. package/cjs/DSTabsTypes.js +0 -2
  102. package/cjs/config/useCrossRef.js +0 -17
  103. package/cjs/config/useTabs.js +0 -51
  104. package/cjs/defaultProps.js +0 -27
  105. package/cjs/exportsRelated/DSTab.js +0 -32
  106. package/cjs/index.js +0 -17
  107. package/cjs/parts/carousel/Carousel.js +0 -69
  108. package/cjs/parts/carousel/styles.js +0 -65
  109. package/cjs/parts/carousel/useCarousel.js +0 -78
  110. package/cjs/parts/carousel/useCarouselCallbacks.js +0 -72
  111. package/cjs/parts/tabBar/TabBar.js +0 -168
  112. package/cjs/parts/tabBar/styles.js +0 -200
  113. package/cjs/parts/tabBar/useTabBar.js +0 -87
  114. package/cjs/parts/tabsContent/TabsContent.js +0 -49
  115. package/cjs/parts/tabsContent/styles.js +0 -15
  116. package/cjs/parts/tabsPanel/TabsPanels.js +0 -77
  117. package/cjs/parts/tabsPanel/styles.js +0 -25
  118. package/cjs/propTypes.js +0 -33
  119. package/cjs/utils/constants.js +0 -28
  120. package/cjs/utils/helpers.js +0 -75
  121. package/cjs/utils/hooks/useKeyboardNavigation.js +0 -61
  122. package/cjs/utils/hooks/useTabsCallbacks.js +0 -41
  123. package/esm/DSTabs.js +0 -35
  124. package/esm/DSTabsCTX.js +0 -25
  125. package/esm/DSTabsDatatestid.js +0 -14
  126. package/esm/DSTabsTypes.js +0 -1
  127. package/esm/config/useTabs.js +0 -47
  128. package/esm/defaultProps.js +0 -23
  129. package/esm/exportsRelated/DSTab.js +0 -21
  130. package/esm/index.js +0 -4
  131. package/esm/parts/carousel/Carousel.js +0 -61
  132. package/esm/parts/carousel/styles.js +0 -54
  133. package/esm/parts/tabBar/TabBar.js +0 -159
  134. package/esm/parts/tabBar/styles.js +0 -186
  135. package/esm/parts/tabsContent/TabsContent.js +0 -40
  136. package/esm/parts/tabsContent/styles.js +0 -7
  137. package/esm/parts/tabsPanel/TabsPanels.js +0 -67
  138. package/esm/parts/tabsPanel/styles.js +0 -17
  139. package/esm/propTypes.js +0 -28
  140. package/esm/utils/constants.js +0 -20
  141. package/esm/utils/hooks/useKeyboardNavigation.js +0 -57
  142. package/esm/utils/hooks/useTabsCallbacks.js +0 -37
  143. package/types/DSTabs.d.ts +0 -14
  144. package/types/DSTabsCTX.d.ts +0 -4
  145. package/types/DSTabsDatatestid.d.ts +0 -12
  146. package/types/DSTabsTypes.d.ts +0 -205
  147. package/types/config/useCrossRef.d.ts +0 -2
  148. package/types/config/useTabs.d.ts +0 -2
  149. package/types/defaultProps.d.ts +0 -2
  150. package/types/exportsRelated/DSTab.d.ts +0 -14
  151. package/types/index.d.ts +0 -5
  152. package/types/parts/carousel/Carousel.d.ts +0 -3
  153. package/types/parts/carousel/styles.d.ts +0 -9
  154. package/types/parts/carousel/useCarousel.d.ts +0 -2
  155. package/types/parts/carousel/useCarouselCallbacks.d.ts +0 -2
  156. package/types/parts/tabBar/TabBar.d.ts +0 -2
  157. package/types/parts/tabBar/styles.d.ts +0 -7
  158. package/types/parts/tabBar/useTabBar.d.ts +0 -2
  159. package/types/parts/tabsContent/TabsContent.d.ts +0 -2
  160. package/types/parts/tabsContent/styles.d.ts +0 -1
  161. package/types/parts/tabsPanel/TabsPanels.d.ts +0 -2
  162. package/types/parts/tabsPanel/styles.d.ts +0 -2
  163. package/types/propTypes.d.ts +0 -54
  164. package/types/tests/DSTabs.callbacks.test.d.ts +0 -1
  165. package/types/tests/DSTabs.func.test.d.ts +0 -1
  166. package/types/tests/DSTabs.keyboard.test.d.ts +0 -1
  167. package/types/tests/DSTabs.test.d.ts +0 -1
  168. package/types/utils/constants.d.ts +0 -18
  169. package/types/utils/helpers.d.ts +0 -9
  170. package/types/utils/hooks/useKeyboardNavigation.d.ts +0 -2
  171. 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 type { DSTabT } from '../../propTypes';\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<DSTabT.Props>[];\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<DSTabT.Props>) => {\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,QAA0C;AAClE,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';\n\ninterface StyledPanelContainerPropsT {\n hidden: boolean;\n isDSMobile: boolean;\n}\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;AAOO,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,48 @@
1
+ import * as React from "react";
2
+ import { PropTypes } from "react-desc";
3
+ import { TabTypes, TabTypesValuesAsArray } from "./utils/constants";
4
+ const noop = () => {
5
+ };
6
+ const tabPropTypes = {
7
+ tabId: PropTypes.string.description("Unique Tab id.").defaultValue(""),
8
+ title: PropTypes.string.description("Tab title.").defaultValue(""),
9
+ required: PropTypes.bool.description("Show a required mark next to the title.").defaultValue(false),
10
+ disabled: PropTypes.bool.description("Disables Tab.").defaultValue(false)
11
+ };
12
+ const tabsPropTypes = {
13
+ animated: PropTypes.bool.description("Whether the Tab transition should animate or not.").defaultValue(true),
14
+ enableMouseEvents: PropTypes.bool.description("Enables Tab transition with mouse drag events.").defaultValue(false),
15
+ allowTextSelection: PropTypes.bool.description("Allows text selection when mouse drag events are active.").defaultValue(false),
16
+ onTabChange: PropTypes.func.description("Handler when a user clicks on a different Tab.").defaultValue("() => {}"),
17
+ type: PropTypes.oneOf(TabTypesValuesAsArray).description("Tab type.").defaultValue(TabTypesValuesAsArray[0]),
18
+ tabBarExtraContent: PropTypes.element.description("Extra content next to the Tab Bar.").defaultValue(void 0),
19
+ onlyRenderActiveTab: PropTypes.bool.description("Only renders the active Tab in the DOM.").defaultValue(false),
20
+ withCarousel: PropTypes.bool.description("Activate carousel behavior.").defaultValue(false),
21
+ activeTab: PropTypes.string.description("Passing a value makes DSTabs a controlled component.").defaultValue("First DSTab children."),
22
+ children: PropTypes.node.description("Use DSTab component as children.").isRequired,
23
+ tabsListAriaLabel: PropTypes.string.description("Aria label for the list.").defaultValue("Tab list."),
24
+ containerProps: PropTypes.object.description("Additional properties for the container.").defaultValue({}),
25
+ innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({ current: PropTypes.any })]).description("Ref to the container.").defaultValue(void 0)
26
+ };
27
+ const tabsDefaultProps = {
28
+ containerProps: {},
29
+ animated: true,
30
+ enableMouseEvents: false,
31
+ allowTextSelection: false,
32
+ onTabChange: noop,
33
+ tabsListAriaLabel: "Tab list",
34
+ type: TabTypes.NORMAL,
35
+ onlyRenderActiveTab: false,
36
+ withCarousel: false,
37
+ isDSMobile: false,
38
+ showSelectionIndicator: true,
39
+ children: [],
40
+ fixedTabsHeaders: false,
41
+ showSeparator: true
42
+ };
43
+ export {
44
+ tabPropTypes,
45
+ tabsDefaultProps,
46
+ tabsPropTypes
47
+ };
48
+ //# 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 { TabTypes, TabTypesValuesAsArray } from './utils/constants';\nimport type { DSTabsInternalsT } from './sharedTypes';\n\nconst noop = (): void => {};\n\nexport declare namespace DSTabT {\n export interface PropsOptional {\n style?: Record<string, unknown>;\n title?: string;\n required?: boolean;\n disabled?: boolean;\n ref?: React.MutableRefObject<HTMLButtonElement>;\n onClick?: (tabId: string, e: React.MouseEvent) => null | void;\n onKeyDown?: (e: React.KeyboardEvent) => null | void;\n }\n\n export interface PropsRequired {\n children: React.ReactNode;\n tabId: string;\n }\n\n export interface Props extends PropsOptional, PropsRequired {}\n}\n\nexport declare namespace DSTabsT {\n export interface DefaultProps {\n containerProps: Record<string, unknown>;\n animated: boolean;\n enableMouseEvents: boolean;\n allowTextSelection: boolean;\n onTabChange: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel: string;\n type: DSTabsInternalsT.TabTypesT;\n children: React.ReactElement<DSTabT.Props>[];\n onlyRenderActiveTab: boolean;\n fixedTabsHeaders: boolean;\n withCarousel: boolean;\n isDSMobile: boolean;\n showSelectionIndicator: boolean;\n showSeparator: boolean;\n }\n\n export interface PropsOptional {\n firstSubtabRef?: React.MutableRefObject<HTMLElement>;\n lastTabRef?: React.MutableRefObject<HTMLElement>;\n tabBarExtraContent?: React.ReactNode;\n activeTab?: string;\n innerRef?: React.MutableRefObject<HTMLDivElement>;\n }\n\n export interface Props extends Partial<DefaultProps>, PropsOptional {}\n\n export interface InternalProps extends DefaultProps, PropsOptional {}\n}\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\nexport const tabsDefaultProps: DSTabsT.DefaultProps = {\n containerProps: {},\n animated: true,\n enableMouseEvents: false,\n allowTextSelection: false,\n onTabChange: noop,\n tabsListAriaLabel: 'Tab list',\n type: TabTypes.NORMAL,\n onlyRenderActiveTab: false,\n withCarousel: false,\n isDSMobile: false,\n showSelectionIndicator: true,\n children: [],\n fixedTabsHeaders: false,\n showSeparator: true,\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AAGA,MAAM,OAAO,MAAY;AAAA;AAoDlB,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;AAGX,MAAM,mBAAyC;AAAA,EACpD,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,MAAM,SAAS;AAAA,EACf,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,eAAe;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ //# sourceMappingURL=sharedTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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,9 +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 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;
45
+ const shouldHaveLeftGradient = (scrollLeft) => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;
62
46
  const shouldHaveRightGradient = (scrollLeft, clientWidth, scrollWidth) => Math.abs(scrollLeft) <= scrollWidth - (clientWidth + MOBILE_GRADIENT_WIDTH);
63
-
64
- export { centerTab, getIdByIndex, getIndexById, 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 { MOBILE_GRADIENT_WIDTH } from './constants';\n\ninterface VisibleDimensionsT {\n width: number;\n height: number;\n}\n\ninterface CenterTabPropsT {\n e?: React.MouseEvent | React.FocusEvent;\n listRef: React.MutableRefObject<HTMLDivElement | null>;\n}\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;ACCA;AAYO,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';\n\ninterface UseKeyboardNavigationReturnTypeT {\n handleOnKeyDown: (e: React.KeyboardEvent) => void;\n}\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;AAMO,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';\n\ninterface UseTabsCallbacksReturnTypeT {\n handleOnTabChange: (tabId: string, e?: React.MouseEvent) => void;\n handleOnMouseDown: (e: React.MouseEvent) => void;\n}\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;AAOO,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
+ }