@elliemae/ds-tabs 2.2.0 → 2.3.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.
- package/cjs/DSTabs.js +58 -40
- package/cjs/DSTabs.js.map +7 -0
- package/cjs/DSTabsCTX.js +51 -25
- package/cjs/DSTabsCTX.js.map +7 -0
- package/cjs/DSTabsDatatestid.js +42 -14
- package/cjs/DSTabsDatatestid.js.map +7 -0
- package/cjs/DSTabsTypes.js +27 -2
- package/cjs/DSTabsTypes.js.map +7 -0
- package/cjs/config/useCrossRef.js +38 -11
- package/cjs/config/useCrossRef.js.map +7 -0
- package/cjs/config/useTabs.js +53 -36
- package/cjs/config/useTabs.js.map +7 -0
- package/cjs/defaultProps.js +39 -13
- package/cjs/defaultProps.js.map +7 -0
- package/cjs/exportsRelated/DSTab.js +46 -32
- package/cjs/exportsRelated/DSTab.js.map +7 -0
- package/cjs/index.js +38 -17
- package/cjs/index.js.map +7 -0
- package/cjs/parts/carousel/Carousel.js +61 -53
- package/cjs/parts/carousel/Carousel.js.map +7 -0
- package/cjs/parts/carousel/styles.js +77 -63
- package/cjs/parts/carousel/styles.js.map +7 -0
- package/cjs/parts/carousel/useCarousel.js +51 -49
- package/cjs/parts/carousel/useCarousel.js.map +7 -0
- package/cjs/parts/carousel/useCarouselCallbacks.js +53 -36
- package/cjs/parts/carousel/useCarouselCallbacks.js.map +7 -0
- package/cjs/parts/tabBar/TabBar.js +131 -120
- package/cjs/parts/tabBar/TabBar.js.map +7 -0
- package/cjs/parts/tabBar/styles.js +289 -195
- package/cjs/parts/tabBar/styles.js.map +7 -0
- package/cjs/parts/tabBar/useTabBar.js +66 -62
- package/cjs/parts/tabBar/useTabBar.js.map +7 -0
- package/cjs/parts/tabsContent/TabsContent.js +49 -45
- package/cjs/parts/tabsContent/TabsContent.js.map +7 -0
- package/cjs/parts/tabsContent/styles.js +39 -15
- package/cjs/parts/tabsContent/styles.js.map +7 -0
- package/cjs/parts/tabsPanel/TabsPanels.js +60 -58
- package/cjs/parts/tabsPanel/TabsPanels.js.map +7 -0
- package/cjs/parts/tabsPanel/styles.js +43 -23
- package/cjs/parts/tabsPanel/styles.js.map +7 -0
- package/cjs/propTypes.js +54 -29
- package/cjs/propTypes.js.map +7 -0
- package/cjs/utils/constants.js +44 -16
- package/cjs/utils/constants.js.map +7 -0
- package/cjs/utils/helpers.js +63 -22
- package/cjs/utils/helpers.js.map +7 -0
- package/cjs/utils/hooks/useKeyboardNavigation.js +59 -43
- package/cjs/utils/hooks/useKeyboardNavigation.js.map +7 -0
- package/cjs/utils/hooks/useTabsCallbacks.js +46 -45
- package/cjs/utils/hooks/useTabsCallbacks.js.map +7 -0
- package/esm/DSTabs.js +24 -25
- package/esm/DSTabs.js.map +7 -0
- package/esm/DSTabsCTX.js +22 -20
- package/esm/DSTabsCTX.js.map +7 -0
- package/esm/DSTabsDatatestid.js +13 -10
- package/esm/DSTabsDatatestid.js.map +7 -0
- package/esm/DSTabsTypes.js +2 -1
- package/esm/DSTabsTypes.js.map +7 -0
- package/esm/config/useCrossRef.js +6 -4
- package/esm/config/useCrossRef.js.map +7 -0
- package/esm/config/useTabs.js +14 -22
- package/esm/config/useTabs.js.map +7 -0
- package/esm/defaultProps.js +9 -8
- package/esm/defaultProps.js.map +7 -0
- package/esm/exportsRelated/DSTab.js +15 -19
- package/esm/exportsRelated/DSTab.js.map +7 -0
- package/esm/index.js +9 -4
- package/esm/index.js.map +7 -0
- package/esm/parts/carousel/Carousel.js +25 -38
- package/esm/parts/carousel/Carousel.js.map +7 -0
- package/esm/parts/carousel/styles.js +48 -52
- package/esm/parts/carousel/styles.js.map +7 -0
- package/esm/parts/carousel/useCarousel.js +15 -34
- package/esm/parts/carousel/useCarousel.js.map +7 -0
- package/esm/parts/carousel/useCarouselCallbacks.js +20 -28
- package/esm/parts/carousel/useCarouselCallbacks.js.map +7 -0
- package/esm/parts/tabBar/TabBar.js +100 -102
- package/esm/parts/tabBar/TabBar.js.map +7 -0
- package/esm/parts/tabBar/styles.js +262 -183
- package/esm/parts/tabBar/styles.js.map +7 -0
- package/esm/parts/tabBar/useTabBar.js +27 -44
- package/esm/parts/tabBar/useTabBar.js.map +7 -0
- package/esm/parts/tabsContent/TabsContent.js +19 -35
- package/esm/parts/tabsContent/TabsContent.js.map +7 -0
- package/esm/parts/tabsContent/styles.js +10 -7
- package/esm/parts/tabsContent/styles.js.map +7 -0
- package/esm/parts/tabsPanel/TabsPanels.js +28 -45
- package/esm/parts/tabsPanel/TabsPanels.js.map +7 -0
- package/esm/parts/tabsPanel/styles.js +14 -15
- package/esm/parts/tabsPanel/styles.js.map +7 -0
- package/esm/propTypes.js +25 -24
- package/esm/propTypes.js.map +7 -0
- package/esm/utils/constants.js +15 -8
- package/esm/utils/constants.js.map +7 -0
- package/esm/utils/helpers.js +33 -11
- package/esm/utils/helpers.js.map +7 -0
- package/esm/utils/hooks/useKeyboardNavigation.js +30 -39
- package/esm/utils/hooks/useKeyboardNavigation.js.map +7 -0
- package/esm/utils/hooks/useTabsCallbacks.js +15 -39
- package/esm/utils/hooks/useTabsCallbacks.js.map +7 -0
- package/package.json +6 -6
- package/types/DSTabs.d.ts +2 -2
- package/types/DSTabsTypes.d.ts +4 -0
- package/types/utils/helpers.d.ts +2 -1
|
@@ -1,58 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __reExport = (target, module2, copyDefault, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
|
|
16
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (module2, isNodeMode) => {
|
|
21
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
|
24
|
+
return (module2, temp) => {
|
|
25
|
+
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
|
|
26
|
+
};
|
|
27
|
+
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
|
|
28
|
+
var useCarouselCallbacks_exports = {};
|
|
29
|
+
__export(useCarouselCallbacks_exports, {
|
|
30
|
+
useCarouselCallbacks: () => useCarouselCallbacks
|
|
31
|
+
});
|
|
32
|
+
var React = __toESM(require("react"));
|
|
33
|
+
var import_react = require("react");
|
|
34
|
+
var import_helpers = require("../../utils/helpers");
|
|
35
|
+
var import_DSTabsCTX = require("../../DSTabsCTX");
|
|
36
|
+
const useCarouselCallbacks = ({
|
|
37
|
+
getVisibleItemsOffset,
|
|
38
|
+
updateIndicatorStyle,
|
|
39
|
+
recalcChevrons
|
|
40
|
+
}) => {
|
|
41
|
+
const { focusableTabsRef, carouselOnlyListRef } = (0, import_react.useContext)(import_DSTabsCTX.DSTabsContext);
|
|
42
|
+
const rightButtonOnClick = (0, import_react.useCallback)(() => {
|
|
21
43
|
if (carouselOnlyListRef.current) {
|
|
22
44
|
carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();
|
|
23
45
|
}
|
|
24
46
|
}, [getVisibleItemsOffset, carouselOnlyListRef]);
|
|
25
|
-
const leftButtonOnClick =
|
|
47
|
+
const leftButtonOnClick = (0, import_react.useCallback)(() => {
|
|
26
48
|
if (carouselOnlyListRef.current) {
|
|
27
49
|
carouselOnlyListRef.current.scrollLeft -= getVisibleItemsOffset();
|
|
28
50
|
}
|
|
29
51
|
}, [getVisibleItemsOffset, carouselOnlyListRef]);
|
|
30
|
-
const handleOnScroll =
|
|
52
|
+
const handleOnScroll = (0, import_react.useCallback)(() => {
|
|
31
53
|
recalcChevrons();
|
|
32
|
-
if (updateIndicatorStyle)
|
|
54
|
+
if (updateIndicatorStyle)
|
|
55
|
+
updateIndicatorStyle();
|
|
33
56
|
}, [recalcChevrons, updateIndicatorStyle]);
|
|
34
|
-
const handleOnClick =
|
|
35
|
-
|
|
36
|
-
target
|
|
37
|
-
} = _ref2;
|
|
38
|
-
|
|
39
|
-
if (focusableTabsRef.current && target.getAttribute('role') === 'tab') {
|
|
57
|
+
const handleOnClick = (0, import_react.useCallback)(({ target }) => {
|
|
58
|
+
if (focusableTabsRef.current && target.getAttribute("role") === "tab") {
|
|
40
59
|
const tabList = carouselOnlyListRef.current;
|
|
41
60
|
const tabButton = target;
|
|
42
61
|
const tabButtonDimensions = tabButton.getBoundingClientRect();
|
|
43
|
-
const tabListDimensions = tabList
|
|
62
|
+
const tabListDimensions = tabList?.getBoundingClientRect();
|
|
44
63
|
const tabButtonIndex = tabButton.dataset.index;
|
|
45
64
|
const lastItemIndex = focusableTabsRef.current.length.toString();
|
|
46
65
|
const magicNumber = 34;
|
|
47
|
-
const firstOrLastItem = tabButtonIndex ===
|
|
48
|
-
|
|
49
|
-
if (!helpers.isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
|
|
66
|
+
const firstOrLastItem = tabButtonIndex === "0" || tabButtonIndex === lastItemIndex;
|
|
67
|
+
if (!(0, import_helpers.isElementVisibleCarousel)(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
|
|
50
68
|
const containerWidth = tabListDimensions.width;
|
|
51
69
|
const halfContainer = containerWidth / 2;
|
|
52
70
|
const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;
|
|
53
71
|
const positionInContainer = elementScrollPosition % containerWidth;
|
|
54
72
|
const width = tabButton.offsetWidth + magicNumber;
|
|
55
|
-
|
|
56
73
|
if (positionInContainer > halfContainer) {
|
|
57
74
|
carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;
|
|
58
75
|
} else {
|
|
@@ -68,5 +85,5 @@ const useCarouselCallbacks = _ref => {
|
|
|
68
85
|
handleOnScroll
|
|
69
86
|
};
|
|
70
87
|
};
|
|
71
|
-
|
|
72
|
-
|
|
88
|
+
module.exports = __toCommonJS(useCarouselCallbacks_exports);
|
|
89
|
+
//# sourceMappingURL=useCarouselCallbacks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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 } 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", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAwC;AAExC,qBAAyC;AACzC,uBAA8B;AAGvB,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,MACiE;AACjE,QAAM,EAAE,kBAAkB,wBAAwB,6BAAW;AAE7D,QAAM,qBAAqB,8BAAY,MAAM;AAC3C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc;AAAA;AAAA,KAE3C,CAAC,uBAAuB;AAE3B,QAAM,oBAAoB,8BAAY,MAAM;AAC1C,QAAI,oBAAoB,SAAS;AAC/B,0BAAoB,QAAQ,cAAc;AAAA;AAAA,KAE3C,CAAC,uBAAuB;AAE3B,QAAM,iBAAiB,8BAAY,MAAM;AACvC;AACA,QAAI;AAAsB;AAAA,KACzB,CAAC,gBAAgB;AAEpB,QAAM,gBAAgB,8BACpB,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,6CAAyB,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
|
+
}
|
|
@@ -1,160 +1,171 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __reExport = (target, module2, copyDefault, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
|
|
16
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (module2, isNodeMode) => {
|
|
21
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
|
24
|
+
return (module2, temp) => {
|
|
25
|
+
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
|
|
26
|
+
};
|
|
27
|
+
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
|
|
28
|
+
var TabBar_exports = {};
|
|
29
|
+
__export(TabBar_exports, {
|
|
30
|
+
TabBar: () => TabBar
|
|
31
|
+
});
|
|
32
|
+
var React = __toESM(require("react"));
|
|
33
|
+
var import_react = __toESM(require("react"));
|
|
34
|
+
var import_Carousel = require("../carousel/Carousel");
|
|
35
|
+
var import_useTabBar = require("./useTabBar");
|
|
36
|
+
var import_styles = require("./styles");
|
|
37
|
+
var import_DSTabsCTX = require("../../DSTabsCTX");
|
|
38
|
+
var import_useKeyboardNavigation = require("../../utils/hooks/useKeyboardNavigation");
|
|
39
|
+
var import_helpers = require("../../utils/helpers");
|
|
40
|
+
var import_constants = require("../../utils/constants");
|
|
41
|
+
var import_useTabsCallbacks = require("../../utils/hooks/useTabsCallbacks");
|
|
42
|
+
var import_DSTabsDatatestid = require("../../DSTabsDatatestid");
|
|
25
43
|
const TabBar = () => {
|
|
26
44
|
const {
|
|
27
45
|
tabsRef,
|
|
28
46
|
focusableTabsRef,
|
|
29
47
|
tabsListRef,
|
|
30
48
|
tabsRefAsArray,
|
|
49
|
+
carouselOnlyListRef,
|
|
31
50
|
actualActiveTab,
|
|
32
|
-
props: {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
} = React.useContext(DSTabsCTX.DSTabsContext);
|
|
41
|
-
const {
|
|
42
|
-
lastTabInternalRef,
|
|
43
|
-
firstSubtabInternalRef
|
|
44
|
-
} = React.useContext(DSTabsCTX.DSTabsCrossRefContext);
|
|
45
|
-
const {
|
|
46
|
-
handleOnTabChange
|
|
47
|
-
} = useTabsCallbacks.useTabsCallbacks();
|
|
48
|
-
const {
|
|
49
|
-
handleOnKeyDown
|
|
50
|
-
} = useKeyboardNavigation.useKeyboardNavigation();
|
|
51
|
-
const {
|
|
52
|
-
indicatorStyle,
|
|
53
|
-
mobileGradients,
|
|
54
|
-
updateMobileGradients,
|
|
55
|
-
updateIndicatorStyle
|
|
56
|
-
} = useTabBar.useTabBar();
|
|
57
|
-
const renderTabs = React.useMemo(() => {
|
|
51
|
+
props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs }
|
|
52
|
+
} = (0, import_react.useContext)(import_DSTabsCTX.DSTabsContext);
|
|
53
|
+
const { lastTabInternalRef, firstSubtabInternalRef } = (0, import_react.useContext)(import_DSTabsCTX.DSTabsCrossRefContext);
|
|
54
|
+
const { handleOnTabChange } = (0, import_useTabsCallbacks.useTabsCallbacks)();
|
|
55
|
+
const { handleOnKeyDown } = (0, import_useKeyboardNavigation.useKeyboardNavigation)();
|
|
56
|
+
const { indicatorStyle, mobileGradients, updateMobileGradients, updateIndicatorStyle } = (0, import_useTabBar.useTabBar)();
|
|
57
|
+
const renderTabs = (0, import_react.useMemo)(() => {
|
|
58
58
|
const availableTabIndexes = [];
|
|
59
|
-
return
|
|
60
|
-
const {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
disabled = false,
|
|
66
|
-
ref,
|
|
67
|
-
onClick,
|
|
68
|
-
onKeyDown
|
|
69
|
-
} = tab.props;
|
|
70
|
-
if (!disabled) availableTabIndexes.push(index);
|
|
71
|
-
return /*#__PURE__*/jsxRuntime.jsxs(styles.StyledTabButton, {
|
|
59
|
+
return import_react.default.Children.map(tabs, (tab, index) => {
|
|
60
|
+
const { tabId = "", title = "", style, required = false, disabled = false, ref, onClick, onKeyDown } = tab.props;
|
|
61
|
+
if (!disabled)
|
|
62
|
+
availableTabIndexes.push(index);
|
|
63
|
+
return /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabButton, {
|
|
64
|
+
key: tabId,
|
|
72
65
|
role: "tab",
|
|
73
|
-
ref: t => {
|
|
66
|
+
ref: (t) => {
|
|
74
67
|
if (tabsRefAsArray.current && focusableTabsRef.current && tabsRef.current) {
|
|
75
68
|
tabsRefAsArray.current[index] = t;
|
|
76
|
-
if (!disabled && !focusableTabsRef.current.includes(t))
|
|
69
|
+
if (!disabled && !focusableTabsRef.current.includes(t))
|
|
70
|
+
focusableTabsRef.current.push(t);
|
|
77
71
|
tabsRef.current[index] = t;
|
|
78
|
-
|
|
79
|
-
if (type === constants.TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {
|
|
72
|
+
if (type === import_constants.TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {
|
|
80
73
|
firstSubtabInternalRef.current = t;
|
|
81
74
|
}
|
|
82
|
-
|
|
83
|
-
if (type !== constants.TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {
|
|
75
|
+
if (type !== import_constants.TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {
|
|
84
76
|
lastTabInternalRef.current = t;
|
|
85
77
|
}
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
if (ref)
|
|
79
|
+
ref.current = t;
|
|
88
80
|
}
|
|
89
81
|
},
|
|
90
82
|
type: "button",
|
|
91
83
|
"aria-controls": tabId,
|
|
92
84
|
"aria-selected": actualActiveTab === tabId,
|
|
93
85
|
"aria-disabled": disabled,
|
|
94
|
-
"aria-labelledby":
|
|
95
|
-
isDSMobile
|
|
96
|
-
fixedTabsHeaders
|
|
86
|
+
"aria-labelledby": `${tabId}-label`,
|
|
87
|
+
isDSMobile,
|
|
88
|
+
fixedTabsHeaders,
|
|
97
89
|
tabType: type,
|
|
98
|
-
title
|
|
90
|
+
title,
|
|
99
91
|
"data-required": required,
|
|
100
92
|
"data-tab-id": tabId,
|
|
101
93
|
"data-index": index,
|
|
102
|
-
withCarousel
|
|
94
|
+
withCarousel,
|
|
103
95
|
isActive: actualActiveTab === tabId,
|
|
104
|
-
disabled
|
|
105
|
-
showSeparator: showSeparator && type !==
|
|
106
|
-
"data-testid": type ===
|
|
107
|
-
id:
|
|
108
|
-
onClick: e => {
|
|
96
|
+
disabled,
|
|
97
|
+
showSeparator: showSeparator && type !== import_constants.TabTypes.NORMAL,
|
|
98
|
+
"data-testid": type === import_constants.TabTypes.NORMAL ? import_DSTabsDatatestid.DSTabsDatatestid.TAB_BUTTON : import_DSTabsDatatestid.DSTabsDatatestid.SUBTAB_BUTTON,
|
|
99
|
+
id: `${tabId}-label`,
|
|
100
|
+
onClick: (e) => {
|
|
109
101
|
if (!disabled) {
|
|
110
102
|
handleOnTabChange(tabId, e);
|
|
111
103
|
updateIndicatorStyle();
|
|
112
104
|
}
|
|
113
|
-
|
|
114
|
-
|
|
105
|
+
if (onClick && !disabled)
|
|
106
|
+
onClick(tabId, e);
|
|
107
|
+
},
|
|
108
|
+
onFocus: (e) => {
|
|
109
|
+
if (withCarousel)
|
|
110
|
+
(0, import_helpers.centerTab)({ e, listRef: carouselOnlyListRef });
|
|
115
111
|
},
|
|
116
|
-
onKeyDown: e => {
|
|
117
|
-
if (e.key ===
|
|
118
|
-
|
|
119
|
-
if (
|
|
112
|
+
onKeyDown: (e) => {
|
|
113
|
+
if (e.key === "Enter")
|
|
114
|
+
e.stopPropagation();
|
|
115
|
+
if (!disabled)
|
|
116
|
+
handleOnKeyDown(e);
|
|
117
|
+
if (onKeyDown && !disabled)
|
|
118
|
+
onKeyDown(e);
|
|
120
119
|
},
|
|
121
|
-
style
|
|
122
|
-
|
|
123
|
-
}, tabId);
|
|
120
|
+
style
|
|
121
|
+
}, title, required && /* @__PURE__ */ import_react.default.createElement(import_styles.StyledRequiredMark, null, "\u25CF"));
|
|
124
122
|
});
|
|
125
|
-
}, [
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
123
|
+
}, [
|
|
124
|
+
tabs,
|
|
125
|
+
actualActiveTab,
|
|
126
|
+
isDSMobile,
|
|
127
|
+
fixedTabsHeaders,
|
|
128
|
+
type,
|
|
129
|
+
withCarousel,
|
|
130
|
+
showSeparator,
|
|
131
|
+
tabsRefAsArray,
|
|
132
|
+
focusableTabsRef,
|
|
133
|
+
tabsRef,
|
|
134
|
+
firstSubtabInternalRef,
|
|
135
|
+
lastTabInternalRef,
|
|
136
|
+
handleOnTabChange,
|
|
137
|
+
updateIndicatorStyle,
|
|
138
|
+
carouselOnlyListRef,
|
|
139
|
+
handleOnKeyDown
|
|
140
|
+
]);
|
|
141
|
+
if (type === import_constants.TabTypes.SUBTABS && !isDSMobile) {
|
|
142
|
+
return /* @__PURE__ */ import_react.default.createElement(import_styles.StyledSubTabsList, {
|
|
143
|
+
withCarousel,
|
|
144
|
+
"data-testid": import_DSTabsDatatestid.DSTabsDatatestid.SUB_TAB_LIST,
|
|
131
145
|
ref: tabsListRef,
|
|
132
|
-
role: "tablist"
|
|
133
|
-
|
|
134
|
-
});
|
|
146
|
+
role: "tablist"
|
|
147
|
+
}, withCarousel ? /* @__PURE__ */ import_react.default.createElement(import_Carousel.Carousel, null, renderTabs) : renderTabs);
|
|
135
148
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
withCarousel: withCarousel,
|
|
149
|
+
return /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabList, {
|
|
150
|
+
withCarousel,
|
|
139
151
|
ref: tabsListRef,
|
|
140
152
|
role: "tablist",
|
|
141
|
-
"data-testid":
|
|
142
|
-
isDSMobile
|
|
143
|
-
fixedTabsHeaders
|
|
144
|
-
mobileGradients
|
|
153
|
+
"data-testid": import_DSTabsDatatestid.DSTabsDatatestid.TAB_LIST,
|
|
154
|
+
isDSMobile,
|
|
155
|
+
fixedTabsHeaders,
|
|
156
|
+
mobileGradients,
|
|
145
157
|
onScroll: updateMobileGradients,
|
|
146
|
-
indicatorStyle
|
|
147
|
-
tabType: type
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
});
|
|
158
|
+
indicatorStyle,
|
|
159
|
+
tabType: type
|
|
160
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabWrapper, {
|
|
161
|
+
isDSMobile,
|
|
162
|
+
fixedTabsHeaders
|
|
163
|
+
}, !isDSMobile && withCarousel ? /* @__PURE__ */ import_react.default.createElement(import_Carousel.Carousel, {
|
|
164
|
+
updateIndicatorStyle
|
|
165
|
+
}, renderTabs) : renderTabs), /* @__PURE__ */ import_react.default.createElement(import_styles.StyledSelectionIndicator, {
|
|
166
|
+
isDSMobile,
|
|
167
|
+
tabType: type
|
|
168
|
+
}));
|
|
158
169
|
};
|
|
159
|
-
|
|
160
|
-
|
|
170
|
+
module.exports = __toCommonJS(TabBar_exports);
|
|
171
|
+
//# sourceMappingURL=TabBar.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/parts/tabBar/TabBar.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable complexity */\nimport React, { useMemo, useContext } from 'react';\nimport { Carousel } from '../carousel/Carousel';\nimport { useTabBar } from './useTabBar';\nimport {\n StyledTabButton,\n StyledTabList,\n StyledTabWrapper,\n StyledSelectionIndicator,\n StyledSubTabsList,\n StyledRequiredMark,\n} from './styles';\nimport { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX';\nimport { useKeyboardNavigation } from '../../utils/hooks/useKeyboardNavigation';\nimport { centerTab } from '../../utils/helpers';\nimport { TabTypes } from '../../utils/constants';\nimport { useTabsCallbacks } from '../../utils/hooks/useTabsCallbacks';\nimport { DSTabsDatatestid } from '../../DSTabsDatatestid';\nimport type { DSTabPropsWithDefaultT } from '../../DSTabsTypes';\n\nexport const TabBar = (): JSX.Element => {\n const {\n tabsRef,\n focusableTabsRef,\n tabsListRef,\n tabsRefAsArray,\n carouselOnlyListRef,\n actualActiveTab,\n props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs },\n } = useContext(DSTabsContext);\n\n const { lastTabInternalRef, firstSubtabInternalRef } = useContext(DSTabsCrossRefContext);\n const { handleOnTabChange } = useTabsCallbacks();\n const { handleOnKeyDown } = useKeyboardNavigation();\n\n const { indicatorStyle, mobileGradients, updateMobileGradients, updateIndicatorStyle } = useTabBar();\n\n const renderTabs: React.ReactNode[] = useMemo(() => {\n const availableTabIndexes: number[] = [];\n\n return React.Children.map(tabs, (tab: React.ReactElement<DSTabPropsWithDefaultT>, index) => {\n const { tabId = '', title = '', style, required = false, disabled = false, ref, onClick, onKeyDown } = tab.props;\n if (!disabled) availableTabIndexes.push(index);\n return (\n <StyledTabButton\n key={tabId}\n role=\"tab\"\n ref={(t: HTMLButtonElement) => {\n if (tabsRefAsArray.current && focusableTabsRef.current && tabsRef.current) {\n tabsRefAsArray.current[index] = t;\n if (!disabled && !focusableTabsRef.current.includes(t)) focusableTabsRef.current.push(t);\n tabsRef.current[index] = t;\n if (type === TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {\n firstSubtabInternalRef.current = t;\n }\n if (type !== TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {\n lastTabInternalRef.current = t;\n }\n if (ref) ref.current = t;\n }\n }}\n type=\"button\"\n aria-controls={tabId}\n aria-selected={actualActiveTab === tabId}\n aria-disabled={disabled}\n aria-labelledby={`${tabId}-label`}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n tabType={type}\n title={title}\n data-required={required}\n data-tab-id={tabId}\n data-index={index}\n withCarousel={withCarousel}\n isActive={actualActiveTab === tabId}\n disabled={disabled}\n showSeparator={showSeparator && type !== TabTypes.NORMAL}\n data-testid={type === TabTypes.NORMAL ? DSTabsDatatestid.TAB_BUTTON : DSTabsDatatestid.SUBTAB_BUTTON}\n id={`${tabId}-label`}\n onClick={(e) => {\n if (!disabled) {\n handleOnTabChange(tabId, e);\n updateIndicatorStyle();\n }\n if (onClick && !disabled) onClick(tabId, e);\n }}\n onFocus={(e) => {\n if (withCarousel) centerTab({ e, listRef: carouselOnlyListRef });\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.stopPropagation();\n if (!disabled) handleOnKeyDown(e);\n if (onKeyDown && !disabled) onKeyDown(e);\n }}\n style={style}\n >\n {title}\n {required && <StyledRequiredMark>●</StyledRequiredMark>}\n </StyledTabButton>\n );\n });\n }, [\n tabs,\n actualActiveTab,\n isDSMobile,\n fixedTabsHeaders,\n type,\n withCarousel,\n showSeparator,\n tabsRefAsArray,\n focusableTabsRef,\n tabsRef,\n firstSubtabInternalRef,\n lastTabInternalRef,\n handleOnTabChange,\n updateIndicatorStyle,\n carouselOnlyListRef,\n handleOnKeyDown,\n ]);\n\n if (type === TabTypes.SUBTABS && !isDSMobile) {\n return (\n <StyledSubTabsList\n withCarousel={withCarousel}\n data-testid={DSTabsDatatestid.SUB_TAB_LIST}\n ref={tabsListRef}\n role=\"tablist\"\n >\n {withCarousel ? <Carousel>{renderTabs}</Carousel> : renderTabs}\n </StyledSubTabsList>\n );\n }\n\n return (\n <StyledTabList\n withCarousel={withCarousel}\n ref={tabsListRef}\n role=\"tablist\"\n data-testid={DSTabsDatatestid.TAB_LIST}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n mobileGradients={mobileGradients}\n onScroll={updateMobileGradients}\n indicatorStyle={indicatorStyle}\n tabType={type}\n >\n <StyledTabWrapper isDSMobile={isDSMobile} fixedTabsHeaders={fixedTabsHeaders}>\n {!isDSMobile && withCarousel ? (\n <Carousel updateIndicatorStyle={updateIndicatorStyle}>{renderTabs}</Carousel>\n ) : (\n renderTabs\n )}\n </StyledTabWrapper>\n <StyledSelectionIndicator isDSMobile={isDSMobile} tabType={type} />\n </StyledTabList>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|