@cyfung1031/prism-code-editor 5.2.0-cdn-esm.1 → 5.2.0-cdn-esm.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{basic-Bie2IZGI.js → basic-DwpT6yIa.js} +4 -4
- package/dist/{basic-Bie2IZGI.js.map → basic-DwpT6yIa.js.map} +1 -1
- package/dist/client/code-block.js +2 -2
- package/dist/client/index.js +2 -2
- package/dist/{commands-DPS_Se7J.js → commands-HRCav5fj.js} +4 -4
- package/dist/{commands-DPS_Se7J.js.map → commands-HRCav5fj.js.map} +1 -1
- package/dist/{core-BX6FrDXS.js → core-DpDyJ-7r.js} +6 -8
- package/dist/core-DpDyJ-7r.js.map +1 -0
- package/dist/{core-DhbpblAG.js → core-fngiDtt5.js} +3 -3
- package/dist/{core-DhbpblAG.js.map → core-fngiDtt5.js.map} +1 -1
- package/dist/{cursor-D1KHt82L.js → cursor-7DP0p42U.js} +3 -3
- package/dist/{cursor-D1KHt82L.js.map → cursor-7DP0p42U.js.map} +1 -1
- package/dist/extensions/autocomplete/css/index.js +3 -3
- package/dist/extensions/autocomplete/index.js +1 -1
- package/dist/extensions/autocomplete/javascript/index.js +3 -3
- package/dist/extensions/autocomplete/markup/index.js +1 -1
- package/dist/extensions/autocomplete/svelte/index.js +3 -3
- package/dist/extensions/autocomplete/vue/index.js +2 -2
- package/dist/extensions/commands/index.js +2 -2
- package/dist/extensions/copyButton/index.js +2 -2
- package/dist/extensions/cursor/index.js +1 -1
- package/dist/extensions/folding/index.js +2 -2
- package/dist/extensions/guides.js +1 -1
- package/dist/extensions/matchBrackets/highlight.js +1 -1
- package/dist/extensions/matchTags.js +1 -1
- package/dist/extensions/search/api.js +2 -2
- package/dist/extensions/search/index.js +6 -6
- package/dist/index.js +1 -1
- package/dist/{jsx-shared-dZwwrZih.js → jsx-shared-CZGNsLLj.js} +3 -3
- package/dist/{jsx-shared-dZwwrZih.js.map → jsx-shared-CZGNsLLj.js.map} +1 -1
- package/dist/{language-BJ_ZHHRN.js → language-CPVUjid6.js} +2 -2
- package/dist/{language-BJ_ZHHRN.js.map → language-CPVUjid6.js.map} +1 -1
- package/dist/languages/abap.js +1 -2
- package/dist/languages/abap.js.map +1 -1
- package/dist/languages/abnf.js +2 -3
- package/dist/languages/abnf.js.map +1 -1
- package/dist/languages/actionscript.js +2 -3
- package/dist/languages/actionscript.js.map +1 -1
- package/dist/languages/ada.js +2 -3
- package/dist/languages/ada.js.map +1 -1
- package/dist/languages/agda.js +1 -2
- package/dist/languages/agda.js.map +1 -1
- package/dist/languages/al.js +2 -3
- package/dist/languages/al.js.map +1 -1
- package/dist/languages/antlr4.js +2 -3
- package/dist/languages/antlr4.js.map +1 -1
- package/dist/languages/apacheconf.js +2 -3
- package/dist/languages/apacheconf.js.map +1 -1
- package/dist/languages/apex.js +2 -3
- package/dist/languages/apex.js.map +1 -1
- package/dist/languages/apl.js +2 -3
- package/dist/languages/apl.js.map +1 -1
- package/dist/languages/applescript.js +1 -2
- package/dist/languages/applescript.js.map +1 -1
- package/dist/languages/aql.js +2 -3
- package/dist/languages/aql.js.map +1 -1
- package/dist/languages/arduino.js +2 -3
- package/dist/languages/arduino.js.map +1 -1
- package/dist/languages/arff.js +1 -2
- package/dist/languages/arff.js.map +1 -1
- package/dist/languages/arturo.js +1 -2
- package/dist/languages/arturo.js.map +1 -1
- package/dist/languages/asciidoc.js +1 -2
- package/dist/languages/asciidoc.js.map +1 -1
- package/dist/languages/asm.js +1 -2
- package/dist/languages/asm.js.map +1 -1
- package/dist/languages/aspnet.js +3 -4
- package/dist/languages/aspnet.js.map +1 -1
- package/dist/languages/astro.js +3 -4
- package/dist/languages/astro.js.map +1 -1
- package/dist/languages/autohotkey.js +2 -3
- package/dist/languages/autohotkey.js.map +1 -1
- package/dist/languages/autoit.js +1 -2
- package/dist/languages/autoit.js.map +1 -1
- package/dist/languages/avisynth.js +2 -3
- package/dist/languages/avisynth.js.map +1 -1
- package/dist/languages/avro-idl.js +2 -3
- package/dist/languages/avro-idl.js.map +1 -1
- package/dist/languages/awk.js +2 -3
- package/dist/languages/awk.js.map +1 -1
- package/dist/languages/bash.js +2 -3
- package/dist/languages/bash.js.map +1 -1
- package/dist/languages/basic.js +1 -2
- package/dist/languages/basic.js.map +1 -1
- package/dist/languages/batch.js +1 -2
- package/dist/languages/batch.js.map +1 -1
- package/dist/languages/bbj.js +1 -2
- package/dist/languages/bbj.js.map +1 -1
- package/dist/languages/bicep.js +2 -3
- package/dist/languages/bicep.js.map +1 -1
- package/dist/languages/birb.js +2 -3
- package/dist/languages/birb.js.map +1 -1
- package/dist/languages/bison.js +2 -3
- package/dist/languages/bison.js.map +1 -1
- package/dist/languages/bqn.js +2 -3
- package/dist/languages/bqn.js.map +1 -1
- package/dist/languages/brightscript.js +1 -2
- package/dist/languages/brightscript.js.map +1 -1
- package/dist/languages/bro.js +2 -3
- package/dist/languages/bro.js.map +1 -1
- package/dist/languages/bsl.js +2 -3
- package/dist/languages/bsl.js.map +1 -1
- package/dist/languages/cfscript.js +2 -3
- package/dist/languages/cfscript.js.map +1 -1
- package/dist/languages/chaiscript.js +2 -3
- package/dist/languages/chaiscript.js.map +1 -1
- package/dist/languages/cil.js +2 -3
- package/dist/languages/cil.js.map +1 -1
- package/dist/languages/cilk.js +2 -3
- package/dist/languages/cilk.js.map +1 -1
- package/dist/languages/clike.js +2 -3
- package/dist/languages/clike.js.map +1 -1
- package/dist/languages/clojure.js +2 -3
- package/dist/languages/clojure.js.map +1 -1
- package/dist/languages/cmake.js +2 -3
- package/dist/languages/cmake.js.map +1 -1
- package/dist/languages/cobol.js +1 -2
- package/dist/languages/cobol.js.map +1 -1
- package/dist/languages/coffeescript.js +2 -3
- package/dist/languages/coffeescript.js.map +1 -1
- package/dist/languages/common.js +0 -2
- package/dist/languages/concurnas.js +2 -3
- package/dist/languages/concurnas.js.map +1 -1
- package/dist/languages/cooklang.js +1 -2
- package/dist/languages/cooklang.js.map +1 -1
- package/dist/languages/coq.js +2 -3
- package/dist/languages/coq.js.map +1 -1
- package/dist/languages/cshtml.js +3 -4
- package/dist/languages/cshtml.js.map +1 -1
- package/dist/languages/css.js +2 -3
- package/dist/languages/css.js.map +1 -1
- package/dist/languages/cue.js +2 -3
- package/dist/languages/cue.js.map +1 -1
- package/dist/languages/cypher.js +2 -3
- package/dist/languages/cypher.js.map +1 -1
- package/dist/languages/dataweave.js +2 -3
- package/dist/languages/dataweave.js.map +1 -1
- package/dist/languages/dax.js +2 -3
- package/dist/languages/dax.js.map +1 -1
- package/dist/languages/dhall.js +2 -3
- package/dist/languages/dhall.js.map +1 -1
- package/dist/languages/django.js +2 -3
- package/dist/languages/django.js.map +1 -1
- package/dist/languages/dns-zone-file.js +1 -2
- package/dist/languages/dns-zone-file.js.map +1 -1
- package/dist/languages/docker.js +1 -2
- package/dist/languages/docker.js.map +1 -1
- package/dist/languages/dot.js +2 -3
- package/dist/languages/dot.js.map +1 -1
- package/dist/languages/ebnf.js +2 -3
- package/dist/languages/ebnf.js.map +1 -1
- package/dist/languages/editorconfig.js +1 -2
- package/dist/languages/editorconfig.js.map +1 -1
- package/dist/languages/eiffel.js +2 -3
- package/dist/languages/eiffel.js.map +1 -1
- package/dist/languages/ejs.js +3 -4
- package/dist/languages/ejs.js.map +1 -1
- package/dist/languages/elixir.js +1 -2
- package/dist/languages/elixir.js.map +1 -1
- package/dist/languages/elm.js +1 -2
- package/dist/languages/elm.js.map +1 -1
- package/dist/languages/erb.js +1 -2
- package/dist/languages/erb.js.map +1 -1
- package/dist/languages/erlang.js +1 -2
- package/dist/languages/erlang.js.map +1 -1
- package/dist/languages/etlua.js +1 -2
- package/dist/languages/etlua.js.map +1 -1
- package/dist/languages/excel-formula.js +2 -3
- package/dist/languages/excel-formula.js.map +1 -1
- package/dist/languages/factor.js +2 -3
- package/dist/languages/factor.js.map +1 -1
- package/dist/languages/false.js +1 -2
- package/dist/languages/false.js.map +1 -1
- package/dist/languages/firestore-security-rules.js +2 -3
- package/dist/languages/firestore-security-rules.js.map +1 -1
- package/dist/languages/fortran.js +1 -2
- package/dist/languages/fortran.js.map +1 -1
- package/dist/languages/fsharp.js +2 -3
- package/dist/languages/fsharp.js.map +1 -1
- package/dist/languages/ftl.js +1 -3
- package/dist/languages/ftl.js.map +1 -1
- package/dist/languages/gap.js +1 -2
- package/dist/languages/gap.js.map +1 -1
- package/dist/languages/gcode.js +1 -2
- package/dist/languages/gcode.js.map +1 -1
- package/dist/languages/gdscript.js +2 -3
- package/dist/languages/gdscript.js.map +1 -1
- package/dist/languages/gettext.js +1 -2
- package/dist/languages/gettext.js.map +1 -1
- package/dist/languages/gherkin.js +1 -2
- package/dist/languages/gherkin.js.map +1 -1
- package/dist/languages/git.js +1 -2
- package/dist/languages/git.js.map +1 -1
- package/dist/languages/glsl.js +2 -3
- package/dist/languages/glsl.js.map +1 -1
- package/dist/languages/gml.js +2 -3
- package/dist/languages/gml.js.map +1 -1
- package/dist/languages/gn.js +2 -3
- package/dist/languages/gn.js.map +1 -1
- package/dist/languages/go-module.js +2 -3
- package/dist/languages/go-module.js.map +1 -1
- package/dist/languages/gradle.js +2 -3
- package/dist/languages/gradle.js.map +1 -1
- package/dist/languages/graphql.js +2 -3
- package/dist/languages/graphql.js.map +1 -1
- package/dist/languages/groovy.js +2 -3
- package/dist/languages/groovy.js.map +1 -1
- package/dist/languages/haml.js +2 -3
- package/dist/languages/haml.js.map +1 -1
- package/dist/languages/handlebars.js +2 -3
- package/dist/languages/handlebars.js.map +1 -1
- package/dist/languages/haskell.js +2 -3
- package/dist/languages/haskell.js.map +1 -1
- package/dist/languages/hcl.js +2 -3
- package/dist/languages/hcl.js.map +1 -1
- package/dist/languages/hoon.js +1 -2
- package/dist/languages/hoon.js.map +1 -1
- package/dist/languages/html.js +3 -4
- package/dist/languages/html.js.map +1 -1
- package/dist/languages/ichigojam.js +2 -3
- package/dist/languages/ichigojam.js.map +1 -1
- package/dist/languages/icon.js +2 -3
- package/dist/languages/icon.js.map +1 -1
- package/dist/languages/iecst.js +2 -3
- package/dist/languages/iecst.js.map +1 -1
- package/dist/languages/ignore.js +1 -2
- package/dist/languages/ignore.js.map +1 -1
- package/dist/languages/index.js +0 -2
- package/dist/languages/inform7.js +2 -3
- package/dist/languages/inform7.js.map +1 -1
- package/dist/languages/ini.js +1 -2
- package/dist/languages/ini.js.map +1 -1
- package/dist/languages/io.js +2 -3
- package/dist/languages/io.js.map +1 -1
- package/dist/languages/j.js +1 -2
- package/dist/languages/j.js.map +1 -1
- package/dist/languages/jolie.js +2 -3
- package/dist/languages/jolie.js.map +1 -1
- package/dist/languages/jq.js +2 -3
- package/dist/languages/jq.js.map +1 -1
- package/dist/languages/json.js +2 -3
- package/dist/languages/json.js.map +1 -1
- package/dist/languages/jsx.js +4 -5
- package/dist/languages/jsx.js.map +1 -1
- package/dist/languages/julia.js +2 -3
- package/dist/languages/julia.js.map +1 -1
- package/dist/languages/keepalived.js +2 -3
- package/dist/languages/keepalived.js.map +1 -1
- package/dist/languages/keyman.js +1 -2
- package/dist/languages/keyman.js.map +1 -1
- package/dist/languages/kotlin.js +2 -3
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/kumir.js +2 -3
- package/dist/languages/kumir.js.map +1 -1
- package/dist/languages/kusto.js +2 -3
- package/dist/languages/kusto.js.map +1 -1
- package/dist/languages/latex.js +2 -3
- package/dist/languages/latex.js.map +1 -1
- package/dist/languages/latte.js +1 -3
- package/dist/languages/latte.js.map +1 -1
- package/dist/languages/lilypond.js +2 -3
- package/dist/languages/lilypond.js.map +1 -1
- package/dist/languages/linker-script.js +2 -3
- package/dist/languages/linker-script.js.map +1 -1
- package/dist/languages/liquid.js +1 -3
- package/dist/languages/liquid.js.map +1 -1
- package/dist/languages/lisp.js +2 -3
- package/dist/languages/lisp.js.map +1 -1
- package/dist/languages/livescript.js +2 -3
- package/dist/languages/livescript.js.map +1 -1
- package/dist/languages/llvm.js +2 -3
- package/dist/languages/llvm.js.map +1 -1
- package/dist/languages/lolcode.js +1 -2
- package/dist/languages/lolcode.js.map +1 -1
- package/dist/languages/lua.js +2 -3
- package/dist/languages/lua.js.map +1 -1
- package/dist/languages/magma.js +2 -3
- package/dist/languages/magma.js.map +1 -1
- package/dist/languages/makefile.js +1 -2
- package/dist/languages/makefile.js.map +1 -1
- package/dist/languages/mata.js +2 -3
- package/dist/languages/mata.js.map +1 -1
- package/dist/languages/matlab.js +2 -3
- package/dist/languages/matlab.js.map +1 -1
- package/dist/languages/maxscript.js +2 -3
- package/dist/languages/maxscript.js.map +1 -1
- package/dist/languages/mel.js +2 -3
- package/dist/languages/mel.js.map +1 -1
- package/dist/languages/mermaid.js +2 -3
- package/dist/languages/mermaid.js.map +1 -1
- package/dist/languages/metafont.js +2 -3
- package/dist/languages/metafont.js.map +1 -1
- package/dist/languages/mizar.js +2 -3
- package/dist/languages/mizar.js.map +1 -1
- package/dist/languages/mongodb.js +2 -3
- package/dist/languages/mongodb.js.map +1 -1
- package/dist/languages/monkey.js +2 -3
- package/dist/languages/monkey.js.map +1 -1
- package/dist/languages/moonscript.js +2 -3
- package/dist/languages/moonscript.js.map +1 -1
- package/dist/languages/n1ql.js +2 -3
- package/dist/languages/n1ql.js.map +1 -1
- package/dist/languages/n4js.js +2 -3
- package/dist/languages/n4js.js.map +1 -1
- package/dist/languages/nand2tetris-hdl.js +2 -3
- package/dist/languages/nand2tetris-hdl.js.map +1 -1
- package/dist/languages/naniscript.js +2 -3
- package/dist/languages/naniscript.js.map +1 -1
- package/dist/languages/neon.js +2 -3
- package/dist/languages/neon.js.map +1 -1
- package/dist/languages/nevod.js +2 -3
- package/dist/languages/nevod.js.map +1 -1
- package/dist/languages/nginx.js +2 -3
- package/dist/languages/nginx.js.map +1 -1
- package/dist/languages/nim.js +2 -3
- package/dist/languages/nim.js.map +1 -1
- package/dist/languages/nix.js +2 -3
- package/dist/languages/nix.js.map +1 -1
- package/dist/languages/nsis.js +2 -3
- package/dist/languages/nsis.js.map +1 -1
- package/dist/languages/objectivec.js +2 -3
- package/dist/languages/objectivec.js.map +1 -1
- package/dist/languages/ocaml.js +2 -3
- package/dist/languages/ocaml.js.map +1 -1
- package/dist/languages/odin.js +2 -3
- package/dist/languages/odin.js.map +1 -1
- package/dist/languages/opencl.js +2 -3
- package/dist/languages/opencl.js.map +1 -1
- package/dist/languages/openqasm.js +2 -3
- package/dist/languages/openqasm.js.map +1 -1
- package/dist/languages/oz.js +2 -3
- package/dist/languages/oz.js.map +1 -1
- package/dist/languages/parigp.js +2 -3
- package/dist/languages/parigp.js.map +1 -1
- package/dist/languages/parser.js +3 -4
- package/dist/languages/parser.js.map +1 -1
- package/dist/languages/pascal.js +2 -3
- package/dist/languages/pascal.js.map +1 -1
- package/dist/languages/peoplecode.js +1 -2
- package/dist/languages/peoplecode.js.map +1 -1
- package/dist/languages/perl.js +2 -3
- package/dist/languages/perl.js.map +1 -1
- package/dist/languages/php.js +3 -4
- package/dist/languages/php.js.map +1 -1
- package/dist/languages/plant-uml.js +2 -3
- package/dist/languages/plant-uml.js.map +1 -1
- package/dist/languages/powerquery.js +2 -3
- package/dist/languages/powerquery.js.map +1 -1
- package/dist/languages/powershell.js +2 -3
- package/dist/languages/powershell.js.map +1 -1
- package/dist/languages/processing.js +2 -3
- package/dist/languages/processing.js.map +1 -1
- package/dist/languages/prolog.js +2 -3
- package/dist/languages/prolog.js.map +1 -1
- package/dist/languages/promql.js +2 -3
- package/dist/languages/promql.js.map +1 -1
- package/dist/languages/properties.js +1 -2
- package/dist/languages/properties.js.map +1 -1
- package/dist/languages/protobuf.js +2 -3
- package/dist/languages/protobuf.js.map +1 -1
- package/dist/languages/psl.js +2 -3
- package/dist/languages/psl.js.map +1 -1
- package/dist/languages/pug.js +2 -3
- package/dist/languages/pug.js.map +1 -1
- package/dist/languages/puppet.js +2 -3
- package/dist/languages/puppet.js.map +1 -1
- package/dist/languages/pure.js +2 -3
- package/dist/languages/pure.js.map +1 -1
- package/dist/languages/purebasic.js +2 -3
- package/dist/languages/purebasic.js.map +1 -1
- package/dist/languages/python.js +2 -3
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/q.js +2 -3
- package/dist/languages/q.js.map +1 -1
- package/dist/languages/qml.js +2 -3
- package/dist/languages/qml.js.map +1 -1
- package/dist/languages/qore.js +2 -3
- package/dist/languages/qore.js.map +1 -1
- package/dist/languages/qsharp.js +2 -3
- package/dist/languages/qsharp.js.map +1 -1
- package/dist/languages/r.js +2 -3
- package/dist/languages/r.js.map +1 -1
- package/dist/languages/reason.js +2 -3
- package/dist/languages/reason.js.map +1 -1
- package/dist/languages/rego.js +2 -3
- package/dist/languages/rego.js.map +1 -1
- package/dist/languages/rescript.js +2 -3
- package/dist/languages/rescript.js.map +1 -1
- package/dist/languages/rest.js +1 -2
- package/dist/languages/rest.js.map +1 -1
- package/dist/languages/rip.js +2 -3
- package/dist/languages/rip.js.map +1 -1
- package/dist/languages/roboconf.js +2 -3
- package/dist/languages/roboconf.js.map +1 -1
- package/dist/languages/robotframework.js +1 -2
- package/dist/languages/robotframework.js.map +1 -1
- package/dist/languages/ruby.js +2 -3
- package/dist/languages/ruby.js.map +1 -1
- package/dist/languages/rust.js +2 -3
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/sas.js +2 -3
- package/dist/languages/sas.js.map +1 -1
- package/dist/languages/scala.js +2 -3
- package/dist/languages/scala.js.map +1 -1
- package/dist/languages/scheme.js +2 -3
- package/dist/languages/scheme.js.map +1 -1
- package/dist/languages/smali.js +1 -2
- package/dist/languages/smali.js.map +1 -1
- package/dist/languages/smalltalk.js +2 -3
- package/dist/languages/smalltalk.js.map +1 -1
- package/dist/languages/smarty.js +1 -3
- package/dist/languages/smarty.js.map +1 -1
- package/dist/languages/sml.js +2 -3
- package/dist/languages/sml.js.map +1 -1
- package/dist/languages/solidity.js +2 -3
- package/dist/languages/solidity.js.map +1 -1
- package/dist/languages/solution-file.js +1 -2
- package/dist/languages/solution-file.js.map +1 -1
- package/dist/languages/soy.js +1 -3
- package/dist/languages/soy.js.map +1 -1
- package/dist/languages/splunk-spl.js +2 -3
- package/dist/languages/splunk-spl.js.map +1 -1
- package/dist/languages/sqf.js +2 -3
- package/dist/languages/sqf.js.map +1 -1
- package/dist/languages/sql.js +2 -3
- package/dist/languages/sql.js.map +1 -1
- package/dist/languages/squirrel.js +2 -3
- package/dist/languages/squirrel.js.map +1 -1
- package/dist/languages/stan.js +2 -3
- package/dist/languages/stan.js.map +1 -1
- package/dist/languages/stata.js +2 -3
- package/dist/languages/stata.js.map +1 -1
- package/dist/languages/stylus.js +2 -3
- package/dist/languages/stylus.js.map +1 -1
- package/dist/languages/supercollider.js +2 -3
- package/dist/languages/supercollider.js.map +1 -1
- package/dist/languages/svelte.js +3 -4
- package/dist/languages/svelte.js.map +1 -1
- package/dist/languages/swift.js +2 -3
- package/dist/languages/swift.js.map +1 -1
- package/dist/languages/systemd.js +1 -2
- package/dist/languages/systemd.js.map +1 -1
- package/dist/languages/tcl.js +2 -3
- package/dist/languages/tcl.js.map +1 -1
- package/dist/languages/textile.js +3 -4
- package/dist/languages/textile.js.map +1 -1
- package/dist/languages/toml.js +2 -3
- package/dist/languages/toml.js.map +1 -1
- package/dist/languages/tremor.js +1 -2
- package/dist/languages/tremor.js.map +1 -1
- package/dist/languages/tt2.js +2 -4
- package/dist/languages/tt2.js.map +1 -1
- package/dist/languages/turtle.js +2 -3
- package/dist/languages/turtle.js.map +1 -1
- package/dist/languages/twig.js +1 -3
- package/dist/languages/twig.js.map +1 -1
- package/dist/languages/typoscript.js +2 -3
- package/dist/languages/typoscript.js.map +1 -1
- package/dist/languages/unrealscript.js +2 -3
- package/dist/languages/unrealscript.js.map +1 -1
- package/dist/languages/uorazor.js +1 -2
- package/dist/languages/uorazor.js.map +1 -1
- package/dist/languages/v.js +2 -3
- package/dist/languages/v.js.map +1 -1
- package/dist/languages/vala.js +2 -3
- package/dist/languages/vala.js.map +1 -1
- package/dist/languages/vbnet.js +1 -2
- package/dist/languages/vbnet.js.map +1 -1
- package/dist/languages/velocity.js +3 -4
- package/dist/languages/velocity.js.map +1 -1
- package/dist/languages/verilog.js +2 -3
- package/dist/languages/verilog.js.map +1 -1
- package/dist/languages/vhdl.js +2 -3
- package/dist/languages/vhdl.js.map +1 -1
- package/dist/languages/vim.js +2 -3
- package/dist/languages/vim.js.map +1 -1
- package/dist/languages/visual-basic.js +2 -3
- package/dist/languages/visual-basic.js.map +1 -1
- package/dist/languages/vue.js +3 -4
- package/dist/languages/vue.js.map +1 -1
- package/dist/languages/warpscript.js +2 -3
- package/dist/languages/warpscript.js.map +1 -1
- package/dist/languages/wasm.js +1 -2
- package/dist/languages/wasm.js.map +1 -1
- package/dist/languages/web-idl.js +2 -3
- package/dist/languages/web-idl.js.map +1 -1
- package/dist/languages/wgsl.js +2 -3
- package/dist/languages/wgsl.js.map +1 -1
- package/dist/languages/wiki.js +3 -4
- package/dist/languages/wiki.js.map +1 -1
- package/dist/languages/wolfram.js +2 -3
- package/dist/languages/wolfram.js.map +1 -1
- package/dist/languages/wren.js +2 -3
- package/dist/languages/wren.js.map +1 -1
- package/dist/languages/xeora.js +2 -3
- package/dist/languages/xeora.js.map +1 -1
- package/dist/languages/xml.js +2 -3
- package/dist/languages/xml.js.map +1 -1
- package/dist/languages/xojo.js +1 -2
- package/dist/languages/xojo.js.map +1 -1
- package/dist/languages/xquery.js +3 -4
- package/dist/languages/xquery.js.map +1 -1
- package/dist/languages/yaml.js +2 -3
- package/dist/languages/yaml.js.map +1 -1
- package/dist/languages/yang.js +2 -3
- package/dist/languages/yang.js.map +1 -1
- package/dist/languages/zig.js +2 -3
- package/dist/languages/zig.js.map +1 -1
- package/dist/{markup-QXALiBXh.js → markup-BuUgjal3.js} +3 -3
- package/dist/{markup-QXALiBXh.js.map → markup-BuUgjal3.js.map} +1 -1
- package/dist/{markup-shared-9mpZ2F7x.js → markup-shared-51-ECHbZ.js} +3 -3
- package/dist/{markup-shared-9mpZ2F7x.js.map → markup-shared-51-ECHbZ.js.map} +1 -1
- package/dist/prism/index.js +1 -1
- package/dist/prism/languages/abap.js +1 -2
- package/dist/prism/languages/abap.js.map +1 -1
- package/dist/prism/languages/abnf.js +1 -2
- package/dist/prism/languages/abnf.js.map +1 -1
- package/dist/prism/languages/actionscript.js +2 -3
- package/dist/prism/languages/actionscript.js.map +1 -1
- package/dist/prism/languages/ada.js +1 -2
- package/dist/prism/languages/ada.js.map +1 -1
- package/dist/prism/languages/agda.js +1 -2
- package/dist/prism/languages/agda.js.map +1 -1
- package/dist/prism/languages/al.js +1 -2
- package/dist/prism/languages/al.js.map +1 -1
- package/dist/prism/languages/antlr4.js +1 -2
- package/dist/prism/languages/antlr4.js.map +1 -1
- package/dist/prism/languages/apacheconf.js +1 -2
- package/dist/prism/languages/apacheconf.js.map +1 -1
- package/dist/prism/languages/apex.js +1 -2
- package/dist/prism/languages/apex.js.map +1 -1
- package/dist/prism/languages/apl.js +1 -2
- package/dist/prism/languages/apl.js.map +1 -1
- package/dist/prism/languages/applescript.js +1 -2
- package/dist/prism/languages/applescript.js.map +1 -1
- package/dist/prism/languages/aql.js +1 -2
- package/dist/prism/languages/aql.js.map +1 -1
- package/dist/prism/languages/arduino.js +2 -3
- package/dist/prism/languages/arduino.js.map +1 -1
- package/dist/prism/languages/arff.js +1 -2
- package/dist/prism/languages/arff.js.map +1 -1
- package/dist/prism/languages/armasm.js +1 -2
- package/dist/prism/languages/armasm.js.map +1 -1
- package/dist/prism/languages/arturo.js +1 -2
- package/dist/prism/languages/arturo.js.map +1 -1
- package/dist/prism/languages/asciidoc.js +1 -2
- package/dist/prism/languages/asciidoc.js.map +1 -1
- package/dist/prism/languages/asm6502.js +1 -2
- package/dist/prism/languages/asm6502.js.map +1 -1
- package/dist/prism/languages/asmatmel.js +1 -2
- package/dist/prism/languages/asmatmel.js.map +1 -1
- package/dist/prism/languages/aspnet.js +2 -3
- package/dist/prism/languages/aspnet.js.map +1 -1
- package/dist/prism/languages/astro.js +3 -4
- package/dist/prism/languages/astro.js.map +1 -1
- package/dist/prism/languages/autohotkey.js +1 -2
- package/dist/prism/languages/autohotkey.js.map +1 -1
- package/dist/prism/languages/autoit.js +1 -2
- package/dist/prism/languages/autoit.js.map +1 -1
- package/dist/prism/languages/avisynth.js +1 -2
- package/dist/prism/languages/avisynth.js.map +1 -1
- package/dist/prism/languages/avro-idl.js +1 -2
- package/dist/prism/languages/avro-idl.js.map +1 -1
- package/dist/prism/languages/awk.js +1 -2
- package/dist/prism/languages/awk.js.map +1 -1
- package/dist/prism/languages/bash.js +1 -2
- package/dist/prism/languages/bash.js.map +1 -1
- package/dist/prism/languages/basic.js +1 -2
- package/dist/prism/languages/basic.js.map +1 -1
- package/dist/prism/languages/batch.js +1 -2
- package/dist/prism/languages/batch.js.map +1 -1
- package/dist/prism/languages/bbcode.js +1 -2
- package/dist/prism/languages/bbcode.js.map +1 -1
- package/dist/prism/languages/bbj.js +1 -2
- package/dist/prism/languages/bbj.js.map +1 -1
- package/dist/prism/languages/bicep.js +1 -2
- package/dist/prism/languages/bicep.js.map +1 -1
- package/dist/prism/languages/birb.js +1 -2
- package/dist/prism/languages/birb.js.map +1 -1
- package/dist/prism/languages/bison.js +2 -3
- package/dist/prism/languages/bison.js.map +1 -1
- package/dist/prism/languages/bnf.js +1 -2
- package/dist/prism/languages/bnf.js.map +1 -1
- package/dist/prism/languages/bqn.js +1 -2
- package/dist/prism/languages/bqn.js.map +1 -1
- package/dist/prism/languages/brainfuck.js +1 -2
- package/dist/prism/languages/brainfuck.js.map +1 -1
- package/dist/prism/languages/brightscript.js +1 -2
- package/dist/prism/languages/brightscript.js.map +1 -1
- package/dist/prism/languages/bro.js +1 -2
- package/dist/prism/languages/bro.js.map +1 -1
- package/dist/prism/languages/bsl.js +1 -2
- package/dist/prism/languages/bsl.js.map +1 -1
- package/dist/prism/languages/c.js +1 -2
- package/dist/prism/languages/c.js.map +1 -1
- package/dist/prism/languages/cfscript.js +1 -2
- package/dist/prism/languages/cfscript.js.map +1 -1
- package/dist/prism/languages/chaiscript.js +1 -2
- package/dist/prism/languages/chaiscript.js.map +1 -1
- package/dist/prism/languages/cil.js +1 -2
- package/dist/prism/languages/cil.js.map +1 -1
- package/dist/prism/languages/cilkc.js +2 -3
- package/dist/prism/languages/cilkc.js.map +1 -1
- package/dist/prism/languages/cilkcpp.js +2 -3
- package/dist/prism/languages/cilkcpp.js.map +1 -1
- package/dist/prism/languages/clike.js +1 -2
- package/dist/prism/languages/clike.js.map +1 -1
- package/dist/prism/languages/clojure.js +1 -2
- package/dist/prism/languages/clojure.js.map +1 -1
- package/dist/prism/languages/cmake.js +1 -2
- package/dist/prism/languages/cmake.js.map +1 -1
- package/dist/prism/languages/cobol.js +1 -2
- package/dist/prism/languages/cobol.js.map +1 -1
- package/dist/prism/languages/coffeescript.js +2 -3
- package/dist/prism/languages/coffeescript.js.map +1 -1
- package/dist/prism/languages/common.js +0 -2
- package/dist/prism/languages/concurnas.js +1 -2
- package/dist/prism/languages/concurnas.js.map +1 -1
- package/dist/prism/languages/cooklang.js +1 -2
- package/dist/prism/languages/cooklang.js.map +1 -1
- package/dist/prism/languages/coq.js +1 -2
- package/dist/prism/languages/coq.js.map +1 -1
- package/dist/prism/languages/cpp.js +2 -3
- package/dist/prism/languages/cpp.js.map +1 -1
- package/dist/prism/languages/crystal.js +2 -3
- package/dist/prism/languages/crystal.js.map +1 -1
- package/dist/prism/languages/csharp.js +1 -2
- package/dist/prism/languages/csharp.js.map +1 -1
- package/dist/prism/languages/cshtml.js +2 -3
- package/dist/prism/languages/cshtml.js.map +1 -1
- package/dist/prism/languages/csp.js +1 -2
- package/dist/prism/languages/csp.js.map +1 -1
- package/dist/prism/languages/css-extras.js +2 -3
- package/dist/prism/languages/css-extras.js.map +1 -1
- package/dist/prism/languages/css.js +1 -2
- package/dist/prism/languages/css.js.map +1 -1
- package/dist/prism/languages/csv.js +1 -2
- package/dist/prism/languages/csv.js.map +1 -1
- package/dist/prism/languages/cue.js +1 -2
- package/dist/prism/languages/cue.js.map +1 -1
- package/dist/prism/languages/cypher.js +1 -2
- package/dist/prism/languages/cypher.js.map +1 -1
- package/dist/prism/languages/d.js +1 -2
- package/dist/prism/languages/d.js.map +1 -1
- package/dist/prism/languages/dart.js +1 -2
- package/dist/prism/languages/dart.js.map +1 -1
- package/dist/prism/languages/dataweave.js +1 -2
- package/dist/prism/languages/dataweave.js.map +1 -1
- package/dist/prism/languages/dax.js +1 -2
- package/dist/prism/languages/dax.js.map +1 -1
- package/dist/prism/languages/dhall.js +1 -2
- package/dist/prism/languages/dhall.js.map +1 -1
- package/dist/prism/languages/diff.js +1 -2
- package/dist/prism/languages/diff.js.map +1 -1
- package/dist/prism/languages/django.js +2 -3
- package/dist/prism/languages/django.js.map +1 -1
- package/dist/prism/languages/dns-zone-file.js +1 -2
- package/dist/prism/languages/dns-zone-file.js.map +1 -1
- package/dist/prism/languages/docker.js +1 -2
- package/dist/prism/languages/docker.js.map +1 -1
- package/dist/prism/languages/dot.js +1 -2
- package/dist/prism/languages/dot.js.map +1 -1
- package/dist/prism/languages/ebnf.js +1 -2
- package/dist/prism/languages/ebnf.js.map +1 -1
- package/dist/prism/languages/editorconfig.js +1 -2
- package/dist/prism/languages/editorconfig.js.map +1 -1
- package/dist/prism/languages/eiffel.js +1 -2
- package/dist/prism/languages/eiffel.js.map +1 -1
- package/dist/prism/languages/ejs.js +2 -3
- package/dist/prism/languages/ejs.js.map +1 -1
- package/dist/prism/languages/elixir.js +1 -2
- package/dist/prism/languages/elixir.js.map +1 -1
- package/dist/prism/languages/elm.js +1 -2
- package/dist/prism/languages/elm.js.map +1 -1
- package/dist/prism/languages/erb.js +2 -3
- package/dist/prism/languages/erb.js.map +1 -1
- package/dist/prism/languages/erlang.js +1 -2
- package/dist/prism/languages/erlang.js.map +1 -1
- package/dist/prism/languages/etlua.js +2 -3
- package/dist/prism/languages/etlua.js.map +1 -1
- package/dist/prism/languages/excel-formula.js +1 -2
- package/dist/prism/languages/excel-formula.js.map +1 -1
- package/dist/prism/languages/factor.js +1 -2
- package/dist/prism/languages/factor.js.map +1 -1
- package/dist/prism/languages/false.js +1 -2
- package/dist/prism/languages/false.js.map +1 -1
- package/dist/prism/languages/firestore-security-rules.js +1 -2
- package/dist/prism/languages/firestore-security-rules.js.map +1 -1
- package/dist/prism/languages/flow.js +2 -3
- package/dist/prism/languages/flow.js.map +1 -1
- package/dist/prism/languages/fortran.js +1 -2
- package/dist/prism/languages/fortran.js.map +1 -1
- package/dist/prism/languages/fsharp.js +1 -2
- package/dist/prism/languages/fsharp.js.map +1 -1
- package/dist/prism/languages/ftl.js +2 -3
- package/dist/prism/languages/ftl.js.map +1 -1
- package/dist/prism/languages/gap.js +1 -2
- package/dist/prism/languages/gap.js.map +1 -1
- package/dist/prism/languages/gcode.js +1 -2
- package/dist/prism/languages/gcode.js.map +1 -1
- package/dist/prism/languages/gdscript.js +1 -2
- package/dist/prism/languages/gdscript.js.map +1 -1
- package/dist/prism/languages/gedcom.js +1 -2
- package/dist/prism/languages/gedcom.js.map +1 -1
- package/dist/prism/languages/gettext.js +1 -2
- package/dist/prism/languages/gettext.js.map +1 -1
- package/dist/prism/languages/gherkin.js +1 -2
- package/dist/prism/languages/gherkin.js.map +1 -1
- package/dist/prism/languages/git.js +1 -2
- package/dist/prism/languages/git.js.map +1 -1
- package/dist/prism/languages/glsl.js +2 -3
- package/dist/prism/languages/glsl.js.map +1 -1
- package/dist/prism/languages/gml.js +2 -3
- package/dist/prism/languages/gml.js.map +1 -1
- package/dist/prism/languages/gn.js +1 -2
- package/dist/prism/languages/gn.js.map +1 -1
- package/dist/prism/languages/go-module.js +1 -2
- package/dist/prism/languages/go-module.js.map +1 -1
- package/dist/prism/languages/go.js +1 -2
- package/dist/prism/languages/go.js.map +1 -1
- package/dist/prism/languages/gradle.js +1 -2
- package/dist/prism/languages/gradle.js.map +1 -1
- package/dist/prism/languages/graphql.js +1 -2
- package/dist/prism/languages/graphql.js.map +1 -1
- package/dist/prism/languages/groovy.js +1 -2
- package/dist/prism/languages/groovy.js.map +1 -1
- package/dist/prism/languages/haml.js +1 -2
- package/dist/prism/languages/haml.js.map +1 -1
- package/dist/prism/languages/handlebars.js +2 -3
- package/dist/prism/languages/handlebars.js.map +1 -1
- package/dist/prism/languages/haskell.js +1 -2
- package/dist/prism/languages/haskell.js.map +1 -1
- package/dist/prism/languages/haxe.js +1 -2
- package/dist/prism/languages/haxe.js.map +1 -1
- package/dist/prism/languages/hcl.js +1 -2
- package/dist/prism/languages/hcl.js.map +1 -1
- package/dist/prism/languages/hlsl.js +2 -3
- package/dist/prism/languages/hlsl.js.map +1 -1
- package/dist/prism/languages/hoon.js +1 -2
- package/dist/prism/languages/hoon.js.map +1 -1
- package/dist/prism/languages/hpkp.js +1 -2
- package/dist/prism/languages/hpkp.js.map +1 -1
- package/dist/prism/languages/hsts.js +1 -2
- package/dist/prism/languages/hsts.js.map +1 -1
- package/dist/prism/languages/http.js +1 -2
- package/dist/prism/languages/http.js.map +1 -1
- package/dist/prism/languages/ichigojam.js +1 -2
- package/dist/prism/languages/ichigojam.js.map +1 -1
- package/dist/prism/languages/icon.js +1 -2
- package/dist/prism/languages/icon.js.map +1 -1
- package/dist/prism/languages/icu-message-format.js +1 -2
- package/dist/prism/languages/icu-message-format.js.map +1 -1
- package/dist/prism/languages/idris.js +2 -3
- package/dist/prism/languages/idris.js.map +1 -1
- package/dist/prism/languages/iecst.js +1 -2
- package/dist/prism/languages/iecst.js.map +1 -1
- package/dist/prism/languages/ignore.js +1 -2
- package/dist/prism/languages/ignore.js.map +1 -1
- package/dist/prism/languages/index.js +0 -2
- package/dist/prism/languages/inform7.js +1 -2
- package/dist/prism/languages/inform7.js.map +1 -1
- package/dist/prism/languages/ini.js +1 -2
- package/dist/prism/languages/ini.js.map +1 -1
- package/dist/prism/languages/io.js +1 -2
- package/dist/prism/languages/io.js.map +1 -1
- package/dist/prism/languages/j.js +1 -2
- package/dist/prism/languages/j.js.map +1 -1
- package/dist/prism/languages/java.js +1 -2
- package/dist/prism/languages/java.js.map +1 -1
- package/dist/prism/languages/javadoc.js +2 -3
- package/dist/prism/languages/javadoc.js.map +1 -1
- package/dist/prism/languages/javadoclike.js +1 -2
- package/dist/prism/languages/javadoclike.js.map +1 -1
- package/dist/prism/languages/javascript.js +1 -2
- package/dist/prism/languages/javascript.js.map +1 -1
- package/dist/prism/languages/javastacktrace.js +1 -2
- package/dist/prism/languages/javastacktrace.js.map +1 -1
- package/dist/prism/languages/jexl.js +1 -2
- package/dist/prism/languages/jexl.js.map +1 -1
- package/dist/prism/languages/jolie.js +1 -2
- package/dist/prism/languages/jolie.js.map +1 -1
- package/dist/prism/languages/jq.js +1 -2
- package/dist/prism/languages/jq.js.map +1 -1
- package/dist/prism/languages/js-templates.js +2 -3
- package/dist/prism/languages/js-templates.js.map +1 -1
- package/dist/prism/languages/jsdoc.js +2 -3
- package/dist/prism/languages/jsdoc.js.map +1 -1
- package/dist/prism/languages/json.js +1 -2
- package/dist/prism/languages/json.js.map +1 -1
- package/dist/prism/languages/json5.js +2 -3
- package/dist/prism/languages/json5.js.map +1 -1
- package/dist/prism/languages/jsonp.js +2 -3
- package/dist/prism/languages/jsonp.js.map +1 -1
- package/dist/prism/languages/jsstacktrace.js +1 -2
- package/dist/prism/languages/jsstacktrace.js.map +1 -1
- package/dist/prism/languages/jsx.js +2 -3
- package/dist/prism/languages/jsx.js.map +1 -1
- package/dist/prism/languages/julia.js +1 -2
- package/dist/prism/languages/julia.js.map +1 -1
- package/dist/prism/languages/keepalived.js +1 -2
- package/dist/prism/languages/keepalived.js.map +1 -1
- package/dist/prism/languages/keyman.js +1 -2
- package/dist/prism/languages/keyman.js.map +1 -1
- package/dist/prism/languages/kotlin.js +1 -2
- package/dist/prism/languages/kotlin.js.map +1 -1
- package/dist/prism/languages/kumir.js +1 -2
- package/dist/prism/languages/kumir.js.map +1 -1
- package/dist/prism/languages/kusto.js +1 -2
- package/dist/prism/languages/kusto.js.map +1 -1
- package/dist/prism/languages/latex.js +1 -2
- package/dist/prism/languages/latex.js.map +1 -1
- package/dist/prism/languages/latte.js +3 -4
- package/dist/prism/languages/latte.js.map +1 -1
- package/dist/prism/languages/less.js +2 -3
- package/dist/prism/languages/less.js.map +1 -1
- package/dist/prism/languages/lilypond.js +1 -2
- package/dist/prism/languages/lilypond.js.map +1 -1
- package/dist/prism/languages/linker-script.js +1 -2
- package/dist/prism/languages/linker-script.js.map +1 -1
- package/dist/prism/languages/liquid.js +2 -3
- package/dist/prism/languages/liquid.js.map +1 -1
- package/dist/prism/languages/lisp.js +2 -3
- package/dist/prism/languages/lisp.js.map +1 -1
- package/dist/prism/languages/livescript.js +1 -2
- package/dist/prism/languages/livescript.js.map +1 -1
- package/dist/prism/languages/llvm.js +1 -2
- package/dist/prism/languages/llvm.js.map +1 -1
- package/dist/prism/languages/log.js +1 -2
- package/dist/prism/languages/log.js.map +1 -1
- package/dist/prism/languages/lolcode.js +1 -2
- package/dist/prism/languages/lolcode.js.map +1 -1
- package/dist/prism/languages/lua.js +1 -2
- package/dist/prism/languages/lua.js.map +1 -1
- package/dist/prism/languages/magma.js +1 -2
- package/dist/prism/languages/magma.js.map +1 -1
- package/dist/prism/languages/makefile.js +1 -2
- package/dist/prism/languages/makefile.js.map +1 -1
- package/dist/prism/languages/markdown.js +2 -3
- package/dist/prism/languages/markdown.js.map +1 -1
- package/dist/prism/languages/markup.js +2 -3
- package/dist/prism/languages/markup.js.map +1 -1
- package/dist/prism/languages/mata.js +1 -2
- package/dist/prism/languages/mata.js.map +1 -1
- package/dist/prism/languages/matlab.js +1 -2
- package/dist/prism/languages/matlab.js.map +1 -1
- package/dist/prism/languages/maxscript.js +1 -2
- package/dist/prism/languages/maxscript.js.map +1 -1
- package/dist/prism/languages/mel.js +1 -2
- package/dist/prism/languages/mel.js.map +1 -1
- package/dist/prism/languages/mermaid.js +1 -2
- package/dist/prism/languages/mermaid.js.map +1 -1
- package/dist/prism/languages/metafont.js +1 -2
- package/dist/prism/languages/metafont.js.map +1 -1
- package/dist/prism/languages/mizar.js +1 -2
- package/dist/prism/languages/mizar.js.map +1 -1
- package/dist/prism/languages/mongodb.js +2 -3
- package/dist/prism/languages/mongodb.js.map +1 -1
- package/dist/prism/languages/monkey.js +1 -2
- package/dist/prism/languages/monkey.js.map +1 -1
- package/dist/prism/languages/moonscript.js +1 -2
- package/dist/prism/languages/moonscript.js.map +1 -1
- package/dist/prism/languages/n1ql.js +1 -2
- package/dist/prism/languages/n1ql.js.map +1 -1
- package/dist/prism/languages/n4js.js +2 -3
- package/dist/prism/languages/n4js.js.map +1 -1
- package/dist/prism/languages/nand2tetris-hdl.js +1 -2
- package/dist/prism/languages/nand2tetris-hdl.js.map +1 -1
- package/dist/prism/languages/naniscript.js +1 -2
- package/dist/prism/languages/naniscript.js.map +1 -1
- package/dist/prism/languages/nasm.js +1 -2
- package/dist/prism/languages/nasm.js.map +1 -1
- package/dist/prism/languages/neon.js +1 -2
- package/dist/prism/languages/neon.js.map +1 -1
- package/dist/prism/languages/nevod.js +1 -2
- package/dist/prism/languages/nevod.js.map +1 -1
- package/dist/prism/languages/nginx.js +1 -2
- package/dist/prism/languages/nginx.js.map +1 -1
- package/dist/prism/languages/nim.js +1 -2
- package/dist/prism/languages/nim.js.map +1 -1
- package/dist/prism/languages/nix.js +1 -2
- package/dist/prism/languages/nix.js.map +1 -1
- package/dist/prism/languages/nsis.js +1 -2
- package/dist/prism/languages/nsis.js.map +1 -1
- package/dist/prism/languages/objectivec.js +2 -3
- package/dist/prism/languages/objectivec.js.map +1 -1
- package/dist/prism/languages/ocaml.js +1 -2
- package/dist/prism/languages/ocaml.js.map +1 -1
- package/dist/prism/languages/odin.js +1 -2
- package/dist/prism/languages/odin.js.map +1 -1
- package/dist/prism/languages/opencl.js +2 -3
- package/dist/prism/languages/opencl.js.map +1 -1
- package/dist/prism/languages/openqasm.js +1 -2
- package/dist/prism/languages/openqasm.js.map +1 -1
- package/dist/prism/languages/oz.js +1 -2
- package/dist/prism/languages/oz.js.map +1 -1
- package/dist/prism/languages/parigp.js +1 -2
- package/dist/prism/languages/parigp.js.map +1 -1
- package/dist/prism/languages/parser.js +2 -3
- package/dist/prism/languages/parser.js.map +1 -1
- package/dist/prism/languages/pascal.js +2 -3
- package/dist/prism/languages/pascal.js.map +1 -1
- package/dist/prism/languages/pascaligo.js +1 -2
- package/dist/prism/languages/pascaligo.js.map +1 -1
- package/dist/prism/languages/pcaxis.js +1 -2
- package/dist/prism/languages/pcaxis.js.map +1 -1
- package/dist/prism/languages/peoplecode.js +1 -2
- package/dist/prism/languages/peoplecode.js.map +1 -1
- package/dist/prism/languages/perl.js +1 -2
- package/dist/prism/languages/perl.js.map +1 -1
- package/dist/prism/languages/php-extras.js +2 -3
- package/dist/prism/languages/php-extras.js.map +1 -1
- package/dist/prism/languages/php.js +2 -3
- package/dist/prism/languages/php.js.map +1 -1
- package/dist/prism/languages/phpdoc.js +2 -3
- package/dist/prism/languages/phpdoc.js.map +1 -1
- package/dist/prism/languages/plant-uml.js +1 -2
- package/dist/prism/languages/plant-uml.js.map +1 -1
- package/dist/prism/languages/plsql.js +2 -3
- package/dist/prism/languages/plsql.js.map +1 -1
- package/dist/prism/languages/powerquery.js +1 -2
- package/dist/prism/languages/powerquery.js.map +1 -1
- package/dist/prism/languages/powershell.js +1 -2
- package/dist/prism/languages/powershell.js.map +1 -1
- package/dist/prism/languages/processing.js +2 -3
- package/dist/prism/languages/processing.js.map +1 -1
- package/dist/prism/languages/prolog.js +1 -2
- package/dist/prism/languages/prolog.js.map +1 -1
- package/dist/prism/languages/promql.js +1 -2
- package/dist/prism/languages/promql.js.map +1 -1
- package/dist/prism/languages/properties.js +1 -2
- package/dist/prism/languages/properties.js.map +1 -1
- package/dist/prism/languages/protobuf.js +2 -3
- package/dist/prism/languages/protobuf.js.map +1 -1
- package/dist/prism/languages/psl.js +1 -2
- package/dist/prism/languages/psl.js.map +1 -1
- package/dist/prism/languages/pug.js +1 -2
- package/dist/prism/languages/pug.js.map +1 -1
- package/dist/prism/languages/puppet.js +1 -2
- package/dist/prism/languages/puppet.js.map +1 -1
- package/dist/prism/languages/pure.js +1 -2
- package/dist/prism/languages/pure.js.map +1 -1
- package/dist/prism/languages/purebasic.js +1 -2
- package/dist/prism/languages/purebasic.js.map +1 -1
- package/dist/prism/languages/purescript.js +2 -3
- package/dist/prism/languages/purescript.js.map +1 -1
- package/dist/prism/languages/python.js +1 -2
- package/dist/prism/languages/python.js.map +1 -1
- package/dist/prism/languages/q.js +1 -2
- package/dist/prism/languages/q.js.map +1 -1
- package/dist/prism/languages/qml.js +1 -2
- package/dist/prism/languages/qml.js.map +1 -1
- package/dist/prism/languages/qore.js +1 -2
- package/dist/prism/languages/qore.js.map +1 -1
- package/dist/prism/languages/qsharp.js +1 -2
- package/dist/prism/languages/qsharp.js.map +1 -1
- package/dist/prism/languages/r.js +1 -2
- package/dist/prism/languages/r.js.map +1 -1
- package/dist/prism/languages/racket.js +2 -3
- package/dist/prism/languages/racket.js.map +1 -1
- package/dist/prism/languages/reason.js +1 -2
- package/dist/prism/languages/reason.js.map +1 -1
- package/dist/prism/languages/regex.js +1 -2
- package/dist/prism/languages/regex.js.map +1 -1
- package/dist/prism/languages/rego.js +1 -2
- package/dist/prism/languages/rego.js.map +1 -1
- package/dist/prism/languages/renpy.js +1 -2
- package/dist/prism/languages/renpy.js.map +1 -1
- package/dist/prism/languages/rescript.js +1 -2
- package/dist/prism/languages/rescript.js.map +1 -1
- package/dist/prism/languages/rest.js +1 -2
- package/dist/prism/languages/rest.js.map +1 -1
- package/dist/prism/languages/rip.js +1 -2
- package/dist/prism/languages/rip.js.map +1 -1
- package/dist/prism/languages/roboconf.js +1 -2
- package/dist/prism/languages/roboconf.js.map +1 -1
- package/dist/prism/languages/robotframework.js +1 -2
- package/dist/prism/languages/robotframework.js.map +1 -1
- package/dist/prism/languages/ruby.js +1 -2
- package/dist/prism/languages/ruby.js.map +1 -1
- package/dist/prism/languages/rust.js +1 -2
- package/dist/prism/languages/rust.js.map +1 -1
- package/dist/prism/languages/sas.js +1 -2
- package/dist/prism/languages/sas.js.map +1 -1
- package/dist/prism/languages/sass.js +2 -3
- package/dist/prism/languages/sass.js.map +1 -1
- package/dist/prism/languages/scala.js +2 -3
- package/dist/prism/languages/scala.js.map +1 -1
- package/dist/prism/languages/scheme.js +1 -2
- package/dist/prism/languages/scheme.js.map +1 -1
- package/dist/prism/languages/scss.js +2 -3
- package/dist/prism/languages/scss.js.map +1 -1
- package/dist/prism/languages/shell-session.js +1 -2
- package/dist/prism/languages/shell-session.js.map +1 -1
- package/dist/prism/languages/smali.js +1 -2
- package/dist/prism/languages/smali.js.map +1 -1
- package/dist/prism/languages/smalltalk.js +1 -2
- package/dist/prism/languages/smalltalk.js.map +1 -1
- package/dist/prism/languages/smarty.js +2 -3
- package/dist/prism/languages/smarty.js.map +1 -1
- package/dist/prism/languages/sml.js +1 -2
- package/dist/prism/languages/sml.js.map +1 -1
- package/dist/prism/languages/solidity.js +1 -2
- package/dist/prism/languages/solidity.js.map +1 -1
- package/dist/prism/languages/solution-file.js +1 -2
- package/dist/prism/languages/solution-file.js.map +1 -1
- package/dist/prism/languages/soy.js +2 -3
- package/dist/prism/languages/soy.js.map +1 -1
- package/dist/prism/languages/sparql.js +2 -3
- package/dist/prism/languages/sparql.js.map +1 -1
- package/dist/prism/languages/splunk-spl.js +1 -2
- package/dist/prism/languages/splunk-spl.js.map +1 -1
- package/dist/prism/languages/sqf.js +1 -2
- package/dist/prism/languages/sqf.js.map +1 -1
- package/dist/prism/languages/sql.js +1 -2
- package/dist/prism/languages/sql.js.map +1 -1
- package/dist/prism/languages/squirrel.js +1 -2
- package/dist/prism/languages/squirrel.js.map +1 -1
- package/dist/prism/languages/stan.js +1 -2
- package/dist/prism/languages/stan.js.map +1 -1
- package/dist/prism/languages/stata.js +1 -2
- package/dist/prism/languages/stata.js.map +1 -1
- package/dist/prism/languages/stylus.js +1 -2
- package/dist/prism/languages/stylus.js.map +1 -1
- package/dist/prism/languages/supercollider.js +1 -2
- package/dist/prism/languages/supercollider.js.map +1 -1
- package/dist/prism/languages/svelte.js +3 -4
- package/dist/prism/languages/svelte.js.map +1 -1
- package/dist/prism/languages/swift.js +1 -2
- package/dist/prism/languages/swift.js.map +1 -1
- package/dist/prism/languages/systemd.js +1 -2
- package/dist/prism/languages/systemd.js.map +1 -1
- package/dist/prism/languages/t4-cs.js +1 -2
- package/dist/prism/languages/t4-cs.js.map +1 -1
- package/dist/prism/languages/t4-vb.js +1 -2
- package/dist/prism/languages/t4-vb.js.map +1 -1
- package/dist/prism/languages/tap.js +1 -2
- package/dist/prism/languages/tap.js.map +1 -1
- package/dist/prism/languages/tcl.js +1 -2
- package/dist/prism/languages/tcl.js.map +1 -1
- package/dist/prism/languages/textile.js +2 -3
- package/dist/prism/languages/textile.js.map +1 -1
- package/dist/prism/languages/toml.js +1 -2
- package/dist/prism/languages/toml.js.map +1 -1
- package/dist/prism/languages/tremor.js +1 -2
- package/dist/prism/languages/tremor.js.map +1 -1
- package/dist/prism/languages/tsx.js +3 -4
- package/dist/prism/languages/tsx.js.map +1 -1
- package/dist/prism/languages/tt2.js +2 -3
- package/dist/prism/languages/tt2.js.map +1 -1
- package/dist/prism/languages/turtle.js +1 -2
- package/dist/prism/languages/turtle.js.map +1 -1
- package/dist/prism/languages/twig.js +2 -3
- package/dist/prism/languages/twig.js.map +1 -1
- package/dist/prism/languages/typescript.js +2 -3
- package/dist/prism/languages/typescript.js.map +1 -1
- package/dist/prism/languages/typoscript.js +1 -2
- package/dist/prism/languages/typoscript.js.map +1 -1
- package/dist/prism/languages/unrealscript.js +1 -2
- package/dist/prism/languages/unrealscript.js.map +1 -1
- package/dist/prism/languages/uorazor.js +1 -2
- package/dist/prism/languages/uorazor.js.map +1 -1
- package/dist/prism/languages/uri.js +1 -2
- package/dist/prism/languages/uri.js.map +1 -1
- package/dist/prism/languages/v.js +1 -2
- package/dist/prism/languages/v.js.map +1 -1
- package/dist/prism/languages/vala.js +1 -2
- package/dist/prism/languages/vala.js.map +1 -1
- package/dist/prism/languages/vbnet.js +2 -3
- package/dist/prism/languages/vbnet.js.map +1 -1
- package/dist/prism/languages/velocity.js +2 -3
- package/dist/prism/languages/velocity.js.map +1 -1
- package/dist/prism/languages/verilog.js +1 -2
- package/dist/prism/languages/verilog.js.map +1 -1
- package/dist/prism/languages/vhdl.js +1 -2
- package/dist/prism/languages/vhdl.js.map +1 -1
- package/dist/prism/languages/vim.js +1 -2
- package/dist/prism/languages/vim.js.map +1 -1
- package/dist/prism/languages/visual-basic.js +1 -2
- package/dist/prism/languages/visual-basic.js.map +1 -1
- package/dist/prism/languages/vue.js +3 -4
- package/dist/prism/languages/vue.js.map +1 -1
- package/dist/prism/languages/warpscript.js +1 -2
- package/dist/prism/languages/warpscript.js.map +1 -1
- package/dist/prism/languages/wasm.js +1 -2
- package/dist/prism/languages/wasm.js.map +1 -1
- package/dist/prism/languages/web-idl.js +1 -2
- package/dist/prism/languages/web-idl.js.map +1 -1
- package/dist/prism/languages/wgsl.js +1 -2
- package/dist/prism/languages/wgsl.js.map +1 -1
- package/dist/prism/languages/wiki.js +2 -3
- package/dist/prism/languages/wiki.js.map +1 -1
- package/dist/prism/languages/wolfram.js +1 -2
- package/dist/prism/languages/wolfram.js.map +1 -1
- package/dist/prism/languages/wren.js +1 -2
- package/dist/prism/languages/wren.js.map +1 -1
- package/dist/prism/languages/xeora.js +2 -3
- package/dist/prism/languages/xeora.js.map +1 -1
- package/dist/prism/languages/xml-doc.js +2 -3
- package/dist/prism/languages/xml-doc.js.map +1 -1
- package/dist/prism/languages/xml.js +1 -2
- package/dist/prism/languages/xml.js.map +1 -1
- package/dist/prism/languages/xojo.js +1 -2
- package/dist/prism/languages/xojo.js.map +1 -1
- package/dist/prism/languages/xquery.js +2 -3
- package/dist/prism/languages/xquery.js.map +1 -1
- package/dist/prism/languages/yaml.js +1 -2
- package/dist/prism/languages/yaml.js.map +1 -1
- package/dist/prism/languages/yang.js +1 -2
- package/dist/prism/languages/yang.js.map +1 -1
- package/dist/prism/languages/zig.js +1 -2
- package/dist/prism/languages/zig.js.map +1 -1
- package/dist/prism/utils/index.js +3 -3
- package/dist/{readonly-B2mB6SBq.js → readonly-GQzeUj3U.js} +2 -2
- package/dist/{readonly-B2mB6SBq.js.map → readonly-GQzeUj3U.js.map} +1 -1
- package/dist/{replace-7HEgpjUa.js → replace-Dyz0WLX4.js} +3 -3
- package/dist/{replace-7HEgpjUa.js.map → replace-Dyz0WLX4.js.map} +1 -1
- package/dist/{search-BRreLtKo.js → search-2QkWYhOj.js} +3 -3
- package/dist/{search-BRreLtKo.js.map → search-2QkWYhOj.js.map} +1 -1
- package/dist/{selection-CxSTkhLl.js → selection-BXGGkB5o.js} +2 -2
- package/dist/{selection-CxSTkhLl.js.map → selection-BXGGkB5o.js.map} +1 -1
- package/dist/setups/index.js +3 -3
- package/dist/{shared-D8s5vV4L.js → shared-c_zHT_t0.js} +4 -4
- package/dist/{shared-D8s5vV4L.js.map → shared-c_zHT_t0.js.map} +1 -1
- package/dist/ssr/index.js +1 -1
- package/dist/{templating-G3yQ82w-.js → templating-BJaqFF_t.js} +2 -2
- package/dist/{templating-G3yQ82w-.js.map → templating-BJaqFF_t.js.map} +1 -1
- package/dist/{tooltip-DfstKaPP.js → tooltip-CYiVU7WY.js} +5 -5
- package/dist/{tooltip-DfstKaPP.js.map → tooltip-CYiVU7WY.js.map} +1 -1
- package/dist/tooltips.js +2 -2
- package/dist/utils/index.js +1 -1
- package/dist/{utils-CF32SFsA.js → utils-DSQ-ulqQ.js} +3 -3
- package/dist/{utils-CF32SFsA.js.map → utils-DSQ-ulqQ.js.map} +1 -1
- package/dist/{utils-CJ-SNffH.js → utils-umP5W0OV.js} +3 -3
- package/dist/{utils-CJ-SNffH.js.map → utils-umP5W0OV.js.map} +1 -1
- package/package.json +16 -2
- package/dist/core-BX6FrDXS.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { indentGuides } from "./extensions/guides.js";
|
|
2
|
-
import { s as defaultCommands, t as editHistory } from "./commands-
|
|
3
|
-
import { n as cursorPosition } from "./cursor-
|
|
2
|
+
import { s as defaultCommands, t as editHistory } from "./commands-HRCav5fj.js";
|
|
3
|
+
import { n as cursorPosition } from "./cursor-7DP0p42U.js";
|
|
4
4
|
import { matchBrackets } from "./extensions/matchBrackets/index.js";
|
|
5
5
|
import { highlightBracketPairs } from "./extensions/matchBrackets/highlight.js";
|
|
6
6
|
import { matchTags } from "./extensions/matchTags.js";
|
|
7
|
-
import { n as highlightSelectionMatches } from "./selection-
|
|
7
|
+
import { n as highlightSelectionMatches } from "./selection-BXGGkB5o.js";
|
|
8
8
|
import { searchWidget, showInvisibles } from "./extensions/search/index.js";
|
|
9
9
|
import "./languages/index.js";
|
|
10
10
|
//#region src/extensions/search/search.css?inline
|
|
@@ -30,4 +30,4 @@ var style = search_default + invisibles_default;
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { basic, style };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=basic-
|
|
33
|
+
//# sourceMappingURL=basic-DwpT6yIa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-
|
|
1
|
+
{"version":3,"file":"basic-DwpT6yIa.js","names":[],"sources":["../src/extensions/search/search.css?inline","../src/extensions/search/invisibles.css?inline","../src/setups/basic.ts"],"sourcesContent":[".prism-search {\r\n\tdisplay: grid;\r\n\tborder: 1px solid var(--pce-widget-border);\r\n\tgrid: auto / 1em auto;\r\n\tgap: 0.3em;\r\n\tpadding: 0.3em;\r\n\tborder-radius: 0.3em;\r\n\tmargin: -99in 0 0 0;\r\n\tline-height: 1.5;\r\n\tcolor: var(--pce-widget-color);\r\n\tbackground: var(--pce-widget-bg);\r\n\tposition: sticky;\r\n\ttop: 0.5em;\r\n\tright: 0.5em;\r\n\tleft: 0.5em;\r\n\tz-index: 4;\r\n\tpointer-events: auto;\r\n}\r\n\r\n.prism-search-container * {\r\n\tbox-sizing: border-box;\r\n}\r\n\r\n.prism-search button {\r\n\tall: unset;\r\n\tcursor: pointer;\r\n}\r\n\r\n.pce-readonly .prism-search {\r\n\tgrid: auto / auto;\r\n}\r\n\r\n.prism-search > div > div {\r\n\tdisplay: flex;\r\n}\r\n\r\n.pce-input input {\r\n\tpadding: 0 0 0 0.3em;\r\n\twidth: calc(var(--search-width, 20em) - 10ch - 4px);\r\n\tfont: inherit;\r\n\tborder: none;\r\n\tbackground: #0000;\r\n\tcolor: var(--pce-widget-color);\r\n\toutline: 0;\r\n}\r\n\r\n.pce-input ::placeholder {\r\n\tcolor: inherit;\r\n\topacity: 0.6;\r\n}\r\n\r\n.pce-match-count {\r\n\tmargin: 1px auto 1px 0;\r\n}\r\n\r\n.pce-match-count,\r\n.pce-input {\r\n\tfont-family: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.pce-options {\r\n\tcolor: var(--pce-widget-color-options);\r\n\tfont-size: 80%;\r\n\tgap: 0.25em;\r\n}\r\n\r\n.pce-options button {\r\n\tpadding: 0 0.2em;\r\n\tborder-radius: 0.2em;\r\n\twidth: 1.2em;\r\n\ttext-align: center;\r\n}\r\n\r\n.pce-options button span {\r\n\tpointer-events: none;\r\n}\r\n\r\n.prism-search button:focus-visible {\r\n\toutline: 1px solid var(--pce-widget-focus);\r\n\tz-index: 1;\r\n}\r\n\r\n.pce-input,\r\n.pce-options button {\r\n\tbox-shadow: 0 0 0 1px var(--_border, var(--pce-widget-border));\r\n\tmargin: 1px;\r\n}\r\n\r\n.pce-input {\r\n\tdisplay: flex;\r\n\tposition: relative;\r\n\tbackground: var(--pce-widget-bg-input);\r\n\tborder-radius: 0.15em;\r\n\theight: 1.5em;\r\n}\r\n\r\n.pce-input:focus-within {\r\n\t--_border: var(--pce-widget-focus);\r\n}\r\n\r\n.pce-find button {\r\n\tdisplay: grid;\r\n\talign-items: center;\r\n\tpadding: 0 0.4em;\r\n}\r\n\r\n.pce-replace button {\r\n\twidth: 7.3ch;\r\n\ttext-align: center;\r\n}\r\n\r\n.pce-replace :last-child {\r\n\twidth: 2.7ch;\r\n}\r\n\r\n.pce-input button {\r\n\tbox-shadow: -1px 0 0 0 var(--pce-widget-border);\r\n\tmargin-left: 1px;\r\n}\r\n\r\n.pce-prev::before {\r\n\ttransform: rotate(-90deg);\r\n}\r\n\r\n.pce-next::before,\r\n.pce-expand::before {\r\n\ttransform: rotate(90deg);\r\n}\r\n\r\n@media (hover: hover) {\r\n\t.prism-search button:hover {\r\n\t\tbackground: var(--pce-widget-bg-hover);\r\n\t}\r\n}\r\n\r\n.pce-options button[aria-pressed=\"true\"] {\r\n\tbackground: var(--pce-widget-bg-active);\r\n\tcolor: var(--pce-widget-color-active);\r\n\t--_border: var(--pce-widget-focus);\r\n}\r\n\r\n.pce-input > :nth-child(3) {\r\n\tborder-radius: 0 0.15em 0.15em 0;\r\n}\r\n\r\n.pce-input.pce-error {\r\n\t--_border: var(--pce-widget-error);\r\n\t--pce-widget-focus: var(--_border);\r\n}\r\n\r\n.search-error {\r\n\tdisplay: none;\r\n\tposition: absolute;\r\n\ttop: 100%;\r\n\tbox-shadow: inherit;\r\n\twidth: 100%;\r\n\twhite-space: normal;\r\n\tword-break: break-word;\r\n\tleft: 0;\r\n\tbackground: var(--pce-widget-bg-error);\r\n\tpadding: 0.5em;\r\n\tz-index: 1;\r\n}\r\n\r\n.pce-error:focus-within .search-error {\r\n\tdisplay: block;\r\n}\r\n\r\nbutton.pce-close {\r\n\tdisplay: grid;\r\n\twidth: 1.3em;\r\n\theight: 1.3em;\r\n\tplace-items: center;\r\n\tmargin-left: auto;\r\n\tborder-radius: 0.3em;\r\n}\r\n\r\n.pce-find button::before,\r\n.pce-expand::before,\r\n.pce-close::before {\r\n\tcontent: \"\";\r\n\tbackground: currentColor;\r\n\theight: 1.2em;\r\n\topacity: 0.75;\r\n}\r\n\r\n.pce-close::before {\r\n\tclip-path: polygon(\r\n\t\t50% 44.34%,\r\n\t\t0% 74.34%,\r\n\t\t9.43% 80%,\r\n\t\t9.43% 20%,\r\n\t\t0% 25.66%,\r\n\t\t50% 55.66%,\r\n\t\t100% 25.66%,\r\n\t\t90.57% 20%,\r\n\t\t50% 44.34%,\r\n\t\t9.43% 20%,\r\n\t\t9.43% 80%,\r\n\t\t50% 55.66%,\r\n\t\t90.57% 80%,\r\n\t\t100% 74.34%\r\n\t);\r\n\twidth: 0.72em;\r\n}\r\n\r\n.prism-search > div {\r\n\tdisplay: grid;\r\n\tgap: 0.25em;\r\n\twidth: var(--search-width, 20em);\r\n}\r\n\r\nbutton.pce-expand {\r\n\tdisplay: grid;\r\n\tplace-items: center;\r\n\tborder-radius: 0.25em;\r\n\tmargin: -0.15em;\r\n}\r\n\r\n.pce-readonly .pce-expand,\r\n[aria-expanded=\"false\"] + div .pce-replace,\r\n.pce-readonly .pce-replace {\r\n\tdisplay: none;\r\n}\r\n\r\n.pce-expand[aria-expanded=\"true\"]::before {\r\n\ttransform: rotate(180deg);\r\n}\r\n\r\n.pce-find button::before,\r\n.pce-expand::before {\r\n\twidth: 0.84em;\r\n\tclip-path: polygon(50% 28.96%, 0% 63.96%, 10.1% 71.04%, 50% 43.11%, 89.9% 71.04%, 100% 63.96%);\r\n}\r\n\r\nbutton.pce-regex {\r\n\tdisplay: flex;\r\n}\r\n\r\n.pce-regex span {\r\n\tdisplay: flex;\r\n\talign-items: flex-end;\r\n}\r\n\r\n.pce-regex span::before {\r\n\tcontent: \"\";\r\n\twidth: 0.3em;\r\n\theight: 0.3em;\r\n\tbackground: currentColor;\r\n\tmargin: 0 0 0.2em 0.1em;\r\n}\r\n\r\n.pce-regex span::after {\r\n\tcontent: \"*\";\r\n\tline-height: 0;\r\n\tfont-size: 140%;\r\n\tmargin-bottom: 0.5em;\r\n}\r\n\r\nbutton.pce-in-selection {\r\n\tdisplay: grid;\r\n\tplace-items: center;\r\n}\r\n\r\nbutton.pce-whole {\r\n\tposition: relative;\r\n}\r\n\r\n.pce-whole::after {\r\n\tcontent: \"\";\r\n\tposition: absolute;\r\n\tbottom: 0.31em;\r\n\tright: 0.27em;\r\n\tleft: 0.27em;\r\n\theight: 0.25em;\r\n\tclip-path: inset(1px -1px -1px);\r\n\tbox-shadow: 0 0 0 1px;\r\n}\r\n\r\n.pce-in-selection::before {\r\n\tcontent: \"\";\r\n\theight: 80%;\r\n\twidth: 90%;\r\n\tbackground: currentColor;\r\n\tclip-path: polygon(\r\n\t\t0 16%,\r\n\t\t80% 16%,\r\n\t\t80% 24%,\r\n\t\t0 24%,\r\n\t\t0 46%,\r\n\t\t100% 46%,\r\n\t\t100% 54%,\r\n\t\t0 54%,\r\n\t\t0 76%,\r\n\t\t60% 76%,\r\n\t\t60% 84%,\r\n\t\t0 84%\r\n\t);\r\n}\r\n\r\n.pce-matches span {\r\n\tbackground: var(--pce-search-match);\r\n}\r\n\r\n.pce-matches :empty {\r\n\tpadding: 0 2px;\r\n\tmargin: 0 -2px;\r\n}\r\n",".pce-invisibles ::before,\n.token.tab::before,\n.token.space::before {\n\tcontent: \"·\";\n\tposition: absolute;\n\tcolor: var(--pce-invisibles, #e3e4e229);\n}\n\n.pce-tab::before,\n.token.tab::before {\n\tcontent: \"→\";\n}\n\n/*\n * Clip paths and mask images didn't work properly on inline elements in Safari or Chrome\n * so I scrapped it for pseudo-elements with unicode characters instead.\n */\n\n/* .pce-invisibles span {\n\t--mask: 50% no-repeat\n\turl('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"8\" cy=\"8\" r=\"2.4\"/></svg>');\n\t-webkit-mask: var(--mask);\n\tmask: var(--mask);\n\tclip-path: circle(0.15ch);\n\tbackground: var(--pce-invisibles, #e3e4e229);\n\tdisplay: inline-block;\n}\n\nspan.pce-tab {\n\t--mask: 0 50% / 1em 1em no-repeat\n\t\turl('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m0 7.4h7.1l-1.45-1.45.7-.7 2.45 2.45 0 .6-2.45 2.45-.7-.7 1.45-1.45h-7.4z\"/></svg>');\n\tclip-path: polygon(\n\t\t0 calc(50% - 0.038em),\n\t\t0.444em calc(50% - 0.038em),\n\t\t0.353em calc(50% - 0.128em),\n\t\t0.397em calc(50% - 0.172em),\n\t\t0.55em calc(50% - 0.019em),\n\t\t0.55em calc(50% + 0.019em),\n\t\t0.397em calc(50% + 0.172em),\n\t\t0.353em calc(50% + 0.128em),\n\t\t0.444em calc(50% + 0.038em),\n\t\t0 calc(50% + 0.038em)\n\t);\n} */\n","import \"../languages/index.js\"\nimport { matchBrackets } from \"../extensions/matchBrackets/index.js\"\nimport { highlightBracketPairs } from \"../extensions/matchBrackets/highlight.js\"\nimport { indentGuides } from \"../extensions/guides.js\"\nimport { cursorPosition } from \"../extensions/cursor/index.js\"\nimport { defaultCommands, editHistory } from \"../extensions/commands/index.js\"\nimport { EditorExtension } from \"../index.js\"\nimport {\n\tsearchWidget,\n\tshowInvisibles,\n\thighlightSelectionMatches,\n} from \"../extensions/search/index.js\"\nimport { matchTags } from \"../extensions/matchTags.js\"\nimport searchStyle from \"../extensions/search/search.css?inline\"\nimport invisibles from \"../extensions/search/invisibles.css?inline\"\n\nexport const basic = (): EditorExtension[] => [\n\tdefaultCommands(),\n\tindentGuides(),\n\tmatchBrackets(),\n\thighlightBracketPairs(),\n\tcursorPosition(),\n\thighlightSelectionMatches(),\n\tsearchWidget(),\n\tshowInvisibles(),\n\tmatchTags(),\n\teditHistory(),\n]\n\nexport const style = searchStyle + invisibles\n"],"mappings":";;;;;;;;;;;;;;;;AEgBA,IAAa,cAAiC;CAC7C,gBAAgB;CAChB,aAAa;CACb,cAAc;CACd,sBAAsB;CACtB,eAAe;CACf,0BAA0B;CAC1B,aAAa;CACb,eAAe;CACf,UAAU;CACV,YAAY;AACb;AAEA,IAAa,QAAQ,iBAAc"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as doc, r as createTemplate, t as addListener } from "../core-
|
|
2
|
-
import { C as voidlessLangs, S as voidTags, t as addOverlay, v as getPosition } from "../utils-
|
|
1
|
+
import { i as doc, r as createTemplate, t as addListener } from "../core-fngiDtt5.js";
|
|
2
|
+
import { C as voidlessLangs, S as voidTags, t as addOverlay, v as getPosition } from "../utils-umP5W0OV.js";
|
|
3
3
|
import { t as testBracket } from "../bracket-CStGDfC7.js";
|
|
4
4
|
import { createCopyButton } from "../extensions/copyButton/index.js";
|
|
5
5
|
//#region src/client/hover.ts
|
package/dist/client/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as languages, i as highlightTokens, l as tokenizeText } from "../core-
|
|
2
|
-
import { c as numLines, l as preventDefault, t as addListener, u as setSelectionChange } from "../core-
|
|
1
|
+
import { a as languages, i as highlightTokens, l as tokenizeText } from "../core-DpDyJ-7r.js";
|
|
2
|
+
import { c as numLines, l as preventDefault, t as addListener, u as setSelectionChange } from "../core-fngiDtt5.js";
|
|
3
3
|
//#region src/client/index.ts
|
|
4
4
|
/**
|
|
5
5
|
* Mounts all editors rendered by {@link renderEditor} under the specified root. Editors
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { l as preventDefault, s as languageMap } from "./core-
|
|
2
|
-
import { _ as getLineStart, a as getLineBefore, c as insertText, f as prevSelection, g as getLineEnd, h as addTextareaListener, i as getLanguage, m as setSelection, o as getLines, p as regexEscape, s as getModifierCode, u as isMac, y as getStyleValue } from "./utils-
|
|
3
|
-
import { c as normalizeKey, s as mod, t as addEditorHotkey } from "./utils-
|
|
1
|
+
import { l as preventDefault, s as languageMap } from "./core-fngiDtt5.js";
|
|
2
|
+
import { _ as getLineStart, a as getLineBefore, c as insertText, f as prevSelection, g as getLineEnd, h as addTextareaListener, i as getLanguage, m as setSelection, o as getLines, p as regexEscape, s as getModifierCode, u as isMac, y as getStyleValue } from "./utils-umP5W0OV.js";
|
|
3
|
+
import { c as normalizeKey, s as mod, t as addEditorHotkey } from "./utils-DSQ-ulqQ.js";
|
|
4
4
|
//#region src/extensions/commands/commands.ts
|
|
5
5
|
var ignoreTab = false;
|
|
6
6
|
/**
|
|
@@ -796,4 +796,4 @@ var editHistory = (historyLimit = 999) => {
|
|
|
796
796
|
//#endregion
|
|
797
797
|
export { setIgnoreTab as _, formatHotkey as a, copySelectedLines as c, ignoreTab as d, indentSelectedLines as f, scrollByOneLine as g, moveSelectedLines as h, defaultKeymapLabels as i, defaultKeymap as l, insertTab as m, editorCommands as n, searchShortcutLabels as o, insertLineAndIndent as p, autoCompleteShortcutLabels as r, defaultCommands as s, editHistory as t, deleteSelectedLines as u, toggleComment as v };
|
|
798
798
|
|
|
799
|
-
//# sourceMappingURL=commands-
|
|
799
|
+
//# sourceMappingURL=commands-HRCav5fj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-DPS_Se7J.js","names":[],"sources":["../src/extensions/commands/commands.ts","../src/extensions/commands/deprecated.ts","../src/extensions/commands/format.ts","../src/extensions/commands/index.ts"],"sourcesContent":["import { Language, languageMap } from \"../..\"\nimport { PrismEditor } from \"../../types.js\"\nimport {\n\tgetLanguage,\n\tgetLineBefore,\n\tgetLines,\n\tinsertText,\n\tisMac,\n\tregexEscape,\n} from \"../../utils/index.js\"\nimport { getLineEnd, getLineStart, getStyleValue } from \"../../utils/local\"\nimport { defaultCommands } from \"./deprecated.js\"\nimport { EditorHotkey } from \"./types.js\"\n\nlet ignoreTab = false\n\n/**\n * Sets whether editors should ignore tab or use it for indentation. Users can toggle\n * this using `Ctrl` + `M` / `Ctrl` + `Shift` + `M` (Mac) when the {@link defaultKeymap}\n * or {@link defaultCommands} extension is used.\n */\nconst setIgnoreTab = (newState: boolean) => (ignoreTab = newState)\nconst whitespaceEnd = (str: string) => str.search(/\\S|$/)\n\nconst getIndent = ({ options: { insertSpaces = true, tabSize } }: PrismEditor) =>\n\t[insertSpaces ? \" \" : \"\\t\", insertSpaces ? tabSize || 2 : 1] as const\n\nconst scroll = (editor: PrismEditor) =>\n\t!editor.options.readOnly && !editor.extensions.cursor?.scrollIntoView()\n\n/**\n * Inserts slightly altered lines while keeping the same selection.\n * Used when toggling comments and indenting.\n */\nconst insertLines = (\n\teditor: PrismEditor,\n\told: string[],\n\tnewL: string[],\n\tstart: number,\n\tend: number,\n\tselectionStart: number,\n\tselectionEnd: number,\n) => {\n\tlet newLines = newL.join(\"\\n\")\n\n\tif (newLines == old.join(\"\\n\")) return\n\n\tconst last = old.length - 1\n\tconst lastLine = newL[last]\n\tconst oldLastLine = old[last]\n\tconst lastDiff = oldLastLine.length - lastLine.length\n\tconst firstDiff = newL[0].length - old[0].length\n\tconst firstInsersion = start + whitespaceEnd((firstDiff < 0 ? newL : old)[0])\n\tconst lastInsersion =\n\t\tend - oldLastLine.length + whitespaceEnd(lastDiff > 0 ? lastLine : oldLastLine)\n\tconst offset = start - end + newLines.length + lastDiff\n\tconst newCursorStart =\n\t\tfirstInsersion > selectionStart\n\t\t\t? selectionStart\n\t\t\t: Math.max(firstInsersion, selectionStart + firstDiff)\n\tconst newCursorEnd = selectionEnd + start - end + newLines.length\n\n\tinsertText(\n\t\teditor,\n\t\tnewLines,\n\t\tstart,\n\t\tend,\n\t\tnewCursorStart,\n\t\tselectionEnd < lastInsersion\n\t\t\t? newCursorEnd + lastDiff\n\t\t\t: Math.max(lastInsersion + offset, newCursorEnd),\n\t)\n}\n\n/**\n * Command that indents or outdents all user-selected lines in the editor unless the\n * editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param less By default lines are indented. By passing `true`, lines are outdented\n * instead.\n */\nconst indentSelectedLines = (editor: PrismEditor, less?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst [lines, start1, end1] = getLines(editor.value, start, end)\n\tconst [indentChar, tabSize] = getIndent(editor)\n\n\tinsertLines(\n\t\teditor,\n\t\tlines,\n\t\tlines.map(\n\t\t\tless\n\t\t\t\t? str => str.slice(whitespaceEnd(str) ? tabSize - (whitespaceEnd(str) % tabSize) : 0)\n\t\t\t\t: str => str && indentChar.repeat(tabSize - (whitespaceEnd(str) % tabSize)) + str,\n\t\t),\n\t\tstart1,\n\t\tend1,\n\t\tstart,\n\t\tend,\n\t)\n\n\treturn scroll(editor)\n}\n\n/**\n * Command that inserts spaces if `insertSpaces` isn't `false` or a tab character\n * otherwise at the specified position unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param pos Position to insert the tab.\n */\nconst insertTab = (editor: PrismEditor, pos: number) => {\n\tconst [indentChar, tabSize] = getIndent(editor)\n\n\tinsertText(\n\t\teditor,\n\t\tindentChar.repeat(tabSize - ((pos - getLineStart(editor.value, pos)) % tabSize)),\n\t)\n\n\treturn scroll(editor)\n}\n\n/**\n * Command that inserts a new line replacing the current selection unless the editor is\n * `readOnly`. It uses the `autoIndent` behavior of the current language to determine\n * whether to preserve the indentation or increase it.\n * @param editor Editor to execute the command on.\n * @param eol If `true`, the new line is inserted at the end of the line instead of at\n * the cursor's position.\n */\nconst insertLineAndIndent = (editor: PrismEditor, eol?: boolean) => {\n\tlet selection = editor.getSelection()\n\tlet value = editor.value\n\n\tif (eol) selection[0] = selection[1] = getLineEnd(value, selection[1])\n\n\tconst [indentChar, tabSize] = getIndent(editor)\n\tconst [start, end] = selection\n\tconst autoIndent = languageMap[getLanguage(editor, start)]?.autoIndent\n\tconst indenationCount = Math.floor(whitespaceEnd(getLineBefore(value, start)) / tabSize) * tabSize\n\tconst extraIndent = autoIndent?.[0]?.(selection, value, editor) ? tabSize : 0\n\tconst extraLine = autoIndent?.[1]?.(selection, value, editor)\n\tconst newText =\n\t\t\"\\n\" +\n\t\tindentChar.repeat(indenationCount + extraIndent) +\n\t\t(extraLine ? \"\\n\" + indentChar.repeat(indenationCount) : \"\")\n\n\tif (newText[1] || value[end]) {\n\t\tinsertText(editor, newText, start, end, start + indenationCount + extraIndent + 1)\n\t\treturn scroll(editor)\n\t}\n}\n\n/**\n * Command that moves all selected lines unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param up Whether to move the lines up. Defaults to `false`.\n */\nconst moveSelectedLines = (editor: PrismEditor, up?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst value = editor.value\n\tconst newStart = up ? getLineStart(value, start) - 1 : start\n\tconst newEnd = up ? end : value.indexOf(\"\\n\", end) + 1\n\n\tif (newStart > -1 && newEnd > 0) {\n\t\tconst [lines, start1, end1] = getLines(value, newStart, newEnd)\n\t\tconst line = lines[up ? \"shift\" : \"pop\"]()!\n\t\tconst offset = (line.length + 1) * (up ? -1 : 1)\n\n\t\tlines[up ? \"push\" : \"unshift\"](line)\n\t\tinsertText(editor, lines.join(\"\\n\"), start1, end1, start + offset, end + offset)\n\t}\n\n\treturn scroll(editor)\n}\n\n/**\n * Command that copies all selected lines unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param up Whether or not the selection should remain on the top copy. Defaults to\n * `false`.\n */\nconst copySelectedLines = (editor: PrismEditor, up?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst value = editor.value\n\tconst [lines, start1, end1] = getLines(value, start, end)\n\tconst str = lines.join(\"\\n\")\n\tconst offset = up ? 0 : str.length + 1\n\n\tinsertText(editor, str + \"\\n\" + str, start1, end1, start + offset, end + offset)\n\treturn scroll(editor)\n}\n\n/**\n * Command that scrolls the editor by one line.\n * @param editor Editor to execute the command on.\n * @param up Whether to scroll up. Defaults to `false`.\n */\nconst scrollByOneLine = (editor: PrismEditor, up?: boolean) => {\n\teditor.container.scrollBy(0, getStyleValue(editor.container, \"lineHeight\") * (up ? -1 : 1))\n\treturn true\n}\n\n/**\n * Command that deletes all selected lines unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n */\nconst deleteSelectedLines = (editor: PrismEditor) => {\n\tconst [start, end, dir] = editor.getSelection()\n\tconst value = editor.value\n\tconst [lines, start1, end1] = getLines(value, start, end)\n\tconst column = dir > \"f\" ? end - end1 + lines.pop()!.length : start - start1\n\tconst newLineLen = getLineEnd(value, end1 + 1) - end1 - 1\n\n\tinsertText(\n\t\teditor,\n\t\t\"\",\n\t\tstart1 - <any>!!start1,\n\t\tend1 + <any>!start1,\n\t\tstart1 + Math.min(column, newLineLen),\n\t)\n\treturn scroll(editor)\n}\n\n/**\n * Command that toggles the comment around the current selection unless the editor is\n * `readOnly`. Comment syntax is determined using the current {@link Language}. It will\n * use the `getComments()` method if present and the `comments` property otherwise.\n * @param editor Editor to execute the command on.\n * @param isBlock Whether or not to toggle the comment using block syntax.\n */\nconst toggleComment = (editor: PrismEditor, isBlock?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst value = editor.value\n\tconst position = isBlock ? start : getLineStart(value, start)\n\tconst lang = languageMap[getLanguage(editor, position)] || {}\n\tconst { line, block } = lang.getComments?.(editor, position, value) || lang.comments || {}\n\tconst [lines, start1, end1] = getLines(value, start, end)\n\tconst last = lines.length - 1\n\n\tif (isBlock) {\n\t\tif (block) {\n\t\t\tconst [open, close] = block\n\t\t\tconst text = value.slice(start, end)\n\t\t\tconst pos = value.slice(0, start).search(regexEscape(open) + \" ?$\")\n\n\t\t\tif (pos + 1 && RegExp(\"^ ?\" + regexEscape(close)).test(value.slice(end))) {\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\ttext,\n\t\t\t\t\tpos,\n\t\t\t\t\tend + <any>(value[end] == \" \") + close.length,\n\t\t\t\t\tpos,\n\t\t\t\t\tpos + end - start,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\t`${open} ${text} ${close}`,\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\tstart + open.length + 1,\n\t\t\t\t\tend + open.length + 1,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (line) {\n\t\t\tconst escaped = regexEscape(line)\n\t\t\tconst regex = RegExp(`^\\\\s*(${escaped} ?|$)`)\n\t\t\tconst regex2 = RegExp(escaped + \" ?\")\n\t\t\tconst allWhiteSpace = !/\\S/.test(value.slice(start1, end1))\n\t\t\tconst newLines = lines.map(\n\t\t\t\t!allWhiteSpace && lines.every(line => regex.test(line))\n\t\t\t\t\t? str => str.replace(regex2, \"\")\n\t\t\t\t\t: str => (allWhiteSpace || /\\S/.test(str) ? str.replace(/(?!\\s)/, line + \" \") : str),\n\t\t\t)\n\t\t\tinsertLines(editor, lines, newLines, start1, end1, start, end)\n\t\t} else if (block) {\n\t\t\tconst [open, close] = block\n\t\t\tconst first = lines[0]\n\t\t\tconst insertionPoint = whitespaceEnd(first)\n\t\t\tconst hasComment = first.startsWith(open, insertionPoint) && lines[last].endsWith(close)\n\n\t\t\tlines[0] = first.replace(\n\t\t\t\thasComment ? RegExp(regexEscape(open) + \" ?\") : /(?!\\s)/,\n\t\t\t\thasComment ? \"\" : open + \" \",\n\t\t\t)\n\t\t\tlet diff = lines[0].length - first.length\n\t\t\tlines[last] = hasComment\n\t\t\t\t? lines[last].replace(RegExp(` ?${regexEscape(close)}$`), \"\")\n\t\t\t\t: lines[last] + \" \" + close\n\n\t\t\tlet newText = lines.join(\"\\n\")\n\t\t\tlet firstInsersion = insertionPoint + start1\n\t\t\tlet newStart = firstInsersion > start ? start : Math.max(start + diff, firstInsersion)\n\t\t\tlet newEnd =\n\t\t\t\tfirstInsersion > end - <any>(start != end)\n\t\t\t\t\t? end\n\t\t\t\t\t: Math.min(Math.max(firstInsersion, end + diff), start1 + newText.length)\n\t\t\tinsertText(editor, newText, start1, end1, newStart, Math.max(newStart, newEnd))\n\t\t}\n\t}\n\n\treturn block || (line && !isBlock) ? scroll(editor) : false\n}\n\n/**\n * Default keymapping that includes the following commands:\n *\n * - `Alt` + `ArrowUp`: Move line up\n * - `Alt` + `ArrowDown`: Move line down\n * - `Ctrl` + `ArrowUp`: Scroll one line up (Windows/Linux)\n * - `Ctrl` + `ArrowDown`: Scroll one line down (Windows/Linux)\n * - `Ctrl` + `PageUp`: Scroll one line up (Mac)\n * - `Ctrl` + `PageDown`: Scroll one line down (Mac)\n * - `Shift` + `Alt` + `ArrowUp`: Copy line up\n * - `Shift` + `Alt` + `ArrowDown`: Copy line down\n * - `Enter`: Insert line and indent\n * - `Shift` + `Enter`: Insert line and indent\n * - `Mod` + `Enter`: Insert blank line\n * - `Mod` + `]`: Indent line\n * - `Mod` + `[`: Outdent line\n * - `Tab`: Indent line (Tab capture enabled)\n * - `Shift` + `Tab`: Outdent line (Tab capture enabled)\n * - `Shift` + `Mod` + `K`: Delete line\n * - `Mod` + `/`: Toggle comment\n * - `Shift` + `Alt` + `A`: Toggle block comment\n * - `Ctrl` + `M`: Toggle tab capturing (Windows/Linux)\n * - `Ctrl` + `Shift` + `M`: Toggle tab capturing (Mac)\n *\n * Here, `Mod` refers to `Cmd` on Mac and `Ctrl` otherwise.\n */\nconst defaultKeymap: Record<string, EditorHotkey> = {\n\tTab(editor) {\n\t\tif (!ignoreTab) {\n\t\t\tconst [start, end] = editor.getSelection()\n\t\t\treturn start == end ? insertTab(editor, start) : indentSelectedLines(editor)\n\t\t}\n\t},\n\t\"8+Tab\": editor => !ignoreTab && indentSelectedLines(editor, true),\n\t\"1+ArrowDown\": editor => moveSelectedLines(editor),\n\t\"1+ArrowUp\": editor => moveSelectedLines(editor, true),\n\t\"9+ArrowDown\": editor => copySelectedLines(editor),\n\t\"9+ArrowUp\": editor => copySelectedLines(editor, true),\n\tEnter: editor => insertLineAndIndent(editor),\n\t\"8+Enter\": editor => insertLineAndIndent(editor),\n\t\"Mod+Enter\": editor => insertLineAndIndent(editor, true),\n\t\"Mod+]\": editor => indentSelectedLines(editor),\n\t\"Mod+[\": editor => indentSelectedLines(editor, true),\n\t\"8+Mod+k\": deleteSelectedLines,\n\t\"Mod+/\": editor => toggleComment(editor),\n\t\"9+a\": editor => toggleComment(editor, true),\n\t[isMac ? \"10+m\" : \"2+m\"]: () => ((ignoreTab = !ignoreTab), true),\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Down`]: editor => scrollByOneLine(editor),\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Up`]: editor => scrollByOneLine(editor, true),\n}\n\nexport {\n\twhitespaceEnd,\n\tscroll,\n\tindentSelectedLines,\n\tinsertTab,\n\tinsertLineAndIndent,\n\tmoveSelectedLines,\n\tcopySelectedLines,\n\tscrollByOneLine,\n\tdeleteSelectedLines,\n\ttoggleComment,\n\tsetIgnoreTab,\n\tdefaultKeymap,\n\tignoreTab,\n}\n","import { InputSelection, BasicExtension } from \"../../index.js\"\nimport { preventDefault, languageMap } from \"../../core.js\"\nimport {\n\tgetLanguage,\n\tinsertText,\n\tgetLineBefore,\n\tgetLines,\n\tregexEscape,\n\tgetModifierCode,\n\tsetSelection,\n\tisMac,\n} from \"../../utils/index.js\"\nimport { addTextareaListener, getLineEnd, getLineStart, getStyleValue } from \"../../utils/local.js\"\nimport { mod } from \"./utils.js\"\nimport { ignoreTab, setIgnoreTab, whitespaceEnd } from \"./commands.js\"\nimport { editorCommands } from \"./index.js\"\n\n/**\n * Extension that will add automatic indentation and closing of brackets, quotes, and\n * tags along with the commands presented later.\n *\n * ## Commands\n *\n * Here, `Mod` refers to `Cmd` on Mac and `Ctrl` otherwise.\n *\n * - `Alt` + `ArrowUp`: Move line up\n * - `Alt` + `ArrowDown`: Move line down\n * - `Ctrl` + `ArrowUp`: Scroll one line up (Windows/Linux only)\n * - `Ctrl` + `ArrowDown`: Scroll one line down (Windows/Linux only)\n * - `Shift` + `Alt` + `ArrowUp`: Copy line up\n * - `Shift` + `Alt` + `ArrowDown`: Copy line down\n * - `Mod` + `Enter`: Insert blank line\n * - `Mod` + `]`: Indent line\n * - `Mod` + `[`: Outdent line\n * - `Tab`: Indent line (Tab capture enabled)\n * - `Shift` + `Tab`: Outdent line (Tab capture enabled)\n * - `Shift` + `Mod` + `K`: Delete line\n * - `Mod` + `/`: Toggle comment\n * - `Shift` + `Alt` + `A`: Toggle block comment\n * - `Ctrl` + `M`: Toggle tab capturing (Windows/Linux)\n * - `Ctrl` + `Shift` + `M`: Toggle tab capturing (Mac)\n *\n * @param selfClosePairs Pairs of self-closing brackets and quotes.\n * Must be an array of strings with 2 characters each.\n * Defaults to `['\"\"', \"''\", '``', '()', '[]', '{}']`.\n * @param selfCloseRegex Regex controlling whether or not a bracket/quote should\n * automatically close based on the character before and after the cursor.\n * Defaults to ``/([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s``.\n *\n * @deprecated Consider using {@link editorCommands} instead. This will be removed in next\n * major release.\n */\nconst defaultCommands = (\n\tselfClosePairs = ['\"\"', \"''\", \"``\", \"()\", \"[]\", \"{}\"],\n\tselfCloseRegex = /([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s,\n): BasicExtension => {\n\treturn (editor, options) => {\n\t\tlet prevCopy: string\n\t\tconst { keyCommandMap, inputCommandMap, getSelection, container } = editor\n\n\t\tconst clipboard = navigator.clipboard\n\n\t\tconst getIndent = ({ insertSpaces = true, tabSize } = options) =>\n\t\t\t[insertSpaces ? \" \" : \"\\t\", insertSpaces ? tabSize || 2 : 1] as const\n\n\t\tconst scroll = () => !options.readOnly && !editor.extensions.cursor?.scrollIntoView()\n\n\t\t/**\n\t\t * Automatically closes quotes and brackets if text is selected,\n\t\t * or if the character before and after the cursor matches a regex\n\t\t * @param wrapOnly If true, the character will only be closed if text is selected.\n\t\t */\n\t\tconst selfClose = (\n\t\t\t[start, end]: InputSelection,\n\t\t\t[open, close]: string,\n\t\t\tvalue: string,\n\t\t\twrapOnly?: boolean,\n\t\t) =>\n\t\t\t(start < end ||\n\t\t\t\t(!wrapOnly && selfCloseRegex.test((value[end - 1] || \" \") + open + (value[end] || \" \")))) &&\n\t\t\t!insertText(editor, open + value.slice(start, end) + close, null, null, start + 1, end + 1)!\n\n\t\tconst skipIfEqual = ([start, end]: InputSelection, char: string, value: string) =>\n\t\t\tstart == end && value[end] == char && !setSelection(editor, start + 1)!\n\n\t\t/**\n\t\t * Inserts slightly altered lines while keeping the same selection.\n\t\t * Used when toggling comments and indenting.\n\t\t */\n\t\tconst insertLines = (\n\t\t\told: string[],\n\t\t\tnewL: string[],\n\t\t\tstart: number,\n\t\t\tend: number,\n\t\t\tselectionStart: number,\n\t\t\tselectionEnd: number,\n\t\t) => {\n\t\t\tlet newLines = newL.join(\"\\n\")\n\t\t\tif (newLines != old.join(\"\\n\")) {\n\t\t\t\tconst last = old.length - 1\n\t\t\t\tconst lastLine = newL[last]\n\t\t\t\tconst oldLastLine = old[last]\n\t\t\t\tconst lastDiff = oldLastLine.length - lastLine.length\n\t\t\t\tconst firstDiff = newL[0].length - old[0].length\n\t\t\t\tconst firstInsersion = start + whitespaceEnd((firstDiff < 0 ? newL : old)[0])\n\t\t\t\tconst lastInsersion =\n\t\t\t\t\tend - oldLastLine.length + whitespaceEnd(lastDiff > 0 ? lastLine : oldLastLine)\n\t\t\t\tconst offset = start - end + newLines.length + lastDiff\n\t\t\t\tconst newCursorStart =\n\t\t\t\t\tfirstInsersion > selectionStart\n\t\t\t\t\t\t? selectionStart\n\t\t\t\t\t\t: Math.max(firstInsersion, selectionStart + firstDiff)\n\t\t\t\tconst newCursorEnd = selectionEnd + start - end + newLines.length\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\tnewLines,\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\tnewCursorStart,\n\t\t\t\t\tselectionEnd < lastInsersion\n\t\t\t\t\t\t? newCursorEnd + lastDiff\n\t\t\t\t\t\t: Math.max(lastInsersion + offset, newCursorEnd),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tconst indent = (\n\t\t\toutdent: boolean,\n\t\t\tlines: string[],\n\t\t\tstart1: number,\n\t\t\tend1: number,\n\t\t\tstart: number,\n\t\t\tend: number,\n\t\t\tindentChar: string,\n\t\t\ttabSize: number,\n\t\t) => {\n\t\t\tinsertLines(\n\t\t\t\tlines,\n\t\t\t\tlines.map(\n\t\t\t\t\toutdent\n\t\t\t\t\t\t? str => str.slice(whitespaceEnd(str) ? tabSize - (whitespaceEnd(str) % tabSize) : 0)\n\t\t\t\t\t\t: str => str && indentChar.repeat(tabSize - (whitespaceEnd(str) % tabSize)) + str,\n\t\t\t\t),\n\t\t\t\tstart1,\n\t\t\t\tend1,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t)\n\t\t}\n\n\t\tinputCommandMap[\"<\"] = (_e, selection, value) => selfClose(selection, \"<>\", value, true)\n\n\t\tselfClosePairs.forEach(([open, close]) => {\n\t\t\tconst isQuote = open == close\n\t\t\tinputCommandMap[open] = (_e, selection, value) =>\n\t\t\t\t((isQuote && skipIfEqual(selection, close, value)) ||\n\t\t\t\t\tselfClose(selection, open + close, value)) &&\n\t\t\t\tscroll()\n\t\t\tif (!isQuote)\n\t\t\t\tinputCommandMap[close] = (_e, selection, value) =>\n\t\t\t\t\tskipIfEqual(selection, close, value) && scroll()\n\t\t})\n\n\t\tinputCommandMap[\">\"] = (e, selection, value) => {\n\t\t\tconst closingTag = languageMap[getLanguage(editor)]?.autoCloseTags?.(selection, value, editor)\n\t\t\tif (closingTag) {\n\t\t\t\tinsertText(editor, \">\" + closingTag, null, null, selection[0] + 1)\n\t\t\t\tpreventDefault(e)\n\t\t\t}\n\t\t}\n\n\t\tkeyCommandMap.Tab = (e, [start, end], value) => {\n\t\t\tif (ignoreTab || options.readOnly || getModifierCode(e) & 7) return\n\t\t\tconst [indentChar, tabSize] = getIndent()\n\t\t\tconst shiftKey = e.shiftKey\n\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\tif (start < end || shiftKey) {\n\t\t\t\tindent(shiftKey, lines, start1, end1, start, end, indentChar, tabSize)\n\t\t\t} else insertText(editor, indentChar.repeat(tabSize - ((start - start1) % tabSize)))\n\t\t\treturn scroll()\n\t\t}\n\n\t\tkeyCommandMap.Enter = (e, selection, value) => {\n\t\t\tconst code = getModifierCode(e) & 7\n\t\t\tif (!code || code == mod) {\n\t\t\t\tif (code) selection[0] = selection[1] = getLines(value, selection[1])[2]\n\t\t\t\tconst [indentChar, tabSize] = getIndent()\n\t\t\t\tconst [start, end] = selection\n\t\t\t\tconst autoIndent = languageMap[getLanguage(editor, start)]?.autoIndent\n\t\t\t\tconst indenationCount =\n\t\t\t\t\tMath.floor(whitespaceEnd(getLineBefore(value, start)) / tabSize) * tabSize\n\t\t\t\tconst extraIndent = autoIndent?.[0]?.(selection, value, editor) ? tabSize : 0\n\t\t\t\tconst extraLine = autoIndent?.[1]?.(selection, value, editor)\n\t\t\t\tconst newText =\n\t\t\t\t\t\"\\n\" +\n\t\t\t\t\tindentChar.repeat(indenationCount + extraIndent) +\n\t\t\t\t\t(extraLine ? \"\\n\" + indentChar.repeat(indenationCount) : \"\")\n\n\t\t\t\tif (newText[1] || value[end]) {\n\t\t\t\t\tinsertText(editor, newText, start, end, start + indenationCount + extraIndent + 1)\n\t\t\t\t\treturn scroll()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tkeyCommandMap.Backspace = (_e, [start, end], value) => {\n\t\t\tif (start == end) {\n\t\t\t\tconst line = getLineBefore(value, start)\n\t\t\t\tconst tabSize = options.tabSize || 2\n\t\t\t\tconst isPair = selfClosePairs.includes(value.slice(start - 1, start + 1))\n\t\t\t\tconst indenationCount = /[^ ]/.test(line) ? 0 : ((line.length - 1) % tabSize) + 1\n\n\t\t\t\tif (isPair || indenationCount > 1) {\n\t\t\t\t\tinsertText(editor, \"\", start - (isPair ? 1 : indenationCount), start + <any>isPair)\n\t\t\t\t\treturn scroll()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tkeyCommandMap[i ? \"ArrowDown\" : \"ArrowUp\"] = (e, [start, end], value) => {\n\t\t\t\tconst code = getModifierCode(e)\n\n\t\t\t\tif (code == 1) {\n\t\t\t\t\t// Moving lines\n\t\t\t\t\tconst newStart = i ? start : getLineStart(value, start) - 1\n\t\t\t\t\tconst newEnd = i ? value.indexOf(\"\\n\", end) + 1 : end\n\t\t\t\t\tif (newStart > -1 && newEnd > 0) {\n\t\t\t\t\t\tconst [lines, start1, end1] = getLines(value, newStart, newEnd)\n\t\t\t\t\t\tconst line = lines[i ? \"pop\" : \"shift\"]()!\n\t\t\t\t\t\tconst offset = (line.length + 1) * (i ? 1 : -1)\n\n\t\t\t\t\t\tlines[i ? \"unshift\" : \"push\"](line)\n\t\t\t\t\t\tinsertText(editor, lines.join(\"\\n\"), start1, end1, start + offset, end + offset)\n\t\t\t\t\t}\n\t\t\t\t\treturn scroll()\n\t\t\t\t} else if (code == 9) {\n\t\t\t\t\t// Copying lines\n\t\t\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\t\t\tconst str = lines.join(\"\\n\")\n\t\t\t\t\tconst offset = i ? str.length + 1 : 0\n\t\t\t\t\tinsertText(editor, str + \"\\n\" + str, start1, end1, start + offset, end + offset)\n\t\t\t\t\treturn scroll()\n\t\t\t\t} else if (code == 2 && !isMac) {\n\t\t\t\t\tcontainer.scrollBy(0, getStyleValue(container, \"lineHeight\") * (i ? 1 : -1))\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\taddTextareaListener(editor, \"keydown\", e => {\n\t\t\tconst code = getModifierCode(e)\n\t\t\tconst keyCode = e.keyCode\n\t\t\tconst [start, end, dir] = getSelection()\n\n\t\t\tif (code == mod && (keyCode == 221 || keyCode == 219)) {\n\t\t\t\tindent(keyCode == 219, ...getLines(editor.value, start, end), start, end, ...getIndent())\n\t\t\t\tscroll()\n\t\t\t\tpreventDefault(e)\n\t\t\t} else if (code == (isMac ? 0b1010 : 0b0010) && keyCode == 77) {\n\t\t\t\tsetIgnoreTab(!ignoreTab)\n\t\t\t\tpreventDefault(e)\n\t\t\t} else if ((keyCode == 191 && code == mod) || (keyCode == 65 && code == 9)) {\n\t\t\t\tconst value = editor.value\n\t\t\t\tconst isBlock = code == 9\n\t\t\t\tconst position = isBlock ? start : getLineStart(value, start)\n\t\t\t\tconst language = languageMap[getLanguage(editor, position)] || {}\n\t\t\t\tconst { line, block } =\n\t\t\t\t\tlanguage.getComments?.(editor, position, value) || language.comments || {}\n\t\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\t\tconst last = lines.length - 1\n\n\t\t\t\tif (isBlock) {\n\t\t\t\t\tif (block) {\n\t\t\t\t\t\tconst [open, close] = block\n\t\t\t\t\t\tconst text = value.slice(start, end)\n\t\t\t\t\t\tconst pos = value.slice(0, start).search(regexEscape(open) + \" ?$\")\n\n\t\t\t\t\t\tif (pos + 1 && RegExp(\"^ ?\" + regexEscape(close)).test(value.slice(end)))\n\t\t\t\t\t\t\tinsertText(\n\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\tend + <any>(value[end] == \" \") + close.length,\n\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\tpos + end - start,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tinsertText(\n\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\t`${open} ${text} ${close}`,\n\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t\tstart + open.length + 1,\n\t\t\t\t\t\t\t\tend + open.length + 1,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tscroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (line) {\n\t\t\t\t\t\tconst escaped = regexEscape(line)\n\t\t\t\t\t\tconst regex = RegExp(`^\\\\s*(${escaped} ?|$)`)\n\t\t\t\t\t\tconst regex2 = RegExp(escaped + \" ?\")\n\t\t\t\t\t\tconst allWhiteSpace = !/\\S/.test(value.slice(start1, end1))\n\t\t\t\t\t\tconst newLines = lines.map(\n\t\t\t\t\t\t\t!allWhiteSpace && lines.every(line => regex.test(line))\n\t\t\t\t\t\t\t\t? str => str.replace(regex2, \"\")\n\t\t\t\t\t\t\t\t: str =>\n\t\t\t\t\t\t\t\t\t\tallWhiteSpace || /\\S/.test(str) ? str.replace(/(?!\\s)/, line + \" \") : str,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tinsertLines(lines, newLines, start1, end1, start, end)\n\t\t\t\t\t\tscroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t} else if (block) {\n\t\t\t\t\t\tconst [open, close] = block\n\t\t\t\t\t\tconst first = lines[0]\n\t\t\t\t\t\tconst insertionPoint = whitespaceEnd(first)\n\t\t\t\t\t\tconst hasComment = first.startsWith(open, insertionPoint) && lines[last].endsWith(close)\n\n\t\t\t\t\t\tlines[0] = first.replace(\n\t\t\t\t\t\t\thasComment ? RegExp(regexEscape(open) + \" ?\") : /(?!\\s)/,\n\t\t\t\t\t\t\thasComment ? \"\" : open + \" \",\n\t\t\t\t\t\t)\n\t\t\t\t\t\tlet diff = lines[0].length - first.length\n\t\t\t\t\t\tlines[last] = hasComment\n\t\t\t\t\t\t\t? lines[last].replace(RegExp(` ?${regexEscape(close)}$`), \"\")\n\t\t\t\t\t\t\t: lines[last] + \" \" + close\n\n\t\t\t\t\t\tlet newText = lines.join(\"\\n\")\n\t\t\t\t\t\tlet firstInsersion = insertionPoint + start1\n\t\t\t\t\t\tlet newStart = firstInsersion > start ? start : Math.max(start + diff, firstInsersion)\n\t\t\t\t\t\tlet newEnd =\n\t\t\t\t\t\t\tfirstInsersion > end - <any>(start != end)\n\t\t\t\t\t\t\t\t? end\n\t\t\t\t\t\t\t\t: Math.min(Math.max(firstInsersion, end + diff), start1 + newText.length)\n\t\t\t\t\t\tinsertText(editor, newText, start1, end1, newStart, Math.max(newStart, newEnd))\n\t\t\t\t\t\tscroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (code == 8 + mod && keyCode == 75) {\n\t\t\t\tconst value = editor.value\n\t\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\t\tconst column = dir > \"f\" ? end - end1 + lines.pop()!.length : start - start1\n\t\t\t\tconst newLineLen = getLineEnd(value, end1 + 1) - end1 - 1\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\t\"\",\n\t\t\t\t\tstart1 - <any>!!start1,\n\t\t\t\t\tend1 + <any>!start1,\n\t\t\t\t\tstart1 + Math.min(column, newLineLen),\n\t\t\t\t)\n\t\t\t\tscroll()\n\t\t\t\tpreventDefault(e)\n\t\t\t}\n\t\t})\n\t\t;([\"copy\", \"cut\", \"paste\"] as const).forEach(type =>\n\t\t\taddTextareaListener(editor, type, e => {\n\t\t\t\tconst [start, end] = getSelection()\n\t\t\t\tif (start == end && clipboard) {\n\t\t\t\t\tconst [[line], start1, end1] = getLines(editor.value, start, end)\n\t\t\t\t\tif (type == \"paste\") {\n\t\t\t\t\t\tif (e.clipboardData!.getData(\"text/plain\") == prevCopy) {\n\t\t\t\t\t\t\tinsertText(editor, prevCopy + \"\\n\", start1, start1, start + prevCopy.length + 1)\n\t\t\t\t\t\t\tscroll()\n\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclipboard.writeText((prevCopy = line))\n\t\t\t\t\t\tif (type == \"cut\") insertText(editor, \"\", start1, end1 + 1), scroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n\nexport { defaultCommands }\n","import { isMac } from \"../../utils/index.js\"\nimport { autoComplete } from \"../autocomplete/tooltip.js\"\nimport { searchWidget } from \"../search/widget.js\"\nimport { defaultKeymap } from \"./commands.js\"\nimport { normalizeKey } from \"./utils.js\"\n\nconst macModifiers: Record<number, string> = {\n\t2: \"⌃\",\n\t1: \"⌥\",\n\t8: \"⇧\",\n\t4: \"⌘\",\n}\n\nconst winModifiers: Record<number, string> = {\n\t2: \"Ctrl\",\n\t1: \"Alt\",\n\t8: \"Shift\",\n\t4: \"Win\",\n}\n\nconst keyDisplay: Record<string, string | undefined> = {\n\tarrowdown: \"↓\",\n\tarrowleft: \"←\",\n\tarrowright: \"→\",\n\tarrowup: \"↑\",\n\tdelete: \"Del\",\n\tescape: \"Esc\",\n\tpagedown: \"PageDown\",\n\tpageup: \"PageUp\",\n\t\" \": \"Space\",\n}\n\n/**\n * Utility that formats a hotkey to display in a user interface. Modifier keys use symbols\n * on Mac and labels otherwise.\n *\n * @param hotkey Hotkey to format for display.\n * @param separator String to join the segments together with. Defaults to `\" \"` on Mac\n * and `\"+\"` otherwise.\n * @returns Formatted key for display.\n *\n * @example\n * // On Mac\n * formatHotkey(\"mod+s\") // \"⌘ S\"\n * formatHotkey(\"12+escape\") // \"⇧ ⌘ Esc\"\n * formatHotkey(\"arrowup\") // \"↑\"\n *\n * // On Windows/Linux\n * formatHotkey(\"mod+s\") // \"Ctrl+S\"\n * formatHotkey(\"12+escape\") // \"Shift+Win+Esc\"\n * formatHotkey(\"arrowup\") // \"↑\"\n */\nconst formatHotkey = (hotkey: string, separator = isMac ? \" \" : \"+\") => {\n\tconst [code, key] = normalizeKey(hotkey).split(\"+\")\n\tconst result: string[] = []\n\tconst modifiers = isMac ? macModifiers : winModifiers\n\n\tfor (let c in modifiers) {\n\t\tif (+code & +c) result.push(modifiers[c])\n\t}\n\n\tresult.push(key ? keyDisplay[key] || key[0].toUpperCase() + key.slice(1) : \"+\")\n\n\treturn result.join(separator)\n}\n\n/**\n * Array of keyboard shortcuts and descriptions for {@link defaultKeymap}. Useful for\n * documenting key bindings to users. It consists of tuples containing two string each\n * where the first string is the key binding and the second is the description.\n *\n * @example\n * for (const [key, description] of defaultKeymapLabels) {\n * console.log(formatHotkey(key), description)\n * }\n */\nconst defaultKeymapLabels: [string, string][] = [\n\t[\"1+ArrowDown\", \"Move lines down\"],\n\t[\"1+ArrowUp\", \"Move lines up\"],\n\t[\"9+ArrowDown\", \"Copy lines down\"],\n\t[\"9+ArrowUp\", \"Copy lines up\"],\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Down`, \"Scroll one line down\"],\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Up`, \"Scroll one line up\"],\n\t[\"Enter\", \"Insert line and indent\"],\n\t[\"Mod+Enter\", \"Insert blank line\"],\n\t[\"Mod+]\", \"Indent lines\"],\n\t[\"Mod+[\", \"Outdent lines\"],\n\t[\"8+Mod+k\", \"Delete lines\"],\n\t[\"Mod+/\", \"Toggle line comment\"],\n\t[\"9+a\", \"Toggle block comment\"],\n\t[isMac ? \"10+m\" : \"2+m\", \"Toggle tab capturing\"],\n\t[\"Tab\", \"Indent lines\"],\n\t[\"8+Tab\", \"Outdent lines\"],\n]\n\n/**\n * Array of keyboard shortcuts and descriptions for the {@link autoComplete} extension.\n * Useful for documenting key bindings to users. It consists of tuples containing two\n * string each where the first string is the key binding and the second is the description.\n *\n * @example\n * for (const [key, description] of autoCompleteShortcutLabels) {\n * console.log(formatHotkey(key), description)\n * }\n */\nconst autoCompleteShortcutLabels: [string, string][] = [\n\t[\"2+ \", \"Trigger suggestion\"],\n\t[\"mod+i\", \"Trigger suggestion\"],\n\t...(isMac ? ([[\"1+Escape\", \"Trigger suggestion\"]] satisfies [string, string][]) : []),\n\t[\"2+ \", \"Toggle suggestion documentation\"],\n\t[\"mod+i\", \"Toggle suggestion documentation\"],\n\t[\"Tab\", \"Insert suggestion\"],\n\t[\"Enter\", \"Insert suggestion\"],\n\t[\"Escape\", \"Close completion widget\"],\n\t[\"Escape\", \"Clear tab stops\"],\n\t[\"Tab\", \"Select next tab stop\"],\n\t[\"8+Tab\", \"Select previous tab stop\"],\n\t[\"ArrowUp\", \"Select previous suggestion\"],\n\t[\"ArrowDown\", \"Select next suggestion\"],\n\t[\"PageUp\", \"Select first visible suggestion\"],\n\t[\"PageDown\", \"Select last visible suggestion\"],\n]\n\nconst modifiers = isMac ? 5 : 1\n\n/**\n * Array of keyboard shortcuts and descriptions for the {@link searchWidget} extension.\n * Useful for documenting key bindings to users. It consists of tuples containing two\n * string each where the first string is the key binding and the second is the description.\n *\n * @example\n * for (const [key, description] of searchShortcutLabels) {\n * console.log(formatHotkey(key), description)\n * }\n */\nconst searchShortcutLabels: [string, string][] = [\n\t[\"mod+f\", \"Start search\"],\n\t[\"mod+g\", \"Find next match\"],\n\t[\"mod+8+g\", \"Find previous match\"],\n\t[\"f3\", \"Find next match\"],\n\t[\"8+f3\", \"Find previous match\"],\n\t[\"Enter\", \"Select next match\"],\n\t[\"8+Enter\", \"Select previous match\"],\n\t[\"Escape\", \"Close search widget\"],\n\t[\"Enter\", \"Replace match\"],\n\t[`${isMac ? 4 : 3}+Enter`, \"Replace all matches\"],\n\t[modifiers + \"+r\", \"Toggle regex search\"],\n\t[modifiers + \"+p\", \"Toggle case preservation\"],\n\t[modifiers + \"+w\", \"Toggle whole word search\"],\n\t[modifiers + \"+l\", \"Toggle find in selection\"],\n]\n\nexport { formatHotkey, defaultKeymapLabels, autoCompleteShortcutLabels, searchShortcutLabels }\n","/** @module commands */\n\nimport { InputSelection, BasicExtension, PrismEditor } from \"../../index.js\"\nimport { preventDefault, languageMap } from \"../../core.js\"\nimport {\n\tgetLanguage,\n\tinsertText,\n\tgetLines,\n\tgetModifierCode,\n\tprevSelection,\n\tsetSelection,\n\tisMac,\n\tgetLineBefore,\n} from \"../../utils/index.js\"\nimport { addTextareaListener } from \"../../utils/local.js\"\nimport { EditHistory, EditorHotkey } from \"./types.js\"\nimport { mod, addEditorHotkey } from \"./utils.js\"\nimport { scroll } from \"./commands.js\"\n\n/**\n * Extension that will add automatic closing of brackets, quotes, and tags along\n * with the specified commands.\n *\n * @param hotkeyMap Commands that will be added to the editor.\n * @param selfClosePairs Pairs of self-closing brackets and quotes.\n * Must be an array of strings with 2 characters each.\n * Defaults to `['\"\"', \"''\", '``', '()', '[]', '{}']`.\n * @param selfCloseRegex Regex controlling whether or not a bracket/quote should\n * automatically close based on the character before and after the cursor.\n * Defaults to ``/([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s``.\n */\nconst editorCommands = (\n\thotkeyMap: Record<string, EditorHotkey>,\n\tselfClosePairs = ['\"\"', \"''\", \"``\", \"()\", \"[]\", \"{}\"],\n\tselfCloseRegex = /([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s,\n): BasicExtension => {\n\treturn (editor, options) => {\n\t\tlet prevCopy: string\n\t\tconst inputCommandMap = editor.inputCommandMap\n\t\tconst clipboard = navigator.clipboard\n\n\t\t/**\n\t\t * Automatically closes quotes and brackets if text is selected,\n\t\t * or if the character before and after the cursor matches a regex\n\t\t * @param wrapOnly If true, the character will only be closed if text is selected.\n\t\t */\n\t\tconst selfClose = (\n\t\t\t[start, end]: InputSelection,\n\t\t\t[open, close]: string,\n\t\t\tvalue: string,\n\t\t\twrapOnly?: boolean,\n\t\t) =>\n\t\t\t(start < end ||\n\t\t\t\t(!wrapOnly && selfCloseRegex.test((value[end - 1] || \" \") + open + (value[end] || \" \")))) &&\n\t\t\t!insertText(editor, open + value.slice(start, end) + close, null, null, start + 1, end + 1)!\n\n\t\tconst skipIfEqual = ([start, end]: InputSelection, char: string, value: string) =>\n\t\t\tstart == end && value[end] == char && !setSelection(editor, start + 1)!\n\n\t\tconst backspaceCommand = () => {\n\t\t\tconst [start, end] = editor.getSelection()\n\n\t\t\tif (start == end) {\n\t\t\t\tconst value = editor.value\n\t\t\t\tconst line = getLineBefore(value, start)\n\t\t\t\tconst tabSize = options.tabSize || 2\n\t\t\t\tconst isPair = selfClosePairs.includes(value.slice(start - 1, start + 1))\n\t\t\t\tconst indenationCount = /[^ ]/.test(line) ? 0 : ((line.length - 1) % tabSize) + 1\n\n\t\t\t\tif ((isPair || indenationCount > 1) && start == end) {\n\t\t\t\t\tinsertText(editor, \"\", start - (isPair ? 1 : indenationCount), start + <any>isPair)\n\t\t\t\t\treturn scroll(editor)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinputCommandMap[\"<\"] = (_e, selection, value) => selfClose(selection, \"<>\", value, true)\n\n\t\tselfClosePairs.forEach(([open, close]) => {\n\t\t\tconst isQuote = open == close\n\t\t\tinputCommandMap[open] = (_e, selection, value) =>\n\t\t\t\t((isQuote && skipIfEqual(selection, close, value)) ||\n\t\t\t\t\tselfClose(selection, open + close, value)) &&\n\t\t\t\tscroll(editor)\n\t\t\tif (!isQuote)\n\t\t\t\tinputCommandMap[close] = (_e, selection, value) =>\n\t\t\t\t\tskipIfEqual(selection, close, value) && scroll(editor)\n\t\t})\n\n\t\tinputCommandMap[\">\"] = (e, selection, value) => {\n\t\t\tconst closingTag = languageMap[getLanguage(editor)]?.autoCloseTags?.(selection, value, editor)\n\t\t\tif (closingTag) {\n\t\t\t\tinsertText(editor, \">\" + closingTag, null, null, selection[0] + 1)\n\t\t\t\tpreventDefault(e)\n\t\t\t}\n\t\t}\n\n\t\taddEditorHotkey(editor, \"Backspace\", backspaceCommand)\n\t\taddEditorHotkey(editor, \"8+Backspace\", backspaceCommand)\n\n\t\tfor (const key in hotkeyMap) {\n\t\t\taddEditorHotkey(editor, key, hotkeyMap[key])\n\t\t}\n\n\t\t;([\"copy\", \"cut\", \"paste\"] as const).forEach(type =>\n\t\t\taddTextareaListener(editor, type, e => {\n\t\t\t\tconst [start, end] = editor.getSelection()\n\t\t\t\tif (start == end && clipboard) {\n\t\t\t\t\tconst [[line], start1, end1] = getLines(editor.value, start, end)\n\t\t\t\t\tif (type == \"paste\") {\n\t\t\t\t\t\tif (e.clipboardData!.getData(\"text/plain\") == prevCopy) {\n\t\t\t\t\t\t\tinsertText(editor, prevCopy + \"\\n\", start1, start1, start + prevCopy.length + 1)\n\t\t\t\t\t\t\tscroll(editor)\n\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclipboard.writeText((prevCopy = line))\n\t\t\t\t\t\tif (type == \"cut\") insertText(editor, \"\", start1, end1 + 1), scroll(editor)\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n\n/**\n * History extension that overrides the undo/redo behavior of the browser.\n *\n * Without this extension, the browser's native undo/redo is used, which can be sufficient\n * in some cases.\n *\n * Once added to an editor, this extension can be accessed from `editor.extensions.history`.\n *\n * If you want to create a new editor with different extensions while keeping the undo/redo\n * history of an old editor, you can! Just add the old editor's history extension instance\n * to the new editor. Keep in mind that this will fully break the undo/redo behavior of the\n * old editor.\n *\n * @param historyLimit The maximum size of the history stack. Defaults to 999.\n */\nconst editHistory = (historyLimit = 999) => {\n\tlet sp = 0\n\tlet currentEditor: PrismEditor\n\tlet allowMerge: boolean\n\tlet isTyping = false\n\tlet prevInputType: string\n\tlet prevData: string | null\n\tlet prevTime: number\n\tlet isMerge: boolean\n\tlet textarea: HTMLTextAreaElement\n\tlet getSelection: PrismEditor[\"getSelection\"]\n\n\tconst stack: [string, InputSelection, InputSelection][] = []\n\tconst update = (index: number) => {\n\t\tif (index >= historyLimit) {\n\t\t\tindex--\n\t\t\tstack.shift()\n\t\t}\n\t\tstack.splice((sp = index), historyLimit, [currentEditor.value, getSelection(), getSelection()])\n\t}\n\tconst setEditorState = (index: number) => {\n\t\tif (stack[index]) {\n\t\t\ttextarea.value = stack[index][0]\n\t\t\ttextarea.setSelectionRange(...stack[index][index < sp ? 2 : 1])\n\t\t\tcurrentEditor.update()\n\t\t\tcurrentEditor.extensions.cursor?.scrollIntoView()\n\t\t\tsp = index\n\t\t\tallowMerge = false\n\t\t}\n\t}\n\n\tconst self: EditHistory = (editor, options) => {\n\t\teditor.extensions.history = self\n\t\tcurrentEditor = editor\n\t\tgetSelection = editor.getSelection\n\t\ttextarea || update(0)\n\t\ttextarea = editor.textarea\n\n\t\teditor.on(\"selectionChange\", () => {\n\t\t\tallowMerge = isTyping\n\t\t\tisTyping = false\n\t\t})\n\n\t\taddTextareaListener(editor, \"beforeinput\", e => {\n\t\t\tlet data = e.data\n\t\t\tlet inputType = e.inputType\n\t\t\tlet time = e.timeStamp\n\n\t\t\tif (/history/.test(inputType)) {\n\t\t\t\tsetEditorState(sp + (inputType[7] == \"U\" ? -1 : 1))\n\t\t\t\tpreventDefault(e)\n\t\t\t} else if (\n\t\t\t\t!(isMerge =\n\t\t\t\t\tallowMerge &&\n\t\t\t\t\t(prevInputType == inputType || (time - prevTime < 99 && inputType.slice(-4) == \"Drop\")) &&\n\t\t\t\t\t!prevSelection &&\n\t\t\t\t\t(data != \" \" || prevData == data))\n\t\t\t) {\n\t\t\t\tstack[sp][2] = prevSelection || getSelection()\n\t\t\t}\n\t\t\tisTyping = true\n\t\t\tprevData = data\n\t\t\tprevTime = time\n\t\t\tprevInputType = inputType\n\t\t})\n\t\taddTextareaListener(editor, \"input\", () => update(sp + <any>!isMerge))\n\t\taddTextareaListener(editor, \"keydown\", e => {\n\t\t\tif (!options.readOnly) {\n\t\t\t\tconst code = getModifierCode(e)\n\t\t\t\tconst keyCode = e.keyCode\n\t\t\t\tconst isUndo = code == mod && keyCode == 90\n\t\t\t\tconst isRedo =\n\t\t\t\t\t(code == mod + 8 && keyCode == 90) || (!isMac && code == mod && keyCode == 89)\n\t\t\t\tif (isUndo) {\n\t\t\t\t\tsetEditorState(sp - 1)\n\t\t\t\t\tpreventDefault(e)\n\t\t\t\t} else if (isRedo) {\n\t\t\t\t\tsetEditorState(sp + 1)\n\t\t\t\t\tpreventDefault(e)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\teditor.addExtensions({\n\t\t\tupdate() {\n\t\t\t\tif (editor.value != textarea.value) reset()\n\t\t\t},\n\t\t})\n\t}\n\n\tconst reset = (self.clear = () => {\n\t\tupdate(0)\n\t\tallowMerge = false\n\t})\n\n\tself.has = offset => sp + offset in stack\n\tself.go = offset => setEditorState(sp + offset)\n\n\treturn self\n}\n\nexport { editorCommands, editHistory }\nexport {\n\tnormalizeKey,\n\tgetKeysFromEvent,\n\taddEditorHotkey,\n\taddHotkey,\n\taddEditorHotkeySequence,\n\taddHotkeySequence,\n\trunHotkeys,\n\tisModifierKey,\n} from \"./utils.js\"\nexport {\n\tindentSelectedLines,\n\tinsertTab,\n\tinsertLineAndIndent,\n\tmoveSelectedLines,\n\tcopySelectedLines,\n\tscrollByOneLine,\n\tdeleteSelectedLines,\n\ttoggleComment,\n\tsetIgnoreTab,\n\tdefaultKeymap,\n\tignoreTab,\n} from \"./commands.js\"\nexport * from \"./deprecated.js\"\nexport * from \"./types.js\"\nexport * from \"./format.js\"\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands-HRCav5fj.js","names":[],"sources":["../src/extensions/commands/commands.ts","../src/extensions/commands/deprecated.ts","../src/extensions/commands/format.ts","../src/extensions/commands/index.ts"],"sourcesContent":["import { Language, languageMap } from \"../..\"\nimport { PrismEditor } from \"../../types.js\"\nimport {\n\tgetLanguage,\n\tgetLineBefore,\n\tgetLines,\n\tinsertText,\n\tisMac,\n\tregexEscape,\n} from \"../../utils/index.js\"\nimport { getLineEnd, getLineStart, getStyleValue } from \"../../utils/local\"\nimport { defaultCommands } from \"./deprecated.js\"\nimport { EditorHotkey } from \"./types.js\"\n\nlet ignoreTab = false\n\n/**\n * Sets whether editors should ignore tab or use it for indentation. Users can toggle\n * this using `Ctrl` + `M` / `Ctrl` + `Shift` + `M` (Mac) when the {@link defaultKeymap}\n * or {@link defaultCommands} extension is used.\n */\nconst setIgnoreTab = (newState: boolean) => (ignoreTab = newState)\nconst whitespaceEnd = (str: string) => str.search(/\\S|$/)\n\nconst getIndent = ({ options: { insertSpaces = true, tabSize } }: PrismEditor) =>\n\t[insertSpaces ? \" \" : \"\\t\", insertSpaces ? tabSize || 2 : 1] as const\n\nconst scroll = (editor: PrismEditor) =>\n\t!editor.options.readOnly && !editor.extensions.cursor?.scrollIntoView()\n\n/**\n * Inserts slightly altered lines while keeping the same selection.\n * Used when toggling comments and indenting.\n */\nconst insertLines = (\n\teditor: PrismEditor,\n\told: string[],\n\tnewL: string[],\n\tstart: number,\n\tend: number,\n\tselectionStart: number,\n\tselectionEnd: number,\n) => {\n\tlet newLines = newL.join(\"\\n\")\n\n\tif (newLines == old.join(\"\\n\")) return\n\n\tconst last = old.length - 1\n\tconst lastLine = newL[last]\n\tconst oldLastLine = old[last]\n\tconst lastDiff = oldLastLine.length - lastLine.length\n\tconst firstDiff = newL[0].length - old[0].length\n\tconst firstInsersion = start + whitespaceEnd((firstDiff < 0 ? newL : old)[0])\n\tconst lastInsersion =\n\t\tend - oldLastLine.length + whitespaceEnd(lastDiff > 0 ? lastLine : oldLastLine)\n\tconst offset = start - end + newLines.length + lastDiff\n\tconst newCursorStart =\n\t\tfirstInsersion > selectionStart\n\t\t\t? selectionStart\n\t\t\t: Math.max(firstInsersion, selectionStart + firstDiff)\n\tconst newCursorEnd = selectionEnd + start - end + newLines.length\n\n\tinsertText(\n\t\teditor,\n\t\tnewLines,\n\t\tstart,\n\t\tend,\n\t\tnewCursorStart,\n\t\tselectionEnd < lastInsersion\n\t\t\t? newCursorEnd + lastDiff\n\t\t\t: Math.max(lastInsersion + offset, newCursorEnd),\n\t)\n}\n\n/**\n * Command that indents or outdents all user-selected lines in the editor unless the\n * editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param less By default lines are indented. By passing `true`, lines are outdented\n * instead.\n */\nconst indentSelectedLines = (editor: PrismEditor, less?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst [lines, start1, end1] = getLines(editor.value, start, end)\n\tconst [indentChar, tabSize] = getIndent(editor)\n\n\tinsertLines(\n\t\teditor,\n\t\tlines,\n\t\tlines.map(\n\t\t\tless\n\t\t\t\t? str => str.slice(whitespaceEnd(str) ? tabSize - (whitespaceEnd(str) % tabSize) : 0)\n\t\t\t\t: str => str && indentChar.repeat(tabSize - (whitespaceEnd(str) % tabSize)) + str,\n\t\t),\n\t\tstart1,\n\t\tend1,\n\t\tstart,\n\t\tend,\n\t)\n\n\treturn scroll(editor)\n}\n\n/**\n * Command that inserts spaces if `insertSpaces` isn't `false` or a tab character\n * otherwise at the specified position unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param pos Position to insert the tab.\n */\nconst insertTab = (editor: PrismEditor, pos: number) => {\n\tconst [indentChar, tabSize] = getIndent(editor)\n\n\tinsertText(\n\t\teditor,\n\t\tindentChar.repeat(tabSize - ((pos - getLineStart(editor.value, pos)) % tabSize)),\n\t)\n\n\treturn scroll(editor)\n}\n\n/**\n * Command that inserts a new line replacing the current selection unless the editor is\n * `readOnly`. It uses the `autoIndent` behavior of the current language to determine\n * whether to preserve the indentation or increase it.\n * @param editor Editor to execute the command on.\n * @param eol If `true`, the new line is inserted at the end of the line instead of at\n * the cursor's position.\n */\nconst insertLineAndIndent = (editor: PrismEditor, eol?: boolean) => {\n\tlet selection = editor.getSelection()\n\tlet value = editor.value\n\n\tif (eol) selection[0] = selection[1] = getLineEnd(value, selection[1])\n\n\tconst [indentChar, tabSize] = getIndent(editor)\n\tconst [start, end] = selection\n\tconst autoIndent = languageMap[getLanguage(editor, start)]?.autoIndent\n\tconst indenationCount = Math.floor(whitespaceEnd(getLineBefore(value, start)) / tabSize) * tabSize\n\tconst extraIndent = autoIndent?.[0]?.(selection, value, editor) ? tabSize : 0\n\tconst extraLine = autoIndent?.[1]?.(selection, value, editor)\n\tconst newText =\n\t\t\"\\n\" +\n\t\tindentChar.repeat(indenationCount + extraIndent) +\n\t\t(extraLine ? \"\\n\" + indentChar.repeat(indenationCount) : \"\")\n\n\tif (newText[1] || value[end]) {\n\t\tinsertText(editor, newText, start, end, start + indenationCount + extraIndent + 1)\n\t\treturn scroll(editor)\n\t}\n}\n\n/**\n * Command that moves all selected lines unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param up Whether to move the lines up. Defaults to `false`.\n */\nconst moveSelectedLines = (editor: PrismEditor, up?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst value = editor.value\n\tconst newStart = up ? getLineStart(value, start) - 1 : start\n\tconst newEnd = up ? end : value.indexOf(\"\\n\", end) + 1\n\n\tif (newStart > -1 && newEnd > 0) {\n\t\tconst [lines, start1, end1] = getLines(value, newStart, newEnd)\n\t\tconst line = lines[up ? \"shift\" : \"pop\"]()!\n\t\tconst offset = (line.length + 1) * (up ? -1 : 1)\n\n\t\tlines[up ? \"push\" : \"unshift\"](line)\n\t\tinsertText(editor, lines.join(\"\\n\"), start1, end1, start + offset, end + offset)\n\t}\n\n\treturn scroll(editor)\n}\n\n/**\n * Command that copies all selected lines unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n * @param up Whether or not the selection should remain on the top copy. Defaults to\n * `false`.\n */\nconst copySelectedLines = (editor: PrismEditor, up?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst value = editor.value\n\tconst [lines, start1, end1] = getLines(value, start, end)\n\tconst str = lines.join(\"\\n\")\n\tconst offset = up ? 0 : str.length + 1\n\n\tinsertText(editor, str + \"\\n\" + str, start1, end1, start + offset, end + offset)\n\treturn scroll(editor)\n}\n\n/**\n * Command that scrolls the editor by one line.\n * @param editor Editor to execute the command on.\n * @param up Whether to scroll up. Defaults to `false`.\n */\nconst scrollByOneLine = (editor: PrismEditor, up?: boolean) => {\n\teditor.container.scrollBy(0, getStyleValue(editor.container, \"lineHeight\") * (up ? -1 : 1))\n\treturn true\n}\n\n/**\n * Command that deletes all selected lines unless the editor is `readOnly`.\n * @param editor Editor to execute the command on.\n */\nconst deleteSelectedLines = (editor: PrismEditor) => {\n\tconst [start, end, dir] = editor.getSelection()\n\tconst value = editor.value\n\tconst [lines, start1, end1] = getLines(value, start, end)\n\tconst column = dir > \"f\" ? end - end1 + lines.pop()!.length : start - start1\n\tconst newLineLen = getLineEnd(value, end1 + 1) - end1 - 1\n\n\tinsertText(\n\t\teditor,\n\t\t\"\",\n\t\tstart1 - <any>!!start1,\n\t\tend1 + <any>!start1,\n\t\tstart1 + Math.min(column, newLineLen),\n\t)\n\treturn scroll(editor)\n}\n\n/**\n * Command that toggles the comment around the current selection unless the editor is\n * `readOnly`. Comment syntax is determined using the current {@link Language}. It will\n * use the `getComments()` method if present and the `comments` property otherwise.\n * @param editor Editor to execute the command on.\n * @param isBlock Whether or not to toggle the comment using block syntax.\n */\nconst toggleComment = (editor: PrismEditor, isBlock?: boolean) => {\n\tconst [start, end] = editor.getSelection()\n\tconst value = editor.value\n\tconst position = isBlock ? start : getLineStart(value, start)\n\tconst lang = languageMap[getLanguage(editor, position)] || {}\n\tconst { line, block } = lang.getComments?.(editor, position, value) || lang.comments || {}\n\tconst [lines, start1, end1] = getLines(value, start, end)\n\tconst last = lines.length - 1\n\n\tif (isBlock) {\n\t\tif (block) {\n\t\t\tconst [open, close] = block\n\t\t\tconst text = value.slice(start, end)\n\t\t\tconst pos = value.slice(0, start).search(regexEscape(open) + \" ?$\")\n\n\t\t\tif (pos + 1 && RegExp(\"^ ?\" + regexEscape(close)).test(value.slice(end))) {\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\ttext,\n\t\t\t\t\tpos,\n\t\t\t\t\tend + <any>(value[end] == \" \") + close.length,\n\t\t\t\t\tpos,\n\t\t\t\t\tpos + end - start,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\t`${open} ${text} ${close}`,\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\tstart + open.length + 1,\n\t\t\t\t\tend + open.length + 1,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (line) {\n\t\t\tconst escaped = regexEscape(line)\n\t\t\tconst regex = RegExp(`^\\\\s*(${escaped} ?|$)`)\n\t\t\tconst regex2 = RegExp(escaped + \" ?\")\n\t\t\tconst allWhiteSpace = !/\\S/.test(value.slice(start1, end1))\n\t\t\tconst newLines = lines.map(\n\t\t\t\t!allWhiteSpace && lines.every(line => regex.test(line))\n\t\t\t\t\t? str => str.replace(regex2, \"\")\n\t\t\t\t\t: str => (allWhiteSpace || /\\S/.test(str) ? str.replace(/(?!\\s)/, line + \" \") : str),\n\t\t\t)\n\t\t\tinsertLines(editor, lines, newLines, start1, end1, start, end)\n\t\t} else if (block) {\n\t\t\tconst [open, close] = block\n\t\t\tconst first = lines[0]\n\t\t\tconst insertionPoint = whitespaceEnd(first)\n\t\t\tconst hasComment = first.startsWith(open, insertionPoint) && lines[last].endsWith(close)\n\n\t\t\tlines[0] = first.replace(\n\t\t\t\thasComment ? RegExp(regexEscape(open) + \" ?\") : /(?!\\s)/,\n\t\t\t\thasComment ? \"\" : open + \" \",\n\t\t\t)\n\t\t\tlet diff = lines[0].length - first.length\n\t\t\tlines[last] = hasComment\n\t\t\t\t? lines[last].replace(RegExp(` ?${regexEscape(close)}$`), \"\")\n\t\t\t\t: lines[last] + \" \" + close\n\n\t\t\tlet newText = lines.join(\"\\n\")\n\t\t\tlet firstInsersion = insertionPoint + start1\n\t\t\tlet newStart = firstInsersion > start ? start : Math.max(start + diff, firstInsersion)\n\t\t\tlet newEnd =\n\t\t\t\tfirstInsersion > end - <any>(start != end)\n\t\t\t\t\t? end\n\t\t\t\t\t: Math.min(Math.max(firstInsersion, end + diff), start1 + newText.length)\n\t\t\tinsertText(editor, newText, start1, end1, newStart, Math.max(newStart, newEnd))\n\t\t}\n\t}\n\n\treturn block || (line && !isBlock) ? scroll(editor) : false\n}\n\n/**\n * Default keymapping that includes the following commands:\n *\n * - `Alt` + `ArrowUp`: Move line up\n * - `Alt` + `ArrowDown`: Move line down\n * - `Ctrl` + `ArrowUp`: Scroll one line up (Windows/Linux)\n * - `Ctrl` + `ArrowDown`: Scroll one line down (Windows/Linux)\n * - `Ctrl` + `PageUp`: Scroll one line up (Mac)\n * - `Ctrl` + `PageDown`: Scroll one line down (Mac)\n * - `Shift` + `Alt` + `ArrowUp`: Copy line up\n * - `Shift` + `Alt` + `ArrowDown`: Copy line down\n * - `Enter`: Insert line and indent\n * - `Shift` + `Enter`: Insert line and indent\n * - `Mod` + `Enter`: Insert blank line\n * - `Mod` + `]`: Indent line\n * - `Mod` + `[`: Outdent line\n * - `Tab`: Indent line (Tab capture enabled)\n * - `Shift` + `Tab`: Outdent line (Tab capture enabled)\n * - `Shift` + `Mod` + `K`: Delete line\n * - `Mod` + `/`: Toggle comment\n * - `Shift` + `Alt` + `A`: Toggle block comment\n * - `Ctrl` + `M`: Toggle tab capturing (Windows/Linux)\n * - `Ctrl` + `Shift` + `M`: Toggle tab capturing (Mac)\n *\n * Here, `Mod` refers to `Cmd` on Mac and `Ctrl` otherwise.\n */\nconst defaultKeymap: Record<string, EditorHotkey> = {\n\tTab(editor) {\n\t\tif (!ignoreTab) {\n\t\t\tconst [start, end] = editor.getSelection()\n\t\t\treturn start == end ? insertTab(editor, start) : indentSelectedLines(editor)\n\t\t}\n\t},\n\t\"8+Tab\": editor => !ignoreTab && indentSelectedLines(editor, true),\n\t\"1+ArrowDown\": editor => moveSelectedLines(editor),\n\t\"1+ArrowUp\": editor => moveSelectedLines(editor, true),\n\t\"9+ArrowDown\": editor => copySelectedLines(editor),\n\t\"9+ArrowUp\": editor => copySelectedLines(editor, true),\n\tEnter: editor => insertLineAndIndent(editor),\n\t\"8+Enter\": editor => insertLineAndIndent(editor),\n\t\"Mod+Enter\": editor => insertLineAndIndent(editor, true),\n\t\"Mod+]\": editor => indentSelectedLines(editor),\n\t\"Mod+[\": editor => indentSelectedLines(editor, true),\n\t\"8+Mod+k\": deleteSelectedLines,\n\t\"Mod+/\": editor => toggleComment(editor),\n\t\"9+a\": editor => toggleComment(editor, true),\n\t[isMac ? \"10+m\" : \"2+m\"]: () => ((ignoreTab = !ignoreTab), true),\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Down`]: editor => scrollByOneLine(editor),\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Up`]: editor => scrollByOneLine(editor, true),\n}\n\nexport {\n\twhitespaceEnd,\n\tscroll,\n\tindentSelectedLines,\n\tinsertTab,\n\tinsertLineAndIndent,\n\tmoveSelectedLines,\n\tcopySelectedLines,\n\tscrollByOneLine,\n\tdeleteSelectedLines,\n\ttoggleComment,\n\tsetIgnoreTab,\n\tdefaultKeymap,\n\tignoreTab,\n}\n","import { InputSelection, BasicExtension } from \"../../index.js\"\nimport { preventDefault, languageMap } from \"../../core.js\"\nimport {\n\tgetLanguage,\n\tinsertText,\n\tgetLineBefore,\n\tgetLines,\n\tregexEscape,\n\tgetModifierCode,\n\tsetSelection,\n\tisMac,\n} from \"../../utils/index.js\"\nimport { addTextareaListener, getLineEnd, getLineStart, getStyleValue } from \"../../utils/local.js\"\nimport { mod } from \"./utils.js\"\nimport { ignoreTab, setIgnoreTab, whitespaceEnd } from \"./commands.js\"\nimport { editorCommands } from \"./index.js\"\n\n/**\n * Extension that will add automatic indentation and closing of brackets, quotes, and\n * tags along with the commands presented later.\n *\n * ## Commands\n *\n * Here, `Mod` refers to `Cmd` on Mac and `Ctrl` otherwise.\n *\n * - `Alt` + `ArrowUp`: Move line up\n * - `Alt` + `ArrowDown`: Move line down\n * - `Ctrl` + `ArrowUp`: Scroll one line up (Windows/Linux only)\n * - `Ctrl` + `ArrowDown`: Scroll one line down (Windows/Linux only)\n * - `Shift` + `Alt` + `ArrowUp`: Copy line up\n * - `Shift` + `Alt` + `ArrowDown`: Copy line down\n * - `Mod` + `Enter`: Insert blank line\n * - `Mod` + `]`: Indent line\n * - `Mod` + `[`: Outdent line\n * - `Tab`: Indent line (Tab capture enabled)\n * - `Shift` + `Tab`: Outdent line (Tab capture enabled)\n * - `Shift` + `Mod` + `K`: Delete line\n * - `Mod` + `/`: Toggle comment\n * - `Shift` + `Alt` + `A`: Toggle block comment\n * - `Ctrl` + `M`: Toggle tab capturing (Windows/Linux)\n * - `Ctrl` + `Shift` + `M`: Toggle tab capturing (Mac)\n *\n * @param selfClosePairs Pairs of self-closing brackets and quotes.\n * Must be an array of strings with 2 characters each.\n * Defaults to `['\"\"', \"''\", '``', '()', '[]', '{}']`.\n * @param selfCloseRegex Regex controlling whether or not a bracket/quote should\n * automatically close based on the character before and after the cursor.\n * Defaults to ``/([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s``.\n *\n * @deprecated Consider using {@link editorCommands} instead. This will be removed in next\n * major release.\n */\nconst defaultCommands = (\n\tselfClosePairs = ['\"\"', \"''\", \"``\", \"()\", \"[]\", \"{}\"],\n\tselfCloseRegex = /([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s,\n): BasicExtension => {\n\treturn (editor, options) => {\n\t\tlet prevCopy: string\n\t\tconst { keyCommandMap, inputCommandMap, getSelection, container } = editor\n\n\t\tconst clipboard = navigator.clipboard\n\n\t\tconst getIndent = ({ insertSpaces = true, tabSize } = options) =>\n\t\t\t[insertSpaces ? \" \" : \"\\t\", insertSpaces ? tabSize || 2 : 1] as const\n\n\t\tconst scroll = () => !options.readOnly && !editor.extensions.cursor?.scrollIntoView()\n\n\t\t/**\n\t\t * Automatically closes quotes and brackets if text is selected,\n\t\t * or if the character before and after the cursor matches a regex\n\t\t * @param wrapOnly If true, the character will only be closed if text is selected.\n\t\t */\n\t\tconst selfClose = (\n\t\t\t[start, end]: InputSelection,\n\t\t\t[open, close]: string,\n\t\t\tvalue: string,\n\t\t\twrapOnly?: boolean,\n\t\t) =>\n\t\t\t(start < end ||\n\t\t\t\t(!wrapOnly && selfCloseRegex.test((value[end - 1] || \" \") + open + (value[end] || \" \")))) &&\n\t\t\t!insertText(editor, open + value.slice(start, end) + close, null, null, start + 1, end + 1)!\n\n\t\tconst skipIfEqual = ([start, end]: InputSelection, char: string, value: string) =>\n\t\t\tstart == end && value[end] == char && !setSelection(editor, start + 1)!\n\n\t\t/**\n\t\t * Inserts slightly altered lines while keeping the same selection.\n\t\t * Used when toggling comments and indenting.\n\t\t */\n\t\tconst insertLines = (\n\t\t\told: string[],\n\t\t\tnewL: string[],\n\t\t\tstart: number,\n\t\t\tend: number,\n\t\t\tselectionStart: number,\n\t\t\tselectionEnd: number,\n\t\t) => {\n\t\t\tlet newLines = newL.join(\"\\n\")\n\t\t\tif (newLines != old.join(\"\\n\")) {\n\t\t\t\tconst last = old.length - 1\n\t\t\t\tconst lastLine = newL[last]\n\t\t\t\tconst oldLastLine = old[last]\n\t\t\t\tconst lastDiff = oldLastLine.length - lastLine.length\n\t\t\t\tconst firstDiff = newL[0].length - old[0].length\n\t\t\t\tconst firstInsersion = start + whitespaceEnd((firstDiff < 0 ? newL : old)[0])\n\t\t\t\tconst lastInsersion =\n\t\t\t\t\tend - oldLastLine.length + whitespaceEnd(lastDiff > 0 ? lastLine : oldLastLine)\n\t\t\t\tconst offset = start - end + newLines.length + lastDiff\n\t\t\t\tconst newCursorStart =\n\t\t\t\t\tfirstInsersion > selectionStart\n\t\t\t\t\t\t? selectionStart\n\t\t\t\t\t\t: Math.max(firstInsersion, selectionStart + firstDiff)\n\t\t\t\tconst newCursorEnd = selectionEnd + start - end + newLines.length\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\tnewLines,\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\tnewCursorStart,\n\t\t\t\t\tselectionEnd < lastInsersion\n\t\t\t\t\t\t? newCursorEnd + lastDiff\n\t\t\t\t\t\t: Math.max(lastInsersion + offset, newCursorEnd),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tconst indent = (\n\t\t\toutdent: boolean,\n\t\t\tlines: string[],\n\t\t\tstart1: number,\n\t\t\tend1: number,\n\t\t\tstart: number,\n\t\t\tend: number,\n\t\t\tindentChar: string,\n\t\t\ttabSize: number,\n\t\t) => {\n\t\t\tinsertLines(\n\t\t\t\tlines,\n\t\t\t\tlines.map(\n\t\t\t\t\toutdent\n\t\t\t\t\t\t? str => str.slice(whitespaceEnd(str) ? tabSize - (whitespaceEnd(str) % tabSize) : 0)\n\t\t\t\t\t\t: str => str && indentChar.repeat(tabSize - (whitespaceEnd(str) % tabSize)) + str,\n\t\t\t\t),\n\t\t\t\tstart1,\n\t\t\t\tend1,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t)\n\t\t}\n\n\t\tinputCommandMap[\"<\"] = (_e, selection, value) => selfClose(selection, \"<>\", value, true)\n\n\t\tselfClosePairs.forEach(([open, close]) => {\n\t\t\tconst isQuote = open == close\n\t\t\tinputCommandMap[open] = (_e, selection, value) =>\n\t\t\t\t((isQuote && skipIfEqual(selection, close, value)) ||\n\t\t\t\t\tselfClose(selection, open + close, value)) &&\n\t\t\t\tscroll()\n\t\t\tif (!isQuote)\n\t\t\t\tinputCommandMap[close] = (_e, selection, value) =>\n\t\t\t\t\tskipIfEqual(selection, close, value) && scroll()\n\t\t})\n\n\t\tinputCommandMap[\">\"] = (e, selection, value) => {\n\t\t\tconst closingTag = languageMap[getLanguage(editor)]?.autoCloseTags?.(selection, value, editor)\n\t\t\tif (closingTag) {\n\t\t\t\tinsertText(editor, \">\" + closingTag, null, null, selection[0] + 1)\n\t\t\t\tpreventDefault(e)\n\t\t\t}\n\t\t}\n\n\t\tkeyCommandMap.Tab = (e, [start, end], value) => {\n\t\t\tif (ignoreTab || options.readOnly || getModifierCode(e) & 7) return\n\t\t\tconst [indentChar, tabSize] = getIndent()\n\t\t\tconst shiftKey = e.shiftKey\n\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\tif (start < end || shiftKey) {\n\t\t\t\tindent(shiftKey, lines, start1, end1, start, end, indentChar, tabSize)\n\t\t\t} else insertText(editor, indentChar.repeat(tabSize - ((start - start1) % tabSize)))\n\t\t\treturn scroll()\n\t\t}\n\n\t\tkeyCommandMap.Enter = (e, selection, value) => {\n\t\t\tconst code = getModifierCode(e) & 7\n\t\t\tif (!code || code == mod) {\n\t\t\t\tif (code) selection[0] = selection[1] = getLines(value, selection[1])[2]\n\t\t\t\tconst [indentChar, tabSize] = getIndent()\n\t\t\t\tconst [start, end] = selection\n\t\t\t\tconst autoIndent = languageMap[getLanguage(editor, start)]?.autoIndent\n\t\t\t\tconst indenationCount =\n\t\t\t\t\tMath.floor(whitespaceEnd(getLineBefore(value, start)) / tabSize) * tabSize\n\t\t\t\tconst extraIndent = autoIndent?.[0]?.(selection, value, editor) ? tabSize : 0\n\t\t\t\tconst extraLine = autoIndent?.[1]?.(selection, value, editor)\n\t\t\t\tconst newText =\n\t\t\t\t\t\"\\n\" +\n\t\t\t\t\tindentChar.repeat(indenationCount + extraIndent) +\n\t\t\t\t\t(extraLine ? \"\\n\" + indentChar.repeat(indenationCount) : \"\")\n\n\t\t\t\tif (newText[1] || value[end]) {\n\t\t\t\t\tinsertText(editor, newText, start, end, start + indenationCount + extraIndent + 1)\n\t\t\t\t\treturn scroll()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tkeyCommandMap.Backspace = (_e, [start, end], value) => {\n\t\t\tif (start == end) {\n\t\t\t\tconst line = getLineBefore(value, start)\n\t\t\t\tconst tabSize = options.tabSize || 2\n\t\t\t\tconst isPair = selfClosePairs.includes(value.slice(start - 1, start + 1))\n\t\t\t\tconst indenationCount = /[^ ]/.test(line) ? 0 : ((line.length - 1) % tabSize) + 1\n\n\t\t\t\tif (isPair || indenationCount > 1) {\n\t\t\t\t\tinsertText(editor, \"\", start - (isPair ? 1 : indenationCount), start + <any>isPair)\n\t\t\t\t\treturn scroll()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tkeyCommandMap[i ? \"ArrowDown\" : \"ArrowUp\"] = (e, [start, end], value) => {\n\t\t\t\tconst code = getModifierCode(e)\n\n\t\t\t\tif (code == 1) {\n\t\t\t\t\t// Moving lines\n\t\t\t\t\tconst newStart = i ? start : getLineStart(value, start) - 1\n\t\t\t\t\tconst newEnd = i ? value.indexOf(\"\\n\", end) + 1 : end\n\t\t\t\t\tif (newStart > -1 && newEnd > 0) {\n\t\t\t\t\t\tconst [lines, start1, end1] = getLines(value, newStart, newEnd)\n\t\t\t\t\t\tconst line = lines[i ? \"pop\" : \"shift\"]()!\n\t\t\t\t\t\tconst offset = (line.length + 1) * (i ? 1 : -1)\n\n\t\t\t\t\t\tlines[i ? \"unshift\" : \"push\"](line)\n\t\t\t\t\t\tinsertText(editor, lines.join(\"\\n\"), start1, end1, start + offset, end + offset)\n\t\t\t\t\t}\n\t\t\t\t\treturn scroll()\n\t\t\t\t} else if (code == 9) {\n\t\t\t\t\t// Copying lines\n\t\t\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\t\t\tconst str = lines.join(\"\\n\")\n\t\t\t\t\tconst offset = i ? str.length + 1 : 0\n\t\t\t\t\tinsertText(editor, str + \"\\n\" + str, start1, end1, start + offset, end + offset)\n\t\t\t\t\treturn scroll()\n\t\t\t\t} else if (code == 2 && !isMac) {\n\t\t\t\t\tcontainer.scrollBy(0, getStyleValue(container, \"lineHeight\") * (i ? 1 : -1))\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\taddTextareaListener(editor, \"keydown\", e => {\n\t\t\tconst code = getModifierCode(e)\n\t\t\tconst keyCode = e.keyCode\n\t\t\tconst [start, end, dir] = getSelection()\n\n\t\t\tif (code == mod && (keyCode == 221 || keyCode == 219)) {\n\t\t\t\tindent(keyCode == 219, ...getLines(editor.value, start, end), start, end, ...getIndent())\n\t\t\t\tscroll()\n\t\t\t\tpreventDefault(e)\n\t\t\t} else if (code == (isMac ? 0b1010 : 0b0010) && keyCode == 77) {\n\t\t\t\tsetIgnoreTab(!ignoreTab)\n\t\t\t\tpreventDefault(e)\n\t\t\t} else if ((keyCode == 191 && code == mod) || (keyCode == 65 && code == 9)) {\n\t\t\t\tconst value = editor.value\n\t\t\t\tconst isBlock = code == 9\n\t\t\t\tconst position = isBlock ? start : getLineStart(value, start)\n\t\t\t\tconst language = languageMap[getLanguage(editor, position)] || {}\n\t\t\t\tconst { line, block } =\n\t\t\t\t\tlanguage.getComments?.(editor, position, value) || language.comments || {}\n\t\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\t\tconst last = lines.length - 1\n\n\t\t\t\tif (isBlock) {\n\t\t\t\t\tif (block) {\n\t\t\t\t\t\tconst [open, close] = block\n\t\t\t\t\t\tconst text = value.slice(start, end)\n\t\t\t\t\t\tconst pos = value.slice(0, start).search(regexEscape(open) + \" ?$\")\n\n\t\t\t\t\t\tif (pos + 1 && RegExp(\"^ ?\" + regexEscape(close)).test(value.slice(end)))\n\t\t\t\t\t\t\tinsertText(\n\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\tend + <any>(value[end] == \" \") + close.length,\n\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\tpos + end - start,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tinsertText(\n\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\t`${open} ${text} ${close}`,\n\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t\tstart + open.length + 1,\n\t\t\t\t\t\t\t\tend + open.length + 1,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tscroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (line) {\n\t\t\t\t\t\tconst escaped = regexEscape(line)\n\t\t\t\t\t\tconst regex = RegExp(`^\\\\s*(${escaped} ?|$)`)\n\t\t\t\t\t\tconst regex2 = RegExp(escaped + \" ?\")\n\t\t\t\t\t\tconst allWhiteSpace = !/\\S/.test(value.slice(start1, end1))\n\t\t\t\t\t\tconst newLines = lines.map(\n\t\t\t\t\t\t\t!allWhiteSpace && lines.every(line => regex.test(line))\n\t\t\t\t\t\t\t\t? str => str.replace(regex2, \"\")\n\t\t\t\t\t\t\t\t: str =>\n\t\t\t\t\t\t\t\t\t\tallWhiteSpace || /\\S/.test(str) ? str.replace(/(?!\\s)/, line + \" \") : str,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tinsertLines(lines, newLines, start1, end1, start, end)\n\t\t\t\t\t\tscroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t} else if (block) {\n\t\t\t\t\t\tconst [open, close] = block\n\t\t\t\t\t\tconst first = lines[0]\n\t\t\t\t\t\tconst insertionPoint = whitespaceEnd(first)\n\t\t\t\t\t\tconst hasComment = first.startsWith(open, insertionPoint) && lines[last].endsWith(close)\n\n\t\t\t\t\t\tlines[0] = first.replace(\n\t\t\t\t\t\t\thasComment ? RegExp(regexEscape(open) + \" ?\") : /(?!\\s)/,\n\t\t\t\t\t\t\thasComment ? \"\" : open + \" \",\n\t\t\t\t\t\t)\n\t\t\t\t\t\tlet diff = lines[0].length - first.length\n\t\t\t\t\t\tlines[last] = hasComment\n\t\t\t\t\t\t\t? lines[last].replace(RegExp(` ?${regexEscape(close)}$`), \"\")\n\t\t\t\t\t\t\t: lines[last] + \" \" + close\n\n\t\t\t\t\t\tlet newText = lines.join(\"\\n\")\n\t\t\t\t\t\tlet firstInsersion = insertionPoint + start1\n\t\t\t\t\t\tlet newStart = firstInsersion > start ? start : Math.max(start + diff, firstInsersion)\n\t\t\t\t\t\tlet newEnd =\n\t\t\t\t\t\t\tfirstInsersion > end - <any>(start != end)\n\t\t\t\t\t\t\t\t? end\n\t\t\t\t\t\t\t\t: Math.min(Math.max(firstInsersion, end + diff), start1 + newText.length)\n\t\t\t\t\t\tinsertText(editor, newText, start1, end1, newStart, Math.max(newStart, newEnd))\n\t\t\t\t\t\tscroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (code == 8 + mod && keyCode == 75) {\n\t\t\t\tconst value = editor.value\n\t\t\t\tconst [lines, start1, end1] = getLines(value, start, end)\n\t\t\t\tconst column = dir > \"f\" ? end - end1 + lines.pop()!.length : start - start1\n\t\t\t\tconst newLineLen = getLineEnd(value, end1 + 1) - end1 - 1\n\t\t\t\tinsertText(\n\t\t\t\t\teditor,\n\t\t\t\t\t\"\",\n\t\t\t\t\tstart1 - <any>!!start1,\n\t\t\t\t\tend1 + <any>!start1,\n\t\t\t\t\tstart1 + Math.min(column, newLineLen),\n\t\t\t\t)\n\t\t\t\tscroll()\n\t\t\t\tpreventDefault(e)\n\t\t\t}\n\t\t})\n\t\t;([\"copy\", \"cut\", \"paste\"] as const).forEach(type =>\n\t\t\taddTextareaListener(editor, type, e => {\n\t\t\t\tconst [start, end] = getSelection()\n\t\t\t\tif (start == end && clipboard) {\n\t\t\t\t\tconst [[line], start1, end1] = getLines(editor.value, start, end)\n\t\t\t\t\tif (type == \"paste\") {\n\t\t\t\t\t\tif (e.clipboardData!.getData(\"text/plain\") == prevCopy) {\n\t\t\t\t\t\t\tinsertText(editor, prevCopy + \"\\n\", start1, start1, start + prevCopy.length + 1)\n\t\t\t\t\t\t\tscroll()\n\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclipboard.writeText((prevCopy = line))\n\t\t\t\t\t\tif (type == \"cut\") insertText(editor, \"\", start1, end1 + 1), scroll()\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n\nexport { defaultCommands }\n","import { isMac } from \"../../utils/index.js\"\nimport { autoComplete } from \"../autocomplete/tooltip.js\"\nimport { searchWidget } from \"../search/widget.js\"\nimport { defaultKeymap } from \"./commands.js\"\nimport { normalizeKey } from \"./utils.js\"\n\nconst macModifiers: Record<number, string> = {\n\t2: \"⌃\",\n\t1: \"⌥\",\n\t8: \"⇧\",\n\t4: \"⌘\",\n}\n\nconst winModifiers: Record<number, string> = {\n\t2: \"Ctrl\",\n\t1: \"Alt\",\n\t8: \"Shift\",\n\t4: \"Win\",\n}\n\nconst keyDisplay: Record<string, string | undefined> = {\n\tarrowdown: \"↓\",\n\tarrowleft: \"←\",\n\tarrowright: \"→\",\n\tarrowup: \"↑\",\n\tdelete: \"Del\",\n\tescape: \"Esc\",\n\tpagedown: \"PageDown\",\n\tpageup: \"PageUp\",\n\t\" \": \"Space\",\n}\n\n/**\n * Utility that formats a hotkey to display in a user interface. Modifier keys use symbols\n * on Mac and labels otherwise.\n *\n * @param hotkey Hotkey to format for display.\n * @param separator String to join the segments together with. Defaults to `\" \"` on Mac\n * and `\"+\"` otherwise.\n * @returns Formatted key for display.\n *\n * @example\n * // On Mac\n * formatHotkey(\"mod+s\") // \"⌘ S\"\n * formatHotkey(\"12+escape\") // \"⇧ ⌘ Esc\"\n * formatHotkey(\"arrowup\") // \"↑\"\n *\n * // On Windows/Linux\n * formatHotkey(\"mod+s\") // \"Ctrl+S\"\n * formatHotkey(\"12+escape\") // \"Shift+Win+Esc\"\n * formatHotkey(\"arrowup\") // \"↑\"\n */\nconst formatHotkey = (hotkey: string, separator = isMac ? \" \" : \"+\") => {\n\tconst [code, key] = normalizeKey(hotkey).split(\"+\")\n\tconst result: string[] = []\n\tconst modifiers = isMac ? macModifiers : winModifiers\n\n\tfor (let c in modifiers) {\n\t\tif (+code & +c) result.push(modifiers[c])\n\t}\n\n\tresult.push(key ? keyDisplay[key] || key[0].toUpperCase() + key.slice(1) : \"+\")\n\n\treturn result.join(separator)\n}\n\n/**\n * Array of keyboard shortcuts and descriptions for {@link defaultKeymap}. Useful for\n * documenting key bindings to users. It consists of tuples containing two string each\n * where the first string is the key binding and the second is the description.\n *\n * @example\n * for (const [key, description] of defaultKeymapLabels) {\n * console.log(formatHotkey(key), description)\n * }\n */\nconst defaultKeymapLabels: [string, string][] = [\n\t[\"1+ArrowDown\", \"Move lines down\"],\n\t[\"1+ArrowUp\", \"Move lines up\"],\n\t[\"9+ArrowDown\", \"Copy lines down\"],\n\t[\"9+ArrowUp\", \"Copy lines up\"],\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Down`, \"Scroll one line down\"],\n\t[`2+${isMac ? \"Page\" : \"Arrow\"}Up`, \"Scroll one line up\"],\n\t[\"Enter\", \"Insert line and indent\"],\n\t[\"Mod+Enter\", \"Insert blank line\"],\n\t[\"Mod+]\", \"Indent lines\"],\n\t[\"Mod+[\", \"Outdent lines\"],\n\t[\"8+Mod+k\", \"Delete lines\"],\n\t[\"Mod+/\", \"Toggle line comment\"],\n\t[\"9+a\", \"Toggle block comment\"],\n\t[isMac ? \"10+m\" : \"2+m\", \"Toggle tab capturing\"],\n\t[\"Tab\", \"Indent lines\"],\n\t[\"8+Tab\", \"Outdent lines\"],\n]\n\n/**\n * Array of keyboard shortcuts and descriptions for the {@link autoComplete} extension.\n * Useful for documenting key bindings to users. It consists of tuples containing two\n * string each where the first string is the key binding and the second is the description.\n *\n * @example\n * for (const [key, description] of autoCompleteShortcutLabels) {\n * console.log(formatHotkey(key), description)\n * }\n */\nconst autoCompleteShortcutLabels: [string, string][] = [\n\t[\"2+ \", \"Trigger suggestion\"],\n\t[\"mod+i\", \"Trigger suggestion\"],\n\t...(isMac ? ([[\"1+Escape\", \"Trigger suggestion\"]] satisfies [string, string][]) : []),\n\t[\"2+ \", \"Toggle suggestion documentation\"],\n\t[\"mod+i\", \"Toggle suggestion documentation\"],\n\t[\"Tab\", \"Insert suggestion\"],\n\t[\"Enter\", \"Insert suggestion\"],\n\t[\"Escape\", \"Close completion widget\"],\n\t[\"Escape\", \"Clear tab stops\"],\n\t[\"Tab\", \"Select next tab stop\"],\n\t[\"8+Tab\", \"Select previous tab stop\"],\n\t[\"ArrowUp\", \"Select previous suggestion\"],\n\t[\"ArrowDown\", \"Select next suggestion\"],\n\t[\"PageUp\", \"Select first visible suggestion\"],\n\t[\"PageDown\", \"Select last visible suggestion\"],\n]\n\nconst modifiers = isMac ? 5 : 1\n\n/**\n * Array of keyboard shortcuts and descriptions for the {@link searchWidget} extension.\n * Useful for documenting key bindings to users. It consists of tuples containing two\n * string each where the first string is the key binding and the second is the description.\n *\n * @example\n * for (const [key, description] of searchShortcutLabels) {\n * console.log(formatHotkey(key), description)\n * }\n */\nconst searchShortcutLabels: [string, string][] = [\n\t[\"mod+f\", \"Start search\"],\n\t[\"mod+g\", \"Find next match\"],\n\t[\"mod+8+g\", \"Find previous match\"],\n\t[\"f3\", \"Find next match\"],\n\t[\"8+f3\", \"Find previous match\"],\n\t[\"Enter\", \"Select next match\"],\n\t[\"8+Enter\", \"Select previous match\"],\n\t[\"Escape\", \"Close search widget\"],\n\t[\"Enter\", \"Replace match\"],\n\t[`${isMac ? 4 : 3}+Enter`, \"Replace all matches\"],\n\t[modifiers + \"+r\", \"Toggle regex search\"],\n\t[modifiers + \"+p\", \"Toggle case preservation\"],\n\t[modifiers + \"+w\", \"Toggle whole word search\"],\n\t[modifiers + \"+l\", \"Toggle find in selection\"],\n]\n\nexport { formatHotkey, defaultKeymapLabels, autoCompleteShortcutLabels, searchShortcutLabels }\n","/** @module commands */\n\nimport { InputSelection, BasicExtension, PrismEditor } from \"../../index.js\"\nimport { preventDefault, languageMap } from \"../../core.js\"\nimport {\n\tgetLanguage,\n\tinsertText,\n\tgetLines,\n\tgetModifierCode,\n\tprevSelection,\n\tsetSelection,\n\tisMac,\n\tgetLineBefore,\n} from \"../../utils/index.js\"\nimport { addTextareaListener } from \"../../utils/local.js\"\nimport { EditHistory, EditorHotkey } from \"./types.js\"\nimport { mod, addEditorHotkey } from \"./utils.js\"\nimport { scroll } from \"./commands.js\"\n\n/**\n * Extension that will add automatic closing of brackets, quotes, and tags along\n * with the specified commands.\n *\n * @param hotkeyMap Commands that will be added to the editor.\n * @param selfClosePairs Pairs of self-closing brackets and quotes.\n * Must be an array of strings with 2 characters each.\n * Defaults to `['\"\"', \"''\", '``', '()', '[]', '{}']`.\n * @param selfCloseRegex Regex controlling whether or not a bracket/quote should\n * automatically close based on the character before and after the cursor.\n * Defaults to ``/([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s``.\n */\nconst editorCommands = (\n\thotkeyMap: Record<string, EditorHotkey>,\n\tselfClosePairs = ['\"\"', \"''\", \"``\", \"()\", \"[]\", \"{}\"],\n\tselfCloseRegex = /([^$\\w'\"`][\"'`]|.[[({])[.,:;\\])}>\\s]|.[[({]`/s,\n): BasicExtension => {\n\treturn (editor, options) => {\n\t\tlet prevCopy: string\n\t\tconst inputCommandMap = editor.inputCommandMap\n\t\tconst clipboard = navigator.clipboard\n\n\t\t/**\n\t\t * Automatically closes quotes and brackets if text is selected,\n\t\t * or if the character before and after the cursor matches a regex\n\t\t * @param wrapOnly If true, the character will only be closed if text is selected.\n\t\t */\n\t\tconst selfClose = (\n\t\t\t[start, end]: InputSelection,\n\t\t\t[open, close]: string,\n\t\t\tvalue: string,\n\t\t\twrapOnly?: boolean,\n\t\t) =>\n\t\t\t(start < end ||\n\t\t\t\t(!wrapOnly && selfCloseRegex.test((value[end - 1] || \" \") + open + (value[end] || \" \")))) &&\n\t\t\t!insertText(editor, open + value.slice(start, end) + close, null, null, start + 1, end + 1)!\n\n\t\tconst skipIfEqual = ([start, end]: InputSelection, char: string, value: string) =>\n\t\t\tstart == end && value[end] == char && !setSelection(editor, start + 1)!\n\n\t\tconst backspaceCommand = () => {\n\t\t\tconst [start, end] = editor.getSelection()\n\n\t\t\tif (start == end) {\n\t\t\t\tconst value = editor.value\n\t\t\t\tconst line = getLineBefore(value, start)\n\t\t\t\tconst tabSize = options.tabSize || 2\n\t\t\t\tconst isPair = selfClosePairs.includes(value.slice(start - 1, start + 1))\n\t\t\t\tconst indenationCount = /[^ ]/.test(line) ? 0 : ((line.length - 1) % tabSize) + 1\n\n\t\t\t\tif ((isPair || indenationCount > 1) && start == end) {\n\t\t\t\t\tinsertText(editor, \"\", start - (isPair ? 1 : indenationCount), start + <any>isPair)\n\t\t\t\t\treturn scroll(editor)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinputCommandMap[\"<\"] = (_e, selection, value) => selfClose(selection, \"<>\", value, true)\n\n\t\tselfClosePairs.forEach(([open, close]) => {\n\t\t\tconst isQuote = open == close\n\t\t\tinputCommandMap[open] = (_e, selection, value) =>\n\t\t\t\t((isQuote && skipIfEqual(selection, close, value)) ||\n\t\t\t\t\tselfClose(selection, open + close, value)) &&\n\t\t\t\tscroll(editor)\n\t\t\tif (!isQuote)\n\t\t\t\tinputCommandMap[close] = (_e, selection, value) =>\n\t\t\t\t\tskipIfEqual(selection, close, value) && scroll(editor)\n\t\t})\n\n\t\tinputCommandMap[\">\"] = (e, selection, value) => {\n\t\t\tconst closingTag = languageMap[getLanguage(editor)]?.autoCloseTags?.(selection, value, editor)\n\t\t\tif (closingTag) {\n\t\t\t\tinsertText(editor, \">\" + closingTag, null, null, selection[0] + 1)\n\t\t\t\tpreventDefault(e)\n\t\t\t}\n\t\t}\n\n\t\taddEditorHotkey(editor, \"Backspace\", backspaceCommand)\n\t\taddEditorHotkey(editor, \"8+Backspace\", backspaceCommand)\n\n\t\tfor (const key in hotkeyMap) {\n\t\t\taddEditorHotkey(editor, key, hotkeyMap[key])\n\t\t}\n\n\t\t;([\"copy\", \"cut\", \"paste\"] as const).forEach(type =>\n\t\t\taddTextareaListener(editor, type, e => {\n\t\t\t\tconst [start, end] = editor.getSelection()\n\t\t\t\tif (start == end && clipboard) {\n\t\t\t\t\tconst [[line], start1, end1] = getLines(editor.value, start, end)\n\t\t\t\t\tif (type == \"paste\") {\n\t\t\t\t\t\tif (e.clipboardData!.getData(\"text/plain\") == prevCopy) {\n\t\t\t\t\t\t\tinsertText(editor, prevCopy + \"\\n\", start1, start1, start + prevCopy.length + 1)\n\t\t\t\t\t\t\tscroll(editor)\n\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclipboard.writeText((prevCopy = line))\n\t\t\t\t\t\tif (type == \"cut\") insertText(editor, \"\", start1, end1 + 1), scroll(editor)\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n}\n\n/**\n * History extension that overrides the undo/redo behavior of the browser.\n *\n * Without this extension, the browser's native undo/redo is used, which can be sufficient\n * in some cases.\n *\n * Once added to an editor, this extension can be accessed from `editor.extensions.history`.\n *\n * If you want to create a new editor with different extensions while keeping the undo/redo\n * history of an old editor, you can! Just add the old editor's history extension instance\n * to the new editor. Keep in mind that this will fully break the undo/redo behavior of the\n * old editor.\n *\n * @param historyLimit The maximum size of the history stack. Defaults to 999.\n */\nconst editHistory = (historyLimit = 999) => {\n\tlet sp = 0\n\tlet currentEditor: PrismEditor\n\tlet allowMerge: boolean\n\tlet isTyping = false\n\tlet prevInputType: string\n\tlet prevData: string | null\n\tlet prevTime: number\n\tlet isMerge: boolean\n\tlet textarea: HTMLTextAreaElement\n\tlet getSelection: PrismEditor[\"getSelection\"]\n\n\tconst stack: [string, InputSelection, InputSelection][] = []\n\tconst update = (index: number) => {\n\t\tif (index >= historyLimit) {\n\t\t\tindex--\n\t\t\tstack.shift()\n\t\t}\n\t\tstack.splice((sp = index), historyLimit, [currentEditor.value, getSelection(), getSelection()])\n\t}\n\tconst setEditorState = (index: number) => {\n\t\tif (stack[index]) {\n\t\t\ttextarea.value = stack[index][0]\n\t\t\ttextarea.setSelectionRange(...stack[index][index < sp ? 2 : 1])\n\t\t\tcurrentEditor.update()\n\t\t\tcurrentEditor.extensions.cursor?.scrollIntoView()\n\t\t\tsp = index\n\t\t\tallowMerge = false\n\t\t}\n\t}\n\n\tconst self: EditHistory = (editor, options) => {\n\t\teditor.extensions.history = self\n\t\tcurrentEditor = editor\n\t\tgetSelection = editor.getSelection\n\t\ttextarea || update(0)\n\t\ttextarea = editor.textarea\n\n\t\teditor.on(\"selectionChange\", () => {\n\t\t\tallowMerge = isTyping\n\t\t\tisTyping = false\n\t\t})\n\n\t\taddTextareaListener(editor, \"beforeinput\", e => {\n\t\t\tlet data = e.data\n\t\t\tlet inputType = e.inputType\n\t\t\tlet time = e.timeStamp\n\n\t\t\tif (/history/.test(inputType)) {\n\t\t\t\tsetEditorState(sp + (inputType[7] == \"U\" ? -1 : 1))\n\t\t\t\tpreventDefault(e)\n\t\t\t} else if (\n\t\t\t\t!(isMerge =\n\t\t\t\t\tallowMerge &&\n\t\t\t\t\t(prevInputType == inputType || (time - prevTime < 99 && inputType.slice(-4) == \"Drop\")) &&\n\t\t\t\t\t!prevSelection &&\n\t\t\t\t\t(data != \" \" || prevData == data))\n\t\t\t) {\n\t\t\t\tstack[sp][2] = prevSelection || getSelection()\n\t\t\t}\n\t\t\tisTyping = true\n\t\t\tprevData = data\n\t\t\tprevTime = time\n\t\t\tprevInputType = inputType\n\t\t})\n\t\taddTextareaListener(editor, \"input\", () => update(sp + <any>!isMerge))\n\t\taddTextareaListener(editor, \"keydown\", e => {\n\t\t\tif (!options.readOnly) {\n\t\t\t\tconst code = getModifierCode(e)\n\t\t\t\tconst keyCode = e.keyCode\n\t\t\t\tconst isUndo = code == mod && keyCode == 90\n\t\t\t\tconst isRedo =\n\t\t\t\t\t(code == mod + 8 && keyCode == 90) || (!isMac && code == mod && keyCode == 89)\n\t\t\t\tif (isUndo) {\n\t\t\t\t\tsetEditorState(sp - 1)\n\t\t\t\t\tpreventDefault(e)\n\t\t\t\t} else if (isRedo) {\n\t\t\t\t\tsetEditorState(sp + 1)\n\t\t\t\t\tpreventDefault(e)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\teditor.addExtensions({\n\t\t\tupdate() {\n\t\t\t\tif (editor.value != textarea.value) reset()\n\t\t\t},\n\t\t})\n\t}\n\n\tconst reset = (self.clear = () => {\n\t\tupdate(0)\n\t\tallowMerge = false\n\t})\n\n\tself.has = offset => sp + offset in stack\n\tself.go = offset => setEditorState(sp + offset)\n\n\treturn self\n}\n\nexport { editorCommands, editHistory }\nexport {\n\tnormalizeKey,\n\tgetKeysFromEvent,\n\taddEditorHotkey,\n\taddHotkey,\n\taddEditorHotkeySequence,\n\taddHotkeySequence,\n\trunHotkeys,\n\tisModifierKey,\n} from \"./utils.js\"\nexport {\n\tindentSelectedLines,\n\tinsertTab,\n\tinsertLineAndIndent,\n\tmoveSelectedLines,\n\tcopySelectedLines,\n\tscrollByOneLine,\n\tdeleteSelectedLines,\n\ttoggleComment,\n\tsetIgnoreTab,\n\tdefaultKeymap,\n\tignoreTab,\n} from \"./commands.js\"\nexport * from \"./deprecated.js\"\nexport * from \"./types.js\"\nexport * from \"./format.js\"\n"],"mappings":"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"}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
//#region src/prism/core.js
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var rest = prismGlobal.rest || (prismGlobal.rest = Symbol.for("prism-code-editor.prism.rest"));
|
|
6
|
-
var tokenize = prismGlobal.tokenize || (prismGlobal.tokenize = Symbol.for("prism-code-editor.prism.tokenize"));
|
|
2
|
+
var plainTextGrammar = {};
|
|
3
|
+
var rest = Symbol();
|
|
4
|
+
var tokenize = Symbol();
|
|
7
5
|
/** @param {*} id */
|
|
8
6
|
var resolve = (id) => typeof id == "string" ? languages[id] : id;
|
|
9
7
|
/** @type {Record<string, any>} */
|
|
10
|
-
var languages =
|
|
8
|
+
var languages = {
|
|
11
9
|
plain: plainTextGrammar,
|
|
12
10
|
plaintext: plainTextGrammar,
|
|
13
11
|
text: plainTextGrammar,
|
|
14
12
|
txt: plainTextGrammar
|
|
15
|
-
}
|
|
13
|
+
};
|
|
16
14
|
/**
|
|
17
15
|
* @param {string} text
|
|
18
16
|
* @param {any} grammar
|
|
@@ -162,4 +160,4 @@ function Token(type, content, matchedStr, alias) {
|
|
|
162
160
|
//#endregion
|
|
163
161
|
export { languages as a, tokenize as c, highlightTokens as i, tokenizeText as l, escapeHtml as n, resolve as o, highlightText as r, rest as s, Token as t, withoutTokenizer as u };
|
|
164
162
|
|
|
165
|
-
//# sourceMappingURL=core-
|
|
163
|
+
//# sourceMappingURL=core-DpDyJ-7r.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-DpDyJ-7r.js","names":[],"sources":["../src/prism/core.js"],"sourcesContent":["// Slimmed down Prism core with most high level functions removed\n\nvar plainTextGrammar = {};\nvar rest = Symbol();\nvar tokenize = Symbol();\n\n/** @param {*} id */\nvar resolve = id => typeof id == 'string' ? languages[id] : id;\n\n/** @type {Record<string, any>} */\nvar languages = {\n\tplain: plainTextGrammar,\n\tplaintext: plainTextGrammar,\n\ttext: plainTextGrammar,\n\ttxt: plainTextGrammar,\n};\n\n/**\n * @param {string} text\n * @param {any} grammar\n */\nvar tokenizeText = (text, grammar) => (grammar[tokenize] || withoutTokenizer)(text, grammar);\n\n/**\n * @param {string} text\n * @param {any} grammar\n */\nvar withoutTokenizer = (text, grammar) => {\n\t/** @type {LinkedListNode} */\n\tvar startNode = [text];\n\tvar restGrammar;\n\t/** @type {(string | Token)[]} */\n\tvar array = [], i = 0;\n\twhile (restGrammar = resolve(grammar[rest])) {\n\t\tdelete grammar[rest];\n\t\tObject.assign(grammar, restGrammar);\n\t}\n\n\tmatchGrammar(text, grammar, startNode, 0);\n\n\twhile (array[i++] = startNode[0], startNode = startNode[1]);\n\treturn array;\n};\n\n/**\n * @param {string} string\n * @param {RegExp} pattern\n * @param {string} replacement\n */\nvar escapeHtml = (string, pattern, replacement) => {\n\treturn string.replace(/&/g, '&').replace(pattern, replacement);\n};\n\nvar closingTag = '</span>';\nvar openingTags = '';\nvar closingTags = '';\n\n/** @param {(string | Token)[]} tokens */\nvar highlightTokens = tokens => {\n\tvar str = '', token, i = 0;\n\twhile (token = tokens[i++]) str += stringify(token);\n\treturn str;\n};\n\n/**\n * @param {string | Token | (string | Token)[]} token\n * @returns {string}\n */\nvar stringify = token => {\n\tif (token instanceof Token) {\n\t\tvar { type, alias, content } = token;\n\t\tvar prevOpening = openingTags;\n\t\tvar prevClosing = closingTags;\n\t\tvar opening = `<span class=\"token ${\n\t\t\ttype + (alias ? ' ' + alias : '') +\n\t\t\t(type == 'keyword' && typeof content == 'string' ? ' keyword-' + content : '')\n\t\t}\">`;\n\n\t\tclosingTags += closingTag;\n\t\topeningTags += opening;\n\t\tvar contentStr = stringify(content);\n\t\topeningTags = prevOpening;\n\t\tclosingTags = prevClosing;\n\t\treturn opening + contentStr + closingTag;\n\t}\n\n\tif (typeof token != 'string') return highlightTokens(token);\n\n\ttoken = escapeHtml(token, /</g, '<');\n\tif (closingTags && token.includes('\\n')) {\n\t\treturn token.replace(/\\n/g, closingTags + '\\n' + openingTags);\n\t}\n\treturn token;\n};\n\n/**\n * @param {string} text\n * @param {*} ref\n */\nvar highlightText = (text, ref) => highlightTokens(tokenizeText(text, resolve(ref)));\n\n/**\n * @param {string} text\n * @param {any} grammar\n * @param {LinkedListNode} startNode\n * @param {number} startPos\n * @param {[string, number, number]} [rematch]\n *\n * @typedef {[string | Token, LinkedListNode?]} LinkedListNode\n */\nvar matchGrammar = (text, grammar, startNode, startPos, rematch) => {\n\tfor (var token in grammar) {\n\t\tif (grammar[token]) for (var j = 0, p = grammar[token], patternObj, patterns = Array.isArray(p) ? p : [p]; patternObj = patterns[j]; j++) {\n\t\t\tif (rematch && rematch[0] == token && rematch[1] == j) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/** @type {RegExp} */\n\t\t\tvar pattern = patternObj.pattern || patternObj;\n\t\t\tvar inside = resolve(patternObj.inside);\n\t\t\tvar lookbehind = patternObj.lookbehind;\n\t\t\tvar greedy = pattern.global;\n\t\t\tvar alias = patternObj.alias;\n\n\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\tvar currentNode = startNode, pos = startPos;\n\t\t\t\tcurrentNode && (!rematch || pos < rematch[2]);\n\t\t\t\tpos += currentNode[0].length, currentNode = currentNode[1]\n\t\t\t) {\n\t\t\t\tvar str = currentNode[0];\n\t\t\t\tvar removeCount = 0;\n\t\t\t\tvar match;\n\n\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tpattern.lastIndex = greedy ? pos : 0;\n\t\t\t\tmatch = pattern.exec(greedy ? text : str);\n\n\t\t\t\tif (!match && greedy) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!(match && match[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\t\tvar lookbehindLength = lookbehind && match[1] ? match[1].length : 0;\n\t\t\t\tvar from = match.index + lookbehindLength;\n\t\t\t\tvar matchStr = match[0].slice(lookbehindLength);\n\t\t\t\tvar to = from + matchStr.length;\n\t\t\t\tvar k, p;\n\n\t\t\t\tif (greedy) {\n\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\tfor (\n\t\t\t\t\t\t;\n\t\t\t\t\t\tp = pos + currentNode[0].length, from >= p;\n\t\t\t\t\t\tcurrentNode = currentNode[1], pos = p\n\t\t\t\t\t);\n\n\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\tif (currentNode[0] instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\tfor (\n\t\t\t\t\t\tk = currentNode, p = pos;\n\t\t\t\t\t\t(p += k[0].length) < to;\n\t\t\t\t\t\tk = k[1], removeCount++\n\t\t\t\t\t);\n\n\t\t\t\t\t// replace with the new match\n\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\tfrom -= pos;\n\t\t\t\t\tto -= pos;\n\t\t\t\t}\n\n\t\t\t\tvar after = str.slice(to);\n\t\t\t\tvar reach = pos + str.length;\n\t\t\t\tvar newToken = new Token(token, inside ? tokenizeText(matchStr, inside) : matchStr, matchStr, alias);\n\t\t\t\tvar next = currentNode, i = 0;\n\t\t\t\tvar nestedRematch;\n\n\t\t\t\twhile (next = next[1], i++ < removeCount);\n\n\t\t\t\tif (after) {\n\t\t\t\t\tif (!next || next[0] instanceof Token) next = [after, next];\n\t\t\t\t\telse next[0] = after + next[0];\n\t\t\t\t};\n\n\t\t\t\tpos += from;\n\t\t\t\tcurrentNode[0] = from ? str.slice(0, from) : newToken;\n\n\t\t\t\tif (from) currentNode = currentNode[1] = [newToken, next];\n\t\t\t\telse currentNode[1] = next;\n\n\t\t\t\tif (removeCount) {\n\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\tmatchGrammar(text, grammar, currentNode, pos, nestedRematch = [token, j, reach]);\n\t\t\t\t\treach = nestedRematch[2];\n\t\t\t\t}\n\n\t\t\t\tif (rematch && reach > rematch[2]) rematch[2] = reach;\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Creates a new token.\n *\n * @param {string} type\n * @param {string | any[]} content\n * @param {string} matchedStr\n * @param {string} alias\n * @class\n */\nfunction Token(type, content, matchedStr, alias) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\tthis.length = matchedStr.length;\n}\n\nexport {\n\trest,\n\ttokenize,\n\tToken,\n\tlanguages,\n\ttokenizeText,\n\twithoutTokenizer,\n\tresolve,\n\tescapeHtml,\n\thighlightTokens,\n\thighlightText\n};\n"],"mappings":";AAEA,IAAI,mBAAmB,CAAC;AACxB,IAAI,OAAO,OAAO;AAClB,IAAI,WAAW,OAAO;;AAGtB,IAAI,WAAU,OAAM,OAAO,MAAM,WAAW,UAAU,MAAM;;AAG5D,IAAI,YAAY;CACf,OAAO;CACP,WAAW;CACX,MAAM;CACN,KAAK;AACN;;;;;AAMA,IAAI,gBAAgB,MAAM,aAAa,QAAQ,aAAa,kBAAkB,MAAM,OAAO;;;;;AAM3F,IAAI,oBAAoB,MAAM,YAAY;;CAEzC,IAAI,YAAY,CAAC,IAAI;CACrB,IAAI;;CAEJ,IAAI,QAAQ,CAAC,GAAG,IAAI;CACpB,OAAO,cAAc,QAAQ,QAAQ,KAAK,GAAG;EAC5C,OAAO,QAAQ;EACf,OAAO,OAAO,SAAS,WAAW;CACnC;CAEA,aAAa,MAAM,SAAS,WAAW,CAAC;CAExC,OAAO,MAAM,OAAO,UAAU,IAAI,YAAY,UAAU;CACxD,OAAO;AACR;;;;;;AAOA,IAAI,cAAc,QAAQ,SAAS,gBAAgB;CAClD,OAAO,OAAO,QAAQ,MAAM,OAAO,EAAE,QAAQ,SAAS,WAAW;AAClE;AAEA,IAAI,aAAa;AACjB,IAAI,cAAc;AAClB,IAAI,cAAc;;AAGlB,IAAI,mBAAkB,WAAU;CAC/B,IAAI,MAAM,IAAI,OAAO,IAAI;CACzB,OAAO,QAAQ,OAAO,MAAM,OAAO,UAAU,KAAK;CAClD,OAAO;AACR;;;;;AAMA,IAAI,aAAY,UAAS;CACxB,IAAI,iBAAiB,OAAO;EAC3B,IAAI,EAAE,MAAM,OAAO,YAAY;EAC/B,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,IAAI,UAAU,sBACb,QAAQ,QAAQ,MAAM,QAAQ,OAC7B,QAAQ,aAAa,OAAO,WAAW,WAAW,cAAc,UAAU,IAC3E;EAED,eAAe;EACf,eAAe;EACf,IAAI,aAAa,UAAU,OAAO;EAClC,cAAc;EACd,cAAc;EACd,OAAO,UAAU,aAAa;CAC/B;CAEA,IAAI,OAAO,SAAS,UAAU,OAAO,gBAAgB,KAAK;CAE1D,QAAQ,WAAW,OAAO,MAAM,MAAM;CACtC,IAAI,eAAe,MAAM,SAAS,IAAI,GACrC,OAAO,MAAM,QAAQ,OAAO,cAAc,OAAO,WAAW;CAE7D,OAAO;AACR;;;;;AAMA,IAAI,iBAAiB,MAAM,QAAQ,gBAAgB,aAAa,MAAM,QAAQ,GAAG,CAAC,CAAC;;;;;;;;;;AAWnF,IAAI,gBAAgB,MAAM,SAAS,WAAW,UAAU,YAAY;CACnE,KAAK,IAAI,SAAS,SACjB,IAAI,QAAQ,QAAQ,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,YAAY,WAAW,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,aAAa,SAAS,IAAI,KAAK;EACzI,IAAI,WAAW,QAAQ,MAAM,SAAS,QAAQ,MAAM,GACnD;;EAID,IAAI,UAAU,WAAW,WAAW;EACpC,IAAI,SAAS,QAAQ,WAAW,MAAM;EACtC,IAAI,aAAa,WAAW;EAC5B,IAAI,SAAS,QAAQ;EACrB,IAAI,QAAQ,WAAW;EAEvB,KACC,IAAI,cAAc,WAAW,MAAM,UACnC,gBAAgB,CAAC,WAAW,MAAM,QAAQ,KAC1C,OAAO,YAAY,GAAG,QAAQ,cAAc,YAAY,IACvD;GACD,IAAI,MAAM,YAAY;GACtB,IAAI,cAAc;GAClB,IAAI;GAEJ,IAAI,eAAe,OAClB;GAGD,QAAQ,YAAY,SAAS,MAAM;GACnC,QAAQ,QAAQ,KAAK,SAAS,OAAO,GAAG;GAExC,IAAI,CAAC,SAAS,QACb;GAGD,IAAI,EAAE,SAAS,MAAM,KACpB;GAID,IAAI,mBAAmB,cAAc,MAAM,KAAK,MAAM,GAAG,SAAS;GAClE,IAAI,OAAO,MAAM,QAAQ;GACzB,IAAI,WAAW,MAAM,GAAG,MAAM,gBAAgB;GAC9C,IAAI,KAAK,OAAO,SAAS;GACzB,IAAI,GAAG;GAEP,IAAI,QAAQ;IAEX,OAEC,IAAI,MAAM,YAAY,GAAG,QAAQ,QAAQ,GACzC,cAAc,YAAY,IAAI,MAAM;IAIrC,IAAI,YAAY,cAAc,OAC7B;IAID,KACC,IAAI,aAAa,IAAI,MACpB,KAAK,EAAE,GAAG,UAAU,IACrB,IAAI,EAAE,IAAI;IAIX,MAAM,KAAK,MAAM,KAAK,CAAC;IACvB,QAAQ;IACR,MAAM;GACP;GAEA,IAAI,QAAQ,IAAI,MAAM,EAAE;GACxB,IAAI,QAAQ,MAAM,IAAI;GACtB,IAAI,WAAW,IAAI,MAAM,OAAO,SAAS,aAAa,UAAU,MAAM,IAAI,UAAU,UAAU,KAAK;GACnG,IAAI,OAAO,aAAa,IAAI;GAC5B,IAAI;GAEJ,OAAO,OAAO,KAAK,IAAI,MAAM;GAE7B,IAAI,OACH,IAAI,CAAC,QAAQ,KAAK,cAAc,OAAO,OAAO,CAAC,OAAO,IAAI;QACrD,KAAK,KAAK,QAAQ,KAAK;GAG7B,OAAO;GACP,YAAY,KAAK,OAAO,IAAI,MAAM,GAAG,IAAI,IAAI;GAE7C,IAAI,MAAM,cAAc,YAAY,KAAK,CAAC,UAAU,IAAI;QACnD,YAAY,KAAK;GAEtB,IAAI,aAAa;IAIhB,aAAa,MAAM,SAAS,aAAa,KAAK,gBAAgB;KAAC;KAAO;KAAG;IAAK,CAAC;IAC/E,QAAQ,cAAc;GACvB;GAEA,IAAI,WAAW,QAAQ,QAAQ,IAAI,QAAQ,KAAK;EACjD;CACD;AAEF;;;;;;;;;;AAWA,SAAS,MAAM,MAAM,SAAS,YAAY,OAAO;CAChD,KAAK,OAAO;CACZ,KAAK,UAAU;CACf,KAAK,QAAQ;CACb,KAAK,SAAS,WAAW;AAC1B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as languages, i as highlightTokens, l as tokenizeText } from "./core-
|
|
1
|
+
import { a as languages, i as highlightTokens, l as tokenizeText } from "./core-DpDyJ-7r.js";
|
|
2
2
|
//#region src/core.ts
|
|
3
3
|
/**
|
|
4
4
|
* Creates a code editor using the specified container and options.
|
|
@@ -213,7 +213,7 @@ var numLines = (str, start = 0, end = Infinity) => {
|
|
|
213
213
|
return count;
|
|
214
214
|
};
|
|
215
215
|
/** Object storing all language specific behavior. */
|
|
216
|
-
var languageMap =
|
|
216
|
+
var languageMap = {};
|
|
217
217
|
var editorTemplate = /* @__PURE__ */ createTemplate("<div><div class=pce-wrapper><div class=pce-overlays><textarea class=pce-textarea spellcheck=false autocapitalize=off autocomplete=off>");
|
|
218
218
|
var preventDefault = (e) => {
|
|
219
219
|
e.preventDefault();
|
|
@@ -225,4 +225,4 @@ if (doc) addListener(doc, "selectionchange", () => selectionChange?.());
|
|
|
225
225
|
//#endregion
|
|
226
226
|
export { editorFromPlaceholder as a, numLines as c, doc as i, preventDefault as l, createEditor as n, getElement as o, createTemplate as r, languageMap as s, addListener as t, setSelectionChange as u };
|
|
227
227
|
|
|
228
|
-
//# sourceMappingURL=core-
|
|
228
|
+
//# sourceMappingURL=core-fngiDtt5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-DhbpblAG.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type {\r\n\tEditorOptions,\r\n\tPrismEditor,\r\n\tKeyCommandCallback,\r\n\tLanguage,\r\n\tInputCommandCallback,\r\n\tEditorEventMap,\r\n\tInputSelection,\r\n\tEditorExtension,\r\n} from \"./types.js\"\r\nimport { highlightTokens, languages, tokenizeText, TokenStream } from \"./prism/index.js\"\r\n\r\n/**\r\n * Creates a code editor using the specified container and options.\r\n * @param container Element to append the editor to or a selector.\r\n * This can also be a `ShadowRoot` or `DocumentFragment` for example.\r\n * If omitted, you must manually append `editor.container` to the DOM.\r\n * @param options Options the editor is initialized with.\r\n * If omitted, the editor won't function until you call `editor.setOptions`.\r\n * @param extensions Extensions added before the first render. You can still add extensions later.\r\n * @returns Object to interact with the created editor.\r\n */\r\nconst createEditor = <T extends {} = {}>(\r\n\tcontainer?: ParentNode | string | null,\r\n\toptions?: (Partial<EditorOptions<T>> & Omit<T, keyof EditorOptions>) | null,\r\n\t...extensions: EditorExtension<T>[]\r\n): PrismEditor<T> => {\r\n\tlet language: string\r\n\tlet prevLines: string[] = []\r\n\tlet activeLine: HTMLDivElement\r\n\tlet value = \"\"\r\n\tlet activeLineNumber: number\r\n\tlet focused = false\r\n\tlet handleSelectionChange = true\r\n\tlet tokens: TokenStream = []\r\n\tlet readOnly: boolean\r\n\tlet lineCount = 0\r\n\r\n\tconst scrollContainer = editorTemplate()\r\n\tconst wrapper = <HTMLDivElement>scrollContainer.firstChild\r\n\tconst lines = <HTMLCollectionOf<HTMLDivElement>>wrapper.children\r\n\tconst overlays = lines[0]\r\n\tconst textarea = <HTMLTextAreaElement>overlays.firstChild\r\n\tconst currentOptions = { language: \"text\", value } as EditorOptions & T\r\n\tconst currentExtensions = new Set(extensions)\r\n\tconst listeners: {\r\n\t\t[P in keyof EditorEventMap]?: Set<EditorEventMap<T>[P]>\r\n\t} = {}\r\n\r\n\tconst setOptions = (options: Partial<EditorOptions> & Partial<Omit<T, keyof EditorOptions>>) => {\r\n\t\tObject.assign(currentOptions, options)\r\n\t\tlet isNewVal = value != (value = options.value ?? value)\r\n\t\tlet isNewLang = language != (language = currentOptions.language)\r\n\r\n\t\treadOnly = !!currentOptions.readOnly\r\n\t\tscrollContainer.style.tabSize = <any>currentOptions.tabSize || 2\r\n\t\ttextarea.inputMode = readOnly ? \"none\" : \"\"\r\n\t\ttextarea.setAttribute(\"aria-readonly\", <any>readOnly)\r\n\t\tupdateClassName()\r\n\t\tupdateExtensions()\r\n\r\n\t\tif (isNewVal) {\r\n\t\t\tif (!focused) textarea.remove()\r\n\t\t\ttextarea.value = value\r\n\t\t\ttextarea.selectionEnd = 0\r\n\t\t\tif (!focused) overlays.prepend(textarea)\r\n\t\t}\r\n\r\n\t\tif (isNewVal || isNewLang) {\r\n\t\t\tupdate()\r\n\t\t}\r\n\t}\r\n\r\n\tconst update = () => {\r\n\t\ttokens = tokenizeText((value = textarea.value), languages[language] || {})\r\n\t\tdispatchEvent(\"tokenize\", tokens, language, value)\r\n\r\n\t\tlet newLines = highlightTokens(tokens).split(\"\\n\")\r\n\t\tlet start = 0\r\n\t\tlet end2 = lineCount\r\n\t\tlet end1 = (lineCount = newLines.length)\r\n\r\n\t\twhile (newLines[start] == prevLines[start] && start < end1) ++start\r\n\t\twhile (end1 && newLines[--end1] == prevLines[--end2]);\r\n\r\n\t\tif (start == end1 && start == end2) lines[start + 1].innerHTML = newLines[start] + \"\\n\"\r\n\t\telse {\r\n\t\t\tlet insertStart = end2 < start ? end2 : start - 1\r\n\t\t\tlet i = insertStart\r\n\t\t\tlet newHTML = \"\"\r\n\r\n\t\t\twhile (i < end1) newHTML += `<div class=pce-line aria-hidden=true>${newLines[++i]}\\n</div>`\r\n\t\t\tfor (i = end1 < start ? end1 : start - 1; i < end2; i++) lines[start + 1].remove()\r\n\t\t\tif (newHTML) lines[insertStart + 1].insertAdjacentHTML(\"afterend\", newHTML)\r\n\t\t\tscrollContainer.style.setProperty(\r\n\t\t\t\t\"--number-width\",\r\n\t\t\t\t(0 | Math.log10(lineCount)) + 1 + \".001ch\",\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\tdispatchEvent(\"update\", value)\r\n\t\tdispatchSelection(true)\r\n\t\tif (handleSelectionChange) setTimeout(setTimeout, 0, () => (handleSelectionChange = true))\r\n\r\n\t\tprevLines = newLines\r\n\t\thandleSelectionChange = false\r\n\t}\r\n\r\n\tconst updateExtensions = (newExtensions?: EditorExtension<T>[]) => {\r\n\t\t;(newExtensions || currentExtensions).forEach(extension => {\r\n\t\t\tif (typeof extension == \"object\") {\r\n\t\t\t\textension.update(self, currentOptions)\r\n\t\t\t\tif (newExtensions) currentExtensions.add(extension)\r\n\t\t\t} else {\r\n\t\t\t\textension(self, currentOptions)\r\n\t\t\t\tif (!newExtensions) currentExtensions.delete(extension)\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tconst updateClassName = ([start, end] = getInputSelection()) => {\r\n\t\tscrollContainer.className = `prism-code-editor language-${language}${\r\n\t\t\tcurrentOptions.lineNumbers == false ? \"\" : \" show-line-numbers\"\r\n\t\t} pce-${currentOptions.wordWrap ? \"\" : \"no\"}wrap${currentOptions.rtl ? \" pce-rtl\" : \"\"} pce-${\r\n\t\t\tstart < end ? \"has\" : \"no\"\r\n\t\t}-selection${focused ? \" pce-focus\" : \"\"}${readOnly ? \" pce-readonly\" : \"\"}${\r\n\t\t\tcurrentOptions.class ? \" \" + currentOptions.class : \"\"\r\n\t\t}`\r\n\t}\r\n\r\n\tconst getInputSelection = (): InputSelection => [\r\n\t\ttextarea.selectionStart,\r\n\t\ttextarea.selectionEnd,\r\n\t\ttextarea.selectionDirection,\r\n\t]\r\n\r\n\tconst keyCommandMap: Record<string, KeyCommandCallback | null> = {\r\n\t\tEscape() {\r\n\t\t\ttextarea.blur()\r\n\t\t},\r\n\t}\r\n\r\n\tconst inputCommandMap: Record<string, InputCommandCallback | null> = {}\r\n\r\n\tconst dispatchEvent = <T extends keyof EditorEventMap>(\r\n\t\tname: T,\r\n\t\t...args: Parameters<EditorEventMap[T]>\r\n\t) => {\r\n\t\t// @ts-expect-error\r\n\t\tlisteners[name]?.forEach(handler => handler.apply(self, args))\r\n\t\t// @ts-expect-error\r\n\t\tcurrentOptions[\"on\" + name[0].toUpperCase() + name.slice(1)]?.(...args, self)\r\n\t}\r\n\r\n\tconst dispatchSelection = (force?: boolean) => {\r\n\t\tif (force || handleSelectionChange) {\r\n\t\t\tconst selection = getInputSelection()\r\n\t\t\tconst newLine =\r\n\t\t\t\tlines[(activeLineNumber = numLines(value, 0, selection[selection[2] < \"f\" ? 0 : 1]))]\r\n\r\n\t\t\tif (newLine != activeLine) {\r\n\t\t\t\tactiveLine?.classList.remove(\"active-line\")\r\n\t\t\t\tnewLine.classList.add(\"active-line\")\r\n\t\t\t\tactiveLine = newLine\r\n\t\t\t}\r\n\t\t\tupdateClassName(selection)\r\n\t\t\tdispatchEvent(\"selectionChange\", selection, value)\r\n\t\t}\r\n\t}\r\n\r\n\tconst self: PrismEditor<T> = {\r\n\t\tcontainer: scrollContainer,\r\n\t\twrapper,\r\n\t\tlines,\r\n\t\ttextarea,\r\n\t\tget activeLine() {\r\n\t\t\treturn activeLineNumber\r\n\t\t},\r\n\t\tget value() {\r\n\t\t\treturn value\r\n\t\t},\r\n\t\toptions: currentOptions,\r\n\t\tget focused() {\r\n\t\t\treturn focused\r\n\t\t},\r\n\t\tget tokens() {\r\n\t\t\treturn tokens\r\n\t\t},\r\n\t\tinputCommandMap,\r\n\t\tkeyCommandMap,\r\n\t\textensions: {},\r\n\t\tsetOptions,\r\n\t\tupdate,\r\n\t\tgetSelection: getInputSelection,\r\n\t\taddExtensions(...extensions) {\r\n\t\t\tupdateExtensions(extensions)\r\n\t\t},\r\n\t\ton: (name, handler) => {\r\n\t\t\t;(listeners[name] ||= new Set<any>()).add(handler)\r\n\t\t\treturn () => listeners[name]!.delete(handler)\r\n\t\t},\r\n\t\tremove() {\r\n\t\t\tscrollContainer.remove()\r\n\t\t},\r\n\t}\r\n\r\n\taddListener(textarea, \"keydown\", e => {\r\n\t\tkeyCommandMap[e.key]?.(e, getInputSelection(), value) && preventDefault(e)\r\n\t})\r\n\r\n\taddListener(textarea, \"beforeinput\", e => {\r\n\t\tif (\r\n\t\t\treadOnly ||\r\n\t\t\t(e.inputType == \"insertText\" && inputCommandMap[e.data!]?.(e, getInputSelection(), value))\r\n\t\t)\r\n\t\t\tpreventDefault(e)\r\n\t})\r\n\taddListener(textarea, \"input\", update)\r\n\taddListener(textarea, \"blur\", () => {\r\n\t\tselectionChange = null\r\n\t\tfocused = false\r\n\t\tupdateClassName()\r\n\t})\r\n\taddListener(textarea, \"focus\", () => {\r\n\t\tselectionChange = dispatchSelection\r\n\t\tfocused = true\r\n\t\tupdateClassName()\r\n\t})\r\n\t// For browsers that support selectionchange on textareas\r\n\taddListener(textarea, \"selectionchange\", e => {\r\n\t\tdispatchSelection(!e.isTrusted)\r\n\t\tpreventDefault(e)\r\n\t})\r\n\r\n\tgetElement(container)?.append(scrollContainer)\r\n\toptions && setOptions(options)\r\n\treturn self\r\n}\r\n\r\n/**\r\n * Almost identical to {@link createEditor}, but instead of appending the editor to your\r\n * element, the editor replaces it.\r\n *\r\n * The `textContent` of the placeholder will be the code in the editor unless `options.value` is defined.\r\n * @param placeholder Node or selector which will be replaced by the editor.\r\n * @param options Options the editor is initialized with.\r\n * @param extensions Extensions added before the first render. You can still add extensions later.\r\n * @returns Object to interact with the created editor.\r\n */\r\nconst editorFromPlaceholder = <T extends {} = {}>(\r\n\tplaceholder: string | ChildNode,\r\n\toptions: Partial<EditorOptions<T>> & Omit<T, keyof EditorOptions>,\r\n\t...extensions: EditorExtension<T>[]\r\n) => {\r\n\tconst el = getElement(placeholder)!\r\n\tconst editor = createEditor<T>(\r\n\t\tnull,\r\n\t\tObject.assign({ value: el.textContent }, options),\r\n\t\t...extensions,\r\n\t)\r\n\tel.replaceWith(editor.container)\r\n\treturn editor\r\n}\r\n\r\n/** Equivalent to `document` in a browser setting, `null` otherwise. */\r\nconst doc = \"u\" > typeof window ? document : null\r\n\r\nconst templateEl = /* @__PURE__ */ doc?.createElement(\"div\")\r\n\r\nconst createTemplate = <T extends Element = HTMLDivElement>(html: string, node?: Node) => {\r\n\tif (templateEl) {\r\n\t\ttemplateEl.innerHTML = html\r\n\t\tnode = templateEl.firstChild!\r\n\t}\r\n\treturn () => <T>node!.cloneNode(true)\r\n}\r\n\r\nconst addListener = <T extends keyof HTMLElementEventMap>(\r\n\ttarget: HTMLElement,\r\n\ttype: T,\r\n\tlistener: (this: HTMLElement, ev: HTMLElementEventMap[T]) => any,\r\n\toptions?: boolean | AddEventListenerOptions,\r\n) => target.addEventListener(type, listener, options)\r\n\r\nconst getElement = <T extends Node>(el?: T | string | null) =>\r\n\ttypeof el == \"string\" ? doc!.querySelector<HTMLElement>(el) : el\r\n\r\n/**\r\n * Counts number of lines in the string between `start` and `end`.\r\n * If start and end are omitted, the whole string is searched.\r\n */\r\nconst numLines = (str: string, start = 0, end = Infinity) => {\r\n\tlet count = 1\r\n\tfor (; (start = str.indexOf(\"\\n\", start) + 1) && start <= end; count++);\r\n\treturn count\r\n}\r\n\r\n/** Object storing all language specific behavior. */\r\nconst languageMap: Record<string, Language> =\r\n\t((globalThis as any)[Symbol.for(\"prism-code-editor.languageMap\")] ||= {})\r\n\r\nconst editorTemplate = /* @__PURE__ */ createTemplate(\r\n\t\"<div><div class=pce-wrapper><div class=pce-overlays><textarea class=pce-textarea spellcheck=false autocapitalize=off autocomplete=off>\",\r\n)\r\n\r\nconst preventDefault = (e: Event) => {\r\n\te.preventDefault()\r\n\te.stopImmediatePropagation()\r\n}\r\n\r\nconst setSelectionChange = (f?: (force?: boolean) => void) => (selectionChange = f)\r\n\r\nlet selectionChange: null | undefined | ((force?: boolean) => void)\r\n\r\n// @ts-expect-error Allow adding listener to document\r\nif (doc) addListener(doc, \"selectionchange\", () => selectionChange?.())\r\n\r\nexport {\r\n\tcreateEditor,\r\n\tlanguageMap,\r\n\tnumLines,\r\n\tcreateTemplate,\r\n\tgetElement,\r\n\tpreventDefault,\r\n\teditorFromPlaceholder,\r\n\taddListener,\r\n\tsetSelectionChange,\r\n\tdoc,\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAsBA,IAAM,gBACL,WACA,SACA,GAAG,eACiB;CACpB,IAAI;CACJ,IAAI,YAAsB,CAAC;CAC3B,IAAI;CACJ,IAAI,QAAQ;CACZ,IAAI;CACJ,IAAI,UAAU;CACd,IAAI,wBAAwB;CAC5B,IAAI,SAAsB,CAAC;CAC3B,IAAI;CACJ,IAAI,YAAY;CAEhB,MAAM,kBAAkB,eAAe;CACvC,MAAM,UAA0B,gBAAgB;CAChD,MAAM,QAA0C,QAAQ;CACxD,MAAM,WAAW,MAAM;CACvB,MAAM,WAAgC,SAAS;CAC/C,MAAM,iBAAiB;EAAE,UAAU;EAAQ;CAAM;CACjD,MAAM,oBAAoB,IAAI,IAAI,UAAU;CAC5C,MAAM,YAEF,CAAC;CAEL,MAAM,cAAc,YAA4E;EAC/F,OAAO,OAAO,gBAAgB,OAAO;EACrC,IAAI,WAAW,UAAU,QAAQ,QAAQ,SAAS;EAClD,IAAI,YAAY,aAAa,WAAW,eAAe;EAEvD,WAAW,CAAC,CAAC,eAAe;EAC5B,gBAAgB,MAAM,UAAe,eAAe,WAAW;EAC/D,SAAS,YAAY,WAAW,SAAS;EACzC,SAAS,aAAa,iBAAsB,QAAQ;EACpD,gBAAgB;EAChB,iBAAiB;EAEjB,IAAI,UAAU;GACb,IAAI,CAAC,SAAS,SAAS,OAAO;GAC9B,SAAS,QAAQ;GACjB,SAAS,eAAe;GACxB,IAAI,CAAC,SAAS,SAAS,QAAQ,QAAQ;EACxC;EAEA,IAAI,YAAY,WACf,OAAO;CAET;CAEA,MAAM,eAAe;EACpB,SAAS,aAAc,QAAQ,SAAS,OAAQ,UAAU,aAAa,CAAC,CAAC;EACzE,cAAc,YAAY,QAAQ,UAAU,KAAK;EAEjD,IAAI,WAAW,gBAAgB,MAAM,EAAE,MAAM,IAAI;EACjD,IAAI,QAAQ;EACZ,IAAI,OAAO;EACX,IAAI,OAAQ,YAAY,SAAS;EAEjC,OAAO,SAAS,UAAU,UAAU,UAAU,QAAQ,MAAM,EAAE;EAC9D,OAAO,QAAQ,SAAS,EAAE,SAAS,UAAU,EAAE;EAE/C,IAAI,SAAS,QAAQ,SAAS,MAAM,MAAM,QAAQ,GAAG,YAAY,SAAS,SAAS;OAC9E;GACJ,IAAI,cAAc,OAAO,QAAQ,OAAO,QAAQ;GAChD,IAAI,IAAI;GACR,IAAI,UAAU;GAEd,OAAO,IAAI,MAAM,WAAW,wCAAwC,SAAS,EAAE,GAAG;GAClF,KAAK,IAAI,OAAO,QAAQ,OAAO,QAAQ,GAAG,IAAI,MAAM,KAAK,MAAM,QAAQ,GAAG,OAAO;GACjF,IAAI,SAAS,MAAM,cAAc,GAAG,mBAAmB,YAAY,OAAO;GAC1E,gBAAgB,MAAM,YACrB,mBACC,IAAI,KAAK,MAAM,SAAS,KAAK,IAAI,QACnC;EACD;EAEA,cAAc,UAAU,KAAK;EAC7B,kBAAkB,IAAI;EACtB,IAAI,uBAAuB,WAAW,YAAY,SAAU,wBAAwB,IAAK;EAEzF,YAAY;EACZ,wBAAwB;CACzB;CAEA,MAAM,oBAAoB,kBAAyC;EACjE,CAAC,iBAAiB,mBAAmB,SAAQ,cAAa;GAC1D,IAAI,OAAO,aAAa,UAAU;IACjC,UAAU,OAAO,MAAM,cAAc;IACrC,IAAI,eAAe,kBAAkB,IAAI,SAAS;GACnD,OAAO;IACN,UAAU,MAAM,cAAc;IAC9B,IAAI,CAAC,eAAe,kBAAkB,OAAO,SAAS;GACvD;EACD,CAAC;CACF;CAEA,MAAM,mBAAmB,CAAC,OAAO,OAAO,kBAAkB,MAAM;EAC/D,gBAAgB,YAAY,8BAA8B,WACzD,eAAe,eAAe,QAAQ,KAAK,qBAC3C,OAAO,eAAe,WAAW,KAAK,KAAK,MAAM,eAAe,MAAM,aAAa,GAAG,OACtF,QAAQ,MAAM,QAAQ,KACtB,YAAY,UAAU,eAAe,KAAK,WAAW,kBAAkB,KACvE,eAAe,QAAQ,MAAM,eAAe,QAAQ;CAEtD;CAEA,MAAM,0BAA0C;EAC/C,SAAS;EACT,SAAS;EACT,SAAS;CACV;CAEA,MAAM,gBAA2D,EAChE,SAAS;EACR,SAAS,KAAK;CACf,EACD;CAEA,MAAM,kBAA+D,CAAC;CAEtE,MAAM,iBACL,MACA,GAAG,SACC;EAEJ,UAAU,OAAO,SAAQ,YAAW,QAAQ,MAAM,MAAM,IAAI,CAAC;EAE7D,eAAe,OAAO,KAAK,GAAG,YAAY,IAAI,KAAK,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI;CAC7E;CAEA,MAAM,qBAAqB,UAAoB;EAC9C,IAAI,SAAS,uBAAuB;GACnC,MAAM,YAAY,kBAAkB;GACpC,MAAM,UACL,MAAO,mBAAmB,SAAS,OAAO,GAAG,UAAU,UAAU,KAAK,MAAM,IAAI,EAAE;GAEnF,IAAI,WAAW,YAAY;IAC1B,YAAY,UAAU,OAAO,aAAa;IAC1C,QAAQ,UAAU,IAAI,aAAa;IACnC,aAAa;GACd;GACA,gBAAgB,SAAS;GACzB,cAAc,mBAAmB,WAAW,KAAK;EAClD;CACD;CAEA,MAAM,OAAuB;EAC5B,WAAW;EACX;EACA;EACA;EACA,IAAI,aAAa;GAChB,OAAO;EACR;EACA,IAAI,QAAQ;GACX,OAAO;EACR;EACA,SAAS;EACT,IAAI,UAAU;GACb,OAAO;EACR;EACA,IAAI,SAAS;GACZ,OAAO;EACR;EACA;EACA;EACA,YAAY,CAAC;EACb;EACA;EACA,cAAc;EACd,cAAc,GAAG,YAAY;GAC5B,iBAAiB,UAAU;EAC5B;EACA,KAAK,MAAM,YAAY;GACrB,CAAC,UAAU,0BAAU,IAAI,IAAS,GAAG,IAAI,OAAO;GACjD,aAAa,UAAU,MAAO,OAAO,OAAO;EAC7C;EACA,SAAS;GACR,gBAAgB,OAAO;EACxB;CACD;CAEA,YAAY,UAAU,YAAW,MAAK;EACrC,cAAc,EAAE,OAAO,GAAG,kBAAkB,GAAG,KAAK,KAAK,eAAe,CAAC;CAC1E,CAAC;CAED,YAAY,UAAU,gBAAe,MAAK;EACzC,IACC,YACC,EAAE,aAAa,gBAAgB,gBAAgB,EAAE,QAAS,GAAG,kBAAkB,GAAG,KAAK,GAExF,eAAe,CAAC;CAClB,CAAC;CACD,YAAY,UAAU,SAAS,MAAM;CACrC,YAAY,UAAU,cAAc;EACnC,kBAAkB;EAClB,UAAU;EACV,gBAAgB;CACjB,CAAC;CACD,YAAY,UAAU,eAAe;EACpC,kBAAkB;EAClB,UAAU;EACV,gBAAgB;CACjB,CAAC;CAED,YAAY,UAAU,oBAAmB,MAAK;EAC7C,kBAAkB,CAAC,EAAE,SAAS;EAC9B,eAAe,CAAC;CACjB,CAAC;CAED,WAAW,SAAS,GAAG,OAAO,eAAe;CAC7C,WAAW,WAAW,OAAO;CAC7B,OAAO;AACR;;;;;;;;;;;AAYA,IAAM,yBACL,aACA,SACA,GAAG,eACC;CACJ,MAAM,KAAK,WAAW,WAAW;CACjC,MAAM,SAAS,aACd,MACA,OAAO,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,OAAO,GAChD,GAAG,UACJ;CACA,GAAG,YAAY,OAAO,SAAS;CAC/B,OAAO;AACR;;AAGA,IAAM,MAAM,MAAM,OAAO,SAAS,WAAW;AAE7C,IAAM,aAA6B,qBAAK,cAAc,KAAK;AAE3D,IAAM,kBAAsD,MAAc,SAAgB;CACzF,IAAI,YAAY;EACf,WAAW,YAAY;EACvB,OAAO,WAAW;CACnB;CACA,aAAgB,KAAM,UAAU,IAAI;AACrC;AAEA,IAAM,eACL,QACA,MACA,UACA,YACI,OAAO,iBAAiB,MAAM,UAAU,OAAO;AAEpD,IAAM,cAA8B,OACnC,OAAO,MAAM,WAAW,IAAK,cAA2B,EAAE,IAAI;;;;;AAM/D,IAAM,YAAY,KAAa,QAAQ,GAAG,MAAM,aAAa;CAC5D,IAAI,QAAQ;CACZ,QAAQ,QAAQ,IAAI,QAAQ,MAAM,KAAK,IAAI,MAAM,SAAS,KAAK;CAC/D,OAAO;AACR;;AAGA,IAAM,cACJ,WAAoB,OAAO,IAAI,+BAA+B,OAAO,CAAC;AAExE,IAAM,iBAAiC,+BACtC,wIACD;AAEA,IAAM,kBAAkB,MAAa;CACpC,EAAE,eAAe;CACjB,EAAE,yBAAyB;AAC5B;AAEA,IAAM,sBAAsB,MAAmC,kBAAkB;AAEjF,IAAI;AAGJ,IAAI,KAAK,YAAY,KAAK,yBAAyB,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"core-fngiDtt5.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type {\r\n\tEditorOptions,\r\n\tPrismEditor,\r\n\tKeyCommandCallback,\r\n\tLanguage,\r\n\tInputCommandCallback,\r\n\tEditorEventMap,\r\n\tInputSelection,\r\n\tEditorExtension,\r\n} from \"./types.js\"\r\nimport { highlightTokens, languages, tokenizeText, TokenStream } from \"./prism/index.js\"\r\n\r\n/**\r\n * Creates a code editor using the specified container and options.\r\n * @param container Element to append the editor to or a selector.\r\n * This can also be a `ShadowRoot` or `DocumentFragment` for example.\r\n * If omitted, you must manually append `editor.container` to the DOM.\r\n * @param options Options the editor is initialized with.\r\n * If omitted, the editor won't function until you call `editor.setOptions`.\r\n * @param extensions Extensions added before the first render. You can still add extensions later.\r\n * @returns Object to interact with the created editor.\r\n */\r\nconst createEditor = <T extends {} = {}>(\r\n\tcontainer?: ParentNode | string | null,\r\n\toptions?: (Partial<EditorOptions<T>> & Omit<T, keyof EditorOptions>) | null,\r\n\t...extensions: EditorExtension<T>[]\r\n): PrismEditor<T> => {\r\n\tlet language: string\r\n\tlet prevLines: string[] = []\r\n\tlet activeLine: HTMLDivElement\r\n\tlet value = \"\"\r\n\tlet activeLineNumber: number\r\n\tlet focused = false\r\n\tlet handleSelectionChange = true\r\n\tlet tokens: TokenStream = []\r\n\tlet readOnly: boolean\r\n\tlet lineCount = 0\r\n\r\n\tconst scrollContainer = editorTemplate()\r\n\tconst wrapper = <HTMLDivElement>scrollContainer.firstChild\r\n\tconst lines = <HTMLCollectionOf<HTMLDivElement>>wrapper.children\r\n\tconst overlays = lines[0]\r\n\tconst textarea = <HTMLTextAreaElement>overlays.firstChild\r\n\tconst currentOptions = { language: \"text\", value } as EditorOptions & T\r\n\tconst currentExtensions = new Set(extensions)\r\n\tconst listeners: {\r\n\t\t[P in keyof EditorEventMap]?: Set<EditorEventMap<T>[P]>\r\n\t} = {}\r\n\r\n\tconst setOptions = (options: Partial<EditorOptions> & Partial<Omit<T, keyof EditorOptions>>) => {\r\n\t\tObject.assign(currentOptions, options)\r\n\t\tlet isNewVal = value != (value = options.value ?? value)\r\n\t\tlet isNewLang = language != (language = currentOptions.language)\r\n\r\n\t\treadOnly = !!currentOptions.readOnly\r\n\t\tscrollContainer.style.tabSize = <any>currentOptions.tabSize || 2\r\n\t\ttextarea.inputMode = readOnly ? \"none\" : \"\"\r\n\t\ttextarea.setAttribute(\"aria-readonly\", <any>readOnly)\r\n\t\tupdateClassName()\r\n\t\tupdateExtensions()\r\n\r\n\t\tif (isNewVal) {\r\n\t\t\tif (!focused) textarea.remove()\r\n\t\t\ttextarea.value = value\r\n\t\t\ttextarea.selectionEnd = 0\r\n\t\t\tif (!focused) overlays.prepend(textarea)\r\n\t\t}\r\n\r\n\t\tif (isNewVal || isNewLang) {\r\n\t\t\tupdate()\r\n\t\t}\r\n\t}\r\n\r\n\tconst update = () => {\r\n\t\ttokens = tokenizeText((value = textarea.value), languages[language] || {})\r\n\t\tdispatchEvent(\"tokenize\", tokens, language, value)\r\n\r\n\t\tlet newLines = highlightTokens(tokens).split(\"\\n\")\r\n\t\tlet start = 0\r\n\t\tlet end2 = lineCount\r\n\t\tlet end1 = (lineCount = newLines.length)\r\n\r\n\t\twhile (newLines[start] == prevLines[start] && start < end1) ++start\r\n\t\twhile (end1 && newLines[--end1] == prevLines[--end2]);\r\n\r\n\t\tif (start == end1 && start == end2) lines[start + 1].innerHTML = newLines[start] + \"\\n\"\r\n\t\telse {\r\n\t\t\tlet insertStart = end2 < start ? end2 : start - 1\r\n\t\t\tlet i = insertStart\r\n\t\t\tlet newHTML = \"\"\r\n\r\n\t\t\twhile (i < end1) newHTML += `<div class=pce-line aria-hidden=true>${newLines[++i]}\\n</div>`\r\n\t\t\tfor (i = end1 < start ? end1 : start - 1; i < end2; i++) lines[start + 1].remove()\r\n\t\t\tif (newHTML) lines[insertStart + 1].insertAdjacentHTML(\"afterend\", newHTML)\r\n\t\t\tscrollContainer.style.setProperty(\r\n\t\t\t\t\"--number-width\",\r\n\t\t\t\t(0 | Math.log10(lineCount)) + 1 + \".001ch\",\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\tdispatchEvent(\"update\", value)\r\n\t\tdispatchSelection(true)\r\n\t\tif (handleSelectionChange) setTimeout(setTimeout, 0, () => (handleSelectionChange = true))\r\n\r\n\t\tprevLines = newLines\r\n\t\thandleSelectionChange = false\r\n\t}\r\n\r\n\tconst updateExtensions = (newExtensions?: EditorExtension<T>[]) => {\r\n\t\t;(newExtensions || currentExtensions).forEach(extension => {\r\n\t\t\tif (typeof extension == \"object\") {\r\n\t\t\t\textension.update(self, currentOptions)\r\n\t\t\t\tif (newExtensions) currentExtensions.add(extension)\r\n\t\t\t} else {\r\n\t\t\t\textension(self, currentOptions)\r\n\t\t\t\tif (!newExtensions) currentExtensions.delete(extension)\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tconst updateClassName = ([start, end] = getInputSelection()) => {\r\n\t\tscrollContainer.className = `prism-code-editor language-${language}${\r\n\t\t\tcurrentOptions.lineNumbers == false ? \"\" : \" show-line-numbers\"\r\n\t\t} pce-${currentOptions.wordWrap ? \"\" : \"no\"}wrap${currentOptions.rtl ? \" pce-rtl\" : \"\"} pce-${\r\n\t\t\tstart < end ? \"has\" : \"no\"\r\n\t\t}-selection${focused ? \" pce-focus\" : \"\"}${readOnly ? \" pce-readonly\" : \"\"}${\r\n\t\t\tcurrentOptions.class ? \" \" + currentOptions.class : \"\"\r\n\t\t}`\r\n\t}\r\n\r\n\tconst getInputSelection = (): InputSelection => [\r\n\t\ttextarea.selectionStart,\r\n\t\ttextarea.selectionEnd,\r\n\t\ttextarea.selectionDirection,\r\n\t]\r\n\r\n\tconst keyCommandMap: Record<string, KeyCommandCallback | null> = {\r\n\t\tEscape() {\r\n\t\t\ttextarea.blur()\r\n\t\t},\r\n\t}\r\n\r\n\tconst inputCommandMap: Record<string, InputCommandCallback | null> = {}\r\n\r\n\tconst dispatchEvent = <T extends keyof EditorEventMap>(\r\n\t\tname: T,\r\n\t\t...args: Parameters<EditorEventMap[T]>\r\n\t) => {\r\n\t\t// @ts-expect-error\r\n\t\tlisteners[name]?.forEach(handler => handler.apply(self, args))\r\n\t\t// @ts-expect-error\r\n\t\tcurrentOptions[\"on\" + name[0].toUpperCase() + name.slice(1)]?.(...args, self)\r\n\t}\r\n\r\n\tconst dispatchSelection = (force?: boolean) => {\r\n\t\tif (force || handleSelectionChange) {\r\n\t\t\tconst selection = getInputSelection()\r\n\t\t\tconst newLine =\r\n\t\t\t\tlines[(activeLineNumber = numLines(value, 0, selection[selection[2] < \"f\" ? 0 : 1]))]\r\n\r\n\t\t\tif (newLine != activeLine) {\r\n\t\t\t\tactiveLine?.classList.remove(\"active-line\")\r\n\t\t\t\tnewLine.classList.add(\"active-line\")\r\n\t\t\t\tactiveLine = newLine\r\n\t\t\t}\r\n\t\t\tupdateClassName(selection)\r\n\t\t\tdispatchEvent(\"selectionChange\", selection, value)\r\n\t\t}\r\n\t}\r\n\r\n\tconst self: PrismEditor<T> = {\r\n\t\tcontainer: scrollContainer,\r\n\t\twrapper,\r\n\t\tlines,\r\n\t\ttextarea,\r\n\t\tget activeLine() {\r\n\t\t\treturn activeLineNumber\r\n\t\t},\r\n\t\tget value() {\r\n\t\t\treturn value\r\n\t\t},\r\n\t\toptions: currentOptions,\r\n\t\tget focused() {\r\n\t\t\treturn focused\r\n\t\t},\r\n\t\tget tokens() {\r\n\t\t\treturn tokens\r\n\t\t},\r\n\t\tinputCommandMap,\r\n\t\tkeyCommandMap,\r\n\t\textensions: {},\r\n\t\tsetOptions,\r\n\t\tupdate,\r\n\t\tgetSelection: getInputSelection,\r\n\t\taddExtensions(...extensions) {\r\n\t\t\tupdateExtensions(extensions)\r\n\t\t},\r\n\t\ton: (name, handler) => {\r\n\t\t\t;(listeners[name] ||= new Set<any>()).add(handler)\r\n\t\t\treturn () => listeners[name]!.delete(handler)\r\n\t\t},\r\n\t\tremove() {\r\n\t\t\tscrollContainer.remove()\r\n\t\t},\r\n\t}\r\n\r\n\taddListener(textarea, \"keydown\", e => {\r\n\t\tkeyCommandMap[e.key]?.(e, getInputSelection(), value) && preventDefault(e)\r\n\t})\r\n\r\n\taddListener(textarea, \"beforeinput\", e => {\r\n\t\tif (\r\n\t\t\treadOnly ||\r\n\t\t\t(e.inputType == \"insertText\" && inputCommandMap[e.data!]?.(e, getInputSelection(), value))\r\n\t\t)\r\n\t\t\tpreventDefault(e)\r\n\t})\r\n\taddListener(textarea, \"input\", update)\r\n\taddListener(textarea, \"blur\", () => {\r\n\t\tselectionChange = null\r\n\t\tfocused = false\r\n\t\tupdateClassName()\r\n\t})\r\n\taddListener(textarea, \"focus\", () => {\r\n\t\tselectionChange = dispatchSelection\r\n\t\tfocused = true\r\n\t\tupdateClassName()\r\n\t})\r\n\t// For browsers that support selectionchange on textareas\r\n\taddListener(textarea, \"selectionchange\", e => {\r\n\t\tdispatchSelection(!e.isTrusted)\r\n\t\tpreventDefault(e)\r\n\t})\r\n\r\n\tgetElement(container)?.append(scrollContainer)\r\n\toptions && setOptions(options)\r\n\treturn self\r\n}\r\n\r\n/**\r\n * Almost identical to {@link createEditor}, but instead of appending the editor to your\r\n * element, the editor replaces it.\r\n *\r\n * The `textContent` of the placeholder will be the code in the editor unless `options.value` is defined.\r\n * @param placeholder Node or selector which will be replaced by the editor.\r\n * @param options Options the editor is initialized with.\r\n * @param extensions Extensions added before the first render. You can still add extensions later.\r\n * @returns Object to interact with the created editor.\r\n */\r\nconst editorFromPlaceholder = <T extends {} = {}>(\r\n\tplaceholder: string | ChildNode,\r\n\toptions: Partial<EditorOptions<T>> & Omit<T, keyof EditorOptions>,\r\n\t...extensions: EditorExtension<T>[]\r\n) => {\r\n\tconst el = getElement(placeholder)!\r\n\tconst editor = createEditor<T>(\r\n\t\tnull,\r\n\t\tObject.assign({ value: el.textContent }, options),\r\n\t\t...extensions,\r\n\t)\r\n\tel.replaceWith(editor.container)\r\n\treturn editor\r\n}\r\n\r\n/** Equivalent to `document` in a browser setting, `null` otherwise. */\r\nconst doc = \"u\" > typeof window ? document : null\r\n\r\nconst templateEl = /* @__PURE__ */ doc?.createElement(\"div\")\r\n\r\nconst createTemplate = <T extends Element = HTMLDivElement>(html: string, node?: Node) => {\r\n\tif (templateEl) {\r\n\t\ttemplateEl.innerHTML = html\r\n\t\tnode = templateEl.firstChild!\r\n\t}\r\n\treturn () => <T>node!.cloneNode(true)\r\n}\r\n\r\nconst addListener = <T extends keyof HTMLElementEventMap>(\r\n\ttarget: HTMLElement,\r\n\ttype: T,\r\n\tlistener: (this: HTMLElement, ev: HTMLElementEventMap[T]) => any,\r\n\toptions?: boolean | AddEventListenerOptions,\r\n) => target.addEventListener(type, listener, options)\r\n\r\nconst getElement = <T extends Node>(el?: T | string | null) =>\r\n\ttypeof el == \"string\" ? doc!.querySelector<HTMLElement>(el) : el\r\n\r\n/**\r\n * Counts number of lines in the string between `start` and `end`.\r\n * If start and end are omitted, the whole string is searched.\r\n */\r\nconst numLines = (str: string, start = 0, end = Infinity) => {\r\n\tlet count = 1\r\n\tfor (; (start = str.indexOf(\"\\n\", start) + 1) && start <= end; count++);\r\n\treturn count\r\n}\r\n\r\n/** Object storing all language specific behavior. */\r\nconst languageMap: Record<string, Language> = {}\r\n\r\nconst editorTemplate = /* @__PURE__ */ createTemplate(\r\n\t\"<div><div class=pce-wrapper><div class=pce-overlays><textarea class=pce-textarea spellcheck=false autocapitalize=off autocomplete=off>\",\r\n)\r\n\r\nconst preventDefault = (e: Event) => {\r\n\te.preventDefault()\r\n\te.stopImmediatePropagation()\r\n}\r\n\r\nconst setSelectionChange = (f?: (force?: boolean) => void) => (selectionChange = f)\r\n\r\nlet selectionChange: null | undefined | ((force?: boolean) => void)\r\n\r\n// @ts-expect-error Allow adding listener to document\r\nif (doc) addListener(doc, \"selectionchange\", () => selectionChange?.())\r\n\r\nexport {\r\n\tcreateEditor,\r\n\tlanguageMap,\r\n\tnumLines,\r\n\tcreateTemplate,\r\n\tgetElement,\r\n\tpreventDefault,\r\n\teditorFromPlaceholder,\r\n\taddListener,\r\n\tsetSelectionChange,\r\n\tdoc,\r\n}\r\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as createTemplate } from "./core-
|
|
2
|
-
import { a as getLineBefore, b as scrollToEl, g as getLineEnd, h as addTextareaListener, t as addOverlay, v as getPosition, x as updateNode } from "./utils-
|
|
1
|
+
import { r as createTemplate } from "./core-fngiDtt5.js";
|
|
2
|
+
import { a as getLineBefore, b as scrollToEl, g as getLineEnd, h as addTextareaListener, t as addOverlay, v as getPosition, x as updateNode } from "./utils-umP5W0OV.js";
|
|
3
3
|
//#region src/extensions/cursor/position.ts
|
|
4
4
|
var cursorTemplate = /* @__PURE__ */ createTemplate("<div style=position:absolute;top:0;opacity:0;padding-inline-end:inherit> <span><span></span> ");
|
|
5
5
|
/**
|
|
@@ -77,4 +77,4 @@ var customCursor = () => {
|
|
|
77
77
|
//#endregion
|
|
78
78
|
export { cursorPosition as n, customCursor as t };
|
|
79
79
|
|
|
80
|
-
//# sourceMappingURL=cursor-
|
|
80
|
+
//# sourceMappingURL=cursor-7DP0p42U.js.map
|