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 ? (