Code Block - Skeleton

  1. integrations
  2. code block
  3. react

Code Block

Learn how to integrate Shiki, a beautiful yet powerful syntax highlighter.

Shiki (式, a Japanese word for “Style”) is a beautiful and powerful syntax highlighter based on TextMate grammar and themes, the same engine as VS Code’s syntax highlighting. It provides accurate and fast syntax highlighting for almost any mainstream programming language.

Shiki Documentation →

Installation

Install Shiki with your preferred package manager.

Terminal window
npm install -D shiki

Next.js Integration

Shiki provides official documentation for integrating into Next.js. This guide will follow this outline.

Create a Component

A reusable component should suffice in most projects. Tap the code tab below to access the source, then follow the steps below.

  1. Implement a new <CodeBlock> component in /src/components/CodeBlock/CodeBlock.tsx.
  2. Implement the required component prop types in /src/components/CodeBlock/types.ts.
  3. Implement several variations of our <CodeBlock> component in any route page.tsx.
npx sv create my-skeleton-app
<div class="bg-green-500">Hello World</div>
.foobar { background: green; }
const foo = 'bar';

A few things of note about this component:

  • You will need to import and configure any number of Shiki themes.
  • You will need to import and configure any number of supported languages.
  • The component has been implemented using Skeleton’s component style guidelines.
  • This provides a number of style props for easy customization via Skeleton’s standard conventions.
  • The component exposes code, lang, and theme properties to configure on-the-fly.
  • The Code Block <pre> tag is auto-generated by Shiki; target utility classes with: [&>pre]:myClassHere.

Programmatic Usage

This use case falls outside the scope of Skeleton. The following is provided merely as guidance.

In some cases you may not have direct access to the source code, such as content from a blog posts or CMS pages. In fact the code may even come pre-baked with surrounding <pre> or <code> elements. For this, you’ll need to follow the general steps below. Specific implementation may differ based on your app and meta-framework.

  1. Query all <pre> or <code> blocks using Javascript tools like document.querySelectorAll(). Be as specific as possible.
  2. Ensure you have a clean instance of the source code itself, with no extra markup injected within.
  3. Use Shiki’s codeToHtml feature to parse the code as styled HTML markup.
  4. Then append each instance of the code blocks in your DOM.

Custom Themes

Shiki provides support for generating a custom highlighter theme:

Shiki theme values can be defined using Skeleton custom theme properties, such as rgba(--color-primary-500).

Accessibility

See Salma Alam-Naylor’s guidelines for creating accessible code blocks that meet WGAC standards.