Become a member
to unlock all features

Level Up!

Access all courses & lessons on egghead today and lock-in your price for life.


    Scroll, Zoom, and Highlight code in a mdx-deck slide presentation with Code Surfer <🏄/>


    If you have a presentation coming up or you just need to present some documentation, then the Code Surfer React component is a powerful way to Highlight, Zoom, and Scroll snippets of code. This component is particularly designed to work with mdx-deck, which is a MDX-based presentation framework that enables easy slide creation with markdown and React components.

    https://github.com/pomber/code-surfer https://github.com/jxnblk/mdx-deck



    Become a Member to view code

    You must be a Pro Member to view code

    Access all courses and lessons, track your progress, gain confidence and expertise.

    Become a Member
    and unlock code for this lesson
    orLog In




    Instructor: If you have npm version 6.1 or above, then you could use the new initializer feature and create a MDX deck with npm init deck, and then the name of your new project. We'll call it my-code.

    This will map the initializer to a package named create-deck, which will be temporarily installed with npx. Once it's downloaded, it'll bootstrap our app and install all the necessary dependencies.

    Now, we'll switch to our new directory and install the code-surfer package that we'll use to highlight, zoom, and scroll our code snippets, and we'll install the raw-loader for webpack that will allow us to easily require code snippets from disk, and we'll make these dev dependencies. Once everything is installed, let's kick up VS Code and start poking around.

    There's already a pretty basic deck MDX file provided for us, which is a combination of JSX and Markdown. Let's kick up a dev server with npm start. It'll launch a browser for us, and we can navigate the basic three-slide presentation using the keyboard.

    We'll gut out most of the slide deck so that we could focus on the code-surfer component. First, let's import code-surfer from mdx-deck-code-surfer. Then we'll use the code-surfer component. Here, we'll provide some example code to render, console.log ("Hello, World!"). When saved, it'll automatically show up in our browser.

    Next, let's grab a snippet from the React website, and create a snippets folder and make a file called one.snippet that contains the code that we just copied. We could replace the static console.log and require the contents from our snippet file.

    To do this, we'll use the webpack raw-loader that we installed earlier, and reference the one.snippet file. Voila, the content show up in the browser. Next, let's try some props of the code-surfer component.

    We'll start with the title prop, which shows up at the top of the slide. Then we'll try the notes prop, which shows up at the bottom of the slide. These are the initial notes that will show up when the component first renders. We could also turn on line numbers if we choose to do so.

    The steps prop is where things start to get interesting. When giving a presentation with code displayed, it's beneficial if you could help the audience focus on one or more lines of code instead of showing a whole bunch at once.

    With code-surfer, we could specify what line to highlight, and give a note providing more detail about that line. In this case, we'll just say line. On the right, sure enough, the line is given a focus while the rest of the code fades away.

    We could also highlight multiple lines just by adding them to the array, like so, and will update the note to say lines. Sure enough, lines four, five, and six are highlighted.

    If you need several lines in sequence highlighted, it'd be somewhat annoying to type them all. Thankfully, there is a range option that we could use instead. In this case, the result is the same as manually giving lines four, five, and six.

    You could also provide multiple ranges in case you wanted to show off different snippets of code that aren't next to each other.

    Sometimes, you may want to highlight a portion of a line, and not the whole line itself. Code-surfer has a feature for that, too, called tokens. You could provide a line number as an object key, and then an array of tokens from within that line to highlight. Here, I'm focusing on the second and sixth tokens of the first line, which ends up highlighting hello, message, and React.

    This seems to work great and all with a relatively small snippet of code, but how does it behave with larger chunks of code? Let's find out.

    We'll grab another code snippet from the React website, but this time something longer. We'll paste that into another file and update code-surfer to reference it. The cool part hasn't happened yet.

    Let's navigate backwards through the steps to the beginning, and voila. Code-surfer zooms out to give a high-level view of the code, along with the initial notes. Then as you proceed through the steps, it zooms back in, focusing on each step separately.

    The last feature I'd like to highlight is what happens when lines, ranges, or tokens are out of range of what is currently viewed. Let's add a step that highlights lines 30 through 33. When the step is triggered, the slide will auto-scroll to the appropriate location to show the desired lines. Regardless if it needs to scroll up or down, it'll make sure it's within view for the audience to see.

    If you have a presentation coming up, or if you need to present some documentation, code-surfer is a powerful way to navigate and explain snippets of code.