JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 890
  • Score
    100M100P100Q102712F

Lightweight, extensible code editor component for React apps

Package Exports

  • prism-react-editor
  • prism-react-editor/autocomplete
  • prism-react-editor/autocomplete-icons.css
  • prism-react-editor/autocomplete.css
  • prism-react-editor/autocomplete/css
  • prism-react-editor/autocomplete/javascript
  • prism-react-editor/autocomplete/markup
  • prism-react-editor/autocomplete/svelte
  • prism-react-editor/autocomplete/vue
  • prism-react-editor/code-block.css
  • prism-react-editor/code-blocks
  • prism-react-editor/code-folding
  • prism-react-editor/code-folding.css
  • prism-react-editor/commands
  • prism-react-editor/copy-button
  • prism-react-editor/copy-button.css
  • prism-react-editor/cursor
  • prism-react-editor/cursor.css
  • prism-react-editor/extensions
  • prism-react-editor/guides
  • prism-react-editor/highlight-brackets
  • prism-react-editor/invisibles.css
  • prism-react-editor/languages
  • prism-react-editor/languages/abap
  • prism-react-editor/languages/abnf
  • prism-react-editor/languages/actionscript
  • prism-react-editor/languages/ada
  • prism-react-editor/languages/agda
  • prism-react-editor/languages/al
  • prism-react-editor/languages/antlr4
  • prism-react-editor/languages/apacheconf
  • prism-react-editor/languages/apex
  • prism-react-editor/languages/apl
  • prism-react-editor/languages/applescript
  • prism-react-editor/languages/aql
  • prism-react-editor/languages/arduino
  • prism-react-editor/languages/arff
  • prism-react-editor/languages/arturo
  • prism-react-editor/languages/asciidoc
  • prism-react-editor/languages/asm
  • prism-react-editor/languages/aspnet
  • prism-react-editor/languages/astro
  • prism-react-editor/languages/autohotkey
  • prism-react-editor/languages/autoit
  • prism-react-editor/languages/avisynth
  • prism-react-editor/languages/avro-idl
  • prism-react-editor/languages/awk
  • prism-react-editor/languages/bash
  • prism-react-editor/languages/basic
  • prism-react-editor/languages/batch
  • prism-react-editor/languages/bbj
  • prism-react-editor/languages/bicep
  • prism-react-editor/languages/birb
  • prism-react-editor/languages/bison
  • prism-react-editor/languages/bqn
  • prism-react-editor/languages/brightscript
  • prism-react-editor/languages/bro
  • prism-react-editor/languages/bsl
  • prism-react-editor/languages/cfscript
  • prism-react-editor/languages/chaiscript
  • prism-react-editor/languages/cil
  • prism-react-editor/languages/cilk
  • prism-react-editor/languages/clike
  • prism-react-editor/languages/clojure
  • prism-react-editor/languages/cmake
  • prism-react-editor/languages/cobol
  • prism-react-editor/languages/coffeescript
  • prism-react-editor/languages/common
  • prism-react-editor/languages/concurnas
  • prism-react-editor/languages/cooklang
  • prism-react-editor/languages/coq
  • prism-react-editor/languages/cshtml
  • prism-react-editor/languages/css
  • prism-react-editor/languages/cue
  • prism-react-editor/languages/cypher
  • prism-react-editor/languages/dataweave
  • prism-react-editor/languages/dax
  • prism-react-editor/languages/dhall
  • prism-react-editor/languages/django
  • prism-react-editor/languages/dns-zone-file
  • prism-react-editor/languages/docker
  • prism-react-editor/languages/dot
  • prism-react-editor/languages/ebnf
  • prism-react-editor/languages/editorconfig
  • prism-react-editor/languages/eiffel
  • prism-react-editor/languages/ejs
  • prism-react-editor/languages/elixir
  • prism-react-editor/languages/elm
  • prism-react-editor/languages/erb
  • prism-react-editor/languages/erlang
  • prism-react-editor/languages/etlua
  • prism-react-editor/languages/excel-formula
  • prism-react-editor/languages/factor
  • prism-react-editor/languages/false
  • prism-react-editor/languages/firestore-security-rules
  • prism-react-editor/languages/fortran
  • prism-react-editor/languages/fsharp
  • prism-react-editor/languages/ftl
  • prism-react-editor/languages/gap
  • prism-react-editor/languages/gcode
  • prism-react-editor/languages/gdscript
  • prism-react-editor/languages/gettext
  • prism-react-editor/languages/gherkin
  • prism-react-editor/languages/git
  • prism-react-editor/languages/glsl
  • prism-react-editor/languages/gml
  • prism-react-editor/languages/gn
  • prism-react-editor/languages/go-module
  • prism-react-editor/languages/gradle
  • prism-react-editor/languages/graphql
  • prism-react-editor/languages/groovy
  • prism-react-editor/languages/haml
  • prism-react-editor/languages/handlebars
  • prism-react-editor/languages/haskell
  • prism-react-editor/languages/hcl
  • prism-react-editor/languages/hoon
  • prism-react-editor/languages/html
  • prism-react-editor/languages/ichigojam
  • prism-react-editor/languages/icon
  • prism-react-editor/languages/iecst
  • prism-react-editor/languages/ignore
  • prism-react-editor/languages/index
  • prism-react-editor/languages/inform7
  • prism-react-editor/languages/ini
  • prism-react-editor/languages/io
  • prism-react-editor/languages/j
  • prism-react-editor/languages/jolie
  • prism-react-editor/languages/jq
  • prism-react-editor/languages/json
  • prism-react-editor/languages/jsx
  • prism-react-editor/languages/julia
  • prism-react-editor/languages/keepalived
  • prism-react-editor/languages/keyman
  • prism-react-editor/languages/kotlin
  • prism-react-editor/languages/kumir
  • prism-react-editor/languages/kusto
  • prism-react-editor/languages/latex
  • prism-react-editor/languages/latte
  • prism-react-editor/languages/lilypond
  • prism-react-editor/languages/linker-script
  • prism-react-editor/languages/liquid
  • prism-react-editor/languages/lisp
  • prism-react-editor/languages/livescript
  • prism-react-editor/languages/llvm
  • prism-react-editor/languages/lolcode
  • prism-react-editor/languages/lua
  • prism-react-editor/languages/magma
  • prism-react-editor/languages/makefile
  • prism-react-editor/languages/mata
  • prism-react-editor/languages/matlab
  • prism-react-editor/languages/maxscript
  • prism-react-editor/languages/mel
  • prism-react-editor/languages/mermaid
  • prism-react-editor/languages/metafont
  • prism-react-editor/languages/mizar
  • prism-react-editor/languages/mongodb
  • prism-react-editor/languages/monkey
  • prism-react-editor/languages/moonscript
  • prism-react-editor/languages/n1ql
  • prism-react-editor/languages/n4js
  • prism-react-editor/languages/nand2tetris-hdl
  • prism-react-editor/languages/naniscript
  • prism-react-editor/languages/neon
  • prism-react-editor/languages/nevod
  • prism-react-editor/languages/nginx
  • prism-react-editor/languages/nim
  • prism-react-editor/languages/nix
  • prism-react-editor/languages/nsis
  • prism-react-editor/languages/objectivec
  • prism-react-editor/languages/ocaml
  • prism-react-editor/languages/odin
  • prism-react-editor/languages/opencl
  • prism-react-editor/languages/openqasm
  • prism-react-editor/languages/oz
  • prism-react-editor/languages/parigp
  • prism-react-editor/languages/parser
  • prism-react-editor/languages/pascal
  • prism-react-editor/languages/peoplecode
  • prism-react-editor/languages/perl
  • prism-react-editor/languages/php
  • prism-react-editor/languages/plant-uml
  • prism-react-editor/languages/powerquery
  • prism-react-editor/languages/powershell
  • prism-react-editor/languages/processing
  • prism-react-editor/languages/prolog
  • prism-react-editor/languages/promql
  • prism-react-editor/languages/properties
  • prism-react-editor/languages/protobuf
  • prism-react-editor/languages/psl
  • prism-react-editor/languages/pug
  • prism-react-editor/languages/puppet
  • prism-react-editor/languages/pure
  • prism-react-editor/languages/purebasic
  • prism-react-editor/languages/python
  • prism-react-editor/languages/q
  • prism-react-editor/languages/qml
  • prism-react-editor/languages/qore
  • prism-react-editor/languages/qsharp
  • prism-react-editor/languages/r
  • prism-react-editor/languages/reason
  • prism-react-editor/languages/rego
  • prism-react-editor/languages/rescript
  • prism-react-editor/languages/rest
  • prism-react-editor/languages/rip
  • prism-react-editor/languages/roboconf
  • prism-react-editor/languages/robotframework
  • prism-react-editor/languages/ruby
  • prism-react-editor/languages/rust
  • prism-react-editor/languages/sas
  • prism-react-editor/languages/scala
  • prism-react-editor/languages/scheme
  • prism-react-editor/languages/smali
  • prism-react-editor/languages/smalltalk
  • prism-react-editor/languages/smarty
  • prism-react-editor/languages/sml
  • prism-react-editor/languages/solidity
  • prism-react-editor/languages/solution-file
  • prism-react-editor/languages/soy
  • prism-react-editor/languages/splunk-spl
  • prism-react-editor/languages/sqf
  • prism-react-editor/languages/sql
  • prism-react-editor/languages/squirrel
  • prism-react-editor/languages/stan
  • prism-react-editor/languages/stata
  • prism-react-editor/languages/stylus
  • prism-react-editor/languages/supercollider
  • prism-react-editor/languages/svelte
  • prism-react-editor/languages/swift
  • prism-react-editor/languages/systemd
  • prism-react-editor/languages/tcl
  • prism-react-editor/languages/textile
  • prism-react-editor/languages/toml
  • prism-react-editor/languages/tremor
  • prism-react-editor/languages/tt2
  • prism-react-editor/languages/turtle
  • prism-react-editor/languages/twig
  • prism-react-editor/languages/typoscript
  • prism-react-editor/languages/unrealscript
  • prism-react-editor/languages/uorazor
  • prism-react-editor/languages/v
  • prism-react-editor/languages/vala
  • prism-react-editor/languages/vbnet
  • prism-react-editor/languages/velocity
  • prism-react-editor/languages/verilog
  • prism-react-editor/languages/vhdl
  • prism-react-editor/languages/vim
  • prism-react-editor/languages/visual-basic
  • prism-react-editor/languages/vue
  • prism-react-editor/languages/warpscript
  • prism-react-editor/languages/wasm
  • prism-react-editor/languages/web-idl
  • prism-react-editor/languages/wgsl
  • prism-react-editor/languages/wiki
  • prism-react-editor/languages/wolfram
  • prism-react-editor/languages/wren
  • prism-react-editor/languages/xeora
  • prism-react-editor/languages/xml
  • prism-react-editor/languages/xojo
  • prism-react-editor/languages/xquery
  • prism-react-editor/languages/yaml
  • prism-react-editor/languages/yang
  • prism-react-editor/languages/zig
  • prism-react-editor/layout.css
  • prism-react-editor/match-brackets
  • prism-react-editor/match-tags
  • prism-react-editor/overscroll
  • prism-react-editor/prism
  • prism-react-editor/prism/languages
  • prism-react-editor/prism/languages/abap
  • prism-react-editor/prism/languages/abnf
  • prism-react-editor/prism/languages/actionscript
  • prism-react-editor/prism/languages/ada
  • prism-react-editor/prism/languages/agda
  • prism-react-editor/prism/languages/al
  • prism-react-editor/prism/languages/antlr4
  • prism-react-editor/prism/languages/apacheconf
  • prism-react-editor/prism/languages/apex
  • prism-react-editor/prism/languages/apl
  • prism-react-editor/prism/languages/applescript
  • prism-react-editor/prism/languages/aql
  • prism-react-editor/prism/languages/arduino
  • prism-react-editor/prism/languages/arff
  • prism-react-editor/prism/languages/armasm
  • prism-react-editor/prism/languages/arturo
  • prism-react-editor/prism/languages/asciidoc
  • prism-react-editor/prism/languages/asm6502
  • prism-react-editor/prism/languages/asmatmel
  • prism-react-editor/prism/languages/aspnet
  • prism-react-editor/prism/languages/astro
  • prism-react-editor/prism/languages/autohotkey
  • prism-react-editor/prism/languages/autoit
  • prism-react-editor/prism/languages/avisynth
  • prism-react-editor/prism/languages/avro-idl
  • prism-react-editor/prism/languages/awk
  • prism-react-editor/prism/languages/bash
  • prism-react-editor/prism/languages/basic
  • prism-react-editor/prism/languages/batch
  • prism-react-editor/prism/languages/bbcode
  • prism-react-editor/prism/languages/bbj
  • prism-react-editor/prism/languages/bicep
  • prism-react-editor/prism/languages/birb
  • prism-react-editor/prism/languages/bison
  • prism-react-editor/prism/languages/bnf
  • prism-react-editor/prism/languages/bqn
  • prism-react-editor/prism/languages/brainfuck
  • prism-react-editor/prism/languages/brightscript
  • prism-react-editor/prism/languages/bro
  • prism-react-editor/prism/languages/bsl
  • prism-react-editor/prism/languages/c
  • prism-react-editor/prism/languages/cfscript
  • prism-react-editor/prism/languages/chaiscript
  • prism-react-editor/prism/languages/cil
  • prism-react-editor/prism/languages/cilkc
  • prism-react-editor/prism/languages/cilkcpp
  • prism-react-editor/prism/languages/clike
  • prism-react-editor/prism/languages/clojure
  • prism-react-editor/prism/languages/cmake
  • prism-react-editor/prism/languages/cobol
  • prism-react-editor/prism/languages/coffeescript
  • prism-react-editor/prism/languages/common
  • prism-react-editor/prism/languages/concurnas
  • prism-react-editor/prism/languages/cooklang
  • prism-react-editor/prism/languages/coq
  • prism-react-editor/prism/languages/cpp
  • prism-react-editor/prism/languages/crystal
  • prism-react-editor/prism/languages/csharp
  • prism-react-editor/prism/languages/cshtml
  • prism-react-editor/prism/languages/csp
  • prism-react-editor/prism/languages/css
  • prism-react-editor/prism/languages/css-extras
  • prism-react-editor/prism/languages/csv
  • prism-react-editor/prism/languages/cue
  • prism-react-editor/prism/languages/cypher
  • prism-react-editor/prism/languages/d
  • prism-react-editor/prism/languages/dart
  • prism-react-editor/prism/languages/dataweave
  • prism-react-editor/prism/languages/dax
  • prism-react-editor/prism/languages/dhall
  • prism-react-editor/prism/languages/diff
  • prism-react-editor/prism/languages/django
  • prism-react-editor/prism/languages/dns-zone-file
  • prism-react-editor/prism/languages/docker
  • prism-react-editor/prism/languages/dot
  • prism-react-editor/prism/languages/ebnf
  • prism-react-editor/prism/languages/editorconfig
  • prism-react-editor/prism/languages/eiffel
  • prism-react-editor/prism/languages/ejs
  • prism-react-editor/prism/languages/elixir
  • prism-react-editor/prism/languages/elm
  • prism-react-editor/prism/languages/erb
  • prism-react-editor/prism/languages/erlang
  • prism-react-editor/prism/languages/etlua
  • prism-react-editor/prism/languages/excel-formula
  • prism-react-editor/prism/languages/factor
  • prism-react-editor/prism/languages/false
  • prism-react-editor/prism/languages/firestore-security-rules
  • prism-react-editor/prism/languages/flow
  • prism-react-editor/prism/languages/fortran
  • prism-react-editor/prism/languages/fsharp
  • prism-react-editor/prism/languages/ftl
  • prism-react-editor/prism/languages/gap
  • prism-react-editor/prism/languages/gcode
  • prism-react-editor/prism/languages/gdscript
  • prism-react-editor/prism/languages/gedcom
  • prism-react-editor/prism/languages/gettext
  • prism-react-editor/prism/languages/gherkin
  • prism-react-editor/prism/languages/git
  • prism-react-editor/prism/languages/glsl
  • prism-react-editor/prism/languages/gml
  • prism-react-editor/prism/languages/gn
  • prism-react-editor/prism/languages/go
  • prism-react-editor/prism/languages/go-module
  • prism-react-editor/prism/languages/gradle
  • prism-react-editor/prism/languages/graphql
  • prism-react-editor/prism/languages/groovy
  • prism-react-editor/prism/languages/haml
  • prism-react-editor/prism/languages/handlebars
  • prism-react-editor/prism/languages/haskell
  • prism-react-editor/prism/languages/haxe
  • prism-react-editor/prism/languages/hcl
  • prism-react-editor/prism/languages/hlsl
  • prism-react-editor/prism/languages/hoon
  • prism-react-editor/prism/languages/hpkp
  • prism-react-editor/prism/languages/hsts
  • prism-react-editor/prism/languages/http
  • prism-react-editor/prism/languages/ichigojam
  • prism-react-editor/prism/languages/icon
  • prism-react-editor/prism/languages/icu-message-format
  • prism-react-editor/prism/languages/idris
  • prism-react-editor/prism/languages/iecst
  • prism-react-editor/prism/languages/ignore
  • prism-react-editor/prism/languages/index
  • prism-react-editor/prism/languages/inform7
  • prism-react-editor/prism/languages/ini
  • prism-react-editor/prism/languages/io
  • prism-react-editor/prism/languages/j
  • prism-react-editor/prism/languages/java
  • prism-react-editor/prism/languages/javadoc
  • prism-react-editor/prism/languages/javadoclike
  • prism-react-editor/prism/languages/javascript
  • prism-react-editor/prism/languages/javastacktrace
  • prism-react-editor/prism/languages/jexl
  • prism-react-editor/prism/languages/jolie
  • prism-react-editor/prism/languages/jq
  • prism-react-editor/prism/languages/js-templates
  • prism-react-editor/prism/languages/jsdoc
  • prism-react-editor/prism/languages/json
  • prism-react-editor/prism/languages/json5
  • prism-react-editor/prism/languages/jsonp
  • prism-react-editor/prism/languages/jsstacktrace
  • prism-react-editor/prism/languages/jsx
  • prism-react-editor/prism/languages/julia
  • prism-react-editor/prism/languages/keepalived
  • prism-react-editor/prism/languages/keyman
  • prism-react-editor/prism/languages/kotlin
  • prism-react-editor/prism/languages/kumir
  • prism-react-editor/prism/languages/kusto
  • prism-react-editor/prism/languages/latex
  • prism-react-editor/prism/languages/latte
  • prism-react-editor/prism/languages/less
  • prism-react-editor/prism/languages/lilypond
  • prism-react-editor/prism/languages/linker-script
  • prism-react-editor/prism/languages/liquid
  • prism-react-editor/prism/languages/lisp
  • prism-react-editor/prism/languages/livescript
  • prism-react-editor/prism/languages/llvm
  • prism-react-editor/prism/languages/log
  • prism-react-editor/prism/languages/lolcode
  • prism-react-editor/prism/languages/lua
  • prism-react-editor/prism/languages/magma
  • prism-react-editor/prism/languages/makefile
  • prism-react-editor/prism/languages/markdown
  • prism-react-editor/prism/languages/markup
  • prism-react-editor/prism/languages/mata
  • prism-react-editor/prism/languages/matlab
  • prism-react-editor/prism/languages/maxscript
  • prism-react-editor/prism/languages/mel
  • prism-react-editor/prism/languages/mermaid
  • prism-react-editor/prism/languages/metafont
  • prism-react-editor/prism/languages/mizar
  • prism-react-editor/prism/languages/mongodb
  • prism-react-editor/prism/languages/monkey
  • prism-react-editor/prism/languages/moonscript
  • prism-react-editor/prism/languages/n1ql
  • prism-react-editor/prism/languages/n4js
  • prism-react-editor/prism/languages/nand2tetris-hdl
  • prism-react-editor/prism/languages/naniscript
  • prism-react-editor/prism/languages/nasm
  • prism-react-editor/prism/languages/neon
  • prism-react-editor/prism/languages/nevod
  • prism-react-editor/prism/languages/nginx
  • prism-react-editor/prism/languages/nim
  • prism-react-editor/prism/languages/nix
  • prism-react-editor/prism/languages/nsis
  • prism-react-editor/prism/languages/objectivec
  • prism-react-editor/prism/languages/ocaml
  • prism-react-editor/prism/languages/odin
  • prism-react-editor/prism/languages/opencl
  • prism-react-editor/prism/languages/openqasm
  • prism-react-editor/prism/languages/oz
  • prism-react-editor/prism/languages/parigp
  • prism-react-editor/prism/languages/parser
  • prism-react-editor/prism/languages/pascal
  • prism-react-editor/prism/languages/pascaligo
  • prism-react-editor/prism/languages/pcaxis
  • prism-react-editor/prism/languages/peoplecode
  • prism-react-editor/prism/languages/perl
  • prism-react-editor/prism/languages/php
  • prism-react-editor/prism/languages/php-extras
  • prism-react-editor/prism/languages/phpdoc
  • prism-react-editor/prism/languages/plant-uml
  • prism-react-editor/prism/languages/plsql
  • prism-react-editor/prism/languages/powerquery
  • prism-react-editor/prism/languages/powershell
  • prism-react-editor/prism/languages/processing
  • prism-react-editor/prism/languages/prolog
  • prism-react-editor/prism/languages/promql
  • prism-react-editor/prism/languages/properties
  • prism-react-editor/prism/languages/protobuf
  • prism-react-editor/prism/languages/psl
  • prism-react-editor/prism/languages/pug
  • prism-react-editor/prism/languages/puppet
  • prism-react-editor/prism/languages/pure
  • prism-react-editor/prism/languages/purebasic
  • prism-react-editor/prism/languages/purescript
  • prism-react-editor/prism/languages/python
  • prism-react-editor/prism/languages/q
  • prism-react-editor/prism/languages/qml
  • prism-react-editor/prism/languages/qore
  • prism-react-editor/prism/languages/qsharp
  • prism-react-editor/prism/languages/r
  • prism-react-editor/prism/languages/racket
  • prism-react-editor/prism/languages/reason
  • prism-react-editor/prism/languages/regex
  • prism-react-editor/prism/languages/rego
  • prism-react-editor/prism/languages/renpy
  • prism-react-editor/prism/languages/rescript
  • prism-react-editor/prism/languages/rest
  • prism-react-editor/prism/languages/rip
  • prism-react-editor/prism/languages/roboconf
  • prism-react-editor/prism/languages/robotframework
  • prism-react-editor/prism/languages/ruby
  • prism-react-editor/prism/languages/rust
  • prism-react-editor/prism/languages/sas
  • prism-react-editor/prism/languages/sass
  • prism-react-editor/prism/languages/scala
  • prism-react-editor/prism/languages/scheme
  • prism-react-editor/prism/languages/scss
  • prism-react-editor/prism/languages/shell-session
  • prism-react-editor/prism/languages/smali
  • prism-react-editor/prism/languages/smalltalk
  • prism-react-editor/prism/languages/smarty
  • prism-react-editor/prism/languages/sml
  • prism-react-editor/prism/languages/solidity
  • prism-react-editor/prism/languages/solution-file
  • prism-react-editor/prism/languages/soy
  • prism-react-editor/prism/languages/sparql
  • prism-react-editor/prism/languages/splunk-spl
  • prism-react-editor/prism/languages/sqf
  • prism-react-editor/prism/languages/sql
  • prism-react-editor/prism/languages/squirrel
  • prism-react-editor/prism/languages/stan
  • prism-react-editor/prism/languages/stata
  • prism-react-editor/prism/languages/stylus
  • prism-react-editor/prism/languages/supercollider
  • prism-react-editor/prism/languages/svelte
  • prism-react-editor/prism/languages/swift
  • prism-react-editor/prism/languages/systemd
  • prism-react-editor/prism/languages/t4-cs
  • prism-react-editor/prism/languages/t4-vb
  • prism-react-editor/prism/languages/tap
  • prism-react-editor/prism/languages/tcl
  • prism-react-editor/prism/languages/textile
  • prism-react-editor/prism/languages/toml
  • prism-react-editor/prism/languages/tremor
  • prism-react-editor/prism/languages/tsx
  • prism-react-editor/prism/languages/tt2
  • prism-react-editor/prism/languages/turtle
  • prism-react-editor/prism/languages/twig
  • prism-react-editor/prism/languages/typescript
  • prism-react-editor/prism/languages/typoscript
  • prism-react-editor/prism/languages/unrealscript
  • prism-react-editor/prism/languages/uorazor
  • prism-react-editor/prism/languages/uri
  • prism-react-editor/prism/languages/v
  • prism-react-editor/prism/languages/vala
  • prism-react-editor/prism/languages/vbnet
  • prism-react-editor/prism/languages/velocity
  • prism-react-editor/prism/languages/verilog
  • prism-react-editor/prism/languages/vhdl
  • prism-react-editor/prism/languages/vim
  • prism-react-editor/prism/languages/visual-basic
  • prism-react-editor/prism/languages/vue
  • prism-react-editor/prism/languages/warpscript
  • prism-react-editor/prism/languages/wasm
  • prism-react-editor/prism/languages/web-idl
  • prism-react-editor/prism/languages/wgsl
  • prism-react-editor/prism/languages/wiki
  • prism-react-editor/prism/languages/wolfram
  • prism-react-editor/prism/languages/wren
  • prism-react-editor/prism/languages/xeora
  • prism-react-editor/prism/languages/xml
  • prism-react-editor/prism/languages/xml-doc
  • prism-react-editor/prism/languages/xojo
  • prism-react-editor/prism/languages/xquery
  • prism-react-editor/prism/languages/yaml
  • prism-react-editor/prism/languages/yang
  • prism-react-editor/prism/languages/zig
  • prism-react-editor/rtl-layout.css
  • prism-react-editor/scrollbar.css
  • prism-react-editor/search
  • prism-react-editor/search.css
  • prism-react-editor/setups
  • prism-react-editor/themes
  • prism-react-editor/themes/atom-one-dark.css
  • prism-react-editor/themes/dracula.css
  • prism-react-editor/themes/github-dark-dimmed.css
  • prism-react-editor/themes/github-dark.css
  • prism-react-editor/themes/github-light.css
  • prism-react-editor/themes/night-owl-light.css
  • prism-react-editor/themes/night-owl.css
  • prism-react-editor/themes/prism-okaidia.css
  • prism-react-editor/themes/prism-solarized-light.css
  • prism-react-editor/themes/prism-tomorrow.css
  • prism-react-editor/themes/prism-twilight.css
  • prism-react-editor/themes/prism.css
  • prism-react-editor/themes/vs-code-dark.css
  • prism-react-editor/themes/vs-code-light.css
  • prism-react-editor/tooltips
  • prism-react-editor/utils

Readme

Prism react editor

Code editor component for React apps

Bundle size NPM Package

What?

This is a rewrite of Prism code editor using React and hooks. It's a lightweight, extensible code editor optimized for fast load times with many optional extensions.

Contents

Installation

npm i prism-react-editor

You must already have react and react-dom version 16.8.0 or greater installed.

Demo

Prism code editor's demo. There's no demo for this React rewrite since its behavior is nearly identical.

Examples

Basic usage

Below is an example of a simple JSX editor.

import { Editor } from "prism-react-editor"
import { BasicSetup } from "prism-react-editor/setups"

// Adding the JSX grammar
import "prism-react-editor/prism/languages/jsx"

// Adds comment toggling and auto-indenting for JSX
import "prism-react-editor/languages/jsx"

import "prism-react-editor/layout.css"
import "prism-react-editor/themes/github-dark.css"

// Required by the basic setup
import "prism-react-editor/search.css"
import "prism-react-editor/invisibles.css"

function MyEditor() {
  return <Editor language="jsx" value="const foo = 'bar'">
    <BasicSetup />
  </Editor>
}

Props

Name Type Description
language string Language used for syntax highlighting. Defaults to text.
tabSize number Tab size used for indentation. Defaults to 2.
insertSpaces boolean Whether the editor should insert spaces for indentation. Defaults to true. Requires useDefaultCommands() extension to work.
lineNumbers boolean Whether line numbers should be shown. Defaults to true.
readOnly boolean Whether the editor should be read only. Defaults to false.
wordWrap boolean Whether the editor should have word wrap. Defaults to false.
value string Initial value to display in the editor.
rtl boolean Whether the editor uses right to left directionality. Defaults to false. Requires extra CSS from prism-react-editor/rtl-layout.css to work.
style Omit<React.CSSProperties, "tabSize"> Allows adding inline styles to the container element.
className string Additional classes for the container element.
textareaProps Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, OmittedTextareaProps> Allows adding props to the editor's textarea element.
onUpdate (value: string, editor: PrismEditor) => void Function called after the editor updates.
onSelectionChange (selection: InputSelection, value: string, editor: PrismEditor) => void Function called when the editor's selection changes.
onTokenize (tokens: TokenStream, language: string, value: string, editor: PrismEditor) => void Function called before the tokens are stringified to HTML.
children React.ReactNode Extensions and overlays for the editor.

Pitfall

This component is not controlled, and the value prop should be treated like an initial value. Do not change the value prop in the onUpdate handler. Doing so will negatively impact performance and reset both the cursor position and undo/redo history on every input.

// counterexample: do NOT do this
function MyEditor() {
  const [value, setValue] = useState("const foo = 'bar'")

  return (
    <Editor language="jsx" value={value} onUpdate={setValue} />
  )
}

If you need access to the editor's value in your component, use a ref instead:

function MyEditor() {
  const editorRef = useRef<PrismEditor>()

  useEffect(() => {
    console.log(editorRef.current?.value)
  })

  return <Editor ref={editorRef} />
}

Extensions

To keep the core light, most functionality is added by optional extensions.

There are extensions adding:

  • Many common commands
  • Bracket matching and rainbow brackets
  • Tag matching
  • Indentation guides
  • Search, regex search and replace
  • Selection match highlighting
  • A copy button
  • Read-only code folding
  • Custom undo/redo
  • And more...

Many commonly used extensions are added by BasicSetup, but if you want to fully customize which extensions are added. Below it's shown how to import most extensions.

import { Editor, PrismEditor } from "prism-react-editor"
import "prism-react-editor/prism/languages/jsx"
import "prism-react-editor/layout.css"
// Needed for the search widget
import "prism-react-editor/search.css"
// Needed for the copy button
import "prism-react-editor/copy-button.css"

import { useBracketMatcher } from "prism-react-editor/match-brackets"
import { useHighlightBracketPairs } from "prism-react-editor/highlight-brackets"
import { IndentGuides } from "prism-react-editor/guides"
import { useHighlightSelectionMatches, useSearchWidget, useShowInvisibles } from "prism-react-editor/search"
import { useHighlightMatchingTags, useTagMatcher } from "prism-react-editor/match-tags"
import { useCursorPosition } from "prism-react-editor/cursor"
import { useDefaultCommands, useEditHistory } from "prism-react-editor/commands"
import { useCopyButton } from "prism-react-editor/copy-button"
import { useOverscroll } from "prism-react-editor/overscroll"
import { usePrismEditor } from "prism-react-editor/extensions"

function MyExtensions() {
  const [editor] = usePrismEditor()
  useBracketMatcher(editor)
  useHighlightBracketPairs(editor)
  useOverscroll(editor)
  useTagMatcher(editor)
  useHighlightMatchingTags(editor)
  useDefaultCommands(editor)
  useEditHistory(editor)
  useSearchWidget(editor)
  useHighlightSelectionMatches(editor)
  useShowInvisibles(editor)
  useCopyButton(editor)
  useCursorPosition(editor)

  return <IndentGuides />
}

function MyEditor() {
  return (
    <Editor language="jsx" value="const foo = 'bar'">
      <MyExtensions />
    </Editor>
  )
}

Lazy loading extensions is also possible for code splitting. It's not recommended to lazy load useBracketMatcher and you might want IndentGuides to be present on first render. All other extensions will work perfectly fine when lazy loaded.

import { lazy, Suspense } from "react"
import { usePrismEditor } from "prism-react-editor/extensions"

const LazyExtensions = lazy(() => import("./extensions"))

function MyExtensions() {
  const [editor] = usePrismEditor()
  useBracketMatcher(editor)

  return <IndentGuides />
}

function MyEditor() {
  return (
    <Editor language="jsx" value="const foo = 'bar'">
      <MyExtensions />
      <Suspense>
        <LazyExtensions />
      </Suspense>
    </Editor>
  )
}

Creating your own

If you need to do anything more than adding an onUpdate or onSelectionChange prop, you should consider creating your own extension.

import { useLayoutEffect, useEffect } from "react"
import { Editor } from "prism-react-editor"
import { BasicSetup } from "prism-react-editor/setups"
import { usePrismEditor } from "prism-react-editor/extensions"

function MyExtension() {
  const [editor] = usePrismEditor()
  // Layout effects will run before the editor has mounted
  useLayoutEffect(() => {
    return editor.on("selectionChange", selection => {
      console.log("Selection changed:", selection)
    })
  }, [])

  useEffect(() => {
    // The editor has mounted now
    editor.textarea!.focus()
  }, [])

  // The elements returned are added to the editor's overlays
  // Keep in mind that they will get some default styles
  return (
    <>
      <div>My overlay</div>
      <BasicSetup />
    </>
  )
}

function MyEditor() {
  return (
    <Editor language="jsx" value="const foo = 'bar'">
      <MyExtension />
    </Editor>
  )
}

Editor API

To access the editor inside an extension, use the usePrismEditor() hook:

import { usePrismEditor } from "prism-react-editor/extensions"

function MyExtension() {
  const [editor, props] = usePrismEditor()
  // ...
}

Note: editor is a ref value, so its reference is stable. However, props do become stale, but editor.props can be used to always get the latest props.

Properties

  • value: string: Current value of the editor.
  • activeLine: number: Line number of the line with the cursor. You can index into editor.lines to get the DOM node for the active line.
  • inputCommandMap: Record<string, InputCommandCallback | null | undefined>: Record mapping an input to a function called when that input is typed.
  • keyCommandMap: Record<string, KeyCommandCallback | null | undefined>: Record mapping KeyboardEvent.key to a function called when that key is pressed.
  • extensions: Object: Object storing some of the extensions added to the editor. Read more.
  • props: EditorProps: The component props passed to the editor.
  • focused: boolean. Whether the textarea is focused.
  • tokens: TokenStream. Current tokens displayed in the editor.

DOM Elements

  • container: HTMLDivElement: This is the outermost element of the editor.
  • wrapper: HTMLDivElement: Element wrapping the lines and overlays.
  • lines: HTMLCollectionOf<HTMLDivElement>: Collection containing the overlays as the first element, followed by all code lines.
  • textarea: HTMLTextAreaElement: Underlying textarea in the editor.

Methods

  • update(): void: Forces the editor to update. Can be useful after modifying a grammar for example.
  • getSelection(): InputSelection: Gets the selectionStart, selectionEnd and selectionDirection for the textarea.
  • on<T extends keyof EditorEventMap>(name: T, listener: EditorEventMap[T]): () => void: Adds a listener for editor events and returns a cleanup function. Intended to be used by extensions inside a useLayoutEffect or useEffect hook.

Extensions property

Multiple extensions have an entry on editor.extensions allowing you to interact with the extension.

  • matchBrackets: BracketMatcher: Allows access to all brackets found in the editor along with which are paired together.
  • matchTags: TagMatcher: Allows access to all tags found in the editor along with which tags are paired together.
  • cursor: Cursor: Allows you to get the cursor position relative to the editor's overlays and to scroll the cursor into view.
  • searchWidget: SearchWidget: Allows you to open or close the search widget.
  • history: EditHistory: Allows you to clear the history or navigate it.
  • folding: ReadOnlyCodeFolding: Allows access to the full unfolded code and to toggle folded ranges.
  • autoComplete: AutoComplete: Allows inserting snippets and starting completion queries programmatically.

Editor helpers

Using things like editor.value or editor.getSelection() to render an extension won't cause the extension to rerender when these values change. Instead, use the helpers that store the value or selection in state and subscribe to updates.

import {
  usePrismEditor,
  useEditorValue,
  useEditorSelection
} from "prism-react-editor/extensions"

function MyExtension() {
  const [editor, props] = usePrismEditor()
  const value = useEditorValue(editor)
  const selection = useEditorSelection(editor)
  // ...
}

Utilities

The prism-react-editor/utils entry point exports various utilities for inserting text, changing the selection, finding token elements, and more.

Prism

The Prism instance used by this library is exported from prism-react-editor/prism. This allows you to add your own Prism grammars or perform syntax highlighting outside of an editor. All modules under prism-react-editor/prism can run outside the browser in for example Node.js to do syntax highlighting on the server. Check the working with prism guide for more info.

Languages

Prism supports syntax highlighting for hundreds of languages, but none of them are imported by default. You need to choose which languages to import. Importing prism-react-editor/prism/languages/javascript for example will register the JavaScript grammar through side effects.

If you need access to many languages, you can import the following entry points:

  • prism-react-editor/prism/languages for all languages (~180kB)
  • prism-react-editor/prism/languages/common for 42 common languages (~30kB)

This library also supports auto-indenting, comment toggling and self-closing tags for most of these languages. For it to work, you need the useDefaultCommands() hook (or the basic setup) and to import the behavior for the language.

The easiest way is to import all languages at ~3.6kB gzipped. You can dynamically import this since it's usually not needed before the page has loaded.

import("prism-react-editor/languages")

You can also import prism-react-editor/languages/common instead to support a subset of common languages at less than 2kB gzipped.

Lastly, if you only need support for a few languages, you can do individual imports, for example prism-react-editor/languages/html. Read more.

Styling

This library does not inject any styles onto the webpage, instead you must import them. If the default styles don't work for you, you can import your own styles instead.

  • prism-react-editor/layout.css: layout for the editor.
  • prism-react-editor/scrollbar.css: custom scrollbar to desktop Chrome and Safari you can color with --pce-scrollbar.
  • prism-react-editor/copy-button.css: styles for the useCopybutton() extension.
  • prism-react-editor/search.css: styles for the useSearchWidget() extension.
  • prism-react-editor/rtl-layout.css: adds support for the rtl prop.
  • prism-react-editor/invisibles.css: styles for the useShowInvisibles() extension.
  • prism-react-editor/cursor.css: styles for the useCustomCursor() extension.
  • prism-react-editor/autocomplete.css: styles for the useAutoComplete() extension.
  • prism-react-editor/autocomplete-icons.css: default icons for the autocompletion tooltip.
  • prism-react-editor/code-block.css: additional styles required for code blocks.

By default, the editor's height will fit the content, so you might want to add a height or max-height to .prism-code-editor depending on your use case.

Themes

There are currently 14 different themes you can import, one of them being from prism-react-editor/themes/github-dark.css. If none of the themes fit your website, use one of them as an example to help implement your own.

Theme switcher

If you're making a theme switcher, you might want to use the useEditorTheme hook. This hook is a simple wrapper around the loadTheme utility exported from the same entry point. If want something more sophisticated, use loadTheme directly instead.

import { useState } from "react"
import { useEditorTheme } from "prism-react-editor/themes"

export function App() {
  const [theme, setTheme] = useState("github-dark")
  const themeCss = useEditorTheme(theme)

  return <>
    <style>{themeCss}</style>
    ...
  </>
}

The hook and <style> tag can be placed in any component you want. Just make sure that component is only used once since you don't want multiple <style> elements with themes on the page.

To limit FOUC, you may want to provide a fallback stylesheet for when the theme is loading using something like <style>{themeCss ?? fallbackCss}</style>. Alternatively, you can avoid rendering editors before the theme has loaded using themeCss && <Editor ... />.

If you're just switching between two themes (light/dark), using CSS variables would have fewer downsides, but this does require maintaining your own theme.

Registering themes

If you want to use your own themes with useEditorTheme or loadTheme or want to override existing themes, use registerTheme. The example below might look different if you're not using Vite as your bundler.

import { registerTheme } from "prism-react-editor/themes"

// Might look different if you're not using Vite
registerTheme("my-theme", () => import("./my-theme.css?inline"))

Code blocks

This library can also create static code blocks. These support some features not supported by editors such as hover descriptions and highlighting brackets/tag-names on hover.

import {
  CodeBlock,
  CopyButton,
  HighlightBracketPairsOnHover,
  HighlightTagPairsOnHover,
  HoverDescriptions,
  rainbowBrackets,
} from "prism-react-editor/code-blocks"
import "prism-react-editor/layout.css"
import "prism-react-editor/code-block.css"
import "prism-react-editor/themes/github-dark.css"

// Very important for performance to keep this function stable
const onTokenize = rainbowBrackets()

function MyCodeBlock({ lang, code }: { lang: string, code: string }) {
  return (
    <CodeBlock language={lang} code={code} onTokenize={onTokenize}>
      <HoverDescriptions
        callback={(types, language, text, element) => {
          if (types.includes("string")) return ["This is a string token."]
        }}
      />
      <CopyButton />
      <HighlightTagPairsOnHover />
      <HighlightBracketPairsOnHover />
    </CodeBlock>
  )
}

Code block extensions

Just like with editors, you can also pass extensions to code blocks that modify them. To access the code block and its props from an extension, use the usePrismCodeBlock() hook:

import { usePrismCodeBlock } from "prism-react-editor/code-blocks"

function MyCodeBlockExtension() {
  const [codeBlock, props] = usePrismCodeBlock()
  // ...
}

Code block props

Name Type Description
language string Language used for syntax highlighting. Defaults to text.
tabSize number Tab size used for indentation. Defaults to 2.
lineNumbers boolean Whether line numbers should be shown. Defaults to false.
wordWrap boolean Whether the code block should have word wrap. Defaults to false.
preserveIndent boolean Whether or not indentation is preserved on wrapped lines. Defaults to true when wordWrap is enabled.
guideIndents boolean Whether or not to display indentation guides. Does not work with rtl set to true. Defaults to false
rtl boolean Whether the editor uses right to left directionality. Defaults to false. Requires extra CSS from prism-react-editor/rtl-layout.css to work.
code string Code to display in the code block.
style Omit<React.CSSProperties, "tabSize" | "counterReset"> Allows adding inline styles to the container element.
className string Additional classes for the container element.
onTokenize (tokens: TokenStream) => void Callback that can be used to modify the tokens before they're stringified to HTML.
children (codeBlock: PrismCodeBlock, props: CodeBlockProps) => React.ReactNode Callback used to render extensions.

Performance

Manual DOM manipulation has been kept almost everywhere. This rewrite therefore has very similar performance to the original which would not be the case if only JSX was used.

Development

To run the development server locally, install dependencies.

pnpm install

Next, you must build the prism-code-editor package.

cd ../package
pnpm install
pnpm build

Finally, you can run the development server to test your changes.

cd ../react-package
pnpm dev