@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.
Files changed (57) hide show
  1. package/lib/cjs/components/editor/controls.js +31 -40
  2. package/lib/cjs/components/editor/controls.js.map +1 -1
  3. package/lib/cjs/components/editor/editor.js +204 -41
  4. package/lib/cjs/components/editor/editor.js.map +1 -1
  5. package/lib/cjs/components/editor/memtion.js +171 -0
  6. package/lib/cjs/components/editor/memtion.js.map +1 -0
  7. package/lib/cjs/components/image/image.js +46 -30
  8. package/lib/cjs/components/image/image.js.map +1 -1
  9. package/lib/cjs/components/input/textarea.js +12 -5
  10. package/lib/cjs/components/input/textarea.js.map +1 -1
  11. package/lib/cjs/components/modal/hookModal.js +1 -1
  12. package/lib/cjs/components/modal/hookModal.js.map +1 -1
  13. package/lib/cjs/components/picker/colors/footer.js +1 -1
  14. package/lib/cjs/components/picker/colors/footer.js.map +1 -1
  15. package/lib/cjs/components/popconfirm/popconfirm.js +3 -3
  16. package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
  17. package/lib/cjs/components/tabs/tabs.js +95 -37
  18. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  19. package/lib/cjs/js/hooks.js +60 -40
  20. package/lib/cjs/js/hooks.js.map +1 -1
  21. package/lib/css/colors.css +13 -8
  22. package/lib/css/index.css +1 -1
  23. package/lib/css/index.css.map +1 -1
  24. package/lib/css/input.css +12 -6
  25. package/lib/css/reset.css +2 -5
  26. package/lib/css/utilities.css +9 -10
  27. package/lib/es/components/editor/controls.js +32 -37
  28. package/lib/es/components/editor/controls.js.map +1 -1
  29. package/lib/es/components/editor/editor.js +205 -42
  30. package/lib/es/components/editor/editor.js.map +1 -1
  31. package/lib/es/components/editor/memtion.js +160 -0
  32. package/lib/es/components/editor/memtion.js.map +1 -0
  33. package/lib/es/components/image/image.js +47 -31
  34. package/lib/es/components/image/image.js.map +1 -1
  35. package/lib/es/components/image/index.js +2 -2
  36. package/lib/es/components/image/list.js +2 -2
  37. package/lib/es/components/image/list.js.map +1 -1
  38. package/lib/es/components/input/textarea.js +12 -5
  39. package/lib/es/components/input/textarea.js.map +1 -1
  40. package/lib/es/components/modal/hookModal.js +1 -1
  41. package/lib/es/components/modal/hookModal.js.map +1 -1
  42. package/lib/es/components/picker/colors/footer.js +1 -1
  43. package/lib/es/components/picker/colors/footer.js.map +1 -1
  44. package/lib/es/components/popconfirm/popconfirm.js +3 -3
  45. package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
  46. package/lib/es/components/tabs/tabs.js +95 -37
  47. package/lib/es/components/tabs/tabs.js.map +1 -1
  48. package/lib/es/components/upload/renderFile.js +2 -2
  49. package/lib/es/components/upload/renderFile.js.map +1 -1
  50. package/lib/es/js/hooks.js +61 -41
  51. package/lib/es/js/hooks.js.map +1 -1
  52. package/lib/index.js +608 -195
  53. package/lib/types/components/editor/type.d.ts +25 -12
  54. package/lib/types/components/image/image.d.ts +2 -2
  55. package/lib/types/components/image/index.d.ts +2 -2
  56. package/lib/types/components/input/type.d.ts +1 -0
  57. 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: 'small', children: jsx(Icon, { icon: jsx(MoreHorizRound, {}) }) })), onTabChange, ...rest } = 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: "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 tkey = String(tab.key ?? tabs.length);
64
- const i = tabs.findIndex((t) => t.key === tkey);
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(tabs[i].key ?? `${i}`);
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 i = tabs.findIndex((t) => t.key === key);
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 = [...tabs];
86
+ const nextTabs = [...currentTabs];
80
87
  nextTabs.splice(i, 1);
81
88
  setTabs(nextTabs);
82
- if (activeKey !== key)
89
+ if (activeKeyRef.current !== key)
83
90
  return;
84
91
  const next = nextTabs[i] || nextTabs[i - 1];
85
- open(prevActiveKey ?? next?.key ?? "");
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
- if (key === activeKey) {
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?.(key, activeKey);
101
- setActiveKey(key);
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
- observe(nav, (tar, visible) => {
168
+ observed.push(nav);
169
+ observe(nav, (_tar, visible) => {
116
170
  setTabs((ts) => {
117
171
  if (!ts[i])
118
172
  return ts;
119
- const nextTabs = ts.map((t, idx) => idx === i ? { ...t, intersecting: visible } : t);
120
- setMoreTabs(nextTabs.filter((tab) => !tab.intersecting));
121
- return nextTabs;
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
- }, [size, hideMore, tabs.length, observe]);
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
- }, [navsRef.current]);
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": activeKey === key,
196
- }), onClick: () => open(key), children: [title, closable && (jsx(Helpericon, { as: 'i', active: true, className: 'i-tab-nav-close', onClick: (e) => {
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: 'end', touchable: true, hideDelay: 500, content: jsx("div", { className: 'i-tabs-morelist pd-4', children: moreTabs.map((tab, i) => {
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: () => open(key), children: title }, key));
206
- }) }), children: renderMore(moreTabs) })), append] }), jsx("div", { className: 'i-tab-contents', children: tabs.map((tab, i) => {
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":"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"}
@@ -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 Image from '../image/image.js';
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(Image, { lazyload: true, src: url || src, fit: 'cover', onMouseDown: (e) => e.preventDefault() }));
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":"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"}
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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"}
@@ -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,