@cloudtower/eagle 0.34.16 → 0.34.18
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/dist/cjs/core/Tab/Tab.js +113 -0
- package/dist/cjs/core/Tab/Tab.style.js +17 -0
- package/dist/cjs/core/Tab/Tab.type.js +9 -0
- package/dist/cjs/core/Tab/useTabAdaptiveLayout.js +73 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/stats1.html +1 -1
- package/dist/components.css +3838 -3669
- package/dist/esm/core/Tab/Tab.js +107 -0
- package/dist/esm/core/Tab/Tab.style.js +12 -0
- package/dist/esm/core/Tab/Tab.type.js +7 -0
- package/dist/esm/core/Tab/useTabAdaptiveLayout.js +71 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/stats1.html +1 -1
- package/dist/linaria.merged.scss +4434 -4224
- package/dist/src/core/Tab/Tab.d.ts +3 -0
- package/dist/src/core/Tab/Tab.style.d.ts +5 -0
- package/dist/src/core/Tab/Tab.type.d.ts +42 -0
- package/dist/src/core/Tab/index.d.ts +1 -0
- package/dist/src/core/Tab/useTabAdaptiveLayout.d.ts +23 -0
- package/dist/src/core/index.d.ts +1 -0
- package/dist/stories/docs/core/Tab.stories.d.ts +65 -0
- package/dist/style.css +3835 -3666
- package/dist/variables.scss +3 -0
- package/package.json +4 -4
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var iconsReact = require('@cloudtower/icons-react');
|
|
4
|
+
var core = require('@linaria/core');
|
|
5
|
+
var antd = require('antd');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var index$1 = require('../Icon/index.js');
|
|
8
|
+
var index = require('../Typo/index.js');
|
|
9
|
+
var Tab_style = require('./Tab.style.js');
|
|
10
|
+
var Tab_type = require('./Tab.type.js');
|
|
11
|
+
var useTabAdaptiveLayout = require('./useTabAdaptiveLayout.js');
|
|
12
|
+
|
|
13
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
16
|
+
|
|
17
|
+
const getSelectedStyle = (key, type, selectedKey, activeTabType) => {
|
|
18
|
+
return key === selectedKey && activeTabType === type ? ["__selected", index.Typo.Label.l1_bold_title] : [index.Typo.Label.l1_regular];
|
|
19
|
+
};
|
|
20
|
+
const Tab = props => {
|
|
21
|
+
const {
|
|
22
|
+
className,
|
|
23
|
+
contentClassName,
|
|
24
|
+
tabs,
|
|
25
|
+
onChange,
|
|
26
|
+
selectedKey,
|
|
27
|
+
extraSlot,
|
|
28
|
+
size = "medium"
|
|
29
|
+
} = props;
|
|
30
|
+
const tabsRef = React.useRef(null);
|
|
31
|
+
const extraSlotRef = React.useRef(null);
|
|
32
|
+
const [isClickedMoreTabItem, setIsClickedMoreTabItem] = React.useState(false);
|
|
33
|
+
const allTabs = React.useMemo(() => {
|
|
34
|
+
return tabs.reduce((map, tab) => {
|
|
35
|
+
map.set(tab.key, tab);
|
|
36
|
+
return map;
|
|
37
|
+
}, /* @__PURE__ */new Map([]));
|
|
38
|
+
}, [tabs]);
|
|
39
|
+
const selectedTab = React.useMemo(() => allTabs.get(selectedKey), [allTabs, selectedKey]);
|
|
40
|
+
const moreTabs = useTabAdaptiveLayout.useTabAdaptiveLayout(tabs, tabsRef, extraSlotRef, selectedKey);
|
|
41
|
+
const activeTabType = React.useMemo(() => {
|
|
42
|
+
if (moreTabs == null ? void 0 : moreTabs.find(tab => tab.key === (selectedTab == null ? void 0 : selectedTab.key))) {
|
|
43
|
+
return Tab_type.ActiveTabType.More;
|
|
44
|
+
}
|
|
45
|
+
if ((selectedTab == null ? void 0 : selectedTab.key) && allTabs.get(selectedTab.key)) {
|
|
46
|
+
return Tab_type.ActiveTabType.Common;
|
|
47
|
+
}
|
|
48
|
+
}, [moreTabs, allTabs, selectedTab == null ? void 0 : selectedTab.key]);
|
|
49
|
+
React.useLayoutEffect(() => {
|
|
50
|
+
var _a;
|
|
51
|
+
if (!allTabs.get(selectedKey) && ((_a = tabs == null ? void 0 : tabs[0]) == null ? void 0 : _a.key)) {
|
|
52
|
+
onChange == null ? void 0 : onChange(tabs[0].key);
|
|
53
|
+
}
|
|
54
|
+
}, [allTabs, onChange, selectedKey, tabs]);
|
|
55
|
+
return /* @__PURE__ */React__default.default.createElement(Tab_style.TabMenuWrapper, {
|
|
56
|
+
className: core.cx(className, size)
|
|
57
|
+
}, /* @__PURE__ */React__default.default.createElement("div", {
|
|
58
|
+
className: "tab-bar"
|
|
59
|
+
}, /* @__PURE__ */React__default.default.createElement("div", {
|
|
60
|
+
ref: tabsRef,
|
|
61
|
+
className: "common-tab-bar"
|
|
62
|
+
}, /* tab items */
|
|
63
|
+
tabs.map(tab => /* @__PURE__ */React__default.default.createElement("span", {
|
|
64
|
+
className: core.cx("tab-item-title", "common", ...getSelectedStyle(tab.key, Tab_type.ActiveTabType.Common, selectedKey, activeTabType)),
|
|
65
|
+
key: tab.key,
|
|
66
|
+
onClick: () => onChange == null ? void 0 : onChange(tab.key)
|
|
67
|
+
}, typeof tab.title === "function" ? tab.title({
|
|
68
|
+
isActive: tab.key === selectedKey
|
|
69
|
+
}) : tab.title)), /* more tab items */
|
|
70
|
+
moreTabs.length > 0 && /* @__PURE__ */React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */React__default.default.createElement(antd.Dropdown, {
|
|
71
|
+
trigger: ["click"],
|
|
72
|
+
overlayClassName: Tab_style.MoreThanTooltipStyle,
|
|
73
|
+
onVisibleChange: visible => setIsClickedMoreTabItem(visible),
|
|
74
|
+
getPopupContainer: triggerNode => document.querySelector(".tab-bar") || triggerNode,
|
|
75
|
+
overlay: /* @__PURE__ */React__default.default.createElement(antd.Menu, {
|
|
76
|
+
className: "menu-wrapper",
|
|
77
|
+
onClick: params => {
|
|
78
|
+
setIsClickedMoreTabItem(false);
|
|
79
|
+
onChange == null ? void 0 : onChange(params.key);
|
|
80
|
+
}
|
|
81
|
+
}, moreTabs.map(tab => {
|
|
82
|
+
return /* @__PURE__ */React__default.default.createElement(antd.Menu.Item, {
|
|
83
|
+
className: core.cx("tab-menu-item", ...getSelectedStyle(tab.key, Tab_type.ActiveTabType.More, selectedKey, activeTabType)),
|
|
84
|
+
key: tab.key
|
|
85
|
+
}, typeof tab.title === "function" ? tab.title({
|
|
86
|
+
isActive: tab.key === selectedKey
|
|
87
|
+
}) : tab.title);
|
|
88
|
+
}))
|
|
89
|
+
}, /* @__PURE__ */React__default.default.createElement("span", {
|
|
90
|
+
className: core.cx("tab-item-title", "more", Tab_style.TabTitleElStyle, activeTabType === Tab_type.ActiveTabType.More && "__selected", activeTabType === Tab_type.ActiveTabType.More ? index.Typo.Label.l1_bold_title : index.Typo.Label.l1_regular)
|
|
91
|
+
}, /* @__PURE__ */React__default.default.createElement(index$1, {
|
|
92
|
+
className: Tab_style.IconStyle,
|
|
93
|
+
hoverSrc: iconsReact.MoreMenu16BlueIcon,
|
|
94
|
+
src: iconsReact.MoreMenu16GrayIcon,
|
|
95
|
+
active: isClickedMoreTabItem
|
|
96
|
+
}), activeTabType === Tab_type.ActiveTabType.More && /* @__PURE__ */React__default.default.createElement("span", {
|
|
97
|
+
className: "tab-title-text"
|
|
98
|
+
}, typeof (selectedTab == null ? void 0 : selectedTab.title) === "function" ? selectedTab == null ? void 0 : selectedTab.title({
|
|
99
|
+
isActive: true
|
|
100
|
+
}) : selectedTab == null ? void 0 : selectedTab.title))), extraSlot && /* @__PURE__ */React__default.default.createElement("span", {
|
|
101
|
+
className: "E_ckaaqep"
|
|
102
|
+
}))), extraSlot && /* @__PURE__ */React__default.default.createElement("div", {
|
|
103
|
+
ref: extraSlotRef
|
|
104
|
+
}, extraSlot)), tabs.map(tab => /* @__PURE__ */React__default.default.createElement("div", {
|
|
105
|
+
style: {
|
|
106
|
+
display: tab.key === selectedKey ? "block" : "none"
|
|
107
|
+
},
|
|
108
|
+
key: tab.key,
|
|
109
|
+
className: contentClassName
|
|
110
|
+
}, tab == null ? void 0 : tab.children)));
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
exports.Tab = Tab;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('@linaria/react');
|
|
4
|
+
|
|
5
|
+
const TabMenuWrapper = /*#__PURE__*/react.styled('div')({
|
|
6
|
+
name: "TabMenuWrapper",
|
|
7
|
+
class: "E_t1tbywr9",
|
|
8
|
+
propsAsIs: false
|
|
9
|
+
});
|
|
10
|
+
const TabTitleElStyle = "E_ti12z2";
|
|
11
|
+
const MoreThanTooltipStyle = "E_m19lu3v";
|
|
12
|
+
const IconStyle = "E_i1bmwe2m";
|
|
13
|
+
|
|
14
|
+
exports.IconStyle = IconStyle;
|
|
15
|
+
exports.MoreThanTooltipStyle = MoreThanTooltipStyle;
|
|
16
|
+
exports.TabMenuWrapper = TabMenuWrapper;
|
|
17
|
+
exports.TabTitleElStyle = TabTitleElStyle;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ActiveTabType = /* @__PURE__ */ ((ActiveTabType2) => {
|
|
4
|
+
ActiveTabType2[ActiveTabType2["Common"] = 0] = "Common";
|
|
5
|
+
ActiveTabType2[ActiveTabType2["More"] = 1] = "More";
|
|
6
|
+
return ActiveTabType2;
|
|
7
|
+
})(ActiveTabType || {});
|
|
8
|
+
|
|
9
|
+
exports.ActiveTabType = ActiveTabType;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
|
|
6
|
+
const getPlacementWidth = (el) => {
|
|
7
|
+
if (!el) {
|
|
8
|
+
return 0;
|
|
9
|
+
}
|
|
10
|
+
const computedStyle = window.getComputedStyle(el);
|
|
11
|
+
const width = el.offsetWidth;
|
|
12
|
+
const marginLeft = parseInt(computedStyle.marginLeft || "0");
|
|
13
|
+
const marginRight = parseInt(computedStyle.marginRight || "0");
|
|
14
|
+
return width + marginLeft + marginRight;
|
|
15
|
+
};
|
|
16
|
+
const useTabAdaptiveLayout = (tabs, tabsRef, extraSlotRef, selectedKey) => {
|
|
17
|
+
const [moreTabs, setMoreTabs] = React.useState([]);
|
|
18
|
+
const doAdapt = React.useCallback(() => {
|
|
19
|
+
if (!tabsRef.current)
|
|
20
|
+
return;
|
|
21
|
+
const tabBarEl = tabsRef.current;
|
|
22
|
+
const tabNodeList = tabBarEl.querySelectorAll(".tab-item-title.common");
|
|
23
|
+
const moreTabNode = tabBarEl.querySelector(
|
|
24
|
+
".tab-item-title.more"
|
|
25
|
+
);
|
|
26
|
+
const moreTabPlacementWidth = getPlacementWidth(moreTabNode);
|
|
27
|
+
tabNodeList.forEach((tab) => tab.classList.remove("__hidden"));
|
|
28
|
+
const maxContentWidth = getPlacementWidth(tabBarEl.parentElement) - getPlacementWidth(extraSlotRef.current) - moreTabPlacementWidth;
|
|
29
|
+
let tabsTotalWidth = 24;
|
|
30
|
+
const hiddenItems = [];
|
|
31
|
+
let endIndex = Infinity;
|
|
32
|
+
for (let i = 0; i < tabNodeList.length; i++) {
|
|
33
|
+
const tab = tabNodeList[i];
|
|
34
|
+
const tabWidth = getPlacementWidth(tab);
|
|
35
|
+
if (maxContentWidth >= tabsTotalWidth + tabWidth) {
|
|
36
|
+
tabsTotalWidth += tabWidth;
|
|
37
|
+
} else {
|
|
38
|
+
endIndex = i;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
while (endIndex <= tabNodeList.length - 1) {
|
|
43
|
+
tabNodeList[endIndex].classList.add("__hidden");
|
|
44
|
+
hiddenItems.push(tabs[endIndex]);
|
|
45
|
+
endIndex++;
|
|
46
|
+
}
|
|
47
|
+
setMoreTabs((prevMoreTabs) => {
|
|
48
|
+
if (!_.isEqual(hiddenItems, prevMoreTabs)) {
|
|
49
|
+
return hiddenItems;
|
|
50
|
+
}
|
|
51
|
+
return prevMoreTabs;
|
|
52
|
+
});
|
|
53
|
+
}, [tabs, tabsRef, extraSlotRef]);
|
|
54
|
+
React.useEffect(() => {
|
|
55
|
+
doAdapt();
|
|
56
|
+
}, [doAdapt, selectedKey]);
|
|
57
|
+
React.useEffect(() => {
|
|
58
|
+
var _a;
|
|
59
|
+
const parentElement = (_a = tabsRef.current) == null ? void 0 : _a.parentElement;
|
|
60
|
+
if (!parentElement)
|
|
61
|
+
return;
|
|
62
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
63
|
+
doAdapt();
|
|
64
|
+
});
|
|
65
|
+
resizeObserver.observe(parentElement);
|
|
66
|
+
return () => {
|
|
67
|
+
resizeObserver.disconnect();
|
|
68
|
+
};
|
|
69
|
+
}, [doAdapt, tabsRef]);
|
|
70
|
+
return moreTabs;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
exports.useTabAdaptiveLayout = useTabAdaptiveLayout;
|
package/dist/cjs/index.js
CHANGED
|
@@ -119,6 +119,7 @@ var SmallDialog = require('./core/SmallDialog/SmallDialog.js');
|
|
|
119
119
|
var SmallDialog_style = require('./core/SmallDialog/SmallDialog.style.js');
|
|
120
120
|
var index$1j = require('./core/StepProgress/index.js');
|
|
121
121
|
var index$1k = require('./core/Styled/index.js');
|
|
122
|
+
var Tab = require('./core/Tab/Tab.js');
|
|
122
123
|
var common = require('./core/Table/common.js');
|
|
123
124
|
var TableSkeleton = require('./core/Table/TableSkeleton.js');
|
|
124
125
|
var TableWidget = require('./core/Table/TableWidget.js');
|
|
@@ -563,6 +564,7 @@ exports.UnitStyle = index$1k.UnitStyle;
|
|
|
563
564
|
exports.WarningAlert = index$1k.WarningAlert;
|
|
564
565
|
exports.WizardBody = index$1k.WizardBody;
|
|
565
566
|
exports.radioStyle = index$1k.radioStyle;
|
|
567
|
+
exports.Tab = Tab.Tab;
|
|
566
568
|
exports.useTableBodyHasScrollBar = common.useTableBodyHasScrollBar;
|
|
567
569
|
exports.TableSkeleton = TableSkeleton.TableSkeleton;
|
|
568
570
|
exports.ColumnTitle = TableWidget.ColumnTitle;
|