0.1.17 • Published 10 months ago

@0x1js/highlighter v0.1.17

Weekly downloads
-
License
TDLv1
Repository
github
Last release
10 months ago

0x1 Highlighter 🌈

Lightweight, beautiful code highlighting for your 0x1 applications

A fast, customizable syntax highlighter built specifically for the 0x1 Framework with support for JavaScript, TypeScript, Bash, and more. Features beautiful themes, copy-to-clipboard functionality, and seamless React integration.

✨ Features

  • 🚀 Blazing Fast - Lightweight tokenization with zero external dependencies
  • 🎨 Beautiful Themes - Dark, Light, and Violet (0x1 brand) themes
  • 📋 Copy to Clipboard - Built-in copy functionality with user feedback
  • 📱 Responsive - Mobile-friendly with touch support
  • Accessible - Proper ARIA labels and keyboard navigation
  • 🌟 Modern - Supports latest JavaScript/TypeScript features
  • 🎯 Framework Agnostic - Works with or without React/Next.js/0x1

🏗️ Installation

# Install the package
bun add @0x1js/highlighter

# Or with npm
npm install @0x1js/highlighter

🚀 Quick Start

React Component (Recommended)

import { SyntaxHighlighter } from '@0x1js/highlighter';
import '@0x1js/highlighter/styles';

function MyComponent() {
  const code = `
const { useState } = require('0x1');

function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        Increment
      </button>
    </div>
  );
}
`;

  return (
    <SyntaxHighlighter
      language="javascript"
      theme="violet"
      showLineNumbers
      title="Counter Component"
      copyable
    >
      {code}
    </SyntaxHighlighter>
  );
}

Vanilla JavaScript

import { highlight } from '@0x1js/highlighter';
import '@0x1js/highlighter/styles';

const code = `
function greet(name) {
  console.log(\`Hello, \${name}!\`);
}
`;

const highlightedHTML = highlight(code, {
  language: 'javascript',
  theme: 'dark',
  showLineNumbers: true
});

document.getElementById('code-container').innerHTML = highlightedHTML;

🎨 Themes

Dark Theme (Default)

<SyntaxHighlighter language="javascript" theme="dark">
  {code}
</SyntaxHighlighter>

Light Theme

<SyntaxHighlighter language="javascript" theme="light">
  {code}
</SyntaxHighlighter>

Violet Theme (0x1 Brand)

<SyntaxHighlighter language="javascript" theme="violet">
  {code}
</SyntaxHighlighter>

🛠️ Configuration Options

interface HighlightOptions {
  language: 'javascript' | 'typescript' | 'bash' | 'json' | 'html' | 'css';
  theme?: 'dark' | 'light' | 'violet';
  showLineNumbers?: boolean;
  startLineNumber?: number;
  maxLines?: number;
  wrapLines?: boolean;
}

interface SyntaxHighlighterProps extends HighlightOptions {
  children: string;
  className?: string;
  style?: React.CSSProperties;
  copyable?: boolean;
  title?: string;
  footer?: string;
  onCopy?: (code: string) => void;
}

📚 Examples

Different Languages

{/* TypeScript */}
<SyntaxHighlighter language="typescript" theme="violet">
  {tsCode}
</SyntaxHighlighter>

{/* Bash commands */}
<SyntaxHighlighter language="bash" theme="dark">
  {`#!/bin/bash
cd /path/to/project
bun install
bun run build`}
</SyntaxHighlighter>

{/* JSON data */}
<SyntaxHighlighter language="json" theme="light" showLineNumbers>
  {jsonData}
</SyntaxHighlighter>

With Custom Styling

<SyntaxHighlighter
  language="typescript"
  theme="violet"
  showLineNumbers
  startLineNumber={10}
  maxLines={50}
  title="API Routes"
  footer="src/api/users.ts"
  className="my-custom-class"
  style={{ marginBottom: '2rem' }}
  onCopy={(code) => console.log('Copied:', code)}
>
  {code}
</SyntaxHighlighter>

Inline Code

import { InlineCode } from '@0x1js/highlighter';

<p>
  Use <InlineCode>console.log()</InlineCode> for debugging.
</p>

🎯 Advanced Usage

Custom Hook

import { useHighlight } from '@0x1js/highlighter';

function CodeBlock({ code, language }) {
  const highlightedHTML = useHighlight(code, { 
    language, 
    theme: 'violet',
    showLineNumbers: true 
  });
  
  return (
    <div 
      className="syntax-highlighter theme-violet"
      dangerouslySetInnerHTML={{ __html: highlightedHTML }}
    />
  );
}

Server-Side Rendering

// Works great with SSR
import { highlight } from '@0x1js/highlighter';

export function generateStaticHTML(code) {
  return highlight(code, {
    language: 'javascript',
    theme: 'dark',
    showLineNumbers: true
  });
}

🌍 Supported Languages

  • JavaScript - Full ES2024+ support
  • TypeScript - Types, interfaces, generics
  • Bash - Shell scripts, commands, variables
  • JSON - Configuration files, API responses
  • HTML - Markup (coming soon)
  • CSS - Stylesheets (coming soon)

Get all supported languages:

import { getSupportedLanguages } from '@0x1js/highlighter';

console.log(getSupportedLanguages());
// ['javascript', 'typescript', 'bash', 'json', 'html', 'css']

💡 Best Practices

✅ Recommended Approach

// Use the main component with language prop
import { SyntaxHighlighter } from '@0x1js/highlighter';

<SyntaxHighlighter language="typescript" theme="dark">
  {code}
</SyntaxHighlighter>

⚠️ Alternative (but not recommended)

// Individual language components work but are unnecessary
import { TypeScriptHighlighter } from '@0x1js/highlighter';

<TypeScriptHighlighter theme="dark">
  {code}
</TypeScriptHighlighter>

🎨 Customization

Custom CSS

/* Override theme colors */
.syntax-highlighter.theme-custom {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: #ffffff;
}

.theme-custom .token-keyword {
  color: #ffd700;
  font-weight: bold;
}

.theme-custom .token-string {
  color: #98fb98;
}

🏗️ Building

# Build the package
bun run build

# Development with watch mode
bun run dev

📝 License

MIT © 0x1 Framework

🤝 Contributing

We welcome contributions! Please feel free to submit a Pull Request.

🔗 Links


Made with ❤️ for the 0x1 Community

0.1.17

10 months ago

0.1.16

10 months ago

0.1.15

10 months ago

0.1.14

10 months ago

0.1.13

10 months ago

0.1.12

10 months ago

0.1.11

10 months ago

0.1.10

10 months ago

0.1.9

10 months ago

0.1.8

10 months ago

0.1.7

10 months ago

0.1.6

10 months ago

0.1.5

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago