Skip to content

Commit

Permalink
fix(theme): allow empty code blocks and live playgrounds (#9704)
Browse files Browse the repository at this point in the history
  • Loading branch information
slorber committed Jan 5, 2024
1 parent a779857 commit a9cef92
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 7 deletions.
8 changes: 8 additions & 0 deletions packages/docusaurus-theme-classic/src/theme-classic.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,14 @@ declare module '@theme/CodeBlock' {
export default function CodeBlock(props: Props): JSX.Element;
}

declare module '@theme/CodeInline' {
import type {ComponentProps} from 'react';

export interface Props extends ComponentProps<'code'> {}

export default function CodeInline(props: Props): JSX.Element;
}

declare module '@theme/CodeBlock/CopyButton' {
export interface Props {
readonly code: string;
Expand Down
16 changes: 16 additions & 0 deletions packages/docusaurus-theme-classic/src/theme/CodeInline/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* 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 from 'react';
import type {Props} from '@theme/CodeInline';

// Simple component used to render inline code blocks
// its purpose is to be swizzled and customized
// MDX 1 used to have a inlineCode comp, see https://mdxjs.com/migrating/v2/
export default function CodeInline(props: Props): JSX.Element {
return <code {...props} />;
}
18 changes: 13 additions & 5 deletions packages/docusaurus-theme-classic/src/theme/MDXComponents/Code.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,23 @@
import type {ComponentProps} from 'react';
import React from 'react';
import CodeBlock from '@theme/CodeBlock';
import CodeInline from '@theme/CodeInline';
import type {Props} from '@theme/MDXComponents/Code';

export default function MDXCode(props: Props): JSX.Element {
const shouldBeInline = React.Children.toArray(props.children).every(
(el) => typeof el === 'string' && !el.includes('\n'),
function shouldBeInline(props: Props) {
return (
// empty code blocks have no props.children,
// see https://github.com/facebook/docusaurus/pull/9704
typeof props.children !== 'undefined' &&
React.Children.toArray(props.children).every(
(el) => typeof el === 'string' && !el.includes('\n'),
)
);
}

return shouldBeInline ? (
<code {...props} />
export default function MDXCode(props: Props): JSX.Element {
return shouldBeInline(props) ? (
<CodeInline {...props} />
) : (
<CodeBlock {...(props as ComponentProps<typeof CodeBlock>)} />
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ declare module '@theme/Playground' {
type LiveProviderProps = React.ComponentProps<typeof LiveProvider>;

export interface Props extends CodeBlockProps, LiveProviderProps {
children: string;
// Allow empty live playgrounds
children?: string;
}
export default function Playground(props: LiveProviderProps): JSX.Element;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ export default function Playground({
return (
<div className={styles.playgroundContainer}>
<LiveProvider
code={children.replace(/\n$/, '')}
code={children?.replace(/\n$/, '')}
noInline={noInline}
transformCode={transformCode ?? DEFAULT_TRANSFORM_CODE}
theme={prismTheme}
Expand Down
30 changes: 30 additions & 0 deletions website/_dogfooding/_pages tests/code-block-tests.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -458,3 +458,33 @@ See https://github.com/facebook/docusaurus/issues/9517
</head>
</html>
```

## Empty code blocks edge cases

Empty inline code block: ``

Single space inline code block: ` `

Empty code block

{/* prettier-ignore */}
```
```

Empty 1 line code block

```
```

Empty 2 line code block

```
```

Empty live code block

```js live
```

0 comments on commit a9cef92

Please sign in to comment.