mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
* 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
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import type {ButtonProps} from "@heroui/react";
|
|
|
|
import {useClipboard} from "@heroui/use-clipboard";
|
|
import {memo} from "react";
|
|
|
|
import {PreviewButton} from "./preview-button";
|
|
|
|
import {CheckLinearIcon, CopyLinearIcon} from "@/components/icons";
|
|
|
|
export interface CopyButtonProps extends ButtonProps {
|
|
value?: string;
|
|
}
|
|
|
|
export const CopyButton = memo<CopyButtonProps>(({value, className, ...buttonProps}) => {
|
|
const {copy, copied} = useClipboard();
|
|
|
|
const icon = copied ? (
|
|
<CheckLinearIcon
|
|
className="opacity-0 scale-50 data-[visible=true]:opacity-100 data-[visible=true]:scale-100 transition-transform-opacity"
|
|
data-visible={copied}
|
|
size={16}
|
|
/>
|
|
) : (
|
|
<CopyLinearIcon
|
|
className="opacity-0 scale-50 data-[visible=true]:opacity-100 data-[visible=true]:scale-100 transition-transform-opacity"
|
|
data-visible={!copied}
|
|
size={16}
|
|
/>
|
|
);
|
|
|
|
const handleCopy = () => {
|
|
copy(value);
|
|
};
|
|
|
|
return <PreviewButton className={className} icon={icon} onPress={handleCopy} {...buttonProps} />;
|
|
});
|
|
|
|
CopyButton.displayName = "CopyButton";
|