@ioca/react 1.4.81 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +31 -31
- package/lib/cjs/components/affix/affix.js.map +1 -1
- package/lib/cjs/components/affix/totop.js.map +1 -1
- package/lib/cjs/components/badge/badge.js.map +1 -1
- package/lib/cjs/components/button/button.js.map +1 -1
- package/lib/cjs/components/button/confirm.js.map +1 -1
- package/lib/cjs/components/button/group.js.map +1 -1
- package/lib/cjs/components/button/toggle.js.map +1 -1
- package/lib/cjs/components/card/card.js.map +1 -1
- package/lib/cjs/components/checkbox/checkbox.js.map +1 -1
- package/lib/cjs/components/checkbox/item.js.map +1 -1
- package/lib/cjs/components/collapse/collapse.js.map +1 -1
- package/lib/cjs/components/collapse/item.js.map +1 -1
- package/lib/cjs/components/datagrid/cell.js.map +1 -1
- package/lib/cjs/components/datagrid/datagrid.js.map +1 -1
- package/lib/cjs/components/datagrid/resize.js.map +1 -1
- package/lib/cjs/components/datagrid/row.js.map +1 -1
- package/lib/cjs/components/datagrid/sorter.js.map +1 -1
- package/lib/cjs/components/description/description.js.map +1 -1
- package/lib/cjs/components/drawer/drawer.js.map +1 -1
- package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
- package/lib/cjs/components/dropdown/item.js.map +1 -1
- package/lib/cjs/components/editor/controls.js.map +1 -1
- package/lib/cjs/components/editor/editor.js.map +1 -1
- package/lib/cjs/components/flex/flex.js.map +1 -1
- package/lib/cjs/components/form/context.js.map +1 -1
- package/lib/cjs/components/form/field.js.map +1 -1
- package/lib/cjs/components/form/form.js.map +1 -1
- package/lib/cjs/components/form/useConfig.js.map +1 -1
- package/lib/cjs/components/form/useForm.js.map +1 -1
- package/lib/cjs/components/icon/icon.js.map +1 -1
- package/lib/cjs/components/image/image.js.map +1 -1
- package/lib/cjs/components/image/list.js.map +1 -1
- package/lib/cjs/components/input/container.js.map +1 -1
- package/lib/cjs/components/input/input.js.map +1 -1
- package/lib/cjs/components/input/number.js +2 -1
- package/lib/cjs/components/input/number.js.map +1 -1
- package/lib/cjs/components/input/range.js +2 -1
- package/lib/cjs/components/input/range.js.map +1 -1
- package/lib/cjs/components/input/textarea.js.map +1 -1
- package/lib/cjs/components/list/item.js.map +1 -1
- package/lib/cjs/components/list/list.js.map +1 -1
- package/lib/cjs/components/loading/loading.js.map +1 -1
- package/lib/cjs/components/message/message.js.map +1 -1
- package/lib/cjs/components/modal/content.js.map +1 -1
- package/lib/cjs/components/modal/context.js.map +1 -1
- package/lib/cjs/components/modal/hookModal.js.map +1 -1
- package/lib/cjs/components/modal/modal.js.map +1 -1
- package/lib/cjs/components/modal/useModal.js.map +1 -1
- package/lib/cjs/components/pagination/page.js.map +1 -1
- package/lib/cjs/components/pagination/pagination.js.map +1 -1
- package/lib/cjs/components/picker/colors/footer.js.map +1 -1
- package/lib/cjs/components/picker/colors/handle.js.map +1 -1
- package/lib/cjs/components/picker/colors/index.js.map +1 -1
- package/lib/cjs/components/picker/dates/dates.js.map +1 -1
- package/lib/cjs/components/picker/dates/index.js.map +1 -1
- package/lib/cjs/components/picker/dates/panel.js.map +1 -1
- package/lib/cjs/components/picker/time/index.js.map +1 -1
- package/lib/cjs/components/picker/time/item.js.map +1 -1
- package/lib/cjs/components/picker/time/panel.js.map +1 -1
- package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
- package/lib/cjs/components/popup/content.js.map +1 -1
- package/lib/cjs/components/popup/popup.js +141 -101
- package/lib/cjs/components/popup/popup.js.map +1 -1
- package/lib/cjs/components/progress/circle.js.map +1 -1
- package/lib/cjs/components/progress/line.js.map +1 -1
- package/lib/cjs/components/progress/progress.js.map +1 -1
- package/lib/cjs/components/radio/item.js.map +1 -1
- package/lib/cjs/components/radio/radio.js.map +1 -1
- package/lib/cjs/components/resizable/resizable.js.map +1 -1
- package/lib/cjs/components/river/river.js.map +1 -1
- package/lib/cjs/components/select/options.js.map +1 -1
- package/lib/cjs/components/select/select.js.map +1 -1
- package/lib/cjs/components/step/divider.js.map +1 -1
- package/lib/cjs/components/step/item.js.map +1 -1
- package/lib/cjs/components/step/step.js.map +1 -1
- package/lib/cjs/components/swiper/item.js.map +1 -1
- package/lib/cjs/components/swiper/swiper.js.map +1 -1
- package/lib/cjs/components/tabs/item.js.map +1 -1
- package/lib/cjs/components/tabs/tabs.js.map +1 -1
- package/lib/cjs/components/tag/tag.js.map +1 -1
- package/lib/cjs/components/text/highlight.js.map +1 -1
- package/lib/cjs/components/text/number.js.map +1 -1
- package/lib/cjs/components/text/text.js.map +1 -1
- package/lib/cjs/components/text/time.js.map +1 -1
- package/lib/cjs/components/tree/item.js.map +1 -1
- package/lib/cjs/components/tree/tree.js.map +1 -1
- package/lib/cjs/components/upload/renderFile.js.map +1 -1
- package/lib/cjs/components/upload/upload.js.map +1 -1
- package/lib/cjs/components/utils/empty/index.js.map +1 -1
- package/lib/cjs/components/utils/helpericon/helpericon.js.map +1 -1
- package/lib/cjs/components/video/video.js.map +1 -1
- package/lib/cjs/js/hooks.js +0 -64
- package/lib/cjs/js/hooks.js.map +1 -1
- package/lib/cjs/js/usePreview/content.js.map +1 -1
- package/lib/cjs/js/usePreview/index.js.map +1 -1
- package/lib/cjs/js/usePreview/renderFile.js.map +1 -1
- package/lib/cjs/js/usePreview/type.js.map +1 -1
- package/lib/cjs/js/useRipple/index.js +6 -6
- package/lib/cjs/js/useRipple/index.js.map +1 -1
- package/lib/cjs/js/useTheme/index.js +138 -20
- package/lib/cjs/js/useTheme/index.js.map +1 -1
- package/lib/cjs/js/utils.js.map +1 -1
- package/lib/css/colors.css +781 -0
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/css/input.css +192 -0
- package/lib/css/reset.css +153 -0
- package/lib/css/tokens.css +12 -0
- package/lib/css/utilities.css +1974 -0
- package/lib/es/components/affix/affix.js.map +1 -1
- package/lib/es/components/affix/totop.js.map +1 -1
- package/lib/es/components/badge/badge.js.map +1 -1
- package/lib/es/components/button/button.js.map +1 -1
- package/lib/es/components/button/confirm.js.map +1 -1
- package/lib/es/components/button/group.js.map +1 -1
- package/lib/es/components/button/toggle.js.map +1 -1
- package/lib/es/components/card/card.js.map +1 -1
- package/lib/es/components/checkbox/checkbox.js.map +1 -1
- package/lib/es/components/checkbox/item.js.map +1 -1
- package/lib/es/components/collapse/collapse.js.map +1 -1
- package/lib/es/components/collapse/item.js.map +1 -1
- package/lib/es/components/datagrid/cell.js.map +1 -1
- package/lib/es/components/datagrid/datagrid.js.map +1 -1
- package/lib/es/components/datagrid/resize.js.map +1 -1
- package/lib/es/components/datagrid/row.js.map +1 -1
- package/lib/es/components/datagrid/sorter.js.map +1 -1
- package/lib/es/components/description/description.js.map +1 -1
- package/lib/es/components/drawer/drawer.js.map +1 -1
- package/lib/es/components/dropdown/dropdown.js.map +1 -1
- package/lib/es/components/dropdown/item.js.map +1 -1
- package/lib/es/components/editor/controls.js.map +1 -1
- package/lib/es/components/editor/editor.js.map +1 -1
- package/lib/es/components/flex/flex.js.map +1 -1
- package/lib/es/components/form/context.js.map +1 -1
- package/lib/es/components/form/field.js.map +1 -1
- package/lib/es/components/form/form.js.map +1 -1
- package/lib/es/components/form/useConfig.js.map +1 -1
- package/lib/es/components/form/useForm.js.map +1 -1
- package/lib/es/components/icon/icon.js.map +1 -1
- package/lib/es/components/image/image.js.map +1 -1
- package/lib/es/components/image/list.js.map +1 -1
- package/lib/es/components/input/container.js.map +1 -1
- package/lib/es/components/input/input.js.map +1 -1
- package/lib/es/components/input/number.js +2 -1
- package/lib/es/components/input/number.js.map +1 -1
- package/lib/es/components/input/range.js +2 -1
- package/lib/es/components/input/range.js.map +1 -1
- package/lib/es/components/input/textarea.js.map +1 -1
- package/lib/es/components/list/item.js.map +1 -1
- package/lib/es/components/list/list.js.map +1 -1
- package/lib/es/components/loading/loading.js.map +1 -1
- package/lib/es/components/message/message.js.map +1 -1
- package/lib/es/components/modal/content.js.map +1 -1
- package/lib/es/components/modal/context.js.map +1 -1
- package/lib/es/components/modal/hookModal.js.map +1 -1
- package/lib/es/components/modal/modal.js.map +1 -1
- package/lib/es/components/modal/useModal.js.map +1 -1
- package/lib/es/components/pagination/page.js.map +1 -1
- package/lib/es/components/pagination/pagination.js.map +1 -1
- package/lib/es/components/picker/colors/footer.js.map +1 -1
- package/lib/es/components/picker/colors/handle.js.map +1 -1
- package/lib/es/components/picker/colors/index.js.map +1 -1
- package/lib/es/components/picker/dates/dates.js.map +1 -1
- package/lib/es/components/picker/dates/index.js.map +1 -1
- package/lib/es/components/picker/dates/panel.js.map +1 -1
- package/lib/es/components/picker/time/index.js.map +1 -1
- package/lib/es/components/picker/time/item.js.map +1 -1
- package/lib/es/components/picker/time/panel.js.map +1 -1
- package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
- package/lib/es/components/popup/content.js.map +1 -1
- package/lib/es/components/popup/popup.js +143 -103
- package/lib/es/components/popup/popup.js.map +1 -1
- package/lib/es/components/progress/circle.js.map +1 -1
- package/lib/es/components/progress/line.js.map +1 -1
- package/lib/es/components/progress/progress.js.map +1 -1
- package/lib/es/components/radio/item.js.map +1 -1
- package/lib/es/components/radio/radio.js.map +1 -1
- package/lib/es/components/resizable/resizable.js.map +1 -1
- package/lib/es/components/river/river.js.map +1 -1
- package/lib/es/components/select/options.js.map +1 -1
- package/lib/es/components/select/select.js.map +1 -1
- package/lib/es/components/step/divider.js.map +1 -1
- package/lib/es/components/step/item.js.map +1 -1
- package/lib/es/components/step/step.js.map +1 -1
- package/lib/es/components/swiper/item.js.map +1 -1
- package/lib/es/components/swiper/swiper.js.map +1 -1
- package/lib/es/components/tabs/item.js.map +1 -1
- package/lib/es/components/tabs/tabs.js.map +1 -1
- package/lib/es/components/tag/tag.js.map +1 -1
- package/lib/es/components/text/highlight.js.map +1 -1
- package/lib/es/components/text/number.js.map +1 -1
- package/lib/es/components/text/text.js.map +1 -1
- package/lib/es/components/text/time.js.map +1 -1
- package/lib/es/components/tree/item.js.map +1 -1
- package/lib/es/components/tree/tree.js.map +1 -1
- package/lib/es/components/upload/renderFile.js.map +1 -1
- package/lib/es/components/upload/upload.js.map +1 -1
- package/lib/es/components/utils/empty/index.js.map +1 -1
- package/lib/es/components/utils/helpericon/helpericon.js.map +1 -1
- package/lib/es/components/video/video.js.map +1 -1
- package/lib/es/js/hooks.js +1 -64
- package/lib/es/js/hooks.js.map +1 -1
- package/lib/es/js/usePreview/content.js.map +1 -1
- package/lib/es/js/usePreview/index.js.map +1 -1
- package/lib/es/js/usePreview/renderFile.js.map +1 -1
- package/lib/es/js/usePreview/type.js.map +1 -1
- package/lib/es/js/useRipple/index.js +6 -6
- package/lib/es/js/useRipple/index.js.map +1 -1
- package/lib/es/js/useTheme/index.js +139 -21
- package/lib/es/js/useTheme/index.js.map +1 -1
- package/lib/es/js/utils.js.map +1 -1
- package/lib/index.js +289 -191
- package/lib/types/components/drawer/drawer.d.ts +2 -1
- package/lib/types/js/useTheme/index.d.ts +2 -1
- package/package.json +98 -99
package/lib/index.js
CHANGED
|
@@ -35,12 +35,12 @@ function triggerRipple(target, e) {
|
|
|
35
35
|
const [$box, $ripple] = createRipple();
|
|
36
36
|
const rect = target.getBoundingClientRect();
|
|
37
37
|
const size = Math.max(rect.width, rect.height) * 2;
|
|
38
|
-
$ripple.style.cssText = `
|
|
39
|
-
left: ${e.pageX - rect.left}px;
|
|
40
|
-
top: ${e.pageY - rect.top}px;
|
|
41
|
-
width: ${size}px;
|
|
42
|
-
height: ${size}px;
|
|
43
|
-
transition: all ${TIMEOUT / 1000}s;
|
|
38
|
+
$ripple.style.cssText = `
|
|
39
|
+
left: ${e.pageX - rect.left}px;
|
|
40
|
+
top: ${e.pageY - rect.top}px;
|
|
41
|
+
width: ${size}px;
|
|
42
|
+
height: ${size}px;
|
|
43
|
+
transition: all ${TIMEOUT / 1000}s;
|
|
44
44
|
`;
|
|
45
45
|
target.insertAdjacentElement("afterbegin", $box);
|
|
46
46
|
target.offsetHeight;
|
|
@@ -192,69 +192,6 @@ function useReactive(initialState) {
|
|
|
192
192
|
}
|
|
193
193
|
return proxyRef.current;
|
|
194
194
|
}
|
|
195
|
-
function useLocalStorageState(key, options) {
|
|
196
|
-
const { defaultValue, listenStorageChange } = options ?? {};
|
|
197
|
-
const getDefault = () => {
|
|
198
|
-
return typeof defaultValue === "function"
|
|
199
|
-
? defaultValue()
|
|
200
|
-
: defaultValue;
|
|
201
|
-
};
|
|
202
|
-
const read = () => {
|
|
203
|
-
if (typeof window === "undefined")
|
|
204
|
-
return getDefault();
|
|
205
|
-
const raw = window.localStorage.getItem(key);
|
|
206
|
-
if (raw === null)
|
|
207
|
-
return getDefault();
|
|
208
|
-
try {
|
|
209
|
-
return JSON.parse(raw);
|
|
210
|
-
}
|
|
211
|
-
catch (e) {
|
|
212
|
-
return raw;
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
const [state, setState] = useState(() => read());
|
|
216
|
-
const set = (value) => {
|
|
217
|
-
setState((prev) => {
|
|
218
|
-
const next = typeof value === "function"
|
|
219
|
-
? value(prev)
|
|
220
|
-
: value;
|
|
221
|
-
if (typeof window !== "undefined") {
|
|
222
|
-
if (next === undefined) {
|
|
223
|
-
window.localStorage.removeItem(key);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
window.localStorage.setItem(key, JSON.stringify(next));
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return next;
|
|
230
|
-
});
|
|
231
|
-
};
|
|
232
|
-
useEffect(() => {
|
|
233
|
-
if (!listenStorageChange)
|
|
234
|
-
return;
|
|
235
|
-
if (typeof window === "undefined")
|
|
236
|
-
return;
|
|
237
|
-
const onStorage = (e) => {
|
|
238
|
-
if (e.key !== key)
|
|
239
|
-
return;
|
|
240
|
-
if (e.newValue === null) {
|
|
241
|
-
setState(getDefault());
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
try {
|
|
245
|
-
setState(JSON.parse(e.newValue));
|
|
246
|
-
}
|
|
247
|
-
catch (err) {
|
|
248
|
-
setState(e.newValue);
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
window.addEventListener("storage", onStorage);
|
|
252
|
-
return () => {
|
|
253
|
-
window.removeEventListener("storage", onStorage);
|
|
254
|
-
};
|
|
255
|
-
}, [key, listenStorageChange]);
|
|
256
|
-
return [state, set];
|
|
257
|
-
}
|
|
258
195
|
function useSize(target) {
|
|
259
196
|
const [size, setSize] = useState();
|
|
260
197
|
useEffect(() => {
|
|
@@ -1361,6 +1298,20 @@ const Content$2 = forwardRef((props, ref) => {
|
|
|
1361
1298
|
return createPortal(content, container);
|
|
1362
1299
|
});
|
|
1363
1300
|
|
|
1301
|
+
const REACT_FORWARD_REF = Symbol.for("react.forward_ref");
|
|
1302
|
+
const REACT_FRAGMENT = Symbol.for("react.fragment");
|
|
1303
|
+
const canAttachRef = (el) => {
|
|
1304
|
+
if (!isValidElement(el))
|
|
1305
|
+
return false;
|
|
1306
|
+
const t = el.type;
|
|
1307
|
+
if (typeof t === "string")
|
|
1308
|
+
return true;
|
|
1309
|
+
if (t?.prototype?.isReactComponent)
|
|
1310
|
+
return true;
|
|
1311
|
+
if (t?.$$typeof === REACT_FORWARD_REF)
|
|
1312
|
+
return true;
|
|
1313
|
+
return false;
|
|
1314
|
+
};
|
|
1364
1315
|
function Popup(props) {
|
|
1365
1316
|
const { visible = false, content, trigger = "hover", gap = 12, offset = 8, position = "top", showDelay = 16, hideDelay = 12, touchable, arrow = true, align = "center", fitSize, disabled, style, className, children, onVisibleChange, } = props;
|
|
1366
1317
|
const triggerRef = useRef(null);
|
|
@@ -1624,55 +1575,135 @@ function Popup(props) {
|
|
|
1624
1575
|
toggleRef.current = handleToggle;
|
|
1625
1576
|
const doHide = useMemo(() => () => hideRef.current(), []);
|
|
1626
1577
|
const doToggle = useMemo(() => (action) => toggleRef.current(action), []);
|
|
1627
|
-
const
|
|
1628
|
-
return {
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
},
|
|
1636
|
-
focus: {
|
|
1637
|
-
onFocus: () => doToggle(true),
|
|
1638
|
-
onBlur: () => doToggle(false),
|
|
1639
|
-
},
|
|
1640
|
-
contextmenu: {
|
|
1641
|
-
onContextMenu: (e) => {
|
|
1642
|
-
e.preventDefault();
|
|
1643
|
-
e.stopPropagation();
|
|
1644
|
-
pointRef.current = {
|
|
1645
|
-
pageX: e.pageX,
|
|
1646
|
-
pageY: e.pageY,
|
|
1647
|
-
};
|
|
1648
|
-
if (showRef.current) {
|
|
1649
|
-
ensureBaseStyle();
|
|
1650
|
-
computePointPosition();
|
|
1651
|
-
return;
|
|
1578
|
+
const mergeRefs = useMemo(() => {
|
|
1579
|
+
return (...refs) => {
|
|
1580
|
+
return (node) => {
|
|
1581
|
+
for (const ref of refs) {
|
|
1582
|
+
if (!ref)
|
|
1583
|
+
continue;
|
|
1584
|
+
if (typeof ref === "function") {
|
|
1585
|
+
ref(node);
|
|
1652
1586
|
}
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
setShow(true);
|
|
1659
|
-
timerRef.current = setTimeout(() => {
|
|
1660
|
-
if (phaseRef.current !== "showing")
|
|
1661
|
-
return;
|
|
1662
|
-
if (!contentRef.current)
|
|
1663
|
-
return;
|
|
1664
|
-
ensureBaseStyle();
|
|
1665
|
-
computePointPosition();
|
|
1666
|
-
setContentVisible(true);
|
|
1667
|
-
clearTimer();
|
|
1668
|
-
latestRef.current.onVisibleChange?.(true);
|
|
1669
|
-
phaseRef.current = "";
|
|
1670
|
-
}, latestRef.current.showDelay);
|
|
1671
|
-
},
|
|
1672
|
-
},
|
|
1673
|
-
none: {},
|
|
1587
|
+
else {
|
|
1588
|
+
ref.current = node;
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
};
|
|
1674
1592
|
};
|
|
1593
|
+
}, []);
|
|
1594
|
+
const triggerEvents = useMemo(() => {
|
|
1595
|
+
const setTriggerEl = (e) => {
|
|
1596
|
+
const el = e?.currentTarget;
|
|
1597
|
+
if (el)
|
|
1598
|
+
triggerRef.current = el;
|
|
1599
|
+
};
|
|
1600
|
+
switch (trigger) {
|
|
1601
|
+
case "click":
|
|
1602
|
+
return {
|
|
1603
|
+
onClick: (e) => {
|
|
1604
|
+
setTriggerEl(e);
|
|
1605
|
+
doToggle(true);
|
|
1606
|
+
},
|
|
1607
|
+
};
|
|
1608
|
+
case "hover":
|
|
1609
|
+
return {
|
|
1610
|
+
onMouseEnter: (e) => {
|
|
1611
|
+
setTriggerEl(e);
|
|
1612
|
+
doToggle(true);
|
|
1613
|
+
},
|
|
1614
|
+
onMouseLeave: (e) => {
|
|
1615
|
+
setTriggerEl(e);
|
|
1616
|
+
doToggle(false);
|
|
1617
|
+
},
|
|
1618
|
+
};
|
|
1619
|
+
case "focus":
|
|
1620
|
+
return {
|
|
1621
|
+
onFocus: (e) => {
|
|
1622
|
+
setTriggerEl(e);
|
|
1623
|
+
doToggle(true);
|
|
1624
|
+
},
|
|
1625
|
+
onBlur: (e) => {
|
|
1626
|
+
setTriggerEl(e);
|
|
1627
|
+
doToggle(false);
|
|
1628
|
+
},
|
|
1629
|
+
};
|
|
1630
|
+
case "contextmenu":
|
|
1631
|
+
return {
|
|
1632
|
+
onContextMenu: (e) => {
|
|
1633
|
+
e.preventDefault();
|
|
1634
|
+
e.stopPropagation();
|
|
1635
|
+
setTriggerEl(e);
|
|
1636
|
+
pointRef.current = {
|
|
1637
|
+
pageX: e.pageX,
|
|
1638
|
+
pageY: e.pageY,
|
|
1639
|
+
};
|
|
1640
|
+
if (showRef.current) {
|
|
1641
|
+
ensureBaseStyle();
|
|
1642
|
+
computePointPosition();
|
|
1643
|
+
return;
|
|
1644
|
+
}
|
|
1645
|
+
clearAllTimers();
|
|
1646
|
+
phaseRef.current = "showing";
|
|
1647
|
+
lastPosRef.current = null;
|
|
1648
|
+
lastArrowRef.current = null;
|
|
1649
|
+
arrowElRef.current = null;
|
|
1650
|
+
setShow(true);
|
|
1651
|
+
timerRef.current = setTimeout(() => {
|
|
1652
|
+
if (phaseRef.current !== "showing")
|
|
1653
|
+
return;
|
|
1654
|
+
if (!contentRef.current)
|
|
1655
|
+
return;
|
|
1656
|
+
ensureBaseStyle();
|
|
1657
|
+
computePointPosition();
|
|
1658
|
+
setContentVisible(true);
|
|
1659
|
+
clearTimer();
|
|
1660
|
+
latestRef.current.onVisibleChange?.(true);
|
|
1661
|
+
phaseRef.current = "";
|
|
1662
|
+
}, latestRef.current.showDelay);
|
|
1663
|
+
},
|
|
1664
|
+
};
|
|
1665
|
+
default:
|
|
1666
|
+
return {};
|
|
1667
|
+
}
|
|
1675
1668
|
}, [doToggle]);
|
|
1669
|
+
const triggerNode = useMemo(() => {
|
|
1670
|
+
const events = triggerEvents;
|
|
1671
|
+
const eventKeys = Object.keys(events);
|
|
1672
|
+
const items = Children.toArray(children);
|
|
1673
|
+
let attachedRef = false;
|
|
1674
|
+
let cloned = false;
|
|
1675
|
+
const nextItems = items.map((item) => {
|
|
1676
|
+
if (!isValidElement(item))
|
|
1677
|
+
return item;
|
|
1678
|
+
if (item.type === REACT_FRAGMENT)
|
|
1679
|
+
return item;
|
|
1680
|
+
const attachRef = !attachedRef && canAttachRef(item);
|
|
1681
|
+
if (attachRef)
|
|
1682
|
+
attachedRef = true;
|
|
1683
|
+
if (!attachRef && eventKeys.length === 0)
|
|
1684
|
+
return item;
|
|
1685
|
+
const patchedProps = {};
|
|
1686
|
+
for (const evt of eventKeys) {
|
|
1687
|
+
const ours = events[evt];
|
|
1688
|
+
const theirs = item.props?.[evt];
|
|
1689
|
+
patchedProps[evt] =
|
|
1690
|
+
typeof theirs === "function"
|
|
1691
|
+
? (e) => {
|
|
1692
|
+
ours(e);
|
|
1693
|
+
theirs(e);
|
|
1694
|
+
}
|
|
1695
|
+
: ours;
|
|
1696
|
+
}
|
|
1697
|
+
if (attachRef) {
|
|
1698
|
+
patchedProps.ref = mergeRefs(item.ref, triggerRef);
|
|
1699
|
+
}
|
|
1700
|
+
cloned = true;
|
|
1701
|
+
return cloneElement(item, patchedProps);
|
|
1702
|
+
});
|
|
1703
|
+
if (!cloned)
|
|
1704
|
+
return children;
|
|
1705
|
+
return nextItems.length === 1 ? nextItems[0] : jsx(Fragment, { children: nextItems });
|
|
1706
|
+
}, [children, triggerEvents, mergeRefs]);
|
|
1676
1707
|
const contentTouch = useMemo(() => {
|
|
1677
1708
|
if (!touchable)
|
|
1678
1709
|
return {};
|
|
@@ -1753,61 +1784,7 @@ function Popup(props) {
|
|
|
1753
1784
|
window.removeEventListener("scroll", onScrollOrResize, true);
|
|
1754
1785
|
};
|
|
1755
1786
|
}, [show]);
|
|
1756
|
-
|
|
1757
|
-
return (node) => {
|
|
1758
|
-
for (const ref of refs) {
|
|
1759
|
-
if (!ref)
|
|
1760
|
-
continue;
|
|
1761
|
-
if (typeof ref === "function") {
|
|
1762
|
-
ref(node);
|
|
1763
|
-
}
|
|
1764
|
-
else {
|
|
1765
|
-
ref.current = node;
|
|
1766
|
-
}
|
|
1767
|
-
}
|
|
1768
|
-
};
|
|
1769
|
-
};
|
|
1770
|
-
return (jsxs(Fragment, { children: [(() => {
|
|
1771
|
-
const events = eventMaps[trigger];
|
|
1772
|
-
const items = Children.toArray(children);
|
|
1773
|
-
const canAttachRef = (el) => {
|
|
1774
|
-
if (!isValidElement(el))
|
|
1775
|
-
return false;
|
|
1776
|
-
const t = el.type;
|
|
1777
|
-
if (typeof t === "string")
|
|
1778
|
-
return true;
|
|
1779
|
-
if (t?.prototype?.isReactComponent)
|
|
1780
|
-
return true;
|
|
1781
|
-
if (t?.$$typeof === Symbol.for("react.forward_ref"))
|
|
1782
|
-
return true;
|
|
1783
|
-
return false;
|
|
1784
|
-
};
|
|
1785
|
-
if (items.length !== 1) {
|
|
1786
|
-
return (jsx("div", { ref: triggerRef, ...events, className: 'i-popup-trigger', style: { display: "inline-block" }, children: children }));
|
|
1787
|
-
}
|
|
1788
|
-
const only = items[0];
|
|
1789
|
-
if (!isValidElement(only) || !canAttachRef(only)) {
|
|
1790
|
-
return (jsx("div", { ref: triggerRef, ...events, className: 'i-popup-trigger', style: { display: "inline-block" }, children: only }));
|
|
1791
|
-
}
|
|
1792
|
-
const { className: childClassName, ...restProps } = only.props;
|
|
1793
|
-
const nextProps = { ...restProps };
|
|
1794
|
-
for (const evt of Object.keys(events)) {
|
|
1795
|
-
const theirs = restProps[evt];
|
|
1796
|
-
const ours = events[evt];
|
|
1797
|
-
nextProps[evt] =
|
|
1798
|
-
typeof theirs === "function"
|
|
1799
|
-
? (e) => {
|
|
1800
|
-
ours(e);
|
|
1801
|
-
theirs(e);
|
|
1802
|
-
}
|
|
1803
|
-
: ours;
|
|
1804
|
-
}
|
|
1805
|
-
return cloneElement(only, {
|
|
1806
|
-
ref: mergeRefs(only.ref, triggerRef),
|
|
1807
|
-
className: childClassName,
|
|
1808
|
-
...nextProps,
|
|
1809
|
-
});
|
|
1810
|
-
})(), show && (jsx(Content$2, { ref: contentRef, arrow: arrow && trigger !== "contextmenu", style: {
|
|
1787
|
+
return (jsxs(Fragment, { children: [triggerNode, show && (jsx(Content$2, { ref: contentRef, arrow: arrow && trigger !== "contextmenu", style: {
|
|
1811
1788
|
...style,
|
|
1812
1789
|
position: "fixed",
|
|
1813
1790
|
}, className: className, ...contentTouch, trigger: triggerRef.current, children: content }))] }));
|
|
@@ -3058,7 +3035,7 @@ function InputContainer(props) {
|
|
|
3058
3035
|
}
|
|
3059
3036
|
|
|
3060
3037
|
const Number$1 = (props) => {
|
|
3061
|
-
const { ref, label, name, value = "", labelInline, step = 1, min = -Infinity, max = Infinity, thousand, precision, type, className, width, status = "normal", append, border, prepend, disabled, message, tip, hideControl, showMax, style, onChange, onEnter, onInput, onBlur, ...restProps } = props;
|
|
3038
|
+
const { ref, label, name, value = "", labelInline, step = 1, min = -Infinity, max = Infinity, thousand, precision, type, className, width, status = "normal", append, border, underline, prepend, disabled, message, tip, hideControl, showMax, style, onChange, onEnter, onInput, onBlur, ...restProps } = props;
|
|
3062
3039
|
const [inputValue, setInputValue] = useState(value === undefined || value === null ? "" : String(value));
|
|
3063
3040
|
const formatOut = (num) => {
|
|
3064
3041
|
const v = clamp(num, min, max);
|
|
@@ -3153,11 +3130,12 @@ const Number$1 = (props) => {
|
|
|
3153
3130
|
return (jsx(InputContainer, { label: label, labelInline: labelInline, className: className, style: { width, ...style }, tip: message ?? tip, status: status, children: jsxs("div", { className: classNames("i-input-item", {
|
|
3154
3131
|
[`i-input-${status}`]: status !== "normal",
|
|
3155
3132
|
"i-input-borderless": !border,
|
|
3133
|
+
"i-input-underline": underline,
|
|
3156
3134
|
}), children: [prepend && jsx("div", { className: 'i-input-prepend', children: prepend }), !hideControl && !disabled && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: () => handleOperate(-step) })), jsx("input", { ...inputProps }), !hideControl && !disabled && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: () => handleOperate(step) })), showMax && max && !disabled && (jsx(Helpericon, { active: true, icon: jsx(KeyboardDoubleArrowUpRound, {}), onClick: handleMax })), append && jsx("div", { className: 'i-input-append', children: append })] }) }));
|
|
3157
3135
|
};
|
|
3158
3136
|
|
|
3159
3137
|
const Range = (props) => {
|
|
3160
|
-
const { label, name, value, labelInline, min = -Infinity, max = Infinity, type, className, status = "normal", message, tip, append, prepend, step = 1, width, thousand, precision, hideControl, placeholder, border, autoSwitch, onChange, onBlur, style, ...restProps } = props;
|
|
3138
|
+
const { label, name, value, labelInline, min = -Infinity, max = Infinity, type, className, status = "normal", message, tip, append, prepend, step = 1, width, thousand, precision, hideControl, placeholder, border, underline, autoSwitch, onChange, onBlur, style, ...restProps } = props;
|
|
3161
3139
|
const [rangeValue, setRangeValue] = useState(value);
|
|
3162
3140
|
const getRangeNumber = (v) => clamp(v, min, max);
|
|
3163
3141
|
const getFormatNumber = (v) => formatNumber(v, { precision, thousand });
|
|
@@ -3216,6 +3194,7 @@ const Range = (props) => {
|
|
|
3216
3194
|
return (jsx(InputContainer, { label: label, labelInline: labelInline, className: className, style: { width, ...style }, tip: message ?? tip, status: status, children: jsxs("div", { className: classNames("i-input-item", {
|
|
3217
3195
|
[`i-input-${status}`]: status !== "normal",
|
|
3218
3196
|
"i-input-borderless": !border,
|
|
3197
|
+
"i-input-underline": underline,
|
|
3219
3198
|
}), children: [prepend && jsx("div", { className: 'i-input-prepend', children: prepend }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: (e) => handleOperate(e, -step, 0) })), jsx("input", { value: rangeValue?.[0] || "", placeholder: placeholder?.[0], ...inputProps, onBlur: handleBlur, onChange: (e) => handleChange(e, 0) }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: (e) => handleOperate(e, step, 0) })), jsx(Helpericon, { active: true, icon: jsx(SyncAltRound, {}), style: { margin: 0 }, onClick: handleSwitch }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(MinusRound, {}), onClick: (e) => handleOperate(e, -step, 1) })), jsx("input", { value: rangeValue?.[1] || "", placeholder: placeholder?.[1], ...inputProps, onBlur: handleBlur, onChange: (e) => handleChange(e, 1) }), !hideControl && (jsx(Helpericon, { active: true, icon: jsx(PlusRound, {}), onClick: (e) => handleOperate(e, step, 1) })), append && jsx("div", { className: 'i-input-append', children: append })] }) }));
|
|
3220
3199
|
};
|
|
3221
3200
|
|
|
@@ -5115,31 +5094,150 @@ const Upload = (props) => {
|
|
|
5115
5094
|
}) }), uploadMessage && (jsx("span", { className: 'i-upload-message', children: uploadMessage })), fileList.length < limit && (jsxs("label", { children: [jsx("input", { ...restProps, disabled: disabled, ref: inputRef, type: 'file', className: 'i-input-file-hidden', multiple: multiple, onChange: handleChange }), trigger] }))] }) }));
|
|
5116
5095
|
};
|
|
5117
5096
|
|
|
5097
|
+
const stores = new Map();
|
|
5098
|
+
function readTheme(key, defaultValue) {
|
|
5099
|
+
if (typeof window === "undefined")
|
|
5100
|
+
return defaultValue;
|
|
5101
|
+
const raw = window.localStorage.getItem(key);
|
|
5102
|
+
if (raw === null)
|
|
5103
|
+
return defaultValue;
|
|
5104
|
+
try {
|
|
5105
|
+
return JSON.parse(raw);
|
|
5106
|
+
}
|
|
5107
|
+
catch {
|
|
5108
|
+
return raw;
|
|
5109
|
+
}
|
|
5110
|
+
}
|
|
5111
|
+
function writeTheme(key, value) {
|
|
5112
|
+
if (typeof window === "undefined")
|
|
5113
|
+
return;
|
|
5114
|
+
if (value === undefined) {
|
|
5115
|
+
window.localStorage.removeItem(key);
|
|
5116
|
+
}
|
|
5117
|
+
else {
|
|
5118
|
+
window.localStorage.setItem(key, JSON.stringify(value));
|
|
5119
|
+
}
|
|
5120
|
+
}
|
|
5121
|
+
function applyThemeToDocument(theme) {
|
|
5122
|
+
if (typeof document === "undefined")
|
|
5123
|
+
return;
|
|
5124
|
+
if (!theme)
|
|
5125
|
+
return;
|
|
5126
|
+
const cls = document.documentElement.classList;
|
|
5127
|
+
const prev = Array.from(cls).find((n) => n.startsWith("theme-"));
|
|
5128
|
+
if (prev) {
|
|
5129
|
+
if (prev !== theme)
|
|
5130
|
+
cls.replace(prev, theme);
|
|
5131
|
+
}
|
|
5132
|
+
else {
|
|
5133
|
+
cls.add(theme);
|
|
5134
|
+
}
|
|
5135
|
+
}
|
|
5136
|
+
function ensureStore(key, defaultValue) {
|
|
5137
|
+
const existed = stores.get(key);
|
|
5138
|
+
if (existed) {
|
|
5139
|
+
return existed;
|
|
5140
|
+
}
|
|
5141
|
+
const theme = readTheme(key, defaultValue);
|
|
5142
|
+
const store = {
|
|
5143
|
+
key,
|
|
5144
|
+
defaultValue,
|
|
5145
|
+
theme,
|
|
5146
|
+
listeners: new Set(),
|
|
5147
|
+
storageSubscribers: 0,
|
|
5148
|
+
};
|
|
5149
|
+
stores.set(key, store);
|
|
5150
|
+
applyThemeToDocument(theme);
|
|
5151
|
+
return store;
|
|
5152
|
+
}
|
|
5153
|
+
function notify(store) {
|
|
5154
|
+
for (const listener of store.listeners) {
|
|
5155
|
+
listener(store.theme);
|
|
5156
|
+
}
|
|
5157
|
+
}
|
|
5158
|
+
function setStoreTheme(store, value) {
|
|
5159
|
+
const prev = store.theme;
|
|
5160
|
+
const next = typeof value === "function"
|
|
5161
|
+
? value(prev)
|
|
5162
|
+
: value;
|
|
5163
|
+
const resolved = next ?? store.defaultValue;
|
|
5164
|
+
if (resolved === store.theme)
|
|
5165
|
+
return;
|
|
5166
|
+
store.theme = resolved;
|
|
5167
|
+
writeTheme(store.key, next);
|
|
5168
|
+
applyThemeToDocument(resolved);
|
|
5169
|
+
notify(store);
|
|
5170
|
+
}
|
|
5171
|
+
function ensureStorageListener(store) {
|
|
5172
|
+
if (typeof window === "undefined")
|
|
5173
|
+
return;
|
|
5174
|
+
if (store.storageListener)
|
|
5175
|
+
return;
|
|
5176
|
+
store.storageListener = (e) => {
|
|
5177
|
+
if (e.key !== store.key)
|
|
5178
|
+
return;
|
|
5179
|
+
if (e.newValue === null) {
|
|
5180
|
+
store.theme = store.defaultValue;
|
|
5181
|
+
applyThemeToDocument(store.theme);
|
|
5182
|
+
notify(store);
|
|
5183
|
+
return;
|
|
5184
|
+
}
|
|
5185
|
+
try {
|
|
5186
|
+
store.theme = JSON.parse(e.newValue);
|
|
5187
|
+
}
|
|
5188
|
+
catch {
|
|
5189
|
+
store.theme = e.newValue;
|
|
5190
|
+
}
|
|
5191
|
+
applyThemeToDocument(store.theme);
|
|
5192
|
+
notify(store);
|
|
5193
|
+
};
|
|
5194
|
+
window.addEventListener("storage", store.storageListener);
|
|
5195
|
+
}
|
|
5196
|
+
function cleanupStorageListener(store) {
|
|
5197
|
+
if (typeof window === "undefined")
|
|
5198
|
+
return;
|
|
5199
|
+
if (store.storageSubscribers > 0)
|
|
5200
|
+
return;
|
|
5201
|
+
if (!store.storageListener)
|
|
5202
|
+
return;
|
|
5203
|
+
window.removeEventListener("storage", store.storageListener);
|
|
5204
|
+
store.storageListener = undefined;
|
|
5205
|
+
}
|
|
5118
5206
|
const useTheme = (props) => {
|
|
5119
5207
|
const { key = "ioca-react-theme", defaultValue = "theme-auto", listenStorageChange, } = props ?? {};
|
|
5120
|
-
|
|
5121
|
-
|
|
5122
|
-
|
|
5123
|
-
|
|
5124
|
-
|
|
5208
|
+
if (typeof window === "undefined") {
|
|
5209
|
+
return {
|
|
5210
|
+
theme: defaultValue,
|
|
5211
|
+
setTheme: () => { },
|
|
5212
|
+
};
|
|
5213
|
+
}
|
|
5214
|
+
const store = useMemo(() => ensureStore(key, defaultValue), [key]);
|
|
5215
|
+
const [theme, setThemeState] = useState(() => store.theme);
|
|
5125
5216
|
useEffect(() => {
|
|
5126
|
-
|
|
5127
|
-
|
|
5217
|
+
store.defaultValue = defaultValue;
|
|
5218
|
+
applyThemeToDocument(store.theme);
|
|
5219
|
+
}, [store, defaultValue]);
|
|
5128
5220
|
useEffect(() => {
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
cls.replace(prev, theme);
|
|
5135
|
-
}
|
|
5136
|
-
else {
|
|
5137
|
-
cls.add(theme);
|
|
5221
|
+
store.listeners.add(setThemeState);
|
|
5222
|
+
setThemeState(store.theme);
|
|
5223
|
+
if (listenStorageChange) {
|
|
5224
|
+
store.storageSubscribers += 1;
|
|
5225
|
+
ensureStorageListener(store);
|
|
5138
5226
|
}
|
|
5139
|
-
|
|
5227
|
+
return () => {
|
|
5228
|
+
store.listeners.delete(setThemeState);
|
|
5229
|
+
if (listenStorageChange) {
|
|
5230
|
+
store.storageSubscribers = Math.max(0, store.storageSubscribers - 1);
|
|
5231
|
+
cleanupStorageListener(store);
|
|
5232
|
+
}
|
|
5233
|
+
};
|
|
5234
|
+
}, [store, listenStorageChange]);
|
|
5235
|
+
const setTheme = (value) => {
|
|
5236
|
+
setStoreTheme(store, value);
|
|
5237
|
+
};
|
|
5140
5238
|
return {
|
|
5141
|
-
theme
|
|
5142
|
-
setTheme
|
|
5239
|
+
theme,
|
|
5240
|
+
setTheme,
|
|
5143
5241
|
};
|
|
5144
5242
|
};
|
|
5145
5243
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ITheme } from './type.js';
|
|
2
2
|
|
|
3
|
+
type TSetTheme = (value: string | undefined | ((prev: string) => string | undefined)) => void;
|
|
3
4
|
declare const useTheme: (props?: ITheme) => {
|
|
4
5
|
theme: string;
|
|
5
|
-
setTheme:
|
|
6
|
+
setTheme: TSetTheme;
|
|
6
7
|
};
|
|
7
8
|
|
|
8
9
|
export { useTheme as default };
|