Code
Display code snippets with syntax highlighting, line numbers, and copy-to-clipboard functionality.
Zero Dependencies
The Code component works great with CSS-only styling. JavaScript adds copy-to-clipboard functionality. Syntax highlighting is optional - include Prism.js if you want colored syntax.
Basic Code Block
A simple code container with dark background and monospace font.
const greeting = 'Hello, World!';
console.log(greeting);
<div class="focus-code">
<pre><code>const greeting = 'Hello, World!';
console.log(greeting);</code></pre>
</div>
With Header
Add a header with a language label and copy button.
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet('World'));
<div class="focus-code">
<div class="focus-code-header">
<span class="focus-code-title focus-code-title-js">JavaScript</span>
<button class="focus-code-copy" data-focus-code-copy>
<i class="fa fa-copy"></i> Copy
</button>
</div>
<pre><code>function greet(name) {
return `Hello, ${name}!`;
}</code></pre>
</div>
Language Colors
Language labels have different colors for common programming languages.
<div>Hello</div>
.class { color: red; }
print("Hello")
echo "Hello"
<!-- Available language colors -->
<span class="focus-code-title focus-code-title-html">HTML</span>
<span class="focus-code-title focus-code-title-css">CSS</span>
<span class="focus-code-title focus-code-title-js">JavaScript</span>
<span class="focus-code-title focus-code-title-ts">TypeScript</span>
<span class="focus-code-title focus-code-title-python">Python</span>
<span class="focus-code-title focus-code-title-bash">Bash</span>
<span class="focus-code-title focus-code-title-json">JSON</span>
<span class="focus-code-title focus-code-title-php">PHP</span>
<span class="focus-code-title focus-code-title-ruby">Ruby</span>
<span class="focus-code-title focus-code-title-go">Go</span>
<span class="focus-code-title focus-code-title-rust">Rust</span>
<span class="focus-code-title focus-code-title-java">Java</span>
<span class="focus-code-title focus-code-title-sql">SQL</span>
Line Numbers
Add line numbers in a separate div so they can't be selected when copying code.
123456function fibonacci(n) { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2);}console.log(fibonacci(10));
<div class="focus-code focus-code-lines">
<div class="focus-code-header">
<span class="focus-code-title focus-code-title-js">JavaScript</span>
<button class="focus-code-copy" data-focus-code-copy>Copy</button>
</div>
<pre><div class="focus-code-line-numbers"><span>1</span><span>2</span><span>3</span><span>4</span></div><code><span class="line">function fibonacci(n) {</span><span class="line"> if (n <= 1) return n;</span><span class="line"> return fibonacci(n - 1) + fibonacci(n - 2);</span><span class="line">}</span></code></pre>
</div>
Light Variant
Use .focus-code-light for a light background variant.
npm install focus-ui
<div class="focus-code focus-code-light">
<div class="focus-code-header">
<span class="focus-code-title">Terminal</span>
<button class="focus-code-copy" data-focus-code-copy>Copy</button>
</div>
<pre><code>npm install focus-ui</code></pre>
</div>
Syntax Highlighting (Optional)
External Dependency
Syntax highlighting requires Prism.js. Include it separately - Focus UI remains zero-dependency.
<!-- Include Prism.js CSS theme -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css">
<!-- Include Prism.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
<!-- Add language-* class to code element -->
<div class="focus-code">
<pre><code class="language-javascript">const x = 1;</code></pre>
</div>
<script>
// Prism will auto-highlight, or call manually:
Prism.highlightAll();
</script>
JavaScript API
Copy buttons are auto-initialized via data-focus-code-copy. Use the API for programmatic control.
Copy Code
await Code.copy('#myCodeBlock')
Code.init()
Methods
| Method | Returns | Description |
|---|---|---|
Code.copy(selector) |
Promise | Copy code content to clipboard |
Code.init() |
void | Initialize copy buttons (auto-called on page load) |
CSS Classes Reference
| Class | Description |
|---|---|
.focus-code |
Base code block container (dark background) |
.focus-code-light |
Light background variant |
.focus-code-header |
Header bar for title and copy button |
.focus-code-title |
Language label in header |
.focus-code-title-{lang} |
Language-specific color (js, html, css, python, etc.) |
.focus-code-copy |
Copy button styling |
.focus-code-lines |
Enable line numbers layout (flexbox) |
.focus-code-line-numbers |
Container for line numbers (non-selectable) |
.line |
Wrap each code line for proper spacing |
Data Attributes
| Attribute | Description |
|---|---|
data-focus-code-copy |
Add to copy button for auto-initialization |