/
githubmirror
/
docusaurus
Обзор
Документация
Войти
/
githubmirror
/
docusaurus
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/docusaurus-theme-classic/src/theme/CodeBlock/Line/index.tsx
72 строки
2 KB
Sébastien Lorber
fix(theme): Fix code block text selection copy on Firefox? (#11565)
21 ноя 2025, 21:19
Не верифицирован
21 ноя 2025, 21:19
d6cbf6f
Код
Авторство
О чём код?
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, {type ReactNode} from 'react'; import clsx from 'clsx'; import LineToken from '@theme/CodeBlock/Line/Token'; import type {Props} from '@theme/CodeBlock/Line'; import styles from './styles.module.css'; type Token = Props['line'][number]; // This <br/ seems useful when the line has no content to prevent collapsing. // For code blocks with "diff" languages, this makes the empty lines collapse to // zero height lines, which is undesirable. // See also https://github.com/facebook/docusaurus/pull/11565 function LineBreak() { return <br />; } // Replaces single lines with '\n' by '' so that we don't end up with // duplicate line breaks (the '\n' + the artificial <br/> above) // see also https://github.com/facebook/docusaurus/pull/11565 function fixLineBreak(line: Token[]) { const singleLineBreakToken = line.length === 1 && line[0]!.content === '\n' ? line[0] : undefined; if (singleLineBreakToken) { return [{...singleLineBreakToken, content: ''}]; } return line; } export default function CodeBlockLine({ line: lineProp, classNames, showLineNumbers, getLineProps, getTokenProps, }: Props): ReactNode { const line = fixLineBreak(lineProp); const lineProps = getLineProps({ line, className: clsx(classNames, showLineNumbers && styles.codeLine), }); const lineTokens = line.map((token, key) => { const tokenProps = getTokenProps({token}); return ( <LineToken key={key} {...tokenProps} line={line} token={token}> {tokenProps.children} </LineToken> ); }); return ( <div {...lineProps}> {showLineNumbers ? ( <> <span className={styles.codeLineNumber} /> <span className={styles.codeLineContent}>{lineTokens}</span> </> ) : ( lineTokens )} <LineBreak /> </div> ); }