@actualwave/react-native-codeditor 1.0.0 → 1.2.0

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +53 -3
  3. package/SKILL.md +469 -0
  4. package/THIRD_PARTY_NOTICES +120 -0
  5. package/app.plugin.js +1 -1
  6. package/lib/module/CodeEditor.js +73 -2
  7. package/lib/module/WebViewAPI.js +4 -0
  8. package/lib/typescript/src/CodeEditor.d.ts +21 -2
  9. package/lib/typescript/src/EditorAPI.d.ts +44 -1
  10. package/lib/typescript/src/WebViewAPI.d.ts +5 -1
  11. package/lib/typescript/src/index.d.ts +1 -1
  12. package/package.json +12 -4
  13. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-core.js +39 -0
  14. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-css.js +19 -0
  15. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-glsl.js +1 -0
  16. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-graphql.js +50 -0
  17. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-icu-messageformat.js +1 -0
  18. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-react-native.js +6 -0
  19. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-sksl.js +7 -0
  20. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-sql.js +5 -0
  21. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-tailwind.js +63 -0
  22. package/src/assets/codemirror/@actualwave_codemirror-lang-glsl.js +20 -0
  23. package/src/assets/codemirror/@actualwave_codemirror-lang-icu-messageformat.js +11 -0
  24. package/src/assets/codemirror/@actualwave_codemirror-lang-react-native.js +71 -0
  25. package/src/assets/codemirror/@actualwave_codemirror-lang-sksl.js +7 -2
  26. package/src/assets/codemirror/@codemirror_autocomplete.js +9 -9
  27. package/src/assets/codemirror/@codemirror_commands.js +86 -86
  28. package/src/assets/codemirror/@codemirror_lang-css.js +2 -2
  29. package/src/assets/codemirror/@codemirror_lang-go.js +1 -1
  30. package/src/assets/codemirror/@codemirror_lang-html.js +1 -1
  31. package/src/assets/codemirror/@codemirror_lang-javascript.js +4 -4
  32. package/src/assets/codemirror/@codemirror_lang-jinja.js +1 -1
  33. package/src/assets/codemirror/@codemirror_lang-json.js +1 -1
  34. package/src/assets/codemirror/@codemirror_lang-less.js +1 -1
  35. package/src/assets/codemirror/@codemirror_lang-liquid.js +1 -1
  36. package/src/assets/codemirror/@codemirror_lang-markdown.js +2 -2
  37. package/src/assets/codemirror/@codemirror_lang-python.js +1 -1
  38. package/src/assets/codemirror/@codemirror_lang-sql.js +4 -4
  39. package/src/assets/codemirror/@codemirror_lang-xml.js +1 -1
  40. package/src/assets/codemirror/@codemirror_language.js +11 -11
  41. package/src/assets/codemirror/@codemirror_legacy-modes_mode_clike.js +1 -1
  42. package/src/assets/codemirror/@codemirror_legacy-modes_mode_mathematica.js +1 -1
  43. package/src/assets/codemirror/@codemirror_legacy-modes_mode_oz.js +1 -1
  44. package/src/assets/codemirror/@codemirror_legacy-modes_mode_verilog.js +1 -1
  45. package/src/assets/codemirror/@codemirror_lint.js +5 -5
  46. package/src/assets/codemirror/@codemirror_merge.js +4 -4
  47. package/src/assets/codemirror/@codemirror_search.js +8 -8
  48. package/src/assets/codemirror/@codemirror_state.js +1 -1
  49. package/src/assets/codemirror/@codemirror_theme-one-dark.js +3 -3
  50. package/src/assets/codemirror/@codemirror_view.js +6 -6
  51. package/src/assets/codemirror/@lezer_common.js +2 -2
  52. package/src/assets/codemirror/@lezer_css.js +1 -1
  53. package/src/assets/codemirror/@lezer_javascript.js +1 -1
  54. package/src/assets/codemirror/@lezer_lr.js +1 -1
  55. package/src/assets/codemirror/@lezer_markdown.js +4 -4
  56. package/src/assets/codemirror/@lezer_sass.js +1 -1
  57. package/src/assets/codemirror/_core.js +129 -129
  58. package/src/assets/codemirror-editor.umd.js +130 -17
  59. package/src/assets/editor.html +49 -2
  60. package/lib/typescript/app.plugin.d.ts +0 -3
  61. package/lib/typescript/babel.config.d.ts +0 -10
  62. package/lib/typescript/react-native.config.d.ts +0 -2
  63. package/lib/typescript/scripts/copy-assets.d.ts +0 -2
@@ -1,11 +1,11 @@
1
1
  // Generated by scripts/copy-assets.js — do not edit directly.
2
2
  // Source: node_modules/@actualwave/codemirror-package/dist/
3
3
  // Plain IIFE bundle (no import/export) for loading via <script> in Android WebView.
4
- // Exposes: window.CodeMirrorEditor = { configure, createEditor, requireAsyncModule, registerExtension }
4
+ // Exposes: window.CodeMirrorEditor = { configure, createEditor, requireAsyncModule, registerExtension, registerLanguage, registerTaggedTemplate, registerSupportExtension }
5
5
  (function (global) {
6
6
  'use strict';
7
7
  // Injected during build with the full module map: { [packageName]: { file, core?, bundle? } }
8
- const modules = {"crelt":{"file":"crelt","core":true,"bundle":"_core"},"style-mod":{"file":"style-mod","core":true,"bundle":"_core"},"w3c-keyname":{"file":"w3c-keyname","core":true,"bundle":"_core"},"@marijn/find-cluster-break":{"file":"@marijn_find-cluster-break","core":true,"bundle":"_core"},"@lezer/common":{"file":"@lezer_common","core":true,"bundle":"_core"},"@lezer/highlight":{"file":"@lezer_highlight","core":true,"bundle":"_core"},"@lezer/lr":{"file":"@lezer_lr","core":true,"bundle":"_core"},"@codemirror/state":{"file":"@codemirror_state","core":true,"bundle":"_core"},"@codemirror/view":{"file":"@codemirror_view","core":true,"bundle":"_core"},"@codemirror/language":{"file":"@codemirror_language","core":true,"bundle":"_core"},"@codemirror/commands":{"file":"@codemirror_commands","core":true,"bundle":"_core"},"@codemirror/autocomplete":{"file":"@codemirror_autocomplete","core":true,"bundle":"_core"},"@codemirror/search":{"file":"@codemirror_search","core":true,"bundle":"_core"},"@codemirror/lint":{"file":"@codemirror_lint","core":true,"bundle":"_core"},"codemirror":{"file":"codemirror"},"@codemirror/collab":{"file":"@codemirror_collab"},"@codemirror/language-data":{"file":"@codemirror_language-data"},"@codemirror/merge":{"file":"@codemirror_merge"},"@codemirror/theme-one-dark":{"file":"@codemirror_theme-one-dark"},"@uiw/codemirror-themes":{"file":"@uiw_codemirror-themes"},"@uiw/codemirror-theme-androidstudio":{"file":"@uiw_codemirror-theme-androidstudio"},"@uiw/codemirror-theme-andromeda":{"file":"@uiw_codemirror-theme-andromeda"},"@uiw/codemirror-theme-atomone":{"file":"@uiw_codemirror-theme-atomone"},"@uiw/codemirror-theme-aura":{"file":"@uiw_codemirror-theme-aura"},"@uiw/codemirror-theme-basic":{"file":"@uiw_codemirror-theme-basic"},"@uiw/codemirror-theme-bbedit":{"file":"@uiw_codemirror-theme-bbedit"},"@uiw/codemirror-theme-copilot":{"file":"@uiw_codemirror-theme-copilot"},"@uiw/codemirror-theme-darcula":{"file":"@uiw_codemirror-theme-darcula"},"@uiw/codemirror-theme-dracula":{"file":"@uiw_codemirror-theme-dracula"},"@uiw/codemirror-theme-duotone":{"file":"@uiw_codemirror-theme-duotone"},"@uiw/codemirror-theme-eclipse":{"file":"@uiw_codemirror-theme-eclipse"},"@uiw/codemirror-theme-github":{"file":"@uiw_codemirror-theme-github"},"@uiw/codemirror-theme-material":{"file":"@uiw_codemirror-theme-material"},"@uiw/codemirror-theme-monokai":{"file":"@uiw_codemirror-theme-monokai"},"@uiw/codemirror-theme-nord":{"file":"@uiw_codemirror-theme-nord"},"@uiw/codemirror-theme-okaidia":{"file":"@uiw_codemirror-theme-okaidia"},"@uiw/codemirror-theme-solarized":{"file":"@uiw_codemirror-theme-solarized"},"@uiw/codemirror-theme-sublime":{"file":"@uiw_codemirror-theme-sublime"},"@uiw/codemirror-theme-tokyo-night":{"file":"@uiw_codemirror-theme-tokyo-night"},"@uiw/codemirror-theme-vscode":{"file":"@uiw_codemirror-theme-vscode"},"@uiw/codemirror-theme-xcode":{"file":"@uiw_codemirror-theme-xcode"},"@lezer/css":{"file":"@lezer_css"},"@lezer/go":{"file":"@lezer_go"},"@lezer/html":{"file":"@lezer_html"},"@lezer/java":{"file":"@lezer_java"},"@lezer/javascript":{"file":"@lezer_javascript"},"@lezer/json":{"file":"@lezer_json"},"@lezer/cpp":{"file":"@lezer_cpp"},"@lezer/lezer":{"file":"@lezer_lezer"},"@lezer/markdown":{"file":"@lezer_markdown"},"@lezer/php":{"file":"@lezer_php"},"@lezer/python":{"file":"@lezer_python"},"@lezer/rust":{"file":"@lezer_rust"},"@lezer/sass":{"file":"@lezer_sass"},"@lezer/xml":{"file":"@lezer_xml"},"@lezer/yaml":{"file":"@lezer_yaml"},"@codemirror/lang-angular":{"file":"@codemirror_lang-angular"},"@codemirror/lang-cpp":{"file":"@codemirror_lang-cpp"},"@codemirror/lang-css":{"file":"@codemirror_lang-css"},"@codemirror/lang-go":{"file":"@codemirror_lang-go"},"@codemirror/lang-html":{"file":"@codemirror_lang-html"},"@codemirror/lang-java":{"file":"@codemirror_lang-java"},"@codemirror/lang-javascript":{"file":"@codemirror_lang-javascript"},"@codemirror/lang-jinja":{"file":"@codemirror_lang-jinja"},"@codemirror/lang-json":{"file":"@codemirror_lang-json"},"@codemirror/lang-less":{"file":"@codemirror_lang-less"},"@codemirror/lang-lezer":{"file":"@codemirror_lang-lezer"},"@codemirror/lang-liquid":{"file":"@codemirror_lang-liquid"},"@codemirror/lang-markdown":{"file":"@codemirror_lang-markdown"},"@codemirror/lang-php":{"file":"@codemirror_lang-php"},"@codemirror/lang-python":{"file":"@codemirror_lang-python"},"@codemirror/lang-rust":{"file":"@codemirror_lang-rust"},"@codemirror/lang-sass":{"file":"@codemirror_lang-sass"},"@codemirror/lang-sql":{"file":"@codemirror_lang-sql"},"@codemirror/lang-vue":{"file":"@codemirror_lang-vue"},"@codemirror/lang-wast":{"file":"@codemirror_lang-wast"},"@codemirror/lang-xml":{"file":"@codemirror_lang-xml"},"@codemirror/lang-yaml":{"file":"@codemirror_lang-yaml"},"@actualwave/codemirror-lang-sksl":{"file":"@actualwave_codemirror-lang-sksl"},"@codemirror/legacy-modes/mode/apl":{"file":"@codemirror_legacy-modes_mode_apl"},"@codemirror/legacy-modes/mode/asciiarmor":{"file":"@codemirror_legacy-modes_mode_asciiarmor"},"@codemirror/legacy-modes/mode/asn1":{"file":"@codemirror_legacy-modes_mode_asn1"},"@codemirror/legacy-modes/mode/asterisk":{"file":"@codemirror_legacy-modes_mode_asterisk"},"@codemirror/legacy-modes/mode/brainfuck":{"file":"@codemirror_legacy-modes_mode_brainfuck"},"@codemirror/legacy-modes/mode/clike":{"file":"@codemirror_legacy-modes_mode_clike"},"@codemirror/legacy-modes/mode/clojure":{"file":"@codemirror_legacy-modes_mode_clojure"},"@codemirror/legacy-modes/mode/cmake":{"file":"@codemirror_legacy-modes_mode_cmake"},"@codemirror/legacy-modes/mode/cobol":{"file":"@codemirror_legacy-modes_mode_cobol"},"@codemirror/legacy-modes/mode/coffeescript":{"file":"@codemirror_legacy-modes_mode_coffeescript"},"@codemirror/legacy-modes/mode/commonlisp":{"file":"@codemirror_legacy-modes_mode_commonlisp"},"@codemirror/legacy-modes/mode/crystal":{"file":"@codemirror_legacy-modes_mode_crystal"},"@codemirror/legacy-modes/mode/css":{"file":"@codemirror_legacy-modes_mode_css"},"@codemirror/legacy-modes/mode/cypher":{"file":"@codemirror_legacy-modes_mode_cypher"},"@codemirror/legacy-modes/mode/d":{"file":"@codemirror_legacy-modes_mode_d"},"@codemirror/legacy-modes/mode/diff":{"file":"@codemirror_legacy-modes_mode_diff"},"@codemirror/legacy-modes/mode/dockerfile":{"file":"@codemirror_legacy-modes_mode_dockerfile"},"@codemirror/legacy-modes/mode/dtd":{"file":"@codemirror_legacy-modes_mode_dtd"},"@codemirror/legacy-modes/mode/dylan":{"file":"@codemirror_legacy-modes_mode_dylan"},"@codemirror/legacy-modes/mode/ebnf":{"file":"@codemirror_legacy-modes_mode_ebnf"},"@codemirror/legacy-modes/mode/ecl":{"file":"@codemirror_legacy-modes_mode_ecl"},"@codemirror/legacy-modes/mode/eiffel":{"file":"@codemirror_legacy-modes_mode_eiffel"},"@codemirror/legacy-modes/mode/elm":{"file":"@codemirror_legacy-modes_mode_elm"},"@codemirror/legacy-modes/mode/erlang":{"file":"@codemirror_legacy-modes_mode_erlang"},"@codemirror/legacy-modes/mode/factor":{"file":"@codemirror_legacy-modes_mode_factor"},"@codemirror/legacy-modes/mode/fcl":{"file":"@codemirror_legacy-modes_mode_fcl"},"@codemirror/legacy-modes/mode/forth":{"file":"@codemirror_legacy-modes_mode_forth"},"@codemirror/legacy-modes/mode/fortran":{"file":"@codemirror_legacy-modes_mode_fortran"},"@codemirror/legacy-modes/mode/gas":{"file":"@codemirror_legacy-modes_mode_gas"},"@codemirror/legacy-modes/mode/gherkin":{"file":"@codemirror_legacy-modes_mode_gherkin"},"@codemirror/legacy-modes/mode/go":{"file":"@codemirror_legacy-modes_mode_go"},"@codemirror/legacy-modes/mode/groovy":{"file":"@codemirror_legacy-modes_mode_groovy"},"@codemirror/legacy-modes/mode/haskell":{"file":"@codemirror_legacy-modes_mode_haskell"},"@codemirror/legacy-modes/mode/haxe":{"file":"@codemirror_legacy-modes_mode_haxe"},"@codemirror/legacy-modes/mode/http":{"file":"@codemirror_legacy-modes_mode_http"},"@codemirror/legacy-modes/mode/idl":{"file":"@codemirror_legacy-modes_mode_idl"},"@codemirror/legacy-modes/mode/javascript":{"file":"@codemirror_legacy-modes_mode_javascript"},"@codemirror/legacy-modes/mode/jinja2":{"file":"@codemirror_legacy-modes_mode_jinja2"},"@codemirror/legacy-modes/mode/julia":{"file":"@codemirror_legacy-modes_mode_julia"},"@codemirror/legacy-modes/mode/livescript":{"file":"@codemirror_legacy-modes_mode_livescript"},"@codemirror/legacy-modes/mode/lua":{"file":"@codemirror_legacy-modes_mode_lua"},"@codemirror/legacy-modes/mode/mathematica":{"file":"@codemirror_legacy-modes_mode_mathematica"},"@codemirror/legacy-modes/mode/mbox":{"file":"@codemirror_legacy-modes_mode_mbox"},"@codemirror/legacy-modes/mode/mirc":{"file":"@codemirror_legacy-modes_mode_mirc"},"@codemirror/legacy-modes/mode/mllike":{"file":"@codemirror_legacy-modes_mode_mllike"},"@codemirror/legacy-modes/mode/modelica":{"file":"@codemirror_legacy-modes_mode_modelica"},"@codemirror/legacy-modes/mode/mscgen":{"file":"@codemirror_legacy-modes_mode_mscgen"},"@codemirror/legacy-modes/mode/mumps":{"file":"@codemirror_legacy-modes_mode_mumps"},"@codemirror/legacy-modes/mode/nginx":{"file":"@codemirror_legacy-modes_mode_nginx"},"@codemirror/legacy-modes/mode/nsis":{"file":"@codemirror_legacy-modes_mode_nsis"},"@codemirror/legacy-modes/mode/ntriples":{"file":"@codemirror_legacy-modes_mode_ntriples"},"@codemirror/legacy-modes/mode/octave":{"file":"@codemirror_legacy-modes_mode_octave"},"@codemirror/legacy-modes/mode/oz":{"file":"@codemirror_legacy-modes_mode_oz"},"@codemirror/legacy-modes/mode/pascal":{"file":"@codemirror_legacy-modes_mode_pascal"},"@codemirror/legacy-modes/mode/pegjs":{"file":"@codemirror_legacy-modes_mode_pegjs"},"@codemirror/legacy-modes/mode/perl":{"file":"@codemirror_legacy-modes_mode_perl"},"@codemirror/legacy-modes/mode/pig":{"file":"@codemirror_legacy-modes_mode_pig"},"@codemirror/legacy-modes/mode/powershell":{"file":"@codemirror_legacy-modes_mode_powershell"},"@codemirror/legacy-modes/mode/properties":{"file":"@codemirror_legacy-modes_mode_properties"},"@codemirror/legacy-modes/mode/protobuf":{"file":"@codemirror_legacy-modes_mode_protobuf"},"@codemirror/legacy-modes/mode/pug":{"file":"@codemirror_legacy-modes_mode_pug"},"@codemirror/legacy-modes/mode/puppet":{"file":"@codemirror_legacy-modes_mode_puppet"},"@codemirror/legacy-modes/mode/python":{"file":"@codemirror_legacy-modes_mode_python"},"@codemirror/legacy-modes/mode/q":{"file":"@codemirror_legacy-modes_mode_q"},"@codemirror/legacy-modes/mode/r":{"file":"@codemirror_legacy-modes_mode_r"},"@codemirror/legacy-modes/mode/rpm":{"file":"@codemirror_legacy-modes_mode_rpm"},"@codemirror/legacy-modes/mode/ruby":{"file":"@codemirror_legacy-modes_mode_ruby"},"@codemirror/legacy-modes/mode/rust":{"file":"@codemirror_legacy-modes_mode_rust"},"@codemirror/legacy-modes/mode/sas":{"file":"@codemirror_legacy-modes_mode_sas"},"@codemirror/legacy-modes/mode/sass":{"file":"@codemirror_legacy-modes_mode_sass"},"@codemirror/legacy-modes/mode/scheme":{"file":"@codemirror_legacy-modes_mode_scheme"},"@codemirror/legacy-modes/mode/shell":{"file":"@codemirror_legacy-modes_mode_shell"},"@codemirror/legacy-modes/mode/sieve":{"file":"@codemirror_legacy-modes_mode_sieve"},"@codemirror/legacy-modes/mode/simple-mode":{"file":"@codemirror_legacy-modes_mode_simple-mode"},"@codemirror/legacy-modes/mode/smalltalk":{"file":"@codemirror_legacy-modes_mode_smalltalk"},"@codemirror/legacy-modes/mode/solr":{"file":"@codemirror_legacy-modes_mode_solr"},"@codemirror/legacy-modes/mode/sparql":{"file":"@codemirror_legacy-modes_mode_sparql"},"@codemirror/legacy-modes/mode/spreadsheet":{"file":"@codemirror_legacy-modes_mode_spreadsheet"},"@codemirror/legacy-modes/mode/sql":{"file":"@codemirror_legacy-modes_mode_sql"},"@codemirror/legacy-modes/mode/stex":{"file":"@codemirror_legacy-modes_mode_stex"},"@codemirror/legacy-modes/mode/stylus":{"file":"@codemirror_legacy-modes_mode_stylus"},"@codemirror/legacy-modes/mode/swift":{"file":"@codemirror_legacy-modes_mode_swift"},"@codemirror/legacy-modes/mode/tcl":{"file":"@codemirror_legacy-modes_mode_tcl"},"@codemirror/legacy-modes/mode/textile":{"file":"@codemirror_legacy-modes_mode_textile"},"@codemirror/legacy-modes/mode/tiddlywiki":{"file":"@codemirror_legacy-modes_mode_tiddlywiki"},"@codemirror/legacy-modes/mode/tiki":{"file":"@codemirror_legacy-modes_mode_tiki"},"@codemirror/legacy-modes/mode/toml":{"file":"@codemirror_legacy-modes_mode_toml"},"@codemirror/legacy-modes/mode/troff":{"file":"@codemirror_legacy-modes_mode_troff"},"@codemirror/legacy-modes/mode/ttcn-cfg":{"file":"@codemirror_legacy-modes_mode_ttcn-cfg"},"@codemirror/legacy-modes/mode/ttcn":{"file":"@codemirror_legacy-modes_mode_ttcn"},"@codemirror/legacy-modes/mode/turtle":{"file":"@codemirror_legacy-modes_mode_turtle"},"@codemirror/legacy-modes/mode/vb":{"file":"@codemirror_legacy-modes_mode_vb"},"@codemirror/legacy-modes/mode/vbscript":{"file":"@codemirror_legacy-modes_mode_vbscript"},"@codemirror/legacy-modes/mode/velocity":{"file":"@codemirror_legacy-modes_mode_velocity"},"@codemirror/legacy-modes/mode/verilog":{"file":"@codemirror_legacy-modes_mode_verilog"},"@codemirror/legacy-modes/mode/vhdl":{"file":"@codemirror_legacy-modes_mode_vhdl"},"@codemirror/legacy-modes/mode/wast":{"file":"@codemirror_legacy-modes_mode_wast"},"@codemirror/legacy-modes/mode/webidl":{"file":"@codemirror_legacy-modes_mode_webidl"},"@codemirror/legacy-modes/mode/xml":{"file":"@codemirror_legacy-modes_mode_xml"},"@codemirror/legacy-modes/mode/xquery":{"file":"@codemirror_legacy-modes_mode_xquery"},"@codemirror/legacy-modes/mode/yacas":{"file":"@codemirror_legacy-modes_mode_yacas"},"@codemirror/legacy-modes/mode/yaml":{"file":"@codemirror_legacy-modes_mode_yaml"},"@codemirror/legacy-modes/mode/z80":{"file":"@codemirror_legacy-modes_mode_z80"},"@babel/runtime/helpers/interopRequireDefault":{"file":"@babel_runtime_helpers_interopRequireDefault"},"@babel/runtime/helpers/objectSpread2":{"file":"@babel_runtime_helpers_objectSpread2"},"@babel/runtime/helpers/toConsumableArray":{"file":"@babel_runtime_helpers_toConsumableArray"}};
8
+ const modules = {"crelt":{"file":"crelt","core":true,"bundle":"_core"},"style-mod":{"file":"style-mod","core":true,"bundle":"_core"},"w3c-keyname":{"file":"w3c-keyname","core":true,"bundle":"_core"},"@marijn/find-cluster-break":{"file":"@marijn_find-cluster-break","core":true,"bundle":"_core"},"@lezer/common":{"file":"@lezer_common","core":true,"bundle":"_core"},"@lezer/highlight":{"file":"@lezer_highlight","core":true,"bundle":"_core"},"@lezer/lr":{"file":"@lezer_lr","core":true,"bundle":"_core"},"@codemirror/state":{"file":"@codemirror_state","core":true,"bundle":"_core"},"@codemirror/view":{"file":"@codemirror_view","core":true,"bundle":"_core"},"@codemirror/language":{"file":"@codemirror_language","core":true,"bundle":"_core"},"@codemirror/commands":{"file":"@codemirror_commands","core":true,"bundle":"_core"},"@codemirror/autocomplete":{"file":"@codemirror_autocomplete","core":true,"bundle":"_core"},"@codemirror/search":{"file":"@codemirror_search","core":true,"bundle":"_core"},"@codemirror/lint":{"file":"@codemirror_lint","core":true,"bundle":"_core"},"codemirror":{"file":"codemirror"},"@codemirror/collab":{"file":"@codemirror_collab"},"@codemirror/language-data":{"file":"@codemirror_language-data"},"@codemirror/merge":{"file":"@codemirror_merge"},"@codemirror/theme-one-dark":{"file":"@codemirror_theme-one-dark"},"@uiw/codemirror-themes":{"file":"@uiw_codemirror-themes"},"@uiw/codemirror-theme-androidstudio":{"file":"@uiw_codemirror-theme-androidstudio"},"@uiw/codemirror-theme-andromeda":{"file":"@uiw_codemirror-theme-andromeda"},"@uiw/codemirror-theme-atomone":{"file":"@uiw_codemirror-theme-atomone"},"@uiw/codemirror-theme-aura":{"file":"@uiw_codemirror-theme-aura"},"@uiw/codemirror-theme-basic":{"file":"@uiw_codemirror-theme-basic"},"@uiw/codemirror-theme-bbedit":{"file":"@uiw_codemirror-theme-bbedit"},"@uiw/codemirror-theme-copilot":{"file":"@uiw_codemirror-theme-copilot"},"@uiw/codemirror-theme-darcula":{"file":"@uiw_codemirror-theme-darcula"},"@uiw/codemirror-theme-dracula":{"file":"@uiw_codemirror-theme-dracula"},"@uiw/codemirror-theme-duotone":{"file":"@uiw_codemirror-theme-duotone"},"@uiw/codemirror-theme-eclipse":{"file":"@uiw_codemirror-theme-eclipse"},"@uiw/codemirror-theme-github":{"file":"@uiw_codemirror-theme-github"},"@uiw/codemirror-theme-material":{"file":"@uiw_codemirror-theme-material"},"@uiw/codemirror-theme-monokai":{"file":"@uiw_codemirror-theme-monokai"},"@uiw/codemirror-theme-nord":{"file":"@uiw_codemirror-theme-nord"},"@uiw/codemirror-theme-okaidia":{"file":"@uiw_codemirror-theme-okaidia"},"@uiw/codemirror-theme-solarized":{"file":"@uiw_codemirror-theme-solarized"},"@uiw/codemirror-theme-sublime":{"file":"@uiw_codemirror-theme-sublime"},"@uiw/codemirror-theme-tokyo-night":{"file":"@uiw_codemirror-theme-tokyo-night"},"@uiw/codemirror-theme-vscode":{"file":"@uiw_codemirror-theme-vscode"},"@uiw/codemirror-theme-xcode":{"file":"@uiw_codemirror-theme-xcode"},"@lezer/css":{"file":"@lezer_css"},"@lezer/go":{"file":"@lezer_go"},"@lezer/html":{"file":"@lezer_html"},"@lezer/java":{"file":"@lezer_java"},"@lezer/javascript":{"file":"@lezer_javascript"},"@lezer/json":{"file":"@lezer_json"},"@lezer/cpp":{"file":"@lezer_cpp"},"@lezer/lezer":{"file":"@lezer_lezer"},"@lezer/markdown":{"file":"@lezer_markdown"},"@lezer/php":{"file":"@lezer_php"},"@lezer/python":{"file":"@lezer_python"},"@lezer/rust":{"file":"@lezer_rust"},"@lezer/sass":{"file":"@lezer_sass"},"@lezer/xml":{"file":"@lezer_xml"},"@lezer/yaml":{"file":"@lezer_yaml"},"@codemirror/lang-angular":{"file":"@codemirror_lang-angular"},"@codemirror/lang-cpp":{"file":"@codemirror_lang-cpp"},"@codemirror/lang-css":{"file":"@codemirror_lang-css"},"@codemirror/lang-go":{"file":"@codemirror_lang-go"},"@codemirror/lang-html":{"file":"@codemirror_lang-html"},"@codemirror/lang-java":{"file":"@codemirror_lang-java"},"@codemirror/lang-javascript":{"file":"@codemirror_lang-javascript"},"@codemirror/lang-jinja":{"file":"@codemirror_lang-jinja"},"@codemirror/lang-json":{"file":"@codemirror_lang-json"},"@codemirror/lang-less":{"file":"@codemirror_lang-less"},"@codemirror/lang-lezer":{"file":"@codemirror_lang-lezer"},"@codemirror/lang-liquid":{"file":"@codemirror_lang-liquid"},"@codemirror/lang-markdown":{"file":"@codemirror_lang-markdown"},"@codemirror/lang-php":{"file":"@codemirror_lang-php"},"@codemirror/lang-python":{"file":"@codemirror_lang-python"},"@codemirror/lang-rust":{"file":"@codemirror_lang-rust"},"@codemirror/lang-sass":{"file":"@codemirror_lang-sass"},"@codemirror/lang-sql":{"file":"@codemirror_lang-sql"},"@codemirror/lang-vue":{"file":"@codemirror_lang-vue"},"@codemirror/lang-wast":{"file":"@codemirror_lang-wast"},"@codemirror/lang-xml":{"file":"@codemirror_lang-xml"},"@codemirror/lang-yaml":{"file":"@codemirror_lang-yaml"},"@actualwave/codemirror-lang-sksl":{"file":"@actualwave_codemirror-lang-sksl"},"@actualwave/codemirror-lang-glsl":{"file":"@actualwave_codemirror-lang-glsl"},"@actualwave/codemirror-lang-icu-messageformat":{"file":"@actualwave_codemirror-lang-icu-messageformat"},"@actualwave/codemirror-lang-react-native":{"file":"@actualwave_codemirror-lang-react-native"},"@actualwave/codemirror-lang-embed-core":{"file":"@actualwave_codemirror-lang-embed-core"},"@actualwave/codemirror-lang-embed-sql":{"file":"@actualwave_codemirror-lang-embed-sql"},"@actualwave/codemirror-lang-embed-graphql":{"file":"@actualwave_codemirror-lang-embed-graphql"},"@actualwave/codemirror-lang-embed-css":{"file":"@actualwave_codemirror-lang-embed-css"},"@actualwave/codemirror-lang-embed-sksl":{"file":"@actualwave_codemirror-lang-embed-sksl"},"@actualwave/codemirror-lang-embed-glsl":{"file":"@actualwave_codemirror-lang-embed-glsl"},"@actualwave/codemirror-lang-embed-icu-messageformat":{"file":"@actualwave_codemirror-lang-embed-icu-messageformat"},"@actualwave/codemirror-lang-embed-tailwind":{"file":"@actualwave_codemirror-lang-embed-tailwind"},"@actualwave/codemirror-lang-embed-react-native":{"file":"@actualwave_codemirror-lang-embed-react-native"},"@codemirror/legacy-modes/mode/apl":{"file":"@codemirror_legacy-modes_mode_apl"},"@codemirror/legacy-modes/mode/asciiarmor":{"file":"@codemirror_legacy-modes_mode_asciiarmor"},"@codemirror/legacy-modes/mode/asn1":{"file":"@codemirror_legacy-modes_mode_asn1"},"@codemirror/legacy-modes/mode/asterisk":{"file":"@codemirror_legacy-modes_mode_asterisk"},"@codemirror/legacy-modes/mode/brainfuck":{"file":"@codemirror_legacy-modes_mode_brainfuck"},"@codemirror/legacy-modes/mode/clike":{"file":"@codemirror_legacy-modes_mode_clike"},"@codemirror/legacy-modes/mode/clojure":{"file":"@codemirror_legacy-modes_mode_clojure"},"@codemirror/legacy-modes/mode/cmake":{"file":"@codemirror_legacy-modes_mode_cmake"},"@codemirror/legacy-modes/mode/cobol":{"file":"@codemirror_legacy-modes_mode_cobol"},"@codemirror/legacy-modes/mode/coffeescript":{"file":"@codemirror_legacy-modes_mode_coffeescript"},"@codemirror/legacy-modes/mode/commonlisp":{"file":"@codemirror_legacy-modes_mode_commonlisp"},"@codemirror/legacy-modes/mode/crystal":{"file":"@codemirror_legacy-modes_mode_crystal"},"@codemirror/legacy-modes/mode/css":{"file":"@codemirror_legacy-modes_mode_css"},"@codemirror/legacy-modes/mode/cypher":{"file":"@codemirror_legacy-modes_mode_cypher"},"@codemirror/legacy-modes/mode/d":{"file":"@codemirror_legacy-modes_mode_d"},"@codemirror/legacy-modes/mode/diff":{"file":"@codemirror_legacy-modes_mode_diff"},"@codemirror/legacy-modes/mode/dockerfile":{"file":"@codemirror_legacy-modes_mode_dockerfile"},"@codemirror/legacy-modes/mode/dtd":{"file":"@codemirror_legacy-modes_mode_dtd"},"@codemirror/legacy-modes/mode/dylan":{"file":"@codemirror_legacy-modes_mode_dylan"},"@codemirror/legacy-modes/mode/ebnf":{"file":"@codemirror_legacy-modes_mode_ebnf"},"@codemirror/legacy-modes/mode/ecl":{"file":"@codemirror_legacy-modes_mode_ecl"},"@codemirror/legacy-modes/mode/eiffel":{"file":"@codemirror_legacy-modes_mode_eiffel"},"@codemirror/legacy-modes/mode/elm":{"file":"@codemirror_legacy-modes_mode_elm"},"@codemirror/legacy-modes/mode/erlang":{"file":"@codemirror_legacy-modes_mode_erlang"},"@codemirror/legacy-modes/mode/factor":{"file":"@codemirror_legacy-modes_mode_factor"},"@codemirror/legacy-modes/mode/fcl":{"file":"@codemirror_legacy-modes_mode_fcl"},"@codemirror/legacy-modes/mode/forth":{"file":"@codemirror_legacy-modes_mode_forth"},"@codemirror/legacy-modes/mode/fortran":{"file":"@codemirror_legacy-modes_mode_fortran"},"@codemirror/legacy-modes/mode/gas":{"file":"@codemirror_legacy-modes_mode_gas"},"@codemirror/legacy-modes/mode/gherkin":{"file":"@codemirror_legacy-modes_mode_gherkin"},"@codemirror/legacy-modes/mode/go":{"file":"@codemirror_legacy-modes_mode_go"},"@codemirror/legacy-modes/mode/groovy":{"file":"@codemirror_legacy-modes_mode_groovy"},"@codemirror/legacy-modes/mode/haskell":{"file":"@codemirror_legacy-modes_mode_haskell"},"@codemirror/legacy-modes/mode/haxe":{"file":"@codemirror_legacy-modes_mode_haxe"},"@codemirror/legacy-modes/mode/http":{"file":"@codemirror_legacy-modes_mode_http"},"@codemirror/legacy-modes/mode/idl":{"file":"@codemirror_legacy-modes_mode_idl"},"@codemirror/legacy-modes/mode/javascript":{"file":"@codemirror_legacy-modes_mode_javascript"},"@codemirror/legacy-modes/mode/jinja2":{"file":"@codemirror_legacy-modes_mode_jinja2"},"@codemirror/legacy-modes/mode/julia":{"file":"@codemirror_legacy-modes_mode_julia"},"@codemirror/legacy-modes/mode/livescript":{"file":"@codemirror_legacy-modes_mode_livescript"},"@codemirror/legacy-modes/mode/lua":{"file":"@codemirror_legacy-modes_mode_lua"},"@codemirror/legacy-modes/mode/mathematica":{"file":"@codemirror_legacy-modes_mode_mathematica"},"@codemirror/legacy-modes/mode/mbox":{"file":"@codemirror_legacy-modes_mode_mbox"},"@codemirror/legacy-modes/mode/mirc":{"file":"@codemirror_legacy-modes_mode_mirc"},"@codemirror/legacy-modes/mode/mllike":{"file":"@codemirror_legacy-modes_mode_mllike"},"@codemirror/legacy-modes/mode/modelica":{"file":"@codemirror_legacy-modes_mode_modelica"},"@codemirror/legacy-modes/mode/mscgen":{"file":"@codemirror_legacy-modes_mode_mscgen"},"@codemirror/legacy-modes/mode/mumps":{"file":"@codemirror_legacy-modes_mode_mumps"},"@codemirror/legacy-modes/mode/nginx":{"file":"@codemirror_legacy-modes_mode_nginx"},"@codemirror/legacy-modes/mode/nsis":{"file":"@codemirror_legacy-modes_mode_nsis"},"@codemirror/legacy-modes/mode/ntriples":{"file":"@codemirror_legacy-modes_mode_ntriples"},"@codemirror/legacy-modes/mode/octave":{"file":"@codemirror_legacy-modes_mode_octave"},"@codemirror/legacy-modes/mode/oz":{"file":"@codemirror_legacy-modes_mode_oz"},"@codemirror/legacy-modes/mode/pascal":{"file":"@codemirror_legacy-modes_mode_pascal"},"@codemirror/legacy-modes/mode/pegjs":{"file":"@codemirror_legacy-modes_mode_pegjs"},"@codemirror/legacy-modes/mode/perl":{"file":"@codemirror_legacy-modes_mode_perl"},"@codemirror/legacy-modes/mode/pig":{"file":"@codemirror_legacy-modes_mode_pig"},"@codemirror/legacy-modes/mode/powershell":{"file":"@codemirror_legacy-modes_mode_powershell"},"@codemirror/legacy-modes/mode/properties":{"file":"@codemirror_legacy-modes_mode_properties"},"@codemirror/legacy-modes/mode/protobuf":{"file":"@codemirror_legacy-modes_mode_protobuf"},"@codemirror/legacy-modes/mode/pug":{"file":"@codemirror_legacy-modes_mode_pug"},"@codemirror/legacy-modes/mode/puppet":{"file":"@codemirror_legacy-modes_mode_puppet"},"@codemirror/legacy-modes/mode/python":{"file":"@codemirror_legacy-modes_mode_python"},"@codemirror/legacy-modes/mode/q":{"file":"@codemirror_legacy-modes_mode_q"},"@codemirror/legacy-modes/mode/r":{"file":"@codemirror_legacy-modes_mode_r"},"@codemirror/legacy-modes/mode/rpm":{"file":"@codemirror_legacy-modes_mode_rpm"},"@codemirror/legacy-modes/mode/ruby":{"file":"@codemirror_legacy-modes_mode_ruby"},"@codemirror/legacy-modes/mode/rust":{"file":"@codemirror_legacy-modes_mode_rust"},"@codemirror/legacy-modes/mode/sas":{"file":"@codemirror_legacy-modes_mode_sas"},"@codemirror/legacy-modes/mode/sass":{"file":"@codemirror_legacy-modes_mode_sass"},"@codemirror/legacy-modes/mode/scheme":{"file":"@codemirror_legacy-modes_mode_scheme"},"@codemirror/legacy-modes/mode/shell":{"file":"@codemirror_legacy-modes_mode_shell"},"@codemirror/legacy-modes/mode/sieve":{"file":"@codemirror_legacy-modes_mode_sieve"},"@codemirror/legacy-modes/mode/simple-mode":{"file":"@codemirror_legacy-modes_mode_simple-mode"},"@codemirror/legacy-modes/mode/smalltalk":{"file":"@codemirror_legacy-modes_mode_smalltalk"},"@codemirror/legacy-modes/mode/solr":{"file":"@codemirror_legacy-modes_mode_solr"},"@codemirror/legacy-modes/mode/sparql":{"file":"@codemirror_legacy-modes_mode_sparql"},"@codemirror/legacy-modes/mode/spreadsheet":{"file":"@codemirror_legacy-modes_mode_spreadsheet"},"@codemirror/legacy-modes/mode/sql":{"file":"@codemirror_legacy-modes_mode_sql"},"@codemirror/legacy-modes/mode/stex":{"file":"@codemirror_legacy-modes_mode_stex"},"@codemirror/legacy-modes/mode/stylus":{"file":"@codemirror_legacy-modes_mode_stylus"},"@codemirror/legacy-modes/mode/swift":{"file":"@codemirror_legacy-modes_mode_swift"},"@codemirror/legacy-modes/mode/tcl":{"file":"@codemirror_legacy-modes_mode_tcl"},"@codemirror/legacy-modes/mode/textile":{"file":"@codemirror_legacy-modes_mode_textile"},"@codemirror/legacy-modes/mode/tiddlywiki":{"file":"@codemirror_legacy-modes_mode_tiddlywiki"},"@codemirror/legacy-modes/mode/tiki":{"file":"@codemirror_legacy-modes_mode_tiki"},"@codemirror/legacy-modes/mode/toml":{"file":"@codemirror_legacy-modes_mode_toml"},"@codemirror/legacy-modes/mode/troff":{"file":"@codemirror_legacy-modes_mode_troff"},"@codemirror/legacy-modes/mode/ttcn-cfg":{"file":"@codemirror_legacy-modes_mode_ttcn-cfg"},"@codemirror/legacy-modes/mode/ttcn":{"file":"@codemirror_legacy-modes_mode_ttcn"},"@codemirror/legacy-modes/mode/turtle":{"file":"@codemirror_legacy-modes_mode_turtle"},"@codemirror/legacy-modes/mode/vb":{"file":"@codemirror_legacy-modes_mode_vb"},"@codemirror/legacy-modes/mode/vbscript":{"file":"@codemirror_legacy-modes_mode_vbscript"},"@codemirror/legacy-modes/mode/velocity":{"file":"@codemirror_legacy-modes_mode_velocity"},"@codemirror/legacy-modes/mode/verilog":{"file":"@codemirror_legacy-modes_mode_verilog"},"@codemirror/legacy-modes/mode/vhdl":{"file":"@codemirror_legacy-modes_mode_vhdl"},"@codemirror/legacy-modes/mode/wast":{"file":"@codemirror_legacy-modes_mode_wast"},"@codemirror/legacy-modes/mode/webidl":{"file":"@codemirror_legacy-modes_mode_webidl"},"@codemirror/legacy-modes/mode/xml":{"file":"@codemirror_legacy-modes_mode_xml"},"@codemirror/legacy-modes/mode/xquery":{"file":"@codemirror_legacy-modes_mode_xquery"},"@codemirror/legacy-modes/mode/yacas":{"file":"@codemirror_legacy-modes_mode_yacas"},"@codemirror/legacy-modes/mode/yaml":{"file":"@codemirror_legacy-modes_mode_yaml"},"@codemirror/legacy-modes/mode/z80":{"file":"@codemirror_legacy-modes_mode_z80"},"@babel/runtime/helpers/interopRequireDefault":{"file":"@babel_runtime_helpers_interopRequireDefault"},"@babel/runtime/helpers/objectSpread2":{"file":"@babel_runtime_helpers_objectSpread2"},"@babel/runtime/helpers/toConsumableArray":{"file":"@babel_runtime_helpers_toConsumableArray"}};
9
9
 
10
10
  // Base URL prepended to every module file fetch. Override via configure() before first load.
11
11
  let _baseUrl = './codemirror/';
@@ -180,12 +180,11 @@ async function resolveExtensionSpec(spec) {
180
180
 
181
181
  /**
182
182
  * Registry mapping language name → npm package name for packages that don't
183
- * follow the @codemirror/lang-{name} convention. Pre-populated with known
184
- * custom language packages bundled in this distribution.
183
+ * follow the @codemirror/lang-{name} convention. Empty by default — this is a
184
+ * generic facade with no built-in knowledge of any specific language package;
185
+ * callers must register the ones they need via registerLanguage().
185
186
  */
186
- const languagePackages = new Map([
187
- ['sksl', '@actualwave/codemirror-lang-sksl'],
188
- ]);
187
+ const languagePackages = new Map();
189
188
 
190
189
  /**
191
190
  * Register a custom language package that doesn't follow the
@@ -198,6 +197,50 @@ function registerLanguage(name, packageName) {
198
197
  languagePackages.set(name, packageName);
199
198
  }
200
199
 
200
+ /**
201
+ * Packages providing tagged-template DSL embeddings for the 'javascript'
202
+ * language. Each package must export `createEmbedding() => { matcher, language }`
203
+ * — see @actualwave/codemirror-lang-embed-core. Empty by default; register the
204
+ * embeddings a given app needs via registerTaggedTemplate().
205
+ */
206
+ const taggedTemplateEmbeddings = new Set();
207
+
208
+ /**
209
+ * Registers an additional tagged-template DSL embedding package to be mixed
210
+ * into the 'javascript' language (e.g. a future embed-glsl/embed-icu package).
211
+ *
212
+ * @param {string} packageName - npm package name exporting createEmbedding().
213
+ */
214
+ function registerTaggedTemplate(packageName) {
215
+ taggedTemplateEmbeddings.add(packageName);
216
+ }
217
+
218
+ /**
219
+ * Packages contributing plain CM extensions (completion sources, decoration
220
+ * ViewPlugins, etc) to a base language's support set, for DSLs with no
221
+ * grammar to parse — e.g. flat class-name token lists rather than a
222
+ * `parseMixed` nested language. Each package must export
223
+ * `createSupportExtension(languageSupport, config?) => Extension`. Keyed by
224
+ * package name → its config (or `undefined`), registered once up front rather
225
+ * than threaded through every createEditor() call, matching how
226
+ * registerTaggedTemplate works. Empty by default; register what a given app
227
+ * needs via registerSupportExtension(). Currently only mixed in for the
228
+ * 'javascript' base language (see resolveLanguageExtension) — not JS-specific
229
+ * by name or contract, just not yet wired up for other base languages.
230
+ */
231
+ const supportExtensions = new Map();
232
+
233
+ /**
234
+ * Registers an additional package contributing support extensions (not a
235
+ * nested grammar) to a base language — currently only 'javascript'.
236
+ *
237
+ * @param {string} packageName - npm package name exporting createSupportExtension().
238
+ * @param {object} [config] - Passed as createSupportExtension's second argument.
239
+ */
240
+ function registerSupportExtension(packageName, config) {
241
+ supportExtensions.set(packageName, config);
242
+ }
243
+
201
244
  /**
202
245
  * Extracts a StreamParser mode object from a legacy-modes module.
203
246
  * Tries exact match first, then case-insensitive, then single-export fallback
@@ -218,21 +261,74 @@ function findLegacyMode(mod, name) {
218
261
  /**
219
262
  * Resolves a language name to a CodeMirror language extension.
220
263
  * Resolution order:
221
- * 1. Custom registry (registerLanguage / built-in overrides like sksl)
222
- * 2. @codemirror/lang-{name} (official first-class language packages)
223
- * 3. @codemirror/legacy-modes/mode/{name} (wrapped with StreamLanguage.define)
264
+ * 1. Custom registry (registerLanguage) — empty by default
265
+ * 2. 'javascript' special case — wraps @codemirror/lang-javascript with
266
+ * tagged-template DSL embedding for whatever's been registered via
267
+ * registerTaggedTemplate/registerSupportExtension (none by default) plus
268
+ * whatever's passed in per-call via the embeds argument
269
+ * 3. @codemirror/lang-{name} (official first-class language packages)
270
+ * 4. @codemirror/legacy-modes/mode/{name} (wrapped with StreamLanguage.define)
271
+ *
272
+ * @param {string} name
273
+ * @param {object} [config] - Passed as the sole argument to the resolved factory function
274
+ * (e.g. { jsx: true, typescript: true } for 'javascript'). Ignored by the legacy-modes
275
+ * fallback, since those export StreamParser objects rather than factory functions.
276
+ * @param {object} [embeds] - Only used when name === 'javascript'.
277
+ * @param {string[]} [embeds.taggedTemplates] - Extra tagged-template embedding package
278
+ * names for this call only, merged with whatever's registered via registerTaggedTemplate.
279
+ * @param {Array<string|[string, object]>} [embeds.supportExtensions] - Extra support-extension
280
+ * packages for this call only (same spec shape as registerSupportExtension's arguments —
281
+ * a bare package name, or a [packageName, config] tuple), merged with whatever's registered
282
+ * via registerSupportExtension (per-call config wins on a shared package name).
224
283
  */
225
- async function resolveLanguageExtension(name) {
284
+ async function resolveLanguageExtension(name, config, embeds = {}) {
226
285
  if (languagePackages.has(name)) {
227
286
  const mod = await requireAsyncModule(languagePackages.get(name));
228
287
  const fn = mod[name] ?? Object.values(mod).find((v) => typeof v === 'function');
229
- if (fn) return fn();
288
+ if (fn) return fn(config);
289
+ }
290
+
291
+ if (name === 'javascript') {
292
+ const { taggedTemplates = [], supportExtensions: callSupportExtensions = [] } = embeds;
293
+
294
+ const [jsMod, embedCore, { LanguageSupport }] = await Promise.all([
295
+ requireAsyncModule('@codemirror/lang-javascript'),
296
+ requireAsyncModule('@actualwave/codemirror-lang-embed-core'),
297
+ requireAsyncModule('@codemirror/language'),
298
+ ]);
299
+ const base = jsMod.javascript(config);
300
+ const registry = embedCore.createTagRegistry();
301
+ const extras = [];
302
+
303
+ const allTaggedTemplates = new Set([...taggedTemplateEmbeddings, ...taggedTemplates]);
304
+ for (const packageName of allTaggedTemplates) {
305
+ try {
306
+ const { createEmbedding } = await requireAsyncModule(packageName);
307
+ const { matcher, language, extension } = createEmbedding();
308
+ registry.register(matcher, language);
309
+ if (extension) extras.push(extension);
310
+ } catch {}
311
+ }
312
+ const embedded = embedCore.embedTaggedTemplates(base, registry);
313
+
314
+ const allSupportExtensions = new Map(supportExtensions);
315
+ for (const spec of callSupportExtensions) {
316
+ const [packageName, supportConfig] = Array.isArray(spec) ? spec : [spec, undefined];
317
+ allSupportExtensions.set(packageName, supportConfig);
318
+ }
319
+ for (const [packageName, supportConfig] of allSupportExtensions) {
320
+ try {
321
+ const { createSupportExtension } = await requireAsyncModule(packageName);
322
+ extras.push(createSupportExtension(embedded, supportConfig));
323
+ } catch {}
324
+ }
325
+ return extras.length ? new LanguageSupport(embedded.language, [embedded.support, extras]) : embedded;
230
326
  }
231
327
 
232
328
  try {
233
329
  const mod = await requireAsyncModule(`@codemirror/lang-${name}`);
234
330
  const fn = mod[name] ?? Object.values(mod).find((v) => typeof v === 'function');
235
- if (fn) return fn();
331
+ if (fn) return fn(config);
236
332
  } catch {}
237
333
 
238
334
  try {
@@ -256,8 +352,18 @@ async function resolveLanguageExtension(name) {
256
352
  * @param {string} [options.doc=''] - Initial document content.
257
353
  * @param {string} [options.language] - Language name, e.g. 'javascript', 'python'.
258
354
  * Tries @codemirror/lang-{name} first, then @codemirror/legacy-modes/mode/{name}.
355
+ * @param {object} [options.languageConfig] - Options passed to the language factory,
356
+ * e.g. { jsx: true, typescript: true } for 'javascript'.
259
357
  * @param {Array} [options.extensions=[]] - Extension specs. Each item may be:
260
358
  * a package-name string, a [packageName, options] tuple, or an already-built CM Extension.
359
+ * @param {object} [options.embeds] - Only used when language === 'javascript'.
360
+ * Optional — defaults to none.
361
+ * @param {string[]} [options.embeds.taggedTemplates] - Extra tagged-template embedding package
362
+ * names for this editor only, merged with whatever's registered globally via registerTaggedTemplate.
363
+ * @param {Array<string|[string, object]>} [options.embeds.supportExtensions] - Extra
364
+ * support-extension packages for this editor only (a bare package name, or a
365
+ * [packageName, config] tuple), merged with whatever's registered globally via
366
+ * registerSupportExtension.
261
367
  * @param {(value: string) => void} [options.onChange] - Called with the full document string
262
368
  * on every change. Use this to relay content back to the React Native side.
263
369
  *
@@ -267,7 +373,9 @@ async function createEditor({
267
373
  parent = document.body,
268
374
  doc = '',
269
375
  language,
376
+ languageConfig,
270
377
  extensions = [],
378
+ embeds,
271
379
  onChange,
272
380
  } = {}) {
273
381
  const [
@@ -332,7 +440,7 @@ async function createEditor({
332
440
  const extensionCompartment = new Compartment();
333
441
 
334
442
  const [langExt, resolvedExtensions] = await Promise.all([
335
- language ? resolveLanguageExtension(language) : Promise.resolve([]),
443
+ language ? resolveLanguageExtension(language, languageConfig, embeds) : Promise.resolve([]),
336
444
  Promise.all(extensions.map(resolveExtensionSpec)),
337
445
  ]);
338
446
 
@@ -377,9 +485,14 @@ async function createEditor({
377
485
  /**
378
486
  * Switches the active language. Loads @codemirror/lang-{name} on demand.
379
487
  * @param {string} name - Language name, e.g. 'python', 'css'.
488
+ * @param {object} [config] - Options passed to the language factory, e.g.
489
+ * { jsx: true, typescript: true } for 'javascript'. Must be plain serializable
490
+ * data — it crosses the WebView bridge as a postMessage payload.
491
+ * @param {object} [embeds] - Only used when name === 'javascript'; see createEditor's
492
+ * options.embeds. Optional — defaults to none.
380
493
  */
381
- async setLanguage(name) {
382
- const ext = await resolveLanguageExtension(name);
494
+ async setLanguage(name, config, embeds) {
495
+ const ext = await resolveLanguageExtension(name, config, embeds);
383
496
  view.dispatch({ effects: languageCompartment.reconfigure(ext) });
384
497
  },
385
498
 
@@ -411,5 +524,5 @@ async function createEditor({
411
524
  };
412
525
  }
413
526
 
414
- global.CodeMirrorEditor = { configure, createEditor, requireAsyncModule, registerExtension };
527
+ global.CodeMirrorEditor = { configure, createEditor, requireAsyncModule, registerExtension, registerLanguage, registerTaggedTemplate, registerSupportExtension };
415
528
  })(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this);
@@ -61,7 +61,10 @@
61
61
  (async function() {
62
62
  try {
63
63
 
64
- const { configure, createEditor, requireAsyncModule } = window.CodeMirrorEditor;
64
+ const {
65
+ configure, createEditor, requireAsyncModule,
66
+ registerLanguage, registerTaggedTemplate, registerSupportExtension,
67
+ } = window.CodeMirrorEditor;
65
68
 
66
69
  // Maps theme name → [packageSuffix, exportName] for themes in multi-export packages.
67
70
  // Single-export packages (darcula, monokai, etc.) export under the same name as the package.
@@ -110,10 +113,18 @@
110
113
 
111
114
  const extensions = config.extensions ?? [];
112
115
 
116
+ // Custom language packages must be registered before createEditor resolves
117
+ // config.language, otherwise e.g. language: 'sksl' would throw.
118
+ for (const [name, packageName] of Object.entries(config.languages ?? {})) {
119
+ registerLanguage(name, packageName);
120
+ }
121
+
113
122
  const editor = await createEditor({
114
123
  parent: document.body,
115
124
  doc: config.content ?? '',
116
125
  language: config.language,
126
+ languageConfig: config.languageConfig,
127
+ embeds: config.embeds,
117
128
  extensions,
118
129
  onChange: (() => {
119
130
  let _timer = null;
@@ -143,7 +154,7 @@
143
154
 
144
155
  // Separate compartment for the theme so setTheme and setExtensions never clobber each other.
145
156
  // appendConfig adds it to the live state; themeCompartment.reconfigure() updates it in-place.
146
- const { Compartment, StateEffect, Transaction } = await requireAsyncModule('@codemirror/state');
157
+ const { Compartment, StateEffect, Transaction, Prec } = await requireAsyncModule('@codemirror/state');
147
158
  const themeCompartment = new Compartment();
148
159
  editor.view.dispatch({ effects: StateEffect.appendConfig.of(themeCompartment.of([])) });
149
160
 
@@ -189,6 +200,19 @@
189
200
  ]),
190
201
  });
191
202
 
203
+ // Compartment for shortcuts registered from the React Native side at runtime.
204
+ const shortcutCompartment = new Compartment();
205
+ editor.view.dispatch({ effects: StateEffect.appendConfig.of(Prec.highest(shortcutCompartment.of([]))) });
206
+
207
+ const _registeredShortcuts = new Map();
208
+ const _updateShortcutKeymap = () => {
209
+ const entries = Array.from(_registeredShortcuts.entries()).map(([key, name]) => ({
210
+ key,
211
+ run: () => { _rnPost('__shortcut__', name); return true; },
212
+ }));
213
+ editor.view.dispatch({ effects: shortcutCompartment.reconfigure(keymap.of(entries)) });
214
+ };
215
+
192
216
  // Spread EditorController methods directly — getValue, setValue, setLanguage,
193
217
  // setExtensions, loadExtension, destroy — then add methods not in EditorController.
194
218
  const { getValue, setValue, setLanguage, setExtensions, loadExtension, destroy } = editor;
@@ -210,6 +234,19 @@
210
234
  loadExtension,
211
235
  destroy,
212
236
 
237
+ // Maps a language name to a package that doesn't follow the
238
+ // @codemirror/lang-{name} convention. Takes effect on the next setLanguage().
239
+ registerLanguage: (name, packageName) => registerLanguage(name, packageName),
240
+
241
+ // Imperative counterpart to createEditor's `embeds` option — registers a
242
+ // tagged-template DSL embedding / support-extension package globally (for
243
+ // the lifetime of this page), picked up by any subsequent
244
+ // setLanguage('javascript', ...) call. See js-codemirror-package's
245
+ // registerTaggedTemplate/registerSupportExtension for package shape.
246
+ registerTaggedTemplate: (packageName) => registerTaggedTemplate(packageName),
247
+ registerSupportExtension: (packageName, supportConfig) =>
248
+ registerSupportExtension(packageName, supportConfig),
249
+
213
250
  resetValue: (value) => {
214
251
  const view = editor.view;
215
252
  view.dispatch({
@@ -344,6 +381,16 @@
344
381
  effects: EditorView.scrollIntoView(head, margin !== undefined ? { y: 'center' } : {}),
345
382
  });
346
383
  },
384
+
385
+ registerShortcut: (key, name) => {
386
+ _registeredShortcuts.set(key, name);
387
+ _updateShortcutKeymap();
388
+ },
389
+
390
+ unregisterShortcut: (key) => {
391
+ _registeredShortcuts.delete(key);
392
+ _updateShortcutKeymap();
393
+ },
347
394
  });
348
395
 
349
396
  if (config.viewport) {
@@ -1,3 +0,0 @@
1
- export = withCodeditorAssets;
2
- declare function withCodeditorAssets(config: any): any;
3
- //# sourceMappingURL=app.plugin.d.ts.map
@@ -1,10 +0,0 @@
1
- export let overrides: ({
2
- exclude: RegExp;
3
- presets: string[];
4
- include?: undefined;
5
- } | {
6
- include: RegExp;
7
- presets: string[];
8
- exclude?: undefined;
9
- })[];
10
- //# sourceMappingURL=babel.config.d.ts.map
@@ -1,2 +0,0 @@
1
- export let assets: string[];
2
- //# sourceMappingURL=react-native.config.d.ts.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=copy-assets.d.ts.map