@elliemae/ds-tabs 3.60.0-next.9 → 3.70.0-next.1

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 (62) hide show
  1. package/dist/cjs/config/useTabs.js +14 -3
  2. package/dist/cjs/config/useTabs.js.map +2 -2
  3. package/dist/cjs/parts/carousel/Carousel.js +14 -49
  4. package/dist/cjs/parts/carousel/Carousel.js.map +2 -2
  5. package/dist/cjs/parts/carousel/styles.js +7 -1
  6. package/dist/cjs/parts/carousel/styles.js.map +2 -2
  7. package/dist/cjs/parts/carousel/useCarousel.js +28 -43
  8. package/dist/cjs/parts/carousel/useCarousel.js.map +3 -3
  9. package/dist/cjs/parts/tabBar/TabBar.js +3 -1
  10. package/dist/cjs/parts/tabBar/TabBar.js.map +2 -2
  11. package/dist/cjs/parts/tabBar/TabBarItemRenderer.js +28 -20
  12. package/dist/cjs/parts/tabBar/TabBarItemRenderer.js.map +2 -2
  13. package/dist/cjs/parts/tabBar/styles.js +36 -200
  14. package/dist/cjs/parts/tabBar/styles.js.map +2 -2
  15. package/dist/cjs/parts/tabsContent/TabsContent.js +13 -5
  16. package/dist/cjs/parts/tabsContent/TabsContent.js.map +2 -2
  17. package/dist/cjs/parts/tabsPanel/TabsPanels.js +15 -1
  18. package/dist/cjs/parts/tabsPanel/TabsPanels.js.map +2 -2
  19. package/dist/cjs/parts/tabsPanel/styles.js +4 -4
  20. package/dist/cjs/parts/tabsPanel/styles.js.map +2 -2
  21. package/dist/cjs/react-desc-prop-types.js +1 -0
  22. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  23. package/dist/cjs/sharedTypes.js.map +1 -1
  24. package/dist/cjs/utils/hooks/useKeyboardNavigation.js +10 -4
  25. package/dist/cjs/utils/hooks/useKeyboardNavigation.js.map +2 -2
  26. package/dist/esm/config/useTabs.js +14 -3
  27. package/dist/esm/config/useTabs.js.map +2 -2
  28. package/dist/esm/parts/carousel/Carousel.js +16 -57
  29. package/dist/esm/parts/carousel/Carousel.js.map +2 -2
  30. package/dist/esm/parts/carousel/styles.js +7 -1
  31. package/dist/esm/parts/carousel/styles.js.map +2 -2
  32. package/dist/esm/parts/carousel/useCarousel.js +29 -44
  33. package/dist/esm/parts/carousel/useCarousel.js.map +2 -2
  34. package/dist/esm/parts/tabBar/TabBar.js +3 -1
  35. package/dist/esm/parts/tabBar/TabBar.js.map +2 -2
  36. package/dist/esm/parts/tabBar/TabBarItemRenderer.js +30 -28
  37. package/dist/esm/parts/tabBar/TabBarItemRenderer.js.map +2 -2
  38. package/dist/esm/parts/tabBar/styles.js +37 -201
  39. package/dist/esm/parts/tabBar/styles.js.map +2 -2
  40. package/dist/esm/parts/tabsContent/TabsContent.js +13 -5
  41. package/dist/esm/parts/tabsContent/TabsContent.js.map +2 -2
  42. package/dist/esm/parts/tabsPanel/TabsPanels.js +15 -1
  43. package/dist/esm/parts/tabsPanel/TabsPanels.js.map +2 -2
  44. package/dist/esm/parts/tabsPanel/styles.js +4 -4
  45. package/dist/esm/parts/tabsPanel/styles.js.map +2 -2
  46. package/dist/esm/react-desc-prop-types.js +1 -0
  47. package/dist/esm/react-desc-prop-types.js.map +2 -2
  48. package/dist/esm/utils/hooks/useKeyboardNavigation.js +10 -4
  49. package/dist/esm/utils/hooks/useKeyboardNavigation.js.map +2 -2
  50. package/dist/types/parts/carousel/useCarousel.d.ts +0 -5
  51. package/dist/types/parts/tabBar/styles.d.ts +7 -16
  52. package/dist/types/parts/tabsPanel/styles.d.ts +3 -2
  53. package/dist/types/react-desc-prop-types.d.ts +1 -0
  54. package/dist/types/sharedTypes.d.ts +3 -0
  55. package/dist/types/tests/DSTabs.allDisabled.test.d.ts +1 -0
  56. package/dist/types/tests/DSTabs.roving-tabindex-PUI-17883.test.d.ts +1 -0
  57. package/package.json +27 -29
  58. package/dist/cjs/parts/carousel/useCarouselCallbacks.js +0 -89
  59. package/dist/cjs/parts/carousel/useCarouselCallbacks.js.map +0 -7
  60. package/dist/esm/parts/carousel/useCarouselCallbacks.js +0 -59
  61. package/dist/esm/parts/carousel/useCarouselCallbacks.js.map +0 -7
  62. package/dist/types/parts/carousel/useCarouselCallbacks.d.ts +0 -12
@@ -1,10 +1,5 @@
1
- import type { DSTabsInternalsT } from '../../sharedTypes.js';
2
1
  interface UseCarouselReturnTypeT {
3
- showChevrons: DSTabsInternalsT.ShowChevronsT;
4
- leftButtonOnClick: () => void;
5
- rightButtonOnClick: () => void;
6
2
  handleOnClick: (e: React.MouseEvent) => void;
7
- handleOnScroll: (e: React.UIEvent) => void;
8
3
  }
9
4
  export declare const useCarousel: () => UseCarouselReturnTypeT;
10
5
  export {};
@@ -1,20 +1,7 @@
1
1
  import type { DSTabsInternalsT } from '../../sharedTypes.js';
2
- interface StyledSelectionIndicatoPropsT {
3
- isDSMobile: boolean;
4
- tabType: DSTabsInternalsT.TabTypesT;
5
- }
6
2
  interface StyledSubTabsListPropsT {
7
3
  withCarousel: boolean;
8
4
  }
9
- interface StyledTabButtonPropsT {
10
- isActive: boolean;
11
- disabled: boolean;
12
- showSeparator: boolean;
13
- isDSMobile: boolean;
14
- fixedTabsHeaders: boolean;
15
- withCarousel: boolean;
16
- tabType: DSTabsInternalsT.TabTypesT;
17
- }
18
5
  interface StyledTabListPropsT {
19
6
  withCarousel: boolean;
20
7
  isDSMobile: boolean;
@@ -31,7 +18,6 @@ interface StyledTabWrapperPropsT {
31
18
  isDSMobile: boolean;
32
19
  fixedTabsHeaders: boolean;
33
20
  }
34
- export declare const StyledSelectionIndicator: import("styled-components").StyledComponent<"div", import("@elliemae/ds-system").Theme, StyledSelectionIndicatoPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"div">, never>;
35
21
  export declare const StyledMobileGradient: import("styled-components").StyledComponent<"div", import("@elliemae/ds-system").Theme, {
36
22
  style: {
37
23
  left: number;
@@ -40,10 +26,15 @@ export declare const StyledMobileGradient: import("styled-components").StyledCom
40
26
  } & StyledMobileGradientPropsT, string | number | symbol>;
41
27
  /** CSS Setters */
42
28
  export declare const StyledTabWrapper: import("styled-components").StyledComponent<"div", import("@elliemae/ds-system").Theme, StyledTabWrapperPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"div">, never>;
43
- export declare const StyledTabButton: import("styled-components").StyledComponent<"button", import("@elliemae/ds-system").Theme, StyledTabButtonPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"button">, never>;
44
- export declare const StyledSubTabButton: import("styled-components").StyledComponent<"button", import("@elliemae/ds-system").Theme, StyledTabButtonPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"button">, never>;
45
29
  export declare const StyledSubTabsList: import("styled-components").StyledComponent<"div", import("@elliemae/ds-system").Theme, StyledSubTabsListPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"div">, never>;
46
30
  export declare const StyledTabList: import("styled-components").StyledComponent<"div", import("@elliemae/ds-system").Theme, StyledTabListPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"div">, never>;
47
31
  export declare const StyledRequiredMark: import("styled-components").StyledComponent<"span", import("@elliemae/ds-system").Theme, object & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"span">, never>;
48
32
  export declare const ScreenReaderOnly: import("styled-components").StyledComponent<"div", import("@elliemae/ds-system").Theme, object & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<"div">, never>;
33
+ interface StyledTabButtonPropsT {
34
+ showSeparator: boolean;
35
+ isDSMobile: boolean;
36
+ tabType: DSTabsInternalsT.TabTypesT;
37
+ }
38
+ export declare const StyledTabButton: import("styled-components").StyledComponent<import("react").ComponentType<import("@elliemae/ds-tab-button").DSTabButtonT.Props>, import("@elliemae/ds-system").Theme, StyledTabButtonPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<import("react").ComponentType<import("@elliemae/ds-tab-button").DSTabButtonT.Props>>, never>;
39
+ export declare const StyledSubTabButton: import("styled-components").StyledComponent<import("react").ComponentType<import("@elliemae/ds-tab-button").DSTabButtonT.Props>, import("@elliemae/ds-system").Theme, StyledTabButtonPropsT & import("@elliemae/ds-system").OwnerInterface & import("@elliemae/ds-system").InnerRefInterface<import("react").ComponentType<import("@elliemae/ds-tab-button").DSTabButtonT.Props>>, never>;
49
40
  export {};
@@ -1,9 +1,10 @@
1
- import type { GlobalAttributesT } from '@elliemae/ds-props-helpers';
1
+ import type { GlobalAttributesT, useOwnerProps } from '@elliemae/ds-props-helpers';
2
+ import type { DSTabT } from '../../react-desc-prop-types.js';
2
3
  interface StyledPanelContainerPropsT {
3
4
  hide: boolean;
4
5
  isDSMobile: boolean;
5
6
  }
6
- export interface PanelDescriptor extends Record<string, unknown> {
7
+ export interface PanelDescriptor extends Record<string, unknown>, ReturnType<typeof useOwnerProps<DSTabT.Props>> {
7
8
  index: number;
8
9
  tabId: string;
9
10
  isActive: boolean;
@@ -11,6 +11,7 @@ export declare namespace DSTabT {
11
11
  title?: string;
12
12
  required?: boolean;
13
13
  disabled?: boolean;
14
+ RenderBadge?: React.ComponentType;
14
15
  ref?: React.MutableRefObject<HTMLButtonElement>;
15
16
  onClick?: (tabId: string | number, e: React.MouseEvent) => null | void;
16
17
  onKeyDown?: (e: React.KeyboardEvent) => null | void;
@@ -29,6 +29,9 @@ export declare namespace DSTabsInternalsT {
29
29
  updateMobileGradients: () => void;
30
30
  mobileGradients: DSTabsInternalsT.MobileGradientsT;
31
31
  userDidChangeTabAtleastOnceRef: React.MutableRefObject<boolean>;
32
+ firstActivableTabId: string;
33
+ focusedTabId: string;
34
+ setFocusedTabId: React.Dispatch<React.SetStateAction<string>>;
32
35
  }
33
36
  interface DSTabsUseCrossRefContextT {
34
37
  lastTabInternalRef: React.MutableRefObject<HTMLButtonElement | null | undefined>;
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-tabs",
3
- "version": "3.60.0-next.9",
3
+ "version": "3.70.0-next.1",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Tabs",
6
6
  "files": [
@@ -35,41 +35,39 @@
35
35
  "reportFile": "tests.xml",
36
36
  "indent": 4
37
37
  },
38
- "scripts": {
39
- "dev": "cross-env NODE_ENV=development node ../../../scripts/build/build.mjs --watch",
40
- "test": "pui-cli test --passWithNoTests --coverage=\"false\"",
41
- "lint": "node ../../../scripts/lint.mjs --fix",
42
- "lint:strict": "node ../../../scripts/lint-strict.mjs",
43
- "dts": "node ../../../scripts/dts.mjs",
44
- "build": "cross-env NODE_ENV=production node ../../../scripts/build/build.mjs",
45
- "checkDeps": "npm exec ../../util/ds-codemods -- check-missing-packages --projectFolderPath=\"./\" --ignorePackagesGlobPattern=\"\" --ignoreFilesGlobPattern=\"**/test-ables/*,**/tests/*\""
46
- },
47
38
  "dependencies": {
48
- "@elliemae/ds-button-v2": "3.60.0-next.9",
49
- "@elliemae/ds-icon": "3.60.0-next.9",
50
- "@elliemae/ds-icons": "3.60.0-next.9",
51
- "@elliemae/ds-props-helpers": "3.60.0-next.9",
52
- "@elliemae/ds-swipe-card": "3.60.0-next.9",
53
- "@elliemae/ds-system": "3.60.0-next.9",
54
- "@elliemae/ds-typescript-helpers": "3.60.0-next.9",
55
- "@react-hook/resize-observer": "catalog:"
39
+ "@elliemae/ds-button-v2": "3.70.0-next.1",
40
+ "@elliemae/ds-icon": "3.70.0-next.1",
41
+ "@elliemae/ds-props-helpers": "3.70.0-next.1",
42
+ "@elliemae/ds-icons": "3.70.0-next.1",
43
+ "@elliemae/ds-system": "3.70.0-next.1",
44
+ "@elliemae/ds-tab-button": "3.70.0-next.1",
45
+ "@elliemae/ds-swipe-card": "3.70.0-next.1",
46
+ "@elliemae/ds-typescript-helpers": "3.70.0-next.1"
56
47
  },
57
48
  "devDependencies": {
58
- "@elliemae/ds-monorepo-devops": "3.60.0-next.9",
59
- "@elliemae/ds-test-utils": "3.60.0-next.9",
60
- "@elliemae/pui-cli": "catalog:",
61
- "jest": "catalog:",
62
- "styled-components": "catalog:"
49
+ "jest": "^30.0.0",
50
+ "styled-components": "~5.3.9",
51
+ "@elliemae/ds-monorepo-devops": "3.70.0-next.1",
52
+ "@elliemae/ds-test-utils": "3.70.0-next.1"
63
53
  },
64
54
  "peerDependencies": {
65
- "lodash-es": "catalog:",
66
- "react": "catalog:",
67
- "react-dom": "catalog:",
68
- "styled-components": "catalog:"
55
+ "lodash-es": "^4.17.21",
56
+ "react": "^18.3.1",
57
+ "react-dom": "^18.3.1",
58
+ "styled-components": "~5.3.9"
69
59
  },
70
60
  "publishConfig": {
71
61
  "access": "public",
72
62
  "typeSafety": true
73
63
  },
74
- "gitHead": "7b49878bf6b481e639c5412a4c816ee349d91b46"
75
- }
64
+ "scripts": {
65
+ "dev": "cross-env NODE_ENV=development node ../../../scripts/build/build.mjs --watch",
66
+ "test": "ds-monorepo-devops test --passWithNoTests --coverage=\"false\"",
67
+ "lint": "node ../../../scripts/lint.mjs --fix",
68
+ "lint:strict": "node ../../../scripts/lint-strict.mjs",
69
+ "dts": "node ../../../scripts/dts.mjs",
70
+ "build": "cross-env NODE_ENV=production node ../../../scripts/build/build.mjs",
71
+ "checkDeps": "npx -yes ../../util/ds-codemods check-missing-packages --projectFolderPath=\"./\" --ignorePackagesGlobPattern=\"\" --ignoreFilesGlobPattern=\"**/test-ables/*,**/tests/*\""
72
+ }
73
+ }
@@ -1,89 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var useCarouselCallbacks_exports = {};
30
- __export(useCarouselCallbacks_exports, {
31
- useCarouselCallbacks: () => useCarouselCallbacks
32
- });
33
- module.exports = __toCommonJS(useCarouselCallbacks_exports);
34
- var React = __toESM(require("react"));
35
- var import_react = require("react");
36
- var import_lodash_es = require("lodash-es");
37
- var import_helpers = require("../../utils/helpers.js");
38
- var import_DSTabsCTX = require("../../DSTabsCTX.js");
39
- const useCarouselCallbacks = ({
40
- getVisibleItemsOffset,
41
- recalcChevrons
42
- }) => {
43
- const { focusableTabsRef, carouselOnlyListRef } = (0, import_react.useContext)(import_DSTabsCTX.DSTabsContext);
44
- const rightButtonOnClick = (0, import_react.useCallback)(() => {
45
- if (carouselOnlyListRef.current) {
46
- carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();
47
- }
48
- }, [getVisibleItemsOffset, carouselOnlyListRef]);
49
- const leftButtonOnClick = (0, import_react.useCallback)(() => {
50
- if (carouselOnlyListRef.current) {
51
- carouselOnlyListRef.current.scrollLeft -= getVisibleItemsOffset();
52
- }
53
- }, [getVisibleItemsOffset, carouselOnlyListRef]);
54
- const handleOnScroll = (0, import_react.useMemo)(() => (0, import_lodash_es.debounce)(recalcChevrons, 200), [recalcChevrons]);
55
- const handleOnClick = (0, import_react.useCallback)(
56
- ({ target }) => {
57
- if (focusableTabsRef.current && target.getAttribute("role") === "tab") {
58
- const tabList = carouselOnlyListRef.current;
59
- const tabButton = target;
60
- const tabButtonDimensions = tabButton.getBoundingClientRect();
61
- const tabListDimensions = tabList?.getBoundingClientRect();
62
- const tabButtonIndex = tabButton.dataset.index;
63
- const lastItemIndex = focusableTabsRef.current.length.toString();
64
- const magicNumber = 34;
65
- const firstOrLastItem = tabButtonIndex === "0" || tabButtonIndex === lastItemIndex;
66
- if (!(0, import_helpers.isElementVisibleCarousel)(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
67
- const containerWidth = tabListDimensions.width;
68
- const halfContainer = containerWidth / 2;
69
- const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;
70
- const positionInContainer = elementScrollPosition % containerWidth;
71
- const width = tabButton.offsetWidth + magicNumber;
72
- if (positionInContainer > halfContainer) {
73
- carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;
74
- } else {
75
- carouselOnlyListRef.current.scrollLeft += positionInContainer - magicNumber;
76
- }
77
- }
78
- }
79
- },
80
- [focusableTabsRef, carouselOnlyListRef]
81
- );
82
- return {
83
- handleOnClick,
84
- rightButtonOnClick,
85
- leftButtonOnClick,
86
- handleOnScroll
87
- };
88
- };
89
- //# sourceMappingURL=useCarouselCallbacks.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/parts/carousel/useCarouselCallbacks.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable max-statements */\nimport { useCallback, useContext, useMemo } from 'react';\nimport { debounce } from 'lodash-es';\nimport type { MouseEvent } from 'react';\nimport { isElementVisibleCarousel } from '../../utils/helpers.js';\nimport { DSTabsContext } from '../../DSTabsCTX.js';\n\ninterface UseCarouselCallbacksPropsT {\n getVisibleItemsOffset: () => number;\n recalcChevrons: () => void;\n}\ninterface UseCarouselCallbacksReturnTypeT {\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n handleOnClick: (e: React.MouseEvent) => void;\n handleOnScroll: (e: React.UIEvent) => void;\n}\n\nexport const useCarouselCallbacks = ({\n getVisibleItemsOffset,\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 /** [PUI-15772] - Tabs Pre Refactor\n * Scroll handler for carousel. It:\n * 1. Recalculates chevron visibility\n * 2. Updates indicator style\n * 3. May cause rerenders on every scroll event\n */\n const handleOnScroll = useMemo(() => debounce(recalcChevrons, 200), [recalcChevrons]);\n\n /** [PUI-15772] - Tabs Pre Refactor\n * Click handler for carousel tabs. It:\n * 1. Checks if clicked element is a tab\n * 2. Calculates scroll position to center the tab\n * 3. Updates scroll position with magic number adjustments\n * 4. May cause rerenders due to scroll position updates\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", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAiD;AACjD,uBAAyB;AAEzB,qBAAyC;AACzC,uBAA8B;AAavB,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AACF,MAAmE;AACjE,QAAM,EAAE,kBAAkB,oBAAoB,QAAI,yBAAW,8BAAa;AAE1E,QAAM,yBAAqB,0BAAY,MAAM;AAC3C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc,sBAAsB;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,uBAAuB,mBAAmB,CAAC;AAE/C,QAAM,wBAAoB,0BAAY,MAAM;AAC1C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc,sBAAsB;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,uBAAuB,mBAAmB,CAAC;AAQ/C,QAAM,qBAAiB,sBAAQ,UAAM,2BAAS,gBAAgB,GAAG,GAAG,CAAC,cAAc,CAAC;AASpF,QAAM,oBAAgB;AAAA,IACpB,CAAC,EAAE,OAAO,MAAkB;AAC1B,UAAI,iBAAiB,WAAY,OAA6B,aAAa,MAAM,MAAM,OAAO;AAC5F,cAAM,UAAU,oBAAoB;AACpC,cAAM,YAAY;AAClB,cAAM,sBAAsB,UAAU,sBAAsB;AAC5D,cAAM,oBAAoB,SAAS,sBAAsB;AACzD,cAAM,iBAAiB,UAAU,QAAQ;AACzC,cAAM,gBAAgB,iBAAiB,QAAQ,OAAO,SAAS;AAC/D,cAAM,cAAc;AAEpB,cAAM,kBAAkB,mBAAmB,OAAO,mBAAmB;AAErE,YACE,KAAC,yCAAyB,WAAW,SAAS,eAAe,KAC7D,qBACA,oBAAoB,SACpB;AACA,gBAAM,iBAAiB,kBAAkB;AACzC,gBAAM,gBAAgB,iBAAiB;AACvC,gBAAM,wBAAwB,oBAAoB,OAAO,kBAAkB;AAC3E,gBAAM,sBAAsB,wBAAwB;AACpD,gBAAM,QAAQ,UAAU,cAAc;AAEtC,cAAI,sBAAsB,eAAe;AACvC,gCAAoB,QAAQ,cAAc,QAAQ,sBAAsB;AAAA,UAC1E,OAAO;AACL,gCAAoB,QAAQ,cAAc,sBAAsB;AAAA,UAClE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB,mBAAmB;AAAA,EACxC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,59 +0,0 @@
1
- import * as React from "react";
2
- import { useCallback, useContext, useMemo } from "react";
3
- import { debounce } from "lodash-es";
4
- import { isElementVisibleCarousel } from "../../utils/helpers.js";
5
- import { DSTabsContext } from "../../DSTabsCTX.js";
6
- const useCarouselCallbacks = ({
7
- getVisibleItemsOffset,
8
- recalcChevrons
9
- }) => {
10
- const { focusableTabsRef, carouselOnlyListRef } = useContext(DSTabsContext);
11
- const rightButtonOnClick = useCallback(() => {
12
- if (carouselOnlyListRef.current) {
13
- carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();
14
- }
15
- }, [getVisibleItemsOffset, carouselOnlyListRef]);
16
- const leftButtonOnClick = useCallback(() => {
17
- if (carouselOnlyListRef.current) {
18
- carouselOnlyListRef.current.scrollLeft -= getVisibleItemsOffset();
19
- }
20
- }, [getVisibleItemsOffset, carouselOnlyListRef]);
21
- const handleOnScroll = useMemo(() => debounce(recalcChevrons, 200), [recalcChevrons]);
22
- const handleOnClick = useCallback(
23
- ({ target }) => {
24
- if (focusableTabsRef.current && target.getAttribute("role") === "tab") {
25
- const tabList = carouselOnlyListRef.current;
26
- const tabButton = target;
27
- const tabButtonDimensions = tabButton.getBoundingClientRect();
28
- const tabListDimensions = tabList?.getBoundingClientRect();
29
- const tabButtonIndex = tabButton.dataset.index;
30
- const lastItemIndex = focusableTabsRef.current.length.toString();
31
- const magicNumber = 34;
32
- const firstOrLastItem = tabButtonIndex === "0" || tabButtonIndex === lastItemIndex;
33
- if (!isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
34
- const containerWidth = tabListDimensions.width;
35
- const halfContainer = containerWidth / 2;
36
- const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;
37
- const positionInContainer = elementScrollPosition % containerWidth;
38
- const width = tabButton.offsetWidth + magicNumber;
39
- if (positionInContainer > halfContainer) {
40
- carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;
41
- } else {
42
- carouselOnlyListRef.current.scrollLeft += positionInContainer - magicNumber;
43
- }
44
- }
45
- }
46
- },
47
- [focusableTabsRef, carouselOnlyListRef]
48
- );
49
- return {
50
- handleOnClick,
51
- rightButtonOnClick,
52
- leftButtonOnClick,
53
- handleOnScroll
54
- };
55
- };
56
- export {
57
- useCarouselCallbacks
58
- };
59
- //# sourceMappingURL=useCarouselCallbacks.js.map
@@ -1,7 +0,0 @@
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, useMemo } from 'react';\nimport { debounce } from 'lodash-es';\nimport type { MouseEvent } from 'react';\nimport { isElementVisibleCarousel } from '../../utils/helpers.js';\nimport { DSTabsContext } from '../../DSTabsCTX.js';\n\ninterface UseCarouselCallbacksPropsT {\n getVisibleItemsOffset: () => number;\n recalcChevrons: () => void;\n}\ninterface UseCarouselCallbacksReturnTypeT {\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n handleOnClick: (e: React.MouseEvent) => void;\n handleOnScroll: (e: React.UIEvent) => void;\n}\n\nexport const useCarouselCallbacks = ({\n getVisibleItemsOffset,\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 /** [PUI-15772] - Tabs Pre Refactor\n * Scroll handler for carousel. It:\n * 1. Recalculates chevron visibility\n * 2. Updates indicator style\n * 3. May cause rerenders on every scroll event\n */\n const handleOnScroll = useMemo(() => debounce(recalcChevrons, 200), [recalcChevrons]);\n\n /** [PUI-15772] - Tabs Pre Refactor\n * Click handler for carousel tabs. It:\n * 1. Checks if clicked element is a tab\n * 2. Calculates scroll position to center the tab\n * 3. Updates scroll position with magic number adjustments\n * 4. May cause rerenders due to scroll position updates\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,YAAY,WAAW;ACCvB,SAAS,aAAa,YAAY,eAAe;AACjD,SAAS,gBAAgB;AAEzB,SAAS,gCAAgC;AACzC,SAAS,qBAAqB;AAavB,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AACF,MAAmE;AACjE,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,WAAW,aAAa;AAE1E,QAAM,qBAAqB,YAAY,MAAM;AAC3C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc,sBAAsB;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,uBAAuB,mBAAmB,CAAC;AAE/C,QAAM,oBAAoB,YAAY,MAAM;AAC1C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc,sBAAsB;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,uBAAuB,mBAAmB,CAAC;AAQ/C,QAAM,iBAAiB,QAAQ,MAAM,SAAS,gBAAgB,GAAG,GAAG,CAAC,cAAc,CAAC;AASpF,QAAM,gBAAgB;AAAA,IACpB,CAAC,EAAE,OAAO,MAAkB;AAC1B,UAAI,iBAAiB,WAAY,OAA6B,aAAa,MAAM,MAAM,OAAO;AAC5F,cAAM,UAAU,oBAAoB;AACpC,cAAM,YAAY;AAClB,cAAM,sBAAsB,UAAU,sBAAsB;AAC5D,cAAM,oBAAoB,SAAS,sBAAsB;AACzD,cAAM,iBAAiB,UAAU,QAAQ;AACzC,cAAM,gBAAgB,iBAAiB,QAAQ,OAAO,SAAS;AAC/D,cAAM,cAAc;AAEpB,cAAM,kBAAkB,mBAAmB,OAAO,mBAAmB;AAErE,YACE,CAAC,yBAAyB,WAAW,SAAS,eAAe,KAC7D,qBACA,oBAAoB,SACpB;AACA,gBAAM,iBAAiB,kBAAkB;AACzC,gBAAM,gBAAgB,iBAAiB;AACvC,gBAAM,wBAAwB,oBAAoB,OAAO,kBAAkB;AAC3E,gBAAM,sBAAsB,wBAAwB;AACpD,gBAAM,QAAQ,UAAU,cAAc;AAEtC,cAAI,sBAAsB,eAAe;AACvC,gCAAoB,QAAQ,cAAc,QAAQ,sBAAsB;AAAA,UAC1E,OAAO;AACL,gCAAoB,QAAQ,cAAc,sBAAsB;AAAA,UAClE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB,mBAAmB;AAAA,EACxC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,12 +0,0 @@
1
- interface UseCarouselCallbacksPropsT {
2
- getVisibleItemsOffset: () => number;
3
- recalcChevrons: () => void;
4
- }
5
- interface UseCarouselCallbacksReturnTypeT {
6
- leftButtonOnClick: () => void;
7
- rightButtonOnClick: () => void;
8
- handleOnClick: (e: React.MouseEvent) => void;
9
- handleOnScroll: (e: React.UIEvent) => void;
10
- }
11
- export declare const useCarouselCallbacks: ({ getVisibleItemsOffset, recalcChevrons, }: UseCarouselCallbacksPropsT) => UseCarouselCallbacksReturnTypeT;
12
- export {};