Files
NapCatQQ/.pnpm-store/v3/files/bb/282fd3233ff318db51812aea4fd1387b28a81736b6804997c80c3d1690984ba46385e796eda122becbb47c7513c4fe8bf6e6f69c57a9f9dbd939bf74550956
T
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

173 lines
5.0 KiB
Plaintext

"use client";
import {
useButtonGroupContext
} from "./chunk-3SAWKTTV.mjs";
// src/use-button.ts
import { useProviderContext } from "@heroui/system";
import { dataAttr } from "@heroui/shared-utils";
import { useCallback } from "react";
import { useFocusRing } from "@react-aria/focus";
import { chain, mergeProps } from "@react-aria/utils";
import { useDOMRef, filterDOMProps } from "@heroui/react-utils";
import { button } from "@heroui/theme";
import { isValidElement, cloneElement, useMemo } from "react";
import { useAriaButton } from "@heroui/use-aria-button";
import { useHover } from "@react-aria/interactions";
import { useRipple } from "@heroui/ripple";
function useButton(props) {
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
const groupContext = useButtonGroupContext();
const globalContext = useProviderContext();
const isInGroup = !!groupContext;
const {
ref,
as,
children,
startContent: startContentProp,
endContent: endContentProp,
autoFocus,
className,
spinner,
isLoading = false,
disableRipple: disableRippleProp = false,
fullWidth = (_a = groupContext == null ? void 0 : groupContext.fullWidth) != null ? _a : false,
radius = groupContext == null ? void 0 : groupContext.radius,
size = (_b = groupContext == null ? void 0 : groupContext.size) != null ? _b : "md",
color = (_c = groupContext == null ? void 0 : groupContext.color) != null ? _c : "default",
variant = (_d = groupContext == null ? void 0 : groupContext.variant) != null ? _d : "solid",
disableAnimation = (_f = (_e = groupContext == null ? void 0 : groupContext.disableAnimation) != null ? _e : globalContext == null ? void 0 : globalContext.disableAnimation) != null ? _f : false,
isDisabled: isDisabledProp = (_g = groupContext == null ? void 0 : groupContext.isDisabled) != null ? _g : false,
isIconOnly = (_h = groupContext == null ? void 0 : groupContext.isIconOnly) != null ? _h : false,
spinnerPlacement = "start",
onPress,
onClick,
...otherProps
} = props;
const Component = as || "button";
const shouldFilterDOMProps = typeof Component === "string";
const domRef = useDOMRef(ref);
const disableRipple = (_i = disableRippleProp || (globalContext == null ? void 0 : globalContext.disableRipple)) != null ? _i : disableAnimation;
const { isFocusVisible, isFocused, focusProps } = useFocusRing({
autoFocus
});
const isDisabled = isDisabledProp || isLoading;
const styles = useMemo(
() => button({
size,
color,
variant,
radius,
fullWidth,
isDisabled,
isInGroup,
disableAnimation,
isIconOnly,
className
}),
[
size,
color,
variant,
radius,
fullWidth,
isDisabled,
isInGroup,
isIconOnly,
disableAnimation,
className
]
);
const { onPress: onRipplePressHandler, onClear: onClearRipple, ripples } = useRipple();
const handlePress = useCallback(
(e) => {
if (disableRipple || isDisabled || disableAnimation)
return;
domRef.current && onRipplePressHandler(e);
},
[disableRipple, isDisabled, disableAnimation, domRef, onRipplePressHandler]
);
const { buttonProps: ariaButtonProps, isPressed } = useAriaButton(
{
elementType: as,
isDisabled,
onPress: chain(onPress, handlePress),
onClick,
...otherProps
},
domRef
);
const { isHovered, hoverProps } = useHover({ isDisabled });
const getButtonProps = useCallback(
(props2 = {}) => ({
"data-disabled": dataAttr(isDisabled),
"data-focus": dataAttr(isFocused),
"data-pressed": dataAttr(isPressed),
"data-focus-visible": dataAttr(isFocusVisible),
"data-hover": dataAttr(isHovered),
"data-loading": dataAttr(isLoading),
...mergeProps(
ariaButtonProps,
focusProps,
hoverProps,
filterDOMProps(otherProps, {
enabled: shouldFilterDOMProps
}),
filterDOMProps(props2)
)
}),
[
isLoading,
isDisabled,
isFocused,
isPressed,
shouldFilterDOMProps,
isFocusVisible,
isHovered,
ariaButtonProps,
focusProps,
hoverProps,
otherProps
]
);
const getIconClone = (icon) => isValidElement(icon) ? cloneElement(icon, {
"aria-hidden": true,
focusable: false,
tabIndex: -1
}) : null;
const startContent = getIconClone(startContentProp);
const endContent = getIconClone(endContentProp);
const spinnerSize = useMemo(() => {
const buttonSpinnerSizeMap = {
sm: "sm",
md: "sm",
lg: "md"
};
return buttonSpinnerSizeMap[size];
}, [size]);
const getRippleProps = useCallback(
() => ({ ripples, onClear: onClearRipple }),
[ripples, onClearRipple]
);
return {
Component,
children,
domRef,
spinner,
styles,
startContent,
endContent,
isLoading,
spinnerPlacement,
spinnerSize,
disableRipple,
getButtonProps,
getRippleProps,
isIconOnly
};
}
export {
useButton
};