nextui/apps/docs/content/components/button/custom-impl.raw.tsx
WK 0d217e466f
refactor: optimization (#5362)
* chore(deps): bump RA versions

* chore(deps): bump RA versions

* chore(deps): bump RA versions

* chore: changeset

* chore(deps): remove unnecessary dependencies

* fix(calendar): typing issue

* refactor(system): remove unused SupportedCalendars

* refactor(system): move I18nProviderProps to type

* refactor: use `spectrumCalendarProps<DateValue>["createCalendar"]`

* feat: add consistent-type-imports

* fix: eslint

* chore: add changeset

* refactor: remove unused deps
2025-06-09 14:17:44 +08:00

43 lines
1.0 KiB
TypeScript

import type {ButtonProps as BaseButtonProps} from "@heroui/react";
import {forwardRef} from "react";
import {useButton, Ripple, Spinner} from "@heroui/react";
export interface ButtonProps extends BaseButtonProps {}
const MyButton = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
const {
domRef,
children,
spinnerSize,
spinner = <Spinner color="current" size={spinnerSize} />,
spinnerPlacement,
startContent,
endContent,
isLoading,
disableRipple,
getButtonProps,
getRippleProps,
} = useButton({
ref,
...props,
});
const {ripples, onClear} = getRippleProps();
return (
<button ref={domRef} {...getButtonProps()}>
{startContent}
{isLoading && spinnerPlacement === "start" && spinner}
{children}
{isLoading && spinnerPlacement === "end" && spinner}
{endContent}
{!disableRipple && <Ripple ripples={ripples} onClear={onClear} />}
</button>
);
});
MyButton.displayName = "MyButton";
export default MyButton;