@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,27 @@
1
+ import * as React from "react";
2
+ import { createContext, createRef } from "react";
3
+ import { tabsDefaultProps as defaultProps } from "./defaultProps";
4
+ const noop = () => {
5
+ };
6
+ const defaultContext = {
7
+ props: defaultProps,
8
+ tabsRef: createRef(),
9
+ tabsListRef: createRef(),
10
+ carouselOnlyListRef: createRef(),
11
+ focusableTabsRef: createRef(),
12
+ tabsRefAsArray: createRef(),
13
+ actualActiveTabRef: createRef(),
14
+ setInternalActiveTab: noop,
15
+ actualActiveTab: ""
16
+ };
17
+ const defaultCrossRefsContext = {
18
+ lastTabInternalRef: createRef(),
19
+ firstSubtabInternalRef: createRef()
20
+ };
21
+ const DSTabsContext = createContext(defaultContext);
22
+ const DSTabsCrossRefContext = createContext(defaultCrossRefsContext);
23
+ export {
24
+ DSTabsContext,
25
+ DSTabsCrossRefContext
26
+ };
27
+ //# sourceMappingURL=DSTabsCTX.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/DSTabsCTX.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { createContext, createRef } from 'react';\nimport { tabsDefaultProps as defaultProps } from './defaultProps';\nimport type { DSTabsUseCrossRefContextT, DSTabsUseTabsContextT } from './DSTabsTypes';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nconst defaultContext = {\n props: defaultProps,\n tabsRef: createRef<Record<number, HTMLButtonElement> | null>(),\n tabsListRef: createRef<HTMLDivElement | null>(),\n carouselOnlyListRef: createRef<HTMLDivElement | null>(),\n focusableTabsRef: createRef<HTMLButtonElement[] | null>(),\n tabsRefAsArray: createRef<HTMLButtonElement[] | null>(),\n actualActiveTabRef: createRef<HTMLButtonElement | null>(),\n setInternalActiveTab: noop,\n actualActiveTab: '',\n};\n\nconst defaultCrossRefsContext = {\n lastTabInternalRef: createRef<HTMLButtonElement | null>(),\n firstSubtabInternalRef: createRef<HTMLButtonElement | null>(),\n};\n\nexport const DSTabsContext = createContext<DSTabsUseTabsContextT>(defaultContext);\nexport const DSTabsCrossRefContext = createContext<DSTabsUseCrossRefContextT>(defaultCrossRefsContext);\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AAIA,MAAM,OAAO,MAAM;AAAA;AAEnB,MAAM,iBAAiB;AAAA,EACrB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,iBAAiB;AAAA;AAGnB,MAAM,0BAA0B;AAAA,EAC9B,oBAAoB;AAAA,EACpB,wBAAwB;AAAA;AAGnB,MAAM,gBAAgB,cAAqC;AAC3D,MAAM,wBAAwB,cAAyC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ const DSTabsDatatestid = {
3
+ TABS_CONTAINER: "ds-tabs-container",
4
+ TAB_BUTTON: "ds-tabs-tab-button",
5
+ SUBTAB_BUTTON: "ds-tabs-subtab-button",
6
+ TAB_PANEL: "ds-tabs-tab-panel",
7
+ SUB_TAB_LIST: "subtabs-list",
8
+ TAB_LIST: "tab-list",
9
+ CAROUSEL: {
10
+ BUTTON_RIGHT: "chevron-right",
11
+ BUTTON_LEFT: "chevron-left"
12
+ }
13
+ };
14
+ export {
15
+ DSTabsDatatestid
16
+ };
17
+ //# sourceMappingURL=DSTabsDatatestid.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/DSTabsDatatestid.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const DSTabsDatatestid = {\n TABS_CONTAINER: 'ds-tabs-container',\n TAB_BUTTON: 'ds-tabs-tab-button',\n SUBTAB_BUTTON: 'ds-tabs-subtab-button',\n TAB_PANEL: 'ds-tabs-tab-panel',\n SUB_TAB_LIST: 'subtabs-list',\n TAB_LIST: 'tab-list',\n CAROUSEL: {\n BUTTON_RIGHT: 'chevron-right',\n BUTTON_LEFT: 'chevron-left',\n },\n};\n"],
5
+ "mappings": "AAAA;ACAO,MAAM,mBAAmB;AAAA,EAC9B,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,WAAW;AAAA,EACX,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ //# sourceMappingURL=DSTabsTypes.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
+ }
@@ -1,5 +1,5 @@
1
- import { useRef, useMemo } from 'react';
2
-
1
+ import * as React from "react";
2
+ import { useRef, useMemo } from "react";
3
3
  const useCrossRef = () => {
4
4
  const firstSubtabInternalRef = useRef();
5
5
  const lastTabInternalRef = useRef();
@@ -9,5 +9,7 @@ const useCrossRef = () => {
9
9
  }), []);
10
10
  return ctx;
11
11
  };
12
-
13
- export { useCrossRef };
12
+ export {
13
+ useCrossRef
14
+ };
15
+ //# sourceMappingURL=useCrossRef.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/config/useCrossRef.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useRef, useMemo } from 'react';\nimport type { DSTabsUseCrossRefContextT } from '../DSTabsTypes';\n\nexport const useCrossRef = (): DSTabsUseCrossRefContextT => {\n const firstSubtabInternalRef = useRef<HTMLButtonElement>();\n const lastTabInternalRef = useRef<HTMLButtonElement>();\n\n const ctx = useMemo(\n () => ({\n firstSubtabInternalRef,\n lastTabInternalRef,\n }),\n [],\n );\n\n return ctx;\n};\n"],
5
+ "mappings": "AAAA;ACAA;AAGO,MAAM,cAAc,MAAiC;AAC1D,QAAM,yBAAyB;AAC/B,QAAM,qBAAqB;AAE3B,QAAM,MAAM,QACV,MAAO;AAAA,IACL;AAAA,IACA;AAAA,MAEF;AAGF,SAAO;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,45 @@
1
+ import * as React from "react";
2
+ import { useRef, useState, useMemo, useEffect } from "react";
3
+ import { useMemoMergePropsWithDefault } from "@elliemae/ds-props-helpers";
4
+ import { tabsDefaultProps } from "../defaultProps";
5
+ const useTabs = (props) => {
6
+ const propsWithDefaults = useMemoMergePropsWithDefault(props, tabsDefaultProps);
7
+ const { activeTab } = propsWithDefaults;
8
+ const tabsRef = useRef({});
9
+ const tabsRefAsArray = useRef([]);
10
+ const focusableTabsRef = useRef([]);
11
+ const carouselOnlyListRef = useRef(null);
12
+ const tabsListRef = useRef(null);
13
+ const actualActiveTabRef = useRef(null);
14
+ const [internalActiveTab, setInternalActiveTab] = useState("");
15
+ const actualActiveTab = useMemo(() => {
16
+ if (activeTab !== void 0)
17
+ return activeTab;
18
+ return internalActiveTab;
19
+ }, [activeTab, internalActiveTab]);
20
+ useEffect(() => {
21
+ actualActiveTabRef.current = focusableTabsRef.current.find((el) => el.dataset.tabId === actualActiveTab) ?? null;
22
+ }, [actualActiveTab]);
23
+ useEffect(() => {
24
+ if (activeTab === void 0) {
25
+ const firstAvailableTab = focusableTabsRef.current.find((el) => el.ariaDisabled !== "true");
26
+ setInternalActiveTab(firstAvailableTab?.dataset.tabId || "");
27
+ }
28
+ }, [activeTab]);
29
+ const ctx = useMemo(() => ({
30
+ props: propsWithDefaults,
31
+ tabsRef,
32
+ focusableTabsRef,
33
+ tabsListRef,
34
+ tabsRefAsArray,
35
+ setInternalActiveTab,
36
+ actualActiveTab,
37
+ actualActiveTabRef,
38
+ carouselOnlyListRef
39
+ }), [actualActiveTab, propsWithDefaults]);
40
+ return ctx;
41
+ };
42
+ export {
43
+ useTabs
44
+ };
45
+ //# sourceMappingURL=useTabs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/config/useTabs.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useRef, useState, useMemo, useEffect } from 'react';\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-props-helpers';\nimport { tabsDefaultProps } from '../defaultProps';\nimport type { DSTabsPropsT, DSTabsUseTabsContextT, DSTabsPropsWithDefaultsT } from '../DSTabsTypes';\n\nexport const useTabs = (props: DSTabsPropsT): DSTabsUseTabsContextT => {\n const propsWithDefaults = useMemoMergePropsWithDefault(props, tabsDefaultProps) as DSTabsPropsWithDefaultsT;\n\n const { activeTab } = propsWithDefaults;\n\n const tabsRef = useRef<Record<number, HTMLButtonElement>>({});\n const tabsRefAsArray = useRef<HTMLButtonElement[]>([]);\n const focusableTabsRef = useRef<HTMLButtonElement[]>([]);\n const carouselOnlyListRef = useRef<HTMLDivElement | null>(null);\n const tabsListRef = useRef<HTMLDivElement | null>(null);\n const actualActiveTabRef = useRef<HTMLButtonElement | null>(null);\n\n const [internalActiveTab, setInternalActiveTab] = useState<string>('');\n\n const actualActiveTab = useMemo(() => {\n if (activeTab !== undefined) return activeTab;\n return internalActiveTab;\n }, [activeTab, internalActiveTab]);\n\n useEffect(() => {\n actualActiveTabRef.current = focusableTabsRef.current.find((el) => el.dataset.tabId === actualActiveTab) ?? null;\n }, [actualActiveTab]);\n\n useEffect(() => {\n if (activeTab === undefined) {\n const firstAvailableTab = focusableTabsRef.current.find((el) => el.ariaDisabled !== 'true');\n setInternalActiveTab(firstAvailableTab?.dataset.tabId || '');\n }\n }, [activeTab]);\n\n const ctx = useMemo(\n () => ({\n props: propsWithDefaults,\n tabsRef,\n focusableTabsRef,\n tabsListRef,\n tabsRefAsArray,\n setInternalActiveTab,\n actualActiveTab,\n actualActiveTabRef,\n carouselOnlyListRef,\n }),\n [actualActiveTab, propsWithDefaults],\n );\n\n return ctx;\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AAGO,MAAM,UAAU,CAAC,UAA+C;AACrE,QAAM,oBAAoB,6BAA6B,OAAO;AAE9D,QAAM,EAAE,cAAc;AAEtB,QAAM,UAAU,OAA0C;AAC1D,QAAM,iBAAiB,OAA4B;AACnD,QAAM,mBAAmB,OAA4B;AACrD,QAAM,sBAAsB,OAA8B;AAC1D,QAAM,cAAc,OAA8B;AAClD,QAAM,qBAAqB,OAAiC;AAE5D,QAAM,CAAC,mBAAmB,wBAAwB,SAAiB;AAEnE,QAAM,kBAAkB,QAAQ,MAAM;AACpC,QAAI,cAAc;AAAW,aAAO;AACpC,WAAO;AAAA,KACN,CAAC,WAAW;AAEf,YAAU,MAAM;AACd,uBAAmB,UAAU,iBAAiB,QAAQ,KAAK,CAAC,OAAO,GAAG,QAAQ,UAAU,oBAAoB;AAAA,KAC3G,CAAC;AAEJ,YAAU,MAAM;AACd,QAAI,cAAc,QAAW;AAC3B,YAAM,oBAAoB,iBAAiB,QAAQ,KAAK,CAAC,OAAO,GAAG,iBAAiB;AACpF,2BAAqB,mBAAmB,QAAQ,SAAS;AAAA;AAAA,KAE1D,CAAC;AAEJ,QAAM,MAAM,QACV,MAAO;AAAA,IACL,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MAEF,CAAC,iBAAiB;AAGpB,SAAO;AAAA;",
6
+ "names": []
7
+ }
@@ -1,15 +1,14 @@
1
- import { TabTypes } from './utils/constants.js';
2
-
3
- // eslint-disable-next-line @typescript-eslint/no-empty-function
4
- const noop = () => {};
5
-
1
+ import * as React from "react";
2
+ import { TabTypes } from "./utils/constants";
3
+ const noop = () => {
4
+ };
6
5
  const tabsDefaultProps = {
7
6
  containerProps: {},
8
7
  animated: true,
9
8
  enableMouseEvents: false,
10
9
  allowTextSelection: false,
11
10
  onTabChange: noop,
12
- tabsListAriaLabel: 'Tab list',
11
+ tabsListAriaLabel: "Tab list",
13
12
  type: TabTypes.NORMAL,
14
13
  onlyRenderActiveTab: false,
15
14
  withCarousel: false,
@@ -19,5 +18,7 @@ const tabsDefaultProps = {
19
18
  fixedTabsHeaders: false,
20
19
  showSeparator: true
21
20
  };
22
-
23
- export { tabsDefaultProps };
21
+ export {
22
+ tabsDefaultProps
23
+ };
24
+ //# sourceMappingURL=defaultProps.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/defaultProps.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { TabTypes } from './utils/constants';\nimport type { DSTabsDefaultPropsT } from './DSTabsTypes';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = (): void => {};\n\nexport const tabsDefaultProps: DSTabsDefaultPropsT = {\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;AAIA,MAAM,OAAO,MAAY;AAAA;AAElB,MAAM,mBAAwC;AAAA,EACnD,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,31 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ import * as React from "react";
18
+ import React2 from "react";
19
+ import { describe } from "react-desc";
20
+ import { tabPropTypes } from "../propTypes";
21
+ const DSTab = (props) => /* @__PURE__ */ React2.createElement(React2.Fragment, __spreadValues({}, props));
22
+ DSTab.propTypes = tabPropTypes;
23
+ const DSTabWithSchema = describe(DSTab);
24
+ DSTabWithSchema.propTypes = tabPropTypes;
25
+ var DSTab_default = DSTab;
26
+ export {
27
+ DSTab,
28
+ DSTabWithSchema,
29
+ DSTab_default as default
30
+ };
31
+ //# sourceMappingURL=DSTab.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/exportsRelated/DSTab.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport type { WeakValidationMap } from 'react';\nimport { describe } from 'react-desc';\nimport { tabPropTypes } from '../propTypes';\nimport type { DSTabPropsT } from '../DSTabsTypes';\n\nconst DSTab = (props: DSTabPropsT): JSX.Element => <React.Fragment {...props} />;\n\nDSTab.propTypes = tabPropTypes as WeakValidationMap<unknown>;\nconst DSTabWithSchema = describe<DSTabPropsT>(DSTab);\nDSTabWithSchema.propTypes = tabPropTypes;\n\nexport { DSTab, DSTabWithSchema };\nexport default DSTab;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;ACAA;AAEA;AACA;AAGA,MAAM,QAAQ,CAAC,UAAoC,qCAAC,OAAM,UAAP,mBAAoB;AAEvE,MAAM,YAAY;AAClB,MAAM,kBAAkB,SAAsB;AAC9C,gBAAgB,YAAY;AAG5B,IAAO,gBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ export * from "./exportsRelated/DSTab";
3
+ export * from "./DSTabs";
4
+ import { TabTypes } from "./utils/constants";
5
+ export * from "./DSTabsDatatestid";
6
+ export {
7
+ TabTypes
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/index.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './exportsRelated/DSTab';\nexport * from './DSTabs';\nexport { TabTypes } from './utils/constants';\nexport * from './DSTabsDatatestid';\n\nexport type { DSTabsPropsT, DSTabPropsT } from './DSTabsTypes';\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AACA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,48 @@
1
+ import * as React from "react";
2
+ import { useContext } from "react";
3
+ import { DSIconSizes } from "@elliemae/ds-icon";
4
+ import { BUTTON_TYPES } from "@elliemae/ds-button";
5
+ import { ChevronRight, ChevronLeft } from "@elliemae/ds-icons";
6
+ import { StyledCarouselBtn, StyledCarouselButtonWrapper, StyledCarouselWrapper, StyledChildrenWrap } from "./styles";
7
+ import { useCarousel } from "./useCarousel";
8
+ import { DSTabsContext } from "../../DSTabsCTX";
9
+ import { DSTabsDatatestid } from "../../DSTabsDatatestid";
10
+ const Carousel = ({ children, updateIndicatorStyle }) => {
11
+ const { showChevrons, leftButtonOnClick, rightButtonOnClick, handleOnClick, handleOnScroll } = useCarousel({
12
+ updateIndicatorStyle
13
+ });
14
+ const {
15
+ carouselOnlyListRef,
16
+ props: { type }
17
+ } = useContext(DSTabsContext);
18
+ return /* @__PURE__ */ React.createElement(StyledCarouselWrapper, null, showChevrons.left && /* @__PURE__ */ React.createElement(StyledCarouselButtonWrapper, {
19
+ tabType: type
20
+ }, /* @__PURE__ */ React.createElement(StyledCarouselBtn, {
21
+ size: "s",
22
+ onClick: leftButtonOnClick,
23
+ tabIndex: -1,
24
+ "data-testid": DSTabsDatatestid.CAROUSEL.BUTTON_LEFT,
25
+ buttonType: BUTTON_TYPES.ICON
26
+ }, /* @__PURE__ */ React.createElement(ChevronLeft, {
27
+ size: DSIconSizes.S
28
+ }))), showChevrons.right && /* @__PURE__ */ React.createElement(StyledCarouselButtonWrapper, {
29
+ tabType: type,
30
+ right: showChevrons.right
31
+ }, /* @__PURE__ */ React.createElement(StyledCarouselBtn, {
32
+ size: "s",
33
+ onClick: rightButtonOnClick,
34
+ tabIndex: -1,
35
+ "data-testid": DSTabsDatatestid.CAROUSEL.BUTTON_RIGHT,
36
+ buttonType: BUTTON_TYPES.ICON
37
+ }, /* @__PURE__ */ React.createElement(ChevronRight, {
38
+ size: DSIconSizes.S
39
+ }))), /* @__PURE__ */ React.createElement(StyledChildrenWrap, {
40
+ ref: carouselOnlyListRef,
41
+ onClick: handleOnClick,
42
+ onScroll: handleOnScroll
43
+ }, children));
44
+ };
45
+ export {
46
+ Carousel
47
+ };
48
+ //# sourceMappingURL=Carousel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/carousel/Carousel.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useContext } from 'react';\nimport { DSIconSizes } from '@elliemae/ds-icon';\nimport { BUTTON_TYPES } from '@elliemae/ds-button';\nimport { ChevronRight, ChevronLeft } from '@elliemae/ds-icons';\nimport { StyledCarouselBtn, StyledCarouselButtonWrapper, StyledCarouselWrapper, StyledChildrenWrap } from './styles';\nimport { useCarousel } from './useCarousel';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport { DSTabsDatatestid } from '../../DSTabsDatatestid';\nimport type { CarouselPropsT } from '../../DSTabsTypes';\n\nexport const Carousel = ({ children, updateIndicatorStyle }: CarouselPropsT): JSX.Element => {\n const { showChevrons, leftButtonOnClick, rightButtonOnClick, handleOnClick, handleOnScroll } = useCarousel({\n updateIndicatorStyle,\n });\n\n const {\n carouselOnlyListRef,\n props: { type },\n } = useContext(DSTabsContext);\n\n return (\n <StyledCarouselWrapper>\n {showChevrons.left && (\n <StyledCarouselButtonWrapper tabType={type}>\n <StyledCarouselBtn\n size=\"s\"\n onClick={leftButtonOnClick}\n tabIndex={-1}\n data-testid={DSTabsDatatestid.CAROUSEL.BUTTON_LEFT}\n buttonType={BUTTON_TYPES.ICON}\n >\n <ChevronLeft size={DSIconSizes.S} />\n </StyledCarouselBtn>\n </StyledCarouselButtonWrapper>\n )}\n {showChevrons.right && (\n <StyledCarouselButtonWrapper tabType={type} right={showChevrons.right}>\n <StyledCarouselBtn\n size=\"s\"\n onClick={rightButtonOnClick}\n tabIndex={-1}\n data-testid={DSTabsDatatestid.CAROUSEL.BUTTON_RIGHT}\n buttonType={BUTTON_TYPES.ICON}\n >\n <ChevronRight size={DSIconSizes.S} />\n </StyledCarouselBtn>\n </StyledCarouselButtonWrapper>\n )}\n <StyledChildrenWrap ref={carouselOnlyListRef} onClick={handleOnClick} onScroll={handleOnScroll}>\n {children}\n </StyledChildrenWrap>\n </StyledCarouselWrapper>\n );\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGO,MAAM,WAAW,CAAC,EAAE,UAAU,2BAAwD;AAC3F,QAAM,EAAE,cAAc,mBAAmB,oBAAoB,eAAe,mBAAmB,YAAY;AAAA,IACzG;AAAA;AAGF,QAAM;AAAA,IACJ;AAAA,IACA,OAAO,EAAE;AAAA,MACP,WAAW;AAEf,SACE,oCAAC,uBAAD,MACG,aAAa,QACZ,oCAAC,6BAAD;AAAA,IAA6B,SAAS;AAAA,KACpC,oCAAC,mBAAD;AAAA,IACE,MAAK;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,IACV,eAAa,iBAAiB,SAAS;AAAA,IACvC,YAAY,aAAa;AAAA,KAEzB,oCAAC,aAAD;AAAA,IAAa,MAAM,YAAY;AAAA,QAIpC,aAAa,SACZ,oCAAC,6BAAD;AAAA,IAA6B,SAAS;AAAA,IAAM,OAAO,aAAa;AAAA,KAC9D,oCAAC,mBAAD;AAAA,IACE,MAAK;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,IACV,eAAa,iBAAiB,SAAS;AAAA,IACvC,YAAY,aAAa;AAAA,KAEzB,oCAAC,cAAD;AAAA,IAAc,MAAM,YAAY;AAAA,QAItC,oCAAC,oBAAD;AAAA,IAAoB,KAAK;AAAA,IAAqB,SAAS;AAAA,IAAe,UAAU;AAAA,KAC7E;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,50 @@
1
+ import * as React from "react";
2
+ import styled from "styled-components";
3
+ import { DSButtonV2 } from "@elliemae/ds-button";
4
+ import { TabTypes } from "../../utils/constants";
5
+ const StyledCarouselBtn = styled(DSButtonV2)`
6
+ margin: 0;
7
+ min-width: ${({ theme }) => theme.space.xs};
8
+ width: ${({ theme }) => theme.space.xs};
9
+
10
+ &:hover:not(:disabled) {
11
+ background-color: transparent;
12
+ }
13
+ background-color: transparent;
14
+ border-radius: 0px;
15
+
16
+ & .em-ds-icon svg {
17
+ fill: ${({ theme }) => theme.colors.brand[600]};
18
+ }
19
+ `;
20
+ const StyledCarouselWrapper = styled.span`
21
+ position: relative;
22
+ width: 100%;
23
+ display: flex;
24
+ `;
25
+ const StyledChildrenWrap = styled.div`
26
+ display: flex;
27
+ flex-wrap: nowrap;
28
+ flex: 1;
29
+ overflow-x: hidden;
30
+ `;
31
+ const StyledCarouselButtonWrapper = styled.div`
32
+ max-width: 16px;
33
+ position: absolute;
34
+ z-index: 200;
35
+ ${({ right }) => right ? "right: 0;" : `left: 0;`}
36
+ width: 16px;
37
+ height: ${({ tabType }) => tabType === TabTypes.NORMAL ? "32px" : "22px"};
38
+ padding-top: ${({ tabType }) => tabType === TabTypes.NORMAL ? "5px" : "0px"};
39
+ background: white;
40
+ ${({ theme, tabType }) => tabType === TabTypes.NORMAL ? `
41
+ background: linear-gradient(to bottom, white 0px, white 30px, ${theme.colors.neutral[400]} 30px, ${theme.colors.neutral[400]} 31px, white 31px , white 32px );
42
+ ` : ``};
43
+ `;
44
+ export {
45
+ StyledCarouselBtn,
46
+ StyledCarouselButtonWrapper,
47
+ StyledCarouselWrapper,
48
+ StyledChildrenWrap
49
+ };
50
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/carousel/styles.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import styled from 'styled-components';\nimport { DSButtonV2 } from '@elliemae/ds-button';\nimport { TabTypes } from '../../utils/constants';\nimport type { StyledCarouselButtonWrapperPropsT } from '../../DSTabsTypes';\n\nexport const StyledCarouselBtn = styled(DSButtonV2)`\n margin: 0;\n min-width: ${({ theme }) => theme.space.xs};\n width: ${({ theme }) => theme.space.xs};\n\n &:hover:not(:disabled) {\n background-color: transparent;\n }\n background-color: transparent;\n border-radius: 0px;\n\n & .em-ds-icon svg {\n fill: ${({ theme }) => theme.colors.brand[600]};\n }\n`;\n\nexport const StyledCarouselWrapper = styled.span`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nexport const StyledChildrenWrap = styled.div`\n display: flex;\n flex-wrap: nowrap;\n flex: 1;\n overflow-x: hidden;\n`;\n\nexport const StyledCarouselButtonWrapper = styled.div<StyledCarouselButtonWrapperPropsT>`\n max-width: 16px;\n position: absolute;\n z-index: 200;\n ${({ right }) => (right ? 'right: 0;' : `left: 0;`)}\n width: 16px;\n height: ${({ tabType }) => (tabType === TabTypes.NORMAL ? '32px' : '22px')};\n padding-top: ${({ tabType }) => (tabType === TabTypes.NORMAL ? '5px' : '0px')};\n background: white;\n ${({ theme, tabType }) =>\n tabType === TabTypes.NORMAL\n ? `\n background: linear-gradient(to bottom, white 0px, white 30px, ${theme.colors.neutral[400]} 30px, ${theme.colors.neutral[400]} 31px, white 31px , white 32px );\n `\n : ``};\n`;\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AAGO,MAAM,oBAAoB,OAAO;AAAA;AAAA,eAEzB,CAAC,EAAE,YAAY,MAAM,MAAM;AAAA,WAC/B,CAAC,EAAE,YAAY,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAS1B,CAAC,EAAE,YAAY,MAAM,OAAO,MAAM;AAAA;AAAA;AAIvC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAAA;AAMrC,MAAM,qBAAqB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOlC,MAAM,8BAA8B,OAAO;AAAA;AAAA;AAAA;AAAA,IAI9C,CAAC,EAAE,YAAa,QAAQ,cAAc;AAAA;AAAA,YAE9B,CAAC,EAAE,cAAe,YAAY,SAAS,SAAS,SAAS;AAAA,iBACpD,CAAC,EAAE,cAAe,YAAY,SAAS,SAAS,QAAQ;AAAA;AAAA,IAErE,CAAC,EAAE,OAAO,cACV,YAAY,SAAS,SACjB;AAAA,sEAC8D,MAAM,OAAO,QAAQ,cAAc,MAAM,OAAO,QAAQ;AAAA,KAEtH;AAAA;",
6
+ "names": []
7
+ }
@@ -1,34 +1,20 @@
1
- import 'core-js/modules/web.dom-collections.iterator.js';
2
- import 'core-js/modules/esnext.async-iterator.reduce.js';
3
- import 'core-js/modules/esnext.iterator.constructor.js';
4
- import 'core-js/modules/esnext.iterator.reduce.js';
5
- import { useContext, useState, useCallback } from 'react';
6
- import useResizeObserver from '@react-hook/resize-observer';
7
- import { DSTabsContext } from '../../DSTabsCTX.js';
8
- import { isElementVisibleCarousel } from '../../utils/helpers.js';
9
- import { useCarouselCallbacks } from './useCarouselCallbacks.js';
10
-
11
- const useCarousel = _ref => {
12
- let {
13
- updateIndicatorStyle
14
- } = _ref;
15
- const {
16
- carouselOnlyListRef
17
- } = useContext(DSTabsContext);
1
+ import * as React from "react";
2
+ import { useCallback, useState, useContext } from "react";
3
+ import useResizeObserver from "@react-hook/resize-observer";
4
+ import { DSTabsContext } from "../../DSTabsCTX";
5
+ import { isElementVisibleCarousel } from "../../utils/helpers";
6
+ import { useCarouselCallbacks } from "./useCarouselCallbacks";
7
+ const useCarousel = ({ updateIndicatorStyle }) => {
8
+ const { carouselOnlyListRef } = useContext(DSTabsContext);
18
9
  const [showChevrons, setShowChevrons] = useState({
19
10
  right: false,
20
11
  left: false
21
12
  });
22
- const {
23
- tabsRefAsArray
24
- } = useContext(DSTabsContext);
13
+ const { tabsRefAsArray } = useContext(DSTabsContext);
25
14
  const shouldShowLeft = useCallback(() => carouselOnlyListRef.current ? carouselOnlyListRef.current.scrollLeft > 0 : false, [carouselOnlyListRef]);
26
15
  const shouldShowRight = useCallback(() => carouselOnlyListRef.current ? carouselOnlyListRef.current.scrollLeft < carouselOnlyListRef.current.scrollWidth - carouselOnlyListRef.current.clientWidth : false, [carouselOnlyListRef]);
27
16
  const recalcChevrons = useCallback(() => {
28
- setShowChevrons({
29
- right: shouldShowRight(),
30
- left: shouldShowLeft()
31
- });
17
+ setShowChevrons({ right: shouldShowRight(), left: shouldShowLeft() });
32
18
  }, [shouldShowLeft, shouldShowRight]);
33
19
  const getVisibleItemsOffset = useCallback(() => {
34
20
  if (tabsRefAsArray.current) {
@@ -39,21 +25,14 @@ const useCarousel = _ref => {
39
25
  const margin = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
40
26
  return acc + (width + margin);
41
27
  }
42
-
43
28
  return acc;
44
29
  }, 0);
45
30
  return scroll - 16;
46
31
  }
47
-
48
32
  return 0;
49
33
  }, [tabsRefAsArray, carouselOnlyListRef]);
50
34
  useResizeObserver(carouselOnlyListRef, recalcChevrons);
51
- const {
52
- leftButtonOnClick,
53
- rightButtonOnClick,
54
- handleOnClick,
55
- handleOnScroll
56
- } = useCarouselCallbacks({
35
+ const { leftButtonOnClick, rightButtonOnClick, handleOnClick, handleOnScroll } = useCarouselCallbacks({
57
36
  getVisibleItemsOffset,
58
37
  recalcChevrons,
59
38
  updateIndicatorStyle
@@ -66,5 +45,7 @@ const useCarousel = _ref => {
66
45
  handleOnScroll
67
46
  };
68
47
  };
69
-
70
- export { useCarousel };
48
+ export {
49
+ useCarousel
50
+ };
51
+ //# sourceMappingURL=useCarousel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/carousel/useCarousel.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useCallback, useState, useContext } from 'react';\nimport useResizeObserver from '@react-hook/resize-observer';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport { isElementVisibleCarousel } from '../../utils/helpers';\nimport { useCarouselCallbacks } from './useCarouselCallbacks';\nimport type { UseCarouselPropsT, UseCarouselReturnTypeT, ShowChevronsT } from '../../DSTabsTypes';\n\nexport const useCarousel = ({ updateIndicatorStyle }: UseCarouselPropsT): UseCarouselReturnTypeT => {\n const { carouselOnlyListRef } = useContext(DSTabsContext);\n\n const [showChevrons, setShowChevrons] = useState<ShowChevronsT>({\n right: false,\n left: false,\n });\n\n const { tabsRefAsArray } = useContext(DSTabsContext);\n\n const shouldShowLeft = useCallback(\n () => (carouselOnlyListRef.current ? carouselOnlyListRef.current.scrollLeft > 0 : false),\n\n [carouselOnlyListRef],\n );\n\n const shouldShowRight = useCallback(\n () =>\n carouselOnlyListRef.current\n ? carouselOnlyListRef.current.scrollLeft <\n carouselOnlyListRef.current.scrollWidth - carouselOnlyListRef.current.clientWidth\n : false,\n [carouselOnlyListRef],\n );\n\n const recalcChevrons = useCallback(() => {\n setShowChevrons({ right: shouldShowRight(), left: shouldShowLeft() });\n }, [shouldShowLeft, shouldShowRight]);\n\n const getVisibleItemsOffset = useCallback(() => {\n if (tabsRefAsArray.current) {\n const scroll = tabsRefAsArray.current.reduce((acc, c) => {\n if (isElementVisibleCarousel(c, carouselOnlyListRef.current)) {\n const styles = window.getComputedStyle(c);\n const width = c.clientWidth;\n const margin = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n\n return acc + (width + margin);\n }\n return acc;\n }, 0);\n\n return scroll - 16;\n }\n return 0;\n }, [tabsRefAsArray, carouselOnlyListRef]);\n\n useResizeObserver(carouselOnlyListRef, recalcChevrons);\n\n const { leftButtonOnClick, rightButtonOnClick, handleOnClick, handleOnScroll } = useCarouselCallbacks({\n getVisibleItemsOffset,\n recalcChevrons,\n updateIndicatorStyle,\n });\n\n return {\n showChevrons,\n leftButtonOnClick,\n rightButtonOnClick,\n handleOnClick,\n handleOnScroll,\n };\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAGO,MAAM,cAAc,CAAC,EAAE,2BAAsE;AAClG,QAAM,EAAE,wBAAwB,WAAW;AAE3C,QAAM,CAAC,cAAc,mBAAmB,SAAwB;AAAA,IAC9D,OAAO;AAAA,IACP,MAAM;AAAA;AAGR,QAAM,EAAE,mBAAmB,WAAW;AAEtC,QAAM,iBAAiB,YACrB,MAAO,oBAAoB,UAAU,oBAAoB,QAAQ,aAAa,IAAI,OAElF,CAAC;AAGH,QAAM,kBAAkB,YACtB,MACE,oBAAoB,UAChB,oBAAoB,QAAQ,aAC5B,oBAAoB,QAAQ,cAAc,oBAAoB,QAAQ,cACtE,OACN,CAAC;AAGH,QAAM,iBAAiB,YAAY,MAAM;AACvC,oBAAgB,EAAE,OAAO,mBAAmB,MAAM;AAAA,KACjD,CAAC,gBAAgB;AAEpB,QAAM,wBAAwB,YAAY,MAAM;AAC9C,QAAI,eAAe,SAAS;AAC1B,YAAM,SAAS,eAAe,QAAQ,OAAO,CAAC,KAAK,MAAM;AACvD,YAAI,yBAAyB,GAAG,oBAAoB,UAAU;AAC5D,gBAAM,SAAS,OAAO,iBAAiB;AACvC,gBAAM,QAAQ,EAAE;AAChB,gBAAM,SAAS,WAAW,OAAO,cAAc,WAAW,OAAO;AAEjE,iBAAO,MAAO,SAAQ;AAAA;AAExB,eAAO;AAAA,SACN;AAEH,aAAO,SAAS;AAAA;AAElB,WAAO;AAAA,KACN,CAAC,gBAAgB;AAEpB,oBAAkB,qBAAqB;AAEvC,QAAM,EAAE,mBAAmB,oBAAoB,eAAe,mBAAmB,qBAAqB;AAAA,IACpG;AAAA,IACA;AAAA,IACA;AAAA;AAGF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -1,18 +1,13 @@
1
- import { useContext, useCallback } from 'react';
2
- import { isElementVisibleCarousel } from '../../utils/helpers.js';
3
- import { DSTabsContext } from '../../DSTabsCTX.js';
4
-
5
- /* eslint-disable max-statements */
6
- const useCarouselCallbacks = _ref => {
7
- let {
8
- getVisibleItemsOffset,
9
- updateIndicatorStyle,
10
- recalcChevrons
11
- } = _ref;
12
- const {
13
- focusableTabsRef,
14
- carouselOnlyListRef
15
- } = useContext(DSTabsContext);
1
+ import * as React from "react";
2
+ import { useCallback, useContext } from "react";
3
+ import { isElementVisibleCarousel } from "../../utils/helpers";
4
+ import { DSTabsContext } from "../../DSTabsCTX";
5
+ const useCarouselCallbacks = ({
6
+ getVisibleItemsOffset,
7
+ updateIndicatorStyle,
8
+ recalcChevrons
9
+ }) => {
10
+ const { focusableTabsRef, carouselOnlyListRef } = useContext(DSTabsContext);
16
11
  const rightButtonOnClick = useCallback(() => {
17
12
  if (carouselOnlyListRef.current) {
18
13
  carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();
@@ -25,30 +20,25 @@ const useCarouselCallbacks = _ref => {
25
20
  }, [getVisibleItemsOffset, carouselOnlyListRef]);
26
21
  const handleOnScroll = useCallback(() => {
27
22
  recalcChevrons();
28
- if (updateIndicatorStyle) updateIndicatorStyle();
23
+ if (updateIndicatorStyle)
24
+ updateIndicatorStyle();
29
25
  }, [recalcChevrons, updateIndicatorStyle]);
30
- const handleOnClick = useCallback(_ref2 => {
31
- let {
32
- target
33
- } = _ref2;
34
-
35
- if (focusableTabsRef.current && target.getAttribute('role') === 'tab') {
26
+ const handleOnClick = useCallback(({ target }) => {
27
+ if (focusableTabsRef.current && target.getAttribute("role") === "tab") {
36
28
  const tabList = carouselOnlyListRef.current;
37
29
  const tabButton = target;
38
30
  const tabButtonDimensions = tabButton.getBoundingClientRect();
39
- const tabListDimensions = tabList === null || tabList === void 0 ? void 0 : tabList.getBoundingClientRect();
31
+ const tabListDimensions = tabList?.getBoundingClientRect();
40
32
  const tabButtonIndex = tabButton.dataset.index;
41
33
  const lastItemIndex = focusableTabsRef.current.length.toString();
42
34
  const magicNumber = 34;
43
- const firstOrLastItem = tabButtonIndex === '0' || tabButtonIndex === lastItemIndex;
44
-
35
+ const firstOrLastItem = tabButtonIndex === "0" || tabButtonIndex === lastItemIndex;
45
36
  if (!isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
46
37
  const containerWidth = tabListDimensions.width;
47
38
  const halfContainer = containerWidth / 2;
48
39
  const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;
49
40
  const positionInContainer = elementScrollPosition % containerWidth;
50
41
  const width = tabButton.offsetWidth + magicNumber;
51
-
52
42
  if (positionInContainer > halfContainer) {
53
43
  carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;
54
44
  } else {
@@ -64,5 +54,7 @@ const useCarouselCallbacks = _ref => {
64
54
  handleOnScroll
65
55
  };
66
56
  };
67
-
68
- export { useCarouselCallbacks };
57
+ export {
58
+ useCarouselCallbacks
59
+ };
60
+ //# sourceMappingURL=useCarouselCallbacks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/carousel/useCarouselCallbacks.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport { useCallback, useContext } from 'react';\nimport type { MouseEvent } from 'react';\nimport { isElementVisibleCarousel } from '../../utils/helpers';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport type { UseCarouselCallbacksPropsT, UseCarouselCallbacksReturnTypeT } from '../../DSTabsTypes';\n\nexport const useCarouselCallbacks = ({\n getVisibleItemsOffset,\n updateIndicatorStyle,\n recalcChevrons,\n}: UseCarouselCallbacksPropsT): UseCarouselCallbacksReturnTypeT => {\n const { focusableTabsRef, carouselOnlyListRef } = useContext(DSTabsContext);\n\n const rightButtonOnClick = useCallback(() => {\n if (carouselOnlyListRef.current) {\n carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();\n }\n }, [getVisibleItemsOffset, carouselOnlyListRef]);\n\n const leftButtonOnClick = useCallback(() => {\n if (carouselOnlyListRef.current) {\n carouselOnlyListRef.current.scrollLeft -= getVisibleItemsOffset();\n }\n }, [getVisibleItemsOffset, carouselOnlyListRef]);\n\n const handleOnScroll = useCallback(() => {\n recalcChevrons();\n if (updateIndicatorStyle) updateIndicatorStyle();\n }, [recalcChevrons, updateIndicatorStyle]);\n\n const handleOnClick = useCallback(\n ({ target }: MouseEvent) => {\n if (focusableTabsRef.current && (target as HTMLButtonElement).getAttribute('role') === 'tab') {\n const tabList = carouselOnlyListRef.current;\n const tabButton = target as HTMLButtonElement;\n const tabButtonDimensions = tabButton.getBoundingClientRect();\n const tabListDimensions = tabList?.getBoundingClientRect();\n const tabButtonIndex = tabButton.dataset.index as string;\n const lastItemIndex = focusableTabsRef.current.length.toString();\n const magicNumber = 34;\n\n const firstOrLastItem = tabButtonIndex === '0' || tabButtonIndex === lastItemIndex;\n\n if (\n !isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) &&\n tabListDimensions &&\n carouselOnlyListRef.current\n ) {\n const containerWidth = tabListDimensions.width;\n const halfContainer = containerWidth / 2;\n const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;\n const positionInContainer = elementScrollPosition % containerWidth;\n const width = tabButton.offsetWidth + magicNumber;\n\n if (positionInContainer > halfContainer) {\n carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;\n } else {\n carouselOnlyListRef.current.scrollLeft += positionInContainer - magicNumber;\n }\n }\n }\n },\n [focusableTabsRef, carouselOnlyListRef],\n );\n\n return {\n handleOnClick,\n rightButtonOnClick,\n leftButtonOnClick,\n handleOnScroll,\n };\n};\n"],
5
+ "mappings": "AAAA;ACCA;AAEA;AACA;AAGO,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,MACiE;AACjE,QAAM,EAAE,kBAAkB,wBAAwB,WAAW;AAE7D,QAAM,qBAAqB,YAAY,MAAM;AAC3C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc;AAAA;AAAA,KAE3C,CAAC,uBAAuB;AAE3B,QAAM,oBAAoB,YAAY,MAAM;AAC1C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc;AAAA;AAAA,KAE3C,CAAC,uBAAuB;AAE3B,QAAM,iBAAiB,YAAY,MAAM;AACvC;AACA,QAAI;AAAsB;AAAA,KACzB,CAAC,gBAAgB;AAEpB,QAAM,gBAAgB,YACpB,CAAC,EAAE,aAAyB;AAC1B,QAAI,iBAAiB,WAAY,OAA6B,aAAa,YAAY,OAAO;AAC5F,YAAM,UAAU,oBAAoB;AACpC,YAAM,YAAY;AAClB,YAAM,sBAAsB,UAAU;AACtC,YAAM,oBAAoB,SAAS;AACnC,YAAM,iBAAiB,UAAU,QAAQ;AACzC,YAAM,gBAAgB,iBAAiB,QAAQ,OAAO;AACtD,YAAM,cAAc;AAEpB,YAAM,kBAAkB,mBAAmB,OAAO,mBAAmB;AAErE,UACE,CAAC,yBAAyB,WAAW,SAAS,oBAC9C,qBACA,oBAAoB,SACpB;AACA,cAAM,iBAAiB,kBAAkB;AACzC,cAAM,gBAAgB,iBAAiB;AACvC,cAAM,wBAAwB,oBAAoB,OAAO,kBAAkB;AAC3E,cAAM,sBAAsB,wBAAwB;AACpD,cAAM,QAAQ,UAAU,cAAc;AAEtC,YAAI,sBAAsB,eAAe;AACvC,8BAAoB,QAAQ,cAAc,QAAQ,sBAAsB;AAAA,eACnE;AACL,8BAAoB,QAAQ,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,KAKxE,CAAC,kBAAkB;AAGrB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }