UNPKG

ingenious-flow-designer

Version:

[演示地址](http://antd-vben5-pro.madong.tech/)

1,123 lines (1,122 loc) 34.6 kB
import { g as genComponentStyleHook, o as objectType, K as findDOMNode, u as useConfigInject, c as classNames, P as PropTypes, A as eventType, _ as _extends, m as merge, M as genFocusStyle, p as useToken, D as flattenChildren, C as useInjectDisabled, b as _objectSpread2 } from "./index-33HV6VHr.js"; import { defineComponent, shallowRef, onMounted, onBeforeUnmount, createVNode, Transition, render, getCurrentInstance, computed, watch, nextTick, reactive, watchEffect, onUpdated, Text } from "vue"; import { i as isVisible } from "./isVisible-syGnHoil.js"; import { u as useState, g as genCompactItemStyle } from "./compact-item-CaKUqZoL.js"; import { w as wrapperRaf, i as initDefaultProps } from "./raf-5zkQ7Vyi.js"; import { d as devWarning, c as createContext } from "./createContext-CGbRqUuL.js"; import { L as LoadingOutlined } from "./LoadingOutlined-SpxrkaN_.js"; import { u as useCompactItemContext } from "./Compact-JU9bybmf.js"; const genWaveStyle = (token) => { const { componentCls, colorPrimary } = token; return { [componentCls]: { position: "absolute", background: "transparent", pointerEvents: "none", boxSizing: "border-box", color: `var(--wave-color, ${colorPrimary})`, boxShadow: `0 0 0 0 currentcolor`, opacity: 0.2, // =================== Motion =================== "&.wave-motion-appear": { transition: [`box-shadow 0.4s ${token.motionEaseOutCirc}`, `opacity 2s ${token.motionEaseOutCirc}`].join(","), "&-active": { boxShadow: `0 0 0 6px currentcolor`, opacity: 0 } } } }; }; const useStyle$1 = genComponentStyleHook("Wave", (token) => [genWaveStyle(token)]); function isNotGrey(color) { const match = (color || "").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/); if (match && match[1] && match[2] && match[3]) { return !(match[1] === match[2] && match[2] === match[3]); } return true; } function isValidWaveColor(color) { return color && color !== "#fff" && color !== "#ffffff" && color !== "rgb(255, 255, 255)" && color !== "rgba(255, 255, 255, 1)" && isNotGrey(color) && !/rgba\((?:\d*, ){3}0\)/.test(color) && // any transparent rgba color color !== "transparent"; } function getTargetWaveColor(node) { const { borderTopColor, borderColor, backgroundColor } = getComputedStyle(node); if (isValidWaveColor(borderTopColor)) { return borderTopColor; } if (isValidWaveColor(borderColor)) { return borderColor; } if (isValidWaveColor(backgroundColor)) { return backgroundColor; } return null; } function validateNum(value) { return Number.isNaN(value) ? 0 : value; } const WaveEffect = defineComponent({ props: { target: objectType(), className: String }, setup(props) { const divRef = shallowRef(null); const [color, setWaveColor] = useState(null); const [borderRadius, setBorderRadius] = useState([]); const [left, setLeft] = useState(0); const [top, setTop] = useState(0); const [width, setWidth] = useState(0); const [height, setHeight] = useState(0); const [enabled, setEnabled] = useState(false); function syncPos() { const { target } = props; const nodeStyle = getComputedStyle(target); setWaveColor(getTargetWaveColor(target)); const isStatic = nodeStyle.position === "static"; const { borderLeftWidth, borderTopWidth } = nodeStyle; setLeft(isStatic ? target.offsetLeft : validateNum(-parseFloat(borderLeftWidth))); setTop(isStatic ? target.offsetTop : validateNum(-parseFloat(borderTopWidth))); setWidth(target.offsetWidth); setHeight(target.offsetHeight); const { borderTopLeftRadius, borderTopRightRadius, borderBottomLeftRadius, borderBottomRightRadius } = nodeStyle; setBorderRadius([borderTopLeftRadius, borderTopRightRadius, borderBottomRightRadius, borderBottomLeftRadius].map((radius) => validateNum(parseFloat(radius)))); } let resizeObserver; let rafId; let timeoutId; const clear = () => { clearTimeout(timeoutId); wrapperRaf.cancel(rafId); resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect(); }; const removeDom = () => { var _a; const holder = (_a = divRef.value) === null || _a === void 0 ? void 0 : _a.parentElement; if (holder) { render(null, holder); if (holder.parentElement) { holder.parentElement.removeChild(holder); } } }; onMounted(() => { clear(); timeoutId = setTimeout(() => { removeDom(); }, 5e3); const { target } = props; if (target) { rafId = wrapperRaf(() => { syncPos(); setEnabled(true); }); if (typeof ResizeObserver !== "undefined") { resizeObserver = new ResizeObserver(syncPos); resizeObserver.observe(target); } } }); onBeforeUnmount(() => { clear(); }); const onTransitionend = (e) => { if (e.propertyName === "opacity") { removeDom(); } }; return () => { if (!enabled.value) { return null; } const waveStyle = { left: `${left.value}px`, top: `${top.value}px`, width: `${width.value}px`, height: `${height.value}px`, borderRadius: borderRadius.value.map((radius) => `${radius}px`).join(" ") }; if (color) { waveStyle["--wave-color"] = color.value; } return createVNode(Transition, { "appear": true, "name": "wave-motion", "appearFromClass": "wave-motion-appear", "appearActiveClass": "wave-motion-appear", "appearToClass": "wave-motion-appear wave-motion-appear-active" }, { default: () => [createVNode("div", { "ref": divRef, "class": props.className, "style": waveStyle, "onTransitionend": onTransitionend }, null)] }); }; } }); function showWaveEffect(node, className) { const holder = document.createElement("div"); holder.style.position = "absolute"; holder.style.left = `0px`; holder.style.top = `0px`; node === null || node === void 0 ? void 0 : node.insertBefore(holder, node === null || node === void 0 ? void 0 : node.firstChild); render(createVNode(WaveEffect, { "target": node, "className": className }, null), holder); return () => { render(null, holder); if (holder.parentElement) { holder.parentElement.removeChild(holder); } }; } function useWave(className, wave) { const instance = getCurrentInstance(); let stopWave; function showWave() { var _a; const node = findDOMNode(instance); stopWave === null || stopWave === void 0 ? void 0 : stopWave(); if (((_a = wave === null || wave === void 0 ? void 0 : wave.value) === null || _a === void 0 ? void 0 : _a.disabled) || !node) { return; } stopWave = showWaveEffect(node, className.value); } onBeforeUnmount(() => { stopWave === null || stopWave === void 0 ? void 0 : stopWave(); }); return showWave; } const Wave = defineComponent({ compatConfig: { MODE: 3 }, name: "Wave", props: { disabled: Boolean }, setup(props, _ref) { let { slots } = _ref; const instance = getCurrentInstance(); const { prefixCls, wave } = useConfigInject("wave", props); const [, hashId] = useStyle$1(prefixCls); const showWave = useWave(computed(() => classNames(prefixCls.value, hashId.value)), wave); let onClick; const clear = () => { const node = findDOMNode(instance); node.removeEventListener("click", onClick, true); }; onMounted(() => { watch(() => props.disabled, () => { clear(); nextTick(() => { const node = findDOMNode(instance); node === null || node === void 0 ? void 0 : node.removeEventListener("click", onClick, true); if (!node || node.nodeType !== 1 || props.disabled) { return; } onClick = (e) => { if (e.target.tagName === "INPUT" || !isVisible(e.target) || // No need wave !node.getAttribute || node.getAttribute("disabled") || node.disabled || node.className.includes("disabled") || node.className.includes("-leave")) { return; } showWave(); }; node.addEventListener("click", onClick, true); }); }, { immediate: true, flush: "post" }); }); onBeforeUnmount(() => { clear(); }); return () => { var _a; const children = (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)[0]; return children; }; } }); function convertLegacyProps(type) { if (type === "danger") { return { danger: true }; } return { type }; } const buttonProps = () => ({ prefixCls: String, type: String, htmlType: { type: String, default: "button" }, shape: { type: String }, size: { type: String }, loading: { type: [Boolean, Object], default: () => false }, disabled: { type: Boolean, default: void 0 }, ghost: { type: Boolean, default: void 0 }, block: { type: Boolean, default: void 0 }, danger: { type: Boolean, default: void 0 }, icon: PropTypes.any, href: String, target: String, title: String, onClick: eventType(), onMousedown: eventType() }); const getCollapsedWidth = (node) => { if (node) { node.style.width = "0px"; node.style.opacity = "0"; node.style.transform = "scale(0)"; } }; const getRealWidth = (node) => { nextTick(() => { if (node) { node.style.width = `${node.scrollWidth}px`; node.style.opacity = "1"; node.style.transform = "scale(1)"; } }); }; const resetStyle = (node) => { if (node && node.style) { node.style.width = null; node.style.opacity = null; node.style.transform = null; } }; const LoadingIcon = defineComponent({ compatConfig: { MODE: 3 }, name: "LoadingIcon", props: { prefixCls: String, loading: [Boolean, Object], existIcon: Boolean }, setup(props) { return () => { const { existIcon, prefixCls, loading } = props; if (existIcon) { return createVNode("span", { "class": `${prefixCls}-loading-icon` }, [createVNode(LoadingOutlined, null, null)]); } const visible = !!loading; return createVNode(Transition, { "name": `${prefixCls}-loading-icon-motion`, "onBeforeEnter": getCollapsedWidth, "onEnter": getRealWidth, "onAfterEnter": resetStyle, "onBeforeLeave": getRealWidth, "onLeave": (node) => { setTimeout(() => { getCollapsedWidth(node); }); }, "onAfterLeave": resetStyle }, { default: () => [visible ? createVNode("span", { "class": `${prefixCls}-loading-icon` }, [createVNode(LoadingOutlined, null, null)]) : null] }); }; } }); const genButtonBorderStyle = (buttonTypeCls, borderColor) => ({ // Border [`> span, > ${buttonTypeCls}`]: { "&:not(:last-child)": { [`&, & > ${buttonTypeCls}`]: { "&:not(:disabled)": { borderInlineEndColor: borderColor } } }, "&:not(:first-child)": { [`&, & > ${buttonTypeCls}`]: { "&:not(:disabled)": { borderInlineStartColor: borderColor } } } } }); const genGroupStyle = (token) => { const { componentCls, fontSize, lineWidth, colorPrimaryHover, colorErrorHover } = token; return { [`${componentCls}-group`]: [ { position: "relative", display: "inline-flex", // Border [`> span, > ${componentCls}`]: { "&:not(:last-child)": { [`&, & > ${componentCls}`]: { borderStartEndRadius: 0, borderEndEndRadius: 0 } }, "&:not(:first-child)": { marginInlineStart: -lineWidth, [`&, & > ${componentCls}`]: { borderStartStartRadius: 0, borderEndStartRadius: 0 } } }, [componentCls]: { position: "relative", zIndex: 1, [`&:hover, &:focus, &:active`]: { zIndex: 2 }, "&[disabled]": { zIndex: 0 } }, [`${componentCls}-icon-only`]: { fontSize } }, // Border Color genButtonBorderStyle(`${componentCls}-primary`, colorPrimaryHover), genButtonBorderStyle(`${componentCls}-danger`, colorErrorHover) ] }; }; function compactItemVerticalBorder(token, parentCls) { return { // border collapse [`&-item:not(${parentCls}-last-item)`]: { marginBottom: -token.lineWidth }, "&-item": { "&:hover,&:focus,&:active": { zIndex: 2 }, "&[disabled]": { zIndex: 0 } } }; } function compactItemBorderVerticalRadius(prefixCls, parentCls) { return { [`&-item:not(${parentCls}-first-item):not(${parentCls}-last-item)`]: { borderRadius: 0 }, [`&-item${parentCls}-first-item:not(${parentCls}-last-item)`]: { [`&, &${prefixCls}-sm, &${prefixCls}-lg`]: { borderEndEndRadius: 0, borderEndStartRadius: 0 } }, [`&-item${parentCls}-last-item:not(${parentCls}-first-item)`]: { [`&, &${prefixCls}-sm, &${prefixCls}-lg`]: { borderStartStartRadius: 0, borderStartEndRadius: 0 } } }; } function genCompactItemVerticalStyle(token) { const compactCls = `${token.componentCls}-compact-vertical`; return { [compactCls]: _extends(_extends({}, compactItemVerticalBorder(token, compactCls)), compactItemBorderVerticalRadius(token.componentCls, compactCls)) }; } const genSharedButtonStyle = (token) => { const { componentCls, iconCls } = token; return { [componentCls]: { outline: "none", position: "relative", display: "inline-block", fontWeight: 400, whiteSpace: "nowrap", textAlign: "center", backgroundImage: "none", backgroundColor: "transparent", border: `${token.lineWidth}px ${token.lineType} transparent`, cursor: "pointer", transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`, userSelect: "none", touchAction: "manipulation", lineHeight: token.lineHeight, color: token.colorText, "> span": { display: "inline-block" }, // Leave a space between icon and text. [`> ${iconCls} + span, > span + ${iconCls}`]: { marginInlineStart: token.marginXS }, "> a": { color: "currentColor" }, "&:not(:disabled)": _extends({}, genFocusStyle(token)), // make `btn-icon-only` not too narrow [`&-icon-only${componentCls}-compact-item`]: { flex: "none" }, // Special styles for Primary Button [`&-compact-item${componentCls}-primary`]: { [`&:not([disabled]) + ${componentCls}-compact-item${componentCls}-primary:not([disabled])`]: { position: "relative", "&:before": { position: "absolute", top: -token.lineWidth, insetInlineStart: -token.lineWidth, display: "inline-block", width: token.lineWidth, height: `calc(100% + ${token.lineWidth * 2}px)`, backgroundColor: token.colorPrimaryHover, content: '""' } } }, // Special styles for Primary Button "&-compact-vertical-item": { [`&${componentCls}-primary`]: { [`&:not([disabled]) + ${componentCls}-compact-vertical-item${componentCls}-primary:not([disabled])`]: { position: "relative", "&:before": { position: "absolute", top: -token.lineWidth, insetInlineStart: -token.lineWidth, display: "inline-block", width: `calc(100% + ${token.lineWidth * 2}px)`, height: token.lineWidth, backgroundColor: token.colorPrimaryHover, content: '""' } } } } } }; }; const genHoverActiveButtonStyle = (hoverStyle, activeStyle) => ({ "&:not(:disabled)": { "&:hover": hoverStyle, "&:active": activeStyle } }); const genCircleButtonStyle = (token) => ({ minWidth: token.controlHeight, paddingInlineStart: 0, paddingInlineEnd: 0, borderRadius: "50%" }); const genRoundButtonStyle = (token) => ({ borderRadius: token.controlHeight, paddingInlineStart: token.controlHeight / 2, paddingInlineEnd: token.controlHeight / 2 }); const genDisabledStyle = (token) => ({ cursor: "not-allowed", borderColor: token.colorBorder, color: token.colorTextDisabled, backgroundColor: token.colorBgContainerDisabled, boxShadow: "none" }); const genGhostButtonStyle = (btnCls, textColor, borderColor, textColorDisabled, borderColorDisabled, hoverStyle, activeStyle) => ({ [`&${btnCls}-background-ghost`]: _extends(_extends({ color: textColor || void 0, backgroundColor: "transparent", borderColor: borderColor || void 0, boxShadow: "none" }, genHoverActiveButtonStyle(_extends({ backgroundColor: "transparent" }, hoverStyle), _extends({ backgroundColor: "transparent" }, activeStyle))), { "&:disabled": { cursor: "not-allowed", color: textColorDisabled || void 0, borderColor: borderColorDisabled || void 0 } }) }); const genSolidDisabledButtonStyle = (token) => ({ "&:disabled": _extends({}, genDisabledStyle(token)) }); const genSolidButtonStyle = (token) => _extends({}, genSolidDisabledButtonStyle(token)); const genPureDisabledButtonStyle = (token) => ({ "&:disabled": { cursor: "not-allowed", color: token.colorTextDisabled } }); const genDefaultButtonStyle = (token) => _extends(_extends(_extends(_extends(_extends({}, genSolidButtonStyle(token)), { backgroundColor: token.colorBgContainer, borderColor: token.colorBorder, boxShadow: `0 ${token.controlOutlineWidth}px 0 ${token.controlTmpOutline}` }), genHoverActiveButtonStyle({ color: token.colorPrimaryHover, borderColor: token.colorPrimaryHover }, { color: token.colorPrimaryActive, borderColor: token.colorPrimaryActive })), genGhostButtonStyle(token.componentCls, token.colorBgContainer, token.colorBgContainer, token.colorTextDisabled, token.colorBorder)), { [`&${token.componentCls}-dangerous`]: _extends(_extends(_extends({ color: token.colorError, borderColor: token.colorError }, genHoverActiveButtonStyle({ color: token.colorErrorHover, borderColor: token.colorErrorBorderHover }, { color: token.colorErrorActive, borderColor: token.colorErrorActive })), genGhostButtonStyle(token.componentCls, token.colorError, token.colorError, token.colorTextDisabled, token.colorBorder)), genSolidDisabledButtonStyle(token)) }); const genPrimaryButtonStyle = (token) => _extends(_extends(_extends(_extends(_extends({}, genSolidButtonStyle(token)), { color: token.colorTextLightSolid, backgroundColor: token.colorPrimary, boxShadow: `0 ${token.controlOutlineWidth}px 0 ${token.controlOutline}` }), genHoverActiveButtonStyle({ color: token.colorTextLightSolid, backgroundColor: token.colorPrimaryHover }, { color: token.colorTextLightSolid, backgroundColor: token.colorPrimaryActive })), genGhostButtonStyle(token.componentCls, token.colorPrimary, token.colorPrimary, token.colorTextDisabled, token.colorBorder, { color: token.colorPrimaryHover, borderColor: token.colorPrimaryHover }, { color: token.colorPrimaryActive, borderColor: token.colorPrimaryActive })), { [`&${token.componentCls}-dangerous`]: _extends(_extends(_extends({ backgroundColor: token.colorError, boxShadow: `0 ${token.controlOutlineWidth}px 0 ${token.colorErrorOutline}` }, genHoverActiveButtonStyle({ backgroundColor: token.colorErrorHover }, { backgroundColor: token.colorErrorActive })), genGhostButtonStyle(token.componentCls, token.colorError, token.colorError, token.colorTextDisabled, token.colorBorder, { color: token.colorErrorHover, borderColor: token.colorErrorHover }, { color: token.colorErrorActive, borderColor: token.colorErrorActive })), genSolidDisabledButtonStyle(token)) }); const genDashedButtonStyle = (token) => _extends(_extends({}, genDefaultButtonStyle(token)), { borderStyle: "dashed" }); const genLinkButtonStyle = (token) => _extends(_extends(_extends({ color: token.colorLink }, genHoverActiveButtonStyle({ color: token.colorLinkHover }, { color: token.colorLinkActive })), genPureDisabledButtonStyle(token)), { [`&${token.componentCls}-dangerous`]: _extends(_extends({ color: token.colorError }, genHoverActiveButtonStyle({ color: token.colorErrorHover }, { color: token.colorErrorActive })), genPureDisabledButtonStyle(token)) }); const genTextButtonStyle = (token) => _extends(_extends(_extends({}, genHoverActiveButtonStyle({ color: token.colorText, backgroundColor: token.colorBgTextHover }, { color: token.colorText, backgroundColor: token.colorBgTextActive })), genPureDisabledButtonStyle(token)), { [`&${token.componentCls}-dangerous`]: _extends(_extends({ color: token.colorError }, genPureDisabledButtonStyle(token)), genHoverActiveButtonStyle({ color: token.colorErrorHover, backgroundColor: token.colorErrorBg }, { color: token.colorErrorHover, backgroundColor: token.colorErrorBg })) }); const genDisabledButtonStyle = (token) => _extends(_extends({}, genDisabledStyle(token)), { [`&${token.componentCls}:hover`]: _extends({}, genDisabledStyle(token)) }); const genTypeButtonStyle = (token) => { const { componentCls } = token; return { [`${componentCls}-default`]: genDefaultButtonStyle(token), [`${componentCls}-primary`]: genPrimaryButtonStyle(token), [`${componentCls}-dashed`]: genDashedButtonStyle(token), [`${componentCls}-link`]: genLinkButtonStyle(token), [`${componentCls}-text`]: genTextButtonStyle(token), [`${componentCls}-disabled`]: genDisabledButtonStyle(token) }; }; const genSizeButtonStyle = function(token) { let sizePrefixCls = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ""; const { componentCls, iconCls, controlHeight, fontSize, lineHeight, lineWidth, borderRadius, buttonPaddingHorizontal } = token; const paddingVertical = Math.max(0, (controlHeight - fontSize * lineHeight) / 2 - lineWidth); const paddingHorizontal = buttonPaddingHorizontal - lineWidth; const iconOnlyCls = `${componentCls}-icon-only`; return [ // Size { [`${componentCls}${sizePrefixCls}`]: { fontSize, height: controlHeight, padding: `${paddingVertical}px ${paddingHorizontal}px`, borderRadius, [`&${iconOnlyCls}`]: { width: controlHeight, paddingInlineStart: 0, paddingInlineEnd: 0, [`&${componentCls}-round`]: { width: "auto" }, "> span": { transform: "scale(1.143)" // 14px -> 16px } }, // Loading [`&${componentCls}-loading`]: { opacity: token.opacityLoading, cursor: "default" }, [`${componentCls}-loading-icon`]: { transition: `width ${token.motionDurationSlow} ${token.motionEaseInOut}, opacity ${token.motionDurationSlow} ${token.motionEaseInOut}` }, [`&:not(${iconOnlyCls}) ${componentCls}-loading-icon > ${iconCls}`]: { marginInlineEnd: token.marginXS } } }, // Shape - patch prefixCls again to override solid border radius style { [`${componentCls}${componentCls}-circle${sizePrefixCls}`]: genCircleButtonStyle(token) }, { [`${componentCls}${componentCls}-round${sizePrefixCls}`]: genRoundButtonStyle(token) } ]; }; const genSizeBaseButtonStyle = (token) => genSizeButtonStyle(token); const genSizeSmallButtonStyle = (token) => { const smallToken = merge(token, { controlHeight: token.controlHeightSM, padding: token.paddingXS, buttonPaddingHorizontal: 8, borderRadius: token.borderRadiusSM }); return genSizeButtonStyle(smallToken, `${token.componentCls}-sm`); }; const genSizeLargeButtonStyle = (token) => { const largeToken = merge(token, { controlHeight: token.controlHeightLG, fontSize: token.fontSizeLG, borderRadius: token.borderRadiusLG }); return genSizeButtonStyle(largeToken, `${token.componentCls}-lg`); }; const genBlockButtonStyle = (token) => { const { componentCls } = token; return { [componentCls]: { [`&${componentCls}-block`]: { width: "100%" } } }; }; const useStyle = genComponentStyleHook("Button", (token) => { const { controlTmpOutline, paddingContentHorizontal } = token; const buttonToken = merge(token, { colorOutlineDefault: controlTmpOutline, buttonPaddingHorizontal: paddingContentHorizontal }); return [ // Shared genSharedButtonStyle(buttonToken), // Size genSizeSmallButtonStyle(buttonToken), genSizeBaseButtonStyle(buttonToken), genSizeLargeButtonStyle(buttonToken), // Block genBlockButtonStyle(buttonToken), // Group (type, ghost, danger, disabled, loading) genTypeButtonStyle(buttonToken), // Button Group genGroupStyle(buttonToken), // Space Compact genCompactItemStyle(token, { focus: false }), genCompactItemVerticalStyle(token) ]; }); const buttonGroupProps = () => ({ prefixCls: String, size: { type: String } }); const GroupSizeContext = createContext(); const ButtonGroup = defineComponent({ compatConfig: { MODE: 3 }, name: "AButtonGroup", props: buttonGroupProps(), setup(props, _ref) { let { slots } = _ref; const { prefixCls, direction } = useConfigInject("btn-group", props); const [, , hashId] = useToken(); GroupSizeContext.useProvide(reactive({ size: computed(() => props.size) })); const classes = computed(() => { const { size } = props; let sizeCls = ""; switch (size) { case "large": sizeCls = "lg"; break; case "small": sizeCls = "sm"; break; case "middle": case void 0: break; default: devWarning(!size, "Button.Group", "Invalid prop `size`."); } return { [`${prefixCls.value}`]: true, [`${prefixCls.value}-${sizeCls}`]: sizeCls, [`${prefixCls.value}-rtl`]: direction.value === "rtl", [hashId.value]: true }; }); return () => { var _a; return createVNode("div", { "class": classes.value }, [flattenChildren((_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots))]); }; } }); const rxTwoCNChar = /^[\u4e00-\u9fa5]{2}$/; const isTwoCNChar = rxTwoCNChar.test.bind(rxTwoCNChar); function isUnBorderedButtonType(type) { return type === "text" || type === "link"; } const Button = defineComponent({ compatConfig: { MODE: 3 }, name: "AButton", inheritAttrs: false, __ANT_BUTTON: true, props: initDefaultProps(buttonProps(), { type: "default" }), slots: Object, // emits: ['click', 'mousedown'], setup(props, _ref) { let { slots, attrs, emit, expose } = _ref; const { prefixCls, autoInsertSpaceInButton, direction, size } = useConfigInject("btn", props); const [wrapSSR, hashId] = useStyle(prefixCls); const groupSizeContext = GroupSizeContext.useInject(); const disabledContext = useInjectDisabled(); const mergedDisabled = computed(() => { var _a; return (_a = props.disabled) !== null && _a !== void 0 ? _a : disabledContext.value; }); const buttonNodeRef = shallowRef(null); const delayTimeoutRef = shallowRef(void 0); let isNeedInserted = false; const innerLoading = shallowRef(false); const hasTwoCNChar = shallowRef(false); const autoInsertSpace = computed(() => autoInsertSpaceInButton.value !== false); const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction); const loadingOrDelay = computed(() => typeof props.loading === "object" && props.loading.delay ? props.loading.delay || true : !!props.loading); watch(loadingOrDelay, (val) => { clearTimeout(delayTimeoutRef.value); if (typeof loadingOrDelay.value === "number") { delayTimeoutRef.value = setTimeout(() => { innerLoading.value = val; }, loadingOrDelay.value); } else { innerLoading.value = val; } }, { immediate: true }); const classes = computed(() => { const { type, shape = "default", ghost, block, danger } = props; const pre = prefixCls.value; const sizeClassNameMap = { large: "lg", small: "sm", middle: void 0 }; const sizeFullname = compactSize.value || (groupSizeContext === null || groupSizeContext === void 0 ? void 0 : groupSizeContext.size) || size.value; const sizeCls = sizeFullname ? sizeClassNameMap[sizeFullname] || "" : ""; return [compactItemClassnames.value, { [hashId.value]: true, [`${pre}`]: true, [`${pre}-${shape}`]: shape !== "default" && shape, [`${pre}-${type}`]: type, [`${pre}-${sizeCls}`]: sizeCls, [`${pre}-loading`]: innerLoading.value, [`${pre}-background-ghost`]: ghost && !isUnBorderedButtonType(type), [`${pre}-two-chinese-chars`]: hasTwoCNChar.value && autoInsertSpace.value, [`${pre}-block`]: block, [`${pre}-dangerous`]: !!danger, [`${pre}-rtl`]: direction.value === "rtl" }]; }); const fixTwoCNChar = () => { const node = buttonNodeRef.value; if (!node || autoInsertSpaceInButton.value === false) { return; } const buttonText = node.textContent; if (isNeedInserted && isTwoCNChar(buttonText)) { if (!hasTwoCNChar.value) { hasTwoCNChar.value = true; } } else if (hasTwoCNChar.value) { hasTwoCNChar.value = false; } }; const handleClick = (event) => { if (innerLoading.value || mergedDisabled.value) { event.preventDefault(); return; } emit("click", event); }; const handleMousedown = (event) => { emit("mousedown", event); }; const insertSpace = (child, needInserted) => { const SPACE = needInserted ? " " : ""; if (child.type === Text) { let text = child.children.trim(); if (isTwoCNChar(text)) { text = text.split("").join(SPACE); } return createVNode("span", null, [text]); } return child; }; watchEffect(() => { devWarning(!(props.ghost && isUnBorderedButtonType(props.type)), "Button", "`link` or `text` button can't be a `ghost` button."); }); onMounted(fixTwoCNChar); onUpdated(fixTwoCNChar); onBeforeUnmount(() => { delayTimeoutRef.value && clearTimeout(delayTimeoutRef.value); }); const focus = () => { var _a; (_a = buttonNodeRef.value) === null || _a === void 0 ? void 0 : _a.focus(); }; const blur = () => { var _a; (_a = buttonNodeRef.value) === null || _a === void 0 ? void 0 : _a.blur(); }; expose({ focus, blur }); return () => { var _a, _b; const { icon = (_a = slots.icon) === null || _a === void 0 ? void 0 : _a.call(slots) } = props; const children = flattenChildren((_b = slots.default) === null || _b === void 0 ? void 0 : _b.call(slots)); isNeedInserted = children.length === 1 && !icon && !isUnBorderedButtonType(props.type); const { type, htmlType, href, title, target } = props; const iconType = innerLoading.value ? "loading" : icon; const buttonProps2 = _extends(_extends({}, attrs), { title, disabled: mergedDisabled.value, class: [classes.value, attrs.class, { [`${prefixCls.value}-icon-only`]: children.length === 0 && !!iconType }], onClick: handleClick, onMousedown: handleMousedown }); if (!mergedDisabled.value) { delete buttonProps2.disabled; } const iconNode = icon && !innerLoading.value ? icon : createVNode(LoadingIcon, { "existIcon": !!icon, "prefixCls": prefixCls.value, "loading": !!innerLoading.value }, null); const kids = children.map((child) => insertSpace(child, isNeedInserted && autoInsertSpace.value)); if (href !== void 0) { return wrapSSR(createVNode("a", _objectSpread2(_objectSpread2({}, buttonProps2), {}, { "href": href, "target": target, "ref": buttonNodeRef }), [iconNode, kids])); } let buttonNode = createVNode("button", _objectSpread2(_objectSpread2({}, buttonProps2), {}, { "ref": buttonNodeRef, "type": htmlType }), [iconNode, kids]); if (!isUnBorderedButtonType(type)) { const _buttonNode = /* @__PURE__ */ function() { return buttonNode; }(); buttonNode = createVNode(Wave, { "ref": "wave", "disabled": !!innerLoading.value }, { default: () => [_buttonNode] }); } return wrapSSR(buttonNode); }; } }); Button.Group = ButtonGroup; Button.install = function(app) { app.component(Button.name, Button); app.component(ButtonGroup.name, ButtonGroup); return app; }; const index = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, ButtonGroup, default: Button }, Symbol.toStringTag, { value: "Module" })); export { Button as B, convertLegacyProps as c, index as i }; //# sourceMappingURL=index-Dt1kRNAk.js.map