mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-14 06:16:08 +01:00
Add .oxfmtignore to skip generated bindings and wasm-pack output. Add npm format script, update DEVELOPMENT.md for Vite+ toolchain, and format all non-generated files with oxfmt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
34 lines
945 B
TypeScript
34 lines
945 B
TypeScript
import { useTimedBoolean } from "../hooks/useTimedBoolean";
|
|
import { copyToClipboard } from "../lib/copy";
|
|
import { showToast } from "../lib/toast";
|
|
import type { ButtonProps } from "./core/Button";
|
|
import { Button } from "./core/Button";
|
|
|
|
interface Props extends Omit<ButtonProps, "onClick"> {
|
|
text: string | (() => Promise<string | null>);
|
|
}
|
|
|
|
export function CopyButton({ text, ...props }: Props) {
|
|
const [copied, setCopied] = useTimedBoolean();
|
|
return (
|
|
<Button
|
|
{...props}
|
|
onClick={async () => {
|
|
const content = typeof text === "function" ? await text() : text;
|
|
if (content == null) {
|
|
showToast({
|
|
id: "failed-to-copy",
|
|
color: "danger",
|
|
message: "Failed to copy",
|
|
});
|
|
} else {
|
|
copyToClipboard(content, { disableToast: true });
|
|
setCopied();
|
|
}
|
|
}}
|
|
>
|
|
{copied ? "Copied" : "Copy"}
|
|
</Button>
|
|
);
|
|
}
|