@ioca/react 1.5.3 → 1.5.5
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/editor/controls.js +31 -40
- package/lib/cjs/components/editor/controls.js.map +1 -1
- package/lib/cjs/components/editor/editor.js +204 -41
- package/lib/cjs/components/editor/editor.js.map +1 -1
- package/lib/cjs/components/editor/memtion.js +171 -0
- package/lib/cjs/components/editor/memtion.js.map +1 -0
- package/lib/cjs/components/image/image.js +46 -30
- package/lib/cjs/components/image/image.js.map +1 -1
- package/lib/cjs/components/input/textarea.js +12 -5
- package/lib/cjs/components/input/textarea.js.map +1 -1
- package/lib/cjs/components/modal/hookModal.js +1 -1
- package/lib/cjs/components/modal/hookModal.js.map +1 -1
- package/lib/cjs/components/picker/colors/footer.js +1 -1
- package/lib/cjs/components/picker/colors/footer.js.map +1 -1
- package/lib/cjs/components/popconfirm/popconfirm.js +3 -3
- package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
- package/lib/cjs/components/tabs/tabs.js +95 -37
- package/lib/cjs/components/tabs/tabs.js.map +1 -1
- package/lib/cjs/js/hooks.js +60 -40
- package/lib/cjs/js/hooks.js.map +1 -1
- package/lib/css/colors.css +13 -8
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/css/input.css +12 -6
- package/lib/css/reset.css +2 -5
- package/lib/css/utilities.css +9 -10
- package/lib/es/components/editor/controls.js +32 -37
- package/lib/es/components/editor/controls.js.map +1 -1
- package/lib/es/components/editor/editor.js +205 -42
- package/lib/es/components/editor/editor.js.map +1 -1
- package/lib/es/components/editor/memtion.js +160 -0
- package/lib/es/components/editor/memtion.js.map +1 -0
- package/lib/es/components/image/image.js +47 -31
- package/lib/es/components/image/image.js.map +1 -1
- package/lib/es/components/image/index.js +2 -2
- package/lib/es/components/image/list.js +2 -2
- package/lib/es/components/image/list.js.map +1 -1
- package/lib/es/components/input/textarea.js +12 -5
- package/lib/es/components/input/textarea.js.map +1 -1
- package/lib/es/components/modal/hookModal.js +1 -1
- package/lib/es/components/modal/hookModal.js.map +1 -1
- package/lib/es/components/picker/colors/footer.js +1 -1
- package/lib/es/components/picker/colors/footer.js.map +1 -1
- package/lib/es/components/popconfirm/popconfirm.js +3 -3
- package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
- package/lib/es/components/tabs/tabs.js +95 -37
- package/lib/es/components/tabs/tabs.js.map +1 -1
- package/lib/es/components/upload/renderFile.js +2 -2
- package/lib/es/components/upload/renderFile.js.map +1 -1
- package/lib/es/js/hooks.js +61 -41
- package/lib/es/js/hooks.js.map +1 -1
- package/lib/index.js +608 -195
- package/lib/types/components/editor/type.d.ts +25 -12
- package/lib/types/components/image/image.d.ts +2 -2
- package/lib/types/components/image/index.d.ts +2 -2
- package/lib/types/components/input/type.d.ts +1 -0
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ import Helpericon from '../utils/helpericon/helpericon.js';
|
|
|
10
10
|
import Item from './item.js';
|
|
11
11
|
|
|
12
12
|
const Tabs = ((props) => {
|
|
13
|
-
const { ref, active, tabs: items, type = "default", prepend, append, children, className, vertical, toggable, navsJustify = "start", bar = true, hideMore, barClass, renderMore = () => (jsx(Button, { flat: true, square: true, size:
|
|
13
|
+
const { ref, active, tabs: items, type = "default", prepend, append, children, className, vertical, toggable, navsJustify = "start", bar = true, hideMore, barClass, renderMore = () => (jsx(Button, { flat: true, square: true, size: "small", children: jsx(Icon, { icon: jsx(MoreHorizRound, {}) }) })), onTabChange, ...rest } = props;
|
|
14
14
|
const navRefs = useRef([]);
|
|
15
15
|
const barRef = useRef(null);
|
|
16
16
|
const navsRef = useRef(null);
|
|
@@ -20,10 +20,15 @@ const Tabs = ((props) => {
|
|
|
20
20
|
const [barStyle, setBarStyle] = useState({});
|
|
21
21
|
const [cachedTabs, setCachedTabs] = useState([]);
|
|
22
22
|
const [overflow, setOverflow] = useState(false);
|
|
23
|
-
const [moreTabs, setMoreTabs] = useState([]);
|
|
24
23
|
const [tabs, setTabs] = useState([]);
|
|
25
24
|
const { observe, unobserve } = useIntersectionObserver();
|
|
26
25
|
const size = useSize(navsRef);
|
|
26
|
+
const tabsRef = useRef(tabs);
|
|
27
|
+
tabsRef.current = tabs;
|
|
28
|
+
const activeKeyRef = useRef(activeKey);
|
|
29
|
+
activeKeyRef.current = activeKey;
|
|
30
|
+
const prevActiveKeyRef = useRef(prevActiveKey);
|
|
31
|
+
prevActiveKeyRef.current = prevActiveKey;
|
|
27
32
|
useEffect(() => {
|
|
28
33
|
contentsRef.current.clear();
|
|
29
34
|
if (!items) {
|
|
@@ -60,10 +65,11 @@ const Tabs = ((props) => {
|
|
|
60
65
|
}));
|
|
61
66
|
}, [children, items]);
|
|
62
67
|
const add = (tab) => {
|
|
63
|
-
const
|
|
64
|
-
const
|
|
68
|
+
const currentTabs = tabsRef.current;
|
|
69
|
+
const tkey = String(tab.key ?? currentTabs.length);
|
|
70
|
+
const i = currentTabs.findIndex((t) => t.key === tkey);
|
|
65
71
|
if (i > -1) {
|
|
66
|
-
open(
|
|
72
|
+
open(currentTabs[i].key ?? `${i}`);
|
|
67
73
|
return;
|
|
68
74
|
}
|
|
69
75
|
contentsRef.current.set(tkey, tab.content);
|
|
@@ -72,20 +78,34 @@ const Tabs = ((props) => {
|
|
|
72
78
|
open(tkey);
|
|
73
79
|
};
|
|
74
80
|
const close = (key) => {
|
|
75
|
-
const
|
|
81
|
+
const currentTabs = tabsRef.current;
|
|
82
|
+
const i = currentTabs.findIndex((t) => t.key === key);
|
|
76
83
|
if (i < 0)
|
|
77
84
|
return;
|
|
78
85
|
contentsRef.current.delete(key);
|
|
79
|
-
const nextTabs = [...
|
|
86
|
+
const nextTabs = [...currentTabs];
|
|
80
87
|
nextTabs.splice(i, 1);
|
|
81
88
|
setTabs(nextTabs);
|
|
82
|
-
if (
|
|
89
|
+
if (activeKeyRef.current !== key)
|
|
83
90
|
return;
|
|
84
91
|
const next = nextTabs[i] || nextTabs[i - 1];
|
|
85
|
-
|
|
92
|
+
const prev = prevActiveKeyRef.current;
|
|
93
|
+
const nextKey = prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;
|
|
94
|
+
open(nextKey ?? "");
|
|
86
95
|
};
|
|
87
96
|
const open = (key) => {
|
|
88
|
-
|
|
97
|
+
const nextKey = key || undefined;
|
|
98
|
+
if (nextKey === undefined) {
|
|
99
|
+
onTabChange?.(undefined, activeKey);
|
|
100
|
+
setPrevActiveKey(activeKey);
|
|
101
|
+
setActiveKey(undefined);
|
|
102
|
+
setBarStyle({
|
|
103
|
+
height: 0,
|
|
104
|
+
width: 0,
|
|
105
|
+
});
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (nextKey === activeKey) {
|
|
89
109
|
if (!toggable)
|
|
90
110
|
return;
|
|
91
111
|
onTabChange?.(undefined, key);
|
|
@@ -97,38 +117,75 @@ const Tabs = ((props) => {
|
|
|
97
117
|
return;
|
|
98
118
|
}
|
|
99
119
|
setPrevActiveKey(activeKey);
|
|
100
|
-
onTabChange?.(
|
|
101
|
-
setActiveKey(
|
|
120
|
+
onTabChange?.(nextKey, activeKey);
|
|
121
|
+
setActiveKey(nextKey);
|
|
122
|
+
};
|
|
123
|
+
const handleKeyAction = (e, action) => {
|
|
124
|
+
if (!["Enter", " "].includes(e.key))
|
|
125
|
+
return;
|
|
126
|
+
e.preventDefault();
|
|
127
|
+
action();
|
|
128
|
+
};
|
|
129
|
+
const scrollToTab = (key) => {
|
|
130
|
+
const index = tabsRef.current.findIndex((tab) => tab.key === key);
|
|
131
|
+
const nav = navRefs.current[index];
|
|
132
|
+
nav?.scrollIntoView({
|
|
133
|
+
behavior: "smooth",
|
|
134
|
+
block: "nearest",
|
|
135
|
+
inline: "nearest",
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
const handleMoreTabClick = (key) => {
|
|
139
|
+
open(key);
|
|
140
|
+
scrollToTab(key);
|
|
102
141
|
};
|
|
103
142
|
useEffect(() => {
|
|
104
|
-
if (!size || hideMore || !observe)
|
|
143
|
+
if (!size || hideMore || !observe || !unobserve)
|
|
105
144
|
return;
|
|
106
145
|
const { scrollHeight, scrollWidth } = navsRef.current;
|
|
107
146
|
const { width, height } = size;
|
|
108
147
|
const nextOverflow = scrollHeight > height || scrollWidth > width;
|
|
109
|
-
setOverflow(nextOverflow);
|
|
110
|
-
if (!nextOverflow)
|
|
148
|
+
setOverflow((v) => (v === nextOverflow ? v : nextOverflow));
|
|
149
|
+
if (!nextOverflow) {
|
|
150
|
+
setTabs((ts) => {
|
|
151
|
+
let changed = false;
|
|
152
|
+
const next = ts.map((t) => {
|
|
153
|
+
if (t.intersecting === undefined ||
|
|
154
|
+
t.intersecting === true) {
|
|
155
|
+
return t;
|
|
156
|
+
}
|
|
157
|
+
changed = true;
|
|
158
|
+
return { ...t, intersecting: true };
|
|
159
|
+
});
|
|
160
|
+
return changed ? next : ts;
|
|
161
|
+
});
|
|
111
162
|
return;
|
|
163
|
+
}
|
|
164
|
+
const observed = [];
|
|
112
165
|
navRefs.current.map((nav, i) => {
|
|
113
166
|
if (!nav)
|
|
114
167
|
return;
|
|
115
|
-
|
|
168
|
+
observed.push(nav);
|
|
169
|
+
observe(nav, (_tar, visible) => {
|
|
116
170
|
setTabs((ts) => {
|
|
117
171
|
if (!ts[i])
|
|
118
172
|
return ts;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return
|
|
173
|
+
if (ts[i]?.intersecting === visible)
|
|
174
|
+
return ts;
|
|
175
|
+
return ts.map((t, idx) => idx === i ? { ...t, intersecting: visible } : t);
|
|
122
176
|
});
|
|
123
177
|
});
|
|
124
178
|
});
|
|
125
|
-
|
|
179
|
+
return () => {
|
|
180
|
+
observed.map((el) => unobserve(el));
|
|
181
|
+
};
|
|
182
|
+
}, [size, hideMore, tabs.length, observe, unobserve]);
|
|
126
183
|
useEffect(() => {
|
|
127
184
|
if (!bar || type === "pane" || activeKey === undefined) {
|
|
128
185
|
return;
|
|
129
186
|
}
|
|
130
187
|
const index = tabs.findIndex((tab) => tab.key === activeKey);
|
|
131
|
-
setTimeout(() => {
|
|
188
|
+
const timer = window.setTimeout(() => {
|
|
132
189
|
const nav = navRefs.current[index];
|
|
133
190
|
if (!nav)
|
|
134
191
|
return;
|
|
@@ -147,19 +204,15 @@ const Tabs = ((props) => {
|
|
|
147
204
|
transform: `translate(${offsetLeft}px, ${offsetTop}px)`,
|
|
148
205
|
});
|
|
149
206
|
}, 16);
|
|
207
|
+
return () => {
|
|
208
|
+
window.clearTimeout(timer);
|
|
209
|
+
};
|
|
150
210
|
}, [activeKey, bar, size, tabs, type, vertical]);
|
|
151
211
|
useEffect(() => {
|
|
152
212
|
if (active === undefined || activeKey === active)
|
|
153
213
|
return;
|
|
154
214
|
open(active);
|
|
155
215
|
}, [active]);
|
|
156
|
-
useEffect(() => {
|
|
157
|
-
if (hideMore || !unobserve)
|
|
158
|
-
return;
|
|
159
|
-
return () => {
|
|
160
|
-
navRefs.current?.map(unobserve);
|
|
161
|
-
};
|
|
162
|
-
}, [tabs.length, hideMore, unobserve]);
|
|
163
216
|
useEffect(() => {
|
|
164
217
|
if (!navsRef.current || vertical)
|
|
165
218
|
return;
|
|
@@ -180,30 +233,35 @@ const Tabs = ((props) => {
|
|
|
180
233
|
return;
|
|
181
234
|
navsRef.current.removeEventListener("wheel", handleMouseWheel);
|
|
182
235
|
};
|
|
183
|
-
}, [
|
|
236
|
+
}, [vertical]);
|
|
184
237
|
useImperativeHandle(ref, () => ({
|
|
185
238
|
open,
|
|
186
239
|
close,
|
|
187
240
|
add,
|
|
188
241
|
navs: navsRef,
|
|
189
242
|
}));
|
|
243
|
+
const moreTabs = !hideMore && overflow
|
|
244
|
+
? tabs.filter((tab) => tab.intersecting === false)
|
|
245
|
+
: [];
|
|
190
246
|
return (jsxs("div", { className: classNames("i-tabs", { flex: vertical, [`i-tabs-${type}`]: type !== "default" }, className), ...rest, children: [jsxs("div", { className: classNames("i-tab-navs-container", {
|
|
191
247
|
"i-tab-navs-vertical": vertical,
|
|
192
|
-
}), children: [prepend, jsxs("div", { ref: navsRef, className: classNames("i-tab-navs", `justify-${navsJustify}`), children: [tabs.map((tab, i) => {
|
|
248
|
+
}), children: [prepend, jsxs("div", { ref: navsRef, className: classNames("i-tab-navs", `justify-${navsJustify}`), role: "tablist", "aria-orientation": vertical ? "vertical" : "horizontal", children: [tabs.map((tab, i) => {
|
|
193
249
|
const { title, key = `${i}`, closable } = tab;
|
|
250
|
+
const isActive = activeKey === key;
|
|
194
251
|
return (jsxs("a", { ref: (ref) => (navRefs.current[i] = ref), className: classNames("i-tab-nav", {
|
|
195
|
-
"i-tab-active":
|
|
196
|
-
}), onClick: () => open(key), children: [title, closable && (jsx(Helpericon, { as:
|
|
252
|
+
"i-tab-active": isActive,
|
|
253
|
+
}), role: "tab", tabIndex: isActive ? 0 : -1, "aria-selected": isActive, onClick: () => open(key), onKeyDown: (e) => handleKeyAction(e, () => open(key)), children: [title, closable && (jsx(Helpericon, { as: "i", active: true, className: "i-tab-nav-close", role: "button", tabIndex: 0, "aria-label": "\u5173\u95ED\u6807\u7B7E\u9875", onClick: (e) => {
|
|
254
|
+
e.preventDefault();
|
|
197
255
|
e.stopPropagation();
|
|
198
256
|
close(key);
|
|
199
|
-
} }))] }, key));
|
|
200
|
-
}), bar && (jsx("span", { ref: barRef, className: classNames("i-tab-navs-bar", barClass), style: barStyle }))] }), !hideMore && overflow && moreTabs.length > 0 && (jsx(Popup, { arrow: false, position: vertical ? "right" : "bottom", align:
|
|
257
|
+
}, onKeyDown: (e) => handleKeyAction(e, () => close(key)) }))] }, key));
|
|
258
|
+
}), bar && (jsx("span", { ref: barRef, className: classNames("i-tab-navs-bar", barClass), style: barStyle }))] }), !hideMore && overflow && moreTabs.length > 0 && (jsx(Popup, { arrow: false, position: vertical ? "right" : "bottom", align: "end", touchable: true, hideDelay: 500, content: jsx("div", { className: "i-tabs-morelist pd-4", children: moreTabs.map((tab, i) => {
|
|
201
259
|
const { key = `${i}`, title } = tab;
|
|
202
260
|
const isActive = activeKey === key;
|
|
203
261
|
return (jsx("a", { className: classNames("i-tab-nav", {
|
|
204
262
|
"i-tab-active": isActive,
|
|
205
|
-
}), onClick: () =>
|
|
206
|
-
}) }), children: renderMore(moreTabs) })), append] }), jsx("div", { className:
|
|
263
|
+
}), role: "button", tabIndex: 0, onClick: () => handleMoreTabClick(key), onKeyDown: (e) => handleKeyAction(e, () => handleMoreTabClick(key)), children: title }, key));
|
|
264
|
+
}) }), children: renderMore(moreTabs) })), append] }), jsx("div", { className: "i-tab-contents", children: tabs.map((tab, i) => {
|
|
207
265
|
const key = tab.key ?? `${i}`;
|
|
208
266
|
const content = contentsRef.current.get(key);
|
|
209
267
|
const isActive = activeKey === key;
|
|
@@ -211,7 +269,7 @@ const Tabs = ((props) => {
|
|
|
211
269
|
(key !== undefined && cachedTabs.includes(key));
|
|
212
270
|
return (show && (jsx("div", { className: classNames("i-tab-content", {
|
|
213
271
|
"i-tab-active": isActive,
|
|
214
|
-
}), children: content }, key)));
|
|
272
|
+
}), role: "tabpanel", "aria-hidden": !isActive, children: content }, key)));
|
|
215
273
|
}) })] }));
|
|
216
274
|
});
|
|
217
275
|
Tabs.Item = Item;
|
|
@@ -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\tCSSProperties,\r\n\tChildren,\r\n\tReactNode,\r\n\tuseEffect,\r\n\tuseImperativeHandle,\r\n\tuseRef,\r\n\tuseState,\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\tconst {\r\n\t\tref,\r\n\t\tactive,\r\n\t\ttabs: items,\r\n\t\ttype = \"default\",\r\n\t\tprepend,\r\n\t\tappend,\r\n\t\tchildren,\r\n\t\tclassName,\r\n\t\tvertical,\r\n\t\ttoggable,\r\n\t\tnavsJustify = \"start\",\r\n\t\tbar = true,\r\n\t\thideMore,\r\n\t\tbarClass,\r\n\t\trenderMore = () => (\r\n\t\t\t<Button flat square size='small'>\r\n\t\t\t\t<Icon icon={<MoreHorizRound />} />\r\n\t\t\t</Button>\r\n\t\t),\r\n\t\tonTabChange,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\tconst navRefs = useRef<HTMLElement[]>([]);\r\n\tconst barRef = useRef<HTMLSpanElement>(null);\r\n\tconst navsRef = useRef<HTMLDivElement>(null);\r\n\tconst contentsRef = useRef<Map<string, ReactNode>>(new Map());\r\n\tconst [activeKey, setActiveKey] = useState<string | undefined>(active);\r\n\tconst [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\r\n\t\tundefined,\r\n\t);\r\n\tconst [barStyle, setBarStyle] = useState<CSSProperties>({});\r\n\tconst [cachedTabs, setCachedTabs] = useState<string[]>([]);\r\n\tconst [overflow, setOverflow] = useState(false);\r\n\tconst [moreTabs, setMoreTabs] = useState<ITabItem[]>([]);\r\n\tconst [tabs, setTabs] = useState<ITabItem[]>([]);\r\n\tconst { observe, unobserve } = useIntersectionObserver();\r\n\tconst size = useSize(navsRef);\r\n\r\n\tuseEffect(() => {\r\n\t\tcontentsRef.current.clear();\r\n\r\n\t\tif (!items) {\r\n\t\t\tif (!children) {\r\n\t\t\t\tsetTabs([]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tsetTabs(\r\n\t\t\t\t(Children.map(children, (node, i) => {\r\n\t\t\t\t\tconst { key, props: nodeProps } = node as {\r\n\t\t\t\t\t\tkey?: string;\r\n\t\t\t\t\t\tprops?: any;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tconst {\r\n\t\t\t\t\t\ttitle,\r\n\t\t\t\t\t\tchildren: tabChildren,\r\n\t\t\t\t\t\tcontent,\r\n\t\t\t\t\t\tkeepDOM,\r\n\t\t\t\t\t\tclosable,\r\n\t\t\t\t\t} = nodeProps;\r\n\t\t\t\t\tconst tabKey = String(key ?? i);\r\n\t\t\t\t\tcontentsRef.current.set(tabKey, tabChildren ?? content);\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tkey: tabKey,\r\n\t\t\t\t\t\ttitle,\r\n\t\t\t\t\t\tkeepDOM,\r\n\t\t\t\t\t\tclosable,\r\n\t\t\t\t\t};\r\n\t\t\t\t}) as ITabItem[]) ?? [],\r\n\t\t\t);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTabs(\r\n\t\t\titems.map((item, i) => {\r\n\t\t\t\tif ([\"string\", \"number\"].includes(typeof item)) {\r\n\t\t\t\t\tconst key = String(item);\r\n\t\t\t\t\treturn { key, title: item };\r\n\t\t\t\t}\r\n\t\t\t\tconst key = String(item.key ?? i);\r\n\t\t\t\tcontentsRef.current.set(key, item.content);\r\n\t\t\t\tconst { content, ...rest } = item;\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...rest,\r\n\t\t\t\t\tkey,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t);\r\n\t}, [children, items]);\r\n\r\n\tconst add = (tab: ITabItem) => {\r\n\t\tconst tkey = String(tab.key ?? tabs.length);\r\n\t\tconst i = tabs.findIndex((t) => t.key === tkey);\r\n\r\n\t\tif (i > -1) {\r\n\t\t\topen(tabs[i].key ?? `${i}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcontentsRef.current.set(tkey, tab.content);\r\n\t\tconst { content, ...rest } = tab;\r\n\t\tsetTabs((ts) => [...ts, { ...rest, key: tkey }]);\r\n\t\topen(tkey);\r\n\t};\r\n\r\n\tconst close = (key: string) => {\r\n\t\tconst i = tabs.findIndex((t) => t.key === key);\r\n\r\n\t\tif (i < 0) return;\r\n\r\n\t\tcontentsRef.current.delete(key);\r\n\t\tconst nextTabs = [...tabs];\r\n\t\tnextTabs.splice(i, 1);\r\n\t\tsetTabs(nextTabs);\r\n\r\n\t\tif (activeKey !== key) return;\r\n\r\n\t\tconst next = nextTabs[i] || nextTabs[i - 1];\r\n\t\topen(prevActiveKey ?? next?.key ?? \"\");\r\n\t};\r\n\r\n\tconst open = (key: string) => {\r\n\t\tif (key === activeKey) {\r\n\t\t\tif (!toggable) return;\r\n\r\n\t\t\tonTabChange?.(undefined, key);\r\n\t\t\tsetActiveKey(undefined);\r\n\r\n\t\t\tsetBarStyle({\r\n\t\t\t\theight: 0,\r\n\t\t\t\twidth: 0,\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetPrevActiveKey(activeKey);\r\n\t\tonTabChange?.(key, activeKey);\r\n\t\tsetActiveKey(key);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!size || hideMore || !observe) return;\r\n\t\tconst { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\r\n\t\tconst { width, height } = size;\r\n\r\n\t\tconst nextOverflow = scrollHeight > height || scrollWidth > width;\r\n\t\tsetOverflow(nextOverflow);\r\n\r\n\t\tif (!nextOverflow) return;\r\n\r\n\t\tnavRefs.current.map((nav, i) => {\r\n\t\t\tif (!nav) return;\r\n\t\t\tobserve(nav, (tar: HTMLElement, visible: boolean) => {\r\n\t\t\t\tsetTabs((ts) => {\r\n\t\t\t\t\tif (!ts[i]) return ts;\r\n\t\t\t\t\tconst nextTabs = ts.map((t, idx) =>\r\n\t\t\t\t\t\tidx === i ? { ...t, intersecting: visible } : t,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsetMoreTabs(nextTabs.filter((tab) => !tab.intersecting));\r\n\t\t\t\t\treturn nextTabs;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}, [size, hideMore, tabs.length, observe]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!bar || type === \"pane\" || activeKey === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst index = tabs.findIndex((tab) => tab.key === activeKey);\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tconst nav = navRefs.current[index];\r\n\r\n\t\t\tif (!nav) return;\r\n\r\n\t\t\tif (tabs[index]?.keepDOM && activeKey) {\r\n\t\t\t\tsetCachedTabs((keys) => {\r\n\t\t\t\t\tif (keys.includes(activeKey)) return keys;\r\n\t\t\t\t\treturn [activeKey, ...keys];\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\r\n\t\t\tconst isLine = type === \"line\";\r\n\r\n\t\t\tsetBarStyle({\r\n\t\t\t\theight: !vertical && isLine ? \".25em\" : offsetHeight,\r\n\t\t\t\twidth: vertical && isLine ? \".25em\" : offsetWidth,\r\n\t\t\t\ttransform: `translate(${offsetLeft}px, ${offsetTop}px)`,\r\n\t\t\t});\r\n\t\t}, 16);\r\n\t}, [activeKey, bar, size, tabs, type, vertical]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (active === undefined || activeKey === active) return;\r\n\r\n\t\topen(active);\r\n\t}, [active]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (hideMore || !unobserve) return;\r\n\r\n\t\treturn () => {\r\n\t\t\tnavRefs.current?.map(unobserve);\r\n\t\t};\r\n\t}, [tabs.length, hideMore, unobserve]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!navsRef.current || vertical) return;\r\n\r\n\t\tconst handleMouseWheel = (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tif (vertical) return;\r\n\r\n\t\t\tnavsRef.current?.scrollBy({\r\n\t\t\t\tleft: e.deltaY + e.deltaX,\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tnavsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\r\n\t\t\tpassive: false,\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tif (!navsRef.current) return;\r\n\t\t\tnavsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\r\n\t\t};\r\n\t}, [navsRef.current]);\r\n\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\topen,\r\n\t\tclose,\r\n\t\tadd,\r\n\t\tnavs: navsRef,\r\n\t}));\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName={classNames(\r\n\t\t\t\t\"i-tabs\",\r\n\t\t\t\t{ flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\r\n\t\t\t\tclassName,\r\n\t\t\t)}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tclassName={classNames(\"i-tab-navs-container\", {\r\n\t\t\t\t\t\"i-tab-navs-vertical\": vertical,\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t{prepend}\r\n\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={navsRef}\r\n\t\t\t\t\tclassName={classNames(\r\n\t\t\t\t\t\t\"i-tab-navs\",\r\n\t\t\t\t\t\t`justify-${navsJustify}`,\r\n\t\t\t\t\t)}\r\n\t\t\t\t>\r\n\t\t\t\t\t{tabs.map((tab, i) => {\r\n\t\t\t\t\t\tconst { title, key = `${i}`, closable } = tab;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\tkey={key}\r\n\t\t\t\t\t\t\t\tref={(ref) => (navRefs.current[i] = ref as any)}\r\n\t\t\t\t\t\t\t\tclassName={classNames(\"i-tab-nav\", {\r\n\t\t\t\t\t\t\t\t\t\"i-tab-active\": activeKey === key,\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\tonClick={() => open(key)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{title}\r\n\r\n\t\t\t\t\t\t\t\t{closable && (\r\n\t\t\t\t\t\t\t\t\t<Helpericon\r\n\t\t\t\t\t\t\t\t\t\tas='i'\r\n\t\t\t\t\t\t\t\t\t\tactive\r\n\t\t\t\t\t\t\t\t\t\tclassName='i-tab-nav-close'\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\tclose(key);\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\r\n\t\t\t\t\t{bar && (\r\n\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tref={barRef}\r\n\t\t\t\t\t\t\tclassName={classNames(\"i-tab-navs-bar\", barClass)}\r\n\t\t\t\t\t\t\tstyle={barStyle}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{!hideMore && overflow && moreTabs.length > 0 && (\r\n\t\t\t\t\t<Popup\r\n\t\t\t\t\t\tarrow={false}\r\n\t\t\t\t\t\tposition={vertical ? \"right\" : \"bottom\"}\r\n\t\t\t\t\t\talign='end'\r\n\t\t\t\t\t\ttouchable\r\n\t\t\t\t\t\thideDelay={500}\r\n\t\t\t\t\t\tcontent={\r\n\t\t\t\t\t\t\t<div className='i-tabs-morelist pd-4'>\r\n\t\t\t\t\t\t\t\t{moreTabs.map((tab, i) => {\r\n\t\t\t\t\t\t\t\t\tconst { key = `${i}`, title } = tab;\r\n\t\t\t\t\t\t\t\t\tconst isActive = activeKey === key;\r\n\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\tkey={key}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName={classNames(\"i-tab-nav\", {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"i-tab-active\": isActive,\r\n\t\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => open(key)}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{renderMore(moreTabs)}\r\n\t\t\t\t\t</Popup>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{append}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div className='i-tab-contents'>\r\n\t\t\t\t{tabs.map((tab, i) => {\r\n\t\t\t\t\tconst key = tab.key ?? `${i}`;\r\n\t\t\t\t\tconst content = contentsRef.current.get(key);\r\n\t\t\t\t\tconst isActive = activeKey === key;\r\n\t\t\t\t\tconst show =\r\n\t\t\t\t\t\tisActive ||\r\n\t\t\t\t\t\t(key !== undefined && cachedTabs.includes(key));\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\tshow && (\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tkey={key}\r\n\t\t\t\t\t\t\t\tclassName={classNames(\"i-tab-content\", {\r\n\t\t\t\t\t\t\t\t\t\"i-tab-active\": isActive,\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{content}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}) as CompositionTabs;\r\n\r\nTabs.Item = TabItem;\r\n\r\nexport default Tabs;\r\n"],"names":["_jsx","_jsxs","TabItem"],"mappings":"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"}
|
|
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\" : offsetHeight,\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","_jsxs","TabItem"],"mappings":";;;;;;;;;;;AAqBA,MAAM,IAAI,IAAI,CAAC,KAAY,KAAI;AAC3B,IAAA,MAAM,EACF,GAAG,EACH,MAAM,EACN,IAAI,EAAE,KAAK,EACX,IAAI,GAAG,SAAS,EAChB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,OAAO,EACrB,GAAG,GAAG,IAAI,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,OACTA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,QAAC,MAAM,EAAA,IAAA,EAAC,IAAI,EAAC,OAAO,EAAA,QAAA,EAC5BA,GAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAEA,GAAA,CAAC,cAAc,EAAA,EAAA,CAAG,GAAI,EAAA,CAC7B,CACZ,EACD,WAAW,EACX,GAAG,IAAI,EACV,GAAG,KAAK;AAET,IAAA,MAAM,OAAO,GAAG,MAAM,CAAgB,EAAE,CAAC;AACzC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAkB,IAAI,CAAC;AAC5C,IAAA,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAyB,IAAI,GAAG,EAAE,CAAC;IAC7D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAqB,MAAM,CAAC;IACtE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAC9C,SAAS,CACZ;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IAC1D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC;IAChD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,uBAAuB,EAAE;AACxD,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;AAE7B,IAAA,MAAM,OAAO,GAAG,MAAM,CAAa,IAAI,CAAC;AACxC,IAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,IAAA,MAAM,YAAY,GAAG,MAAM,CAAqB,SAAS,CAAC;AAC1D,IAAA,YAAY,CAAC,OAAO,GAAG,SAAS;AAChC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAqB,aAAa,CAAC;AAClE,IAAA,gBAAgB,CAAC,OAAO,GAAG,aAAa;IAExC,SAAS,CAAC,MAAK;AACX,QAAA,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;QAE3B,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO,CAAC,EAAE,CAAC;gBACX;YACJ;AAEA,YAAA,OAAO,CACF,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAI;gBAChC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAGjC;AACD,gBAAA,MAAM,EACF,KAAK,EACL,QAAQ,EAAE,WAAW,EACrB,OAAO,EACP,OAAO,EACP,QAAQ,GACX,GAAG,SAAS;gBACb,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC/B,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,OAAO,CAAC;gBAEvD,OAAO;AACH,oBAAA,GAAG,EAAE,MAAM;oBACX,KAAK;oBACL,OAAO;oBACP,QAAQ;iBACX;AACL,YAAA,CAAC,CAAgB,IAAI,EAAE,CAC1B;YAED;QACJ;QAEA,OAAO,CACH,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAClB,YAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,EAAE;AAC5C,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,gBAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;YAC/B;YACA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACjC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;YAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI;YACjC,OAAO;AACH,gBAAA,GAAG,IAAI;gBACP,GAAG;aACN;QACL,CAAC,CAAC,CACL;AACL,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAErB,IAAA,MAAM,GAAG,GAAG,CAAC,GAAa,KAAI;AAC1B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO;AACnC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;AAClD,QAAA,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;AAEtD,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC;YAClC;QACJ;QAEA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;QAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;QAChC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC;AACd,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAG,CAAC,GAAW,KAAI;AAC1B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO;AACnC,QAAA,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAErD,IAAI,CAAC,GAAG,CAAC;YAAE;AAEX,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC;AACjC,QAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,CAAC;AAEjB,QAAA,IAAI,YAAY,CAAC,OAAO,KAAK,GAAG;YAAE;AAElC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO;AACrC,QAAA,MAAM,OAAO,GACT,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG;AACnE,QAAA,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AACvB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;AACzB,QAAA,MAAM,OAAO,GAAG,GAAG,IAAI,SAAS;AAEhC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,WAAW,GAAG,SAAS,EAAE,SAAS,CAAC;YACnC,gBAAgB,CAAC,SAAS,CAAC;YAC3B,YAAY,CAAC,SAAS,CAAC;AACvB,YAAA,WAAW,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,CAAC;AACX,aAAA,CAAC;YACF;QACJ;AAEA,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ;gBAAE;AAEf,YAAA,WAAW,GAAG,SAAS,EAAE,GAAG,CAAC;YAC7B,YAAY,CAAC,SAAS,CAAC;AAEvB,YAAA,WAAW,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,CAAC;AACX,aAAA,CAAC;YACF;QACJ;QAEA,gBAAgB,CAAC,SAAS,CAAC;AAC3B,QAAA,WAAW,GAAG,OAAO,EAAE,SAAS,CAAC;QACjC,YAAY,CAAC,OAAO,CAAC;AACzB,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,CAAyB,EAAE,MAAkB,KAAI;AACtE,QAAA,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE;QACrC,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,MAAM,EAAE;AACZ,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,GAAW,KAAI;AAChC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAElC,GAAG,EAAE,cAAc,CAAC;AAChB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,SAAS;AACpB,SAAA,CAAC;AACN,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,GAAW,KAAI;QACvC,IAAI,CAAC,GAAG,CAAC;QACT,WAAW,CAAC,GAAG,CAAC;AACpB,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;QACX,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE;QACjD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAsB;AACpE,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;QAE9B,MAAM,YAAY,GAAG,YAAY,GAAG,MAAM,IAAI,WAAW,GAAG,KAAK;QACjE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,OAAO,CAAC,CAAC,EAAE,KAAI;gBACX,IAAI,OAAO,GAAG,KAAK;gBACnB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACtB,oBAAA,IACI,CAAC,CAAC,YAAY,KAAK,SAAS;AAC5B,wBAAA,CAAC,CAAC,YAAY,KAAK,IAAI,EACzB;AACE,wBAAA,OAAO,CAAC;oBACZ;oBACA,OAAO,GAAG,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;AACvC,gBAAA,CAAC,CAAC;gBACF,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE;AAC9B,YAAA,CAAC,CAAC;YACF;QACJ;QAEA,MAAM,QAAQ,GAAkB,EAAE;QAElC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC3B,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,OAAO,CAAC,GAAG,EAAE,CAAC,IAAiB,EAAE,OAAgB,KAAI;AACjD,gBAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACX,oBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAAE,wBAAA,OAAO,EAAE;AACrB,oBAAA,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO;AAAE,wBAAA,OAAO,EAAE;AAC9C,oBAAA,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KACjB,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,CAClD;AACL,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAK;AACR,YAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC;AACvC,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAErD,SAAS,CAAC,MAAK;QACX,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,SAAS,EAAE;YACpD;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC;AAE5D,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAElC,YAAA,IAAI,CAAC,GAAG;gBAAE;YAEV,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,SAAS,EAAE;AACnC,gBAAA,aAAa,CAAC,CAAC,IAAI,KAAI;AACnB,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,wBAAA,OAAO,IAAI;AACzC,oBAAA,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC;AAC/B,gBAAA,CAAC,CAAC;YACN;YAEA,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,GAAG;AAChE,YAAA,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM;AAE9B,YAAA,WAAW,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,YAAY;gBACpD,KAAK,EAAE,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,WAAW;AACjD,gBAAA,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,CAAA,IAAA,EAAO,SAAS,CAAA,GAAA,CAAK;AAC1D,aAAA,CAAC;QACN,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,MAAK;AACR,YAAA,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEhD,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM;YAAE;QAElD,IAAI,CAAC,MAAM,CAAC;AAChB,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZ,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ;YAAE;AAElC,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAI;YAC3B,CAAC,CAAC,eAAe,EAAE;YACnB,CAAC,CAAC,cAAc,EAAE;AAElB,YAAA,IAAI,QAAQ;gBAAE;AAEd,YAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;AACtB,gBAAA,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC5B,aAAA,CAAC;AACN,QAAA,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE;AACxD,YAAA,OAAO,EAAE,KAAK;AACjB,SAAA,CAAC;AAEF,QAAA,OAAO,MAAK;YACR,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE;YACtB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAClE,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEd,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;QAC5B,IAAI;QACJ,KAAK;QACL,GAAG;AACH,QAAA,IAAI,EAAE,OAAO;AAChB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,QAAQ,GACV,CAAC,QAAQ,IAAI;AACT,UAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,KAAK,KAAK;UAC/C,EAAE;AAEZ,IAAA,QACIC,IAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,UAAU,CACjB,QAAQ,EACR,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,UAAU,IAAI,CAAA,CAAE,GAAG,IAAI,KAAK,SAAS,EAAE,EAC1D,SAAS,CACZ,EAAA,GACG,IAAI,EAAA,QAAA,EAAA,CAERA,cACI,SAAS,EAAE,UAAU,CAAC,sBAAsB,EAAE;AAC1C,oBAAA,qBAAqB,EAAE,QAAQ;AAClC,iBAAA,CAAC,aAED,OAAO,EAERA,cACI,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,UAAU,CACjB,YAAY,EACZ,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,CAC3B,EACD,IAAI,EAAC,SAAS,EAAA,kBAAA,EACI,QAAQ,GAAG,UAAU,GAAG,YAAY,aAErD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACjB,gCAAA,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,EAAE,QAAQ,EAAE,GAAG,GAAG;AAC7C,gCAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG;gCAElC,QACIA,IAAA,CAAA,GAAA,EAAA,EAEI,GAAG,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAU,CAAC,EAC/C,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE;AAC/B,wCAAA,cAAc,EAAE,QAAQ;AAC3B,qCAAA,CAAC,EACF,IAAI,EAAC,KAAK,EACV,QAAQ,EAAE,QAAQ,GAAG,CAAC,GAAG,EAAE,EAAA,eAAA,EACZ,QAAQ,EACvB,OAAO,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EACxB,SAAS,EAAE,CAAC,CAAC,KACT,eAAe,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,aAGtC,KAAK,EAEL,QAAQ,KACLD,GAAA,CAAC,UAAU,IACP,EAAE,EAAC,GAAG,EACN,MAAM,EAAA,IAAA,EACN,SAAS,EAAC,iBAAiB,EAC3B,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EAAA,YAAA,EACA,gCAAO,EAClB,OAAO,EAAE,CAAC,CAAC,KAAI;gDACX,CAAC,CAAC,cAAc,EAAE;gDAClB,CAAC,CAAC,eAAe,EAAE;gDACnB,KAAK,CAAC,GAAG,CAAC;4CACd,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,KACT,eAAe,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,EAAA,CAE1C,CACL,CAAA,EAAA,EAhCI,GAAG,CAiCR;AAEZ,4BAAA,CAAC,CAAC,EAED,GAAG,KACAA,cACI,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EACjD,KAAK,EAAE,QAAQ,EAAA,CACjB,CACL,IACC,EAEL,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KACzCA,IAAC,KAAK,EAAA,EACF,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,EACvC,KAAK,EAAC,KAAK,EACX,SAAS,EAAA,IAAA,EACT,SAAS,EAAE,GAAG,EACd,OAAO,EACHA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,EAAA,QAAA,EAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;gCACrB,MAAM,EAAE,GAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,GAAG,GAAG;AACnC,gCAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG;AAElC,gCAAA,QACIA,GAAA,CAAA,GAAA,EAAA,EAEI,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE;AAC/B,wCAAA,cAAc,EAAE,QAAQ;qCAC3B,CAAC,EACF,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MACL,kBAAkB,CAAC,GAAG,CAAC,EAE3B,SAAS,EAAE,CAAC,CAAC,KACT,eAAe,CAAC,CAAC,EAAE,MACf,kBAAkB,CAAC,GAAG,CAAC,CAC1B,EAAA,QAAA,EAGJ,KAAK,IAfD,GAAG,CAgBR;4BAEZ,CAAC,CAAC,EAAA,CACA,EAAA,QAAA,EAGT,UAAU,CAAC,QAAQ,CAAC,EAAA,CACjB,CACX,EAEA,MAAM,CAAA,EAAA,CACL,EAENA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;oBACjB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,CAAC,CAAA,CAAE;oBAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5C,oBAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG;oBAClC,MAAM,IAAI,GACN,QAAQ;yBACP,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAEnD,QACI,IAAI,KACAA,GAAA,CAAA,KAAA,EAAA,EAEI,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;AACnC,4BAAA,cAAc,EAAE,QAAQ;AAC3B,yBAAA,CAAC,EACF,IAAI,EAAC,UAAU,iBACF,CAAC,QAAQ,EAAA,QAAA,EAErB,OAAO,EAAA,EAPH,GAAG,CAQN,CACT;AAET,gBAAA,CAAC,CAAC,EAAA,CACA,CAAA,EAAA,CACJ;AAEd,CAAC;AAED,IAAI,CAAC,IAAI,GAAGE,IAAO;;;;"}
|
|
@@ -5,7 +5,7 @@ import SortableContainer from 'react-easy-sort';
|
|
|
5
5
|
import { TFileType } from '../../js/usePreview/type.js';
|
|
6
6
|
import { getFileType, formatBytes } from '../../js/utils.js';
|
|
7
7
|
import Icon from '../icon/icon.js';
|
|
8
|
-
import
|
|
8
|
+
import MemoImage from '../image/image.js';
|
|
9
9
|
import Helpericon from '../utils/helpericon/helpericon.js';
|
|
10
10
|
|
|
11
11
|
const ListContainer = (props) => {
|
|
@@ -41,7 +41,7 @@ const FileListItem = (props) => {
|
|
|
41
41
|
let node = jsx(Fragment, {});
|
|
42
42
|
switch (type) {
|
|
43
43
|
case TFileType.IMAGE:
|
|
44
|
-
node = (jsx(
|
|
44
|
+
node = (jsx(MemoImage, { lazyload: true, src: url || src, fit: 'cover', onMouseDown: (e) => e.preventDefault() }));
|
|
45
45
|
break;
|
|
46
46
|
case TFileType.VIDEO:
|
|
47
47
|
node = jsx("video", { src: url || src, preload: 'none' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderFile.js","sources":["../../../../packages/components/upload/renderFile.tsx"],"sourcesContent":["import { ListAltRound } from \"@ricons/material\";\r\nimport { title } from \"radash\";\r\nimport { RefObject } from \"react\";\r\nimport SortableContainer from \"react-easy-sort\";\r\nimport { TFileType } from \"../../js/usePreview/type\";\r\nimport { formatBytes, getFileType } from \"../../js/utils\";\r\nimport Icon from \"../icon\";\r\nimport Image from \"../image\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport { IUploadItem } from \"./type\";\r\n\r\nexport const ListContainer = (props) => {\r\n\tconst { sortable, onSortEnd, itemProps, ...restProps } = props;\r\n\tconst customProps = {\r\n\t\tclassName: \"i-upload-list\",\r\n\t\tonClick: (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t},\r\n\t};\r\n\r\n\tif (!sortable) {\r\n\t\treturn <div {...customProps} {...restProps} />;\r\n\t}\r\n\treturn (\r\n\t\t<SortableContainer\r\n\t\t\tdraggedItemClassName='i-upload-item-dragged'\r\n\t\t\tonSortEnd={onSortEnd}\r\n\t\t\t{...customProps}\r\n\t\t\t{...restProps}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nconst FileListItem = (\r\n\tprops: IUploadItem & { ref?: RefObject<HTMLDivElement | null> }\r\n) => {\r\n\tconst { ref, mode, index, file, renderItem, onRemove, onPreview } = props;\r\n\r\n\tif (!file) return \"\";\r\n\r\n\tconst { id, name, size, url, src } = file;\r\n\tconst type = getFileType(name, file.type);\r\n\r\n\tif (renderItem) {\r\n\t\treturn renderItem(file, index);\r\n\t}\r\n\r\n\tconst CloseBtn = (\r\n\t\t<Helpericon\r\n\t\t\tactive\r\n\t\t\tclassName='i-upload-delete'\r\n\t\t\tonClick={(e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tonRemove(index);\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n\r\n\tswitch (mode) {\r\n\t\tcase \"card\":\r\n\t\t\tlet node = <></>;\r\n\r\n\t\t\tswitch (type) {\r\n\t\t\t\tcase TFileType.IMAGE:\r\n\t\t\t\t\tnode = (\r\n\t\t\t\t\t\t<Image\r\n\t\t\t\t\t\t\tlazyload\r\n\t\t\t\t\t\t\tsrc={url || src}\r\n\t\t\t\t\t\t\tfit='cover'\r\n\t\t\t\t\t\t\tonMouseDown={(e) => e.preventDefault()}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase TFileType.VIDEO:\r\n\t\t\t\t\tnode = <video src={url || src} preload='none' />;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tnode = (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Icon icon={<ListAltRound />} />\r\n\t\t\t\t\t\t\t<span className='i-upload-file-name'>\r\n\t\t\t\t\t\t\t\t{title(name)}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\ttitle={name}\r\n\t\t\t\t\tclassName='i-upload-item-card'\r\n\t\t\t\t\tonClick={() => onPreview?.(index)}\r\n\t\t\t\t>\r\n\t\t\t\t\t{node}\r\n\t\t\t\t\t{CloseBtn}\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\tdefault:\r\n\t\t\treturn (\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tkey={id}\r\n\t\t\t\t\tclassName='i-upload-item'\r\n\t\t\t\t\tonClick={() => onPreview?.(index)}\r\n\t\t\t\t>\r\n\t\t\t\t\t<span>{name}</span>\r\n\r\n\t\t\t\t\t<i className='i-upload-size'>{formatBytes(size ?? 0)}</i>\r\n\r\n\t\t\t\t\t{CloseBtn}\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t}\r\n};\r\n\r\nexport default FileListItem;\r\n"],"names":["_jsx","_Fragment","_jsxs"],"mappings":";;;;;;;;;;AAWO,MAAM,aAAa,GAAG,CAAC,KAAK,KAAI;AACtC,IAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK;AAC9D,IAAA,MAAM,WAAW,GAAG;AACnB,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,OAAO,EAAE,CAAC,CAAC,KAAI;YACd,CAAC,CAAC,eAAe,EAAE;YACnB,CAAC,CAAC,cAAc,EAAE;QACnB,CAAC;KACD;IAED,IAAI,CAAC,QAAQ,EAAE;AACd,QAAA,OAAOA,GAAA,CAAA,KAAA,EAAA,EAAA,GAAS,WAAW,EAAA,GAAM,SAAS,GAAI;IAC/C;AACA,IAAA,QACCA,GAAA,CAAC,iBAAiB,EAAA,EACjB,oBAAoB,EAAC,uBAAuB,EAC5C,SAAS,EAAE,SAAS,EAAA,GAChB,WAAW,KACX,SAAS,EAAA,CACZ;AAEJ;AAEA,MAAM,YAAY,GAAG,CACpB,KAA+D,KAC5D;AACH,IAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK;AAEzE,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;AAEpB,IAAA,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAEzC,IAAI,UAAU,EAAE;AACf,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;IAC/B;AAEA,IAAA,MAAM,QAAQ,IACbA,GAAA,CAAC,UAAU,IACV,MAAM,EAAA,IAAA,EACN,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAE,CAAC,CAAC,KAAI;YACd,CAAC,CAAC,eAAe,EAAE;YACnB,CAAC,CAAC,cAAc,EAAE;YAClB,QAAQ,CAAC,KAAK,CAAC;QAChB,CAAC,EAAA,CACA,CACF;IAED,QAAQ,IAAI;AACX,QAAA,KAAK,MAAM;YACV,IAAI,IAAI,GAAGA,GAAA,CAAAC,QAAA,EAAA,EAAA,CAAK;YAEhB,QAAQ,IAAI;gBACX,KAAK,SAAS,CAAC,KAAK;AACnB,oBAAA,IAAI,IACHD,GAAA,
|
|
1
|
+
{"version":3,"file":"renderFile.js","sources":["../../../../packages/components/upload/renderFile.tsx"],"sourcesContent":["import { ListAltRound } from \"@ricons/material\";\r\nimport { title } from \"radash\";\r\nimport { RefObject } from \"react\";\r\nimport SortableContainer from \"react-easy-sort\";\r\nimport { TFileType } from \"../../js/usePreview/type\";\r\nimport { formatBytes, getFileType } from \"../../js/utils\";\r\nimport Icon from \"../icon\";\r\nimport Image from \"../image\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport { IUploadItem } from \"./type\";\r\n\r\nexport const ListContainer = (props) => {\r\n\tconst { sortable, onSortEnd, itemProps, ...restProps } = props;\r\n\tconst customProps = {\r\n\t\tclassName: \"i-upload-list\",\r\n\t\tonClick: (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t},\r\n\t};\r\n\r\n\tif (!sortable) {\r\n\t\treturn <div {...customProps} {...restProps} />;\r\n\t}\r\n\treturn (\r\n\t\t<SortableContainer\r\n\t\t\tdraggedItemClassName='i-upload-item-dragged'\r\n\t\t\tonSortEnd={onSortEnd}\r\n\t\t\t{...customProps}\r\n\t\t\t{...restProps}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nconst FileListItem = (\r\n\tprops: IUploadItem & { ref?: RefObject<HTMLDivElement | null> }\r\n) => {\r\n\tconst { ref, mode, index, file, renderItem, onRemove, onPreview } = props;\r\n\r\n\tif (!file) return \"\";\r\n\r\n\tconst { id, name, size, url, src } = file;\r\n\tconst type = getFileType(name, file.type);\r\n\r\n\tif (renderItem) {\r\n\t\treturn renderItem(file, index);\r\n\t}\r\n\r\n\tconst CloseBtn = (\r\n\t\t<Helpericon\r\n\t\t\tactive\r\n\t\t\tclassName='i-upload-delete'\r\n\t\t\tonClick={(e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tonRemove(index);\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n\r\n\tswitch (mode) {\r\n\t\tcase \"card\":\r\n\t\t\tlet node = <></>;\r\n\r\n\t\t\tswitch (type) {\r\n\t\t\t\tcase TFileType.IMAGE:\r\n\t\t\t\t\tnode = (\r\n\t\t\t\t\t\t<Image\r\n\t\t\t\t\t\t\tlazyload\r\n\t\t\t\t\t\t\tsrc={url || src}\r\n\t\t\t\t\t\t\tfit='cover'\r\n\t\t\t\t\t\t\tonMouseDown={(e) => e.preventDefault()}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase TFileType.VIDEO:\r\n\t\t\t\t\tnode = <video src={url || src} preload='none' />;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tnode = (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Icon icon={<ListAltRound />} />\r\n\t\t\t\t\t\t\t<span className='i-upload-file-name'>\r\n\t\t\t\t\t\t\t\t{title(name)}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\ttitle={name}\r\n\t\t\t\t\tclassName='i-upload-item-card'\r\n\t\t\t\t\tonClick={() => onPreview?.(index)}\r\n\t\t\t\t>\r\n\t\t\t\t\t{node}\r\n\t\t\t\t\t{CloseBtn}\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\tdefault:\r\n\t\t\treturn (\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tkey={id}\r\n\t\t\t\t\tclassName='i-upload-item'\r\n\t\t\t\t\tonClick={() => onPreview?.(index)}\r\n\t\t\t\t>\r\n\t\t\t\t\t<span>{name}</span>\r\n\r\n\t\t\t\t\t<i className='i-upload-size'>{formatBytes(size ?? 0)}</i>\r\n\r\n\t\t\t\t\t{CloseBtn}\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t}\r\n};\r\n\r\nexport default FileListItem;\r\n"],"names":["_jsx","_Fragment","Image","_jsxs"],"mappings":"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"}
|
package/lib/es/js/hooks.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useRef, useEffect } from 'react';
|
|
1
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
2
2
|
|
|
3
3
|
const MouseMoveEvents = new Set();
|
|
4
4
|
const MouseUpEvents = new Set();
|
|
@@ -164,31 +164,41 @@ const defaultObserver = {
|
|
|
164
164
|
disconnect: undefined,
|
|
165
165
|
};
|
|
166
166
|
function useIntersectionObserver(configs) {
|
|
167
|
+
const wmRef = useRef(new WeakMap());
|
|
168
|
+
const ioRef = useRef(undefined);
|
|
169
|
+
if (typeof window !== "undefined" && !ioRef.current) {
|
|
170
|
+
ioRef.current = new IntersectionObserver((entries) => {
|
|
171
|
+
entries.map((entry) => {
|
|
172
|
+
const callback = wmRef.current.get(entry.target);
|
|
173
|
+
callback?.(entry.target, entry.isIntersecting);
|
|
174
|
+
});
|
|
175
|
+
}, configs);
|
|
176
|
+
}
|
|
177
|
+
const observe = useCallback((target, callback) => {
|
|
178
|
+
if (!target || !ioRef.current || wmRef.current.get(target))
|
|
179
|
+
return;
|
|
180
|
+
wmRef.current.set(target, callback);
|
|
181
|
+
ioRef.current.observe(target);
|
|
182
|
+
}, []);
|
|
183
|
+
const unobserve = useCallback((target) => {
|
|
184
|
+
if (!target || !ioRef.current)
|
|
185
|
+
return;
|
|
186
|
+
ioRef.current.unobserve(target);
|
|
187
|
+
wmRef.current.delete(target);
|
|
188
|
+
}, []);
|
|
189
|
+
const disconnect = useCallback(() => {
|
|
190
|
+
ioRef.current?.disconnect();
|
|
191
|
+
}, []);
|
|
192
|
+
useEffect(() => {
|
|
193
|
+
return () => {
|
|
194
|
+
ioRef.current?.disconnect();
|
|
195
|
+
};
|
|
196
|
+
}, []);
|
|
167
197
|
if (typeof window === "undefined") {
|
|
168
198
|
return {
|
|
169
199
|
...defaultObserver,
|
|
170
200
|
};
|
|
171
201
|
}
|
|
172
|
-
const WM = new WeakMap();
|
|
173
|
-
const IO = new IntersectionObserver((entries) => {
|
|
174
|
-
entries.map((entry) => {
|
|
175
|
-
const callback = WM.get(entry.target);
|
|
176
|
-
callback?.(entry.target, entry.isIntersecting);
|
|
177
|
-
});
|
|
178
|
-
}, configs);
|
|
179
|
-
function observe(target, callback) {
|
|
180
|
-
if (WM.get(target))
|
|
181
|
-
return;
|
|
182
|
-
WM.set(target, callback);
|
|
183
|
-
target && IO.observe(target);
|
|
184
|
-
}
|
|
185
|
-
function unobserve(target) {
|
|
186
|
-
target && IO.unobserve(target);
|
|
187
|
-
WM.delete(target);
|
|
188
|
-
}
|
|
189
|
-
function disconnect() {
|
|
190
|
-
IO.disconnect();
|
|
191
|
-
}
|
|
192
202
|
return {
|
|
193
203
|
observe,
|
|
194
204
|
unobserve,
|
|
@@ -196,31 +206,41 @@ function useIntersectionObserver(configs) {
|
|
|
196
206
|
};
|
|
197
207
|
}
|
|
198
208
|
function useResizeObserver() {
|
|
209
|
+
const wmRef = useRef(new WeakMap());
|
|
210
|
+
const ioRef = useRef(undefined);
|
|
211
|
+
if (typeof window !== "undefined" && !ioRef.current) {
|
|
212
|
+
ioRef.current = new ResizeObserver((entries) => {
|
|
213
|
+
entries.map((entry) => {
|
|
214
|
+
const callback = wmRef.current.get(entry.target);
|
|
215
|
+
callback?.(entry.target);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
const observe = useCallback((target, callback) => {
|
|
220
|
+
if (!target || !ioRef.current || wmRef.current.get(target))
|
|
221
|
+
return;
|
|
222
|
+
ioRef.current.observe(target);
|
|
223
|
+
wmRef.current.set(target, callback);
|
|
224
|
+
}, []);
|
|
225
|
+
const unobserve = useCallback((target) => {
|
|
226
|
+
if (!target || !ioRef.current)
|
|
227
|
+
return;
|
|
228
|
+
ioRef.current.unobserve(target);
|
|
229
|
+
wmRef.current.delete(target);
|
|
230
|
+
}, []);
|
|
231
|
+
const disconnect = useCallback(() => {
|
|
232
|
+
ioRef.current?.disconnect();
|
|
233
|
+
}, []);
|
|
234
|
+
useEffect(() => {
|
|
235
|
+
return () => {
|
|
236
|
+
ioRef.current?.disconnect();
|
|
237
|
+
};
|
|
238
|
+
}, []);
|
|
199
239
|
if (typeof window === "undefined") {
|
|
200
240
|
return {
|
|
201
241
|
...defaultObserver,
|
|
202
242
|
};
|
|
203
243
|
}
|
|
204
|
-
const WM = new WeakMap();
|
|
205
|
-
const IO = new ResizeObserver((entries) => {
|
|
206
|
-
entries.map((entry) => {
|
|
207
|
-
const callback = WM.get(entry.target);
|
|
208
|
-
callback?.(entry.target);
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
function observe(target, callback) {
|
|
212
|
-
if (WM.get(target))
|
|
213
|
-
return;
|
|
214
|
-
target && IO.observe(target);
|
|
215
|
-
WM.set(target, callback);
|
|
216
|
-
}
|
|
217
|
-
function unobserve(target) {
|
|
218
|
-
target && IO.unobserve(target);
|
|
219
|
-
WM.delete(target);
|
|
220
|
-
}
|
|
221
|
-
function disconnect() {
|
|
222
|
-
IO.disconnect();
|
|
223
|
-
}
|
|
224
244
|
return {
|
|
225
245
|
observe,
|
|
226
246
|
unobserve,
|