nextui/apps/docs/components/copy-button.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

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";