UNPKG

@mijadesign/mjui-react-taro

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

250 lines (249 loc) 8.1 kB
import { _ as __rest } from "./tslib.es6-iWu3F_1J.js"; import classNames from "classnames"; import React, { useRef, useEffect } from "react"; import { c as c$1 } from "./Failure-DtMPSYQj.js"; import { l } from "./DynamicLoading-BbSSKJQx.js"; /* empty css */ import { View } from "@tarojs/components"; import { Success, Failure, Tips, Loading } from "@nutui/icons-react-taro"; import { useParams, useRtl, usePropsValue, useCustomEvent, harmony, Overlay, useCustomEventsPath, customEvents } from "@nutui/nutui-react-taro"; import "react-transition-group"; import { C as ComponentDefaults } from "./typings-DV9RBfhj.js"; const n = { size: "", classPrefix: "icon", fontClassName: "iconfont", color: "", tag: "i", onClick: (e) => { }, className: "" }; function h$1(e) { return e === "" ? "" : Number.isNaN(Number(e)) ? String(e) : `${e}px`; } function a$1(e) { const i = "success", { size: r, classPrefix: l2, color: f, tag: m, children: u, className: p, fontClassName: N, style: d, logValue: s, onClick: o, ...k } = { ...n, ...e }, C = (g) => { o && o(g); }, c2 = {}, t = h$1(r); return t && (c2.fontSize = t), React.createElement( m, { className: classNames(`${N} ${l2}-${i} ${p || ""}`, { "auto-track": !!s }), style: { color: f, ...c2, ...d }, ...k, onClick: C, "data-log-name": s }, u ); } a$1.defaultProps = n; a$1.displayName = "FiresoonMobileIcon-success"; const a = { size: "", classPrefix: "icon", fontClassName: "iconfont", color: "", tag: "i", onClick: (e) => { }, className: "" }; function h(e) { return e === "" ? "" : Number.isNaN(Number(e)) ? String(e) : `${e}px`; } function c(e) { const i = "warning", { size: r, classPrefix: l2, color: f, tag: m, children: p, className: N, fontClassName: u, style: d, logValue: o, onClick: n2, ...g } = { ...a, ...e }, k = (C) => { n2 && n2(C); }, s = {}, t = h(r); return t && (s.fontSize = t), React.createElement( m, { className: classNames(`${u} ${l2}-${i} ${N || ""}`, { "auto-track": !!o }), style: { color: f, ...s, ...d }, ...g, onClick: k, "data-log-name": o }, p ); } c.defaultProps = a; c.displayName = "FiresoonMobileIcon-warning"; function mergeProps(defaultProps2, props) { return Object.assign(Object.assign({}, defaultProps2), props); } const defaultOverlayProps = Object.assign(Object.assign({}, ComponentDefaults), { zIndex: 1e3, duration: 300, closeOnOverlayClick: true, visible: false, lockScroll: true, onClick: (event) => { } }); const defaultProps = Object.assign(Object.assign({}, defaultOverlayProps), { id: "", duration: 2, position: "middle", title: "", size: "base", icon: null, content: "", contentClassName: "", contentStyle: {}, closeOnOverlayClick: false, lockScroll: false, visible: false, wordBreak: "break-all", zIndex: 1300, onClose: () => { } }); const Toast$1 = (props) => { const { params: { id, position, contentStyle, icon, content, duration, title, closeOnOverlayClick, lockScroll, contentClassName, visible, size, className, style, wordBreak, zIndex, onClose }, setParams } = useParams(mergeProps(defaultProps, props)); const classPrefix = "nut-toast"; const timer = useRef(-1); const rtl = useRtl(); const [innerVisible, setInnerVisible] = usePropsValue({ value: visible, defaultValue: void 0, finalValue: false, onChange: (v) => { !v && (onClose === null || onClose === void 0 ? void 0 : onClose()); } }); useEffect(() => { if (innerVisible) { autoClose(); } }, [innerVisible, duration]); useCustomEvent(id, ({ status, options }) => { if (status) { options.visible = true; setParams(options); show2(); } else { setParams({ visible: false }); hide2(); } }); const clearTimer = () => { if (timer.current) { clearTimeout(timer.current); timer.current = -1; } }; const show2 = () => { setInnerVisible(true); }; const hide2 = () => { clearTimer(); setInnerVisible(false); }; const autoClose = () => { clearTimer(); if (duration) { timer.current = window.setTimeout(() => { setParams({ visible: false }); hide2(); }, duration * 1e3); } }; const clickCover = () => { if (closeOnOverlayClick) { hide2(); } }; const renderIcon = () => { let iconNode = icon; if (typeof icon === "string") { iconNode = { success: React.createElement(Success, null), fail: React.createElement(Failure, null), warn: React.createElement(Tips, null), loading: React.createElement(Loading, { className: "nut-icon-loading" }) }[icon]; } return iconNode && React.createElement(View, { className: `${classPrefix}-icon-wrapper` }, iconNode); }; const classes = classNames({ "nut-toast-has-icon": icon, "nut-toast-rtl": rtl }); const styles = harmony() ? { left: "50%", transform: "translate(-50%, -50%)" } : null; return React.createElement(React.Fragment, null, innerVisible && React.createElement( Overlay, { visible: innerVisible, style, zIndex, className: `${classPrefix}-overlay-default-taro ${className}`, closeOnOverlayClick, lockScroll, onClick: () => { clickCover(); } }, React.createElement( View, { className: `${classPrefix} ${classes}`, id }, React.createElement( View, { className: classNames(`${classPrefix}-inner`, `${classPrefix}-${position}`, contentClassName, `${classPrefix}-inner-${size}`, `${classPrefix}-inner-${wordBreak}`, { [`${classPrefix}-inner-descrption`]: content }), style: Object.assign(Object.assign({}, styles), contentStyle) }, renderIcon(), title && React.createElement("div", { className: `${classPrefix}-title` }, title), content && React.createElement("div", { className: `${classPrefix}-text` }, content) ) ) )); }; function show(selector, options) { const path = useCustomEventsPath(selector); customEvents.trigger(path, { status: true, options }); } function hide(selector) { const path = useCustomEventsPath(selector); customEvents.trigger(path, { status: false }); } Toast$1.displayName = "NutToast"; Toast$1.show = show; Toast$1.hide = hide; const mjPrefix = "mj-toast"; const CustomIcon = ({ icon }) => { switch (icon) { case "success": return React.createElement(a$1, { className: `${mjPrefix}-custom-icon` }); case "fail": return React.createElement(c$1, { className: `${mjPrefix}-custom-icon` }); case "warn": return React.createElement(c, { className: `${mjPrefix}-custom-icon` }); case "loading": return React.createElement(l, { size: 28, className: `${mjPrefix}-custom-icon` }); default: return icon; } }; const Toast = (_a) => { var { className, duration = 2.5, title, icon = "text", wordBreak = "break-word" } = _a, rest = __rest(_a, ["className", "duration", "title", "icon", "wordBreak"]); return React.createElement(Toast$1, Object.assign({ className: classNames(className, mjPrefix), wordBreak, duration, title, icon: icon === "warn" || icon === "success" || icon === "fail" || icon === "loading" ? React.createElement(CustomIcon, { icon }) : icon }, rest)); }; Toast.displayName = "MJToast"; Toast.hide = Toast$1.hide; Toast.show = (selector, _a) => { var { duration = 2.5, className, title, icon = "text", wordBreak = "break-word" } = _a, rest = __rest(_a, ["duration", "className", "title", "icon", "wordBreak"]); Toast$1.show(selector, Object.assign({ duration, className: classNames(className, mjPrefix, { [`${mjPrefix}-pure-text`]: !title && !icon && icon === "text" }), title, icon: icon === "warn" || icon === "success" || icon === "fail" || icon === "loading" ? React.createElement(CustomIcon, { icon }) : icon, wordBreak }, rest)); }; export { Toast as T };