@powerduck/md-editor 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -1,17 +1,23 @@
1
1
  # @powerduck/md-editor
2
2
 
3
- High-performance embeddable Markdown editor built on the markdown-it ecosystem. Supports KaTeX math formulas, Markmap mindmaps, native React integration, block-level incremental rendering with debounced scheduling. Ships in two modes: **simple** (no toolbar, pure edit + preview) and **complex** (toolbar + status bar). Styled via CSS custom properties with light/dark themes.
3
+ High-performance embeddable Markdown editor built on the markdown-it ecosystem. Supports KaTeX math formulas, Markmap mindmaps, highlight.js code blocks with traffic-light UI and copy button, github-markdown-css preview styling, rich toolbar with image/video/YouTube popup dialogs, native React integration, block-level incremental rendering with debounced scheduling. Ships in two modes: **simple** (no toolbar, pure edit + preview) and **complex** (toolbar + status bar). Styled via CSS custom properties with light/dark themes.
4
4
 
5
5
  ## Features
6
6
 
7
7
  - **Markdown editing** powered by CodeMirror 6 with markdown syntax highlighting
8
8
  - **Math formulas** via KaTeX (`$E=mc^2$` inline, `$$...$$` block)
9
9
  - **Mindmaps** via Markmap (```` ```mindmap ```` code fences)
10
+ - **Code highlighting** via highlight.js -- 20+ languages, macOS-style traffic-light header, one-click copy button
11
+ - **github-markdown-css** preview -- proper heading, list, table, and typography styling
12
+ - **Rich toolbar** -- heading, bold, italic, link, image, video, YouTube, quote, lists, code, table, math, mindmap, horizontal rule, preview toggle, theme toggle
13
+ - **Popup dialogs** -- image URL + alt text, video URL, YouTube URL/ID extraction
14
+ - **Video rendering** -- `.mp4`, `.webm`, `.ogg` links render as `<video>` elements
10
15
  - **Block-level incremental rendering** -- only changed sections re-render
11
16
  - **Adaptive debounce** -- preview render delay scales with document length
12
17
  - **Simple / Complex modes** -- toggle toolbar and status bar at runtime
13
18
  - **Light / Dark themes** -- CSS custom properties, inherits host design tokens
14
19
  - **React component** -- `forwardRef` with imperative handle
20
+ - **Zero Chinese** -- all code, comments, and UI strings in American English
15
21
 
16
22
  ## Installation
17
23
 
@@ -65,6 +71,7 @@ function App() {
65
71
  | `theme` | `'light' \| 'dark'` | `'light'` | Color theme |
66
72
  | `math` | `boolean` | `true` | Enable KaTeX math |
67
73
  | `mindmap` | `boolean` | `true` | Enable Markmap mindmaps |
74
+ | `codeHighlight` | `boolean` | `true` | Enable highlight.js code blocks with copy button |
68
75
  | `preview` | `boolean` | `true` | Show preview pane |
69
76
  | `autoPreview` | `boolean` | `true` | Auto-render preview on edit |
70
77
  | `renderDebounce` | `number \| false` | adaptive | Preview debounce in ms |
@@ -95,6 +102,34 @@ function App() {
95
102
  ```
96
103
  ````
97
104
 
105
+ ## Code Blocks
106
+
107
+ Code fences are automatically highlighted with highlight.js (20+ languages including JavaScript, TypeScript, Python, JSON, Bash, CSS, HTML, SQL, YAML, Go, Rust, Java, C/C++). Each code block gets a macOS-style header with traffic-light dots, a language label, and a copy button.
108
+
109
+ ````markdown
110
+ ```typescript
111
+ interface User {
112
+ name: string;
113
+ age: number;
114
+ }
115
+ ```
116
+ ````
117
+
118
+ Unknown languages are auto-detected; if detection fails, the content is HTML-escaped and displayed as plain text. Disable code highlighting with `codeHighlight: false`.
119
+
120
+ ## Media Insertion
121
+
122
+ The complex-mode toolbar includes popup dialogs for inserting media:
123
+
124
+ - **Image** (`image` button): URL + alt text -> `![alt](url)`
125
+ - **Video** (`video` button): URL (.mp4, .webm, .ogg) -> renders as `<video controls>` in preview
126
+ - **YouTube** (`youtube` button): accepts any YouTube URL format (watch?v=, youtu.be, embed, shorts) or raw 11-char ID -> inserts a linked thumbnail image that opens the video on click
127
+
128
+ YouTube insertion extracts the video ID automatically and produces:
129
+ ```markdown
130
+ [![YouTube video](https://img.youtube.com/vi/VIDEO_ID/hqdefault.jpg)](https://www.youtube.com/watch?v=VIDEO_ID)
131
+ ```
132
+
98
133
  ## Performance
99
134
 
100
135
  - **Block splitting**: documents are split at ATX headings (`#` through `######`). Content inside code fences is never split.
@@ -1,9 +1,12 @@
1
1
  import MarkdownIt from 'markdown-it';
2
+ import 'github-markdown-css/github-markdown.css';
2
3
  export interface RendererOptions {
3
4
  /** Enable KaTeX math rendering. Default: true. */
4
5
  math?: boolean;
5
6
  /** Enable Markmap mindmap rendering. Default: true. */
6
7
  mindmap?: boolean;
8
+ /** Enable syntax highlighting for code blocks. Default: true. */
9
+ codeHighlight?: boolean;
7
10
  /** Allow raw HTML in markdown source. Default: false (safer). */
8
11
  html?: boolean;
9
12
  /** Convert soft line breaks to <br>. Default: false. */
package/dist/Toolbar.d.ts CHANGED
@@ -3,7 +3,7 @@ export interface ToolbarAction {
3
3
  title: string;
4
4
  /** SVG/HTML icon markup */
5
5
  icon: string;
6
- handler: () => void;
6
+ handler: (button: HTMLButtonElement) => void;
7
7
  /** Append a group separator after this button */
8
8
  groupEnd?: boolean;
9
9
  /** Whether this is a toggle button (e.g. preview visibility, theme) */
package/dist/icons.d.ts CHANGED
@@ -11,5 +11,12 @@ export declare const icons: {
11
11
  readonly refresh: string;
12
12
  readonly moon: string;
13
13
  readonly sun: string;
14
+ readonly image: string;
15
+ readonly video: string;
16
+ readonly youtube: string;
17
+ readonly quote: string;
18
+ readonly list: string;
19
+ readonly listOrdered: string;
20
+ readonly hr: string;
14
21
  };
15
22
  export type IconName = keyof typeof icons;
package/dist/index.cjs CHANGED
@@ -1,7 +1,9 @@
1
- "use strict";var S=Object.create;var f=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var R=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of T(e))!L.call(n,i)&&i!==t&&f(n,i,{get:()=>e[i],enumerable:!(r=x(e,i))||r.enumerable});return n};var k=(n,e,t)=>(t=n!=null?S(N(n)):{},R(e||!n||!n.__esModule?f(t,"default",{value:n,enumerable:!0}):t,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("@codemirror/state"),m=require("@codemirror/view"),p=require("@codemirror/commands"),H=require("@codemirror/lang-markdown"),I=require("@codemirror/language-data"),A=require("markdown-it"),V=require("markdown-it-texmath"),$=require("katex");class v{constructor(e,t){this.lineNumbersCompartment=new b.Compartment;const r=[p.history(),m.keymap.of([...p.defaultKeymap,...p.historyKeymap]),H.markdown({codeLanguages:I.languages}),m.EditorView.lineWrapping,this.lineNumbersCompartment.of(t.lineNumbers?m.lineNumbers():[]),m.EditorView.updateListener.of(i=>{var s;i.docChanged&&((s=t.onChange)==null||s.call(t,i.state.doc.toString()))})];this.view=new m.EditorView({state:b.EditorState.create({doc:t.value??"",extensions:r}),parent:e})}getValue(){return this.view.state.doc.toString()}setValue(e){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:e}})}setLineNumbers(e){this.view.dispatch({effects:this.lineNumbersCompartment.reconfigure(e?m.lineNumbers():[])})}insertAtCursor(e){const{from:t,to:r}=this.view.state.selection.main;this.view.dispatch({changes:{from:t,to:r,insert:e},selection:{anchor:t+e.length}}),this.view.focus()}focus(){this.view.focus()}destroy(){this.view.destroy()}}function q(n){n.use(V,{engine:$,delimiters:"dollars",katexOptions:{throwOnError:!1,strict:!1}})}let j=0;function D(n){const e=n.renderer.rules.fence?n.renderer.rules.fence.bind(n.renderer.rules):(t,r,i,s,o)=>o.renderToken(t,r,i);n.renderer.rules.fence=(t,r,i,s,o)=>{const a=t[r];if(!a)return e(t,r,i,s,o);if(a.info.trim().toLowerCase()==="mindmap"){const l=`md-editor-mindmap-${++j}`,u=encodeURIComponent(a.content);return`<div class="md-editor-mindmap" id="${l}" data-source="${u}"></div>`}return e(t,r,i,s,o)}}async function K(n){const e=n.querySelectorAll(".md-editor-mindmap:not([data-hydrated])");if(e.length===0)return;const{Transformer:t}=await import("markmap-lib"),r=await import("markmap-view"),i=r.Markmap??r.default;if(!i)return;const s=new t;for(const o of Array.from(e)){o.setAttribute("data-hydrated","1");const a=decodeURIComponent(o.dataset.source??"")||"- Empty mindmap",{root:d}=s.transform(a);o.innerHTML="";const l=document.createElementNS("http://www.w3.org/2000/svg","svg");l.setAttribute("style","width:100%;height:100%;min-height:280px;"),o.appendChild(l),i.create(l,{autoFit:!0},d)}}class g{constructor(e={}){this.md=new A({html:e.html??!1,linkify:!0,breaks:e.breaks??!1,typographer:!0}),e.math!==!1&&q(this.md),this.mindmapEnabled=e.mindmap!==!1,this.mindmapEnabled&&D(this.md)}render(e){return this.md.render(e||"")}async hydrate(e){this.mindmapEnabled&&await K(e)}}class y{constructor(e){this.buttons=new Map,this.el=document.createElement("div"),this.el.className="md-editor-toolbar",this.el.setAttribute("role","toolbar");for(const t of e){const r=document.createElement("button");if(r.type="button",r.className="md-editor-toolbar-btn",t.toggle&&r.classList.add("is-toggle"),t.active&&r.classList.add("is-active"),r.title=t.title,r.setAttribute("aria-label",t.title),r.setAttribute("data-action",t.name),r.innerHTML=t.icon,r.addEventListener("click",t.handler),this.buttons.set(t.name,r),this.el.appendChild(r),t.groupEnd){const i=document.createElement("span");i.className="md-editor-toolbar-sep",this.el.appendChild(i)}}}setActive(e,t){var r;(r=this.buttons.get(e))==null||r.classList.toggle("is-active",t)}setIcon(e,t){const r=this.buttons.get(e);r&&(r.innerHTML=t)}destroy(){for(const e of this.buttons.values())e.onclick=null;this.buttons.clear(),this.el.remove()}}function w(n){const e=n.trim();return{charCount:n.length,wordCount:e?e.split(/\s+/).length:0}}class C{constructor(e){this.el=document.createElement("div"),this.el.className="md-editor-statusbar",this.countEl=document.createElement("span"),this.blockEl=document.createElement("span"),this.blockEl.className="md-editor-statusbar-muted",this.refreshBtn=document.createElement("button"),this.refreshBtn.type="button",this.refreshBtn.className="md-editor-statusbar-refresh",this.refreshBtn.textContent="Refresh preview",this.refreshBtn.style.display="none",this.refreshBtn.addEventListener("click",e.onRefreshPreview),this.el.appendChild(this.countEl),this.el.appendChild(this.blockEl),this.el.appendChild(this.refreshBtn)}update(e){this.countEl.textContent=`${e.charCount} chars · ${e.wordCount} words`,this.blockEl.textContent=`${e.blockCount} render blocks`,this.refreshBtn.style.display=e.autoPreview?"none":""}destroy(){this.refreshBtn.onclick=null,this.el.remove()}}const O=/^ {0,3}#{1,6}\s/,F=/^ {0,3}(`{3,}|~{3,})/;function _(n){let e=5381;for(let t=0;t<n.length;t++)e=e*33^n.charCodeAt(t);return(e>>>0).toString(36)+":"+n.length}function M(n){var a;const e=n.split(`
2
- `),t=[];let r=[],i=!1,s="";for(const d of e){const l=d.match(F);if(l){const u=((a=l[1])==null?void 0:a[0])??"";i?u===s&&(i=!1):(i=!0,s=u),r.push(d);continue}if(!i&&O.test(d)&&r.length>0){t.push(r.join(`
3
- `)),r=[d];continue}r.push(d)}r.length>0&&t.push(r.join(`
4
- `)),t.length===0&&t.push("");const o=new Map;return t.map(d=>{const l=_(d),u=(o.get(l)??0)+1;return o.set(l,u),{key:`${l}#${u}`,hash:l,source:d}})}class B{constructor(e,t,r=800){this.container=e,this.renderBlock=t,this.maxCacheEntries=r,this.nodeByKey=new Map,this.htmlByHash=new Map,this.prevBlocks=[]}update(e){const t=M(e),r=document.createDocumentFragment(),i=new Map;let s=0;for(const o of t){let a=this.nodeByKey.get(o.key);if(!a){let d=this.htmlByHash.get(o.hash);d===void 0&&(d=this.renderBlock(o.source),this.htmlByHash.set(o.hash,d),s++),a=document.createElement("div"),a.className="md-editor-block",a.dataset.blockKey=o.key,a.innerHTML=d}i.set(o.key,a),r.appendChild(a)}return this.container.innerHTML="",this.container.appendChild(r),this.nodeByKey=i,this.prevBlocks=t,this.evictCacheIfNeeded(t),{rerenderedCount:s,totalCount:t.length}}evictCacheIfNeeded(e){if(this.htmlByHash.size<=this.maxCacheEntries)return;const t=new Set(e.map(r=>r.hash));for(const r of Array.from(this.htmlByHash.keys()))t.has(r)||this.htmlByHash.delete(r)}getBlockCount(){return this.prevBlocks.length}destroy(){this.container.innerHTML="",this.nodeByKey.clear(),this.htmlByHash.clear(),this.prevBlocks=[]}}function E(n,e){let t,r;const i=(...s)=>{r=s,t!==void 0&&clearTimeout(t),t=setTimeout(()=>{t=void 0,r&&n(...r)},e)};return i.cancel=()=>{t!==void 0&&clearTimeout(t),t=void 0},i.flush=()=>{t!==void 0&&(clearTimeout(t),t=void 0,r&&n(...r))},i}function P(n,e=120,t=600){const r=Math.max(0,n),i=Math.floor(r/2e4)*60;return Math.min(t,e+i)}function W(n,e=300){const t=window;return typeof t.requestIdleCallback=="function"?t.requestIdleCallback(n,{timeout:e}):window.setTimeout(n,0)}function Z(n){const e=window;typeof e.cancelIdleCallback=="function"?e.cancelIdleCallback(n):clearTimeout(n)}const c=n=>`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">${n}</svg>`,h={bold:c('<path d="M4 3h4.2a2.4 2.4 0 0 1 0 4.8H4V3Z" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><path d="M4 7.8h4.8a2.4 2.4 0 1 1 0 4.8H4V7.8Z" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/>'),italic:c('<path d="M9.5 3h-3M6.5 13h-3M8.2 3 5.8 13" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>'),heading:c('<path d="M3.5 3v10M11.5 3v10M3.5 8h8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>'),link:c('<path d="M6.8 9.2 9.2 6.8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><path d="M7.6 4.4 8.4 3.6a2.6 2.6 0 1 1 3.7 3.7l-.9.9M8.4 11.6l-.8.8a2.6 2.6 0 1 1-3.7-3.7l.9-.9" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>'),code:c('<path d="M5.5 4.5 2 8l3.5 3.5M10.5 4.5 14 8l-3.5 3.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>'),table:c('<rect x="2.5" y="3" width="11" height="10" rx="1.2" stroke="currentColor" stroke-width="1.3"/><path d="M2.5 6.6h11M6.5 3v10" stroke="currentColor" stroke-width="1.3"/>'),sigma:c('<path d="M11.5 3.5h-7l3.5 4.5-3.5 4.5h7" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round" stroke-linecap="round"/>'),mindmap:c('<circle cx="3.2" cy="8" r="1.6" stroke="currentColor" stroke-width="1.3"/><circle cx="12.2" cy="3.6" r="1.6" stroke="currentColor" stroke-width="1.3"/><circle cx="12.2" cy="12.4" r="1.6" stroke="currentColor" stroke-width="1.3"/><path d="M4.6 7.3 10.7 4.2M4.6 8.7l6.1 3.1" stroke="currentColor" stroke-width="1.3"/>'),eye:c('<path d="M1.5 8S4 3.5 8 3.5 14.5 8 14.5 8 12 12.5 8 12.5 1.5 8 1.5 8Z" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/><circle cx="8" cy="8" r="1.8" stroke="currentColor" stroke-width="1.3"/>'),refresh:c('<path d="M13 8a5 5 0 1 1-1.6-3.7" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><path d="M13 3v3.2H9.8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>'),moon:c('<path d="M13 9.6A5.4 5.4 0 1 1 6.4 3a4.3 4.3 0 0 0 6.6 6.6Z" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/>'),sun:c('<circle cx="8" cy="8" r="3" stroke="currentColor" stroke-width="1.3"/><path d="M8 1.8v1.4M8 12.8v1.4M14.2 8h-1.4M3.2 8H1.8M12.4 3.6l-1 1M4.6 11.4l-1 1M12.4 12.4l-1-1M4.6 4.6l-1-1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>')},U={bold:["**","**","bold text"],italic:["_","_","italic text"],heading:["## ","","Heading"],link:["[","](https://)","link text"],code:["```\n","\n```","code"],math:["$","$","E=mc^2"],mindmapBlock:[`\`\`\`mindmap
1
+ "use strict";var Yt=Object.create;var Ue=Object.defineProperty;var Zt=Object.getOwnPropertyDescriptor;var Wt=Object.getOwnPropertyNames;var Vt=Object.getPrototypeOf,Xt=Object.prototype.hasOwnProperty;var Qt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Wt(t))!Xt.call(e,a)&&a!==n&&Ue(e,a,{get:()=>t[a],enumerable:!(r=Zt(t,a))||r.enumerable});return e};var $e=(e,t,n)=>(n=e!=null?Yt(Vt(e)):{},Qt(t||!e||!e.__esModule?Ue(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Fe=require("@codemirror/state"),ne=require("@codemirror/view"),Se=require("@codemirror/commands"),Jt=require("@codemirror/lang-markdown"),jt=require("@codemirror/language-data"),en=require("markdown-it"),tn=require("markdown-it-texmath"),nn=require("katex");class Xe{constructor(t,n){this.lineNumbersCompartment=new Fe.Compartment;const r=[Se.history(),ne.keymap.of([...Se.defaultKeymap,...Se.historyKeymap]),Jt.markdown({codeLanguages:jt.languages}),ne.EditorView.lineWrapping,this.lineNumbersCompartment.of(n.lineNumbers?ne.lineNumbers():[]),ne.EditorView.updateListener.of(a=>{var c;a.docChanged&&((c=n.onChange)==null||c.call(n,a.state.doc.toString()))})];this.view=new ne.EditorView({state:Fe.EditorState.create({doc:n.value??"",extensions:r}),parent:t})}getValue(){return this.view.state.doc.toString()}setValue(t){this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:t}})}setLineNumbers(t){this.view.dispatch({effects:this.lineNumbersCompartment.reconfigure(t?ne.lineNumbers():[])})}insertAtCursor(t){const{from:n,to:r}=this.view.state.selection.main;this.view.dispatch({changes:{from:n,to:r,insert:t},selection:{anchor:n+t.length}}),this.view.focus()}focus(){this.view.focus()}destroy(){this.view.destroy()}}function rn(e){e.use(tn,{engine:nn,delimiters:"dollars",katexOptions:{throwOnError:!1,strict:!1}})}let sn=0;function an(e){const t=e.renderer.rules.fence?e.renderer.rules.fence.bind(e.renderer.rules):(n,r,a,c,i)=>i.renderToken(n,r,a);e.renderer.rules.fence=(n,r,a,c,i)=>{const s=n[r];if(!s)return t(n,r,a,c,i);if(s.info.trim().toLowerCase()==="mindmap"){const l=`md-editor-mindmap-${++sn}`,u=encodeURIComponent(s.content);return`<div class="md-editor-mindmap" id="${l}" data-source="${u}"></div>`}return t(n,r,a,c,i)}}const on=600,cn=320;async function ln(e){const t=e.querySelectorAll(".md-editor-mindmap:not([data-hydrated])");if(t.length===0)return;const{Transformer:n}=await import("markmap-lib"),r=await import("markmap-view"),a=r.Markmap??r.default;if(!a)return;const c=new n;for(const i of Array.from(t)){i.setAttribute("data-hydrated","1");const s=decodeURIComponent(i.dataset.source??"")||"- Empty mindmap",{root:o}=c.transform(s);i.innerHTML="";const l=i.clientWidth>0?i.clientWidth:on,u=i.clientHeight>0?i.clientHeight:cn,f=document.createElementNS("http://www.w3.org/2000/svg","svg");f.setAttribute("width",String(l)),f.setAttribute("height",String(u)),f.style.width="100%",f.style.height="100%",f.style.display="block",i.appendChild(f),a.create(f,{autoFit:!0},o)}}function dn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Qe(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{const n=e[t],r=typeof n;(r==="object"||r==="function")&&!Object.isFrozen(n)&&Qe(n)}),e}class ze{constructor(t){t.data===void 0&&(t.data={}),this.data=t.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function Je(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function Q(e,...t){const n=Object.create(null);for(const r in e)n[r]=e[r];return t.forEach(function(r){for(const a in r)n[a]=r[a]}),n}const un="</span>",He=e=>!!e.scope,gn=(e,{prefix:t})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map((r,a)=>`${r}${"_".repeat(a+1)}`)].join(" ")}return`${t}${e}`};class pn{constructor(t,n){this.buffer="",this.classPrefix=n.classPrefix,t.walk(this)}addText(t){this.buffer+=Je(t)}openNode(t){if(!He(t))return;const n=gn(t.scope,{prefix:this.classPrefix});this.span(n)}closeNode(t){He(t)&&(this.buffer+=un)}value(){return this.buffer}span(t){this.buffer+=`<span class="${t}">`}}const Ke=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class Re{constructor(){this.rootNode=Ke(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){const n=Ke({scope:t});this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,n){return typeof n=="string"?t.addText(n):n.children&&(t.openNode(n),n.children.forEach(r=>this._walk(t,r)),t.closeNode(n)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(n=>typeof n=="string")?t.children=[t.children.join("")]:t.children.forEach(n=>{Re._collapse(n)}))}}class hn extends Re{constructor(t){super(),this.options=t}addText(t){t!==""&&this.add(t)}startScope(t){this.openNode(t)}endScope(){this.closeNode()}__addSublanguage(t,n){const r=t.root;n&&(r.scope=`language:${n}`),this.add(r)}toHTML(){return new pn(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function de(e){return e?typeof e=="string"?e:e.source:null}function je(e){return te("(?=",e,")")}function mn(e){return te("(?:",e,")*")}function bn(e){return te("(?:",e,")?")}function te(...e){return e.map(n=>de(n)).join("")}function fn(e){const t=e[e.length-1];return typeof t=="object"&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function ye(...e){return"("+(fn(e).capture?"":"?:")+e.map(r=>de(r)).join("|")+")"}function et(e){return new RegExp(e.toString()+"|").exec("").length-1}function _n(e,t){const n=e&&e.exec(t);return n&&n.index===0}const En=new RegExp(ye(/\[(?:[^\\\]]|\\.)*\]/,/\(\?<(?![=!])[^>]+>/,/\(\?'[^']+'/,/\(\??/,/\\([1-9][0-9]*)/,/\\./));function Ce(e,{joinWith:t}){let n=0;return e.map(r=>{n+=1;const a=n;let c=de(r),i="";for(;c.length>0;){const s=En.exec(c);if(!s){i+=c;break}i+=c.substring(0,s.index),c=c.substring(s.index+s[0].length),s[0][0]==="\\"&&s[1]?i+="\\"+String(Number(s[1])+a):(i+=s[0],(s[0]==="("||/^\(\?[<']/.test(s[0]))&&n++)}return i}).map(r=>`(${r})`).join(t)}const yn=/\b\B/,tt="[a-zA-Z]\\w*",Me="[a-zA-Z_]\\w*",nt="\\b\\d+(\\.\\d+)?",rt="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",it="\\b(0b[01]+)",wn="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",vn=(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=te(t,/.*\b/,e.binary,/\b.*/)),Q({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(n,r)=>{n.index!==0&&r.ignoreMatch()}},e)},ue={begin:"\\\\[\\s\\S]",relevance:0},Nn={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[ue]},Tn={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[ue]},Sn={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},we=function(e,t,n={}){const r=Q({scope:"comment",begin:e,end:t,contains:[]},n);r.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const a=ye("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:te(/[ ]+/,"(",a,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),r},kn=we("//","$"),An=we("/\\*","\\*/"),Rn=we("#","$"),Cn={scope:"number",begin:nt,relevance:0},Mn={scope:"number",begin:rt,relevance:0},On={scope:"number",begin:it,relevance:0},xn={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[ue,{begin:/\[/,end:/\]/,relevance:0,contains:[ue]}]},In={scope:"title",begin:tt,relevance:0},Ln={scope:"title",begin:Me,relevance:0},Dn={begin:"\\.\\s*"+Me,relevance:0},Bn=function(e){return Object.assign(e,{"on:begin":(t,n)=>{n.data._beginMatch=t[1]},"on:end":(t,n)=>{n.data._beginMatch!==t[1]&&n.ignoreMatch()}})};var he=Object.freeze({__proto__:null,APOS_STRING_MODE:Nn,BACKSLASH_ESCAPE:ue,BINARY_NUMBER_MODE:On,BINARY_NUMBER_RE:it,COMMENT:we,C_BLOCK_COMMENT_MODE:An,C_LINE_COMMENT_MODE:kn,C_NUMBER_MODE:Mn,C_NUMBER_RE:rt,END_SAME_AS_BEGIN:Bn,HASH_COMMENT_MODE:Rn,IDENT_RE:tt,MATCH_NOTHING_RE:yn,METHOD_GUARD:Dn,NUMBER_MODE:Cn,NUMBER_RE:nt,PHRASAL_WORDS_MODE:Sn,QUOTE_STRING_MODE:Tn,REGEXP_MODE:xn,RE_STARTERS_RE:wn,SHEBANG:vn,TITLE_MODE:In,UNDERSCORE_IDENT_RE:Me,UNDERSCORE_TITLE_MODE:Ln});function Pn(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function Un(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function $n(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=Pn,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function Fn(e,t){Array.isArray(e.illegal)&&(e.illegal=ye(...e.illegal))}function zn(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function Hn(e,t){e.relevance===void 0&&(e.relevance=1)}const Kn=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach(r=>{delete e[r]}),e.keywords=n.keywords,e.begin=te(n.beforeMatch,je(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},Gn=["of","and","for","in","not","or","if","then","parent","list","value"],qn="keyword";function st(e,t,n=qn){const r=Object.create(null);return typeof e=="string"?a(n,e.split(" ")):Array.isArray(e)?a(n,e):Object.keys(e).forEach(function(c){Object.assign(r,st(e[c],t,c))}),r;function a(c,i){t&&(i=i.map(s=>s.toLowerCase())),i.forEach(function(s){const o=s.split("|");r[o[0]]=[c,Yn(o[0],o[1])]})}}function Yn(e,t){return t?Number(t):Zn(e)?0:1}function Zn(e){return Gn.includes(e.toLowerCase())}const Ge={},ee=e=>{console.error(e)},qe=(e,...t)=>{console.log(`WARN: ${e}`,...t)},re=(e,t)=>{Ge[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Ge[`${e}/${t}`]=!0)},_e=new Error;function at(e,t,{key:n}){let r=0;const a=e[n],c={},i={};for(let s=1;s<=t.length;s++)i[s+r]=a[s],c[s+r]=!0,r+=et(t[s-1]);e[n]=i,e[n]._emit=c,e[n]._multi=!0}function Wn(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw ee("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),_e;if(typeof e.beginScope!="object"||e.beginScope===null)throw ee("beginScope must be object"),_e;at(e,e.begin,{key:"beginScope"}),e.begin=Ce(e.begin,{joinWith:""})}}function Vn(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw ee("skip, excludeEnd, returnEnd not compatible with endScope: {}"),_e;if(typeof e.endScope!="object"||e.endScope===null)throw ee("endScope must be object"),_e;at(e,e.end,{key:"endScope"}),e.end=Ce(e.end,{joinWith:""})}}function Xn(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function Qn(e){Xn(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),Wn(e),Vn(e)}function Jn(e){function t(i,s){return new RegExp(de(i),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(s?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(s,o){o.position=this.position++,this.matchIndexes[this.matchAt]=o,this.regexes.push([o,s]),this.matchAt+=et(s)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const s=this.regexes.map(o=>o[1]);this.matcherRe=t(Ce(s,{joinWith:"|"}),!0),this.lastIndex=0}exec(s){this.matcherRe.lastIndex=this.lastIndex;const o=this.matcherRe.exec(s);if(!o)return null;const l=o.findIndex((f,b)=>b>0&&f!==void 0),u=this.matchIndexes[l];return o.splice(0,l),Object.assign(o,u)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(s){if(this.multiRegexes[s])return this.multiRegexes[s];const o=new n;return this.rules.slice(s).forEach(([l,u])=>o.addRule(l,u)),o.compile(),this.multiRegexes[s]=o,o}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(s,o){this.rules.push([s,o]),o.type==="begin"&&this.count++}exec(s){const o=this.getMatcher(this.regexIndex);o.lastIndex=this.lastIndex;let l=o.exec(s);if(this.resumingScanAtSamePosition()&&!(l&&l.index===this.lastIndex)){const u=this.getMatcher(0);u.lastIndex=this.lastIndex+1,l=u.exec(s)}return l&&(this.regexIndex+=l.position+1,this.regexIndex===this.count&&this.considerAll()),l}}function a(i){const s=new r;return i.contains.forEach(o=>s.addRule(o.begin,{rule:o,type:"begin"})),i.terminatorEnd&&s.addRule(i.terminatorEnd,{type:"end"}),i.illegal&&s.addRule(i.illegal,{type:"illegal"}),s}function c(i,s){const o=i;if(i.isCompiled)return o;[Un,zn,Qn,Kn].forEach(u=>u(i,s)),e.compilerExtensions.forEach(u=>u(i,s)),i.__beforeBegin=null,[$n,Fn,Hn].forEach(u=>u(i,s)),i.isCompiled=!0;let l=null;return typeof i.keywords=="object"&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords),l=i.keywords.$pattern,delete i.keywords.$pattern),l=l||/\w+/,i.keywords&&(i.keywords=st(i.keywords,e.case_insensitive)),o.keywordPatternRe=t(l,!0),s&&(i.begin||(i.begin=/\B|\b/),o.beginRe=t(o.begin),!i.end&&!i.endsWithParent&&(i.end=/\B|\b/),i.end&&(o.endRe=t(o.end)),o.terminatorEnd=de(o.end)||"",i.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(i.end?"|":"")+s.terminatorEnd)),i.illegal&&(o.illegalRe=t(i.illegal)),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map(function(u){return jn(u==="self"?i:u)})),i.contains.forEach(function(u){c(u,o)}),i.starts&&c(i.starts,s),o.matcher=a(o),o}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=Q(e.classNameAliases||{}),c(e)}function ot(e){return e?e.endsWithParent||ot(e.starts):!1}function jn(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return Q(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:ot(e)?Q(e,{starts:e.starts?Q(e.starts):null}):Object.isFrozen(e)?Q(e):e}var er="11.12.0";class tr extends Error{constructor(t,n){super(t),this.name="HTMLInjectionError",this.html=n}}const ke=Je,Ye=Q,Ze=Symbol("nomatch"),nr=7,ct=function(e){const t=Object.create(null),n=Object.create(null),r=[];let a=!0;const c="Could not find the language '{}', did you forget to load/include a language module?",i={disableAutodetect:!0,name:"Plain text",contains:[]};let s={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:hn};function o(d){return s.noHighlightRe.test(d)}function l(d){let h=d.className+" ";h+=d.parentNode?d.parentNode.className:"";const p=s.languageDetectRe.exec(h);if(p){const y=P(p[1]);return y||(qe(c.replace("{}",p[1])),qe("Falling back to no-highlight mode for this block.",d)),y?p[1]:"no-highlight"}return h.split(/\s+/).find(y=>o(y)||P(y))}function u(d,h,p){let y="",T="";typeof h=="object"?(y=d,p=h.ignoreIllegals,T=h.language):(re("10.7.0","highlight(lang, code, ...args) has been deprecated."),re("10.7.0",`Please use highlight(code, options) instead.
2
+ https://github.com/highlightjs/highlight.js/issues/2277`),T=d,y=h),p===void 0&&(p=!0);const I={code:y,language:T};X("before:highlight",I);const H=I.result?I.result:f(I.language,I.code,p);return H.code=I.code,X("after:highlight",H),H}function f(d,h,p,y){const T=Object.create(null);function I(g,m){return g.keywords[m]}function H(){if(!E.keywords){z.addText(C);return}let g=0;E.keywordPatternRe.lastIndex=0;let m=E.keywordPatternRe.exec(C),w="";for(;m;){w+=C.substring(g,m.index);const A=Z.case_insensitive?m[0].toLowerCase():m[0],K=I(E,A);if(K){const[W,Gt]=K;if(z.addText(w),w="",T[A]=(T[A]||0)+1,T[A]<=nr&&(pe+=Gt),W.startsWith("_"))w+=m[0];else{const qt=Z.classNameAliases[W]||W;Y(m[0],qt)}}else w+=m[0];g=E.keywordPatternRe.lastIndex,m=E.keywordPatternRe.exec(C)}w+=C.substring(g),z.addText(w)}function q(){if(C==="")return;let g=null;if(typeof E.subLanguage=="string"){if(!t[E.subLanguage]){z.addText(C);return}g=f(E.subLanguage,C,!0,Pe[E.subLanguage]),Pe[E.subLanguage]=g._top}else g=_(C,E.subLanguage.length?E.subLanguage:null);E.relevance>0&&(pe+=g.relevance),z.__addSublanguage(g._emitter,g.language)}function G(){E.subLanguage!=null?q():H(),C=""}function Y(g,m){g!==""&&(z.startScope(m),z.addText(g),z.endScope())}function Ie(g,m){let w=1;const A=m.length-1;for(;w<=A;){if(!g._emit[w]){w++;continue}const K=Z.classNameAliases[g[w]]||g[w],W=m[w];K?Y(W,K):(C=W,H(),C=""),w++}}function Le(g,m){return g.scope&&typeof g.scope=="string"&&z.openNode(Z.classNameAliases[g.scope]||g.scope),g.beginScope&&(g.beginScope._wrap?(Y(C,Z.classNameAliases[g.beginScope._wrap]||g.beginScope._wrap),C=""):g.beginScope._multi&&(Ie(g.beginScope,m),C="")),E=Object.create(g,{parent:{value:E}}),E}function De(g,m,w){let A=_n(g.endRe,w);if(A){if(g["on:end"]){const K=new ze(g);g["on:end"](m,K),K.isMatchIgnored&&(A=!1)}if(A){for(;g.endsParent&&g.parent;)g=g.parent;return g}}if(g.endsWithParent)return De(g.parent,m,w)}function $t(g){return E.matcher.regexIndex===0?(C+=g[0],1):(Te=!0,0)}function Ft(g){const m=g[0],w=g.rule,A=new ze(w),K=[w.__beforeBegin,w["on:begin"]];for(const W of K)if(W&&(W(g,A),A.isMatchIgnored))return $t(m);return w.skip?C+=m:(w.excludeBegin&&(C+=m),G(),!w.returnBegin&&!w.excludeBegin&&(C=m)),Le(w,g),w.returnBegin?0:m.length}function zt(g){const m=g[0],w=h.substring(g.index),A=De(E,g,w);if(!A)return Ze;const K=E;E.endScope&&E.endScope._wrap?(G(),Y(m,E.endScope._wrap)):E.endScope&&E.endScope._multi?(G(),Ie(E.endScope,g)):K.skip?C+=m:(K.returnEnd||K.excludeEnd||(C+=m),G(),K.excludeEnd&&(C=m));do E.scope&&z.closeNode(),!E.skip&&!E.subLanguage&&(pe+=E.relevance),E=E.parent;while(E!==A.parent);return A.starts&&Le(A.starts,g),K.returnEnd?0:m.length}function Ht(){const g=[];for(let m=E;m!==Z;m=m.parent)m.scope&&g.unshift(m.scope);g.forEach(m=>z.openNode(m))}let ge={};function Be(g,m){const w=m&&m[0];if(C+=g,w==null)return G(),0;if(ge.type==="begin"&&m.type==="end"&&ge.index===m.index&&w===""){if(C+=h.slice(m.index,m.index+1),!a){const A=new Error(`0 width match regex (${d})`);throw A.languageName=d,A.badRule=ge.rule,A}return 1}if(ge=m,m.type==="begin")return Ft(m);if(m.type==="illegal"&&!p){const A=new Error('Illegal lexeme "'+w+'" for mode "'+(E.scope||"<unnamed>")+'"');throw A.mode=E,A}else if(m.type==="end"){const A=zt(m);if(A!==Ze)return A}if(m.type==="illegal"&&w==="")return m.index===h.length||(C+=`
3
+ `),1;if(Ne>1e5&&Ne>m.index*3)throw new Error("potential infinite loop, way more iterations than matches");return C+=w,w.length}const Z=P(d);if(!Z)throw ee(c.replace("{}",d)),new Error('Unknown language: "'+d+'"');const Kt=Jn(Z);let ve="",E=y||Kt;const Pe={},z=new s.__emitter(s);Ht();let C="",pe=0,j=0,Ne=0,Te=!1;try{if(Z.__emitTokens)Z.__emitTokens(h,z);else{for(E.matcher.considerAll();;){Ne++,Te?Te=!1:E.matcher.considerAll(),E.matcher.lastIndex=j;const g=E.matcher.exec(h);if(!g)break;const m=h.substring(j,g.index),w=Be(m,g);j=g.index+w}Be(h.substring(j))}return z.finalize(),ve=z.toHTML(),{language:d,value:ve,relevance:pe,illegal:!1,_emitter:z,_top:E}}catch(g){if(g.message&&g.message.includes("Illegal"))return{language:d,value:ke(h),illegal:!0,relevance:0,_illegalBy:{message:g.message,index:j,context:h.slice(j-100,j+100),mode:g.mode,resultSoFar:ve},_emitter:z};if(a)return{language:d,value:ke(h),illegal:!1,relevance:0,errorRaised:g,_emitter:z,_top:E};throw g}}function b(d){const h={value:ke(d),illegal:!1,relevance:0,_top:i,_emitter:new s.__emitter(s)};return h._emitter.addText(d),h}function _(d,h){h=h||s.languages||Object.keys(t);const p=b(d),y=h.filter(P).filter(V).map(G=>f(G,d,!1));y.unshift(p);const T=y.sort((G,Y)=>{if(G.relevance!==Y.relevance)return Y.relevance-G.relevance;if(G.language&&Y.language){if(P(G.language).supersetOf===Y.language)return 1;if(P(Y.language).supersetOf===G.language)return-1}return 0}),[I,H]=T,q=I;return q.secondBest=H,q}function v(d,h,p){const y=h&&n[h]||p;d.classList.add("hljs"),d.classList.add(`language-${y}`)}function N(d){let h=null;const p=l(d);if(o(p))return;if(X("before:highlightElement",{el:d,language:p}),d.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",d);return}if(d.children.length>0&&(s.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(d)),s.throwUnescapedHTML))throw new tr("One of your code blocks includes unescaped HTML.",d.innerHTML);h=d;const y=h.textContent,T=p?u(y,{language:p,ignoreIllegals:!0}):_(y);d.innerHTML=T.value,d.dataset.highlighted="yes",v(d,p,T.language),d.result={language:T.language,re:T.relevance,relevance:T.relevance},T.secondBest&&(d.secondBest={language:T.secondBest.language,relevance:T.secondBest.relevance}),X("after:highlightElement",{el:d,result:T,text:y})}function S(d){s=Ye(s,d)}const M=()=>{R(),re("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function D(){R(),re("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let $=!1;function R(){function d(){R()}if(document.readyState==="loading"){$||window.addEventListener("DOMContentLoaded",d,!1),$=!0;return}document.querySelectorAll(s.cssSelector).forEach(N)}function O(d,h){let p=null;try{p=h(e)}catch(y){if(ee("Language definition for '{}' could not be registered.".replace("{}",d)),a)ee(y);else throw y;p=i}p.name||(p.name=d),t[d]=p,p.rawDefinition=h.bind(null,e),p.aliases&&F(p.aliases,{languageName:d})}function x(d){delete t[d];for(const h of Object.keys(n))n[h]===d&&delete n[h]}function B(){return Object.keys(t)}function P(d){return d=(d||"").toLowerCase(),t[d]||t[n[d]]}function F(d,{languageName:h}){typeof d=="string"&&(d=[d]),d.forEach(p=>{n[p.toLowerCase()]=h})}function V(d){const h=P(d);return h&&!h.disableAutodetect}function J(d){d["before:highlightBlock"]&&!d["before:highlightElement"]&&(d["before:highlightElement"]=h=>{d["before:highlightBlock"](Object.assign({block:h.el},h))}),d["after:highlightBlock"]&&!d["after:highlightElement"]&&(d["after:highlightElement"]=h=>{d["after:highlightBlock"](Object.assign({block:h.el},h))})}function ae(d){J(d),r.push(d)}function oe(d){const h=r.indexOf(d);h!==-1&&r.splice(h,1)}function X(d,h){const p=d;r.forEach(function(y){y[p]&&y[p](h)})}function ce(d){return re("10.7.0","highlightBlock will be removed entirely in v12.0"),re("10.7.0","Please use highlightElement now."),N(d)}Object.assign(e,{highlight:u,highlightAuto:_,highlightAll:R,highlightElement:N,highlightBlock:ce,configure:S,initHighlighting:M,initHighlightingOnLoad:D,registerLanguage:O,unregisterLanguage:x,listLanguages:B,getLanguage:P,registerAliases:F,autoDetection:V,inherit:Ye,addPlugin:ae,removePlugin:oe}),e.debugMode=function(){a=!1},e.safeMode=function(){a=!0},e.versionString=er,e.regex={concat:te,lookahead:je,either:ye,optional:bn,anyNumberOfTimes:mn};for(const d in he)typeof he[d]=="object"&&Qe(he[d]);return Object.assign(e,he),e},se=ct({});se.newInstance=()=>ct({});var rr=se;se.HighlightJS=se;se.default=se;const k=dn(rr),We="[A-Za-z$_][0-9A-Za-z$_]*",ir=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],sr=["true","false","null","undefined","NaN","Infinity"],lt=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],dt=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],ut=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ar=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","self","global"],or=[].concat(ut,lt,dt);function gt(e){const t=e.regex,n=(p,{after:y})=>{const T="</"+p[0].slice(1);return p.input.indexOf(T,y)!==-1},r=We,a={begin:"<>",end:"</>"},c=/<[A-Za-z0-9\\._:-]+\s*\/>/,i={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(p,y)=>{const T=p[0].length+p.index,I=p.input[T];if(I==="<"||I===","){y.ignoreMatch();return}I===">"&&(n(p,{after:T})||y.ignoreMatch());let H;const q=p.input.substring(T);if(H=q.match(/^\s*=/)){y.ignoreMatch();return}if((H=q.match(/^\s+extends\s+/))&&H.index===0){y.ignoreMatch();return}}},s={$pattern:We,keyword:ir,literal:sr,built_in:or,"variable.language":ar},o="[0-9](_?[0-9])*",l=`\\.(${o})`,u="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",f={className:"number",variants:[{begin:`(\\b(${u})((${l})|\\.)?|(${l}))[eE][+-]?(${o})\\b`},{begin:`\\b(${u})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:s,contains:[]},_={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},v={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"css"}},N={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},S={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,b]},D={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:r+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},$=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,v,N,S,{match:/\$\d+/},f];b.contains=$.concat({begin:/\{/,end:/\}/,keywords:s,contains:["self"].concat($)});const R=[].concat(D,b.contains),O=R.concat([{begin:/(\s*)\(/,end:/\)/,keywords:s,contains:["self"].concat(R)}]),x={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:O},B={variants:[{match:[/class/,/\s+/,r,/\s+/,/extends/,/\s+/,t.concat(r,"(",t.concat(/\./,r),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,r],scope:{1:"keyword",3:"title.class"}}]},P={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...lt,...dt]}},F={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},V={variants:[{match:[/function/,/\s+/,r,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[x],illegal:/%/},J={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function ae(p){return t.concat("(?!",p.join("|"),")")}const oe={match:t.concat(/\b/,ae([...ut,"super","import","await"].map(p=>`${p}\\s*\\(`)),r,t.lookahead(/\s*\(/)),className:"title.function",relevance:0},X={begin:t.concat(/\./,t.lookahead(t.concat(r,/(?![0-9A-Za-z$_(])/))),end:r,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},ce={match:[/get|set/,/\s+/,r,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},x]},d="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",h={match:[/const|var|let/,/\s+/,r,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(d)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[x]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:s,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:P},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),F,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,v,N,S,D,{match:/\$\d+/},f,P,{scope:"attr",match:r+t.lookahead(":"),relevance:0},h,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[D,e.REGEXP_MODE,{className:"function",begin:d,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:a.begin,end:a.end},{match:c},{begin:i.begin,"on:begin":i.isTrulyOpeningTag,end:i.end}],subLanguage:"xml",contains:[{begin:i.begin,end:i.end,skip:!0,contains:["self"]}]}]},V,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[x,e.inherit(e.TITLE_MODE,{begin:r,className:"title.function"})]},{match:/\.\.\./,relevance:0},X,{match:"\\$"+r,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[x]},oe,J,B,ce,{match:/\$[(.]/}]}}const Ee="[A-Za-z$_][0-9A-Za-z$_]*",pt=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],ht=["true","false","null","undefined","NaN","Infinity"],mt=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],bt=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],ft=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],_t=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","self","global"],Et=[].concat(ft,mt,bt);function cr(e){const t=e.regex,n=(p,{after:y})=>{const T="</"+p[0].slice(1);return p.input.indexOf(T,y)!==-1},r=Ee,a={begin:"<>",end:"</>"},c=/<[A-Za-z0-9\\._:-]+\s*\/>/,i={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(p,y)=>{const T=p[0].length+p.index,I=p.input[T];if(I==="<"||I===","){y.ignoreMatch();return}I===">"&&(n(p,{after:T})||y.ignoreMatch());let H;const q=p.input.substring(T);if(H=q.match(/^\s*=/)){y.ignoreMatch();return}if((H=q.match(/^\s+extends\s+/))&&H.index===0){y.ignoreMatch();return}}},s={$pattern:Ee,keyword:pt,literal:ht,built_in:Et,"variable.language":_t},o="[0-9](_?[0-9])*",l=`\\.(${o})`,u="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",f={className:"number",variants:[{begin:`(\\b(${u})((${l})|\\.)?|(${l}))[eE][+-]?(${o})\\b`},{begin:`\\b(${u})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:s,contains:[]},_={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},v={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"css"}},N={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},S={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,b]},D={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:r+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},$=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,v,N,S,{match:/\$\d+/},f];b.contains=$.concat({begin:/\{/,end:/\}/,keywords:s,contains:["self"].concat($)});const R=[].concat(D,b.contains),O=R.concat([{begin:/(\s*)\(/,end:/\)/,keywords:s,contains:["self"].concat(R)}]),x={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:O},B={variants:[{match:[/class/,/\s+/,r,/\s+/,/extends/,/\s+/,t.concat(r,"(",t.concat(/\./,r),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,r],scope:{1:"keyword",3:"title.class"}}]},P={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...mt,...bt]}},F={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},V={variants:[{match:[/function/,/\s+/,r,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[x],illegal:/%/},J={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function ae(p){return t.concat("(?!",p.join("|"),")")}const oe={match:t.concat(/\b/,ae([...ft,"super","import","await"].map(p=>`${p}\\s*\\(`)),r,t.lookahead(/\s*\(/)),className:"title.function",relevance:0},X={begin:t.concat(/\./,t.lookahead(t.concat(r,/(?![0-9A-Za-z$_(])/))),end:r,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},ce={match:[/get|set/,/\s+/,r,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},x]},d="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",h={match:[/const|var|let/,/\s+/,r,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(d)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[x]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:s,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:P},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),F,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,v,N,S,D,{match:/\$\d+/},f,P,{scope:"attr",match:r+t.lookahead(":"),relevance:0},h,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[D,e.REGEXP_MODE,{className:"function",begin:d,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:a.begin,end:a.end},{match:c},{begin:i.begin,"on:begin":i.isTrulyOpeningTag,end:i.end}],subLanguage:"xml",contains:[{begin:i.begin,end:i.end,skip:!0,contains:["self"]}]}]},V,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[x,e.inherit(e.TITLE_MODE,{begin:r,className:"title.function"})]},{match:/\.\.\./,relevance:0},X,{match:"\\$"+r,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[x]},oe,J,B,ce,{match:/\$[(.]/}]}}function yt(e){const t=e.regex,n=cr(e),r=Ee,a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],c={begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},i={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a},contains:[n.exports.CLASS_REFERENCE]},s={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},o=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],l={$pattern:Ee,keyword:pt.concat(o),literal:ht,built_in:Et.concat(a),"variable.language":_t},u={className:"meta",begin:"@"+r},f=(N,S,M)=>{const D=N.contains.findIndex($=>$.label===S);if(D===-1)throw new Error("can not find mode to replace");N.contains.splice(D,1,M)};Object.assign(n.keywords,l),n.exports.PARAMS_CONTAINS.push(u);const b=n.contains.find(N=>N.scope==="attr"),_=Object.assign({},b,{match:t.concat(r,t.lookahead(/\s*\?:/))});n.exports.PARAMS_CONTAINS.push([n.exports.CLASS_REFERENCE,b,_]),n.contains=n.contains.concat([u,c,i,_]),f(n,"shebang",e.SHEBANG()),f(n,"use_strict",s);const v=n.contains.find(N=>N.label==="func.def");return v.relevance=0,Object.assign(n,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),n}function wt(e){const t=e.regex,n=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),r=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","lazy","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:r,built_in:["__import__","abs","aiter","all","anext","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozendict","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","sentinel","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},o={className:"meta",begin:/^(>>>|\.\.\.) /},l={className:"subst",begin:/\{/,end:/\}/,keywords:s,illegal:/#/},u={begin:/\{\{/,relevance:0},f={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,o],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,o],relevance:10},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,o,u,l]},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,o,u,l]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,u,l]},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,u,l]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",_=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,v=`\\b|${r.join("|")}`,N={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${_}))[eE][+-]?(${b})[jJ]?(?=${v})`},{begin:`(${_})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${v})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${v})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${v})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${v})`},{begin:`\\b(${b})[jJ](?=${v})`}]},S={className:"comment",begin:t.lookahead(/# type:/),end:/$/,keywords:s,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},M={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:["self",o,N,f,e.HASH_COMMENT_MODE]}]};return l.contains=[f,N,o],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s,illegal:/(<\/|\?)|=>/,contains:[o,N,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},f,S,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[M]},{variants:[{match:[/\bclass/,/\s+/,n,/\s*/,/\(\s*/,n,/\s*\)/]},{match:[/\bclass/,/\s+/,n]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[N,M,f]}]}}const lr="([-+]?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)|NaN|[-+]?Infinity",dr={scope:"number",match:lr,relevance:0};function ur(e){const t={className:"attr",begin:/(("(\\.|[^\\"\r\n])*")|('(\\.|[^\\'\r\n])*'))(?=\s*:)/,relevance:1.01},n={match:/[{}[\],:]/,className:"punctuation",relevance:0},r=["true","false","null"],a={scope:"literal",beginKeywords:r.join(" ")};return{name:"JSON",aliases:["jsonc","json5"],keywords:{literal:r},contains:[t,n,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,dr,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function Oe(e){const t=e.regex,n={},r={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},r]});const a={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},c=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),i={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,a]};a.contains.push(s);const o={match:/\\"/},l={className:"string",begin:/'/,end:/'/},u={match:/\\'/},f={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,n]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],_=e.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),v={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},N=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],S=["true","false"],M={match:/(\/[a-z._-]+)+/},D=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],$=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],R=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],O=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:N,literal:S,built_in:[...D,...$,"set","shopt",...R,...O]},contains:[_,e.SHEBANG(),v,f,c,i,M,s,o,l,u,n]}}const gr=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,5}(-[0-9A-Fa-f][0-9A-Fa-f]{0,5})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),pr=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],hr=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],mr=[...pr,...hr],br=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),fr=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),_r=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),Er=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","corner-bottom-left-shape","corner-bottom-right-shape","corner-shape","corner-top-left-shape","corner-top-right-shape","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function yr(e){const t=e.regex,n=gr(e),r={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},a="and or not only",c=/@-?\w[\w]*(-\w+)*/,i="[a-zA-Z-][a-zA-Z0-9_-]*",s=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[n.BLOCK_COMMENT,r,n.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+i,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+fr.join("|")+")"},{begin:":(:)?("+_r.join("|")+")"}]},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+Er.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,n.UNICODE_RANGE,...s,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...s,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:c},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:a,attribute:br.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...s,n.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+mr.join("|")+")\\b"}]}}function xe(e){const t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r=/[\p{L}0-9._:-]+/u,a={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},c={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},i=e.inherit(c,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:r,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[a]},{begin:/'/,end:/'/,contains:[a]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[c,o,s,i,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[c,i,o,s]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:"css"}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:"javascript"}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(/</,t.lookahead(t.concat(n,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:l}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function wr(e){const t=e.regex,n=e.COMMENT("--","$"),r={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},a={begin:/"/,end:/"/,contains:[{match:/""/}]},c=["true","false","unknown"],i=["double precision","large object","with timezone","without timezone"],s=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],o=["add","asc","collation","desc","final","first","last","view"],l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],u=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],f=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],b=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],_=u,v=[...l,...o].filter(O=>!u.includes(O)),N={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},S={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},M={match:t.concat(/\b/,t.either(..._),/\s*\(/),relevance:0,keywords:{built_in:_}};function D(O){return t.concat(/\b/,t.either(...O.map(x=>x.replace(/\s+/,"\\s+"))),/\b/)}const $={scope:"keyword",match:D(b),relevance:0};function R(O,{exceptions:x,when:B}={}){const P=B;return x=x||[],O.map(F=>F.match(/\|\d+$/)||x.includes(F)?F:P(F)?`${F}|0`:F)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:R(v,{when:O=>O.length<3}),literal:c,type:s,built_in:f},contains:[{scope:"type",match:D(i)},$,M,N,r,a,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,S]}}function vt(e){const t="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",r={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},a={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},c={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},i={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,a]},s=e.inherit(i,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),b={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},_={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},v={begin:/\{/,end:/\}/,contains:[_],illegal:"\\n",relevance:0},N={begin:"\\[",end:"\\]",contains:[_],illegal:"\\n",relevance:0},S=[r,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},b,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},v,N,c,i],M=[...S];return M.pop(),M.push(s),_.contains=M,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:S}}function Nt(e){const t=e.regex,n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},r={match:/^ {0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/},a={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},s=/[A-Za-z][A-Za-z0-9+.-]*/,o={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:t.concat(/\[.+?\]\(/,s,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},u={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},f=e.inherit(l,{contains:[]}),b=e.inherit(u,{contains:[]});l.contains.push(b),u.contains.push(f);let _=[n,o];return[l,u,f,b].forEach(M=>{M.contains=M.contains.concat(_)}),_=_.concat(l,u),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:_},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:_}]}]},n,c,r,l,u,{className:"quote",begin:"^>\\s+",contains:_,end:"$"},a,o,i,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function vr(e){const c={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:c,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\b0[bB](_?[01])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:c,illegal:/["']/}]}]}}function Tt(e){const t=e.regex,n=/(r#)?/,r=t.concat(n,e.UNDERSCORE_IDENT_RE),a=t.concat(n,e.IDENT_RE),c={scope:"title.function.invoke",relevance:0,begin:t.concat(/\b/,/(?!(?:let|for|while|if|else|match)\b)/,a,t.lookahead(/\s*\(/))},i="([ui](8|16|32|64|128|size)|f(16|32|64|128))?",s=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","raw","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],o=["true","false","Some","None","Ok","Err"],l=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],u=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f16","f32","f64","f128","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:u,keyword:s,literal:o,built_in:l},illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{scope:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{scope:"char.escape",match:/\\('|"|\\|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{scope:"number",variants:[{begin:"\\b0b([01_]+)"+i},{begin:"\\b0o([0-7_]+)"+i},{begin:"\\b0x([A-Fa-f0-9_]+)"+i},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+i}],relevance:0},{begin:[/\bsafe/,/\s+/,/extern/],scope:{1:"keyword",3:"keyword"}},{begin:[/fn/,/\s+/,r],scope:{1:"keyword",3:"title.function"}},{scope:"meta",begin:"#!?\\[",end:"\\]",contains:[{scope:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE]}]},{begin:[/let/,/\s+/,/(?:mut\s+)?/,r],scope:{1:"keyword",3:"keyword",4:"variable"}},{begin:[/for/,/\s+/,r,/\s+/,/in/],scope:{1:"keyword",3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,r],scope:{1:"keyword",3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,r],scope:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{keyword:"Self",built_in:l,type:u}},{scope:"punctuation",begin:"->"},c]}}var ie="[0-9](_*[0-9])*",me=`\\.(${ie})`,be="[0-9a-fA-F](_*[0-9a-fA-F])*",Ve={className:"number",variants:[{begin:`(\\b(${ie})((${me})|\\.)?|(${me}))[eE][+-]?(${ie})[fFdD]?\\b`},{begin:`\\b(${ie})((${me})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${me})[fFdD]?\\b`},{begin:`\\b(${ie})[fFdD]\\b`},{begin:`\\b0[xX]((${be})\\.?|(${be})?\\.(${be}))[pP][+-]?(${ie})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${be})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function St(e,t,n){return n===-1?"":e.replace(t,r=>St(e,t,n-1))}function Nr(e){const t=e.regex,n="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",r="(?:(?:\\s*\\[\\s*])+)?",a=n+"<@@@>"+r,i="(?:"+("\\?(?:\\s+(?:extends|super)\\s+"+a+")?")+"|"+a+")",s=St("(?:\\s*<\\s*"+i+"(?:\\s*,\\s*"+i+")*\\s*>)?",/<@@@>/g,2),b={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},_={className:"meta",begin:"@"+n,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},v={className:"params",begin:/\(/,end:/\)/,keywords:b,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:b,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{beginKeywords:"new throw return else yield assert",relevance:0},{begin:[n,t.concat(s,r,/\s+/),n,r,/\s*/,/=(?!=)/],className:{1:"type",3:"variable",6:"operator"}},{begin:[/record/,/\s+/,n],className:{1:"keyword",3:"title.class"},contains:[v,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{begin:[n,t.concat(s,r,/\s+/),n,/\s*(?=\()/],className:{1:"type",3:"title.function"},keywords:b,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:b,relevance:0,contains:[_,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,Ve,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},Ve,_]}}function Tr(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),r="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",i="("+r+"|"+t.optional(a)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s=t.concat(/\batomic_/,t.either("bool","char","schar","uchar","short","ushort","int","uint","long","ulong","llong","ullong","char16_t","char32_t","wchar_t","int_least8_t","uint_least8_t","int_least16_t","uint_least16_t","int_least32_t","uint_least32_t","int_least64_t","uint_least64_t","int_fast8_t","uint_fast8_t","int_fast16_t","uint_fast16_t","int_fast32_t","uint_fast32_t","int_fast64_t","uint_fast64_t","intptr_t","uintptr_t","size_t","ptrdiff_t","intmax_t","uintmax_t"),/\b/),o={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:s}]},u={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\\s"]{0,16})\(/,end:/\)([^()\\\s"]{0,16})"/})]},f={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},b={scope:"meta",begin:/#\s*include\b/,end:/$/,keywords:{keyword:"include"},contains:[{begin:/\\\n/},u,{scope:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},_={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(u,{className:"string"}),n,e.C_BLOCK_COMMENT_MODE]},v=[b,_],N={className:"title",begin:t.optional(a)+e.IDENT_RE,relevance:0},S=t.optional(a)+e.IDENT_RE+"\\s*\\(",M=12,R={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},O=[...v,o,n,e.C_BLOCK_COMMENT_MODE,f,u],x={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:R,contains:O.concat([{begin:/\(/,end:/\)/,keywords:R,contains:O.concat(["self"]),relevance:0}]),relevance:0},B={begin:"("+i+"[\\*&\\s]+){1,"+M+"}"+S,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:R,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:R,relevance:0},{begin:S,returnBegin:!0,contains:[e.inherit(N,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:R,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,u,f,o,{begin:/\(/,end:/\)/,keywords:R,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,u,f,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,...v]};return{name:"C",aliases:["h"],keywords:R,disableAutodetect:!0,illegal:"</",contains:[].concat(x,B,O,[...v,{begin:e.IDENT_RE+"::",keywords:R},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:_,strings:u,keywords:R}}}function kt(e){const t=e.regex,n=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),r="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",i="(?!struct)("+r+"|"+t.optional(a)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},l={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\\s"]{0,16})\(/,end:/\)([^()\\\s"]{0,16})"/})]},u={className:"number",variants:[{begin:"[+-]?(?:(?:\\b[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|\\b[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|\\b0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},f={scope:"meta",begin:/#\s*include\b/,end:/$/,keywords:{keyword:"include"},contains:[{begin:/\\\n/},l,{scope:"string",begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},b={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(l,{className:"string"}),n,e.C_BLOCK_COMMENT_MODE]},_=[f,b],v={className:"title",begin:t.optional(a)+e.IDENT_RE,relevance:0},N=t.optional(a)+e.IDENT_RE+"\\s*\\(",S=12,M=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],D=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],$=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],R=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],B={type:D,keyword:M,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:$},P={className:"function.dispatch",relevance:0,keywords:{_hint:R},begin:t.concat(/\b/,`(?!${M.join("|")})`,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},F=[P,..._,s,n,e.C_BLOCK_COMMENT_MODE,u,l],V={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:B,contains:F.concat([{begin:/\(/,end:/\)/,keywords:B,contains:F.concat(["self"]),relevance:0}]),relevance:0},J={className:"function",begin:"("+i+"[\\*&\\s]+){1,"+S+"}"+N,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:B,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:B,relevance:0},{begin:N,returnBegin:!0,contains:[v],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[l,u]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,l,u,s,{begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:["self",n,e.C_BLOCK_COMMENT_MODE,l,u,s]}]},s,n,e.C_BLOCK_COMMENT_MODE,..._]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:B,illegal:"</",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat(V,J,P,F,[..._,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)",end:">",keywords:B,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:B},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}k.registerLanguage("javascript",gt);k.registerLanguage("js",gt);k.registerLanguage("typescript",yt);k.registerLanguage("ts",yt);k.registerLanguage("python",wt);k.registerLanguage("py",wt);k.registerLanguage("json",ur);k.registerLanguage("bash",Oe);k.registerLanguage("sh",Oe);k.registerLanguage("shell",Oe);k.registerLanguage("css",yr);k.registerLanguage("xml",xe);k.registerLanguage("html",xe);k.registerLanguage("svg",xe);k.registerLanguage("sql",wr);k.registerLanguage("yaml",vt);k.registerLanguage("yml",vt);k.registerLanguage("markdown",Nt);k.registerLanguage("md",Nt);k.registerLanguage("go",vr);k.registerLanguage("rust",Tt);k.registerLanguage("rs",Tt);k.registerLanguage("java",Nr);k.registerLanguage("c",Tr);k.registerLanguage("cpp",kt);k.registerLanguage("c++",kt);const Sr=new Set(["mindmap"]);function le(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function kr(e,t={}){const n=new Set(t.reservedLanguages??Sr),r=e.renderer.rules.fence?e.renderer.rules.fence.bind(e.renderer.rules):(a,c,i,s,o)=>o.renderToken(a,c,i);e.renderer.rules.fence=(a,c,i,s,o)=>{var N;const l=a[c];if(!l)return r(a,c,i,s,o);const f=((N=l.info.trim().split(/\s+/)[0])==null?void 0:N.toLowerCase())??"";if(n.has(f))return r(a,c,i,s,o);const b=l.content;let _,v=f||"text";if(f&&k.getLanguage(f))try{_=k.highlight(b,{language:f,ignoreIllegals:!0}).value}catch{_=le(b)}else if(f)try{const S=k.highlightAuto(b);_=S.value,v=S.language||f}catch{_=le(b)}else try{const S=k.highlightAuto(b);_=S.value,v=S.language||"text"}catch{_=le(b)}return`<div class="md-editor-codeblock"><div class="md-editor-codeblock-header"><span class="md-editor-codeblock-lights"><span class="md-editor-codeblock-dot md-editor-codeblock-dot--red"></span><span class="md-editor-codeblock-dot md-editor-codeblock-dot--yellow"></span><span class="md-editor-codeblock-dot md-editor-codeblock-dot--green"></span></span><span class="md-editor-codeblock-lang">${le(v)}</span><button type="button" class="md-editor-codeblock-copy" aria-label="Copy code">Copy</button></div><pre class="md-editor-codeblock-pre"><code class="language-${le(v)}">${_}</code></pre></div>`}}const Ar=[".mp4",".webm",".ogg",".mov",".m4v",".avi",".mkv"],Rr=[/(?:youtube\.com\/watch\?[^ ]*v=|youtu\.be\/|youtube\.com\/embed\/|youtube\.com\/shorts\/|youtube\.com\/v\/)([a-zA-Z0-9_-]{11})/,/^([a-zA-Z0-9_-]{11})$/];function At(e){const t=e.trim();if(!t)return null;for(const n of Rr){const r=t.match(n);if(r&&r[1])return r[1]}return null}function Rt(e,t="YouTube video"){const n=`https://img.youtube.com/vi/${e}/hqdefault.jpg`,r=`https://www.youtube.com/watch?v=${e}`;return`[![${t}](${n})](${r})`}function Ct(e){const t=e.toLowerCase().split("?")[0]??"";return Ar.some(n=>t.endsWith(n))}function Mt(e,t="image"){return`![${t}](${e})`}function Ot(e,t="video"){return`![${t}](${e})`}function Cr(e){const t=e.renderer.rules.image?e.renderer.rules.image.bind(e.renderer.rules):(n,r,a,c,i)=>i.renderToken(n,r,a);e.renderer.rules.image=(n,r,a,c,i)=>{const s=n[r];if(!s)return t(n,r,a,c,i);const o=s.attrGet("src")??"";if(Ct(o)){const l=s.content||"";return`<video src="${o}" controls class="md-editor-video" title="${l}">${l}</video>`}return t(n,r,a,c,i)}}class xt{constructor(t={}){this.md=new en({html:t.html??!1,linkify:!0,breaks:t.breaks??!1,typographer:!0}),t.math!==!1&&rn(this.md),this.mindmapEnabled=t.mindmap!==!1,this.mindmapEnabled&&an(this.md),t.codeHighlight!==!1&&kr(this.md,{reservedLanguages:this.mindmapEnabled?["mindmap"]:[]}),Cr(this.md)}render(t){return this.md.render(t||"")}async hydrate(t){this.mindmapEnabled&&await ln(t)}}class It{constructor(t){this.buttons=new Map,this.el=document.createElement("div"),this.el.className="md-editor-toolbar",this.el.setAttribute("role","toolbar");for(const n of t){const r=document.createElement("button");if(r.type="button",r.className="md-editor-toolbar-btn",n.toggle&&r.classList.add("is-toggle"),n.active&&r.classList.add("is-active"),r.title=n.title,r.setAttribute("aria-label",n.title),r.setAttribute("data-action",n.name),r.innerHTML=n.icon,r.addEventListener("click",()=>n.handler(r)),this.buttons.set(n.name,r),this.el.appendChild(r),n.groupEnd){const a=document.createElement("span");a.className="md-editor-toolbar-sep",this.el.appendChild(a)}}}setActive(t,n){var r;(r=this.buttons.get(t))==null||r.classList.toggle("is-active",n)}setIcon(t,n){const r=this.buttons.get(t);r&&(r.innerHTML=n)}destroy(){for(const t of this.buttons.values())t.onclick=null;this.buttons.clear(),this.el.remove()}}function Ae(e){const t=e.trim();return{charCount:e.length,wordCount:t?t.split(/\s+/).length:0}}class Lt{constructor(t){this.el=document.createElement("div"),this.el.className="md-editor-statusbar",this.countEl=document.createElement("span"),this.blockEl=document.createElement("span"),this.blockEl.className="md-editor-statusbar-muted",this.refreshBtn=document.createElement("button"),this.refreshBtn.type="button",this.refreshBtn.className="md-editor-statusbar-refresh",this.refreshBtn.textContent="Refresh preview",this.refreshBtn.style.display="none",this.refreshBtn.addEventListener("click",t.onRefreshPreview),this.el.appendChild(this.countEl),this.el.appendChild(this.blockEl),this.el.appendChild(this.refreshBtn)}update(t){this.countEl.textContent=`${t.charCount} chars · ${t.wordCount} words`,this.blockEl.textContent=`${t.blockCount} render blocks`,this.refreshBtn.style.display=t.autoPreview?"none":""}destroy(){this.refreshBtn.onclick=null,this.el.remove()}}const Mr=/^ {0,3}#{1,6}\s/,Or=/^ {0,3}(`{3,}|~{3,})/;function xr(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)+":"+e.length}function Dt(e){var s;const t=e.split(`
4
+ `),n=[];let r=[],a=!1,c="";for(const o of t){const l=o.match(Or);if(l){const u=((s=l[1])==null?void 0:s[0])??"";a?u===c&&(a=!1):(a=!0,c=u),r.push(o);continue}if(!a&&Mr.test(o)&&r.length>0){n.push(r.join(`
5
+ `)),r=[o];continue}r.push(o)}r.length>0&&n.push(r.join(`
6
+ `)),n.length===0&&n.push("");const i=new Map;return n.map(o=>{const l=xr(o),u=(i.get(l)??0)+1;return i.set(l,u),{key:`${l}#${u}`,hash:l,source:o}})}class Bt{constructor(t,n,r=800){this.container=t,this.renderBlock=n,this.maxCacheEntries=r,this.nodeByKey=new Map,this.htmlByHash=new Map,this.prevBlocks=[]}update(t){const n=Dt(t),r=document.createDocumentFragment(),a=new Map;let c=0;for(const i of n){let s=this.nodeByKey.get(i.key);if(!s){let o=this.htmlByHash.get(i.hash);o===void 0&&(o=this.renderBlock(i.source),this.htmlByHash.set(i.hash,o),c++),s=document.createElement("div"),s.className="md-editor-block",s.dataset.blockKey=i.key,s.innerHTML=o}a.set(i.key,s),r.appendChild(s)}return this.container.innerHTML="",this.container.appendChild(r),this.nodeByKey=a,this.prevBlocks=n,this.evictCacheIfNeeded(n),{rerenderedCount:c,totalCount:n.length}}evictCacheIfNeeded(t){if(this.htmlByHash.size<=this.maxCacheEntries)return;const n=new Set(t.map(r=>r.hash));for(const r of Array.from(this.htmlByHash.keys()))n.has(r)||this.htmlByHash.delete(r)}getBlockCount(){return this.prevBlocks.length}destroy(){this.container.innerHTML="",this.nodeByKey.clear(),this.htmlByHash.clear(),this.prevBlocks=[]}}function Pt(e,t){let n,r;const a=(...c)=>{r=c,n!==void 0&&clearTimeout(n),n=setTimeout(()=>{n=void 0,r&&e(...r)},t)};return a.cancel=()=>{n!==void 0&&clearTimeout(n),n=void 0},a.flush=()=>{n!==void 0&&(clearTimeout(n),n=void 0,r&&e(...r))},a}function Ut(e,t=120,n=600){const r=Math.max(0,e),a=Math.floor(r/2e4)*60;return Math.min(n,t+a)}function Ir(e,t=300){const n=window;return typeof n.requestIdleCallback=="function"?n.requestIdleCallback(e,{timeout:t}):window.setTimeout(e,0)}function Lr(e){const t=window;typeof t.cancelIdleCallback=="function"?t.cancelIdleCallback(e):clearTimeout(e)}const U=e=>`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">${e}</svg>`,L={bold:U('<path d="M4 3h4.2a2.4 2.4 0 0 1 0 4.8H4V3Z" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><path d="M4 7.8h4.8a2.4 2.4 0 1 1 0 4.8H4V7.8Z" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/>'),italic:U('<path d="M9.5 3h-3M6.5 13h-3M8.2 3 5.8 13" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>'),heading:U('<path d="M3.5 3v10M11.5 3v10M3.5 8h8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>'),link:U('<path d="M6.8 9.2 9.2 6.8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><path d="M7.6 4.4 8.4 3.6a2.6 2.6 0 1 1 3.7 3.7l-.9.9M8.4 11.6l-.8.8a2.6 2.6 0 1 1-3.7-3.7l.9-.9" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>'),code:U('<path d="M5.5 4.5 2 8l3.5 3.5M10.5 4.5 14 8l-3.5 3.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>'),table:U('<rect x="2.5" y="3" width="11" height="10" rx="1.2" stroke="currentColor" stroke-width="1.3"/><path d="M2.5 6.6h11M6.5 3v10" stroke="currentColor" stroke-width="1.3"/>'),sigma:U('<path d="M11.5 3.5h-7l3.5 4.5-3.5 4.5h7" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round" stroke-linecap="round"/>'),mindmap:U('<circle cx="3.2" cy="8" r="1.6" stroke="currentColor" stroke-width="1.3"/><circle cx="12.2" cy="3.6" r="1.6" stroke="currentColor" stroke-width="1.3"/><circle cx="12.2" cy="12.4" r="1.6" stroke="currentColor" stroke-width="1.3"/><path d="M4.6 7.3 10.7 4.2M4.6 8.7l6.1 3.1" stroke="currentColor" stroke-width="1.3"/>'),eye:U('<path d="M1.5 8S4 3.5 8 3.5 14.5 8 14.5 8 12 12.5 8 12.5 1.5 8 1.5 8Z" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/><circle cx="8" cy="8" r="1.8" stroke="currentColor" stroke-width="1.3"/>'),refresh:U('<path d="M13 8a5 5 0 1 1-1.6-3.7" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><path d="M13 3v3.2H9.8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>'),moon:U('<path d="M13 9.6A5.4 5.4 0 1 1 6.4 3a4.3 4.3 0 0 0 6.6 6.6Z" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/>'),sun:U('<circle cx="8" cy="8" r="3" stroke="currentColor" stroke-width="1.3"/><path d="M8 1.8v1.4M8 12.8v1.4M14.2 8h-1.4M3.2 8H1.8M12.4 3.6l-1 1M4.6 11.4l-1 1M12.4 12.4l-1-1M4.6 4.6l-1-1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>'),image:U('<rect x="2.5" y="3" width="11" height="10" rx="1.2" stroke="currentColor" stroke-width="1.3"/><circle cx="5.5" cy="6" r="1" fill="currentColor"/><path d="m3 11 3.5-3 2.5 2.5 2-2 3 3" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>'),video:U('<rect x="2" y="4" width="8" height="8" rx="1.2" stroke="currentColor" stroke-width="1.3"/><path d="m10 7 4-2v6l-4-2" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/>'),youtube:U('<rect x="2" y="4" width="12" height="8" rx="2" stroke="currentColor" stroke-width="1.3"/><path d="m7 6.5 3 1.5-3 1.5v-3Z" fill="currentColor"/>'),quote:U('<path d="M5 5h3v3H6c0 1.5.5 2.5 2 3v1.5c-2.5-.5-4-2-4-4.5V5Z" fill="currentColor"/><path d="M10 5h3v3h-2c0 1.5.5 2.5 2 3v1.5c-2.5-.5-4-2-4-4.5V5Z" fill="currentColor"/>'),list:U('<circle cx="3.5" cy="4.5" r="1" fill="currentColor"/><circle cx="3.5" cy="8" r="1" fill="currentColor"/><circle cx="3.5" cy="11.5" r="1" fill="currentColor"/><path d="M6 4.5h7M6 8h7M6 11.5h7" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>'),listOrdered:U('<path d="M3 4h1.5M3 6h2M3.5 3v3" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/><path d="M3 8.5h2M3 10.5h2M3 8.5v2" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 12.5h2l-2 2h2" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.5 4.5h7M6.5 8h7M6.5 11.5h7" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>'),hr:U('<path d="M2 8h12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>')};class fe{constructor(t,n){this.inputs=new Map,this.destroyed=!1,this.anchor=t,this.config=n,this.el=document.createElement("div"),this.el.className="md-editor-popup",this.el.setAttribute("role","dialog"),this.el.setAttribute("aria-label",n.title),this.build(),this.onOutsideClick=r=>{!this.el.contains(r.target)&&r.target!==this.anchor&&this.hide()},this.onKeyDown=r=>{r.key==="Escape"&&this.hide()}}build(){const t=document.createElement("div");t.className="md-editor-popup-header",t.textContent=this.config.title;const n=document.createElement("div");n.className="md-editor-popup-body";for(const i of this.config.fields){const s=document.createElement("div");s.className="md-editor-popup-field";const o=document.createElement("label");o.className="md-editor-popup-label",o.textContent=i.label,o.setAttribute("for",`md-editor-popup-${i.name}`);let l;i.type==="textarea"?(l=document.createElement("textarea"),l.rows=2):(l=document.createElement("input"),l.type="text"),l.id=`md-editor-popup-${i.name}`,l.className="md-editor-popup-input",i.placeholder&&(l.placeholder=i.placeholder),i.required&&(l.required=!0),s.appendChild(o),s.appendChild(l),n.appendChild(s),this.inputs.set(i.name,l)}const r=document.createElement("div");r.className="md-editor-popup-footer";const a=document.createElement("button");a.type="button",a.className="md-editor-popup-btn md-editor-popup-btn--ghost",a.textContent="Cancel",a.addEventListener("click",()=>this.hide());const c=document.createElement("button");c.type="button",c.className="md-editor-popup-btn md-editor-popup-btn--primary",c.textContent=this.config.submitLabel??"Insert",c.addEventListener("click",()=>this.submit()),r.appendChild(a),r.appendChild(c),this.el.appendChild(t),this.el.appendChild(n),this.el.appendChild(r);for(const i of this.inputs.values())i.tagName==="INPUT"&&i.addEventListener("keydown",s=>{const o=s;o.key==="Enter"&&(o.preventDefault(),this.submit())})}submit(){const t={};for(const[n,r]of this.inputs)t[n]=r.value.trim();this.config.onSubmit(t),this.hide()}show(){if(this.destroyed)return;document.body.appendChild(this.el),this.position(),document.addEventListener("mousedown",this.onOutsideClick),document.addEventListener("keydown",this.onKeyDown);const t=this.inputs.values().next().value;t==null||t.focus()}hide(){this.destroyed||(this.el.remove(),document.removeEventListener("mousedown",this.onOutsideClick),document.removeEventListener("keydown",this.onKeyDown))}position(){const t=this.anchor.getBoundingClientRect(),n=this.el.getBoundingClientRect();let r=t.left;const a=t.bottom+6;r+n.width>window.innerWidth-8&&(r=window.innerWidth-n.width-8),r<8&&(r=8),this.el.style.left=`${r+window.scrollX}px`,this.el.style.top=`${a+window.scrollY}px`}destroy(){this.hide(),this.destroyed=!0,this.inputs.clear()}}const Dr={bold:["**","**","bold text"],italic:["_","_","italic text"],heading:["## ","","Heading"],link:["[","](https://)","link text"],code:["```\n","\n```","code"],math:["$","$","E=mc^2"],mindmapBlock:[`\`\`\`mindmap
5
7
  # Root topic
6
8
  ## Branch one
7
9
  - Child A
@@ -11,4 +13,6 @@
11
13
  `,"",""],table:[`| Col 1 | Col 2 |
12
14
  | --- | --- |
13
15
  | `,` | content |
14
- `,"content"]};class z{constructor(e,t={}){this.previewPane=null,this.incremental=null,this.toolbar=null,this.statusBar=null,this.scheduledRender=null,this.scheduledWait=0;const r=typeof e=="string"?document.querySelector(e):e;if(!r)throw new Error("MarkdownEditor: mount container not found");this.container=r,this.mode=t.mode??"simple",this.theme=t.theme??"light",this.showPreview=t.preview??!0,this.autoPreview=t.autoPreview??!0,this.renderDebounceOpt=t.renderDebounce,this.onChange=t.onChange,this.container.classList.add("md-editor-root",`md-editor-mode-${this.mode}`),this.container.setAttribute("data-theme",this.theme),this.renderer=new g({math:t.math??!0,mindmap:t.mindmap??!0}),this.buildLayout(),this.codeEditor=new v(this.editorPane,{value:t.value??"",lineNumbers:this.mode==="complex",onChange:i=>{var s;(s=this.onChange)==null||s.call(this,i),this.autoPreview&&this.requestPreviewRender(i),this.updateStatusBar(i)}}),this.mode==="complex"&&(this.buildToolbar(),this.buildStatusBar()),this.previewPane&&(this.incremental=new B(this.previewPane,i=>this.renderer.render(i))),this.renderPreview(t.value??""),this.updateStatusBar(t.value??"")}buildLayout(){this.container.innerHTML="",this.body=document.createElement("div"),this.body.className="md-editor-body",this.editorPane=document.createElement("div"),this.editorPane.className="md-editor-pane md-editor-source",this.body.appendChild(this.editorPane),this.showPreview&&(this.previewPane=document.createElement("div"),this.previewPane.className="md-editor-pane md-editor-preview",this.body.appendChild(this.previewPane)),this.container.appendChild(this.body)}buildToolbar(){const e=[{name:"heading",title:"Heading",icon:h.heading,handler:()=>this.insertSnippet("heading")},{name:"bold",title:"Bold",icon:h.bold,handler:()=>this.insertSnippet("bold")},{name:"italic",title:"Italic",icon:h.italic,handler:()=>this.insertSnippet("italic"),groupEnd:!0},{name:"link",title:"Link",icon:h.link,handler:()=>this.insertSnippet("link")},{name:"code",title:"Code block",icon:h.code,handler:()=>this.insertSnippet("code")},{name:"table",title:"Table",icon:h.table,handler:()=>this.insertSnippet("table"),groupEnd:!0},{name:"math",title:"Math formula",icon:h.sigma,handler:()=>this.insertSnippet("math")},{name:"mindmap",title:"Insert mindmap",icon:h.mindmap,handler:()=>this.insertSnippet("mindmapBlock"),groupEnd:!0},{name:"preview",title:"Toggle preview",icon:h.eye,toggle:!0,active:this.showPreview,handler:()=>this.togglePreview()},{name:"theme",title:"Toggle theme",icon:this.theme==="dark"?h.sun:h.moon,handler:()=>this.setTheme(this.theme==="dark"?"light":"dark")}];this.toolbar=new y(e),this.container.insertBefore(this.toolbar.el,this.body)}buildStatusBar(){this.statusBar=new C({onRefreshPreview:()=>this.renderPreview(this.codeEditor.getValue())}),this.container.appendChild(this.statusBar.el)}insertSnippet(e){const[t,r,i]=U[e];this.codeEditor.insertAtCursor(`${t}${i}${r}`)}togglePreview(){var t;if(!this.previewPane)return;const e=this.previewPane.style.display!=="none";this.previewPane.style.display=e?"none":"",(t=this.toolbar)==null||t.setActive("preview",!e)}requestPreviewRender(e){var r,i;const t=this.renderDebounceOpt===!1?0:this.renderDebounceOpt??P(e.length);if(t===0){(r=this.scheduledRender)==null||r.cancel(),this.scheduledRender=null,this.renderPreview(e);return}(!this.scheduledRender||this.scheduledWait!==t)&&((i=this.scheduledRender)==null||i.cancel(),this.scheduledRender=E(s=>this.renderPreview(s),t),this.scheduledWait=t),this.scheduledRender(e)}renderPreview(e){if(!this.previewPane||!this.incremental)return;const{totalCount:t}=this.incremental.update(e);if(this.renderer.hydrate(this.previewPane),this.statusBar){const{charCount:r,wordCount:i}=w(e);this.statusBar.update({charCount:r,wordCount:i,blockCount:t,mode:this.mode,autoPreview:this.autoPreview})}}updateStatusBar(e){var i;if(!this.statusBar)return;const{charCount:t,wordCount:r}=w(e);this.statusBar.update({charCount:t,wordCount:r,blockCount:((i=this.incremental)==null?void 0:i.getBlockCount())??0,mode:this.mode,autoPreview:this.autoPreview})}getValue(){return this.codeEditor.getValue()}setValue(e){var t;this.codeEditor.setValue(e),(t=this.scheduledRender)==null||t.cancel(),this.renderPreview(e),this.updateStatusBar(e)}getHtml(){return this.renderer.render(this.getValue())}renderNow(){var e;(e=this.scheduledRender)==null||e.cancel(),this.renderPreview(this.codeEditor.getValue())}setAutoPreview(e){this.autoPreview=e,e&&this.renderPreview(this.codeEditor.getValue()),this.updateStatusBar(this.codeEditor.getValue())}setMode(e){var t,r;e!==this.mode&&(this.mode=e,this.container.classList.remove("md-editor-mode-simple","md-editor-mode-complex"),this.container.classList.add(`md-editor-mode-${e}`),this.codeEditor.setLineNumbers(e==="complex"),(t=this.toolbar)==null||t.destroy(),this.toolbar=null,(r=this.statusBar)==null||r.destroy(),this.statusBar=null,e==="complex"&&(this.buildToolbar(),this.buildStatusBar(),this.updateStatusBar(this.codeEditor.getValue())))}setTheme(e){var t;this.theme=e,this.container.setAttribute("data-theme",e),(t=this.toolbar)==null||t.setIcon("theme",e==="dark"?h.sun:h.moon)}focus(){this.codeEditor.focus()}destroy(){var e,t,r,i;(e=this.scheduledRender)==null||e.cancel(),this.scheduledRender=null,this.codeEditor.destroy(),(t=this.toolbar)==null||t.destroy(),this.toolbar=null,(r=this.statusBar)==null||r.destroy(),this.statusBar=null,(i=this.incremental)==null||i.destroy(),this.incremental=null,this.container.innerHTML="",this.container.classList.remove("md-editor-root",`md-editor-mode-${this.mode}`),this.container.removeAttribute("data-theme")}}exports.CodeEditor=v;exports.IncrementalRenderer=B;exports.MarkdownEditor=z;exports.Renderer=g;exports.StatusBar=C;exports.Toolbar=y;exports.adaptiveDebounceMs=P;exports.cancelIdle=Z;exports.countText=w;exports.debounce=E;exports.icons=h;exports.scheduleIdle=W;exports.splitIntoBlocks=M;
16
+ `,"content"],quote:["> ","","quoted text"],unorderedList:["- ","","list item"],orderedList:["1. ","","list item"],hr:[`
17
+ ---
18
+ `,"",""]};class Br{constructor(t,n={}){this.previewPane=null,this.incremental=null,this.toolbar=null,this.statusBar=null,this.activePopup=null,this.scheduledRender=null,this.scheduledWait=0;const r=typeof t=="string"?document.querySelector(t):t;if(!r)throw new Error("MarkdownEditor: mount container not found");this.container=r,this.mode=n.mode??"simple",this.theme=n.theme??"light",this.showPreview=n.preview??!0,this.autoPreview=n.autoPreview??!0,this.renderDebounceOpt=n.renderDebounce,this.onChange=n.onChange,this.container.classList.add("md-editor-root",`md-editor-mode-${this.mode}`),this.container.setAttribute("data-theme",this.theme),this.renderer=new xt({math:n.math??!0,mindmap:n.mindmap??!0,codeHighlight:n.codeHighlight??!0}),this.buildLayout(),this.codeEditor=new Xe(this.editorPane,{value:n.value??"",lineNumbers:this.mode==="complex",onChange:a=>{var c;(c=this.onChange)==null||c.call(this,a),this.autoPreview&&this.requestPreviewRender(a),this.updateStatusBar(a)}}),this.mode==="complex"&&(this.buildToolbar(),this.buildStatusBar()),this.previewPane&&(this.previewPane.classList.add("markdown-body"),this.incremental=new Bt(this.previewPane,a=>this.renderer.render(a)),this.setupCopyHandler()),this.renderPreview(n.value??""),this.updateStatusBar(n.value??"")}buildLayout(){this.container.innerHTML="",this.body=document.createElement("div"),this.body.className="md-editor-body",this.editorPane=document.createElement("div"),this.editorPane.className="md-editor-pane md-editor-source",this.body.appendChild(this.editorPane),this.showPreview&&(this.previewPane=document.createElement("div"),this.previewPane.className="md-editor-pane md-editor-preview",this.body.appendChild(this.previewPane)),this.container.appendChild(this.body)}buildToolbar(){const t=[{name:"heading",title:"Heading",icon:L.heading,handler:()=>this.insertSnippet("heading")},{name:"bold",title:"Bold",icon:L.bold,handler:()=>this.insertSnippet("bold")},{name:"italic",title:"Italic",icon:L.italic,handler:()=>this.insertSnippet("italic"),groupEnd:!0},{name:"link",title:"Link",icon:L.link,handler:()=>this.insertSnippet("link")},{name:"image",title:"Insert image",icon:L.image,handler:n=>this.showImagePopup(n)},{name:"video",title:"Insert video",icon:L.video,handler:n=>this.showVideoPopup(n),groupEnd:!0},{name:"youtube",title:"Insert YouTube video",icon:L.youtube,handler:n=>this.showYouTubePopup(n),groupEnd:!0},{name:"quote",title:"Quote",icon:L.quote,handler:()=>this.insertSnippet("quote")},{name:"ul",title:"Unordered list",icon:L.list,handler:()=>this.insertSnippet("unorderedList")},{name:"ol",title:"Ordered list",icon:L.listOrdered,handler:()=>this.insertSnippet("orderedList"),groupEnd:!0},{name:"code",title:"Code block",icon:L.code,handler:()=>this.insertSnippet("code")},{name:"table",title:"Table",icon:L.table,handler:()=>this.insertSnippet("table"),groupEnd:!0},{name:"math",title:"Math formula",icon:L.sigma,handler:()=>this.insertSnippet("math")},{name:"mindmap",title:"Insert mindmap",icon:L.mindmap,handler:()=>this.insertSnippet("mindmapBlock"),groupEnd:!0},{name:"hr",title:"Horizontal rule",icon:L.hr,handler:()=>this.insertSnippet("hr"),groupEnd:!0},{name:"preview",title:"Toggle preview",icon:L.eye,toggle:!0,active:this.showPreview,handler:()=>this.togglePreview()},{name:"theme",title:"Toggle theme",icon:this.theme==="dark"?L.sun:L.moon,handler:()=>this.setTheme(this.theme==="dark"?"light":"dark")}];this.toolbar=new It(t),this.container.insertBefore(this.toolbar.el,this.body)}buildStatusBar(){this.statusBar=new Lt({onRefreshPreview:()=>this.renderPreview(this.codeEditor.getValue())}),this.container.appendChild(this.statusBar.el)}showImagePopup(t){var n;(n=this.activePopup)==null||n.destroy(),this.activePopup=new fe(t,{title:"Insert image",fields:[{name:"url",label:"Image URL",placeholder:"https://example.com/image.png",required:!0},{name:"alt",label:"Alt text",placeholder:"image description"}],onSubmit:r=>{const a=r.url??"";a&&this.codeEditor.insertAtCursor(Mt(a,r.alt||"image"))}}),this.activePopup.show()}showVideoPopup(t){var n;(n=this.activePopup)==null||n.destroy(),this.activePopup=new fe(t,{title:"Insert video",fields:[{name:"url",label:"Video URL (.mp4, .webm, .ogg)",placeholder:"https://example.com/video.mp4",required:!0},{name:"alt",label:"Title",placeholder:"video title"}],onSubmit:r=>{const a=r.url??"";a&&this.codeEditor.insertAtCursor(Ot(a,r.alt||"video"))}}),this.activePopup.show()}showYouTubePopup(t){var n;(n=this.activePopup)==null||n.destroy(),this.activePopup=new fe(t,{title:"Insert YouTube video",fields:[{name:"url",label:"YouTube URL or video ID",placeholder:"https://www.youtube.com/watch?v=dQw4w9WgXcQ",required:!0}],onSubmit:r=>{const a=r.url??"",c=At(a);c&&this.codeEditor.insertAtCursor(Rt(c))}}),this.activePopup.show()}setupCopyHandler(){this.previewPane&&this.previewPane.addEventListener("click",t=>{var i;const n=t.target.closest(".md-editor-codeblock-copy");if(!n)return;const r=n.closest(".md-editor-codeblock"),a=r==null?void 0:r.querySelector("code");if(!a)return;const c=a.textContent??"";(i=navigator.clipboard)!=null&&i.writeText&&navigator.clipboard.writeText(c).then(()=>{const s=n.textContent;n.textContent="Copied!",n.classList.add("is-copied"),window.setTimeout(()=>{n.textContent=s,n.classList.remove("is-copied")},2e3)})})}insertSnippet(t){const[n,r,a]=Dr[t];this.codeEditor.insertAtCursor(`${n}${a}${r}`)}togglePreview(){var n;if(!this.previewPane)return;const t=this.previewPane.style.display!=="none";this.previewPane.style.display=t?"none":"",(n=this.toolbar)==null||n.setActive("preview",!t)}requestPreviewRender(t){var r,a;const n=this.renderDebounceOpt===!1?0:this.renderDebounceOpt??Ut(t.length);if(n===0){(r=this.scheduledRender)==null||r.cancel(),this.scheduledRender=null,this.renderPreview(t);return}(!this.scheduledRender||this.scheduledWait!==n)&&((a=this.scheduledRender)==null||a.cancel(),this.scheduledRender=Pt(c=>this.renderPreview(c),n),this.scheduledWait=n),this.scheduledRender(t)}renderPreview(t){if(!this.previewPane||!this.incremental)return;const{totalCount:n}=this.incremental.update(t);if(this.renderer.hydrate(this.previewPane),this.statusBar){const{charCount:r,wordCount:a}=Ae(t);this.statusBar.update({charCount:r,wordCount:a,blockCount:n,mode:this.mode,autoPreview:this.autoPreview})}}updateStatusBar(t){var a;if(!this.statusBar)return;const{charCount:n,wordCount:r}=Ae(t);this.statusBar.update({charCount:n,wordCount:r,blockCount:((a=this.incremental)==null?void 0:a.getBlockCount())??0,mode:this.mode,autoPreview:this.autoPreview})}getValue(){return this.codeEditor.getValue()}setValue(t){var n;this.codeEditor.setValue(t),(n=this.scheduledRender)==null||n.cancel(),this.renderPreview(t),this.updateStatusBar(t)}getHtml(){return this.renderer.render(this.getValue())}renderNow(){var t;(t=this.scheduledRender)==null||t.cancel(),this.renderPreview(this.codeEditor.getValue())}setAutoPreview(t){this.autoPreview=t,t&&this.renderPreview(this.codeEditor.getValue()),this.updateStatusBar(this.codeEditor.getValue())}setMode(t){var n,r,a;t!==this.mode&&(this.mode=t,this.container.classList.remove("md-editor-mode-simple","md-editor-mode-complex"),this.container.classList.add(`md-editor-mode-${t}`),this.codeEditor.setLineNumbers(t==="complex"),(n=this.toolbar)==null||n.destroy(),this.toolbar=null,(r=this.statusBar)==null||r.destroy(),this.statusBar=null,(a=this.activePopup)==null||a.destroy(),this.activePopup=null,t==="complex"&&(this.buildToolbar(),this.buildStatusBar(),this.updateStatusBar(this.codeEditor.getValue())))}setTheme(t){var n;this.theme=t,this.container.setAttribute("data-theme",t),(n=this.toolbar)==null||n.setIcon("theme",t==="dark"?L.sun:L.moon)}focus(){this.codeEditor.focus()}destroy(){var t,n,r,a,c;(t=this.scheduledRender)==null||t.cancel(),this.scheduledRender=null,(n=this.activePopup)==null||n.destroy(),this.activePopup=null,this.codeEditor.destroy(),(r=this.toolbar)==null||r.destroy(),this.toolbar=null,(a=this.statusBar)==null||a.destroy(),this.statusBar=null,(c=this.incremental)==null||c.destroy(),this.incremental=null,this.container.innerHTML="",this.container.classList.remove("md-editor-root",`md-editor-mode-${this.mode}`),this.container.removeAttribute("data-theme")}}exports.CodeEditor=Xe;exports.IncrementalRenderer=Bt;exports.MarkdownEditor=Br;exports.Popup=fe;exports.Renderer=xt;exports.StatusBar=Lt;exports.Toolbar=It;exports.adaptiveDebounceMs=Ut;exports.cancelIdle=Lr;exports.countText=Ae;exports.debounce=Pt;exports.extractYouTubeId=At;exports.icons=L;exports.imageMarkdown=Mt;exports.isVideoFile=Ct;exports.scheduleIdle=Ir;exports.splitIntoBlocks=Dt;exports.videoMarkdown=Ot;exports.youTubeEmbedMarkdown=Rt;
package/dist/index.d.ts CHANGED
@@ -11,6 +11,8 @@ export interface MarkdownEditorOptions {
11
11
  math?: boolean;
12
12
  /** Enable mindmaps. Default: true. */
13
13
  mindmap?: boolean;
14
+ /** Enable syntax highlighting for code blocks. Default: true. */
15
+ codeHighlight?: boolean;
14
16
  /** Show the preview pane. Default: true. */
15
17
  preview?: boolean;
16
18
  onChange?: (value: string) => void;
@@ -38,6 +40,7 @@ export declare class MarkdownEditor {
38
40
  private incremental;
39
41
  private toolbar;
40
42
  private statusBar;
43
+ private activePopup;
41
44
  private mode;
42
45
  private theme;
43
46
  private showPreview;
@@ -50,6 +53,10 @@ export declare class MarkdownEditor {
50
53
  private buildLayout;
51
54
  private buildToolbar;
52
55
  private buildStatusBar;
56
+ private showImagePopup;
57
+ private showVideoPopup;
58
+ private showYouTubePopup;
59
+ private setupCopyHandler;
53
60
  private insertSnippet;
54
61
  private togglePreview;
55
62
  private requestPreviewRender;
@@ -75,3 +82,5 @@ export { IncrementalRenderer } from './perf/IncrementalRenderer.js';
75
82
  export { splitIntoBlocks, type SourceBlock } from './perf/blocks.js';
76
83
  export { debounce, adaptiveDebounceMs, scheduleIdle, cancelIdle } from './perf/schedule.js';
77
84
  export { icons, type IconName } from './icons.js';
85
+ export { Popup, type PopupConfig, type PopupField } from './plugins/popup.js';
86
+ export { extractYouTubeId, youTubeEmbedMarkdown, imageMarkdown, videoMarkdown, isVideoFile } from './plugins/media.js';