UNPKG

@atlaskit/renderer

Version:
72 lines 3.19 kB
/** * @jsxRuntime classic * @jsx jsx */ import { Fragment, lazy, memo, Suspense, useState } from 'react'; /* eslint-disable @typescript-eslint/consistent-type-imports, @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766; jsx required at runtime for @jsxRuntime classic */ import { jsx } from '@emotion/react'; import { CodeBlockSharedCssClassName } from '@atlaskit/editor-common/styles'; import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals'; import { useInViewport } from '../../hooks/use-in-viewport'; import { useBidiWarnings } from '../../hooks/use-bidi-warnings'; import LightWeightCodeBlock from './components/lightWeightCodeBlock'; import CodeBlockContainer from './components/codeBlockContainer'; const LazyAkCodeBlock = /*#__PURE__*/lazy( // Ignored via go/ees005 // eslint-disable-next-line require-await async () => import( /* webpackChunkName: "@atlaskit-internal_renderer-codeBlock" */ '@atlaskit/code/block')); const joinWithSpaces = (...strs) => strs.join(' '); const MemoizedLightWeightCodeBlock = /*#__PURE__*/memo(LightWeightCodeBlock); const WindowedCodeBlock = ({ text, language, allowCopyToClipboard, allowWrapCodeBlock = false, codeBidiWarningTooltipEnabled, hideLineNumbers = false, className: rootClassName, wrap }) => { const { warningLabel } = useBidiWarnings({ enableWarningTooltip: codeBidiWarningTooltipEnabled }); const { isInViewport, trackingRef } = useInViewport(); const className = joinWithSpaces(CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER, rootClassName); const memoizedLightWeightCodeBlock = jsx(MemoizedLightWeightCodeBlock, { ref: trackingRef, text: text, codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled, hideLineNumbers: expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && hideLineNumbers // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 , className: rootClassName }); const [wrapLongLines, setWrapLongLines] = useState(() => expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && Boolean(wrap)); return isInViewport ? jsx(Fragment, null, jsx(Suspense, { fallback: memoizedLightWeightCodeBlock }, jsx(CodeBlockContainer, { allowCopyToClipboard: allowCopyToClipboard, allowWrapCodeBlock: allowWrapCodeBlock // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 , className: className, setWrapLongLines: setWrapLongLines, text: text, wrapLongLines: wrapLongLines }, jsx(LazyAkCodeBlock, { language: language, text: text, codeBidiWarningLabel: warningLabel, codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled, shouldWrapLongLines: allowWrapCodeBlock && wrapLongLines, shouldShowLineNumbers: !(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && hideLineNumbers), hasBidiWarnings: expValEquals('platform_editor_remove_bidi_char_warning', 'isEnabled', true) ? false : undefined })))) : memoizedLightWeightCodeBlock; }; export default WindowedCodeBlock;