export interface HighlightJS {
	highlight: (code: string, options: { language: string, ignoreIllegals: boolean }) => { value: string }
	highlightAuto: (code: string) => { value: string }
	getLanguage: (name: string) => any
}

export const codeLanguages = {
	'1c': '1C',
	'abnf': 'ABNF',
	'accesslog': 'Access Log',
	'actionscript': 'ActionScript',
	'ada': 'Ada',
	'angelscript': 'AngelScript',
	'apache': 'Apache',
	'applescript': 'AppleScript',
	'arcade': 'Arcade',
	'arduino': 'Arduino',
	'armasm': 'ARM Assembly',
	'asciidoc': 'AsciiDoc',
	'aspectj': 'AspectJ',
	'autohotkey': 'AutoHotkey',
	'autoit': 'AutoIt',
	'avrasm': 'AVR Assembly',
	'awk': 'AWK',
	'axapta': 'Axapta',
	'bash': 'Bash',
	'basic': 'Basic',
	'bnf': 'BNF',
	'brainfuck': 'Brainfuck',
	'c': 'C',
	'cal': 'C/AL',
	'capnproto': 'Cap\'n Proto',
	'ceylon': 'Ceylon',
	'clean': 'Clean',
	'clojure': 'Clojure',
	'clojure-repl': 'Clojure REPL',
	'cmake': 'CMake',
	'coffeescript': 'CoffeeScript',
	'coq': 'Coq',
	'cos': 'Caché ObjectScript',
	'cpp': 'C++',
	'crmsh': 'crmsh',
	'crystal': 'Crystal',
	'csharp': 'C#',
	'csp': 'CSP',
	'css': 'CSS',
	'd': 'D',
	'markdown': 'Markdown',
	'dart': 'Dart',
	'delphi': 'Delphi',
	'diff': 'Diff',
	'django': 'Django',
	'dns': 'DNS Zone',
	'dockerfile': 'Dockerfile',
	'dos': 'DOS',
	'dsconfig': 'dsconfig',
	'dts': 'DTS',
	'dust': 'Dust',
	'ebnf': 'EBNF',
	'elixir': 'Elixir',
	'elm': 'Elm',
	'ruby': 'Ruby',
	'erb': 'ERB',
	'erlang-repl': 'Erlang REPL',
	'erlang': 'Erlang',
	'excel': 'Excel',
	'fix': 'FIX',
	'flix': 'Flix',
	'fortran': 'Fortran',
	'fsharp': 'F#',
	'gams': 'GAMS',
	'gauss': 'GAUSS',
	'gcode': 'G-code',
	'gherkin': 'Gherkin',
	'glsl': 'GLSL',
	'gml': 'GameMaker Language',
	'go': 'GoLang',
	'golo': 'Golo',
	'gradle': 'Gradle',
	'graphql': 'GraphQL',
	'groovy': 'Groovy',
	'haml': 'HAML',
	'handlebars': 'Handlebars',
	'haskell': 'Haskell',
	'haxe': 'Haxe',
	'hsp': 'HSP',
	'http': 'HTTP',
	'hy': 'Hy',
	'inform7': 'Inform 7',
	'ini': 'INI',
	'irpf90': 'IRPF90',
	'isbl': 'ISBL',
	'java': 'Java',
	'javascript': 'JS',
	'jboss-cli': 'JBoss CLI',
	'json': 'JSON',
	'julia': 'Julia',
	'julia-repl': 'Julia REPL',
	'kotlin': 'Kotlin',
	'lasso': 'Lasso',
	'latex': 'LaTeX',
	'ldif': 'LDIF',
	'leaf': 'Leaf',
	'less': 'Less',
	'lisp': 'Lisp',
	'livecodeserver': 'LiveCode Server',
	'livescript': 'LiveScript',
	'llvm': 'LLVM',
	'lsl': 'LSL',
	'lua': 'Lua',
	'makefile': 'Makefile',
	'mathematica': 'Mathematica',
	'matlab': 'MATLAB',
	'maxima': 'Maxima',
	'mel': 'MEL',
	'mercury': 'Mercury',
	'mipsasm': 'MIPS Assembly',
	'mizar': 'Mizar',
	'mojolicious': 'Mojolicious',
	'monkey': 'Monkey',
	'moonscript': 'MoonScript',
	'n1ql': 'N1QL',
	'nestedtext': 'NestedText',
	'nginx': 'Nginx',
	'nim': 'Nim',
	'nix': 'Nix',
	'node-repl': 'Node REPL',
	'nsis': 'NSIS',
	'objectivec': 'Objective-C',
	'ocaml': 'OCaml',
	'openscad': 'OpenSCAD',
	'oxygene': 'Oxygene',
	'parser3': 'Parser3',
	'pf': 'PF',
	'pgsql': 'PostgreSQL',
	'php': 'PHP',
	'php-template': 'PHP Template',
	'plaintext': 'Plain Text',
	'pony': 'Pony',
	'powershell': 'PowerShell',
	'processing': 'Processing',
	'profile': 'Profile',
	'prolog': 'Prolog',
	'properties': 'Properties',
	'protobuf': 'Protocol Buffers',
	'puppet': 'Puppet',
	'purebasic': 'PureBasic',
	'python': 'Python',
	'python-repl': 'Python REPL',
	'q': 'Q',
	'qml': 'QML',
	'r': 'R',
	'reasonml': 'ReasonML',
	'rib': 'RenderMan RIB',
	'roboconf': 'Roboconf',
	'routeros': 'RouterOS',
	'rsl': 'RSL',
	'ruleslanguage': 'RulesLanguage',
	'rust': 'Rust',
	'sas': 'SAS',
	'scala': 'Scala',
	'scheme': 'Scheme',
	'scilab': 'Scilab',
	'scss': 'SCSS',
	'shell': 'Shell',
	'smali': 'Smali',
	'smalltalk': 'Smalltalk',
	'sml': 'SML',
	'sqf': 'SQF',
	'sql': 'SQL',
	'stan': 'Stan',
	'stata': 'Stata',
	'step21': 'STEP Part 21',
	'stylus': 'Stylus',
	'subunit': 'SubUnit',
	'swift': 'Swift',
	'taggerscript': 'TaggerScript',
	'yaml': 'YAML',
	'tap': 'TAP',
	'tcl': 'Tcl',
	'thrift': 'Thrift',
	'tp': 'TP',
	'twig': 'Twig',
	'typescript': 'TS',
	'vala': 'Vala',
	'vbnet': 'VB.NET',
	'vbscript': 'VBScript',
	'vbscript-html': 'VBScript in HTML',
	'verilog': 'Verilog',
	'vhdl': 'VHDL',
	'vim': 'Vim',
	'wasm': 'WebAssembly',
	'wren': 'Wren',
	'x86asm': 'x86 Assembly',
	'xl': 'XL',
	'xquery': 'XQuery',
	'xml': 'XML',
	'zephir': 'Zephir',
	'html': 'HTML',
}

export type Language = 'html' | 'css' | 'javascript' | 'typescript' | 'json' | 'markdown' | string

export interface CodeEditorProps {
	language?: Language
	readonly?: boolean
	modelValue?: string
	autodetect?: boolean
	ignoreIllegals?: boolean
	label?: string
	height?: string
}
