@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
@@ -18,7 +18,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
18
18
  var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
19
19
 
20
20
  const Tabs = ((props) => {
21
- const { ref, active, tabs: items, type = "default", prepend, append, children, className, vertical, toggable, navsJustify = "start", bar = true, hideMore, barClass, renderMore = () => (jsxRuntime.jsx(button.default, { flat: true, square: true, size: 'small', children: jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.MoreHorizRound, {}) }) })), onTabChange, ...rest } = props;
21
+ const { ref, active, tabs: items, type = "default", prepend, append, children, className, vertical, toggable, navsJustify = "start", bar = true, hideMore, barClass, renderMore = () => (jsxRuntime.jsx(button.default, { flat: true, square: true, size: "small", children: jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.MoreHorizRound, {}) }) })), onTabChange, ...rest } = props;
22
22
  const navRefs = react.useRef([]);
23
23
  const barRef = react.useRef(null);
24
24
  const navsRef = react.useRef(null);
@@ -28,10 +28,15 @@ const Tabs = ((props) => {
28
28
  const [barStyle, setBarStyle] = react.useState({});
29
29
  const [cachedTabs, setCachedTabs] = react.useState([]);
30
30
  const [overflow, setOverflow] = react.useState(false);
31
- const [moreTabs, setMoreTabs] = react.useState([]);
32
31
  const [tabs, setTabs] = react.useState([]);
33
32
  const { observe, unobserve } = hooks.useIntersectionObserver();
34
33
  const size = hooks.useSize(navsRef);
34
+ const tabsRef = react.useRef(tabs);
35
+ tabsRef.current = tabs;
36
+ const activeKeyRef = react.useRef(activeKey);
37
+ activeKeyRef.current = activeKey;
38
+ const prevActiveKeyRef = react.useRef(prevActiveKey);
39
+ prevActiveKeyRef.current = prevActiveKey;
35
40
  react.useEffect(() => {
36
41
  contentsRef.current.clear();
37
42
  if (!items) {
@@ -68,10 +73,11 @@ const Tabs = ((props) => {
68
73
  }));
69
74
  }, [children, items]);
70
75
  const add = (tab) => {
71
- const tkey = String(tab.key ?? tabs.length);
72
- const i = tabs.findIndex((t) => t.key === tkey);
76
+ const currentTabs = tabsRef.current;
77
+ const tkey = String(tab.key ?? currentTabs.length);
78
+ const i = currentTabs.findIndex((t) => t.key === tkey);
73
79
  if (i > -1) {
74
- open(tabs[i].key ?? `${i}`);
80
+ open(currentTabs[i].key ?? `${i}`);
75
81
  return;
76
82
  }
77
83
  contentsRef.current.set(tkey, tab.content);
@@ -80,20 +86,34 @@ const Tabs = ((props) => {
80
86
  open(tkey);
81
87
  };
82
88
  const close = (key) => {
83
- const i = tabs.findIndex((t) => t.key === key);
89
+ const currentTabs = tabsRef.current;
90
+ const i = currentTabs.findIndex((t) => t.key === key);
84
91
  if (i < 0)
85
92
  return;
86
93
  contentsRef.current.delete(key);
87
- const nextTabs = [...tabs];
94
+ const nextTabs = [...currentTabs];
88
95
  nextTabs.splice(i, 1);
89
96
  setTabs(nextTabs);
90
- if (activeKey !== key)
97
+ if (activeKeyRef.current !== key)
91
98
  return;
92
99
  const next = nextTabs[i] || nextTabs[i - 1];
93
- open(prevActiveKey ?? next?.key ?? "");
100
+ const prev = prevActiveKeyRef.current;
101
+ const nextKey = prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;
102
+ open(nextKey ?? "");
94
103
  };
95
104
  const open = (key) => {
96
- if (key === activeKey) {
105
+ const nextKey = key || undefined;
106
+ if (nextKey === undefined) {
107
+ onTabChange?.(undefined, activeKey);
108
+ setPrevActiveKey(activeKey);
109
+ setActiveKey(undefined);
110
+ setBarStyle({
111
+ height: 0,
112
+ width: 0,
113
+ });
114
+ return;
115
+ }
116
+ if (nextKey === activeKey) {
97
117
  if (!toggable)
98
118
  return;
99
119
  onTabChange?.(undefined, key);
@@ -105,38 +125,75 @@ const Tabs = ((props) => {
105
125
  return;
106
126
  }
107
127
  setPrevActiveKey(activeKey);
108
- onTabChange?.(key, activeKey);
109
- setActiveKey(key);
128
+ onTabChange?.(nextKey, activeKey);
129
+ setActiveKey(nextKey);
130
+ };
131
+ const handleKeyAction = (e, action) => {
132
+ if (!["Enter", " "].includes(e.key))
133
+ return;
134
+ e.preventDefault();
135
+ action();
136
+ };
137
+ const scrollToTab = (key) => {
138
+ const index = tabsRef.current.findIndex((tab) => tab.key === key);
139
+ const nav = navRefs.current[index];
140
+ nav?.scrollIntoView({
141
+ behavior: "smooth",
142
+ block: "nearest",
143
+ inline: "nearest",
144
+ });
145
+ };
146
+ const handleMoreTabClick = (key) => {
147
+ open(key);
148
+ scrollToTab(key);
110
149
  };
111
150
  react.useEffect(() => {
112
- if (!size || hideMore || !observe)
151
+ if (!size || hideMore || !observe || !unobserve)
113
152
  return;
114
153
  const { scrollHeight, scrollWidth } = navsRef.current;
115
154
  const { width, height } = size;
116
155
  const nextOverflow = scrollHeight > height || scrollWidth > width;
117
- setOverflow(nextOverflow);
118
- if (!nextOverflow)
156
+ setOverflow((v) => (v === nextOverflow ? v : nextOverflow));
157
+ if (!nextOverflow) {
158
+ setTabs((ts) => {
159
+ let changed = false;
160
+ const next = ts.map((t) => {
161
+ if (t.intersecting === undefined ||
162
+ t.intersecting === true) {
163
+ return t;
164
+ }
165
+ changed = true;
166
+ return { ...t, intersecting: true };
167
+ });
168
+ return changed ? next : ts;
169
+ });
119
170
  return;
171
+ }
172
+ const observed = [];
120
173
  navRefs.current.map((nav, i) => {
121
174
  if (!nav)
122
175
  return;
123
- observe(nav, (tar, visible) => {
176
+ observed.push(nav);
177
+ observe(nav, (_tar, visible) => {
124
178
  setTabs((ts) => {
125
179
  if (!ts[i])
126
180
  return ts;
127
- const nextTabs = ts.map((t, idx) => idx === i ? { ...t, intersecting: visible } : t);
128
- setMoreTabs(nextTabs.filter((tab) => !tab.intersecting));
129
- return nextTabs;
181
+ if (ts[i]?.intersecting === visible)
182
+ return ts;
183
+ return ts.map((t, idx) => idx === i ? { ...t, intersecting: visible } : t);
130
184
  });
131
185
  });
132
186
  });
133
- }, [size, hideMore, tabs.length, observe]);
187
+ return () => {
188
+ observed.map((el) => unobserve(el));
189
+ };
190
+ }, [size, hideMore, tabs.length, observe, unobserve]);
134
191
  react.useEffect(() => {
135
192
  if (!bar || type === "pane" || activeKey === undefined) {
136
193
  return;
137
194
  }
138
195
  const index = tabs.findIndex((tab) => tab.key === activeKey);
139
- setTimeout(() => {
196
+ const timer = window.setTimeout(() => {
140
197
  const nav = navRefs.current[index];
141
198
  if (!nav)
142
199
  return;
@@ -155,19 +212,15 @@ const Tabs = ((props) => {
155
212
  transform: `translate(${offsetLeft}px, ${offsetTop}px)`,
156
213
  });
157
214
  }, 16);
215
+ return () => {
216
+ window.clearTimeout(timer);
217
+ };
158
218
  }, [activeKey, bar, size, tabs, type, vertical]);
159
219
  react.useEffect(() => {
160
220
  if (active === undefined || activeKey === active)
161
221
  return;
162
222
  open(active);
163
223
  }, [active]);
164
- react.useEffect(() => {
165
- if (hideMore || !unobserve)
166
- return;
167
- return () => {
168
- navRefs.current?.map(unobserve);
169
- };
170
- }, [tabs.length, hideMore, unobserve]);
171
224
  react.useEffect(() => {
172
225
  if (!navsRef.current || vertical)
173
226
  return;
@@ -188,30 +241,35 @@ const Tabs = ((props) => {
188
241
  return;
189
242
  navsRef.current.removeEventListener("wheel", handleMouseWheel);
190
243
  };
191
- }, [navsRef.current]);
244
+ }, [vertical]);
192
245
  react.useImperativeHandle(ref, () => ({
193
246
  open,
194
247
  close,
195
248
  add,
196
249
  navs: navsRef,
197
250
  }));
251
+ const moreTabs = !hideMore && overflow
252
+ ? tabs.filter((tab) => tab.intersecting === false)
253
+ : [];
198
254
  return (jsxRuntime.jsxs("div", { className: classNames__default("i-tabs", { flex: vertical, [`i-tabs-${type}`]: type !== "default" }, className), ...rest, children: [jsxRuntime.jsxs("div", { className: classNames__default("i-tab-navs-container", {
199
255
  "i-tab-navs-vertical": vertical,
200
- }), children: [prepend, jsxRuntime.jsxs("div", { ref: navsRef, className: classNames__default("i-tab-navs", `justify-${navsJustify}`), children: [tabs.map((tab, i) => {
256
+ }), children: [prepend, jsxRuntime.jsxs("div", { ref: navsRef, className: classNames__default("i-tab-navs", `justify-${navsJustify}`), role: "tablist", "aria-orientation": vertical ? "vertical" : "horizontal", children: [tabs.map((tab, i) => {
201
257
  const { title, key = `${i}`, closable } = tab;
258
+ const isActive = activeKey === key;
202
259
  return (jsxRuntime.jsxs("a", { ref: (ref) => (navRefs.current[i] = ref), className: classNames__default("i-tab-nav", {
203
- "i-tab-active": activeKey === key,
204
- }), onClick: () => open(key), children: [title, closable && (jsxRuntime.jsx(helpericon.default, { as: 'i', active: true, className: 'i-tab-nav-close', onClick: (e) => {
260
+ "i-tab-active": isActive,
261
+ }), role: "tab", tabIndex: isActive ? 0 : -1, "aria-selected": isActive, onClick: () => open(key), onKeyDown: (e) => handleKeyAction(e, () => open(key)), children: [title, closable && (jsxRuntime.jsx(helpericon.default, { as: "i", active: true, className: "i-tab-nav-close", role: "button", tabIndex: 0, "aria-label": "\u5173\u95ED\u6807\u7B7E\u9875", onClick: (e) => {
262
+ e.preventDefault();
205
263
  e.stopPropagation();
206
264
  close(key);
207
- } }))] }, key));
208
- }), bar && (jsxRuntime.jsx("span", { ref: barRef, className: classNames__default("i-tab-navs-bar", barClass), style: barStyle }))] }), !hideMore && overflow && moreTabs.length > 0 && (jsxRuntime.jsx(popup.default, { arrow: false, position: vertical ? "right" : "bottom", align: 'end', touchable: true, hideDelay: 500, content: jsxRuntime.jsx("div", { className: 'i-tabs-morelist pd-4', children: moreTabs.map((tab, i) => {
265
+ }, onKeyDown: (e) => handleKeyAction(e, () => close(key)) }))] }, key));
266
+ }), bar && (jsxRuntime.jsx("span", { ref: barRef, className: classNames__default("i-tab-navs-bar", barClass), style: barStyle }))] }), !hideMore && overflow && moreTabs.length > 0 && (jsxRuntime.jsx(popup.default, { arrow: false, position: vertical ? "right" : "bottom", align: "end", touchable: true, hideDelay: 500, content: jsxRuntime.jsx("div", { className: "i-tabs-morelist pd-4", children: moreTabs.map((tab, i) => {
209
267
  const { key = `${i}`, title } = tab;
210
268
  const isActive = activeKey === key;
211
269
  return (jsxRuntime.jsx("a", { className: classNames__default("i-tab-nav", {
212
270
  "i-tab-active": isActive,
213
- }), onClick: () => open(key), children: title }, key));
214
- }) }), children: renderMore(moreTabs) })), append] }), jsxRuntime.jsx("div", { className: 'i-tab-contents', children: tabs.map((tab, i) => {
271
+ }), role: "button", tabIndex: 0, onClick: () => handleMoreTabClick(key), onKeyDown: (e) => handleKeyAction(e, () => handleMoreTabClick(key)), children: title }, key));
272
+ }) }), children: renderMore(moreTabs) })), append] }), jsxRuntime.jsx("div", { className: "i-tab-contents", children: tabs.map((tab, i) => {
215
273
  const key = tab.key ?? `${i}`;
216
274
  const content = contentsRef.current.get(key);
217
275
  const isActive = activeKey === key;
@@ -219,7 +277,7 @@ const Tabs = ((props) => {
219
277
  (key !== undefined && cachedTabs.includes(key));
220
278
  return (show && (jsxRuntime.jsx("div", { className: classNames__default("i-tab-content", {
221
279
  "i-tab-active": isActive,
222
- }), children: content }, key)));
280
+ }), role: "tabpanel", "aria-hidden": !isActive, children: content }, key)));
223
281
  }) })] }));
224
282
  });
225
283
  Tabs.Item = item.default;
@@ -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","Button","Icon","MoreHorizRound","useRef","useState","useIntersectionObserver","useSize","useEffect","Children","useImperativeHandle","_jsxs","classNames","Helpericon","Popup","TabItem"],"mappings":"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"}
1
+ {"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import { 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","Button","Icon","MoreHorizRound","useRef","useState","useIntersectionObserver","useSize","useEffect","Children","useImperativeHandle","_jsxs","classNames","Helpericon","Popup","TabItem"],"mappings":"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"}
@@ -166,31 +166,41 @@ const defaultObserver = {
166
166
  disconnect: undefined,
167
167
  };
168
168
  function useIntersectionObserver(configs) {
169
+ const wmRef = react.useRef(new WeakMap());
170
+ const ioRef = react.useRef(undefined);
171
+ if (typeof window !== "undefined" && !ioRef.current) {
172
+ ioRef.current = new IntersectionObserver((entries) => {
173
+ entries.map((entry) => {
174
+ const callback = wmRef.current.get(entry.target);
175
+ callback?.(entry.target, entry.isIntersecting);
176
+ });
177
+ }, configs);
178
+ }
179
+ const observe = react.useCallback((target, callback) => {
180
+ if (!target || !ioRef.current || wmRef.current.get(target))
181
+ return;
182
+ wmRef.current.set(target, callback);
183
+ ioRef.current.observe(target);
184
+ }, []);
185
+ const unobserve = react.useCallback((target) => {
186
+ if (!target || !ioRef.current)
187
+ return;
188
+ ioRef.current.unobserve(target);
189
+ wmRef.current.delete(target);
190
+ }, []);
191
+ const disconnect = react.useCallback(() => {
192
+ ioRef.current?.disconnect();
193
+ }, []);
194
+ react.useEffect(() => {
195
+ return () => {
196
+ ioRef.current?.disconnect();
197
+ };
198
+ }, []);
169
199
  if (typeof window === "undefined") {
170
200
  return {
171
201
  ...defaultObserver,
172
202
  };
173
203
  }
174
- const WM = new WeakMap();
175
- const IO = new IntersectionObserver((entries) => {
176
- entries.map((entry) => {
177
- const callback = WM.get(entry.target);
178
- callback?.(entry.target, entry.isIntersecting);
179
- });
180
- }, configs);
181
- function observe(target, callback) {
182
- if (WM.get(target))
183
- return;
184
- WM.set(target, callback);
185
- target && IO.observe(target);
186
- }
187
- function unobserve(target) {
188
- target && IO.unobserve(target);
189
- WM.delete(target);
190
- }
191
- function disconnect() {
192
- IO.disconnect();
193
- }
194
204
  return {
195
205
  observe,
196
206
  unobserve,
@@ -198,31 +208,41 @@ function useIntersectionObserver(configs) {
198
208
  };
199
209
  }
200
210
  function useResizeObserver() {
211
+ const wmRef = react.useRef(new WeakMap());
212
+ const ioRef = react.useRef(undefined);
213
+ if (typeof window !== "undefined" && !ioRef.current) {
214
+ ioRef.current = new ResizeObserver((entries) => {
215
+ entries.map((entry) => {
216
+ const callback = wmRef.current.get(entry.target);
217
+ callback?.(entry.target);
218
+ });
219
+ });
220
+ }
221
+ const observe = react.useCallback((target, callback) => {
222
+ if (!target || !ioRef.current || wmRef.current.get(target))
223
+ return;
224
+ ioRef.current.observe(target);
225
+ wmRef.current.set(target, callback);
226
+ }, []);
227
+ const unobserve = react.useCallback((target) => {
228
+ if (!target || !ioRef.current)
229
+ return;
230
+ ioRef.current.unobserve(target);
231
+ wmRef.current.delete(target);
232
+ }, []);
233
+ const disconnect = react.useCallback(() => {
234
+ ioRef.current?.disconnect();
235
+ }, []);
236
+ react.useEffect(() => {
237
+ return () => {
238
+ ioRef.current?.disconnect();
239
+ };
240
+ }, []);
201
241
  if (typeof window === "undefined") {
202
242
  return {
203
243
  ...defaultObserver,
204
244
  };
205
245
  }
206
- const WM = new WeakMap();
207
- const IO = new ResizeObserver((entries) => {
208
- entries.map((entry) => {
209
- const callback = WM.get(entry.target);
210
- callback?.(entry.target);
211
- });
212
- });
213
- function observe(target, callback) {
214
- if (WM.get(target))
215
- return;
216
- target && IO.observe(target);
217
- WM.set(target, callback);
218
- }
219
- function unobserve(target) {
220
- target && IO.unobserve(target);
221
- WM.delete(target);
222
- }
223
- function disconnect() {
224
- IO.disconnect();
225
- }
226
246
  return {
227
247
  observe,
228
248
  unobserve,
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../../../packages/js/hooks.ts"],"sourcesContent":["import { DependencyList, useEffect, useMemo, useRef, useState } from \"react\";\r\n\r\ntype TMouseEvent = (e: MouseEvent) => void;\r\ntype TKeyboardEvent = (e: KeyboardEvent) => void;\r\ntype TEventOption = {\r\n\tdisabled?: boolean;\r\n};\r\n\r\nconst MouseMoveEvents = new Set<TMouseEvent>();\r\nconst MouseUpEvents = new Set<TMouseEvent>();\r\nconst KeydownEvents = new Set<TKeyboardEvent>();\r\n\r\nlet initialized = false;\r\n\r\nconst initEvents = () => {\r\n\tif (typeof document === \"undefined\" || initialized) return;\r\n\tinitialized = true;\r\n\r\n\tconst touchable = \"ontouchend\" in document;\r\n\tconst EVENTS: Record<string, any> = {\r\n\t\tMOVE: touchable ? \"touchmove\" : \"mousemove\",\r\n\t\tUP: touchable ? \"touchend\" : \"mouseup\",\r\n\t\tKEYDOWN: \"keydown\",\r\n\t};\r\n\r\n\tdocument.addEventListener(\r\n\t\tEVENTS.MOVE,\r\n\t\t(e) => {\r\n\t\t\tfor (const listener of MouseMoveEvents.values()) {\r\n\t\t\t\tlistener(e);\r\n\t\t\t}\r\n\t\t},\r\n\t\t{ passive: false },\r\n\t);\r\n\r\n\tdocument.addEventListener(EVENTS.UP, (e) => {\r\n\t\tfor (const listener of MouseUpEvents.values()) {\r\n\t\t\tlistener(e);\r\n\t\t}\r\n\t});\r\n\r\n\tdocument.addEventListener(EVENTS.KEYDOWN, (e) => {\r\n\t\tfor (const listener of KeydownEvents.values()) {\r\n\t\t\tlistener(e);\r\n\t\t}\r\n\t});\r\n};\r\n\r\nfunction initEventsOnce() {\r\n\tuseEffect(initEvents, []);\r\n}\r\n\r\nexport function useMouseMove(listener: TMouseEvent, options?: TEventOption) {\r\n\tinitEventsOnce();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (options?.disabled) return;\r\n\r\n\t\tMouseMoveEvents.add(listener);\r\n\t\treturn () => {\r\n\t\t\tMouseMoveEvents.delete(listener);\r\n\t\t};\r\n\t}, []);\r\n}\r\n\r\nexport function useMouseUp(listener: TMouseEvent, options?: TEventOption) {\r\n\tinitEventsOnce();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (options?.disabled) return;\r\n\r\n\t\tMouseUpEvents.add(listener);\r\n\t\treturn () => {\r\n\t\t\tMouseUpEvents.delete(listener);\r\n\t\t};\r\n\t}, []);\r\n}\r\n\r\nexport function useKeydown(listener: TKeyboardEvent, options?: TEventOption) {\r\n\tinitEventsOnce();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (options?.disabled) return;\r\n\r\n\t\tKeydownEvents.add(listener);\r\n\t\treturn () => {\r\n\t\t\tKeydownEvents.delete(listener);\r\n\t\t};\r\n\t}, []);\r\n}\r\n\r\nexport function useCreation<T>(factory: () => T, deps: DependencyList) {\r\n\treturn useMemo(factory, deps);\r\n}\r\n\r\nexport function useReactive<T extends object>(initialState: T): T {\r\n\tconst [, setFlag] = useState(0);\r\n\tconst scheduledRef = useRef(false);\r\n\tconst proxyCacheRef = useRef(new WeakMap<object, any>());\r\n\tconst rootRef = useRef<T | null>(null);\r\n\tconst proxyRef = useRef<T | null>(null);\r\n\r\n\tconst notify = () => {\r\n\t\tif (scheduledRef.current) return;\r\n\t\tscheduledRef.current = true;\r\n\r\n\t\tconst flush = () => {\r\n\t\t\tscheduledRef.current = false;\r\n\t\t\tsetFlag((n) => n + 1);\r\n\t\t};\r\n\r\n\t\tif (typeof queueMicrotask !== \"undefined\") {\r\n\t\t\tqueueMicrotask(flush);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tPromise.resolve().then(flush);\r\n\t};\r\n\r\n\tconst createProxy = (target: any): any => {\r\n\t\tif (!target || typeof target !== \"object\") return target;\r\n\r\n\t\tif (!Array.isArray(target)) {\r\n\t\t\tconst proto = Object.getPrototypeOf(target);\r\n\t\t\tconst isPlainObject = proto === Object.prototype || proto === null;\r\n\t\t\tif (!isPlainObject) return target;\r\n\t\t}\r\n\r\n\t\tconst cached = proxyCacheRef.current.get(target);\r\n\t\tif (cached) return cached;\r\n\r\n\t\tconst proxy = new Proxy(target, {\r\n\t\t\tget(t, p, r) {\r\n\t\t\t\treturn createProxy(Reflect.get(t, p, r));\r\n\t\t\t},\r\n\t\t\tset(t, p, v, r) {\r\n\t\t\t\tconst prev = Reflect.get(t, p, r);\r\n\t\t\t\tconst ok = Reflect.set(t, p, v, r);\r\n\t\t\t\tif (prev !== v) notify();\r\n\t\t\t\treturn ok;\r\n\t\t\t},\r\n\t\t\tdeleteProperty(t, p) {\r\n\t\t\t\tconst had = Object.prototype.hasOwnProperty.call(t, p);\r\n\t\t\t\tconst ok = Reflect.deleteProperty(t, p);\r\n\t\t\t\tif (had) notify();\r\n\t\t\t\treturn ok;\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tproxyCacheRef.current.set(target, proxy);\r\n\t\treturn proxy;\r\n\t};\r\n\r\n\tif (!proxyRef.current) {\r\n\t\trootRef.current = initialState;\r\n\t\tproxyRef.current = createProxy(rootRef.current);\r\n\t}\r\n\r\n\treturn proxyRef.current as T;\r\n}\r\n\r\ntype TSetState<T> = (\r\n\tvalue: T | undefined | ((prev: T | undefined) => T),\r\n) => void;\r\n\r\ntype TLocalStorageOptions<T> = {\r\n\tdefaultValue?: T | (() => T);\r\n\tlistenStorageChange?: boolean;\r\n};\r\n\r\nexport function useLocalStorageState<T>(\r\n\tkey: string,\r\n\toptions?: TLocalStorageOptions<T>,\r\n): [T | undefined, TSetState<T>] {\r\n\tconst { defaultValue, listenStorageChange } = options ?? {};\r\n\r\n\tconst getDefault = () => {\r\n\t\treturn typeof defaultValue === \"function\"\r\n\t\t\t? (defaultValue as () => T)()\r\n\t\t\t: defaultValue;\r\n\t};\r\n\r\n\tconst read = (): T | undefined => {\r\n\t\tif (typeof window === \"undefined\") return getDefault();\r\n\r\n\t\tconst raw = window.localStorage.getItem(key);\r\n\t\tif (raw === null) return getDefault();\r\n\r\n\t\ttry {\r\n\t\t\treturn JSON.parse(raw) as T;\r\n\t\t} catch (e) {\r\n\t\t\treturn raw as unknown as T;\r\n\t\t}\r\n\t};\r\n\r\n\tconst [state, setState] = useState<T | undefined>(() => read());\r\n\r\n\tconst set: TSetState<T> = (value) => {\r\n\t\tsetState((prev) => {\r\n\t\t\tconst next =\r\n\t\t\t\ttypeof value === \"function\"\r\n\t\t\t\t\t? (value as (prev: T | undefined) => T)(prev)\r\n\t\t\t\t\t: value;\r\n\r\n\t\t\tif (typeof window !== \"undefined\") {\r\n\t\t\t\tif (next === undefined) {\r\n\t\t\t\t\twindow.localStorage.removeItem(key);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.localStorage.setItem(key, JSON.stringify(next));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn next;\r\n\t\t});\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!listenStorageChange) return;\r\n\t\tif (typeof window === \"undefined\") return;\r\n\r\n\t\tconst onStorage = (e: StorageEvent) => {\r\n\t\t\tif (e.key !== key) return;\r\n\r\n\t\t\tif (e.newValue === null) {\r\n\t\t\t\tsetState(getDefault());\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tsetState(JSON.parse(e.newValue) as T);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tsetState(e.newValue as unknown as T);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"storage\", onStorage);\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"storage\", onStorage);\r\n\t\t};\r\n\t}, [key, listenStorageChange]);\r\n\r\n\treturn [state, set];\r\n}\r\n\r\ntype TResponsiveConfig = Record<string, number>;\r\n\r\nlet responsiveConfig: TResponsiveConfig = {};\r\n\r\nexport function configResponsive(config: TResponsiveConfig) {\r\n\tresponsiveConfig = config;\r\n}\r\n\r\nexport function useResponsive() {\r\n\tconst compute = () => {\r\n\t\tif (typeof window === \"undefined\") return {};\r\n\t\tconst w = window.innerWidth;\r\n\t\tconst result: Record<string, boolean> = {};\r\n\r\n\t\tfor (const key in responsiveConfig) {\r\n\t\t\tresult[key] = w >= responsiveConfig[key];\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tconst [state, setState] = useState<Record<string, boolean>>(() =>\r\n\t\tcompute(),\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (typeof window === \"undefined\") return;\r\n\r\n\t\tconst onResize = () => {\r\n\t\t\tconst next = compute();\r\n\t\t\tsetState((prev) => {\r\n\t\t\t\tconst prevKeys = Object.keys(prev);\r\n\t\t\t\tconst nextKeys = Object.keys(next);\r\n\t\t\t\tif (prevKeys.length !== nextKeys.length) return next;\r\n\r\n\t\t\t\tfor (const k of nextKeys) {\r\n\t\t\t\t\tif (prev[k] !== next[k]) return next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn prev;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tonResize();\r\n\t\twindow.addEventListener(\"resize\", onResize);\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"resize\", onResize);\r\n\t\t};\r\n\t}, []);\r\n\r\n\treturn state;\r\n}\r\n\r\ntype TSize = { width: number; height: number };\r\n\r\nexport function useSize(target: any): TSize | undefined {\r\n\tconst [size, setSize] = useState<TSize>();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (typeof window === \"undefined\") return;\r\n\r\n\t\tconst resolveTarget = () => {\r\n\t\t\tif (!target) return null;\r\n\t\t\tif (typeof target === \"function\") return target();\r\n\t\t\tif (typeof target === \"object\" && \"current\" in target) {\r\n\t\t\t\treturn target.current;\r\n\t\t\t}\r\n\t\t\treturn target;\r\n\t\t};\r\n\r\n\t\tconst el = resolveTarget() as HTMLElement | null;\r\n\t\tif (!el) return;\r\n\r\n\t\tconst update = () => {\r\n\t\t\tconst rect = el.getBoundingClientRect();\r\n\t\t\tsetSize({ width: rect.width, height: rect.height });\r\n\t\t};\r\n\r\n\t\tupdate();\r\n\r\n\t\tlet ro: ResizeObserver | undefined;\r\n\t\tif (typeof ResizeObserver !== \"undefined\") {\r\n\t\t\tro = new ResizeObserver(update);\r\n\t\t\tro.observe(el);\r\n\t\t}\r\n\r\n\t\twindow.addEventListener(\"resize\", update);\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"resize\", update);\r\n\t\t\tro?.disconnect();\r\n\t\t};\r\n\t}, [target]);\r\n\r\n\treturn size;\r\n}\r\n\r\nconst defaultObserver = {\r\n\tobserve: undefined,\r\n\tunobserve: undefined,\r\n\tdisconnect: undefined,\r\n};\r\n\r\nexport function useIntersectionObserver(configs?: IntersectionObserverInit) {\r\n\tif (typeof window === \"undefined\") {\r\n\t\treturn {\r\n\t\t\t...defaultObserver,\r\n\t\t};\r\n\t}\r\n\r\n\tconst WM = new WeakMap();\r\n\tconst IO = new IntersectionObserver((entries) => {\r\n\t\tentries.map((entry) => {\r\n\t\t\tconst callback = WM.get(entry.target);\r\n\t\t\tcallback?.(entry.target, entry.isIntersecting);\r\n\t\t});\r\n\t}, configs);\r\n\r\n\tfunction observe(target: HTMLElement, callback: Function) {\r\n\t\tif (WM.get(target)) return;\r\n\t\tWM.set(target, callback);\r\n\t\ttarget && IO.observe(target);\r\n\t}\r\n\r\n\tfunction unobserve(target: HTMLElement) {\r\n\t\ttarget && IO.unobserve(target);\r\n\t\tWM.delete(target);\r\n\t}\r\n\r\n\tfunction disconnect() {\r\n\t\tIO.disconnect();\r\n\t}\r\n\r\n\treturn {\r\n\t\tobserve,\r\n\t\tunobserve,\r\n\t\tdisconnect,\r\n\t};\r\n}\r\n\r\nexport function useResizeObserver() {\r\n\tif (typeof window === \"undefined\") {\r\n\t\treturn {\r\n\t\t\t...defaultObserver,\r\n\t\t};\r\n\t}\r\n\r\n\tconst WM = new WeakMap();\r\n\tconst IO = new ResizeObserver((entries) => {\r\n\t\tentries.map((entry) => {\r\n\t\t\tconst callback = WM.get(entry.target);\r\n\t\t\tcallback?.(entry.target);\r\n\t\t});\r\n\t});\r\n\r\n\tfunction observe(target: HTMLElement, callback: Function) {\r\n\t\tif (WM.get(target)) return;\r\n\t\ttarget && IO.observe(target);\r\n\t\tWM.set(target, callback);\r\n\t}\r\n\r\n\tfunction unobserve(target: HTMLElement) {\r\n\t\ttarget && IO.unobserve(target);\r\n\t\tWM.delete(target);\r\n\t}\r\n\r\n\tfunction disconnect() {\r\n\t\tIO.disconnect();\r\n\t}\r\n\r\n\treturn {\r\n\t\tobserve,\r\n\t\tunobserve,\r\n\t\tdisconnect,\r\n\t};\r\n}\r\n"],"names":["useEffect","useState","useRef"],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sources":["../../../packages/js/hooks.ts"],"sourcesContent":["import {\r\n DependencyList,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\n\r\ntype TMouseEvent = (e: MouseEvent) => void;\r\ntype TKeyboardEvent = (e: KeyboardEvent) => void;\r\ntype TEventOption = {\r\n disabled?: boolean;\r\n};\r\n\r\nconst MouseMoveEvents = new Set<TMouseEvent>();\r\nconst MouseUpEvents = new Set<TMouseEvent>();\r\nconst KeydownEvents = new Set<TKeyboardEvent>();\r\n\r\nlet initialized = false;\r\n\r\nconst initEvents = () => {\r\n if (typeof document === \"undefined\" || initialized) return;\r\n initialized = true;\r\n\r\n const touchable = \"ontouchend\" in document;\r\n const EVENTS: Record<string, any> = {\r\n MOVE: touchable ? \"touchmove\" : \"mousemove\",\r\n UP: touchable ? \"touchend\" : \"mouseup\",\r\n KEYDOWN: \"keydown\",\r\n };\r\n\r\n document.addEventListener(\r\n EVENTS.MOVE,\r\n (e) => {\r\n for (const listener of MouseMoveEvents.values()) {\r\n listener(e);\r\n }\r\n },\r\n { passive: false },\r\n );\r\n\r\n document.addEventListener(EVENTS.UP, (e) => {\r\n for (const listener of MouseUpEvents.values()) {\r\n listener(e);\r\n }\r\n });\r\n\r\n document.addEventListener(EVENTS.KEYDOWN, (e) => {\r\n for (const listener of KeydownEvents.values()) {\r\n listener(e);\r\n }\r\n });\r\n};\r\n\r\nfunction initEventsOnce() {\r\n useEffect(initEvents, []);\r\n}\r\n\r\nexport function useMouseMove(listener: TMouseEvent, options?: TEventOption) {\r\n initEventsOnce();\r\n\r\n useEffect(() => {\r\n if (options?.disabled) return;\r\n\r\n MouseMoveEvents.add(listener);\r\n return () => {\r\n MouseMoveEvents.delete(listener);\r\n };\r\n }, []);\r\n}\r\n\r\nexport function useMouseUp(listener: TMouseEvent, options?: TEventOption) {\r\n initEventsOnce();\r\n\r\n useEffect(() => {\r\n if (options?.disabled) return;\r\n\r\n MouseUpEvents.add(listener);\r\n return () => {\r\n MouseUpEvents.delete(listener);\r\n };\r\n }, []);\r\n}\r\n\r\nexport function useKeydown(listener: TKeyboardEvent, options?: TEventOption) {\r\n initEventsOnce();\r\n\r\n useEffect(() => {\r\n if (options?.disabled) return;\r\n\r\n KeydownEvents.add(listener);\r\n return () => {\r\n KeydownEvents.delete(listener);\r\n };\r\n }, []);\r\n}\r\n\r\nexport function useCreation<T>(factory: () => T, deps: DependencyList) {\r\n return useMemo(factory, deps);\r\n}\r\n\r\nexport function useReactive<T extends object>(initialState: T): T {\r\n const [, setFlag] = useState(0);\r\n const scheduledRef = useRef(false);\r\n const proxyCacheRef = useRef(new WeakMap<object, any>());\r\n const rootRef = useRef<T | null>(null);\r\n const proxyRef = useRef<T | null>(null);\r\n\r\n const notify = () => {\r\n if (scheduledRef.current) return;\r\n scheduledRef.current = true;\r\n\r\n const flush = () => {\r\n scheduledRef.current = false;\r\n setFlag((n) => n + 1);\r\n };\r\n\r\n if (typeof queueMicrotask !== \"undefined\") {\r\n queueMicrotask(flush);\r\n return;\r\n }\r\n\r\n Promise.resolve().then(flush);\r\n };\r\n\r\n const createProxy = (target: any): any => {\r\n if (!target || typeof target !== \"object\") return target;\r\n\r\n if (!Array.isArray(target)) {\r\n const proto = Object.getPrototypeOf(target);\r\n const isPlainObject = proto === Object.prototype || proto === null;\r\n if (!isPlainObject) return target;\r\n }\r\n\r\n const cached = proxyCacheRef.current.get(target);\r\n if (cached) return cached;\r\n\r\n const proxy = new Proxy(target, {\r\n get(t, p, r) {\r\n return createProxy(Reflect.get(t, p, r));\r\n },\r\n set(t, p, v, r) {\r\n const prev = Reflect.get(t, p, r);\r\n const ok = Reflect.set(t, p, v, r);\r\n if (prev !== v) notify();\r\n return ok;\r\n },\r\n deleteProperty(t, p) {\r\n const had = Object.prototype.hasOwnProperty.call(t, p);\r\n const ok = Reflect.deleteProperty(t, p);\r\n if (had) notify();\r\n return ok;\r\n },\r\n });\r\n\r\n proxyCacheRef.current.set(target, proxy);\r\n return proxy;\r\n };\r\n\r\n if (!proxyRef.current) {\r\n rootRef.current = initialState;\r\n proxyRef.current = createProxy(rootRef.current);\r\n }\r\n\r\n return proxyRef.current as T;\r\n}\r\n\r\ntype TSetState<T> = (\r\n value: T | undefined | ((prev: T | undefined) => T),\r\n) => void;\r\n\r\ntype TLocalStorageOptions<T> = {\r\n defaultValue?: T | (() => T);\r\n listenStorageChange?: boolean;\r\n};\r\n\r\nexport function useLocalStorageState<T>(\r\n key: string,\r\n options?: TLocalStorageOptions<T>,\r\n): [T | undefined, TSetState<T>] {\r\n const { defaultValue, listenStorageChange } = options ?? {};\r\n\r\n const getDefault = () => {\r\n return typeof defaultValue === \"function\"\r\n ? (defaultValue as () => T)()\r\n : defaultValue;\r\n };\r\n\r\n const read = (): T | undefined => {\r\n if (typeof window === \"undefined\") return getDefault();\r\n\r\n const raw = window.localStorage.getItem(key);\r\n if (raw === null) return getDefault();\r\n\r\n try {\r\n return JSON.parse(raw) as T;\r\n } catch (e) {\r\n return raw as unknown as T;\r\n }\r\n };\r\n\r\n const [state, setState] = useState<T | undefined>(() => read());\r\n\r\n const set: TSetState<T> = (value) => {\r\n setState((prev) => {\r\n const next =\r\n typeof value === \"function\"\r\n ? (value as (prev: T | undefined) => T)(prev)\r\n : value;\r\n\r\n if (typeof window !== \"undefined\") {\r\n if (next === undefined) {\r\n window.localStorage.removeItem(key);\r\n } else {\r\n window.localStorage.setItem(key, JSON.stringify(next));\r\n }\r\n }\r\n\r\n return next;\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!listenStorageChange) return;\r\n if (typeof window === \"undefined\") return;\r\n\r\n const onStorage = (e: StorageEvent) => {\r\n if (e.key !== key) return;\r\n\r\n if (e.newValue === null) {\r\n setState(getDefault());\r\n return;\r\n }\r\n\r\n try {\r\n setState(JSON.parse(e.newValue) as T);\r\n } catch (err) {\r\n setState(e.newValue as unknown as T);\r\n }\r\n };\r\n\r\n window.addEventListener(\"storage\", onStorage);\r\n return () => {\r\n window.removeEventListener(\"storage\", onStorage);\r\n };\r\n }, [key, listenStorageChange]);\r\n\r\n return [state, set];\r\n}\r\n\r\ntype TResponsiveConfig = Record<string, number>;\r\n\r\nlet responsiveConfig: TResponsiveConfig = {};\r\n\r\nexport function configResponsive(config: TResponsiveConfig) {\r\n responsiveConfig = config;\r\n}\r\n\r\nexport function useResponsive() {\r\n const compute = () => {\r\n if (typeof window === \"undefined\") return {};\r\n const w = window.innerWidth;\r\n const result: Record<string, boolean> = {};\r\n\r\n for (const key in responsiveConfig) {\r\n result[key] = w >= responsiveConfig[key];\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const [state, setState] = useState<Record<string, boolean>>(() =>\r\n compute(),\r\n );\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const onResize = () => {\r\n const next = compute();\r\n setState((prev) => {\r\n const prevKeys = Object.keys(prev);\r\n const nextKeys = Object.keys(next);\r\n if (prevKeys.length !== nextKeys.length) return next;\r\n\r\n for (const k of nextKeys) {\r\n if (prev[k] !== next[k]) return next;\r\n }\r\n\r\n return prev;\r\n });\r\n };\r\n\r\n onResize();\r\n window.addEventListener(\"resize\", onResize);\r\n return () => {\r\n window.removeEventListener(\"resize\", onResize);\r\n };\r\n }, []);\r\n\r\n return state;\r\n}\r\n\r\ntype TSize = { width: number; height: number };\r\n\r\nexport function useSize(target: any): TSize | undefined {\r\n const [size, setSize] = useState<TSize>();\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const resolveTarget = () => {\r\n if (!target) return null;\r\n if (typeof target === \"function\") return target();\r\n if (typeof target === \"object\" && \"current\" in target) {\r\n return target.current;\r\n }\r\n return target;\r\n };\r\n\r\n const el = resolveTarget() as HTMLElement | null;\r\n if (!el) return;\r\n\r\n const update = () => {\r\n const rect = el.getBoundingClientRect();\r\n setSize({ width: rect.width, height: rect.height });\r\n };\r\n\r\n update();\r\n\r\n let ro: ResizeObserver | undefined;\r\n if (typeof ResizeObserver !== \"undefined\") {\r\n ro = new ResizeObserver(update);\r\n ro.observe(el);\r\n }\r\n\r\n window.addEventListener(\"resize\", update);\r\n return () => {\r\n window.removeEventListener(\"resize\", update);\r\n ro?.disconnect();\r\n };\r\n }, [target]);\r\n\r\n return size;\r\n}\r\n\r\nconst defaultObserver = {\r\n observe: undefined,\r\n unobserve: undefined,\r\n disconnect: undefined,\r\n};\r\n\r\nexport function useIntersectionObserver(configs?: IntersectionObserverInit) {\r\n const wmRef = useRef(new WeakMap());\r\n const ioRef = useRef<IntersectionObserver | undefined>(undefined);\r\n\r\n if (typeof window !== \"undefined\" && !ioRef.current) {\r\n ioRef.current = new IntersectionObserver((entries) => {\r\n entries.map((entry) => {\r\n const callback = wmRef.current.get(entry.target);\r\n callback?.(entry.target, entry.isIntersecting);\r\n });\r\n }, configs);\r\n }\r\n\r\n const observe = useCallback((target: HTMLElement, callback: Function) => {\r\n if (!target || !ioRef.current || wmRef.current.get(target)) return;\r\n wmRef.current.set(target, callback);\r\n ioRef.current.observe(target);\r\n }, []);\r\n\r\n const unobserve = useCallback((target: HTMLElement) => {\r\n if (!target || !ioRef.current) return;\r\n ioRef.current.unobserve(target);\r\n wmRef.current.delete(target);\r\n }, []);\r\n\r\n const disconnect = useCallback(() => {\r\n ioRef.current?.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n ioRef.current?.disconnect();\r\n };\r\n }, []);\r\n\r\n if (typeof window === \"undefined\") {\r\n return {\r\n ...defaultObserver,\r\n };\r\n }\r\n\r\n return {\r\n observe,\r\n unobserve,\r\n disconnect,\r\n };\r\n}\r\n\r\nexport function useResizeObserver() {\r\n const wmRef = useRef(new WeakMap());\r\n const ioRef = useRef<ResizeObserver | undefined>(undefined);\r\n\r\n if (typeof window !== \"undefined\" && !ioRef.current) {\r\n ioRef.current = new ResizeObserver((entries) => {\r\n entries.map((entry) => {\r\n const callback = wmRef.current.get(entry.target);\r\n callback?.(entry.target);\r\n });\r\n });\r\n }\r\n\r\n const observe = useCallback((target: HTMLElement, callback: Function) => {\r\n if (!target || !ioRef.current || wmRef.current.get(target)) return;\r\n ioRef.current.observe(target);\r\n wmRef.current.set(target, callback);\r\n }, []);\r\n\r\n const unobserve = useCallback((target: HTMLElement) => {\r\n if (!target || !ioRef.current) return;\r\n ioRef.current.unobserve(target);\r\n wmRef.current.delete(target);\r\n }, []);\r\n\r\n const disconnect = useCallback(() => {\r\n ioRef.current?.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n ioRef.current?.disconnect();\r\n };\r\n }, []);\r\n\r\n if (typeof window === \"undefined\") {\r\n return {\r\n ...defaultObserver,\r\n };\r\n }\r\n\r\n return {\r\n observe,\r\n unobserve,\r\n disconnect,\r\n };\r\n}\r\n"],"names":["useEffect","useState","useRef","useCallback"],"mappings":"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"}
@@ -61,6 +61,7 @@
61
61
  --background-opacity: rgba(255, 255, 255, 0.4);
62
62
  --background-opacity-1: rgba(211, 211, 211, 0.4);
63
63
  --background-opacity-2: rgba(188, 188, 188, 0.15);
64
+ --color-backdrop: rgba(255, 255, 255, 0.4);
64
65
 
65
66
  --color: var(--color-2);
66
67
  --color-main: var(--color-2);
@@ -709,12 +710,14 @@
709
710
  --background-hover: transparent;
710
711
  --background-opacity: #1a1a1a66;
711
712
  --background-opacity-1: rgba(0, 0, 0, 0.4);
713
+ --background-opacity-2: rgba(33, 33, 33, 0.4);
714
+ --color-backdrop: rgba(0, 0, 0, 0.4);
712
715
 
713
716
  --color: var(--color-0);
714
- --color-main: #265ef8;
715
- --color-main-1: #043edf;
716
- --color-main-0: #265ef81f;
717
- --color-main-reverse: var(--white);
717
+ --color-main: #26f8dd;
718
+ --color-main-1: #0eddc3;
719
+ --color-main-0: #0065581f;
720
+ --color-main-reverse: var(--black);
718
721
 
719
722
  --black-0: #00000040;
720
723
  --white-0: #ffffff40;
@@ -753,12 +756,14 @@
753
756
  --background-hover: transparent;
754
757
  --background-opacity: #1a1a1a66;
755
758
  --background-opacity-1: rgba(0, 0, 0, 0.4);
759
+ --background-opacity-2: rgba(33, 33, 33, 0.4);
760
+ --color-backdrop: rgba(0, 0, 0, 0.4);
756
761
 
757
762
  --color: var(--color-0);
758
- --color-main: #265ef8;
759
- --color-main-1: #043edf;
760
- --color-main-0: #265ef81f;
761
- --color-main-reverse: var(--white);
763
+ --color-main: #26f8dd;
764
+ --color-main-1: #0eddc3;
765
+ --color-main-0: #0065581f;
766
+ --color-main-reverse: var(--black);
762
767
 
763
768
  --black-0: #00000040;
764
769
  --white-0: #ffffff40;