@ioca/react 1.5.6 → 1.5.8
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/lib/cjs/components/tabs/contents.js +28 -0
- package/lib/cjs/components/tabs/contents.js.map +1 -0
- package/lib/cjs/components/tabs/helper.js +68 -0
- package/lib/cjs/components/tabs/helper.js.map +1 -0
- package/lib/cjs/components/tabs/navs.js +38 -0
- package/lib/cjs/components/tabs/navs.js.map +1 -0
- package/lib/cjs/components/tabs/tabs.js +62 -84
- package/lib/cjs/components/tabs/tabs.js.map +1 -1
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/es/components/tabs/contents.js +20 -0
- package/lib/es/components/tabs/contents.js.map +1 -0
- package/lib/es/components/tabs/helper.js +63 -0
- package/lib/es/components/tabs/helper.js.map +1 -0
- package/lib/es/components/tabs/navs.js +30 -0
- package/lib/es/components/tabs/navs.js.map +1 -0
- package/lib/es/components/tabs/tabs.js +64 -86
- package/lib/es/components/tabs/tabs.js.map +1 -1
- package/lib/index.js +150 -79
- package/lib/types/components/tabs/type.d.ts +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var classNames = require('classnames');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
10
|
+
|
|
11
|
+
var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
|
|
12
|
+
|
|
13
|
+
const TabsContents$1 = (props) => {
|
|
14
|
+
const { tabs, activeKey, cachedTabKeySet, getContent } = props;
|
|
15
|
+
return (jsxRuntime.jsx("div", { className: "i-tab-contents", children: tabs.map((tab, i) => {
|
|
16
|
+
const key = tab.key ?? `${i}`;
|
|
17
|
+
const content = getContent(key);
|
|
18
|
+
const isActive = activeKey === key;
|
|
19
|
+
const show = isActive || cachedTabKeySet.has(key);
|
|
20
|
+
return (show && (jsxRuntime.jsx("div", { className: classNames__default("i-tab-content", {
|
|
21
|
+
"i-tab-active": isActive,
|
|
22
|
+
}), role: "tabpanel", "aria-hidden": !isActive, children: content }, key)));
|
|
23
|
+
}) }));
|
|
24
|
+
};
|
|
25
|
+
var TabsContents = react.memo(TabsContents$1);
|
|
26
|
+
|
|
27
|
+
exports.default = TabsContents;
|
|
28
|
+
//# sourceMappingURL=contents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contents.js","sources":["../../../../packages/components/tabs/contents.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { memo, ReactNode } from \"react\";\nimport { ITabItem } from \"./type\";\n\ninterface ITabsContentsProps {\n tabs: ITabItem[];\n activeKey?: string;\n cachedTabKeySet: Set<string>;\n getContent: (key: string) => ReactNode;\n}\n\nconst TabsContents = (props: ITabsContentsProps) => {\n const { tabs, activeKey, cachedTabKeySet, getContent } = props;\n\n return (\n <div className=\"i-tab-contents\">\n {tabs.map((tab, i) => {\n const key = tab.key ?? `${i}`;\n const content = getContent(key);\n const isActive = activeKey === key;\n const show = isActive || cachedTabKeySet.has(key);\n\n return (\n show && (\n <div\n key={key}\n className={classNames(\"i-tab-content\", {\n \"i-tab-active\": isActive,\n })}\n role=\"tabpanel\"\n aria-hidden={!isActive}\n >\n {content}\n </div>\n )\n );\n })}\n </div>\n );\n};\n\nexport default memo(TabsContents);\n"],"names":["TabsContents","_jsx","classNames","memo"],"mappings":";;;;;;;;;;;;AAWA,MAAMA,cAAY,GAAG,CAAC,KAAyB,KAAI;IAC/C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,KAAK;AAE9D,IAAA,QACIC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;YACjB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,CAAC,CAAA,CAAE;AAC7B,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;AAC/B,YAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG;YAClC,MAAM,IAAI,GAAG,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAEjD,QACI,IAAI,KACAA,cAAA,CAAA,KAAA,EAAA,EAEI,SAAS,EAAEC,mBAAU,CAAC,eAAe,EAAE;AACnC,oBAAA,cAAc,EAAE,QAAQ;AAC3B,iBAAA,CAAC,EACF,IAAI,EAAC,UAAU,iBACF,CAAC,QAAQ,EAAA,QAAA,EAErB,OAAO,EAAA,EAPH,GAAG,CAQN,CACT;QAET,CAAC,CAAC,EAAA,CACA;AAEd,CAAC;AAED,mBAAeC,UAAI,CAACH,cAAY,CAAC;;;;"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var material = require('@ricons/material');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var button = require('../button/button.js');
|
|
7
|
+
var icon = require('../icon/icon.js');
|
|
8
|
+
|
|
9
|
+
const emptyBarStyle = {
|
|
10
|
+
height: 0,
|
|
11
|
+
width: 0,
|
|
12
|
+
};
|
|
13
|
+
const defaultRenderMore = () => (jsxRuntime.jsx(button.default, { flat: true, square: true, size: "small", children: jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.MoreHorizRound, {}) }) }));
|
|
14
|
+
const isSameTabs = (prev, next) => prev.length === next.length &&
|
|
15
|
+
prev.every((tab, index) => {
|
|
16
|
+
const target = next[index];
|
|
17
|
+
return (tab.key === target.key &&
|
|
18
|
+
tab.title === target.title &&
|
|
19
|
+
tab.keepDOM === target.keepDOM &&
|
|
20
|
+
tab.closable === target.closable &&
|
|
21
|
+
tab.intersecting === target.intersecting);
|
|
22
|
+
});
|
|
23
|
+
const getParsedTabs = (items, children) => {
|
|
24
|
+
const contents = new Map();
|
|
25
|
+
if (!items) {
|
|
26
|
+
const tabs = react.Children.map(children, (node, i) => {
|
|
27
|
+
const { key, props: nodeProps } = node;
|
|
28
|
+
const { title, children: tabChildren, content, keepDOM, closable, } = nodeProps;
|
|
29
|
+
const tabKey = String(key ?? i);
|
|
30
|
+
contents.set(tabKey, tabChildren ?? content);
|
|
31
|
+
return {
|
|
32
|
+
key: tabKey,
|
|
33
|
+
title,
|
|
34
|
+
keepDOM,
|
|
35
|
+
closable,
|
|
36
|
+
};
|
|
37
|
+
}) ?? [];
|
|
38
|
+
return {
|
|
39
|
+
tabs,
|
|
40
|
+
contents,
|
|
41
|
+
keys: new Set(tabs.map((tab) => String(tab.key))),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const tabs = items.map((item, i) => {
|
|
45
|
+
if (["string", "number"].includes(typeof item)) {
|
|
46
|
+
const key = String(item);
|
|
47
|
+
return { key, title: item };
|
|
48
|
+
}
|
|
49
|
+
const key = String(item.key ?? i);
|
|
50
|
+
contents.set(key, item.content);
|
|
51
|
+
const { content, ...rest } = item;
|
|
52
|
+
return {
|
|
53
|
+
...rest,
|
|
54
|
+
key,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
tabs,
|
|
59
|
+
contents,
|
|
60
|
+
keys: new Set(tabs.map((tab) => String(tab.key))),
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
exports.defaultRenderMore = defaultRenderMore;
|
|
65
|
+
exports.emptyBarStyle = emptyBarStyle;
|
|
66
|
+
exports.getParsedTabs = getParsedTabs;
|
|
67
|
+
exports.isSameTabs = isSameTabs;
|
|
68
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sources":["../../../../packages/components/tabs/helper.tsx"],"sourcesContent":["import { MoreHorizRound } from \"@ricons/material\";\nimport { Children, ReactNode } from \"react\";\nimport Button from \"../button\";\nimport Icon from \"../icon\";\nimport { ITabItem, ITabs } from \"./type\";\n\nexport type TParsedTabs = {\n tabs: ITabItem[];\n contents: Map<string, ReactNode>;\n keys: Set<string>;\n};\n\nexport const emptyBarStyle = {\n height: 0,\n width: 0,\n};\n\nexport const defaultRenderMore = () => (\n <Button flat square size=\"small\">\n <Icon icon={<MoreHorizRound />} />\n </Button>\n);\n\nexport const isSameTabs = (prev: ITabItem[], next: ITabItem[]) =>\n prev.length === next.length &&\n prev.every((tab, index) => {\n const target = next[index];\n\n return (\n tab.key === target.key &&\n tab.title === target.title &&\n tab.keepDOM === target.keepDOM &&\n tab.closable === target.closable &&\n tab.intersecting === target.intersecting\n );\n });\n\nexport const getParsedTabs = (\n items: ITabs[\"tabs\"],\n children: ITabs[\"children\"],\n): TParsedTabs => {\n const contents = new Map<string, ReactNode>();\n type TTabChildNode = {\n key?: string;\n props?: Pick<\n ITabItem,\n \"title\" | \"content\" | \"keepDOM\" | \"closable\" | \"children\"\n >;\n };\n\n if (!items) {\n const tabs =\n (Children.map(children, (node, i) => {\n const { key, props: nodeProps } = node as TTabChildNode;\n const {\n title,\n children: tabChildren,\n content,\n keepDOM,\n closable,\n } = nodeProps;\n const tabKey = String(key ?? i);\n\n contents.set(tabKey, tabChildren ?? content);\n\n return {\n key: tabKey,\n title,\n keepDOM,\n closable,\n };\n }) as ITabItem[]) ?? [];\n\n return {\n tabs,\n contents,\n keys: new Set(tabs.map((tab) => String(tab.key))),\n };\n }\n\n const tabs = items.map((item, i) => {\n if ([\"string\", \"number\"].includes(typeof item)) {\n const key = String(item);\n return { key, title: item };\n }\n\n const key = String(item.key ?? i);\n contents.set(key, item.content);\n const { content, ...rest } = item;\n\n return {\n ...rest,\n key,\n };\n });\n\n return {\n tabs,\n contents,\n keys: new Set(tabs.map((tab) => String(tab.key))),\n };\n};\n"],"names":["_jsx","Button","Icon","MoreHorizRound","Children"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var classNames = require('classnames');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var popup = require('../popup/popup.js');
|
|
9
|
+
var helpericon = require('../utils/helpericon/helpericon.js');
|
|
10
|
+
|
|
11
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
12
|
+
|
|
13
|
+
var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
|
|
14
|
+
|
|
15
|
+
const TabsNavs$1 = (props) => {
|
|
16
|
+
const { tabs, moreTabs, activeKey, vertical, overflow, hideMore, navsJustify = "start", bar, barClass, barStyle, navsRef, renderMore, setNavRef, onOpen, onClose, onMoreTabClick, onKeyAction, } = props;
|
|
17
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { ref: navsRef, className: classNames__default("i-tab-navs", `justify-${navsJustify}`), role: "tablist", "aria-orientation": vertical ? "vertical" : "horizontal", children: [tabs.map((tab, i) => {
|
|
18
|
+
const { title, key = `${i}`, closable } = tab;
|
|
19
|
+
const isActive = activeKey === key;
|
|
20
|
+
return (jsxRuntime.jsxs("a", { ref: (node) => setNavRef(i, node), className: classNames__default("i-tab-nav", {
|
|
21
|
+
"i-tab-active": isActive,
|
|
22
|
+
}), role: "tab", tabIndex: isActive ? 0 : -1, "aria-selected": isActive, onClick: () => onOpen(key), onKeyDown: (e) => onKeyAction(e, () => onOpen(key)), children: [title, closable && (jsxRuntime.jsx(helpericon.default, { as: "i", active: true, className: "i-tab-nav-close", role: "button", tabIndex: 0, "aria-label": "\u5173\u95ED\u6807\u7B7E\u9875", onClick: (e) => {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
e.stopPropagation();
|
|
25
|
+
onClose(key);
|
|
26
|
+
}, onKeyDown: (e) => onKeyAction(e, () => onClose(key)) }))] }, key));
|
|
27
|
+
}), bar && (jsxRuntime.jsx("span", { className: classNames__default("i-tab-navs-bar", barClass), style: barStyle }))] }), !hideMore && overflow && moreTabs.length > 0 && (jsxRuntime.jsx(popup.default, { arrow: false, position: vertical ? "right" : "bottom", align: "end", touchable: true, hideDelay: 500, content: jsxRuntime.jsx("div", { className: "i-tabs-morelist pd-4", children: moreTabs.map((tab, i) => {
|
|
28
|
+
const { key = `${i}`, title } = tab;
|
|
29
|
+
const isActive = activeKey === key;
|
|
30
|
+
return (jsxRuntime.jsx("a", { className: classNames__default("i-tab-nav", {
|
|
31
|
+
"i-tab-active": isActive,
|
|
32
|
+
}), role: "button", tabIndex: 0, onClick: () => onMoreTabClick(key), onKeyDown: (e) => onKeyAction(e, () => onMoreTabClick(key)), children: title }, key));
|
|
33
|
+
}) }), children: renderMore(moreTabs) }))] }));
|
|
34
|
+
};
|
|
35
|
+
var TabsNavs = react.memo(TabsNavs$1);
|
|
36
|
+
|
|
37
|
+
exports.default = TabsNavs;
|
|
38
|
+
//# sourceMappingURL=navs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navs.js","sources":["../../../../packages/components/tabs/navs.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport type { CSSProperties, KeyboardEvent, ReactNode, RefObject } from \"react\";\nimport { memo } from \"react\";\nimport Popup from \"../popup\";\nimport Helpericon from \"../utils/helpericon\";\nimport { ITabItem } from \"./type\";\n\ninterface ITabsNavsProps {\n tabs: ITabItem[];\n moreTabs: ITabItem[];\n activeKey?: string;\n vertical?: boolean;\n overflow?: boolean;\n hideMore?: boolean;\n navsJustify?: \"start\" | \"center\" | \"end\";\n bar?: boolean;\n barClass?: string;\n barStyle?: CSSProperties;\n navsRef: RefObject<HTMLDivElement>;\n renderMore: (moreTabs: ITabItem[]) => ReactNode;\n setNavRef: (index: number, node: HTMLAnchorElement | null) => void;\n onOpen: (key: string) => void;\n onClose: (key: string) => void;\n onMoreTabClick: (key: string) => void;\n onKeyAction: (e: KeyboardEvent<HTMLElement>, action: () => void) => void;\n}\n\nconst TabsNavs = (props: ITabsNavsProps) => {\n const {\n tabs,\n moreTabs,\n activeKey,\n vertical,\n overflow,\n hideMore,\n navsJustify = \"start\",\n bar,\n barClass,\n barStyle,\n navsRef,\n renderMore,\n setNavRef,\n onOpen,\n onClose,\n onMoreTabClick,\n onKeyAction,\n } = props;\n\n return (\n <>\n <div\n ref={navsRef}\n className={classNames(\"i-tab-navs\", `justify-${navsJustify}`)}\n role=\"tablist\"\n aria-orientation={vertical ? \"vertical\" : \"horizontal\"}\n >\n {tabs.map((tab, i) => {\n const { title, key = `${i}`, closable } = tab;\n const isActive = activeKey === key;\n\n return (\n <a\n key={key}\n ref={(node) => setNavRef(i, node)}\n className={classNames(\"i-tab-nav\", {\n \"i-tab-active\": isActive,\n })}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n aria-selected={isActive}\n onClick={() => onOpen(key)}\n onKeyDown={(e) => onKeyAction(e, () => onOpen(key))}\n >\n {title}\n\n {closable && (\n <Helpericon\n as=\"i\"\n active\n className=\"i-tab-nav-close\"\n role=\"button\"\n tabIndex={0}\n aria-label=\"关闭标签页\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClose(key);\n }}\n onKeyDown={(e) =>\n onKeyAction(e, () => onClose(key))\n }\n />\n )}\n </a>\n );\n })}\n\n {bar && (\n <span\n className={classNames(\"i-tab-navs-bar\", barClass)}\n style={barStyle}\n />\n )}\n </div>\n\n {!hideMore && overflow && moreTabs.length > 0 && (\n <Popup\n arrow={false}\n position={vertical ? \"right\" : \"bottom\"}\n align=\"end\"\n touchable\n hideDelay={500}\n content={\n <div className=\"i-tabs-morelist pd-4\">\n {moreTabs.map((tab, i) => {\n const { key = `${i}`, title } = tab;\n const isActive = activeKey === key;\n\n return (\n <a\n key={key}\n className={classNames(\"i-tab-nav\", {\n \"i-tab-active\": isActive,\n })}\n role=\"button\"\n tabIndex={0}\n onClick={() => onMoreTabClick(key)}\n onKeyDown={(e) =>\n onKeyAction(e, () =>\n onMoreTabClick(key),\n )\n }\n >\n {title}\n </a>\n );\n })}\n </div>\n }\n >\n {renderMore(moreTabs)}\n </Popup>\n )}\n </>\n );\n};\n\nexport default memo(TabsNavs);\n"],"names":["TabsNavs","_jsxs","_Fragment","classNames","_jsx","Helpericon","Popup","memo"],"mappings":"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"}
|
|
@@ -3,24 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var material = require('@ricons/material');
|
|
7
6
|
var classNames = require('classnames');
|
|
8
7
|
var react = require('react');
|
|
9
8
|
var hooks = require('../../js/hooks.js');
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var popup = require('../popup/popup.js');
|
|
13
|
-
var helpericon = require('../utils/helpericon/helpericon.js');
|
|
9
|
+
var contents = require('./contents.js');
|
|
10
|
+
var helper = require('./helper.js');
|
|
14
11
|
var item = require('./item.js');
|
|
12
|
+
var navs = require('./navs.js');
|
|
15
13
|
|
|
16
14
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
17
15
|
|
|
18
16
|
var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
|
|
19
17
|
|
|
20
18
|
const Tabs = ((props) => {
|
|
21
|
-
const { ref, active, tabs: items, type = "default", prepend, append, children, className, vertical, toggable, navsJustify = "start", bar = true, hideMore, barClass, renderMore =
|
|
19
|
+
const { ref, active, tabs: items, type = "default", prepend, append, children, className, vertical, toggable, navsJustify = "start", navsClass, bar = true, hideMore, barClass, renderMore = helper.defaultRenderMore, onTabChange, ...rest } = props;
|
|
22
20
|
const navRefs = react.useRef([]);
|
|
23
|
-
const barRef = react.useRef(null);
|
|
24
21
|
const navsRef = react.useRef(null);
|
|
25
22
|
const contentsRef = react.useRef(new Map());
|
|
26
23
|
const [activeKey, setActiveKey] = react.useState(active);
|
|
@@ -37,42 +34,36 @@ const Tabs = ((props) => {
|
|
|
37
34
|
activeKeyRef.current = activeKey;
|
|
38
35
|
const prevActiveKeyRef = react.useRef(prevActiveKey);
|
|
39
36
|
prevActiveKeyRef.current = prevActiveKey;
|
|
37
|
+
const sourceKeysRef = react.useRef(new Set());
|
|
38
|
+
const hiddenSourceKeysRef = react.useRef(new Set());
|
|
39
|
+
const parsedTabs = react.useMemo(() => helper.getParsedTabs(items, children), [children, items]);
|
|
40
40
|
react.useEffect(() => {
|
|
41
|
-
contentsRef.current
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const { key, props: nodeProps } = node;
|
|
49
|
-
const { title, children: tabChildren, content, keepDOM, closable, } = nodeProps;
|
|
50
|
-
const tabKey = String(key ?? i);
|
|
51
|
-
contentsRef.current.set(tabKey, tabChildren ?? content);
|
|
52
|
-
return {
|
|
53
|
-
key: tabKey,
|
|
54
|
-
title,
|
|
55
|
-
keepDOM,
|
|
56
|
-
closable,
|
|
57
|
-
};
|
|
58
|
-
}) ?? []);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
setTabs(items.map((item, i) => {
|
|
62
|
-
if (["string", "number"].includes(typeof item)) {
|
|
63
|
-
const key = String(item);
|
|
64
|
-
return { key, title: item };
|
|
41
|
+
const prevContents = new Map(contentsRef.current);
|
|
42
|
+
const nextContents = new Map(parsedTabs.contents);
|
|
43
|
+
const sourceTabs = parsedTabs.tabs;
|
|
44
|
+
const sourceKeys = parsedTabs.keys;
|
|
45
|
+
hiddenSourceKeysRef.current.forEach((key) => {
|
|
46
|
+
if (!sourceKeys.has(key)) {
|
|
47
|
+
hiddenSourceKeysRef.current.delete(key);
|
|
65
48
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
return
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
49
|
+
});
|
|
50
|
+
const dynamicTabs = tabsRef.current.filter((tab) => {
|
|
51
|
+
const key = String(tab.key);
|
|
52
|
+
return !sourceKeysRef.current.has(key) && !sourceKeys.has(key);
|
|
53
|
+
});
|
|
54
|
+
dynamicTabs.forEach((tab) => {
|
|
55
|
+
const key = String(tab.key);
|
|
56
|
+
nextContents.set(key, prevContents.get(key));
|
|
57
|
+
});
|
|
58
|
+
sourceKeysRef.current = sourceKeys;
|
|
59
|
+
contentsRef.current = nextContents;
|
|
60
|
+
const nextTabs = [
|
|
61
|
+
...sourceTabs.filter((tab) => !hiddenSourceKeysRef.current.has(String(tab.key))),
|
|
62
|
+
...dynamicTabs,
|
|
63
|
+
];
|
|
64
|
+
setTabs((currentTabs) => helper.isSameTabs(currentTabs, nextTabs) ? currentTabs : nextTabs);
|
|
65
|
+
}, [parsedTabs]);
|
|
66
|
+
const add = (tab, position) => {
|
|
76
67
|
const currentTabs = tabsRef.current;
|
|
77
68
|
const tkey = String(tab.key ?? currentTabs.length);
|
|
78
69
|
const i = currentTabs.findIndex((t) => t.key === tkey);
|
|
@@ -82,7 +73,14 @@ const Tabs = ((props) => {
|
|
|
82
73
|
}
|
|
83
74
|
contentsRef.current.set(tkey, tab.content);
|
|
84
75
|
const { content, ...rest } = tab;
|
|
85
|
-
setTabs((ts) =>
|
|
76
|
+
setTabs((ts) => {
|
|
77
|
+
const nextTabs = [...ts];
|
|
78
|
+
const index = position === undefined
|
|
79
|
+
? nextTabs.length
|
|
80
|
+
: Math.max(0, Math.min(position, nextTabs.length));
|
|
81
|
+
nextTabs.splice(index, 0, { ...rest, key: tkey });
|
|
82
|
+
return nextTabs;
|
|
83
|
+
});
|
|
86
84
|
open(tkey);
|
|
87
85
|
};
|
|
88
86
|
const close = (key) => {
|
|
@@ -90,7 +88,12 @@ const Tabs = ((props) => {
|
|
|
90
88
|
const i = currentTabs.findIndex((t) => t.key === key);
|
|
91
89
|
if (i < 0)
|
|
92
90
|
return;
|
|
93
|
-
|
|
91
|
+
if (sourceKeysRef.current.has(key)) {
|
|
92
|
+
hiddenSourceKeysRef.current.add(key);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
contentsRef.current.delete(key);
|
|
96
|
+
}
|
|
94
97
|
const nextTabs = [...currentTabs];
|
|
95
98
|
nextTabs.splice(i, 1);
|
|
96
99
|
setTabs(nextTabs);
|
|
@@ -107,10 +110,7 @@ const Tabs = ((props) => {
|
|
|
107
110
|
onTabChange?.(undefined, activeKey);
|
|
108
111
|
setPrevActiveKey(activeKey);
|
|
109
112
|
setActiveKey(undefined);
|
|
110
|
-
setBarStyle(
|
|
111
|
-
height: 0,
|
|
112
|
-
width: 0,
|
|
113
|
-
});
|
|
113
|
+
setBarStyle(helper.emptyBarStyle);
|
|
114
114
|
return;
|
|
115
115
|
}
|
|
116
116
|
if (nextKey === activeKey) {
|
|
@@ -118,10 +118,7 @@ const Tabs = ((props) => {
|
|
|
118
118
|
return;
|
|
119
119
|
onTabChange?.(undefined, key);
|
|
120
120
|
setActiveKey(undefined);
|
|
121
|
-
setBarStyle(
|
|
122
|
-
height: 0,
|
|
123
|
-
width: 0,
|
|
124
|
-
});
|
|
121
|
+
setBarStyle(helper.emptyBarStyle);
|
|
125
122
|
return;
|
|
126
123
|
}
|
|
127
124
|
setPrevActiveKey(activeKey);
|
|
@@ -147,6 +144,10 @@ const Tabs = ((props) => {
|
|
|
147
144
|
open(key);
|
|
148
145
|
scrollToTab(key);
|
|
149
146
|
};
|
|
147
|
+
const setNavRef = (index, node) => {
|
|
148
|
+
navRefs.current[index] = node;
|
|
149
|
+
};
|
|
150
|
+
const getContent = (key) => contentsRef.current.get(key);
|
|
150
151
|
react.useEffect(() => {
|
|
151
152
|
if (!size || hideMore || !observe || !unobserve)
|
|
152
153
|
return;
|
|
@@ -170,7 +171,7 @@ const Tabs = ((props) => {
|
|
|
170
171
|
return;
|
|
171
172
|
}
|
|
172
173
|
const observed = [];
|
|
173
|
-
navRefs.current.
|
|
174
|
+
navRefs.current.forEach((nav, i) => {
|
|
174
175
|
if (!nav)
|
|
175
176
|
return;
|
|
176
177
|
observed.push(nav);
|
|
@@ -185,7 +186,7 @@ const Tabs = ((props) => {
|
|
|
185
186
|
});
|
|
186
187
|
});
|
|
187
188
|
return () => {
|
|
188
|
-
observed.
|
|
189
|
+
observed.forEach((el) => unobserve(el));
|
|
189
190
|
};
|
|
190
191
|
}, [size, hideMore, tabs.length, observe, unobserve]);
|
|
191
192
|
react.useEffect(() => {
|
|
@@ -207,7 +208,7 @@ const Tabs = ((props) => {
|
|
|
207
208
|
const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;
|
|
208
209
|
const isLine = type === "line";
|
|
209
210
|
setBarStyle({
|
|
210
|
-
height: !vertical && isLine ? ".25em" :
|
|
211
|
+
height: !vertical && isLine ? ".25em" : offsetHeight * 0.5,
|
|
211
212
|
width: vertical && isLine ? ".25em" : offsetWidth,
|
|
212
213
|
transform: `translate(${offsetLeft}px, ${offsetTop}px)`,
|
|
213
214
|
});
|
|
@@ -219,7 +220,8 @@ const Tabs = ((props) => {
|
|
|
219
220
|
react.useEffect(() => {
|
|
220
221
|
if (active === undefined || activeKey === active)
|
|
221
222
|
return;
|
|
222
|
-
|
|
223
|
+
setPrevActiveKey(activeKey);
|
|
224
|
+
setActiveKey(active);
|
|
223
225
|
}, [active]);
|
|
224
226
|
react.useEffect(() => {
|
|
225
227
|
if (!navsRef.current || vertical)
|
|
@@ -248,37 +250,13 @@ const Tabs = ((props) => {
|
|
|
248
250
|
add,
|
|
249
251
|
navs: navsRef,
|
|
250
252
|
}));
|
|
251
|
-
const
|
|
253
|
+
const cachedTabKeySet = react.useMemo(() => new Set(cachedTabs), [cachedTabs]);
|
|
254
|
+
const moreTabs = react.useMemo(() => !hideMore && overflow
|
|
252
255
|
? tabs.filter((tab) => tab.intersecting === false)
|
|
253
|
-
: [];
|
|
254
|
-
return (jsxRuntime.jsxs("div", { className: classNames__default("i-tabs", { flex: vertical, [`i-tabs-${type}`]: type !== "default" }, className), ...rest, children: [jsxRuntime.jsxs("div", { className: classNames__default("i-tab-navs-container", {
|
|
256
|
+
: [], [hideMore, overflow, tabs]);
|
|
257
|
+
return (jsxRuntime.jsxs("div", { className: classNames__default("i-tabs", { flex: vertical, [`i-tabs-${type}`]: type !== "default" }, className), ...rest, children: [jsxRuntime.jsxs("div", { className: classNames__default("i-tab-navs-container", navsClass, {
|
|
255
258
|
"i-tab-navs-vertical": vertical,
|
|
256
|
-
}), children: [prepend, jsxRuntime.
|
|
257
|
-
const { title, key = `${i}`, closable } = tab;
|
|
258
|
-
const isActive = activeKey === key;
|
|
259
|
-
return (jsxRuntime.jsxs("a", { ref: (ref) => (navRefs.current[i] = ref), className: classNames__default("i-tab-nav", {
|
|
260
|
-
"i-tab-active": isActive,
|
|
261
|
-
}), role: "tab", tabIndex: isActive ? 0 : -1, "aria-selected": isActive, onClick: () => open(key), onKeyDown: (e) => handleKeyAction(e, () => open(key)), children: [title, closable && (jsxRuntime.jsx(helpericon.default, { as: "i", active: true, className: "i-tab-nav-close", role: "button", tabIndex: 0, "aria-label": "\u5173\u95ED\u6807\u7B7E\u9875", onClick: (e) => {
|
|
262
|
-
e.preventDefault();
|
|
263
|
-
e.stopPropagation();
|
|
264
|
-
close(key);
|
|
265
|
-
}, onKeyDown: (e) => handleKeyAction(e, () => close(key)) }))] }, key));
|
|
266
|
-
}), bar && (jsxRuntime.jsx("span", { ref: barRef, className: classNames__default("i-tab-navs-bar", barClass), style: barStyle }))] }), !hideMore && overflow && moreTabs.length > 0 && (jsxRuntime.jsx(popup.default, { arrow: false, position: vertical ? "right" : "bottom", align: "end", touchable: true, hideDelay: 500, content: jsxRuntime.jsx("div", { className: "i-tabs-morelist pd-4", children: moreTabs.map((tab, i) => {
|
|
267
|
-
const { key = `${i}`, title } = tab;
|
|
268
|
-
const isActive = activeKey === key;
|
|
269
|
-
return (jsxRuntime.jsx("a", { className: classNames__default("i-tab-nav", {
|
|
270
|
-
"i-tab-active": isActive,
|
|
271
|
-
}), role: "button", tabIndex: 0, onClick: () => handleMoreTabClick(key), onKeyDown: (e) => handleKeyAction(e, () => handleMoreTabClick(key)), children: title }, key));
|
|
272
|
-
}) }), children: renderMore(moreTabs) })), append] }), jsxRuntime.jsx("div", { className: "i-tab-contents", children: tabs.map((tab, i) => {
|
|
273
|
-
const key = tab.key ?? `${i}`;
|
|
274
|
-
const content = contentsRef.current.get(key);
|
|
275
|
-
const isActive = activeKey === key;
|
|
276
|
-
const show = isActive ||
|
|
277
|
-
(key !== undefined && cachedTabs.includes(key));
|
|
278
|
-
return (show && (jsxRuntime.jsx("div", { className: classNames__default("i-tab-content", {
|
|
279
|
-
"i-tab-active": isActive,
|
|
280
|
-
}), role: "tabpanel", "aria-hidden": !isActive, children: content }, key)));
|
|
281
|
-
}) })] }));
|
|
259
|
+
}), children: [prepend, jsxRuntime.jsx(navs.default, { tabs: tabs, moreTabs: moreTabs, activeKey: activeKey, vertical: vertical, overflow: overflow, hideMore: hideMore, navsJustify: navsJustify, bar: bar, barClass: barClass, barStyle: barStyle, navsRef: navsRef, renderMore: renderMore, setNavRef: setNavRef, onOpen: open, onClose: close, onMoreTabClick: handleMoreTabClick, onKeyAction: handleKeyAction }), append] }), jsxRuntime.jsx(contents.default, { tabs: tabs, activeKey: activeKey, cachedTabKeySet: cachedTabKeySet, getContent: getContent })] }));
|
|
282
260
|
});
|
|
283
261
|
Tabs.Item = item.default;
|
|
284
262
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import { MoreHorizRound } from \"@ricons/material\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n CSSProperties,\r\n Children,\r\n KeyboardEvent,\r\n ReactNode,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\r\nimport Button from \"../button\";\r\nimport Icon from \"../icon\";\r\nimport Popup from \"../popup\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport \"./index.css\";\r\nimport TabItem from \"./item\";\r\nimport { CompositionTabs, ITabItem, ITabs } from \"./type\";\r\n\r\nconst Tabs = ((props: ITabs) => {\r\n const {\r\n ref,\r\n active,\r\n tabs: items,\r\n type = \"default\",\r\n prepend,\r\n append,\r\n children,\r\n className,\r\n vertical,\r\n toggable,\r\n navsJustify = \"start\",\r\n bar = true,\r\n hideMore,\r\n barClass,\r\n renderMore = () => (\r\n <Button flat square size=\"small\">\r\n <Icon icon={<MoreHorizRound />} />\r\n </Button>\r\n ),\r\n onTabChange,\r\n ...rest\r\n } = props;\r\n\r\n const navRefs = useRef<HTMLElement[]>([]);\r\n const barRef = useRef<HTMLSpanElement>(null);\r\n const navsRef = useRef<HTMLDivElement>(null);\r\n const contentsRef = useRef<Map<string, ReactNode>>(new Map());\r\n const [activeKey, setActiveKey] = useState<string | undefined>(active);\r\n const [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [barStyle, setBarStyle] = useState<CSSProperties>({});\r\n const [cachedTabs, setCachedTabs] = useState<string[]>([]);\r\n const [overflow, setOverflow] = useState(false);\r\n const [tabs, setTabs] = useState<ITabItem[]>([]);\r\n const { observe, unobserve } = useIntersectionObserver();\r\n const size = useSize(navsRef);\r\n\r\n const tabsRef = useRef<ITabItem[]>(tabs);\r\n tabsRef.current = tabs;\r\n const activeKeyRef = useRef<string | undefined>(activeKey);\r\n activeKeyRef.current = activeKey;\r\n const prevActiveKeyRef = useRef<string | undefined>(prevActiveKey);\r\n prevActiveKeyRef.current = prevActiveKey;\r\n\r\n useEffect(() => {\r\n contentsRef.current.clear();\r\n\r\n if (!items) {\r\n if (!children) {\r\n setTabs([]);\r\n return;\r\n }\r\n\r\n setTabs(\r\n (Children.map(children, (node, i) => {\r\n const { key, props: nodeProps } = node as {\r\n key?: string;\r\n props?: any;\r\n };\r\n const {\r\n title,\r\n children: tabChildren,\r\n content,\r\n keepDOM,\r\n closable,\r\n } = nodeProps;\r\n const tabKey = String(key ?? i);\r\n contentsRef.current.set(tabKey, tabChildren ?? content);\r\n\r\n return {\r\n key: tabKey,\r\n title,\r\n keepDOM,\r\n closable,\r\n };\r\n }) as ITabItem[]) ?? [],\r\n );\r\n\r\n return;\r\n }\r\n\r\n setTabs(\r\n items.map((item, i) => {\r\n if ([\"string\", \"number\"].includes(typeof item)) {\r\n const key = String(item);\r\n return { key, title: item };\r\n }\r\n const key = String(item.key ?? i);\r\n contentsRef.current.set(key, item.content);\r\n const { content, ...rest } = item;\r\n return {\r\n ...rest,\r\n key,\r\n };\r\n }),\r\n );\r\n }, [children, items]);\r\n\r\n const add = (tab: ITabItem) => {\r\n const currentTabs = tabsRef.current;\r\n const tkey = String(tab.key ?? currentTabs.length);\r\n const i = currentTabs.findIndex((t) => t.key === tkey);\r\n\r\n if (i > -1) {\r\n open(currentTabs[i].key ?? `${i}`);\r\n return;\r\n }\r\n\r\n contentsRef.current.set(tkey, tab.content);\r\n const { content, ...rest } = tab;\r\n setTabs((ts) => [...ts, { ...rest, key: tkey }]);\r\n open(tkey);\r\n };\r\n\r\n const close = (key: string) => {\r\n const currentTabs = tabsRef.current;\r\n const i = currentTabs.findIndex((t) => t.key === key);\r\n\r\n if (i < 0) return;\r\n\r\n contentsRef.current.delete(key);\r\n const nextTabs = [...currentTabs];\r\n nextTabs.splice(i, 1);\r\n setTabs(nextTabs);\r\n\r\n if (activeKeyRef.current !== key) return;\r\n\r\n const next = nextTabs[i] || nextTabs[i - 1];\r\n const prev = prevActiveKeyRef.current;\r\n const nextKey =\r\n prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;\r\n open(nextKey ?? \"\");\r\n };\r\n\r\n const open = (key: string) => {\r\n const nextKey = key || undefined;\r\n\r\n if (nextKey === undefined) {\r\n onTabChange?.(undefined, activeKey);\r\n setPrevActiveKey(activeKey);\r\n setActiveKey(undefined);\r\n setBarStyle({\r\n height: 0,\r\n width: 0,\r\n });\r\n return;\r\n }\r\n\r\n if (nextKey === activeKey) {\r\n if (!toggable) return;\r\n\r\n onTabChange?.(undefined, key);\r\n setActiveKey(undefined);\r\n\r\n setBarStyle({\r\n height: 0,\r\n width: 0,\r\n });\r\n return;\r\n }\r\n\r\n setPrevActiveKey(activeKey);\r\n onTabChange?.(nextKey, activeKey);\r\n setActiveKey(nextKey);\r\n };\r\n\r\n const handleKeyAction = (e: KeyboardEvent<Element>, action: () => void) => {\r\n if (![\"Enter\", \" \"].includes(e.key)) return;\r\n e.preventDefault();\r\n action();\r\n };\r\n\r\n const scrollToTab = (key: string) => {\r\n const index = tabsRef.current.findIndex((tab) => tab.key === key);\r\n const nav = navRefs.current[index];\r\n\r\n nav?.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"nearest\",\r\n inline: \"nearest\",\r\n });\r\n };\r\n\r\n const handleMoreTabClick = (key: string) => {\r\n open(key);\r\n scrollToTab(key);\r\n };\r\n\r\n useEffect(() => {\r\n if (!size || hideMore || !observe || !unobserve) return;\r\n const { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\r\n const { width, height } = size;\r\n\r\n const nextOverflow = scrollHeight > height || scrollWidth > width;\r\n setOverflow((v) => (v === nextOverflow ? v : nextOverflow));\r\n\r\n if (!nextOverflow) {\r\n setTabs((ts) => {\r\n let changed = false;\r\n const next = ts.map((t) => {\r\n if (\r\n t.intersecting === undefined ||\r\n t.intersecting === true\r\n ) {\r\n return t;\r\n }\r\n changed = true;\r\n return { ...t, intersecting: true };\r\n });\r\n return changed ? next : ts;\r\n });\r\n return;\r\n }\r\n\r\n const observed: HTMLElement[] = [];\r\n\r\n navRefs.current.map((nav, i) => {\r\n if (!nav) return;\r\n observed.push(nav);\r\n observe(nav, (_tar: HTMLElement, visible: boolean) => {\r\n setTabs((ts) => {\r\n if (!ts[i]) return ts;\r\n if (ts[i]?.intersecting === visible) return ts;\r\n return ts.map((t, idx) =>\r\n idx === i ? { ...t, intersecting: visible } : t,\r\n );\r\n });\r\n });\r\n });\r\n\r\n return () => {\r\n observed.map((el) => unobserve(el));\r\n };\r\n }, [size, hideMore, tabs.length, observe, unobserve]);\r\n\r\n useEffect(() => {\r\n if (!bar || type === \"pane\" || activeKey === undefined) {\r\n return;\r\n }\r\n\r\n const index = tabs.findIndex((tab) => tab.key === activeKey);\r\n\r\n const timer = window.setTimeout(() => {\r\n const nav = navRefs.current[index];\r\n\r\n if (!nav) return;\r\n\r\n if (tabs[index]?.keepDOM && activeKey) {\r\n setCachedTabs((keys) => {\r\n if (keys.includes(activeKey)) return keys;\r\n return [activeKey, ...keys];\r\n });\r\n }\r\n\r\n const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\r\n const isLine = type === \"line\";\r\n\r\n setBarStyle({\r\n height: !vertical && isLine ? \".25em\" : \".8em\",\r\n width: vertical && isLine ? \".25em\" : offsetWidth,\r\n transform: `translate(${offsetLeft}px, ${offsetTop}px)`,\r\n });\r\n }, 16);\r\n\r\n return () => {\r\n window.clearTimeout(timer);\r\n };\r\n }, [activeKey, bar, size, tabs, type, vertical]);\r\n\r\n useEffect(() => {\r\n if (active === undefined || activeKey === active) return;\r\n\r\n open(active);\r\n }, [active]);\r\n\r\n useEffect(() => {\r\n if (!navsRef.current || vertical) return;\r\n\r\n const handleMouseWheel = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if (vertical) return;\r\n\r\n navsRef.current?.scrollBy({\r\n left: e.deltaY + e.deltaX,\r\n });\r\n };\r\n\r\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\r\n passive: false,\r\n });\r\n\r\n return () => {\r\n if (!navsRef.current) return;\r\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\r\n };\r\n }, [vertical]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close,\r\n add,\r\n navs: navsRef,\r\n }));\r\n\r\n const moreTabs =\r\n !hideMore && overflow\r\n ? tabs.filter((tab) => tab.intersecting === false)\r\n : [];\r\n\r\n return (\r\n <div\r\n className={classNames(\r\n \"i-tabs\",\r\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\r\n className,\r\n )}\r\n {...rest}\r\n >\r\n <div\r\n className={classNames(\"i-tab-navs-container\", {\r\n \"i-tab-navs-vertical\": vertical,\r\n })}\r\n >\r\n {prepend}\r\n\r\n <div\r\n ref={navsRef}\r\n className={classNames(\r\n \"i-tab-navs\",\r\n `justify-${navsJustify}`,\r\n )}\r\n role=\"tablist\"\r\n aria-orientation={vertical ? \"vertical\" : \"horizontal\"}\r\n >\r\n {tabs.map((tab, i) => {\r\n const { title, key = `${i}`, closable } = tab;\r\n const isActive = activeKey === key;\r\n\r\n return (\r\n <a\r\n key={key}\r\n ref={(ref) => (navRefs.current[i] = ref as any)}\r\n className={classNames(\"i-tab-nav\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"tab\"\r\n tabIndex={isActive ? 0 : -1}\r\n aria-selected={isActive}\r\n onClick={() => open(key)}\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () => open(key))\r\n }\r\n >\r\n {title}\r\n\r\n {closable && (\r\n <Helpericon\r\n as=\"i\"\r\n active\r\n className=\"i-tab-nav-close\"\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-label=\"关闭标签页\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n close(key);\r\n }}\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () => close(key))\r\n }\r\n />\r\n )}\r\n </a>\r\n );\r\n })}\r\n\r\n {bar && (\r\n <span\r\n ref={barRef}\r\n className={classNames(\"i-tab-navs-bar\", barClass)}\r\n style={barStyle}\r\n />\r\n )}\r\n </div>\r\n\r\n {!hideMore && overflow && moreTabs.length > 0 && (\r\n <Popup\r\n arrow={false}\r\n position={vertical ? \"right\" : \"bottom\"}\r\n align=\"end\"\r\n touchable\r\n hideDelay={500}\r\n content={\r\n <div className=\"i-tabs-morelist pd-4\">\r\n {moreTabs.map((tab, i) => {\r\n const { key = `${i}`, title } = tab;\r\n const isActive = activeKey === key;\r\n\r\n return (\r\n <a\r\n key={key}\r\n className={classNames(\"i-tab-nav\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={() =>\r\n handleMoreTabClick(key)\r\n }\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () =>\r\n handleMoreTabClick(key),\r\n )\r\n }\r\n >\r\n {title}\r\n </a>\r\n );\r\n })}\r\n </div>\r\n }\r\n >\r\n {renderMore(moreTabs)}\r\n </Popup>\r\n )}\r\n\r\n {append}\r\n </div>\r\n\r\n <div className=\"i-tab-contents\">\r\n {tabs.map((tab, i) => {\r\n const key = tab.key ?? `${i}`;\r\n const content = contentsRef.current.get(key);\r\n const isActive = activeKey === key;\r\n const show =\r\n isActive ||\r\n (key !== undefined && cachedTabs.includes(key));\r\n\r\n return (\r\n show && (\r\n <div\r\n key={key}\r\n className={classNames(\"i-tab-content\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"tabpanel\"\r\n aria-hidden={!isActive}\r\n >\r\n {content}\r\n </div>\r\n )\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}) as CompositionTabs;\r\n\r\nTabs.Item = TabItem;\r\n\r\nexport default Tabs;\r\n"],"names":["_jsx","Button","Icon","MoreHorizRound","useRef","useState","useIntersectionObserver","useSize","useEffect","Children","useImperativeHandle","_jsxs","classNames","Helpericon","Popup","TabItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport {\r\n CSSProperties,\r\n KeyboardEvent,\r\n ReactNode,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\r\nimport TabsContents from \"./contents\";\r\nimport {\r\n defaultRenderMore,\r\n emptyBarStyle,\r\n getParsedTabs,\r\n isSameTabs,\r\n} from \"./helper\";\r\nimport \"./index.css\";\r\nimport TabItem from \"./item\";\r\nimport TabsNavs from \"./navs\";\r\nimport { CompositionTabs, ITabItem, ITabs } from \"./type\";\r\nconst Tabs = ((props: ITabs) => {\r\n const {\r\n ref,\r\n active,\r\n tabs: items,\r\n type = \"default\",\r\n prepend,\r\n append,\r\n children,\r\n className,\r\n vertical,\r\n toggable,\r\n navsJustify = \"start\",\r\n navsClass,\r\n bar = true,\r\n hideMore,\r\n barClass,\r\n renderMore = defaultRenderMore,\r\n onTabChange,\r\n ...rest\r\n } = props;\r\n\r\n const navRefs = useRef<(HTMLAnchorElement | null)[]>([]);\r\n const navsRef = useRef<HTMLDivElement>(null);\r\n const contentsRef = useRef<Map<string, ReactNode>>(new Map());\r\n const [activeKey, setActiveKey] = useState<string | undefined>(active);\r\n const [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [barStyle, setBarStyle] = useState<CSSProperties>({});\r\n const [cachedTabs, setCachedTabs] = useState<string[]>([]);\r\n const [overflow, setOverflow] = useState(false);\r\n const [tabs, setTabs] = useState<ITabItem[]>([]);\r\n const { observe, unobserve } = useIntersectionObserver();\r\n const size = useSize(navsRef);\r\n\r\n const tabsRef = useRef<ITabItem[]>(tabs);\r\n tabsRef.current = tabs;\r\n const activeKeyRef = useRef<string | undefined>(activeKey);\r\n activeKeyRef.current = activeKey;\r\n const prevActiveKeyRef = useRef<string | undefined>(prevActiveKey);\r\n prevActiveKeyRef.current = prevActiveKey;\r\n const sourceKeysRef = useRef<Set<string>>(new Set());\r\n const hiddenSourceKeysRef = useRef<Set<string>>(new Set());\r\n const parsedTabs = useMemo(\r\n () => getParsedTabs(items, children),\r\n [children, items],\r\n );\r\n\r\n useEffect(() => {\r\n const prevContents = new Map(contentsRef.current);\r\n const nextContents = new Map(parsedTabs.contents);\r\n const sourceTabs = parsedTabs.tabs;\r\n const sourceKeys = parsedTabs.keys;\r\n\r\n hiddenSourceKeysRef.current.forEach((key) => {\r\n if (!sourceKeys.has(key)) {\r\n hiddenSourceKeysRef.current.delete(key);\r\n }\r\n });\r\n\r\n const dynamicTabs = tabsRef.current.filter((tab) => {\r\n const key = String(tab.key);\r\n return !sourceKeysRef.current.has(key) && !sourceKeys.has(key);\r\n });\r\n\r\n dynamicTabs.forEach((tab) => {\r\n const key = String(tab.key);\r\n nextContents.set(key, prevContents.get(key));\r\n });\r\n\r\n sourceKeysRef.current = sourceKeys;\r\n contentsRef.current = nextContents;\r\n const nextTabs = [\r\n ...sourceTabs.filter(\r\n (tab) => !hiddenSourceKeysRef.current.has(String(tab.key)),\r\n ),\r\n ...dynamicTabs,\r\n ];\r\n\r\n setTabs((currentTabs) =>\r\n isSameTabs(currentTabs, nextTabs) ? currentTabs : nextTabs,\r\n );\r\n }, [parsedTabs]);\r\n\r\n const add = (tab: ITabItem, position?: number) => {\r\n const currentTabs = tabsRef.current;\r\n const tkey = String(tab.key ?? currentTabs.length);\r\n const i = currentTabs.findIndex((t) => t.key === tkey);\r\n\r\n if (i > -1) {\r\n open(currentTabs[i].key ?? `${i}`);\r\n return;\r\n }\r\n\r\n contentsRef.current.set(tkey, tab.content);\r\n const { content, ...rest } = tab;\r\n setTabs((ts) => {\r\n const nextTabs = [...ts];\r\n const index =\r\n position === undefined\r\n ? nextTabs.length\r\n : Math.max(0, Math.min(position, nextTabs.length));\r\n nextTabs.splice(index, 0, { ...rest, key: tkey });\r\n return nextTabs;\r\n });\r\n open(tkey);\r\n };\r\n\r\n const close = (key: string) => {\r\n const currentTabs = tabsRef.current;\r\n const i = currentTabs.findIndex((t) => t.key === key);\r\n\r\n if (i < 0) return;\r\n\r\n if (sourceKeysRef.current.has(key)) {\r\n hiddenSourceKeysRef.current.add(key);\r\n } else {\r\n contentsRef.current.delete(key);\r\n }\r\n const nextTabs = [...currentTabs];\r\n nextTabs.splice(i, 1);\r\n setTabs(nextTabs);\r\n\r\n if (activeKeyRef.current !== key) return;\r\n\r\n const next = nextTabs[i] || nextTabs[i - 1];\r\n const prev = prevActiveKeyRef.current;\r\n const nextKey =\r\n prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;\r\n open(nextKey ?? \"\");\r\n };\r\n\r\n const open = (key: string) => {\r\n const nextKey = key || undefined;\r\n\r\n if (nextKey === undefined) {\r\n onTabChange?.(undefined, activeKey);\r\n setPrevActiveKey(activeKey);\r\n setActiveKey(undefined);\r\n setBarStyle(emptyBarStyle);\r\n return;\r\n }\r\n\r\n if (nextKey === activeKey) {\r\n if (!toggable) return;\r\n\r\n onTabChange?.(undefined, key);\r\n setActiveKey(undefined);\r\n setBarStyle(emptyBarStyle);\r\n return;\r\n }\r\n\r\n setPrevActiveKey(activeKey);\r\n onTabChange?.(nextKey, activeKey);\r\n setActiveKey(nextKey);\r\n };\r\n\r\n const handleKeyAction = (\r\n e: KeyboardEvent<HTMLElement>,\r\n action: () => void,\r\n ) => {\r\n if (![\"Enter\", \" \"].includes(e.key)) return;\r\n e.preventDefault();\r\n action();\r\n };\r\n\r\n const scrollToTab = (key: string) => {\r\n const index = tabsRef.current.findIndex((tab) => tab.key === key);\r\n const nav = navRefs.current[index];\r\n\r\n nav?.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"nearest\",\r\n inline: \"nearest\",\r\n });\r\n };\r\n\r\n const handleMoreTabClick = (key: string) => {\r\n open(key);\r\n scrollToTab(key);\r\n };\r\n\r\n const setNavRef = (index: number, node: HTMLAnchorElement | null) => {\r\n navRefs.current[index] = node;\r\n };\r\n\r\n const getContent = (key: string) => contentsRef.current.get(key);\r\n\r\n useEffect(() => {\r\n if (!size || hideMore || !observe || !unobserve) return;\r\n const { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\r\n const { width, height } = size;\r\n\r\n const nextOverflow = scrollHeight > height || scrollWidth > width;\r\n setOverflow((v) => (v === nextOverflow ? v : nextOverflow));\r\n\r\n if (!nextOverflow) {\r\n setTabs((ts) => {\r\n let changed = false;\r\n const next = ts.map((t) => {\r\n if (\r\n t.intersecting === undefined ||\r\n t.intersecting === true\r\n ) {\r\n return t;\r\n }\r\n changed = true;\r\n return { ...t, intersecting: true };\r\n });\r\n return changed ? next : ts;\r\n });\r\n return;\r\n }\r\n\r\n const observed: HTMLElement[] = [];\r\n\r\n navRefs.current.forEach((nav, i) => {\r\n if (!nav) return;\r\n observed.push(nav);\r\n observe(nav, (_tar: HTMLElement, visible: boolean) => {\r\n setTabs((ts) => {\r\n if (!ts[i]) return ts;\r\n if (ts[i]?.intersecting === visible) return ts;\r\n return ts.map((t, idx) =>\r\n idx === i ? { ...t, intersecting: visible } : t,\r\n );\r\n });\r\n });\r\n });\r\n\r\n return () => {\r\n observed.forEach((el) => unobserve(el));\r\n };\r\n }, [size, hideMore, tabs.length, observe, unobserve]);\r\n\r\n useEffect(() => {\r\n if (!bar || type === \"pane\" || activeKey === undefined) {\r\n return;\r\n }\r\n\r\n const index = tabs.findIndex((tab) => tab.key === activeKey);\r\n\r\n const timer = window.setTimeout(() => {\r\n const nav = navRefs.current[index];\r\n\r\n if (!nav) return;\r\n\r\n if (tabs[index]?.keepDOM && activeKey) {\r\n setCachedTabs((keys) => {\r\n if (keys.includes(activeKey)) return keys;\r\n return [activeKey, ...keys];\r\n });\r\n }\r\n\r\n const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\r\n const isLine = type === \"line\";\r\n\r\n setBarStyle({\r\n height: !vertical && isLine ? \".25em\" : offsetHeight * 0.5,\r\n width: vertical && isLine ? \".25em\" : offsetWidth,\r\n transform: `translate(${offsetLeft}px, ${offsetTop}px)`,\r\n });\r\n }, 16);\r\n\r\n return () => {\r\n window.clearTimeout(timer);\r\n };\r\n }, [activeKey, bar, size, tabs, type, vertical]);\r\n\r\n useEffect(() => {\r\n if (active === undefined || activeKey === active) return;\r\n\r\n setPrevActiveKey(activeKey);\r\n setActiveKey(active);\r\n }, [active]);\r\n\r\n useEffect(() => {\r\n if (!navsRef.current || vertical) return;\r\n\r\n const handleMouseWheel = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if (vertical) return;\r\n\r\n navsRef.current?.scrollBy({\r\n left: e.deltaY + e.deltaX,\r\n });\r\n };\r\n\r\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\r\n passive: false,\r\n });\r\n\r\n return () => {\r\n if (!navsRef.current) return;\r\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\r\n };\r\n }, [vertical]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close,\r\n add,\r\n navs: navsRef,\r\n }));\r\n\r\n const cachedTabKeySet = useMemo(() => new Set(cachedTabs), [cachedTabs]);\r\n const moreTabs = useMemo(\r\n () =>\r\n !hideMore && overflow\r\n ? tabs.filter((tab) => tab.intersecting === false)\r\n : [],\r\n [hideMore, overflow, tabs],\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames(\r\n \"i-tabs\",\r\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\r\n className,\r\n )}\r\n {...rest}\r\n >\r\n <div\r\n className={classNames(\"i-tab-navs-container\", navsClass, {\r\n \"i-tab-navs-vertical\": vertical,\r\n })}\r\n >\r\n {prepend}\r\n\r\n <TabsNavs\r\n tabs={tabs}\r\n moreTabs={moreTabs}\r\n activeKey={activeKey}\r\n vertical={vertical}\r\n overflow={overflow}\r\n hideMore={hideMore}\r\n navsJustify={navsJustify}\r\n bar={bar}\r\n barClass={barClass}\r\n barStyle={barStyle}\r\n navsRef={navsRef}\r\n renderMore={renderMore}\r\n setNavRef={setNavRef}\r\n onOpen={open}\r\n onClose={close}\r\n onMoreTabClick={handleMoreTabClick}\r\n onKeyAction={handleKeyAction}\r\n />\r\n\r\n {append}\r\n </div>\r\n\r\n <TabsContents\r\n tabs={tabs}\r\n activeKey={activeKey}\r\n cachedTabKeySet={cachedTabKeySet}\r\n getContent={getContent}\r\n />\r\n </div>\r\n );\r\n}) as CompositionTabs;\r\n\r\nTabs.Item = TabItem;\r\n\r\nexport default Tabs;\r\n"],"names":["defaultRenderMore","useRef","useState","useIntersectionObserver","useSize","useMemo","getParsedTabs","useEffect","isSameTabs","emptyBarStyle","useImperativeHandle","_jsxs","classNames","_jsx","TabsNavs","TabsContents","TabItem"],"mappings":"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"}
|