Blocos de código
Blocos de código dentro da documentação são superpotentes 💪.
Título do código#
Você pode adicionar um título ao bloco de código adicionando a chave title após o idioma (deixe um espaço entre eles).
```jsx title="/src/components/HelloCodeTitle.js"function HelloCodeTitle(props) {  return <h1>Hello, {props.name}</h1>;}```function HelloCodeTitle(props) {  return <h1>Hello, {props.name}</h1>;}Destaque de sintaxe#
Blocos de código são blocos de texto envolvidos por strings de 3 crases (backticks). Você pode verificar esta referência para especificações de MDX.
```jsxconsole.log('Todo repositório deve vir com um mascote.');```Use a meta string de idioma correspondente para o seu bloco de código, e o Docusaurus irá pegar o destaque de sintaxe automaticamente, alimentado por Prism React Renderer.
console.log('Todo repositório deve vir com um mascote.');Temas#
Por padrão, o tema de destaque da sintaxe do Prism que usamos é Palenight. Você pode alterar isso para outro tema passando o campo theme no prism como themeConfig no seu docusaurus.config.js.
Por exemplo, se você preferir usar o tema de destaque dracula:
module.exports = {  themeConfig: {    prism: {      theme: require('prism-react-renderer/themes/dracula'),    },  },};Idiomas suportados#
Por padrão, o Docusaurus vem com um subconjunto de linguagens comumente usadas.
caution
Algumas linguagens populares como Java, C#, ou PHP não estão ativadas por padrão.
Para adicionar syntax highlighting para qualquer um dos outros idiomas suportados pelo Prism, defina-o em uma variedade de idiomas adicionais.
Por exemplo, se você deseja adicionar destaque para a linguagem powershell:
module.exports = {  // ...  themeConfig: {    prism: {      additionalLanguages: ['powershell'],    },    // ...  },};Se você quiser adicionar destaques para idiomas que ainda não são suportados pelo Prisma, você pode deslizar prisma-include-languages:
- npm
 - Yarn
 
npm run swizzle @docusaurus/theme-classic prism-include-languagesyarn run swizzle @docusaurus/theme-classic prism-include-languagesEle vai produzir prism-include-languages.js na pasta src/theme. Você pode adicionar suporte para linguagens personalizadas editando prisma-include-languages.js:
const prismIncludeLanguages = (Prism) => {  // ...
  additionalLanguages.forEach((lang) => {    require(`prismjs/components/prism-${lang}`); // eslint-disable-line  });
  require('/path/to/your/prism-language-definition');
  // ...};Você pode consultar as definições de idioma oficiais do Prisma quando você estiver escrevendo suas próprias definições de idioma.
Destaque de linha#
Você pode colocar ênfase em certas linhas de código especificando intervalos de linha após a meta string de idioma (deixe um espaço após o idioma).
```jsx {3}function HighlightSomeText(highlight) {  if (highlight) {    return 'This text is highlighted!';  }
  return 'Nothing highlighted';}```function HighlightSomeText(highlight) {  if (highlight) {    return 'Este texto está destacado!';  }
  return 'Nada destacado';}Para fazer isso, o Docusaurus adiciona a classe docusaurus-highlight-code-line às linhas destacadas. Você precisará definir seu próprio estilo para este CSS, possivelmente em seu src/css/custom.css com uma cor de fundo personalizada que depende do tema de destaque de sintaxe selecionado. A cor indicada abaixo funciona para o tema padrão de destaque (Palenight), portanto, se você estiver usando outro tema, você terá que ajustar a cor de acordo.
.docusaurus-highlight-code-line {  background-color: rgb(72, 77, 91);  display: block;  margin: 0 calc(-1 * var(--ifm-pre-padding));  padding: 0 var(--ifm-pre-padding);}
/* Se você tiver um tema diferente de destaque de sintaxe para o modo escuro. */html[data-theme='dark'] .docusaurus-highlight-code-line {  /* Cor que funciona com o tema escuro */  background-color: rgb(100, 100, 100);}Destaque de múltiplas linhas#
Para destacar várias linhas, separe os números das linhas por vírgulas ou use a sintaxe de intervalo para selecionar um pedaço de linhas. Esse recurso usa a biblioteca de parse-number-range e você pode encontrar mais sintaxe em seus detalhes do projeto.
```jsx {1,4-6,11}import React from 'react';
function MyComponent(props) {  if (props.isBar) {    return <div>Bar</div>;  }
  return <div>Foo</div>;}
export default MyComponent;```import React from 'react';
function MyComponent(props) {  if (props.isBar) {    return <div>Bar</div>;  }
  return <div>Foo</div>;}
export default MyComponent;Destacar com comentários#
Você também pode usar comentários com highlight-next-line, highlight-start, e highlight-end para selecionar quais linhas são destacadas.
```jsxfunction HighlightSomeText(highlight) {  if (highlight) {    // highlight-next-line    return 'This text is highlighted!';  }
  return 'Nothing highlighted';}
function HighlightMoreText(highlight) {  // highlight-start  if (highlight) {    return 'This range is highlighted!';  }  // highlight-end
  return 'Nothing highlighted';}```function HighlightSomeText(highlight) {  if (highlight) {    return 'Este texto está destacado!';  }
  return 'Nada destacado';}
function HighlightMoreText(highlight) {  if (highlight) {    return 'Este trecho está destacado!';  }
  return 'Nada destacado';}Sintaxe de comentário suportada:
| Idioma | Sintaxe | 
|---|---|
| JavaScript | /* ... */ and // ... | 
| JSX | {/* ... */} | 
| Python | # ... | 
| HTML | <!-- ... --> | 
Se houver uma sintaxe que não seja suportada atualmente, estamos abertos para adicioná-la! Pull requests bem-vindos.
Editor de código interativo#
(Desenvolvido por React Live)
Você pode criar um editor de codificação interativo com o plugin @docusaurus/theme-live-codeblock.
Primeiro, adicione o plugin ao seu pacote.
- npm
 - Yarn
 
npm install --save @docusaurus/theme-live-codeblockyarn add @docusaurus/theme-live-codeblockVocê também precisará adicionar o plugin ao seu docusaurus.config.js.
module.exports = {  // ...  themes: ['@docusaurus/theme-live-codeblock'],  // ...};Para usar o plugin, crie um bloco de código com live anexado à string meta do idioma.
```jsx livefunction Clock(props) {  const [date, setDate] = useState(new Date());  useEffect(() => {    var timerID = setInterval(() => tick(), 1000);
    return function cleanup() {      clearInterval(timerID);    };  });
  function tick() {    setDate(new Date());  }
  return (    <div>      <h2>It is {date.toLocaleTimeString()}.</h2>    </div>  );}```O bloco de código será renderizado como um editor interativo. As alterações no código refletirão no painel de resultados ao vivo.
SyntaxError: Unexpected token (1:8)
1 : return ()
            ^Importações#
react-live and imports
Não é possível importar componentes diretamente do editor react-live code, você tem que definir importações disponíveis desde o início.
Por padrão, todas as importações React estão disponíveis. Se você precisar de mais importações disponíveis, deslize o âmbito de react-live:
- npm
 - Yarn
 
npm run swizzle @docusaurus/theme-live-codeblock ReactLiveScopeyarn run swizzle @docusaurus/theme-live-codeblock ReactLiveScopeimport React from 'react';
const ButtonExample = (props) => (  <button    {...props}    style={{      backgroundColor: 'white',      border: 'solid red',      borderRadius: 20,      padding: 10,      cursor: 'pointer',      ...props.style,    }}  />);
// Adicionar importações react-live que você precisa aquiconst ReactLiveScope = {  React,  . .React,  ButtonExample,};
export default ReactLiveScope;O componente ButtonExample já está disponível para uso:
SyntaxError: Unexpected token (1:8)
1 : return ()
            ^Suporte para blocos de código multi-linguagem#
Com MDX, você pode facilmente criar componentes interativos dentro da sua documentação, por exemplo, para exibir código em várias linguagens de programação e alternar entre elas usando um componente de abas.
Em vez de implementar um componente dedicado para blocos de código de suporte multi-linguagem, Nós implementamos um componente genérico Tabs no tema clássico para que você possa usá-lo também para outros cenários que não sejam de código.
O exemplo a seguir mostra como você pode ter guias de código multi-linguagem em seus documentos. Observe que as linhas vazias acima e abaixo de cada bloco de idioma é intencional. Esta é uma limitação atual do MDX, você precisa deixar linhas vazias em torno da sintaxe Markdown para o analisador MDX para saber que é sintaxe Markdown e não JSX.
import Tabs from '@theme/Tabs';import TabItem from '@theme/TabItem';
<Tabs  defaultValue="js"  values={[    { label: 'JavaScript', value: 'js', },    { label: 'Python', value: 'py', },    { label: 'Java', value: 'java', },  ]}><TabItem value="js">
```jsfunction helloWorld() {  console.log('Olá mundo!');}```
</TabItem><TabItem value="py">
```pydef hello_world():  print 'Olá mundo!'```
</TabItem><TabItem value="java">
```javaclass HelloWorld {  public static void main(String args[]) {    System.out.println("Olá mundo");  }}```
</TabItem></Tabs>E você receberá o seguinte:
- JavaScript
 - Python
 - Java
 
function helloWorld() {  console.log('Olá mundo!');}def hello_world():  print 'Olá mundo!'class HelloWorld {  public static void main(String args[]) {    System.out.println("Olá mundo");  }}Você pode querer implementar sua própria abstração de <MultiLanguageCode /> se você encontrar a abordagem acima demais demais. Poderemos apenas implementar uma no futuro por conveniência.
If you have multiple of these multi-language code tabs, and you want to sync the selection across the tab instances, refer to the Syncing tab choices section.