import { __ } from '@wordpress/i18n';
import stripAnsi from 'strip-ansi';
import { Attributes } from '../../../../types';
import { escapeShortcodes } from '../../../../util/code';
import { Clipboard } from './Clipboard';
import { TextSimple } from './TextSimple';
import { TwoSquares } from './TwoSquares';
export const copyButtonTypes = {
// Poorly named key here, but it's already there so it stays
heroicons: {
label: __('Clipboard', 'code-block-pro'),
Component: Clipboard,
},
twoSquares: {
label: __('Two Squares', 'code-block-pro'),
Component: TwoSquares,
},
textSimple: {
label: __('Text Simple', 'code-block-pro'),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
Component: (props: any) => ,
},
};
export const CopyButton = ({ attributes }: { attributes: Attributes }) => {
const {
copyButtonType,
copyButtonString,
copyButtonStringCopied,
copyButtonUseTextarea,
useDecodeURI,
code,
textColor,
bgColor: b,
headerType,
useEscapeShortCodes,
} = attributes;
const hasTextButton = copyButtonType === 'textSimple';
const color = hasTextButton ? b : textColor;
const bgColor = hasTextButton ? textColor : undefined;
const { Component } =
copyButtonTypes?.[copyButtonType as keyof typeof copyButtonTypes] ??
copyButtonTypes.heroicons;
const codeToCopy = stripAnsi(
useDecodeURI ? encodeURIComponent(code ?? '') : (code ?? ''),
);
return (
{copyButtonUseTextarea ? (
) : null}
);
};