@epignosis_llc/gnosis 6.8.0 → 6.8.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.
|
@@ -19,7 +19,7 @@ import TabsContent from './TabsContent.js';
|
|
|
19
19
|
import { tabsHeader, container } from './styles.js';
|
|
20
20
|
import { createElement as jsx } from '../../../node_modules/@emotion/react/dist/emotion-react.browser.esm.js';
|
|
21
21
|
|
|
22
|
-
var _excluded = ["tabs", "stickyHeader", "selectedTab", "onChangeTab", "inlineEndComponent", "testIds"];
|
|
22
|
+
var _excluded = ["tabs", "stickyHeader", "selectedTab", "controlled", "onChangeTab", "inlineEndComponent", "testIds"];
|
|
23
23
|
var Tabs = function Tabs(_ref) {
|
|
24
24
|
var _ref$tabs = _ref.tabs,
|
|
25
25
|
tabs = _ref$tabs === void 0 ? [] : _ref$tabs,
|
|
@@ -27,24 +27,39 @@ var Tabs = function Tabs(_ref) {
|
|
|
27
27
|
stickyHeader = _ref$stickyHeader === void 0 ? false : _ref$stickyHeader,
|
|
28
28
|
_ref$selectedTab = _ref.selectedTab,
|
|
29
29
|
selectedTab = _ref$selectedTab === void 0 ? 0 : _ref$selectedTab,
|
|
30
|
+
_ref$controlled = _ref.controlled,
|
|
31
|
+
controlled = _ref$controlled === void 0 ? false : _ref$controlled,
|
|
30
32
|
onChangeTab = _ref.onChangeTab,
|
|
31
33
|
inlineEndComponent = _ref.inlineEndComponent,
|
|
32
34
|
testIds = _ref.testIds,
|
|
33
35
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
34
36
|
var _useState = useState(selectedTab),
|
|
35
37
|
_useState2 = _slicedToArray(_useState, 2),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
internalActiveTab = _useState2[0],
|
|
39
|
+
setInternalActiveTab = _useState2[1];
|
|
40
|
+
// Tabs without content are not rendered, so every index (selection, bounds, keyboard,
|
|
41
|
+
// arrows) refers to this filtered collection — matching what onChangeTab emits.
|
|
42
|
+
var tabsWithContent = tabs.filter(function (tab) {
|
|
43
|
+
return tab.content;
|
|
44
|
+
});
|
|
45
|
+
var tabsLength = tabsWithContent.length - 1;
|
|
39
46
|
var tabsNavEl = useRef(null);
|
|
40
47
|
var _useState3 = useState(false),
|
|
41
48
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
42
49
|
isOverflowActive = _useState4[0],
|
|
43
50
|
setIsOverflowActive = _useState4[1];
|
|
44
51
|
var dir = document.dir;
|
|
52
|
+
var clampTabIndex = function clampTabIndex(index) {
|
|
53
|
+
if (index < 0) return 0;
|
|
54
|
+
if (index > tabsLength) return tabsLength;
|
|
55
|
+
return index;
|
|
56
|
+
};
|
|
57
|
+
var activeTab = controlled ? clampTabIndex(selectedTab) : internalActiveTab;
|
|
45
58
|
var onSelectTab = function onSelectTab(index) {
|
|
46
59
|
scrollToTab(index);
|
|
47
|
-
|
|
60
|
+
if (!controlled) {
|
|
61
|
+
setInternalActiveTab(index);
|
|
62
|
+
}
|
|
48
63
|
onChangeTab && onChangeTab(index);
|
|
49
64
|
};
|
|
50
65
|
var showLeftArrow = function showLeftArrow() {
|
|
@@ -53,33 +68,21 @@ var Tabs = function Tabs(_ref) {
|
|
|
53
68
|
};
|
|
54
69
|
var handLeftArrowClick = function handLeftArrowClick() {
|
|
55
70
|
if (activeTab > 0) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return currentTab - 1;
|
|
59
|
-
});
|
|
71
|
+
// Route through onSelectTab so controlled parents are notified of the new selection.
|
|
72
|
+
onSelectTab(activeTab - 1);
|
|
60
73
|
}
|
|
61
74
|
};
|
|
62
75
|
var showRightArrow = function showRightArrow() {
|
|
63
|
-
if (!isOverflowActive || !
|
|
76
|
+
if (!isOverflowActive || !tabsWithContent.length) return false;
|
|
64
77
|
return activeTab < tabsLength;
|
|
65
78
|
};
|
|
66
79
|
var handRightArrowClick = function handRightArrowClick() {
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
setActiveTab(function (currentTab) {
|
|
70
|
-
return currentTab + 1;
|
|
71
|
-
});
|
|
80
|
+
if (tabsWithContent.length && activeTab < tabsLength) {
|
|
81
|
+
onSelectTab(activeTab + 1);
|
|
72
82
|
}
|
|
73
83
|
};
|
|
74
84
|
useEffect(function () {
|
|
75
|
-
|
|
76
|
-
if (selectedTab < 0) {
|
|
77
|
-
newSelectedTab = 0;
|
|
78
|
-
}
|
|
79
|
-
if (selectedTab > tabsLength) {
|
|
80
|
-
newSelectedTab = tabsLength;
|
|
81
|
-
}
|
|
82
|
-
setActiveTab(newSelectedTab);
|
|
85
|
+
setInternalActiveTab(clampTabIndex(selectedTab));
|
|
83
86
|
}, [selectedTab]);
|
|
84
87
|
useEffect(function () {
|
|
85
88
|
toggleTabsArrow();
|
|
@@ -108,15 +111,9 @@ var Tabs = function Tabs(_ref) {
|
|
|
108
111
|
};
|
|
109
112
|
var handleKeyDown = function handleKeyDown(e, index) {
|
|
110
113
|
if (e.key === "ArrowRight" && index < tabsLength) {
|
|
111
|
-
|
|
112
|
-
if (tabs[index + 1].content) {
|
|
113
|
-
onSelectTab(index + 1);
|
|
114
|
-
}
|
|
114
|
+
onSelectTab(index + 1);
|
|
115
115
|
} else if (e.key === "ArrowLeft" && index > 0) {
|
|
116
|
-
|
|
117
|
-
if (tabs[index - 1].content) {
|
|
118
|
-
onSelectTab(index - 1);
|
|
119
|
-
}
|
|
116
|
+
onSelectTab(index - 1);
|
|
120
117
|
}
|
|
121
118
|
};
|
|
122
119
|
return jsx("section", _extends({
|
|
@@ -145,9 +142,7 @@ var Tabs = function Tabs(_ref) {
|
|
|
145
142
|
ref: tabsNavEl
|
|
146
143
|
}, (testIds === null || testIds === void 0 ? void 0 : testIds.nav) && {
|
|
147
144
|
"data-testid": testIds.nav
|
|
148
|
-
}),
|
|
149
|
-
return tab.content;
|
|
150
|
-
}).map(function (_ref2, index) {
|
|
145
|
+
}), tabsWithContent.map(function (_ref2, index) {
|
|
151
146
|
var title = _ref2.title,
|
|
152
147
|
id = _ref2.id;
|
|
153
148
|
return jsx(TabsNavItem, {
|
|
@@ -179,9 +174,7 @@ var Tabs = function Tabs(_ref) {
|
|
|
179
174
|
role: "region"
|
|
180
175
|
}, (testIds === null || testIds === void 0 ? void 0 : testIds.content) && {
|
|
181
176
|
"data-testid": testIds.content
|
|
182
|
-
}),
|
|
183
|
-
return tab.content;
|
|
184
|
-
}).map(function (_ref3, index) {
|
|
177
|
+
}), tabsWithContent.map(function (_ref3, index) {
|
|
185
178
|
var content = _ref3.content;
|
|
186
179
|
return jsx(TabsContent, {
|
|
187
180
|
key: index,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, { FC, useState, useEffect, useRef } from \"react\";\nimport { SerializedStyles } from \"@emotion/react\";\nimport { ArrowLeftSVG, ArrowRightSVG } from \"../../icons/\";\nimport Button from \"../Button/Button\";\nimport TabsNavItem from \"./TabsNavItem\";\nimport TabsContent from \"./TabsContent\";\nimport { container, tabsHeader } from \"./styles\";\n\nexport type TabObject = {\n title: JSX.Element | string;\n id?: string;\n content?: JSX.Element | string;\n};\n\ntype TabsProps = React.HTMLAttributes<HTMLElement> & {\n stickyHeader?: boolean;\n selectedTab?: number;\n onChangeTab?: (index: number) => void;\n tabs: TabObject[];\n inlineEndComponent?: JSX.Element;\n testIds?: {\n nav?: string;\n content?: string;\n };\n};\n\nconst Tabs: FC<TabsProps> = ({\n tabs = [],\n stickyHeader = false,\n selectedTab = 0,\n onChangeTab,\n inlineEndComponent,\n testIds,\n ...rest\n}) => {\n const [activeTab, setActiveTab] = useState(selectedTab);\n const tabsLength = tabs.length - 1;\n const tabsNavEl = useRef<HTMLDivElement>(null);\n const [isOverflowActive, setIsOverflowActive] = useState(false);\n const dir = document.dir;\n\n const onSelectTab = (index: number): void => {\n scrollToTab(index);\n setActiveTab(index);\n onChangeTab && onChangeTab(index);\n };\n\n const showLeftArrow = () => {\n if (!isOverflowActive) return false;\n return activeTab > 0;\n };\n\n const handLeftArrowClick = () => {\n if (activeTab > 0) {\n scrollToTab(activeTab - 1);\n setActiveTab((currentTab) => currentTab - 1);\n }\n };\n\n const showRightArrow = () => {\n if (!isOverflowActive || !tabs.length) return false;\n return activeTab < tabsLength;\n };\n\n const handRightArrowClick = () => {\n if (tabs.length && activeTab < tabsLength) {\n scrollToTab(activeTab + 1);\n setActiveTab((currentTab) => currentTab + 1);\n }\n };\n\n useEffect(() => {\n let newSelectedTab = selectedTab;\n\n if (selectedTab < 0) {\n newSelectedTab = 0;\n }\n\n if (selectedTab > tabsLength) {\n newSelectedTab = tabsLength;\n }\n\n setActiveTab(newSelectedTab);\n }, [selectedTab]);\n\n useEffect(() => {\n toggleTabsArrow();\n }, [tabsNavEl]);\n\n const toggleTabsArrow = () => {\n const el = tabsNavEl.current;\n if (el) {\n setIsOverflowActive(el.offsetWidth < el.scrollWidth);\n }\n };\n\n // add listener on window resize to toggle tabs arrow visibility\n useEffect(() => {\n window.addEventListener(\"resize\", toggleTabsArrow);\n\n return () => {\n window.removeEventListener(\"resize\", toggleTabsArrow);\n };\n }, []);\n\n //TODO: find a way to perform scrolling to tab\n const scrollToTab = (tabIndex: number) => {\n const tabOffset = document.querySelector(`#tab-${tabIndex}`)?.getBoundingClientRect().x;\n\n const tablist = document.getElementsByTagName(\"nav\")[0];\n tabOffset && tablist.scrollTo(tabOffset > 0 ? tabOffset - 16 : 0, 0);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>, index: number) => {\n if (e.key === \"ArrowRight\" && index < tabsLength) {\n // If next tab is undefined, do nothing\n if (tabs[index + 1].content) {\n onSelectTab(index + 1);\n }\n } else if (e.key === \"ArrowLeft\" && index > 0) {\n // If prev tab is undefined, do nothing\n if (tabs[index - 1].content) {\n onSelectTab(index - 1);\n }\n }\n };\n\n return (\n <section css={container} {...rest}>\n <div className=\"nav-wrapper\" role=\"navigation\" tabIndex={0}>\n {showLeftArrow() && (\n <Button\n data-testid=\"left-arrow\"\n variant=\"link\"\n color=\"secondary\"\n noGutters\n onClick={handLeftArrowClick}\n >\n {dir === \"rtl\" ? <ArrowRightSVG height={22} /> : <ArrowLeftSVG height={22} />}\n </Button>\n )}\n\n <nav\n css={(theme): SerializedStyles => tabsHeader(theme, { stickyHeader })}\n role=\"tablist\"\n ref={tabsNavEl}\n {...(testIds?.nav && { \"data-testid\": testIds.nav })}\n >\n {tabs\n .filter((tab) => tab.content)\n .map(({ title, id }, index) => (\n <TabsNavItem\n id={id}\n key={index}\n index={index}\n title={title}\n isActive={activeTab === index}\n onSelectTab={onSelectTab}\n onKeyDown={(e) => handleKeyDown(e, index)}\n />\n ))}\n {inlineEndComponent && <div className=\"inline-end-component\">{inlineEndComponent}</div>}\n </nav>\n\n {showRightArrow() && (\n <Button\n data-testid=\"right-arrow\"\n variant=\"link\"\n color=\"secondary\"\n noGutters\n onClick={handRightArrowClick}\n >\n {dir === \"rtl\" ? <ArrowLeftSVG height={22} /> : <ArrowRightSVG height={22} />}\n </Button>\n )}\n </div>\n\n <div\n id=\"content\"\n aria-live=\"polite\"\n role=\"region\"\n {...(testIds?.content && { \"data-testid\": testIds.content })}\n >\n {tabs\n .filter((tab) => tab.content)\n .map(({ content }, index) => (\n <TabsContent\n key={index}\n index={index}\n content={content}\n isVisible={activeTab === index}\n />\n ))}\n </div>\n </section>\n );\n};\n\nexport default Tabs;\n"],"names":["Tabs","_ref","_ref$tabs","tabs","_ref$stickyHeader","stickyHeader","_ref$selectedTab","selectedTab","onChangeTab","inlineEndComponent","testIds","rest","_objectWithoutProperties","_excluded","_useState","useState","_useState2","_slicedToArray","activeTab","setActiveTab","tabsLength","length","tabsNavEl","useRef","_useState3","_useState4","isOverflowActive","setIsOverflowActive","dir","document","onSelectTab","index","scrollToTab","showLeftArrow","handLeftArrowClick","currentTab","showRightArrow","handRightArrowClick","useEffect","newSelectedTab","toggleTabsArrow","el","current","offsetWidth","scrollWidth","window","addEventListener","removeEventListener","tabIndex","_document$querySelect","tabOffset","querySelector","concat","getBoundingClientRect","x","tablist","getElementsByTagName","scrollTo","handleKeyDown","e","key","content","___EmotionJSX","_extends","css","container","className","role","Button","variant","color","noGutters","onClick","ArrowRightSVG","height","ArrowLeftSVG","theme","tabsHeader","ref","nav","filter","tab","map","_ref2","title","id","TabsNavItem","isActive","onKeyDown","_ref3","TabsContent","isVisible"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, { FC, useState, useEffect, useRef } from \"react\";\nimport { SerializedStyles } from \"@emotion/react\";\nimport { ArrowLeftSVG, ArrowRightSVG } from \"../../icons/\";\nimport Button from \"../Button/Button\";\nimport TabsNavItem from \"./TabsNavItem\";\nimport TabsContent from \"./TabsContent\";\nimport { container, tabsHeader } from \"./styles\";\n\nexport type TabObject = {\n title: JSX.Element | string;\n id?: string;\n content?: JSX.Element | string;\n};\n\ntype TabsProps = React.HTMLAttributes<HTMLElement> & {\n stickyHeader?: boolean;\n selectedTab?: number;\n /**\n * When true, the parent owns the active tab: selecting a tab only calls onChangeTab and the\n * component follows selectedTab. Keeps the selection from running ahead of parent state that\n * updates asynchronously (e.g. a URL transition).\n */\n controlled?: boolean;\n onChangeTab?: (index: number) => void;\n tabs: TabObject[];\n inlineEndComponent?: JSX.Element;\n testIds?: {\n nav?: string;\n content?: string;\n };\n};\n\nconst Tabs: FC<TabsProps> = ({\n tabs = [],\n stickyHeader = false,\n selectedTab = 0,\n controlled = false,\n onChangeTab,\n inlineEndComponent,\n testIds,\n ...rest\n}) => {\n const [internalActiveTab, setInternalActiveTab] = useState(selectedTab);\n // Tabs without content are not rendered, so every index (selection, bounds, keyboard,\n // arrows) refers to this filtered collection — matching what onChangeTab emits.\n const tabsWithContent = tabs.filter((tab) => tab.content);\n const tabsLength = tabsWithContent.length - 1;\n const tabsNavEl = useRef<HTMLDivElement>(null);\n const [isOverflowActive, setIsOverflowActive] = useState(false);\n const dir = document.dir;\n\n const clampTabIndex = (index: number): number => {\n if (index < 0) return 0;\n if (index > tabsLength) return tabsLength;\n return index;\n };\n\n const activeTab = controlled ? clampTabIndex(selectedTab) : internalActiveTab;\n\n const onSelectTab = (index: number): void => {\n scrollToTab(index);\n if (!controlled) {\n setInternalActiveTab(index);\n }\n onChangeTab && onChangeTab(index);\n };\n\n const showLeftArrow = () => {\n if (!isOverflowActive) return false;\n return activeTab > 0;\n };\n\n const handLeftArrowClick = () => {\n if (activeTab > 0) {\n // Route through onSelectTab so controlled parents are notified of the new selection.\n onSelectTab(activeTab - 1);\n }\n };\n\n const showRightArrow = () => {\n if (!isOverflowActive || !tabsWithContent.length) return false;\n return activeTab < tabsLength;\n };\n\n const handRightArrowClick = () => {\n if (tabsWithContent.length && activeTab < tabsLength) {\n onSelectTab(activeTab + 1);\n }\n };\n\n useEffect(() => {\n setInternalActiveTab(clampTabIndex(selectedTab));\n }, [selectedTab]);\n\n useEffect(() => {\n toggleTabsArrow();\n }, [tabsNavEl]);\n\n const toggleTabsArrow = () => {\n const el = tabsNavEl.current;\n if (el) {\n setIsOverflowActive(el.offsetWidth < el.scrollWidth);\n }\n };\n\n // add listener on window resize to toggle tabs arrow visibility\n useEffect(() => {\n window.addEventListener(\"resize\", toggleTabsArrow);\n\n return () => {\n window.removeEventListener(\"resize\", toggleTabsArrow);\n };\n }, []);\n\n //TODO: find a way to perform scrolling to tab\n const scrollToTab = (tabIndex: number) => {\n const tabOffset = document.querySelector(`#tab-${tabIndex}`)?.getBoundingClientRect().x;\n\n const tablist = document.getElementsByTagName(\"nav\")[0];\n tabOffset && tablist.scrollTo(tabOffset > 0 ? tabOffset - 16 : 0, 0);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>, index: number) => {\n if (e.key === \"ArrowRight\" && index < tabsLength) {\n onSelectTab(index + 1);\n } else if (e.key === \"ArrowLeft\" && index > 0) {\n onSelectTab(index - 1);\n }\n };\n\n return (\n <section css={container} {...rest}>\n <div className=\"nav-wrapper\" role=\"navigation\" tabIndex={0}>\n {showLeftArrow() && (\n <Button\n data-testid=\"left-arrow\"\n variant=\"link\"\n color=\"secondary\"\n noGutters\n onClick={handLeftArrowClick}\n >\n {dir === \"rtl\" ? <ArrowRightSVG height={22} /> : <ArrowLeftSVG height={22} />}\n </Button>\n )}\n\n <nav\n css={(theme): SerializedStyles => tabsHeader(theme, { stickyHeader })}\n role=\"tablist\"\n ref={tabsNavEl}\n {...(testIds?.nav && { \"data-testid\": testIds.nav })}\n >\n {tabsWithContent.map(({ title, id }, index) => (\n <TabsNavItem\n id={id}\n key={index}\n index={index}\n title={title}\n isActive={activeTab === index}\n onSelectTab={onSelectTab}\n onKeyDown={(e) => handleKeyDown(e, index)}\n />\n ))}\n {inlineEndComponent && <div className=\"inline-end-component\">{inlineEndComponent}</div>}\n </nav>\n\n {showRightArrow() && (\n <Button\n data-testid=\"right-arrow\"\n variant=\"link\"\n color=\"secondary\"\n noGutters\n onClick={handRightArrowClick}\n >\n {dir === \"rtl\" ? <ArrowLeftSVG height={22} /> : <ArrowRightSVG height={22} />}\n </Button>\n )}\n </div>\n\n <div\n id=\"content\"\n aria-live=\"polite\"\n role=\"region\"\n {...(testIds?.content && { \"data-testid\": testIds.content })}\n >\n {tabsWithContent.map(({ content }, index) => (\n <TabsContent\n key={index}\n index={index}\n content={content}\n isVisible={activeTab === index}\n />\n ))}\n </div>\n </section>\n );\n};\n\nexport default Tabs;\n"],"names":["Tabs","_ref","_ref$tabs","tabs","_ref$stickyHeader","stickyHeader","_ref$selectedTab","selectedTab","_ref$controlled","controlled","onChangeTab","inlineEndComponent","testIds","rest","_objectWithoutProperties","_excluded","_useState","useState","_useState2","_slicedToArray","internalActiveTab","setInternalActiveTab","tabsWithContent","filter","tab","content","tabsLength","length","tabsNavEl","useRef","_useState3","_useState4","isOverflowActive","setIsOverflowActive","dir","document","clampTabIndex","index","activeTab","onSelectTab","scrollToTab","showLeftArrow","handLeftArrowClick","showRightArrow","handRightArrowClick","useEffect","toggleTabsArrow","el","current","offsetWidth","scrollWidth","window","addEventListener","removeEventListener","tabIndex","_document$querySelect","tabOffset","querySelector","concat","getBoundingClientRect","x","tablist","getElementsByTagName","scrollTo","handleKeyDown","e","key","___EmotionJSX","_extends","css","container","className","role","Button","variant","color","noGutters","onClick","ArrowRightSVG","height","ArrowLeftSVG","theme","tabsHeader","ref","nav","map","_ref2","title","id","TabsNavItem","isActive","onKeyDown","_ref3","TabsContent","isVisible"],"mappings":"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"}
|