{"version":3,"file":"7f5dd45c-06b4d3bf5f082003d201.js","mappings":"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","sources":["webpack://docs-website/./node_modules/@newrelic/gatsby-theme-newrelic/src/components/CodeBlock.js"],"sourcesContent":["/* eslint-disable no-nested-ternary */\nimport React, { useEffect, useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport { css } from '@emotion/react';\nimport { LiveError, LivePreview, LiveProvider } from 'react-live';\nimport { saveAs } from 'file-saver';\nimport Button from './Button';\nimport CodeEditor from './CodeEditor';\nimport Icon from './Icon';\nimport CodeHighlight from './CodeHighlight';\nimport MiddleEllipsis from 'react-middle-ellipsis';\nimport RawCode from './RawCode';\nimport useClipboard from '../hooks/useClipboard';\nimport useFormattedCode from '../hooks/useFormattedCode';\nimport useThemeTranslation from '../hooks/useThemeTranslation';\nimport useInstrumentedHandler from '../hooks/useInstrumentedHandler';\n\nconst AUTO_FORMATTED_LANGUAGES = [\n 'jsx',\n 'html',\n 'graphql',\n 'json',\n 'css',\n 'sass',\n 'scss',\n];\n\nconst defaultComponents = {\n Preview: LivePreview,\n};\n\nconst replaceHTML = (code) =>\n code\n .replace(/<\\/?var>/g, '')\n .replace(/<\\/?mark>/g, '')\n .replace(//g, '')\n .replace(/<\\/a>/g, '');\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case 'update':\n return { code: action.payload, modified: true };\n case 'reformat':\n return { ...state, code: action.payload };\n default:\n return state;\n }\n};\n\nconst CodeBlock = ({\n autoFormat,\n altStyle,\n children,\n className,\n components: componentOverrides = {},\n copyable,\n fileName,\n formatOptions,\n highlightedLines,\n language,\n lineNumbers,\n live,\n preview,\n scope,\n containerId,\n}) => {\n children = children.trim();\n\n if (isJSLang()) {\n language = 'jsx';\n }\n\n const normalizedCode = replaceHTML(children);\n const containsEmbeddedHTML = children !== normalizedCode;\n const { t } = useThemeTranslation();\n const components = { ...defaultComponents, ...componentOverrides };\n const formattedCode = useFormattedCode(children, {\n ...formatOptions,\n language,\n disable:\n autoFormat == null\n ? !AUTO_FORMATTED_LANGUAGES.includes(language)\n : !autoFormat,\n });\n const [copied, copy] = useClipboard();\n const [{ code, modified }, dispatch] = useReducer(reducer, {\n code: formattedCode,\n modified: false,\n });\n const copiedCode = containsEmbeddedHTML ? normalizedCode : code;\n\n const handleCopyClick = useInstrumentedHandler(() => copy(copiedCode), {\n eventName: 'copyCodeBlockClick',\n category: 'CodeBlock',\n modified,\n contents: copiedCode.replace(/[\\r\\n]+/gm, '').substring(0, 200),\n });\n\n const handleDownloadClick = useInstrumentedHandler(\n () => {\n const fileExtension = fileName.split('.')[1];\n const blob = new Blob([children], { type: fileExtension });\n saveAs(blob, fileName);\n },\n {\n eventName: 'downloadCodeBlockClick',\n category: 'CodeBlock',\n modified,\n }\n );\n\n useEffect(() => {\n dispatch({ type: 'reformat', payload: formattedCode });\n }, [formattedCode]);\n\n return (\n <>\n {preview && (\n \n \n \n )}\n
\n \n {altStyle && (\n \n \n {fileName && (\n \n {fileName}\n \n )}\n
\n \n \n Download\n \n \n \n {copied ? t('button.copied') : t('button.copy')}\n \n \n )}\n \n {language !== 'html' && containsEmbeddedHTML ? (\n \n ) : live ? (\n \n \n dispatch({ type: 'update', payload: code })\n }\n />\n \n ) : (\n \n {code}\n \n )}\n \n {(copyable || fileName) && !altStyle && (\n \n \n {fileName && (\n \n {fileName}\n \n )}\n \n \n \n {copied ? t('button.copied') : t('button.copy')}\n \n \n )}\n \n {(live || preview) && (\n \n \n \n )}\n \n \n );\n};\n\nCodeBlock.propTypes = {\n altStyle: PropTypes.bool,\n autoFormat: PropTypes.bool,\n fileName: PropTypes.string,\n children: PropTypes.string.isRequired,\n className: PropTypes.string,\n components: PropTypes.shape({\n Preview: PropTypes.elementType,\n }),\n copyable: PropTypes.bool,\n formatOptions: PropTypes.object,\n highlightedLines: PropTypes.string,\n language: PropTypes.string,\n lineNumbers: PropTypes.bool,\n live: PropTypes.bool,\n preview: PropTypes.bool,\n scope: PropTypes.object,\n containerId: PropTypes.string,\n};\n\nCodeBlock.defaultProps = {\n copyable: true,\n lineNumbers: false,\n live: false,\n preview: false,\n};\n\nconst isJSLang = (language) => ['js', 'javascript'].includes(language);\n\nexport default CodeBlock;\n"],"names":["AUTO_FORMATTED_LANGUAGES","defaultComponents","Preview","LivePreview","reducer","state","action","type","code","payload","modified","CodeBlock","autoFormat","altStyle","children","className","components","componentOverrides","copyable","fileName","formatOptions","highlightedLines","language","lineNumbers","live","preview","scope","containerId","trim","isJSLang","normalizedCode","replace","replaceHTML","containsEmbeddedHTML","t","useThemeTranslation","formattedCode","useFormattedCode","disable","includes","copied","copy","useClipboard","dispatch","useReducer","copiedCode","handleCopyClick","useInstrumentedHandler","eventName","category","contents","substring","handleDownloadClick","fileExtension","split","blob","Blob","saveAs","useEffect","css","title","variant","Button","onClick","size","name","id","value","onChange","defaultProps"],"sourceRoot":""}