0.1.7 • Published 1 year ago

syntaxx-reactjs v0.1.7

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Syntaxx ReactJS

NPM JavaScript Style Guide

Highlight code syntax like pro using a truly light wrapper around the amazing Lowlight

./example/

  • code highlight using Highlight.js, including 196 languages and 242 styles
  • line numbering and wrapping fully css-styleable
  • Optimized experience both for devs and end users

Contents


Install

npm install --save syntaxx-reactjs

NextJS Compatibility

This package is using Lowlight that is provided as ESM only: Node 12+ is needed to use it, and it must be imported instead of required. Unfortunately NextJS doesn't support ESM yet.

See workaround

Basic usage

import React from 'react'

import Syntaxx from 'syntaxx-reactjs'
import 'highlight.js/styles/default.css'
import 'syntaxx-reactjs/styles/default.css'

export default function Component() {
  code=`
const c = 'Blabetiblou';
console.log(c);`

  return <Syntaxx language='javascript' value={code} />
}

Configuration

Content

Syntaxx expects the code to be highlighted to be provided as a text string via the component content or alternatively via the value property.

<Syntaxx language="bash">{`CODE_TO=beHighlighted`}</Syntaxx>

Best practices:

  • Use template literals to preserve new lines, indentation and ease usage of ' and "
  • If the content starts with a new line \n, the first character is ignored. Developers can therefore easily check the indentation, including for the first line
    const content = `
    while(true) {
      console.log('Blabetiblou');
    }`
    will display the code, skipping the first empty line
    while(true) {
      console.log('Blabetiblou');
    }
  • Longer content should be declared in separated files and later imported

    export const content = `...`
    
    import {content} from './codes.js'

Properties

Prop namedefault valuedescription
language(required)expected programming language to be highlighted. See available values in Highlight.js doc
valuecode to be highlighted if no inner content is provided. The first new line \n char is ignored if present (see content section)
firstLineNumber1Starting value for the line numbering

Styling highlighting

Highlight.js comes with hundreds of pre-built styling. Just include them to update the rendering of Syntaxx

import 'highlight.js/styles/default.css'

Custom look and feel

Highlighted lines are disposed using a grid layout that can be fully customized

<pre>
  <code>
    <span class="syntaxx-grid">
      <span class="syntaxx-linenumber">1</span>
      <span class="syntaxx-line">...</span>
      <span class="syntaxx-linenumber">2</span>
      <span class="syntaxx-line">...</span>
      <span class="syntaxx-linenumber">3</span>
      <span class="syntaxx-line">...</span>
    </span>
  </code>
</pre>

Only few layout properties are hardcoded in style attribute and are advised to be kept untouched

elementreserved css propertyvalue
span.syntaxx-griddisplaygrid
span.syntaxx-gridgrid-template-columnsauto 1fr
span.syntaxx-linenumbergrid-column1
span.syntaxx-linegrid-column2
span.syntaxx-linewhite-spacepre-wrap

Other attributes can be updated with no risk.

code > span.syntaxx-grid {
  font-family: monospace, "Courier New";
}
code > span.syntaxx-grid > span {
  /* Vertical space between lines */
  margin-bottom: 1px;
}
code > span.syntaxx-grid > span.syntaxx-linenumber {
  /* line numbering background */
  background-color: red;
}
code > span.syntaxx-grid > span.syntaxx-line {
  /* Nice line wrapping */
  padding: 1em;
  text-indent: -1em;
}

Roadmap

  • Publish on NPM
  • Start line number
  • Mark line
  • Line comment
  • Inline code
  • de-indent
  • optional empty first line removal + write doc of registerLanguage
  • add property of component to register language
  • optionally load languages
  • dynamic styling
  • render optimization
  • responsive layout
  • optional line numbering select protection
  • demo website
  • secondary stylesheet

License

MIT © https://github.com/raphaeljoie

0.1.7

1 year ago

0.1.6

1 year ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago