dsh-plugin-workbench 0.0.11 → 0.0.13
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/CHANGELOG.md +27 -0
- package/README.md +1 -0
- package/lib/client.js +346 -41
- package/lib/client.js.map +1 -1
- package/lib/index.js +35 -1
- package/package.json +1 -1
- package/src/client/FileExplorer.tsx +6 -3
- package/src/client/FilePreview.tsx +106 -6
- package/src/client/composer.ts +57 -14
- package/src/client/composerMentions.ts +166 -0
- package/src/client/index.ts +5 -2
- package/src/client/locales.ts +2 -2
- package/src/client/mentions.ts +44 -11
- package/src/dsh.d.ts +12 -0
- package/src/index.ts +37 -1
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["styles","useSyncExternalStore","basenameOf","formatSize","memo","styles","useRef","useState","useCallback","HighlightJS","IDENT_RE","KEYWORDS","LITERALS","TYPES","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","hljs","javascript","escapeHtml","mdurl.parse","punycode","mdurl.encode","mdurl.format","mdurl.decode","RAW_PREFIX","MarkdownIt","useState","useRef","useCallback","useMemo","styles"],"sources":["../src/client/fileIcons.tsx","../src/client/store.ts","../src/client/composer.ts","../src/client/FileExplorer.tsx","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/lib/core.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/core.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/bash.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/cpp.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/csharp.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/css.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/go.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/ini.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/java.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/javascript.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/json.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/markdown.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/python.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/rust.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/sql.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/typescript.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/xml.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/yaml.js","../src/client/highlight.ts","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/decode.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/encode.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/format.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/parse.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/index.mjs","../node_modules/.pnpm/uc.micro@3.0.0/node_modules/uc.micro/build/index.mjs","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js","../node_modules/.pnpm/linkify-it@6.1.0/node_modules/linkify-it/build/index.mjs","../node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.js","../node_modules/.pnpm/markdown-it@15.0.0/node_modules/markdown-it/dist/markdown-it.mjs","../src/client/markdown.ts","../src/client/FilePreview.tsx","../src/client/locales.ts","../src/client/mentions.ts","../src/client/index.ts"],"sourcesContent":["/**\n * File-type icons for the explorer tree rows and the preview tabs.\n *\n * Code/config files render as small colored badges with an extension label\n * (VS Code \"Minimal\"-theme style); media, archives and installer files use\n * emoji; anything unknown falls back to a generic document glyph. No icon\n * assets are shipped — badges are pure CSS (per-language colors) and emoji\n * come from the platform font.\n */\nimport styles from './files.module.css'\n\ninterface BadgeSpec {\n label: string\n bg: string\n fg: string\n}\n\n/** lowercase extension (no dot) → badge colors. */\nconst BADGES: Record<string, BadgeSpec> = {\n // code\n ts: { label: 'TS', bg: '#3178c6', fg: '#ffffff' },\n mts: { label: 'TS', bg: '#3178c6', fg: '#ffffff' },\n cts: { label: 'TS', bg: '#3178c6', fg: '#ffffff' },\n tsx: { label: 'TSX', bg: '#61dafb', fg: '#06283d' },\n js: { label: 'JS', bg: '#f7df1e', fg: '#1e1e1e' },\n mjs: { label: 'JS', bg: '#f7df1e', fg: '#1e1e1e' },\n cjs: { label: 'JS', bg: '#f7df1e', fg: '#1e1e1e' },\n jsx: { label: 'JSX', bg: '#61dafb', fg: '#06283d' },\n json: { label: '{}', bg: '#cbcb41', fg: '#1e1e1e' },\n jsonc: { label: '{}', bg: '#cbcb41', fg: '#1e1e1e' },\n html: { label: 'HTML', bg: '#e44d26', fg: '#ffffff' },\n htm: { label: 'HTML', bg: '#e44d26', fg: '#ffffff' },\n css: { label: 'CSS', bg: '#2965f1', fg: '#ffffff' },\n scss: { label: 'SCSS', bg: '#cc6699', fg: '#ffffff' },\n less: { label: 'LESS', bg: '#2a4d80', fg: '#ffffff' },\n md: { label: 'MD', bg: '#519aba', fg: '#ffffff' },\n markdown: { label: 'MD', bg: '#519aba', fg: '#ffffff' },\n py: { label: 'PY', bg: '#3572a5', fg: '#ffffff' },\n pyw: { label: 'PY', bg: '#3572a5', fg: '#ffffff' },\n go: { label: 'GO', bg: '#00add8', fg: '#06283d' },\n rs: { label: 'RS', bg: '#dea584', fg: '#1e1e1e' },\n java: { label: 'JAVA', bg: '#b07219', fg: '#ffffff' },\n c: { label: 'C', bg: '#6e6e6e', fg: '#ffffff' },\n h: { label: 'H', bg: '#6e6e6e', fg: '#ffffff' },\n cpp: { label: 'CPP', bg: '#f34b7d', fg: '#ffffff' },\n cc: { label: 'CPP', bg: '#f34b7d', fg: '#ffffff' },\n cxx: { label: 'CPP', bg: '#f34b7d', fg: '#ffffff' },\n hpp: { label: 'HPP', bg: '#f34b7d', fg: '#ffffff' },\n hxx: { label: 'HPP', bg: '#f34b7d', fg: '#ffffff' },\n cs: { label: 'CS', bg: '#178600', fg: '#ffffff' },\n sh: { label: 'SH', bg: '#89e051', fg: '#1e1e1e' },\n bash: { label: 'SH', bg: '#89e051', fg: '#1e1e1e' },\n zsh: { label: 'SH', bg: '#89e051', fg: '#1e1e1e' },\n ps1: { label: 'PS1', bg: '#012456', fg: '#ffffff' },\n psm1: { label: 'PS1', bg: '#012456', fg: '#ffffff' },\n psd1: { label: 'PS1', bg: '#012456', fg: '#ffffff' },\n bat: { label: 'BAT', bg: '#6e6e6e', fg: '#ffffff' },\n cmd: { label: 'BAT', bg: '#6e6e6e', fg: '#ffffff' },\n sql: { label: 'SQL', bg: '#e38c00', fg: '#ffffff' },\n yml: { label: 'YML', bg: '#cb171e', fg: '#ffffff' },\n yaml: { label: 'YML', bg: '#cb171e', fg: '#ffffff' },\n toml: { label: 'TOML', bg: '#8b8b8b', fg: '#ffffff' },\n ini: { label: 'INI', bg: '#8b8b8b', fg: '#ffffff' },\n conf: { label: 'INI', bg: '#8b8b8b', fg: '#ffffff' },\n cfg: { label: 'INI', bg: '#8b8b8b', fg: '#ffffff' },\n xml: { label: 'XML', bg: '#a074c4', fg: '#ffffff' },\n xsl: { label: 'XML', bg: '#a074c4', fg: '#ffffff' },\n svg: { label: 'SVG', bg: '#e37933', fg: '#ffffff' },\n vue: { label: 'VUE', bg: '#41b883', fg: '#06283d' },\n lock: { label: 'LOCK', bg: '#9d9d9d', fg: '#1e1e1e' },\n env: { label: 'ENV', bg: '#f05033', fg: '#ffffff' },\n gitignore: { label: 'GIT', bg: '#f05033', fg: '#ffffff' },\n gitattributes: { label: 'GIT', bg: '#f05033', fg: '#ffffff' },\n gitmodules: { label: 'GIT', bg: '#f05033', fg: '#ffffff' },\n editorconfig: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n npmrc: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n pnpmrc: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n yarnrc: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n mk: { label: 'MK', bg: '#6d8086', fg: '#ffffff' },\n makefile: { label: 'MK', bg: '#6d8086', fg: '#ffffff' },\n txt: { label: 'TXT', bg: '#9d9d9d', fg: '#ffffff' },\n log: { label: 'TXT', bg: '#9d9d9d', fg: '#ffffff' },\n pdf: { label: 'PDF', bg: '#e74c3c', fg: '#ffffff' },\n}\n\n/** lowercase extension (no dot) → emoji glyph. */\nconst EMOJI: Record<string, string> = {\n png: '🖼️', jpg: '🖼️', jpeg: '🖼️', gif: '🖼️', webp: '🖼️', bmp: '🖼️', ico: '🖼️', avif: '🖼️', jfif: '🖼️', tif: '🖼️', tiff: '🖼️',\n mp3: '🎵', wav: '🎵', flac: '🎵', ogg: '🎵', oga: '🎵', m4a: '🎵', aac: '🎵', wma: '🎵', opus: '🎵', mid: '🎵',\n mp4: '🎬', mkv: '🎬', avi: '🎬', mov: '🎬', webm: '🎬', flv: '🎬', wmv: '🎬', m4v: '🎬', mpg: '🎬', mpeg: '🎬',\n zip: '🗜️', rar: '🗜️', '7z': '🗜️', tar: '🗜️', gz: '🗜️', bz2: '🗜️', xz: '🗜️', tgz: '🗜️', tbz2: '🗜️', zst: '🗜️',\n doc: '📘', docx: '📘', odt: '📘', rtf: '📘',\n xls: '📗', xlsx: '📗', ods: '📗', csv: '📗',\n ppt: '📙', pptx: '📙', odp: '📙',\n epub: '📖', mobi: '📖',\n exe: '📦', msi: '📦', dmg: '📦', app: '📦', deb: '📦', rpm: '📦', apk: '📦', iso: '📦',\n}\n\n/** Well-known extension-less names (lowercase) → emoji. */\nconst NAMED_EMOJI: Record<string, string> = {\n dockerfile: '🐳',\n}\n\nexport type FileIconSpec =\n | { kind: 'badge'; label: string; bg: string; fg: string }\n | { kind: 'emoji'; char: string }\n\n/** Resolve a file name to its icon spec (badge colors or an emoji glyph). */\nexport function fileIconFor(name: string): FileIconSpec {\n const lower = name.trim().toLowerCase()\n if (lower === '') return { kind: 'emoji', char: '📄' }\n\n const namedEmoji = NAMED_EMOJI[lower]\n if (namedEmoji !== undefined) return { kind: 'emoji', char: namedEmoji }\n\n // Dotfiles use the dotted remainder as the key (`.gitignore` → gitignore,\n // `.env.local` → env), regular files use the last extension segment.\n let key: string\n if (lower.startsWith('.')) {\n const rest = lower.slice(1)\n key = rest.startsWith('env.') ? 'env' : rest\n } else {\n const dot = lower.lastIndexOf('.')\n key = dot > 0 ? lower.slice(dot + 1) : lower\n }\n\n const badge = BADGES[key]\n if (badge !== undefined) return { kind: 'badge', label: badge.label, bg: badge.bg, fg: badge.fg }\n const emoji = EMOJI[key]\n if (emoji !== undefined) return { kind: 'emoji', char: emoji }\n return { kind: 'emoji', char: '📄' }\n}\n\n/** Render a file's icon: a colored extension badge or an emoji glyph. */\nexport function FileIcon({ name }: { name: string }) {\n const icon = fileIconFor(name)\n if (icon.kind === 'emoji') return <>{icon.char}</>\n const className = icon.label.length >= 4 ? `${styles.fileBadge} ${styles.fileBadgeLong}` : styles.fileBadge\n return (\n <span className={className} style={{ background: icon.bg, color: icon.fg }}>\n {icon.label}\n </span>\n )\n}\n","/**\n * Module-local store shared by the explorer tree (FileExplorer) and the split\n * preview (FilePreview). Tabs, active file, and collapsed state are kept\n * PER WORKSPACE (keyed by the session cwd): switching workspaces swaps to that\n * workspace's own set, and coming back restores it. Both components live in\n * the same client bundle, so this store is a single instance across the two\n * slot registrations.\n */\nimport { useSyncExternalStore } from 'react'\n\nexport type FeTheme = 'light' | 'dark'\n\n// ---------------------------------------------------------------------------\n// Undo history (Copy / Move / Rename / New / Delete)\n//\n// One stack PER WORKSPACE, mirroring the tabs: undoing in workspace B never\n// touches workspace A's file operations. Delete is reversible by design —\n// deleting RENAMES the item into a hidden `.dsh-trash` folder next to it, and\n// undo renames it back (no bytes are ever copied). When a stack overflows the\n// oldest entry is evicted; the caller permanently purges evicted delete\n// entries' trash items so the trash folder stays bounded.\n// ---------------------------------------------------------------------------\n\n/** How many operations each workspace remembers (older ones are dropped). */\nexport const UNDO_LIMIT = 30\n\nexport type UndoEntry =\n /** copy/paste (duplicate) — undo removes the copy. */\n | { kind: 'copy'; label: string; from: string; to: string; parent: string }\n /** cut-paste or drag-move — undo renames the item back. */\n | { kind: 'move'; label: string; from: string; to: string; parent: string }\n /** rename — undo renames back. */\n | { kind: 'rename'; label: string; from: string; to: string; parent: string }\n /** new file / new folder — undo trashes it. */\n | { kind: 'create'; label: string; path: string; parent: string }\n /** delete (moved into .dsh-trash) — undo renames it back. */\n | { kind: 'delete'; label: string; path: string; trash: string; parent: string }\n\ninterface PerWorkspace {\n tabs: string[]\n active: string | undefined\n collapsed: boolean\n undo: UndoEntry[]\n}\n\nexport interface TabsStateView {\n tabs: string[]\n active: string | undefined\n collapsed: boolean\n /** Display-only soft wrap for the editor (never touches the file content). */\n wrap: boolean\n theme: FeTheme\n cwd: string | undefined\n /** Undoable file operations, most recent last. */\n undo: UndoEntry[]\n}\n\nconst EMPTY_TABS: string[] = []\nconst EMPTY_UNDO: UndoEntry[] = []\nconst EMPTY_WORKSPACE: PerWorkspace = { tabs: EMPTY_TABS, active: undefined, collapsed: false, undo: EMPTY_UNDO }\n\nconst WRAP_KEY = 'dsh-plugin-workbench:wrap'\n\n/** Read the persisted wrap preference; defaults to soft wrap ON. */\nfunction storedWrap(): boolean {\n try {\n if (typeof window === 'undefined') return true\n const stored = window.localStorage.getItem(WRAP_KEY)\n return stored === null ? true : stored === '1'\n } catch {\n return true\n }\n}\n\ninterface StoreState {\n currentCwd: string | undefined\n workspaces: Record<string, PerWorkspace>\n theme: FeTheme\n wrap: boolean\n}\n\nconst initialWrap = storedWrap()\nlet state: StoreState = { currentCwd: undefined, workspaces: {}, theme: 'dark', wrap: initialWrap }\nlet view: TabsStateView = { tabs: EMPTY_TABS, active: undefined, collapsed: false, wrap: initialWrap, theme: 'dark', cwd: undefined, undo: EMPTY_UNDO }\nconst listeners = new Set<() => void>()\n\nfunction workspaceOf(cwd: string | undefined): PerWorkspace {\n return cwd !== undefined ? state.workspaces[cwd] ?? EMPTY_WORKSPACE : EMPTY_WORKSPACE\n}\n\nexport function getTabsState(): TabsStateView {\n return view\n}\n\nexport function subscribeTabs(listener: () => void): () => void {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport function useTabsState(): TabsStateView {\n return useSyncExternalStore(subscribeTabs, getTabsState)\n}\n\nfunction commit(next: StoreState): void {\n state = next\n const ws = workspaceOf(state.currentCwd)\n const nextView: TabsStateView = {\n tabs: ws.tabs,\n active: ws.active,\n collapsed: ws.collapsed,\n wrap: state.wrap,\n theme: state.theme,\n cwd: state.currentCwd,\n undo: ws.undo,\n }\n if (\n nextView.tabs === view.tabs\n && nextView.active === view.active\n && nextView.collapsed === view.collapsed\n && nextView.wrap === view.wrap\n && nextView.theme === view.theme\n && nextView.cwd === view.cwd\n && nextView.undo === view.undo\n ) return\n view = nextView\n for (const listener of [...listeners]) listener()\n}\n\n/** Update the current workspace's record; no-op without a current workspace. */\nfunction updateCurrent(updater: (ws: PerWorkspace) => PerWorkspace): void {\n const cwd = state.currentCwd\n if (cwd === undefined) return\n const prev = state.workspaces[cwd] ?? EMPTY_WORKSPACE\n const next = updater(prev)\n if (next === prev) return\n commit({ ...state, workspaces: { ...state.workspaces, [cwd]: next } })\n}\n\n/** Point the store at a workspace (called when the session's cwd changes). */\nexport function setCwd(cwd: string | undefined): void {\n if (state.currentCwd === cwd) return\n commit({ ...state, currentCwd: cwd })\n}\n\n/** Open a file in the current workspace's tabs (or activate it); pops the pane out. */\nexport function openFile(path: string): void {\n updateCurrent((ws) => {\n if (ws.tabs.includes(path)) {\n if (ws.active === path && !ws.collapsed) return ws\n return { ...ws, active: path, collapsed: false }\n }\n return { ...ws, tabs: [...ws.tabs, path], active: path, collapsed: false }\n })\n}\n\n/** Close one tab; if it was active, activate its neighbor. */\nexport function closeFile(path: string): void {\n updateCurrent((ws) => {\n const index = ws.tabs.indexOf(path)\n if (index < 0) return ws\n const tabs = ws.tabs.filter((t) => t !== path)\n let active = ws.active\n if (active === path) active = tabs[Math.min(index, tabs.length - 1)]\n return { ...ws, tabs, active }\n })\n}\n\n/** Switch the active tab without re-reading. */\nexport function activateFile(path: string): void {\n updateCurrent((ws) => (ws.active === path || !ws.tabs.includes(path) ? ws : { ...ws, active: path }))\n}\n\n/** Point any open tab at a new path after a rename (the disk path changed). */\nexport function retargetFile(oldPath: string, newPath: string): void {\n updateCurrent((ws) => {\n if (!ws.tabs.includes(oldPath)) return ws\n const tabs = ws.tabs.map((t) => (t === oldPath ? newPath : t))\n return { ...ws, tabs, active: ws.active === oldPath ? newPath : ws.active }\n })\n}\n\n/** Close every open tab at or under a path (used after deleting it). */\nexport function closeFilesUnder(path: string): void {\n updateCurrent((ws) => {\n const sep = path.includes('\\\\') ? '\\\\' : '/'\n const prefix = path.endsWith('\\\\') || path.endsWith('/') ? path : path + sep\n const kept = ws.tabs.filter((t) => t !== path && !t.startsWith(prefix))\n if (kept.length === ws.tabs.length) return ws\n let active = ws.active\n if (active !== undefined && (active === path || active.startsWith(prefix))) {\n const index = ws.tabs.indexOf(active)\n active = kept[Math.min(index, kept.length - 1)]\n }\n return { ...ws, tabs: kept, active }\n })\n}\n\n/** Move a tab before another tab (drag-to-reorder). */\nexport function moveTab(dragged: string, target: string): void {\n updateCurrent((ws) => {\n if (dragged === target) return ws\n const from = ws.tabs.indexOf(dragged)\n const to = ws.tabs.indexOf(target)\n if (from < 0 || to < 0) return ws\n const tabs = [...ws.tabs]\n tabs.splice(from, 1)\n tabs.splice(to, 0, dragged)\n return { ...ws, tabs }\n })\n}\n\n/** Tuck the preview pane away, keeping all open tabs and their content. */\nexport function collapsePreview(): void {\n updateCurrent((ws) => (ws.collapsed ? ws : { ...ws, collapsed: true }))\n}\n\n/** Pop the preview pane back out, restoring the tabs as they were. */\nexport function expandPreview(): void {\n updateCurrent((ws) => (ws.collapsed ? { ...ws, collapsed: false } : ws))\n}\n\n/** Toggle the file-browser light/dark theme (applies to every workspace). */\nexport function toggleTheme(): void {\n commit({ ...state, theme: state.theme === 'dark' ? 'light' : 'dark' })\n}\n\n/** Toggle display-only soft wrap for the editor (global, persisted). */\nexport function toggleWrap(): void {\n const wrap = !state.wrap\n try {\n window.localStorage.setItem(WRAP_KEY, wrap ? '1' : '0')\n } catch {\n // storage unavailable — the preference just won't persist across reloads\n }\n commit({ ...state, wrap })\n}\n\n// ---------------------------------------------------------------------------\n// File clipboard (Copy / Cut + Paste)\n//\n// Lives OUTSIDE the per-workspace records on purpose: copying in workspace A\n// and pasting into workspace B is the whole point, so the clipboard survives\n// workspace switches. Cut keeps the sources alive until a paste moves them\n// (or Escape downgrades the cut back to a copy), mirroring the OS explorer.\n// ---------------------------------------------------------------------------\n\nexport type ClipboardMode = 'copy' | 'cut'\n\nexport interface ClipboardItem {\n path: string\n name: string\n kind: 'file' | 'dir' | 'other'\n}\n\nexport interface ClipboardView {\n items: ClipboardItem[]\n mode: ClipboardMode\n}\n\nconst EMPTY_CLIPBOARD: ClipboardView = { items: [], mode: 'copy' }\n\nlet clipboard: ClipboardView = EMPTY_CLIPBOARD\nconst clipboardListeners = new Set<() => void>()\n\nexport function getClipboard(): ClipboardView {\n return clipboard\n}\n\nexport function subscribeClipboard(listener: () => void): () => void {\n clipboardListeners.add(listener)\n return () => {\n clipboardListeners.delete(listener)\n }\n}\n\n/** Clipboard contents shared across every workspace (Explorer semantics). */\nexport function useClipboard(): ClipboardView {\n return useSyncExternalStore(subscribeClipboard, getClipboard)\n}\n\nfunction commitClipboard(next: ClipboardView): void {\n if (next === clipboard) return\n clipboard = next\n for (const listener of [...clipboardListeners]) listener()\n}\n\n/** Put entries on the clipboard, replacing whatever was there. */\nexport function copyToClipboard(items: ClipboardItem[], mode: ClipboardMode): void {\n if (items.length === 0) return\n commitClipboard({ items, mode })\n}\n\n/** Drop the clipboard contents (after a cut-paste, or via the clear button). */\nexport function clearClipboard(): void {\n if (clipboard === EMPTY_CLIPBOARD) return\n commitClipboard(EMPTY_CLIPBOARD)\n}\n\n/** Escape in the source workspace: cancel an armed cut without dropping the items. */\nexport function cancelCut(): void {\n if (clipboard.mode === 'cut') commitClipboard({ ...clipboard, mode: 'copy' })\n}\n\n// ---------------------------------------------------------------------------\n// Undo stack (see the types at the top of this file)\n// ---------------------------------------------------------------------------\n\n/**\n * Append an operation to the current workspace's undo stack, capped at\n * UNDO_LIMIT entries. Returns the evicted oldest entry (the caller purges its\n * trash item when it was a delete), or undefined when nothing was evicted.\n */\nexport function pushUndo(entry: UndoEntry): UndoEntry | undefined {\n const cwd = state.currentCwd\n if (cwd === undefined) return undefined\n const prev = state.workspaces[cwd] ?? EMPTY_WORKSPACE\n const undo = [...prev.undo, entry]\n let evicted: UndoEntry | undefined\n if (undo.length > UNDO_LIMIT) evicted = undo.shift()\n commit({ ...state, workspaces: { ...state.workspaces, [cwd]: { ...prev, undo } } })\n return evicted\n}\n\n/** Remove and return the current workspace's most recent operation (or undefined). */\nexport function popUndo(): UndoEntry | undefined {\n const cwd = state.currentCwd\n if (cwd === undefined) return undefined\n const prev = state.workspaces[cwd] ?? EMPTY_WORKSPACE\n if (prev.undo.length === 0) return undefined\n const undo = [...prev.undo]\n const entry = undo.pop()\n commit({ ...state, workspaces: { ...state.workspaces, [cwd]: { ...prev, undo } } })\n return entry\n}\n","/**\n * Composer integration for the workbench file column.\n *\n * Two gestures land text in the chat composer without touching the core:\n *\n * 1. Drag & drop — dragging one or more tree rows and dropping ANYWHERE\n * outside the file column (the chat, the composer, the message list)\n * inserts the dragged paths into the composer. Dropping INSIDE the file\n * column still performs the tree's own move operation — the tree's drop\n * handler runs first and stops propagation, so this document-level\n * listener never sees those drops.\n *\n * 2. Context-menu \"@引用\" — inserts `@<relative-workspace-path>` at the\n * composer caret.\n *\n * The composer is a controlled React textarea, so the value is updated\n * through the native `value` setter + a bubbling `input` event (the standard\n * trick that makes React's onChange see the change), and the caret is\n * restored on the next frame because the React re-render may reset it.\n */\nimport { getTabsState, openFile } from './store'\n\n/** Custom dataTransfer type carrying the dragged workspace paths (JSON array). */\nexport const DRAG_TYPE = 'application/x-dsh-workbench-files'\n\n/** One-time install guard (the client bundle re-applies on HMR). */\nlet dropsInstalled = false\n\n/** Start the document-level drop listener (idempotent). */\nexport function installComposerDrops(): void {\n if (dropsInstalled || typeof document === 'undefined') return\n dropsInstalled = true\n // Bubble phase: the tree's own drop handlers (React, attached at the root\n // container) run first and stop the event, so drops inside the file column\n // never reach this listener.\n document.addEventListener('drop', onDocumentDrop)\n}\n\nfunction onDocumentDrop(e: DragEvent): void {\n const dt = e.dataTransfer\n if (dt === null || !dt.types.includes(DRAG_TYPE)) return\n const paths = readDraggedPaths(dt)\n if (paths.length === 0) return\n if (!insertIntoComposer(paths.join('\\n'))) return\n e.preventDefault()\n e.stopPropagation()\n}\n\n/** Read the JSON paths from the custom type; falls back to raw text. */\nexport function readDraggedPaths(dt: DataTransfer | null): string[] {\n if (dt === null) return []\n let raw = ''\n try {\n raw = dt.getData(DRAG_TYPE)\n } catch {\n return []\n }\n try {\n const parsed: unknown = JSON.parse(raw)\n if (Array.isArray(parsed) && parsed.every((p) => typeof p === 'string')) return parsed as string[]\n } catch {\n // Not JSON — fall through to the raw-text fallback.\n }\n return raw.trim().length > 0 ? [raw] : []\n}\n\n/** The visible composer textarea, or null when none is usable. */\nfunction composerTextarea(): HTMLTextAreaElement | null {\n if (typeof document === 'undefined') return null\n const seat = document.querySelector('[data-composer-seat]')\n if (seat === null) return null\n const input = seat.querySelector('textarea')\n if (!(input instanceof HTMLTextAreaElement)) return null\n // A disabled input has no usable draft; a read-only one is either the hero\n // workspace picker or a transient submitting state — skip both.\n if (input.disabled || input.readOnly) return null\n return input\n}\n\n/**\n * Insert `text` into the composer. If the composer textarea has focus, the\n * text goes at the caret; otherwise it is appended to the draft. Returns\n * false when no usable composer is present.\n */\nexport function insertIntoComposer(text: string): boolean {\n const textarea = composerTextarea()\n if (textarea === null) return false\n const value = textarea.value\n const atCaret = document.activeElement === textarea\n const start = atCaret ? textarea.selectionStart : value.length\n const end = atCaret ? textarea.selectionEnd : value.length\n const next = value.slice(0, start) + text + value.slice(end)\n const setter = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set\n if (setter !== undefined) setter.call(textarea, next)\n else textarea.value = next\n textarea.dispatchEvent(new Event('input', { bubbles: true }))\n // The React re-render may reset the selection, so restore on the next frame.\n const caret = start + text.length\n requestAnimationFrame(() => {\n try {\n textarea.setSelectionRange(caret, caret)\n } catch {\n // Selection state unavailable — the text is in the draft either way.\n }\n })\n return true\n}\n\n/** Relative workspace path of `path` under `cwd` ('' when it IS the cwd). */\nexport function relPathOf(path: string, cwd: string | undefined): string {\n if (cwd === undefined || cwd.length === 0) return path\n const sep = cwd.includes('\\\\') ? '\\\\' : '/'\n const prefix = cwd.endsWith('\\\\') || cwd.endsWith('/') ? cwd : cwd + sep\n const lowerPath = path.toLowerCase()\n if (lowerPath.startsWith(prefix.toLowerCase())) return path.slice(prefix.length)\n if (lowerPath === cwd.toLowerCase()) return ''\n return path\n}\n\n/**\n * Resolve an @-mention path (workspace-relative or absolute) against the\n * current workspace cwd; returns the absolute OS path, or undefined when the\n * mention cannot be resolved (no cwd and the path is not absolute).\n */\nexport function resolveMentionPath(mention: string): string | undefined {\n const absolute = /^[A-Za-z]:[\\\\/]/.test(mention) || mention.startsWith('/') || mention.startsWith('\\\\')\n const { cwd } = getTabsState()\n if (absolute) return mention\n if (cwd === undefined) return undefined\n const sep = cwd.includes('\\\\') ? '\\\\' : '/'\n return cwd.endsWith('\\\\') || cwd.endsWith('/') ? cwd + mention : cwd + sep + mention\n}\n\n/** Open an @-mention's file in the workbench preview (used by the linkifier). */\nexport function openMention(mention: string): void {\n const abs = resolveMentionPath(mention)\n if (abs === undefined) return\n openFile(abs)\n}\n","/**\n * File tree column, registered into the `explorer` slot declared by the\n * (patched) ui-layout AppFrame. File selection is pushed into the shared\n * selection store so the `explorer.preview` slot can render the split view.\n */\nimport { memo, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport type { DragEvent as ReactDragEvent, KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent } from 'react'\nimport styles from './files.module.css'\nimport { FileIcon } from './fileIcons'\nimport type { FilesKey } from './locales'\nimport { cancelCut, clearClipboard, closeFilesUnder, copyToClipboard, expandPreview, openFile, popUndo, pushUndo, retargetFile, setCwd, toggleTheme, useClipboard, useTabsState } from './store'\nimport type { ClipboardItem, ClipboardMode, UndoEntry } from './store'\nimport { DRAG_TYPE, insertIntoComposer, relPathOf } from './composer'\n\nexport interface FsListEntry {\n name: string\n path: string\n kind: 'dir' | 'file' | 'other'\n size?: number\n}\n\nexport interface FsListResult {\n root: string\n entries: FsListEntry[]\n}\n\nexport interface FsReadResult {\n path: string\n content: string\n size: number\n binary: boolean\n truncated: boolean\n}\n\n/** Result of a context-menu mutation (create/rename/delete). */\nexport interface FsMutationResult {\n path: string\n /** Copy-only: `true` when the destination existed and the copy was skipped (client may ask about overwrite). */\n exists?: boolean\n}\n\ninterface SessionSummary {\n id: string\n cwd?: string\n}\n\ninterface SessionListState {\n current?: string\n byId: Record<string, SessionSummary>\n}\n\nexport interface FileExplorerProps {\n width: number\n useSessions: <T>(selector: (s: SessionListState) => T) => T\n t: (key: FilesKey, params?: Record<string, unknown>) => string\n listDir: (path: string, signal?: AbortSignal) => Promise<FsListResult>\n openPath: (path: string) => Promise<void>\n revealInExplorer: (path: string, kind: 'file' | 'dir', signal?: AbortSignal) => Promise<FsMutationResult>\n createFile: (path: string, signal?: AbortSignal) => Promise<FsMutationResult>\n createDir: (path: string, signal?: AbortSignal) => Promise<FsMutationResult>\n renameFile: (path: string, to: string, signal?: AbortSignal) => Promise<FsMutationResult>\n removePath: (path: string, signal?: AbortSignal) => Promise<FsMutationResult>\n copyPath: (from: string, to: string, overwrite: boolean, signal?: AbortSignal) => Promise<FsMutationResult>\n}\n\nfunction basenameOf(path: string): string {\n const trimmed = path.replace(/[\\\\/]+$/, '')\n const idx = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\\\'))\n return idx >= 0 ? trimmed.slice(idx + 1) : trimmed\n}\n\n/** Parent directory of a path ('' for a bare drive root — never used for such). */\nfunction parentOf(path: string): string {\n const idx = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n return idx > 0 ? path.slice(0, idx) : path\n}\n\n/** Append a child name to a directory path, honoring its separator style. */\nfunction joinPath(dir: string, name: string): string {\n const sep = dir.includes('\\\\') ? '\\\\' : '/'\n return dir.endsWith('\\\\') || dir.endsWith('/') ? dir + name : dir + sep + name\n}\n\n/** \"a.txt\" → \"a - Copy.txt\", \"folder\" → \"folder - Copy\" (OS explorer duplicate naming). */\nfunction copyName(name: string): string {\n const idx = name.lastIndexOf('.')\n if (idx <= 0) return `${name} - Copy`\n return `${name.slice(0, idx)} - Copy${name.slice(idx)}`\n}\n\n/**\n * Hidden folder next to a deleted item that holds it until undo restores it\n * (delete = rename into here, undo = rename back — no bytes are copied).\n */\nconst TRASH_NAME = '.dsh-trash'\n\n/** Number of separators in a path — used to delete children before parents. */\nfunction sepCount(path: string): number {\n let n = 0\n for (let i = 0; i < path.length; i += 1) {\n if (path[i] === '/' || path[i] === '\\\\') n += 1\n }\n return n\n}\n\nfunction formatSize(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return ''\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\n/** How often the visible tree is re-listed to pick up disk changes. */\nconst REFRESH_MS = 2000\n\n/** How many previously-expanded folders to re-list at once on workspace switch. */\nconst DIR_LOAD_BATCH = 4\n\n/** Pause between batches when restoring expanded folders. */\nconst DIR_LOAD_GAP_MS = 50\n\nconst EMPTY_EXPANDED = new Set<string>()\n\n/** True when two directory listings are identical (name/kind/size). */\nfunction sameEntries(a: FsListEntry[], b: FsListEntry[]): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i += 1) {\n if (a[i].name !== b[i].name || a[i].kind !== b[i].kind || a[i].size !== b[i].size) return false\n }\n return true\n}\n\ninterface TreeRowProps {\n entry: FsListEntry\n depth: number\n isActive: boolean\n isSelected: boolean\n isCut: boolean\n isExpanded: boolean\n isDropTarget: boolean\n onToggleDir: (path: string) => void\n onRefreshDir: (path: string) => void\n onSelect: (entry: FsListEntry, e: ReactMouseEvent) => void\n onDoubleClick: (entry: FsListEntry) => void\n onOpenExternal: (path: string) => Promise<void>\n onContextMenu: (e: ReactMouseEvent, entry: FsListEntry) => void\n onDragStart: (e: ReactDragEvent, entry: FsListEntry) => void\n onDragEnd: () => void\n onDragOverRow: (e: ReactDragEvent, entry: FsListEntry) => void\n onDragLeaveRow: () => void\n onDropRow: (e: ReactDragEvent, entry: FsListEntry) => void\n t: (key: FilesKey, params?: Record<string, unknown>) => string\n}\n\n/**\n * One tree row, memoized so opening/activating a file (which changes the\n * active-path highlight) re-renders only the affected row — with a workspace\n * full of files, re-rendering the whole tree on every click is what made\n * opening files feel laggy.\n */\nconst TreeRow = memo(function TreeRow({\n entry,\n depth,\n isActive,\n isSelected,\n isCut,\n isExpanded,\n isDropTarget,\n onToggleDir,\n onRefreshDir,\n onSelect,\n onDoubleClick,\n onOpenExternal,\n onContextMenu,\n onDragStart,\n onDragEnd,\n onDragOverRow,\n onDragLeaveRow,\n onDropRow,\n t,\n}: TreeRowProps) {\n const isDir = entry.kind === 'dir'\n return (\n <div\n className={`${styles.row} ${isSelected || isActive ? styles.rowSelected : ''}${isCut ? ` ${styles.rowCut}` : ''}${isDropTarget ? ` ${styles.rowDropTarget}` : ''}`}\n style={{ paddingLeft: 8 + depth * 14 }}\n draggable\n onClick={(e) => onSelect(entry, e)}\n onDoubleClick={() => onDoubleClick(entry)}\n onContextMenu={(e) => onContextMenu(e, entry)}\n onDragStart={(e) => onDragStart(e, entry)}\n onDragEnd={onDragEnd}\n onDragOver={(e) => onDragOverRow(e, entry)}\n onDragLeave={onDragLeaveRow}\n onDrop={(e) => onDropRow(e, entry)}\n role=\"treeitem\"\n aria-selected={isSelected || isActive}\n aria-expanded={isDir ? isExpanded : undefined}\n title={entry.name}\n >\n <span\n className={styles.chevron}\n onClick={(e) => {\n e.stopPropagation()\n if (isDir) onToggleDir(entry.path)\n }}\n >\n {isDir ? (isExpanded ? '▾' : '▸') : ''}\n </span>\n <span className={styles.icon}>\n {isDir ? (isExpanded ? '📂' : '📁') : entry.kind === 'file' ? <FileIcon name={entry.name} /> : '·'}\n </span>\n <span className={styles.name}>{entry.name}</span>\n {entry.kind === 'file' && entry.size !== undefined && (\n <span className={styles.size}>{formatSize(entry.size)}</span>\n )}\n <span className={styles.actions}>\n <button\n type=\"button\"\n className={styles.action}\n title={t('action.open')}\n onClick={(e) => {\n e.stopPropagation()\n void onOpenExternal(entry.path)\n }}\n >\n ↗\n </button>\n {isDir && (\n <button\n type=\"button\"\n className={styles.action}\n title={t('action.refresh')}\n onClick={(e) => {\n e.stopPropagation()\n onRefreshDir(entry.path)\n }}\n >\n ⟳\n </button>\n )}\n </span>\n </div>\n )\n})\n\nexport function FileExplorer({\n width,\n useSessions,\n t,\n listDir,\n openPath,\n revealInExplorer,\n createFile,\n createDir,\n renameFile,\n removePath,\n copyPath,\n}: FileExplorerProps) {\n const sessionList = useSessions((s) => s)\n const currentId = sessionList.current\n const cwd = currentId !== undefined ? sessionList.byId[currentId]?.cwd : undefined\n const { active: activePath, theme, undo: undoEntries } = useTabsState()\n\n const rootAbortRef = useRef<AbortController | null>(null)\n\n // Expanded directories are kept per workspace so each cwd restores its own.\n const cwdKey = cwd ?? ''\n const [expandedByCwd, setExpandedByCwd] = useState<Record<string, Set<string>>>({})\n const expanded = expandedByCwd[cwdKey] ?? EMPTY_EXPANDED\n\n const [root, setRoot] = useState<string | undefined>(undefined)\n const [rootLoading, setRootLoading] = useState(false)\n const [rootError, setRootError] = useState<string | undefined>(undefined)\n const [children, setChildren] = useState<Record<string, FsListEntry[]>>({})\n const [loadingDirs, setLoadingDirs] = useState<Set<string>>(new Set())\n const [dirErrors, setDirErrors] = useState<Record<string, string>>({})\n\n // Explorer-like selection (path → kind). A plain click replaces it,\n // Ctrl/Cmd+click toggles membership; copy/cut/paste act on it.\n const [selected, setSelected] = useState<Record<string, FsListEntry['kind']>>({})\n const clipboard = useClipboard()\n const treeAreaRef = useRef<HTMLDivElement>(null)\n\n // ---- drag & drop (move into a folder) ----\n const dragPathsRef = useRef<string[] | null>(null)\n const [dropTarget, setDropTarget] = useState<string | null>(null)\n\n // ---- context menu (rows, blank tree space, header and clipboard bar —\n // the whole column carries a menu; right-clicking a row keeps its own) ----\n interface MenuState {\n kind: 'file' | 'dir' | 'blank'\n path: string\n x: number\n y: number\n }\n const [menu, setMenu] = useState<MenuState | undefined>(undefined)\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | undefined>(undefined)\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Measure and clamp the menu into the viewport before the browser paints\n // (layout effects run pre-paint, so the raw position never shows).\n useLayoutEffect(() => {\n if (menu === undefined) {\n setMenuPos(undefined)\n return\n }\n const el = menuRef.current\n if (el === null) return\n const rect = el.getBoundingClientRect()\n setMenuPos({\n x: Math.max(4, Math.min(menu.x, window.innerWidth - rect.width - 4)),\n y: Math.max(4, Math.min(menu.y, window.innerHeight - rect.height - 4)),\n })\n }, [menu])\n\n // Close the menu on outside click / Escape / window blur.\n useEffect(() => {\n if (menu === undefined) return undefined\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMenu(undefined)\n }\n const onMouseDown = (e: MouseEvent) => {\n const el = menuRef.current\n if (el !== null && e.target instanceof Node && el.contains(e.target)) return\n setMenu(undefined)\n }\n const onBlur = () => setMenu(undefined)\n document.addEventListener('keydown', onKeyDown)\n // mousedown (not click): closing before a menu item's click still lets the\n // click dispatch on the item, and closes when clicking anywhere else.\n document.addEventListener('mousedown', onMouseDown)\n window.addEventListener('blur', onBlur)\n return () => {\n document.removeEventListener('keydown', onKeyDown)\n document.removeEventListener('mousedown', onMouseDown)\n window.removeEventListener('blur', onBlur)\n }\n }, [menu])\n\n // Explorer semantics: clicking (or right-clicking) ANYWHERE outside the\n // tree — the chat, the header, other columns — clears the selection. Clicks\n // on the tree rows and inside the open menu keep it (the menu's batch\n // actions operate on the selection).\n useEffect(() => {\n const onDocMouseDown = (e: MouseEvent) => {\n const target = e.target\n if (!(target instanceof Node)) return\n const tree = treeAreaRef.current\n if (tree !== null && tree.contains(target)) return\n const m = menuRef.current\n if (m !== null && m.contains(target)) return\n setSelected({})\n }\n document.addEventListener('mousedown', onDocMouseDown)\n return () => document.removeEventListener('mousedown', onDocMouseDown)\n }, [])\n\n // Latest tree snapshot for the polling tick (avoids stale closures).\n const treeRef = useRef({ root, children, expanded, rootLoading })\n treeRef.current = { root, children, expanded, rootLoading }\n // Stable view of the loaded listings so toggleDir doesn't depend on the\n // children state (keeps memoized rows from re-rendering on listing updates).\n const childrenRef = useRef(children)\n childrenRef.current = children\n\n // Expose the explorer width so the maid-atelier fixed chrome (top/bottom\n // trim) can shift past this column instead of covering it.\n useEffect(() => {\n document.body.style.setProperty('--dsh-explorer-width', `${width}px`)\n return () => {\n document.body.style.removeProperty('--dsh-explorer-width')\n }\n }, [width])\n\n // Reset the whole tree whenever the current session's cwd changes. The tabs\n // and expanded directories live per-workspace in the store / expandedByCwd,\n // so switching back restores them.\n useEffect(() => {\n rootAbortRef.current?.abort()\n setRoot(undefined)\n setRootError(undefined)\n setChildren({})\n setLoadingDirs(new Set())\n setDirErrors({})\n setSelected({})\n setCwd(cwd)\n\n if (cwd === undefined) {\n setRootLoading(false)\n return\n }\n\n setRootLoading(true)\n const controller = new AbortController()\n rootAbortRef.current = controller\n listDir(cwd, controller.signal)\n .then(async (result) => {\n if (controller.signal.aborted) return\n setRoot(result.root)\n setChildren({ [result.root]: result.entries })\n setRootError(undefined)\n // Restore previously-expanded folders in small batches so a workspace\n // with many expanded folders doesn't flood the tree (and the page)\n // all at once; the auto-refresh tick fills any remainder shortly after.\n const dirs = [...expanded].filter((dirPath) => dirPath !== result.root)\n for (let i = 0; i < dirs.length; i += DIR_LOAD_BATCH) {\n if (controller.signal.aborted) return\n const batch = dirs.slice(i, i + DIR_LOAD_BATCH)\n await Promise.all(batch.map((dirPath) => loadDir(dirPath)))\n if (i + DIR_LOAD_BATCH < dirs.length) {\n await new Promise((resolve) => setTimeout(resolve, DIR_LOAD_GAP_MS))\n }\n }\n })\n .catch((error) => {\n if (controller.signal.aborted) return\n setRootError(error instanceof Error ? error.message : String(error))\n })\n .finally(() => {\n if (!controller.signal.aborted) setRootLoading(false)\n })\n return () => controller.abort()\n }, [cwd, listDir])\n\n // Auto-refresh the visible tree (root + expanded directories) on a timer so\n // disk changes appear without a manual refresh.\n const refreshVisible = useCallback(async (signal: AbortSignal) => {\n const snapshot = treeRef.current\n if (cwd === undefined || snapshot.rootLoading) return\n\n try {\n const result = await listDir(cwd, signal)\n if (signal.aborted) return\n const existing = snapshot.children[result.root]\n if (snapshot.root !== result.root || existing === undefined || !sameEntries(existing, result.entries)) {\n setRoot(result.root)\n setChildren((prev) => ({ ...prev, [result.root]: result.entries }))\n setRootError(undefined)\n }\n } catch (error) {\n if (signal.aborted) return\n setRootError(error instanceof Error ? error.message : String(error))\n }\n\n for (const dirPath of snapshot.expanded) {\n if (signal.aborted) return\n try {\n const result = await listDir(dirPath, signal)\n if (signal.aborted) return\n const existing = snapshot.children[dirPath]\n if (existing === undefined || !sameEntries(existing, result.entries)) {\n setChildren((prev) => ({ ...prev, [dirPath]: result.entries }))\n setDirErrors((prev) => {\n if (!(dirPath in prev)) return prev\n const next = { ...prev }\n delete next[dirPath]\n return next\n })\n }\n } catch (error) {\n if (signal.aborted) return\n setDirErrors((prev) => ({ ...prev, [dirPath]: error instanceof Error ? error.message : String(error) }))\n }\n }\n }, [cwd, listDir])\n\n useEffect(() => {\n if (cwd === undefined) return undefined\n const controller = new AbortController()\n let inFlight = false\n const timer = setInterval(() => {\n if (inFlight) return\n inFlight = true\n void refreshVisible(controller.signal).finally(() => {\n inFlight = false\n })\n }, REFRESH_MS)\n return () => {\n controller.abort()\n clearInterval(timer)\n }\n }, [cwd, refreshVisible])\n\n const loadDir = useCallback(async (dirPath: string) => {\n setLoadingDirs((prev) => new Set(prev).add(dirPath))\n const controller = new AbortController()\n try {\n const result = await listDir(dirPath, controller.signal)\n setChildren((prev) => ({ ...prev, [dirPath]: result.entries }))\n setDirErrors((prev) => {\n if (!(dirPath in prev)) return prev\n const next = { ...prev }\n delete next[dirPath]\n return next\n })\n } catch (error) {\n setDirErrors((prev) => ({ ...prev, [dirPath]: error instanceof Error ? error.message : String(error) }))\n } finally {\n setLoadingDirs((prev) => {\n const next = new Set(prev)\n next.delete(dirPath)\n return next\n })\n }\n }, [listDir])\n\n const toggleDir = useCallback((dirPath: string) => {\n setExpandedByCwd((prev) => {\n const base = prev[cwdKey] ?? EMPTY_EXPANDED\n const next = new Set(base)\n if (next.has(dirPath)) next.delete(dirPath)\n else next.add(dirPath)\n return { ...prev, [cwdKey]: next }\n })\n if (!childrenRef.current[dirPath]) void loadDir(dirPath)\n }, [cwdKey, loadDir])\n\n const refreshDir = useCallback((dirPath: string) => {\n setChildren((prev) => {\n const next = { ...prev }\n delete next[dirPath]\n return next\n })\n void loadDir(dirPath)\n }, [loadDir])\n\n // ---- context-menu actions ----\n\n const openContextMenu = useCallback((e: ReactMouseEvent, entry: FsListEntry) => {\n e.preventDefault()\n e.stopPropagation()\n // Explorer behavior: right-clicking an unselected item selects it; a\n // right-click on an already-selected item keeps the multi-selection.\n setSelected((prev) => (prev[entry.path] !== undefined ? prev : { [entry.path]: entry.kind }))\n setMenu({ kind: entry.kind === 'dir' ? 'dir' : 'file', path: entry.path, x: e.clientX, y: e.clientY })\n }, [])\n\n /** Right-click anywhere else in the column (header, clipboard bar, blank tree space): folder menu for the cwd. */\n const onColumnContextMenu = useCallback((e: ReactMouseEvent) => {\n e.preventDefault()\n // Right-clicking the open menu itself keeps it (no browser menu either).\n const el = menuRef.current\n if (el !== null && e.target instanceof Node && el.contains(e.target)) return\n if (cwd === undefined) return\n setMenu({ kind: 'blank', path: cwd, x: e.clientX, y: e.clientY })\n }, [cwd])\n\n const runAction = useCallback((action: () => void) => {\n setMenu(undefined)\n action()\n }, [])\n\n // One mutation pipeline shared by New File / New Folder / Rename / Delete:\n // run the op, refresh the touched directory, and surface failures inline in\n // the tree (under the directory row, or at the column top for the root).\n const applyMutation = useCallback(async (op: () => Promise<unknown>, refreshPath: string) => {\n try {\n await op()\n refreshDir(refreshPath)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (refreshPath === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [refreshPath]: message }))\n }\n }, [refreshDir, root])\n\n /**\n * Record one undoable operation for the current workspace. When the stack\n * overflows, the oldest entry comes back evicted — if it was a delete, its\n * trash item can never be restored from here again, so purge it (best\n * effort; it may already be gone).\n */\n const recordUndo = useCallback((entry: UndoEntry) => {\n const evicted = pushUndo(entry)\n if (evicted !== undefined && evicted.kind === 'delete') {\n void removePath(evicted.trash).catch(() => {\n // already gone — nothing to purge\n })\n }\n }, [removePath])\n\n /**\n * Reversible delete: rename the item into a hidden `.dsh-trash` folder next\n * to it (instant — no bytes copied). Undo renames it back. The trash folder\n * is created on demand and hidden from the tree.\n */\n const trashPath = useCallback(async (path: string): Promise<{ trash: string; parent: string }> => {\n const parent = parentOf(path)\n const trashDir = joinPath(parent, TRASH_NAME)\n // Best-effort: the folder already exists after the first delete.\n try {\n await createDir(trashDir)\n } catch {\n // exists — fine\n }\n // Practically collision-free unique name; rename refuses if it ever collides.\n const unique = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`\n const trash = joinPath(trashDir, `${unique}-${basenameOf(path)}`)\n await renameFile(path, trash)\n return { trash, parent }\n }, [createDir, renameFile])\n\n /**\n * Apply clipboard/drag items into a target directory. `cut` moves (copy +\n * remove source), `copy` duplicates. Every successful item records an undo\n * entry — copy → remove the copy, move → rename it back. Overwriting copies\n * are NOT recorded (the pre-existing content is gone for good). Moving an\n * item into the folder it already lives in is a no-op; copying into the same\n * folder duplicates it with a \" - Copy\" suffix, like the OS explorer.\n */\n const applyItems = useCallback(async (items: ClipboardItem[], targetDir: string, mode: ClipboardMode) => {\n const failures: string[] = []\n const refreshed = new Set<string>()\n for (const item of items) {\n let dest = joinPath(targetDir, item.name)\n const sameDest = dest.toLowerCase() === item.path.toLowerCase()\n if (mode === 'cut' && sameDest) continue\n if (sameDest) dest = joinPath(targetDir, copyName(item.name))\n let overwritten = false\n try {\n const copied = await copyPath(item.path, dest, false)\n if (copied.exists === true) {\n // Collision: ask before overwriting, like the OS file manager.\n if (!window.confirm(t('confirm.overwrite', { name: item.name }))) continue\n overwritten = true\n await copyPath(item.path, dest, true)\n }\n if (mode === 'cut') {\n await removePath(item.path)\n // Keep any open tab pointed at the moved file.\n retargetFile(item.path, dest)\n refreshed.add(parentOf(item.path))\n recordUndo({ kind: 'move', label: t('undo.move', { name: item.name }), from: item.path, to: dest, parent: targetDir })\n } else if (!overwritten) {\n recordUndo({ kind: 'copy', label: t('undo.copy', { name: item.name }), from: item.path, to: dest, parent: targetDir })\n }\n refreshed.add(targetDir)\n } catch (error) {\n failures.push(error instanceof Error ? error.message : String(error))\n }\n }\n for (const p of refreshed) refreshDir(p)\n return failures\n }, [copyPath, recordUndo, refreshDir, removePath, retargetFile, t])\n\n /** Undo the current workspace's most recent operation (Ctrl+Z / header button). */\n const performUndo = useCallback(async () => {\n const entry = popUndo()\n if (entry === undefined) return\n const refreshed = new Set<string>()\n try {\n switch (entry.kind) {\n case 'copy':\n await removePath(entry.to)\n closeFilesUnder(entry.to)\n refreshed.add(entry.parent)\n break\n case 'move':\n // Rename back: the destination currently holds the moved item.\n await renameFile(entry.to, entry.from)\n retargetFile(entry.to, entry.from)\n refreshed.add(entry.parent)\n refreshed.add(parentOf(entry.from))\n break\n case 'rename':\n await renameFile(entry.to, entry.from)\n retargetFile(entry.to, entry.from)\n refreshed.add(entry.parent)\n break\n case 'create':\n await trashPath(entry.path)\n closeFilesUnder(entry.path)\n refreshed.add(entry.parent)\n break\n case 'delete':\n await renameFile(entry.trash, entry.path)\n refreshed.add(entry.parent)\n break\n }\n } catch (error) {\n // Put the entry back so the user can retry after fixing the cause, and\n // surface the reason inline — EXCEPT a delete whose trash item no longer\n // exists (purged by an overflow, or the .dsh-trash folder removed on\n // disk): nothing left to restore, so drop it instead of a stuck retry.\n const message = error instanceof Error ? error.message : String(error)\n const gone = message.includes('does not exist') || message.includes('not found')\n if (!(entry.kind === 'delete' && gone)) recordUndo(entry)\n if (entry.parent === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [entry.parent]: message }))\n return\n }\n for (const p of refreshed) refreshDir(p)\n }, [closeFilesUnder, popUndo, recordUndo, refreshDir, removePath, renameFile, retargetFile, root, trashPath])\n\n /** Delete every selected item (moves each into .dsh-trash; all undoable). */\n const deleteSelection = useCallback(async () => {\n const entries = Object.entries(selected).map(([path, kind]) => ({ path, kind }))\n if (entries.length === 0) return\n // Children first so deleting a folder alongside its contents doesn't hit\n // already-gone paths; anything under an already-trashed folder is skipped.\n entries.sort((a, b) => sepCount(b.path) - sepCount(a.path))\n const confirmMessage = entries.length === 1\n ? (entries[0].kind === 'dir'\n ? t('confirm.deleteDir', { name: basenameOf(entries[0].path) })\n : t('confirm.deleteFile', { name: basenameOf(entries[0].path) }))\n : t('confirm.deleteSelected', {\n count: entries.length,\n names: entries.slice(0, 3).map((e) => basenameOf(e.path)).join('、'),\n })\n if (!window.confirm(confirmMessage)) return\n const failures: string[] = []\n const refreshed = new Set<string>()\n const trashedPrefixes: string[] = []\n for (const { path, kind } of entries) {\n const sep = path.includes('\\\\') ? '\\\\' : '/'\n const prefix = path.endsWith('\\\\') || path.endsWith('/') ? path : path + sep\n if (trashedPrefixes.some((d) => path.toLowerCase().startsWith(d.toLowerCase()))) continue\n try {\n const { trash, parent } = await trashPath(path)\n if (kind === 'dir') trashedPrefixes.push(prefix)\n closeFilesUnder(path)\n recordUndo({ kind: 'delete', label: t('undo.delete', { name: basenameOf(path) }), path, trash, parent })\n refreshed.add(parent)\n } catch (error) {\n failures.push(error instanceof Error ? error.message : String(error))\n }\n }\n for (const p of refreshed) refreshDir(p)\n setSelected({})\n if (failures.length > 0) setRootError(failures.join('; '))\n }, [closeFilesUnder, recordUndo, refreshDir, root, selected, t, trashPath])\n\n const onNewFile = useCallback((dirPath: string) => {\n const name = window.prompt(`${t('prompt.newFileName')}:`, '')\n if (name === null) return\n const trimmed = name.trim()\n if (trimmed === '') return\n const path = joinPath(dirPath, trimmed)\n void applyMutation(async () => {\n await createFile(path)\n recordUndo({ kind: 'create', label: t('undo.create', { name: trimmed }), path, parent: dirPath })\n }, dirPath)\n }, [applyMutation, createFile, recordUndo, t])\n\n const onNewFolder = useCallback((dirPath: string) => {\n const name = window.prompt(`${t('prompt.newFolderName')}:`, '')\n if (name === null) return\n const trimmed = name.trim()\n if (trimmed === '') return\n const path = joinPath(dirPath, trimmed)\n void applyMutation(async () => {\n await createDir(path)\n recordUndo({ kind: 'create', label: t('undo.create', { name: trimmed }), path, parent: dirPath })\n }, dirPath)\n }, [applyMutation, createDir, recordUndo, t])\n\n const onRename = useCallback((path: string) => {\n const current = basenameOf(path)\n const name = window.prompt(`${t('prompt.renameTo')}:`, current)\n if (name === null) return\n const trimmed = name.trim()\n if (trimmed === '' || trimmed === current) return\n const parent = parentOf(path)\n const to = joinPath(parent, trimmed)\n void applyMutation(async () => {\n await renameFile(path, to)\n // Keep any open tab pointing at the moved file.\n retargetFile(path, to)\n recordUndo({ kind: 'rename', label: t('undo.rename', { name: current }), from: path, to, parent })\n }, parent)\n }, [applyMutation, recordUndo, renameFile, retargetFile, t])\n\n const onDelete = useCallback((path: string, kind: 'file' | 'dir') => {\n const name = basenameOf(path)\n const message = kind === 'dir' ? t('confirm.deleteDir', { name }) : t('confirm.deleteFile', { name })\n if (!window.confirm(message)) return\n void (async () => {\n try {\n const { trash, parent } = await trashPath(path)\n // Drop tabs for the deleted file (or everything under a deleted folder).\n closeFilesUnder(path)\n recordUndo({ kind: 'delete', label: t('undo.delete', { name }), path, trash, parent })\n refreshDir(parent)\n } catch (error) {\n setRootError(error instanceof Error ? error.message : String(error))\n }\n })()\n }, [closeFilesUnder, recordUndo, refreshDir, t, trashPath])\n\n const onCopyPath = useCallback((path: string) => {\n void navigator.clipboard.writeText(path).catch(() => {\n // clipboard unavailable (permissions) — nothing else to do\n })\n }, [])\n\n /** Reveal in the OS file manager; failures surface as an alert, never silently. */\n const onReveal = useCallback((path: string, kind: 'file' | 'dir') => {\n void revealInExplorer(path, kind).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n window.alert(`${t('error.reveal')}:${message}`)\n })\n }, [revealInExplorer, t])\n\n const selectedItems = useCallback((): ClipboardItem[] => (\n Object.entries(selected).map(([path, kind]) => ({ path, name: basenameOf(path), kind }))\n ), [selected])\n\n const onCopySelection = useCallback((mode: ClipboardMode) => {\n const items = selectedItems()\n if (items.length === 0) return\n copyToClipboard(items, mode)\n }, [selectedItems])\n\n /** Paste the clipboard into the current folder (or the one selected dir). */\n const onPaste = useCallback(async () => {\n const { items, mode } = clipboard\n if (items.length === 0 || cwd === undefined) return\n const selEntries = Object.entries(selected)\n const target = selEntries.length === 1 && selEntries[0][1] === 'dir' ? selEntries[0][0] : cwd\n const failures = await applyItems(items, target, mode)\n // Explorer semantics: a cut clears the clipboard once the move lands; a\n // plain copy stays armed so the user can paste into more folders.\n if (mode === 'cut') clearClipboard()\n setSelected({})\n if (failures.length > 0) {\n const message = failures.join('; ')\n if (target === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [target]: message }))\n }\n }, [applyItems, clipboard, clearClipboard, cwd, root, selected])\n\n // ---- drag & drop (drag selected items onto a folder to move them) ----\n\n const onRowDragStart = useCallback((e: ReactDragEvent, entry: FsListEntry) => {\n // Dragging one member of a multi-selection moves the whole selection,\n // exactly like the OS explorer.\n const paths = selected[entry.path] !== undefined ? Object.keys(selected) : [entry.path]\n dragPathsRef.current = paths\n try {\n // text/plain: natural browser fallback (a native textarea drop inserts\n // the paths); the custom type carries the machine-readable list for the\n // workbench's own chat-drop integration (composer.ts).\n e.dataTransfer.setData('text/plain', paths.join('\\n'))\n e.dataTransfer.setData(DRAG_TYPE, JSON.stringify(paths))\n } catch {\n // dataTransfer may be unavailable — the ref still carries the paths\n }\n // copyMove: dropping on a folder row moves (tree), dropping on the chat\n // copies the path text in.\n e.dataTransfer.effectAllowed = 'copyMove'\n }, [selected])\n\n const onRowDragEnd = useCallback(() => {\n dragPathsRef.current = null\n setDropTarget(null)\n }, [])\n\n const onRowDragOver = useCallback((e: ReactDragEvent, entry: FsListEntry) => {\n if (dragPathsRef.current === null) return\n e.stopPropagation()\n if (entry.kind !== 'dir') return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n setDropTarget(entry.path)\n }, [])\n\n const onRowDragLeave = useCallback(() => setDropTarget(null), [])\n\n /** Move the dragged paths into `targetDir` (a folder row or the tree area). */\n const onDropMove = useCallback((e: ReactDragEvent, targetDir: string) => {\n e.preventDefault()\n e.stopPropagation()\n setDropTarget(null)\n const paths = dragPathsRef.current\n dragPathsRef.current = null\n if (paths === null || paths.length === 0) return\n // Dropping a folder onto itself or into its own subtree is a no-op.\n const items: ClipboardItem[] = paths.filter((path) => {\n if (path.toLowerCase() === targetDir.toLowerCase()) return false\n const sep = path.includes('\\\\') ? '\\\\' : '/'\n const prefix = path.endsWith('\\\\') || path.endsWith('/') ? path : path + sep\n return !targetDir.toLowerCase().startsWith(prefix.toLowerCase())\n }).map((path) => ({\n path,\n name: basenameOf(path),\n kind: selected[path] ?? 'file',\n }))\n if (items.length === 0) return\n setSelected({})\n void applyItems(items, targetDir, 'cut').then((failures) => {\n if (failures.length > 0) {\n const message = failures.join('; ')\n if (targetDir === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [targetDir]: message }))\n }\n })\n }, [applyItems, root, selected])\n\n const onRowDrop = useCallback((e: ReactDragEvent, entry: FsListEntry) => {\n e.stopPropagation()\n if (dragPathsRef.current === null || entry.kind !== 'dir') return\n e.preventDefault()\n onDropMove(e, entry.path)\n }, [onDropMove])\n\n const onRowClick = useCallback((entry: FsListEntry, e: ReactMouseEvent) => {\n e.stopPropagation()\n // Rows push keyboard focus onto the tree so Ctrl+C / Ctrl+V / Esc land\n // here right after a click, instead of going to whatever had focus.\n treeAreaRef.current?.focus({ preventScroll: true })\n if (e.ctrlKey || e.metaKey) {\n // Ctrl/Cmd+click toggles membership without opening / expanding.\n setSelected((prev) => {\n const next = { ...prev }\n if (next[entry.path] !== undefined) delete next[entry.path]\n else next[entry.path] = entry.kind\n return next\n })\n return\n }\n setSelected({ [entry.path]: entry.kind })\n if (entry.kind === 'dir') {\n toggleDir(entry.path)\n return\n }\n openFile(entry.path)\n }, [toggleDir])\n\n const onRowDoubleClick = useCallback((entry: FsListEntry) => {\n if (entry.kind !== 'file') return\n void openPath(entry.path)\n }, [openPath])\n\n /** Explorer-style \"Select All\": every visible (non-trash) entry at any depth. */\n const selectAllEntries = useCallback(() => {\n const all: Record<string, FsListEntry['kind']> = {}\n const collect = (entries: FsListEntry[]) => {\n for (const entry of entries) {\n if (entry.name === TRASH_NAME) continue\n all[entry.path] = entry.kind\n if (entry.kind === 'dir' && expanded.has(entry.path) && children[entry.path] !== undefined) {\n collect(children[entry.path] as FsListEntry[])\n }\n }\n }\n const rootEntries = root !== undefined ? children[root] : undefined\n if (rootEntries !== undefined) collect(rootEntries)\n setSelected(all)\n }, [children, expanded, root])\n\n /** Insert `@<relative-workspace-path>` into the composer (Claude Code-style mention). */\n const onMention = useCallback((path: string) => {\n const mention = relPathOf(path, cwd)\n if (mention.length === 0) return\n insertIntoComposer(`@${mention} `)\n }, [cwd])\n\n // Explorer-style keyboard: Ctrl/Cmd+C/X copy-cut, Ctrl/Cmd+V paste,\n // Ctrl/Cmd+A select-all, Escape clears the selection (and cancels a cut).\n const onTreeKeyDown = useCallback((e: ReactKeyboardEvent) => {\n const mod = e.ctrlKey || e.metaKey\n const key = e.key.toLowerCase()\n // Never hijack Ctrl/Cmd+C/X while the user is copying an actual text\n // selection (e.g. an inline error message rendered inside the tree): the\n // browser must get the key so the selected text is copied instead of the\n // selected files. Also let editable elements (if any ever live in the\n // tree) keep their native copy/cut behavior.\n if (mod && (key === 'c' || key === 'x')) {\n const target = e.target as HTMLElement | null\n if (target !== null && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable)) return\n const selection = window.getSelection()\n if (selection !== null && !selection.isCollapsed && selection.toString().length > 0) return\n }\n if (mod && key === 'c') {\n const items = selectedItems()\n if (items.length === 0) return\n e.preventDefault()\n copyToClipboard(items, 'copy')\n return\n }\n if (mod && key === 'x') {\n const items = selectedItems()\n if (items.length === 0) return\n e.preventDefault()\n copyToClipboard(items, 'cut')\n return\n }\n if (mod && key === 'v') {\n if (clipboard.items.length === 0) return\n e.preventDefault()\n void onPaste()\n return\n }\n if (mod && key === 'a') {\n e.preventDefault()\n selectAllEntries()\n return\n }\n if (mod && key === 'z' && !e.shiftKey) {\n if (undoEntries.length === 0) return\n e.preventDefault()\n void performUndo()\n return\n }\n if (e.key === 'Delete') {\n if (Object.keys(selected).length === 0) return\n e.preventDefault()\n void deleteSelection()\n return\n }\n if (e.key === 'Escape') {\n setSelected({})\n cancelCut()\n }\n }, [cancelCut, clipboard.items.length, deleteSelection, onPaste, performUndo, selectAllEntries, selectedItems, undoEntries.length])\n\n // ---- placeholder: no session / no cwd ----\n if (cwd === undefined) {\n return (\n <div className={styles.column} style={{ width: width > 0 ? width : undefined }} data-pane=\"explorer\" data-fe-theme={theme}>\n <div className={styles.placeholder}>\n {currentId === undefined ? t('placeholder.noSession') : t('placeholder.noCwd')}\n </div>\n </div>\n )\n }\n\n // Cut items ghost in the tree until the paste moves them away.\n const cutPaths = new Set(clipboard.mode === 'cut' ? clipboard.items.map((item) => item.path) : [])\n\n /** Listings as the user sees them (the internal trash folder is hidden). */\n const visibleEntries = (entries: FsListEntry[]) => entries.filter((entry) => entry.name !== TRASH_NAME)\n\n const renderEntries = (entries: FsListEntry[], depth: number) => visibleEntries(entries).map((entry) => {\n const isDir = entry.kind === 'dir'\n const isExpanded = isDir && expanded.has(entry.path)\n const isLoading = isDir && loadingDirs.has(entry.path)\n const childEntries = isDir && isExpanded ? children[entry.path] : undefined\n const error = isDir ? dirErrors[entry.path] : undefined\n\n return (\n <div key={entry.path}>\n <TreeRow\n entry={entry}\n depth={depth}\n isActive={entry.kind === 'file' && activePath === entry.path}\n isSelected={selected[entry.path] !== undefined}\n isCut={cutPaths.has(entry.path)}\n isExpanded={isExpanded}\n isDropTarget={dropTarget === entry.path}\n onToggleDir={toggleDir}\n onRefreshDir={refreshDir}\n onSelect={onRowClick}\n onDoubleClick={onRowDoubleClick}\n onOpenExternal={openPath}\n onContextMenu={openContextMenu}\n onDragStart={onRowDragStart}\n onDragEnd={onRowDragEnd}\n onDragOverRow={onRowDragOver}\n onDragLeaveRow={onRowDragLeave}\n onDropRow={onRowDrop}\n t={t}\n />\n {isDir && isExpanded && (\n <div>\n {isLoading && <div className={styles.rowHint} style={{ paddingLeft: 8 + (depth + 1) * 14 }}>{t('preview.loading')}</div>}\n {error !== undefined && !isLoading && <div className={styles.rowError} style={{ paddingLeft: 8 + (depth + 1) * 14 }}>{error}</div>}\n {childEntries !== undefined && visibleEntries(childEntries).length === 0 && !isLoading && (\n <div className={styles.rowHint} style={{ paddingLeft: 8 + (depth + 1) * 14 }}>{t('preview.emptyDir')}</div>\n )}\n {childEntries !== undefined && renderEntries(childEntries, depth + 1)}\n </div>\n )}\n </div>\n )\n })\n\n interface MenuItem {\n label: string\n danger?: boolean\n disabled?: boolean\n onClick: () => void\n }\n\n const menuItems = (m: MenuState): Array<MenuItem | 'divider'> => {\n // Right-clicking one member of a multi-selection operates on the whole\n // selection (Explorer behavior): show a batch delete instead of the\n // single-item one.\n const selectionCount = Object.keys(selected).length\n const deleteItem: MenuItem = selectionCount > 1\n ? { label: t('menu.deleteSelected', { count: selectionCount }), danger: true, onClick: () => void deleteSelection() }\n // 'blank' never renders deleteItem (the blank branch returns earlier);\n // the fallback only satisfies the union type.\n : { label: t('menu.delete'), danger: true, onClick: () => onDelete(m.path, m.kind === 'blank' ? 'dir' : m.kind) }\n if (m.kind === 'file') {\n return [\n { label: t('menu.atFile'), onClick: () => onMention(m.path) },\n { label: t('menu.open'), onClick: () => openFile(m.path) },\n 'divider',\n { label: t('menu.copy'), onClick: () => onCopySelection('copy') },\n { label: t('menu.cut'), onClick: () => onCopySelection('cut') },\n 'divider',\n { label: t('menu.copyPath'), onClick: () => onCopyPath(m.path) },\n { label: t('menu.revealInExplorer'), onClick: () => onReveal(m.path, 'file') },\n { label: t('menu.openSystem'), onClick: () => void openPath(m.path) },\n 'divider',\n { label: t('menu.rename'), onClick: () => onRename(m.path) },\n deleteItem,\n ]\n }\n if (m.kind === 'dir') {\n return [\n { label: t('menu.newFile'), onClick: () => onNewFile(m.path) },\n { label: t('menu.newFolder'), onClick: () => onNewFolder(m.path) },\n 'divider',\n { label: t('menu.copy'), onClick: () => onCopySelection('copy') },\n { label: t('menu.cut'), onClick: () => onCopySelection('cut') },\n { label: t('menu.paste'), disabled: clipboard.items.length === 0, onClick: () => void onPaste() },\n 'divider',\n { label: t('menu.copyPath'), onClick: () => onCopyPath(m.path) },\n { label: t('menu.revealInExplorer'), onClick: () => onReveal(m.path, 'dir') },\n { label: t('menu.openSystem'), onClick: () => void openPath(m.path) },\n { label: t('menu.refresh'), onClick: () => refreshDir(m.path) },\n 'divider',\n { label: t('menu.rename'), onClick: () => onRename(m.path) },\n deleteItem,\n ]\n }\n // Blank space / header / clipboard bar: operations against the current\n // workspace folder (right-clicking blank space acts on the cwd, VS Code\n // file-explorer style).\n if (m.kind === 'blank') {\n const dirPath = m.path\n return [\n { label: t('menu.newFile'), onClick: () => onNewFile(dirPath) },\n { label: t('menu.newFolder'), onClick: () => onNewFolder(dirPath) },\n { label: t('menu.paste'), disabled: clipboard.items.length === 0, onClick: () => void onPaste() },\n 'divider',\n { label: t('menu.selectAll'), onClick: selectAllEntries },\n { label: t('menu.undo'), disabled: undoEntries.length === 0, onClick: () => void performUndo() },\n 'divider',\n { label: t('menu.copyPath'), onClick: () => onCopyPath(dirPath) },\n { label: t('menu.revealInExplorer'), onClick: () => onReveal(dirPath, 'dir') },\n { label: t('menu.openSystem'), onClick: () => void openPath(dirPath) },\n { label: t('menu.refresh'), onClick: () => refreshDir(dirPath) },\n ]\n }\n return [\n { label: t('menu.paste'), disabled: clipboard.items.length === 0, onClick: () => void onPaste() },\n ]\n }\n\n return (\n <div\n className={styles.column}\n style={{ width: width > 0 ? width : undefined }}\n data-pane=\"explorer\"\n data-fe-theme={theme}\n onContextMenu={onColumnContextMenu}\n >\n <div className={styles.header}>\n <span className={styles.headerTitle} title={root ?? cwd}>{basenameOf(root ?? cwd)}</span>\n <span className={styles.headerActions}>\n <button\n type=\"button\"\n className={styles.action}\n title={undoEntries.length > 0 ? `${t('action.undo')}:${undoEntries[undoEntries.length - 1].label}` : t('action.undo')}\n disabled={undoEntries.length === 0}\n onClick={() => void performUndo()}\n >\n ↩\n </button>\n <button type=\"button\" className={styles.action} title={t('action.theme')} onClick={toggleTheme}>\n {theme === 'dark' ? '☀' : '🌙'}\n </button>\n <button type=\"button\" className={styles.action} title={t('action.open')} onClick={() => void openPath(cwd)}>↗</button>\n <button type=\"button\" className={styles.action} title={t('tab.expand')} onClick={expandPreview}>{'>'}</button>\n </span>\n </div>\n {clipboard.items.length > 0 && (\n <div className={styles.clipboardBar} role=\"status\">\n <span className={styles.clipboardText}>\n {clipboard.mode === 'cut'\n ? t('clipboard.cut', { count: clipboard.items.length })\n : t('clipboard.copied', { count: clipboard.items.length })}\n <span className={styles.clipboardHint}>{t('clipboard.pasteHint')}</span>\n </span>\n <button\n type=\"button\"\n className={styles.action}\n title={t('clipboard.clear')}\n onClick={() => {\n clearClipboard()\n if (clipboard.mode === 'cut') setSelected({})\n }}\n >\n ✕\n </button>\n </div>\n )}\n <div\n ref={treeAreaRef}\n tabIndex={0}\n className={styles.treeArea}\n onKeyDown={onTreeKeyDown}\n onClick={(e) => {\n // Clicking blank space (or a hint/error line — anything that is not\n // a tree row) deselects, Explorer behavior.\n const target = e.target as HTMLElement\n if (target.closest('[role=\"treeitem\"]') === null) setSelected({})\n }}\n onDragOver={(e) => {\n // Blank tree area also accepts a drop: move into the current folder.\n if (dragPathsRef.current === null) return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n if (dragPathsRef.current !== null) onDropMove(e, cwd)\n }}\n >\n {rootLoading && <div className={styles.rowHint}>{t('preview.loading')}</div>}\n {rootError !== undefined && <div className={styles.rowError}>{rootError}</div>}\n {!rootLoading && rootError === undefined && root !== undefined && children[root] !== undefined && visibleEntries(children[root]).length === 0 && (\n <div className={styles.rowHint}>{t('preview.emptyDir')}</div>\n )}\n {root !== undefined && children[root] !== undefined && renderEntries(children[root], 0)}\n </div>\n {menu !== undefined && (\n <div\n ref={menuRef}\n className={styles.contextMenu}\n role=\"menu\"\n onContextMenu={(e) => {\n // Right-clicking the open menu keeps it (and never shows the\n // browser menu).\n e.preventDefault()\n e.stopPropagation()\n }}\n style={menuPos !== undefined ? { left: menuPos.x, top: menuPos.y } : { left: menu.x, top: menu.y, visibility: 'hidden' }}\n >\n {menuItems(menu).map((item, index) =>\n item === 'divider' ? (\n <div key={index} className={styles.contextMenuDivider} />\n ) : (\n <div\n key={index}\n role=\"menuitem\"\n className={`${styles.contextMenuItem}${item.danger ? ` ${styles.contextMenuItemDanger}` : ''}${item.disabled ? ` ${styles.contextMenuItemDisabled}` : ''}`}\n onClick={() => runAction(item.onClick)}\n >\n {item.label}\n </div>\n ),\n )}\n </div>\n )}\n </div>\n )\n}\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record<string,any> */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += `<span class=\"${className}\">`;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid an\n// incorrect parse, it also matches the constructs where the meaning of\n// parentheses, escapes, or capture counting changes.\nconst BACKREF_RE = new RegExp(either(\n /\\[(?:[^\\\\\\]]|\\\\.)*\\]/, // a character class, inside which ( and \\ lose their meaning\n /\\(\\?<(?![=!])[^>]+>/, // a named capture group `(?<name>` (not a lookbehind `(?<=` / `(?<!`)\n /\\(\\?'[^']+'/, // a named capture group `(?'name'`\n /\\(\\??/, // an opening parenthesis, capturing or non-capturing / lookahead\n /\\\\([1-9][0-9]*)/, // a backreference like `\\1`\n /\\\\./ // any other escape sequence\n));\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(' || /^\\(\\?[<']/.test(match[0])) {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n 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/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array<string>} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record<number,boolean> */\n const emit = {};\n /** @type Record<number,string> */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.12.0\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record<string, Language>} */\n const languages = Object.create(null);\n /** @type {Record<string, string>} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line/text) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when `ignoreIllegals` is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n if (match.index === codeToHighlight.length) ; else {\n // matched literal `\\n` (with `$`) so we must manually add the newline\n // itself to the modeBuffer so it is not lost when we advance the cursor\n modeBuffer += \"\\n\";\n }\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record<string,CompiledMode> */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array<string>} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial<HLJSOptions>} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n highlightAll();\n }\n\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n // make sure the event listener is only added once\n if (!wantsHighlight) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n const regex = hljs.regex;\n const VAR = {};\n const BRACED_VAR = {\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n \"self\",\n {\n begin: /:-/,\n contains: [ VAR ]\n } // default values\n ]\n };\n Object.assign(VAR, {\n className: 'variable',\n variants: [\n { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![\\\\w\\\\d])(?![$])`) },\n BRACED_VAR\n ]\n });\n\n const SUBST = {\n className: 'subst',\n begin: /\\$\\(/,\n end: /\\)/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const COMMENT = hljs.inherit(\n hljs.COMMENT(),\n {\n match: [\n /(^|\\s)/,\n /#.*$/\n ],\n scope: {\n 2: 'comment'\n }\n }\n );\n const HERE_DOC = {\n begin: /<<-?\\s*(?=\\w+)/,\n starts: { contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n className: 'string'\n })\n ] }\n };\n const QUOTE_STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n SUBST\n ]\n };\n SUBST.contains.push(QUOTE_STRING);\n const ESCAPED_QUOTE = {\n match: /\\\\\"/\n };\n const APOS_STRING = {\n className: 'string',\n begin: /'/,\n end: /'/\n };\n const ESCAPED_APOS = {\n match: /\\\\'/\n };\n const ARITHMETIC = {\n begin: /\\$?\\(\\(/,\n end: /\\)\\)/,\n contains: [\n {\n begin: /\\d+#[0-9a-f]+/,\n className: \"number\"\n },\n hljs.NUMBER_MODE,\n VAR\n ]\n };\n const SH_LIKE_SHELLS = [\n \"fish\",\n \"bash\",\n \"zsh\",\n \"sh\",\n \"csh\",\n \"ksh\",\n \"tcsh\",\n \"dash\",\n \"scsh\",\n ];\n const KNOWN_SHEBANG = hljs.SHEBANG({\n binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n relevance: 10\n });\n const FUNCTION = {\n className: 'function',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n relevance: 0\n };\n\n const KEYWORDS = [\n \"if\",\n \"then\",\n \"else\",\n \"elif\",\n \"fi\",\n \"time\",\n \"for\",\n \"while\",\n \"until\",\n \"in\",\n \"do\",\n \"done\",\n \"case\",\n \"esac\",\n \"coproc\",\n \"function\",\n \"select\"\n ];\n\n const LITERALS = [\n \"true\",\n \"false\"\n ];\n\n // to consume paths to prevent keyword matches inside them\n const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n const SHELL_BUILT_INS = [\n \"break\",\n \"cd\",\n \"continue\",\n \"eval\",\n \"exec\",\n \"exit\",\n \"export\",\n \"getopts\",\n \"hash\",\n \"pwd\",\n \"readonly\",\n \"return\",\n \"shift\",\n \"test\",\n \"times\",\n \"trap\",\n \"umask\",\n \"unset\"\n ];\n\n const BASH_BUILT_INS = [\n \"alias\",\n \"bind\",\n \"builtin\",\n \"caller\",\n \"command\",\n \"declare\",\n \"echo\",\n \"enable\",\n \"help\",\n \"let\",\n \"local\",\n \"logout\",\n \"mapfile\",\n \"printf\",\n \"read\",\n \"readarray\",\n \"source\",\n \"sudo\",\n \"type\",\n \"typeset\",\n \"ulimit\",\n \"unalias\"\n ];\n\n const ZSH_BUILT_INS = [\n \"autoload\",\n \"bg\",\n \"bindkey\",\n \"bye\",\n \"cap\",\n \"chdir\",\n \"clone\",\n \"comparguments\",\n \"compcall\",\n \"compctl\",\n \"compdescribe\",\n \"compfiles\",\n \"compgroups\",\n \"compquote\",\n \"comptags\",\n \"comptry\",\n \"compvalues\",\n \"dirs\",\n \"disable\",\n \"disown\",\n \"echotc\",\n \"echoti\",\n \"emulate\",\n \"fc\",\n \"fg\",\n \"float\",\n \"functions\",\n \"getcap\",\n \"getln\",\n \"history\",\n \"integer\",\n \"jobs\",\n \"kill\",\n \"limit\",\n \"log\",\n \"noglob\",\n \"popd\",\n \"print\",\n \"pushd\",\n \"pushln\",\n \"rehash\",\n \"sched\",\n \"setcap\",\n \"setopt\",\n \"stat\",\n \"suspend\",\n \"ttyctl\",\n \"unfunction\",\n \"unhash\",\n \"unlimit\",\n \"unsetopt\",\n \"vared\",\n \"wait\",\n \"whence\",\n \"where\",\n \"which\",\n \"zcompile\",\n \"zformat\",\n \"zftp\",\n \"zle\",\n \"zmodload\",\n \"zparseopts\",\n \"zprof\",\n \"zpty\",\n \"zregexparse\",\n \"zsocket\",\n \"zstyle\",\n \"ztcp\"\n ];\n\n const GNU_CORE_UTILS = [\n \"chcon\",\n \"chgrp\",\n \"chown\",\n \"chmod\",\n \"cp\",\n \"dd\",\n \"df\",\n \"dir\",\n \"dircolors\",\n \"ln\",\n \"ls\",\n \"mkdir\",\n \"mkfifo\",\n \"mknod\",\n \"mktemp\",\n \"mv\",\n \"realpath\",\n \"rm\",\n \"rmdir\",\n \"shred\",\n \"sync\",\n \"touch\",\n \"truncate\",\n \"vdir\",\n \"b2sum\",\n \"base32\",\n \"base64\",\n \"cat\",\n \"cksum\",\n \"comm\",\n \"csplit\",\n \"cut\",\n \"expand\",\n \"fmt\",\n \"fold\",\n \"head\",\n \"join\",\n \"md5sum\",\n \"nl\",\n \"numfmt\",\n \"od\",\n \"paste\",\n \"ptx\",\n \"pr\",\n \"sha1sum\",\n \"sha224sum\",\n \"sha256sum\",\n \"sha384sum\",\n \"sha512sum\",\n \"shuf\",\n \"sort\",\n \"split\",\n \"sum\",\n \"tac\",\n \"tail\",\n \"tr\",\n \"tsort\",\n \"unexpand\",\n \"uniq\",\n \"wc\",\n \"arch\",\n \"basename\",\n \"chroot\",\n \"date\",\n \"dirname\",\n \"du\",\n \"echo\",\n \"env\",\n \"expr\",\n \"factor\",\n // \"false\", // keyword literal already\n \"groups\",\n \"hostid\",\n \"id\",\n \"link\",\n \"logname\",\n \"nice\",\n \"nohup\",\n \"nproc\",\n \"pathchk\",\n \"pinky\",\n \"printenv\",\n \"printf\",\n \"pwd\",\n \"readlink\",\n \"runcon\",\n \"seq\",\n \"sleep\",\n \"stat\",\n \"stdbuf\",\n \"stty\",\n \"tee\",\n \"test\",\n \"timeout\",\n // \"true\", // keyword literal already\n \"tty\",\n \"uname\",\n \"unlink\",\n \"uptime\",\n \"users\",\n \"who\",\n \"whoami\",\n \"yes\"\n ];\n\n return {\n name: 'Bash',\n aliases: [\n 'sh',\n 'zsh'\n ],\n keywords: {\n $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: [\n ...SHELL_BUILT_INS,\n ...BASH_BUILT_INS,\n // Shell modifiers\n \"set\",\n \"shopt\",\n ...ZSH_BUILT_INS,\n ...GNU_CORE_UTILS\n ]\n },\n contains: [\n KNOWN_SHEBANG, // to catch known shells and boost relevancy\n hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n FUNCTION,\n ARITHMETIC,\n COMMENT,\n HERE_DOC,\n PATH_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n ESCAPED_APOS,\n VAR\n ]\n };\n}\n\nexport { bash as default };\n","/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n const regex = hljs.regex;\n // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n // not include such support nor can we be sure all the grammars depending\n // on it would desire this behavior\n const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n const FUNCTION_TYPE_RE = '(?!struct)('\n + DECLTYPE_AUTO_RE + '|'\n + regex.optional(NAMESPACE_RE)\n + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n + ')';\n\n const CPP_PRIMITIVE_TYPES = {\n className: 'type',\n begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n };\n\n // https://en.cppreference.com/w/cpp/language/escape\n // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n const STRINGS = {\n className: 'string',\n variants: [\n {\n begin: '(u8?|U|L)?\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n end: '\\'',\n illegal: '.'\n },\n // https://en.cppreference.com/w/cpp/language/string_literal\n // a d-char-sequence never contains parentheses, backslashes or whitespace;\n // quotes are excluded as well so the closing delimiter cannot swallow the\n // quote that actually terminates the literal\n hljs.END_SAME_AS_BEGIN({\n begin: /(?:u8?|U|L)?R\"([^()\\\\\\s\"]{0,16})\\(/,\n end: /\\)([^()\\\\\\s\"]{0,16})\"/\n })\n ]\n };\n\n const NUMBERS = {\n className: 'number',\n variants: [\n // Floating-point literal.\n { begin:\n \"[+-]?(?:\" // Leading sign.\n // Decimal.\n + \"(?:\"\n + \"\\\\b[0-9](?:'?[0-9])*\\\\.(?:[0-9](?:'?[0-9])*)?\"\n + \"|\\\\.[0-9](?:'?[0-9])*\"\n + \")(?:[Ee][+-]?[0-9](?:'?[0-9])*)?\"\n + \"|\\\\b[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*\"\n // Hexadecimal.\n + \"|\\\\b0[Xx](?:\"\n +\"[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?\"\n + \"|\\\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*\"\n + \")[Pp][+-]?[0-9](?:'?[0-9])*\"\n + \")(?:\" // Literal suffixes.\n + \"[Ff](?:16|32|64|128)?\"\n + \"|(BF|bf)16\"\n + \"|[Ll]\"\n + \"|\" // Literal suffix is optional.\n + \")\"\n },\n // Integer literal.\n { begin:\n \"[+-]?\\\\b(?:\" // Leading sign.\n + \"0[Bb][01](?:'?[01])*\" // Binary.\n + \"|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*\" // Hexadecimal.\n + \"|0(?:'?[0-7])*\" // Octal or just a lone zero.\n + \"|[1-9](?:'?[0-9])*\" // Decimal.\n + \")(?:\" // Literal suffixes.\n + \"[Uu](?:LL?|ll?)\"\n + \"|[Uu][Zz]?\"\n + \"|(?:LL?|ll?)[Uu]?\"\n + \"|[Zz][Uu]\"\n + \"|\" // Literal suffix is optional.\n + \")\"\n // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the\n // literal highlight actually makes it stand out more.\n }\n ],\n relevance: 0\n };\n\n // `#include` is the only preprocessor directive that takes an angle-bracket\n // quoted header (`#include <header>`). Scoping that rule to `#include` keeps\n // the greedy `<...>` match from eating a `>` that belongs to the body of\n // another directive (e.g. `#define what do { cout << \">\"; } while (0)`),\n // which would otherwise leave an unbalanced `\"` and break highlighting for\n // the rest of the file. See issue #3505.\n const PREPROCESSOR_INCLUDE = {\n scope: 'meta',\n begin: /#\\s*include\\b/,\n end: /$/,\n keywords: { keyword: 'include' },\n contains: [\n {\n // the `\\` at the end of a line signaling continuation\n begin: /\\\\\\n/,\n },\n STRINGS,\n {\n scope: 'string',\n begin: /<.*?>/\n },\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const PREPROCESSOR = {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/,\n end: /$/,\n keywords: { keyword:\n 'if else elif endif define undef warning error line '\n + 'pragma _Pragma ifdef ifndef include' },\n contains: [\n {\n begin: /\\\\\\n/,\n relevance: 0\n },\n hljs.inherit(STRINGS, { className: 'string' }),\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const PREPROCESSORS = [\n PREPROCESSOR_INCLUDE,\n PREPROCESSOR\n ];\n\n const TITLE_MODE = {\n className: 'title',\n begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n relevance: 0\n };\n\n const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n // Bounded on purpose: an unbounded quantifier here consumes an arbitrarily\n // long run of words, and when no function title follows it the engine retries\n // the title at every token boundary of that run - quadratic in the size of\n // the document. See #4362.\n const MAX_FUNCTION_TYPE_TOKENS = 12;\n\n // https://en.cppreference.com/w/cpp/keyword\n const RESERVED_KEYWORDS = [\n 'alignas',\n 'alignof',\n 'and',\n 'and_eq',\n 'asm',\n 'atomic_cancel',\n 'atomic_commit',\n 'atomic_noexcept',\n 'auto',\n 'bitand',\n 'bitor',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'co_await',\n 'co_return',\n 'co_yield',\n 'compl',\n 'concept',\n 'const_cast|10',\n 'consteval',\n 'constexpr',\n 'constinit',\n 'continue',\n 'decltype',\n 'default',\n 'delete',\n 'do',\n 'dynamic_cast|10',\n 'else',\n 'enum',\n 'explicit',\n 'export',\n 'extern',\n 'false',\n 'final',\n 'for',\n 'friend',\n 'goto',\n 'if',\n 'import',\n 'inline',\n 'module',\n 'mutable',\n 'namespace',\n 'new',\n 'noexcept',\n 'not',\n 'not_eq',\n 'nullptr',\n 'operator',\n 'or',\n 'or_eq',\n 'override',\n 'private',\n 'protected',\n 'public',\n 'reflexpr',\n 'register',\n 'reinterpret_cast|10',\n 'requires',\n 'return',\n 'sizeof',\n 'static_assert',\n 'static_cast|10',\n 'struct',\n 'switch',\n 'synchronized',\n 'template',\n 'this',\n 'thread_local',\n 'throw',\n 'transaction_safe',\n 'transaction_safe_dynamic',\n 'true',\n 'try',\n 'typedef',\n 'typeid',\n 'typename',\n 'union',\n 'using',\n 'virtual',\n 'volatile',\n 'while',\n 'xor',\n 'xor_eq'\n ];\n\n // https://en.cppreference.com/w/cpp/keyword\n const RESERVED_TYPES = [\n 'bool',\n 'char',\n 'char16_t',\n 'char32_t',\n 'char8_t',\n 'double',\n 'float',\n 'int',\n 'long',\n 'short',\n 'void',\n 'wchar_t',\n 'unsigned',\n 'signed',\n 'const',\n 'static'\n ];\n\n const TYPE_HINTS = [\n 'any',\n 'auto_ptr',\n 'barrier',\n 'binary_semaphore',\n 'bitset',\n 'complex',\n 'condition_variable',\n 'condition_variable_any',\n 'counting_semaphore',\n 'deque',\n 'false_type',\n 'flat_map',\n 'flat_set',\n 'future',\n 'imaginary',\n 'initializer_list',\n 'istringstream',\n 'jthread',\n 'latch',\n 'lock_guard',\n 'multimap',\n 'multiset',\n 'mutex',\n 'optional',\n 'ostringstream',\n 'packaged_task',\n 'pair',\n 'promise',\n 'priority_queue',\n 'queue',\n 'recursive_mutex',\n 'recursive_timed_mutex',\n 'scoped_lock',\n 'set',\n 'shared_future',\n 'shared_lock',\n 'shared_mutex',\n 'shared_timed_mutex',\n 'shared_ptr',\n 'stack',\n 'string_view',\n 'stringstream',\n 'timed_mutex',\n 'thread',\n 'true_type',\n 'tuple',\n 'unique_lock',\n 'unique_ptr',\n 'unordered_map',\n 'unordered_multimap',\n 'unordered_multiset',\n 'unordered_set',\n 'variant',\n 'vector',\n 'weak_ptr',\n 'wstring',\n 'wstring_view'\n ];\n\n const FUNCTION_HINTS = [\n 'abort',\n 'abs',\n 'acos',\n 'apply',\n 'as_const',\n 'asin',\n 'atan',\n 'atan2',\n 'calloc',\n 'ceil',\n 'cerr',\n 'cin',\n 'clog',\n 'cos',\n 'cosh',\n 'cout',\n 'declval',\n 'endl',\n 'exchange',\n 'exit',\n 'exp',\n 'fabs',\n 'floor',\n 'fmod',\n 'forward',\n 'fprintf',\n 'fputs',\n 'free',\n 'frexp',\n 'fscanf',\n 'future',\n 'invoke',\n 'isalnum',\n 'isalpha',\n 'iscntrl',\n 'isdigit',\n 'isgraph',\n 'islower',\n 'isprint',\n 'ispunct',\n 'isspace',\n 'isupper',\n 'isxdigit',\n 'labs',\n 'launder',\n 'ldexp',\n 'log',\n 'log10',\n 'make_pair',\n 'make_shared',\n 'make_shared_for_overwrite',\n 'make_tuple',\n 'make_unique',\n 'malloc',\n 'memchr',\n 'memcmp',\n 'memcpy',\n 'memset',\n 'modf',\n 'move',\n 'pow',\n 'printf',\n 'putchar',\n 'puts',\n 'realloc',\n 'scanf',\n 'sin',\n 'sinh',\n 'snprintf',\n 'sprintf',\n 'sqrt',\n 'sscanf',\n 'std',\n 'stderr',\n 'stdin',\n 'stdout',\n 'strcat',\n 'strchr',\n 'strcmp',\n 'strcpy',\n 'strcspn',\n 'strlen',\n 'strncat',\n 'strncmp',\n 'strncpy',\n 'strpbrk',\n 'strrchr',\n 'strspn',\n 'strstr',\n 'swap',\n 'tan',\n 'tanh',\n 'terminate',\n 'to_underlying',\n 'tolower',\n 'toupper',\n 'vfprintf',\n 'visit',\n 'vprintf',\n 'vsprintf'\n ];\n\n const LITERALS = [\n 'NULL',\n 'false',\n 'nullopt',\n 'nullptr',\n 'true'\n ];\n\n // https://en.cppreference.com/w/cpp/keyword\n const BUILT_IN = [ '_Pragma' ];\n\n const CPP_KEYWORDS = {\n type: RESERVED_TYPES,\n keyword: RESERVED_KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_IN,\n _type_hints: TYPE_HINTS\n };\n\n const FUNCTION_DISPATCH = {\n className: 'function.dispatch',\n relevance: 0,\n keywords: {\n // Only for relevance, not highlighting.\n _hint: FUNCTION_HINTS },\n begin: regex.concat(\n /\\b/,\n `(?!${RESERVED_KEYWORDS.join('|')})`,\n hljs.IDENT_RE,\n regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n };\n\n const EXPRESSION_CONTAINS = [\n FUNCTION_DISPATCH,\n ...PREPROCESSORS,\n CPP_PRIMITIVE_TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS\n ];\n\n const EXPRESSION_CONTEXT = {\n // This mode covers expression context where we can't expect a function\n // definition and shouldn't highlight anything that looks like one:\n // `return some()`, `else if()`, `(x*sum(1, 2))`\n variants: [\n {\n begin: /=/,\n end: /;/\n },\n {\n begin: /\\(/,\n end: /\\)/\n },\n {\n beginKeywords: 'new throw return else',\n end: /;/\n }\n ],\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n relevance: 0\n }\n ]),\n relevance: 0\n };\n\n const FUNCTION_DECLARATION = {\n className: 'function',\n begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+){1,' + MAX_FUNCTION_TYPE_TOKENS + '}' + FUNCTION_TITLE,\n returnBegin: true,\n end: /[{;=]/,\n excludeEnd: true,\n keywords: CPP_KEYWORDS,\n illegal: /[^\\w\\s\\*&:<>.]/,\n contains: [\n { // to prevent it from being confused as the function title\n begin: DECLTYPE_AUTO_RE,\n keywords: CPP_KEYWORDS,\n relevance: 0\n },\n {\n begin: FUNCTION_TITLE,\n returnBegin: true,\n contains: [ TITLE_MODE ],\n relevance: 0\n },\n // needed because we do not have look-behind on the below rule\n // to prevent it from grabbing the final : in a :: pair\n {\n begin: /::/,\n relevance: 0\n },\n // initializers\n {\n begin: /:/,\n endsWithParent: true,\n contains: [\n STRINGS,\n NUMBERS\n ]\n },\n // allow for multiple declarations, e.g.:\n // extern void f(int), g(char);\n {\n relevance: 0,\n match: /,/\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES,\n // Count matching parentheses.\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n 'self',\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES\n ]\n }\n ]\n },\n CPP_PRIMITIVE_TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n ...PREPROCESSORS\n ]\n };\n\n return {\n name: 'C++',\n aliases: [\n 'cc',\n 'c++',\n 'h++',\n 'hpp',\n 'hh',\n 'hxx',\n 'cxx'\n ],\n keywords: CPP_KEYWORDS,\n illegal: '</',\n classNameAliases: { 'function.dispatch': 'built_in' },\n contains: [].concat(\n EXPRESSION_CONTEXT,\n FUNCTION_DECLARATION,\n FUNCTION_DISPATCH,\n EXPRESSION_CONTAINS,\n [\n ...PREPROCESSORS,\n { // containers: ie, `vector <int> rooms (9);`\n 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*<(?!<)',\n end: '>',\n keywords: CPP_KEYWORDS,\n contains: [\n 'self',\n CPP_PRIMITIVE_TYPES\n ]\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: CPP_KEYWORDS\n },\n {\n match: [\n // extra complexity to deal with `enum class` and `enum struct`\n /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n /\\s+/,\n /\\w+/\n ],\n className: {\n 1: 'keyword',\n 3: 'title.class'\n }\n }\n ])\n };\n}\n\nexport { cpp as default };\n","/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n const BUILT_IN_KEYWORDS = [\n 'bool',\n 'byte',\n 'char',\n 'decimal',\n 'delegate',\n 'double',\n 'dynamic',\n 'enum',\n 'float',\n 'int',\n 'long',\n 'nint',\n 'nuint',\n 'object',\n 'sbyte',\n 'short',\n 'string',\n 'ulong',\n 'uint',\n 'ushort'\n ];\n const FUNCTION_MODIFIERS = [\n 'public',\n 'private',\n 'protected',\n 'static',\n 'internal',\n 'protected',\n 'abstract',\n 'async',\n 'extern',\n 'override',\n 'unsafe',\n 'virtual',\n 'new',\n 'sealed',\n 'partial'\n ];\n const LITERAL_KEYWORDS = [\n 'default',\n 'false',\n 'null',\n 'true'\n ];\n const NORMAL_KEYWORDS = [\n 'abstract',\n 'as',\n 'base',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'do',\n 'else',\n 'event',\n 'explicit',\n 'extern',\n 'finally',\n 'fixed',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'namespace',\n 'new',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'record',\n 'ref',\n 'return',\n 'scoped',\n 'sealed',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'unchecked',\n 'unsafe',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while'\n ];\n const CONTEXTUAL_KEYWORDS = [\n 'add',\n 'alias',\n 'and',\n 'ascending',\n 'args',\n 'async',\n 'await',\n 'by',\n 'descending',\n 'dynamic',\n 'equals',\n 'file',\n 'from',\n 'get',\n 'global',\n 'group',\n 'init',\n 'into',\n 'join',\n 'let',\n 'nameof',\n 'not',\n 'notnull',\n 'on',\n 'or',\n 'orderby',\n 'partial',\n 'record',\n 'remove',\n 'required',\n 'scoped',\n 'select',\n 'set',\n 'unmanaged',\n 'value|0',\n 'var',\n 'when',\n 'where',\n 'with',\n 'yield'\n ];\n\n const KEYWORDS = {\n keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n built_in: BUILT_IN_KEYWORDS,\n literal: LITERAL_KEYWORDS\n };\n const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types\n // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types\n // `_` separators sit between digits, and may also follow the `0x`/`0b` prefix\n const DIGITS = '\\\\d(_*\\\\d)*';\n const INTEGER_SUFFIX = '([uU][lL]?|[lL][uU]?)?';\n const REAL_SUFFIX = '([fFdDmM]|[uU][lL]?|[lL][uU]?)?';\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b0[bB]_*[01](_*[01])*' + INTEGER_SUFFIX },\n { begin: '(-?)\\\\b0[xX]_*[a-fA-F0-9](_*[a-fA-F0-9])*' + INTEGER_SUFFIX },\n { begin: '(-?)(\\\\b' + DIGITS + '(\\\\.(' + DIGITS + ')?)?|\\\\.' + DIGITS + ')([eE][-+]?' + DIGITS + ')?' + REAL_SUFFIX }\n ],\n relevance: 0\n };\n const RAW_STRING = {\n className: 'string',\n begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n relevance: 1\n };\n const VERBATIM_STRING = {\n className: 'string',\n begin: '@\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ]\n };\n const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n const INTERPOLATED_STRING = {\n className: 'string',\n begin: /\\$\"/,\n end: '\"',\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n hljs.BACKSLASH_ESCAPE,\n SUBST_NO_LF\n ]\n };\n const INTERPOLATED_VERBATIM_STRING = {\n className: 'string',\n begin: /\\$@\"/,\n end: '\"',\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST\n ]\n };\n const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST_NO_LF\n ]\n });\n SUBST.contains = [\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ];\n SUBST_NO_LF.contains = [\n INTERPOLATED_VERBATIM_STRING_NO_LF,\n INTERPOLATED_STRING,\n VERBATIM_STRING_NO_LF,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n ];\n const STRING = { variants: [\n RAW_STRING,\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ] };\n\n const GENERIC_MODIFIER = {\n begin: \"<\",\n end: \">\",\n contains: [\n { beginKeywords: \"in out\" },\n TITLE_MODE\n ]\n };\n const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n const AT_IDENTIFIER = {\n // prevents expressions like `@class` from incorrect flagging\n // `class` as a keyword\n begin: \"@\" + hljs.IDENT_RE,\n relevance: 0\n };\n\n return {\n name: 'C#',\n aliases: [\n 'cs',\n 'c#'\n ],\n keywords: KEYWORDS,\n illegal: /::/,\n contains: [\n hljs.COMMENT(\n '///',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n variants: [\n {\n begin: '///',\n relevance: 0\n },\n { begin: '<!--|-->' },\n {\n begin: '</?',\n end: '>'\n }\n ]\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n },\n STRING,\n NUMBERS,\n {\n beginKeywords: 'class interface',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:,]/,\n contains: [\n { beginKeywords: \"where class\" },\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'record',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // [Attributes(\"\")]\n className: 'meta',\n begin: '^\\\\s*\\\\[(?=[\\\\w])',\n excludeBegin: true,\n end: '\\\\]',\n excludeEnd: true,\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/\n }\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new return throw await else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n end: /\\s*[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n // prevents these from being highlighted `title`\n {\n beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n relevance: 0\n },\n {\n begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n contains: [\n hljs.TITLE_MODE,\n GENERIC_MODIFIER\n ],\n relevance: 0\n },\n { match: /\\(\\)/ },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n STRING,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n AT_IDENTIFIER\n ]\n };\n}\n\nexport { csharp as default };\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n UNICODE_RANGE: {\n scope: 'number',\n begin: /\\b[Uu]\\+[0-9A-Fa-f][0-9A-Fa-f?]{0,5}(-[0-9A-Fa-f][0-9A-Fa-f]{0,5})?/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'anchor-name',\n 'animation',\n 'animation-composition',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-range',\n 'animation-range-end',\n 'animation-range-start',\n 'animation-timeline',\n 'animation-timing-function',\n 'appearance',\n 'aspect-ratio',\n 'backdrop-filter',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-position-x',\n 'background-position-y',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-align',\n 'box-decoration-break',\n 'box-direction',\n 'box-flex',\n 'box-flex-group',\n 'box-lines',\n 'box-ordinal-group',\n 'box-orient',\n 'box-pack',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'contain-intrinsic-block-size',\n 'contain-intrinsic-height',\n 'contain-intrinsic-inline-size',\n 'contain-intrinsic-size',\n 'contain-intrinsic-width',\n 'container',\n 'container-name',\n 'container-type',\n 'content',\n 'content-visibility',\n 'corner-bottom-left-shape',\n 'corner-bottom-right-shape',\n 'corner-shape',\n 'corner-top-left-shape',\n 'corner-top-right-shape',\n 'counter-increment',\n 'counter-reset',\n 'counter-set',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'cx',\n 'cy',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'field-sizing',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flood-color',\n 'flood-opacity',\n 'flow',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-optical-sizing',\n 'font-palette',\n 'font-size',\n 'font-size-adjust',\n 'font-smooth',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-synthesis-position',\n 'font-synthesis-small-caps',\n 'font-synthesis-style',\n 'font-synthesis-weight',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-emoji',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'forced-color-adjust',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphenate-character',\n 'hyphenate-limit-chars',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'initial-letter',\n 'initial-letter-align',\n 'inline-size',\n 'inset',\n 'inset-area',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'kerning',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'line-height-step',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-trim',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'masonry-auto-flow',\n 'math-depth',\n 'math-shift',\n 'math-style',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-anchor',\n 'overflow-block',\n 'overflow-clip-margin',\n 'overflow-inline',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'overlay',\n 'overscroll-behavior',\n 'overscroll-behavior-block',\n 'overscroll-behavior-inline',\n 'overscroll-behavior-x',\n 'overscroll-behavior-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'paint-order',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'place-content',\n 'place-items',\n 'place-self',\n 'pointer-events',\n 'position',\n 'position-anchor',\n 'position-visibility',\n 'print-color-adjust',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'ruby-align',\n 'ruby-position',\n 'scale',\n 'scroll-behavior',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scroll-timeline',\n 'scroll-timeline-axis',\n 'scroll-timeline-name',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-anchor',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-size-adjust',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'text-wrap',\n 'text-wrap-mode',\n 'text-wrap-style',\n 'timeline-scope',\n 'top',\n 'touch-action',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-behavior',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'unicode-range',\n 'user-modify',\n 'user-select',\n 'vector-effect',\n 'vertical-align',\n 'view-timeline',\n 'view-timeline-axis',\n 'view-timeline-inset',\n 'view-timeline-name',\n 'view-transition-name',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'white-space-collapse',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index',\n 'zoom'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n const regex = hljs.regex;\n const modes = MODES(hljs);\n const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n const AT_MODIFIERS = \"and or not only\";\n const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const STRINGS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ];\n\n return {\n name: 'CSS',\n case_insensitive: true,\n illegal: /[=|'\\$]/,\n keywords: { keyframePosition: \"from to\" },\n classNameAliases: {\n // for visual continuity with `tag {}` and because we\n // don't have a great class for this?\n keyframePosition: \"selector-tag\" },\n contains: [\n modes.BLOCK_COMMENT,\n VENDOR_PREFIX,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: /#[A-Za-z0-9_-]+/,\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.' + IDENT_RE,\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n variants: [\n { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n ]\n },\n // we may actually need this (12/2020)\n // { // pseudo-selector params\n // begin: /\\(/,\n // end: /\\)/,\n // contains: [ hljs.CSS_NUMBER_MODE ]\n // },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n // attribute values\n {\n begin: /:/,\n end: /[;}{]/,\n contains: [\n modes.BLOCK_COMMENT,\n modes.HEXCOLOR,\n modes.IMPORTANT,\n modes.CSS_NUMBER_MODE,\n modes.UNICODE_RANGE,\n ...STRINGS,\n // needed to highlight these as strings and to avoid issues with\n // illegal characters that might be inside urls that would trigger the\n // languages illegal stack\n {\n begin: /(url|data-uri)\\(/,\n end: /\\)/,\n relevance: 0, // from keywords\n keywords: { built_in: \"url data-uri\" },\n contains: [\n ...STRINGS,\n {\n className: \"string\",\n // any character other than `)` as in `url()` will be the start\n // of a string, which ends with `)` (from the parent mode)\n begin: /[^)]/,\n endsWithParent: true,\n excludeEnd: true\n }\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n },\n {\n begin: regex.lookahead(/@/),\n end: '[{;]',\n relevance: 0,\n illegal: /:/, // break on Less variables @var: ...\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/,\n endsWithParent: true,\n excludeEnd: true,\n relevance: 0,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n ...STRINGS,\n modes.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n }\n ]\n };\n}\n\nexport { css as default };\n","/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n const LITERALS = [\n \"true\",\n \"false\",\n \"iota\",\n \"nil\"\n ];\n const BUILT_INS = [\n \"append\",\n \"cap\",\n \"close\",\n \"complex\",\n \"copy\",\n \"imag\",\n \"len\",\n \"make\",\n \"new\",\n \"panic\",\n \"print\",\n \"println\",\n \"real\",\n \"recover\",\n \"delete\"\n ];\n const TYPES = [\n \"bool\",\n \"byte\",\n \"complex64\",\n \"complex128\",\n \"error\",\n \"float32\",\n \"float64\",\n \"int8\",\n \"int16\",\n \"int32\",\n \"int64\",\n \"string\",\n \"uint8\",\n \"uint16\",\n \"uint32\",\n \"uint64\",\n \"int\",\n \"uint\",\n \"uintptr\",\n \"rune\"\n ];\n const KWS = [\n \"break\",\n \"case\",\n \"chan\",\n \"const\",\n \"continue\",\n \"default\",\n \"defer\",\n \"else\",\n \"fallthrough\",\n \"for\",\n \"func\",\n \"go\",\n \"goto\",\n \"if\",\n \"import\",\n \"interface\",\n \"map\",\n \"package\",\n \"range\",\n \"return\",\n \"select\",\n \"struct\",\n \"switch\",\n \"type\",\n \"var\",\n ];\n const KEYWORDS = {\n keyword: KWS,\n type: TYPES,\n literal: LITERALS,\n built_in: BUILT_INS\n };\n return {\n name: 'Go',\n aliases: [ 'golang' ],\n keywords: KEYWORDS,\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n variants: [\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n begin: '`',\n end: '`'\n }\n ]\n },\n {\n className: 'number',\n variants: [\n {\n match: /-?\\b0[xX]\\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\\d(_?\\d)*i?/, // hex without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b0[xX](_?[a-fA-F0-9])+((\\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\\d(_?\\d)*)?i?/, // hex with a present digit before . (making a digit afterwards optional)\n relevance: 0\n },\n {\n match: /-?\\b0[oO](_?[0-7])*i?/, // leading 0o octal\n relevance: 0\n },\n {\n match: /-?\\b0[bB](_?[01])*i?/, // leading 0b binary\n relevance: 0\n },\n {\n match: /-?\\.\\d(_?\\d)*([eE][+-]?\\d(_?\\d)*)?i?/, // decimal without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b\\d(_?\\d)*(\\.(\\d(_?\\d)*)?)?([eE][+-]?\\d(_?\\d)*)?i?/, // decimal with a present digit before . (making a digit afterwards optional)\n relevance: 0\n }\n ]\n },\n { begin: /:=/ // relevance booster\n },\n {\n className: 'function',\n beginKeywords: 'func',\n end: '\\\\s*(\\\\{|$)',\n excludeEnd: true,\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n illegal: /[\"']/\n }\n ]\n }\n ]\n };\n}\n\nexport { go as default };\n","/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n const regex = hljs.regex;\n const NUMBERS = {\n className: 'number',\n relevance: 0,\n variants: [\n { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n { begin: hljs.NUMBER_RE }\n ]\n };\n const COMMENTS = hljs.COMMENT();\n COMMENTS.variants = [\n {\n begin: /;/,\n end: /$/\n },\n {\n begin: /#/,\n end: /$/\n }\n ];\n const VARIABLES = {\n className: 'variable',\n variants: [\n { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n { begin: /\\$\\{(.*?)\\}/ }\n ]\n };\n const LITERALS = {\n className: 'literal',\n begin: /\\bon|off|true|false|yes|no\\b/\n };\n const STRINGS = {\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: \"'''\",\n end: \"'''\",\n relevance: 10\n },\n {\n begin: '\"\"\"',\n end: '\"\"\"',\n relevance: 10\n },\n {\n begin: '\"',\n end: '\"'\n },\n {\n begin: \"'\",\n end: \"'\"\n }\n ]\n };\n const ARRAY = {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n COMMENTS,\n LITERALS,\n VARIABLES,\n STRINGS,\n NUMBERS,\n 'self'\n ],\n relevance: 0\n };\n\n const BARE_KEY = /[A-Za-z0-9_-]+/;\n const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n const ANY_KEY = regex.either(\n BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n );\n const DOTTED_KEY = regex.concat(\n ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n regex.lookahead(/\\s*=\\s*[^#\\s]/)\n );\n\n return {\n name: 'TOML, also INI',\n aliases: [ 'toml' ],\n case_insensitive: true,\n illegal: /\\S/,\n contains: [\n COMMENTS,\n {\n className: 'section',\n begin: /\\[+/,\n end: /\\]+/\n },\n {\n begin: DOTTED_KEY,\n className: 'attr',\n starts: {\n end: /$/,\n contains: [\n COMMENTS,\n ARRAY,\n LITERALS,\n VARIABLES,\n STRINGS,\n NUMBERS\n ]\n }\n }\n ]\n };\n}\n\nexport { ini as default };\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n if (depth === -1) return \"\";\n\n return re.replace(substitution, _ => {\n return recurRegex(re, substitution, depth - 1);\n });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n const regex = hljs.regex;\n\n // A Java identifier consisting of letters, digits, underscore or dollar sign, not beginning with a digit\n const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n\n // Optional 1..n pairs of square brackets identifying an array type\n const ARRAY_BRACKETS_OPTIONAL_RE = '(?:(?:\\\\s*\\\\[\\\\s*])+)?';\n\n // A simple Java type: a type name, optionally followed by type arguments and/or array brackets\n // '<@@@>' is replaced with the pattern for optional type arguments by recurRegex below.\n const SIMPLE_TYPE_RE = JAVA_IDENT_RE + '<@@@>' + ARRAY_BRACKETS_OPTIONAL_RE;\n\n // A bounded (? extends Number) or unbounded (?) wildcard type\n const WILDCARD_TYPE_RE = '\\\\?(?:\\\\s+(?:extends|super)\\\\s+' + SIMPLE_TYPE_RE + ')?';\n\n // A Java type argument, consisting of a wildcard or simple type\n const TYPE_ARG_RE = '(?:' + WILDCARD_TYPE_RE + '|' + SIMPLE_TYPE_RE + ')';\n\n // Pattern for optional generic type arguments in angle brackets with up to 2 levels of nested type arguments\n const TYPE_ARGS_OPTIONAL_RE = recurRegex('(?:\\\\s*<\\\\s*' + TYPE_ARG_RE + '(?:\\\\s*,\\\\s*' + TYPE_ARG_RE + ')*\\\\s*>)?',\n /<@@@>/g, 2);\n\n const MAIN_KEYWORDS = [\n 'synchronized',\n 'abstract',\n 'private',\n 'var',\n 'static',\n 'if',\n 'const ',\n 'for',\n 'while',\n 'strictfp',\n 'finally',\n 'protected',\n 'import',\n 'native',\n 'final',\n 'void',\n 'enum',\n 'else',\n 'break',\n 'transient',\n 'catch',\n 'instanceof',\n 'volatile',\n 'case',\n 'assert',\n 'package',\n 'default',\n 'public',\n 'try',\n 'switch',\n 'continue',\n 'throws',\n 'protected',\n 'public',\n 'private',\n 'module',\n 'requires',\n 'exports',\n 'do',\n 'sealed',\n 'yield',\n 'permits',\n 'goto',\n 'when'\n ];\n\n const BUILT_INS = [\n 'super',\n 'this'\n ];\n\n const LITERALS = [\n 'false',\n 'true',\n 'null'\n ];\n\n const TYPES = [\n 'char',\n 'boolean',\n 'long',\n 'float',\n 'int',\n 'byte',\n 'short',\n 'double'\n ];\n\n const KEYWORDS = {\n keyword: MAIN_KEYWORDS,\n literal: LITERALS,\n type: TYPES,\n built_in: BUILT_INS\n };\n\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + JAVA_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [ \"self\" ] // allow nested () inside our annotation\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n endsParent: true\n };\n\n return {\n name: 'Java',\n aliases: [ 'jsp' ],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n // relevance boost\n {\n begin: /import java\\.[a-z]+\\./,\n keywords: \"import\",\n relevance: 2\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n begin: /\"\"\"/,\n end: /\"\"\"/,\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n match: [\n /\\b(?:class|interface|enum|extends|implements|new)/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n // Exceptions for hyphenated keywords\n match: /non-sealed/,\n scope: \"keyword\"\n },\n {\n // Expression keywords prevent keyword-led expressions from being\n // recognized as variable or method declarations.\n beginKeywords: 'new throw return else yield assert',\n relevance: 0\n },\n {\n begin: [\n JAVA_IDENT_RE,\n regex.concat(TYPE_ARGS_OPTIONAL_RE, ARRAY_BRACKETS_OPTIONAL_RE, /\\s+/),\n JAVA_IDENT_RE,\n ARRAY_BRACKETS_OPTIONAL_RE,\n /\\s*/,\n /=(?!=)/\n ],\n className: {\n 1: \"type\",\n 3: \"variable\",\n 6: \"operator\"\n }\n },\n {\n begin: [\n /record/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n contains: [\n PARAMS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n begin: [\n JAVA_IDENT_RE,\n regex.concat(TYPE_ARGS_OPTIONAL_RE, ARRAY_BRACKETS_OPTIONAL_RE, /\\s+/),\n JAVA_IDENT_RE,\n /\\s*(?=\\()/\n ],\n className: {\n 1: \"type\",\n 3: \"title.function\"\n },\n keywords: KEYWORDS,\n contains: [\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n ANNOTATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMERIC,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n NUMERIC,\n ANNOTATION\n ]\n };\n}\n\nexport { java as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"self\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\",\n \"await\",\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-Za-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","const EXTENDED_NUMBER_RE = '([-+]?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)|NaN|[-+]?Infinity'; // 0x..., 0..., decimal, float\n\nconst EXTENDED_NUMBER_MODE = {\n scope: 'number',\n match: EXTENDED_NUMBER_RE,\n relevance: 0\n};\n\n/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nWebsites: http://www.json.org, https://www.json5.org\nCategory: common, protocols, web\n*/\n\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /((\"(\\\\.|[^\\\\\"\\r\\n])*\")|('(\\\\.|[^\\\\'\\r\\n])*'))(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc', 'json5'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n EXTENDED_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n const regex = hljs.regex;\n const INLINE_HTML = {\n begin: /<\\/?[A-Za-z_]/,\n end: '>',\n subLanguage: 'xml',\n relevance: 0\n };\n // https://spec.commonmark.org/0.31.2/#thematic-breaks\n // three or more `-`, `*` or `_`, all the same character, optionally\n // separated and followed by spaces or tabs, and nothing else on the line\n const HORIZONTAL_RULE = { match: /^ {0,3}([-*_])[ \\t]*(?:\\1[ \\t]*){2,}$/ };\n const CODE = {\n className: 'code',\n variants: [\n // TODO: fix to allow these to work with sublanguage also\n { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n // needed to allow markdown as a sublanguage to work\n {\n begin: '```',\n end: '```+[ ]*$'\n },\n {\n begin: '~~~',\n end: '~~~+[ ]*$'\n },\n { begin: '`.+?`' },\n {\n begin: '(?=^( {4}|\\\\t))',\n // use contains to gobble up multiple lines to allow the block to be whatever size\n // but only have a single open/close tag vs one per line\n contains: [\n {\n begin: '^( {4}|\\\\t)',\n end: '(\\\\n)$'\n }\n ],\n relevance: 0\n }\n ]\n };\n const LIST = {\n className: 'bullet',\n begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n end: '\\\\s+',\n excludeEnd: true\n };\n const LINK_REFERENCE = {\n begin: /^\\[[^\\n]+\\]:/,\n returnBegin: true,\n contains: [\n {\n className: 'symbol',\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'link',\n begin: /:\\s*/,\n end: /$/,\n excludeBegin: true\n }\n ]\n };\n const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n const LINK = {\n variants: [\n // too much like nested array access in so many languages\n // to have any real relevance\n {\n begin: /\\[.+?\\]\\[.*?\\]/,\n relevance: 0\n },\n // popular internet URLs\n {\n begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n relevance: 2\n },\n {\n begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n relevance: 2\n },\n // relative urls\n {\n begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n relevance: 1\n },\n // whatever else, lower relevance (might not be a link at all)\n {\n begin: /\\[.*?\\]\\(.*?\\)/,\n relevance: 0\n }\n ],\n returnBegin: true,\n contains: [\n {\n // empty strings for alt or link text\n match: /\\[(?=\\])/ },\n {\n className: 'string',\n relevance: 0,\n begin: '\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n returnEnd: true\n },\n {\n className: 'link',\n relevance: 0,\n begin: '\\\\]\\\\(',\n end: '\\\\)',\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'symbol',\n relevance: 0,\n begin: '\\\\]\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n const BOLD = {\n className: 'strong',\n contains: [], // defined later\n variants: [\n {\n begin: /_{2}(?!\\s)/,\n end: /_{2}/\n },\n {\n begin: /\\*{2}(?!\\s)/,\n end: /\\*{2}/\n }\n ]\n };\n const ITALIC = {\n className: 'emphasis',\n contains: [], // defined later\n variants: [\n {\n begin: /\\*(?![*\\s])/,\n end: /\\*/\n },\n {\n begin: /_(?![_\\s])/,\n end: /_/,\n relevance: 0\n }\n ]\n };\n\n // 3 level deep nesting is not allowed because it would create confusion\n // in cases like `***testing***` because where we don't know if the last\n // `***` is starting a new bold/italic or finishing the last one\n const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n let CONTAINABLE = [\n INLINE_HTML,\n LINK\n ];\n\n [\n BOLD,\n ITALIC,\n BOLD_WITHOUT_ITALIC,\n ITALIC_WITHOUT_BOLD\n ].forEach(m => {\n m.contains = m.contains.concat(CONTAINABLE);\n });\n\n CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n const HEADER = {\n className: 'section',\n variants: [\n {\n begin: '^#{1,6}',\n end: '$',\n contains: CONTAINABLE\n },\n {\n begin: '(?=^.+?\\\\n[=-]{2,}$)',\n contains: [\n { begin: '^[=-]*$' },\n {\n begin: '^',\n end: \"\\\\n\",\n contains: CONTAINABLE\n }\n ]\n }\n ]\n };\n\n const BLOCKQUOTE = {\n className: 'quote',\n begin: '^>\\\\s+',\n contains: CONTAINABLE,\n end: '$'\n };\n\n const ENTITY = {\n //https://spec.commonmark.org/0.31.2/#entity-references\n scope: 'literal',\n match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/\n };\n\n return {\n name: 'Markdown',\n aliases: [\n 'md',\n 'mkdown',\n 'mkd'\n ],\n contains: [\n HEADER,\n INLINE_HTML,\n LIST,\n // must come before BOLD/ITALIC so that a `***` or `___` thematic break\n // isn't mistaken for the start of bold text\n HORIZONTAL_RULE,\n BOLD,\n ITALIC,\n BLOCKQUOTE,\n CODE,\n LINK,\n LINK_REFERENCE,\n ENTITY\n ]\n };\n}\n\nexport { markdown as default };\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'lazy',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'aiter',\n 'all',\n 'anext',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozendict',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'sentinel',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nexport { python as default };\n","/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\n\nfunction rust(hljs) {\n const regex = hljs.regex;\n // ============================================\n // Added to support the r# keyword, which is a raw identifier in Rust.\n const RAW_IDENTIFIER = /(r#)?/;\n const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);\n const IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);\n // ============================================\n const FUNCTION_INVOKE = {\n scope: \"title.function.invoke\",\n relevance: 0,\n begin: regex.concat(\n /\\b/,\n /(?!(?:let|for|while|if|else|match)\\b)/,\n IDENT_RE,\n regex.lookahead(/\\s*\\(/))\n };\n const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(16|32|64|128))\\?';\n const KEYWORDS = [\n \"abstract\",\n \"as\",\n \"async\",\n \"await\",\n \"become\",\n \"box\",\n \"break\",\n \"const\",\n \"continue\",\n \"crate\",\n \"do\",\n \"dyn\",\n \"else\",\n \"enum\",\n \"extern\",\n \"false\",\n \"final\",\n \"fn\",\n \"for\",\n \"if\",\n \"impl\",\n \"in\",\n \"let\",\n \"loop\",\n \"macro\",\n \"match\",\n \"mod\",\n \"move\",\n \"mut\",\n \"override\",\n \"priv\",\n \"pub\",\n \"raw\",\n \"ref\",\n \"return\",\n \"self\",\n \"Self\",\n \"static\",\n \"struct\",\n \"super\",\n \"trait\",\n \"true\",\n \"try\",\n \"type\",\n \"typeof\",\n \"union\",\n \"unsafe\",\n \"unsized\",\n \"use\",\n \"virtual\",\n \"where\",\n \"while\",\n \"yield\"\n ];\n const LITERALS = [\n \"true\",\n \"false\",\n \"Some\",\n \"None\",\n \"Ok\",\n \"Err\"\n ];\n const BUILTINS = [\n // functions\n 'drop ',\n // traits\n \"Copy\",\n \"Send\",\n \"Sized\",\n \"Sync\",\n \"Drop\",\n \"Fn\",\n \"FnMut\",\n \"FnOnce\",\n \"ToOwned\",\n \"Clone\",\n \"Debug\",\n \"PartialEq\",\n \"PartialOrd\",\n \"Eq\",\n \"Ord\",\n \"AsRef\",\n \"AsMut\",\n \"Into\",\n \"From\",\n \"Default\",\n \"Iterator\",\n \"Extend\",\n \"IntoIterator\",\n \"DoubleEndedIterator\",\n \"ExactSizeIterator\",\n \"SliceConcatExt\",\n \"ToString\",\n // macros\n \"assert!\",\n \"assert_eq!\",\n \"bitflags!\",\n \"bytes!\",\n \"cfg!\",\n \"col!\",\n \"concat!\",\n \"concat_idents!\",\n \"debug_assert!\",\n \"debug_assert_eq!\",\n \"env!\",\n \"eprintln!\",\n \"panic!\",\n \"file!\",\n \"format!\",\n \"format_args!\",\n \"include_bytes!\",\n \"include_str!\",\n \"line!\",\n \"local_data_key!\",\n \"module_path!\",\n \"option_env!\",\n \"print!\",\n \"println!\",\n \"select!\",\n \"stringify!\",\n \"try!\",\n \"unimplemented!\",\n \"unreachable!\",\n \"vec!\",\n \"write!\",\n \"writeln!\",\n \"macro_rules!\",\n \"assert_ne!\",\n \"debug_assert_ne!\"\n ];\n const TYPES = [\n \"i8\",\n \"i16\",\n \"i32\",\n \"i64\",\n \"i128\",\n \"isize\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"u64\",\n \"u128\",\n \"usize\",\n \"f16\",\n \"f32\",\n \"f64\",\n \"f128\",\n \"str\",\n \"char\",\n \"bool\",\n \"Box\",\n \"Option\",\n \"Result\",\n \"String\",\n \"Vec\"\n ];\n return {\n name: 'Rust',\n aliases: [ 'rs' ],\n keywords: {\n $pattern: hljs.IDENT_RE + '!?',\n type: TYPES,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILTINS\n },\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n begin: /b?\"/,\n illegal: null\n }),\n {\n scope: 'symbol',\n // negative lookahead to avoid matching `'`\n begin: /'[a-zA-Z_][a-zA-Z0-9_]*(?!')/\n },\n {\n scope: 'string',\n variants: [\n { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n {\n begin: /b?'/,\n end: /'/,\n contains: [\n {\n scope: \"char.escape\",\n match: /\\\\('|\"|\\\\|\\w|x\\w{2}|u\\w{4}|U\\w{8})/\n }\n ]\n }\n ]\n },\n {\n scope: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n + NUMBER_SUFFIX }\n ],\n relevance: 0\n },\n {\n begin: [\n /\\bsafe/,\n /\\s+/,\n /extern/,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"keyword\",\n }\n },\n {\n begin: [\n /fn/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n }\n },\n {\n scope: 'meta',\n begin: '#!?\\\\[',\n end: '\\\\]',\n contains: [\n {\n scope: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE\n ]\n }\n ]\n },\n {\n begin: [\n /let/,\n /\\s+/,\n /(?:mut\\s+)?/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"keyword\",\n 4: \"variable\"\n }\n },\n // must come before impl/for rule later\n {\n begin: [\n /for/,\n /\\s+/,\n UNDERSCORE_IDENT_RE,\n /\\s+/,\n /in/\n ],\n scope: {\n 1: \"keyword\",\n 3: \"variable\",\n 5: \"keyword\"\n }\n },\n {\n begin: [\n /type/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: [\n /(?:trait|enum|struct|union|impl|for)/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: {\n keyword: \"Self\",\n built_in: BUILTINS,\n type: TYPES\n }\n },\n {\n scope: \"punctuation\",\n begin: '->'\n },\n FUNCTION_INVOKE\n ]\n };\n}\n\nexport { rust as default };\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n - PostgreSQL and PL/pgSQL - core\n - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n const regex = hljs.regex;\n const COMMENT_MODE = hljs.COMMENT('--', '$');\n const STRING = {\n scope: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [ { match: /''/ } ]\n }\n ]\n };\n const QUOTED_IDENTIFIER = {\n begin: /\"/,\n end: /\"/,\n contains: [ { match: /\"\"/ } ]\n };\n\n const LITERALS = [\n \"true\",\n \"false\",\n // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n // \"null\",\n \"unknown\"\n ];\n\n const MULTI_WORD_TYPES = [\n \"double precision\",\n \"large object\",\n \"with timezone\",\n \"without timezone\"\n ];\n\n const TYPES = [\n 'bigint',\n 'binary',\n 'blob',\n 'boolean',\n 'char',\n 'character',\n 'clob',\n 'date',\n 'dec',\n 'decfloat',\n 'decimal',\n 'float',\n 'int',\n 'integer',\n 'interval',\n 'nchar',\n 'nclob',\n 'national',\n 'numeric',\n 'real',\n 'row',\n 'smallint',\n 'time',\n 'timestamp',\n 'varchar',\n 'varying', // modifier (character varying)\n 'varbinary'\n ];\n\n const NON_RESERVED_WORDS = [\n \"add\",\n \"asc\",\n \"collation\",\n \"desc\",\n \"final\",\n \"first\",\n \"last\",\n \"view\"\n ];\n\n // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n const RESERVED_WORDS = [\n \"abs\",\n \"acos\",\n \"all\",\n \"allocate\",\n \"alter\",\n \"and\",\n \"any\",\n \"are\",\n \"array\",\n \"array_agg\",\n \"array_max_cardinality\",\n \"as\",\n \"asensitive\",\n \"asin\",\n \"asymmetric\",\n \"at\",\n \"atan\",\n \"atomic\",\n \"authorization\",\n \"avg\",\n \"begin\",\n \"begin_frame\",\n \"begin_partition\",\n \"between\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"both\",\n \"by\",\n \"call\",\n \"called\",\n \"cardinality\",\n \"cascaded\",\n \"case\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"char\",\n \"char_length\",\n \"character\",\n \"character_length\",\n \"check\",\n \"classifier\",\n \"clob\",\n \"close\",\n \"coalesce\",\n \"collate\",\n \"collect\",\n \"column\",\n \"commit\",\n \"condition\",\n \"connect\",\n \"constraint\",\n \"contains\",\n \"convert\",\n \"copy\",\n \"corr\",\n \"corresponding\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"create\",\n \"cross\",\n \"cube\",\n \"cume_dist\",\n \"current\",\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_row\",\n \"current_schema\",\n \"current_time\",\n \"current_timestamp\",\n \"current_path\",\n \"current_role\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"cursor\",\n \"cycle\",\n \"date\",\n \"day\",\n \"deallocate\",\n \"dec\",\n \"decimal\",\n \"decfloat\",\n \"declare\",\n \"default\",\n \"define\",\n \"delete\",\n \"dense_rank\",\n \"deref\",\n \"describe\",\n \"deterministic\",\n \"disconnect\",\n \"distinct\",\n \"double\",\n \"drop\",\n \"dynamic\",\n \"each\",\n \"element\",\n \"else\",\n \"empty\",\n \"end\",\n \"end_frame\",\n \"end_partition\",\n \"end-exec\",\n \"equals\",\n \"escape\",\n \"every\",\n \"except\",\n \"exec\",\n \"execute\",\n \"exists\",\n \"exp\",\n \"external\",\n \"extract\",\n \"false\",\n \"fetch\",\n \"filter\",\n \"first_value\",\n \"float\",\n \"floor\",\n \"for\",\n \"foreign\",\n \"frame_row\",\n \"free\",\n \"from\",\n \"full\",\n \"function\",\n \"fusion\",\n \"get\",\n \"global\",\n \"grant\",\n \"group\",\n \"grouping\",\n \"groups\",\n \"having\",\n \"hold\",\n \"hour\",\n \"identity\",\n \"in\",\n \"indicator\",\n \"initial\",\n \"inner\",\n \"inout\",\n \"insensitive\",\n \"insert\",\n \"int\",\n \"integer\",\n \"intersect\",\n \"intersection\",\n \"interval\",\n \"into\",\n \"is\",\n \"join\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"language\",\n \"large\",\n \"last_value\",\n \"lateral\",\n \"lead\",\n \"leading\",\n \"left\",\n \"like\",\n \"like_regex\",\n \"listagg\",\n \"ln\",\n \"local\",\n \"localtime\",\n \"localtimestamp\",\n \"log\",\n \"log10\",\n \"lower\",\n \"match\",\n \"match_number\",\n \"match_recognize\",\n \"matches\",\n \"max\",\n \"member\",\n \"merge\",\n \"method\",\n \"min\",\n \"minute\",\n \"mod\",\n \"modifies\",\n \"module\",\n \"month\",\n \"multiset\",\n \"national\",\n \"natural\",\n \"nchar\",\n \"nclob\",\n \"new\",\n \"no\",\n \"none\",\n \"normalize\",\n \"not\",\n \"nth_value\",\n \"ntile\",\n \"null\",\n \"nullif\",\n \"numeric\",\n \"octet_length\",\n \"occurrences_regex\",\n \"of\",\n \"offset\",\n \"old\",\n \"omit\",\n \"on\",\n \"one\",\n \"only\",\n \"open\",\n \"or\",\n \"order\",\n \"out\",\n \"outer\",\n \"over\",\n \"overlaps\",\n \"overlay\",\n \"parameter\",\n \"partition\",\n \"pattern\",\n \"per\",\n \"percent\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"period\",\n \"portion\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"precedes\",\n \"precision\",\n \"prepare\",\n \"primary\",\n \"procedure\",\n \"ptf\",\n \"range\",\n \"rank\",\n \"reads\",\n \"real\",\n \"recursive\",\n \"ref\",\n \"references\",\n \"referencing\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"release\",\n \"result\",\n \"return\",\n \"returns\",\n \"revoke\",\n \"right\",\n \"rollback\",\n \"rollup\",\n \"row\",\n \"row_number\",\n \"rows\",\n \"running\",\n \"savepoint\",\n \"scope\",\n \"scroll\",\n \"search\",\n \"second\",\n \"seek\",\n \"select\",\n \"sensitive\",\n \"session_user\",\n \"set\",\n \"show\",\n \"similar\",\n \"sin\",\n \"sinh\",\n \"skip\",\n \"smallint\",\n \"some\",\n \"specific\",\n \"specifictype\",\n \"sql\",\n \"sqlexception\",\n \"sqlstate\",\n \"sqlwarning\",\n \"sqrt\",\n \"start\",\n \"static\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"submultiset\",\n \"subset\",\n \"substring\",\n \"substring_regex\",\n \"succeeds\",\n \"sum\",\n \"symmetric\",\n \"system\",\n \"system_time\",\n \"system_user\",\n \"table\",\n \"tablesample\",\n \"tan\",\n \"tanh\",\n \"then\",\n \"time\",\n \"timestamp\",\n \"timezone_hour\",\n \"timezone_minute\",\n \"to\",\n \"trailing\",\n \"translate\",\n \"translate_regex\",\n \"translation\",\n \"treat\",\n \"trigger\",\n \"trim\",\n \"trim_array\",\n \"true\",\n \"truncate\",\n \"uescape\",\n \"union\",\n \"unique\",\n \"unknown\",\n \"unnest\",\n \"update\",\n \"upper\",\n \"user\",\n \"using\",\n \"value\",\n \"values\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"varbinary\",\n \"varchar\",\n \"varying\",\n \"versioning\",\n \"when\",\n \"whenever\",\n \"where\",\n \"width_bucket\",\n \"window\",\n \"with\",\n \"within\",\n \"without\",\n \"year\",\n ];\n\n // these are reserved words we have identified to be functions\n // and should only be highlighted in a dispatch-like context\n // ie, array_agg(...), etc.\n const RESERVED_FUNCTIONS = [\n \"abs\",\n \"acos\",\n \"array_agg\",\n \"asin\",\n \"atan\",\n \"avg\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"coalesce\",\n \"corr\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"cume_dist\",\n \"dense_rank\",\n \"deref\",\n \"element\",\n \"exp\",\n \"extract\",\n \"first_value\",\n \"floor\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"last_value\",\n \"lead\",\n \"listagg\",\n \"ln\",\n \"log\",\n \"log10\",\n \"lower\",\n \"max\",\n \"min\",\n \"mod\",\n \"nth_value\",\n \"ntile\",\n \"nullif\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"rank\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"row_number\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"substring\",\n \"substring_regex\",\n \"sum\",\n \"tan\",\n \"tanh\",\n \"translate\",\n \"translate_regex\",\n \"treat\",\n \"trim\",\n \"trim_array\",\n \"unnest\",\n \"upper\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"width_bucket\",\n ];\n\n // these functions can\n const POSSIBLE_WITHOUT_PARENS = [\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_schema\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"session_user\",\n \"system_time\",\n \"system_user\",\n \"current_time\",\n \"localtime\",\n \"current_timestamp\",\n \"localtimestamp\"\n ];\n\n // those exist to boost relevance making these very\n // \"SQL like\" keyword combos worth +1 extra relevance\n const COMBOS = [\n \"create table\",\n \"insert into\",\n \"primary key\",\n \"foreign key\",\n \"not null\",\n \"alter table\",\n \"add constraint\",\n \"grouping sets\",\n \"on overflow\",\n \"character set\",\n \"respect nulls\",\n \"ignore nulls\",\n \"nulls first\",\n \"nulls last\",\n \"depth first\",\n \"breadth first\"\n ];\n\n const FUNCTIONS = RESERVED_FUNCTIONS;\n\n const KEYWORDS = [\n ...RESERVED_WORDS,\n ...NON_RESERVED_WORDS\n ].filter((keyword) => {\n return !RESERVED_FUNCTIONS.includes(keyword);\n });\n\n const VARIABLE = {\n scope: \"variable\",\n match: /@[a-z0-9][a-z0-9_]*/,\n };\n\n const OPERATOR = {\n scope: \"operator\",\n match: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n relevance: 0,\n };\n\n const FUNCTION_CALL = {\n match: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n relevance: 0,\n keywords: { built_in: FUNCTIONS }\n };\n\n // turns a multi-word keyword combo into a regex that doesn't\n // care about extra whitespace etc.\n // input: \"START QUERY\"\n // output: /\\bSTART\\s+QUERY\\b/\n function kws_to_regex(list) {\n return regex.concat(\n /\\b/,\n regex.either(...list.map((kw) => {\n return kw.replace(/\\s+/, \"\\\\s+\")\n })),\n /\\b/\n )\n }\n\n const MULTI_WORD_KEYWORDS = {\n scope: \"keyword\",\n match: kws_to_regex(COMBOS),\n relevance: 0,\n };\n\n // keywords with less than 3 letters are reduced in relevancy\n function reduceRelevancy(list, {\n exceptions, when\n } = {}) {\n const qualifyFn = when;\n exceptions = exceptions || [];\n return list.map((item) => {\n if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n return item;\n } else if (qualifyFn(item)) {\n return `${item}|0`;\n } else {\n return item;\n }\n });\n }\n\n return {\n name: 'SQL',\n case_insensitive: true,\n // does not include {} or HTML tags `</`\n illegal: /[{}]|<\\//,\n keywords: {\n $pattern: /\\b[\\w\\.]+/,\n keyword:\n reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n literal: LITERALS,\n type: TYPES,\n built_in: POSSIBLE_WITHOUT_PARENS\n },\n contains: [\n {\n scope: \"type\",\n match: kws_to_regex(MULTI_WORD_TYPES)\n },\n MULTI_WORD_KEYWORDS,\n FUNCTION_CALL,\n VARIABLE,\n STRING,\n QUOTED_IDENTIFIER,\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n OPERATOR\n ]\n };\n}\n\nexport { sql as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"self\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\",\n \"await\",\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-Za-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const regex = hljs.regex;\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n \"any\",\n \"void\",\n \"number\",\n \"boolean\",\n \"string\",\n \"object\",\n \"never\",\n \"symbol\",\n \"bigint\",\n \"unknown\"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n };\n const INTERFACE = {\n beginKeywords: 'interface',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: 'interface extends',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use strict['\"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n \"type\",\n // \"namespace\",\n \"interface\",\n \"public\",\n \"private\",\n \"protected\",\n \"implements\",\n \"declare\",\n \"abstract\",\n \"readonly\",\n \"enum\",\n \"override\",\n \"satisfies\"\n ];\n /*\n namespace is a TS keyword but it's fine to use it as a variable name too.\n const message = 'foo';\n const namespace = 'bar';\n */\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n const DECORATOR = {\n className: 'meta',\n begin: '@' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n // take default attr rule and extend it to support optionals\n const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n ATTRIBUTE_HIGHLIGHT,\n { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n );\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // Add the optional property assignment highlighting for objects or classes\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: 'TypeScript',\n aliases: [\n 'ts',\n 'tsx',\n 'mts',\n 'cts'\n ]\n });\n\n return tsLanguage;\n}\n\nexport { typescript as default };\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: 'css'\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: 'javascript'\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n","/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n const LITERALS = 'true false yes no null';\n\n // YAML spec allows non-reserved URI characters in tags.\n const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n // Define keys as starting with a word character\n // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n // ...and ending with a colon followed immediately by a space, tab or newline.\n // The YAML spec allows for much more than this, but this covers most use-cases.\n const KEY = {\n className: 'attr',\n variants: [\n // added brackets support and special char support\n { begin: /[\\w*@][\\w*@ :()\\./-]*:(?=[ \\t]|$)/ },\n { // double quoted keys - with brackets and special char support\n begin: /\"[\\w*@][\\w*@ :()\\./-]*\":(?=[ \\t]|$)/ },\n { // single quoted keys - with brackets and special char support\n begin: /'[\\w*@][\\w*@ :()\\./-]*':(?=[ \\t]|$)/ },\n ]\n };\n \n const TEMPLATE_VARIABLES = {\n className: 'template-variable',\n variants: [\n { // jinja templates Ansible\n begin: /\\{\\{/,\n end: /\\}\\}/\n },\n { // Ruby i18n\n begin: /%\\{/,\n end: /\\}/\n }\n ]\n };\n\n const SINGLE_QUOTE_STRING = {\n className: 'string',\n relevance: 0,\n begin: /'/,\n end: /'/,\n contains: [\n {\n match: /''/,\n scope: 'char.escape',\n relevance: 0\n }\n ]\n };\n\n const STRING = {\n className: 'string',\n relevance: 0,\n variants: [\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /\\S+/ }\n ],\n contains: [\n hljs.BACKSLASH_ESCAPE,\n TEMPLATE_VARIABLES\n ]\n };\n\n // Strings inside of value containers (objects) can't contain braces,\n // brackets, or commas\n const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [\n {\n begin: /''/,\n relevance: 0\n }\n ]\n },\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /[^\\s,{}[\\]]+/ }\n ] });\n\n const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n const FRACTION_RE = '(\\\\.[0-9]*)?';\n const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n const TIMESTAMP = {\n className: 'number',\n begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n };\n\n const VALUE_CONTAINER = {\n end: ',',\n endsWithParent: true,\n excludeEnd: true,\n keywords: LITERALS,\n relevance: 0\n };\n const OBJECT = {\n begin: /\\{/,\n end: /\\}/,\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n const ARRAY = {\n begin: '\\\\[',\n end: '\\\\]',\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n\n const MODES = [\n KEY,\n {\n className: 'meta',\n begin: '^---\\\\s*$',\n relevance: 10\n },\n { // multi line string\n // Blocks start with a | or > followed by a newline\n //\n // Indentation of subsequent lines must be the same to\n // be considered part of the block\n className: 'string',\n begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n },\n { // Ruby/Rails erb\n begin: '<%[%=-]?',\n end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n { // named tags\n className: 'type',\n begin: '!\\\\w+!' + URI_CHARACTERS\n },\n // https://yaml.org/spec/1.2/spec.html#id2784064\n { // verbatim tags\n className: 'type',\n begin: '!<' + URI_CHARACTERS + \">\"\n },\n { // primary tags\n className: 'type',\n begin: '!' + URI_CHARACTERS\n },\n { // secondary tags\n className: 'type',\n begin: '!!' + URI_CHARACTERS\n },\n { // fragment id &ref\n className: 'meta',\n begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // fragment reference *ref\n className: 'meta',\n begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // array listing\n className: 'bullet',\n // TODO: remove |$ hack when we have proper look-ahead support\n begin: '-(?=[ ]|$)',\n relevance: 0\n },\n hljs.HASH_COMMENT_MODE,\n {\n beginKeywords: LITERALS,\n keywords: { literal: LITERALS }\n },\n TIMESTAMP,\n // numbers are any valid C-style number that\n // sit isolated from other words\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE + '\\\\b',\n relevance: 0\n },\n OBJECT,\n ARRAY,\n SINGLE_QUOTE_STRING,\n STRING\n ];\n\n const VALUE_MODES = [ ...MODES ];\n VALUE_MODES.pop();\n VALUE_MODES.push(CONTAINER_STRING);\n VALUE_CONTAINER.contains = VALUE_MODES;\n\n return {\n name: 'YAML',\n case_insensitive: true,\n aliases: [ 'yml' ],\n contains: MODES\n };\n}\n\nexport { yaml as default };\n","/**\n * Syntax highlighting for the file preview. Uses highlight.js core with a\n * hand-picked set of common languages so the bundle stays lean; unknown\n * languages fall back to plain (HTML-escaped) text.\n */\nimport hljs from 'highlight.js/lib/core'\nimport bash from 'highlight.js/lib/languages/bash'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport css from 'highlight.js/lib/languages/css'\nimport go from 'highlight.js/lib/languages/go'\nimport ini from 'highlight.js/lib/languages/ini'\nimport java from 'highlight.js/lib/languages/java'\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport json from 'highlight.js/lib/languages/json'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport python from 'highlight.js/lib/languages/python'\nimport rust from 'highlight.js/lib/languages/rust'\nimport sql from 'highlight.js/lib/languages/sql'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport xml from 'highlight.js/lib/languages/xml'\nimport yaml from 'highlight.js/lib/languages/yaml'\n\nhljs.registerLanguage('bash', bash)\nhljs.registerLanguage('cpp', cpp)\nhljs.registerLanguage('csharp', csharp)\nhljs.registerLanguage('css', css)\nhljs.registerLanguage('go', go)\nhljs.registerLanguage('ini', ini)\nhljs.registerLanguage('java', java)\nhljs.registerLanguage('javascript', javascript)\nhljs.registerLanguage('json', json)\nhljs.registerLanguage('markdown', markdown)\nhljs.registerLanguage('python', python)\nhljs.registerLanguage('rust', rust)\nhljs.registerLanguage('sql', sql)\nhljs.registerLanguage('typescript', typescript)\nhljs.registerLanguage('xml', xml)\nhljs.registerLanguage('yaml', yaml)\n\nconst EXTENSION_TO_LANGUAGE: Record<string, string> = {\n js: 'javascript', jsx: 'javascript', mjs: 'javascript', cjs: 'javascript',\n ts: 'typescript', tsx: 'typescript', mts: 'typescript', cts: 'typescript',\n py: 'python', pyw: 'python',\n json: 'json', jsonc: 'json',\n html: 'xml', htm: 'xml', xml: 'xml', svg: 'xml', vue: 'xml',\n css: 'css', scss: 'css', less: 'css',\n md: 'markdown', markdown: 'markdown',\n sh: 'bash', bash: 'bash', zsh: 'bash',\n java: 'java',\n c: 'cpp', h: 'cpp', cc: 'cpp', cpp: 'cpp', hpp: 'cpp',\n cs: 'csharp',\n go: 'go',\n rs: 'rust',\n sql: 'sql',\n yml: 'yaml', yaml: 'yaml',\n ini: 'ini', conf: 'ini',\n}\n\n/** Map a file path to a registered highlight.js language id, or undefined. */\nexport function detectLanguage(path: string): string | undefined {\n const idx = path.lastIndexOf('.')\n if (idx < 0) return undefined\n const ext = path.slice(idx + 1).toLowerCase()\n return EXTENSION_TO_LANGUAGE[ext]\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n\n/** True when a language id names a registered highlight.js language. */\nexport function canHighlight(language: string): boolean {\n return language !== '' && hljs.getLanguage(language) !== undefined\n}\n\n/** Highlight code for a file; returns safe HTML (code is HTML-escaped). */\nexport function highlightCode(code: string, path: string): string {\n const language = detectLanguage(path)\n if (language !== undefined && hljs.getLanguage(language) !== undefined) {\n try {\n return hljs.highlight(code, { language, ignoreIllegals: true }).value\n } catch {\n // fall through to plain text\n }\n }\n return escapeHtml(code)\n}\n\n/** Highlight a fenced code block by its declared language; escaped plain text when unknown. */\nexport function highlightFence(code: string, language: string): string {\n if (canHighlight(language)) {\n try {\n return hljs.highlight(code, { language, ignoreIllegals: true }).value\n } catch {\n // fall through to escaped text\n }\n }\n return escapeHtml(code)\n}\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","import decode from './lib/decode.mjs'\nimport encode from './lib/encode.mjs'\nimport format from './lib/format.mjs'\nimport parse from './lib/parse.mjs'\n\nexport {\n decode,\n encode,\n format,\n parse\n}\n","const Any = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nconst Cc = /[\\0-\\x1F\\x7F-\\x9F]/;\nconst Cf = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;\nconst P = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B4E\\u1B4F\\u1B5A-\\u1B60\\u1B7D-\\u1B7F\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDD6E\\uDEAD\\uDED0\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9\\uDFD4\\uDFD5\\uDFD7\\uDFD8]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09\\uDFE1]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDD6D-\\uDD6F\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD839\\uDDFF|\\uD83A[\\uDD5E\\uDD5F]/;\nconst S = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C1\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2429\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E5\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD803[\\uDD8E\\uDD8F\\uDED1-\\uDED8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDC00-\\uDCEF\\uDCFA-\\uDCFC\\uDD00-\\uDEB3\\uDEBA-\\uDED0\\uDEE0-\\uDEF0\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED8\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0-\\uDCBB\\uDCC0\\uDCC1\\uDCD0-\\uDCD8\\uDD00-\\uDE57\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFEF\\uDFFA]/;\nconst Z = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n\nexport { Any, Cc, Cf, P, S, Z };\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint) {\n if ((codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff) {\n return 0xff_fd;\n }\n return decodeMap.get(codePoint) ?? codePoint;\n}\n//# sourceMappingURL=decode-codepoint.js.map","/**\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n * @param input Input string to encode or decode.\n */\nexport function decodeBase64(input) {\n const binary = atob(input);\n const evenLength = binary.length & ~1; // Round down to even length\n const out = new Uint16Array(evenLength / 2);\n for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n const lo = binary.charCodeAt(index);\n const hi = binary.charCodeAt(index + 1);\n out[outIndex++] = lo | (hi << 8);\n }\n return out;\n}\n//# sourceMappingURL=decode-shared.js.map","// Generated using scripts/write-decode-map.ts\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree = /* #__PURE__ */ decodeBase64(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\");\n//# sourceMappingURL=decode-data-html.js.map","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n * If valueLength==0: compact run flag.\n * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"FLAG13\"] = 8192] = \"FLAG13\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 8064] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\n//# sourceMappingURL=bin-trie-flags.js.map","import { replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param code Code point to decode.\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\n/**\n * Decoding mode for named entities.\n */\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n decodeTree;\n emitCodePoint;\n errors;\n constructor(\n /** The tree used to decode entities. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n }\n /** The current state of the decoder. */\n state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n result = 0;\n /** The current index in the decode tree. */\n treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n excess = 1;\n /** The mode in which the decoder is operating. */\n decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n runConsumed = 0;\n /**\n * Resets the instance to make it reusable.\n * @param decodeMode Entity decoding mode to use.\n */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit = char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n this.result = this.result * 16 + digit;\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 3);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n this.result = this.result * 10 + (char - CharCodes.ZERO);\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 2);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The length is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n while (offset < input.length) {\n // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n // If we are starting a run, check the first char.\n if (this.runConsumed === 0) {\n const firstChar = current & BinTrieFlags.JUMP_TABLE;\n if (input.charCodeAt(offset) !== firstChar) {\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n // Check remaining characters in the run.\n while (this.runConsumed < runLength) {\n if (offset >= input.length) {\n return -1;\n }\n const charIndexInPacked = this.runConsumed - 1;\n const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];\n const expectedChar = charIndexInPacked % 2 === 0\n ? packedWord & 0xff\n : (packedWord >> 8) & 0xff;\n if (input.charCodeAt(offset) !== expectedChar) {\n this.runConsumed = 0;\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n this.runConsumed = 0;\n this.treeIndex += 1 + (runLength >> 1);\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n }\n if (offset >= input.length)\n break;\n const char = input.charCodeAt(offset);\n /*\n * Implicit semicolon handling for nodes that require a semicolon but\n * don't have an explicit ';' branch stored in the trie. If we have\n * a value on the current node, it requires a semicolon, and the\n * current input character is a semicolon, emit the entity using the\n * current node (without descending further).\n */\n if (char === CharCodes.SEMI &&\n valueLength !== 0 &&\n (current & BinTrieFlags.FLAG13) !== 0) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict &&\n (current & BinTrieFlags.FLAG13) === 0) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n // Increment offset & excess for next iteration\n offset++;\n this.excess++;\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] &\n ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n * @returns The number of characters consumed.\n */\n end() {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += String.fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIndex Index immediately after the current node header.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n const packedKeySlots = (branchCount + 1) >> 1;\n /*\n * Treat packed keys as a virtual sorted array of length `branchCount`.\n * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n */\n let lo = 0;\n let hi = branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const slot = mid >> 1;\n const packed = decodeTree[nodeIndex + slot];\n const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n if (midKey < char) {\n lo = mid + 1;\n }\n else if (midKey > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[nodeIndex + packedKeySlots + mid];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\nexport { replaceCodePoint } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n//# sourceMappingURL=decode.js.map","import { Any, Cc, P, Z } from \"uc.micro\";\n//#region src/rebuilder.ts\nvar REBuilder = class {\n\tsrc_Any = Any.source;\n\tsrc_Cc = Cc.source;\n\tsrc_Z = Z.source;\n\tsrc_P = P.source;\n\tsrc_ZPCc = [\n\t\tthis.src_Z,\n\t\tthis.src_P,\n\t\tthis.src_Cc\n\t].join(\"|\");\n\tsrc_ZCc = [this.src_Z, this.src_Cc].join(\"|\");\n\tcache = {};\n\topts = {\n\t\tmaxLength: 1e4,\n\t\turlAuth: false,\n\t\tschema_names: []\n\t};\n\tconstructor(opts = {}) {\n\t\tthis.opts = {\n\t\t\t...this.opts,\n\t\t\t...opts\n\t\t};\n\t}\n\tset(opts = {}) {\n\t\tthis.opts = {\n\t\t\t...this.opts,\n\t\t\t...opts\n\t\t};\n\t\tthis.cache = {};\n\t\treturn this;\n\t}\n\tescapeRE(str) {\n\t\treturn str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n\t}\n\tnestedPairRE(open, close, depth = 4) {\n\t\tconst openRE = this.escapeRE(open);\n\t\tconst closeRE = this.escapeRE(close);\n\t\tconst atom = `(?:(?!${this.src_ZCc}|${openRE}|${closeRE}).)`;\n\t\tlet pair = `${openRE}${atom}{0,1000}${closeRE}`;\n\t\tfor (let level = 2; level <= depth; level++) pair = `${openRE}(?:${atom}|${pair}){0,1000}${closeRE}`;\n\t\treturn pair;\n\t}\n\tget_text_separators() {\n\t\treturn this.cache.text_separators ??= /[><\\uff5c]/;\n\t}\n\tget_pseudo_letter() {\n\t\treturn this.cache.src_pseudo_letter ??= new RegExp(`(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`);\n\t}\n\tget_ipv4_addr() {\n\t\treturn this.cache.src_ip4 ??= /* @__PURE__ */ new RegExp(\"(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\");\n\t}\n\tget_ipv6_addr() {\n\t\tconst h16 = \"[0-9A-Fa-f]{1,4}\";\n\t\tconst ls32 = `(?:(?:${h16}:${h16})|${this.get_ipv4_addr().source})`;\n\t\treturn this.cache.src_ip6_addr ??= new RegExp(`(?:(?:${h16}:){6}${ls32}|::(?:${h16}:){5}${ls32}|(?:${h16})?::(?:${h16}:){4}${ls32}|(?:(?:${h16}:){0,1}${h16})?::(?:${h16}:){3}${ls32}|(?:(?:${h16}:){0,2}${h16})?::(?:${h16}:){2}${ls32}|(?:(?:${h16}:){0,3}${h16})?::${h16}:${ls32}|(?:(?:${h16}:){0,4}${h16})?::${ls32}|(?:(?:${h16}:){0,5}${h16})?::${h16}|(?:(?:${h16}:){0,6}${h16})?::)`);\n\t}\n\tget_ipv6_url_host() {\n\t\treturn this.cache.src_ip6_host ??= new RegExp(`\\\\[${this.get_ipv6_addr().source}\\\\]`);\n\t}\n\tget_ipv6_mail_host() {\n\t\treturn this.cache.src_ipv6_mail_host ??= new RegExp(`\\\\[IPv6:${this.get_ipv6_addr().source}\\\\]`);\n\t}\n\tget_auth() {\n\t\treturn this.cache.src_auth ??= new RegExp(`(?:(?:(?!${this.src_ZCc}|[@/\\\\[\\\\]()]).){1,50}@)?`);\n\t}\n\tget_port() {\n\t\treturn this.cache.src_port ??= /* @__PURE__ */ new RegExp(\"(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?\");\n\t}\n\tget_host_terminator() {\n\t\treturn this.cache.src_host_terminator ??= new RegExp(`(?=$|${this.get_text_separators().source}|${this.src_ZPCc})(?!${this.opts[\"---\"] ? \"-(?!--)|\" : \"-|\"}_|:\\\\d|\\\\.-|\\\\.(?!$|${this.src_ZPCc}))`);\n\t}\n\tget_path_terminator() {\n\t\treturn this.cache.src_path_terminator ??= new RegExp(`${this.src_ZPCc}|${this.get_text_separators().source}`);\n\t}\n\tget_path() {\n\t\treturn this.cache.src_path ??= new RegExp(`(?:[/?#](?:${this.nestedPairRE(\"[\", \"]\")}|${this.nestedPairRE(\"(\", \")\")}|${this.nestedPairRE(\"{\", \"}\")}|\\\\\"(?:(?!${this.src_ZCc}|[\"]).){1,100}\\\\\"|\\\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\\\'|\\\\'(?=${this.get_pseudo_letter().source}|[-])|\\\\.{2,20}[:]?[a-zA-Z0-9%/&]|\\\\.(?!${this.src_ZCc}|[.]|$)|` + (this.opts[\"---\"] ? \"\\\\-(?!--(?:[^-]|$))(?:-{0,19})|\" : \"\\\\-{1,20}|\") + `,(?!${this.src_ZCc}|$)|;(?!${this.src_ZCc}|$)|\\\\!{1,20}(?!${this.src_ZCc}|[!]|$)|\\\\?(?!${this.src_ZCc}|[?]|$)|` + this.get_path_extra().source + `[\\\\\\\\/:%@#&=_~*]|(?!${this.get_path_terminator().source}).){1,${this.opts.maxLength}}|\\\\/)?`);\n\t}\n\tget_mail_name() {\n\t\treturn this.cache.src_mail_name ??= /* @__PURE__ */ new RegExp(\"[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}\");\n\t}\n\tget_xn() {\n\t\treturn this.cache.src_xn ??= /* @__PURE__ */ new RegExp(\"xn--[a-z0-9\\\\-]{1,59}\");\n\t}\n\tget_tld() {\n\t\tif (this.cache.tld) return this.cache.tld;\n\t\tconst tlds_src = [...new Set(this.opts.tlds || [])].sort().reverse().join(\"|\");\n\t\tthis.cache.tld = new RegExp(`${tlds_src || \"$#none#$\"}|${this.get_xn().source}`);\n\t\treturn this.cache.tld;\n\t}\n\tget_domain_root() {\n\t\treturn this.cache.src_domain_root ??= new RegExp(\"(?:\" + this.get_xn().source + `|${this.get_pseudo_letter().source}{1,63})`);\n\t}\n\tget_domain() {\n\t\treturn this.cache.src_domain ??= new RegExp(\"(?:\" + this.get_xn().source + `|(?:${this.get_pseudo_letter().source})|(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source}))`);\n\t}\n\tget_url_host_port() {\n\t\treturn this.cache.url_host_port ??= new RegExp(\"(?:\" + this.get_ipv6_url_host().source + `|(?:(?:(?:${this.get_domain().source})\\\\.){0,10}${this.get_domain().source}))` + this.get_port().source + this.get_host_terminator().source);\n\t}\n\tget_fuzzy_url_host_port() {\n\t\treturn this.cache.fuzzy_url_host_port ??= new RegExp(\"(?:\" + (this.opts.fuzzyIP ? this.get_ipv4_addr().source + \"|\" : \"\") + `(?:(?:(?:${this.get_domain().source})\\\\.){1,10}(?:${this.get_tld().source})))` + this.get_host_terminator().source);\n\t}\n\tget_mail_host() {\n\t\treturn this.cache.src_mail_host ??= new RegExp(\"(?:\" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})\\\\.){0,4}${this.get_domain().source}))` + this.get_host_terminator().source);\n\t}\n\tget_fuzzy_mail_host() {\n\t\treturn this.cache.src_fuzzy_mail_host ??= new RegExp(\"(?:\" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source}))` + this.get_host_terminator().source);\n\t}\n\tget_path_extra() {\n\t\treturn this.cache.src_path_extra ??= /* @__PURE__ */ new RegExp(\"\");\n\t}\n\tget_fuzzy_mail_host_search() {\n\t\treturn this.cache.mail_fuzzy_host_search ??= new RegExp(`@${this.get_fuzzy_mail_host().source}`, \"ig\");\n\t}\n\tget_fuzzy_link_search() {\n\t\treturn this.cache.link_fuzzy_search ??= new RegExp(`(^|(?![.:/\\\\-_@])(?:[$+<=>^\\`|\\uff5c]|${this.src_ZPCc}))(?:(?![$+<=>^\\`|\\uff5c])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`, \"ig\");\n\t}\n\tget_http_validator() {\n\t\treturn this.cache.http_validator ??= new RegExp(\"\\\\/\\\\/\" + (this.opts.urlAuth ? this.get_auth().source : \"\") + this.get_url_host_port().source + this.get_path().source, \"iy\");\n\t}\n\tget_relative_proto_validator() {\n\t\treturn this.cache.relative_proto_validator ??= new RegExp((this.opts.urlAuth ? this.get_auth().source : \"\") + `(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})` + this.get_port().source + this.get_host_terminator().source + this.get_path().source, \"iy\");\n\t}\n\tget_mail_name_validator() {\n\t\treturn this.cache.mail_name_validator ??= new RegExp(`(?:^|${this.get_text_separators().source}|\"|\\\\(|${this.src_ZCc})(${this.get_mail_name().source})$`);\n\t}\n\tget_mailto_validator() {\n\t\treturn this.cache.mailto_validator ??= new RegExp(`${this.get_mail_name().source}@${this.get_mail_host().source}`, \"iy\");\n\t}\n\tget_schema_names() {\n\t\treturn this.cache.schema_names ??= new RegExp((this.opts.schema_names || []).map((name) => this.escapeRE(name)).join(\"|\"));\n\t}\n\tget_schema_search() {\n\t\treturn this.cache.schema_search ??= new RegExp(`(^|(?!_)(?:[><\\uff5c]|${this.src_ZPCc}))(${this.get_schema_names().source})`, \"ig\");\n\t}\n\tget_schema_at_start() {\n\t\treturn this.cache.schema_at_start ??= new RegExp(`^${this.get_schema_search().source}`, \"i\");\n\t}\n};\n//#endregion\n//#region src/linkifyit.ts\nvar web_schema = {\n\tvalidate: (text, pos, self) => {\n\t\tconst re = self.re.get_http_validator();\n\t\tre.lastIndex = pos;\n\t\tconst m = re.exec(text);\n\t\treturn m ? m[0].length : 0;\n\t},\n\tnormalize: (match, self) => self.normalize(match)\n};\nvar defaultSchemas = {\n\t\"http:\": web_schema,\n\t\"https:\": web_schema,\n\t\"ftp:\": web_schema,\n\t\"//\": {\n\t\tvalidate: function(text, pos, self) {\n\t\t\tconst re = self.re.get_relative_proto_validator();\n\t\t\tre.lastIndex = pos;\n\t\t\tconst m = re.exec(text);\n\t\t\tif (m) {\n\t\t\t\tif (pos >= 3 && text[pos - 3] === \":\") return 0;\n\t\t\t\tif (pos >= 3 && text[pos - 3] === \"/\") return 0;\n\t\t\t\treturn m[0].length;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tnormalize: (match, self) => self.normalize(match)\n\t},\n\t\"mailto:\": {\n\t\tvalidate: function(text, pos, self) {\n\t\t\tconst re = self.re.get_mailto_validator();\n\t\t\tre.lastIndex = pos;\n\t\t\tconst m = re.exec(text);\n\t\t\treturn m ? m[0].length : 0;\n\t\t},\n\t\tnormalize: (match, self) => self.normalize(match)\n\t}\n};\nvar tlds_2ch = \"a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw\";\nvar tlds_default = \"biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\";\nfunction unpackTlds() {\n\tconst result = tlds_default.split(\"|\");\n\ttlds_2ch.split(\"|\").forEach((item) => {\n\t\tconst sep = item.indexOf(\":\");\n\t\tconst prefix = item.slice(0, sep);\n\t\tfor (const suffix of item.slice(sep + 1)) result.push(prefix + suffix);\n\t});\n\treturn result;\n}\nvar defaultOptions = {\n\tfuzzyLink: false,\n\tfuzzyEmail: true,\n\tfuzzyIP: false,\n\t\"---\": false,\n\ttlds: unpackTlds(),\n\turlAuth: false,\n\tmaxLength: 1e4\n};\n/**\n* Match result returned by {@link LinkifyIt.match} and\n* {@link LinkifyIt.matchAtStart}.\n*\n* @category types\n*/\nvar Match = class {\n\t/** Prefix (protocol) for matched string. Empty for fuzzy links. */\n\tschema;\n\t/** First position of matched string. */\n\tindex;\n\t/** Next position after matched string. */\n\tlastIndex;\n\t/** Matched string. */\n\traw;\n\t/** Normalized text of matched string. */\n\ttext;\n\t/** Normalized URL of matched string. */\n\turl;\n\tconstructor(text, schema, index, lastIndex) {\n\t\tconst raw = text.slice(index, lastIndex);\n\t\tthis.schema = schema.toLowerCase();\n\t\tthis.index = index;\n\t\tthis.lastIndex = lastIndex;\n\t\tthis.raw = raw;\n\t\tthis.text = raw;\n\t\tthis.url = raw;\n\t}\n};\n/** Linkifier instance. */\nvar LinkifyIt = class {\n\t__opts__;\n\t__schemas__;\n\tre;\n\t/**\n\t* Creates new linkifier instance.\n\t*\n\t* By default understands:\n\t*\n\t* - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n\t* - \"fuzzy\" emails (foo@bar.com).\n\t*\n\t* See {@link LinkifyConstructorOptions} for available options.\n\t*\n\t* @param options Recognition options.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { LinkifyIt } from 'linkify-it'\n\t*\n\t* const linkify = new LinkifyIt({ fuzzyLink: true })\n\t*\n\t* linkify\n\t* .tlds(require('tlds')) // Reload with full TLD list\n\t* .tlds('onion', true) // Add unofficial `.onion` domain\n\t* .add('ftp:', null) // Disable `ftp:` protocol\n\t* .set({ fuzzyIP: true }) // Enable IPs in fuzzy links\n\t*\n\t* console.log(linkify.test('Site github.com!')) // true\n\t* console.log(linkify.match('Site github.com!'))\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tconst { rebuilder, ...linkifyOptions } = options;\n\t\tthis.__opts__ = {\n\t\t\t...defaultOptions,\n\t\t\t...linkifyOptions\n\t\t};\n\t\tthis.__schemas__ = { ...defaultSchemas };\n\t\tthis.re = rebuilder || new REBuilder();\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t}\n\t/**\n\t* Add new rule definition.\n\t*\n\t* `schema` is a link prefix (usually, protocol name with `:` at the end,\n\t* `skype:` for example). `linkify-it` makes sure that prefix is not\n\t* preceded with alphanumeric char and symbols. Only whitespaces and\n\t* punctuation allowed.\n\t*\n\t* `definition` is a rule to check tail after link prefix. To disable an\n\t* existing rule, pass `null`.\n\t*\n\t* @param schema Rule name (fixed pattern prefix).\n\t* @param definition Schema definition, or `null` to disable the rule.\n\t*\n\t* See [twitter mentions example](https://github.com/markdown-it/linkify-it/blob/master/examples/twitter.mjs).\n\t*/\n\tadd(schema, definition = null) {\n\t\tif (!definition) delete this.__schemas__[schema];\n\t\telse {\n\t\t\tconst def = {\n\t\t\t\tnormalize: (match, self) => self.normalize(match),\n\t\t\t\t...definition\n\t\t\t};\n\t\t\tthis.__schemas__[schema] = def;\n\t\t}\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Set recognition options for links without schema.\n\t*\n\t* @param options Recognition options.\n\t*/\n\tset(options = {}) {\n\t\tthis.__opts__ = {\n\t\t\t...this.__opts__,\n\t\t\t...options\n\t\t};\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Searches linkifiable pattern and returns `true` on success or `false` on fail.\n\t*\n\t* @param text Text to scan.\n\t*/\n\ttest(text) {\n\t\tif (!text.length) return false;\n\t\tlet m, re;\n\t\tre = this.re.get_schema_search();\n\t\tre.lastIndex = 0;\n\t\twhile ((m = re.exec(text)) !== null) if (this.testSchemaAt(text, m[2], re.lastIndex)) return true;\n\t\tif (this.__opts__.fuzzyLink && this.__schemas__[\"http:\"]) {\n\t\t\tre = this.re.get_fuzzy_link_search();\n\t\t\tre.lastIndex = 0;\n\t\t\tif (re.exec(text) !== null) return true;\n\t\t}\n\t\tif (this.__opts__.fuzzyEmail && this.__schemas__[\"mailto:\"]) {\n\t\t\tif (text.indexOf(\"@\") >= 0) {\n\t\t\t\tconst mailHostRe = this.re.get_fuzzy_mail_host_search();\n\t\t\t\tconst mailNameRe = this.re.get_mail_name_validator();\n\t\t\t\tmailHostRe.lastIndex = 0;\n\t\t\t\twhile ((m = mailHostRe.exec(text)) !== null) {\n\t\t\t\t\tconst name = text.slice(Math.max(0, m.index - 65), m.index);\n\t\t\t\t\tif (mailNameRe.test(name)) return true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Similar to {@link LinkifyIt.test} but checks only specific protocol tail exactly\n\t* at given position. Returns length of found pattern (0 on fail).\n\t*\n\t* @param text Text to scan.\n\t* @param schema Rule (schema) name.\n\t* @param pos Text offset to check from.\n\t*/\n\ttestSchemaAt(text, schema, pos) {\n\t\tif (!this.__schemas__[schema.toLowerCase()]) return 0;\n\t\treturn this.__schemas__[schema.toLowerCase()].validate(text.slice(0, pos + this.__opts__.maxLength), pos, this);\n\t}\n\t/**\n\t* Returns array of found link descriptions or `null` on fail. We strongly\n\t* recommend to use {@link LinkifyIt.test} first, for best speed.\n\t*\n\t* @param text Text to scan.\n\t*/\n\tmatch(text) {\n\t\tconst result = [];\n\t\tconst schemaRe = this.re.get_schema_search();\n\t\tlet fuzzyLinkRe;\n\t\tlet mailHostRe;\n\t\tlet mailNameRe;\n\t\tlet fuzzyLinkCandidate;\n\t\tlet fuzzyEmailCandidate;\n\t\tlet schemaPrefix;\n\t\tlet schemaDone = false;\n\t\tlet fuzzyLinkDone = false;\n\t\tlet fuzzyEmailDone = false;\n\t\tlet pos = 0;\n\t\tif (!text.length) return null;\n\t\tschemaRe.lastIndex = 0;\n\t\tif (this.__opts__.fuzzyLink && this.__schemas__[\"http:\"]) {\n\t\t\tfuzzyLinkRe = this.re.get_fuzzy_link_search();\n\t\t\tfuzzyLinkRe.lastIndex = 0;\n\t\t}\n\t\tif (this.__opts__.fuzzyEmail && this.__schemas__[\"mailto:\"]) {\n\t\t\tmailHostRe = this.re.get_fuzzy_mail_host_search();\n\t\t\tmailHostRe.lastIndex = 0;\n\t\t\tmailNameRe = this.re.get_mail_name_validator();\n\t\t}\n\t\tfor (;;) {\n\t\t\tconst scanFrom = Math.max(pos - 1, 0);\n\t\t\tif (mailHostRe && mailNameRe && !fuzzyEmailDone && (!fuzzyEmailCandidate || fuzzyEmailCandidate.index < pos)) {\n\t\t\t\tif (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst m = mailHostRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tfuzzyEmailDone = true;\n\t\t\t\t\t\tfuzzyEmailCandidate = void 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst name = mailNameRe.exec(text.slice(Math.max(0, m.index - 65), m.index));\n\t\t\t\t\tif (!name) continue;\n\t\t\t\t\tfuzzyEmailCandidate = {\n\t\t\t\t\t\tschema: \"mailto:\",\n\t\t\t\t\t\tindex: m.index - name[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t\tif (fuzzyEmailCandidate.index >= pos) break;\n\t\t\t\t\tif (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fuzzyLinkRe && !fuzzyLinkDone && (!fuzzyLinkCandidate || fuzzyLinkCandidate.index < pos)) {\n\t\t\t\tif (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst m = fuzzyLinkRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tfuzzyLinkDone = true;\n\t\t\t\t\t\tfuzzyLinkCandidate = void 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfuzzyLinkCandidate = {\n\t\t\t\t\t\tschema: \"\",\n\t\t\t\t\t\tindex: m.index + m[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t\tif (fuzzyLinkCandidate.index >= pos) break;\n\t\t\t\t\tif (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet fuzzyCandidate = fuzzyEmailCandidate;\n\t\t\tif (!fuzzyCandidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < fuzzyCandidate.index || fuzzyLinkCandidate.index === fuzzyCandidate.index && fuzzyLinkCandidate.lastIndex > fuzzyCandidate.lastIndex)) fuzzyCandidate = fuzzyLinkCandidate;\n\t\t\tlet schemaCandidate;\n\t\t\tif (!schemaDone) for (;;) {\n\t\t\t\tif (!schemaPrefix) {\n\t\t\t\t\tif (schemaRe.lastIndex < scanFrom) schemaRe.lastIndex = scanFrom;\n\t\t\t\t\tconst m = schemaRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tschemaDone = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tschemaPrefix = {\n\t\t\t\t\t\tschema: m[2],\n\t\t\t\t\t\tindex: m.index + m[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (schemaPrefix.index < pos) {\n\t\t\t\t\tschemaPrefix = void 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (fuzzyCandidate && schemaPrefix.index > fuzzyCandidate.index) break;\n\t\t\t\tconst prefix = schemaPrefix;\n\t\t\t\tschemaPrefix = void 0;\n\t\t\t\tconst len = this.testSchemaAt(text, prefix.schema, prefix.lastIndex);\n\t\t\t\tif (len) {\n\t\t\t\t\tschemaCandidate = {\n\t\t\t\t\t\tschema: prefix.schema,\n\t\t\t\t\t\tindex: prefix.index,\n\t\t\t\t\t\tlastIndex: prefix.lastIndex + len\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet candidate = schemaCandidate;\n\t\t\tif (!candidate || fuzzyEmailCandidate && (fuzzyEmailCandidate.index < candidate.index || fuzzyEmailCandidate.index === candidate.index && fuzzyEmailCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyEmailCandidate;\n\t\t\tif (!candidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < candidate.index || fuzzyLinkCandidate.index === candidate.index && fuzzyLinkCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyLinkCandidate;\n\t\t\tif (!candidate) break;\n\t\t\tif (candidate === fuzzyEmailCandidate) fuzzyEmailCandidate = void 0;\n\t\t\telse if (candidate === fuzzyLinkCandidate) fuzzyLinkCandidate = void 0;\n\t\t\tconst match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);\n\t\t\tif (match.schema) this.__schemas__[match.schema].normalize(match, this);\n\t\t\telse this.normalize(match);\n\t\t\tresult.push(match);\n\t\t\tpos = candidate.lastIndex;\n\t\t}\n\t\tif (result.length) return result;\n\t\treturn null;\n\t}\n\t/**\n\t* Returns fully-formed (not fuzzy) link if it starts at the beginning\n\t* of the string, and null otherwise.\n\t*\n\t* @param text Text to scan.\n\t*/\n\tmatchAtStart(text) {\n\t\tif (!text.length) return null;\n\t\tconst m = this.re.get_schema_at_start().exec(text);\n\t\tif (!m) return null;\n\t\tconst len = this.testSchemaAt(text, m[2], m[0].length);\n\t\tif (!len) return null;\n\t\tconst match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);\n\t\tthis.__schemas__[match.schema].normalize(match, this);\n\t\treturn match;\n\t}\n\t/**\n\t* Load (or merge) new TLDs list. Those are used for fuzzy links (without\n\t* prefix) to avoid false positives. By default this algorithm is used:\n\t*\n\t* - hostname with any 2-letter root zones are ok.\n\t* - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n\t* are ok.\n\t* - encoded (`xn--...`) root zones are ok.\n\t*\n\t* If list is replaced, then exact match for 2-chars root zones will be checked.\n\t*\n\t* @param list List of TLDs.\n\t* @param keepOld Merge with current list if `true` (`false` by default).\n\t*/\n\ttlds(list, keepOld = false) {\n\t\tlist = Array.isArray(list) ? list : [list];\n\t\tif (!keepOld) this.__opts__.tlds = list;\n\t\telse this.__opts__.tlds = this.__opts__.tlds.concat(list);\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Default normalizer (if schema does not define its own).\n\t*\n\t* @param match Match to normalize.\n\t*/\n\tnormalize(match) {\n\t\tif (!match.schema) match.url = `http://${match.url}`;\n\t\tif (match.schema === \"mailto:\" && !/^mailto:/i.test(match.url)) match.url = `mailto:${match.url}`;\n\t}\n};\nfunction linkifyit(options = {}) {\n\treturn new LinkifyIt(options);\n}\n//#endregion\nexport { LinkifyIt, REBuilder, linkifyit };\n\n//# sourceMappingURL=index.mjs.map","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n","/*! markdown-it 15.0.0 https://github.com/markdown-it/markdown-it @license MIT */\nimport * as mdurl from \"mdurl\";\nimport * as ucmicro from \"uc.micro\";\nimport { decodeHTMLStrict } from \"entities\";\nimport { LinkifyIt } from \"linkify-it\";\nimport punycode from \"punycode.js\";\n//#region \\0rolldown/runtime.js\nvar __defProp = Object.defineProperty;\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\n//#endregion\n//#region src/common/utils.ts\n/**\n* Common utility functions exposed through `md.utils` for use by plugins.\n*\n* @module md.utils\n*/\nvar utils_exports = /* @__PURE__ */ __exportAll({\n\tarrayReplaceAt: () => arrayReplaceAt,\n\tasciiTrim: () => asciiTrim,\n\tcallable: () => callable,\n\tescapeHtml: () => escapeHtml,\n\tescapeRE: () => escapeRE,\n\tfromCodePoint: () => fromCodePoint,\n\tisMdAsciiPunct: () => isMdAsciiPunct,\n\tisPunctChar: () => isPunctChar,\n\tisPunctCharCode: () => isPunctCharCode,\n\tisSpace: () => isSpace,\n\tisValidEntityCode: () => isValidEntityCode,\n\tisWhiteSpace: () => isWhiteSpace,\n\tlib: () => lib,\n\tnormalizeReference: () => normalizeReference,\n\tunescapeAll: () => unescapeAll,\n\tunescapeMd: () => unescapeMd\n});\nfunction callable(cls) {\n\tconst wrapper = function(...args) {\n\t\treturn Reflect.construct(cls, args, new.target && new.target !== wrapper ? new.target : cls);\n\t};\n\tObject.defineProperty(wrapper, \"name\", { value: cls.name });\n\tObject.setPrototypeOf(wrapper, cls);\n\twrapper.prototype = cls.prototype;\n\treturn wrapper;\n}\n/**\n* Returns a copy of a token array with the token at `pos` replaced by\n* `newElements`. Used to transform token streams without modifying the\n* original array.\n*/\nfunction arrayReplaceAt(src, pos, newElements) {\n\treturn [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n/** Checks whether a code point can be decoded from a numeric HTML entity. */\nfunction isValidEntityCode(c) {\n\tif (c >= 55296 && c <= 57343) return false;\n\tif (c >= 64976 && c <= 65007) return false;\n\tif ((c & 65535) === 65535 || (c & 65535) === 65534) return false;\n\tif (c >= 0 && c <= 8) return false;\n\tif (c === 11) return false;\n\tif (c >= 14 && c <= 31) return false;\n\tif (c >= 127 && c <= 159) return false;\n\tif (c > 1114111) return false;\n\treturn true;\n}\n/**\n* Converts a Unicode code point to a string, like `String.fromCodePoint()`,\n* but does not throw for invalid input.\n*/\nfunction fromCodePoint(c) {\n\tif (c > 65535) {\n\t\tc -= 65536;\n\t\tconst surrogate1 = 55296 + (c >> 10);\n\t\tconst surrogate2 = 56320 + (c & 1023);\n\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t}\n\treturn String.fromCharCode(c);\n}\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar UNESCAPE_ALL_RE = new RegExp(`${UNESCAPE_MD_RE.source}|${/&([a-z#][a-z0-9]{1,31});/gi.source}`, \"gi\");\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\nfunction replaceEntityPattern(match, name) {\n\tif (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) {\n\t\tconst code = name[1].toLowerCase() === \"x\" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\t\tif (isValidEntityCode(code)) return fromCodePoint(code);\n\t\treturn match;\n\t}\n\tconst decoded = decodeHTMLStrict(match);\n\tif (decoded !== match) return decoded;\n\treturn match;\n}\n/** Decodes Markdown backslash escapes. */\nfunction unescapeMd(str) {\n\tif (str.indexOf(\"\\\\\") < 0) return str;\n\treturn str.replace(UNESCAPE_MD_RE, \"$1\");\n}\n/**\n* Decodes Markdown backslash escapes and HTML character references in link\n* destinations, link titles, and fenced code info strings.\n*/\nfunction unescapeAll(str) {\n\tif (str.indexOf(\"\\\\\") < 0 && str.indexOf(\"&\") < 0) return str;\n\treturn str.replace(UNESCAPE_ALL_RE, function(match, escaped, entity) {\n\t\tif (escaped) return escaped;\n\t\treturn replaceEntityPattern(match, entity);\n\t});\n}\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n\t\"&\": \"&\",\n\t\"<\": \"<\",\n\t\">\": \">\",\n\t\"\\\"\": \""\"\n};\nfunction replaceUnsafeChar(ch) {\n\treturn HTML_REPLACEMENTS[ch];\n}\n/** Escapes HTML special characters in a string. */\nfunction escapeHtml(str) {\n\tif (HTML_ESCAPE_TEST_RE.test(str)) return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n\treturn str;\n}\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n/** Escapes regular expression metacharacters in a string. */\nfunction escapeRE(str) {\n\treturn str.replace(REGEXP_ESCAPE_RE, \"\\\\$&\");\n}\n/** Checks whether a character code is an ASCII space or tab. */\nfunction isSpace(code) {\n\tswitch (code) {\n\t\tcase 9:\n\t\tcase 32: return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether a character code is whitespace recognized by Markdown.\n*\n* Matches the Unicode `Zs` category or `\\t`, `\\f`, `\\v`, `\\r`, `\\n`.\n*/\nfunction isWhiteSpace(code) {\n\tif (code >= 8192 && code <= 8202) return true;\n\tswitch (code) {\n\t\tcase 9:\n\t\tcase 10:\n\t\tcase 11:\n\t\tcase 12:\n\t\tcase 13:\n\t\tcase 32:\n\t\tcase 160:\n\t\tcase 5760:\n\t\tcase 8239:\n\t\tcase 8287:\n\t\tcase 12288: return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether a character is Unicode punctuation or a symbol.\n*\n* Does not support astral characters.\n*/\nfunction isPunctChar(ch) {\n\treturn ucmicro.P.test(ch) || ucmicro.S.test(ch);\n}\n/** Checks whether a Unicode code point is punctuation or a symbol. */\nfunction isPunctCharCode(code) {\n\treturn isPunctChar(fromCodePoint(code));\n}\n/**\n* Markdown ASCII punctuation characters.\n*\n* !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @,\n* [, \\, ], ^, _, `, {, |, }, or ~\n*\n* http://spec.commonmark.org/0.15/#ascii-punctuation-character\n*\n* Don't confuse with Unicode punctuation. It lacks some characters in the\n* ASCII range.\n*/\nfunction isMdAsciiPunct(ch) {\n\tswitch (ch) {\n\t\tcase 33:\n\t\tcase 34:\n\t\tcase 35:\n\t\tcase 36:\n\t\tcase 37:\n\t\tcase 38:\n\t\tcase 39:\n\t\tcase 40:\n\t\tcase 41:\n\t\tcase 42:\n\t\tcase 43:\n\t\tcase 44:\n\t\tcase 45:\n\t\tcase 46:\n\t\tcase 47:\n\t\tcase 58:\n\t\tcase 59:\n\t\tcase 60:\n\t\tcase 61:\n\t\tcase 62:\n\t\tcase 63:\n\t\tcase 64:\n\t\tcase 91:\n\t\tcase 92:\n\t\tcase 93:\n\t\tcase 94:\n\t\tcase 95:\n\t\tcase 96:\n\t\tcase 123:\n\t\tcase 124:\n\t\tcase 125:\n\t\tcase 126: return true;\n\t\tdefault: return false;\n\t}\n}\n/** Normalizes `[reference labels]` for case-insensitive lookup. */\nfunction normalizeReference(str) {\n\tstr = str.trim().replace(/\\s+/g, \" \");\n\treturn str.toLowerCase().toUpperCase();\n}\nfunction isAsciiTrimmable(c) {\n\treturn c === 32 || c === 9 || c === 10 || c === 13;\n}\n/**\n* \"Light\" `.trim()` for blocks (headings, paragraphs), where Unicode spaces\n* should be preserved.\n*/\nfunction asciiTrim(str) {\n\tlet start = 0;\n\tfor (; start < str.length; start++) if (!isAsciiTrimmable(str.charCodeAt(start))) break;\n\tlet end = str.length - 1;\n\tfor (; end >= start; end--) if (!isAsciiTrimmable(str.charCodeAt(end))) break;\n\treturn str.slice(start, end + 1);\n}\n/**\n* Libraries commonly used by markdown-it and its plugins, re-exported to\n* reduce duplicate dependencies in browser bundles.\n*/\nvar lib = {\n\tmdurl,\n\tucmicro\n};\n//#endregion\n//#region src/helpers/parse_link_label.ts\n/** Finds the end of a link or image label (`[label]`). */\nfunction parseLinkLabel(state, start, disableNested) {\n\tlet level, found, marker, prevPos;\n\tconst max = state.posMax;\n\tconst oldPos = state.pos;\n\tstate.pos = start + 1;\n\tlevel = 1;\n\twhile (state.pos < max) {\n\t\tmarker = state.src.charCodeAt(state.pos);\n\t\tif (marker === 93) {\n\t\t\tlevel--;\n\t\t\tif (level === 0) {\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tprevPos = state.pos;\n\t\tstate.md.inline.skipToken(state);\n\t\tif (marker === 91) {\n\t\t\tif (prevPos === state.pos - 1) level++;\n\t\t\telse if (disableNested) {\n\t\t\t\tstate.pos = oldPos;\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\tlet labelEnd = -1;\n\tif (found) labelEnd = state.pos;\n\tstate.pos = oldPos;\n\treturn labelEnd;\n}\n//#endregion\n//#region src/helpers/parse_link_destination.ts\n/** Parses the destination in `[label](destination \"title\")`. */\nfunction parseLinkDestination(str, start, max) {\n\tlet code;\n\tlet pos = start;\n\tconst result = {\n\t\tok: false,\n\t\tpos: 0,\n\t\tstr: \"\"\n\t};\n\tif (str.charCodeAt(pos) === 60) {\n\t\tpos++;\n\t\twhile (pos < max) {\n\t\t\tcode = str.charCodeAt(pos);\n\t\t\tif (code === 10) return result;\n\t\t\tif (code === 60) return result;\n\t\t\tif (code === 62) {\n\t\t\t\tresult.pos = pos + 1;\n\t\t\t\tresult.str = unescapeAll(str.slice(start + 1, pos));\n\t\t\t\tresult.ok = true;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (code === 92 && pos + 1 < max) {\n\t\t\t\tpos += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpos++;\n\t\t}\n\t\treturn result;\n\t}\n\tlet level = 0;\n\twhile (pos < max) {\n\t\tcode = str.charCodeAt(pos);\n\t\tif (code === 32) break;\n\t\tif (code < 32 || code === 127) break;\n\t\tif (code === 92 && pos + 1 < max) {\n\t\t\tif (str.charCodeAt(pos + 1) === 32) {\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpos += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (code === 40) {\n\t\t\tlevel++;\n\t\t\tif (level > 32) return result;\n\t\t}\n\t\tif (code === 41) {\n\t\t\tif (level === 0) break;\n\t\t\tlevel--;\n\t\t}\n\t\tpos++;\n\t}\n\tif (start === pos) return result;\n\tif (level !== 0) return result;\n\tresult.str = unescapeAll(str.slice(start, pos));\n\tresult.pos = pos;\n\tresult.ok = true;\n\treturn result;\n}\n//#endregion\n//#region src/helpers/parse_link_title.ts\n/**\n* Parses the optional title in `[label](destination \"title\")` or\n* `[label]: destination \"title\"`.\n*\n* `prev_state` continues a reference title on the next source line.\n*/\nfunction parseLinkTitle(str, start, max, prev_state) {\n\tlet code;\n\tlet pos = start;\n\tconst state = {\n\t\tok: false,\n\t\tcan_continue: false,\n\t\tpos: 0,\n\t\tstr: \"\",\n\t\tmarker: 0\n\t};\n\tif (prev_state) {\n\t\tstate.str = prev_state.str;\n\t\tstate.marker = prev_state.marker;\n\t} else {\n\t\tif (pos >= max) return state;\n\t\tlet marker = str.charCodeAt(pos);\n\t\tif (marker !== 34 && marker !== 39 && marker !== 40) return state;\n\t\tstart++;\n\t\tpos++;\n\t\tif (marker === 40) marker = 41;\n\t\tstate.marker = marker;\n\t}\n\twhile (pos < max) {\n\t\tcode = str.charCodeAt(pos);\n\t\tif (code === state.marker) {\n\t\t\tstate.pos = pos + 1;\n\t\t\tstate.str += unescapeAll(str.slice(start, pos));\n\t\t\tstate.ok = true;\n\t\t\treturn state;\n\t\t} else if (code === 40 && state.marker === 41) return state;\n\t\telse if (code === 92 && pos + 1 < max) pos++;\n\t\tpos++;\n\t}\n\tstate.can_continue = true;\n\tstate.str += unescapeAll(str.slice(start, pos));\n\treturn state;\n}\n//#endregion\n//#region src/helpers/index.ts\n/**\n* Functions used to parse links and images, split out of parser rules because\n* of their size.\n*\n* @module md.helpers\n*/\nvar helpers_exports = /* @__PURE__ */ __exportAll({\n\tparseLinkDestination: () => parseLinkDestination,\n\tparseLinkLabel: () => parseLinkLabel,\n\tparseLinkTitle: () => parseLinkTitle\n});\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\n\t\treturn typeof o;\n\t} : function(o) {\n\t\treturn o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n\t}, _typeof(o);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n//#endregion\n//#region src/token.ts\n/**\n* Represents one item in the parsed token stream, storing parsed data and\n* providing helpers for managing HTML attributes.\n*/\nvar Token = class {\n\tconstructor(type, tag, nesting) {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Source map info. Format: `[ line_begin, line_end ]`\n\t\t\t*/\n\t\t\t\"map\",\n\t\t\tnull\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* nesting level, the same as `state.level`\n\t\t\t*/\n\t\t\t\"level\",\n\t\t\t0\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* An array of child nodes (inline and img tokens)\n\t\t\t*/\n\t\t\t\"children\",\n\t\t\tnull\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* In a case of self-closing tag (code, html, fence, etc.),\n\t\t\t* it has contents of this tag.\n\t\t\t*/\n\t\t\t\"content\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* '*' or '_' for emphasis, fence string for fence, etc.\n\t\t\t*/\n\t\t\t\"markup\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Additional information:\n\t\t\t*\n\t\t\t* - Info string for \"fence\" tokens\n\t\t\t* - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n\t\t\t* - The string value of the item marker for ordered-list \"list_item_open\" tokens\n\t\t\t*/\n\t\t\t\"info\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* True for block-level tokens, false for inline tokens.\n\t\t\t* Used in renderer to calculate line breaks\n\t\t\t*/\n\t\t\t\"block\",\n\t\t\tfalse\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* If it's true, ignore this element when rendering. Used for tight lists\n\t\t\t* to hide paragraphs.\n\t\t\t*/\n\t\t\t\"hidden\",\n\t\t\tfalse\n\t\t);\n\t\tthis.type = type;\n\t\tthis.tag = tag;\n\t\tthis.attrs = null;\n\t\tthis.nesting = nesting;\n\t\tthis.meta = null;\n\t}\n\t/**\n\t* Search attribute index by name.\n\t*/\n\tattrIndex(name) {\n\t\tif (!this.attrs) return -1;\n\t\tconst attrs = this.attrs;\n\t\tfor (let i = 0, len = attrs.length; i < len; i++) if (attrs[i][0] === name) return i;\n\t\treturn -1;\n\t}\n\t/**\n\t* Add `[ name, value ]` attribute to list. Init attrs if necessary\n\t*/\n\tattrPush(attrData) {\n\t\tif (this.attrs) this.attrs.push(attrData);\n\t\telse this.attrs = [attrData];\n\t}\n\t/**\n\t* Set `name` attribute to `value`. Override old value if exists.\n\t*/\n\tattrSet(name, value) {\n\t\tconst idx = this.attrIndex(name);\n\t\tconst attrData = [name, value];\n\t\tif (idx < 0) this.attrPush(attrData);\n\t\telse this.attrs[idx] = attrData;\n\t}\n\t/**\n\t* Get the value of attribute `name`, or null if it does not exist.\n\t*/\n\tattrGet(name) {\n\t\tconst idx = this.attrIndex(name);\n\t\tlet value = null;\n\t\tif (idx >= 0) value = this.attrs[idx][1];\n\t\treturn value;\n\t}\n\t/**\n\t* Join value to existing attribute via space. Or create new attribute if not\n\t* exists. Useful to operate with token classes.\n\t*/\n\tattrJoin(name, value) {\n\t\tconst idx = this.attrIndex(name);\n\t\tif (idx < 0) this.attrPush([name, value]);\n\t\telse this.attrs[idx][1] = `${this.attrs[idx][1]} ${value}`;\n\t}\n};\n//#endregion\n//#region src/ruler.ts\n/**\n* Helper class, used by {@link MarkdownIt.core}, {@link MarkdownIt.block} and\n* {@link MarkdownIt.inline} to manage sequences of functions (rules):\n*\n* - keep rules in defined order\n* - assign the name to each rule\n* - enable/disable rules\n* - add/replace rules\n* - allow assign rules to additional named chains (in the same)\n* - cacheing lists of active rules\n*\n* You will not need use this class directly until write plugins. For simple\n* rules control use {@link MarkdownIt.disable}, {@link MarkdownIt.enable} and\n* {@link MarkdownIt.use}.\n*/\nvar Ruler = class {\n\tconstructor() {\n\t\t_defineProperty(this, \"__rules__\", []);\n\t\t_defineProperty(this, \"__cache__\", null);\n\t}\n\t__find__(name) {\n\t\tfor (let i = 0; i < this.__rules__.length; i++) if (this.__rules__[i].name === name) return i;\n\t\treturn -1;\n\t}\n\t__compile__() {\n\t\tconst chains = /* @__PURE__ */ new Set();\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\tif (!rule.enabled) return;\n\t\t\trule.alt.forEach((altName) => {\n\t\t\t\tif (altName) chains.add(altName);\n\t\t\t});\n\t\t});\n\t\tthis.__cache__ = Object.create(null);\n\t\tthis.__cache__[\"\"] = [];\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\tif (rule.enabled) this.__cache__[\"\"].push(rule.fn);\n\t\t});\n\t\tchains.forEach((chain) => {\n\t\t\tthis.__cache__[chain] = [];\n\t\t\tthis.__rules__.forEach((rule) => {\n\t\t\t\tif (rule.enabled && rule.alt.indexOf(chain) >= 0) this.__cache__[chain].push(rule.fn);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Replace rule by name with new function & options. Throws error if name not\n\t* found.\n\t*\n\t* @param name Rule name to replace.\n\t* @param fn New rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example Replace existing typographer replacement rule with new one\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.core.ruler.at('replacements', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tat(name, fn, options = {}) {\n\t\tconst index = this.__find__(name);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${name}`);\n\t\tthis.__rules__[index].fn = fn;\n\t\tthis.__rules__[index].alt = options.alt || [];\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Add new rule to chain before one with given name. See also\n\t* {@link Ruler.after}, {@link Ruler.push}.\n\t*\n\t* @param beforeName New rule will be added before this one.\n\t* @param ruleName Name of added rule.\n\t* @param fn Rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tbefore(beforeName, ruleName, fn, options = {}) {\n\t\tconst index = this.__find__(beforeName);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${beforeName}`);\n\t\tthis.__rules__.splice(index, 0, {\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Add new rule to chain after one with given name. See also\n\t* {@link Ruler.before}, {@link Ruler.push}.\n\t*\n\t* @param afterName New rule will be added after this one.\n\t* @param ruleName Name of added rule.\n\t* @param fn Rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.inline.ruler.after('text', 'my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tafter(afterName, ruleName, fn, options = {}) {\n\t\tconst index = this.__find__(afterName);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${afterName}`);\n\t\tthis.__rules__.splice(index + 1, 0, {\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Push new rule to the end of chain. See also\n\t* {@link Ruler.before}, {@link Ruler.after}.\n\t*\n\t* @param ruleName Name of added rule.\n\t* @param fn Rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.core.ruler.push('my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tpush(ruleName, fn, options = {}) {\n\t\tthis.__rules__.push({\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Enable rules with given names. If any rule name not found - throw Error.\n\t* Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.disable}, {@link Ruler.enableOnly}.\n\t*\n\t* @param list List of rule names to enable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t* @returns List of found rule names (if no exception happened).\n\t*/\n\tenable(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tconst result = [];\n\t\tlist.forEach((name) => {\n\t\t\tconst idx = this.__find__(name);\n\t\t\tif (idx < 0) {\n\t\t\t\tif (ignoreInvalid) return;\n\t\t\t\tthrow new Error(`Rules manager: invalid rule name ${name}`);\n\t\t\t}\n\t\t\tthis.__rules__[idx].enabled = true;\n\t\t\tresult.push(name);\n\t\t});\n\t\tthis.__cache__ = null;\n\t\treturn result;\n\t}\n\t/**\n\t* Enable rules with given names, and disable everything else. If any rule name\n\t* not found - throw Error. Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.disable}, {@link Ruler.enable}.\n\t*\n\t* @param list List of rule names to enable (whitelist).\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t*/\n\tenableOnly(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\trule.enabled = false;\n\t\t});\n\t\tthis.enable(list, ignoreInvalid);\n\t}\n\t/**\n\t* Disable rules with given names. If any rule name not found - throw Error.\n\t* Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.enable}, {@link Ruler.enableOnly}.\n\t*\n\t* @param list List of rule names to disable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t* @returns List of found rule names (if no exception happened).\n\t*/\n\tdisable(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tconst result = [];\n\t\tlist.forEach((name) => {\n\t\t\tconst idx = this.__find__(name);\n\t\t\tif (idx < 0) {\n\t\t\t\tif (ignoreInvalid) return;\n\t\t\t\tthrow new Error(`Rules manager: invalid rule name ${name}`);\n\t\t\t}\n\t\t\tthis.__rules__[idx].enabled = false;\n\t\t\tresult.push(name);\n\t\t});\n\t\tthis.__cache__ = null;\n\t\treturn result;\n\t}\n\t/**\n\t* Return array of active functions (rules) for given chain name. It analyzes\n\t* rules configuration, compiles caches if not exists and returns result.\n\t*\n\t* Default chain name is `''` (empty string). It can't be skipped. That's\n\t* done intentionally, to keep signature monomorphic for high speed.\n\t*/\n\tgetRules(chainName) {\n\t\tif (!this.__cache__) this.__compile__();\n\t\treturn this.__cache__[chainName] || [];\n\t}\n};\n//#endregion\n//#region src/renderer.ts\nvar default_rules = {};\ndefault_rules.code_inline = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\treturn `<code${slf.renderAttrs(token)}>${escapeHtml(token.content)}</code>`;\n};\ndefault_rules.code_block = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\treturn `<pre${slf.renderAttrs(token)}><code>${escapeHtml(tokens[idx].content)}</code></pre>\\n`;\n};\ndefault_rules.fence = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\tconst info = token.info ? unescapeAll(token.info).trim() : \"\";\n\tlet langName = \"\";\n\tlet langAttrs = \"\";\n\tif (info) {\n\t\tconst arr = info.split(/(\\s+)/g);\n\t\tlangName = arr[0];\n\t\tlangAttrs = arr.slice(2).join(\"\");\n\t}\n\tlet highlighted;\n\tif (options.highlight) highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n\telse highlighted = escapeHtml(token.content);\n\tif (highlighted.indexOf(\"<pre\") === 0) return highlighted + \"\\n\";\n\tif (info) {\n\t\tconst i = token.attrIndex(\"class\");\n\t\tconst tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\t\tif (i < 0) tmpAttrs.push([\"class\", `${options.langPrefix}${langName}`]);\n\t\telse {\n\t\t\ttmpAttrs[i] = [tmpAttrs[i][0], tmpAttrs[i][1]];\n\t\t\ttmpAttrs[i][1] += ` ${options.langPrefix}${langName}`;\n\t\t}\n\t\tconst tmpToken = { attrs: tmpAttrs };\n\t\treturn `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`;\n\t}\n\treturn `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`;\n};\ndefault_rules.image = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\ttoken.attrs[token.attrIndex(\"alt\")][1] = slf.renderInlineAsText(token.children, options, env);\n\treturn slf.renderToken(tokens, idx, options);\n};\ndefault_rules.hardbreak = function(tokens, idx, options) {\n\treturn options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\";\n};\ndefault_rules.softbreak = function(tokens, idx, options) {\n\treturn options.breaks ? options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\" : \"\\n\";\n};\ndefault_rules.text = function(tokens, idx) {\n\treturn escapeHtml(tokens[idx].content);\n};\ndefault_rules.html_block = function(tokens, idx) {\n\treturn tokens[idx].content;\n};\ndefault_rules.html_inline = function(tokens, idx) {\n\treturn tokens[idx].content;\n};\n/**\n* Generates HTML from parsed token stream. Each instance has independent\n* copy of rules. Those can be rewritten with ease. Also, you can add new\n* rules if you create plugin and adds new token types.\n*\n* Creates new renderer instance and fills {@link Renderer.rules} with defaults.\n*/\nvar Renderer = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Contains render rules for tokens. Can be updated and extended.\n\t\t\t*\n\t\t\t* See [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts)\n\t\t\t* for more details and examples.\n\t\t\t*\n\t\t\t* @example Custom render rules\n\t\t\t* ```javascript\n\t\t\t* import MarkdownIt from 'markdown-it'\n\t\t\t* const md = new MarkdownIt()\n\t\t\t*\n\t\t\t* md.renderer.rules.strong_open = function () { return '<b>'; };\n\t\t\t* md.renderer.rules.strong_close = function () { return '</b>'; };\n\t\t\t*\n\t\t\t* const result = md.renderInline(...);\n\t\t\t* ```\n\t\t\t*\n\t\t\t* @example Each rule is called as independent static function with fixed signature\n\t\t\t* ```javascript\n\t\t\t* function my_token_render(tokens, idx, options, env, renderer) {\n\t\t\t* // ...\n\t\t\t* return renderedHTML;\n\t\t\t* }\n\t\t\t* ```\n\t\t\t*/\n\t\t\t\"rules\",\n\t\t\tObject.assign({}, default_rules)\n\t\t);\n\t}\n\t/**\n\t* Render token attributes to string.\n\t*/\n\trenderAttrs(token) {\n\t\tlet i, l, result;\n\t\tif (!token.attrs) return \"\";\n\t\tresult = \"\";\n\t\tfor (i = 0, l = token.attrs.length; i < l; i++) result += ` ${escapeHtml(token.attrs[i][0])}=\"${escapeHtml(String(token.attrs[i][1]))}\"`;\n\t\treturn result;\n\t}\n\t/**\n\t* Default token renderer. Can be overriden by custom function\n\t* in {@link Renderer.rules}.\n\t*\n\t* @param tokens List of tokens.\n\t* @param idx Token index to render.\n\t* @param options Params of parser instance.\n\t*/\n\trenderToken(tokens, idx, options) {\n\t\tconst token = tokens[idx];\n\t\tlet result = \"\";\n\t\tif (token.hidden) return \"\";\n\t\tlet prev = idx - 1;\n\t\twhile (prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === 0) prev--;\n\t\tif (token.block && token.nesting !== -1 && prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === -1) result += \"\\n\";\n\t\tresult += (token.nesting === -1 ? \"</\" : \"<\") + token.tag;\n\t\tresult += this.renderAttrs(token);\n\t\tif (token.nesting === 0 && options.xhtmlOut) result += \" /\";\n\t\tlet needLf = false;\n\t\tif (token.block) {\n\t\t\tneedLf = true;\n\t\t\tif (token.nesting === 1) {\n\t\t\t\tlet next = idx + 1;\n\t\t\t\twhile (next < tokens.length && tokens[next].hidden && tokens[next].nesting === 0) next++;\n\t\t\t\tif (next < tokens.length) {\n\t\t\t\t\tconst nextToken = tokens[next];\n\t\t\t\t\tif (nextToken.type === \"inline\" || nextToken.hidden) needLf = false;\n\t\t\t\t\telse if (nextToken.nesting === -1 && nextToken.tag === token.tag) needLf = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresult += needLf ? \">\\n\" : \">\";\n\t\treturn result;\n\t}\n\t/**\n\t* The same as {@link Renderer.render}, but for single token of `inline` type.\n\t*\n\t* @param tokens List on block tokens to render.\n\t* @param options Params of parser instance.\n\t* @param env Additional data from parsed input (references, for example).\n\t*/\n\trenderInline(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tconst rules = this.rules;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst type = tokens[i].type;\n\t\t\tif (typeof rules[type] !== \"undefined\") result += rules[type](tokens, i, options, env, this);\n\t\t\telse result += this.renderToken(tokens, i, options);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Special kludge for image `alt` attributes to conform CommonMark spec.\n\t* Don't try to use it! Spec requires to show `alt` content with stripped markup,\n\t* instead of simple escaping.\n\t*\n\t* @param tokens List on block tokens to render.\n\t* @param options Params of parser instance.\n\t* @param env Additional data from parsed input (references, for example).\n\t*/\n\trenderInlineAsText(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) switch (tokens[i].type) {\n\t\t\tcase \"text\":\n\t\t\tcase \"code_inline\":\n\t\t\t\tresult += tokens[i].content;\n\t\t\t\tbreak;\n\t\t\tcase \"image\":\n\t\t\t\tresult += this.renderInlineAsText(tokens[i].children, options, env);\n\t\t\t\tbreak;\n\t\t\tcase \"html_inline\":\n\t\t\tcase \"html_block\":\n\t\t\t\tresult += tokens[i].content;\n\t\t\t\tbreak;\n\t\t\tcase \"softbreak\":\n\t\t\tcase \"hardbreak\": result += \"\\n\";\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Takes token stream and generates HTML. Probably, you will never need to call\n\t* this method directly.\n\t*\n\t* @param tokens List on block tokens to render.\n\t* @param options Params of parser instance.\n\t* @param env Additional data from parsed input (references, for example).\n\t*/\n\trender(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tconst rules = this.rules;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst type = tokens[i].type;\n\t\t\tif (type === \"inline\") result += this.renderInline(tokens[i].children, options, env);\n\t\t\telse if (typeof rules[type] !== \"undefined\") result += rules[type](tokens, i, options, env, this);\n\t\t\telse result += this.renderToken(tokens, i, options);\n\t\t}\n\t\treturn result;\n\t}\n};\n//#endregion\n//#region src/rules_core/state_core.ts\n/** Mutable state passed through the core rules chain. */\nvar StateCore = class {\n\tconstructor(src, md, env) {\n\t\t_defineProperty(this, \"tokens\", []);\n\t\t_defineProperty(this, \"inlineMode\", false);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.env = env;\n\t\tthis.md = md;\n\t}\n};\n//#endregion\n//#region src/rules_core/normalize.ts\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\nfunction normalize(state) {\n\tlet str;\n\tstr = state.src.replace(NEWLINES_RE, \"\\n\");\n\tstr = str.replace(NULL_RE, \"�\");\n\tstate.src = str;\n}\n//#endregion\n//#region src/rules_core/block.ts\nfunction block(state) {\n\tlet token;\n\tif (state.inlineMode) {\n\t\ttoken = new state.Token(\"inline\", \"\", 0);\n\t\ttoken.content = state.src;\n\t\ttoken.map = [0, 1];\n\t\ttoken.children = [];\n\t\tstate.tokens.push(token);\n\t} else state.md.block.parse(state.src, state.md, state.env, state.tokens);\n}\n//#endregion\n//#region src/rules_core/strip_references.ts\nfunction strip_references(state) {\n\tconst tokens = state.tokens;\n\tlet last = 0;\n\tfor (let curr = 0; curr < tokens.length; curr++) {\n\t\tif (tokens[curr].type === \"reference_definition\") continue;\n\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\tlast++;\n\t}\n\tif (tokens.length !== last) tokens.length = last;\n}\n//#endregion\n//#region src/rules_core/inline.ts\nfunction inline(state) {\n\tconst tokens = state.tokens;\n\tfor (let i = 0, l = tokens.length; i < l; i++) {\n\t\tconst tok = tokens[i];\n\t\tif (tok.type === \"inline\") state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n\t}\n}\n//#endregion\n//#region src/rules_core/linkify.ts\nfunction isLinkOpen$1(str) {\n\treturn /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose$1(str) {\n\treturn /^<\\/a\\s*>/i.test(str);\n}\nfunction linkify$1(state) {\n\tconst blockTokens = state.tokens;\n\tif (!state.md.options.linkify) return;\n\tfor (let j = 0, l = blockTokens.length; j < l; j++) {\n\t\tif (blockTokens[j].type !== \"inline\" || !state.md.linkify.test(blockTokens[j].content)) continue;\n\t\tlet tokens = blockTokens[j].children;\n\t\tlet htmlLinkLevel = 0;\n\t\tfor (let i = tokens.length - 1; i >= 0; i--) {\n\t\t\tconst currentToken = tokens[i];\n\t\t\tif (currentToken.type === \"link_close\") {\n\t\t\t\ti--;\n\t\t\t\twhile (tokens[i].level !== currentToken.level && tokens[i].type !== \"link_open\") i--;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (currentToken.type === \"html_inline\") {\n\t\t\t\tif (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) htmlLinkLevel--;\n\t\t\t\tif (isLinkClose$1(currentToken.content)) htmlLinkLevel++;\n\t\t\t}\n\t\t\tif (htmlLinkLevel > 0) continue;\n\t\t\tif (currentToken.type === \"text\" && state.md.linkify.test(currentToken.content)) {\n\t\t\t\tconst text = currentToken.content;\n\t\t\t\tlet links = state.md.linkify.match(text);\n\t\t\t\tconst nodes = [];\n\t\t\t\tlet level = currentToken.level;\n\t\t\t\tlet lastPos = 0;\n\t\t\t\tif (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === \"text_special\") links = links.slice(1);\n\t\t\t\tfor (let ln = 0; ln < links.length; ln++) {\n\t\t\t\t\tconst url = links[ln].url;\n\t\t\t\t\tconst fullUrl = state.md.normalizeLink(url);\n\t\t\t\t\tif (!state.md.validateLink(fullUrl)) continue;\n\t\t\t\t\tlet urlText = links[ln].text;\n\t\t\t\t\tif (!links[ln].schema) urlText = state.md.normalizeLinkText(`http://${urlText}`).replace(/^http:\\/\\//, \"\");\n\t\t\t\t\telse if (links[ln].schema === \"mailto:\" && !/^mailto:/i.test(urlText)) urlText = state.md.normalizeLinkText(`mailto:${urlText}`).replace(/^mailto:/, \"\");\n\t\t\t\t\telse urlText = state.md.normalizeLinkText(urlText);\n\t\t\t\t\tconst pos = links[ln].index;\n\t\t\t\t\tif (pos > lastPos) {\n\t\t\t\t\t\tconst token = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\t\ttoken.content = text.slice(lastPos, pos);\n\t\t\t\t\t\ttoken.level = level;\n\t\t\t\t\t\tnodes.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tconst token_o = new state.Token(\"link_open\", \"a\", 1);\n\t\t\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\t\t\ttoken_o.level = level++;\n\t\t\t\t\ttoken_o.markup = \"linkify\";\n\t\t\t\t\ttoken_o.info = \"auto\";\n\t\t\t\t\tnodes.push(token_o);\n\t\t\t\t\tconst token_t = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\ttoken_t.content = urlText;\n\t\t\t\t\ttoken_t.level = level;\n\t\t\t\t\tnodes.push(token_t);\n\t\t\t\t\tconst token_c = new state.Token(\"link_close\", \"a\", -1);\n\t\t\t\t\ttoken_c.level = --level;\n\t\t\t\t\ttoken_c.markup = \"linkify\";\n\t\t\t\t\ttoken_c.info = \"auto\";\n\t\t\t\t\tnodes.push(token_c);\n\t\t\t\t\tlastPos = links[ln].lastIndex;\n\t\t\t\t}\n\t\t\t\tif (lastPos < text.length) {\n\t\t\t\t\tconst token = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\ttoken.content = text.slice(lastPos);\n\t\t\t\t\ttoken.level = level;\n\t\t\t\t\tnodes.push(token);\n\t\t\t\t}\n\t\t\t\tblockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n\t\t\t}\n\t\t}\n\t}\n}\n//#endregion\n//#region src/rules_core/replacements.ts\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\nvar SCOPED_ABBR_RE = /\\((c|tm|r)\\)/gi;\nvar SCOPED_ABBR = {\n\tc: \"©\",\n\tr: \"®\",\n\ttm: \"™\"\n};\nfunction replaceFn(match, name) {\n\treturn SCOPED_ABBR[name.toLowerCase()];\n}\nfunction replace_scoped(inlineTokens) {\n\tlet inside_autolink = 0;\n\tfor (let i = inlineTokens.length - 1; i >= 0; i--) {\n\t\tconst token = inlineTokens[i];\n\t\tif (token.type === \"text\" && !inside_autolink) token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n\t\tif (token.type === \"link_open\" && token.info === \"auto\") inside_autolink--;\n\t\tif (token.type === \"link_close\" && token.info === \"auto\") inside_autolink++;\n\t}\n}\nfunction replace_rare(inlineTokens) {\n\tlet inside_autolink = 0;\n\tfor (let i = inlineTokens.length - 1; i >= 0; i--) {\n\t\tconst token = inlineTokens[i];\n\t\tif (token.type === \"text\" && !inside_autolink) {\n\t\t\tif (RARE_RE.test(token.content)) token.content = token.content.replace(/\\+-/g, \"±\").replace(/\\.{2,}/g, \"…\").replace(/([?!])…/g, \"$1..\").replace(/([?!]){4,}/g, \"$1$1$1\").replace(/,{2,}/g, \",\").replace(/(^|[^-])---(?=[^-]|$)/gm, \"$1—\").replace(/(^|\\s)--(?=\\s|$)/gm, \"$1–\").replace(/(^|[^-\\s])--(?=[^-\\s]|$)/gm, \"$1–\");\n\t\t}\n\t\tif (token.type === \"link_open\" && token.info === \"auto\") inside_autolink--;\n\t\tif (token.type === \"link_close\" && token.info === \"auto\") inside_autolink++;\n\t}\n}\nfunction replace(state) {\n\tlet blkIdx;\n\tif (!state.md.options.typographer) return;\n\tfor (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\t\tif (state.tokens[blkIdx].type !== \"inline\") continue;\n\t\tif (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) replace_scoped(state.tokens[blkIdx].children);\n\t\tif (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);\n\t}\n}\n//#endregion\n//#region src/rules_core/smartquotes.ts\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = \"’\";\nfunction addReplacement(replacements, tokenIdx, pos, ch) {\n\tif (!replacements[tokenIdx]) replacements[tokenIdx] = [];\n\treplacements[tokenIdx].push({\n\t\tpos,\n\t\tch\n\t});\n}\nfunction applyReplacements(str, replacements) {\n\tlet result = \"\";\n\tlet lastPos = 0;\n\treplacements.sort((a, b) => a.pos - b.pos);\n\tfor (let i = 0; i < replacements.length; i++) {\n\t\tconst replacement = replacements[i];\n\t\tresult += str.slice(lastPos, replacement.pos) + replacement.ch;\n\t\tlastPos = replacement.pos + 1;\n\t}\n\treturn result + str.slice(lastPos);\n}\nfunction process_inlines(tokens, state) {\n\tlet j;\n\tconst stack = [];\n\tconst replacements = {};\n\tfor (let i = 0; i < tokens.length; i++) {\n\t\tconst token = tokens[i];\n\t\tconst thisLevel = tokens[i].level;\n\t\tfor (j = stack.length - 1; j >= 0; j--) if (stack[j].level <= thisLevel) break;\n\t\tstack.length = j + 1;\n\t\tif (token.type !== \"text\") continue;\n\t\tconst text = token.content;\n\t\tlet pos = 0;\n\t\tconst max = text.length;\n\t\tOUTER: while (pos < max) {\n\t\t\tQUOTE_RE.lastIndex = pos;\n\t\t\tconst t = QUOTE_RE.exec(text);\n\t\t\tif (!t) break;\n\t\t\tlet canOpen = true;\n\t\t\tlet canClose = true;\n\t\t\tpos = t.index + 1;\n\t\t\tconst isSingle = t[0] === \"'\";\n\t\t\tlet lastChar = 32;\n\t\t\tif (t.index - 1 >= 0) lastChar = text.charCodeAt(t.index - 1);\n\t\t\telse for (j = i - 1; j >= 0; j--) {\n\t\t\t\tif (tokens[j].type === \"softbreak\" || tokens[j].type === \"hardbreak\") break;\n\t\t\t\tif (!tokens[j].content) continue;\n\t\t\t\tlastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet nextChar = 32;\n\t\t\tif (pos < max) nextChar = text.charCodeAt(pos);\n\t\t\telse for (j = i + 1; j < tokens.length; j++) {\n\t\t\t\tif (tokens[j].type === \"softbreak\" || tokens[j].type === \"hardbreak\") break;\n\t\t\t\tif (!tokens[j].content) continue;\n\t\t\t\tnextChar = tokens[j].content.charCodeAt(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);\n\t\t\tconst isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);\n\t\t\tconst isLastWhiteSpace = isWhiteSpace(lastChar);\n\t\t\tconst isNextWhiteSpace = isWhiteSpace(nextChar);\n\t\t\tif (isNextWhiteSpace) canOpen = false;\n\t\t\telse if (isNextPunctChar) {\n\t\t\t\tif (!(isLastWhiteSpace || isLastPunctChar)) canOpen = false;\n\t\t\t}\n\t\t\tif (isLastWhiteSpace) canClose = false;\n\t\t\telse if (isLastPunctChar) {\n\t\t\t\tif (!(isNextWhiteSpace || isNextPunctChar)) canClose = false;\n\t\t\t}\n\t\t\tif (nextChar === 34 && t[0] === \"\\\"\") {\n\t\t\t\tif (lastChar >= 48 && lastChar <= 57) canClose = canOpen = false;\n\t\t\t}\n\t\t\tif (canOpen && canClose) {\n\t\t\t\tcanOpen = isLastPunctChar;\n\t\t\t\tcanClose = isNextPunctChar;\n\t\t\t}\n\t\t\tif (!canOpen && !canClose) {\n\t\t\t\tif (isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (canClose) for (j = stack.length - 1; j >= 0; j--) {\n\t\t\t\tlet item = stack[j];\n\t\t\t\tif (stack[j].level < thisLevel) break;\n\t\t\t\tif (item.single === isSingle && stack[j].level === thisLevel) {\n\t\t\t\t\titem = stack[j];\n\t\t\t\t\tlet openQuote;\n\t\t\t\t\tlet closeQuote;\n\t\t\t\t\tif (isSingle) {\n\t\t\t\t\t\topenQuote = state.md.options.quotes[2];\n\t\t\t\t\t\tcloseQuote = state.md.options.quotes[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\topenQuote = state.md.options.quotes[0];\n\t\t\t\t\t\tcloseQuote = state.md.options.quotes[1];\n\t\t\t\t\t}\n\t\t\t\t\taddReplacement(replacements, i, t.index, closeQuote);\n\t\t\t\t\taddReplacement(replacements, item.token, item.pos, openQuote);\n\t\t\t\t\tstack.length = j;\n\t\t\t\t\tcontinue OUTER;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (canOpen) stack.push({\n\t\t\t\ttoken: i,\n\t\t\t\tpos: t.index,\n\t\t\t\tsingle: isSingle,\n\t\t\t\tlevel: thisLevel\n\t\t\t});\n\t\t\telse if (canClose && isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);\n\t\t}\n\t}\n\tObject.keys(replacements).forEach(function(tokenIdx) {\n\t\tconst idx = Number(tokenIdx);\n\t\ttokens[idx].content = applyReplacements(tokens[idx].content, replacements[tokenIdx]);\n\t});\n}\nfunction smartquotes(state) {\n\tif (!state.md.options.typographer) return;\n\tfor (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\t\tif (state.tokens[blkIdx].type !== \"inline\" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) continue;\n\t\tprocess_inlines(state.tokens[blkIdx].children, state);\n\t}\n}\n//#endregion\n//#region src/rules_core/text_join.ts\nfunction join_alt(tokens) {\n\tlet curr, last;\n\tconst max = tokens.length;\n\tfor (curr = 0; curr < max; curr++) if (tokens[curr].type === \"text_special\") tokens[curr].type = \"text\";\n\tfor (curr = last = 0; curr < max; curr++) if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\telse {\n\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\tlast++;\n\t}\n\tif (curr !== last) tokens.length = last;\n}\nfunction text_join(state) {\n\tlet curr, last;\n\tconst blockTokens = state.tokens;\n\tconst l = blockTokens.length;\n\tfor (let j = 0; j < l; j++) {\n\t\tif (blockTokens[j].type !== \"inline\") continue;\n\t\tconst tokens = blockTokens[j].children;\n\t\tconst max = tokens.length;\n\t\tfor (curr = 0; curr < max; curr++) {\n\t\t\tif (tokens[curr].type === \"text_special\") tokens[curr].type = \"text\";\n\t\t\tif (tokens[curr].children) join_alt(tokens[curr].children);\n\t\t}\n\t\tfor (curr = last = 0; curr < max; curr++) if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\t\telse {\n\t\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\t\tlast++;\n\t\t}\n\t\tif (curr !== last) tokens.length = last;\n\t}\n}\n//#endregion\n//#region src/parser_core.ts\nvar _rules$2 = [\n\t[\"normalize\", normalize],\n\t[\"block\", block],\n\t[\"strip_references\", strip_references],\n\t[\"inline\", inline],\n\t[\"linkify\", linkify$1],\n\t[\"replacements\", replace],\n\t[\"smartquotes\", smartquotes],\n\t[\"text_join\", text_join]\n];\n/**\n* Top-level rules executor. Glues block/inline parsers and does intermediate\n* transformations.\n*/\nvar ParserCore = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of core rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateCore);\n\t\tfor (let i = 0; i < _rules$2.length; i++) this.ruler.push(_rules$2[i][0], _rules$2[i][1]);\n\t}\n\t/**\n\t* Executes core chain rules.\n\t*/\n\tprocess(state) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tfor (let i = 0, l = rules.length; i < l; i++) rules[i](state);\n\t}\n};\n//#endregion\n//#region src/rules_block/state_block.ts\n/** Mutable state passed to block rules while tokenizing a source document. */\nvar StateBlock = class {\n\tconstructor(src, md, env, tokens) {\n\t\t_defineProperty(this, \"bMarks\", []);\n\t\t_defineProperty(this, \"eMarks\", []);\n\t\t_defineProperty(this, \"tShift\", []);\n\t\t_defineProperty(this, \"sCount\", []);\n\t\t_defineProperty(this, \"bsCount\", []);\n\t\t_defineProperty(this, \"blkIndent\", 0);\n\t\t_defineProperty(this, \"line\", 0);\n\t\t_defineProperty(this, \"lineMax\", 0);\n\t\t_defineProperty(this, \"tight\", false);\n\t\t_defineProperty(this, \"listIndent\", -1);\n\t\t_defineProperty(this, \"parentType\", \"root\");\n\t\t_defineProperty(this, \"level\", 0);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.md = md;\n\t\tthis.env = env;\n\t\tthis.tokens = tokens;\n\t\tconst s = this.src;\n\t\tfor (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n\t\t\tconst ch = s.charCodeAt(pos);\n\t\t\tif (!indent_found) if (isSpace(ch)) {\n\t\t\t\tindent++;\n\t\t\t\tif (ch === 9) offset += 4 - offset % 4;\n\t\t\t\telse offset++;\n\t\t\t\tcontinue;\n\t\t\t} else indent_found = true;\n\t\t\tif (ch === 10 || pos === len - 1) {\n\t\t\t\tif (ch !== 10) pos++;\n\t\t\t\tthis.bMarks.push(start);\n\t\t\t\tthis.eMarks.push(pos);\n\t\t\t\tthis.tShift.push(indent);\n\t\t\t\tthis.sCount.push(offset);\n\t\t\t\tthis.bsCount.push(0);\n\t\t\t\tindent_found = false;\n\t\t\t\tindent = 0;\n\t\t\t\toffset = 0;\n\t\t\t\tstart = pos + 1;\n\t\t\t}\n\t\t}\n\t\tthis.bMarks.push(s.length);\n\t\tthis.eMarks.push(s.length);\n\t\tthis.tShift.push(0);\n\t\tthis.sCount.push(0);\n\t\tthis.bsCount.push(0);\n\t\tthis.lineMax = this.bMarks.length - 1;\n\t}\n\tpush(type, tag, nesting) {\n\t\tconst token = new Token(type, tag, nesting);\n\t\ttoken.block = true;\n\t\tif (nesting < 0) this.level--;\n\t\ttoken.level = this.level;\n\t\tif (nesting > 0) this.level++;\n\t\tthis.tokens.push(token);\n\t\treturn token;\n\t}\n\tisEmpty(line) {\n\t\treturn this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n\t}\n\tskipEmptyLines(from) {\n\t\tfor (let max = this.lineMax; from < max; from++) if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) break;\n\t\treturn from;\n\t}\n\tskipSpaces(pos) {\n\t\tfor (let max = this.src.length; pos < max; pos++) if (!isSpace(this.src.charCodeAt(pos))) break;\n\t\treturn pos;\n\t}\n\tskipSpacesBack(pos, min) {\n\t\tif (pos <= min) return pos;\n\t\twhile (pos > min) if (!isSpace(this.src.charCodeAt(--pos))) return pos + 1;\n\t\treturn pos;\n\t}\n\tskipChars(pos, code) {\n\t\tfor (let max = this.src.length; pos < max; pos++) if (this.src.charCodeAt(pos) !== code) break;\n\t\treturn pos;\n\t}\n\tskipCharsBack(pos, code, min) {\n\t\tif (pos <= min) return pos;\n\t\twhile (pos > min) if (code !== this.src.charCodeAt(--pos)) return pos + 1;\n\t\treturn pos;\n\t}\n\tgetLines(begin, end, indent, keepLastLF) {\n\t\tif (begin >= end) return \"\";\n\t\tconst queue = new Array(end - begin);\n\t\tfor (let i = 0, line = begin; line < end; line++, i++) {\n\t\t\tlet lineIndent = 0;\n\t\t\tconst lineStart = this.bMarks[line];\n\t\t\tlet first = lineStart;\n\t\t\tlet last;\n\t\t\tif (line + 1 < end || keepLastLF) last = this.eMarks[line] + 1;\n\t\t\telse last = this.eMarks[line];\n\t\t\twhile (first < last && lineIndent < indent) {\n\t\t\t\tconst ch = this.src.charCodeAt(first);\n\t\t\t\tif (isSpace(ch)) if (ch === 9) lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n\t\t\t\telse lineIndent++;\n\t\t\t\telse if (first - lineStart < this.tShift[line]) lineIndent++;\n\t\t\t\telse break;\n\t\t\t\tfirst++;\n\t\t\t}\n\t\t\tif (lineIndent > indent) queue[i] = new Array(lineIndent - indent + 1).join(\" \") + this.src.slice(first, last);\n\t\t\telse queue[i] = this.src.slice(first, last);\n\t\t}\n\t\treturn queue.join(\"\");\n\t}\n};\n//#endregion\n//#region src/rules_block/table.ts\nvar MAX_AUTOCOMPLETED_CELLS = 65536;\nfunction getLine(state, line) {\n\tconst pos = state.bMarks[line] + state.tShift[line];\n\tconst max = state.eMarks[line];\n\treturn state.src.slice(pos, max);\n}\nfunction escapedSplit(str) {\n\tconst result = [];\n\tconst max = str.length;\n\tlet pos = 0;\n\tlet ch = str.charCodeAt(pos);\n\tlet isEscaped = false;\n\tlet lastPos = 0;\n\tlet current = \"\";\n\twhile (pos < max) {\n\t\tif (ch === 124) if (!isEscaped) {\n\t\t\tresult.push(current + str.substring(lastPos, pos));\n\t\t\tcurrent = \"\";\n\t\t\tlastPos = pos + 1;\n\t\t} else {\n\t\t\tcurrent += str.substring(lastPos, pos - 1);\n\t\t\tlastPos = pos;\n\t\t}\n\t\tisEscaped = ch === 92;\n\t\tpos++;\n\t\tch = str.charCodeAt(pos);\n\t}\n\tresult.push(current + str.substring(lastPos));\n\treturn result;\n}\nfunction table(state, startLine, endLine, silent) {\n\tif (startLine + 2 > endLine) return false;\n\tlet nextLine = startLine + 1;\n\tif (state.sCount[nextLine] < state.blkIndent) return false;\n\tif (state.sCount[nextLine] - state.blkIndent >= 4) return false;\n\tlet pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\tif (pos >= state.eMarks[nextLine]) return false;\n\tconst firstCh = state.src.charCodeAt(pos++);\n\tif (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) return false;\n\tif (pos >= state.eMarks[nextLine]) return false;\n\tconst secondCh = state.src.charCodeAt(pos++);\n\tif (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace(secondCh)) return false;\n\tif (firstCh === 45 && isSpace(secondCh)) return false;\n\twhile (pos < state.eMarks[nextLine]) {\n\t\tconst ch = state.src.charCodeAt(pos);\n\t\tif (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace(ch)) return false;\n\t\tpos++;\n\t}\n\tlet lineText = getLine(state, startLine + 1);\n\tlet columns = lineText.split(\"|\");\n\tconst aligns = [];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst t = columns[i].trim();\n\t\tif (!t) if (i === 0 || i === columns.length - 1) continue;\n\t\telse return false;\n\t\tif (!/^:?-+:?$/.test(t)) return false;\n\t\tif (t.charCodeAt(t.length - 1) === 58) aligns.push(t.charCodeAt(0) === 58 ? \"center\" : \"right\");\n\t\telse if (t.charCodeAt(0) === 58) aligns.push(\"left\");\n\t\telse aligns.push(\"\");\n\t}\n\tlineText = getLine(state, startLine).trim();\n\tif (lineText.indexOf(\"|\") === -1) return false;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tcolumns = escapedSplit(lineText);\n\tif (columns.length && columns[0] === \"\") columns.shift();\n\tif (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n\tconst columnCount = columns.length;\n\tif (columnCount === 0 || columnCount !== aligns.length) return false;\n\tif (silent) return true;\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"table\";\n\tconst terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n\tconst token_to = state.push(\"table_open\", \"table\", 1);\n\tconst tableLines = [startLine, 0];\n\ttoken_to.map = tableLines;\n\tconst token_tho = state.push(\"thead_open\", \"thead\", 1);\n\ttoken_tho.map = [startLine, startLine + 1];\n\tconst token_htro = state.push(\"tr_open\", \"tr\", 1);\n\ttoken_htro.map = [startLine, startLine + 1];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst token_ho = state.push(\"th_open\", \"th\", 1);\n\t\tif (aligns[i]) token_ho.attrs = [[\"style\", `text-align:${aligns[i]}`]];\n\t\tconst token_il = state.push(\"inline\", \"\", 0);\n\t\ttoken_il.content = columns[i].trim();\n\t\ttoken_il.children = [];\n\t\tstate.push(\"th_close\", \"th\", -1);\n\t}\n\tstate.push(\"tr_close\", \"tr\", -1);\n\tstate.push(\"thead_close\", \"thead\", -1);\n\tlet tbodyLines;\n\tlet autocompletedCells = 0;\n\tfor (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n\t\tif (state.sCount[nextLine] < state.blkIndent) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t\tlineText = getLine(state, nextLine).trim();\n\t\tif (!lineText) break;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) break;\n\t\tcolumns = escapedSplit(lineText);\n\t\tif (columns.length && columns[0] === \"\") columns.shift();\n\t\tif (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n\t\tautocompletedCells += columnCount - columns.length;\n\t\tif (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) break;\n\t\tif (nextLine === startLine + 2) {\n\t\t\tconst token_tbo = state.push(\"tbody_open\", \"tbody\", 1);\n\t\t\ttoken_tbo.map = tbodyLines = [startLine + 2, 0];\n\t\t}\n\t\tconst token_tro = state.push(\"tr_open\", \"tr\", 1);\n\t\ttoken_tro.map = [nextLine, nextLine + 1];\n\t\tfor (let i = 0; i < columnCount; i++) {\n\t\t\tconst token_tdo = state.push(\"td_open\", \"td\", 1);\n\t\t\tif (aligns[i]) token_tdo.attrs = [[\"style\", `text-align:${aligns[i]}`]];\n\t\t\tconst token_il = state.push(\"inline\", \"\", 0);\n\t\t\ttoken_il.content = columns[i] ? columns[i].trim() : \"\";\n\t\t\ttoken_il.children = [];\n\t\t\tstate.push(\"td_close\", \"td\", -1);\n\t\t}\n\t\tstate.push(\"tr_close\", \"tr\", -1);\n\t}\n\tif (tbodyLines) {\n\t\tstate.push(\"tbody_close\", \"tbody\", -1);\n\t\ttbodyLines[1] = nextLine;\n\t}\n\tstate.push(\"table_close\", \"table\", -1);\n\ttableLines[1] = nextLine;\n\tstate.parentType = oldParentType;\n\tstate.line = nextLine;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/code.ts\nfunction code(state, startLine, endLine) {\n\tif (state.sCount[startLine] - state.blkIndent < 4) return false;\n\tlet nextLine = startLine + 1;\n\tlet last = nextLine;\n\twhile (nextLine < endLine) {\n\t\tif (state.isEmpty(nextLine)) {\n\t\t\tnextLine++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) {\n\t\t\tnextLine++;\n\t\t\tlast = nextLine;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tstate.line = last;\n\tconst token = state.push(\"code_block\", \"code\", 0);\n\ttoken.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + \"\\n\";\n\ttoken.map = [startLine, state.line];\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/fence.ts\nfunction fence(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (pos + 3 > max) return false;\n\tconst marker = state.src.charCodeAt(pos);\n\tif (marker !== 126 && marker !== 96) return false;\n\tlet mem = pos;\n\tpos = state.skipChars(pos, marker);\n\tlet len = pos - mem;\n\tif (len < 3) return false;\n\tconst markup = state.src.slice(mem, pos);\n\tconst params = state.src.slice(pos, max);\n\tif (marker === 96) {\n\t\tif (params.indexOf(String.fromCharCode(marker)) >= 0) return false;\n\t}\n\tif (silent) return true;\n\tlet nextLine = startLine;\n\tlet haveEndMarker = false;\n\tfor (;;) {\n\t\tnextLine++;\n\t\tif (nextLine >= endLine) break;\n\t\tpos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tif (pos < max && state.sCount[nextLine] < state.blkIndent) break;\n\t\tif (state.src.charCodeAt(pos) !== marker) continue;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) continue;\n\t\tpos = state.skipChars(pos, marker);\n\t\tif (pos - mem < len) continue;\n\t\tpos = state.skipSpaces(pos);\n\t\tif (pos < max) continue;\n\t\thaveEndMarker = true;\n\t\tbreak;\n\t}\n\tlen = state.sCount[startLine];\n\tstate.line = nextLine + (haveEndMarker ? 1 : 0);\n\tconst token = state.push(\"fence\", \"code\", 0);\n\ttoken.info = params;\n\ttoken.content = state.getLines(startLine + 1, nextLine, len, true);\n\ttoken.markup = markup;\n\ttoken.map = [startLine, state.line];\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/blockquote.ts\nfunction blockquote(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tconst oldLineMax = state.lineMax;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (state.src.charCodeAt(pos) !== 62) return false;\n\tif (silent) return true;\n\tconst oldBMarks = [];\n\tconst oldBSCount = [];\n\tconst oldSCount = [];\n\tconst oldTShift = [];\n\tconst terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"blockquote\";\n\tlet lastLineEmpty = false;\n\tlet nextLine;\n\tfor (nextLine = startLine; nextLine < endLine; nextLine++) {\n\t\tconst isOutdented = state.sCount[nextLine] < state.blkIndent;\n\t\tpos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tif (pos >= max) break;\n\t\tif (state.src.charCodeAt(pos++) === 62 && !isOutdented) {\n\t\t\tlet initial = state.sCount[nextLine] + 1;\n\t\t\tlet spaceAfterMarker;\n\t\t\tlet adjustTab;\n\t\t\tif (state.src.charCodeAt(pos) === 32) {\n\t\t\t\tpos++;\n\t\t\t\tinitial++;\n\t\t\t\tadjustTab = false;\n\t\t\t\tspaceAfterMarker = true;\n\t\t\t} else if (state.src.charCodeAt(pos) === 9) {\n\t\t\t\tspaceAfterMarker = true;\n\t\t\t\tif ((state.bsCount[nextLine] + initial) % 4 === 3) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tinitial++;\n\t\t\t\t\tadjustTab = false;\n\t\t\t\t} else adjustTab = true;\n\t\t\t} else spaceAfterMarker = false;\n\t\t\tlet offset = initial;\n\t\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\t\tstate.bMarks[nextLine] = pos;\n\t\t\twhile (pos < max) {\n\t\t\t\tconst ch = state.src.charCodeAt(pos);\n\t\t\t\tif (isSpace(ch)) if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n\t\t\t\telse offset++;\n\t\t\t\telse break;\n\t\t\t\tpos++;\n\t\t\t}\n\t\t\tlastLineEmpty = pos >= max;\n\t\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\t\tstate.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\t\t\toldSCount.push(state.sCount[nextLine]);\n\t\t\tstate.sCount[nextLine] = offset - initial;\n\t\t\toldTShift.push(state.tShift[nextLine]);\n\t\t\tstate.tShift[nextLine] = pos - state.bMarks[nextLine];\n\t\t\tcontinue;\n\t\t}\n\t\tif (lastLineEmpty) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) {\n\t\t\tstate.lineMax = nextLine;\n\t\t\tif (state.blkIndent !== 0) {\n\t\t\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\t\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\t\t\toldTShift.push(state.tShift[nextLine]);\n\t\t\t\toldSCount.push(state.sCount[nextLine]);\n\t\t\t\tstate.sCount[nextLine] -= state.blkIndent;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\toldTShift.push(state.tShift[nextLine]);\n\t\toldSCount.push(state.sCount[nextLine]);\n\t\tstate.sCount[nextLine] = -1;\n\t}\n\tconst oldIndent = state.blkIndent;\n\tstate.blkIndent = 0;\n\tconst token_o = state.push(\"blockquote_open\", \"blockquote\", 1);\n\ttoken_o.markup = \">\";\n\tconst lines = [startLine, 0];\n\ttoken_o.map = lines;\n\tstate.md.block.tokenize(state, startLine, nextLine);\n\tconst token_c = state.push(\"blockquote_close\", \"blockquote\", -1);\n\ttoken_c.markup = \">\";\n\tstate.lineMax = oldLineMax;\n\tstate.parentType = oldParentType;\n\tlines[1] = state.line;\n\tfor (let i = 0; i < oldTShift.length; i++) {\n\t\tstate.bMarks[i + startLine] = oldBMarks[i];\n\t\tstate.tShift[i + startLine] = oldTShift[i];\n\t\tstate.sCount[i + startLine] = oldSCount[i];\n\t\tstate.bsCount[i + startLine] = oldBSCount[i];\n\t}\n\tstate.blkIndent = oldIndent;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/hr.ts\nfunction hr(state, startLine, endLine, silent) {\n\tconst max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tconst marker = state.src.charCodeAt(pos++);\n\tif (marker !== 42 && marker !== 45 && marker !== 95) return false;\n\tlet cnt = 1;\n\twhile (pos < max) {\n\t\tconst ch = state.src.charCodeAt(pos++);\n\t\tif (ch !== marker && !isSpace(ch)) return false;\n\t\tif (ch === marker) cnt++;\n\t}\n\tif (cnt < 3) return false;\n\tif (silent) return true;\n\tstate.line = startLine + 1;\n\tconst token = state.push(\"hr\", \"hr\", 0);\n\ttoken.map = [startLine, state.line];\n\ttoken.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/list.ts\nfunction skipBulletListMarker(state, startLine) {\n\tconst max = state.eMarks[startLine];\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tconst marker = state.src.charCodeAt(pos++);\n\tif (marker !== 42 && marker !== 45 && marker !== 43) return -1;\n\tif (pos < max) {\n\t\tif (!isSpace(state.src.charCodeAt(pos))) return -1;\n\t}\n\treturn pos;\n}\nfunction skipOrderedListMarker(state, startLine) {\n\tconst start = state.bMarks[startLine] + state.tShift[startLine];\n\tconst max = state.eMarks[startLine];\n\tlet pos = start;\n\tif (pos + 1 >= max) return -1;\n\tlet ch = state.src.charCodeAt(pos++);\n\tif (ch < 48 || ch > 57) return -1;\n\tfor (;;) {\n\t\tif (pos >= max) return -1;\n\t\tch = state.src.charCodeAt(pos++);\n\t\tif (ch >= 48 && ch <= 57) {\n\t\t\tif (pos - start >= 10) return -1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === 41 || ch === 46) break;\n\t\treturn -1;\n\t}\n\tif (pos < max) {\n\t\tch = state.src.charCodeAt(pos);\n\t\tif (!isSpace(ch)) return -1;\n\t}\n\treturn pos;\n}\nfunction markTightParagraphs(state, idx) {\n\tconst level = state.level + 2;\n\tfor (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) if (state.tokens[i].level === level && state.tokens[i].type === \"paragraph_open\") {\n\t\tstate.tokens[i + 2].hidden = true;\n\t\tstate.tokens[i].hidden = true;\n\t\ti += 2;\n\t}\n}\nfunction list(state, startLine, endLine, silent) {\n\tlet max, pos, start, token;\n\tlet nextLine = startLine;\n\tlet tight = true;\n\tif (state.sCount[nextLine] - state.blkIndent >= 4) return false;\n\tif (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) return false;\n\tlet isTerminatingParagraph = false;\n\tif (silent && state.parentType === \"paragraph\") {\n\t\tif (state.sCount[nextLine] >= state.blkIndent) isTerminatingParagraph = true;\n\t}\n\tlet isOrdered;\n\tlet markerValue;\n\tlet posAfterMarker;\n\tif ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n\t\tisOrdered = true;\n\t\tstart = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmarkerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\t\tif (isTerminatingParagraph && markerValue !== 1) return false;\n\t} else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) isOrdered = false;\n\telse return false;\n\tif (isTerminatingParagraph) {\n\t\tif (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n\t}\n\tif (silent) return true;\n\tconst markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\tconst listTokIdx = state.tokens.length;\n\tif (isOrdered) {\n\t\ttoken = state.push(\"ordered_list_open\", \"ol\", 1);\n\t\tif (markerValue !== 1) token.attrs = [[\"start\", markerValue]];\n\t} else token = state.push(\"bullet_list_open\", \"ul\", 1);\n\tconst listLines = [nextLine, 0];\n\ttoken.map = listLines;\n\ttoken.markup = String.fromCharCode(markerCharCode);\n\tlet prevEmptyEnd = false;\n\tconst terminatorRules = state.md.block.ruler.getRules(\"list\");\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"list\";\n\twhile (nextLine < endLine) {\n\t\tpos = posAfterMarker;\n\t\tmax = state.eMarks[nextLine];\n\t\tconst initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\t\tlet offset = initial;\n\t\twhile (pos < max) {\n\t\t\tconst ch = state.src.charCodeAt(pos);\n\t\t\tif (ch === 9) offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n\t\t\telse if (ch === 32) offset++;\n\t\t\telse break;\n\t\t\tpos++;\n\t\t}\n\t\tconst contentStart = pos;\n\t\tlet indentAfterMarker;\n\t\tif (contentStart >= max) indentAfterMarker = 1;\n\t\telse indentAfterMarker = offset - initial;\n\t\tif (indentAfterMarker > 4) indentAfterMarker = 1;\n\t\tconst indent = initial + indentAfterMarker;\n\t\ttoken = state.push(\"list_item_open\", \"li\", 1);\n\t\ttoken.markup = String.fromCharCode(markerCharCode);\n\t\tconst itemLines = [nextLine, 0];\n\t\ttoken.map = itemLines;\n\t\tif (isOrdered) token.info = state.src.slice(start, posAfterMarker - 1);\n\t\tconst oldTight = state.tight;\n\t\tconst oldTShift = state.tShift[nextLine];\n\t\tconst oldSCount = state.sCount[nextLine];\n\t\tconst oldListIndent = state.listIndent;\n\t\tstate.listIndent = state.blkIndent;\n\t\tstate.blkIndent = indent;\n\t\tstate.tight = true;\n\t\tstate.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n\t\tstate.sCount[nextLine] = offset;\n\t\tif (contentStart >= max && state.isEmpty(nextLine + 1)) state.line = Math.min(state.line + 2, endLine);\n\t\telse state.md.block.tokenize(state, nextLine, endLine);\n\t\tif (!state.tight || prevEmptyEnd) tight = false;\n\t\tprevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);\n\t\tstate.blkIndent = state.listIndent;\n\t\tstate.listIndent = oldListIndent;\n\t\tstate.tShift[nextLine] = oldTShift;\n\t\tstate.sCount[nextLine] = oldSCount;\n\t\tstate.tight = oldTight;\n\t\ttoken = state.push(\"list_item_close\", \"li\", -1);\n\t\ttoken.markup = String.fromCharCode(markerCharCode);\n\t\tnextLine = state.line;\n\t\titemLines[1] = nextLine;\n\t\tif (nextLine >= endLine) break;\n\t\tif (state.sCount[nextLine] < state.blkIndent) break;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t\tif (isOrdered) {\n\t\t\tposAfterMarker = skipOrderedListMarker(state, nextLine);\n\t\t\tif (posAfterMarker < 0) break;\n\t\t\tstart = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\t} else {\n\t\t\tposAfterMarker = skipBulletListMarker(state, nextLine);\n\t\t\tif (posAfterMarker < 0) break;\n\t\t}\n\t\tif (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) break;\n\t}\n\tif (isOrdered) token = state.push(\"ordered_list_close\", \"ol\", -1);\n\telse token = state.push(\"bullet_list_close\", \"ul\", -1);\n\ttoken.markup = String.fromCharCode(markerCharCode);\n\tlistLines[1] = nextLine;\n\tstate.line = nextLine;\n\tstate.parentType = oldParentType;\n\tif (tight) markTightParagraphs(state, listTokIdx);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/reference.ts\nfunction reference(state, startLine, _endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tlet nextLine = startLine + 1;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (state.src.charCodeAt(pos) !== 91) return false;\n\tfunction getNextLine(nextLine) {\n\t\tconst endLine = state.lineMax;\n\t\tif (nextLine >= endLine || state.isEmpty(nextLine)) return null;\n\t\tlet isContinuation = false;\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) isContinuation = true;\n\t\tif (state.sCount[nextLine] < 0) isContinuation = true;\n\t\tif (!isContinuation) {\n\t\t\tconst terminatorRules = state.md.block.ruler.getRules(\"reference\");\n\t\t\tconst oldParentType = state.parentType;\n\t\t\tstate.parentType = \"reference\";\n\t\t\tlet terminate = false;\n\t\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\t\tterminate = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.parentType = oldParentType;\n\t\t\tif (terminate) return null;\n\t\t}\n\t\tconst pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tconst max = state.eMarks[nextLine];\n\t\treturn state.src.slice(pos, max + 1);\n\t}\n\tlet str = state.src.slice(pos, max + 1);\n\tmax = str.length;\n\tlet labelEnd = -1;\n\tfor (pos = 1; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 91) return false;\n\t\telse if (ch === 93) {\n\t\t\tlabelEnd = pos;\n\t\t\tbreak;\n\t\t} else if (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (ch === 92) {\n\t\t\tpos++;\n\t\t\tif (pos < max && str.charCodeAt(pos) === 10) {\n\t\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\t\tif (lineContent !== null) {\n\t\t\t\t\tstr += lineContent;\n\t\t\t\t\tmax = str.length;\n\t\t\t\t\tnextLine++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) return false;\n\tfor (pos = labelEnd + 2; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (isSpace(ch)) {} else break;\n\t}\n\tconst destRes = state.md.helpers.parseLinkDestination(str, pos, max);\n\tif (!destRes.ok) return false;\n\tconst href = state.md.normalizeLink(destRes.str);\n\tif (!state.md.validateLink(href)) return false;\n\tpos = destRes.pos;\n\tconst destEndPos = pos;\n\tconst destEndLineNo = nextLine;\n\tconst start = pos;\n\tfor (; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (isSpace(ch)) {} else break;\n\t}\n\tlet titleRes = state.md.helpers.parseLinkTitle(str, pos, max);\n\twhile (titleRes.can_continue) {\n\t\tconst lineContent = getNextLine(nextLine);\n\t\tif (lineContent === null) break;\n\t\tstr += lineContent;\n\t\tpos = max;\n\t\tmax = str.length;\n\t\tnextLine++;\n\t\ttitleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);\n\t}\n\tlet title;\n\tif (pos < max && start !== pos && titleRes.ok) {\n\t\ttitle = titleRes.str;\n\t\tpos = titleRes.pos;\n\t} else {\n\t\ttitle = \"\";\n\t\tpos = destEndPos;\n\t\tnextLine = destEndLineNo;\n\t}\n\twhile (pos < max) {\n\t\tif (!isSpace(str.charCodeAt(pos))) break;\n\t\tpos++;\n\t}\n\tif (pos < max && str.charCodeAt(pos) !== 10) {\n\t\tif (title) {\n\t\t\ttitle = \"\";\n\t\t\tpos = destEndPos;\n\t\t\tnextLine = destEndLineNo;\n\t\t\twhile (pos < max) {\n\t\t\t\tif (!isSpace(str.charCodeAt(pos))) break;\n\t\t\t\tpos++;\n\t\t\t}\n\t\t}\n\t}\n\tif (pos < max && str.charCodeAt(pos) !== 10) return false;\n\tconst label = normalizeReference(str.slice(1, labelEnd));\n\tif (!label) return false;\n\t/* istanbul ignore if */\n\tif (silent) return true;\n\tif (typeof state.env.references === \"undefined\") state.env.references = {};\n\tif (typeof state.env.references[label] === \"undefined\") state.env.references[label] = {\n\t\ttitle,\n\t\thref\n\t};\n\tconst token = state.push(\"reference_definition\", \"\", 0);\n\ttoken.map = [startLine, nextLine];\n\ttoken.hidden = true;\n\tconst meta = Object.create(null);\n\tmeta.label = label;\n\ttoken.meta = meta;\n\tstate.line = nextLine;\n\treturn true;\n}\n//#endregion\n//#region src/common/html_blocks.ts\nvar html_blocks_default = [\n\t\"address\",\n\t\"article\",\n\t\"aside\",\n\t\"base\",\n\t\"basefont\",\n\t\"blockquote\",\n\t\"body\",\n\t\"caption\",\n\t\"center\",\n\t\"col\",\n\t\"colgroup\",\n\t\"dd\",\n\t\"details\",\n\t\"dialog\",\n\t\"dir\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"footer\",\n\t\"form\",\n\t\"frame\",\n\t\"frameset\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hr\",\n\t\"html\",\n\t\"iframe\",\n\t\"legend\",\n\t\"li\",\n\t\"link\",\n\t\"main\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"nav\",\n\t\"noframes\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"p\",\n\t\"param\",\n\t\"search\",\n\t\"section\",\n\t\"summary\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"title\",\n\t\"tr\",\n\t\"track\",\n\t\"ul\"\n];\n//#endregion\n//#region src/common/html_re.ts\nvar open_tag = `<[A-Za-z][A-Za-z0-9\\\\-]*(?:\\\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\\\s*=\\\\s*(?:[^\"'=<>\\`\\\\x00-\\\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\\\s*\\\\/?>`;\nvar close_tag = \"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\";\nvar HTML_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag}|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\\\s\\\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>)`);\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag})`);\n//#endregion\n//#region src/rules_block/html_block.ts\nvar HTML_SEQUENCES = [\n\t[\n\t\t/^<(script|pre|style|textarea)(?=(\\s|>|$))/i,\n\t\t/<\\/(script|pre|style|textarea)>/i,\n\t\ttrue\n\t],\n\t[\n\t\t/^<!--/,\n\t\t/-->/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<\\?/,\n\t\t/\\?>/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<![A-Za-z]/,\n\t\t/>/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<!\\[CDATA\\[/,\n\t\t/\\]\\]>/,\n\t\ttrue\n\t],\n\t[\n\t\tnew RegExp(`^</?(${html_blocks_default.join(\"|\")})(?=(\\\\s|/?>|$))`, \"i\"),\n\t\t/^$/,\n\t\ttrue\n\t],\n\t[\n\t\tnew RegExp(`${HTML_OPEN_CLOSE_TAG_RE.source}\\\\s*$`),\n\t\t/^$/,\n\t\tfalse\n\t]\n];\nfunction html_block(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (!state.md.options.html) return false;\n\tif (state.src.charCodeAt(pos) !== 60) return false;\n\tlet lineText = state.src.slice(pos, max);\n\tlet i = 0;\n\tfor (; i < HTML_SEQUENCES.length; i++) if (HTML_SEQUENCES[i][0].test(lineText)) break;\n\tif (i === HTML_SEQUENCES.length) return false;\n\tif (silent) return HTML_SEQUENCES[i][2];\n\tlet nextLine = startLine + 1;\n\tconst endsOnBlankLine = HTML_SEQUENCES[i][1].test(\"\");\n\tif (!HTML_SEQUENCES[i][1].test(lineText)) for (; nextLine < endLine; nextLine++) {\n\t\tif (state.sCount[nextLine] < state.blkIndent) {\n\t\t\tif (endsOnBlankLine || !state.isEmpty(nextLine)) break;\n\t\t}\n\t\tpos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tlineText = state.src.slice(pos, max);\n\t\tif (HTML_SEQUENCES[i][1].test(lineText)) {\n\t\t\tif (lineText.length !== 0) nextLine++;\n\t\t\tbreak;\n\t\t}\n\t}\n\tstate.line = nextLine;\n\tconst token = state.push(\"html_block\", \"\", 0);\n\ttoken.map = [startLine, nextLine];\n\ttoken.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/heading.ts\nfunction heading(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tlet ch = state.src.charCodeAt(pos);\n\tif (ch !== 35 || pos >= max) return false;\n\tlet level = 1;\n\tch = state.src.charCodeAt(++pos);\n\twhile (ch === 35 && pos < max && level <= 6) {\n\t\tlevel++;\n\t\tch = state.src.charCodeAt(++pos);\n\t}\n\tif (level > 6 || pos < max && !isSpace(ch)) return false;\n\tif (silent) return true;\n\tmax = state.skipSpacesBack(max, pos);\n\tconst tmp = state.skipCharsBack(max, 35, pos);\n\tif (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) max = tmp;\n\tstate.line = startLine + 1;\n\tconst token_o = state.push(\"heading_open\", `h${level}`, 1);\n\ttoken_o.markup = \"########\".slice(0, level);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = asciiTrim(state.src.slice(pos, max));\n\ttoken_i.map = [startLine, state.line];\n\ttoken_i.children = [];\n\tconst token_c = state.push(\"heading_close\", `h${level}`, -1);\n\ttoken_c.markup = \"########\".slice(0, level);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/lheading.ts\nfunction lheading(state, startLine, endLine) {\n\tconst terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"paragraph\";\n\tlet level = 0;\n\tlet marker;\n\tlet nextLine = startLine + 1;\n\tfor (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) continue;\n\t\tif (state.sCount[nextLine] >= state.blkIndent) {\n\t\t\tlet pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\t\tconst max = state.eMarks[nextLine];\n\t\t\tif (pos < max) {\n\t\t\t\tmarker = state.src.charCodeAt(pos);\n\t\t\t\tif (marker === 45 || marker === 61) {\n\t\t\t\t\tpos = state.skipChars(pos, marker);\n\t\t\t\t\tpos = state.skipSpaces(pos);\n\t\t\t\t\tif (pos >= max) {\n\t\t\t\t\t\tlevel = marker === 61 ? 1 : 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (state.sCount[nextLine] < 0) continue;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t}\n\tif (!level) {\n\t\tstate.parentType = oldParentType;\n\t\treturn false;\n\t}\n\tconst content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));\n\tstate.line = nextLine + 1;\n\tconst token_o = state.push(\"heading_open\", `h${level}`, 1);\n\ttoken_o.markup = String.fromCharCode(marker);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = content;\n\ttoken_i.map = [startLine, state.line - 1];\n\ttoken_i.children = [];\n\tconst token_c = state.push(\"heading_close\", `h${level}`, -1);\n\ttoken_c.markup = String.fromCharCode(marker);\n\tstate.parentType = oldParentType;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/paragraph.ts\nfunction paragraph(state, startLine, endLine) {\n\tconst terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n\tconst oldParentType = state.parentType;\n\tlet nextLine = startLine + 1;\n\tstate.parentType = \"paragraph\";\n\tfor (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) continue;\n\t\tif (state.sCount[nextLine] < 0) continue;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t}\n\tconst content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));\n\tstate.line = nextLine;\n\tconst token_o = state.push(\"paragraph_open\", \"p\", 1);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = content;\n\ttoken_i.map = [startLine, state.line];\n\ttoken_i.children = [];\n\tstate.push(\"paragraph_close\", \"p\", -1);\n\tstate.parentType = oldParentType;\n\treturn true;\n}\n//#endregion\n//#region src/parser_block.ts\nvar _rules$1 = [\n\t[\n\t\t\"table\",\n\t\ttable,\n\t\t[\"paragraph\", \"reference\"]\n\t],\n\t[\"code\", code],\n\t[\n\t\t\"fence\",\n\t\tfence,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"blockquote\",\n\t\tblockquote,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"hr\",\n\t\thr,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"list\",\n\t\tlist,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\"reference\", reference],\n\t[\n\t\t\"html_block\",\n\t\thtml_block,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\n\t\t\"heading\",\n\t\theading,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\"lheading\", lheading],\n\t[\"paragraph\", paragraph]\n];\n/**\n* Block-level tokenizer.\n*/\nvar ParserBlock = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of block rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateBlock);\n\t\tfor (let i = 0; i < _rules$1.length; i++) this.ruler.push(_rules$1[i][0], _rules$1[i][1], { alt: (_rules$1[i][2] || []).slice() });\n\t}\n\ttokenize(state, startLine, endLine) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\tlet line = startLine;\n\t\tlet hasEmptyLines = false;\n\t\twhile (line < endLine) {\n\t\t\tstate.line = line = state.skipEmptyLines(line);\n\t\t\tif (line >= endLine) break;\n\t\t\tif (state.sCount[line] < state.blkIndent) break;\n\t\t\tif (state.level >= maxNesting) {\n\t\t\t\tstate.line = endLine;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst prevLine = state.line;\n\t\t\tlet ok = false;\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tok = rules[i](state, line, endLine, false);\n\t\t\t\tif (ok) {\n\t\t\t\t\tif (prevLine >= state.line) throw new Error(\"block rule didn't increment state.line\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ok) throw new Error(\"none of the block rules matched\");\n\t\t\tstate.tight = !hasEmptyLines;\n\t\t\tif (state.isEmpty(state.line - 1)) hasEmptyLines = true;\n\t\t\tline = state.line;\n\t\t\tif (line < endLine && state.isEmpty(line)) {\n\t\t\t\thasEmptyLines = true;\n\t\t\t\tline++;\n\t\t\t\tstate.line = line;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Process input string and push block tokens into `outTokens`\n\t*/\n\tparse(src, md, env, outTokens) {\n\t\tif (!src) return;\n\t\tconst state = new this.State(src, md, env, outTokens);\n\t\tthis.tokenize(state, state.line, state.lineMax);\n\t}\n};\n//#endregion\n//#region src/rules_inline/state_inline.ts\n/** Mutable state passed to inline rules while tokenizing inline content. */\nvar StateInline = class {\n\tconstructor(src, md, env, outTokens) {\n\t\t_defineProperty(this, \"pos\", 0);\n\t\t_defineProperty(this, \"level\", 0);\n\t\t_defineProperty(this, \"pending\", \"\");\n\t\t_defineProperty(this, \"pendingLevel\", 0);\n\t\t_defineProperty(this, \"cache\", {});\n\t\t_defineProperty(this, \"backticks\", {});\n\t\t_defineProperty(this, \"backticksScanned\", false);\n\t\t_defineProperty(this, \"linkLevel\", 0);\n\t\t_defineProperty(this, \"delimiters\", []);\n\t\t_defineProperty(this, \"_prev_delimiters\", []);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.env = env;\n\t\tthis.md = md;\n\t\tthis.tokens = outTokens;\n\t\tthis.tokens_meta = Array(outTokens.length);\n\t\tthis.posMax = this.src.length;\n\t}\n\tpushPending() {\n\t\tconst token = new Token(\"text\", \"\", 0);\n\t\ttoken.content = this.pending;\n\t\ttoken.level = this.pendingLevel;\n\t\tthis.tokens.push(token);\n\t\tthis.pending = \"\";\n\t\treturn token;\n\t}\n\tpush(type, tag, nesting) {\n\t\tif (this.pending) this.pushPending();\n\t\tconst token = new Token(type, tag, nesting);\n\t\tlet token_meta = void 0;\n\t\tif (nesting < 0) {\n\t\t\tthis.level--;\n\t\t\tthis.delimiters = this._prev_delimiters.pop();\n\t\t}\n\t\ttoken.level = this.level;\n\t\tif (nesting > 0) {\n\t\t\tthis.level++;\n\t\t\tthis._prev_delimiters.push(this.delimiters);\n\t\t\tthis.delimiters = [];\n\t\t\ttoken_meta = { delimiters: this.delimiters };\n\t\t}\n\t\tthis.pendingLevel = this.level;\n\t\tthis.tokens.push(token);\n\t\tthis.tokens_meta.push(token_meta);\n\t\treturn token;\n\t}\n\tscanDelims(start, canSplitWord) {\n\t\tconst max = this.posMax;\n\t\tconst marker = this.src.charCodeAt(start);\n\t\tlet lastChar;\n\t\tif (start === 0) lastChar = 32;\n\t\telse if (start === 1) {\n\t\t\tlastChar = this.src.charCodeAt(0);\n\t\t\tif ((lastChar & 63488) === 55296) lastChar = 65533;\n\t\t} else {\n\t\t\tlastChar = this.src.charCodeAt(start - 1);\n\t\t\tif ((lastChar & 64512) === 56320) {\n\t\t\t\tconst highSurr = this.src.charCodeAt(start - 2);\n\t\t\t\tlastChar = (highSurr & 64512) === 55296 ? 65536 + (highSurr - 55296 << 10) + (lastChar - 56320) : 65533;\n\t\t\t} else if ((lastChar & 64512) === 55296) lastChar = 65533;\n\t\t}\n\t\tlet pos = start;\n\t\twhile (pos < max && this.src.charCodeAt(pos) === marker) pos++;\n\t\tconst count = pos - start;\n\t\tlet nextChar = pos < max ? this.src.charCodeAt(pos) : 32;\n\t\tif ((nextChar & 64512) === 55296) {\n\t\t\tconst lowSurr = this.src.charCodeAt(pos + 1);\n\t\t\tnextChar = (lowSurr & 64512) === 56320 ? 65536 + (nextChar - 55296 << 10) + (lowSurr - 56320) : 65533;\n\t\t} else if ((nextChar & 64512) === 56320) nextChar = 65533;\n\t\tconst isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);\n\t\tconst isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);\n\t\tconst isLastWhiteSpace = isWhiteSpace(lastChar);\n\t\tconst isNextWhiteSpace = isWhiteSpace(nextChar);\n\t\tconst left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);\n\t\tconst right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);\n\t\treturn {\n\t\t\tcan_open: left_flanking && (canSplitWord || !right_flanking || isLastPunctChar),\n\t\t\tcan_close: right_flanking && (canSplitWord || !left_flanking || isNextPunctChar),\n\t\t\tlength: count\n\t\t};\n\t}\n};\n//#endregion\n//#region src/rules_inline/text.ts\nfunction isTerminatorChar(ch) {\n\tswitch (ch) {\n\t\tcase 10:\n\t\tcase 33:\n\t\tcase 35:\n\t\tcase 36:\n\t\tcase 37:\n\t\tcase 38:\n\t\tcase 42:\n\t\tcase 43:\n\t\tcase 45:\n\t\tcase 58:\n\t\tcase 60:\n\t\tcase 61:\n\t\tcase 62:\n\t\tcase 64:\n\t\tcase 91:\n\t\tcase 92:\n\t\tcase 93:\n\t\tcase 94:\n\t\tcase 95:\n\t\tcase 96:\n\t\tcase 123:\n\t\tcase 125:\n\t\tcase 126: return true;\n\t\tdefault: return false;\n\t}\n}\nfunction text(state, silent) {\n\tlet pos = state.pos;\n\twhile (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) pos++;\n\tif (pos === state.pos) return false;\n\tif (!silent) state.pending += state.src.slice(state.pos, pos);\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/linkify.ts\nvar SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\nfunction linkify(state, silent) {\n\tif (!state.md.options.linkify) return false;\n\tif (state.linkLevel > 0) return false;\n\tconst pos = state.pos;\n\tconst max = state.posMax;\n\tif (pos + 3 > max) return false;\n\tif (state.src.charCodeAt(pos) !== 58) return false;\n\tif (state.src.charCodeAt(pos + 1) !== 47) return false;\n\tif (state.src.charCodeAt(pos + 2) !== 47) return false;\n\tconst match = state.pending.match(SCHEME_RE);\n\tif (!match) return false;\n\tconst proto = match[1];\n\tconst link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n\tif (!link) return false;\n\tlet url = link.url;\n\tif (url.length <= proto.length) return false;\n\tlet urlEnd = url.length;\n\twhile (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 42) urlEnd--;\n\tif (urlEnd !== url.length) url = url.slice(0, urlEnd);\n\tconst fullUrl = state.md.normalizeLink(url);\n\tif (!state.md.validateLink(fullUrl)) return false;\n\tif (!silent) {\n\t\tstate.pending = state.pending.slice(0, -proto.length);\n\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\ttoken_o.markup = \"linkify\";\n\t\ttoken_o.info = \"auto\";\n\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\ttoken_c.markup = \"linkify\";\n\t\ttoken_c.info = \"auto\";\n\t}\n\tstate.pos += url.length - proto.length;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/newline.ts\nfunction newline(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 10) return false;\n\tconst pmax = state.pending.length - 1;\n\tconst max = state.posMax;\n\tif (!silent) if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {\n\t\tlet ws = pmax - 1;\n\t\twhile (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;\n\t\tstate.pending = state.pending.slice(0, ws);\n\t\tstate.push(\"hardbreak\", \"br\", 0);\n\t} else {\n\t\tstate.pending = state.pending.slice(0, -1);\n\t\tstate.push(\"softbreak\", \"br\", 0);\n\t}\n\telse state.push(\"softbreak\", \"br\", 0);\n\tpos++;\n\twhile (pos < max && isSpace(state.src.charCodeAt(pos))) pos++;\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/escape.ts\nvar ESCAPED = [];\nfor (let i = 0; i < 256; i++) ESCAPED.push(0);\n\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(ch) {\n\tESCAPED[ch.charCodeAt(0)] = 1;\n});\nfunction escape(state, silent) {\n\tlet pos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(pos) !== 92) return false;\n\tpos++;\n\tif (pos >= max) return false;\n\tlet ch1 = state.src.charCodeAt(pos);\n\tif (ch1 === 10) {\n\t\tif (!silent) state.push(\"hardbreak\", \"br\", 0);\n\t\tpos++;\n\t\twhile (pos < max) {\n\t\t\tch1 = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(ch1)) break;\n\t\t\tpos++;\n\t\t}\n\t\tstate.pos = pos;\n\t\treturn true;\n\t}\n\tif (ch1 === 32) {\n\t\tif (!silent) {\n\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\ttoken.content = \"\\\\\";\n\t\t\ttoken.markup = \"\\\\\";\n\t\t\ttoken.info = \"escape\";\n\t\t}\n\t\tstate.pos = pos;\n\t\treturn true;\n\t}\n\tlet escapedStr = state.src[pos];\n\tif (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) {\n\t\tconst ch2 = state.src.charCodeAt(pos + 1);\n\t\tif (ch2 >= 56320 && ch2 <= 57343) {\n\t\t\tescapedStr += state.src[pos + 1];\n\t\t\tpos++;\n\t\t}\n\t}\n\tconst origStr = \"\\\\\" + escapedStr;\n\tif (!silent) {\n\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\tif (ch1 < 256 && ESCAPED[ch1] !== 0) token.content = escapedStr;\n\t\telse token.content = origStr;\n\t\ttoken.markup = origStr;\n\t\ttoken.info = \"escape\";\n\t}\n\tstate.pos = pos + 1;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/backticks.ts\nfunction backtick(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 96) return false;\n\tconst start = pos;\n\tpos++;\n\tconst max = state.posMax;\n\twhile (pos < max && state.src.charCodeAt(pos) === 96) pos++;\n\tconst marker = state.src.slice(start, pos);\n\tconst openerLength = marker.length;\n\tif (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n\t\tif (!silent) state.pending += marker;\n\t\tstate.pos += openerLength;\n\t\treturn true;\n\t}\n\tlet matchEnd = pos;\n\tlet matchStart;\n\twhile ((matchStart = state.src.indexOf(\"`\", matchEnd)) !== -1) {\n\t\tmatchEnd = matchStart + 1;\n\t\twhile (matchEnd < max && state.src.charCodeAt(matchEnd) === 96) matchEnd++;\n\t\tconst closerLength = matchEnd - matchStart;\n\t\tif (closerLength === openerLength) {\n\t\t\tif (!silent) {\n\t\t\t\tconst token = state.push(\"code_inline\", \"code\", 0);\n\t\t\t\ttoken.markup = marker;\n\t\t\t\ttoken.content = state.src.slice(pos, matchStart).replace(/\\n/g, \" \").replace(/^ (.+) $/, \"$1\");\n\t\t\t}\n\t\t\tstate.pos = matchEnd;\n\t\t\treturn true;\n\t\t}\n\t\tstate.backticks[closerLength] = matchStart;\n\t}\n\tstate.backticksScanned = true;\n\tif (!silent) state.pending += marker;\n\tstate.pos += openerLength;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/strikethrough.ts\nfunction strikethrough_tokenize(state, silent) {\n\tconst start = state.pos;\n\tconst marker = state.src.charCodeAt(start);\n\tif (silent) return false;\n\tif (marker !== 126) return false;\n\tconst scanned = state.scanDelims(state.pos, true);\n\tlet len = scanned.length;\n\tconst ch = String.fromCharCode(marker);\n\tif (len < 2) return false;\n\tlet token;\n\tif (len % 2) {\n\t\ttoken = state.push(\"text\", \"\", 0);\n\t\ttoken.content = ch;\n\t\tlen--;\n\t}\n\tfor (let i = 0; i < len; i += 2) {\n\t\ttoken = state.push(\"text\", \"\", 0);\n\t\ttoken.content = ch + ch;\n\t\tstate.delimiters.push({\n\t\t\tmarker,\n\t\t\tlength: 0,\n\t\t\ttoken: state.tokens.length - 1,\n\t\t\tend: -1,\n\t\t\topen: scanned.can_open,\n\t\t\tclose: scanned.can_close\n\t\t});\n\t}\n\tstate.pos += scanned.length;\n\treturn true;\n}\nfunction postProcess$1(state, delimiters) {\n\tlet token;\n\tconst loneMarkers = [];\n\tconst max = delimiters.length;\n\tfor (let i = 0; i < max; i++) {\n\t\tconst startDelim = delimiters[i];\n\t\tif (startDelim.marker !== 126) continue;\n\t\tif (startDelim.end === -1) continue;\n\t\tconst endDelim = delimiters[startDelim.end];\n\t\ttoken = state.tokens[startDelim.token];\n\t\ttoken.type = \"s_open\";\n\t\ttoken.tag = \"s\";\n\t\ttoken.nesting = 1;\n\t\ttoken.markup = \"~~\";\n\t\ttoken.content = \"\";\n\t\ttoken = state.tokens[endDelim.token];\n\t\ttoken.type = \"s_close\";\n\t\ttoken.tag = \"s\";\n\t\ttoken.nesting = -1;\n\t\ttoken.markup = \"~~\";\n\t\ttoken.content = \"\";\n\t\tif (state.tokens[endDelim.token - 1].type === \"text\" && state.tokens[endDelim.token - 1].content === \"~\") loneMarkers.push(endDelim.token - 1);\n\t}\n\twhile (loneMarkers.length) {\n\t\tconst i = loneMarkers.pop();\n\t\tlet j = i + 1;\n\t\twhile (j < state.tokens.length && state.tokens[j].type === \"s_close\") j++;\n\t\tj--;\n\t\tif (i !== j) {\n\t\t\ttoken = state.tokens[j];\n\t\t\tstate.tokens[j] = state.tokens[i];\n\t\t\tstate.tokens[i] = token;\n\t\t}\n\t}\n}\nfunction strikethrough_postProcess(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tpostProcess$1(state, state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) postProcess$1(state, delimiters);\n\t}\n}\nvar strikethrough_default = {\n\ttokenize: strikethrough_tokenize,\n\tpostProcess: strikethrough_postProcess\n};\n//#endregion\n//#region src/rules_inline/emphasis.ts\nfunction emphasis_tokenize(state, silent) {\n\tconst start = state.pos;\n\tconst marker = state.src.charCodeAt(start);\n\tif (silent) return false;\n\tif (marker !== 95 && marker !== 42) return false;\n\tconst scanned = state.scanDelims(state.pos, marker === 42);\n\tfor (let i = 0; i < scanned.length; i++) {\n\t\tconst token = state.push(\"text\", \"\", 0);\n\t\ttoken.content = String.fromCharCode(marker);\n\t\tstate.delimiters.push({\n\t\t\tmarker,\n\t\t\tlength: scanned.length,\n\t\t\ttoken: state.tokens.length - 1,\n\t\t\tend: -1,\n\t\t\topen: scanned.can_open,\n\t\t\tclose: scanned.can_close\n\t\t});\n\t}\n\tstate.pos += scanned.length;\n\treturn true;\n}\nfunction postProcess(state, delimiters) {\n\tconst max = delimiters.length;\n\tfor (let i = max - 1; i >= 0; i--) {\n\t\tconst startDelim = delimiters[i];\n\t\tif (startDelim.marker !== 95 && startDelim.marker !== 42) continue;\n\t\tif (startDelim.end === -1) continue;\n\t\tconst endDelim = delimiters[startDelim.end];\n\t\tconst isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\t\tconst ch = String.fromCharCode(startDelim.marker);\n\t\tconst token_o = state.tokens[startDelim.token];\n\t\ttoken_o.type = isStrong ? \"strong_open\" : \"em_open\";\n\t\ttoken_o.tag = isStrong ? \"strong\" : \"em\";\n\t\ttoken_o.nesting = 1;\n\t\ttoken_o.markup = isStrong ? ch + ch : ch;\n\t\ttoken_o.content = \"\";\n\t\tconst token_c = state.tokens[endDelim.token];\n\t\ttoken_c.type = isStrong ? \"strong_close\" : \"em_close\";\n\t\ttoken_c.tag = isStrong ? \"strong\" : \"em\";\n\t\ttoken_c.nesting = -1;\n\t\ttoken_c.markup = isStrong ? ch + ch : ch;\n\t\ttoken_c.content = \"\";\n\t\tif (isStrong) {\n\t\t\tstate.tokens[delimiters[i - 1].token].content = \"\";\n\t\t\tstate.tokens[delimiters[startDelim.end + 1].token].content = \"\";\n\t\t\ti--;\n\t\t}\n\t}\n}\nfunction emphasis_post_process(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tpostProcess(state, state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) postProcess(state, delimiters);\n\t}\n}\nvar emphasis_default = {\n\ttokenize: emphasis_tokenize,\n\tpostProcess: emphasis_post_process\n};\n//#endregion\n//#region src/rules_inline/link.ts\nfunction link(state, silent) {\n\tlet code, label, res, ref;\n\tlet href = \"\";\n\tlet title = \"\";\n\tlet start = state.pos;\n\tlet parseReference = true;\n\tif (state.src.charCodeAt(state.pos) !== 91) return false;\n\tconst oldPos = state.pos;\n\tconst max = state.posMax;\n\tconst labelStart = state.pos + 1;\n\tconst labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\tif (labelEnd < 0) return false;\n\tlet pos = labelEnd + 1;\n\tif (pos < max && state.src.charCodeAt(pos) === 40) {\n\t\tparseReference = false;\n\t\tpos++;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tif (pos >= max) return false;\n\t\tstart = pos;\n\t\tres = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\t\tif (res.ok) {\n\t\t\thref = state.md.normalizeLink(res.str);\n\t\t\tif (state.md.validateLink(href)) pos = res.pos;\n\t\t\telse href = \"\";\n\t\t\tstart = pos;\n\t\t\tfor (; pos < max; pos++) {\n\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t}\n\t\t\tres = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\t\t\tif (pos < max && start !== pos && res.ok) {\n\t\t\t\ttitle = res.str;\n\t\t\t\tpos = res.pos;\n\t\t\t\tfor (; pos < max; pos++) {\n\t\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pos >= max || state.src.charCodeAt(pos) !== 41) parseReference = true;\n\t\tpos++;\n\t}\n\tif (parseReference) {\n\t\tif (typeof state.env.references === \"undefined\") return false;\n\t\tif (pos < max && state.src.charCodeAt(pos) === 91) {\n\t\t\tstart = pos + 1;\n\t\t\tpos = state.md.helpers.parseLinkLabel(state, pos);\n\t\t\tif (pos >= 0) label = state.src.slice(start, pos++);\n\t\t\telse pos = labelEnd + 1;\n\t\t} else pos = labelEnd + 1;\n\t\tif (!label) label = state.src.slice(labelStart, labelEnd);\n\t\tlabel = normalizeReference(label);\n\t\tref = state.env.references[label];\n\t\tif (!ref) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\thref = ref.href;\n\t\ttitle = ref.title;\n\t}\n\tif (!silent) {\n\t\tstate.pos = labelStart;\n\t\tstate.posMax = labelEnd;\n\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\tconst attrs = [[\"href\", href]];\n\t\ttoken_o.attrs = attrs;\n\t\tif (title) attrs.push([\"title\", title]);\n\t\tif (label) {\n\t\t\tconst meta = Object.create(null);\n\t\t\tmeta.label = label;\n\t\t\ttoken_o.meta = meta;\n\t\t}\n\t\tstate.linkLevel++;\n\t\tstate.md.inline.tokenize(state);\n\t\tstate.linkLevel--;\n\t\tstate.push(\"link_close\", \"a\", -1);\n\t}\n\tstate.pos = pos;\n\tstate.posMax = max;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/image.ts\nfunction image(state, silent) {\n\tlet code, content, label, pos, ref, res, title, start;\n\tlet href = \"\";\n\tconst oldPos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(state.pos) !== 33) return false;\n\tif (state.src.charCodeAt(state.pos + 1) !== 91) return false;\n\tconst labelStart = state.pos + 2;\n\tconst labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\tif (labelEnd < 0) return false;\n\tpos = labelEnd + 1;\n\tif (pos < max && state.src.charCodeAt(pos) === 40) {\n\t\tpos++;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tif (pos >= max) return false;\n\t\tstart = pos;\n\t\tres = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\t\tif (res.ok) {\n\t\t\thref = state.md.normalizeLink(res.str);\n\t\t\tif (state.md.validateLink(href)) pos = res.pos;\n\t\t\telse href = \"\";\n\t\t}\n\t\tstart = pos;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tres = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\t\tif (pos < max && start !== pos && res.ok) {\n\t\t\ttitle = res.str;\n\t\t\tpos = res.pos;\n\t\t\tfor (; pos < max; pos++) {\n\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t}\n\t\t} else title = \"\";\n\t\tif (pos >= max || state.src.charCodeAt(pos) !== 41) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\tpos++;\n\t} else {\n\t\tif (typeof state.env.references === \"undefined\") return false;\n\t\tif (pos < max && state.src.charCodeAt(pos) === 91) {\n\t\t\tstart = pos + 1;\n\t\t\tpos = state.md.helpers.parseLinkLabel(state, pos);\n\t\t\tif (pos >= 0) label = state.src.slice(start, pos++);\n\t\t\telse pos = labelEnd + 1;\n\t\t} else pos = labelEnd + 1;\n\t\tif (!label) label = state.src.slice(labelStart, labelEnd);\n\t\tlabel = normalizeReference(label);\n\t\tref = state.env.references[label];\n\t\tif (!ref) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\thref = ref.href;\n\t\ttitle = ref.title;\n\t}\n\tif (!silent) {\n\t\tcontent = state.src.slice(labelStart, labelEnd);\n\t\tconst tokens = [];\n\t\tstate.md.inline.parse(content, state.md, state.env, tokens);\n\t\tconst token = state.push(\"image\", \"img\", 0);\n\t\tconst attrs = [[\"src\", href], [\"alt\", \"\"]];\n\t\ttoken.attrs = attrs;\n\t\ttoken.children = tokens;\n\t\ttoken.content = content;\n\t\tif (title) attrs.push([\"title\", title]);\n\t\tif (label) {\n\t\t\tconst meta = Object.create(null);\n\t\t\tmeta.label = label;\n\t\t\ttoken.meta = meta;\n\t\t}\n\t}\n\tstate.pos = pos;\n\tstate.posMax = max;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/autolink.ts\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/;\nfunction autolink(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 60) return false;\n\tconst start = state.pos;\n\tconst max = state.posMax;\n\tfor (;;) {\n\t\tif (++pos >= max) return false;\n\t\tconst ch = state.src.charCodeAt(pos);\n\t\tif (ch === 60) return false;\n\t\tif (ch === 62) break;\n\t}\n\tconst url = state.src.slice(start + 1, pos);\n\tif (AUTOLINK_RE.test(url)) {\n\t\tconst fullUrl = state.md.normalizeLink(url);\n\t\tif (!state.md.validateLink(fullUrl)) return false;\n\t\tif (!silent) {\n\t\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\ttoken_o.markup = \"autolink\";\n\t\t\ttoken_o.info = \"auto\";\n\t\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\t\ttoken_c.markup = \"autolink\";\n\t\t\ttoken_c.info = \"auto\";\n\t\t}\n\t\tstate.pos += url.length + 2;\n\t\treturn true;\n\t}\n\tif (EMAIL_RE.test(url)) {\n\t\tconst fullUrl = state.md.normalizeLink(`mailto:${url}`);\n\t\tif (!state.md.validateLink(fullUrl)) return false;\n\t\tif (!silent) {\n\t\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\ttoken_o.markup = \"autolink\";\n\t\t\ttoken_o.info = \"auto\";\n\t\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\t\ttoken_c.markup = \"autolink\";\n\t\t\ttoken_c.info = \"auto\";\n\t\t}\n\t\tstate.pos += url.length + 2;\n\t\treturn true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/rules_inline/html_inline.ts\nfunction isLinkOpen(str) {\n\treturn /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n\treturn /^<\\/a\\s*>/i.test(str);\n}\nfunction isLetter(ch) {\n\tconst lc = ch | 32;\n\treturn lc >= 97 && lc <= 122;\n}\nfunction html_inline(state, silent) {\n\tif (!state.md.options.html) return false;\n\tconst max = state.posMax;\n\tconst pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) return false;\n\tconst ch = state.src.charCodeAt(pos + 1);\n\tif (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) return false;\n\tconst match = state.src.slice(pos).match(HTML_TAG_RE);\n\tif (!match) return false;\n\tif (!silent) {\n\t\tconst token = state.push(\"html_inline\", \"\", 0);\n\t\ttoken.content = match[0];\n\t\tif (isLinkOpen(token.content)) state.linkLevel++;\n\t\tif (isLinkClose(token.content)) state.linkLevel--;\n\t}\n\tstate.pos += match[0].length;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/entity.ts\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\nfunction entity(state, silent) {\n\tconst pos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(pos) !== 38) return false;\n\tif (pos + 1 >= max) return false;\n\tif (state.src.charCodeAt(pos + 1) === 35) {\n\t\tconst match = state.src.slice(pos).match(DIGITAL_RE);\n\t\tif (match) {\n\t\t\tif (!silent) {\n\t\t\t\tconst code = match[1][0].toLowerCase() === \"x\" ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n\t\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\t\ttoken.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(65533);\n\t\t\t\ttoken.markup = match[0];\n\t\t\t\ttoken.info = \"entity\";\n\t\t\t}\n\t\t\tstate.pos += match[0].length;\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\tconst match = state.src.slice(pos).match(NAMED_RE);\n\t\tif (match) {\n\t\t\tconst decoded = decodeHTMLStrict(match[0]);\n\t\t\tif (decoded !== match[0]) {\n\t\t\t\tif (!silent) {\n\t\t\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\t\t\ttoken.content = decoded;\n\t\t\t\t\ttoken.markup = match[0];\n\t\t\t\t\ttoken.info = \"entity\";\n\t\t\t\t}\n\t\t\t\tstate.pos += match[0].length;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/rules_inline/balance_pairs.ts\nfunction processDelimiters(delimiters) {\n\tconst openersBottom = {};\n\tconst max = delimiters.length;\n\tif (!max) return;\n\tlet headerIdx = 0;\n\tlet lastTokenIdx = -2;\n\tconst jumps = [];\n\tfor (let closerIdx = 0; closerIdx < max; closerIdx++) {\n\t\tconst closer = delimiters[closerIdx];\n\t\tjumps.push(0);\n\t\tif (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) headerIdx = closerIdx;\n\t\tlastTokenIdx = closer.token;\n\t\tcloser.length = closer.length || 0;\n\t\tif (!closer.close) continue;\n\t\tif (!openersBottom.hasOwnProperty(closer.marker)) openersBottom[closer.marker] = [\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1\n\t\t];\n\t\tconst minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];\n\t\tlet openerIdx = headerIdx - jumps[headerIdx] - 1;\n\t\tlet newMinOpenerIdx = openerIdx;\n\t\tfor (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n\t\t\tconst opener = delimiters[openerIdx];\n\t\t\tif (opener.marker !== closer.marker) continue;\n\t\t\tif (opener.open && opener.end < 0) {\n\t\t\t\tlet isOddMatch = false;\n\t\t\t\tif (opener.close || closer.open) {\n\t\t\t\t\tif ((opener.length + closer.length) % 3 === 0) {\n\t\t\t\t\t\tif (opener.length % 3 !== 0 || closer.length % 3 !== 0) isOddMatch = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isOddMatch) {\n\t\t\t\t\tconst lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;\n\t\t\t\t\tjumps[closerIdx] = closerIdx - openerIdx + lastJump;\n\t\t\t\t\tjumps[openerIdx] = lastJump;\n\t\t\t\t\tcloser.open = false;\n\t\t\t\t\topener.end = closerIdx;\n\t\t\t\t\topener.close = false;\n\t\t\t\t\tnewMinOpenerIdx = -1;\n\t\t\t\t\tlastTokenIdx = -2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (newMinOpenerIdx !== -1) openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;\n\t}\n}\nfunction link_pairs(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tprocessDelimiters(state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) processDelimiters(delimiters);\n\t}\n}\n//#endregion\n//#region src/rules_inline/fragments_join.ts\nfunction fragments_join(state) {\n\tlet curr, last;\n\tlet level = 0;\n\tconst tokens = state.tokens;\n\tconst max = state.tokens.length;\n\tfor (curr = last = 0; curr < max; curr++) {\n\t\tif (tokens[curr].nesting < 0) level--;\n\t\ttokens[curr].level = level;\n\t\tif (tokens[curr].nesting > 0) level++;\n\t\tif (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\t\telse {\n\t\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\t\tlast++;\n\t\t}\n\t}\n\tif (curr !== last) tokens.length = last;\n}\n//#endregion\n//#region src/parser_inline.ts\nvar _rules = [\n\t[\"text\", text],\n\t[\"linkify\", linkify],\n\t[\"newline\", newline],\n\t[\"escape\", escape],\n\t[\"backticks\", backtick],\n\t[\"strikethrough\", strikethrough_default.tokenize],\n\t[\"emphasis\", emphasis_default.tokenize],\n\t[\"link\", link],\n\t[\"image\", image],\n\t[\"autolink\", autolink],\n\t[\"html_inline\", html_inline],\n\t[\"entity\", entity]\n];\nvar _rules2 = [\n\t[\"balance_pairs\", link_pairs],\n\t[\"strikethrough\", strikethrough_default.postProcess],\n\t[\"emphasis\", emphasis_default.postProcess],\n\t[\"fragments_join\", fragments_join]\n];\n/**\n* Tokenizes paragraph content.\n*/\nvar ParserInline = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of inline rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Second ruler used for post-processing\n\t\t\t* (e.g. in emphasis-like rules).\n\t\t\t*/\n\t\t\t\"ruler2\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateInline);\n\t\tfor (let i = 0; i < _rules.length; i++) this.ruler.push(_rules[i][0], _rules[i][1]);\n\t\tfor (let i = 0; i < _rules2.length; i++) this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n\t}\n\tskipToken(state) {\n\t\tconst pos = state.pos;\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\tconst cache = state.cache;\n\t\tif (typeof cache[pos] !== \"undefined\") {\n\t\t\tstate.pos = cache[pos];\n\t\t\treturn;\n\t\t}\n\t\tlet ok = false;\n\t\tif (state.level < maxNesting) for (let i = 0; i < len; i++) {\n\t\t\tstate.level++;\n\t\t\tok = rules[i](state, true);\n\t\t\tstate.level--;\n\t\t\tif (ok) {\n\t\t\t\tif (pos >= state.pos) throw new Error(\"inline rule didn't increment state.pos\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse state.pos = state.posMax;\n\t\tif (!ok) state.pos++;\n\t\tcache[pos] = state.pos;\n\t}\n\ttokenize(state) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst end = state.posMax;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\twhile (state.pos < end) {\n\t\t\tconst prevPos = state.pos;\n\t\t\tlet ok = false;\n\t\t\tif (state.level < maxNesting) for (let i = 0; i < len; i++) {\n\t\t\t\tok = rules[i](state, false);\n\t\t\t\tif (ok) {\n\t\t\t\t\tif (prevPos >= state.pos) throw new Error(\"inline rule didn't increment state.pos\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ok) {\n\t\t\t\tif (state.pos >= end) break;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstate.pending += state.src[state.pos++];\n\t\t}\n\t\tif (state.pending) state.pushPending();\n\t}\n\t/**\n\t* Process input string and push inline tokens into `outTokens`\n\t*/\n\tparse(str, md, env, outTokens) {\n\t\tconst state = new this.State(str, md, env, outTokens);\n\t\tthis.tokenize(state);\n\t\tconst rules = this.ruler2.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tfor (let i = 0; i < len; i++) rules[i](state);\n\t}\n};\n//#endregion\n//#region src/markdownit.ts\nvar config = {\n\tdefault: {\n\t\toptions: {\n\t\t\thtml: false,\n\t\t\txhtmlOut: false,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 100\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: {},\n\t\t\tblock: {},\n\t\t\tinline: {}\n\t\t}\n\t},\n\tzero: {\n\t\toptions: {\n\t\t\thtml: false,\n\t\t\txhtmlOut: false,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 20\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: { rules: [\n\t\t\t\t\"normalize\",\n\t\t\t\t\"block\",\n\t\t\t\t\"strip_references\",\n\t\t\t\t\"inline\",\n\t\t\t\t\"text_join\"\n\t\t\t] },\n\t\t\tblock: { rules: [\"paragraph\"] },\n\t\t\tinline: {\n\t\t\t\trules: [\"text\"],\n\t\t\t\trules2: [\"balance_pairs\", \"fragments_join\"]\n\t\t\t}\n\t\t}\n\t},\n\tcommonmark: {\n\t\toptions: {\n\t\t\thtml: true,\n\t\t\txhtmlOut: true,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 20\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: { rules: [\n\t\t\t\t\"normalize\",\n\t\t\t\t\"block\",\n\t\t\t\t\"strip_references\",\n\t\t\t\t\"inline\",\n\t\t\t\t\"text_join\"\n\t\t\t] },\n\t\t\tblock: { rules: [\n\t\t\t\t\"blockquote\",\n\t\t\t\t\"code\",\n\t\t\t\t\"fence\",\n\t\t\t\t\"heading\",\n\t\t\t\t\"hr\",\n\t\t\t\t\"html_block\",\n\t\t\t\t\"lheading\",\n\t\t\t\t\"list\",\n\t\t\t\t\"reference\",\n\t\t\t\t\"paragraph\"\n\t\t\t] },\n\t\t\tinline: {\n\t\t\t\trules: [\n\t\t\t\t\t\"autolink\",\n\t\t\t\t\t\"backticks\",\n\t\t\t\t\t\"emphasis\",\n\t\t\t\t\t\"entity\",\n\t\t\t\t\t\"escape\",\n\t\t\t\t\t\"html_inline\",\n\t\t\t\t\t\"image\",\n\t\t\t\t\t\"link\",\n\t\t\t\t\t\"newline\",\n\t\t\t\t\t\"text\"\n\t\t\t\t],\n\t\t\t\trules2: [\n\t\t\t\t\t\"balance_pairs\",\n\t\t\t\t\t\"emphasis\",\n\t\t\t\t\t\"fragments_join\"\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t}\n};\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\nvar RECODE_HOSTNAME_FOR = [\n\t\"http:\",\n\t\"https:\",\n\t\"mailto:\"\n];\n/**\n* Parses Markdown into tokens and renders them to HTML.\n*\n* @category Main\n*/\nvar MarkdownIt = class {\n\t/**\n\t* Link validation function. CommonMark allows too much in links. By default\n\t* we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n\t* except some embedded image types.\n\t*\n\t* You can change this behaviour:\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* // enable everything\n\t* md.validateLink = function () { return true; }\n\t* ```\n\t*/\n\tvalidateLink(url) {\n\t\tconst str = url.trim().toLowerCase();\n\t\treturn BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true;\n\t}\n\t/**\n\t* Function used to encode link url to a machine-readable format,\n\t* which includes url-encoding, punycode, etc.\n\t*/\n\tnormalizeLink(url) {\n\t\tconst parsed = mdurl.parse(url, true);\n\t\tif (parsed.hostname) {\n\t\t\tif (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {\n\t\t\t\tparsed.hostname = punycode.toASCII(parsed.hostname);\n\t\t\t} catch (er) {}\n\t\t}\n\t\treturn mdurl.encode(mdurl.format(parsed));\n\t}\n\t/**\n\t* Function used to decode link url to a human-readable format`\n\t*/\n\tnormalizeLinkText(url) {\n\t\tconst parsed = mdurl.parse(url, true);\n\t\tif (parsed.hostname) {\n\t\t\tif (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {\n\t\t\t\tparsed.hostname = punycode.toUnicode(parsed.hostname);\n\t\t\t} catch (er) {}\n\t\t}\n\t\treturn mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + \"%\");\n\t}\n\tconstructor(...args) {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserInline}. You may need it to add new rules when\n\t\t\t* writing plugins. For simple rules control use {@link MarkdownIt.disable}\n\t\t\t* and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"inline\",\n\t\t\tnew ParserInline()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserBlock}. You may need it to add new rules when\n\t\t\t* writing plugins. For simple rules control use {@link MarkdownIt.disable}\n\t\t\t* and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"block\",\n\t\t\tnew ParserBlock()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserCore} chain executor. You may need it to add new\n\t\t\t* rules when writing plugins. For simple rules control use\n\t\t\t* {@link MarkdownIt.disable} and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"core\",\n\t\t\tnew ParserCore()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link Renderer}. Use it to modify output look. Or to add rendering\n\t\t\t* rules for new token types, generated by plugins.\n\t\t\t*\n\t\t\t* See {@link Renderer} docs and\n\t\t\t* [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts).\n\t\t\t*\n\t\t\t* @example\n\t\t\t* ```javascript\n\t\t\t* import MarkdownIt from 'markdown-it'\n\t\t\t* const md = new MarkdownIt()\n\t\t\t*\n\t\t\t* function myToken(tokens, idx, options, env, self) {\n\t\t\t* //...\n\t\t\t* return result;\n\t\t\t* };\n\t\t\t*\n\t\t\t* md.renderer.rules['my_token'] = myToken\n\t\t\t* ```\n\t\t\t*/\n\t\t\t\"renderer\",\n\t\t\tnew Renderer()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n\t\t\t* Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/src/rules_core/linkify.ts)\n\t\t\t* rule.\n\t\t\t*/\n\t\t\t\"linkify\",\n\t\t\tnew LinkifyIt()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Assorted utility functions, useful to write plugins. See details\n\t\t\t* [here](https://github.com/markdown-it/markdown-it/blob/master/src/common/utils.ts).\n\t\t\t*/\n\t\t\t\"utils\",\n\t\t\tutils_exports\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Link components parser functions, useful to write plugins. See details\n\t\t\t* [here](https://github.com/markdown-it/markdown-it/blob/master/src/helpers).\n\t\t\t*/\n\t\t\t\"helpers\",\n\t\t\tObject.assign({}, helpers_exports)\n\t\t);\n\t\tconst [presetNameOrOptions, options] = args;\n\t\tif (typeof presetNameOrOptions === \"string\") {\n\t\t\tthis.configure(presetNameOrOptions);\n\t\t\tif (options) this.set(options);\n\t\t} else {\n\t\t\tthis.configure(\"default\");\n\t\t\tthis.set(presetNameOrOptions || {});\n\t\t}\n\t}\n\t/**\n\t* Set parser options (in the same format as in constructor). Probably, you\n\t* will never need it, but you can change options after constructor call.\n\t*\n\t* __Note:__ To achieve the best possible performance, don't modify a\n\t* `markdown-it` instance options on the fly. If you need multiple configurations\n\t* it's best to create multiple instances and initialize each with separate\n\t* config.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t*\n\t* const md = new MarkdownIt()\n\t* .set({ html: true, breaks: true })\n\t* .set({ typographer: true })\n\t* ```\n\t*/\n\tset(options) {\n\t\tObject.assign(this.options, options);\n\t\treturn this;\n\t}\n\t/**\n\t* Batch load of all options and compenent settings. This is internal method,\n\t* and you probably will not need it. But if you will - see available presets\n\t* and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/src/presets)\n\t*\n\t* We strongly recommend to use presets instead of direct config loads. That\n\t* will give better compatibility with next versions.\n\t*/\n\tconfigure(presets) {\n\t\tlet p;\n\t\tif (typeof presets === \"string\") {\n\t\t\tconst presetName = presets;\n\t\t\tp = config[presetName];\n\t\t\tif (!p) throw new Error(`Wrong 'markdown-it' preset \"${presetName}\", check name`);\n\t\t} else p = presets;\n\t\tif (!p) throw new Error(\"Wrong `markdown-it` preset, can't be empty\");\n\t\tif (p.options) this.options = { ...p.options };\n\t\tconst components = p.components;\n\t\tif (components) {\n\t\t\tvar _components$inline;\n\t\t\t[\n\t\t\t\t\"core\",\n\t\t\t\t\"block\",\n\t\t\t\t\"inline\"\n\t\t\t].forEach((name) => {\n\t\t\t\tvar _components$name;\n\t\t\t\tconst rules = (_components$name = components[name]) === null || _components$name === void 0 ? void 0 : _components$name.rules;\n\t\t\t\tif (rules) this[name].ruler.enableOnly(rules);\n\t\t\t});\n\t\t\tconst rules2 = (_components$inline = components.inline) === null || _components$inline === void 0 ? void 0 : _components$inline.rules2;\n\t\t\tif (rules2) this.inline.ruler2.enableOnly(rules2);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Enable list or rules. It will automatically find appropriate components,\n\t* containing rules with given names. If rule not found, and `ignoreInvalid`\n\t* not set - throws exception.\n\t*\n\t* @param list Rule name or list of rule names to enable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t*\n\t* const md = new MarkdownIt()\n\t* .enable(['sub', 'sup'])\n\t* .disable('smartquotes')\n\t* ```\n\t*/\n\tenable(list, ignoreInvalid = false) {\n\t\tlet result = [];\n\t\tif (!Array.isArray(list)) list = [list];\n\t\t[\n\t\t\t\"core\",\n\t\t\t\"block\",\n\t\t\t\"inline\"\n\t\t].forEach((chain) => {\n\t\t\tresult = result.concat(this[chain].ruler.enable(list, true));\n\t\t});\n\t\tresult = result.concat(this.inline.ruler2.enable(list, true));\n\t\tconst missed = list.filter((name) => result.indexOf(name) < 0);\n\t\tif (missed.length && !ignoreInvalid) throw new Error(`MarkdownIt. Failed to enable unknown rule(s): ${missed}`);\n\t\treturn this;\n\t}\n\t/**\n\t* The same as {@link MarkdownIt.enable}, but turn specified rules off.\n\t*\n\t* @param list Rule name or list of rule names to disable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t*/\n\tdisable(list, ignoreInvalid = false) {\n\t\tlet result = [];\n\t\tif (!Array.isArray(list)) list = [list];\n\t\t[\n\t\t\t\"core\",\n\t\t\t\"block\",\n\t\t\t\"inline\"\n\t\t].forEach((chain) => {\n\t\t\tresult = result.concat(this[chain].ruler.disable(list, true));\n\t\t});\n\t\tresult = result.concat(this.inline.ruler2.disable(list, true));\n\t\tconst missed = list.filter((name) => result.indexOf(name) < 0);\n\t\tif (missed.length && !ignoreInvalid) throw new Error(`MarkdownIt. Failed to disable unknown rule(s): ${missed}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Load specified plugin with given params into current parser instance.\n\t* It's just a sugar to call `plugin(md, params)` with curring.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* import iterator from 'markdown-it-for-inline'\n\t*\n\t* const md = new MarkdownIt()\n\t* .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n\t* tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar')\n\t* })\n\t* ```\n\t*/\n\tuse(plugin, ...params) {\n\t\tplugin.apply(plugin, [this, ...params]);\n\t\treturn this;\n\t}\n\t/**\n\t* Parse input string and return list of block tokens (special token type\n\t* \"inline\" will contain list of inline tokens). You should not call this\n\t* method directly, until you write custom renderer (for example, to produce\n\t* AST).\n\t*\n\t* `env` is used to pass data between \"distributed\" rules and return additional\n\t* metadata like reference info, needed for the renderer. It also can be used to\n\t* inject data in specific cases. Usually, you will be ok to pass `{}`,\n\t* and then pass updated object to renderer.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\tparse(src, env) {\n\t\tif (typeof src !== \"string\") throw new Error(\"Input data should be a String\");\n\t\tconst state = new this.core.State(src, this, env);\n\t\tthis.core.process(state);\n\t\treturn state.tokens;\n\t}\n\t/**\n\t* Render markdown string into html. It does all magic for you :).\n\t*\n\t* `env` can be used to inject additional metadata (`{}` by default).\n\t* But you will not need it with high probability. See also comment\n\t* in {@link MarkdownIt.parse}.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\trender(src, env = {}) {\n\t\treturn this.renderer.render(this.parse(src, env), this.options, env);\n\t}\n\t/**\n\t* The same as {@link MarkdownIt.parse} but skip all block rules. It returns\n\t* the block tokens list with the single `inline` element, containing parsed\n\t* inline tokens in `children` property. Also updates `env` object.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\tparseInline(src, env) {\n\t\tconst state = new this.core.State(src, this, env);\n\t\tstate.inlineMode = true;\n\t\tthis.core.process(state);\n\t\treturn state.tokens;\n\t}\n\t/**\n\t* Similar to {@link MarkdownIt.render} but for single paragraph content.\n\t* Result will NOT be wrapped into `<p>` tags.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\trenderInline(src, env = {}) {\n\t\treturn this.renderer.render(this.parseInline(src, env), this.options, env);\n\t}\n};\n_defineProperty(MarkdownIt, \"Token\", Token);\n_defineProperty(MarkdownIt, \"Ruler\", Ruler);\n_defineProperty(MarkdownIt, \"Renderer\", Renderer);\n_defineProperty(MarkdownIt, \"ParserCore\", ParserCore);\n_defineProperty(MarkdownIt, \"StateCore\", StateCore);\n_defineProperty(MarkdownIt, \"ParserBlock\", ParserBlock);\n_defineProperty(MarkdownIt, \"StateBlock\", StateBlock);\n_defineProperty(MarkdownIt, \"ParserInline\", ParserInline);\n_defineProperty(MarkdownIt, \"StateInline\", StateInline);\n//#endregion\n//#region src/index.ts\n/**\n* Default package export.\n*\n* For backward compatibility, the {@link MarkdownIt} class is wrapped so\n* legacy code can call it without `new`. New code should instantiate it as a\n* regular class with `new`. The compatibility wrapper may be removed in a\n* future release.\n*\n* @category Main\n*/\nvar MarkdownItCallable = callable(MarkdownIt);\n//#endregion\nexport { MarkdownItCallable as default };\n\n//# sourceMappingURL=markdown-it.mjs.map","/**\n * Markdown rendering for the file preview.\n *\n * markdown-it with raw HTML disabled (escaped, never executed — same\n * no-unsafe-HTML stance as every other preview in this plugin), linkified\n * text, and fenced code blocks highlighted through the highlight.js languages\n * registered in ./highlight. Relative image srcs are rewritten onto the\n * plugin's raw-bytes route (the same one image tabs use), resolved against the\n * markdown file's own directory, so README images render next to their file.\n */\nimport MarkdownIt from 'markdown-it'\nimport { canHighlight, highlightFence } from './highlight'\n\n/** Same-origin raw-bytes route registered by the host half (see src/index.ts). */\nconst RAW_PREFIX = '/dsh-plugin-files/raw'\n\n/** srcs that pass through unchanged: scheme URLs, anchors, protocol-relative. */\nconst ABSOLUTE_SRC = /^(?:[a-z][a-z0-9+.-]*:|#|\\/\\/)/i\n\nconst md = new MarkdownIt({\n // Raw HTML in the source is escaped, never rendered (XSS containment).\n html: false,\n linkify: true,\n typographer: true,\n highlight: (code: string, lang: string): string => {\n // Empty return lets markdown-it apply its own default escaping.\n if (!canHighlight(lang)) return ''\n return `<pre class=\"hljs\"><code>${highlightFence(code, lang)}</code></pre>`\n },\n})\n\n// Relative image srcs resolve against the md file's directory and are served\n// through the raw-bytes route; absolute URLs / data URIs pass through.\nconst defaultImage = md.renderer.rules.image\nmd.renderer.rules.image = (tokens, idx, options, env, self) => {\n const token = tokens[idx]\n const src = String(token.attrGet('src') ?? '')\n const base = typeof env === 'object' && env !== null && typeof (env as { base?: unknown }).base === 'string'\n ? (env as { base: string }).base\n : ''\n if (src !== '' && !ABSOLUTE_SRC.test(src) && base !== '') {\n const resolved = base.endsWith('/') || base.endsWith('\\\\') ? base + src : `${base}/${src}`\n token.attrSet('src', `${RAW_PREFIX}/${encodeURIComponent(resolved)}`)\n }\n return defaultImage(tokens, idx, options, env, self)\n}\n\n// markdown-it does not sanitize link protocols: a hostile .md file could carry\n// `[x](javascript:…)`. Follow markdown-it's default policy — reject the\n// vbscript/javascript/file/data schemes (data:image/* stays allowed so data-URI\n// images keep working); relative URLs pass through unchanged, and rejected\n// links render as inert text. Raw HTML is escaped above (html: false), so no\n// script/iframe can pass through either.\nconst BAD_LINK_PROTOCOL = /^(?:vbscript|javascript|file|data):/i\nconst GOOD_DATA_IMAGE = /^data:image\\/(?:gif|png|jpeg|webp);/i\nmd.validateLink = (url: string): boolean => {\n const trimmed = url.trim()\n return !BAD_LINK_PROTOCOL.test(trimmed) || GOOD_DATA_IMAGE.test(trimmed)\n}\n\n/**\n * Render markdown content to safe HTML.\n * @param content - raw markdown text.\n * @param baseDir - directory of the source file, used to resolve relative\n * image paths ('' when there is none).\n */\nexport function renderMarkdown(content: string, baseDir: string): string {\n return md.render(content, { base: baseDir })\n}\n","/**\n * Split file preview with VS Code-style tabs and a directly-editable editor.\n * Files open in tabs; the active tab is an always-editable textarea overlaid on\n * a syntax-highlighted layer (Ctrl/Cmd+S saves). Markdown files open in a\n * RENDERED preview by default, with a button to switch to the editable source\n * view. Tabs are drag-reorderable. Open files are watched on disk: external\n * changes auto-sync clean tabs and flag dirty ones (click the badge to reload,\n * discarding unsaved edits). Opening/closing the first/last tab is animated.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { DragEvent as ReactDragEvent, KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react'\nimport styles from './files.module.css'\nimport { detectLanguage, highlightCode } from './highlight'\nimport { renderMarkdown } from './markdown'\nimport { FileIcon } from './fileIcons'\nimport type { FilesKey } from './locales'\nimport { activateFile, closeFile, collapsePreview, moveTab, toggleWrap, useTabsState } from './store'\nimport type { FsReadResult } from './FileExplorer'\n\ninterface TabData {\n status: 'loading' | 'loaded' | 'image' | 'binary' | 'too-large' | 'error'\n content?: string\n draft?: string\n dirty?: boolean\n size?: number\n message?: string\n /** Markdown tabs: 'rendered' shows the compiled preview, 'source' the editor. */\n view?: 'rendered' | 'source'\n /** The file changed on disk while this tab holds unsaved edits. */\n diskChanged?: boolean\n}\n\nexport interface FsWriteResult {\n path: string\n size: number\n}\n\nexport interface FilePreviewProps {\n t: (key: FilesKey, params?: Record<string, unknown>) => string\n readFile: (path: string, signal?: AbortSignal) => Promise<FsReadResult>\n writeFile: (path: string, content: string, signal?: AbortSignal) => Promise<FsWriteResult>\n /** Replace the host-side watch set (the open tab paths). Idempotent diff. */\n watchFiles: (paths: string[]) => Promise<void>\n}\n\nconst PREVIEW_MIN = 240\nconst CHAT_MIN = 240\nconst PREVIEW_TOO_LARGE_LABEL = '512KB'\n\n/** Same-origin raw-bytes route registered by the host half (see src/index.ts). */\nconst RAW_PREFIX = '/dsh-plugin-files/raw'\n\n/** Same-origin SSE endpoint pushed by the host half (see src/index.ts). */\nconst EVENTS_ENDPOINT = '/dsh-plugin-files/events'\n\n/**\n * Above this size an .md file opens in source view: compiling a multi-hundred\n * KB document and laying out its DOM is what makes the pane lag.\n */\nconst MD_RENDER_MAX_BYTES = 256 * 1024\n\nconst IMAGE_EXTENSIONS = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'bmp', 'ico', 'svg'])\n\n/**\n * Same-origin URL serving the file's bytes when it is a previewable image;\n * undefined otherwise. Image tabs never go through the text RPC read — the\n * host route resolves the path through the sandboxed fs service itself.\n */\nfunction imageSrcOf(path: string): string | undefined {\n const idx = path.lastIndexOf('.')\n if (idx < 0 || idx === path.length - 1) return undefined\n const ext = path.slice(idx + 1).toLowerCase()\n return IMAGE_EXTENSIONS.has(ext) ? `${RAW_PREFIX}/${encodeURIComponent(path)}` : undefined\n}\n\n/**\n * Above this size the overlay editor (syntax-highlight layer + transparent\n * textarea) falls back to a plain textarea: re-injecting and re-laying out\n * hundreds of KB of wrapped text on every keystroke is what makes the page\n * lag. The plain textarea keeps editing, wrapping and scrolling — it only\n * loses the colors, which files this big rarely need anyway.\n */\nconst HIGHLIGHT_MAX_BYTES = 64 * 1024\n\n/**\n * Languages always rendered as a plain textarea, never the overlay: the\n * highlight layer costs a full extra layout pass (and with CJK text a\n * fragile alignment surface) for prose formats where colors add little.\n */\nconst PLAIN_LANGUAGES = new Set(['markdown'])\n\nfunction basenameOf(path: string): string {\n const trimmed = path.replace(/[\\\\/]+$/, '')\n const idx = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\\\'))\n return idx >= 0 ? trimmed.slice(idx + 1) : trimmed\n}\n\nfunction formatSize(bytes: number | undefined): string {\n if (bytes === undefined) return ''\n if (!Number.isFinite(bytes) || bytes < 0) return ''\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\n/** Parent directory of a path ('C:/a/b.md' → 'C:/a'; '' when there is none). */\nfunction dirnameOf(path: string): string {\n const idx = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n return idx > 0 ? path.slice(0, idx) : ''\n}\n\nfunction previewDataOf(result: FsReadResult): TabData {\n if (result.truncated) return { status: 'too-large', size: result.size }\n if (result.binary) return { status: 'binary', size: result.size }\n const data: TabData = {\n status: 'loaded',\n content: result.content,\n draft: result.content,\n dirty: false,\n size: result.size,\n }\n // Markdown opens in the rendered preview by default (source view for files\n // too large to render responsively).\n if (detectLanguage(result.path) === 'markdown' && result.size <= MD_RENDER_MAX_BYTES) {\n data.view = 'rendered'\n }\n return data\n}\n\n/**\n * Gutter text for an editor: one logical line number per source line, as a\n * single pre-formatted block (VS Code shows logical numbers even when soft\n * wrap makes a line occupy several visual rows).\n */\nfunction lineNumbersOf(content: string): string {\n const count = content.split('\\n').length\n if (count <= 1) return '1'\n const parts = new Array<string>(count)\n for (let i = 0; i < count; i += 1) parts[i] = String(i + 1)\n return parts.join('\\n')\n}\n\nexport function FilePreview({ t, readFile, writeFile, watchFiles }: FilePreviewProps) {\n const { tabs, active, theme, collapsed, wrap } = useTabsState()\n\n const [previewWidth, setPreviewWidth] = useState<number | null>(null)\n const [closing, setClosing] = useState(false)\n const [dragPath, setDragPath] = useState<string | undefined>(undefined)\n const [saveError, setSaveError] = useState<string | undefined>(undefined)\n\n const cacheRef = useRef<Map<string, TabData>>(new Map())\n const hasOpenedRef = useRef(false)\n const [, bump] = useState(0)\n const [imageFailed, setImageFailed] = useState<string | undefined>(undefined)\n\n const previewRef = useRef<HTMLDivElement>(null)\n const handleRef = useRef<HTMLDivElement>(null)\n const highlightRef = useRef<HTMLPreElement>(null)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const gutterRef = useRef<HTMLDivElement>(null)\n\n const refresh = useCallback(() => bump((v) => v + 1), [])\n\n // Mirror of the current tab list for the SSE handler (avoids stale closures).\n const tabsRef = useRef(tabs)\n useEffect(() => {\n tabsRef.current = tabs\n }, [tabs])\n\n /**\n * Re-read one open file from disk (external edit sync, or the disk-changed\n * badge click). A reload always takes disk content — the auto-sync path only\n * runs on clean tabs, and the badge click is the user's explicit choice to\n * drop unsaved edits.\n */\n const reloadFromDisk = useCallback(async (path: string) => {\n const data = cacheRef.current.get(path)\n if (data === undefined || data.status !== 'loaded') return\n try {\n const result = await readFile(path)\n const next = previewDataOf(result)\n // Keep the user's chosen view; a reload never flips rendered/source.\n cacheRef.current.set(path, { ...next, view: data.view, diskChanged: false })\n } catch (error) {\n // File gone / unreadable: surface the failure instead of stale content.\n cacheRef.current.set(path, {\n ...data,\n status: 'error',\n message: error instanceof Error ? error.message : String(error),\n diskChanged: false,\n })\n }\n refresh()\n }, [readFile, refresh])\n\n /**\n * Handle one disk-change event for an open path. Clean tabs auto-sync;\n * dirty tabs keep their unsaved edits and show the reload badge instead.\n */\n const syncFromDisk = useCallback((path: string) => {\n const data = cacheRef.current.get(path)\n if (data === undefined || data.status === 'loading' || data.status === 'image') return\n if (data.status === 'error') {\n // Previously failed tab: retry the read (e.g. the file was re-created).\n void reloadFromDisk(path)\n return\n }\n if (data.dirty === true) {\n if (data.diskChanged !== true) {\n data.diskChanged = true\n refresh()\n }\n return\n }\n void reloadFromDisk(path)\n }, [reloadFromDisk, refresh])\n\n // Disk watch: tell the host which paths to watch (debounced), and re-send on\n // every SSE (re)connect so a dropped stream heals itself.\n useEffect(() => {\n const timer = setTimeout(() => {\n void watchFiles([...tabs]).catch(() => {\n // Host side not ready yet — the next tab change or SSE open retries.\n })\n }, 400)\n return () => clearTimeout(timer)\n }, [tabs, watchFiles])\n\n // Disk change events pushed by the host (fs.watch + SSE).\n useEffect(() => {\n const source = new EventSource(EVENTS_ENDPOINT)\n source.onopen = () => {\n void watchFiles([...tabsRef.current]).catch(() => {\n // Ignore — the next onopen or tab change re-syncs.\n })\n }\n const onChange = (event: MessageEvent<string>) => {\n try {\n const payload = JSON.parse(event.data) as { path?: unknown }\n if (typeof payload.path === 'string' && tabsRef.current.includes(payload.path)) {\n syncFromDisk(payload.path)\n }\n } catch {\n // Malformed frame — ignore.\n }\n }\n source.addEventListener('change', onChange)\n return () => {\n source.removeEventListener('change', onChange)\n source.close()\n }\n }, [syncFromDisk, watchFiles])\n\n // Read the ACTIVE tab's content. Other tabs load lazily on first\n // activation, so switching to a workspace with many large files doesn't\n // re-read every tab at once (which used to freeze the switch).\n useEffect(() => {\n const cache = cacheRef.current\n for (const [path] of cache) {\n if (!tabs.includes(path)) cache.delete(path)\n }\n const target = active ?? tabs[0]\n if (target === undefined || cache.has(target)) {\n refresh()\n return undefined\n }\n const controller = new AbortController()\n // Image files skip the text RPC read entirely: the raw-bytes route serves\n // them straight into an <img> tag, so there is nothing to load here.\n if (imageSrcOf(target) !== undefined) {\n cache.set(target, { status: 'image' })\n refresh()\n return () => controller.abort()\n }\n cache.set(target, { status: 'loading' })\n readFile(target, controller.signal)\n .then((result) => {\n if (!controller.signal.aborted) {\n cache.set(target, previewDataOf(result))\n // Large content: yield one frame so the browser paints the\n // loading→loaded transition before the heavy text layout runs —\n // the UI stays responsive instead of freezing in the same frame\n // as the tab-open interaction.\n if (result.size > HIGHLIGHT_MAX_BYTES) requestAnimationFrame(refresh)\n else refresh()\n }\n })\n .catch((error) => {\n if (!controller.signal.aborted) {\n cache.set(target, { status: 'error', message: error instanceof Error ? error.message : String(error) })\n refresh()\n }\n })\n refresh()\n return () => controller.abort()\n }, [tabs, active, readFile, refresh])\n\n // A failed <img> (deleted file, oversized, …) must not keep showing the\n // broken-image placeholder when the user switches away and back.\n useEffect(() => {\n setImageFailed(undefined)\n }, [active])\n\n // Animate the last tab closing without a mount/unmount bounce: keep the pane\n // mounted while `hasOpenedRef` is set, then drop it after the transition.\n if (tabs.length > 0) hasOpenedRef.current = true\n useEffect(() => {\n if (tabs.length > 0) {\n setClosing(false)\n return undefined\n }\n if (hasOpenedRef.current) {\n setClosing(true)\n const timer = setTimeout(() => {\n setClosing(false)\n hasOpenedRef.current = false\n }, 200)\n return () => clearTimeout(timer)\n }\n return undefined\n }, [tabs.length])\n\n const isOpen = !collapsed && (tabs.length > 0 || closing || hasOpenedRef.current)\n\n const activeData = active !== undefined ? cacheRef.current.get(active) : undefined\n const language = active !== undefined ? detectLanguage(active) : undefined\n const tooBig = (activeData?.size ?? 0) > HIGHLIGHT_MAX_BYTES\n const plain = language === undefined || tooBig || (language !== undefined && PLAIN_LANGUAGES.has(language))\n const isMarkdown = language === 'markdown'\n const mdRenderable = (activeData?.size ?? 0) <= MD_RENDER_MAX_BYTES\n // Rebuild the compiled markdown only when the draft (or the view mode)\n // changes — never on tab switches or focus re-renders.\n const mdHtml = useMemo(() => {\n if (activeData?.status !== 'loaded' || !isMarkdown || activeData.view !== 'rendered') return ''\n return renderMarkdown(activeData.draft ?? '', dirnameOf(active ?? ''))\n }, [activeData?.status, activeData?.draft, activeData?.view, isMarkdown, active])\n // Rebuild the gutter text only when the draft changes (not on every bump\n // from tab switches or focus re-renders).\n const gutterNumbers = useMemo(\n () => (activeData?.status === 'loaded' ? lineNumbersOf(activeData.draft ?? '') : ''),\n [activeData?.status, activeData?.draft],\n )\n\n // Keep the highlight layer and the line-number gutter in lockstep with the\n // textarea on every frame while the editor is open: some engines don't fire\n // scroll events during selection auto-scroll, which would otherwise leave\n // the visible layer and the numbers behind the selection (drag-select\n // misalignment). All layers are `overflow: auto|hidden` with identical\n // content geometry, so the assignment is a no-op whenever they align.\n useEffect(() => {\n const pre = highlightRef.current\n const ta = textareaRef.current\n const gutter = gutterRef.current\n if (ta === null || gutter === null) return undefined\n let raf = 0\n const tick = () => {\n if (pre !== null) {\n pre.scrollTop = ta.scrollTop\n pre.scrollLeft = ta.scrollLeft\n }\n gutter.scrollTop = ta.scrollTop\n raf = requestAnimationFrame(tick)\n }\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [isOpen, active, activeData?.status, activeData?.view, plain])\n\n // Publish the rendered preview width so the skin's fixed top/bottom trim can\n // shift past this pane (covering only the chat).\n useEffect(() => {\n if (!isOpen) {\n document.body.style.removeProperty('--dsh-preview-width')\n return undefined\n }\n const el = previewRef.current\n if (el === null) return undefined\n const update = () => {\n document.body.style.setProperty('--dsh-preview-width', `${el.getBoundingClientRect().width}px`)\n }\n update()\n const observer = new ResizeObserver(update)\n observer.observe(el)\n return () => {\n observer.disconnect()\n document.body.style.removeProperty('--dsh-preview-width')\n }\n }, [isOpen])\n\n const onHandleDown = useCallback((e: ReactPointerEvent<HTMLDivElement>) => {\n e.preventDefault()\n const handle = handleRef.current\n const preview = previewRef.current\n if (handle === null || preview === null) return\n const center = handle.parentElement\n if (center === null) return\n const startX = e.clientX\n const startWidth = preview.getBoundingClientRect().width\n const centerWidth = center.getBoundingClientRect().width\n const max = Math.max(PREVIEW_MIN, centerWidth - CHAT_MIN)\n const onMove = (ev: PointerEvent) => {\n setPreviewWidth(clamp(startWidth + ev.clientX - startX, PREVIEW_MIN, max))\n }\n const onUp = () => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n }\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n }, [])\n\n const onSave = useCallback(async () => {\n if (active === undefined) return\n const data = cacheRef.current.get(active)\n if (data === undefined || data.status !== 'loaded' || data.draft === undefined || !data.dirty) return\n try {\n const result = await writeFile(active, data.draft)\n data.content = data.draft\n data.dirty = false\n data.size = result.size\n setSaveError(undefined)\n } catch (error) {\n setSaveError(error instanceof Error ? error.message : String(error))\n }\n refresh()\n }, [active, writeFile, refresh])\n\n const onTextareaChange = useCallback((value: string) => {\n if (active === undefined) return\n const data = cacheRef.current.get(active)\n if (data === undefined || data.status !== 'loaded') return\n data.draft = value\n data.dirty = value !== data.content\n if (data.dirty === false) setSaveError(undefined)\n refresh()\n }, [active, refresh])\n\n /** Flip the active markdown tab between rendered preview and source editor. */\n const toggleMdView = useCallback(() => {\n if (active === undefined) return\n const data = cacheRef.current.get(active)\n if (data === undefined || data.status !== 'loaded') return\n data.view = data.view === 'rendered' ? 'source' : 'rendered'\n refresh()\n }, [active, refresh])\n\n const onKeyDown = useCallback((e: ReactKeyboardEvent<HTMLTextAreaElement>) => {\n if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 's') {\n e.preventDefault()\n void onSave()\n }\n }, [onSave])\n\n const onTextareaScroll = useCallback((e: React.UIEvent<HTMLTextAreaElement>) => {\n const pre = highlightRef.current\n const gutter = gutterRef.current\n const ta = e.currentTarget\n if (pre !== null) {\n pre.scrollTop = ta.scrollTop\n pre.scrollLeft = ta.scrollLeft\n }\n if (gutter !== null) gutter.scrollTop = ta.scrollTop\n }, [])\n\n const onTabDragStart = useCallback((e: ReactDragEvent<HTMLDivElement>, path: string) => {\n setDragPath(path)\n e.dataTransfer.effectAllowed = 'move'\n try {\n e.dataTransfer.setData('text/plain', path)\n } catch {\n /* some browsers restrict dataTransfer — ignore */\n }\n }, [])\n\n const onTabDragOver = useCallback((e: ReactDragEvent<HTMLDivElement>, path: string) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n if (dragPath !== undefined && dragPath !== path) moveTab(dragPath, path)\n }, [dragPath])\n\n const onTabDragEnd = useCallback(() => {\n setDragPath(undefined)\n }, [])\n\n if (!isOpen) return null\n\n const renderBody = () => {\n if (activeData === undefined) return <div className={styles.previewHint}>{t('preview.loading')}</div>\n switch (activeData.status) {\n case 'loading':\n return <div className={styles.previewHint}>{t('preview.loading')}</div>\n case 'loaded':\n if (isMarkdown && activeData.view === 'rendered') {\n return (\n <div\n className={styles.mdPreview}\n dangerouslySetInnerHTML={{ __html: mdHtml }}\n />\n )\n }\n return (\n <div\n className={`${styles.editor}${plain ? ` ${styles.editorPlain}` : ''}`}\n data-wrap={wrap ? 'on' : 'off'}\n >\n <div ref={gutterRef} className={styles.gutter} aria-hidden=\"true\">\n <div className={styles.gutterNumbers}>{gutterNumbers}</div>\n </div>\n {!plain && active !== undefined && (\n <pre ref={highlightRef} className={styles.editorHighlight} aria-hidden=\"true\">\n <code dangerouslySetInnerHTML={{ __html: highlightCode(activeData.draft ?? '', active) }} />\n </pre>\n )}\n <textarea\n ref={textareaRef}\n className={styles.editorTextarea}\n value={activeData.draft ?? ''}\n onChange={(e) => onTextareaChange(e.target.value)}\n onScroll={onTextareaScroll}\n onKeyDown={onKeyDown}\n spellCheck={false}\n wrap={wrap ? 'soft' : 'off'}\n />\n {isMarkdown && !mdRenderable && <div className={styles.editorHint}>{t('preview.mdRenderOff')}</div>}\n {language !== undefined && !isMarkdown && tooBig && <div className={styles.editorHint}>{t('preview.highlightOff')}</div>}\n {saveError !== undefined && <div className={styles.saveError}>{saveError}</div>}\n </div>\n )\n case 'image': {\n const src = active !== undefined ? imageSrcOf(active) : undefined\n const name = active !== undefined ? basenameOf(active) : ''\n if (src === undefined) {\n return <div className={styles.previewHint}>{t('preview.binary')}</div>\n }\n if (imageFailed === active) {\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.imageFailed')}</div>\n <div className={styles.previewMeta}>{name}</div>\n </div>\n )\n }\n return (\n <div className={styles.imageView}>\n <img\n className={styles.image}\n src={src}\n alt={name}\n onError={() => setImageFailed(active)}\n />\n <div className={styles.previewMeta}>{name}</div>\n </div>\n )\n }\n case 'binary':\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.binary')}</div>\n <div className={styles.previewMeta}>{formatSize(activeData.size)}</div>\n </div>\n )\n case 'too-large':\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.tooLarge', { limit: PREVIEW_TOO_LARGE_LABEL })}</div>\n <div className={styles.previewMeta}>{formatSize(activeData.size)}</div>\n </div>\n )\n case 'error':\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.error')}</div>\n <div className={styles.previewMeta}>{activeData.message}</div>\n </div>\n )\n }\n }\n\n const previewClassName = closing && tabs.length === 0\n ? `${styles.preview} ${styles.previewClosing}`\n : styles.preview\n\n return (\n <>\n <div\n ref={previewRef}\n className={previewClassName}\n style={previewWidth !== null ? { flex: `0 0 ${previewWidth}px` } : undefined}\n data-pane=\"explorer-preview\"\n data-fe-theme={theme}\n >\n {tabs.length > 0 && (\n <div className={styles.tabBar}>\n <div className={styles.tabScroller}>\n {tabs.map((path) => {\n const data = cacheRef.current.get(path)\n return (\n <div\n key={path}\n className={`${styles.tab} ${path === active ? styles.tabActive : ''}`}\n onClick={() => activateFile(path)}\n draggable\n onDragStart={(e) => onTabDragStart(e, path)}\n onDragOver={(e) => onTabDragOver(e, path)}\n onDragEnd={onTabDragEnd}\n title={path}\n >\n <span className={styles.tabIcon}><FileIcon name={basenameOf(path)} /></span>\n <span className={styles.tabName}>{basenameOf(path)}</span>\n {data?.dirty === true && <span className={styles.tabDot} />}\n {data?.diskChanged === true && (\n <button\n type=\"button\"\n className={styles.tabDiskBadge}\n title={t('tab.diskChanged')}\n onClick={(e) => {\n e.stopPropagation()\n void reloadFromDisk(path)\n }}\n >\n {'⟳'}\n </button>\n )}\n <button\n type=\"button\"\n className={styles.tabClose}\n title={t('tab.close')}\n onClick={(e) => {\n e.stopPropagation()\n closeFile(path)\n }}\n >\n ✕\n </button>\n </div>\n )\n })}\n </div>\n {isMarkdown && activeData?.status === 'loaded' && mdRenderable && (\n <button\n type=\"button\"\n className={styles.tabAction}\n title={activeData.view === 'rendered' ? t('action.mdSource') : t('action.mdRender')}\n onClick={toggleMdView}\n >\n {activeData.view === 'rendered' ? '📝' : '👁'}\n </button>\n )}\n <button\n type=\"button\"\n className={`${styles.tabAction}${wrap ? ` ${styles.tabActionActive}` : ''}`}\n title={wrap ? t('action.wrapOff') : t('action.wrapOn')}\n onClick={toggleWrap}\n >\n {'⤶'}\n </button>\n <button\n type=\"button\"\n className={styles.collapse}\n title={t('tab.collapse')}\n onClick={collapsePreview}\n >\n {'<'}\n </button>\n </div>\n )}\n <div className={styles.previewBody}>{renderBody()}</div>\n </div>\n <div ref={handleRef} className={styles.handle} onPointerDown={onHandleDown} role=\"separator\" aria-orientation=\"vertical\" />\n </>\n )\n}\n","/** Locale namespace and dictionaries for the files-explorer column. */\n\nexport const NS = 'files'\n\nexport const zh = {\n 'placeholder.noSession': '暂无会话',\n 'placeholder.noCwd': '当前会话没有工作目录',\n 'action.refresh': '刷新',\n 'action.open': '在系统中打开',\n 'action.theme': '切换浅色/暗色主题',\n 'action.saveHint': 'Ctrl+S 保存',\n 'action.wrapOn': '开启自动换行(显示层换行,不改文件)',\n 'action.wrapOff': '关闭自动换行(长行横向滚动)',\n 'action.mdRender': '渲染预览(Markdown)',\n 'action.mdSource': '查看 Markdown 源码',\n 'tab.close': '关闭标签页',\n 'tab.collapse': '收起文件详情',\n 'tab.expand': '弹出文件详情',\n 'tab.diskChanged': '文件已在磁盘上被修改,点击重新加载(会放弃未保存的编辑)',\n 'menu.open': '打开预览',\n 'menu.atFile': '@ 在消息中引用',\n 'menu.newFile': '新建文件',\n 'menu.newFolder': '新建文件夹',\n 'menu.rename': '重命名',\n 'menu.delete': '删除',\n 'menu.copyPath': '复制路径',\n 'menu.copy': '复制',\n 'menu.cut': '剪切',\n 'menu.paste': '粘贴',\n 'menu.refresh': '刷新',\n 'menu.openSystem': '在系统中打开',\n 'menu.revealInExplorer': '在资源管理器打开',\n 'menu.deleteSelected': '删除选中的 {count} 项',\n 'menu.selectAll': '全选',\n 'menu.undo': '撤销',\n 'action.undo': '撤销(Ctrl+Z)',\n 'undo.copy': '复制「{name}」',\n 'undo.move': '移动「{name}」',\n 'undo.rename': '重命名「{name}」',\n 'undo.create': '新建「{name}」',\n 'undo.delete': '删除「{name}」',\n 'error.reveal': '在资源管理器打开失败',\n 'prompt.newFileName': '新文件名',\n 'prompt.newFolderName': '新文件夹名',\n 'prompt.renameTo': '重命名为',\n 'confirm.deleteFile': '确定删除文件「{name}」吗?(可撤销)',\n 'confirm.deleteDir': '确定删除文件夹「{name}」及其全部内容吗?(可撤销)',\n 'confirm.deleteSelected': '确定删除选中的 {count} 项吗?{names}(可撤销)',\n 'confirm.overwrite': '「{name}」已存在,是否覆盖?',\n 'clipboard.copied': '已复制 {count} 项',\n 'clipboard.cut': '已剪切 {count} 项',\n 'clipboard.pasteHint': ' · Ctrl+V 粘贴到当前目录',\n 'clipboard.clear': '清除剪贴板',\n 'preview.loading': '加载中…',\n 'preview.binary': '二进制文件,无法预览',\n 'preview.imageFailed': '图片加载失败',\n 'preview.tooLarge': '文件过大,仅支持预览不超过 {limit}',\n 'preview.emptyDir': '空目录',\n 'preview.error': '加载失败',\n 'preview.highlightOff': '大文件:已关闭语法高亮(仍可编辑)',\n 'preview.mdRenderOff': '大文件:已切换为源码视图(仍可编辑)',\n} as const\n\nexport type FilesKey = keyof typeof zh\n\nexport const en: Record<FilesKey, string> = {\n 'placeholder.noSession': 'No session',\n 'placeholder.noCwd': 'No working directory for this session',\n 'action.refresh': 'Refresh',\n 'action.open': 'Open in system',\n 'action.theme': 'Toggle light/dark theme',\n 'action.saveHint': 'Ctrl+S to save',\n 'action.wrapOn': 'Enable word wrap (display only, file unchanged)',\n 'action.wrapOff': 'Disable word wrap (long lines scroll horizontally)',\n 'action.mdRender': 'Rendered preview',\n 'action.mdSource': 'Show markdown source',\n 'tab.close': 'Close tab',\n 'tab.collapse': 'Collapse file details',\n 'tab.expand': 'Expand file details',\n 'tab.diskChanged': 'File changed on disk — click to reload (discards unsaved edits)',\n 'menu.open': 'Open preview',\n 'menu.atFile': '@ Mention in message',\n 'menu.newFile': 'New File',\n 'menu.newFolder': 'New Folder',\n 'menu.rename': 'Rename',\n 'menu.delete': 'Delete',\n 'menu.copyPath': 'Copy Path',\n 'menu.copy': 'Copy',\n 'menu.cut': 'Cut',\n 'menu.paste': 'Paste',\n 'menu.refresh': 'Refresh',\n 'menu.openSystem': 'Open in System',\n 'menu.revealInExplorer': 'Reveal in Explorer',\n 'menu.deleteSelected': 'Delete {count} selected item(s)',\n 'menu.selectAll': 'Select All',\n 'menu.undo': 'Undo',\n 'action.undo': 'Undo (Ctrl+Z)',\n 'undo.copy': 'Copy \"{name}\"',\n 'undo.move': 'Move \"{name}\"',\n 'undo.rename': 'Rename \"{name}\"',\n 'undo.create': 'Create \"{name}\"',\n 'undo.delete': 'Delete \"{name}\"',\n 'error.reveal': 'Failed to reveal in Explorer',\n 'prompt.newFileName': 'New file name',\n 'prompt.newFolderName': 'New folder name',\n 'prompt.renameTo': 'Rename to',\n 'confirm.deleteFile': 'Delete file \"{name}\"? (undoable)',\n 'confirm.deleteDir': 'Delete folder \"{name}\" and all its contents? (undoable)',\n 'confirm.deleteSelected': 'Delete {count} selected item(s)? {names} (undoable)',\n 'confirm.overwrite': '\"{name}\" already exists. Overwrite?',\n 'clipboard.copied': '{count} item(s) copied',\n 'clipboard.cut': '{count} item(s) cut',\n 'clipboard.pasteHint': ' · Ctrl+V to paste here',\n 'clipboard.clear': 'Clear clipboard',\n 'preview.loading': 'Loading…',\n 'preview.binary': 'Binary file, cannot preview',\n 'preview.imageFailed': 'Failed to load image',\n 'preview.tooLarge': 'File too large to preview (limit {limit})',\n 'preview.emptyDir': 'Empty directory',\n 'preview.error': 'Load failed',\n 'preview.highlightOff': 'Large file: syntax highlighting off (still editable)',\n 'preview.mdRenderOff': 'Large file: source view (still editable)',\n}\n","/**\n * @-mention linkifier for the conversation.\n *\n * The workbench inserts `@<relative-workspace-path>` into the composer (menu\n * gesture \"在消息中引用\"), and this module makes the mention VISIBLE as a\n * hyperlink once the message is rendered: any `@` followed by a token that\n * matches the mention grammar is wrapped in an anchor, and clicking it opens\n * the file in the workbench preview.\n *\n * Grammar (anything else stays plain text with no special meaning):\n * - `@` must sit at a token boundary (start of text, whitespace, or\n * punctuation like `((` `,,` `。.` quotes and brackets) — so `user@x`,\n * `a.b@c` and URLs never match;\n * - the token is the longest run of non-whitespace, non-`@` characters,\n * with trailing sentence punctuation trimmed (`.。 ,, ;; :: !! ?? ))`…);\n * - the remaining token must be a RELATIVE path (never drive-absolute or\n * leading-slash), and path-shaped: either contains a `/` or `\\` directory\n * separator, or is a single segment ending in a file extension.\n *\n * Scanning mirrors the table-zoom enhancer: a MutationObserver on\n * `document.body`, rAF-coalesced, walks the text nodes of every\n * `[data-conversation-scroll]` subtree and skips protected containers\n * (code blocks, existing links, aria-hidden overlays like the composer\n * mirror/backdrop, the composer seat, popups, and the workbench column).\n */\nimport { openMention } from './composer'\n\n/** Mention pattern: `@` + token (no whitespace, no embedded `@`). */\nconst MENTION_RE = /@([^\\s@]+)/g\n\n/** Trailing characters trimmed from a mention token before validation. */\nconst TRAILING = new Set(['.', ',', ';', ':', '!', '?', '。', ',', ';', ':', '!', '?', ')', ')', ']', '】', '}', '》', '」', '』', '\"', \"'\"])\n\n/** Characters that may legally precede `@` in a mention (start/whitespace/punctuation). */\nfunction isBoundaryBefore(ch: string | undefined): boolean {\n if (ch === undefined) return true\n // NOTE: `]` is escaped — an unescaped `]` inside a character class ends it\n // early and silently turns the rest into required literal matches.\n return /[\\s(([【「『\"'`、,。;:!?,.!?:;>\\])})]/.test(ch)\n}\n\n/** Whether `token` (already trailing-trimmed) matches the relative-path grammar. */\nexport function isMentionToken(token: string): boolean {\n if (token.length === 0) return false\n // Sentence punctuation inside the token means following text bled into the\n // mention (e.g. \"@src/index.ts。谢谢\"): that is plain text, not a path.\n // Sentence punctuation at the END is trimmed before this check.\n if (/[。,、;:!?()、【】「」『』《》]/.test(token)) return false\n // Relative only: no drive prefix, no leading separator, no leading dot-dot.\n if (/^[A-Za-z]:[\\\\/]/.test(token)) return false\n if (token.startsWith('/') || token.startsWith('\\\\')) return false\n if (token.startsWith('..')) return false\n // Path-shaped: a directory separator anywhere, or a single file segment\n // with an extension.\n if (token.includes('/') || token.includes('\\\\')) return true\n return /^[^\\\\/]+\\.[A-Za-z0-9_][A-Za-z0-9._~+-]*$/.test(token)\n}\n\n/** Trim trailing sentence punctuation from a raw mention token. */\nexport function trimMentionToken(raw: string): string {\n let token = raw\n while (token.length > 0 && TRAILING.has(token[token.length - 1])) {\n token = token.slice(0, -1)\n }\n return token\n}\n\n/**\n * Extract every valid mention from `text` as [start, end, mention] ranges.\n * `end` covers `@` + the TRIMMED token (trailing punctuation stays outside the\n * link). Pure and testable: the DOM walk uses it and then splits the text node.\n */\nexport function findMentions(text: string): Array<{ start: number; end: number; mention: string }> {\n const hits: Array<{ start: number; end: number; mention: string }> = []\n MENTION_RE.lastIndex = 0\n let match: RegExpExecArray | null\n while ((match = MENTION_RE.exec(text)) !== null) {\n const at = match.index\n const raw = match[1]\n if (!isBoundaryBefore(at > 0 ? text[at - 1] : undefined)) continue\n const token = trimMentionToken(raw)\n if (!isMentionToken(token)) continue\n hits.push({ start: at, end: at + 1 + token.length, mention: token })\n }\n return hits\n}\n\n/** Containers whose text is never linkified (code, existing links, overlays). */\nconst SKIP_SELECTOR = [\n 'code',\n 'pre',\n 'a',\n 'script',\n 'style',\n 'textarea',\n '[data-composer-seat]',\n '[data-input-mirror]',\n '[data-input-backdrop]',\n '[data-pane=\"explorer\"]',\n '[aria-hidden=\"true\"]',\n '.dstz-popup',\n '.dshpick-lightbox',\n '[data-wb-mention]',\n].join(',')\n\n/** Walk the text nodes of one conversation scroll container and linkify. */\nfunction linkifyRoot(root: HTMLElement): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT)\n const toCheck: Text[] = []\n let node: Node | null = walker.nextNode()\n while (node !== null) {\n if (node.parentElement !== null && node.parentElement.closest(SKIP_SELECTOR) === null) {\n toCheck.push(node as Text)\n }\n node = walker.nextNode()\n }\n for (const textNode of toCheck) {\n linkifyTextNode(textNode)\n }\n}\n\n/** Wrap every mention in one text node; returns true when anything changed. */\nfunction linkifyTextNode(node: Text): boolean {\n const text = node.data\n const hits = findMentions(text)\n if (hits.length === 0) return false\n const frag = document.createDocumentFragment()\n let cursor = 0\n for (const hit of hits) {\n if (hit.start > cursor) frag.appendChild(document.createTextNode(text.slice(cursor, hit.start)))\n const anchor = document.createElement('a')\n anchor.className = 'dswb-mention'\n anchor.dataset.wbMention = hit.mention\n anchor.textContent = text.slice(hit.start, hit.end)\n anchor.title = `@${hit.mention}`\n frag.appendChild(anchor)\n cursor = hit.end\n }\n if (cursor < text.length) frag.appendChild(document.createTextNode(text.slice(cursor)))\n node.parentNode?.replaceChild(frag, node)\n return true\n}\n\n/** Style tag guard (the bundle may re-apply on HMR). */\nlet styleInstalled = false\n\nconst MENTION_CSS = [\n '.dswb-mention{color:var(--dsw-alias-state-business-primary);text-decoration:underline;text-underline-offset:2px;cursor:pointer;border-radius:4px;padding:0 1px}',\n '.dswb-mention:hover{background:var(--dsw-alias-interactive-bg-hover)}',\n].join('')\n\nfunction installStyle(): void {\n if (styleInstalled || typeof document === 'undefined') return\n styleInstalled = true\n const tagId = 'dsh-plugin-workbench/mention.module.css'\n if (document.querySelector(`style[data-plugin-css=${JSON.stringify(tagId)}]`) === null) {\n const tag = document.createElement('style')\n tag.dataset.plugin = 'dsh-plugin-workbench'\n tag.dataset.pluginCss = tagId\n tag.textContent = MENTION_CSS\n document.head.appendChild(tag)\n }\n}\n\n/** Click handler: open the mentioned file in the workbench preview. */\nfunction onDocumentClick(e: MouseEvent): void {\n const target = e.target\n if (!(target instanceof Element)) return\n const anchor = target.closest('a.dswb-mention')\n if (anchor === null) return\n const mention = anchor.getAttribute('data-wb-mention')\n if (mention === null) return\n e.preventDefault()\n e.stopPropagation()\n openMention(mention)\n}\n\n/** One-time install guard (HMR re-applies must not double-observe). */\nlet linkifierInstalled = false\n\n/** Start the linkifier: initial scan + MutationObserver with rAF coalescing. */\nexport function installMentionLinkifier(): () => void {\n if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') return () => undefined\n if (linkifierInstalled) return () => undefined\n linkifierInstalled = true\n installStyle()\n document.addEventListener('click', onDocumentClick)\n let pending = false\n const scan = (): void => {\n pending = false\n for (const root of document.querySelectorAll<HTMLElement>('[data-conversation-scroll]')) {\n linkifyRoot(root)\n }\n }\n const observer = new MutationObserver(() => {\n if (pending) return\n pending = true\n requestAnimationFrame(scan)\n })\n observer.observe(document.body, { childList: true, subtree: true, characterData: true })\n scan()\n return () => {\n observer.disconnect()\n document.removeEventListener('click', onDocumentClick)\n linkifierInstalled = false\n }\n}\n","/**\n * Client half of the files-explorer plugin.\n *\n * Registers the file tree into the `explorer` slot and the split preview into\n * the `explorer.preview` slot (both declared by the patched ui-layout), plus a\n * `files` locale namespace. The inject factories return plain callbacks:\n * filesystem reads go through the generic connection RPC channel into the host\n * half, and `openPath` reuses the existing workspaces capability.\n */\nimport type { Context } from '@deepseek-ai/cordis'\nimport { FileExplorer } from './FileExplorer'\nimport { FilePreview } from './FilePreview'\nimport { NS, zh, en } from './locales'\nimport { installComposerDrops } from './composer'\nimport { installMentionLinkifier } from './mentions'\n\nconst CHANNEL = '/dsh-plugin-files'\n\n/** Required client services (sequencing only — data reads use global hooks). */\nexport const inject = ['slots', 'sessions', 'workspaces', 'locale', 'connection']\n\nexport function apply(ctx: Context): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'files-explorer: dictionaries')\n\n // Drag-to-chat + @-mention linkifier: DOM-level integrations, one-time\n // install (module guards make re-applies on HMR idempotent).\n installComposerDrops()\n ctx.effect(() => installMentionLinkifier(), 'files-explorer: @mention linkifier')\n\n const listDir = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'list', { path }, signal))\n const readFile = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'read', { path }, signal))\n const writeFile = (path: string, content: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'write', { path, content }, signal))\n const watchFiles = (paths: string[]) => unwrap(ctx.connection.rpc.call(CHANNEL, 'watch', { paths }))\n const createFile = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'createFile', { path }, signal))\n const createDir = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'createDir', { path }, signal))\n const renameFile = (path: string, to: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'rename', { path, to }, signal))\n const removePath = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'delete', { path }, signal))\n const copyPath = (from: string, to: string, overwrite: boolean, signal?: AbortSignal) =>\n unwrap(ctx.connection.rpc.call(CHANNEL, 'copy', { from, to, overwrite }, signal))\n const revealInExplorer = (path: string, kind: 'file' | 'dir', signal?: AbortSignal) =>\n unwrap(ctx.connection.rpc.call(CHANNEL, 'reveal', { path, kind }, signal))\n const openPath = (path: string) => ctx.workspaces.openPath(path)\n\n ctx.slots.inject('explorer', () => ctx.slots.register({\n name: 'explorer',\n locale: NS,\n inject: () => ({ listDir, openPath, revealInExplorer, createFile, createDir, renameFile, removePath, copyPath }),\n }, FileExplorer))\n\n ctx.slots.inject('explorer.preview', () => ctx.slots.register({\n name: 'explorer.preview',\n locale: NS,\n inject: () => ({ readFile, writeFile, watchFiles }),\n }, FilePreview))\n}\n\ninterface RpcFailure {\n ok: false\n error: { code: string; message: string }\n}\n\n/** Error carrying the host's machine-readable `code` (always a core union code; copy collisions are reported in the value instead). */\nexport interface RpcError extends Error {\n code?: string\n}\n\nasync function unwrap<T>(result: Promise<{ ok: true; value: T } | RpcFailure>): Promise<T> {\n const resolved = await result\n if (!resolved.ok) {\n const error = new Error(resolved.error.message) as RpcError\n error.code = resolved.error.code\n throw error\n }\n return resolved.value\n}\n"],"x_google_ignoreList":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"mappings":"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AC,KAAK,GAAG,EAAE;IACrC,WAAW;GACb,CAAC;GACD,MAAM,WAAW;IACf,WAAW;IACX,OAAO;IACP,aAAa;IACb,UAAU,CAAE,KAAK,QAAQ,KAAK,YAAY,EAAE,OAAO,aAAa,CAAC,CAAE;IACnE,WAAW;GACb;GAEA,MAAM,WAAW;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,WAAW,CACf,QACA,OACF;GAGA,MAAM,YAAY,EAAE,OAAO,iBAAiB;GAG5C,MAAM,kBAAkB;IACtB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,gBAAgB;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS,CACP,MACA,KACF;IACA,UAAU;KACR,UAAU;KACV,SAAS;KACT,SAAS;KACT,UAAU;MACR,GAAG;MACH,GAAG;MAEH;MACA;MACA,GAAG;MACH,GAAG;KACL;IACF;IACA,UAAU;KACR;KACA,KAAK,QAAQ;KACb;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;GACF;EACF;;;;EC/YA,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GAInB,MAAM,sBAAsB,KAAK,QAAQ,MAAM,KAAK,EAAE,UAAU,CAAE,EAAE,OAAO,OAAO,CAAE,EAAE,CAAC;GACvF,MAAM,mBAAmB;GACzB,MAAM,eAAe;GAErB,MAAM,mBAAmB,mCAErB,MAAM,SAAS,YAAY,IAC3B,kBAAkB,MAAM,SAAS,UAAoB,IACvD;GAEF,MAAM,sBAAsB;IAC1B,WAAW;IACX,OAAO;GACT;GAKA,MAAM,UAAU;IACd,WAAW;IACX,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,SAAS;MACT,UAAU,CAAE,KAAK,gBAAiB;KACpC;KACA;MACE,OAAO;MACP,KAAK;MACL,SAAS;KACX;KAKA,KAAK,kBAAkB;MACrB,OAAO;MACP,KAAK;KACP,CAAC;IACH;GACF;GAEA,MAAM,UAAU;IACd,WAAW;IACX,UAAU,CAER,EAAE,OACA,wVAkBF,GAEA,EAAE,OACA,8JAcF,CACF;IACA,WAAW;GACb;GA8CA,MAAM,gBAAgB,CACpB;IAtCA,OAAO;IACP,OAAO;IACP,KAAK;IACL,UAAU,EAAE,SAAS,UAAU;IAC/B,UAAU;KACR,EAEE,OAAO,OACT;KACA;KACA;MACE,OAAO;MACP,OAAO;KACT;KACA;KACA,KAAK;IACP;GAsBmB,GACnB;IAnBA,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU,EAAE,SACR,yFACwC;IAC5C,UAAU;KACR;MACE,OAAO;MACP,WAAW;KACb;KACA,KAAK,QAAQ,SAAS,EAAE,WAAW,SAAS,CAAC;KAC7C;KACA,KAAK;IACP;GAKW,CACb;GAEA,MAAM,aAAa;IACjB,WAAW;IACX,OAAO,MAAM,SAAS,YAAY,IAAI,KAAK;IAC3C,WAAW;GACb;GAEA,MAAM,iBAAiB,MAAM,SAAS,YAAY,IAAI,KAAK,WAAW;GAQtE,MAAM,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAGA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,aAAa;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAaA,MAAM,eAAe;IACnB,MAAM;IACN,SAAS;IACT,SAAS;KAbT;KACA;KACA;KACA;KACA;IASgB;IAChB,UAAU,CANO,SAMA;IACjB,aAAa;GACf;GAEA,MAAM,oBAAoB;IACxB,WAAW;IACX,WAAW;IACX,UAAU,EAER,OAAO,eAAe;IACxB,OAAO,MAAM,OACX,MACA,MAAM,kBAAkB,KAAK,GAAG,EAAE,IAClC,KAAK,UACL,MAAM,UAAU,kBAAkB,CAAC;GACvC;GAEA,MAAM,sBAAsB;IAC1B;IACA,GAAG;IACH;IACA;IACA,KAAK;IACL;IACA;GACF;GAEA,MAAM,qBAAqB;IAIzB,UAAU;KACR;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,eAAe;MACf,KAAK;KACP;IACF;IACA,UAAU;IACV,UAAU,oBAAoB,OAAO,CACnC;KACE,OAAO;KACP,KAAK;KACL,UAAU;KACV,UAAU,oBAAoB,OAAO,CAAE,MAAO,CAAC;KAC/C,WAAW;IACb,CACF,CAAC;IACD,WAAW;GACb;GAEA,MAAM,uBAAuB;IAC3B,WAAW;IACX,OAAO,MAAM,mBAAmB,sBAAoD;IACpF,aAAa;IACb,KAAK;IACL,YAAY;IACZ,UAAU;IACV,SAAS;IACT,UAAU;KACR;MACE,OAAO;MACP,UAAU;MACV,WAAW;KACb;KACA;MACE,OAAO;MACP,aAAa;MACb,UAAU,CAAE,UAAW;MACvB,WAAW;KACb;KAGA;MACE,OAAO;MACP,WAAW;KACb;KAEA;MACE,OAAO;MACP,gBAAgB;MAChB,UAAU,CACR,SACA,OACF;KACF;KAGA;MACE,WAAW;MACX,OAAO;KACT;KACA;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,UAAU;MACV,WAAW;MACX,UAAU;OACR;OACA,KAAK;OACL;OACA;OACA;OAEA;QACE,OAAO;QACP,KAAK;QACL,UAAU;QACV,WAAW;QACX,UAAU;SACR;SACA;SACA,KAAK;SACL;SACA;SACA;QACF;OACF;MACF;KACF;KACA;KACA;KACA,KAAK;KACL,GAAG;IACL;GACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS;KACP;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;IACV,SAAS;IACT,kBAAkB,EAAE,qBAAqB,WAAW;IACpD,UAAU,CAAC,CAAC,CAAC,OACX,oBACA,sBACA,mBACA,qBACA;KACE,GAAG;KACH;MACE,OAAO;MACP,KAAK;MACL,UAAU;MACV,UAAU,CACR,QACA,mBACF;KACF;KACA;MACE,OAAO,KAAK,WAAW;MACvB,UAAU;KACZ;KACA;MACE,OAAO;OAEL;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;KACF;IACF,CAAC;GACL;EACF;;;;ECjnBA,SAAS,OAAO,MAAM;GACpB,MAAM,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,qBAAqB;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GA6GA,MAAM,WAAW;IACf,SAAS;KAtGT;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IA8CuB,CAAC,CAAC,OAAO;KA3ChC;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAIkD,CAAC;IACnD,UAAU;IACV,SAAS;KA9GT;KACA;KACA;KACA;IA2GwB;GAC1B;GACA,MAAM,aAAa,KAAK,QAAQ,KAAK,YAAY,EAAE,OAAO,qBAAqB,CAAC;GAOhF,MAAM,UAAU;IACd,WAAW;IACX,UAAU;KACR,EAAE,OAAO,gDAA2C;KACpD,EAAE,OAAO,kEAA6D;KACtE,EAAE,OAAO,gHAA2G;IACtH;IACA,WAAW;GACb;GACA,MAAM,aAAa;IACjB,WAAW;IACX,OAAO;IACP,WAAW;GACb;GACA,MAAM,kBAAkB;IACtB,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU,CAAE,EAAE,OAAO,OAAK,CAAE;GAC9B;GACA,MAAM,wBAAwB,KAAK,QAAQ,iBAAiB,EAAE,SAAS,KAAK,CAAC;GAC7E,MAAM,QAAQ;IACZ,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;GACZ;GACA,MAAM,cAAc,KAAK,QAAQ,OAAO,EAAE,SAAS,KAAK,CAAC;GACzD,MAAM,sBAAsB;IAC1B,WAAW;IACX,OAAO;IACP,KAAK;IACL,SAAS;IACT,UAAU;KACR,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAO;KAChB,KAAK;KACL;IACF;GACF;GACA,MAAM,+BAA+B;IACnC,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;KACR,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAK;KACd;IACF;GACF;GACA,MAAM,qCAAqC,KAAK,QAAQ,8BAA8B;IACpF,SAAS;IACT,UAAU;KACR,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAK;KACd;IACF;GACF,CAAC;GACD,MAAM,WAAW;IACf;IACA;IACA;IACA,KAAK;IACL,KAAK;IACL;IACA,KAAK;GACP;GACA,YAAY,WAAW;IACrB;IACA;IACA;IACA,KAAK;IACL,KAAK;IACL;IACA,KAAK,QAAQ,KAAK,sBAAsB,EAAE,SAAS,KAAK,CAAC;GAC3D;GACA,MAAM,SAAS,EAAE,UAAU;IACzB;IACA;IACA;IACA;IACA,KAAK;IACL,KAAK;GACP,EAAE;GAEF,MAAM,mBAAmB;IACvB,OAAO;IACP,KAAK;IACL,UAAU,CACR,EAAE,eAAe,SAAS,GAC1B,UACF;GACF;GACA,MAAM,gBAAgB,KAAK,WAAW,OAAO,KAAK,WAAW,eAAe,KAAK,WAAW;GAC5F,MAAM,gBAAgB;IAGpB,OAAO,MAAM,KAAK;IAClB,WAAW;GACb;GAEA,OAAO;IACL,MAAM;IACN,SAAS,CACP,MACA,IACF;IACA,UAAU;IACV,SAAS;IACT,UAAU;KACR,KAAK,QACH,OACA,KACA;MACE,aAAa;MACb,UAAU,CACR;OACE,WAAW;OACX,UAAU;QACR;SACE,OAAO;SACP,WAAW;QACb;QACA,EAAE,OAAO,WAAW;QACpB;SACE,OAAO;SACP,KAAK;QACP;OACF;MACF,CACF;KACF,CACF;KACA,KAAK;KACL,KAAK;KACL;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,UAAU,EAAE,SAAS,sFAAsF;KAC7G;KACA;KACA;KACA;MACE,eAAe;MACf,WAAW;MACX,KAAK;MACL,SAAS;MACT,UAAU;OACR,EAAE,eAAe,cAAc;OAC/B;OACA;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MACE,eAAe;MACf,WAAW;MACX,KAAK;MACL,SAAS;MACT,UAAU;OACR;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MACE,eAAe;MACf,WAAW;MACX,KAAK;MACL,SAAS;MACT,UAAU;OACR;OACA;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MAEE,WAAW;MACX,OAAO;MACP,cAAc;MACd,KAAK;MACL,YAAY;MACZ,UAAU,CACR;OACE,WAAW;OACX,OAAO;OACP,KAAK;MACP,CACF;KACF;KACA;MAGE,eAAe;MACf,WAAW;KACb;KACA;MACE,WAAW;MACX,OAAO,MAAM,gBAAgB,WAAW,KAAK,WAAW;MACxD,aAAa;MACb,KAAK;MACL,YAAY;MACZ,UAAU;MACV,UAAU;OAER;QACE,eAAe,mBAAmB,KAAK,GAAG;QAC1C,WAAW;OACb;OACA;QACE,OAAO,KAAK,WAAW;QACvB,aAAa;QACb,UAAU,CACR,KAAK,YACL,gBACF;QACA,WAAW;OACb;OACA,EAAE,OAAO,OAAO;OAChB;QACE,WAAW;QACX,OAAO;QACP,KAAK;QACL,cAAc;QACd,YAAY;QACZ,UAAU;QACV,WAAW;QACX,UAAU;SACR;SACA;SACA,KAAK;QACP;OACF;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;IACF;GACF;EACF;;;EC/ZA,MAAM,SAAS,SAAS;GACtB,OAAO;IACL,WAAW;KACT,OAAO;KACP,OAAO;IACT;IACA,eAAe,KAAK;IACpB,UAAU;KACR,OAAO;KACP,OAAO;IACT;IACA,eAAe;KACb,OAAO;KACP,OAAO;IACT;IACA,mBAAmB;KACjB,WAAW;KACX,OAAO;IACT;IACA,yBAAyB;KACvB,OAAO;KACP,OAAO;KACP,KAAK;KACL,SAAS;KACT,UAAU,CACR,KAAK,kBACL,KAAK,iBACP;IACF;IACA,iBAAiB;KACf,OAAO;KACP,OAAO,KAAK,YAAY;KASxB,WAAW;IACb;IACA,cAAc;KACZ,WAAW;KACX,OAAO;IACT;GACF;EACF;EAEA,MAAM,YAAY;GAChB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,WAAW;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,OAAO,CACX,GAAG,WACH,GAAG,QACL;EAKA,MAAM,iBAAiB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;EAGjB,MAAM,iBAAiB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;EAGjB,MAAM,kBAAkB;GACtB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;EAEjB,MAAM,aAAa;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;;EAUjB,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,MAAM,IAAI;GACxB,MAAM,gBAAgB,EAAE,OAAO,+BAA+B;GAC9D,MAAM,eAAe;GACrB,MAAM,iBAAiB;GAEvB,MAAM,UAAU,CACd,KAAK,kBACL,KAAK,iBACP;GAEA,OAAO;IACL,MAAM;IACN,kBAAkB;IAClB,SAAS;IACT,UAAU,EAAE,kBAAkB,UAAU;IACxC,kBAAkB,EAGhB,kBAAkB,eAAe;IACnC,UAAU;KACR,MAAM;KACN;KAGA,MAAM;KACN;MACE,WAAW;MACX,OAAO;MACP,WAAW;KACb;KACA;MACE,WAAW;MACX,OAAO;MACP,WAAW;KACb;KACA,MAAM;KACN;MACE,WAAW;MACX,UAAU,CACR,EAAE,OAAO,OAAO,eAAe,KAAK,GAAG,IAAI,IAAI,GAC/C,EAAE,OAAO,WAAW,gBAAgB,KAAK,GAAG,IAAI,IAAI,CACtD;KACF;KAOA,MAAM;KACN;MACE,WAAW;MACX,OAAO,SAAS,WAAW,KAAK,GAAG,IAAI;KACzC;KAEA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,MAAM;OACN,MAAM;OACN,MAAM;OACN,MAAM;OACN,MAAM;OACN,GAAG;OAIH;QACE,OAAO;QACP,KAAK;QACL,WAAW;QACX,UAAU,EAAE,UAAU,eAAe;QACrC,UAAU,CACR,GAAG,SACH;SACE,WAAW;SAGX,OAAO;SACP,gBAAgB;SAChB,YAAY;QACd,CACF;OACF;OACA,MAAM;MACR;KACF;KACA;MACE,OAAO,MAAM,UAAU,GAAG;MAC1B,KAAK;MACL,WAAW;MACX,SAAS;MACT,UAAU,CACR;OACE,WAAW;OACX,OAAO;MACT,GACA;OACE,OAAO;OACP,gBAAgB;OAChB,YAAY;OACZ,WAAW;OACX,UAAU;QACR,UAAU;QACV,SAAS;QACT,WAAW,eAAe,KAAK,GAAG;OACpC;OACA,UAAU;QACR;SACE,OAAO;SACP,WAAW;QACb;QACA,GAAG;QACH,MAAM;OACR;MACF,CACF;KACF;KACA;MACE,WAAW;MACX,OAAO,SAAS,KAAK,KAAK,GAAG,IAAI;KACnC;IACF;GACF;EACF;;;ECp7BA,SAAS,GAAG,MAAM;GAyEhB,MAAM,WAAW;IACf,SAAS;KA3BT;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAGW;IACX,MAAM;KAlDN;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IA+BU;IACV,SAAS;KA1ET;KACA;KACA;KACA;IAuEgB;IAChB,UAAU;KArEV;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAuDkB;GACpB;GACA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,QAAS;IACpB,UAAU;IACV,SAAS;IACT,UAAU;KACR,KAAK;KACL,KAAK;KACL;MACE,WAAW;MACX,UAAU;OACR,KAAK;OACL,KAAK;OACL;QACE,OAAO;QACP,KAAK;OACP;MACF;KACF;KACA;MACE,WAAW;MACX,UAAU;OACR;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;MACF;KACF;KACA,EAAE,OAAO,KACT;KACA;MACE,WAAW;MACX,eAAe;MACf,KAAK;MACL,YAAY;MACZ,UAAU,CACR,KAAK,YACL;OACE,WAAW;OACX,OAAO;OACP,KAAK;OACL,YAAY;OACZ,UAAU;OACV,SAAS;MACX,CACF;KACF;IACF;GACF;EACF;;;ECrJA,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GACnB,MAAM,UAAU;IACd,WAAW;IACX,WAAW;IACX,UAAU,CACR,EAAE,OAAO,uBAAuB,GAChC,EAAE,OAAO,KAAK,UAAU,CAC1B;GACF;GACA,MAAM,WAAW,KAAK,QAAQ;GAC9B,SAAS,WAAW,CAClB;IACE,OAAO;IACP,KAAK;GACP,GACA;IACE,OAAO;IACP,KAAK;GACP,CACF;GACA,MAAM,YAAY;IAChB,WAAW;IACX,UAAU,CACR,EAAE,OAAO,oBAAoB,GAC7B,EAAE,OAAO,cAAc,CACzB;GACF;GACA,MAAM,WAAW;IACf,WAAW;IACX,OAAO;GACT;GACA,MAAM,UAAU;IACd,WAAW;IACX,UAAU,CAAE,KAAK,gBAAiB;IAClC,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;IACF;GACF;GACA,MAAM,QAAQ;IACZ,OAAO;IACP,KAAK;IACL,UAAU;KACR;KACA;KACA;KACA;KACA;KACA;IACF;IACA,WAAW;GACb;GAKA,MAAM,UAAU,MAAM,OACpB,kBAAU,iBAAyB,SACrC;GAMA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,MAAO;IAClB,kBAAkB;IAClB,SAAS;IACT,UAAU;KACR;KACA;MACE,WAAW;MACX,OAAO;MACP,KAAK;KACP;KACA;MACE,OAlBa,MAAM,OACvB,SAAS,gBAAgB,SAAS,MAClC,MAAM,UAAU,eAAe,CAgBX;MAChB,WAAW;MACX,QAAQ;OACN,KAAK;OACL,UAAU;QACR;QACA;QACA;QACA;QACA;QACA;OACF;MACF;KACF;IACF;GACF;EACF;;;ECrHA,IAAI,gBAAgB;EACpB,IAAI,OAAO,OAAO,cAAc;EAChC,IAAI,YAAY;EAChB,IAAI,UAAU;GACZ,WAAW;GACX,UAAU;IAGR,EAAE,OAAO,QAAQ,cAAc,KAAK,KAAK,WAAW,KAAK,cAC1C,cAAc,aAAa;IAE1C,EAAE,OAAO,OAAO,cAAc,KAAK,KAAK,8BAA8B;IACtE,EAAE,OAAO,IAAI,KAAK,aAAa;IAC/B,EAAE,OAAO,OAAO,cAAc,YAAY;IAG1C,EAAE,OAAO,aAAa,UAAU,SAAS,UAAU,QAAQ,UAAU,cACtD,cAAc,aAAa;IAG1C,EAAE,OAAO,iCAAiC;IAG1C,EAAE,OAAO,YAAY,UAAU,WAAW;IAG1C,EAAE,OAAO,yBAAyB;IAGlC,EAAE,OAAO,gCAAgC;GAC3C;GACA,WAAW;EACb;;;;;;;;;;;;EAqBA,SAAS,WAAW,IAAI,cAAc,OAAO;GAC3C,IAAI,UAAU,IAAI,OAAO;GAEzB,OAAO,GAAG,QAAQ,eAAc,MAAK;IACnC,OAAO,WAAW,IAAI,cAAc,QAAQ,CAAC;GAC/C,CAAC;EACH;;EAGA,SAAS,KAAK,MAAM;GAClB,MAAM,QAAQ,KAAK;GAGnB,MAAM,gBAAgB;GAGtB,MAAM,6BAA6B;GAanC,MAAM,wBAAwB,WAAW,qVACA,UAAU,CAAC;GAuEpD,MAAM,WAAW;IACf,SAAS;KArET;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IA0BqB;IACrB,SAAS;KAlBT;KACA;KACA;IAgBgB;IAChB,MAAM;KAbN;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAMU;IACV,UAAU,CAzBV,SACA,MAwBkB;GACpB;GAEA,MAAM,aAAa;IACjB,WAAW;IACX,OAAO;IACP,UAAU,CACR;KACE,OAAO;KACP,KAAK;KACL,UAAU,CAAE,MAAO;IACrB,CACF;GACF;GACA,MAAM,SAAS;IACb,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;IACV,WAAW;IACX,UAAU,CAAE,KAAK,oBAAqB;IACtC,YAAY;GACd;GAEA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,KAAM;IACjB,UAAU;IACV,SAAS;IACT,UAAU;KACR,KAAK,QACH,WACA,QACA;MACE,WAAW;MACX,UAAU,CACR;OAEE,OAAO;OACP,WAAW;MACb,GACA;OACE,WAAW;OACX,OAAO;MACT,CACF;KACF,CACF;KAEA;MACE,OAAO;MACP,UAAU;MACV,WAAW;KACb;KACA,KAAK;KACL,KAAK;KACL;MACE,OAAO;MACP,KAAK;MACL,WAAW;MACX,UAAU,CAAE,KAAK,gBAAiB;KACpC;KACA,KAAK;KACL,KAAK;KACL;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;KACF;KACA;MAEE,OAAO;MACP,OAAO;KACT;KACA;MAGE,eAAe;MACf,WAAW;KACb;KACA;MACE,OAAO;OACL;OACA,MAAM,OAAO,uBAAuB,4BAA4B,KAAK;OACrE;OACA;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;MACA,UAAU;OACR;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MACE,OAAO;OACL;OACA,MAAM,OAAO,uBAAuB,4BAA4B,KAAK;OACrE;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;MACA,UAAU;MACV,UAAU;OACR;QACE,WAAW;QACX,OAAO;QACP,KAAK;QACL,UAAU;QACV,WAAW;QACX,UAAU;SACR;SACA,KAAK;SACL,KAAK;SACL;SACA,KAAK;QACP;OACF;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;KACA;IACF;GACF;EACF;;;ECvTA,MAAMC,aAAW;EAEjB,MAAMC,aAAW;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAIA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;EACF;EACA,MAAMC,aAAW;GACf;GACA;GACA;GACA;GACA;GACA;EACF;EAGA,MAAMC,UAAQ;GAEZ;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GAEA;EACF;EAEA,MAAMC,gBAAc;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAMC,qBAAmB;GACvB;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAMC,uBAAqB;GACzB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAMC,cAAY,CAAC,CAAC,CAAC,OACnBF,oBACAF,SACAC,aACF;;EAWA,SAASI,aAAW,MAAM;GACxB,MAAM,QAAQ,KAAK;;;;;;;;GAQnB,MAAM,iBAAiB,OAAO,EAAE,YAAY;IAC1C,MAAM,MAAM,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC;IAEnC,OADY,MAAM,MAAM,QAAQ,KAAK,KAC5B,MAAM;GACjB;GAEA,MAAM,aAAaR;GACnB,MAAM,WAAW;IACf,OAAO;IACP,KAAK;GACP;GAEA,MAAM,mBAAmB;GACzB,MAAM,UAAU;IACd,OAAO;IACP,KAAK;;;;;IAKL,oBAAoB,OAAO,aAAa;KACtC,MAAM,kBAAkB,MAAM,EAAE,CAAC,SAAS,MAAM;KAChD,MAAM,WAAW,MAAM,MAAM;KAC7B,IAIE,aAAa,OAGb,aAAa,KACX;MACF,SAAS,YAAY;MACrB;KACF;KAIA,IAAI,aAAa,K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M;KACT;KACA;KACA;KACA;MAxBF,OAAO;MACP,OAAO;KAuBA;IACP;GACF;EACF;;;EChPA,SAAS,OAAO,MAAM;GACpB,MAAM,QAAQ,KAAK;GACnB,MAAM,WAAW;GACjB,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GA0GA,MAAM,WAAW;IACf,UAAU;IACV,SAAS;IACT,UAAU;KA1GV;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAkCkB;IAClB,SAAS;KA/BT;KACA;KACA;KACA;KACA;KACA;IA0BgB;IAChB,MAAM;KApBN;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAQU;GACZ;GAEA,MAAM,SAAS;IACb,WAAW;IACX,OAAO;GACT;GAEA,MAAM,QAAQ;IACZ,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;IACV,SAAS;GACX;GAEA,MAAM,kBAAkB;IACtB,OAAO;IACP,WAAW;GACb;GAEA,MAAM,SAAS;IACb,WAAW;IACX,UAAU,CAAE,KAAK,gBAAiB;IAClC,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,UAAU,CACR,KAAK,kBACL,MACF;MACA,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU,CACR,KAAK,kBACL,MACF;MACA,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;OACA;MACF;KACF;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;OACA;MACF;KACF;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;MACF;KACF;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;MACF;KACF;KACA,KAAK;KACL,KAAK;IACP;GACF;GAGA,MAAM,YAAY;GAClB,MAAM,aAAa,QAAQ,UAAU,SAAS,UAAU,QAAQ,UAAU;GAM1E,MAAM,YAAY,OAAO,eAAe,KAAK,GAAG;GAChD,MAAM,SAAS;IACb,WAAW;IACX,WAAW;IACX,UAAU;KAWR,EACE,OAAO,QAAQ,UAAU,KAAK,WAAW,cAAc,UAAU,WAAW,UAAU,GACxF;KACA,EACE,OAAO,IAAI,WAAW,QACxB;KAQA,EACE,OAAO,0CAA0C,UAAU,GAC7D;KACA,EACE,OAAO,4BAA4B,UAAU,GAC/C;KACA,EACE,OAAO,6BAA6B,UAAU,GAChD;KACA,EACE,OAAO,mCAAmC,UAAU,GACtD;KAIA,EACE,OAAO,OAAO,UAAU,UAAU,UAAU,GAC9C;IACF;GACF;GACA,MAAM,eAAe;IACnB,WAAW;IACX,OAAO,MAAM,UAAU,SAAS;IAChC,KAAK;IACL,UAAU;IACV,UAAU,CACR,EACE,OAAO,UACT,GAEA;KACE,OAAO;KACP,KAAK;KACL,gBAAgB;IAClB,CACF;GACF;GACA,MAAM,SAAS;IACb,WAAW;IACX,UAAU,CAER;KACE,WAAW;KACX,OAAO;KACP,MAAM;IACR,GACA;KACE,OAAO;KACP,KAAK;KACL,cAAc;KACd,YAAY;KACZ,UAAU;KACV,UAAU;MACR;MACA;MACA;MACA;MACA,KAAK;KACP;IACF,CACF;GACF;GACA,MAAM,WAAW;IACf;IACA;IACA;GACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS;KACP;KACA;KACA;IACF;IACA,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;KACR;KACA;KACA;MAEE,OAAO;MACP,OAAO;KACT;KACA;MAGE,eAAe;MACf,WAAW;KACb;KACA;MAAE,OAAO;MAAU,OAAO;KAAU;KACpC;KACA;KACA,KAAK;KACL;MACE,OAAO;OACL;OAAS;OACT;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;MACA,UAAU,CAAE,MAAO;KACrB;KACA;MACE,UAAU,CACR,EACE,OAAO;OACL;OAAW;OACX;OAAU;OACV;OAAS;OAAS;MACpB,EACF,GACA,EACE,OAAO;OACL;OAAW;OACX;MACF,EACF,CACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,UAAU;OACR;OACA;OACA;MACF;KACF;IACF;GACF;EACF;;;;EC5aA,SAAS,KAAK,MAAM;GAClB,MAAM,QAAQ,KAAK;GAGnB,MAAM,iBAAiB;GACvB,MAAM,sBAAsB,MAAM,OAAO,gBAAgB,KAAK,mBAAmB;GACjF,MAAM,WAAW,MAAM,OAAO,gBAAgB,KAAK,QAAQ;GAE3D,MAAM,kBAAkB;IACtB,OAAO;IACP,WAAW;IACX,OAAO,MAAM,OACX,MACA,yCACA,UACA,MAAM,UAAU,OAAO,CAAC;GAC5B;GAEA,MAAM,WAAW;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,WAAW;IACf;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,WAAW;IAEf;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,QAAQ;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,IAAK;IAChB,UAAU;KACR,UAAU,KAAK,WAAW;KAC1B,MAAM;KACN,SAAS;KACT,SAAS;KACT,UAAU;IACZ;IACA,SAAS;IACT,UAAU;KACR,KAAK;KACL,KAAK,QAAQ,QAAQ,QAAQ,EAAE,UAAU,CAAE,MAAO,EAAE,CAAC;KACrD,KAAK,QAAQ,KAAK,mBAAmB;MACnC,OAAO;MACP,SAAS;KACX,CAAC;KACD;MACE,OAAO;MAEP,OAAO;KACT;KACA;MACE,OAAO;MACP,UAAU,CACR,EAAE,OAAO,2BAA2B,GACpC;OACE,OAAO;OACP,KAAK;OACL,UAAU,CACR;QACE,OAAO;QACP,OAAO;OACT,CACF;MACF,CACF;KACF;KACA;MACE,OAAO;MACP,UAAU;OACR,EAAE,OAAO,4DAAgC;OACzC,EAAE,OAAO,6DAAiC;OAC1C,EAAE,OAAO,mEAAuC;OAChD,EAAE,OAAO,8FACgB;MAC3B;MACA,WAAW;KACb;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;MACP,OAAO;MACP,KAAK;MACL,UAAU,CACR;OACE,OAAO;OACP,OAAO;OACP,KAAK;OACL,UAAU,CACR,KAAK,gBACP;MACF,CACF;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KAEA;MACE,OAAO;OACL;OACA;OACA;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO,KAAK,WAAW;MACvB,UAAU;OACR,SAAS;OACT,UAAU;OACV,MAAM;MACR;KACF;KACA;MACE,OAAO;MACP,OAAO;KACT;KACA;IACF;GACF;EACF;;;EC3TA,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GACnB,MAAM,eAAe,KAAK,QAAQ,MAAM,GAAG;GAC3C,MAAM,SAAS;IACb,OAAO;IACP,UAAU,CACR;KACE,OAAO;KACP,KAAK;KACL,UAAU,CAAE,EAAE,OAAO,KAAK,CAAE;IAC9B,CACF;GACF;GACA,MAAM,oBAAoB;IACxB,OAAO;IACP,KAAK;IACL,UAAU,CAAE,EAAE,OAAO,KAAK,CAAE;GAC9B;GAEA,MAAM,WAAW;IACf;IACA;IAGA;GACF;GAEA,MAAM,mBAAmB;IACvB;IACA;IACA;IACA;GACF;GAEA,MAAM,QAAQ;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,qBAAqB;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAGA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAKA,MAAM,qBAAqB;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAGA,MAAM,0BAA0B;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAIA,MAAM,SAAS;IACb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,YAAY;GAElB,MAAM,WAAW,CACf,GAAG,gBACH,GAAG,kBACL,CAAC,CAAC,QAAQ,YAAY;IACpB,OAAO,CAAC,mBAAmB,SAAS,OAAO;GAC7C,CAAC;GAED,MAAM,WAAW;IACf,OAAO;IACP,OAAO;GACT;GAEA,MAAM,WAAW;IACf,OAAO;IACP,OAAO;IACP,WAAW;GACb;GAEA,MAAM,gBAAgB;IACpB,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO;IAC7D,WAAW;IACX,UAAU,EAAE,UAAU,UAAU;GAClC;GAMA,SAAS,aAAa,MAAM;IAC1B,OAAO,MAAM,OACX,MACA,MAAM,OAAO,GAAG,KAAK,KAAK,OAAO;KAC/B,OAAO,GAAG,QAAQ,OAAO,MAAM;IACjC,CAAC,CAAC,GACF,IACF;GACF;GAEA,MAAM,sBAAsB;IAC1B,OAAO;IACP,OAAO,aAAa,MAAM;IAC1B,WAAW;GACb;GAGA,SAAS,gBAAgB,MAAM,EAC7B,YAAY,SACV,CAAC,GAAG;IACN,MAAM,YAAY;IAClB,aAAa,cAAc,CAAC;IAC5B,OAAO,KAAK,KAAK,SAAS;KACxB,IAAI,KAAK,MAAM,QAAQ,KAAK,WAAW,SAAS,IAAI,GAClD,OAAO;UACF,IAAI,UAAU,IAAI,GACvB,OAAO,GAAG,KAAK;UAEf,OAAO;IAEX,CAAC;GACH;GAEA,OAAO;IACL,MAAM;IACN,kBAAkB;IAElB,SAAS;IACT,UAAU;KACR,UAAU;KACV,SACE,gBAAgB,UAAU,EAAE,OAAO,MAAM,EAAE,SAAS,EAAE,CAAC;KACzD,SAAS;KACT,MAAM;KACN,UAAU;IACZ;IACA,UAAU;KACR;MACE,OAAO;MACP,OAAO,aAAa,gBAAgB;KACtC;KACA;KACA;KACA;KACA;KACA;KACA,KAAK;KACL,KAAK;KACL;KACA;IACF;GACF;EACF;;;EClrBA,MAAM,WAAW;EAEjB,MAAM,WAAW;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAIA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;EACF;EACA,MAAM,WAAW;GACf;GACA;GACA;GACA;GACA;GACA;EACF;EAGA,MAAM,QAAQ;GAEZ;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GAEA;EACF;EAEA,MAAM,cAAc;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,mBAAmB;GACvB;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,qBAAqB;GACzB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,YAAY,CAAC,CAAC,CAAC,OACnB,kBACA,OACA,WACF;;EAWA,SAAS,WAAW,MAAM;GACxB,MAAM,QAAQ,KAAK;;;;;;;;GAQnB,MAAM,iBAAiB,OAAO,EAAE,YAAY;IAC1C,MAAM,MAAM,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC;IAEnC,OADY,MAAM,MAAM,QAAQ,KAAK,KAC5B,MAAM;GACjB;GAEA,MAAM,aAAa;GACnB,MAAM,WAAW;IACf,OAAO;IACP,KAAK;GACP;GAEA,MAAM,mBAAmB;GACzB,MAAM,UAAU;IACd,OAAO;IACP,KAAK;;;;;IAKL,oBAAoB,OAAO,aAAa;KACtC,MAAM,kBAAkB,MAAM,EAAE,CAAC,SAAS,MAAM;KAChD,MAAM,WAAW,MAAM,MAAM;KAC7B,IAIE,aAAa,OAGb,aAAa,KACX;MACF,SAAS,YAAY;MACrB;KACF;KAIA,IAAI,aAAa,KAGX;UAAA,CAAC,cAAc,OAAO,EAAE,OAAO,gBAAgB,CAAC,G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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["styles","useSyncExternalStore","basenameOf","formatSize","memo","styles","useRef","useState","useCallback","HighlightJS","IDENT_RE","KEYWORDS","LITERALS","TYPES","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","hljs","javascript","escapeHtml","mdurl.parse","punycode","mdurl.encode","mdurl.format","mdurl.decode","RAW_PREFIX","MarkdownIt","useState","useRef","useCallback","useMemo","styles","styleInstalled","installStyle","onDocumentClick"],"sources":["../src/client/fileIcons.tsx","../src/client/store.ts","../src/client/composer.ts","../src/client/FileExplorer.tsx","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/lib/core.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/core.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/bash.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/cpp.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/csharp.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/css.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/go.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/ini.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/java.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/javascript.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/json.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/markdown.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/python.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/rust.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/sql.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/typescript.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/xml.js","../node_modules/.pnpm/highlight.js@11.12.0/node_modules/highlight.js/es/languages/yaml.js","../src/client/highlight.ts","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/decode.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/encode.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/format.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/lib/parse.mjs","../node_modules/.pnpm/mdurl@2.1.0/node_modules/mdurl/index.mjs","../node_modules/.pnpm/uc.micro@3.0.0/node_modules/uc.micro/build/index.mjs","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js","../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js","../node_modules/.pnpm/linkify-it@6.1.0/node_modules/linkify-it/build/index.mjs","../node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.js","../node_modules/.pnpm/markdown-it@15.0.0/node_modules/markdown-it/dist/markdown-it.mjs","../src/client/markdown.ts","../src/client/FilePreview.tsx","../src/client/locales.ts","../src/client/mentions.ts","../src/client/composerMentions.ts","../src/client/index.ts"],"sourcesContent":["/**\n * File-type icons for the explorer tree rows and the preview tabs.\n *\n * Code/config files render as small colored badges with an extension label\n * (VS Code \"Minimal\"-theme style); media, archives and installer files use\n * emoji; anything unknown falls back to a generic document glyph. No icon\n * assets are shipped — badges are pure CSS (per-language colors) and emoji\n * come from the platform font.\n */\nimport styles from './files.module.css'\n\ninterface BadgeSpec {\n label: string\n bg: string\n fg: string\n}\n\n/** lowercase extension (no dot) → badge colors. */\nconst BADGES: Record<string, BadgeSpec> = {\n // code\n ts: { label: 'TS', bg: '#3178c6', fg: '#ffffff' },\n mts: { label: 'TS', bg: '#3178c6', fg: '#ffffff' },\n cts: { label: 'TS', bg: '#3178c6', fg: '#ffffff' },\n tsx: { label: 'TSX', bg: '#61dafb', fg: '#06283d' },\n js: { label: 'JS', bg: '#f7df1e', fg: '#1e1e1e' },\n mjs: { label: 'JS', bg: '#f7df1e', fg: '#1e1e1e' },\n cjs: { label: 'JS', bg: '#f7df1e', fg: '#1e1e1e' },\n jsx: { label: 'JSX', bg: '#61dafb', fg: '#06283d' },\n json: { label: '{}', bg: '#cbcb41', fg: '#1e1e1e' },\n jsonc: { label: '{}', bg: '#cbcb41', fg: '#1e1e1e' },\n html: { label: 'HTML', bg: '#e44d26', fg: '#ffffff' },\n htm: { label: 'HTML', bg: '#e44d26', fg: '#ffffff' },\n css: { label: 'CSS', bg: '#2965f1', fg: '#ffffff' },\n scss: { label: 'SCSS', bg: '#cc6699', fg: '#ffffff' },\n less: { label: 'LESS', bg: '#2a4d80', fg: '#ffffff' },\n md: { label: 'MD', bg: '#519aba', fg: '#ffffff' },\n markdown: { label: 'MD', bg: '#519aba', fg: '#ffffff' },\n py: { label: 'PY', bg: '#3572a5', fg: '#ffffff' },\n pyw: { label: 'PY', bg: '#3572a5', fg: '#ffffff' },\n go: { label: 'GO', bg: '#00add8', fg: '#06283d' },\n rs: { label: 'RS', bg: '#dea584', fg: '#1e1e1e' },\n java: { label: 'JAVA', bg: '#b07219', fg: '#ffffff' },\n c: { label: 'C', bg: '#6e6e6e', fg: '#ffffff' },\n h: { label: 'H', bg: '#6e6e6e', fg: '#ffffff' },\n cpp: { label: 'CPP', bg: '#f34b7d', fg: '#ffffff' },\n cc: { label: 'CPP', bg: '#f34b7d', fg: '#ffffff' },\n cxx: { label: 'CPP', bg: '#f34b7d', fg: '#ffffff' },\n hpp: { label: 'HPP', bg: '#f34b7d', fg: '#ffffff' },\n hxx: { label: 'HPP', bg: '#f34b7d', fg: '#ffffff' },\n cs: { label: 'CS', bg: '#178600', fg: '#ffffff' },\n sh: { label: 'SH', bg: '#89e051', fg: '#1e1e1e' },\n bash: { label: 'SH', bg: '#89e051', fg: '#1e1e1e' },\n zsh: { label: 'SH', bg: '#89e051', fg: '#1e1e1e' },\n ps1: { label: 'PS1', bg: '#012456', fg: '#ffffff' },\n psm1: { label: 'PS1', bg: '#012456', fg: '#ffffff' },\n psd1: { label: 'PS1', bg: '#012456', fg: '#ffffff' },\n bat: { label: 'BAT', bg: '#6e6e6e', fg: '#ffffff' },\n cmd: { label: 'BAT', bg: '#6e6e6e', fg: '#ffffff' },\n sql: { label: 'SQL', bg: '#e38c00', fg: '#ffffff' },\n yml: { label: 'YML', bg: '#cb171e', fg: '#ffffff' },\n yaml: { label: 'YML', bg: '#cb171e', fg: '#ffffff' },\n toml: { label: 'TOML', bg: '#8b8b8b', fg: '#ffffff' },\n ini: { label: 'INI', bg: '#8b8b8b', fg: '#ffffff' },\n conf: { label: 'INI', bg: '#8b8b8b', fg: '#ffffff' },\n cfg: { label: 'INI', bg: '#8b8b8b', fg: '#ffffff' },\n xml: { label: 'XML', bg: '#a074c4', fg: '#ffffff' },\n xsl: { label: 'XML', bg: '#a074c4', fg: '#ffffff' },\n svg: { label: 'SVG', bg: '#e37933', fg: '#ffffff' },\n vue: { label: 'VUE', bg: '#41b883', fg: '#06283d' },\n lock: { label: 'LOCK', bg: '#9d9d9d', fg: '#1e1e1e' },\n env: { label: 'ENV', bg: '#f05033', fg: '#ffffff' },\n gitignore: { label: 'GIT', bg: '#f05033', fg: '#ffffff' },\n gitattributes: { label: 'GIT', bg: '#f05033', fg: '#ffffff' },\n gitmodules: { label: 'GIT', bg: '#f05033', fg: '#ffffff' },\n editorconfig: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n npmrc: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n pnpmrc: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n yarnrc: { label: 'CFG', bg: '#8b8b8b', fg: '#ffffff' },\n mk: { label: 'MK', bg: '#6d8086', fg: '#ffffff' },\n makefile: { label: 'MK', bg: '#6d8086', fg: '#ffffff' },\n txt: { label: 'TXT', bg: '#9d9d9d', fg: '#ffffff' },\n log: { label: 'TXT', bg: '#9d9d9d', fg: '#ffffff' },\n pdf: { label: 'PDF', bg: '#e74c3c', fg: '#ffffff' },\n}\n\n/** lowercase extension (no dot) → emoji glyph. */\nconst EMOJI: Record<string, string> = {\n png: '🖼️', jpg: '🖼️', jpeg: '🖼️', gif: '🖼️', webp: '🖼️', bmp: '🖼️', ico: '🖼️', avif: '🖼️', jfif: '🖼️', tif: '🖼️', tiff: '🖼️',\n mp3: '🎵', wav: '🎵', flac: '🎵', ogg: '🎵', oga: '🎵', m4a: '🎵', aac: '🎵', wma: '🎵', opus: '🎵', mid: '🎵',\n mp4: '🎬', mkv: '🎬', avi: '🎬', mov: '🎬', webm: '🎬', flv: '🎬', wmv: '🎬', m4v: '🎬', mpg: '🎬', mpeg: '🎬',\n zip: '🗜️', rar: '🗜️', '7z': '🗜️', tar: '🗜️', gz: '🗜️', bz2: '🗜️', xz: '🗜️', tgz: '🗜️', tbz2: '🗜️', zst: '🗜️',\n doc: '📘', docx: '📘', odt: '📘', rtf: '📘',\n xls: '📗', xlsx: '📗', ods: '📗', csv: '📗',\n ppt: '📙', pptx: '📙', odp: '📙',\n epub: '📖', mobi: '📖',\n exe: '📦', msi: '📦', dmg: '📦', app: '📦', deb: '📦', rpm: '📦', apk: '📦', iso: '📦',\n}\n\n/** Well-known extension-less names (lowercase) → emoji. */\nconst NAMED_EMOJI: Record<string, string> = {\n dockerfile: '🐳',\n}\n\nexport type FileIconSpec =\n | { kind: 'badge'; label: string; bg: string; fg: string }\n | { kind: 'emoji'; char: string }\n\n/** Resolve a file name to its icon spec (badge colors or an emoji glyph). */\nexport function fileIconFor(name: string): FileIconSpec {\n const lower = name.trim().toLowerCase()\n if (lower === '') return { kind: 'emoji', char: '📄' }\n\n const namedEmoji = NAMED_EMOJI[lower]\n if (namedEmoji !== undefined) return { kind: 'emoji', char: namedEmoji }\n\n // Dotfiles use the dotted remainder as the key (`.gitignore` → gitignore,\n // `.env.local` → env), regular files use the last extension segment.\n let key: string\n if (lower.startsWith('.')) {\n const rest = lower.slice(1)\n key = rest.startsWith('env.') ? 'env' : rest\n } else {\n const dot = lower.lastIndexOf('.')\n key = dot > 0 ? lower.slice(dot + 1) : lower\n }\n\n const badge = BADGES[key]\n if (badge !== undefined) return { kind: 'badge', label: badge.label, bg: badge.bg, fg: badge.fg }\n const emoji = EMOJI[key]\n if (emoji !== undefined) return { kind: 'emoji', char: emoji }\n return { kind: 'emoji', char: '📄' }\n}\n\n/** Render a file's icon: a colored extension badge or an emoji glyph. */\nexport function FileIcon({ name }: { name: string }) {\n const icon = fileIconFor(name)\n if (icon.kind === 'emoji') return <>{icon.char}</>\n const className = icon.label.length >= 4 ? `${styles.fileBadge} ${styles.fileBadgeLong}` : styles.fileBadge\n return (\n <span className={className} style={{ background: icon.bg, color: icon.fg }}>\n {icon.label}\n </span>\n )\n}\n","/**\n * Module-local store shared by the explorer tree (FileExplorer) and the split\n * preview (FilePreview). Tabs, active file, and collapsed state are kept\n * PER WORKSPACE (keyed by the session cwd): switching workspaces swaps to that\n * workspace's own set, and coming back restores it. Both components live in\n * the same client bundle, so this store is a single instance across the two\n * slot registrations.\n */\nimport { useSyncExternalStore } from 'react'\n\nexport type FeTheme = 'light' | 'dark'\n\n// ---------------------------------------------------------------------------\n// Undo history (Copy / Move / Rename / New / Delete)\n//\n// One stack PER WORKSPACE, mirroring the tabs: undoing in workspace B never\n// touches workspace A's file operations. Delete is reversible by design —\n// deleting RENAMES the item into a hidden `.dsh-trash` folder next to it, and\n// undo renames it back (no bytes are ever copied). When a stack overflows the\n// oldest entry is evicted; the caller permanently purges evicted delete\n// entries' trash items so the trash folder stays bounded.\n// ---------------------------------------------------------------------------\n\n/** How many operations each workspace remembers (older ones are dropped). */\nexport const UNDO_LIMIT = 30\n\nexport type UndoEntry =\n /** copy/paste (duplicate) — undo removes the copy. */\n | { kind: 'copy'; label: string; from: string; to: string; parent: string }\n /** cut-paste or drag-move — undo renames the item back. */\n | { kind: 'move'; label: string; from: string; to: string; parent: string }\n /** rename — undo renames back. */\n | { kind: 'rename'; label: string; from: string; to: string; parent: string }\n /** new file / new folder — undo trashes it. */\n | { kind: 'create'; label: string; path: string; parent: string }\n /** delete (moved into .dsh-trash) — undo renames it back. */\n | { kind: 'delete'; label: string; path: string; trash: string; parent: string }\n\ninterface PerWorkspace {\n tabs: string[]\n active: string | undefined\n collapsed: boolean\n undo: UndoEntry[]\n}\n\nexport interface TabsStateView {\n tabs: string[]\n active: string | undefined\n collapsed: boolean\n /** Display-only soft wrap for the editor (never touches the file content). */\n wrap: boolean\n theme: FeTheme\n cwd: string | undefined\n /** Undoable file operations, most recent last. */\n undo: UndoEntry[]\n}\n\nconst EMPTY_TABS: string[] = []\nconst EMPTY_UNDO: UndoEntry[] = []\nconst EMPTY_WORKSPACE: PerWorkspace = { tabs: EMPTY_TABS, active: undefined, collapsed: false, undo: EMPTY_UNDO }\n\nconst WRAP_KEY = 'dsh-plugin-workbench:wrap'\n\n/** Read the persisted wrap preference; defaults to soft wrap ON. */\nfunction storedWrap(): boolean {\n try {\n if (typeof window === 'undefined') return true\n const stored = window.localStorage.getItem(WRAP_KEY)\n return stored === null ? true : stored === '1'\n } catch {\n return true\n }\n}\n\ninterface StoreState {\n currentCwd: string | undefined\n workspaces: Record<string, PerWorkspace>\n theme: FeTheme\n wrap: boolean\n}\n\nconst initialWrap = storedWrap()\nlet state: StoreState = { currentCwd: undefined, workspaces: {}, theme: 'dark', wrap: initialWrap }\nlet view: TabsStateView = { tabs: EMPTY_TABS, active: undefined, collapsed: false, wrap: initialWrap, theme: 'dark', cwd: undefined, undo: EMPTY_UNDO }\nconst listeners = new Set<() => void>()\n\nfunction workspaceOf(cwd: string | undefined): PerWorkspace {\n return cwd !== undefined ? state.workspaces[cwd] ?? EMPTY_WORKSPACE : EMPTY_WORKSPACE\n}\n\nexport function getTabsState(): TabsStateView {\n return view\n}\n\nexport function subscribeTabs(listener: () => void): () => void {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport function useTabsState(): TabsStateView {\n return useSyncExternalStore(subscribeTabs, getTabsState)\n}\n\nfunction commit(next: StoreState): void {\n state = next\n const ws = workspaceOf(state.currentCwd)\n const nextView: TabsStateView = {\n tabs: ws.tabs,\n active: ws.active,\n collapsed: ws.collapsed,\n wrap: state.wrap,\n theme: state.theme,\n cwd: state.currentCwd,\n undo: ws.undo,\n }\n if (\n nextView.tabs === view.tabs\n && nextView.active === view.active\n && nextView.collapsed === view.collapsed\n && nextView.wrap === view.wrap\n && nextView.theme === view.theme\n && nextView.cwd === view.cwd\n && nextView.undo === view.undo\n ) return\n view = nextView\n for (const listener of [...listeners]) listener()\n}\n\n/** Update the current workspace's record; no-op without a current workspace. */\nfunction updateCurrent(updater: (ws: PerWorkspace) => PerWorkspace): void {\n const cwd = state.currentCwd\n if (cwd === undefined) return\n const prev = state.workspaces[cwd] ?? EMPTY_WORKSPACE\n const next = updater(prev)\n if (next === prev) return\n commit({ ...state, workspaces: { ...state.workspaces, [cwd]: next } })\n}\n\n/** Point the store at a workspace (called when the session's cwd changes). */\nexport function setCwd(cwd: string | undefined): void {\n if (state.currentCwd === cwd) return\n commit({ ...state, currentCwd: cwd })\n}\n\n/** Open a file in the current workspace's tabs (or activate it); pops the pane out. */\nexport function openFile(path: string): void {\n updateCurrent((ws) => {\n if (ws.tabs.includes(path)) {\n if (ws.active === path && !ws.collapsed) return ws\n return { ...ws, active: path, collapsed: false }\n }\n return { ...ws, tabs: [...ws.tabs, path], active: path, collapsed: false }\n })\n}\n\n/** Close one tab; if it was active, activate its neighbor. */\nexport function closeFile(path: string): void {\n updateCurrent((ws) => {\n const index = ws.tabs.indexOf(path)\n if (index < 0) return ws\n const tabs = ws.tabs.filter((t) => t !== path)\n let active = ws.active\n if (active === path) active = tabs[Math.min(index, tabs.length - 1)]\n return { ...ws, tabs, active }\n })\n}\n\n/** Switch the active tab without re-reading. */\nexport function activateFile(path: string): void {\n updateCurrent((ws) => (ws.active === path || !ws.tabs.includes(path) ? ws : { ...ws, active: path }))\n}\n\n/** Point any open tab at a new path after a rename (the disk path changed). */\nexport function retargetFile(oldPath: string, newPath: string): void {\n updateCurrent((ws) => {\n if (!ws.tabs.includes(oldPath)) return ws\n const tabs = ws.tabs.map((t) => (t === oldPath ? newPath : t))\n return { ...ws, tabs, active: ws.active === oldPath ? newPath : ws.active }\n })\n}\n\n/** Close every open tab at or under a path (used after deleting it). */\nexport function closeFilesUnder(path: string): void {\n updateCurrent((ws) => {\n const sep = path.includes('\\\\') ? '\\\\' : '/'\n const prefix = path.endsWith('\\\\') || path.endsWith('/') ? path : path + sep\n const kept = ws.tabs.filter((t) => t !== path && !t.startsWith(prefix))\n if (kept.length === ws.tabs.length) return ws\n let active = ws.active\n if (active !== undefined && (active === path || active.startsWith(prefix))) {\n const index = ws.tabs.indexOf(active)\n active = kept[Math.min(index, kept.length - 1)]\n }\n return { ...ws, tabs: kept, active }\n })\n}\n\n/** Move a tab before another tab (drag-to-reorder). */\nexport function moveTab(dragged: string, target: string): void {\n updateCurrent((ws) => {\n if (dragged === target) return ws\n const from = ws.tabs.indexOf(dragged)\n const to = ws.tabs.indexOf(target)\n if (from < 0 || to < 0) return ws\n const tabs = [...ws.tabs]\n tabs.splice(from, 1)\n tabs.splice(to, 0, dragged)\n return { ...ws, tabs }\n })\n}\n\n/** Tuck the preview pane away, keeping all open tabs and their content. */\nexport function collapsePreview(): void {\n updateCurrent((ws) => (ws.collapsed ? ws : { ...ws, collapsed: true }))\n}\n\n/** Pop the preview pane back out, restoring the tabs as they were. */\nexport function expandPreview(): void {\n updateCurrent((ws) => (ws.collapsed ? { ...ws, collapsed: false } : ws))\n}\n\n/** Toggle the file-browser light/dark theme (applies to every workspace). */\nexport function toggleTheme(): void {\n commit({ ...state, theme: state.theme === 'dark' ? 'light' : 'dark' })\n}\n\n/** Toggle display-only soft wrap for the editor (global, persisted). */\nexport function toggleWrap(): void {\n const wrap = !state.wrap\n try {\n window.localStorage.setItem(WRAP_KEY, wrap ? '1' : '0')\n } catch {\n // storage unavailable — the preference just won't persist across reloads\n }\n commit({ ...state, wrap })\n}\n\n// ---------------------------------------------------------------------------\n// File clipboard (Copy / Cut + Paste)\n//\n// Lives OUTSIDE the per-workspace records on purpose: copying in workspace A\n// and pasting into workspace B is the whole point, so the clipboard survives\n// workspace switches. Cut keeps the sources alive until a paste moves them\n// (or Escape downgrades the cut back to a copy), mirroring the OS explorer.\n// ---------------------------------------------------------------------------\n\nexport type ClipboardMode = 'copy' | 'cut'\n\nexport interface ClipboardItem {\n path: string\n name: string\n kind: 'file' | 'dir' | 'other'\n}\n\nexport interface ClipboardView {\n items: ClipboardItem[]\n mode: ClipboardMode\n}\n\nconst EMPTY_CLIPBOARD: ClipboardView = { items: [], mode: 'copy' }\n\nlet clipboard: ClipboardView = EMPTY_CLIPBOARD\nconst clipboardListeners = new Set<() => void>()\n\nexport function getClipboard(): ClipboardView {\n return clipboard\n}\n\nexport function subscribeClipboard(listener: () => void): () => void {\n clipboardListeners.add(listener)\n return () => {\n clipboardListeners.delete(listener)\n }\n}\n\n/** Clipboard contents shared across every workspace (Explorer semantics). */\nexport function useClipboard(): ClipboardView {\n return useSyncExternalStore(subscribeClipboard, getClipboard)\n}\n\nfunction commitClipboard(next: ClipboardView): void {\n if (next === clipboard) return\n clipboard = next\n for (const listener of [...clipboardListeners]) listener()\n}\n\n/** Put entries on the clipboard, replacing whatever was there. */\nexport function copyToClipboard(items: ClipboardItem[], mode: ClipboardMode): void {\n if (items.length === 0) return\n commitClipboard({ items, mode })\n}\n\n/** Drop the clipboard contents (after a cut-paste, or via the clear button). */\nexport function clearClipboard(): void {\n if (clipboard === EMPTY_CLIPBOARD) return\n commitClipboard(EMPTY_CLIPBOARD)\n}\n\n/** Escape in the source workspace: cancel an armed cut without dropping the items. */\nexport function cancelCut(): void {\n if (clipboard.mode === 'cut') commitClipboard({ ...clipboard, mode: 'copy' })\n}\n\n// ---------------------------------------------------------------------------\n// Undo stack (see the types at the top of this file)\n// ---------------------------------------------------------------------------\n\n/**\n * Append an operation to the current workspace's undo stack, capped at\n * UNDO_LIMIT entries. Returns the evicted oldest entry (the caller purges its\n * trash item when it was a delete), or undefined when nothing was evicted.\n */\nexport function pushUndo(entry: UndoEntry): UndoEntry | undefined {\n const cwd = state.currentCwd\n if (cwd === undefined) return undefined\n const prev = state.workspaces[cwd] ?? EMPTY_WORKSPACE\n const undo = [...prev.undo, entry]\n let evicted: UndoEntry | undefined\n if (undo.length > UNDO_LIMIT) evicted = undo.shift()\n commit({ ...state, workspaces: { ...state.workspaces, [cwd]: { ...prev, undo } } })\n return evicted\n}\n\n/** Remove and return the current workspace's most recent operation (or undefined). */\nexport function popUndo(): UndoEntry | undefined {\n const cwd = state.currentCwd\n if (cwd === undefined) return undefined\n const prev = state.workspaces[cwd] ?? EMPTY_WORKSPACE\n if (prev.undo.length === 0) return undefined\n const undo = [...prev.undo]\n const entry = undo.pop()\n commit({ ...state, workspaces: { ...state.workspaces, [cwd]: { ...prev, undo } } })\n return entry\n}\n","/**\n * Composer integration for the workbench file column.\n *\n * Three gestures land text in the chat composer without touching the core:\n *\n * 1. Drag & drop — dragging one or more tree rows and dropping ANYWHERE\n * outside the file column (the chat, the composer, the message list)\n * inserts the dragged paths into the composer as `@.\\` mentions (falling\n * back to the absolute path when the file sits outside the workspace).\n * Dropping INSIDE the file column still performs the tree's own move\n * operation — the tree's drop handler runs first and stops propagation, so\n * this document-level listener never sees those drops.\n *\n * 2. Context-menu \"@引用\" — inserts `@.\\<relative-workspace-path>` at the\n * composer caret (the `.\\` prefix marks the path as workspace-relative; a\n * path containing whitespace uses the quoted `@\"\\.\\path with space\"` form).\n *\n * 3. @-mention resolution — turns a mention token (with or without the `.\\`\n * prefix, quoted or plain) into an absolute path against the session cwd;\n * used by the message linkifier and the composer overlay to open the file\n * in the workbench preview.\n *\n * The composer is a controlled React textarea, so the value is updated\n * through the native `value` setter + a bubbling `input` event (the standard\n * trick that makes React's onChange see the change), and the caret is\n * restored on the next frame because the React re-render may reset it.\n */\nimport { getTabsState, openFile } from './store'\n\n/** Custom dataTransfer type carrying the dragged workspace paths (JSON array). */\nexport const DRAG_TYPE = 'application/x-dsh-workbench-files'\n\n/** One-time install guard (the client bundle re-applies on HMR). */\nlet dropsInstalled = false\n\n/** Start the document-level drop listener (idempotent). */\nexport function installComposerDrops(): void {\n if (dropsInstalled || typeof document === 'undefined') return\n dropsInstalled = true\n // Bubble phase: the tree's own drop handlers (React, attached at the root\n // container) run first and stop the event, so drops inside the file column\n // never reach this listener.\n document.addEventListener('drop', onDocumentDrop)\n}\n\nfunction onDocumentDrop(e: DragEvent): void {\n const dt = e.dataTransfer\n if (dt === null || !dt.types.includes(DRAG_TYPE)) return\n const paths = readDraggedPaths(dt)\n if (paths.length === 0) return\n if (!insertIntoComposer(paths.map(dragMentionText).join('\\n'))) return\n e.preventDefault()\n e.stopPropagation()\n}\n\n/**\n * One dropped path as chat text: an `@.\\` mention when it lives under the\n * workspace, the absolute path otherwise (or when no cwd is known yet).\n */\nfunction dragMentionText(path: string): string {\n const { cwd } = getTabsState()\n if (cwd === undefined) return path\n const rel = relPathOf(path, cwd)\n if (rel.length === 0 || rel === path) return path\n return composerMention(rel)\n}\n\n/** Read the JSON paths from the custom type; falls back to raw text. */\nexport function readDraggedPaths(dt: DataTransfer | null): string[] {\n if (dt === null) return []\n let raw = ''\n try {\n raw = dt.getData(DRAG_TYPE)\n } catch {\n return []\n }\n try {\n const parsed: unknown = JSON.parse(raw)\n if (Array.isArray(parsed) && parsed.every((p) => typeof p === 'string')) return parsed as string[]\n } catch {\n // Not JSON — fall through to the raw-text fallback.\n }\n return raw.trim().length > 0 ? [raw] : []\n}\n\n/** The visible composer textarea, or null when none is usable. */\nfunction composerTextarea(): HTMLTextAreaElement | null {\n if (typeof document === 'undefined') return null\n const seat = document.querySelector('[data-composer-seat]')\n if (seat === null) return null\n const input = seat.querySelector('textarea')\n if (!(input instanceof HTMLTextAreaElement)) return null\n // A disabled input has no usable draft; a read-only one is either the hero\n // workspace picker or a transient submitting state — skip both.\n if (input.disabled || input.readOnly) return null\n return input\n}\n\n/**\n * Insert `text` into the composer. If the composer textarea has focus, the\n * text goes at the caret; otherwise it is appended to the draft. Returns\n * false when no usable composer is present.\n */\nexport function insertIntoComposer(text: string): boolean {\n const textarea = composerTextarea()\n if (textarea === null) return false\n const value = textarea.value\n const atCaret = document.activeElement === textarea\n const start = atCaret ? textarea.selectionStart : value.length\n const end = atCaret ? textarea.selectionEnd : value.length\n const next = value.slice(0, start) + text + value.slice(end)\n const setter = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set\n if (setter !== undefined) setter.call(textarea, next)\n else textarea.value = next\n textarea.dispatchEvent(new Event('input', { bubbles: true }))\n // The React re-render may reset the selection, so restore on the next frame.\n const caret = start + text.length\n requestAnimationFrame(() => {\n try {\n textarea.setSelectionRange(caret, caret)\n } catch {\n // Selection state unavailable — the text is in the draft either way.\n }\n })\n return true\n}\n\n/** Relative workspace path of `path` under `cwd` ('' when it IS the cwd). */\nexport function relPathOf(path: string, cwd: string | undefined): string {\n if (cwd === undefined || cwd.length === 0) return path\n const sep = cwd.includes('\\\\') ? '\\\\' : '/'\n const prefix = cwd.endsWith('\\\\') || cwd.endsWith('/') ? cwd : cwd + sep\n const lowerPath = path.toLowerCase()\n if (lowerPath.startsWith(prefix.toLowerCase())) return path.slice(prefix.length)\n if (lowerPath === cwd.toLowerCase()) return ''\n return path\n}\n\n/**\n * Format a workspace-relative path as an `@` mention for the composer: the\n * `.\\` (or `./`) prefix marks the path as relative to the workspace root, and\n * a path containing whitespace uses the quoted `@\"...\"` form so it stays one\n * token in the draft (and one link in the rendered message).\n */\nexport function composerMention(rel: string): string {\n const sep = rel.includes('\\\\') ? '\\\\' : '/'\n const raw = `@.${sep}${rel}`\n if (/[\\s\"]/.test(raw)) return `@\"${raw}\"`\n return raw\n}\n\n/** Strip quote wrapping and a leading `.\\` / `./` workspace marker. */\nfunction normalizeMention(mention: string): string {\n let inner = mention\n if (inner.startsWith('\"') && inner.endsWith('\"') && inner.length >= 2) inner = inner.slice(1, -1)\n if (inner.startsWith('.\\\\') || inner.startsWith('./')) inner = inner.slice(2)\n return inner\n}\n\n/**\n * Resolve an @-mention path (workspace-relative with or without the `.\\`\n * marker, or absolute) against the current workspace cwd; returns the absolute\n * OS path, or undefined when the mention cannot be resolved (no cwd and the\n * path is not absolute).\n */\nexport function resolveMentionPath(mention: string): string | undefined {\n const inner = normalizeMention(mention)\n if (inner.length === 0) return undefined\n const absolute = /^[A-Za-z]:[\\\\/]/.test(inner) || inner.startsWith('/') || inner.startsWith('\\\\')\n const { cwd } = getTabsState()\n if (absolute) return inner\n if (cwd === undefined) return undefined\n const sep = cwd.includes('\\\\') ? '\\\\' : '/'\n return cwd.endsWith('\\\\') || cwd.endsWith('/') ? cwd + inner : cwd + sep + inner\n}\n\n/** Open an @-mention's file in the workbench preview (used by the linkifier). */\nexport function openMention(mention: string): void {\n const abs = resolveMentionPath(mention)\n if (abs === undefined) return\n openFile(abs)\n}\n","/**\n * File tree column, registered into the `explorer` slot declared by the\n * (patched) ui-layout AppFrame. File selection is pushed into the shared\n * selection store so the `explorer.preview` slot can render the split view.\n */\nimport { memo, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport type { DragEvent as ReactDragEvent, KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent } from 'react'\nimport styles from './files.module.css'\nimport { FileIcon } from './fileIcons'\nimport type { FilesKey } from './locales'\nimport { cancelCut, clearClipboard, closeFilesUnder, copyToClipboard, expandPreview, openFile, popUndo, pushUndo, retargetFile, setCwd, toggleTheme, useClipboard, useTabsState } from './store'\nimport type { ClipboardItem, ClipboardMode, UndoEntry } from './store'\nimport { DRAG_TYPE, composerMention, insertIntoComposer, relPathOf } from './composer'\n\nexport interface FsListEntry {\n name: string\n path: string\n kind: 'dir' | 'file' | 'other'\n size?: number\n}\n\nexport interface FsListResult {\n root: string\n entries: FsListEntry[]\n}\n\nexport interface FsReadResult {\n path: string\n content: string\n size: number\n binary: boolean\n truncated: boolean\n}\n\n/** Result of a context-menu mutation (create/rename/delete). */\nexport interface FsMutationResult {\n path: string\n /** Copy-only: `true` when the destination existed and the copy was skipped (client may ask about overwrite). */\n exists?: boolean\n}\n\ninterface SessionSummary {\n id: string\n cwd?: string\n}\n\ninterface SessionListState {\n current?: string\n byId: Record<string, SessionSummary>\n}\n\nexport interface FileExplorerProps {\n width: number\n useSessions: <T>(selector: (s: SessionListState) => T) => T\n t: (key: FilesKey, params?: Record<string, unknown>) => string\n listDir: (path: string, signal?: AbortSignal) => Promise<FsListResult>\n openPath: (path: string) => Promise<void>\n revealInExplorer: (path: string, kind: 'file' | 'dir', signal?: AbortSignal) => Promise<FsMutationResult>\n createFile: (path: string, signal?: AbortSignal) => Promise<FsMutationResult>\n createDir: (path: string, signal?: AbortSignal) => Promise<FsMutationResult>\n renameFile: (path: string, to: string, signal?: AbortSignal) => Promise<FsMutationResult>\n removePath: (path: string, signal?: AbortSignal) => Promise<FsMutationResult>\n copyPath: (from: string, to: string, overwrite: boolean, signal?: AbortSignal) => Promise<FsMutationResult>\n}\n\nfunction basenameOf(path: string): string {\n const trimmed = path.replace(/[\\\\/]+$/, '')\n const idx = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\\\'))\n return idx >= 0 ? trimmed.slice(idx + 1) : trimmed\n}\n\n/** Parent directory of a path ('' for a bare drive root — never used for such). */\nfunction parentOf(path: string): string {\n const idx = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n return idx > 0 ? path.slice(0, idx) : path\n}\n\n/** Append a child name to a directory path, honoring its separator style. */\nfunction joinPath(dir: string, name: string): string {\n const sep = dir.includes('\\\\') ? '\\\\' : '/'\n return dir.endsWith('\\\\') || dir.endsWith('/') ? dir + name : dir + sep + name\n}\n\n/** \"a.txt\" → \"a - Copy.txt\", \"folder\" → \"folder - Copy\" (OS explorer duplicate naming). */\nfunction copyName(name: string): string {\n const idx = name.lastIndexOf('.')\n if (idx <= 0) return `${name} - Copy`\n return `${name.slice(0, idx)} - Copy${name.slice(idx)}`\n}\n\n/**\n * Hidden folder next to a deleted item that holds it until undo restores it\n * (delete = rename into here, undo = rename back — no bytes are copied).\n */\nconst TRASH_NAME = '.dsh-trash'\n\n/** Number of separators in a path — used to delete children before parents. */\nfunction sepCount(path: string): number {\n let n = 0\n for (let i = 0; i < path.length; i += 1) {\n if (path[i] === '/' || path[i] === '\\\\') n += 1\n }\n return n\n}\n\nfunction formatSize(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return ''\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\n/** How often the visible tree is re-listed to pick up disk changes. */\nconst REFRESH_MS = 2000\n\n/** How many previously-expanded folders to re-list at once on workspace switch. */\nconst DIR_LOAD_BATCH = 4\n\n/** Pause between batches when restoring expanded folders. */\nconst DIR_LOAD_GAP_MS = 50\n\nconst EMPTY_EXPANDED = new Set<string>()\n\n/** True when two directory listings are identical (name/kind/size). */\nfunction sameEntries(a: FsListEntry[], b: FsListEntry[]): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i += 1) {\n if (a[i].name !== b[i].name || a[i].kind !== b[i].kind || a[i].size !== b[i].size) return false\n }\n return true\n}\n\ninterface TreeRowProps {\n entry: FsListEntry\n depth: number\n isActive: boolean\n isSelected: boolean\n isCut: boolean\n isExpanded: boolean\n isDropTarget: boolean\n onToggleDir: (path: string) => void\n onRefreshDir: (path: string) => void\n onSelect: (entry: FsListEntry, e: ReactMouseEvent) => void\n onDoubleClick: (entry: FsListEntry) => void\n onOpenExternal: (path: string) => Promise<void>\n onContextMenu: (e: ReactMouseEvent, entry: FsListEntry) => void\n onDragStart: (e: ReactDragEvent, entry: FsListEntry) => void\n onDragEnd: () => void\n onDragOverRow: (e: ReactDragEvent, entry: FsListEntry) => void\n onDragLeaveRow: () => void\n onDropRow: (e: ReactDragEvent, entry: FsListEntry) => void\n t: (key: FilesKey, params?: Record<string, unknown>) => string\n}\n\n/**\n * One tree row, memoized so opening/activating a file (which changes the\n * active-path highlight) re-renders only the affected row — with a workspace\n * full of files, re-rendering the whole tree on every click is what made\n * opening files feel laggy.\n */\nconst TreeRow = memo(function TreeRow({\n entry,\n depth,\n isActive,\n isSelected,\n isCut,\n isExpanded,\n isDropTarget,\n onToggleDir,\n onRefreshDir,\n onSelect,\n onDoubleClick,\n onOpenExternal,\n onContextMenu,\n onDragStart,\n onDragEnd,\n onDragOverRow,\n onDragLeaveRow,\n onDropRow,\n t,\n}: TreeRowProps) {\n const isDir = entry.kind === 'dir'\n return (\n <div\n className={`${styles.row} ${isSelected || isActive ? styles.rowSelected : ''}${isCut ? ` ${styles.rowCut}` : ''}${isDropTarget ? ` ${styles.rowDropTarget}` : ''}`}\n style={{ paddingLeft: 8 + depth * 14 }}\n draggable\n onClick={(e) => onSelect(entry, e)}\n onDoubleClick={() => onDoubleClick(entry)}\n onContextMenu={(e) => onContextMenu(e, entry)}\n onDragStart={(e) => onDragStart(e, entry)}\n onDragEnd={onDragEnd}\n onDragOver={(e) => onDragOverRow(e, entry)}\n onDragLeave={onDragLeaveRow}\n onDrop={(e) => onDropRow(e, entry)}\n role=\"treeitem\"\n aria-selected={isSelected || isActive}\n aria-expanded={isDir ? isExpanded : undefined}\n title={entry.name}\n >\n <span\n className={styles.chevron}\n onClick={(e) => {\n e.stopPropagation()\n if (isDir) onToggleDir(entry.path)\n }}\n >\n {isDir ? (isExpanded ? '▾' : '▸') : ''}\n </span>\n <span className={styles.icon}>\n {isDir ? (isExpanded ? '📂' : '📁') : entry.kind === 'file' ? <FileIcon name={entry.name} /> : '·'}\n </span>\n <span className={styles.name}>{entry.name}</span>\n {entry.kind === 'file' && entry.size !== undefined && (\n <span className={styles.size}>{formatSize(entry.size)}</span>\n )}\n <span className={styles.actions}>\n <button\n type=\"button\"\n className={styles.action}\n title={t('action.open')}\n onClick={(e) => {\n e.stopPropagation()\n void onOpenExternal(entry.path)\n }}\n >\n ↗\n </button>\n {isDir && (\n <button\n type=\"button\"\n className={styles.action}\n title={t('action.refresh')}\n onClick={(e) => {\n e.stopPropagation()\n onRefreshDir(entry.path)\n }}\n >\n ⟳\n </button>\n )}\n </span>\n </div>\n )\n})\n\nexport function FileExplorer({\n width,\n useSessions,\n t,\n listDir,\n openPath,\n revealInExplorer,\n createFile,\n createDir,\n renameFile,\n removePath,\n copyPath,\n}: FileExplorerProps) {\n const sessionList = useSessions((s) => s)\n const currentId = sessionList.current\n const cwd = currentId !== undefined ? sessionList.byId[currentId]?.cwd : undefined\n const { active: activePath, theme, undo: undoEntries } = useTabsState()\n\n const rootAbortRef = useRef<AbortController | null>(null)\n\n // Expanded directories are kept per workspace so each cwd restores its own.\n const cwdKey = cwd ?? ''\n const [expandedByCwd, setExpandedByCwd] = useState<Record<string, Set<string>>>({})\n const expanded = expandedByCwd[cwdKey] ?? EMPTY_EXPANDED\n\n const [root, setRoot] = useState<string | undefined>(undefined)\n const [rootLoading, setRootLoading] = useState(false)\n const [rootError, setRootError] = useState<string | undefined>(undefined)\n const [children, setChildren] = useState<Record<string, FsListEntry[]>>({})\n const [loadingDirs, setLoadingDirs] = useState<Set<string>>(new Set())\n const [dirErrors, setDirErrors] = useState<Record<string, string>>({})\n\n // Explorer-like selection (path → kind). A plain click replaces it,\n // Ctrl/Cmd+click toggles membership; copy/cut/paste act on it.\n const [selected, setSelected] = useState<Record<string, FsListEntry['kind']>>({})\n const clipboard = useClipboard()\n const treeAreaRef = useRef<HTMLDivElement>(null)\n\n // ---- drag & drop (move into a folder) ----\n const dragPathsRef = useRef<string[] | null>(null)\n const [dropTarget, setDropTarget] = useState<string | null>(null)\n\n // ---- context menu (rows, blank tree space, header and clipboard bar —\n // the whole column carries a menu; right-clicking a row keeps its own) ----\n interface MenuState {\n kind: 'file' | 'dir' | 'blank'\n path: string\n x: number\n y: number\n }\n const [menu, setMenu] = useState<MenuState | undefined>(undefined)\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | undefined>(undefined)\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Measure and clamp the menu into the viewport before the browser paints\n // (layout effects run pre-paint, so the raw position never shows).\n useLayoutEffect(() => {\n if (menu === undefined) {\n setMenuPos(undefined)\n return\n }\n const el = menuRef.current\n if (el === null) return\n const rect = el.getBoundingClientRect()\n setMenuPos({\n x: Math.max(4, Math.min(menu.x, window.innerWidth - rect.width - 4)),\n y: Math.max(4, Math.min(menu.y, window.innerHeight - rect.height - 4)),\n })\n }, [menu])\n\n // Close the menu on outside click / Escape / window blur.\n useEffect(() => {\n if (menu === undefined) return undefined\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMenu(undefined)\n }\n const onMouseDown = (e: MouseEvent) => {\n const el = menuRef.current\n if (el !== null && e.target instanceof Node && el.contains(e.target)) return\n setMenu(undefined)\n }\n const onBlur = () => setMenu(undefined)\n document.addEventListener('keydown', onKeyDown)\n // mousedown (not click): closing before a menu item's click still lets the\n // click dispatch on the item, and closes when clicking anywhere else.\n document.addEventListener('mousedown', onMouseDown)\n window.addEventListener('blur', onBlur)\n return () => {\n document.removeEventListener('keydown', onKeyDown)\n document.removeEventListener('mousedown', onMouseDown)\n window.removeEventListener('blur', onBlur)\n }\n }, [menu])\n\n // Explorer semantics: clicking (or right-clicking) ANYWHERE outside the\n // tree — the chat, the header, other columns — clears the selection. Clicks\n // on the tree rows and inside the open menu keep it (the menu's batch\n // actions operate on the selection).\n useEffect(() => {\n const onDocMouseDown = (e: MouseEvent) => {\n const target = e.target\n if (!(target instanceof Node)) return\n const tree = treeAreaRef.current\n if (tree !== null && tree.contains(target)) return\n const m = menuRef.current\n if (m !== null && m.contains(target)) return\n setSelected({})\n }\n document.addEventListener('mousedown', onDocMouseDown)\n return () => document.removeEventListener('mousedown', onDocMouseDown)\n }, [])\n\n // Latest tree snapshot for the polling tick (avoids stale closures).\n const treeRef = useRef({ root, children, expanded, rootLoading })\n treeRef.current = { root, children, expanded, rootLoading }\n // Stable view of the loaded listings so toggleDir doesn't depend on the\n // children state (keeps memoized rows from re-rendering on listing updates).\n const childrenRef = useRef(children)\n childrenRef.current = children\n\n // Expose the explorer width so the maid-atelier fixed chrome (top/bottom\n // trim) can shift past this column instead of covering it.\n useEffect(() => {\n document.body.style.setProperty('--dsh-explorer-width', `${width}px`)\n return () => {\n document.body.style.removeProperty('--dsh-explorer-width')\n }\n }, [width])\n\n // Reset the whole tree whenever the current session's cwd changes. The tabs\n // and expanded directories live per-workspace in the store / expandedByCwd,\n // so switching back restores them.\n useEffect(() => {\n rootAbortRef.current?.abort()\n setRoot(undefined)\n setRootError(undefined)\n setChildren({})\n setLoadingDirs(new Set())\n setDirErrors({})\n setSelected({})\n setCwd(cwd)\n\n if (cwd === undefined) {\n setRootLoading(false)\n return\n }\n\n setRootLoading(true)\n const controller = new AbortController()\n rootAbortRef.current = controller\n listDir(cwd, controller.signal)\n .then(async (result) => {\n if (controller.signal.aborted) return\n setRoot(result.root)\n setChildren({ [result.root]: result.entries })\n setRootError(undefined)\n // Restore previously-expanded folders in small batches so a workspace\n // with many expanded folders doesn't flood the tree (and the page)\n // all at once; the auto-refresh tick fills any remainder shortly after.\n const dirs = [...expanded].filter((dirPath) => dirPath !== result.root)\n for (let i = 0; i < dirs.length; i += DIR_LOAD_BATCH) {\n if (controller.signal.aborted) return\n const batch = dirs.slice(i, i + DIR_LOAD_BATCH)\n await Promise.all(batch.map((dirPath) => loadDir(dirPath)))\n if (i + DIR_LOAD_BATCH < dirs.length) {\n await new Promise((resolve) => setTimeout(resolve, DIR_LOAD_GAP_MS))\n }\n }\n })\n .catch((error) => {\n if (controller.signal.aborted) return\n setRootError(error instanceof Error ? error.message : String(error))\n })\n .finally(() => {\n if (!controller.signal.aborted) setRootLoading(false)\n })\n return () => controller.abort()\n }, [cwd, listDir])\n\n // Auto-refresh the visible tree (root + expanded directories) on a timer so\n // disk changes appear without a manual refresh.\n const refreshVisible = useCallback(async (signal: AbortSignal) => {\n const snapshot = treeRef.current\n if (cwd === undefined || snapshot.rootLoading) return\n\n try {\n const result = await listDir(cwd, signal)\n if (signal.aborted) return\n const existing = snapshot.children[result.root]\n if (snapshot.root !== result.root || existing === undefined || !sameEntries(existing, result.entries)) {\n setRoot(result.root)\n setChildren((prev) => ({ ...prev, [result.root]: result.entries }))\n setRootError(undefined)\n }\n } catch (error) {\n if (signal.aborted) return\n setRootError(error instanceof Error ? error.message : String(error))\n }\n\n for (const dirPath of snapshot.expanded) {\n if (signal.aborted) return\n try {\n const result = await listDir(dirPath, signal)\n if (signal.aborted) return\n const existing = snapshot.children[dirPath]\n if (existing === undefined || !sameEntries(existing, result.entries)) {\n setChildren((prev) => ({ ...prev, [dirPath]: result.entries }))\n setDirErrors((prev) => {\n if (!(dirPath in prev)) return prev\n const next = { ...prev }\n delete next[dirPath]\n return next\n })\n }\n } catch (error) {\n if (signal.aborted) return\n setDirErrors((prev) => ({ ...prev, [dirPath]: error instanceof Error ? error.message : String(error) }))\n }\n }\n }, [cwd, listDir])\n\n useEffect(() => {\n if (cwd === undefined) return undefined\n const controller = new AbortController()\n let inFlight = false\n const timer = setInterval(() => {\n if (inFlight) return\n inFlight = true\n void refreshVisible(controller.signal).finally(() => {\n inFlight = false\n })\n }, REFRESH_MS)\n return () => {\n controller.abort()\n clearInterval(timer)\n }\n }, [cwd, refreshVisible])\n\n const loadDir = useCallback(async (dirPath: string) => {\n setLoadingDirs((prev) => new Set(prev).add(dirPath))\n const controller = new AbortController()\n try {\n const result = await listDir(dirPath, controller.signal)\n setChildren((prev) => ({ ...prev, [dirPath]: result.entries }))\n setDirErrors((prev) => {\n if (!(dirPath in prev)) return prev\n const next = { ...prev }\n delete next[dirPath]\n return next\n })\n } catch (error) {\n setDirErrors((prev) => ({ ...prev, [dirPath]: error instanceof Error ? error.message : String(error) }))\n } finally {\n setLoadingDirs((prev) => {\n const next = new Set(prev)\n next.delete(dirPath)\n return next\n })\n }\n }, [listDir])\n\n const toggleDir = useCallback((dirPath: string) => {\n setExpandedByCwd((prev) => {\n const base = prev[cwdKey] ?? EMPTY_EXPANDED\n const next = new Set(base)\n if (next.has(dirPath)) next.delete(dirPath)\n else next.add(dirPath)\n return { ...prev, [cwdKey]: next }\n })\n if (!childrenRef.current[dirPath]) void loadDir(dirPath)\n }, [cwdKey, loadDir])\n\n const refreshDir = useCallback((dirPath: string) => {\n setChildren((prev) => {\n const next = { ...prev }\n delete next[dirPath]\n return next\n })\n void loadDir(dirPath)\n }, [loadDir])\n\n // ---- context-menu actions ----\n\n const openContextMenu = useCallback((e: ReactMouseEvent, entry: FsListEntry) => {\n e.preventDefault()\n e.stopPropagation()\n // Explorer behavior: right-clicking an unselected item selects it; a\n // right-click on an already-selected item keeps the multi-selection.\n setSelected((prev) => (prev[entry.path] !== undefined ? prev : { [entry.path]: entry.kind }))\n setMenu({ kind: entry.kind === 'dir' ? 'dir' : 'file', path: entry.path, x: e.clientX, y: e.clientY })\n }, [])\n\n /** Right-click anywhere else in the column (header, clipboard bar, blank tree space): folder menu for the cwd. */\n const onColumnContextMenu = useCallback((e: ReactMouseEvent) => {\n e.preventDefault()\n // Right-clicking the open menu itself keeps it (no browser menu either).\n const el = menuRef.current\n if (el !== null && e.target instanceof Node && el.contains(e.target)) return\n if (cwd === undefined) return\n setMenu({ kind: 'blank', path: cwd, x: e.clientX, y: e.clientY })\n }, [cwd])\n\n const runAction = useCallback((action: () => void) => {\n setMenu(undefined)\n action()\n }, [])\n\n // One mutation pipeline shared by New File / New Folder / Rename / Delete:\n // run the op, refresh the touched directory, and surface failures inline in\n // the tree (under the directory row, or at the column top for the root).\n const applyMutation = useCallback(async (op: () => Promise<unknown>, refreshPath: string) => {\n try {\n await op()\n refreshDir(refreshPath)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (refreshPath === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [refreshPath]: message }))\n }\n }, [refreshDir, root])\n\n /**\n * Record one undoable operation for the current workspace. When the stack\n * overflows, the oldest entry comes back evicted — if it was a delete, its\n * trash item can never be restored from here again, so purge it (best\n * effort; it may already be gone).\n */\n const recordUndo = useCallback((entry: UndoEntry) => {\n const evicted = pushUndo(entry)\n if (evicted !== undefined && evicted.kind === 'delete') {\n void removePath(evicted.trash).catch(() => {\n // already gone — nothing to purge\n })\n }\n }, [removePath])\n\n /**\n * Reversible delete: rename the item into a hidden `.dsh-trash` folder next\n * to it (instant — no bytes copied). Undo renames it back. The trash folder\n * is created on demand and hidden from the tree.\n */\n const trashPath = useCallback(async (path: string): Promise<{ trash: string; parent: string }> => {\n const parent = parentOf(path)\n const trashDir = joinPath(parent, TRASH_NAME)\n // Best-effort: the folder already exists after the first delete.\n try {\n await createDir(trashDir)\n } catch {\n // exists — fine\n }\n // Practically collision-free unique name; rename refuses if it ever collides.\n const unique = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`\n const trash = joinPath(trashDir, `${unique}-${basenameOf(path)}`)\n await renameFile(path, trash)\n return { trash, parent }\n }, [createDir, renameFile])\n\n /**\n * Apply clipboard/drag items into a target directory. `cut` moves (copy +\n * remove source), `copy` duplicates. Every successful item records an undo\n * entry — copy → remove the copy, move → rename it back. Overwriting copies\n * are NOT recorded (the pre-existing content is gone for good). Moving an\n * item into the folder it already lives in is a no-op; copying into the same\n * folder duplicates it with a \" - Copy\" suffix, like the OS explorer.\n */\n const applyItems = useCallback(async (items: ClipboardItem[], targetDir: string, mode: ClipboardMode) => {\n const failures: string[] = []\n const refreshed = new Set<string>()\n for (const item of items) {\n let dest = joinPath(targetDir, item.name)\n const sameDest = dest.toLowerCase() === item.path.toLowerCase()\n if (mode === 'cut' && sameDest) continue\n if (sameDest) dest = joinPath(targetDir, copyName(item.name))\n let overwritten = false\n try {\n const copied = await copyPath(item.path, dest, false)\n if (copied.exists === true) {\n // Collision: ask before overwriting, like the OS file manager.\n if (!window.confirm(t('confirm.overwrite', { name: item.name }))) continue\n overwritten = true\n await copyPath(item.path, dest, true)\n }\n if (mode === 'cut') {\n await removePath(item.path)\n // Keep any open tab pointed at the moved file.\n retargetFile(item.path, dest)\n refreshed.add(parentOf(item.path))\n recordUndo({ kind: 'move', label: t('undo.move', { name: item.name }), from: item.path, to: dest, parent: targetDir })\n } else if (!overwritten) {\n recordUndo({ kind: 'copy', label: t('undo.copy', { name: item.name }), from: item.path, to: dest, parent: targetDir })\n }\n refreshed.add(targetDir)\n } catch (error) {\n failures.push(error instanceof Error ? error.message : String(error))\n }\n }\n for (const p of refreshed) refreshDir(p)\n return failures\n }, [copyPath, recordUndo, refreshDir, removePath, retargetFile, t])\n\n /** Undo the current workspace's most recent operation (Ctrl+Z / header button). */\n const performUndo = useCallback(async () => {\n const entry = popUndo()\n if (entry === undefined) return\n const refreshed = new Set<string>()\n try {\n switch (entry.kind) {\n case 'copy':\n await removePath(entry.to)\n closeFilesUnder(entry.to)\n refreshed.add(entry.parent)\n break\n case 'move':\n // Rename back: the destination currently holds the moved item.\n await renameFile(entry.to, entry.from)\n retargetFile(entry.to, entry.from)\n refreshed.add(entry.parent)\n refreshed.add(parentOf(entry.from))\n break\n case 'rename':\n await renameFile(entry.to, entry.from)\n retargetFile(entry.to, entry.from)\n refreshed.add(entry.parent)\n break\n case 'create':\n await trashPath(entry.path)\n closeFilesUnder(entry.path)\n refreshed.add(entry.parent)\n break\n case 'delete':\n await renameFile(entry.trash, entry.path)\n refreshed.add(entry.parent)\n break\n }\n } catch (error) {\n // Put the entry back so the user can retry after fixing the cause, and\n // surface the reason inline — EXCEPT a delete whose trash item no longer\n // exists (purged by an overflow, or the .dsh-trash folder removed on\n // disk): nothing left to restore, so drop it instead of a stuck retry.\n const message = error instanceof Error ? error.message : String(error)\n const gone = message.includes('does not exist') || message.includes('not found')\n if (!(entry.kind === 'delete' && gone)) recordUndo(entry)\n if (entry.parent === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [entry.parent]: message }))\n return\n }\n for (const p of refreshed) refreshDir(p)\n }, [closeFilesUnder, popUndo, recordUndo, refreshDir, removePath, renameFile, retargetFile, root, trashPath])\n\n /** Delete every selected item (moves each into .dsh-trash; all undoable). */\n const deleteSelection = useCallback(async () => {\n const entries = Object.entries(selected).map(([path, kind]) => ({ path, kind }))\n if (entries.length === 0) return\n // Children first so deleting a folder alongside its contents doesn't hit\n // already-gone paths; anything under an already-trashed folder is skipped.\n entries.sort((a, b) => sepCount(b.path) - sepCount(a.path))\n const confirmMessage = entries.length === 1\n ? (entries[0].kind === 'dir'\n ? t('confirm.deleteDir', { name: basenameOf(entries[0].path) })\n : t('confirm.deleteFile', { name: basenameOf(entries[0].path) }))\n : t('confirm.deleteSelected', {\n count: entries.length,\n names: entries.slice(0, 3).map((e) => basenameOf(e.path)).join('、'),\n })\n if (!window.confirm(confirmMessage)) return\n const failures: string[] = []\n const refreshed = new Set<string>()\n const trashedPrefixes: string[] = []\n for (const { path, kind } of entries) {\n const sep = path.includes('\\\\') ? '\\\\' : '/'\n const prefix = path.endsWith('\\\\') || path.endsWith('/') ? path : path + sep\n if (trashedPrefixes.some((d) => path.toLowerCase().startsWith(d.toLowerCase()))) continue\n try {\n const { trash, parent } = await trashPath(path)\n if (kind === 'dir') trashedPrefixes.push(prefix)\n closeFilesUnder(path)\n recordUndo({ kind: 'delete', label: t('undo.delete', { name: basenameOf(path) }), path, trash, parent })\n refreshed.add(parent)\n } catch (error) {\n failures.push(error instanceof Error ? error.message : String(error))\n }\n }\n for (const p of refreshed) refreshDir(p)\n setSelected({})\n if (failures.length > 0) setRootError(failures.join('; '))\n }, [closeFilesUnder, recordUndo, refreshDir, root, selected, t, trashPath])\n\n const onNewFile = useCallback((dirPath: string) => {\n const name = window.prompt(`${t('prompt.newFileName')}:`, '')\n if (name === null) return\n const trimmed = name.trim()\n if (trimmed === '') return\n const path = joinPath(dirPath, trimmed)\n void applyMutation(async () => {\n await createFile(path)\n recordUndo({ kind: 'create', label: t('undo.create', { name: trimmed }), path, parent: dirPath })\n }, dirPath)\n }, [applyMutation, createFile, recordUndo, t])\n\n const onNewFolder = useCallback((dirPath: string) => {\n const name = window.prompt(`${t('prompt.newFolderName')}:`, '')\n if (name === null) return\n const trimmed = name.trim()\n if (trimmed === '') return\n const path = joinPath(dirPath, trimmed)\n void applyMutation(async () => {\n await createDir(path)\n recordUndo({ kind: 'create', label: t('undo.create', { name: trimmed }), path, parent: dirPath })\n }, dirPath)\n }, [applyMutation, createDir, recordUndo, t])\n\n const onRename = useCallback((path: string) => {\n const current = basenameOf(path)\n const name = window.prompt(`${t('prompt.renameTo')}:`, current)\n if (name === null) return\n const trimmed = name.trim()\n if (trimmed === '' || trimmed === current) return\n const parent = parentOf(path)\n const to = joinPath(parent, trimmed)\n void applyMutation(async () => {\n await renameFile(path, to)\n // Keep any open tab pointing at the moved file.\n retargetFile(path, to)\n recordUndo({ kind: 'rename', label: t('undo.rename', { name: current }), from: path, to, parent })\n }, parent)\n }, [applyMutation, recordUndo, renameFile, retargetFile, t])\n\n const onDelete = useCallback((path: string, kind: 'file' | 'dir') => {\n const name = basenameOf(path)\n const message = kind === 'dir' ? t('confirm.deleteDir', { name }) : t('confirm.deleteFile', { name })\n if (!window.confirm(message)) return\n void (async () => {\n try {\n const { trash, parent } = await trashPath(path)\n // Drop tabs for the deleted file (or everything under a deleted folder).\n closeFilesUnder(path)\n recordUndo({ kind: 'delete', label: t('undo.delete', { name }), path, trash, parent })\n refreshDir(parent)\n } catch (error) {\n setRootError(error instanceof Error ? error.message : String(error))\n }\n })()\n }, [closeFilesUnder, recordUndo, refreshDir, t, trashPath])\n\n const onCopyPath = useCallback((path: string) => {\n void navigator.clipboard.writeText(path).catch(() => {\n // clipboard unavailable (permissions) — nothing else to do\n })\n }, [])\n\n /** Reveal in the OS file manager; failures surface as an alert, never silently. */\n const onReveal = useCallback((path: string, kind: 'file' | 'dir') => {\n void revealInExplorer(path, kind).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n window.alert(`${t('error.reveal')}:${message}`)\n })\n }, [revealInExplorer, t])\n\n const selectedItems = useCallback((): ClipboardItem[] => (\n Object.entries(selected).map(([path, kind]) => ({ path, name: basenameOf(path), kind }))\n ), [selected])\n\n const onCopySelection = useCallback((mode: ClipboardMode) => {\n const items = selectedItems()\n if (items.length === 0) return\n copyToClipboard(items, mode)\n }, [selectedItems])\n\n /** Paste the clipboard into the current folder (or the one selected dir). */\n const onPaste = useCallback(async () => {\n const { items, mode } = clipboard\n if (items.length === 0 || cwd === undefined) return\n const selEntries = Object.entries(selected)\n const target = selEntries.length === 1 && selEntries[0][1] === 'dir' ? selEntries[0][0] : cwd\n const failures = await applyItems(items, target, mode)\n // Explorer semantics: a cut clears the clipboard once the move lands; a\n // plain copy stays armed so the user can paste into more folders.\n if (mode === 'cut') clearClipboard()\n setSelected({})\n if (failures.length > 0) {\n const message = failures.join('; ')\n if (target === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [target]: message }))\n }\n }, [applyItems, clipboard, clearClipboard, cwd, root, selected])\n\n // ---- drag & drop (drag selected items onto a folder to move them) ----\n\n const onRowDragStart = useCallback((e: ReactDragEvent, entry: FsListEntry) => {\n // Dragging one member of a multi-selection moves the whole selection,\n // exactly like the OS explorer.\n const paths = selected[entry.path] !== undefined ? Object.keys(selected) : [entry.path]\n dragPathsRef.current = paths\n try {\n // text/plain: natural browser fallback (a native textarea drop inserts\n // the paths); the custom type carries the machine-readable list for the\n // workbench's own chat-drop integration (composer.ts).\n e.dataTransfer.setData('text/plain', paths.join('\\n'))\n e.dataTransfer.setData(DRAG_TYPE, JSON.stringify(paths))\n } catch {\n // dataTransfer may be unavailable — the ref still carries the paths\n }\n // copyMove: dropping on a folder row moves (tree), dropping on the chat\n // copies the path text in.\n e.dataTransfer.effectAllowed = 'copyMove'\n }, [selected])\n\n const onRowDragEnd = useCallback(() => {\n dragPathsRef.current = null\n setDropTarget(null)\n }, [])\n\n const onRowDragOver = useCallback((e: ReactDragEvent, entry: FsListEntry) => {\n if (dragPathsRef.current === null) return\n e.stopPropagation()\n if (entry.kind !== 'dir') return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n setDropTarget(entry.path)\n }, [])\n\n const onRowDragLeave = useCallback(() => setDropTarget(null), [])\n\n /** Move the dragged paths into `targetDir` (a folder row or the tree area). */\n const onDropMove = useCallback((e: ReactDragEvent, targetDir: string) => {\n e.preventDefault()\n e.stopPropagation()\n setDropTarget(null)\n const paths = dragPathsRef.current\n dragPathsRef.current = null\n if (paths === null || paths.length === 0) return\n // Dropping a folder onto itself or into its own subtree is a no-op.\n const items: ClipboardItem[] = paths.filter((path) => {\n if (path.toLowerCase() === targetDir.toLowerCase()) return false\n const sep = path.includes('\\\\') ? '\\\\' : '/'\n const prefix = path.endsWith('\\\\') || path.endsWith('/') ? path : path + sep\n return !targetDir.toLowerCase().startsWith(prefix.toLowerCase())\n }).map((path) => ({\n path,\n name: basenameOf(path),\n kind: selected[path] ?? 'file',\n }))\n if (items.length === 0) return\n setSelected({})\n void applyItems(items, targetDir, 'cut').then((failures) => {\n if (failures.length > 0) {\n const message = failures.join('; ')\n if (targetDir === root) setRootError(message)\n else setDirErrors((prev) => ({ ...prev, [targetDir]: message }))\n }\n })\n }, [applyItems, root, selected])\n\n const onRowDrop = useCallback((e: ReactDragEvent, entry: FsListEntry) => {\n e.stopPropagation()\n if (dragPathsRef.current === null || entry.kind !== 'dir') return\n e.preventDefault()\n onDropMove(e, entry.path)\n }, [onDropMove])\n\n const onRowClick = useCallback((entry: FsListEntry, e: ReactMouseEvent) => {\n e.stopPropagation()\n // Rows push keyboard focus onto the tree so Ctrl+C / Ctrl+V / Esc land\n // here right after a click, instead of going to whatever had focus.\n treeAreaRef.current?.focus({ preventScroll: true })\n if (e.ctrlKey || e.metaKey) {\n // Ctrl/Cmd+click toggles membership without opening / expanding.\n setSelected((prev) => {\n const next = { ...prev }\n if (next[entry.path] !== undefined) delete next[entry.path]\n else next[entry.path] = entry.kind\n return next\n })\n return\n }\n setSelected({ [entry.path]: entry.kind })\n if (entry.kind === 'dir') {\n toggleDir(entry.path)\n return\n }\n openFile(entry.path)\n }, [toggleDir])\n\n const onRowDoubleClick = useCallback((entry: FsListEntry) => {\n if (entry.kind !== 'file') return\n void openPath(entry.path)\n }, [openPath])\n\n /** Explorer-style \"Select All\": every visible (non-trash) entry at any depth. */\n const selectAllEntries = useCallback(() => {\n const all: Record<string, FsListEntry['kind']> = {}\n const collect = (entries: FsListEntry[]) => {\n for (const entry of entries) {\n if (entry.name === TRASH_NAME) continue\n all[entry.path] = entry.kind\n if (entry.kind === 'dir' && expanded.has(entry.path) && children[entry.path] !== undefined) {\n collect(children[entry.path] as FsListEntry[])\n }\n }\n }\n const rootEntries = root !== undefined ? children[root] : undefined\n if (rootEntries !== undefined) collect(rootEntries)\n setSelected(all)\n }, [children, expanded, root])\n\n /**\n * Insert an `@.\\<relative-workspace-path>` mention into the composer (the\n * `.\\` prefix marks the path as workspace-relative; see composerMention).\n */\n const onMention = useCallback((path: string) => {\n const mention = relPathOf(path, cwd)\n if (mention.length === 0) return\n insertIntoComposer(`${composerMention(mention)} `)\n }, [cwd])\n\n // Explorer-style keyboard: Ctrl/Cmd+C/X copy-cut, Ctrl/Cmd+V paste,\n // Ctrl/Cmd+A select-all, Escape clears the selection (and cancels a cut).\n const onTreeKeyDown = useCallback((e: ReactKeyboardEvent) => {\n const mod = e.ctrlKey || e.metaKey\n const key = e.key.toLowerCase()\n // Never hijack Ctrl/Cmd+C/X while the user is copying an actual text\n // selection (e.g. an inline error message rendered inside the tree): the\n // browser must get the key so the selected text is copied instead of the\n // selected files. Also let editable elements (if any ever live in the\n // tree) keep their native copy/cut behavior.\n if (mod && (key === 'c' || key === 'x')) {\n const target = e.target as HTMLElement | null\n if (target !== null && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable)) return\n const selection = window.getSelection()\n if (selection !== null && !selection.isCollapsed && selection.toString().length > 0) return\n }\n if (mod && key === 'c') {\n const items = selectedItems()\n if (items.length === 0) return\n e.preventDefault()\n copyToClipboard(items, 'copy')\n return\n }\n if (mod && key === 'x') {\n const items = selectedItems()\n if (items.length === 0) return\n e.preventDefault()\n copyToClipboard(items, 'cut')\n return\n }\n if (mod && key === 'v') {\n if (clipboard.items.length === 0) return\n e.preventDefault()\n void onPaste()\n return\n }\n if (mod && key === 'a') {\n e.preventDefault()\n selectAllEntries()\n return\n }\n if (mod && key === 'z' && !e.shiftKey) {\n if (undoEntries.length === 0) return\n e.preventDefault()\n void performUndo()\n return\n }\n if (e.key === 'Delete') {\n if (Object.keys(selected).length === 0) return\n e.preventDefault()\n void deleteSelection()\n return\n }\n if (e.key === 'Escape') {\n setSelected({})\n cancelCut()\n }\n }, [cancelCut, clipboard.items.length, deleteSelection, onPaste, performUndo, selectAllEntries, selectedItems, undoEntries.length])\n\n // ---- placeholder: no session / no cwd ----\n if (cwd === undefined) {\n return (\n <div className={styles.column} style={{ width: width > 0 ? width : undefined }} data-pane=\"explorer\" data-fe-theme={theme}>\n <div className={styles.placeholder}>\n {currentId === undefined ? t('placeholder.noSession') : t('placeholder.noCwd')}\n </div>\n </div>\n )\n }\n\n // Cut items ghost in the tree until the paste moves them away.\n const cutPaths = new Set(clipboard.mode === 'cut' ? clipboard.items.map((item) => item.path) : [])\n\n /** Listings as the user sees them (the internal trash folder is hidden). */\n const visibleEntries = (entries: FsListEntry[]) => entries.filter((entry) => entry.name !== TRASH_NAME)\n\n const renderEntries = (entries: FsListEntry[], depth: number) => visibleEntries(entries).map((entry) => {\n const isDir = entry.kind === 'dir'\n const isExpanded = isDir && expanded.has(entry.path)\n const isLoading = isDir && loadingDirs.has(entry.path)\n const childEntries = isDir && isExpanded ? children[entry.path] : undefined\n const error = isDir ? dirErrors[entry.path] : undefined\n\n return (\n <div key={entry.path}>\n <TreeRow\n entry={entry}\n depth={depth}\n isActive={entry.kind === 'file' && activePath === entry.path}\n isSelected={selected[entry.path] !== undefined}\n isCut={cutPaths.has(entry.path)}\n isExpanded={isExpanded}\n isDropTarget={dropTarget === entry.path}\n onToggleDir={toggleDir}\n onRefreshDir={refreshDir}\n onSelect={onRowClick}\n onDoubleClick={onRowDoubleClick}\n onOpenExternal={openPath}\n onContextMenu={openContextMenu}\n onDragStart={onRowDragStart}\n onDragEnd={onRowDragEnd}\n onDragOverRow={onRowDragOver}\n onDragLeaveRow={onRowDragLeave}\n onDropRow={onRowDrop}\n t={t}\n />\n {isDir && isExpanded && (\n <div>\n {isLoading && <div className={styles.rowHint} style={{ paddingLeft: 8 + (depth + 1) * 14 }}>{t('preview.loading')}</div>}\n {error !== undefined && !isLoading && <div className={styles.rowError} style={{ paddingLeft: 8 + (depth + 1) * 14 }}>{error}</div>}\n {childEntries !== undefined && visibleEntries(childEntries).length === 0 && !isLoading && (\n <div className={styles.rowHint} style={{ paddingLeft: 8 + (depth + 1) * 14 }}>{t('preview.emptyDir')}</div>\n )}\n {childEntries !== undefined && renderEntries(childEntries, depth + 1)}\n </div>\n )}\n </div>\n )\n })\n\n interface MenuItem {\n label: string\n danger?: boolean\n disabled?: boolean\n onClick: () => void\n }\n\n const menuItems = (m: MenuState): Array<MenuItem | 'divider'> => {\n // Right-clicking one member of a multi-selection operates on the whole\n // selection (Explorer behavior): show a batch delete instead of the\n // single-item one.\n const selectionCount = Object.keys(selected).length\n const deleteItem: MenuItem = selectionCount > 1\n ? { label: t('menu.deleteSelected', { count: selectionCount }), danger: true, onClick: () => void deleteSelection() }\n // 'blank' never renders deleteItem (the blank branch returns earlier);\n // the fallback only satisfies the union type.\n : { label: t('menu.delete'), danger: true, onClick: () => onDelete(m.path, m.kind === 'blank' ? 'dir' : m.kind) }\n if (m.kind === 'file') {\n return [\n { label: t('menu.atFile'), onClick: () => onMention(m.path) },\n { label: t('menu.open'), onClick: () => openFile(m.path) },\n 'divider',\n { label: t('menu.copy'), onClick: () => onCopySelection('copy') },\n { label: t('menu.cut'), onClick: () => onCopySelection('cut') },\n 'divider',\n { label: t('menu.copyPath'), onClick: () => onCopyPath(m.path) },\n { label: t('menu.revealInExplorer'), onClick: () => onReveal(m.path, 'file') },\n { label: t('menu.openSystem'), onClick: () => void openPath(m.path) },\n 'divider',\n { label: t('menu.rename'), onClick: () => onRename(m.path) },\n deleteItem,\n ]\n }\n if (m.kind === 'dir') {\n return [\n { label: t('menu.newFile'), onClick: () => onNewFile(m.path) },\n { label: t('menu.newFolder'), onClick: () => onNewFolder(m.path) },\n 'divider',\n { label: t('menu.copy'), onClick: () => onCopySelection('copy') },\n { label: t('menu.cut'), onClick: () => onCopySelection('cut') },\n { label: t('menu.paste'), disabled: clipboard.items.length === 0, onClick: () => void onPaste() },\n 'divider',\n { label: t('menu.copyPath'), onClick: () => onCopyPath(m.path) },\n { label: t('menu.revealInExplorer'), onClick: () => onReveal(m.path, 'dir') },\n { label: t('menu.openSystem'), onClick: () => void openPath(m.path) },\n { label: t('menu.refresh'), onClick: () => refreshDir(m.path) },\n 'divider',\n { label: t('menu.rename'), onClick: () => onRename(m.path) },\n deleteItem,\n ]\n }\n // Blank space / header / clipboard bar: operations against the current\n // workspace folder (right-clicking blank space acts on the cwd, VS Code\n // file-explorer style).\n if (m.kind === 'blank') {\n const dirPath = m.path\n return [\n { label: t('menu.newFile'), onClick: () => onNewFile(dirPath) },\n { label: t('menu.newFolder'), onClick: () => onNewFolder(dirPath) },\n { label: t('menu.paste'), disabled: clipboard.items.length === 0, onClick: () => void onPaste() },\n 'divider',\n { label: t('menu.selectAll'), onClick: selectAllEntries },\n { label: t('menu.undo'), disabled: undoEntries.length === 0, onClick: () => void performUndo() },\n 'divider',\n { label: t('menu.copyPath'), onClick: () => onCopyPath(dirPath) },\n { label: t('menu.revealInExplorer'), onClick: () => onReveal(dirPath, 'dir') },\n { label: t('menu.openSystem'), onClick: () => void openPath(dirPath) },\n { label: t('menu.refresh'), onClick: () => refreshDir(dirPath) },\n ]\n }\n return [\n { label: t('menu.paste'), disabled: clipboard.items.length === 0, onClick: () => void onPaste() },\n ]\n }\n\n return (\n <div\n className={styles.column}\n style={{ width: width > 0 ? width : undefined }}\n data-pane=\"explorer\"\n data-fe-theme={theme}\n onContextMenu={onColumnContextMenu}\n >\n <div className={styles.header}>\n <span className={styles.headerTitle} title={root ?? cwd}>{basenameOf(root ?? cwd)}</span>\n <span className={styles.headerActions}>\n <button\n type=\"button\"\n className={styles.action}\n title={undoEntries.length > 0 ? `${t('action.undo')}:${undoEntries[undoEntries.length - 1].label}` : t('action.undo')}\n disabled={undoEntries.length === 0}\n onClick={() => void performUndo()}\n >\n ↩\n </button>\n <button type=\"button\" className={styles.action} title={t('action.theme')} onClick={toggleTheme}>\n {theme === 'dark' ? '☀' : '🌙'}\n </button>\n <button type=\"button\" className={styles.action} title={t('action.open')} onClick={() => void openPath(cwd)}>↗</button>\n <button type=\"button\" className={styles.action} title={t('tab.expand')} onClick={expandPreview}>{'>'}</button>\n </span>\n </div>\n {clipboard.items.length > 0 && (\n <div className={styles.clipboardBar} role=\"status\">\n <span className={styles.clipboardText}>\n {clipboard.mode === 'cut'\n ? t('clipboard.cut', { count: clipboard.items.length })\n : t('clipboard.copied', { count: clipboard.items.length })}\n <span className={styles.clipboardHint}>{t('clipboard.pasteHint')}</span>\n </span>\n <button\n type=\"button\"\n className={styles.action}\n title={t('clipboard.clear')}\n onClick={() => {\n clearClipboard()\n if (clipboard.mode === 'cut') setSelected({})\n }}\n >\n ✕\n </button>\n </div>\n )}\n <div\n ref={treeAreaRef}\n tabIndex={0}\n className={styles.treeArea}\n onKeyDown={onTreeKeyDown}\n onClick={(e) => {\n // Clicking blank space (or a hint/error line — anything that is not\n // a tree row) deselects, Explorer behavior.\n const target = e.target as HTMLElement\n if (target.closest('[role=\"treeitem\"]') === null) setSelected({})\n }}\n onDragOver={(e) => {\n // Blank tree area also accepts a drop: move into the current folder.\n if (dragPathsRef.current === null) return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n if (dragPathsRef.current !== null) onDropMove(e, cwd)\n }}\n >\n {rootLoading && <div className={styles.rowHint}>{t('preview.loading')}</div>}\n {rootError !== undefined && <div className={styles.rowError}>{rootError}</div>}\n {!rootLoading && rootError === undefined && root !== undefined && children[root] !== undefined && visibleEntries(children[root]).length === 0 && (\n <div className={styles.rowHint}>{t('preview.emptyDir')}</div>\n )}\n {root !== undefined && children[root] !== undefined && renderEntries(children[root], 0)}\n </div>\n {menu !== undefined && (\n <div\n ref={menuRef}\n className={styles.contextMenu}\n role=\"menu\"\n onContextMenu={(e) => {\n // Right-clicking the open menu keeps it (and never shows the\n // browser menu).\n e.preventDefault()\n e.stopPropagation()\n }}\n style={menuPos !== undefined ? { left: menuPos.x, top: menuPos.y } : { left: menu.x, top: menu.y, visibility: 'hidden' }}\n >\n {menuItems(menu).map((item, index) =>\n item === 'divider' ? (\n <div key={index} className={styles.contextMenuDivider} />\n ) : (\n <div\n key={index}\n role=\"menuitem\"\n className={`${styles.contextMenuItem}${item.danger ? ` ${styles.contextMenuItemDanger}` : ''}${item.disabled ? ` ${styles.contextMenuItemDisabled}` : ''}`}\n onClick={() => runAction(item.onClick)}\n >\n {item.label}\n </div>\n ),\n )}\n </div>\n )}\n </div>\n )\n}\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record<string,any> */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += `<span class=\"${className}\">`;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid an\n// incorrect parse, it also matches the constructs where the meaning of\n// parentheses, escapes, or capture counting changes.\nconst BACKREF_RE = new RegExp(either(\n /\\[(?:[^\\\\\\]]|\\\\.)*\\]/, // a character class, inside which ( and \\ lose their meaning\n /\\(\\?<(?![=!])[^>]+>/, // a named capture group `(?<name>` (not a lookbehind `(?<=` / `(?<!`)\n /\\(\\?'[^']+'/, // a named capture group `(?'name'`\n /\\(\\??/, // an opening parenthesis, capturing or non-capturing / lookahead\n /\\\\([1-9][0-9]*)/, // a backreference like `\\1`\n /\\\\./ // any other escape sequence\n));\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(' || /^\\(\\?[<']/.test(match[0])) {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n 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/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array<string>} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record<number,boolean> */\n const emit = {};\n /** @type Record<number,string> */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.12.0\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record<string, Language>} */\n const languages = Object.create(null);\n /** @type {Record<string, string>} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line/text) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when `ignoreIllegals` is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n if (match.index === codeToHighlight.length) ; else {\n // matched literal `\\n` (with `$`) so we must manually add the newline\n // itself to the modeBuffer so it is not lost when we advance the cursor\n modeBuffer += \"\\n\";\n }\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record<string,CompiledMode> */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array<string>} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial<HLJSOptions>} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n highlightAll();\n }\n\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n // make sure the event listener is only added once\n if (!wantsHighlight) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n const regex = hljs.regex;\n const VAR = {};\n const BRACED_VAR = {\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n \"self\",\n {\n begin: /:-/,\n contains: [ VAR ]\n } // default values\n ]\n };\n Object.assign(VAR, {\n className: 'variable',\n variants: [\n { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![\\\\w\\\\d])(?![$])`) },\n BRACED_VAR\n ]\n });\n\n const SUBST = {\n className: 'subst',\n begin: /\\$\\(/,\n end: /\\)/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const COMMENT = hljs.inherit(\n hljs.COMMENT(),\n {\n match: [\n /(^|\\s)/,\n /#.*$/\n ],\n scope: {\n 2: 'comment'\n }\n }\n );\n const HERE_DOC = {\n begin: /<<-?\\s*(?=\\w+)/,\n starts: { contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n className: 'string'\n })\n ] }\n };\n const QUOTE_STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n SUBST\n ]\n };\n SUBST.contains.push(QUOTE_STRING);\n const ESCAPED_QUOTE = {\n match: /\\\\\"/\n };\n const APOS_STRING = {\n className: 'string',\n begin: /'/,\n end: /'/\n };\n const ESCAPED_APOS = {\n match: /\\\\'/\n };\n const ARITHMETIC = {\n begin: /\\$?\\(\\(/,\n end: /\\)\\)/,\n contains: [\n {\n begin: /\\d+#[0-9a-f]+/,\n className: \"number\"\n },\n hljs.NUMBER_MODE,\n VAR\n ]\n };\n const SH_LIKE_SHELLS = [\n \"fish\",\n \"bash\",\n \"zsh\",\n \"sh\",\n \"csh\",\n \"ksh\",\n \"tcsh\",\n \"dash\",\n \"scsh\",\n ];\n const KNOWN_SHEBANG = hljs.SHEBANG({\n binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n relevance: 10\n });\n const FUNCTION = {\n className: 'function',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n relevance: 0\n };\n\n const KEYWORDS = [\n \"if\",\n \"then\",\n \"else\",\n \"elif\",\n \"fi\",\n \"time\",\n \"for\",\n \"while\",\n \"until\",\n \"in\",\n \"do\",\n \"done\",\n \"case\",\n \"esac\",\n \"coproc\",\n \"function\",\n \"select\"\n ];\n\n const LITERALS = [\n \"true\",\n \"false\"\n ];\n\n // to consume paths to prevent keyword matches inside them\n const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n const SHELL_BUILT_INS = [\n \"break\",\n \"cd\",\n \"continue\",\n \"eval\",\n \"exec\",\n \"exit\",\n \"export\",\n \"getopts\",\n \"hash\",\n \"pwd\",\n \"readonly\",\n \"return\",\n \"shift\",\n \"test\",\n \"times\",\n \"trap\",\n \"umask\",\n \"unset\"\n ];\n\n const BASH_BUILT_INS = [\n \"alias\",\n \"bind\",\n \"builtin\",\n \"caller\",\n \"command\",\n \"declare\",\n \"echo\",\n \"enable\",\n \"help\",\n \"let\",\n \"local\",\n \"logout\",\n \"mapfile\",\n \"printf\",\n \"read\",\n \"readarray\",\n \"source\",\n \"sudo\",\n \"type\",\n \"typeset\",\n \"ulimit\",\n \"unalias\"\n ];\n\n const ZSH_BUILT_INS = [\n \"autoload\",\n \"bg\",\n \"bindkey\",\n \"bye\",\n \"cap\",\n \"chdir\",\n \"clone\",\n \"comparguments\",\n \"compcall\",\n \"compctl\",\n \"compdescribe\",\n \"compfiles\",\n \"compgroups\",\n \"compquote\",\n \"comptags\",\n \"comptry\",\n \"compvalues\",\n \"dirs\",\n \"disable\",\n \"disown\",\n \"echotc\",\n \"echoti\",\n \"emulate\",\n \"fc\",\n \"fg\",\n \"float\",\n \"functions\",\n \"getcap\",\n \"getln\",\n \"history\",\n \"integer\",\n \"jobs\",\n \"kill\",\n \"limit\",\n \"log\",\n \"noglob\",\n \"popd\",\n \"print\",\n \"pushd\",\n \"pushln\",\n \"rehash\",\n \"sched\",\n \"setcap\",\n \"setopt\",\n \"stat\",\n \"suspend\",\n \"ttyctl\",\n \"unfunction\",\n \"unhash\",\n \"unlimit\",\n \"unsetopt\",\n \"vared\",\n \"wait\",\n \"whence\",\n \"where\",\n \"which\",\n \"zcompile\",\n \"zformat\",\n \"zftp\",\n \"zle\",\n \"zmodload\",\n \"zparseopts\",\n \"zprof\",\n \"zpty\",\n \"zregexparse\",\n \"zsocket\",\n \"zstyle\",\n \"ztcp\"\n ];\n\n const GNU_CORE_UTILS = [\n \"chcon\",\n \"chgrp\",\n \"chown\",\n \"chmod\",\n \"cp\",\n \"dd\",\n \"df\",\n \"dir\",\n \"dircolors\",\n \"ln\",\n \"ls\",\n \"mkdir\",\n \"mkfifo\",\n \"mknod\",\n \"mktemp\",\n \"mv\",\n \"realpath\",\n \"rm\",\n \"rmdir\",\n \"shred\",\n \"sync\",\n \"touch\",\n \"truncate\",\n \"vdir\",\n \"b2sum\",\n \"base32\",\n \"base64\",\n \"cat\",\n \"cksum\",\n \"comm\",\n \"csplit\",\n \"cut\",\n \"expand\",\n \"fmt\",\n \"fold\",\n \"head\",\n \"join\",\n \"md5sum\",\n \"nl\",\n \"numfmt\",\n \"od\",\n \"paste\",\n \"ptx\",\n \"pr\",\n \"sha1sum\",\n \"sha224sum\",\n \"sha256sum\",\n \"sha384sum\",\n \"sha512sum\",\n \"shuf\",\n \"sort\",\n \"split\",\n \"sum\",\n \"tac\",\n \"tail\",\n \"tr\",\n \"tsort\",\n \"unexpand\",\n \"uniq\",\n \"wc\",\n \"arch\",\n \"basename\",\n \"chroot\",\n \"date\",\n \"dirname\",\n \"du\",\n \"echo\",\n \"env\",\n \"expr\",\n \"factor\",\n // \"false\", // keyword literal already\n \"groups\",\n \"hostid\",\n \"id\",\n \"link\",\n \"logname\",\n \"nice\",\n \"nohup\",\n \"nproc\",\n \"pathchk\",\n \"pinky\",\n \"printenv\",\n \"printf\",\n \"pwd\",\n \"readlink\",\n \"runcon\",\n \"seq\",\n \"sleep\",\n \"stat\",\n \"stdbuf\",\n \"stty\",\n \"tee\",\n \"test\",\n \"timeout\",\n // \"true\", // keyword literal already\n \"tty\",\n \"uname\",\n \"unlink\",\n \"uptime\",\n \"users\",\n \"who\",\n \"whoami\",\n \"yes\"\n ];\n\n return {\n name: 'Bash',\n aliases: [\n 'sh',\n 'zsh'\n ],\n keywords: {\n $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: [\n ...SHELL_BUILT_INS,\n ...BASH_BUILT_INS,\n // Shell modifiers\n \"set\",\n \"shopt\",\n ...ZSH_BUILT_INS,\n ...GNU_CORE_UTILS\n ]\n },\n contains: [\n KNOWN_SHEBANG, // to catch known shells and boost relevancy\n hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n FUNCTION,\n ARITHMETIC,\n COMMENT,\n HERE_DOC,\n PATH_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n ESCAPED_APOS,\n VAR\n ]\n };\n}\n\nexport { bash as default };\n","/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n const regex = hljs.regex;\n // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n // not include such support nor can we be sure all the grammars depending\n // on it would desire this behavior\n const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n const FUNCTION_TYPE_RE = '(?!struct)('\n + DECLTYPE_AUTO_RE + '|'\n + regex.optional(NAMESPACE_RE)\n + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n + ')';\n\n const CPP_PRIMITIVE_TYPES = {\n className: 'type',\n begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n };\n\n // https://en.cppreference.com/w/cpp/language/escape\n // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n const STRINGS = {\n className: 'string',\n variants: [\n {\n begin: '(u8?|U|L)?\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n end: '\\'',\n illegal: '.'\n },\n // https://en.cppreference.com/w/cpp/language/string_literal\n // a d-char-sequence never contains parentheses, backslashes or whitespace;\n // quotes are excluded as well so the closing delimiter cannot swallow the\n // quote that actually terminates the literal\n hljs.END_SAME_AS_BEGIN({\n begin: /(?:u8?|U|L)?R\"([^()\\\\\\s\"]{0,16})\\(/,\n end: /\\)([^()\\\\\\s\"]{0,16})\"/\n })\n ]\n };\n\n const NUMBERS = {\n className: 'number',\n variants: [\n // Floating-point literal.\n { begin:\n \"[+-]?(?:\" // Leading sign.\n // Decimal.\n + \"(?:\"\n + \"\\\\b[0-9](?:'?[0-9])*\\\\.(?:[0-9](?:'?[0-9])*)?\"\n + \"|\\\\.[0-9](?:'?[0-9])*\"\n + \")(?:[Ee][+-]?[0-9](?:'?[0-9])*)?\"\n + \"|\\\\b[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*\"\n // Hexadecimal.\n + \"|\\\\b0[Xx](?:\"\n +\"[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?\"\n + \"|\\\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*\"\n + \")[Pp][+-]?[0-9](?:'?[0-9])*\"\n + \")(?:\" // Literal suffixes.\n + \"[Ff](?:16|32|64|128)?\"\n + \"|(BF|bf)16\"\n + \"|[Ll]\"\n + \"|\" // Literal suffix is optional.\n + \")\"\n },\n // Integer literal.\n { begin:\n \"[+-]?\\\\b(?:\" // Leading sign.\n + \"0[Bb][01](?:'?[01])*\" // Binary.\n + \"|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*\" // Hexadecimal.\n + \"|0(?:'?[0-7])*\" // Octal or just a lone zero.\n + \"|[1-9](?:'?[0-9])*\" // Decimal.\n + \")(?:\" // Literal suffixes.\n + \"[Uu](?:LL?|ll?)\"\n + \"|[Uu][Zz]?\"\n + \"|(?:LL?|ll?)[Uu]?\"\n + \"|[Zz][Uu]\"\n + \"|\" // Literal suffix is optional.\n + \")\"\n // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the\n // literal highlight actually makes it stand out more.\n }\n ],\n relevance: 0\n };\n\n // `#include` is the only preprocessor directive that takes an angle-bracket\n // quoted header (`#include <header>`). Scoping that rule to `#include` keeps\n // the greedy `<...>` match from eating a `>` that belongs to the body of\n // another directive (e.g. `#define what do { cout << \">\"; } while (0)`),\n // which would otherwise leave an unbalanced `\"` and break highlighting for\n // the rest of the file. See issue #3505.\n const PREPROCESSOR_INCLUDE = {\n scope: 'meta',\n begin: /#\\s*include\\b/,\n end: /$/,\n keywords: { keyword: 'include' },\n contains: [\n {\n // the `\\` at the end of a line signaling continuation\n begin: /\\\\\\n/,\n },\n STRINGS,\n {\n scope: 'string',\n begin: /<.*?>/\n },\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const PREPROCESSOR = {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/,\n end: /$/,\n keywords: { keyword:\n 'if else elif endif define undef warning error line '\n + 'pragma _Pragma ifdef ifndef include' },\n contains: [\n {\n begin: /\\\\\\n/,\n relevance: 0\n },\n hljs.inherit(STRINGS, { className: 'string' }),\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const PREPROCESSORS = [\n PREPROCESSOR_INCLUDE,\n PREPROCESSOR\n ];\n\n const TITLE_MODE = {\n className: 'title',\n begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n relevance: 0\n };\n\n const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n // Bounded on purpose: an unbounded quantifier here consumes an arbitrarily\n // long run of words, and when no function title follows it the engine retries\n // the title at every token boundary of that run - quadratic in the size of\n // the document. See #4362.\n const MAX_FUNCTION_TYPE_TOKENS = 12;\n\n // https://en.cppreference.com/w/cpp/keyword\n const RESERVED_KEYWORDS = [\n 'alignas',\n 'alignof',\n 'and',\n 'and_eq',\n 'asm',\n 'atomic_cancel',\n 'atomic_commit',\n 'atomic_noexcept',\n 'auto',\n 'bitand',\n 'bitor',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'co_await',\n 'co_return',\n 'co_yield',\n 'compl',\n 'concept',\n 'const_cast|10',\n 'consteval',\n 'constexpr',\n 'constinit',\n 'continue',\n 'decltype',\n 'default',\n 'delete',\n 'do',\n 'dynamic_cast|10',\n 'else',\n 'enum',\n 'explicit',\n 'export',\n 'extern',\n 'false',\n 'final',\n 'for',\n 'friend',\n 'goto',\n 'if',\n 'import',\n 'inline',\n 'module',\n 'mutable',\n 'namespace',\n 'new',\n 'noexcept',\n 'not',\n 'not_eq',\n 'nullptr',\n 'operator',\n 'or',\n 'or_eq',\n 'override',\n 'private',\n 'protected',\n 'public',\n 'reflexpr',\n 'register',\n 'reinterpret_cast|10',\n 'requires',\n 'return',\n 'sizeof',\n 'static_assert',\n 'static_cast|10',\n 'struct',\n 'switch',\n 'synchronized',\n 'template',\n 'this',\n 'thread_local',\n 'throw',\n 'transaction_safe',\n 'transaction_safe_dynamic',\n 'true',\n 'try',\n 'typedef',\n 'typeid',\n 'typename',\n 'union',\n 'using',\n 'virtual',\n 'volatile',\n 'while',\n 'xor',\n 'xor_eq'\n ];\n\n // https://en.cppreference.com/w/cpp/keyword\n const RESERVED_TYPES = [\n 'bool',\n 'char',\n 'char16_t',\n 'char32_t',\n 'char8_t',\n 'double',\n 'float',\n 'int',\n 'long',\n 'short',\n 'void',\n 'wchar_t',\n 'unsigned',\n 'signed',\n 'const',\n 'static'\n ];\n\n const TYPE_HINTS = [\n 'any',\n 'auto_ptr',\n 'barrier',\n 'binary_semaphore',\n 'bitset',\n 'complex',\n 'condition_variable',\n 'condition_variable_any',\n 'counting_semaphore',\n 'deque',\n 'false_type',\n 'flat_map',\n 'flat_set',\n 'future',\n 'imaginary',\n 'initializer_list',\n 'istringstream',\n 'jthread',\n 'latch',\n 'lock_guard',\n 'multimap',\n 'multiset',\n 'mutex',\n 'optional',\n 'ostringstream',\n 'packaged_task',\n 'pair',\n 'promise',\n 'priority_queue',\n 'queue',\n 'recursive_mutex',\n 'recursive_timed_mutex',\n 'scoped_lock',\n 'set',\n 'shared_future',\n 'shared_lock',\n 'shared_mutex',\n 'shared_timed_mutex',\n 'shared_ptr',\n 'stack',\n 'string_view',\n 'stringstream',\n 'timed_mutex',\n 'thread',\n 'true_type',\n 'tuple',\n 'unique_lock',\n 'unique_ptr',\n 'unordered_map',\n 'unordered_multimap',\n 'unordered_multiset',\n 'unordered_set',\n 'variant',\n 'vector',\n 'weak_ptr',\n 'wstring',\n 'wstring_view'\n ];\n\n const FUNCTION_HINTS = [\n 'abort',\n 'abs',\n 'acos',\n 'apply',\n 'as_const',\n 'asin',\n 'atan',\n 'atan2',\n 'calloc',\n 'ceil',\n 'cerr',\n 'cin',\n 'clog',\n 'cos',\n 'cosh',\n 'cout',\n 'declval',\n 'endl',\n 'exchange',\n 'exit',\n 'exp',\n 'fabs',\n 'floor',\n 'fmod',\n 'forward',\n 'fprintf',\n 'fputs',\n 'free',\n 'frexp',\n 'fscanf',\n 'future',\n 'invoke',\n 'isalnum',\n 'isalpha',\n 'iscntrl',\n 'isdigit',\n 'isgraph',\n 'islower',\n 'isprint',\n 'ispunct',\n 'isspace',\n 'isupper',\n 'isxdigit',\n 'labs',\n 'launder',\n 'ldexp',\n 'log',\n 'log10',\n 'make_pair',\n 'make_shared',\n 'make_shared_for_overwrite',\n 'make_tuple',\n 'make_unique',\n 'malloc',\n 'memchr',\n 'memcmp',\n 'memcpy',\n 'memset',\n 'modf',\n 'move',\n 'pow',\n 'printf',\n 'putchar',\n 'puts',\n 'realloc',\n 'scanf',\n 'sin',\n 'sinh',\n 'snprintf',\n 'sprintf',\n 'sqrt',\n 'sscanf',\n 'std',\n 'stderr',\n 'stdin',\n 'stdout',\n 'strcat',\n 'strchr',\n 'strcmp',\n 'strcpy',\n 'strcspn',\n 'strlen',\n 'strncat',\n 'strncmp',\n 'strncpy',\n 'strpbrk',\n 'strrchr',\n 'strspn',\n 'strstr',\n 'swap',\n 'tan',\n 'tanh',\n 'terminate',\n 'to_underlying',\n 'tolower',\n 'toupper',\n 'vfprintf',\n 'visit',\n 'vprintf',\n 'vsprintf'\n ];\n\n const LITERALS = [\n 'NULL',\n 'false',\n 'nullopt',\n 'nullptr',\n 'true'\n ];\n\n // https://en.cppreference.com/w/cpp/keyword\n const BUILT_IN = [ '_Pragma' ];\n\n const CPP_KEYWORDS = {\n type: RESERVED_TYPES,\n keyword: RESERVED_KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_IN,\n _type_hints: TYPE_HINTS\n };\n\n const FUNCTION_DISPATCH = {\n className: 'function.dispatch',\n relevance: 0,\n keywords: {\n // Only for relevance, not highlighting.\n _hint: FUNCTION_HINTS },\n begin: regex.concat(\n /\\b/,\n `(?!${RESERVED_KEYWORDS.join('|')})`,\n hljs.IDENT_RE,\n regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n };\n\n const EXPRESSION_CONTAINS = [\n FUNCTION_DISPATCH,\n ...PREPROCESSORS,\n CPP_PRIMITIVE_TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS\n ];\n\n const EXPRESSION_CONTEXT = {\n // This mode covers expression context where we can't expect a function\n // definition and shouldn't highlight anything that looks like one:\n // `return some()`, `else if()`, `(x*sum(1, 2))`\n variants: [\n {\n begin: /=/,\n end: /;/\n },\n {\n begin: /\\(/,\n end: /\\)/\n },\n {\n beginKeywords: 'new throw return else',\n end: /;/\n }\n ],\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n relevance: 0\n }\n ]),\n relevance: 0\n };\n\n const FUNCTION_DECLARATION = {\n className: 'function',\n begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+){1,' + MAX_FUNCTION_TYPE_TOKENS + '}' + FUNCTION_TITLE,\n returnBegin: true,\n end: /[{;=]/,\n excludeEnd: true,\n keywords: CPP_KEYWORDS,\n illegal: /[^\\w\\s\\*&:<>.]/,\n contains: [\n { // to prevent it from being confused as the function title\n begin: DECLTYPE_AUTO_RE,\n keywords: CPP_KEYWORDS,\n relevance: 0\n },\n {\n begin: FUNCTION_TITLE,\n returnBegin: true,\n contains: [ TITLE_MODE ],\n relevance: 0\n },\n // needed because we do not have look-behind on the below rule\n // to prevent it from grabbing the final : in a :: pair\n {\n begin: /::/,\n relevance: 0\n },\n // initializers\n {\n begin: /:/,\n endsWithParent: true,\n contains: [\n STRINGS,\n NUMBERS\n ]\n },\n // allow for multiple declarations, e.g.:\n // extern void f(int), g(char);\n {\n relevance: 0,\n match: /,/\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES,\n // Count matching parentheses.\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n 'self',\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES\n ]\n }\n ]\n },\n CPP_PRIMITIVE_TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n ...PREPROCESSORS\n ]\n };\n\n return {\n name: 'C++',\n aliases: [\n 'cc',\n 'c++',\n 'h++',\n 'hpp',\n 'hh',\n 'hxx',\n 'cxx'\n ],\n keywords: CPP_KEYWORDS,\n illegal: '</',\n classNameAliases: { 'function.dispatch': 'built_in' },\n contains: [].concat(\n EXPRESSION_CONTEXT,\n FUNCTION_DECLARATION,\n FUNCTION_DISPATCH,\n EXPRESSION_CONTAINS,\n [\n ...PREPROCESSORS,\n { // containers: ie, `vector <int> rooms (9);`\n 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*<(?!<)',\n end: '>',\n keywords: CPP_KEYWORDS,\n contains: [\n 'self',\n CPP_PRIMITIVE_TYPES\n ]\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: CPP_KEYWORDS\n },\n {\n match: [\n // extra complexity to deal with `enum class` and `enum struct`\n /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n /\\s+/,\n /\\w+/\n ],\n className: {\n 1: 'keyword',\n 3: 'title.class'\n }\n }\n ])\n };\n}\n\nexport { cpp as default };\n","/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n const BUILT_IN_KEYWORDS = [\n 'bool',\n 'byte',\n 'char',\n 'decimal',\n 'delegate',\n 'double',\n 'dynamic',\n 'enum',\n 'float',\n 'int',\n 'long',\n 'nint',\n 'nuint',\n 'object',\n 'sbyte',\n 'short',\n 'string',\n 'ulong',\n 'uint',\n 'ushort'\n ];\n const FUNCTION_MODIFIERS = [\n 'public',\n 'private',\n 'protected',\n 'static',\n 'internal',\n 'protected',\n 'abstract',\n 'async',\n 'extern',\n 'override',\n 'unsafe',\n 'virtual',\n 'new',\n 'sealed',\n 'partial'\n ];\n const LITERAL_KEYWORDS = [\n 'default',\n 'false',\n 'null',\n 'true'\n ];\n const NORMAL_KEYWORDS = [\n 'abstract',\n 'as',\n 'base',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'do',\n 'else',\n 'event',\n 'explicit',\n 'extern',\n 'finally',\n 'fixed',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'namespace',\n 'new',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'record',\n 'ref',\n 'return',\n 'scoped',\n 'sealed',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'unchecked',\n 'unsafe',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while'\n ];\n const CONTEXTUAL_KEYWORDS = [\n 'add',\n 'alias',\n 'and',\n 'ascending',\n 'args',\n 'async',\n 'await',\n 'by',\n 'descending',\n 'dynamic',\n 'equals',\n 'file',\n 'from',\n 'get',\n 'global',\n 'group',\n 'init',\n 'into',\n 'join',\n 'let',\n 'nameof',\n 'not',\n 'notnull',\n 'on',\n 'or',\n 'orderby',\n 'partial',\n 'record',\n 'remove',\n 'required',\n 'scoped',\n 'select',\n 'set',\n 'unmanaged',\n 'value|0',\n 'var',\n 'when',\n 'where',\n 'with',\n 'yield'\n ];\n\n const KEYWORDS = {\n keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n built_in: BUILT_IN_KEYWORDS,\n literal: LITERAL_KEYWORDS\n };\n const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types\n // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types\n // `_` separators sit between digits, and may also follow the `0x`/`0b` prefix\n const DIGITS = '\\\\d(_*\\\\d)*';\n const INTEGER_SUFFIX = '([uU][lL]?|[lL][uU]?)?';\n const REAL_SUFFIX = '([fFdDmM]|[uU][lL]?|[lL][uU]?)?';\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b0[bB]_*[01](_*[01])*' + INTEGER_SUFFIX },\n { begin: '(-?)\\\\b0[xX]_*[a-fA-F0-9](_*[a-fA-F0-9])*' + INTEGER_SUFFIX },\n { begin: '(-?)(\\\\b' + DIGITS + '(\\\\.(' + DIGITS + ')?)?|\\\\.' + DIGITS + ')([eE][-+]?' + DIGITS + ')?' + REAL_SUFFIX }\n ],\n relevance: 0\n };\n const RAW_STRING = {\n className: 'string',\n begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n relevance: 1\n };\n const VERBATIM_STRING = {\n className: 'string',\n begin: '@\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ]\n };\n const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n const INTERPOLATED_STRING = {\n className: 'string',\n begin: /\\$\"/,\n end: '\"',\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n hljs.BACKSLASH_ESCAPE,\n SUBST_NO_LF\n ]\n };\n const INTERPOLATED_VERBATIM_STRING = {\n className: 'string',\n begin: /\\$@\"/,\n end: '\"',\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST\n ]\n };\n const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST_NO_LF\n ]\n });\n SUBST.contains = [\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ];\n SUBST_NO_LF.contains = [\n INTERPOLATED_VERBATIM_STRING_NO_LF,\n INTERPOLATED_STRING,\n VERBATIM_STRING_NO_LF,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n ];\n const STRING = { variants: [\n RAW_STRING,\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ] };\n\n const GENERIC_MODIFIER = {\n begin: \"<\",\n end: \">\",\n contains: [\n { beginKeywords: \"in out\" },\n TITLE_MODE\n ]\n };\n const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n const AT_IDENTIFIER = {\n // prevents expressions like `@class` from incorrect flagging\n // `class` as a keyword\n begin: \"@\" + hljs.IDENT_RE,\n relevance: 0\n };\n\n return {\n name: 'C#',\n aliases: [\n 'cs',\n 'c#'\n ],\n keywords: KEYWORDS,\n illegal: /::/,\n contains: [\n hljs.COMMENT(\n '///',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n variants: [\n {\n begin: '///',\n relevance: 0\n },\n { begin: '<!--|-->' },\n {\n begin: '</?',\n end: '>'\n }\n ]\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n },\n STRING,\n NUMBERS,\n {\n beginKeywords: 'class interface',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:,]/,\n contains: [\n { beginKeywords: \"where class\" },\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'record',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // [Attributes(\"\")]\n className: 'meta',\n begin: '^\\\\s*\\\\[(?=[\\\\w])',\n excludeBegin: true,\n end: '\\\\]',\n excludeEnd: true,\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/\n }\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new return throw await else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n end: /\\s*[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n // prevents these from being highlighted `title`\n {\n beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n relevance: 0\n },\n {\n begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n contains: [\n hljs.TITLE_MODE,\n GENERIC_MODIFIER\n ],\n relevance: 0\n },\n { match: /\\(\\)/ },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n STRING,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n AT_IDENTIFIER\n ]\n };\n}\n\nexport { csharp as default };\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n UNICODE_RANGE: {\n scope: 'number',\n begin: /\\b[Uu]\\+[0-9A-Fa-f][0-9A-Fa-f?]{0,5}(-[0-9A-Fa-f][0-9A-Fa-f]{0,5})?/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'anchor-name',\n 'animation',\n 'animation-composition',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-range',\n 'animation-range-end',\n 'animation-range-start',\n 'animation-timeline',\n 'animation-timing-function',\n 'appearance',\n 'aspect-ratio',\n 'backdrop-filter',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-position-x',\n 'background-position-y',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-align',\n 'box-decoration-break',\n 'box-direction',\n 'box-flex',\n 'box-flex-group',\n 'box-lines',\n 'box-ordinal-group',\n 'box-orient',\n 'box-pack',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'contain-intrinsic-block-size',\n 'contain-intrinsic-height',\n 'contain-intrinsic-inline-size',\n 'contain-intrinsic-size',\n 'contain-intrinsic-width',\n 'container',\n 'container-name',\n 'container-type',\n 'content',\n 'content-visibility',\n 'corner-bottom-left-shape',\n 'corner-bottom-right-shape',\n 'corner-shape',\n 'corner-top-left-shape',\n 'corner-top-right-shape',\n 'counter-increment',\n 'counter-reset',\n 'counter-set',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'cx',\n 'cy',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'field-sizing',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flood-color',\n 'flood-opacity',\n 'flow',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-optical-sizing',\n 'font-palette',\n 'font-size',\n 'font-size-adjust',\n 'font-smooth',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-synthesis-position',\n 'font-synthesis-small-caps',\n 'font-synthesis-style',\n 'font-synthesis-weight',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-emoji',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'forced-color-adjust',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphenate-character',\n 'hyphenate-limit-chars',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'initial-letter',\n 'initial-letter-align',\n 'inline-size',\n 'inset',\n 'inset-area',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'kerning',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'line-height-step',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-trim',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'masonry-auto-flow',\n 'math-depth',\n 'math-shift',\n 'math-style',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-anchor',\n 'overflow-block',\n 'overflow-clip-margin',\n 'overflow-inline',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'overlay',\n 'overscroll-behavior',\n 'overscroll-behavior-block',\n 'overscroll-behavior-inline',\n 'overscroll-behavior-x',\n 'overscroll-behavior-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'paint-order',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'place-content',\n 'place-items',\n 'place-self',\n 'pointer-events',\n 'position',\n 'position-anchor',\n 'position-visibility',\n 'print-color-adjust',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'ruby-align',\n 'ruby-position',\n 'scale',\n 'scroll-behavior',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scroll-timeline',\n 'scroll-timeline-axis',\n 'scroll-timeline-name',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-anchor',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-size-adjust',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'text-wrap',\n 'text-wrap-mode',\n 'text-wrap-style',\n 'timeline-scope',\n 'top',\n 'touch-action',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-behavior',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'unicode-range',\n 'user-modify',\n 'user-select',\n 'vector-effect',\n 'vertical-align',\n 'view-timeline',\n 'view-timeline-axis',\n 'view-timeline-inset',\n 'view-timeline-name',\n 'view-transition-name',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'white-space-collapse',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index',\n 'zoom'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n const regex = hljs.regex;\n const modes = MODES(hljs);\n const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n const AT_MODIFIERS = \"and or not only\";\n const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const STRINGS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ];\n\n return {\n name: 'CSS',\n case_insensitive: true,\n illegal: /[=|'\\$]/,\n keywords: { keyframePosition: \"from to\" },\n classNameAliases: {\n // for visual continuity with `tag {}` and because we\n // don't have a great class for this?\n keyframePosition: \"selector-tag\" },\n contains: [\n modes.BLOCK_COMMENT,\n VENDOR_PREFIX,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: /#[A-Za-z0-9_-]+/,\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.' + IDENT_RE,\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n variants: [\n { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n ]\n },\n // we may actually need this (12/2020)\n // { // pseudo-selector params\n // begin: /\\(/,\n // end: /\\)/,\n // contains: [ hljs.CSS_NUMBER_MODE ]\n // },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n // attribute values\n {\n begin: /:/,\n end: /[;}{]/,\n contains: [\n modes.BLOCK_COMMENT,\n modes.HEXCOLOR,\n modes.IMPORTANT,\n modes.CSS_NUMBER_MODE,\n modes.UNICODE_RANGE,\n ...STRINGS,\n // needed to highlight these as strings and to avoid issues with\n // illegal characters that might be inside urls that would trigger the\n // languages illegal stack\n {\n begin: /(url|data-uri)\\(/,\n end: /\\)/,\n relevance: 0, // from keywords\n keywords: { built_in: \"url data-uri\" },\n contains: [\n ...STRINGS,\n {\n className: \"string\",\n // any character other than `)` as in `url()` will be the start\n // of a string, which ends with `)` (from the parent mode)\n begin: /[^)]/,\n endsWithParent: true,\n excludeEnd: true\n }\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n },\n {\n begin: regex.lookahead(/@/),\n end: '[{;]',\n relevance: 0,\n illegal: /:/, // break on Less variables @var: ...\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/,\n endsWithParent: true,\n excludeEnd: true,\n relevance: 0,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n ...STRINGS,\n modes.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n }\n ]\n };\n}\n\nexport { css as default };\n","/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n const LITERALS = [\n \"true\",\n \"false\",\n \"iota\",\n \"nil\"\n ];\n const BUILT_INS = [\n \"append\",\n \"cap\",\n \"close\",\n \"complex\",\n \"copy\",\n \"imag\",\n \"len\",\n \"make\",\n \"new\",\n \"panic\",\n \"print\",\n \"println\",\n \"real\",\n \"recover\",\n \"delete\"\n ];\n const TYPES = [\n \"bool\",\n \"byte\",\n \"complex64\",\n \"complex128\",\n \"error\",\n \"float32\",\n \"float64\",\n \"int8\",\n \"int16\",\n \"int32\",\n \"int64\",\n \"string\",\n \"uint8\",\n \"uint16\",\n \"uint32\",\n \"uint64\",\n \"int\",\n \"uint\",\n \"uintptr\",\n \"rune\"\n ];\n const KWS = [\n \"break\",\n \"case\",\n \"chan\",\n \"const\",\n \"continue\",\n \"default\",\n \"defer\",\n \"else\",\n \"fallthrough\",\n \"for\",\n \"func\",\n \"go\",\n \"goto\",\n \"if\",\n \"import\",\n \"interface\",\n \"map\",\n \"package\",\n \"range\",\n \"return\",\n \"select\",\n \"struct\",\n \"switch\",\n \"type\",\n \"var\",\n ];\n const KEYWORDS = {\n keyword: KWS,\n type: TYPES,\n literal: LITERALS,\n built_in: BUILT_INS\n };\n return {\n name: 'Go',\n aliases: [ 'golang' ],\n keywords: KEYWORDS,\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n variants: [\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n begin: '`',\n end: '`'\n }\n ]\n },\n {\n className: 'number',\n variants: [\n {\n match: /-?\\b0[xX]\\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\\d(_?\\d)*i?/, // hex without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b0[xX](_?[a-fA-F0-9])+((\\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\\d(_?\\d)*)?i?/, // hex with a present digit before . (making a digit afterwards optional)\n relevance: 0\n },\n {\n match: /-?\\b0[oO](_?[0-7])*i?/, // leading 0o octal\n relevance: 0\n },\n {\n match: /-?\\b0[bB](_?[01])*i?/, // leading 0b binary\n relevance: 0\n },\n {\n match: /-?\\.\\d(_?\\d)*([eE][+-]?\\d(_?\\d)*)?i?/, // decimal without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b\\d(_?\\d)*(\\.(\\d(_?\\d)*)?)?([eE][+-]?\\d(_?\\d)*)?i?/, // decimal with a present digit before . (making a digit afterwards optional)\n relevance: 0\n }\n ]\n },\n { begin: /:=/ // relevance booster\n },\n {\n className: 'function',\n beginKeywords: 'func',\n end: '\\\\s*(\\\\{|$)',\n excludeEnd: true,\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n illegal: /[\"']/\n }\n ]\n }\n ]\n };\n}\n\nexport { go as default };\n","/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n const regex = hljs.regex;\n const NUMBERS = {\n className: 'number',\n relevance: 0,\n variants: [\n { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n { begin: hljs.NUMBER_RE }\n ]\n };\n const COMMENTS = hljs.COMMENT();\n COMMENTS.variants = [\n {\n begin: /;/,\n end: /$/\n },\n {\n begin: /#/,\n end: /$/\n }\n ];\n const VARIABLES = {\n className: 'variable',\n variants: [\n { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n { begin: /\\$\\{(.*?)\\}/ }\n ]\n };\n const LITERALS = {\n className: 'literal',\n begin: /\\bon|off|true|false|yes|no\\b/\n };\n const STRINGS = {\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: \"'''\",\n end: \"'''\",\n relevance: 10\n },\n {\n begin: '\"\"\"',\n end: '\"\"\"',\n relevance: 10\n },\n {\n begin: '\"',\n end: '\"'\n },\n {\n begin: \"'\",\n end: \"'\"\n }\n ]\n };\n const ARRAY = {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n COMMENTS,\n LITERALS,\n VARIABLES,\n STRINGS,\n NUMBERS,\n 'self'\n ],\n relevance: 0\n };\n\n const BARE_KEY = /[A-Za-z0-9_-]+/;\n const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n const ANY_KEY = regex.either(\n BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n );\n const DOTTED_KEY = regex.concat(\n ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n regex.lookahead(/\\s*=\\s*[^#\\s]/)\n );\n\n return {\n name: 'TOML, also INI',\n aliases: [ 'toml' ],\n case_insensitive: true,\n illegal: /\\S/,\n contains: [\n COMMENTS,\n {\n className: 'section',\n begin: /\\[+/,\n end: /\\]+/\n },\n {\n begin: DOTTED_KEY,\n className: 'attr',\n starts: {\n end: /$/,\n contains: [\n COMMENTS,\n ARRAY,\n LITERALS,\n VARIABLES,\n STRINGS,\n NUMBERS\n ]\n }\n }\n ]\n };\n}\n\nexport { ini as default };\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n if (depth === -1) return \"\";\n\n return re.replace(substitution, _ => {\n return recurRegex(re, substitution, depth - 1);\n });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n const regex = hljs.regex;\n\n // A Java identifier consisting of letters, digits, underscore or dollar sign, not beginning with a digit\n const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n\n // Optional 1..n pairs of square brackets identifying an array type\n const ARRAY_BRACKETS_OPTIONAL_RE = '(?:(?:\\\\s*\\\\[\\\\s*])+)?';\n\n // A simple Java type: a type name, optionally followed by type arguments and/or array brackets\n // '<@@@>' is replaced with the pattern for optional type arguments by recurRegex below.\n const SIMPLE_TYPE_RE = JAVA_IDENT_RE + '<@@@>' + ARRAY_BRACKETS_OPTIONAL_RE;\n\n // A bounded (? extends Number) or unbounded (?) wildcard type\n const WILDCARD_TYPE_RE = '\\\\?(?:\\\\s+(?:extends|super)\\\\s+' + SIMPLE_TYPE_RE + ')?';\n\n // A Java type argument, consisting of a wildcard or simple type\n const TYPE_ARG_RE = '(?:' + WILDCARD_TYPE_RE + '|' + SIMPLE_TYPE_RE + ')';\n\n // Pattern for optional generic type arguments in angle brackets with up to 2 levels of nested type arguments\n const TYPE_ARGS_OPTIONAL_RE = recurRegex('(?:\\\\s*<\\\\s*' + TYPE_ARG_RE + '(?:\\\\s*,\\\\s*' + TYPE_ARG_RE + ')*\\\\s*>)?',\n /<@@@>/g, 2);\n\n const MAIN_KEYWORDS = [\n 'synchronized',\n 'abstract',\n 'private',\n 'var',\n 'static',\n 'if',\n 'const ',\n 'for',\n 'while',\n 'strictfp',\n 'finally',\n 'protected',\n 'import',\n 'native',\n 'final',\n 'void',\n 'enum',\n 'else',\n 'break',\n 'transient',\n 'catch',\n 'instanceof',\n 'volatile',\n 'case',\n 'assert',\n 'package',\n 'default',\n 'public',\n 'try',\n 'switch',\n 'continue',\n 'throws',\n 'protected',\n 'public',\n 'private',\n 'module',\n 'requires',\n 'exports',\n 'do',\n 'sealed',\n 'yield',\n 'permits',\n 'goto',\n 'when'\n ];\n\n const BUILT_INS = [\n 'super',\n 'this'\n ];\n\n const LITERALS = [\n 'false',\n 'true',\n 'null'\n ];\n\n const TYPES = [\n 'char',\n 'boolean',\n 'long',\n 'float',\n 'int',\n 'byte',\n 'short',\n 'double'\n ];\n\n const KEYWORDS = {\n keyword: MAIN_KEYWORDS,\n literal: LITERALS,\n type: TYPES,\n built_in: BUILT_INS\n };\n\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + JAVA_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [ \"self\" ] // allow nested () inside our annotation\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n endsParent: true\n };\n\n return {\n name: 'Java',\n aliases: [ 'jsp' ],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n // relevance boost\n {\n begin: /import java\\.[a-z]+\\./,\n keywords: \"import\",\n relevance: 2\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n begin: /\"\"\"/,\n end: /\"\"\"/,\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n match: [\n /\\b(?:class|interface|enum|extends|implements|new)/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n // Exceptions for hyphenated keywords\n match: /non-sealed/,\n scope: \"keyword\"\n },\n {\n // Expression keywords prevent keyword-led expressions from being\n // recognized as variable or method declarations.\n beginKeywords: 'new throw return else yield assert',\n relevance: 0\n },\n {\n begin: [\n JAVA_IDENT_RE,\n regex.concat(TYPE_ARGS_OPTIONAL_RE, ARRAY_BRACKETS_OPTIONAL_RE, /\\s+/),\n JAVA_IDENT_RE,\n ARRAY_BRACKETS_OPTIONAL_RE,\n /\\s*/,\n /=(?!=)/\n ],\n className: {\n 1: \"type\",\n 3: \"variable\",\n 6: \"operator\"\n }\n },\n {\n begin: [\n /record/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n contains: [\n PARAMS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n begin: [\n JAVA_IDENT_RE,\n regex.concat(TYPE_ARGS_OPTIONAL_RE, ARRAY_BRACKETS_OPTIONAL_RE, /\\s+/),\n JAVA_IDENT_RE,\n /\\s*(?=\\()/\n ],\n className: {\n 1: \"type\",\n 3: \"title.function\"\n },\n keywords: KEYWORDS,\n contains: [\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n ANNOTATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMERIC,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n NUMERIC,\n ANNOTATION\n ]\n };\n}\n\nexport { java as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"self\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\",\n \"await\",\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-Za-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","const EXTENDED_NUMBER_RE = '([-+]?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)|NaN|[-+]?Infinity'; // 0x..., 0..., decimal, float\n\nconst EXTENDED_NUMBER_MODE = {\n scope: 'number',\n match: EXTENDED_NUMBER_RE,\n relevance: 0\n};\n\n/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nWebsites: http://www.json.org, https://www.json5.org\nCategory: common, protocols, web\n*/\n\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /((\"(\\\\.|[^\\\\\"\\r\\n])*\")|('(\\\\.|[^\\\\'\\r\\n])*'))(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc', 'json5'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n EXTENDED_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n const regex = hljs.regex;\n const INLINE_HTML = {\n begin: /<\\/?[A-Za-z_]/,\n end: '>',\n subLanguage: 'xml',\n relevance: 0\n };\n // https://spec.commonmark.org/0.31.2/#thematic-breaks\n // three or more `-`, `*` or `_`, all the same character, optionally\n // separated and followed by spaces or tabs, and nothing else on the line\n const HORIZONTAL_RULE = { match: /^ {0,3}([-*_])[ \\t]*(?:\\1[ \\t]*){2,}$/ };\n const CODE = {\n className: 'code',\n variants: [\n // TODO: fix to allow these to work with sublanguage also\n { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n // needed to allow markdown as a sublanguage to work\n {\n begin: '```',\n end: '```+[ ]*$'\n },\n {\n begin: '~~~',\n end: '~~~+[ ]*$'\n },\n { begin: '`.+?`' },\n {\n begin: '(?=^( {4}|\\\\t))',\n // use contains to gobble up multiple lines to allow the block to be whatever size\n // but only have a single open/close tag vs one per line\n contains: [\n {\n begin: '^( {4}|\\\\t)',\n end: '(\\\\n)$'\n }\n ],\n relevance: 0\n }\n ]\n };\n const LIST = {\n className: 'bullet',\n begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n end: '\\\\s+',\n excludeEnd: true\n };\n const LINK_REFERENCE = {\n begin: /^\\[[^\\n]+\\]:/,\n returnBegin: true,\n contains: [\n {\n className: 'symbol',\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'link',\n begin: /:\\s*/,\n end: /$/,\n excludeBegin: true\n }\n ]\n };\n const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n const LINK = {\n variants: [\n // too much like nested array access in so many languages\n // to have any real relevance\n {\n begin: /\\[.+?\\]\\[.*?\\]/,\n relevance: 0\n },\n // popular internet URLs\n {\n begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n relevance: 2\n },\n {\n begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n relevance: 2\n },\n // relative urls\n {\n begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n relevance: 1\n },\n // whatever else, lower relevance (might not be a link at all)\n {\n begin: /\\[.*?\\]\\(.*?\\)/,\n relevance: 0\n }\n ],\n returnBegin: true,\n contains: [\n {\n // empty strings for alt or link text\n match: /\\[(?=\\])/ },\n {\n className: 'string',\n relevance: 0,\n begin: '\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n returnEnd: true\n },\n {\n className: 'link',\n relevance: 0,\n begin: '\\\\]\\\\(',\n end: '\\\\)',\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'symbol',\n relevance: 0,\n begin: '\\\\]\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n const BOLD = {\n className: 'strong',\n contains: [], // defined later\n variants: [\n {\n begin: /_{2}(?!\\s)/,\n end: /_{2}/\n },\n {\n begin: /\\*{2}(?!\\s)/,\n end: /\\*{2}/\n }\n ]\n };\n const ITALIC = {\n className: 'emphasis',\n contains: [], // defined later\n variants: [\n {\n begin: /\\*(?![*\\s])/,\n end: /\\*/\n },\n {\n begin: /_(?![_\\s])/,\n end: /_/,\n relevance: 0\n }\n ]\n };\n\n // 3 level deep nesting is not allowed because it would create confusion\n // in cases like `***testing***` because where we don't know if the last\n // `***` is starting a new bold/italic or finishing the last one\n const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n let CONTAINABLE = [\n INLINE_HTML,\n LINK\n ];\n\n [\n BOLD,\n ITALIC,\n BOLD_WITHOUT_ITALIC,\n ITALIC_WITHOUT_BOLD\n ].forEach(m => {\n m.contains = m.contains.concat(CONTAINABLE);\n });\n\n CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n const HEADER = {\n className: 'section',\n variants: [\n {\n begin: '^#{1,6}',\n end: '$',\n contains: CONTAINABLE\n },\n {\n begin: '(?=^.+?\\\\n[=-]{2,}$)',\n contains: [\n { begin: '^[=-]*$' },\n {\n begin: '^',\n end: \"\\\\n\",\n contains: CONTAINABLE\n }\n ]\n }\n ]\n };\n\n const BLOCKQUOTE = {\n className: 'quote',\n begin: '^>\\\\s+',\n contains: CONTAINABLE,\n end: '$'\n };\n\n const ENTITY = {\n //https://spec.commonmark.org/0.31.2/#entity-references\n scope: 'literal',\n match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/\n };\n\n return {\n name: 'Markdown',\n aliases: [\n 'md',\n 'mkdown',\n 'mkd'\n ],\n contains: [\n HEADER,\n INLINE_HTML,\n LIST,\n // must come before BOLD/ITALIC so that a `***` or `___` thematic break\n // isn't mistaken for the start of bold text\n HORIZONTAL_RULE,\n BOLD,\n ITALIC,\n BLOCKQUOTE,\n CODE,\n LINK,\n LINK_REFERENCE,\n ENTITY\n ]\n };\n}\n\nexport { markdown as default };\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'lazy',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'aiter',\n 'all',\n 'anext',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozendict',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'sentinel',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fFtT][rR]|[rR][fFtT]|[fFtT])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nexport { python as default };\n","/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\n\nfunction rust(hljs) {\n const regex = hljs.regex;\n // ============================================\n // Added to support the r# keyword, which is a raw identifier in Rust.\n const RAW_IDENTIFIER = /(r#)?/;\n const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);\n const IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);\n // ============================================\n const FUNCTION_INVOKE = {\n scope: \"title.function.invoke\",\n relevance: 0,\n begin: regex.concat(\n /\\b/,\n /(?!(?:let|for|while|if|else|match)\\b)/,\n IDENT_RE,\n regex.lookahead(/\\s*\\(/))\n };\n const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(16|32|64|128))\\?';\n const KEYWORDS = [\n \"abstract\",\n \"as\",\n \"async\",\n \"await\",\n \"become\",\n \"box\",\n \"break\",\n \"const\",\n \"continue\",\n \"crate\",\n \"do\",\n \"dyn\",\n \"else\",\n \"enum\",\n \"extern\",\n \"false\",\n \"final\",\n \"fn\",\n \"for\",\n \"if\",\n \"impl\",\n \"in\",\n \"let\",\n \"loop\",\n \"macro\",\n \"match\",\n \"mod\",\n \"move\",\n \"mut\",\n \"override\",\n \"priv\",\n \"pub\",\n \"raw\",\n \"ref\",\n \"return\",\n \"self\",\n \"Self\",\n \"static\",\n \"struct\",\n \"super\",\n \"trait\",\n \"true\",\n \"try\",\n \"type\",\n \"typeof\",\n \"union\",\n \"unsafe\",\n \"unsized\",\n \"use\",\n \"virtual\",\n \"where\",\n \"while\",\n \"yield\"\n ];\n const LITERALS = [\n \"true\",\n \"false\",\n \"Some\",\n \"None\",\n \"Ok\",\n \"Err\"\n ];\n const BUILTINS = [\n // functions\n 'drop ',\n // traits\n \"Copy\",\n \"Send\",\n \"Sized\",\n \"Sync\",\n \"Drop\",\n \"Fn\",\n \"FnMut\",\n \"FnOnce\",\n \"ToOwned\",\n \"Clone\",\n \"Debug\",\n \"PartialEq\",\n \"PartialOrd\",\n \"Eq\",\n \"Ord\",\n \"AsRef\",\n \"AsMut\",\n \"Into\",\n \"From\",\n \"Default\",\n \"Iterator\",\n \"Extend\",\n \"IntoIterator\",\n \"DoubleEndedIterator\",\n \"ExactSizeIterator\",\n \"SliceConcatExt\",\n \"ToString\",\n // macros\n \"assert!\",\n \"assert_eq!\",\n \"bitflags!\",\n \"bytes!\",\n \"cfg!\",\n \"col!\",\n \"concat!\",\n \"concat_idents!\",\n \"debug_assert!\",\n \"debug_assert_eq!\",\n \"env!\",\n \"eprintln!\",\n \"panic!\",\n \"file!\",\n \"format!\",\n \"format_args!\",\n \"include_bytes!\",\n \"include_str!\",\n \"line!\",\n \"local_data_key!\",\n \"module_path!\",\n \"option_env!\",\n \"print!\",\n \"println!\",\n \"select!\",\n \"stringify!\",\n \"try!\",\n \"unimplemented!\",\n \"unreachable!\",\n \"vec!\",\n \"write!\",\n \"writeln!\",\n \"macro_rules!\",\n \"assert_ne!\",\n \"debug_assert_ne!\"\n ];\n const TYPES = [\n \"i8\",\n \"i16\",\n \"i32\",\n \"i64\",\n \"i128\",\n \"isize\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"u64\",\n \"u128\",\n \"usize\",\n \"f16\",\n \"f32\",\n \"f64\",\n \"f128\",\n \"str\",\n \"char\",\n \"bool\",\n \"Box\",\n \"Option\",\n \"Result\",\n \"String\",\n \"Vec\"\n ];\n return {\n name: 'Rust',\n aliases: [ 'rs' ],\n keywords: {\n $pattern: hljs.IDENT_RE + '!?',\n type: TYPES,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILTINS\n },\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n begin: /b?\"/,\n illegal: null\n }),\n {\n scope: 'symbol',\n // negative lookahead to avoid matching `'`\n begin: /'[a-zA-Z_][a-zA-Z0-9_]*(?!')/\n },\n {\n scope: 'string',\n variants: [\n { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n {\n begin: /b?'/,\n end: /'/,\n contains: [\n {\n scope: \"char.escape\",\n match: /\\\\('|\"|\\\\|\\w|x\\w{2}|u\\w{4}|U\\w{8})/\n }\n ]\n }\n ]\n },\n {\n scope: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n + NUMBER_SUFFIX }\n ],\n relevance: 0\n },\n {\n begin: [\n /\\bsafe/,\n /\\s+/,\n /extern/,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"keyword\",\n }\n },\n {\n begin: [\n /fn/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n }\n },\n {\n scope: 'meta',\n begin: '#!?\\\\[',\n end: '\\\\]',\n contains: [\n {\n scope: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE\n ]\n }\n ]\n },\n {\n begin: [\n /let/,\n /\\s+/,\n /(?:mut\\s+)?/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"keyword\",\n 4: \"variable\"\n }\n },\n // must come before impl/for rule later\n {\n begin: [\n /for/,\n /\\s+/,\n UNDERSCORE_IDENT_RE,\n /\\s+/,\n /in/\n ],\n scope: {\n 1: \"keyword\",\n 3: \"variable\",\n 5: \"keyword\"\n }\n },\n {\n begin: [\n /type/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: [\n /(?:trait|enum|struct|union|impl|for)/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: {\n keyword: \"Self\",\n built_in: BUILTINS,\n type: TYPES\n }\n },\n {\n scope: \"punctuation\",\n begin: '->'\n },\n FUNCTION_INVOKE\n ]\n };\n}\n\nexport { rust as default };\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n - PostgreSQL and PL/pgSQL - core\n - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n const regex = hljs.regex;\n const COMMENT_MODE = hljs.COMMENT('--', '$');\n const STRING = {\n scope: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [ { match: /''/ } ]\n }\n ]\n };\n const QUOTED_IDENTIFIER = {\n begin: /\"/,\n end: /\"/,\n contains: [ { match: /\"\"/ } ]\n };\n\n const LITERALS = [\n \"true\",\n \"false\",\n // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n // \"null\",\n \"unknown\"\n ];\n\n const MULTI_WORD_TYPES = [\n \"double precision\",\n \"large object\",\n \"with timezone\",\n \"without timezone\"\n ];\n\n const TYPES = [\n 'bigint',\n 'binary',\n 'blob',\n 'boolean',\n 'char',\n 'character',\n 'clob',\n 'date',\n 'dec',\n 'decfloat',\n 'decimal',\n 'float',\n 'int',\n 'integer',\n 'interval',\n 'nchar',\n 'nclob',\n 'national',\n 'numeric',\n 'real',\n 'row',\n 'smallint',\n 'time',\n 'timestamp',\n 'varchar',\n 'varying', // modifier (character varying)\n 'varbinary'\n ];\n\n const NON_RESERVED_WORDS = [\n \"add\",\n \"asc\",\n \"collation\",\n \"desc\",\n \"final\",\n \"first\",\n \"last\",\n \"view\"\n ];\n\n // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n const RESERVED_WORDS = [\n \"abs\",\n \"acos\",\n \"all\",\n \"allocate\",\n \"alter\",\n \"and\",\n \"any\",\n \"are\",\n \"array\",\n \"array_agg\",\n \"array_max_cardinality\",\n \"as\",\n \"asensitive\",\n \"asin\",\n \"asymmetric\",\n \"at\",\n \"atan\",\n \"atomic\",\n \"authorization\",\n \"avg\",\n \"begin\",\n \"begin_frame\",\n \"begin_partition\",\n \"between\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"both\",\n \"by\",\n \"call\",\n \"called\",\n \"cardinality\",\n \"cascaded\",\n \"case\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"char\",\n \"char_length\",\n \"character\",\n \"character_length\",\n \"check\",\n \"classifier\",\n \"clob\",\n \"close\",\n \"coalesce\",\n \"collate\",\n \"collect\",\n \"column\",\n \"commit\",\n \"condition\",\n \"connect\",\n \"constraint\",\n \"contains\",\n \"convert\",\n \"copy\",\n \"corr\",\n \"corresponding\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"create\",\n \"cross\",\n \"cube\",\n \"cume_dist\",\n \"current\",\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_row\",\n \"current_schema\",\n \"current_time\",\n \"current_timestamp\",\n \"current_path\",\n \"current_role\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"cursor\",\n \"cycle\",\n \"date\",\n \"day\",\n \"deallocate\",\n \"dec\",\n \"decimal\",\n \"decfloat\",\n \"declare\",\n \"default\",\n \"define\",\n \"delete\",\n \"dense_rank\",\n \"deref\",\n \"describe\",\n \"deterministic\",\n \"disconnect\",\n \"distinct\",\n \"double\",\n \"drop\",\n \"dynamic\",\n \"each\",\n \"element\",\n \"else\",\n \"empty\",\n \"end\",\n \"end_frame\",\n \"end_partition\",\n \"end-exec\",\n \"equals\",\n \"escape\",\n \"every\",\n \"except\",\n \"exec\",\n \"execute\",\n \"exists\",\n \"exp\",\n \"external\",\n \"extract\",\n \"false\",\n \"fetch\",\n \"filter\",\n \"first_value\",\n \"float\",\n \"floor\",\n \"for\",\n \"foreign\",\n \"frame_row\",\n \"free\",\n \"from\",\n \"full\",\n \"function\",\n \"fusion\",\n \"get\",\n \"global\",\n \"grant\",\n \"group\",\n \"grouping\",\n \"groups\",\n \"having\",\n \"hold\",\n \"hour\",\n \"identity\",\n \"in\",\n \"indicator\",\n \"initial\",\n \"inner\",\n \"inout\",\n \"insensitive\",\n \"insert\",\n \"int\",\n \"integer\",\n \"intersect\",\n \"intersection\",\n \"interval\",\n \"into\",\n \"is\",\n \"join\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"language\",\n \"large\",\n \"last_value\",\n \"lateral\",\n \"lead\",\n \"leading\",\n \"left\",\n \"like\",\n \"like_regex\",\n \"listagg\",\n \"ln\",\n \"local\",\n \"localtime\",\n \"localtimestamp\",\n \"log\",\n \"log10\",\n \"lower\",\n \"match\",\n \"match_number\",\n \"match_recognize\",\n \"matches\",\n \"max\",\n \"member\",\n \"merge\",\n \"method\",\n \"min\",\n \"minute\",\n \"mod\",\n \"modifies\",\n \"module\",\n \"month\",\n \"multiset\",\n \"national\",\n \"natural\",\n \"nchar\",\n \"nclob\",\n \"new\",\n \"no\",\n \"none\",\n \"normalize\",\n \"not\",\n \"nth_value\",\n \"ntile\",\n \"null\",\n \"nullif\",\n \"numeric\",\n \"octet_length\",\n \"occurrences_regex\",\n \"of\",\n \"offset\",\n \"old\",\n \"omit\",\n \"on\",\n \"one\",\n \"only\",\n \"open\",\n \"or\",\n \"order\",\n \"out\",\n \"outer\",\n \"over\",\n \"overlaps\",\n \"overlay\",\n \"parameter\",\n \"partition\",\n \"pattern\",\n \"per\",\n \"percent\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"period\",\n \"portion\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"precedes\",\n \"precision\",\n \"prepare\",\n \"primary\",\n \"procedure\",\n \"ptf\",\n \"range\",\n \"rank\",\n \"reads\",\n \"real\",\n \"recursive\",\n \"ref\",\n \"references\",\n \"referencing\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"release\",\n \"result\",\n \"return\",\n \"returns\",\n \"revoke\",\n \"right\",\n \"rollback\",\n \"rollup\",\n \"row\",\n \"row_number\",\n \"rows\",\n \"running\",\n \"savepoint\",\n \"scope\",\n \"scroll\",\n \"search\",\n \"second\",\n \"seek\",\n \"select\",\n \"sensitive\",\n \"session_user\",\n \"set\",\n \"show\",\n \"similar\",\n \"sin\",\n \"sinh\",\n \"skip\",\n \"smallint\",\n \"some\",\n \"specific\",\n \"specifictype\",\n \"sql\",\n \"sqlexception\",\n \"sqlstate\",\n \"sqlwarning\",\n \"sqrt\",\n \"start\",\n \"static\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"submultiset\",\n \"subset\",\n \"substring\",\n \"substring_regex\",\n \"succeeds\",\n \"sum\",\n \"symmetric\",\n \"system\",\n \"system_time\",\n \"system_user\",\n \"table\",\n \"tablesample\",\n \"tan\",\n \"tanh\",\n \"then\",\n \"time\",\n \"timestamp\",\n \"timezone_hour\",\n \"timezone_minute\",\n \"to\",\n \"trailing\",\n \"translate\",\n \"translate_regex\",\n \"translation\",\n \"treat\",\n \"trigger\",\n \"trim\",\n \"trim_array\",\n \"true\",\n \"truncate\",\n \"uescape\",\n \"union\",\n \"unique\",\n \"unknown\",\n \"unnest\",\n \"update\",\n \"upper\",\n \"user\",\n \"using\",\n \"value\",\n \"values\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"varbinary\",\n \"varchar\",\n \"varying\",\n \"versioning\",\n \"when\",\n \"whenever\",\n \"where\",\n \"width_bucket\",\n \"window\",\n \"with\",\n \"within\",\n \"without\",\n \"year\",\n ];\n\n // these are reserved words we have identified to be functions\n // and should only be highlighted in a dispatch-like context\n // ie, array_agg(...), etc.\n const RESERVED_FUNCTIONS = [\n \"abs\",\n \"acos\",\n \"array_agg\",\n \"asin\",\n \"atan\",\n \"avg\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"coalesce\",\n \"corr\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"cume_dist\",\n \"dense_rank\",\n \"deref\",\n \"element\",\n \"exp\",\n \"extract\",\n \"first_value\",\n \"floor\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"last_value\",\n \"lead\",\n \"listagg\",\n \"ln\",\n \"log\",\n \"log10\",\n \"lower\",\n \"max\",\n \"min\",\n \"mod\",\n \"nth_value\",\n \"ntile\",\n \"nullif\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"rank\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"row_number\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"substring\",\n \"substring_regex\",\n \"sum\",\n \"tan\",\n \"tanh\",\n \"translate\",\n \"translate_regex\",\n \"treat\",\n \"trim\",\n \"trim_array\",\n \"unnest\",\n \"upper\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"width_bucket\",\n ];\n\n // these functions can\n const POSSIBLE_WITHOUT_PARENS = [\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_schema\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"session_user\",\n \"system_time\",\n \"system_user\",\n \"current_time\",\n \"localtime\",\n \"current_timestamp\",\n \"localtimestamp\"\n ];\n\n // those exist to boost relevance making these very\n // \"SQL like\" keyword combos worth +1 extra relevance\n const COMBOS = [\n \"create table\",\n \"insert into\",\n \"primary key\",\n \"foreign key\",\n \"not null\",\n \"alter table\",\n \"add constraint\",\n \"grouping sets\",\n \"on overflow\",\n \"character set\",\n \"respect nulls\",\n \"ignore nulls\",\n \"nulls first\",\n \"nulls last\",\n \"depth first\",\n \"breadth first\"\n ];\n\n const FUNCTIONS = RESERVED_FUNCTIONS;\n\n const KEYWORDS = [\n ...RESERVED_WORDS,\n ...NON_RESERVED_WORDS\n ].filter((keyword) => {\n return !RESERVED_FUNCTIONS.includes(keyword);\n });\n\n const VARIABLE = {\n scope: \"variable\",\n match: /@[a-z0-9][a-z0-9_]*/,\n };\n\n const OPERATOR = {\n scope: \"operator\",\n match: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n relevance: 0,\n };\n\n const FUNCTION_CALL = {\n match: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n relevance: 0,\n keywords: { built_in: FUNCTIONS }\n };\n\n // turns a multi-word keyword combo into a regex that doesn't\n // care about extra whitespace etc.\n // input: \"START QUERY\"\n // output: /\\bSTART\\s+QUERY\\b/\n function kws_to_regex(list) {\n return regex.concat(\n /\\b/,\n regex.either(...list.map((kw) => {\n return kw.replace(/\\s+/, \"\\\\s+\")\n })),\n /\\b/\n )\n }\n\n const MULTI_WORD_KEYWORDS = {\n scope: \"keyword\",\n match: kws_to_regex(COMBOS),\n relevance: 0,\n };\n\n // keywords with less than 3 letters are reduced in relevancy\n function reduceRelevancy(list, {\n exceptions, when\n } = {}) {\n const qualifyFn = when;\n exceptions = exceptions || [];\n return list.map((item) => {\n if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n return item;\n } else if (qualifyFn(item)) {\n return `${item}|0`;\n } else {\n return item;\n }\n });\n }\n\n return {\n name: 'SQL',\n case_insensitive: true,\n // does not include {} or HTML tags `</`\n illegal: /[{}]|<\\//,\n keywords: {\n $pattern: /\\b[\\w\\.]+/,\n keyword:\n reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n literal: LITERALS,\n type: TYPES,\n built_in: POSSIBLE_WITHOUT_PARENS\n },\n contains: [\n {\n scope: \"type\",\n match: kws_to_regex(MULTI_WORD_TYPES)\n },\n MULTI_WORD_KEYWORDS,\n FUNCTION_CALL,\n VARIABLE,\n STRING,\n QUOTED_IDENTIFIER,\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n OPERATOR\n ]\n };\n}\n\nexport { sql as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"self\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\",\n \"await\",\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-Za-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const regex = hljs.regex;\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n \"any\",\n \"void\",\n \"number\",\n \"boolean\",\n \"string\",\n \"object\",\n \"never\",\n \"symbol\",\n \"bigint\",\n \"unknown\"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n };\n const INTERFACE = {\n beginKeywords: 'interface',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: 'interface extends',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use strict['\"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n \"type\",\n // \"namespace\",\n \"interface\",\n \"public\",\n \"private\",\n \"protected\",\n \"implements\",\n \"declare\",\n \"abstract\",\n \"readonly\",\n \"enum\",\n \"override\",\n \"satisfies\"\n ];\n /*\n namespace is a TS keyword but it's fine to use it as a variable name too.\n const message = 'foo';\n const namespace = 'bar';\n */\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n const DECORATOR = {\n className: 'meta',\n begin: '@' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n // take default attr rule and extend it to support optionals\n const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n ATTRIBUTE_HIGHLIGHT,\n { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n );\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // Add the optional property assignment highlighting for objects or classes\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: 'TypeScript',\n aliases: [\n 'ts',\n 'tsx',\n 'mts',\n 'cts'\n ]\n });\n\n return tsLanguage;\n}\n\nexport { typescript as default };\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: 'css'\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: 'javascript'\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n","/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n const LITERALS = 'true false yes no null';\n\n // YAML spec allows non-reserved URI characters in tags.\n const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n // Define keys as starting with a word character\n // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n // ...and ending with a colon followed immediately by a space, tab or newline.\n // The YAML spec allows for much more than this, but this covers most use-cases.\n const KEY = {\n className: 'attr',\n variants: [\n // added brackets support and special char support\n { begin: /[\\w*@][\\w*@ :()\\./-]*:(?=[ \\t]|$)/ },\n { // double quoted keys - with brackets and special char support\n begin: /\"[\\w*@][\\w*@ :()\\./-]*\":(?=[ \\t]|$)/ },\n { // single quoted keys - with brackets and special char support\n begin: /'[\\w*@][\\w*@ :()\\./-]*':(?=[ \\t]|$)/ },\n ]\n };\n \n const TEMPLATE_VARIABLES = {\n className: 'template-variable',\n variants: [\n { // jinja templates Ansible\n begin: /\\{\\{/,\n end: /\\}\\}/\n },\n { // Ruby i18n\n begin: /%\\{/,\n end: /\\}/\n }\n ]\n };\n\n const SINGLE_QUOTE_STRING = {\n className: 'string',\n relevance: 0,\n begin: /'/,\n end: /'/,\n contains: [\n {\n match: /''/,\n scope: 'char.escape',\n relevance: 0\n }\n ]\n };\n\n const STRING = {\n className: 'string',\n relevance: 0,\n variants: [\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /\\S+/ }\n ],\n contains: [\n hljs.BACKSLASH_ESCAPE,\n TEMPLATE_VARIABLES\n ]\n };\n\n // Strings inside of value containers (objects) can't contain braces,\n // brackets, or commas\n const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [\n {\n begin: /''/,\n relevance: 0\n }\n ]\n },\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /[^\\s,{}[\\]]+/ }\n ] });\n\n const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n const FRACTION_RE = '(\\\\.[0-9]*)?';\n const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n const TIMESTAMP = {\n className: 'number',\n begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n };\n\n const VALUE_CONTAINER = {\n end: ',',\n endsWithParent: true,\n excludeEnd: true,\n keywords: LITERALS,\n relevance: 0\n };\n const OBJECT = {\n begin: /\\{/,\n end: /\\}/,\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n const ARRAY = {\n begin: '\\\\[',\n end: '\\\\]',\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n\n const MODES = [\n KEY,\n {\n className: 'meta',\n begin: '^---\\\\s*$',\n relevance: 10\n },\n { // multi line string\n // Blocks start with a | or > followed by a newline\n //\n // Indentation of subsequent lines must be the same to\n // be considered part of the block\n className: 'string',\n begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n },\n { // Ruby/Rails erb\n begin: '<%[%=-]?',\n end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n { // named tags\n className: 'type',\n begin: '!\\\\w+!' + URI_CHARACTERS\n },\n // https://yaml.org/spec/1.2/spec.html#id2784064\n { // verbatim tags\n className: 'type',\n begin: '!<' + URI_CHARACTERS + \">\"\n },\n { // primary tags\n className: 'type',\n begin: '!' + URI_CHARACTERS\n },\n { // secondary tags\n className: 'type',\n begin: '!!' + URI_CHARACTERS\n },\n { // fragment id &ref\n className: 'meta',\n begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // fragment reference *ref\n className: 'meta',\n begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // array listing\n className: 'bullet',\n // TODO: remove |$ hack when we have proper look-ahead support\n begin: '-(?=[ ]|$)',\n relevance: 0\n },\n hljs.HASH_COMMENT_MODE,\n {\n beginKeywords: LITERALS,\n keywords: { literal: LITERALS }\n },\n TIMESTAMP,\n // numbers are any valid C-style number that\n // sit isolated from other words\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE + '\\\\b',\n relevance: 0\n },\n OBJECT,\n ARRAY,\n SINGLE_QUOTE_STRING,\n STRING\n ];\n\n const VALUE_MODES = [ ...MODES ];\n VALUE_MODES.pop();\n VALUE_MODES.push(CONTAINER_STRING);\n VALUE_CONTAINER.contains = VALUE_MODES;\n\n return {\n name: 'YAML',\n case_insensitive: true,\n aliases: [ 'yml' ],\n contains: MODES\n };\n}\n\nexport { yaml as default };\n","/**\n * Syntax highlighting for the file preview. Uses highlight.js core with a\n * hand-picked set of common languages so the bundle stays lean; unknown\n * languages fall back to plain (HTML-escaped) text.\n */\nimport hljs from 'highlight.js/lib/core'\nimport bash from 'highlight.js/lib/languages/bash'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport css from 'highlight.js/lib/languages/css'\nimport go from 'highlight.js/lib/languages/go'\nimport ini from 'highlight.js/lib/languages/ini'\nimport java from 'highlight.js/lib/languages/java'\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport json from 'highlight.js/lib/languages/json'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport python from 'highlight.js/lib/languages/python'\nimport rust from 'highlight.js/lib/languages/rust'\nimport sql from 'highlight.js/lib/languages/sql'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport xml from 'highlight.js/lib/languages/xml'\nimport yaml from 'highlight.js/lib/languages/yaml'\n\nhljs.registerLanguage('bash', bash)\nhljs.registerLanguage('cpp', cpp)\nhljs.registerLanguage('csharp', csharp)\nhljs.registerLanguage('css', css)\nhljs.registerLanguage('go', go)\nhljs.registerLanguage('ini', ini)\nhljs.registerLanguage('java', java)\nhljs.registerLanguage('javascript', javascript)\nhljs.registerLanguage('json', json)\nhljs.registerLanguage('markdown', markdown)\nhljs.registerLanguage('python', python)\nhljs.registerLanguage('rust', rust)\nhljs.registerLanguage('sql', sql)\nhljs.registerLanguage('typescript', typescript)\nhljs.registerLanguage('xml', xml)\nhljs.registerLanguage('yaml', yaml)\n\nconst EXTENSION_TO_LANGUAGE: Record<string, string> = {\n js: 'javascript', jsx: 'javascript', mjs: 'javascript', cjs: 'javascript',\n ts: 'typescript', tsx: 'typescript', mts: 'typescript', cts: 'typescript',\n py: 'python', pyw: 'python',\n json: 'json', jsonc: 'json',\n html: 'xml', htm: 'xml', xml: 'xml', svg: 'xml', vue: 'xml',\n css: 'css', scss: 'css', less: 'css',\n md: 'markdown', markdown: 'markdown',\n sh: 'bash', bash: 'bash', zsh: 'bash',\n java: 'java',\n c: 'cpp', h: 'cpp', cc: 'cpp', cpp: 'cpp', hpp: 'cpp',\n cs: 'csharp',\n go: 'go',\n rs: 'rust',\n sql: 'sql',\n yml: 'yaml', yaml: 'yaml',\n ini: 'ini', conf: 'ini',\n}\n\n/** Map a file path to a registered highlight.js language id, or undefined. */\nexport function detectLanguage(path: string): string | undefined {\n const idx = path.lastIndexOf('.')\n if (idx < 0) return undefined\n const ext = path.slice(idx + 1).toLowerCase()\n return EXTENSION_TO_LANGUAGE[ext]\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n\n/** True when a language id names a registered highlight.js language. */\nexport function canHighlight(language: string): boolean {\n return language !== '' && hljs.getLanguage(language) !== undefined\n}\n\n/** Highlight code for a file; returns safe HTML (code is HTML-escaped). */\nexport function highlightCode(code: string, path: string): string {\n const language = detectLanguage(path)\n if (language !== undefined && hljs.getLanguage(language) !== undefined) {\n try {\n return hljs.highlight(code, { language, ignoreIllegals: true }).value\n } catch {\n // fall through to plain text\n }\n }\n return escapeHtml(code)\n}\n\n/** Highlight a fenced code block by its declared language; escaped plain text when unknown. */\nexport function highlightFence(code: string, language: string): string {\n if (canHighlight(language)) {\n try {\n return hljs.highlight(code, { language, ignoreIllegals: true }).value\n } catch {\n // fall through to escaped text\n }\n }\n return escapeHtml(code)\n}\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","import decode from './lib/decode.mjs'\nimport encode from './lib/encode.mjs'\nimport format from './lib/format.mjs'\nimport parse from './lib/parse.mjs'\n\nexport {\n decode,\n encode,\n format,\n parse\n}\n","const Any = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nconst Cc = /[\\0-\\x1F\\x7F-\\x9F]/;\nconst Cf = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;\nconst P = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B4E\\u1B4F\\u1B5A-\\u1B60\\u1B7D-\\u1B7F\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDD6E\\uDEAD\\uDED0\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9\\uDFD4\\uDFD5\\uDFD7\\uDFD8]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09\\uDFE1]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDD6D-\\uDD6F\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD839\\uDDFF|\\uD83A[\\uDD5E\\uDD5F]/;\nconst S = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C1\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2429\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E5\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD803[\\uDD8E\\uDD8F\\uDED1-\\uDED8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDC00-\\uDCEF\\uDCFA-\\uDCFC\\uDD00-\\uDEB3\\uDEBA-\\uDED0\\uDEE0-\\uDEF0\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED8\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0-\\uDCBB\\uDCC0\\uDCC1\\uDCD0-\\uDCD8\\uDD00-\\uDE57\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFEF\\uDFFA]/;\nconst Z = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n\nexport { Any, Cc, Cf, P, S, Z };\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint) {\n if ((codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff) {\n return 0xff_fd;\n }\n return decodeMap.get(codePoint) ?? codePoint;\n}\n//# sourceMappingURL=decode-codepoint.js.map","/**\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n * @param input Input string to encode or decode.\n */\nexport function decodeBase64(input) {\n const binary = atob(input);\n const evenLength = binary.length & ~1; // Round down to even length\n const out = new Uint16Array(evenLength / 2);\n for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n const lo = binary.charCodeAt(index);\n const hi = binary.charCodeAt(index + 1);\n out[outIndex++] = lo | (hi << 8);\n }\n return out;\n}\n//# sourceMappingURL=decode-shared.js.map","// Generated using scripts/write-decode-map.ts\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree = /* #__PURE__ */ decodeBase64(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\");\n//# sourceMappingURL=decode-data-html.js.map","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n * If valueLength==0: compact run flag.\n * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"FLAG13\"] = 8192] = \"FLAG13\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 8064] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\n//# sourceMappingURL=bin-trie-flags.js.map","import { replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param code Code point to decode.\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\n/**\n * Decoding mode for named entities.\n */\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n decodeTree;\n emitCodePoint;\n errors;\n constructor(\n /** The tree used to decode entities. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n }\n /** The current state of the decoder. */\n state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n result = 0;\n /** The current index in the decode tree. */\n treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n excess = 1;\n /** The mode in which the decoder is operating. */\n decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n runConsumed = 0;\n /**\n * Resets the instance to make it reusable.\n * @param decodeMode Entity decoding mode to use.\n */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit = char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n this.result = this.result * 16 + digit;\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 3);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n this.result = this.result * 10 + (char - CharCodes.ZERO);\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 2);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The length is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n while (offset < input.length) {\n // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n // If we are starting a run, check the first char.\n if (this.runConsumed === 0) {\n const firstChar = current & BinTrieFlags.JUMP_TABLE;\n if (input.charCodeAt(offset) !== firstChar) {\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n // Check remaining characters in the run.\n while (this.runConsumed < runLength) {\n if (offset >= input.length) {\n return -1;\n }\n const charIndexInPacked = this.runConsumed - 1;\n const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];\n const expectedChar = charIndexInPacked % 2 === 0\n ? packedWord & 0xff\n : (packedWord >> 8) & 0xff;\n if (input.charCodeAt(offset) !== expectedChar) {\n this.runConsumed = 0;\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n this.runConsumed = 0;\n this.treeIndex += 1 + (runLength >> 1);\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n }\n if (offset >= input.length)\n break;\n const char = input.charCodeAt(offset);\n /*\n * Implicit semicolon handling for nodes that require a semicolon but\n * don't have an explicit ';' branch stored in the trie. If we have\n * a value on the current node, it requires a semicolon, and the\n * current input character is a semicolon, emit the entity using the\n * current node (without descending further).\n */\n if (char === CharCodes.SEMI &&\n valueLength !== 0 &&\n (current & BinTrieFlags.FLAG13) !== 0) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict &&\n (current & BinTrieFlags.FLAG13) === 0) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n // Increment offset & excess for next iteration\n offset++;\n this.excess++;\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] &\n ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n * @returns The number of characters consumed.\n */\n end() {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += String.fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIndex Index immediately after the current node header.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n const packedKeySlots = (branchCount + 1) >> 1;\n /*\n * Treat packed keys as a virtual sorted array of length `branchCount`.\n * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n */\n let lo = 0;\n let hi = branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const slot = mid >> 1;\n const packed = decodeTree[nodeIndex + slot];\n const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n if (midKey < char) {\n lo = mid + 1;\n }\n else if (midKey > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[nodeIndex + packedKeySlots + mid];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\nexport { replaceCodePoint } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n//# sourceMappingURL=decode.js.map","import { Any, Cc, P, Z } from \"uc.micro\";\n//#region src/rebuilder.ts\nvar REBuilder = class {\n\tsrc_Any = Any.source;\n\tsrc_Cc = Cc.source;\n\tsrc_Z = Z.source;\n\tsrc_P = P.source;\n\tsrc_ZPCc = [\n\t\tthis.src_Z,\n\t\tthis.src_P,\n\t\tthis.src_Cc\n\t].join(\"|\");\n\tsrc_ZCc = [this.src_Z, this.src_Cc].join(\"|\");\n\tcache = {};\n\topts = {\n\t\tmaxLength: 1e4,\n\t\turlAuth: false,\n\t\tschema_names: []\n\t};\n\tconstructor(opts = {}) {\n\t\tthis.opts = {\n\t\t\t...this.opts,\n\t\t\t...opts\n\t\t};\n\t}\n\tset(opts = {}) {\n\t\tthis.opts = {\n\t\t\t...this.opts,\n\t\t\t...opts\n\t\t};\n\t\tthis.cache = {};\n\t\treturn this;\n\t}\n\tescapeRE(str) {\n\t\treturn str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n\t}\n\tnestedPairRE(open, close, depth = 4) {\n\t\tconst openRE = this.escapeRE(open);\n\t\tconst closeRE = this.escapeRE(close);\n\t\tconst atom = `(?:(?!${this.src_ZCc}|${openRE}|${closeRE}).)`;\n\t\tlet pair = `${openRE}${atom}{0,1000}${closeRE}`;\n\t\tfor (let level = 2; level <= depth; level++) pair = `${openRE}(?:${atom}|${pair}){0,1000}${closeRE}`;\n\t\treturn pair;\n\t}\n\tget_text_separators() {\n\t\treturn this.cache.text_separators ??= /[><\\uff5c]/;\n\t}\n\tget_pseudo_letter() {\n\t\treturn this.cache.src_pseudo_letter ??= new RegExp(`(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`);\n\t}\n\tget_ipv4_addr() {\n\t\treturn this.cache.src_ip4 ??= /* @__PURE__ */ new RegExp(\"(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\");\n\t}\n\tget_ipv6_addr() {\n\t\tconst h16 = \"[0-9A-Fa-f]{1,4}\";\n\t\tconst ls32 = `(?:(?:${h16}:${h16})|${this.get_ipv4_addr().source})`;\n\t\treturn this.cache.src_ip6_addr ??= new RegExp(`(?:(?:${h16}:){6}${ls32}|::(?:${h16}:){5}${ls32}|(?:${h16})?::(?:${h16}:){4}${ls32}|(?:(?:${h16}:){0,1}${h16})?::(?:${h16}:){3}${ls32}|(?:(?:${h16}:){0,2}${h16})?::(?:${h16}:){2}${ls32}|(?:(?:${h16}:){0,3}${h16})?::${h16}:${ls32}|(?:(?:${h16}:){0,4}${h16})?::${ls32}|(?:(?:${h16}:){0,5}${h16})?::${h16}|(?:(?:${h16}:){0,6}${h16})?::)`);\n\t}\n\tget_ipv6_url_host() {\n\t\treturn this.cache.src_ip6_host ??= new RegExp(`\\\\[${this.get_ipv6_addr().source}\\\\]`);\n\t}\n\tget_ipv6_mail_host() {\n\t\treturn this.cache.src_ipv6_mail_host ??= new RegExp(`\\\\[IPv6:${this.get_ipv6_addr().source}\\\\]`);\n\t}\n\tget_auth() {\n\t\treturn this.cache.src_auth ??= new RegExp(`(?:(?:(?!${this.src_ZCc}|[@/\\\\[\\\\]()]).){1,50}@)?`);\n\t}\n\tget_port() {\n\t\treturn this.cache.src_port ??= /* @__PURE__ */ new RegExp(\"(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?\");\n\t}\n\tget_host_terminator() {\n\t\treturn this.cache.src_host_terminator ??= new RegExp(`(?=$|${this.get_text_separators().source}|${this.src_ZPCc})(?!${this.opts[\"---\"] ? \"-(?!--)|\" : \"-|\"}_|:\\\\d|\\\\.-|\\\\.(?!$|${this.src_ZPCc}))`);\n\t}\n\tget_path_terminator() {\n\t\treturn this.cache.src_path_terminator ??= new RegExp(`${this.src_ZPCc}|${this.get_text_separators().source}`);\n\t}\n\tget_path() {\n\t\treturn this.cache.src_path ??= new RegExp(`(?:[/?#](?:${this.nestedPairRE(\"[\", \"]\")}|${this.nestedPairRE(\"(\", \")\")}|${this.nestedPairRE(\"{\", \"}\")}|\\\\\"(?:(?!${this.src_ZCc}|[\"]).){1,100}\\\\\"|\\\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\\\'|\\\\'(?=${this.get_pseudo_letter().source}|[-])|\\\\.{2,20}[:]?[a-zA-Z0-9%/&]|\\\\.(?!${this.src_ZCc}|[.]|$)|` + (this.opts[\"---\"] ? \"\\\\-(?!--(?:[^-]|$))(?:-{0,19})|\" : \"\\\\-{1,20}|\") + `,(?!${this.src_ZCc}|$)|;(?!${this.src_ZCc}|$)|\\\\!{1,20}(?!${this.src_ZCc}|[!]|$)|\\\\?(?!${this.src_ZCc}|[?]|$)|` + this.get_path_extra().source + `[\\\\\\\\/:%@#&=_~*]|(?!${this.get_path_terminator().source}).){1,${this.opts.maxLength}}|\\\\/)?`);\n\t}\n\tget_mail_name() {\n\t\treturn this.cache.src_mail_name ??= /* @__PURE__ */ new RegExp(\"[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}\");\n\t}\n\tget_xn() {\n\t\treturn this.cache.src_xn ??= /* @__PURE__ */ new RegExp(\"xn--[a-z0-9\\\\-]{1,59}\");\n\t}\n\tget_tld() {\n\t\tif (this.cache.tld) return this.cache.tld;\n\t\tconst tlds_src = [...new Set(this.opts.tlds || [])].sort().reverse().join(\"|\");\n\t\tthis.cache.tld = new RegExp(`${tlds_src || \"$#none#$\"}|${this.get_xn().source}`);\n\t\treturn this.cache.tld;\n\t}\n\tget_domain_root() {\n\t\treturn this.cache.src_domain_root ??= new RegExp(\"(?:\" + this.get_xn().source + `|${this.get_pseudo_letter().source}{1,63})`);\n\t}\n\tget_domain() {\n\t\treturn this.cache.src_domain ??= new RegExp(\"(?:\" + this.get_xn().source + `|(?:${this.get_pseudo_letter().source})|(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source}))`);\n\t}\n\tget_url_host_port() {\n\t\treturn this.cache.url_host_port ??= new RegExp(\"(?:\" + this.get_ipv6_url_host().source + `|(?:(?:(?:${this.get_domain().source})\\\\.){0,10}${this.get_domain().source}))` + this.get_port().source + this.get_host_terminator().source);\n\t}\n\tget_fuzzy_url_host_port() {\n\t\treturn this.cache.fuzzy_url_host_port ??= new RegExp(\"(?:\" + (this.opts.fuzzyIP ? this.get_ipv4_addr().source + \"|\" : \"\") + `(?:(?:(?:${this.get_domain().source})\\\\.){1,10}(?:${this.get_tld().source})))` + this.get_host_terminator().source);\n\t}\n\tget_mail_host() {\n\t\treturn this.cache.src_mail_host ??= new RegExp(\"(?:\" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})\\\\.){0,4}${this.get_domain().source}))` + this.get_host_terminator().source);\n\t}\n\tget_fuzzy_mail_host() {\n\t\treturn this.cache.src_fuzzy_mail_host ??= new RegExp(\"(?:\" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source}))` + this.get_host_terminator().source);\n\t}\n\tget_path_extra() {\n\t\treturn this.cache.src_path_extra ??= /* @__PURE__ */ new RegExp(\"\");\n\t}\n\tget_fuzzy_mail_host_search() {\n\t\treturn this.cache.mail_fuzzy_host_search ??= new RegExp(`@${this.get_fuzzy_mail_host().source}`, \"ig\");\n\t}\n\tget_fuzzy_link_search() {\n\t\treturn this.cache.link_fuzzy_search ??= new RegExp(`(^|(?![.:/\\\\-_@])(?:[$+<=>^\\`|\\uff5c]|${this.src_ZPCc}))(?:(?![$+<=>^\\`|\\uff5c])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`, \"ig\");\n\t}\n\tget_http_validator() {\n\t\treturn this.cache.http_validator ??= new RegExp(\"\\\\/\\\\/\" + (this.opts.urlAuth ? this.get_auth().source : \"\") + this.get_url_host_port().source + this.get_path().source, \"iy\");\n\t}\n\tget_relative_proto_validator() {\n\t\treturn this.cache.relative_proto_validator ??= new RegExp((this.opts.urlAuth ? this.get_auth().source : \"\") + `(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})` + this.get_port().source + this.get_host_terminator().source + this.get_path().source, \"iy\");\n\t}\n\tget_mail_name_validator() {\n\t\treturn this.cache.mail_name_validator ??= new RegExp(`(?:^|${this.get_text_separators().source}|\"|\\\\(|${this.src_ZCc})(${this.get_mail_name().source})$`);\n\t}\n\tget_mailto_validator() {\n\t\treturn this.cache.mailto_validator ??= new RegExp(`${this.get_mail_name().source}@${this.get_mail_host().source}`, \"iy\");\n\t}\n\tget_schema_names() {\n\t\treturn this.cache.schema_names ??= new RegExp((this.opts.schema_names || []).map((name) => this.escapeRE(name)).join(\"|\"));\n\t}\n\tget_schema_search() {\n\t\treturn this.cache.schema_search ??= new RegExp(`(^|(?!_)(?:[><\\uff5c]|${this.src_ZPCc}))(${this.get_schema_names().source})`, \"ig\");\n\t}\n\tget_schema_at_start() {\n\t\treturn this.cache.schema_at_start ??= new RegExp(`^${this.get_schema_search().source}`, \"i\");\n\t}\n};\n//#endregion\n//#region src/linkifyit.ts\nvar web_schema = {\n\tvalidate: (text, pos, self) => {\n\t\tconst re = self.re.get_http_validator();\n\t\tre.lastIndex = pos;\n\t\tconst m = re.exec(text);\n\t\treturn m ? m[0].length : 0;\n\t},\n\tnormalize: (match, self) => self.normalize(match)\n};\nvar defaultSchemas = {\n\t\"http:\": web_schema,\n\t\"https:\": web_schema,\n\t\"ftp:\": web_schema,\n\t\"//\": {\n\t\tvalidate: function(text, pos, self) {\n\t\t\tconst re = self.re.get_relative_proto_validator();\n\t\t\tre.lastIndex = pos;\n\t\t\tconst m = re.exec(text);\n\t\t\tif (m) {\n\t\t\t\tif (pos >= 3 && text[pos - 3] === \":\") return 0;\n\t\t\t\tif (pos >= 3 && text[pos - 3] === \"/\") return 0;\n\t\t\t\treturn m[0].length;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tnormalize: (match, self) => self.normalize(match)\n\t},\n\t\"mailto:\": {\n\t\tvalidate: function(text, pos, self) {\n\t\t\tconst re = self.re.get_mailto_validator();\n\t\t\tre.lastIndex = pos;\n\t\t\tconst m = re.exec(text);\n\t\t\treturn m ? m[0].length : 0;\n\t\t},\n\t\tnormalize: (match, self) => self.normalize(match)\n\t}\n};\nvar tlds_2ch = \"a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw\";\nvar tlds_default = \"biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\";\nfunction unpackTlds() {\n\tconst result = tlds_default.split(\"|\");\n\ttlds_2ch.split(\"|\").forEach((item) => {\n\t\tconst sep = item.indexOf(\":\");\n\t\tconst prefix = item.slice(0, sep);\n\t\tfor (const suffix of item.slice(sep + 1)) result.push(prefix + suffix);\n\t});\n\treturn result;\n}\nvar defaultOptions = {\n\tfuzzyLink: false,\n\tfuzzyEmail: true,\n\tfuzzyIP: false,\n\t\"---\": false,\n\ttlds: unpackTlds(),\n\turlAuth: false,\n\tmaxLength: 1e4\n};\n/**\n* Match result returned by {@link LinkifyIt.match} and\n* {@link LinkifyIt.matchAtStart}.\n*\n* @category types\n*/\nvar Match = class {\n\t/** Prefix (protocol) for matched string. Empty for fuzzy links. */\n\tschema;\n\t/** First position of matched string. */\n\tindex;\n\t/** Next position after matched string. */\n\tlastIndex;\n\t/** Matched string. */\n\traw;\n\t/** Normalized text of matched string. */\n\ttext;\n\t/** Normalized URL of matched string. */\n\turl;\n\tconstructor(text, schema, index, lastIndex) {\n\t\tconst raw = text.slice(index, lastIndex);\n\t\tthis.schema = schema.toLowerCase();\n\t\tthis.index = index;\n\t\tthis.lastIndex = lastIndex;\n\t\tthis.raw = raw;\n\t\tthis.text = raw;\n\t\tthis.url = raw;\n\t}\n};\n/** Linkifier instance. */\nvar LinkifyIt = class {\n\t__opts__;\n\t__schemas__;\n\tre;\n\t/**\n\t* Creates new linkifier instance.\n\t*\n\t* By default understands:\n\t*\n\t* - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n\t* - \"fuzzy\" emails (foo@bar.com).\n\t*\n\t* See {@link LinkifyConstructorOptions} for available options.\n\t*\n\t* @param options Recognition options.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { LinkifyIt } from 'linkify-it'\n\t*\n\t* const linkify = new LinkifyIt({ fuzzyLink: true })\n\t*\n\t* linkify\n\t* .tlds(require('tlds')) // Reload with full TLD list\n\t* .tlds('onion', true) // Add unofficial `.onion` domain\n\t* .add('ftp:', null) // Disable `ftp:` protocol\n\t* .set({ fuzzyIP: true }) // Enable IPs in fuzzy links\n\t*\n\t* console.log(linkify.test('Site github.com!')) // true\n\t* console.log(linkify.match('Site github.com!'))\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tconst { rebuilder, ...linkifyOptions } = options;\n\t\tthis.__opts__ = {\n\t\t\t...defaultOptions,\n\t\t\t...linkifyOptions\n\t\t};\n\t\tthis.__schemas__ = { ...defaultSchemas };\n\t\tthis.re = rebuilder || new REBuilder();\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t}\n\t/**\n\t* Add new rule definition.\n\t*\n\t* `schema` is a link prefix (usually, protocol name with `:` at the end,\n\t* `skype:` for example). `linkify-it` makes sure that prefix is not\n\t* preceded with alphanumeric char and symbols. Only whitespaces and\n\t* punctuation allowed.\n\t*\n\t* `definition` is a rule to check tail after link prefix. To disable an\n\t* existing rule, pass `null`.\n\t*\n\t* @param schema Rule name (fixed pattern prefix).\n\t* @param definition Schema definition, or `null` to disable the rule.\n\t*\n\t* See [twitter mentions example](https://github.com/markdown-it/linkify-it/blob/master/examples/twitter.mjs).\n\t*/\n\tadd(schema, definition = null) {\n\t\tif (!definition) delete this.__schemas__[schema];\n\t\telse {\n\t\t\tconst def = {\n\t\t\t\tnormalize: (match, self) => self.normalize(match),\n\t\t\t\t...definition\n\t\t\t};\n\t\t\tthis.__schemas__[schema] = def;\n\t\t}\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Set recognition options for links without schema.\n\t*\n\t* @param options Recognition options.\n\t*/\n\tset(options = {}) {\n\t\tthis.__opts__ = {\n\t\t\t...this.__opts__,\n\t\t\t...options\n\t\t};\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Searches linkifiable pattern and returns `true` on success or `false` on fail.\n\t*\n\t* @param text Text to scan.\n\t*/\n\ttest(text) {\n\t\tif (!text.length) return false;\n\t\tlet m, re;\n\t\tre = this.re.get_schema_search();\n\t\tre.lastIndex = 0;\n\t\twhile ((m = re.exec(text)) !== null) if (this.testSchemaAt(text, m[2], re.lastIndex)) return true;\n\t\tif (this.__opts__.fuzzyLink && this.__schemas__[\"http:\"]) {\n\t\t\tre = this.re.get_fuzzy_link_search();\n\t\t\tre.lastIndex = 0;\n\t\t\tif (re.exec(text) !== null) return true;\n\t\t}\n\t\tif (this.__opts__.fuzzyEmail && this.__schemas__[\"mailto:\"]) {\n\t\t\tif (text.indexOf(\"@\") >= 0) {\n\t\t\t\tconst mailHostRe = this.re.get_fuzzy_mail_host_search();\n\t\t\t\tconst mailNameRe = this.re.get_mail_name_validator();\n\t\t\t\tmailHostRe.lastIndex = 0;\n\t\t\t\twhile ((m = mailHostRe.exec(text)) !== null) {\n\t\t\t\t\tconst name = text.slice(Math.max(0, m.index - 65), m.index);\n\t\t\t\t\tif (mailNameRe.test(name)) return true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Similar to {@link LinkifyIt.test} but checks only specific protocol tail exactly\n\t* at given position. Returns length of found pattern (0 on fail).\n\t*\n\t* @param text Text to scan.\n\t* @param schema Rule (schema) name.\n\t* @param pos Text offset to check from.\n\t*/\n\ttestSchemaAt(text, schema, pos) {\n\t\tif (!this.__schemas__[schema.toLowerCase()]) return 0;\n\t\treturn this.__schemas__[schema.toLowerCase()].validate(text.slice(0, pos + this.__opts__.maxLength), pos, this);\n\t}\n\t/**\n\t* Returns array of found link descriptions or `null` on fail. We strongly\n\t* recommend to use {@link LinkifyIt.test} first, for best speed.\n\t*\n\t* @param text Text to scan.\n\t*/\n\tmatch(text) {\n\t\tconst result = [];\n\t\tconst schemaRe = this.re.get_schema_search();\n\t\tlet fuzzyLinkRe;\n\t\tlet mailHostRe;\n\t\tlet mailNameRe;\n\t\tlet fuzzyLinkCandidate;\n\t\tlet fuzzyEmailCandidate;\n\t\tlet schemaPrefix;\n\t\tlet schemaDone = false;\n\t\tlet fuzzyLinkDone = false;\n\t\tlet fuzzyEmailDone = false;\n\t\tlet pos = 0;\n\t\tif (!text.length) return null;\n\t\tschemaRe.lastIndex = 0;\n\t\tif (this.__opts__.fuzzyLink && this.__schemas__[\"http:\"]) {\n\t\t\tfuzzyLinkRe = this.re.get_fuzzy_link_search();\n\t\t\tfuzzyLinkRe.lastIndex = 0;\n\t\t}\n\t\tif (this.__opts__.fuzzyEmail && this.__schemas__[\"mailto:\"]) {\n\t\t\tmailHostRe = this.re.get_fuzzy_mail_host_search();\n\t\t\tmailHostRe.lastIndex = 0;\n\t\t\tmailNameRe = this.re.get_mail_name_validator();\n\t\t}\n\t\tfor (;;) {\n\t\t\tconst scanFrom = Math.max(pos - 1, 0);\n\t\t\tif (mailHostRe && mailNameRe && !fuzzyEmailDone && (!fuzzyEmailCandidate || fuzzyEmailCandidate.index < pos)) {\n\t\t\t\tif (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst m = mailHostRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tfuzzyEmailDone = true;\n\t\t\t\t\t\tfuzzyEmailCandidate = void 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst name = mailNameRe.exec(text.slice(Math.max(0, m.index - 65), m.index));\n\t\t\t\t\tif (!name) continue;\n\t\t\t\t\tfuzzyEmailCandidate = {\n\t\t\t\t\t\tschema: \"mailto:\",\n\t\t\t\t\t\tindex: m.index - name[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t\tif (fuzzyEmailCandidate.index >= pos) break;\n\t\t\t\t\tif (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fuzzyLinkRe && !fuzzyLinkDone && (!fuzzyLinkCandidate || fuzzyLinkCandidate.index < pos)) {\n\t\t\t\tif (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst m = fuzzyLinkRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tfuzzyLinkDone = true;\n\t\t\t\t\t\tfuzzyLinkCandidate = void 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfuzzyLinkCandidate = {\n\t\t\t\t\t\tschema: \"\",\n\t\t\t\t\t\tindex: m.index + m[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t\tif (fuzzyLinkCandidate.index >= pos) break;\n\t\t\t\t\tif (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet fuzzyCandidate = fuzzyEmailCandidate;\n\t\t\tif (!fuzzyCandidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < fuzzyCandidate.index || fuzzyLinkCandidate.index === fuzzyCandidate.index && fuzzyLinkCandidate.lastIndex > fuzzyCandidate.lastIndex)) fuzzyCandidate = fuzzyLinkCandidate;\n\t\t\tlet schemaCandidate;\n\t\t\tif (!schemaDone) for (;;) {\n\t\t\t\tif (!schemaPrefix) {\n\t\t\t\t\tif (schemaRe.lastIndex < scanFrom) schemaRe.lastIndex = scanFrom;\n\t\t\t\t\tconst m = schemaRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tschemaDone = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tschemaPrefix = {\n\t\t\t\t\t\tschema: m[2],\n\t\t\t\t\t\tindex: m.index + m[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (schemaPrefix.index < pos) {\n\t\t\t\t\tschemaPrefix = void 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (fuzzyCandidate && schemaPrefix.index > fuzzyCandidate.index) break;\n\t\t\t\tconst prefix = schemaPrefix;\n\t\t\t\tschemaPrefix = void 0;\n\t\t\t\tconst len = this.testSchemaAt(text, prefix.schema, prefix.lastIndex);\n\t\t\t\tif (len) {\n\t\t\t\t\tschemaCandidate = {\n\t\t\t\t\t\tschema: prefix.schema,\n\t\t\t\t\t\tindex: prefix.index,\n\t\t\t\t\t\tlastIndex: prefix.lastIndex + len\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet candidate = schemaCandidate;\n\t\t\tif (!candidate || fuzzyEmailCandidate && (fuzzyEmailCandidate.index < candidate.index || fuzzyEmailCandidate.index === candidate.index && fuzzyEmailCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyEmailCandidate;\n\t\t\tif (!candidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < candidate.index || fuzzyLinkCandidate.index === candidate.index && fuzzyLinkCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyLinkCandidate;\n\t\t\tif (!candidate) break;\n\t\t\tif (candidate === fuzzyEmailCandidate) fuzzyEmailCandidate = void 0;\n\t\t\telse if (candidate === fuzzyLinkCandidate) fuzzyLinkCandidate = void 0;\n\t\t\tconst match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);\n\t\t\tif (match.schema) this.__schemas__[match.schema].normalize(match, this);\n\t\t\telse this.normalize(match);\n\t\t\tresult.push(match);\n\t\t\tpos = candidate.lastIndex;\n\t\t}\n\t\tif (result.length) return result;\n\t\treturn null;\n\t}\n\t/**\n\t* Returns fully-formed (not fuzzy) link if it starts at the beginning\n\t* of the string, and null otherwise.\n\t*\n\t* @param text Text to scan.\n\t*/\n\tmatchAtStart(text) {\n\t\tif (!text.length) return null;\n\t\tconst m = this.re.get_schema_at_start().exec(text);\n\t\tif (!m) return null;\n\t\tconst len = this.testSchemaAt(text, m[2], m[0].length);\n\t\tif (!len) return null;\n\t\tconst match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);\n\t\tthis.__schemas__[match.schema].normalize(match, this);\n\t\treturn match;\n\t}\n\t/**\n\t* Load (or merge) new TLDs list. Those are used for fuzzy links (without\n\t* prefix) to avoid false positives. By default this algorithm is used:\n\t*\n\t* - hostname with any 2-letter root zones are ok.\n\t* - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n\t* are ok.\n\t* - encoded (`xn--...`) root zones are ok.\n\t*\n\t* If list is replaced, then exact match for 2-chars root zones will be checked.\n\t*\n\t* @param list List of TLDs.\n\t* @param keepOld Merge with current list if `true` (`false` by default).\n\t*/\n\ttlds(list, keepOld = false) {\n\t\tlist = Array.isArray(list) ? list : [list];\n\t\tif (!keepOld) this.__opts__.tlds = list;\n\t\telse this.__opts__.tlds = this.__opts__.tlds.concat(list);\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Default normalizer (if schema does not define its own).\n\t*\n\t* @param match Match to normalize.\n\t*/\n\tnormalize(match) {\n\t\tif (!match.schema) match.url = `http://${match.url}`;\n\t\tif (match.schema === \"mailto:\" && !/^mailto:/i.test(match.url)) match.url = `mailto:${match.url}`;\n\t}\n};\nfunction linkifyit(options = {}) {\n\treturn new LinkifyIt(options);\n}\n//#endregion\nexport { LinkifyIt, REBuilder, linkifyit };\n\n//# sourceMappingURL=index.mjs.map","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n","/*! markdown-it 15.0.0 https://github.com/markdown-it/markdown-it @license MIT */\nimport * as mdurl from \"mdurl\";\nimport * as ucmicro from \"uc.micro\";\nimport { decodeHTMLStrict } from \"entities\";\nimport { LinkifyIt } from \"linkify-it\";\nimport punycode from \"punycode.js\";\n//#region \\0rolldown/runtime.js\nvar __defProp = Object.defineProperty;\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\n//#endregion\n//#region src/common/utils.ts\n/**\n* Common utility functions exposed through `md.utils` for use by plugins.\n*\n* @module md.utils\n*/\nvar utils_exports = /* @__PURE__ */ __exportAll({\n\tarrayReplaceAt: () => arrayReplaceAt,\n\tasciiTrim: () => asciiTrim,\n\tcallable: () => callable,\n\tescapeHtml: () => escapeHtml,\n\tescapeRE: () => escapeRE,\n\tfromCodePoint: () => fromCodePoint,\n\tisMdAsciiPunct: () => isMdAsciiPunct,\n\tisPunctChar: () => isPunctChar,\n\tisPunctCharCode: () => isPunctCharCode,\n\tisSpace: () => isSpace,\n\tisValidEntityCode: () => isValidEntityCode,\n\tisWhiteSpace: () => isWhiteSpace,\n\tlib: () => lib,\n\tnormalizeReference: () => normalizeReference,\n\tunescapeAll: () => unescapeAll,\n\tunescapeMd: () => unescapeMd\n});\nfunction callable(cls) {\n\tconst wrapper = function(...args) {\n\t\treturn Reflect.construct(cls, args, new.target && new.target !== wrapper ? new.target : cls);\n\t};\n\tObject.defineProperty(wrapper, \"name\", { value: cls.name });\n\tObject.setPrototypeOf(wrapper, cls);\n\twrapper.prototype = cls.prototype;\n\treturn wrapper;\n}\n/**\n* Returns a copy of a token array with the token at `pos` replaced by\n* `newElements`. Used to transform token streams without modifying the\n* original array.\n*/\nfunction arrayReplaceAt(src, pos, newElements) {\n\treturn [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n/** Checks whether a code point can be decoded from a numeric HTML entity. */\nfunction isValidEntityCode(c) {\n\tif (c >= 55296 && c <= 57343) return false;\n\tif (c >= 64976 && c <= 65007) return false;\n\tif ((c & 65535) === 65535 || (c & 65535) === 65534) return false;\n\tif (c >= 0 && c <= 8) return false;\n\tif (c === 11) return false;\n\tif (c >= 14 && c <= 31) return false;\n\tif (c >= 127 && c <= 159) return false;\n\tif (c > 1114111) return false;\n\treturn true;\n}\n/**\n* Converts a Unicode code point to a string, like `String.fromCodePoint()`,\n* but does not throw for invalid input.\n*/\nfunction fromCodePoint(c) {\n\tif (c > 65535) {\n\t\tc -= 65536;\n\t\tconst surrogate1 = 55296 + (c >> 10);\n\t\tconst surrogate2 = 56320 + (c & 1023);\n\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t}\n\treturn String.fromCharCode(c);\n}\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar UNESCAPE_ALL_RE = new RegExp(`${UNESCAPE_MD_RE.source}|${/&([a-z#][a-z0-9]{1,31});/gi.source}`, \"gi\");\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\nfunction replaceEntityPattern(match, name) {\n\tif (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) {\n\t\tconst code = name[1].toLowerCase() === \"x\" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\t\tif (isValidEntityCode(code)) return fromCodePoint(code);\n\t\treturn match;\n\t}\n\tconst decoded = decodeHTMLStrict(match);\n\tif (decoded !== match) return decoded;\n\treturn match;\n}\n/** Decodes Markdown backslash escapes. */\nfunction unescapeMd(str) {\n\tif (str.indexOf(\"\\\\\") < 0) return str;\n\treturn str.replace(UNESCAPE_MD_RE, \"$1\");\n}\n/**\n* Decodes Markdown backslash escapes and HTML character references in link\n* destinations, link titles, and fenced code info strings.\n*/\nfunction unescapeAll(str) {\n\tif (str.indexOf(\"\\\\\") < 0 && str.indexOf(\"&\") < 0) return str;\n\treturn str.replace(UNESCAPE_ALL_RE, function(match, escaped, entity) {\n\t\tif (escaped) return escaped;\n\t\treturn replaceEntityPattern(match, entity);\n\t});\n}\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n\t\"&\": \"&\",\n\t\"<\": \"<\",\n\t\">\": \">\",\n\t\"\\\"\": \""\"\n};\nfunction replaceUnsafeChar(ch) {\n\treturn HTML_REPLACEMENTS[ch];\n}\n/** Escapes HTML special characters in a string. */\nfunction escapeHtml(str) {\n\tif (HTML_ESCAPE_TEST_RE.test(str)) return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n\treturn str;\n}\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n/** Escapes regular expression metacharacters in a string. */\nfunction escapeRE(str) {\n\treturn str.replace(REGEXP_ESCAPE_RE, \"\\\\$&\");\n}\n/** Checks whether a character code is an ASCII space or tab. */\nfunction isSpace(code) {\n\tswitch (code) {\n\t\tcase 9:\n\t\tcase 32: return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether a character code is whitespace recognized by Markdown.\n*\n* Matches the Unicode `Zs` category or `\\t`, `\\f`, `\\v`, `\\r`, `\\n`.\n*/\nfunction isWhiteSpace(code) {\n\tif (code >= 8192 && code <= 8202) return true;\n\tswitch (code) {\n\t\tcase 9:\n\t\tcase 10:\n\t\tcase 11:\n\t\tcase 12:\n\t\tcase 13:\n\t\tcase 32:\n\t\tcase 160:\n\t\tcase 5760:\n\t\tcase 8239:\n\t\tcase 8287:\n\t\tcase 12288: return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether a character is Unicode punctuation or a symbol.\n*\n* Does not support astral characters.\n*/\nfunction isPunctChar(ch) {\n\treturn ucmicro.P.test(ch) || ucmicro.S.test(ch);\n}\n/** Checks whether a Unicode code point is punctuation or a symbol. */\nfunction isPunctCharCode(code) {\n\treturn isPunctChar(fromCodePoint(code));\n}\n/**\n* Markdown ASCII punctuation characters.\n*\n* !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @,\n* [, \\, ], ^, _, `, {, |, }, or ~\n*\n* http://spec.commonmark.org/0.15/#ascii-punctuation-character\n*\n* Don't confuse with Unicode punctuation. It lacks some characters in the\n* ASCII range.\n*/\nfunction isMdAsciiPunct(ch) {\n\tswitch (ch) {\n\t\tcase 33:\n\t\tcase 34:\n\t\tcase 35:\n\t\tcase 36:\n\t\tcase 37:\n\t\tcase 38:\n\t\tcase 39:\n\t\tcase 40:\n\t\tcase 41:\n\t\tcase 42:\n\t\tcase 43:\n\t\tcase 44:\n\t\tcase 45:\n\t\tcase 46:\n\t\tcase 47:\n\t\tcase 58:\n\t\tcase 59:\n\t\tcase 60:\n\t\tcase 61:\n\t\tcase 62:\n\t\tcase 63:\n\t\tcase 64:\n\t\tcase 91:\n\t\tcase 92:\n\t\tcase 93:\n\t\tcase 94:\n\t\tcase 95:\n\t\tcase 96:\n\t\tcase 123:\n\t\tcase 124:\n\t\tcase 125:\n\t\tcase 126: return true;\n\t\tdefault: return false;\n\t}\n}\n/** Normalizes `[reference labels]` for case-insensitive lookup. */\nfunction normalizeReference(str) {\n\tstr = str.trim().replace(/\\s+/g, \" \");\n\treturn str.toLowerCase().toUpperCase();\n}\nfunction isAsciiTrimmable(c) {\n\treturn c === 32 || c === 9 || c === 10 || c === 13;\n}\n/**\n* \"Light\" `.trim()` for blocks (headings, paragraphs), where Unicode spaces\n* should be preserved.\n*/\nfunction asciiTrim(str) {\n\tlet start = 0;\n\tfor (; start < str.length; start++) if (!isAsciiTrimmable(str.charCodeAt(start))) break;\n\tlet end = str.length - 1;\n\tfor (; end >= start; end--) if (!isAsciiTrimmable(str.charCodeAt(end))) break;\n\treturn str.slice(start, end + 1);\n}\n/**\n* Libraries commonly used by markdown-it and its plugins, re-exported to\n* reduce duplicate dependencies in browser bundles.\n*/\nvar lib = {\n\tmdurl,\n\tucmicro\n};\n//#endregion\n//#region src/helpers/parse_link_label.ts\n/** Finds the end of a link or image label (`[label]`). */\nfunction parseLinkLabel(state, start, disableNested) {\n\tlet level, found, marker, prevPos;\n\tconst max = state.posMax;\n\tconst oldPos = state.pos;\n\tstate.pos = start + 1;\n\tlevel = 1;\n\twhile (state.pos < max) {\n\t\tmarker = state.src.charCodeAt(state.pos);\n\t\tif (marker === 93) {\n\t\t\tlevel--;\n\t\t\tif (level === 0) {\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tprevPos = state.pos;\n\t\tstate.md.inline.skipToken(state);\n\t\tif (marker === 91) {\n\t\t\tif (prevPos === state.pos - 1) level++;\n\t\t\telse if (disableNested) {\n\t\t\t\tstate.pos = oldPos;\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\tlet labelEnd = -1;\n\tif (found) labelEnd = state.pos;\n\tstate.pos = oldPos;\n\treturn labelEnd;\n}\n//#endregion\n//#region src/helpers/parse_link_destination.ts\n/** Parses the destination in `[label](destination \"title\")`. */\nfunction parseLinkDestination(str, start, max) {\n\tlet code;\n\tlet pos = start;\n\tconst result = {\n\t\tok: false,\n\t\tpos: 0,\n\t\tstr: \"\"\n\t};\n\tif (str.charCodeAt(pos) === 60) {\n\t\tpos++;\n\t\twhile (pos < max) {\n\t\t\tcode = str.charCodeAt(pos);\n\t\t\tif (code === 10) return result;\n\t\t\tif (code === 60) return result;\n\t\t\tif (code === 62) {\n\t\t\t\tresult.pos = pos + 1;\n\t\t\t\tresult.str = unescapeAll(str.slice(start + 1, pos));\n\t\t\t\tresult.ok = true;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (code === 92 && pos + 1 < max) {\n\t\t\t\tpos += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpos++;\n\t\t}\n\t\treturn result;\n\t}\n\tlet level = 0;\n\twhile (pos < max) {\n\t\tcode = str.charCodeAt(pos);\n\t\tif (code === 32) break;\n\t\tif (code < 32 || code === 127) break;\n\t\tif (code === 92 && pos + 1 < max) {\n\t\t\tif (str.charCodeAt(pos + 1) === 32) {\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpos += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (code === 40) {\n\t\t\tlevel++;\n\t\t\tif (level > 32) return result;\n\t\t}\n\t\tif (code === 41) {\n\t\t\tif (level === 0) break;\n\t\t\tlevel--;\n\t\t}\n\t\tpos++;\n\t}\n\tif (start === pos) return result;\n\tif (level !== 0) return result;\n\tresult.str = unescapeAll(str.slice(start, pos));\n\tresult.pos = pos;\n\tresult.ok = true;\n\treturn result;\n}\n//#endregion\n//#region src/helpers/parse_link_title.ts\n/**\n* Parses the optional title in `[label](destination \"title\")` or\n* `[label]: destination \"title\"`.\n*\n* `prev_state` continues a reference title on the next source line.\n*/\nfunction parseLinkTitle(str, start, max, prev_state) {\n\tlet code;\n\tlet pos = start;\n\tconst state = {\n\t\tok: false,\n\t\tcan_continue: false,\n\t\tpos: 0,\n\t\tstr: \"\",\n\t\tmarker: 0\n\t};\n\tif (prev_state) {\n\t\tstate.str = prev_state.str;\n\t\tstate.marker = prev_state.marker;\n\t} else {\n\t\tif (pos >= max) return state;\n\t\tlet marker = str.charCodeAt(pos);\n\t\tif (marker !== 34 && marker !== 39 && marker !== 40) return state;\n\t\tstart++;\n\t\tpos++;\n\t\tif (marker === 40) marker = 41;\n\t\tstate.marker = marker;\n\t}\n\twhile (pos < max) {\n\t\tcode = str.charCodeAt(pos);\n\t\tif (code === state.marker) {\n\t\t\tstate.pos = pos + 1;\n\t\t\tstate.str += unescapeAll(str.slice(start, pos));\n\t\t\tstate.ok = true;\n\t\t\treturn state;\n\t\t} else if (code === 40 && state.marker === 41) return state;\n\t\telse if (code === 92 && pos + 1 < max) pos++;\n\t\tpos++;\n\t}\n\tstate.can_continue = true;\n\tstate.str += unescapeAll(str.slice(start, pos));\n\treturn state;\n}\n//#endregion\n//#region src/helpers/index.ts\n/**\n* Functions used to parse links and images, split out of parser rules because\n* of their size.\n*\n* @module md.helpers\n*/\nvar helpers_exports = /* @__PURE__ */ __exportAll({\n\tparseLinkDestination: () => parseLinkDestination,\n\tparseLinkLabel: () => parseLinkLabel,\n\tparseLinkTitle: () => parseLinkTitle\n});\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\n\t\treturn typeof o;\n\t} : function(o) {\n\t\treturn o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n\t}, _typeof(o);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n//#endregion\n//#region src/token.ts\n/**\n* Represents one item in the parsed token stream, storing parsed data and\n* providing helpers for managing HTML attributes.\n*/\nvar Token = class {\n\tconstructor(type, tag, nesting) {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Source map info. Format: `[ line_begin, line_end ]`\n\t\t\t*/\n\t\t\t\"map\",\n\t\t\tnull\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* nesting level, the same as `state.level`\n\t\t\t*/\n\t\t\t\"level\",\n\t\t\t0\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* An array of child nodes (inline and img tokens)\n\t\t\t*/\n\t\t\t\"children\",\n\t\t\tnull\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* In a case of self-closing tag (code, html, fence, etc.),\n\t\t\t* it has contents of this tag.\n\t\t\t*/\n\t\t\t\"content\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* '*' or '_' for emphasis, fence string for fence, etc.\n\t\t\t*/\n\t\t\t\"markup\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Additional information:\n\t\t\t*\n\t\t\t* - Info string for \"fence\" tokens\n\t\t\t* - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n\t\t\t* - The string value of the item marker for ordered-list \"list_item_open\" tokens\n\t\t\t*/\n\t\t\t\"info\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* True for block-level tokens, false for inline tokens.\n\t\t\t* Used in renderer to calculate line breaks\n\t\t\t*/\n\t\t\t\"block\",\n\t\t\tfalse\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* If it's true, ignore this element when rendering. Used for tight lists\n\t\t\t* to hide paragraphs.\n\t\t\t*/\n\t\t\t\"hidden\",\n\t\t\tfalse\n\t\t);\n\t\tthis.type = type;\n\t\tthis.tag = tag;\n\t\tthis.attrs = null;\n\t\tthis.nesting = nesting;\n\t\tthis.meta = null;\n\t}\n\t/**\n\t* Search attribute index by name.\n\t*/\n\tattrIndex(name) {\n\t\tif (!this.attrs) return -1;\n\t\tconst attrs = this.attrs;\n\t\tfor (let i = 0, len = attrs.length; i < len; i++) if (attrs[i][0] === name) return i;\n\t\treturn -1;\n\t}\n\t/**\n\t* Add `[ name, value ]` attribute to list. Init attrs if necessary\n\t*/\n\tattrPush(attrData) {\n\t\tif (this.attrs) this.attrs.push(attrData);\n\t\telse this.attrs = [attrData];\n\t}\n\t/**\n\t* Set `name` attribute to `value`. Override old value if exists.\n\t*/\n\tattrSet(name, value) {\n\t\tconst idx = this.attrIndex(name);\n\t\tconst attrData = [name, value];\n\t\tif (idx < 0) this.attrPush(attrData);\n\t\telse this.attrs[idx] = attrData;\n\t}\n\t/**\n\t* Get the value of attribute `name`, or null if it does not exist.\n\t*/\n\tattrGet(name) {\n\t\tconst idx = this.attrIndex(name);\n\t\tlet value = null;\n\t\tif (idx >= 0) value = this.attrs[idx][1];\n\t\treturn value;\n\t}\n\t/**\n\t* Join value to existing attribute via space. Or create new attribute if not\n\t* exists. Useful to operate with token classes.\n\t*/\n\tattrJoin(name, value) {\n\t\tconst idx = this.attrIndex(name);\n\t\tif (idx < 0) this.attrPush([name, value]);\n\t\telse this.attrs[idx][1] = `${this.attrs[idx][1]} ${value}`;\n\t}\n};\n//#endregion\n//#region src/ruler.ts\n/**\n* Helper class, used by {@link MarkdownIt.core}, {@link MarkdownIt.block} and\n* {@link MarkdownIt.inline} to manage sequences of functions (rules):\n*\n* - keep rules in defined order\n* - assign the name to each rule\n* - enable/disable rules\n* - add/replace rules\n* - allow assign rules to additional named chains (in the same)\n* - cacheing lists of active rules\n*\n* You will not need use this class directly until write plugins. For simple\n* rules control use {@link MarkdownIt.disable}, {@link MarkdownIt.enable} and\n* {@link MarkdownIt.use}.\n*/\nvar Ruler = class {\n\tconstructor() {\n\t\t_defineProperty(this, \"__rules__\", []);\n\t\t_defineProperty(this, \"__cache__\", null);\n\t}\n\t__find__(name) {\n\t\tfor (let i = 0; i < this.__rules__.length; i++) if (this.__rules__[i].name === name) return i;\n\t\treturn -1;\n\t}\n\t__compile__() {\n\t\tconst chains = /* @__PURE__ */ new Set();\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\tif (!rule.enabled) return;\n\t\t\trule.alt.forEach((altName) => {\n\t\t\t\tif (altName) chains.add(altName);\n\t\t\t});\n\t\t});\n\t\tthis.__cache__ = Object.create(null);\n\t\tthis.__cache__[\"\"] = [];\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\tif (rule.enabled) this.__cache__[\"\"].push(rule.fn);\n\t\t});\n\t\tchains.forEach((chain) => {\n\t\t\tthis.__cache__[chain] = [];\n\t\t\tthis.__rules__.forEach((rule) => {\n\t\t\t\tif (rule.enabled && rule.alt.indexOf(chain) >= 0) this.__cache__[chain].push(rule.fn);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Replace rule by name with new function & options. Throws error if name not\n\t* found.\n\t*\n\t* @param name Rule name to replace.\n\t* @param fn New rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example Replace existing typographer replacement rule with new one\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.core.ruler.at('replacements', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tat(name, fn, options = {}) {\n\t\tconst index = this.__find__(name);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${name}`);\n\t\tthis.__rules__[index].fn = fn;\n\t\tthis.__rules__[index].alt = options.alt || [];\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Add new rule to chain before one with given name. See also\n\t* {@link Ruler.after}, {@link Ruler.push}.\n\t*\n\t* @param beforeName New rule will be added before this one.\n\t* @param ruleName Name of added rule.\n\t* @param fn Rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tbefore(beforeName, ruleName, fn, options = {}) {\n\t\tconst index = this.__find__(beforeName);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${beforeName}`);\n\t\tthis.__rules__.splice(index, 0, {\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Add new rule to chain after one with given name. See also\n\t* {@link Ruler.before}, {@link Ruler.push}.\n\t*\n\t* @param afterName New rule will be added after this one.\n\t* @param ruleName Name of added rule.\n\t* @param fn Rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.inline.ruler.after('text', 'my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tafter(afterName, ruleName, fn, options = {}) {\n\t\tconst index = this.__find__(afterName);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${afterName}`);\n\t\tthis.__rules__.splice(index + 1, 0, {\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Push new rule to the end of chain. See also\n\t* {@link Ruler.before}, {@link Ruler.after}.\n\t*\n\t* @param ruleName Name of added rule.\n\t* @param fn Rule function.\n\t* @param options Rule options. `alt` is an array with names of \"alternate\"\n\t* chains.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.core.ruler.push('my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tpush(ruleName, fn, options = {}) {\n\t\tthis.__rules__.push({\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Enable rules with given names. If any rule name not found - throw Error.\n\t* Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.disable}, {@link Ruler.enableOnly}.\n\t*\n\t* @param list List of rule names to enable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t* @returns List of found rule names (if no exception happened).\n\t*/\n\tenable(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tconst result = [];\n\t\tlist.forEach((name) => {\n\t\t\tconst idx = this.__find__(name);\n\t\t\tif (idx < 0) {\n\t\t\t\tif (ignoreInvalid) return;\n\t\t\t\tthrow new Error(`Rules manager: invalid rule name ${name}`);\n\t\t\t}\n\t\t\tthis.__rules__[idx].enabled = true;\n\t\t\tresult.push(name);\n\t\t});\n\t\tthis.__cache__ = null;\n\t\treturn result;\n\t}\n\t/**\n\t* Enable rules with given names, and disable everything else. If any rule name\n\t* not found - throw Error. Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.disable}, {@link Ruler.enable}.\n\t*\n\t* @param list List of rule names to enable (whitelist).\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t*/\n\tenableOnly(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\trule.enabled = false;\n\t\t});\n\t\tthis.enable(list, ignoreInvalid);\n\t}\n\t/**\n\t* Disable rules with given names. If any rule name not found - throw Error.\n\t* Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.enable}, {@link Ruler.enableOnly}.\n\t*\n\t* @param list List of rule names to disable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t* @returns List of found rule names (if no exception happened).\n\t*/\n\tdisable(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tconst result = [];\n\t\tlist.forEach((name) => {\n\t\t\tconst idx = this.__find__(name);\n\t\t\tif (idx < 0) {\n\t\t\t\tif (ignoreInvalid) return;\n\t\t\t\tthrow new Error(`Rules manager: invalid rule name ${name}`);\n\t\t\t}\n\t\t\tthis.__rules__[idx].enabled = false;\n\t\t\tresult.push(name);\n\t\t});\n\t\tthis.__cache__ = null;\n\t\treturn result;\n\t}\n\t/**\n\t* Return array of active functions (rules) for given chain name. It analyzes\n\t* rules configuration, compiles caches if not exists and returns result.\n\t*\n\t* Default chain name is `''` (empty string). It can't be skipped. That's\n\t* done intentionally, to keep signature monomorphic for high speed.\n\t*/\n\tgetRules(chainName) {\n\t\tif (!this.__cache__) this.__compile__();\n\t\treturn this.__cache__[chainName] || [];\n\t}\n};\n//#endregion\n//#region src/renderer.ts\nvar default_rules = {};\ndefault_rules.code_inline = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\treturn `<code${slf.renderAttrs(token)}>${escapeHtml(token.content)}</code>`;\n};\ndefault_rules.code_block = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\treturn `<pre${slf.renderAttrs(token)}><code>${escapeHtml(tokens[idx].content)}</code></pre>\\n`;\n};\ndefault_rules.fence = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\tconst info = token.info ? unescapeAll(token.info).trim() : \"\";\n\tlet langName = \"\";\n\tlet langAttrs = \"\";\n\tif (info) {\n\t\tconst arr = info.split(/(\\s+)/g);\n\t\tlangName = arr[0];\n\t\tlangAttrs = arr.slice(2).join(\"\");\n\t}\n\tlet highlighted;\n\tif (options.highlight) highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n\telse highlighted = escapeHtml(token.content);\n\tif (highlighted.indexOf(\"<pre\") === 0) return highlighted + \"\\n\";\n\tif (info) {\n\t\tconst i = token.attrIndex(\"class\");\n\t\tconst tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\t\tif (i < 0) tmpAttrs.push([\"class\", `${options.langPrefix}${langName}`]);\n\t\telse {\n\t\t\ttmpAttrs[i] = [tmpAttrs[i][0], tmpAttrs[i][1]];\n\t\t\ttmpAttrs[i][1] += ` ${options.langPrefix}${langName}`;\n\t\t}\n\t\tconst tmpToken = { attrs: tmpAttrs };\n\t\treturn `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`;\n\t}\n\treturn `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`;\n};\ndefault_rules.image = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\ttoken.attrs[token.attrIndex(\"alt\")][1] = slf.renderInlineAsText(token.children, options, env);\n\treturn slf.renderToken(tokens, idx, options);\n};\ndefault_rules.hardbreak = function(tokens, idx, options) {\n\treturn options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\";\n};\ndefault_rules.softbreak = function(tokens, idx, options) {\n\treturn options.breaks ? options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\" : \"\\n\";\n};\ndefault_rules.text = function(tokens, idx) {\n\treturn escapeHtml(tokens[idx].content);\n};\ndefault_rules.html_block = function(tokens, idx) {\n\treturn tokens[idx].content;\n};\ndefault_rules.html_inline = function(tokens, idx) {\n\treturn tokens[idx].content;\n};\n/**\n* Generates HTML from parsed token stream. Each instance has independent\n* copy of rules. Those can be rewritten with ease. Also, you can add new\n* rules if you create plugin and adds new token types.\n*\n* Creates new renderer instance and fills {@link Renderer.rules} with defaults.\n*/\nvar Renderer = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Contains render rules for tokens. Can be updated and extended.\n\t\t\t*\n\t\t\t* See [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts)\n\t\t\t* for more details and examples.\n\t\t\t*\n\t\t\t* @example Custom render rules\n\t\t\t* ```javascript\n\t\t\t* import MarkdownIt from 'markdown-it'\n\t\t\t* const md = new MarkdownIt()\n\t\t\t*\n\t\t\t* md.renderer.rules.strong_open = function () { return '<b>'; };\n\t\t\t* md.renderer.rules.strong_close = function () { return '</b>'; };\n\t\t\t*\n\t\t\t* const result = md.renderInline(...);\n\t\t\t* ```\n\t\t\t*\n\t\t\t* @example Each rule is called as independent static function with fixed signature\n\t\t\t* ```javascript\n\t\t\t* function my_token_render(tokens, idx, options, env, renderer) {\n\t\t\t* // ...\n\t\t\t* return renderedHTML;\n\t\t\t* }\n\t\t\t* ```\n\t\t\t*/\n\t\t\t\"rules\",\n\t\t\tObject.assign({}, default_rules)\n\t\t);\n\t}\n\t/**\n\t* Render token attributes to string.\n\t*/\n\trenderAttrs(token) {\n\t\tlet i, l, result;\n\t\tif (!token.attrs) return \"\";\n\t\tresult = \"\";\n\t\tfor (i = 0, l = token.attrs.length; i < l; i++) result += ` ${escapeHtml(token.attrs[i][0])}=\"${escapeHtml(String(token.attrs[i][1]))}\"`;\n\t\treturn result;\n\t}\n\t/**\n\t* Default token renderer. Can be overriden by custom function\n\t* in {@link Renderer.rules}.\n\t*\n\t* @param tokens List of tokens.\n\t* @param idx Token index to render.\n\t* @param options Params of parser instance.\n\t*/\n\trenderToken(tokens, idx, options) {\n\t\tconst token = tokens[idx];\n\t\tlet result = \"\";\n\t\tif (token.hidden) return \"\";\n\t\tlet prev = idx - 1;\n\t\twhile (prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === 0) prev--;\n\t\tif (token.block && token.nesting !== -1 && prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === -1) result += \"\\n\";\n\t\tresult += (token.nesting === -1 ? \"</\" : \"<\") + token.tag;\n\t\tresult += this.renderAttrs(token);\n\t\tif (token.nesting === 0 && options.xhtmlOut) result += \" /\";\n\t\tlet needLf = false;\n\t\tif (token.block) {\n\t\t\tneedLf = true;\n\t\t\tif (token.nesting === 1) {\n\t\t\t\tlet next = idx + 1;\n\t\t\t\twhile (next < tokens.length && tokens[next].hidden && tokens[next].nesting === 0) next++;\n\t\t\t\tif (next < tokens.length) {\n\t\t\t\t\tconst nextToken = tokens[next];\n\t\t\t\t\tif (nextToken.type === \"inline\" || nextToken.hidden) needLf = false;\n\t\t\t\t\telse if (nextToken.nesting === -1 && nextToken.tag === token.tag) needLf = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresult += needLf ? \">\\n\" : \">\";\n\t\treturn result;\n\t}\n\t/**\n\t* The same as {@link Renderer.render}, but for single token of `inline` type.\n\t*\n\t* @param tokens List on block tokens to render.\n\t* @param options Params of parser instance.\n\t* @param env Additional data from parsed input (references, for example).\n\t*/\n\trenderInline(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tconst rules = this.rules;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst type = tokens[i].type;\n\t\t\tif (typeof rules[type] !== \"undefined\") result += rules[type](tokens, i, options, env, this);\n\t\t\telse result += this.renderToken(tokens, i, options);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Special kludge for image `alt` attributes to conform CommonMark spec.\n\t* Don't try to use it! Spec requires to show `alt` content with stripped markup,\n\t* instead of simple escaping.\n\t*\n\t* @param tokens List on block tokens to render.\n\t* @param options Params of parser instance.\n\t* @param env Additional data from parsed input (references, for example).\n\t*/\n\trenderInlineAsText(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) switch (tokens[i].type) {\n\t\t\tcase \"text\":\n\t\t\tcase \"code_inline\":\n\t\t\t\tresult += tokens[i].content;\n\t\t\t\tbreak;\n\t\t\tcase \"image\":\n\t\t\t\tresult += this.renderInlineAsText(tokens[i].children, options, env);\n\t\t\t\tbreak;\n\t\t\tcase \"html_inline\":\n\t\t\tcase \"html_block\":\n\t\t\t\tresult += tokens[i].content;\n\t\t\t\tbreak;\n\t\t\tcase \"softbreak\":\n\t\t\tcase \"hardbreak\": result += \"\\n\";\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Takes token stream and generates HTML. Probably, you will never need to call\n\t* this method directly.\n\t*\n\t* @param tokens List on block tokens to render.\n\t* @param options Params of parser instance.\n\t* @param env Additional data from parsed input (references, for example).\n\t*/\n\trender(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tconst rules = this.rules;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst type = tokens[i].type;\n\t\t\tif (type === \"inline\") result += this.renderInline(tokens[i].children, options, env);\n\t\t\telse if (typeof rules[type] !== \"undefined\") result += rules[type](tokens, i, options, env, this);\n\t\t\telse result += this.renderToken(tokens, i, options);\n\t\t}\n\t\treturn result;\n\t}\n};\n//#endregion\n//#region src/rules_core/state_core.ts\n/** Mutable state passed through the core rules chain. */\nvar StateCore = class {\n\tconstructor(src, md, env) {\n\t\t_defineProperty(this, \"tokens\", []);\n\t\t_defineProperty(this, \"inlineMode\", false);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.env = env;\n\t\tthis.md = md;\n\t}\n};\n//#endregion\n//#region src/rules_core/normalize.ts\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\nfunction normalize(state) {\n\tlet str;\n\tstr = state.src.replace(NEWLINES_RE, \"\\n\");\n\tstr = str.replace(NULL_RE, \"�\");\n\tstate.src = str;\n}\n//#endregion\n//#region src/rules_core/block.ts\nfunction block(state) {\n\tlet token;\n\tif (state.inlineMode) {\n\t\ttoken = new state.Token(\"inline\", \"\", 0);\n\t\ttoken.content = state.src;\n\t\ttoken.map = [0, 1];\n\t\ttoken.children = [];\n\t\tstate.tokens.push(token);\n\t} else state.md.block.parse(state.src, state.md, state.env, state.tokens);\n}\n//#endregion\n//#region src/rules_core/strip_references.ts\nfunction strip_references(state) {\n\tconst tokens = state.tokens;\n\tlet last = 0;\n\tfor (let curr = 0; curr < tokens.length; curr++) {\n\t\tif (tokens[curr].type === \"reference_definition\") continue;\n\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\tlast++;\n\t}\n\tif (tokens.length !== last) tokens.length = last;\n}\n//#endregion\n//#region src/rules_core/inline.ts\nfunction inline(state) {\n\tconst tokens = state.tokens;\n\tfor (let i = 0, l = tokens.length; i < l; i++) {\n\t\tconst tok = tokens[i];\n\t\tif (tok.type === \"inline\") state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n\t}\n}\n//#endregion\n//#region src/rules_core/linkify.ts\nfunction isLinkOpen$1(str) {\n\treturn /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose$1(str) {\n\treturn /^<\\/a\\s*>/i.test(str);\n}\nfunction linkify$1(state) {\n\tconst blockTokens = state.tokens;\n\tif (!state.md.options.linkify) return;\n\tfor (let j = 0, l = blockTokens.length; j < l; j++) {\n\t\tif (blockTokens[j].type !== \"inline\" || !state.md.linkify.test(blockTokens[j].content)) continue;\n\t\tlet tokens = blockTokens[j].children;\n\t\tlet htmlLinkLevel = 0;\n\t\tfor (let i = tokens.length - 1; i >= 0; i--) {\n\t\t\tconst currentToken = tokens[i];\n\t\t\tif (currentToken.type === \"link_close\") {\n\t\t\t\ti--;\n\t\t\t\twhile (tokens[i].level !== currentToken.level && tokens[i].type !== \"link_open\") i--;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (currentToken.type === \"html_inline\") {\n\t\t\t\tif (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) htmlLinkLevel--;\n\t\t\t\tif (isLinkClose$1(currentToken.content)) htmlLinkLevel++;\n\t\t\t}\n\t\t\tif (htmlLinkLevel > 0) continue;\n\t\t\tif (currentToken.type === \"text\" && state.md.linkify.test(currentToken.content)) {\n\t\t\t\tconst text = currentToken.content;\n\t\t\t\tlet links = state.md.linkify.match(text);\n\t\t\t\tconst nodes = [];\n\t\t\t\tlet level = currentToken.level;\n\t\t\t\tlet lastPos = 0;\n\t\t\t\tif (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === \"text_special\") links = links.slice(1);\n\t\t\t\tfor (let ln = 0; ln < links.length; ln++) {\n\t\t\t\t\tconst url = links[ln].url;\n\t\t\t\t\tconst fullUrl = state.md.normalizeLink(url);\n\t\t\t\t\tif (!state.md.validateLink(fullUrl)) continue;\n\t\t\t\t\tlet urlText = links[ln].text;\n\t\t\t\t\tif (!links[ln].schema) urlText = state.md.normalizeLinkText(`http://${urlText}`).replace(/^http:\\/\\//, \"\");\n\t\t\t\t\telse if (links[ln].schema === \"mailto:\" && !/^mailto:/i.test(urlText)) urlText = state.md.normalizeLinkText(`mailto:${urlText}`).replace(/^mailto:/, \"\");\n\t\t\t\t\telse urlText = state.md.normalizeLinkText(urlText);\n\t\t\t\t\tconst pos = links[ln].index;\n\t\t\t\t\tif (pos > lastPos) {\n\t\t\t\t\t\tconst token = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\t\ttoken.content = text.slice(lastPos, pos);\n\t\t\t\t\t\ttoken.level = level;\n\t\t\t\t\t\tnodes.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tconst token_o = new state.Token(\"link_open\", \"a\", 1);\n\t\t\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\t\t\ttoken_o.level = level++;\n\t\t\t\t\ttoken_o.markup = \"linkify\";\n\t\t\t\t\ttoken_o.info = \"auto\";\n\t\t\t\t\tnodes.push(token_o);\n\t\t\t\t\tconst token_t = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\ttoken_t.content = urlText;\n\t\t\t\t\ttoken_t.level = level;\n\t\t\t\t\tnodes.push(token_t);\n\t\t\t\t\tconst token_c = new state.Token(\"link_close\", \"a\", -1);\n\t\t\t\t\ttoken_c.level = --level;\n\t\t\t\t\ttoken_c.markup = \"linkify\";\n\t\t\t\t\ttoken_c.info = \"auto\";\n\t\t\t\t\tnodes.push(token_c);\n\t\t\t\t\tlastPos = links[ln].lastIndex;\n\t\t\t\t}\n\t\t\t\tif (lastPos < text.length) {\n\t\t\t\t\tconst token = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\ttoken.content = text.slice(lastPos);\n\t\t\t\t\ttoken.level = level;\n\t\t\t\t\tnodes.push(token);\n\t\t\t\t}\n\t\t\t\tblockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n\t\t\t}\n\t\t}\n\t}\n}\n//#endregion\n//#region src/rules_core/replacements.ts\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\nvar SCOPED_ABBR_RE = /\\((c|tm|r)\\)/gi;\nvar SCOPED_ABBR = {\n\tc: \"©\",\n\tr: \"®\",\n\ttm: \"™\"\n};\nfunction replaceFn(match, name) {\n\treturn SCOPED_ABBR[name.toLowerCase()];\n}\nfunction replace_scoped(inlineTokens) {\n\tlet inside_autolink = 0;\n\tfor (let i = inlineTokens.length - 1; i >= 0; i--) {\n\t\tconst token = inlineTokens[i];\n\t\tif (token.type === \"text\" && !inside_autolink) token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n\t\tif (token.type === \"link_open\" && token.info === \"auto\") inside_autolink--;\n\t\tif (token.type === \"link_close\" && token.info === \"auto\") inside_autolink++;\n\t}\n}\nfunction replace_rare(inlineTokens) {\n\tlet inside_autolink = 0;\n\tfor (let i = inlineTokens.length - 1; i >= 0; i--) {\n\t\tconst token = inlineTokens[i];\n\t\tif (token.type === \"text\" && !inside_autolink) {\n\t\t\tif (RARE_RE.test(token.content)) token.content = token.content.replace(/\\+-/g, \"±\").replace(/\\.{2,}/g, \"…\").replace(/([?!])…/g, \"$1..\").replace(/([?!]){4,}/g, \"$1$1$1\").replace(/,{2,}/g, \",\").replace(/(^|[^-])---(?=[^-]|$)/gm, \"$1—\").replace(/(^|\\s)--(?=\\s|$)/gm, \"$1–\").replace(/(^|[^-\\s])--(?=[^-\\s]|$)/gm, \"$1–\");\n\t\t}\n\t\tif (token.type === \"link_open\" && token.info === \"auto\") inside_autolink--;\n\t\tif (token.type === \"link_close\" && token.info === \"auto\") inside_autolink++;\n\t}\n}\nfunction replace(state) {\n\tlet blkIdx;\n\tif (!state.md.options.typographer) return;\n\tfor (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\t\tif (state.tokens[blkIdx].type !== \"inline\") continue;\n\t\tif (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) replace_scoped(state.tokens[blkIdx].children);\n\t\tif (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);\n\t}\n}\n//#endregion\n//#region src/rules_core/smartquotes.ts\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = \"’\";\nfunction addReplacement(replacements, tokenIdx, pos, ch) {\n\tif (!replacements[tokenIdx]) replacements[tokenIdx] = [];\n\treplacements[tokenIdx].push({\n\t\tpos,\n\t\tch\n\t});\n}\nfunction applyReplacements(str, replacements) {\n\tlet result = \"\";\n\tlet lastPos = 0;\n\treplacements.sort((a, b) => a.pos - b.pos);\n\tfor (let i = 0; i < replacements.length; i++) {\n\t\tconst replacement = replacements[i];\n\t\tresult += str.slice(lastPos, replacement.pos) + replacement.ch;\n\t\tlastPos = replacement.pos + 1;\n\t}\n\treturn result + str.slice(lastPos);\n}\nfunction process_inlines(tokens, state) {\n\tlet j;\n\tconst stack = [];\n\tconst replacements = {};\n\tfor (let i = 0; i < tokens.length; i++) {\n\t\tconst token = tokens[i];\n\t\tconst thisLevel = tokens[i].level;\n\t\tfor (j = stack.length - 1; j >= 0; j--) if (stack[j].level <= thisLevel) break;\n\t\tstack.length = j + 1;\n\t\tif (token.type !== \"text\") continue;\n\t\tconst text = token.content;\n\t\tlet pos = 0;\n\t\tconst max = text.length;\n\t\tOUTER: while (pos < max) {\n\t\t\tQUOTE_RE.lastIndex = pos;\n\t\t\tconst t = QUOTE_RE.exec(text);\n\t\t\tif (!t) break;\n\t\t\tlet canOpen = true;\n\t\t\tlet canClose = true;\n\t\t\tpos = t.index + 1;\n\t\t\tconst isSingle = t[0] === \"'\";\n\t\t\tlet lastChar = 32;\n\t\t\tif (t.index - 1 >= 0) lastChar = text.charCodeAt(t.index - 1);\n\t\t\telse for (j = i - 1; j >= 0; j--) {\n\t\t\t\tif (tokens[j].type === \"softbreak\" || tokens[j].type === \"hardbreak\") break;\n\t\t\t\tif (!tokens[j].content) continue;\n\t\t\t\tlastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet nextChar = 32;\n\t\t\tif (pos < max) nextChar = text.charCodeAt(pos);\n\t\t\telse for (j = i + 1; j < tokens.length; j++) {\n\t\t\t\tif (tokens[j].type === \"softbreak\" || tokens[j].type === \"hardbreak\") break;\n\t\t\t\tif (!tokens[j].content) continue;\n\t\t\t\tnextChar = tokens[j].content.charCodeAt(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);\n\t\t\tconst isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);\n\t\t\tconst isLastWhiteSpace = isWhiteSpace(lastChar);\n\t\t\tconst isNextWhiteSpace = isWhiteSpace(nextChar);\n\t\t\tif (isNextWhiteSpace) canOpen = false;\n\t\t\telse if (isNextPunctChar) {\n\t\t\t\tif (!(isLastWhiteSpace || isLastPunctChar)) canOpen = false;\n\t\t\t}\n\t\t\tif (isLastWhiteSpace) canClose = false;\n\t\t\telse if (isLastPunctChar) {\n\t\t\t\tif (!(isNextWhiteSpace || isNextPunctChar)) canClose = false;\n\t\t\t}\n\t\t\tif (nextChar === 34 && t[0] === \"\\\"\") {\n\t\t\t\tif (lastChar >= 48 && lastChar <= 57) canClose = canOpen = false;\n\t\t\t}\n\t\t\tif (canOpen && canClose) {\n\t\t\t\tcanOpen = isLastPunctChar;\n\t\t\t\tcanClose = isNextPunctChar;\n\t\t\t}\n\t\t\tif (!canOpen && !canClose) {\n\t\t\t\tif (isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (canClose) for (j = stack.length - 1; j >= 0; j--) {\n\t\t\t\tlet item = stack[j];\n\t\t\t\tif (stack[j].level < thisLevel) break;\n\t\t\t\tif (item.single === isSingle && stack[j].level === thisLevel) {\n\t\t\t\t\titem = stack[j];\n\t\t\t\t\tlet openQuote;\n\t\t\t\t\tlet closeQuote;\n\t\t\t\t\tif (isSingle) {\n\t\t\t\t\t\topenQuote = state.md.options.quotes[2];\n\t\t\t\t\t\tcloseQuote = state.md.options.quotes[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\topenQuote = state.md.options.quotes[0];\n\t\t\t\t\t\tcloseQuote = state.md.options.quotes[1];\n\t\t\t\t\t}\n\t\t\t\t\taddReplacement(replacements, i, t.index, closeQuote);\n\t\t\t\t\taddReplacement(replacements, item.token, item.pos, openQuote);\n\t\t\t\t\tstack.length = j;\n\t\t\t\t\tcontinue OUTER;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (canOpen) stack.push({\n\t\t\t\ttoken: i,\n\t\t\t\tpos: t.index,\n\t\t\t\tsingle: isSingle,\n\t\t\t\tlevel: thisLevel\n\t\t\t});\n\t\t\telse if (canClose && isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);\n\t\t}\n\t}\n\tObject.keys(replacements).forEach(function(tokenIdx) {\n\t\tconst idx = Number(tokenIdx);\n\t\ttokens[idx].content = applyReplacements(tokens[idx].content, replacements[tokenIdx]);\n\t});\n}\nfunction smartquotes(state) {\n\tif (!state.md.options.typographer) return;\n\tfor (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\t\tif (state.tokens[blkIdx].type !== \"inline\" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) continue;\n\t\tprocess_inlines(state.tokens[blkIdx].children, state);\n\t}\n}\n//#endregion\n//#region src/rules_core/text_join.ts\nfunction join_alt(tokens) {\n\tlet curr, last;\n\tconst max = tokens.length;\n\tfor (curr = 0; curr < max; curr++) if (tokens[curr].type === \"text_special\") tokens[curr].type = \"text\";\n\tfor (curr = last = 0; curr < max; curr++) if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\telse {\n\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\tlast++;\n\t}\n\tif (curr !== last) tokens.length = last;\n}\nfunction text_join(state) {\n\tlet curr, last;\n\tconst blockTokens = state.tokens;\n\tconst l = blockTokens.length;\n\tfor (let j = 0; j < l; j++) {\n\t\tif (blockTokens[j].type !== \"inline\") continue;\n\t\tconst tokens = blockTokens[j].children;\n\t\tconst max = tokens.length;\n\t\tfor (curr = 0; curr < max; curr++) {\n\t\t\tif (tokens[curr].type === \"text_special\") tokens[curr].type = \"text\";\n\t\t\tif (tokens[curr].children) join_alt(tokens[curr].children);\n\t\t}\n\t\tfor (curr = last = 0; curr < max; curr++) if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\t\telse {\n\t\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\t\tlast++;\n\t\t}\n\t\tif (curr !== last) tokens.length = last;\n\t}\n}\n//#endregion\n//#region src/parser_core.ts\nvar _rules$2 = [\n\t[\"normalize\", normalize],\n\t[\"block\", block],\n\t[\"strip_references\", strip_references],\n\t[\"inline\", inline],\n\t[\"linkify\", linkify$1],\n\t[\"replacements\", replace],\n\t[\"smartquotes\", smartquotes],\n\t[\"text_join\", text_join]\n];\n/**\n* Top-level rules executor. Glues block/inline parsers and does intermediate\n* transformations.\n*/\nvar ParserCore = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of core rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateCore);\n\t\tfor (let i = 0; i < _rules$2.length; i++) this.ruler.push(_rules$2[i][0], _rules$2[i][1]);\n\t}\n\t/**\n\t* Executes core chain rules.\n\t*/\n\tprocess(state) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tfor (let i = 0, l = rules.length; i < l; i++) rules[i](state);\n\t}\n};\n//#endregion\n//#region src/rules_block/state_block.ts\n/** Mutable state passed to block rules while tokenizing a source document. */\nvar StateBlock = class {\n\tconstructor(src, md, env, tokens) {\n\t\t_defineProperty(this, \"bMarks\", []);\n\t\t_defineProperty(this, \"eMarks\", []);\n\t\t_defineProperty(this, \"tShift\", []);\n\t\t_defineProperty(this, \"sCount\", []);\n\t\t_defineProperty(this, \"bsCount\", []);\n\t\t_defineProperty(this, \"blkIndent\", 0);\n\t\t_defineProperty(this, \"line\", 0);\n\t\t_defineProperty(this, \"lineMax\", 0);\n\t\t_defineProperty(this, \"tight\", false);\n\t\t_defineProperty(this, \"listIndent\", -1);\n\t\t_defineProperty(this, \"parentType\", \"root\");\n\t\t_defineProperty(this, \"level\", 0);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.md = md;\n\t\tthis.env = env;\n\t\tthis.tokens = tokens;\n\t\tconst s = this.src;\n\t\tfor (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n\t\t\tconst ch = s.charCodeAt(pos);\n\t\t\tif (!indent_found) if (isSpace(ch)) {\n\t\t\t\tindent++;\n\t\t\t\tif (ch === 9) offset += 4 - offset % 4;\n\t\t\t\telse offset++;\n\t\t\t\tcontinue;\n\t\t\t} else indent_found = true;\n\t\t\tif (ch === 10 || pos === len - 1) {\n\t\t\t\tif (ch !== 10) pos++;\n\t\t\t\tthis.bMarks.push(start);\n\t\t\t\tthis.eMarks.push(pos);\n\t\t\t\tthis.tShift.push(indent);\n\t\t\t\tthis.sCount.push(offset);\n\t\t\t\tthis.bsCount.push(0);\n\t\t\t\tindent_found = false;\n\t\t\t\tindent = 0;\n\t\t\t\toffset = 0;\n\t\t\t\tstart = pos + 1;\n\t\t\t}\n\t\t}\n\t\tthis.bMarks.push(s.length);\n\t\tthis.eMarks.push(s.length);\n\t\tthis.tShift.push(0);\n\t\tthis.sCount.push(0);\n\t\tthis.bsCount.push(0);\n\t\tthis.lineMax = this.bMarks.length - 1;\n\t}\n\tpush(type, tag, nesting) {\n\t\tconst token = new Token(type, tag, nesting);\n\t\ttoken.block = true;\n\t\tif (nesting < 0) this.level--;\n\t\ttoken.level = this.level;\n\t\tif (nesting > 0) this.level++;\n\t\tthis.tokens.push(token);\n\t\treturn token;\n\t}\n\tisEmpty(line) {\n\t\treturn this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n\t}\n\tskipEmptyLines(from) {\n\t\tfor (let max = this.lineMax; from < max; from++) if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) break;\n\t\treturn from;\n\t}\n\tskipSpaces(pos) {\n\t\tfor (let max = this.src.length; pos < max; pos++) if (!isSpace(this.src.charCodeAt(pos))) break;\n\t\treturn pos;\n\t}\n\tskipSpacesBack(pos, min) {\n\t\tif (pos <= min) return pos;\n\t\twhile (pos > min) if (!isSpace(this.src.charCodeAt(--pos))) return pos + 1;\n\t\treturn pos;\n\t}\n\tskipChars(pos, code) {\n\t\tfor (let max = this.src.length; pos < max; pos++) if (this.src.charCodeAt(pos) !== code) break;\n\t\treturn pos;\n\t}\n\tskipCharsBack(pos, code, min) {\n\t\tif (pos <= min) return pos;\n\t\twhile (pos > min) if (code !== this.src.charCodeAt(--pos)) return pos + 1;\n\t\treturn pos;\n\t}\n\tgetLines(begin, end, indent, keepLastLF) {\n\t\tif (begin >= end) return \"\";\n\t\tconst queue = new Array(end - begin);\n\t\tfor (let i = 0, line = begin; line < end; line++, i++) {\n\t\t\tlet lineIndent = 0;\n\t\t\tconst lineStart = this.bMarks[line];\n\t\t\tlet first = lineStart;\n\t\t\tlet last;\n\t\t\tif (line + 1 < end || keepLastLF) last = this.eMarks[line] + 1;\n\t\t\telse last = this.eMarks[line];\n\t\t\twhile (first < last && lineIndent < indent) {\n\t\t\t\tconst ch = this.src.charCodeAt(first);\n\t\t\t\tif (isSpace(ch)) if (ch === 9) lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n\t\t\t\telse lineIndent++;\n\t\t\t\telse if (first - lineStart < this.tShift[line]) lineIndent++;\n\t\t\t\telse break;\n\t\t\t\tfirst++;\n\t\t\t}\n\t\t\tif (lineIndent > indent) queue[i] = new Array(lineIndent - indent + 1).join(\" \") + this.src.slice(first, last);\n\t\t\telse queue[i] = this.src.slice(first, last);\n\t\t}\n\t\treturn queue.join(\"\");\n\t}\n};\n//#endregion\n//#region src/rules_block/table.ts\nvar MAX_AUTOCOMPLETED_CELLS = 65536;\nfunction getLine(state, line) {\n\tconst pos = state.bMarks[line] + state.tShift[line];\n\tconst max = state.eMarks[line];\n\treturn state.src.slice(pos, max);\n}\nfunction escapedSplit(str) {\n\tconst result = [];\n\tconst max = str.length;\n\tlet pos = 0;\n\tlet ch = str.charCodeAt(pos);\n\tlet isEscaped = false;\n\tlet lastPos = 0;\n\tlet current = \"\";\n\twhile (pos < max) {\n\t\tif (ch === 124) if (!isEscaped) {\n\t\t\tresult.push(current + str.substring(lastPos, pos));\n\t\t\tcurrent = \"\";\n\t\t\tlastPos = pos + 1;\n\t\t} else {\n\t\t\tcurrent += str.substring(lastPos, pos - 1);\n\t\t\tlastPos = pos;\n\t\t}\n\t\tisEscaped = ch === 92;\n\t\tpos++;\n\t\tch = str.charCodeAt(pos);\n\t}\n\tresult.push(current + str.substring(lastPos));\n\treturn result;\n}\nfunction table(state, startLine, endLine, silent) {\n\tif (startLine + 2 > endLine) return false;\n\tlet nextLine = startLine + 1;\n\tif (state.sCount[nextLine] < state.blkIndent) return false;\n\tif (state.sCount[nextLine] - state.blkIndent >= 4) return false;\n\tlet pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\tif (pos >= state.eMarks[nextLine]) return false;\n\tconst firstCh = state.src.charCodeAt(pos++);\n\tif (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) return false;\n\tif (pos >= state.eMarks[nextLine]) return false;\n\tconst secondCh = state.src.charCodeAt(pos++);\n\tif (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace(secondCh)) return false;\n\tif (firstCh === 45 && isSpace(secondCh)) return false;\n\twhile (pos < state.eMarks[nextLine]) {\n\t\tconst ch = state.src.charCodeAt(pos);\n\t\tif (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace(ch)) return false;\n\t\tpos++;\n\t}\n\tlet lineText = getLine(state, startLine + 1);\n\tlet columns = lineText.split(\"|\");\n\tconst aligns = [];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst t = columns[i].trim();\n\t\tif (!t) if (i === 0 || i === columns.length - 1) continue;\n\t\telse return false;\n\t\tif (!/^:?-+:?$/.test(t)) return false;\n\t\tif (t.charCodeAt(t.length - 1) === 58) aligns.push(t.charCodeAt(0) === 58 ? \"center\" : \"right\");\n\t\telse if (t.charCodeAt(0) === 58) aligns.push(\"left\");\n\t\telse aligns.push(\"\");\n\t}\n\tlineText = getLine(state, startLine).trim();\n\tif (lineText.indexOf(\"|\") === -1) return false;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tcolumns = escapedSplit(lineText);\n\tif (columns.length && columns[0] === \"\") columns.shift();\n\tif (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n\tconst columnCount = columns.length;\n\tif (columnCount === 0 || columnCount !== aligns.length) return false;\n\tif (silent) return true;\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"table\";\n\tconst terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n\tconst token_to = state.push(\"table_open\", \"table\", 1);\n\tconst tableLines = [startLine, 0];\n\ttoken_to.map = tableLines;\n\tconst token_tho = state.push(\"thead_open\", \"thead\", 1);\n\ttoken_tho.map = [startLine, startLine + 1];\n\tconst token_htro = state.push(\"tr_open\", \"tr\", 1);\n\ttoken_htro.map = [startLine, startLine + 1];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst token_ho = state.push(\"th_open\", \"th\", 1);\n\t\tif (aligns[i]) token_ho.attrs = [[\"style\", `text-align:${aligns[i]}`]];\n\t\tconst token_il = state.push(\"inline\", \"\", 0);\n\t\ttoken_il.content = columns[i].trim();\n\t\ttoken_il.children = [];\n\t\tstate.push(\"th_close\", \"th\", -1);\n\t}\n\tstate.push(\"tr_close\", \"tr\", -1);\n\tstate.push(\"thead_close\", \"thead\", -1);\n\tlet tbodyLines;\n\tlet autocompletedCells = 0;\n\tfor (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n\t\tif (state.sCount[nextLine] < state.blkIndent) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t\tlineText = getLine(state, nextLine).trim();\n\t\tif (!lineText) break;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) break;\n\t\tcolumns = escapedSplit(lineText);\n\t\tif (columns.length && columns[0] === \"\") columns.shift();\n\t\tif (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n\t\tautocompletedCells += columnCount - columns.length;\n\t\tif (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) break;\n\t\tif (nextLine === startLine + 2) {\n\t\t\tconst token_tbo = state.push(\"tbody_open\", \"tbody\", 1);\n\t\t\ttoken_tbo.map = tbodyLines = [startLine + 2, 0];\n\t\t}\n\t\tconst token_tro = state.push(\"tr_open\", \"tr\", 1);\n\t\ttoken_tro.map = [nextLine, nextLine + 1];\n\t\tfor (let i = 0; i < columnCount; i++) {\n\t\t\tconst token_tdo = state.push(\"td_open\", \"td\", 1);\n\t\t\tif (aligns[i]) token_tdo.attrs = [[\"style\", `text-align:${aligns[i]}`]];\n\t\t\tconst token_il = state.push(\"inline\", \"\", 0);\n\t\t\ttoken_il.content = columns[i] ? columns[i].trim() : \"\";\n\t\t\ttoken_il.children = [];\n\t\t\tstate.push(\"td_close\", \"td\", -1);\n\t\t}\n\t\tstate.push(\"tr_close\", \"tr\", -1);\n\t}\n\tif (tbodyLines) {\n\t\tstate.push(\"tbody_close\", \"tbody\", -1);\n\t\ttbodyLines[1] = nextLine;\n\t}\n\tstate.push(\"table_close\", \"table\", -1);\n\ttableLines[1] = nextLine;\n\tstate.parentType = oldParentType;\n\tstate.line = nextLine;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/code.ts\nfunction code(state, startLine, endLine) {\n\tif (state.sCount[startLine] - state.blkIndent < 4) return false;\n\tlet nextLine = startLine + 1;\n\tlet last = nextLine;\n\twhile (nextLine < endLine) {\n\t\tif (state.isEmpty(nextLine)) {\n\t\t\tnextLine++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) {\n\t\t\tnextLine++;\n\t\t\tlast = nextLine;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tstate.line = last;\n\tconst token = state.push(\"code_block\", \"code\", 0);\n\ttoken.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + \"\\n\";\n\ttoken.map = [startLine, state.line];\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/fence.ts\nfunction fence(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (pos + 3 > max) return false;\n\tconst marker = state.src.charCodeAt(pos);\n\tif (marker !== 126 && marker !== 96) return false;\n\tlet mem = pos;\n\tpos = state.skipChars(pos, marker);\n\tlet len = pos - mem;\n\tif (len < 3) return false;\n\tconst markup = state.src.slice(mem, pos);\n\tconst params = state.src.slice(pos, max);\n\tif (marker === 96) {\n\t\tif (params.indexOf(String.fromCharCode(marker)) >= 0) return false;\n\t}\n\tif (silent) return true;\n\tlet nextLine = startLine;\n\tlet haveEndMarker = false;\n\tfor (;;) {\n\t\tnextLine++;\n\t\tif (nextLine >= endLine) break;\n\t\tpos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tif (pos < max && state.sCount[nextLine] < state.blkIndent) break;\n\t\tif (state.src.charCodeAt(pos) !== marker) continue;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) continue;\n\t\tpos = state.skipChars(pos, marker);\n\t\tif (pos - mem < len) continue;\n\t\tpos = state.skipSpaces(pos);\n\t\tif (pos < max) continue;\n\t\thaveEndMarker = true;\n\t\tbreak;\n\t}\n\tlen = state.sCount[startLine];\n\tstate.line = nextLine + (haveEndMarker ? 1 : 0);\n\tconst token = state.push(\"fence\", \"code\", 0);\n\ttoken.info = params;\n\ttoken.content = state.getLines(startLine + 1, nextLine, len, true);\n\ttoken.markup = markup;\n\ttoken.map = [startLine, state.line];\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/blockquote.ts\nfunction blockquote(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tconst oldLineMax = state.lineMax;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (state.src.charCodeAt(pos) !== 62) return false;\n\tif (silent) return true;\n\tconst oldBMarks = [];\n\tconst oldBSCount = [];\n\tconst oldSCount = [];\n\tconst oldTShift = [];\n\tconst terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"blockquote\";\n\tlet lastLineEmpty = false;\n\tlet nextLine;\n\tfor (nextLine = startLine; nextLine < endLine; nextLine++) {\n\t\tconst isOutdented = state.sCount[nextLine] < state.blkIndent;\n\t\tpos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tif (pos >= max) break;\n\t\tif (state.src.charCodeAt(pos++) === 62 && !isOutdented) {\n\t\t\tlet initial = state.sCount[nextLine] + 1;\n\t\t\tlet spaceAfterMarker;\n\t\t\tlet adjustTab;\n\t\t\tif (state.src.charCodeAt(pos) === 32) {\n\t\t\t\tpos++;\n\t\t\t\tinitial++;\n\t\t\t\tadjustTab = false;\n\t\t\t\tspaceAfterMarker = true;\n\t\t\t} else if (state.src.charCodeAt(pos) === 9) {\n\t\t\t\tspaceAfterMarker = true;\n\t\t\t\tif ((state.bsCount[nextLine] + initial) % 4 === 3) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tinitial++;\n\t\t\t\t\tadjustTab = false;\n\t\t\t\t} else adjustTab = true;\n\t\t\t} else spaceAfterMarker = false;\n\t\t\tlet offset = initial;\n\t\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\t\tstate.bMarks[nextLine] = pos;\n\t\t\twhile (pos < max) {\n\t\t\t\tconst ch = state.src.charCodeAt(pos);\n\t\t\t\tif (isSpace(ch)) if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n\t\t\t\telse offset++;\n\t\t\t\telse break;\n\t\t\t\tpos++;\n\t\t\t}\n\t\t\tlastLineEmpty = pos >= max;\n\t\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\t\tstate.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\t\t\toldSCount.push(state.sCount[nextLine]);\n\t\t\tstate.sCount[nextLine] = offset - initial;\n\t\t\toldTShift.push(state.tShift[nextLine]);\n\t\t\tstate.tShift[nextLine] = pos - state.bMarks[nextLine];\n\t\t\tcontinue;\n\t\t}\n\t\tif (lastLineEmpty) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) {\n\t\t\tstate.lineMax = nextLine;\n\t\t\tif (state.blkIndent !== 0) {\n\t\t\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\t\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\t\t\toldTShift.push(state.tShift[nextLine]);\n\t\t\t\toldSCount.push(state.sCount[nextLine]);\n\t\t\t\tstate.sCount[nextLine] -= state.blkIndent;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\toldTShift.push(state.tShift[nextLine]);\n\t\toldSCount.push(state.sCount[nextLine]);\n\t\tstate.sCount[nextLine] = -1;\n\t}\n\tconst oldIndent = state.blkIndent;\n\tstate.blkIndent = 0;\n\tconst token_o = state.push(\"blockquote_open\", \"blockquote\", 1);\n\ttoken_o.markup = \">\";\n\tconst lines = [startLine, 0];\n\ttoken_o.map = lines;\n\tstate.md.block.tokenize(state, startLine, nextLine);\n\tconst token_c = state.push(\"blockquote_close\", \"blockquote\", -1);\n\ttoken_c.markup = \">\";\n\tstate.lineMax = oldLineMax;\n\tstate.parentType = oldParentType;\n\tlines[1] = state.line;\n\tfor (let i = 0; i < oldTShift.length; i++) {\n\t\tstate.bMarks[i + startLine] = oldBMarks[i];\n\t\tstate.tShift[i + startLine] = oldTShift[i];\n\t\tstate.sCount[i + startLine] = oldSCount[i];\n\t\tstate.bsCount[i + startLine] = oldBSCount[i];\n\t}\n\tstate.blkIndent = oldIndent;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/hr.ts\nfunction hr(state, startLine, endLine, silent) {\n\tconst max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tconst marker = state.src.charCodeAt(pos++);\n\tif (marker !== 42 && marker !== 45 && marker !== 95) return false;\n\tlet cnt = 1;\n\twhile (pos < max) {\n\t\tconst ch = state.src.charCodeAt(pos++);\n\t\tif (ch !== marker && !isSpace(ch)) return false;\n\t\tif (ch === marker) cnt++;\n\t}\n\tif (cnt < 3) return false;\n\tif (silent) return true;\n\tstate.line = startLine + 1;\n\tconst token = state.push(\"hr\", \"hr\", 0);\n\ttoken.map = [startLine, state.line];\n\ttoken.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/list.ts\nfunction skipBulletListMarker(state, startLine) {\n\tconst max = state.eMarks[startLine];\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tconst marker = state.src.charCodeAt(pos++);\n\tif (marker !== 42 && marker !== 45 && marker !== 43) return -1;\n\tif (pos < max) {\n\t\tif (!isSpace(state.src.charCodeAt(pos))) return -1;\n\t}\n\treturn pos;\n}\nfunction skipOrderedListMarker(state, startLine) {\n\tconst start = state.bMarks[startLine] + state.tShift[startLine];\n\tconst max = state.eMarks[startLine];\n\tlet pos = start;\n\tif (pos + 1 >= max) return -1;\n\tlet ch = state.src.charCodeAt(pos++);\n\tif (ch < 48 || ch > 57) return -1;\n\tfor (;;) {\n\t\tif (pos >= max) return -1;\n\t\tch = state.src.charCodeAt(pos++);\n\t\tif (ch >= 48 && ch <= 57) {\n\t\t\tif (pos - start >= 10) return -1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === 41 || ch === 46) break;\n\t\treturn -1;\n\t}\n\tif (pos < max) {\n\t\tch = state.src.charCodeAt(pos);\n\t\tif (!isSpace(ch)) return -1;\n\t}\n\treturn pos;\n}\nfunction markTightParagraphs(state, idx) {\n\tconst level = state.level + 2;\n\tfor (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) if (state.tokens[i].level === level && state.tokens[i].type === \"paragraph_open\") {\n\t\tstate.tokens[i + 2].hidden = true;\n\t\tstate.tokens[i].hidden = true;\n\t\ti += 2;\n\t}\n}\nfunction list(state, startLine, endLine, silent) {\n\tlet max, pos, start, token;\n\tlet nextLine = startLine;\n\tlet tight = true;\n\tif (state.sCount[nextLine] - state.blkIndent >= 4) return false;\n\tif (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) return false;\n\tlet isTerminatingParagraph = false;\n\tif (silent && state.parentType === \"paragraph\") {\n\t\tif (state.sCount[nextLine] >= state.blkIndent) isTerminatingParagraph = true;\n\t}\n\tlet isOrdered;\n\tlet markerValue;\n\tlet posAfterMarker;\n\tif ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n\t\tisOrdered = true;\n\t\tstart = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmarkerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\t\tif (isTerminatingParagraph && markerValue !== 1) return false;\n\t} else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) isOrdered = false;\n\telse return false;\n\tif (isTerminatingParagraph) {\n\t\tif (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n\t}\n\tif (silent) return true;\n\tconst markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\tconst listTokIdx = state.tokens.length;\n\tif (isOrdered) {\n\t\ttoken = state.push(\"ordered_list_open\", \"ol\", 1);\n\t\tif (markerValue !== 1) token.attrs = [[\"start\", markerValue]];\n\t} else token = state.push(\"bullet_list_open\", \"ul\", 1);\n\tconst listLines = [nextLine, 0];\n\ttoken.map = listLines;\n\ttoken.markup = String.fromCharCode(markerCharCode);\n\tlet prevEmptyEnd = false;\n\tconst terminatorRules = state.md.block.ruler.getRules(\"list\");\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"list\";\n\twhile (nextLine < endLine) {\n\t\tpos = posAfterMarker;\n\t\tmax = state.eMarks[nextLine];\n\t\tconst initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\t\tlet offset = initial;\n\t\twhile (pos < max) {\n\t\t\tconst ch = state.src.charCodeAt(pos);\n\t\t\tif (ch === 9) offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n\t\t\telse if (ch === 32) offset++;\n\t\t\telse break;\n\t\t\tpos++;\n\t\t}\n\t\tconst contentStart = pos;\n\t\tlet indentAfterMarker;\n\t\tif (contentStart >= max) indentAfterMarker = 1;\n\t\telse indentAfterMarker = offset - initial;\n\t\tif (indentAfterMarker > 4) indentAfterMarker = 1;\n\t\tconst indent = initial + indentAfterMarker;\n\t\ttoken = state.push(\"list_item_open\", \"li\", 1);\n\t\ttoken.markup = String.fromCharCode(markerCharCode);\n\t\tconst itemLines = [nextLine, 0];\n\t\ttoken.map = itemLines;\n\t\tif (isOrdered) token.info = state.src.slice(start, posAfterMarker - 1);\n\t\tconst oldTight = state.tight;\n\t\tconst oldTShift = state.tShift[nextLine];\n\t\tconst oldSCount = state.sCount[nextLine];\n\t\tconst oldListIndent = state.listIndent;\n\t\tstate.listIndent = state.blkIndent;\n\t\tstate.blkIndent = indent;\n\t\tstate.tight = true;\n\t\tstate.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n\t\tstate.sCount[nextLine] = offset;\n\t\tif (contentStart >= max && state.isEmpty(nextLine + 1)) state.line = Math.min(state.line + 2, endLine);\n\t\telse state.md.block.tokenize(state, nextLine, endLine);\n\t\tif (!state.tight || prevEmptyEnd) tight = false;\n\t\tprevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);\n\t\tstate.blkIndent = state.listIndent;\n\t\tstate.listIndent = oldListIndent;\n\t\tstate.tShift[nextLine] = oldTShift;\n\t\tstate.sCount[nextLine] = oldSCount;\n\t\tstate.tight = oldTight;\n\t\ttoken = state.push(\"list_item_close\", \"li\", -1);\n\t\ttoken.markup = String.fromCharCode(markerCharCode);\n\t\tnextLine = state.line;\n\t\titemLines[1] = nextLine;\n\t\tif (nextLine >= endLine) break;\n\t\tif (state.sCount[nextLine] < state.blkIndent) break;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t\tif (isOrdered) {\n\t\t\tposAfterMarker = skipOrderedListMarker(state, nextLine);\n\t\t\tif (posAfterMarker < 0) break;\n\t\t\tstart = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\t} else {\n\t\t\tposAfterMarker = skipBulletListMarker(state, nextLine);\n\t\t\tif (posAfterMarker < 0) break;\n\t\t}\n\t\tif (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) break;\n\t}\n\tif (isOrdered) token = state.push(\"ordered_list_close\", \"ol\", -1);\n\telse token = state.push(\"bullet_list_close\", \"ul\", -1);\n\ttoken.markup = String.fromCharCode(markerCharCode);\n\tlistLines[1] = nextLine;\n\tstate.line = nextLine;\n\tstate.parentType = oldParentType;\n\tif (tight) markTightParagraphs(state, listTokIdx);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/reference.ts\nfunction reference(state, startLine, _endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tlet nextLine = startLine + 1;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (state.src.charCodeAt(pos) !== 91) return false;\n\tfunction getNextLine(nextLine) {\n\t\tconst endLine = state.lineMax;\n\t\tif (nextLine >= endLine || state.isEmpty(nextLine)) return null;\n\t\tlet isContinuation = false;\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) isContinuation = true;\n\t\tif (state.sCount[nextLine] < 0) isContinuation = true;\n\t\tif (!isContinuation) {\n\t\t\tconst terminatorRules = state.md.block.ruler.getRules(\"reference\");\n\t\t\tconst oldParentType = state.parentType;\n\t\t\tstate.parentType = \"reference\";\n\t\t\tlet terminate = false;\n\t\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\t\tterminate = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.parentType = oldParentType;\n\t\t\tif (terminate) return null;\n\t\t}\n\t\tconst pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tconst max = state.eMarks[nextLine];\n\t\treturn state.src.slice(pos, max + 1);\n\t}\n\tlet str = state.src.slice(pos, max + 1);\n\tmax = str.length;\n\tlet labelEnd = -1;\n\tfor (pos = 1; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 91) return false;\n\t\telse if (ch === 93) {\n\t\t\tlabelEnd = pos;\n\t\t\tbreak;\n\t\t} else if (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (ch === 92) {\n\t\t\tpos++;\n\t\t\tif (pos < max && str.charCodeAt(pos) === 10) {\n\t\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\t\tif (lineContent !== null) {\n\t\t\t\t\tstr += lineContent;\n\t\t\t\t\tmax = str.length;\n\t\t\t\t\tnextLine++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) return false;\n\tfor (pos = labelEnd + 2; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (isSpace(ch)) {} else break;\n\t}\n\tconst destRes = state.md.helpers.parseLinkDestination(str, pos, max);\n\tif (!destRes.ok) return false;\n\tconst href = state.md.normalizeLink(destRes.str);\n\tif (!state.md.validateLink(href)) return false;\n\tpos = destRes.pos;\n\tconst destEndPos = pos;\n\tconst destEndLineNo = nextLine;\n\tconst start = pos;\n\tfor (; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (isSpace(ch)) {} else break;\n\t}\n\tlet titleRes = state.md.helpers.parseLinkTitle(str, pos, max);\n\twhile (titleRes.can_continue) {\n\t\tconst lineContent = getNextLine(nextLine);\n\t\tif (lineContent === null) break;\n\t\tstr += lineContent;\n\t\tpos = max;\n\t\tmax = str.length;\n\t\tnextLine++;\n\t\ttitleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);\n\t}\n\tlet title;\n\tif (pos < max && start !== pos && titleRes.ok) {\n\t\ttitle = titleRes.str;\n\t\tpos = titleRes.pos;\n\t} else {\n\t\ttitle = \"\";\n\t\tpos = destEndPos;\n\t\tnextLine = destEndLineNo;\n\t}\n\twhile (pos < max) {\n\t\tif (!isSpace(str.charCodeAt(pos))) break;\n\t\tpos++;\n\t}\n\tif (pos < max && str.charCodeAt(pos) !== 10) {\n\t\tif (title) {\n\t\t\ttitle = \"\";\n\t\t\tpos = destEndPos;\n\t\t\tnextLine = destEndLineNo;\n\t\t\twhile (pos < max) {\n\t\t\t\tif (!isSpace(str.charCodeAt(pos))) break;\n\t\t\t\tpos++;\n\t\t\t}\n\t\t}\n\t}\n\tif (pos < max && str.charCodeAt(pos) !== 10) return false;\n\tconst label = normalizeReference(str.slice(1, labelEnd));\n\tif (!label) return false;\n\t/* istanbul ignore if */\n\tif (silent) return true;\n\tif (typeof state.env.references === \"undefined\") state.env.references = {};\n\tif (typeof state.env.references[label] === \"undefined\") state.env.references[label] = {\n\t\ttitle,\n\t\thref\n\t};\n\tconst token = state.push(\"reference_definition\", \"\", 0);\n\ttoken.map = [startLine, nextLine];\n\ttoken.hidden = true;\n\tconst meta = Object.create(null);\n\tmeta.label = label;\n\ttoken.meta = meta;\n\tstate.line = nextLine;\n\treturn true;\n}\n//#endregion\n//#region src/common/html_blocks.ts\nvar html_blocks_default = [\n\t\"address\",\n\t\"article\",\n\t\"aside\",\n\t\"base\",\n\t\"basefont\",\n\t\"blockquote\",\n\t\"body\",\n\t\"caption\",\n\t\"center\",\n\t\"col\",\n\t\"colgroup\",\n\t\"dd\",\n\t\"details\",\n\t\"dialog\",\n\t\"dir\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"footer\",\n\t\"form\",\n\t\"frame\",\n\t\"frameset\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hr\",\n\t\"html\",\n\t\"iframe\",\n\t\"legend\",\n\t\"li\",\n\t\"link\",\n\t\"main\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"nav\",\n\t\"noframes\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"p\",\n\t\"param\",\n\t\"search\",\n\t\"section\",\n\t\"summary\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"title\",\n\t\"tr\",\n\t\"track\",\n\t\"ul\"\n];\n//#endregion\n//#region src/common/html_re.ts\nvar open_tag = `<[A-Za-z][A-Za-z0-9\\\\-]*(?:\\\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\\\s*=\\\\s*(?:[^\"'=<>\\`\\\\x00-\\\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\\\s*\\\\/?>`;\nvar close_tag = \"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\";\nvar HTML_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag}|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\\\s\\\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>)`);\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag})`);\n//#endregion\n//#region src/rules_block/html_block.ts\nvar HTML_SEQUENCES = [\n\t[\n\t\t/^<(script|pre|style|textarea)(?=(\\s|>|$))/i,\n\t\t/<\\/(script|pre|style|textarea)>/i,\n\t\ttrue\n\t],\n\t[\n\t\t/^<!--/,\n\t\t/-->/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<\\?/,\n\t\t/\\?>/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<![A-Za-z]/,\n\t\t/>/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<!\\[CDATA\\[/,\n\t\t/\\]\\]>/,\n\t\ttrue\n\t],\n\t[\n\t\tnew RegExp(`^</?(${html_blocks_default.join(\"|\")})(?=(\\\\s|/?>|$))`, \"i\"),\n\t\t/^$/,\n\t\ttrue\n\t],\n\t[\n\t\tnew RegExp(`${HTML_OPEN_CLOSE_TAG_RE.source}\\\\s*$`),\n\t\t/^$/,\n\t\tfalse\n\t]\n];\nfunction html_block(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (!state.md.options.html) return false;\n\tif (state.src.charCodeAt(pos) !== 60) return false;\n\tlet lineText = state.src.slice(pos, max);\n\tlet i = 0;\n\tfor (; i < HTML_SEQUENCES.length; i++) if (HTML_SEQUENCES[i][0].test(lineText)) break;\n\tif (i === HTML_SEQUENCES.length) return false;\n\tif (silent) return HTML_SEQUENCES[i][2];\n\tlet nextLine = startLine + 1;\n\tconst endsOnBlankLine = HTML_SEQUENCES[i][1].test(\"\");\n\tif (!HTML_SEQUENCES[i][1].test(lineText)) for (; nextLine < endLine; nextLine++) {\n\t\tif (state.sCount[nextLine] < state.blkIndent) {\n\t\t\tif (endsOnBlankLine || !state.isEmpty(nextLine)) break;\n\t\t}\n\t\tpos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tlineText = state.src.slice(pos, max);\n\t\tif (HTML_SEQUENCES[i][1].test(lineText)) {\n\t\t\tif (lineText.length !== 0) nextLine++;\n\t\t\tbreak;\n\t\t}\n\t}\n\tstate.line = nextLine;\n\tconst token = state.push(\"html_block\", \"\", 0);\n\ttoken.map = [startLine, nextLine];\n\ttoken.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/heading.ts\nfunction heading(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tlet ch = state.src.charCodeAt(pos);\n\tif (ch !== 35 || pos >= max) return false;\n\tlet level = 1;\n\tch = state.src.charCodeAt(++pos);\n\twhile (ch === 35 && pos < max && level <= 6) {\n\t\tlevel++;\n\t\tch = state.src.charCodeAt(++pos);\n\t}\n\tif (level > 6 || pos < max && !isSpace(ch)) return false;\n\tif (silent) return true;\n\tmax = state.skipSpacesBack(max, pos);\n\tconst tmp = state.skipCharsBack(max, 35, pos);\n\tif (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) max = tmp;\n\tstate.line = startLine + 1;\n\tconst token_o = state.push(\"heading_open\", `h${level}`, 1);\n\ttoken_o.markup = \"########\".slice(0, level);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = asciiTrim(state.src.slice(pos, max));\n\ttoken_i.map = [startLine, state.line];\n\ttoken_i.children = [];\n\tconst token_c = state.push(\"heading_close\", `h${level}`, -1);\n\ttoken_c.markup = \"########\".slice(0, level);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/lheading.ts\nfunction lheading(state, startLine, endLine) {\n\tconst terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"paragraph\";\n\tlet level = 0;\n\tlet marker;\n\tlet nextLine = startLine + 1;\n\tfor (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) continue;\n\t\tif (state.sCount[nextLine] >= state.blkIndent) {\n\t\t\tlet pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\t\tconst max = state.eMarks[nextLine];\n\t\t\tif (pos < max) {\n\t\t\t\tmarker = state.src.charCodeAt(pos);\n\t\t\t\tif (marker === 45 || marker === 61) {\n\t\t\t\t\tpos = state.skipChars(pos, marker);\n\t\t\t\t\tpos = state.skipSpaces(pos);\n\t\t\t\t\tif (pos >= max) {\n\t\t\t\t\t\tlevel = marker === 61 ? 1 : 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (state.sCount[nextLine] < 0) continue;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t}\n\tif (!level) {\n\t\tstate.parentType = oldParentType;\n\t\treturn false;\n\t}\n\tconst content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));\n\tstate.line = nextLine + 1;\n\tconst token_o = state.push(\"heading_open\", `h${level}`, 1);\n\ttoken_o.markup = String.fromCharCode(marker);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = content;\n\ttoken_i.map = [startLine, state.line - 1];\n\ttoken_i.children = [];\n\tconst token_c = state.push(\"heading_close\", `h${level}`, -1);\n\ttoken_c.markup = String.fromCharCode(marker);\n\tstate.parentType = oldParentType;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/paragraph.ts\nfunction paragraph(state, startLine, endLine) {\n\tconst terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n\tconst oldParentType = state.parentType;\n\tlet nextLine = startLine + 1;\n\tstate.parentType = \"paragraph\";\n\tfor (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) continue;\n\t\tif (state.sCount[nextLine] < 0) continue;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t}\n\tconst content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));\n\tstate.line = nextLine;\n\tconst token_o = state.push(\"paragraph_open\", \"p\", 1);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = content;\n\ttoken_i.map = [startLine, state.line];\n\ttoken_i.children = [];\n\tstate.push(\"paragraph_close\", \"p\", -1);\n\tstate.parentType = oldParentType;\n\treturn true;\n}\n//#endregion\n//#region src/parser_block.ts\nvar _rules$1 = [\n\t[\n\t\t\"table\",\n\t\ttable,\n\t\t[\"paragraph\", \"reference\"]\n\t],\n\t[\"code\", code],\n\t[\n\t\t\"fence\",\n\t\tfence,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"blockquote\",\n\t\tblockquote,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"hr\",\n\t\thr,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"list\",\n\t\tlist,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\"reference\", reference],\n\t[\n\t\t\"html_block\",\n\t\thtml_block,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\n\t\t\"heading\",\n\t\theading,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\"lheading\", lheading],\n\t[\"paragraph\", paragraph]\n];\n/**\n* Block-level tokenizer.\n*/\nvar ParserBlock = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of block rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateBlock);\n\t\tfor (let i = 0; i < _rules$1.length; i++) this.ruler.push(_rules$1[i][0], _rules$1[i][1], { alt: (_rules$1[i][2] || []).slice() });\n\t}\n\ttokenize(state, startLine, endLine) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\tlet line = startLine;\n\t\tlet hasEmptyLines = false;\n\t\twhile (line < endLine) {\n\t\t\tstate.line = line = state.skipEmptyLines(line);\n\t\t\tif (line >= endLine) break;\n\t\t\tif (state.sCount[line] < state.blkIndent) break;\n\t\t\tif (state.level >= maxNesting) {\n\t\t\t\tstate.line = endLine;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst prevLine = state.line;\n\t\t\tlet ok = false;\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tok = rules[i](state, line, endLine, false);\n\t\t\t\tif (ok) {\n\t\t\t\t\tif (prevLine >= state.line) throw new Error(\"block rule didn't increment state.line\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ok) throw new Error(\"none of the block rules matched\");\n\t\t\tstate.tight = !hasEmptyLines;\n\t\t\tif (state.isEmpty(state.line - 1)) hasEmptyLines = true;\n\t\t\tline = state.line;\n\t\t\tif (line < endLine && state.isEmpty(line)) {\n\t\t\t\thasEmptyLines = true;\n\t\t\t\tline++;\n\t\t\t\tstate.line = line;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Process input string and push block tokens into `outTokens`\n\t*/\n\tparse(src, md, env, outTokens) {\n\t\tif (!src) return;\n\t\tconst state = new this.State(src, md, env, outTokens);\n\t\tthis.tokenize(state, state.line, state.lineMax);\n\t}\n};\n//#endregion\n//#region src/rules_inline/state_inline.ts\n/** Mutable state passed to inline rules while tokenizing inline content. */\nvar StateInline = class {\n\tconstructor(src, md, env, outTokens) {\n\t\t_defineProperty(this, \"pos\", 0);\n\t\t_defineProperty(this, \"level\", 0);\n\t\t_defineProperty(this, \"pending\", \"\");\n\t\t_defineProperty(this, \"pendingLevel\", 0);\n\t\t_defineProperty(this, \"cache\", {});\n\t\t_defineProperty(this, \"backticks\", {});\n\t\t_defineProperty(this, \"backticksScanned\", false);\n\t\t_defineProperty(this, \"linkLevel\", 0);\n\t\t_defineProperty(this, \"delimiters\", []);\n\t\t_defineProperty(this, \"_prev_delimiters\", []);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.env = env;\n\t\tthis.md = md;\n\t\tthis.tokens = outTokens;\n\t\tthis.tokens_meta = Array(outTokens.length);\n\t\tthis.posMax = this.src.length;\n\t}\n\tpushPending() {\n\t\tconst token = new Token(\"text\", \"\", 0);\n\t\ttoken.content = this.pending;\n\t\ttoken.level = this.pendingLevel;\n\t\tthis.tokens.push(token);\n\t\tthis.pending = \"\";\n\t\treturn token;\n\t}\n\tpush(type, tag, nesting) {\n\t\tif (this.pending) this.pushPending();\n\t\tconst token = new Token(type, tag, nesting);\n\t\tlet token_meta = void 0;\n\t\tif (nesting < 0) {\n\t\t\tthis.level--;\n\t\t\tthis.delimiters = this._prev_delimiters.pop();\n\t\t}\n\t\ttoken.level = this.level;\n\t\tif (nesting > 0) {\n\t\t\tthis.level++;\n\t\t\tthis._prev_delimiters.push(this.delimiters);\n\t\t\tthis.delimiters = [];\n\t\t\ttoken_meta = { delimiters: this.delimiters };\n\t\t}\n\t\tthis.pendingLevel = this.level;\n\t\tthis.tokens.push(token);\n\t\tthis.tokens_meta.push(token_meta);\n\t\treturn token;\n\t}\n\tscanDelims(start, canSplitWord) {\n\t\tconst max = this.posMax;\n\t\tconst marker = this.src.charCodeAt(start);\n\t\tlet lastChar;\n\t\tif (start === 0) lastChar = 32;\n\t\telse if (start === 1) {\n\t\t\tlastChar = this.src.charCodeAt(0);\n\t\t\tif ((lastChar & 63488) === 55296) lastChar = 65533;\n\t\t} else {\n\t\t\tlastChar = this.src.charCodeAt(start - 1);\n\t\t\tif ((lastChar & 64512) === 56320) {\n\t\t\t\tconst highSurr = this.src.charCodeAt(start - 2);\n\t\t\t\tlastChar = (highSurr & 64512) === 55296 ? 65536 + (highSurr - 55296 << 10) + (lastChar - 56320) : 65533;\n\t\t\t} else if ((lastChar & 64512) === 55296) lastChar = 65533;\n\t\t}\n\t\tlet pos = start;\n\t\twhile (pos < max && this.src.charCodeAt(pos) === marker) pos++;\n\t\tconst count = pos - start;\n\t\tlet nextChar = pos < max ? this.src.charCodeAt(pos) : 32;\n\t\tif ((nextChar & 64512) === 55296) {\n\t\t\tconst lowSurr = this.src.charCodeAt(pos + 1);\n\t\t\tnextChar = (lowSurr & 64512) === 56320 ? 65536 + (nextChar - 55296 << 10) + (lowSurr - 56320) : 65533;\n\t\t} else if ((nextChar & 64512) === 56320) nextChar = 65533;\n\t\tconst isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);\n\t\tconst isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);\n\t\tconst isLastWhiteSpace = isWhiteSpace(lastChar);\n\t\tconst isNextWhiteSpace = isWhiteSpace(nextChar);\n\t\tconst left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);\n\t\tconst right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);\n\t\treturn {\n\t\t\tcan_open: left_flanking && (canSplitWord || !right_flanking || isLastPunctChar),\n\t\t\tcan_close: right_flanking && (canSplitWord || !left_flanking || isNextPunctChar),\n\t\t\tlength: count\n\t\t};\n\t}\n};\n//#endregion\n//#region src/rules_inline/text.ts\nfunction isTerminatorChar(ch) {\n\tswitch (ch) {\n\t\tcase 10:\n\t\tcase 33:\n\t\tcase 35:\n\t\tcase 36:\n\t\tcase 37:\n\t\tcase 38:\n\t\tcase 42:\n\t\tcase 43:\n\t\tcase 45:\n\t\tcase 58:\n\t\tcase 60:\n\t\tcase 61:\n\t\tcase 62:\n\t\tcase 64:\n\t\tcase 91:\n\t\tcase 92:\n\t\tcase 93:\n\t\tcase 94:\n\t\tcase 95:\n\t\tcase 96:\n\t\tcase 123:\n\t\tcase 125:\n\t\tcase 126: return true;\n\t\tdefault: return false;\n\t}\n}\nfunction text(state, silent) {\n\tlet pos = state.pos;\n\twhile (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) pos++;\n\tif (pos === state.pos) return false;\n\tif (!silent) state.pending += state.src.slice(state.pos, pos);\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/linkify.ts\nvar SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\nfunction linkify(state, silent) {\n\tif (!state.md.options.linkify) return false;\n\tif (state.linkLevel > 0) return false;\n\tconst pos = state.pos;\n\tconst max = state.posMax;\n\tif (pos + 3 > max) return false;\n\tif (state.src.charCodeAt(pos) !== 58) return false;\n\tif (state.src.charCodeAt(pos + 1) !== 47) return false;\n\tif (state.src.charCodeAt(pos + 2) !== 47) return false;\n\tconst match = state.pending.match(SCHEME_RE);\n\tif (!match) return false;\n\tconst proto = match[1];\n\tconst link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n\tif (!link) return false;\n\tlet url = link.url;\n\tif (url.length <= proto.length) return false;\n\tlet urlEnd = url.length;\n\twhile (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 42) urlEnd--;\n\tif (urlEnd !== url.length) url = url.slice(0, urlEnd);\n\tconst fullUrl = state.md.normalizeLink(url);\n\tif (!state.md.validateLink(fullUrl)) return false;\n\tif (!silent) {\n\t\tstate.pending = state.pending.slice(0, -proto.length);\n\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\ttoken_o.markup = \"linkify\";\n\t\ttoken_o.info = \"auto\";\n\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\ttoken_c.markup = \"linkify\";\n\t\ttoken_c.info = \"auto\";\n\t}\n\tstate.pos += url.length - proto.length;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/newline.ts\nfunction newline(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 10) return false;\n\tconst pmax = state.pending.length - 1;\n\tconst max = state.posMax;\n\tif (!silent) if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {\n\t\tlet ws = pmax - 1;\n\t\twhile (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;\n\t\tstate.pending = state.pending.slice(0, ws);\n\t\tstate.push(\"hardbreak\", \"br\", 0);\n\t} else {\n\t\tstate.pending = state.pending.slice(0, -1);\n\t\tstate.push(\"softbreak\", \"br\", 0);\n\t}\n\telse state.push(\"softbreak\", \"br\", 0);\n\tpos++;\n\twhile (pos < max && isSpace(state.src.charCodeAt(pos))) pos++;\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/escape.ts\nvar ESCAPED = [];\nfor (let i = 0; i < 256; i++) ESCAPED.push(0);\n\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(ch) {\n\tESCAPED[ch.charCodeAt(0)] = 1;\n});\nfunction escape(state, silent) {\n\tlet pos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(pos) !== 92) return false;\n\tpos++;\n\tif (pos >= max) return false;\n\tlet ch1 = state.src.charCodeAt(pos);\n\tif (ch1 === 10) {\n\t\tif (!silent) state.push(\"hardbreak\", \"br\", 0);\n\t\tpos++;\n\t\twhile (pos < max) {\n\t\t\tch1 = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(ch1)) break;\n\t\t\tpos++;\n\t\t}\n\t\tstate.pos = pos;\n\t\treturn true;\n\t}\n\tif (ch1 === 32) {\n\t\tif (!silent) {\n\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\ttoken.content = \"\\\\\";\n\t\t\ttoken.markup = \"\\\\\";\n\t\t\ttoken.info = \"escape\";\n\t\t}\n\t\tstate.pos = pos;\n\t\treturn true;\n\t}\n\tlet escapedStr = state.src[pos];\n\tif (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) {\n\t\tconst ch2 = state.src.charCodeAt(pos + 1);\n\t\tif (ch2 >= 56320 && ch2 <= 57343) {\n\t\t\tescapedStr += state.src[pos + 1];\n\t\t\tpos++;\n\t\t}\n\t}\n\tconst origStr = \"\\\\\" + escapedStr;\n\tif (!silent) {\n\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\tif (ch1 < 256 && ESCAPED[ch1] !== 0) token.content = escapedStr;\n\t\telse token.content = origStr;\n\t\ttoken.markup = origStr;\n\t\ttoken.info = \"escape\";\n\t}\n\tstate.pos = pos + 1;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/backticks.ts\nfunction backtick(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 96) return false;\n\tconst start = pos;\n\tpos++;\n\tconst max = state.posMax;\n\twhile (pos < max && state.src.charCodeAt(pos) === 96) pos++;\n\tconst marker = state.src.slice(start, pos);\n\tconst openerLength = marker.length;\n\tif (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n\t\tif (!silent) state.pending += marker;\n\t\tstate.pos += openerLength;\n\t\treturn true;\n\t}\n\tlet matchEnd = pos;\n\tlet matchStart;\n\twhile ((matchStart = state.src.indexOf(\"`\", matchEnd)) !== -1) {\n\t\tmatchEnd = matchStart + 1;\n\t\twhile (matchEnd < max && state.src.charCodeAt(matchEnd) === 96) matchEnd++;\n\t\tconst closerLength = matchEnd - matchStart;\n\t\tif (closerLength === openerLength) {\n\t\t\tif (!silent) {\n\t\t\t\tconst token = state.push(\"code_inline\", \"code\", 0);\n\t\t\t\ttoken.markup = marker;\n\t\t\t\ttoken.content = state.src.slice(pos, matchStart).replace(/\\n/g, \" \").replace(/^ (.+) $/, \"$1\");\n\t\t\t}\n\t\t\tstate.pos = matchEnd;\n\t\t\treturn true;\n\t\t}\n\t\tstate.backticks[closerLength] = matchStart;\n\t}\n\tstate.backticksScanned = true;\n\tif (!silent) state.pending += marker;\n\tstate.pos += openerLength;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/strikethrough.ts\nfunction strikethrough_tokenize(state, silent) {\n\tconst start = state.pos;\n\tconst marker = state.src.charCodeAt(start);\n\tif (silent) return false;\n\tif (marker !== 126) return false;\n\tconst scanned = state.scanDelims(state.pos, true);\n\tlet len = scanned.length;\n\tconst ch = String.fromCharCode(marker);\n\tif (len < 2) return false;\n\tlet token;\n\tif (len % 2) {\n\t\ttoken = state.push(\"text\", \"\", 0);\n\t\ttoken.content = ch;\n\t\tlen--;\n\t}\n\tfor (let i = 0; i < len; i += 2) {\n\t\ttoken = state.push(\"text\", \"\", 0);\n\t\ttoken.content = ch + ch;\n\t\tstate.delimiters.push({\n\t\t\tmarker,\n\t\t\tlength: 0,\n\t\t\ttoken: state.tokens.length - 1,\n\t\t\tend: -1,\n\t\t\topen: scanned.can_open,\n\t\t\tclose: scanned.can_close\n\t\t});\n\t}\n\tstate.pos += scanned.length;\n\treturn true;\n}\nfunction postProcess$1(state, delimiters) {\n\tlet token;\n\tconst loneMarkers = [];\n\tconst max = delimiters.length;\n\tfor (let i = 0; i < max; i++) {\n\t\tconst startDelim = delimiters[i];\n\t\tif (startDelim.marker !== 126) continue;\n\t\tif (startDelim.end === -1) continue;\n\t\tconst endDelim = delimiters[startDelim.end];\n\t\ttoken = state.tokens[startDelim.token];\n\t\ttoken.type = \"s_open\";\n\t\ttoken.tag = \"s\";\n\t\ttoken.nesting = 1;\n\t\ttoken.markup = \"~~\";\n\t\ttoken.content = \"\";\n\t\ttoken = state.tokens[endDelim.token];\n\t\ttoken.type = \"s_close\";\n\t\ttoken.tag = \"s\";\n\t\ttoken.nesting = -1;\n\t\ttoken.markup = \"~~\";\n\t\ttoken.content = \"\";\n\t\tif (state.tokens[endDelim.token - 1].type === \"text\" && state.tokens[endDelim.token - 1].content === \"~\") loneMarkers.push(endDelim.token - 1);\n\t}\n\twhile (loneMarkers.length) {\n\t\tconst i = loneMarkers.pop();\n\t\tlet j = i + 1;\n\t\twhile (j < state.tokens.length && state.tokens[j].type === \"s_close\") j++;\n\t\tj--;\n\t\tif (i !== j) {\n\t\t\ttoken = state.tokens[j];\n\t\t\tstate.tokens[j] = state.tokens[i];\n\t\t\tstate.tokens[i] = token;\n\t\t}\n\t}\n}\nfunction strikethrough_postProcess(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tpostProcess$1(state, state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) postProcess$1(state, delimiters);\n\t}\n}\nvar strikethrough_default = {\n\ttokenize: strikethrough_tokenize,\n\tpostProcess: strikethrough_postProcess\n};\n//#endregion\n//#region src/rules_inline/emphasis.ts\nfunction emphasis_tokenize(state, silent) {\n\tconst start = state.pos;\n\tconst marker = state.src.charCodeAt(start);\n\tif (silent) return false;\n\tif (marker !== 95 && marker !== 42) return false;\n\tconst scanned = state.scanDelims(state.pos, marker === 42);\n\tfor (let i = 0; i < scanned.length; i++) {\n\t\tconst token = state.push(\"text\", \"\", 0);\n\t\ttoken.content = String.fromCharCode(marker);\n\t\tstate.delimiters.push({\n\t\t\tmarker,\n\t\t\tlength: scanned.length,\n\t\t\ttoken: state.tokens.length - 1,\n\t\t\tend: -1,\n\t\t\topen: scanned.can_open,\n\t\t\tclose: scanned.can_close\n\t\t});\n\t}\n\tstate.pos += scanned.length;\n\treturn true;\n}\nfunction postProcess(state, delimiters) {\n\tconst max = delimiters.length;\n\tfor (let i = max - 1; i >= 0; i--) {\n\t\tconst startDelim = delimiters[i];\n\t\tif (startDelim.marker !== 95 && startDelim.marker !== 42) continue;\n\t\tif (startDelim.end === -1) continue;\n\t\tconst endDelim = delimiters[startDelim.end];\n\t\tconst isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\t\tconst ch = String.fromCharCode(startDelim.marker);\n\t\tconst token_o = state.tokens[startDelim.token];\n\t\ttoken_o.type = isStrong ? \"strong_open\" : \"em_open\";\n\t\ttoken_o.tag = isStrong ? \"strong\" : \"em\";\n\t\ttoken_o.nesting = 1;\n\t\ttoken_o.markup = isStrong ? ch + ch : ch;\n\t\ttoken_o.content = \"\";\n\t\tconst token_c = state.tokens[endDelim.token];\n\t\ttoken_c.type = isStrong ? \"strong_close\" : \"em_close\";\n\t\ttoken_c.tag = isStrong ? \"strong\" : \"em\";\n\t\ttoken_c.nesting = -1;\n\t\ttoken_c.markup = isStrong ? ch + ch : ch;\n\t\ttoken_c.content = \"\";\n\t\tif (isStrong) {\n\t\t\tstate.tokens[delimiters[i - 1].token].content = \"\";\n\t\t\tstate.tokens[delimiters[startDelim.end + 1].token].content = \"\";\n\t\t\ti--;\n\t\t}\n\t}\n}\nfunction emphasis_post_process(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tpostProcess(state, state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) postProcess(state, delimiters);\n\t}\n}\nvar emphasis_default = {\n\ttokenize: emphasis_tokenize,\n\tpostProcess: emphasis_post_process\n};\n//#endregion\n//#region src/rules_inline/link.ts\nfunction link(state, silent) {\n\tlet code, label, res, ref;\n\tlet href = \"\";\n\tlet title = \"\";\n\tlet start = state.pos;\n\tlet parseReference = true;\n\tif (state.src.charCodeAt(state.pos) !== 91) return false;\n\tconst oldPos = state.pos;\n\tconst max = state.posMax;\n\tconst labelStart = state.pos + 1;\n\tconst labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\tif (labelEnd < 0) return false;\n\tlet pos = labelEnd + 1;\n\tif (pos < max && state.src.charCodeAt(pos) === 40) {\n\t\tparseReference = false;\n\t\tpos++;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tif (pos >= max) return false;\n\t\tstart = pos;\n\t\tres = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\t\tif (res.ok) {\n\t\t\thref = state.md.normalizeLink(res.str);\n\t\t\tif (state.md.validateLink(href)) pos = res.pos;\n\t\t\telse href = \"\";\n\t\t\tstart = pos;\n\t\t\tfor (; pos < max; pos++) {\n\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t}\n\t\t\tres = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\t\t\tif (pos < max && start !== pos && res.ok) {\n\t\t\t\ttitle = res.str;\n\t\t\t\tpos = res.pos;\n\t\t\t\tfor (; pos < max; pos++) {\n\t\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pos >= max || state.src.charCodeAt(pos) !== 41) parseReference = true;\n\t\tpos++;\n\t}\n\tif (parseReference) {\n\t\tif (typeof state.env.references === \"undefined\") return false;\n\t\tif (pos < max && state.src.charCodeAt(pos) === 91) {\n\t\t\tstart = pos + 1;\n\t\t\tpos = state.md.helpers.parseLinkLabel(state, pos);\n\t\t\tif (pos >= 0) label = state.src.slice(start, pos++);\n\t\t\telse pos = labelEnd + 1;\n\t\t} else pos = labelEnd + 1;\n\t\tif (!label) label = state.src.slice(labelStart, labelEnd);\n\t\tlabel = normalizeReference(label);\n\t\tref = state.env.references[label];\n\t\tif (!ref) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\thref = ref.href;\n\t\ttitle = ref.title;\n\t}\n\tif (!silent) {\n\t\tstate.pos = labelStart;\n\t\tstate.posMax = labelEnd;\n\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\tconst attrs = [[\"href\", href]];\n\t\ttoken_o.attrs = attrs;\n\t\tif (title) attrs.push([\"title\", title]);\n\t\tif (label) {\n\t\t\tconst meta = Object.create(null);\n\t\t\tmeta.label = label;\n\t\t\ttoken_o.meta = meta;\n\t\t}\n\t\tstate.linkLevel++;\n\t\tstate.md.inline.tokenize(state);\n\t\tstate.linkLevel--;\n\t\tstate.push(\"link_close\", \"a\", -1);\n\t}\n\tstate.pos = pos;\n\tstate.posMax = max;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/image.ts\nfunction image(state, silent) {\n\tlet code, content, label, pos, ref, res, title, start;\n\tlet href = \"\";\n\tconst oldPos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(state.pos) !== 33) return false;\n\tif (state.src.charCodeAt(state.pos + 1) !== 91) return false;\n\tconst labelStart = state.pos + 2;\n\tconst labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\tif (labelEnd < 0) return false;\n\tpos = labelEnd + 1;\n\tif (pos < max && state.src.charCodeAt(pos) === 40) {\n\t\tpos++;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tif (pos >= max) return false;\n\t\tstart = pos;\n\t\tres = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\t\tif (res.ok) {\n\t\t\thref = state.md.normalizeLink(res.str);\n\t\t\tif (state.md.validateLink(href)) pos = res.pos;\n\t\t\telse href = \"\";\n\t\t}\n\t\tstart = pos;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tres = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\t\tif (pos < max && start !== pos && res.ok) {\n\t\t\ttitle = res.str;\n\t\t\tpos = res.pos;\n\t\t\tfor (; pos < max; pos++) {\n\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t}\n\t\t} else title = \"\";\n\t\tif (pos >= max || state.src.charCodeAt(pos) !== 41) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\tpos++;\n\t} else {\n\t\tif (typeof state.env.references === \"undefined\") return false;\n\t\tif (pos < max && state.src.charCodeAt(pos) === 91) {\n\t\t\tstart = pos + 1;\n\t\t\tpos = state.md.helpers.parseLinkLabel(state, pos);\n\t\t\tif (pos >= 0) label = state.src.slice(start, pos++);\n\t\t\telse pos = labelEnd + 1;\n\t\t} else pos = labelEnd + 1;\n\t\tif (!label) label = state.src.slice(labelStart, labelEnd);\n\t\tlabel = normalizeReference(label);\n\t\tref = state.env.references[label];\n\t\tif (!ref) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\thref = ref.href;\n\t\ttitle = ref.title;\n\t}\n\tif (!silent) {\n\t\tcontent = state.src.slice(labelStart, labelEnd);\n\t\tconst tokens = [];\n\t\tstate.md.inline.parse(content, state.md, state.env, tokens);\n\t\tconst token = state.push(\"image\", \"img\", 0);\n\t\tconst attrs = [[\"src\", href], [\"alt\", \"\"]];\n\t\ttoken.attrs = attrs;\n\t\ttoken.children = tokens;\n\t\ttoken.content = content;\n\t\tif (title) attrs.push([\"title\", title]);\n\t\tif (label) {\n\t\t\tconst meta = Object.create(null);\n\t\t\tmeta.label = label;\n\t\t\ttoken.meta = meta;\n\t\t}\n\t}\n\tstate.pos = pos;\n\tstate.posMax = max;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/autolink.ts\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/;\nfunction autolink(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 60) return false;\n\tconst start = state.pos;\n\tconst max = state.posMax;\n\tfor (;;) {\n\t\tif (++pos >= max) return false;\n\t\tconst ch = state.src.charCodeAt(pos);\n\t\tif (ch === 60) return false;\n\t\tif (ch === 62) break;\n\t}\n\tconst url = state.src.slice(start + 1, pos);\n\tif (AUTOLINK_RE.test(url)) {\n\t\tconst fullUrl = state.md.normalizeLink(url);\n\t\tif (!state.md.validateLink(fullUrl)) return false;\n\t\tif (!silent) {\n\t\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\ttoken_o.markup = \"autolink\";\n\t\t\ttoken_o.info = \"auto\";\n\t\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\t\ttoken_c.markup = \"autolink\";\n\t\t\ttoken_c.info = \"auto\";\n\t\t}\n\t\tstate.pos += url.length + 2;\n\t\treturn true;\n\t}\n\tif (EMAIL_RE.test(url)) {\n\t\tconst fullUrl = state.md.normalizeLink(`mailto:${url}`);\n\t\tif (!state.md.validateLink(fullUrl)) return false;\n\t\tif (!silent) {\n\t\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\ttoken_o.markup = \"autolink\";\n\t\t\ttoken_o.info = \"auto\";\n\t\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\t\ttoken_c.markup = \"autolink\";\n\t\t\ttoken_c.info = \"auto\";\n\t\t}\n\t\tstate.pos += url.length + 2;\n\t\treturn true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/rules_inline/html_inline.ts\nfunction isLinkOpen(str) {\n\treturn /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n\treturn /^<\\/a\\s*>/i.test(str);\n}\nfunction isLetter(ch) {\n\tconst lc = ch | 32;\n\treturn lc >= 97 && lc <= 122;\n}\nfunction html_inline(state, silent) {\n\tif (!state.md.options.html) return false;\n\tconst max = state.posMax;\n\tconst pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) return false;\n\tconst ch = state.src.charCodeAt(pos + 1);\n\tif (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) return false;\n\tconst match = state.src.slice(pos).match(HTML_TAG_RE);\n\tif (!match) return false;\n\tif (!silent) {\n\t\tconst token = state.push(\"html_inline\", \"\", 0);\n\t\ttoken.content = match[0];\n\t\tif (isLinkOpen(token.content)) state.linkLevel++;\n\t\tif (isLinkClose(token.content)) state.linkLevel--;\n\t}\n\tstate.pos += match[0].length;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/entity.ts\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\nfunction entity(state, silent) {\n\tconst pos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(pos) !== 38) return false;\n\tif (pos + 1 >= max) return false;\n\tif (state.src.charCodeAt(pos + 1) === 35) {\n\t\tconst match = state.src.slice(pos).match(DIGITAL_RE);\n\t\tif (match) {\n\t\t\tif (!silent) {\n\t\t\t\tconst code = match[1][0].toLowerCase() === \"x\" ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n\t\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\t\ttoken.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(65533);\n\t\t\t\ttoken.markup = match[0];\n\t\t\t\ttoken.info = \"entity\";\n\t\t\t}\n\t\t\tstate.pos += match[0].length;\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\tconst match = state.src.slice(pos).match(NAMED_RE);\n\t\tif (match) {\n\t\t\tconst decoded = decodeHTMLStrict(match[0]);\n\t\t\tif (decoded !== match[0]) {\n\t\t\t\tif (!silent) {\n\t\t\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\t\t\ttoken.content = decoded;\n\t\t\t\t\ttoken.markup = match[0];\n\t\t\t\t\ttoken.info = \"entity\";\n\t\t\t\t}\n\t\t\t\tstate.pos += match[0].length;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/rules_inline/balance_pairs.ts\nfunction processDelimiters(delimiters) {\n\tconst openersBottom = {};\n\tconst max = delimiters.length;\n\tif (!max) return;\n\tlet headerIdx = 0;\n\tlet lastTokenIdx = -2;\n\tconst jumps = [];\n\tfor (let closerIdx = 0; closerIdx < max; closerIdx++) {\n\t\tconst closer = delimiters[closerIdx];\n\t\tjumps.push(0);\n\t\tif (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) headerIdx = closerIdx;\n\t\tlastTokenIdx = closer.token;\n\t\tcloser.length = closer.length || 0;\n\t\tif (!closer.close) continue;\n\t\tif (!openersBottom.hasOwnProperty(closer.marker)) openersBottom[closer.marker] = [\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1\n\t\t];\n\t\tconst minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];\n\t\tlet openerIdx = headerIdx - jumps[headerIdx] - 1;\n\t\tlet newMinOpenerIdx = openerIdx;\n\t\tfor (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n\t\t\tconst opener = delimiters[openerIdx];\n\t\t\tif (opener.marker !== closer.marker) continue;\n\t\t\tif (opener.open && opener.end < 0) {\n\t\t\t\tlet isOddMatch = false;\n\t\t\t\tif (opener.close || closer.open) {\n\t\t\t\t\tif ((opener.length + closer.length) % 3 === 0) {\n\t\t\t\t\t\tif (opener.length % 3 !== 0 || closer.length % 3 !== 0) isOddMatch = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isOddMatch) {\n\t\t\t\t\tconst lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;\n\t\t\t\t\tjumps[closerIdx] = closerIdx - openerIdx + lastJump;\n\t\t\t\t\tjumps[openerIdx] = lastJump;\n\t\t\t\t\tcloser.open = false;\n\t\t\t\t\topener.end = closerIdx;\n\t\t\t\t\topener.close = false;\n\t\t\t\t\tnewMinOpenerIdx = -1;\n\t\t\t\t\tlastTokenIdx = -2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (newMinOpenerIdx !== -1) openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;\n\t}\n}\nfunction link_pairs(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tprocessDelimiters(state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) processDelimiters(delimiters);\n\t}\n}\n//#endregion\n//#region src/rules_inline/fragments_join.ts\nfunction fragments_join(state) {\n\tlet curr, last;\n\tlet level = 0;\n\tconst tokens = state.tokens;\n\tconst max = state.tokens.length;\n\tfor (curr = last = 0; curr < max; curr++) {\n\t\tif (tokens[curr].nesting < 0) level--;\n\t\ttokens[curr].level = level;\n\t\tif (tokens[curr].nesting > 0) level++;\n\t\tif (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\t\telse {\n\t\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\t\tlast++;\n\t\t}\n\t}\n\tif (curr !== last) tokens.length = last;\n}\n//#endregion\n//#region src/parser_inline.ts\nvar _rules = [\n\t[\"text\", text],\n\t[\"linkify\", linkify],\n\t[\"newline\", newline],\n\t[\"escape\", escape],\n\t[\"backticks\", backtick],\n\t[\"strikethrough\", strikethrough_default.tokenize],\n\t[\"emphasis\", emphasis_default.tokenize],\n\t[\"link\", link],\n\t[\"image\", image],\n\t[\"autolink\", autolink],\n\t[\"html_inline\", html_inline],\n\t[\"entity\", entity]\n];\nvar _rules2 = [\n\t[\"balance_pairs\", link_pairs],\n\t[\"strikethrough\", strikethrough_default.postProcess],\n\t[\"emphasis\", emphasis_default.postProcess],\n\t[\"fragments_join\", fragments_join]\n];\n/**\n* Tokenizes paragraph content.\n*/\nvar ParserInline = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of inline rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Second ruler used for post-processing\n\t\t\t* (e.g. in emphasis-like rules).\n\t\t\t*/\n\t\t\t\"ruler2\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateInline);\n\t\tfor (let i = 0; i < _rules.length; i++) this.ruler.push(_rules[i][0], _rules[i][1]);\n\t\tfor (let i = 0; i < _rules2.length; i++) this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n\t}\n\tskipToken(state) {\n\t\tconst pos = state.pos;\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\tconst cache = state.cache;\n\t\tif (typeof cache[pos] !== \"undefined\") {\n\t\t\tstate.pos = cache[pos];\n\t\t\treturn;\n\t\t}\n\t\tlet ok = false;\n\t\tif (state.level < maxNesting) for (let i = 0; i < len; i++) {\n\t\t\tstate.level++;\n\t\t\tok = rules[i](state, true);\n\t\t\tstate.level--;\n\t\t\tif (ok) {\n\t\t\t\tif (pos >= state.pos) throw new Error(\"inline rule didn't increment state.pos\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse state.pos = state.posMax;\n\t\tif (!ok) state.pos++;\n\t\tcache[pos] = state.pos;\n\t}\n\ttokenize(state) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst end = state.posMax;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\twhile (state.pos < end) {\n\t\t\tconst prevPos = state.pos;\n\t\t\tlet ok = false;\n\t\t\tif (state.level < maxNesting) for (let i = 0; i < len; i++) {\n\t\t\t\tok = rules[i](state, false);\n\t\t\t\tif (ok) {\n\t\t\t\t\tif (prevPos >= state.pos) throw new Error(\"inline rule didn't increment state.pos\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ok) {\n\t\t\t\tif (state.pos >= end) break;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstate.pending += state.src[state.pos++];\n\t\t}\n\t\tif (state.pending) state.pushPending();\n\t}\n\t/**\n\t* Process input string and push inline tokens into `outTokens`\n\t*/\n\tparse(str, md, env, outTokens) {\n\t\tconst state = new this.State(str, md, env, outTokens);\n\t\tthis.tokenize(state);\n\t\tconst rules = this.ruler2.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tfor (let i = 0; i < len; i++) rules[i](state);\n\t}\n};\n//#endregion\n//#region src/markdownit.ts\nvar config = {\n\tdefault: {\n\t\toptions: {\n\t\t\thtml: false,\n\t\t\txhtmlOut: false,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 100\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: {},\n\t\t\tblock: {},\n\t\t\tinline: {}\n\t\t}\n\t},\n\tzero: {\n\t\toptions: {\n\t\t\thtml: false,\n\t\t\txhtmlOut: false,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 20\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: { rules: [\n\t\t\t\t\"normalize\",\n\t\t\t\t\"block\",\n\t\t\t\t\"strip_references\",\n\t\t\t\t\"inline\",\n\t\t\t\t\"text_join\"\n\t\t\t] },\n\t\t\tblock: { rules: [\"paragraph\"] },\n\t\t\tinline: {\n\t\t\t\trules: [\"text\"],\n\t\t\t\trules2: [\"balance_pairs\", \"fragments_join\"]\n\t\t\t}\n\t\t}\n\t},\n\tcommonmark: {\n\t\toptions: {\n\t\t\thtml: true,\n\t\t\txhtmlOut: true,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 20\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: { rules: [\n\t\t\t\t\"normalize\",\n\t\t\t\t\"block\",\n\t\t\t\t\"strip_references\",\n\t\t\t\t\"inline\",\n\t\t\t\t\"text_join\"\n\t\t\t] },\n\t\t\tblock: { rules: [\n\t\t\t\t\"blockquote\",\n\t\t\t\t\"code\",\n\t\t\t\t\"fence\",\n\t\t\t\t\"heading\",\n\t\t\t\t\"hr\",\n\t\t\t\t\"html_block\",\n\t\t\t\t\"lheading\",\n\t\t\t\t\"list\",\n\t\t\t\t\"reference\",\n\t\t\t\t\"paragraph\"\n\t\t\t] },\n\t\t\tinline: {\n\t\t\t\trules: [\n\t\t\t\t\t\"autolink\",\n\t\t\t\t\t\"backticks\",\n\t\t\t\t\t\"emphasis\",\n\t\t\t\t\t\"entity\",\n\t\t\t\t\t\"escape\",\n\t\t\t\t\t\"html_inline\",\n\t\t\t\t\t\"image\",\n\t\t\t\t\t\"link\",\n\t\t\t\t\t\"newline\",\n\t\t\t\t\t\"text\"\n\t\t\t\t],\n\t\t\t\trules2: [\n\t\t\t\t\t\"balance_pairs\",\n\t\t\t\t\t\"emphasis\",\n\t\t\t\t\t\"fragments_join\"\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t}\n};\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\nvar RECODE_HOSTNAME_FOR = [\n\t\"http:\",\n\t\"https:\",\n\t\"mailto:\"\n];\n/**\n* Parses Markdown into tokens and renders them to HTML.\n*\n* @category Main\n*/\nvar MarkdownIt = class {\n\t/**\n\t* Link validation function. CommonMark allows too much in links. By default\n\t* we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n\t* except some embedded image types.\n\t*\n\t* You can change this behaviour:\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* // enable everything\n\t* md.validateLink = function () { return true; }\n\t* ```\n\t*/\n\tvalidateLink(url) {\n\t\tconst str = url.trim().toLowerCase();\n\t\treturn BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true;\n\t}\n\t/**\n\t* Function used to encode link url to a machine-readable format,\n\t* which includes url-encoding, punycode, etc.\n\t*/\n\tnormalizeLink(url) {\n\t\tconst parsed = mdurl.parse(url, true);\n\t\tif (parsed.hostname) {\n\t\t\tif (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {\n\t\t\t\tparsed.hostname = punycode.toASCII(parsed.hostname);\n\t\t\t} catch (er) {}\n\t\t}\n\t\treturn mdurl.encode(mdurl.format(parsed));\n\t}\n\t/**\n\t* Function used to decode link url to a human-readable format`\n\t*/\n\tnormalizeLinkText(url) {\n\t\tconst parsed = mdurl.parse(url, true);\n\t\tif (parsed.hostname) {\n\t\t\tif (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {\n\t\t\t\tparsed.hostname = punycode.toUnicode(parsed.hostname);\n\t\t\t} catch (er) {}\n\t\t}\n\t\treturn mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + \"%\");\n\t}\n\tconstructor(...args) {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserInline}. You may need it to add new rules when\n\t\t\t* writing plugins. For simple rules control use {@link MarkdownIt.disable}\n\t\t\t* and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"inline\",\n\t\t\tnew ParserInline()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserBlock}. You may need it to add new rules when\n\t\t\t* writing plugins. For simple rules control use {@link MarkdownIt.disable}\n\t\t\t* and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"block\",\n\t\t\tnew ParserBlock()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserCore} chain executor. You may need it to add new\n\t\t\t* rules when writing plugins. For simple rules control use\n\t\t\t* {@link MarkdownIt.disable} and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"core\",\n\t\t\tnew ParserCore()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link Renderer}. Use it to modify output look. Or to add rendering\n\t\t\t* rules for new token types, generated by plugins.\n\t\t\t*\n\t\t\t* See {@link Renderer} docs and\n\t\t\t* [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts).\n\t\t\t*\n\t\t\t* @example\n\t\t\t* ```javascript\n\t\t\t* import MarkdownIt from 'markdown-it'\n\t\t\t* const md = new MarkdownIt()\n\t\t\t*\n\t\t\t* function myToken(tokens, idx, options, env, self) {\n\t\t\t* //...\n\t\t\t* return result;\n\t\t\t* };\n\t\t\t*\n\t\t\t* md.renderer.rules['my_token'] = myToken\n\t\t\t* ```\n\t\t\t*/\n\t\t\t\"renderer\",\n\t\t\tnew Renderer()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n\t\t\t* Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/src/rules_core/linkify.ts)\n\t\t\t* rule.\n\t\t\t*/\n\t\t\t\"linkify\",\n\t\t\tnew LinkifyIt()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Assorted utility functions, useful to write plugins. See details\n\t\t\t* [here](https://github.com/markdown-it/markdown-it/blob/master/src/common/utils.ts).\n\t\t\t*/\n\t\t\t\"utils\",\n\t\t\tutils_exports\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Link components parser functions, useful to write plugins. See details\n\t\t\t* [here](https://github.com/markdown-it/markdown-it/blob/master/src/helpers).\n\t\t\t*/\n\t\t\t\"helpers\",\n\t\t\tObject.assign({}, helpers_exports)\n\t\t);\n\t\tconst [presetNameOrOptions, options] = args;\n\t\tif (typeof presetNameOrOptions === \"string\") {\n\t\t\tthis.configure(presetNameOrOptions);\n\t\t\tif (options) this.set(options);\n\t\t} else {\n\t\t\tthis.configure(\"default\");\n\t\t\tthis.set(presetNameOrOptions || {});\n\t\t}\n\t}\n\t/**\n\t* Set parser options (in the same format as in constructor). Probably, you\n\t* will never need it, but you can change options after constructor call.\n\t*\n\t* __Note:__ To achieve the best possible performance, don't modify a\n\t* `markdown-it` instance options on the fly. If you need multiple configurations\n\t* it's best to create multiple instances and initialize each with separate\n\t* config.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t*\n\t* const md = new MarkdownIt()\n\t* .set({ html: true, breaks: true })\n\t* .set({ typographer: true })\n\t* ```\n\t*/\n\tset(options) {\n\t\tObject.assign(this.options, options);\n\t\treturn this;\n\t}\n\t/**\n\t* Batch load of all options and compenent settings. This is internal method,\n\t* and you probably will not need it. But if you will - see available presets\n\t* and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/src/presets)\n\t*\n\t* We strongly recommend to use presets instead of direct config loads. That\n\t* will give better compatibility with next versions.\n\t*/\n\tconfigure(presets) {\n\t\tlet p;\n\t\tif (typeof presets === \"string\") {\n\t\t\tconst presetName = presets;\n\t\t\tp = config[presetName];\n\t\t\tif (!p) throw new Error(`Wrong 'markdown-it' preset \"${presetName}\", check name`);\n\t\t} else p = presets;\n\t\tif (!p) throw new Error(\"Wrong `markdown-it` preset, can't be empty\");\n\t\tif (p.options) this.options = { ...p.options };\n\t\tconst components = p.components;\n\t\tif (components) {\n\t\t\tvar _components$inline;\n\t\t\t[\n\t\t\t\t\"core\",\n\t\t\t\t\"block\",\n\t\t\t\t\"inline\"\n\t\t\t].forEach((name) => {\n\t\t\t\tvar _components$name;\n\t\t\t\tconst rules = (_components$name = components[name]) === null || _components$name === void 0 ? void 0 : _components$name.rules;\n\t\t\t\tif (rules) this[name].ruler.enableOnly(rules);\n\t\t\t});\n\t\t\tconst rules2 = (_components$inline = components.inline) === null || _components$inline === void 0 ? void 0 : _components$inline.rules2;\n\t\t\tif (rules2) this.inline.ruler2.enableOnly(rules2);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Enable list or rules. It will automatically find appropriate components,\n\t* containing rules with given names. If rule not found, and `ignoreInvalid`\n\t* not set - throws exception.\n\t*\n\t* @param list Rule name or list of rule names to enable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t*\n\t* const md = new MarkdownIt()\n\t* .enable(['sub', 'sup'])\n\t* .disable('smartquotes')\n\t* ```\n\t*/\n\tenable(list, ignoreInvalid = false) {\n\t\tlet result = [];\n\t\tif (!Array.isArray(list)) list = [list];\n\t\t[\n\t\t\t\"core\",\n\t\t\t\"block\",\n\t\t\t\"inline\"\n\t\t].forEach((chain) => {\n\t\t\tresult = result.concat(this[chain].ruler.enable(list, true));\n\t\t});\n\t\tresult = result.concat(this.inline.ruler2.enable(list, true));\n\t\tconst missed = list.filter((name) => result.indexOf(name) < 0);\n\t\tif (missed.length && !ignoreInvalid) throw new Error(`MarkdownIt. Failed to enable unknown rule(s): ${missed}`);\n\t\treturn this;\n\t}\n\t/**\n\t* The same as {@link MarkdownIt.enable}, but turn specified rules off.\n\t*\n\t* @param list Rule name or list of rule names to disable.\n\t* @param ignoreInvalid Set `true` to ignore errors when rule not found.\n\t*/\n\tdisable(list, ignoreInvalid = false) {\n\t\tlet result = [];\n\t\tif (!Array.isArray(list)) list = [list];\n\t\t[\n\t\t\t\"core\",\n\t\t\t\"block\",\n\t\t\t\"inline\"\n\t\t].forEach((chain) => {\n\t\t\tresult = result.concat(this[chain].ruler.disable(list, true));\n\t\t});\n\t\tresult = result.concat(this.inline.ruler2.disable(list, true));\n\t\tconst missed = list.filter((name) => result.indexOf(name) < 0);\n\t\tif (missed.length && !ignoreInvalid) throw new Error(`MarkdownIt. Failed to disable unknown rule(s): ${missed}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Load specified plugin with given params into current parser instance.\n\t* It's just a sugar to call `plugin(md, params)` with curring.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* import iterator from 'markdown-it-for-inline'\n\t*\n\t* const md = new MarkdownIt()\n\t* .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n\t* tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar')\n\t* })\n\t* ```\n\t*/\n\tuse(plugin, ...params) {\n\t\tplugin.apply(plugin, [this, ...params]);\n\t\treturn this;\n\t}\n\t/**\n\t* Parse input string and return list of block tokens (special token type\n\t* \"inline\" will contain list of inline tokens). You should not call this\n\t* method directly, until you write custom renderer (for example, to produce\n\t* AST).\n\t*\n\t* `env` is used to pass data between \"distributed\" rules and return additional\n\t* metadata like reference info, needed for the renderer. It also can be used to\n\t* inject data in specific cases. Usually, you will be ok to pass `{}`,\n\t* and then pass updated object to renderer.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\tparse(src, env) {\n\t\tif (typeof src !== \"string\") throw new Error(\"Input data should be a String\");\n\t\tconst state = new this.core.State(src, this, env);\n\t\tthis.core.process(state);\n\t\treturn state.tokens;\n\t}\n\t/**\n\t* Render markdown string into html. It does all magic for you :).\n\t*\n\t* `env` can be used to inject additional metadata (`{}` by default).\n\t* But you will not need it with high probability. See also comment\n\t* in {@link MarkdownIt.parse}.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\trender(src, env = {}) {\n\t\treturn this.renderer.render(this.parse(src, env), this.options, env);\n\t}\n\t/**\n\t* The same as {@link MarkdownIt.parse} but skip all block rules. It returns\n\t* the block tokens list with the single `inline` element, containing parsed\n\t* inline tokens in `children` property. Also updates `env` object.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\tparseInline(src, env) {\n\t\tconst state = new this.core.State(src, this, env);\n\t\tstate.inlineMode = true;\n\t\tthis.core.process(state);\n\t\treturn state.tokens;\n\t}\n\t/**\n\t* Similar to {@link MarkdownIt.render} but for single paragraph content.\n\t* Result will NOT be wrapped into `<p>` tags.\n\t*\n\t* @param src Source string.\n\t* @param env Environment sandbox.\n\t*/\n\trenderInline(src, env = {}) {\n\t\treturn this.renderer.render(this.parseInline(src, env), this.options, env);\n\t}\n};\n_defineProperty(MarkdownIt, \"Token\", Token);\n_defineProperty(MarkdownIt, \"Ruler\", Ruler);\n_defineProperty(MarkdownIt, \"Renderer\", Renderer);\n_defineProperty(MarkdownIt, \"ParserCore\", ParserCore);\n_defineProperty(MarkdownIt, \"StateCore\", StateCore);\n_defineProperty(MarkdownIt, \"ParserBlock\", ParserBlock);\n_defineProperty(MarkdownIt, \"StateBlock\", StateBlock);\n_defineProperty(MarkdownIt, \"ParserInline\", ParserInline);\n_defineProperty(MarkdownIt, \"StateInline\", StateInline);\n//#endregion\n//#region src/index.ts\n/**\n* Default package export.\n*\n* For backward compatibility, the {@link MarkdownIt} class is wrapped so\n* legacy code can call it without `new`. New code should instantiate it as a\n* regular class with `new`. The compatibility wrapper may be removed in a\n* future release.\n*\n* @category Main\n*/\nvar MarkdownItCallable = callable(MarkdownIt);\n//#endregion\nexport { MarkdownItCallable as default };\n\n//# sourceMappingURL=markdown-it.mjs.map","/**\n * Markdown rendering for the file preview.\n *\n * markdown-it with raw HTML disabled (escaped, never executed — same\n * no-unsafe-HTML stance as every other preview in this plugin), linkified\n * text, and fenced code blocks highlighted through the highlight.js languages\n * registered in ./highlight. Relative image srcs are rewritten onto the\n * plugin's raw-bytes route (the same one image tabs use), resolved against the\n * markdown file's own directory, so README images render next to their file.\n */\nimport MarkdownIt from 'markdown-it'\nimport { canHighlight, highlightFence } from './highlight'\n\n/** Same-origin raw-bytes route registered by the host half (see src/index.ts). */\nconst RAW_PREFIX = '/dsh-plugin-files/raw'\n\n/** srcs that pass through unchanged: scheme URLs, anchors, protocol-relative. */\nconst ABSOLUTE_SRC = /^(?:[a-z][a-z0-9+.-]*:|#|\\/\\/)/i\n\nconst md = new MarkdownIt({\n // Raw HTML in the source is escaped, never rendered (XSS containment).\n html: false,\n linkify: true,\n typographer: true,\n highlight: (code: string, lang: string): string => {\n // Empty return lets markdown-it apply its own default escaping.\n if (!canHighlight(lang)) return ''\n return `<pre class=\"hljs\"><code>${highlightFence(code, lang)}</code></pre>`\n },\n})\n\n// Relative image srcs resolve against the md file's directory and are served\n// through the raw-bytes route; absolute URLs / data URIs pass through.\nconst defaultImage = md.renderer.rules.image\nmd.renderer.rules.image = (tokens, idx, options, env, self) => {\n const token = tokens[idx]\n const src = String(token.attrGet('src') ?? '')\n const base = typeof env === 'object' && env !== null && typeof (env as { base?: unknown }).base === 'string'\n ? (env as { base: string }).base\n : ''\n if (src !== '' && !ABSOLUTE_SRC.test(src) && base !== '') {\n const resolved = base.endsWith('/') || base.endsWith('\\\\') ? base + src : `${base}/${src}`\n token.attrSet('src', `${RAW_PREFIX}/${encodeURIComponent(resolved)}`)\n }\n return defaultImage(tokens, idx, options, env, self)\n}\n\n// markdown-it does not sanitize link protocols: a hostile .md file could carry\n// `[x](javascript:…)`. Follow markdown-it's default policy — reject the\n// vbscript/javascript/file/data schemes (data:image/* stays allowed so data-URI\n// images keep working); relative URLs pass through unchanged, and rejected\n// links render as inert text. Raw HTML is escaped above (html: false), so no\n// script/iframe can pass through either.\nconst BAD_LINK_PROTOCOL = /^(?:vbscript|javascript|file|data):/i\nconst GOOD_DATA_IMAGE = /^data:image\\/(?:gif|png|jpeg|webp);/i\nmd.validateLink = (url: string): boolean => {\n const trimmed = url.trim()\n return !BAD_LINK_PROTOCOL.test(trimmed) || GOOD_DATA_IMAGE.test(trimmed)\n}\n\n/**\n * Render markdown content to safe HTML.\n * @param content - raw markdown text.\n * @param baseDir - directory of the source file, used to resolve relative\n * image paths ('' when there is none).\n */\nexport function renderMarkdown(content: string, baseDir: string): string {\n return md.render(content, { base: baseDir })\n}\n","/**\n * Split file preview with VS Code-style tabs and a directly-editable editor.\n * Files open in tabs; the active tab is an always-editable textarea overlaid on\n * a syntax-highlighted layer (Ctrl/Cmd+S saves). Markdown files open in a\n * RENDERED preview by default, with a button to switch to the editable source\n * view. Tabs are drag-reorderable. Open files are watched on disk: external\n * changes auto-sync clean tabs and flag dirty ones (click the badge to reload,\n * discarding unsaved edits). Opening/closing the first/last tab is animated.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { DragEvent as ReactDragEvent, KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react'\nimport styles from './files.module.css'\nimport { detectLanguage, highlightCode } from './highlight'\nimport { renderMarkdown } from './markdown'\nimport { FileIcon } from './fileIcons'\nimport type { FilesKey } from './locales'\nimport { activateFile, closeFile, collapsePreview, moveTab, toggleWrap, useTabsState } from './store'\nimport type { FsReadResult } from './FileExplorer'\n\ninterface TabData {\n status: 'loading' | 'loaded' | 'image' | 'binary' | 'too-large' | 'error'\n content?: string\n draft?: string\n dirty?: boolean\n size?: number\n message?: string\n /** Markdown tabs: 'rendered' shows the compiled preview, 'source' the editor. */\n view?: 'rendered' | 'source'\n /** The file changed on disk while this tab holds unsaved edits. */\n diskChanged?: boolean\n}\n\nexport interface FsWriteResult {\n path: string\n size: number\n}\n\nexport interface FilePreviewProps {\n t: (key: FilesKey, params?: Record<string, unknown>) => string\n readFile: (path: string, signal?: AbortSignal) => Promise<FsReadResult>\n writeFile: (path: string, content: string, signal?: AbortSignal) => Promise<FsWriteResult>\n /** Replace the host-side watch set (the open tab paths). Idempotent diff. */\n watchFiles: (paths: string[]) => Promise<void>\n}\n\nconst PREVIEW_MIN = 240\nconst CHAT_MIN = 240\nconst PREVIEW_TOO_LARGE_LABEL = '512KB'\n\n/** Persisted split width (px) — survives reloads so a drag is never lost. */\nconst PREVIEW_WIDTH_KEY = 'dsh-plugin-workbench:preview-width'\n\n/** Read the persisted preview width; `null` means \"use the default 55%\". */\nfunction storedPreviewWidth(): number | null {\n try {\n if (typeof window === 'undefined') return null\n const raw = window.localStorage.getItem(PREVIEW_WIDTH_KEY)\n if (raw === null) return null\n const px = Number(raw)\n return Number.isFinite(px) && px > 0 ? px : null\n } catch {\n return null\n }\n}\n\n/** Same-origin raw-bytes route registered by the host half (see src/index.ts). */\nconst RAW_PREFIX = '/dsh-plugin-files/raw'\n\n/** Same-origin SSE endpoint pushed by the host half (see src/index.ts). */\nconst EVENTS_ENDPOINT = '/dsh-plugin-files/events'\n\n/**\n * Above this size an .md file opens in source view: compiling a multi-hundred\n * KB document and laying out its DOM is what makes the pane lag.\n */\nconst MD_RENDER_MAX_BYTES = 256 * 1024\n\nconst IMAGE_EXTENSIONS = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'bmp', 'ico', 'svg'])\n\n/**\n * Same-origin URL serving the file's bytes when it is a previewable image;\n * undefined otherwise. Image tabs never go through the text RPC read — the\n * host route resolves the path through the sandboxed fs service itself.\n */\nfunction imageSrcOf(path: string): string | undefined {\n const idx = path.lastIndexOf('.')\n if (idx < 0 || idx === path.length - 1) return undefined\n const ext = path.slice(idx + 1).toLowerCase()\n return IMAGE_EXTENSIONS.has(ext) ? `${RAW_PREFIX}/${encodeURIComponent(path)}` : undefined\n}\n\n/**\n * Above this size the overlay editor (syntax-highlight layer + transparent\n * textarea) falls back to a plain textarea: re-injecting and re-laying out\n * hundreds of KB of wrapped text on every keystroke is what makes the page\n * lag. The plain textarea keeps editing, wrapping and scrolling — it only\n * loses the colors, which files this big rarely need anyway.\n */\nconst HIGHLIGHT_MAX_BYTES = 64 * 1024\n\n/**\n * Languages always rendered as a plain textarea, never the overlay: the\n * highlight layer costs a full extra layout pass (and with CJK text a\n * fragile alignment surface) for prose formats where colors add little.\n */\nconst PLAIN_LANGUAGES = new Set(['markdown'])\n\nfunction basenameOf(path: string): string {\n const trimmed = path.replace(/[\\\\/]+$/, '')\n const idx = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\\\'))\n return idx >= 0 ? trimmed.slice(idx + 1) : trimmed\n}\n\nfunction formatSize(bytes: number | undefined): string {\n if (bytes === undefined) return ''\n if (!Number.isFinite(bytes) || bytes < 0) return ''\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\n/**\n * Nearest ancestor that actually takes part in layout. The slot system wraps\n * each slot's content in a `display: contents` element: children still join\n * the OUTER flex row, but the wrapper itself reports a 0×0 bounding rect.\n * Measuring that (the old `handle.parentElement`) made `max` collapse to\n * `PREVIEW_MIN` on the first move — the pane jumped to its minimum width and\n * could never be dragged back out. Skip every `display: contents` layer.\n */\nfunction laidOutParent(el: HTMLElement | null): HTMLElement | null {\n let node = el?.parentElement ?? null\n while (node !== null) {\n if (getComputedStyle(node).display !== 'contents') return node\n node = node.parentElement\n }\n return null\n}\n\n/** Parent directory of a path ('C:/a/b.md' → 'C:/a'; '' when there is none). */\nfunction dirnameOf(path: string): string {\n const idx = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n return idx > 0 ? path.slice(0, idx) : ''\n}\n\nfunction previewDataOf(result: FsReadResult): TabData {\n if (result.truncated) return { status: 'too-large', size: result.size }\n if (result.binary) return { status: 'binary', size: result.size }\n const data: TabData = {\n status: 'loaded',\n content: result.content,\n draft: result.content,\n dirty: false,\n size: result.size,\n }\n // Markdown opens in the rendered preview by default (source view for files\n // too large to render responsively).\n if (detectLanguage(result.path) === 'markdown' && result.size <= MD_RENDER_MAX_BYTES) {\n data.view = 'rendered'\n }\n return data\n}\n\n/**\n * Gutter text for an editor: one logical line number per source line, as a\n * single pre-formatted block (VS Code shows logical numbers even when soft\n * wrap makes a line occupy several visual rows).\n */\nfunction lineNumbersOf(content: string): string {\n const count = content.split('\\n').length\n if (count <= 1) return '1'\n const parts = new Array<string>(count)\n for (let i = 0; i < count; i += 1) parts[i] = String(i + 1)\n return parts.join('\\n')\n}\n\nexport function FilePreview({ t, readFile, writeFile, watchFiles }: FilePreviewProps) {\n const { tabs, active, theme, collapsed, wrap } = useTabsState()\n\n const [previewWidth, setPreviewWidth] = useState<number | null>(null)\n const [closing, setClosing] = useState(false)\n const [dragPath, setDragPath] = useState<string | undefined>(undefined)\n const [saveError, setSaveError] = useState<string | undefined>(undefined)\n\n const cacheRef = useRef<Map<string, TabData>>(new Map())\n const hasOpenedRef = useRef(false)\n const [, bump] = useState(0)\n const [imageFailed, setImageFailed] = useState<string | undefined>(undefined)\n\n const previewRef = useRef<HTMLDivElement>(null)\n const handleRef = useRef<HTMLDivElement>(null)\n const highlightRef = useRef<HTMLPreElement>(null)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const gutterRef = useRef<HTMLDivElement>(null)\n // Live drag listeners, kept in refs so a new drag can ALWAYS clear any\n // leftovers (a lost pointerup must not leak a stale onMove into the page).\n const dragMoveRef = useRef<(ev: PointerEvent) => void>(() => undefined)\n const dragUpRef = useRef<() => void>(() => undefined)\n\n const refresh = useCallback(() => bump((v) => v + 1), [])\n\n // Mirror of the current tab list for the SSE handler (avoids stale closures).\n const tabsRef = useRef(tabs)\n useEffect(() => {\n tabsRef.current = tabs\n }, [tabs])\n\n /**\n * Re-read one open file from disk (external edit sync, or the disk-changed\n * badge click). A reload always takes disk content — the auto-sync path only\n * runs on clean tabs, and the badge click is the user's explicit choice to\n * drop unsaved edits.\n */\n const reloadFromDisk = useCallback(async (path: string) => {\n const data = cacheRef.current.get(path)\n if (data === undefined || data.status !== 'loaded') return\n try {\n const result = await readFile(path)\n const next = previewDataOf(result)\n // Keep the user's chosen view; a reload never flips rendered/source.\n cacheRef.current.set(path, { ...next, view: data.view, diskChanged: false })\n } catch (error) {\n // File gone / unreadable: surface the failure instead of stale content.\n cacheRef.current.set(path, {\n ...data,\n status: 'error',\n message: error instanceof Error ? error.message : String(error),\n diskChanged: false,\n })\n }\n refresh()\n }, [readFile, refresh])\n\n /**\n * Handle one disk-change event for an open path. Clean tabs auto-sync;\n * dirty tabs keep their unsaved edits and show the reload badge instead.\n */\n const syncFromDisk = useCallback((path: string) => {\n const data = cacheRef.current.get(path)\n if (data === undefined || data.status === 'loading' || data.status === 'image') return\n if (data.status === 'error') {\n // Previously failed tab: retry the read (e.g. the file was re-created).\n void reloadFromDisk(path)\n return\n }\n if (data.dirty === true) {\n if (data.diskChanged !== true) {\n data.diskChanged = true\n refresh()\n }\n return\n }\n void reloadFromDisk(path)\n }, [reloadFromDisk, refresh])\n\n // Disk watch: tell the host which paths to watch (debounced), and re-send on\n // every SSE (re)connect so a dropped stream heals itself.\n useEffect(() => {\n const timer = setTimeout(() => {\n void watchFiles([...tabs]).catch(() => {\n // Host side not ready yet — the next tab change or SSE open retries.\n })\n }, 400)\n return () => clearTimeout(timer)\n }, [tabs, watchFiles])\n\n // Disk change events pushed by the host (fs.watch + SSE).\n useEffect(() => {\n const source = new EventSource(EVENTS_ENDPOINT)\n source.onopen = () => {\n void watchFiles([...tabsRef.current]).catch(() => {\n // Ignore — the next onopen or tab change re-syncs.\n })\n }\n const onChange = (event: MessageEvent<string>) => {\n try {\n const payload = JSON.parse(event.data) as { path?: unknown }\n if (typeof payload.path === 'string' && tabsRef.current.includes(payload.path)) {\n syncFromDisk(payload.path)\n }\n } catch {\n // Malformed frame — ignore.\n }\n }\n source.addEventListener('change', onChange)\n return () => {\n source.removeEventListener('change', onChange)\n source.close()\n }\n }, [syncFromDisk, watchFiles])\n\n // Read the ACTIVE tab's content. Other tabs load lazily on first\n // activation, so switching to a workspace with many large files doesn't\n // re-read every tab at once (which used to freeze the switch).\n useEffect(() => {\n const cache = cacheRef.current\n for (const [path] of cache) {\n if (!tabs.includes(path)) cache.delete(path)\n }\n const target = active ?? tabs[0]\n if (target === undefined || cache.has(target)) {\n refresh()\n return undefined\n }\n const controller = new AbortController()\n // Image files skip the text RPC read entirely: the raw-bytes route serves\n // them straight into an <img> tag, so there is nothing to load here.\n if (imageSrcOf(target) !== undefined) {\n cache.set(target, { status: 'image' })\n refresh()\n return () => controller.abort()\n }\n cache.set(target, { status: 'loading' })\n readFile(target, controller.signal)\n .then((result) => {\n if (!controller.signal.aborted) {\n cache.set(target, previewDataOf(result))\n // Large content: yield one frame so the browser paints the\n // loading→loaded transition before the heavy text layout runs —\n // the UI stays responsive instead of freezing in the same frame\n // as the tab-open interaction.\n if (result.size > HIGHLIGHT_MAX_BYTES) requestAnimationFrame(refresh)\n else refresh()\n }\n })\n .catch((error) => {\n if (!controller.signal.aborted) {\n cache.set(target, { status: 'error', message: error instanceof Error ? error.message : String(error) })\n refresh()\n }\n })\n refresh()\n return () => controller.abort()\n }, [tabs, active, readFile, refresh])\n\n // A failed <img> (deleted file, oversized, …) must not keep showing the\n // broken-image placeholder when the user switches away and back.\n useEffect(() => {\n setImageFailed(undefined)\n }, [active])\n\n // Animate the last tab closing without a mount/unmount bounce: keep the pane\n // mounted while `hasOpenedRef` is set, then drop it after the transition.\n if (tabs.length > 0) hasOpenedRef.current = true\n useEffect(() => {\n if (tabs.length > 0) {\n setClosing(false)\n return undefined\n }\n if (hasOpenedRef.current) {\n setClosing(true)\n const timer = setTimeout(() => {\n setClosing(false)\n hasOpenedRef.current = false\n }, 200)\n return () => clearTimeout(timer)\n }\n return undefined\n }, [tabs.length])\n\n const isOpen = !collapsed && (tabs.length > 0 || closing || hasOpenedRef.current)\n\n const activeData = active !== undefined ? cacheRef.current.get(active) : undefined\n const language = active !== undefined ? detectLanguage(active) : undefined\n const tooBig = (activeData?.size ?? 0) > HIGHLIGHT_MAX_BYTES\n const plain = language === undefined || tooBig || (language !== undefined && PLAIN_LANGUAGES.has(language))\n const isMarkdown = language === 'markdown'\n const mdRenderable = (activeData?.size ?? 0) <= MD_RENDER_MAX_BYTES\n // Rebuild the compiled markdown only when the draft (or the view mode)\n // changes — never on tab switches or focus re-renders.\n const mdHtml = useMemo(() => {\n if (activeData?.status !== 'loaded' || !isMarkdown || activeData.view !== 'rendered') return ''\n return renderMarkdown(activeData.draft ?? '', dirnameOf(active ?? ''))\n }, [activeData?.status, activeData?.draft, activeData?.view, isMarkdown, active])\n // Rebuild the gutter text only when the draft changes (not on every bump\n // from tab switches or focus re-renders).\n const gutterNumbers = useMemo(\n () => (activeData?.status === 'loaded' ? lineNumbersOf(activeData.draft ?? '') : ''),\n [activeData?.status, activeData?.draft],\n )\n\n // Keep the highlight layer and the line-number gutter in lockstep with the\n // textarea on every frame while the editor is open: some engines don't fire\n // scroll events during selection auto-scroll, which would otherwise leave\n // the visible layer and the numbers behind the selection (drag-select\n // misalignment). All layers are `overflow: auto|hidden` with identical\n // content geometry, so the assignment is a no-op whenever they align.\n useEffect(() => {\n const pre = highlightRef.current\n const ta = textareaRef.current\n const gutter = gutterRef.current\n if (ta === null || gutter === null) return undefined\n let raf = 0\n const tick = () => {\n if (pre !== null) {\n pre.scrollTop = ta.scrollTop\n pre.scrollLeft = ta.scrollLeft\n }\n gutter.scrollTop = ta.scrollTop\n raf = requestAnimationFrame(tick)\n }\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [isOpen, active, activeData?.status, activeData?.view, plain])\n\n // Publish the rendered preview width so the skin's fixed top/bottom trim can\n // shift past this pane (covering only the chat).\n useEffect(() => {\n if (!isOpen) {\n document.body.style.removeProperty('--dsh-preview-width')\n return undefined\n }\n const el = previewRef.current\n if (el === null) return undefined\n const update = () => {\n document.body.style.setProperty('--dsh-preview-width', `${el.getBoundingClientRect().width}px`)\n }\n update()\n const observer = new ResizeObserver(update)\n observer.observe(el)\n return () => {\n observer.disconnect()\n document.body.style.removeProperty('--dsh-preview-width')\n }\n }, [isOpen])\n\n // Apply the persisted width once the pane gets its first real layout: the\n // saved px may exceed the CURRENT center column (window resized since the\n // last drag), so clamp it against a live measurement before applying —\n // otherwise a stale wide value would squeeze the chat seat to nothing.\n useEffect(() => {\n const saved = storedPreviewWidth()\n if (saved === null) return\n const preview = previewRef.current\n const center = laidOutParent(preview)\n if (preview === null || preview === undefined || center === null || center === undefined) return\n const centerWidth = center.getBoundingClientRect().width\n const max = Math.max(PREVIEW_MIN, centerWidth - CHAT_MIN)\n setPreviewWidth(clamp(saved, PREVIEW_MIN, max))\n }, [isOpen])\n\n // Unmount during a drag (slot removed mid-drag): drop the window listeners\n // so no stale move handler survives to rewrite widths in the next mount.\n useEffect(() => () => {\n window.removeEventListener('pointermove', dragMoveRef.current)\n window.removeEventListener('pointerup', dragUpRef.current)\n window.removeEventListener('pointercancel', dragUpRef.current)\n }, [])\n\n /**\n * Start a split-width drag. Robustness notes (the \"pane suddenly shrinks\n * and freezes\" bug class):\n *\n * - Pointer capture reroutes every later pointer event to the handle, so\n * `pointerup` fires EVEN when the mouse is released outside the window.\n * Without it the up event is lost, `onUp` never runs, and the leftover\n * `onMove` keeps rewriting the width from its stale baseline on every\n * mouse move anywhere on the page — that is the \"cannot drag / cannot\n * restore\" state.\n * - `pointercancel` is cleaned up too (browser steals the pointer, e.g. a\n * tablet palm or an OS gesture).\n * - Pointerdown defensively removes any previous listeners first, so even a\n * capture-less leftover cannot survive into a second drag.\n * - The max is re-measured every move: the chat minimum is relative to the\n * CURRENT center column, which can change while the drag is in flight.\n */\n const onHandleDown = useCallback((e: ReactPointerEvent<HTMLDivElement>) => {\n e.preventDefault()\n const handle = handleRef.current\n const preview = previewRef.current\n if (handle === null || preview === null) return\n // NOT handle.parentElement: the slot wrapper is `display: contents` and\n // measures 0×0 — the flex container to clamp against is one level up (see\n // laidOutParent). Measuring the wrapper made every drag snap to\n // PREVIEW_MIN and then stick (the reported \"sudden shrink / can't drag\").\n const center = laidOutParent(handle)\n if (center === null) return\n const startX = e.clientX\n const startWidth = preview.getBoundingClientRect().width\n const onMove = (ev: PointerEvent) => {\n const centerWidth = center.getBoundingClientRect().width\n const max = Math.max(PREVIEW_MIN, centerWidth - CHAT_MIN)\n const width = clamp(startWidth + ev.clientX - startX, PREVIEW_MIN, max)\n setPreviewWidth(width)\n try {\n window.localStorage.setItem(PREVIEW_WIDTH_KEY, String(width))\n } catch {\n // storage unavailable — the width just won't persist across reloads\n }\n }\n const onUp = () => {\n window.removeEventListener('pointermove', dragMoveRef.current)\n window.removeEventListener('pointerup', dragUpRef.current)\n window.removeEventListener('pointercancel', dragUpRef.current)\n }\n // Defensive reset of any previous drag (see the doc comment above).\n window.removeEventListener('pointermove', dragMoveRef.current)\n window.removeEventListener('pointerup', dragUpRef.current)\n window.removeEventListener('pointercancel', dragUpRef.current)\n dragMoveRef.current = onMove\n dragUpRef.current = onUp\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n window.addEventListener('pointercancel', onUp)\n try {\n handle.setPointerCapture(e.pointerId)\n } catch {\n // Pointer capture unsupported — the window listeners still cover the drag.\n }\n }, [])\n\n const onSave = useCallback(async () => {\n if (active === undefined) return\n const data = cacheRef.current.get(active)\n if (data === undefined || data.status !== 'loaded' || data.draft === undefined || !data.dirty) return\n try {\n const result = await writeFile(active, data.draft)\n data.content = data.draft\n data.dirty = false\n data.size = result.size\n setSaveError(undefined)\n } catch (error) {\n setSaveError(error instanceof Error ? error.message : String(error))\n }\n refresh()\n }, [active, writeFile, refresh])\n\n const onTextareaChange = useCallback((value: string) => {\n if (active === undefined) return\n const data = cacheRef.current.get(active)\n if (data === undefined || data.status !== 'loaded') return\n data.draft = value\n data.dirty = value !== data.content\n if (data.dirty === false) setSaveError(undefined)\n refresh()\n }, [active, refresh])\n\n /** Flip the active markdown tab between rendered preview and source editor. */\n const toggleMdView = useCallback(() => {\n if (active === undefined) return\n const data = cacheRef.current.get(active)\n if (data === undefined || data.status !== 'loaded') return\n data.view = data.view === 'rendered' ? 'source' : 'rendered'\n refresh()\n }, [active, refresh])\n\n const onKeyDown = useCallback((e: ReactKeyboardEvent<HTMLTextAreaElement>) => {\n if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 's') {\n e.preventDefault()\n void onSave()\n }\n }, [onSave])\n\n const onTextareaScroll = useCallback((e: React.UIEvent<HTMLTextAreaElement>) => {\n const pre = highlightRef.current\n const gutter = gutterRef.current\n const ta = e.currentTarget\n if (pre !== null) {\n pre.scrollTop = ta.scrollTop\n pre.scrollLeft = ta.scrollLeft\n }\n if (gutter !== null) gutter.scrollTop = ta.scrollTop\n }, [])\n\n const onTabDragStart = useCallback((e: ReactDragEvent<HTMLDivElement>, path: string) => {\n setDragPath(path)\n e.dataTransfer.effectAllowed = 'move'\n try {\n e.dataTransfer.setData('text/plain', path)\n } catch {\n /* some browsers restrict dataTransfer — ignore */\n }\n }, [])\n\n const onTabDragOver = useCallback((e: ReactDragEvent<HTMLDivElement>, path: string) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n if (dragPath !== undefined && dragPath !== path) moveTab(dragPath, path)\n }, [dragPath])\n\n const onTabDragEnd = useCallback(() => {\n setDragPath(undefined)\n }, [])\n\n if (!isOpen) return null\n\n const renderBody = () => {\n if (activeData === undefined) return <div className={styles.previewHint}>{t('preview.loading')}</div>\n switch (activeData.status) {\n case 'loading':\n return <div className={styles.previewHint}>{t('preview.loading')}</div>\n case 'loaded':\n if (isMarkdown && activeData.view === 'rendered') {\n return (\n <div\n className={styles.mdPreview}\n dangerouslySetInnerHTML={{ __html: mdHtml }}\n />\n )\n }\n return (\n <div\n className={`${styles.editor}${plain ? ` ${styles.editorPlain}` : ''}`}\n data-wrap={wrap ? 'on' : 'off'}\n >\n <div ref={gutterRef} className={styles.gutter} aria-hidden=\"true\">\n <div className={styles.gutterNumbers}>{gutterNumbers}</div>\n </div>\n {!plain && active !== undefined && (\n <pre ref={highlightRef} className={styles.editorHighlight} aria-hidden=\"true\">\n <code dangerouslySetInnerHTML={{ __html: highlightCode(activeData.draft ?? '', active) }} />\n </pre>\n )}\n <textarea\n ref={textareaRef}\n className={styles.editorTextarea}\n value={activeData.draft ?? ''}\n onChange={(e) => onTextareaChange(e.target.value)}\n onScroll={onTextareaScroll}\n onKeyDown={onKeyDown}\n spellCheck={false}\n wrap={wrap ? 'soft' : 'off'}\n />\n {isMarkdown && !mdRenderable && <div className={styles.editorHint}>{t('preview.mdRenderOff')}</div>}\n {language !== undefined && !isMarkdown && tooBig && <div className={styles.editorHint}>{t('preview.highlightOff')}</div>}\n {saveError !== undefined && <div className={styles.saveError}>{saveError}</div>}\n </div>\n )\n case 'image': {\n const src = active !== undefined ? imageSrcOf(active) : undefined\n const name = active !== undefined ? basenameOf(active) : ''\n if (src === undefined) {\n return <div className={styles.previewHint}>{t('preview.binary')}</div>\n }\n if (imageFailed === active) {\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.imageFailed')}</div>\n <div className={styles.previewMeta}>{name}</div>\n </div>\n )\n }\n return (\n <div className={styles.imageView}>\n <img\n className={styles.image}\n src={src}\n alt={name}\n onError={() => setImageFailed(active)}\n />\n <div className={styles.previewMeta}>{name}</div>\n </div>\n )\n }\n case 'binary':\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.binary')}</div>\n <div className={styles.previewMeta}>{formatSize(activeData.size)}</div>\n </div>\n )\n case 'too-large':\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.tooLarge', { limit: PREVIEW_TOO_LARGE_LABEL })}</div>\n <div className={styles.previewMeta}>{formatSize(activeData.size)}</div>\n </div>\n )\n case 'error':\n return (\n <div className={styles.previewHint}>\n <div>{t('preview.error')}</div>\n <div className={styles.previewMeta}>{activeData.message}</div>\n </div>\n )\n }\n }\n\n const previewClassName = closing && tabs.length === 0\n ? `${styles.preview} ${styles.previewClosing}`\n : styles.preview\n\n return (\n <>\n <div\n ref={previewRef}\n className={previewClassName}\n style={previewWidth !== null ? { flex: `0 0 ${previewWidth}px` } : undefined}\n data-pane=\"explorer-preview\"\n data-fe-theme={theme}\n >\n {tabs.length > 0 && (\n <div className={styles.tabBar}>\n <div className={styles.tabScroller}>\n {tabs.map((path) => {\n const data = cacheRef.current.get(path)\n return (\n <div\n key={path}\n className={`${styles.tab} ${path === active ? styles.tabActive : ''}`}\n onClick={() => activateFile(path)}\n draggable\n onDragStart={(e) => onTabDragStart(e, path)}\n onDragOver={(e) => onTabDragOver(e, path)}\n onDragEnd={onTabDragEnd}\n title={path}\n >\n <span className={styles.tabIcon}><FileIcon name={basenameOf(path)} /></span>\n <span className={styles.tabName}>{basenameOf(path)}</span>\n {data?.dirty === true && <span className={styles.tabDot} />}\n {data?.diskChanged === true && (\n <button\n type=\"button\"\n className={styles.tabDiskBadge}\n title={t('tab.diskChanged')}\n onClick={(e) => {\n e.stopPropagation()\n void reloadFromDisk(path)\n }}\n >\n {'⟳'}\n </button>\n )}\n <button\n type=\"button\"\n className={styles.tabClose}\n title={t('tab.close')}\n onClick={(e) => {\n e.stopPropagation()\n closeFile(path)\n }}\n >\n ✕\n </button>\n </div>\n )\n })}\n </div>\n {isMarkdown && activeData?.status === 'loaded' && mdRenderable && (\n <button\n type=\"button\"\n className={styles.tabAction}\n title={activeData.view === 'rendered' ? t('action.mdSource') : t('action.mdRender')}\n onClick={toggleMdView}\n >\n {activeData.view === 'rendered' ? '📝' : '👁'}\n </button>\n )}\n <button\n type=\"button\"\n className={`${styles.tabAction}${wrap ? ` ${styles.tabActionActive}` : ''}`}\n title={wrap ? t('action.wrapOff') : t('action.wrapOn')}\n onClick={toggleWrap}\n >\n {'⤶'}\n </button>\n <button\n type=\"button\"\n className={styles.collapse}\n title={t('tab.collapse')}\n onClick={collapsePreview}\n >\n {'<'}\n </button>\n </div>\n )}\n <div className={styles.previewBody}>{renderBody()}</div>\n </div>\n <div ref={handleRef} className={styles.handle} onPointerDown={onHandleDown} role=\"separator\" aria-orientation=\"vertical\" />\n </>\n )\n}\n","/** Locale namespace and dictionaries for the files-explorer column. */\n\nexport const NS = 'files'\n\nexport const zh = {\n 'placeholder.noSession': '暂无会话',\n 'placeholder.noCwd': '当前会话没有工作目录',\n 'action.refresh': '刷新',\n 'action.open': '在系统中打开',\n 'action.theme': '切换浅色/暗色主题',\n 'action.saveHint': 'Ctrl+S 保存',\n 'action.wrapOn': '开启自动换行(显示层换行,不改文件)',\n 'action.wrapOff': '关闭自动换行(长行横向滚动)',\n 'action.mdRender': '渲染预览(Markdown)',\n 'action.mdSource': '查看 Markdown 源码',\n 'tab.close': '关闭标签页',\n 'tab.collapse': '收起文件详情',\n 'tab.expand': '弹出文件详情',\n 'tab.diskChanged': '文件已在磁盘上被修改,点击重新加载(会放弃未保存的编辑)',\n 'menu.open': '打开预览',\n 'menu.atFile': '@.\\ 在消息中引用',\n 'menu.newFile': '新建文件',\n 'menu.newFolder': '新建文件夹',\n 'menu.rename': '重命名',\n 'menu.delete': '删除',\n 'menu.copyPath': '复制路径',\n 'menu.copy': '复制',\n 'menu.cut': '剪切',\n 'menu.paste': '粘贴',\n 'menu.refresh': '刷新',\n 'menu.openSystem': '在系统中打开',\n 'menu.revealInExplorer': '在资源管理器打开',\n 'menu.deleteSelected': '删除选中的 {count} 项',\n 'menu.selectAll': '全选',\n 'menu.undo': '撤销',\n 'action.undo': '撤销(Ctrl+Z)',\n 'undo.copy': '复制「{name}」',\n 'undo.move': '移动「{name}」',\n 'undo.rename': '重命名「{name}」',\n 'undo.create': '新建「{name}」',\n 'undo.delete': '删除「{name}」',\n 'error.reveal': '在资源管理器打开失败',\n 'prompt.newFileName': '新文件名',\n 'prompt.newFolderName': '新文件夹名',\n 'prompt.renameTo': '重命名为',\n 'confirm.deleteFile': '确定删除文件「{name}」吗?(可撤销)',\n 'confirm.deleteDir': '确定删除文件夹「{name}」及其全部内容吗?(可撤销)',\n 'confirm.deleteSelected': '确定删除选中的 {count} 项吗?{names}(可撤销)',\n 'confirm.overwrite': '「{name}」已存在,是否覆盖?',\n 'clipboard.copied': '已复制 {count} 项',\n 'clipboard.cut': '已剪切 {count} 项',\n 'clipboard.pasteHint': ' · Ctrl+V 粘贴到当前目录',\n 'clipboard.clear': '清除剪贴板',\n 'preview.loading': '加载中…',\n 'preview.binary': '二进制文件,无法预览',\n 'preview.imageFailed': '图片加载失败',\n 'preview.tooLarge': '文件过大,仅支持预览不超过 {limit}',\n 'preview.emptyDir': '空目录',\n 'preview.error': '加载失败',\n 'preview.highlightOff': '大文件:已关闭语法高亮(仍可编辑)',\n 'preview.mdRenderOff': '大文件:已切换为源码视图(仍可编辑)',\n} as const\n\nexport type FilesKey = keyof typeof zh\n\nexport const en: Record<FilesKey, string> = {\n 'placeholder.noSession': 'No session',\n 'placeholder.noCwd': 'No working directory for this session',\n 'action.refresh': 'Refresh',\n 'action.open': 'Open in system',\n 'action.theme': 'Toggle light/dark theme',\n 'action.saveHint': 'Ctrl+S to save',\n 'action.wrapOn': 'Enable word wrap (display only, file unchanged)',\n 'action.wrapOff': 'Disable word wrap (long lines scroll horizontally)',\n 'action.mdRender': 'Rendered preview',\n 'action.mdSource': 'Show markdown source',\n 'tab.close': 'Close tab',\n 'tab.collapse': 'Collapse file details',\n 'tab.expand': 'Expand file details',\n 'tab.diskChanged': 'File changed on disk — click to reload (discards unsaved edits)',\n 'menu.open': 'Open preview',\n 'menu.atFile': '@.\\ Mention in message',\n 'menu.newFile': 'New File',\n 'menu.newFolder': 'New Folder',\n 'menu.rename': 'Rename',\n 'menu.delete': 'Delete',\n 'menu.copyPath': 'Copy Path',\n 'menu.copy': 'Copy',\n 'menu.cut': 'Cut',\n 'menu.paste': 'Paste',\n 'menu.refresh': 'Refresh',\n 'menu.openSystem': 'Open in System',\n 'menu.revealInExplorer': 'Reveal in Explorer',\n 'menu.deleteSelected': 'Delete {count} selected item(s)',\n 'menu.selectAll': 'Select All',\n 'menu.undo': 'Undo',\n 'action.undo': 'Undo (Ctrl+Z)',\n 'undo.copy': 'Copy \"{name}\"',\n 'undo.move': 'Move \"{name}\"',\n 'undo.rename': 'Rename \"{name}\"',\n 'undo.create': 'Create \"{name}\"',\n 'undo.delete': 'Delete \"{name}\"',\n 'error.reveal': 'Failed to reveal in Explorer',\n 'prompt.newFileName': 'New file name',\n 'prompt.newFolderName': 'New folder name',\n 'prompt.renameTo': 'Rename to',\n 'confirm.deleteFile': 'Delete file \"{name}\"? (undoable)',\n 'confirm.deleteDir': 'Delete folder \"{name}\" and all its contents? (undoable)',\n 'confirm.deleteSelected': 'Delete {count} selected item(s)? {names} (undoable)',\n 'confirm.overwrite': '\"{name}\" already exists. Overwrite?',\n 'clipboard.copied': '{count} item(s) copied',\n 'clipboard.cut': '{count} item(s) cut',\n 'clipboard.pasteHint': ' · Ctrl+V to paste here',\n 'clipboard.clear': 'Clear clipboard',\n 'preview.loading': 'Loading…',\n 'preview.binary': 'Binary file, cannot preview',\n 'preview.imageFailed': 'Failed to load image',\n 'preview.tooLarge': 'File too large to preview (limit {limit})',\n 'preview.emptyDir': 'Empty directory',\n 'preview.error': 'Load failed',\n 'preview.highlightOff': 'Large file: syntax highlighting off (still editable)',\n 'preview.mdRenderOff': 'Large file: source view (still editable)',\n}\n","/**\n * @-mention linkifier for the conversation.\n *\n * The workbench inserts `@.\\<relative-workspace-path>` into the composer (menu\n * gesture \"在消息中引用\"; the `.\\` prefix marks a workspace-relative path), and\n * this module makes the mention VISIBLE as a hyperlink once the message is\n * rendered: any `@`-prefixed token that matches the mention grammar is wrapped\n * in an anchor, and clicking it opens the file in the workbench preview.\n *\n * Grammar (anything else stays plain text with no special meaning):\n * - `@` must sit at a token boundary (start of text, whitespace, or\n * punctuation like `((` `,,` `。.` quotes and brackets) — so `user@x`,\n * `a.b@c` and URLs never match;\n * - the token is the longest run of non-whitespace, non-`@` characters,\n * with trailing sentence punctuation trimmed (`.。 ,, ;; :: !! ?? ))`…);\n * - the remaining token must be a RELATIVE path (never drive-absolute or\n * leading-slash) — optionally prefixed with a `.\\` or `./` workspace\n * marker — and path-shaped: either contains a `/` or `\\` directory\n * separator, or is a single segment ending in a file extension;\n * - a path containing whitespace may instead use the quoted `@\"token\"` form\n * (the workbench writes it when the rel path has spaces, e.g.\n * `@\"\\.\\my plan.md\"`).\n *\n * Scanning mirrors the table-zoom enhancer: a MutationObserver on\n * `document.body`, rAF-coalesced, walks the text nodes of every\n * `[data-conversation-scroll]` subtree and skips protected containers\n * (code blocks, existing links, aria-hidden overlays like the composer\n * mirror/backdrop, the composer seat, popups, and the workbench column).\n */\nimport { openMention } from './composer'\n\n/** Mention pattern: `@` + token (no whitespace, no embedded `@`). */\nconst MENTION_RE = /@([^\\s@]+)/g\n\n/** Quoted mention pattern: `@\"token\"` — used when the path contains whitespace. */\nconst QUOTED_MENTION_RE = /@\"([^\"@]+)\"/g\n\n/** Trailing characters trimmed from a mention token before validation. */\nconst TRAILING = new Set(['.', ',', ';', ':', '!', '?', '。', ',', ';', ':', '!', '?', ')', ')', ']', '】', '}', '》', '」', '』', '\"', \"'\"])\n\n/** Characters that may legally precede `@` in a mention (start/whitespace/punctuation). */\nfunction isBoundaryBefore(ch: string | undefined): boolean {\n if (ch === undefined) return true\n // NOTE: `]` is escaped — an unescaped `]` inside a character class ends it\n // early and silently turns the rest into required literal matches.\n return /[\\s(([【「『\"'`、,。;:!?,.!?:;>\\])})]/.test(ch)\n}\n\n/** Whether `token` (already trailing-trimmed) matches the relative-path grammar. */\nexport function isMentionToken(token: string): boolean {\n if (token.length === 0) return false\n // Sentence punctuation inside the token means following text bled into the\n // mention (e.g. \"@src/index.ts。谢谢\"): that is plain text, not a path.\n // Sentence punctuation at the END is trimmed before this check.\n if (/[。,、;:!?()、【】「」『』《》]/.test(token)) return false\n // Relative only: no drive prefix, no leading separator, no leading dot-dot.\n if (/^[A-Za-z]:[\\\\/]/.test(token)) return false\n if (token.startsWith('/') || token.startsWith('\\\\')) return false\n if (token.startsWith('..')) return false\n // Path-shaped: a directory separator anywhere, or a single file segment\n // with an extension. Spaces are allowed in the extension part — unquoted\n // tokens never contain whitespace anyway, but `@\"...\"` paths may.\n if (token.includes('/') || token.includes('\\\\')) return true\n return /^[^\\\\/]+\\.[A-Za-z0-9_][A-Za-z0-9._~+ -]*$/.test(token)\n}\n\n/** Trim trailing sentence punctuation from a raw mention token. */\nexport function trimMentionToken(raw: string): string {\n let token = raw\n while (token.length > 0 && TRAILING.has(token[token.length - 1])) {\n token = token.slice(0, -1)\n }\n return token\n}\n\n/**\n * Extract every valid mention from `text` as [start, end, mention] ranges.\n * `end` covers `@` + the TRIMMED token (trailing punctuation stays outside the\n * link). For the quoted `@\"...\"` form the span covers `@\"...\"` including both\n * quotes, while `mention` carries the inner path (used for resolution).\n * Pure and testable: the DOM walk uses it and then splits the text node.\n */\nexport function findMentions(text: string): Array<{ start: number; end: number; mention: string }> {\n const hits: Array<{ start: number; end: number; mention: string }> = []\n MENTION_RE.lastIndex = 0\n let match: RegExpExecArray | null\n while ((match = MENTION_RE.exec(text)) !== null) {\n const at = match.index\n const raw = match[1]\n if (!isBoundaryBefore(at > 0 ? text[at - 1] : undefined)) continue\n const token = trimMentionToken(raw)\n if (!isMentionToken(token)) continue\n hits.push({ start: at, end: at + 1 + token.length, mention: token })\n }\n QUOTED_MENTION_RE.lastIndex = 0\n let quoted: RegExpExecArray | null\n while ((quoted = QUOTED_MENTION_RE.exec(text)) !== null) {\n const at = quoted.index\n const inner = quoted[1]\n if (!isBoundaryBefore(at > 0 ? text[at - 1] : undefined)) continue\n if (!isMentionToken(inner)) continue\n hits.push({ start: at, end: at + inner.length + 3, mention: inner })\n }\n // Deterministic order, and a quoted span that starts on the same `@` as a\n // plain one shadows that plain hit (plain hits on `@\"` tokens are invalid\n // and filtered out already, so this only guards future grammar regressions).\n hits.sort((a, b) => a.start - b.start || a.end - b.end)\n const merged: Array<{ start: number; end: number; mention: string }> = []\n for (const hit of hits) {\n const prev = merged[merged.length - 1]\n if (prev !== undefined && hit.start === prev.start) {\n merged[merged.length - 1] = hit\n continue\n }\n if (prev !== undefined && hit.start < prev.end) continue\n merged.push(hit)\n }\n return merged\n}\n\n/** Containers whose text is never linkified (code, existing links, overlays). */\nconst SKIP_SELECTOR = [\n 'code',\n 'pre',\n 'a',\n 'script',\n 'style',\n 'textarea',\n '[data-composer-seat]',\n '[data-input-mirror]',\n '[data-input-backdrop]',\n '[data-pane=\"explorer\"]',\n '[aria-hidden=\"true\"]',\n '.dstz-popup',\n '.dshpick-lightbox',\n '[data-wb-mention]',\n].join(',')\n\n/** Walk the text nodes of one conversation scroll container and linkify. */\nfunction linkifyRoot(root: HTMLElement): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT)\n const toCheck: Text[] = []\n let node: Node | null = walker.nextNode()\n while (node !== null) {\n if (node.parentElement !== null && node.parentElement.closest(SKIP_SELECTOR) === null) {\n toCheck.push(node as Text)\n }\n node = walker.nextNode()\n }\n for (const textNode of toCheck) {\n linkifyTextNode(textNode)\n }\n}\n\n/** Wrap every mention in one text node; returns true when anything changed. */\nfunction linkifyTextNode(node: Text): boolean {\n const text = node.data\n const hits = findMentions(text)\n if (hits.length === 0) return false\n const frag = document.createDocumentFragment()\n let cursor = 0\n for (const hit of hits) {\n if (hit.start > cursor) frag.appendChild(document.createTextNode(text.slice(cursor, hit.start)))\n const anchor = document.createElement('a')\n anchor.className = 'dswb-mention'\n anchor.dataset.wbMention = hit.mention\n anchor.textContent = text.slice(hit.start, hit.end)\n anchor.title = `@${hit.mention}`\n frag.appendChild(anchor)\n cursor = hit.end\n }\n if (cursor < text.length) frag.appendChild(document.createTextNode(text.slice(cursor)))\n node.parentNode?.replaceChild(frag, node)\n return true\n}\n\n/** Style tag guard (the bundle may re-apply on HMR). */\nlet styleInstalled = false\n\nconst MENTION_CSS = [\n '.dswb-mention{color:var(--dsw-alias-state-business-primary);text-decoration:underline;text-underline-offset:2px;cursor:pointer;border-radius:4px;padding:0 1px}',\n '.dswb-mention:hover{background:var(--dsw-alias-interactive-bg-hover)}',\n].join('')\n\nfunction installStyle(): void {\n if (styleInstalled || typeof document === 'undefined') return\n styleInstalled = true\n const tagId = 'dsh-plugin-workbench/mention.module.css'\n if (document.querySelector(`style[data-plugin-css=${JSON.stringify(tagId)}]`) === null) {\n const tag = document.createElement('style')\n tag.dataset.plugin = 'dsh-plugin-workbench'\n tag.dataset.pluginCss = tagId\n tag.textContent = MENTION_CSS\n document.head.appendChild(tag)\n }\n}\n\n/** Click handler: open the mentioned file in the workbench preview. */\nfunction onDocumentClick(e: MouseEvent): void {\n const target = e.target\n if (!(target instanceof Element)) return\n const anchor = target.closest('a.dswb-mention')\n if (anchor === null) return\n const mention = anchor.getAttribute('data-wb-mention')\n if (mention === null) return\n e.preventDefault()\n e.stopPropagation()\n openMention(mention)\n}\n\n/** One-time install guard (HMR re-applies must not double-observe). */\nlet linkifierInstalled = false\n\n/** Start the linkifier: initial scan + MutationObserver with rAF coalescing. */\nexport function installMentionLinkifier(): () => void {\n if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') return () => undefined\n if (linkifierInstalled) return () => undefined\n linkifierInstalled = true\n installStyle()\n document.addEventListener('click', onDocumentClick)\n let pending = false\n const scan = (): void => {\n pending = false\n for (const root of document.querySelectorAll<HTMLElement>('[data-conversation-scroll]')) {\n linkifyRoot(root)\n }\n }\n const observer = new MutationObserver(() => {\n if (pending) return\n pending = true\n requestAnimationFrame(scan)\n })\n observer.observe(document.body, { childList: true, subtree: true, characterData: true })\n scan()\n return () => {\n observer.disconnect()\n document.removeEventListener('click', onDocumentClick)\n linkifierInstalled = false\n }\n}\n","/**\n * Composer @-mention hyperlink enhancement.\n *\n * The composer's visible text lives in a core-rendered backdrop (`textarea`\n * text is transparent) that React re-renders on every keystroke, so plugin\n * code must not mutate it. Instead this module renders its OWN overlay — an\n * absolutely-positioned copy of the draft, in the same font/padding/wrap\n * metrics as the textarea (copied from the core `.input,.mirror,.backdrop`\n * rule), with every `@.\\`-style mention drawn in the link color and\n * underlined. The overlay's plain text is fully transparent, so the visible\n * glyphs still come from the core backdrop; mention spans paint on top at the\n * identical position (same metrics => same layout), which shows the mention as\n * a real hyperlink inside the chat input.\n *\n * The overlay is appended directly to the core `.grow` container (a sibling\n * of the backdrop/mirror) — React never manages nodes it did not create, and\n * the overlay is `position:absolute;inset:0` so it always tracks the input\n * box, including scroll inside `[data-input-scroll]`. It re-syncs whenever the\n * core `[data-input-mirror]` text changes (a React-written text node, so it\n * updates for typing AND programmatic inserts such as the core `@` menu or\n * this plugin's own insertIntoComposer).\n *\n * Interaction: Ctrl/Cmd+click inside the composer textarea opens the mention\n * under the caret in the workbench preview (the visible link is a decoration;\n * the real input gains the click), mirroring the rendered-message linkifier.\n */\nimport { openMention } from './composer'\nimport { findMentions } from './mentions'\n\n/** One-time install guard (the client bundle re-applies on HMR). */\nlet installed = false\n\n/** Style-tag guard (the bundle may re-apply on HMR). */\nlet styleInstalled = false\n\nconst OVERLAY_CSS = [\n // Layout metrics must match the core rule for `.input,.mirror,.backdrop`\n // exactly, so the overlay's invisible text wraps identically to the visible\n // backdrop text and mentions paint at the right place.\n '[data-wb-composer-mention-overlay]{position:absolute;inset:0;overflow:hidden;pointer-events:none;box-sizing:border-box;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;padding:4px 12px 0 16px;color:transparent}',\n '[data-wb-composer-mention-overlay][hidden]{display:none}',\n '.dswb-composer-mention{color:var(--dsw-alias-state-business-primary);-webkit-text-fill-color:var(--dsw-alias-state-business-primary);text-decoration:underline;text-underline-offset:2px}',\n].join('')\n\nfunction installStyle(): void {\n if (styleInstalled || typeof document === 'undefined') return\n styleInstalled = true\n const tagId = 'dsh-plugin-workbench/composer-mention.module.css'\n if (document.querySelector(`style[data-plugin-css=${JSON.stringify(tagId)}]`) === null) {\n const tag = document.createElement('style')\n tag.dataset.plugin = 'dsh-plugin-workbench'\n tag.dataset.pluginCss = tagId\n tag.textContent = OVERLAY_CSS\n document.head.appendChild(tag)\n }\n}\n\n/** The overlay element for the currently visible composer, or null. */\nlet overlayEl: HTMLElement | null = null\n\n/** Last draft rendered into the overlay (avoids re-rendering on own mutations). */\nlet lastDraft: string | null = null\n\n/** Create (once per composer instance) and return the overlay inside `.grow`. */\nfunction ensureOverlay(): HTMLElement | null {\n const seat = document.querySelector('[data-composer-seat]')\n if (seat === null) return null\n const mirror = seat.querySelector<HTMLElement>('[data-input-mirror]')\n const grow = mirror?.parentElement\n if (grow === null || grow === undefined) return null\n let overlay = grow.querySelector<HTMLElement>('[data-wb-composer-mention-overlay]')\n if (overlay === null) {\n overlay = document.createElement('div')\n overlay.dataset.wbComposerMentionOverlay = ''\n overlay.setAttribute('aria-hidden', 'true')\n grow.appendChild(overlay)\n }\n if (overlayEl !== overlay) {\n overlayEl = overlay\n lastDraft = null\n }\n return overlay\n}\n\n/** Render the (transparent) draft with mention spans into the overlay. */\nfunction render(overlay: HTMLElement, draft: string): void {\n const hits = findMentions(draft)\n if (hits.length === 0) {\n overlay.hidden = true\n return\n }\n overlay.hidden = false\n const frag = document.createDocumentFragment()\n let cursor = 0\n for (const hit of hits) {\n if (hit.start > cursor) frag.appendChild(document.createTextNode(draft.slice(cursor, hit.start)))\n const span = document.createElement('span')\n span.className = 'dswb-composer-mention'\n span.dataset.wbMention = hit.mention\n span.textContent = draft.slice(hit.start, hit.end)\n frag.appendChild(span)\n cursor = hit.end\n }\n if (cursor < draft.length) frag.appendChild(document.createTextNode(draft.slice(cursor)))\n overlay.replaceChildren(frag)\n}\n\n/** Re-sync the overlay with the composer draft (cheap no-op when unchanged). */\nfunction sync(): void {\n const seat = document.querySelector('[data-composer-seat]')\n if (seat === null) return\n // Skip the hero workspace picker / disabled states — only a usable input gets decorated.\n if (seat.querySelector('textarea:not([disabled]):not([readonly])') === null) return\n const mirror = seat.querySelector<HTMLElement>('[data-input-mirror]')\n const overlay = ensureOverlay()\n if (mirror === null || overlay === null) return\n // The mirror renders `${draft}\\n`; strip exactly that trailing newline.\n const draft = (mirror.textContent ?? '').replace(/\\n$/, '')\n if (draft === lastDraft) return\n lastDraft = draft\n render(overlay, draft)\n}\n\n/** Ctrl/Cmd+click on the composer: open the mention under the caret. */\nfunction onDocumentClick(e: MouseEvent): void {\n if (!(e.ctrlKey || e.metaKey)) return\n const target = e.target\n if (!(target instanceof HTMLTextAreaElement)) return\n if (target.closest('[data-composer-seat]') === null) return\n // The caret has already moved to the clicked character when click fires.\n const pos = target.selectionStart\n const draft = target.value\n const hits = findMentions(draft)\n let hit = hits.find((h) => pos >= h.start && pos <= h.end)\n if (hit === undefined) hit = hits.find((h) => pos - 1 >= h.start && pos - 1 < h.end)\n if (hit === undefined) return\n e.preventDefault()\n e.stopPropagation()\n openMention(hit.mention)\n}\n\n/** Start the composer mention overlay + Ctrl+click opener (idempotent). */\nexport function installComposerMentions(): () => void {\n if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') return () => undefined\n if (installed) return () => undefined\n installed = true\n installStyle()\n document.addEventListener('click', onDocumentClick)\n let pending = false\n const scan = (): void => {\n pending = false\n sync()\n }\n const observer = new MutationObserver(() => {\n if (pending) return\n pending = true\n requestAnimationFrame(scan)\n })\n observer.observe(document.body, { childList: true, subtree: true, characterData: true })\n scan()\n return () => {\n observer.disconnect()\n document.removeEventListener('click', onDocumentClick)\n installed = false\n }\n}\n","/**\n * Client half of the files-explorer plugin.\n *\n * Registers the file tree into the `explorer` slot and the split preview into\n * the `explorer.preview` slot (both declared by the patched ui-layout), plus a\n * `files` locale namespace. The inject factories return plain callbacks:\n * filesystem reads go through the generic connection RPC channel into the host\n * half, and `openPath` reuses the existing workspaces capability.\n */\nimport type { Context } from '@deepseek-ai/cordis'\nimport { FileExplorer } from './FileExplorer'\nimport { FilePreview } from './FilePreview'\nimport { NS, zh, en } from './locales'\nimport { installComposerDrops } from './composer'\nimport { installMentionLinkifier } from './mentions'\nimport { installComposerMentions } from './composerMentions'\n\nconst CHANNEL = '/dsh-plugin-files'\n\n/** Required client services (sequencing only — data reads use global hooks). */\nexport const inject = ['slots', 'sessions', 'workspaces', 'locale', 'connection']\n\nexport function apply(ctx: Context): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'files-explorer: dictionaries')\n\n // Drag-to-chat, @-mention linkifier, and composer mention hyperlinks:\n // DOM-level integrations, one-time install (module guards make re-applies on\n // HMR idempotent).\n installComposerDrops()\n installComposerMentions()\n ctx.effect(() => installMentionLinkifier(), 'files-explorer: @mention linkifier')\n\n const listDir = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'list', { path }, signal))\n const readFile = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'read', { path }, signal))\n const writeFile = (path: string, content: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'write', { path, content }, signal))\n const watchFiles = (paths: string[]) => unwrap(ctx.connection.rpc.call(CHANNEL, 'watch', { paths }))\n const createFile = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'createFile', { path }, signal))\n const createDir = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'createDir', { path }, signal))\n const renameFile = (path: string, to: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'rename', { path, to }, signal))\n const removePath = (path: string, signal?: AbortSignal) => unwrap(ctx.connection.rpc.call(CHANNEL, 'delete', { path }, signal))\n const copyPath = (from: string, to: string, overwrite: boolean, signal?: AbortSignal) =>\n unwrap(ctx.connection.rpc.call(CHANNEL, 'copy', { from, to, overwrite }, signal))\n const revealInExplorer = (path: string, kind: 'file' | 'dir', signal?: AbortSignal) =>\n unwrap(ctx.connection.rpc.call(CHANNEL, 'reveal', { path, kind }, signal))\n const openPath = (path: string) => ctx.workspaces.openPath(path)\n\n ctx.slots.inject('explorer', () => ctx.slots.register({\n name: 'explorer',\n locale: NS,\n inject: () => ({ listDir, openPath, revealInExplorer, createFile, createDir, renameFile, removePath, copyPath }),\n }, FileExplorer))\n\n ctx.slots.inject('explorer.preview', () => ctx.slots.register({\n name: 'explorer.preview',\n locale: NS,\n inject: () => ({ readFile, writeFile, watchFiles }),\n }, FilePreview))\n}\n\ninterface RpcFailure {\n ok: false\n error: { code: string; message: string }\n}\n\n/** Error carrying the host's machine-readable `code` (always a core union code; copy collisions are reported in the value instead). */\nexport interface RpcError extends Error {\n code?: string\n}\n\nasync function unwrap<T>(result: Promise<{ ok: true; value: T } | RpcFailure>): Promise<T> {\n const resolved = await result\n if (!resolved.ok) {\n const error = new Error(resolved.error.message) as RpcError\n error.code = resolved.error.code\n throw error\n }\n return resolved.value\n}\n"],"x_google_ignoreList":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"mappings":"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CpC;GACA,MAAM,UAAU,KAAK,QACnB,KAAK,QAAQ,GACb;IACE,OAAO,CACL,UACA,MACF;IACA,OAAO,EACL,GAAG,UACL;GACF,CACF;GACA,MAAM,WAAW;IACf,OAAO;IACP,QAAQ,EAAE,UAAU,CAClB,KAAK,kBAAkB;KACrB,OAAO;KACP,KAAK;KACL,WAAW;IACb,CAAC,CACH,EAAE;GACJ;GACA,MAAM,eAAe;IACnB,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;KACR,KAAK;KACL;KACA;IACF;GACF;GACA,MAAM,SAAS,KAAK,YAAY;GAChC,MAAM,gBAAgB,EACpB,OAAO,MACT;GACA,MAAM,cAAc;IAClB,WAAW;IACX,OAAO;IACP,KAAK;GACP;GACA,MAAM,eAAe,EACnB,OAAO,MACT;GACA,MAAM,aAAa;IACjB,OAAO;IACP,KAAK;IACL,UAAU;KACR;MACE,OAAO;MACP,WAAW;KACb;KACA,KAAK;KACL;IACF;GACF;GAYA,MAAM,gBAAgB,KAAK,QAAQ;IACjC,QAAQ,IAAI;KAXZ;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAGyB,CAAC,CAAC,KAAK,GAAG,EAAE;IACrC,WAAW;GACb,CAAC;GACD,MAAM,WAAW;IACf,WAAW;IACX,OAAO;IACP,aAAa;IACb,UAAU,CAAE,KAAK,QAAQ,KAAK,YAAY,EAAE,OAAO,aAAa,CAAC,CAAE;IACnE,WAAW;GACb;GAEA,MAAM,WAAW;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,WAAW,CACf,QACA,OACF;GAGA,MAAM,YAAY,EAAE,OAAO,iBAAiB;GAG5C,MAAM,kBAAkB;IACtB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,gBAAgB;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS,CACP,MACA,KACF;IACA,UAAU;KACR,UAAU;KACV,SAAS;KACT,SAAS;KACT,UAAU;MACR,GAAG;MACH,GAAG;MAEH;MACA;MACA,GAAG;MACH,GAAG;KACL;IACF;IACA,UAAU;KACR;KACA,KAAK,QAAQ;KACb;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;GACF;EACF;;;;EC/YA,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GAInB,MAAM,sBAAsB,KAAK,QAAQ,MAAM,KAAK,EAAE,UAAU,CAAE,EAAE,OAAO,OAAO,CAAE,EAAE,CAAC;GACvF,MAAM,mBAAmB;GACzB,MAAM,eAAe;GAErB,MAAM,mBAAmB,mCAErB,MAAM,SAAS,YAAY,IAC3B,kBAAkB,MAAM,SAAS,UAAoB,IACvD;GAEF,MAAM,sBAAsB;IAC1B,WAAW;IACX,OAAO;GACT;GAKA,MAAM,UAAU;IACd,WAAW;IACX,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,SAAS;MACT,UAAU,CAAE,KAAK,gBAAiB;KACpC;KACA;MACE,OAAO;MACP,KAAK;MACL,SAAS;KACX;KAKA,KAAK,kBAAkB;MACrB,OAAO;MACP,KAAK;KACP,CAAC;IACH;GACF;GAEA,MAAM,UAAU;IACd,WAAW;IACX,UAAU,CAER,EAAE,OACA,wVAkBF,GAEA,EAAE,OACA,8JAcF,CACF;IACA,WAAW;GACb;GA8CA,MAAM,gBAAgB,CACpB;IAtCA,OAAO;IACP,OAAO;IACP,KAAK;IACL,UAAU,EAAE,SAAS,UAAU;IAC/B,UAAU;KACR,EAEE,OAAO,OACT;KACA;KACA;MACE,OAAO;MACP,OAAO;KACT;KACA;KACA,KAAK;IACP;GAsBmB,GACnB;IAnBA,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU,EAAE,SACR,yFACwC;IAC5C,UAAU;KACR;MACE,OAAO;MACP,WAAW;KACb;KACA,KAAK,QAAQ,SAAS,EAAE,WAAW,SAAS,CAAC;KAC7C;KACA,KAAK;IACP;GAKW,CACb;GAEA,MAAM,aAAa;IACjB,WAAW;IACX,OAAO,MAAM,SAAS,YAAY,IAAI,KAAK;IAC3C,WAAW;GACb;GAEA,MAAM,iBAAiB,MAAM,SAAS,YAAY,IAAI,KAAK,WAAW;GAQtE,MAAM,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAGA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,aAAa;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAaA,MAAM,eAAe;IACnB,MAAM;IACN,SAAS;IACT,SAAS;KAbT;KACA;KACA;KACA;KACA;IASgB;IAChB,UAAU,CANO,SAMA;IACjB,aAAa;GACf;GAEA,MAAM,oBAAoB;IACxB,WAAW;IACX,WAAW;IACX,UAAU,EAER,OAAO,eAAe;IACxB,OAAO,MAAM,OACX,MACA,MAAM,kBAAkB,KAAK,GAAG,EAAE,IAClC,KAAK,UACL,MAAM,UAAU,kBAAkB,CAAC;GACvC;GAEA,MAAM,sBAAsB;IAC1B;IACA,GAAG;IACH;IACA;IACA,KAAK;IACL;IACA;GACF;GAEA,MAAM,qBAAqB;IAIzB,UAAU;KACR;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,eAAe;MACf,KAAK;KACP;IACF;IACA,UAAU;IACV,UAAU,oBAAoB,OAAO,CACnC;KACE,OAAO;KACP,KAAK;KACL,UAAU;KACV,UAAU,oBAAoB,OAAO,CAAE,MAAO,CAAC;KAC/C,WAAW;IACb,CACF,CAAC;IACD,WAAW;GACb;GAEA,MAAM,uBAAuB;IAC3B,WAAW;IACX,OAAO,MAAM,mBAAmB,sBAAoD;IACpF,aAAa;IACb,KAAK;IACL,YAAY;IACZ,UAAU;IACV,SAAS;IACT,UAAU;KACR;MACE,OAAO;MACP,UAAU;MACV,WAAW;KACb;KACA;MACE,OAAO;MACP,aAAa;MACb,UAAU,CAAE,UAAW;MACvB,WAAW;KACb;KAGA;MACE,OAAO;MACP,WAAW;KACb;KAEA;MACE,OAAO;MACP,gBAAgB;MAChB,UAAU,CACR,SACA,OACF;KACF;KAGA;MACE,WAAW;MACX,OAAO;KACT;KACA;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,UAAU;MACV,WAAW;MACX,UAAU;OACR;OACA,KAAK;OACL;OACA;OACA;OAEA;QACE,OAAO;QACP,KAAK;QACL,UAAU;QACV,WAAW;QACX,UAAU;SACR;SACA;SACA,KAAK;SACL;SACA;SACA;QACF;OACF;MACF;KACF;KACA;KACA;KACA,KAAK;KACL,GAAG;IACL;GACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS;KACP;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;IACV,SAAS;IACT,kBAAkB,EAAE,qBAAqB,WAAW;IACpD,UAAU,CAAC,CAAC,CAAC,OACX,oBACA,sBACA,mBACA,qBACA;KACE,GAAG;KACH;MACE,OAAO;MACP,KAAK;MACL,UAAU;MACV,UAAU,CACR,QACA,mBACF;KACF;KACA;MACE,OAAO,KAAK,WAAW;MACvB,UAAU;KACZ;KACA;MACE,OAAO;OAEL;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;KACF;IACF,CAAC;GACL;EACF;;;;ECjnBA,SAAS,OAAO,MAAM;GACpB,MAAM,oBAAoB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,qBAAqB;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GA6GA,MAAM,WAAW;IACf,SAAS;KAtGT;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IA8CuB,CAAC,CAAC,OAAO;KA3ChC;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAIkD,CAAC;IACnD,UAAU;IACV,SAAS;KA9GT;KACA;KACA;KACA;IA2GwB;GAC1B;GACA,MAAM,aAAa,KAAK,QAAQ,KAAK,YAAY,EAAE,OAAO,qBAAqB,CAAC;GAOhF,MAAM,UAAU;IACd,WAAW;IACX,UAAU;KACR,EAAE,OAAO,gDAA2C;KACpD,EAAE,OAAO,kEAA6D;KACtE,EAAE,OAAO,gHAA2G;IACtH;IACA,WAAW;GACb;GACA,MAAM,aAAa;IACjB,WAAW;IACX,OAAO;IACP,WAAW;GACb;GACA,MAAM,kBAAkB;IACtB,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU,CAAE,EAAE,OAAO,OAAK,CAAE;GAC9B;GACA,MAAM,wBAAwB,KAAK,QAAQ,iBAAiB,EAAE,SAAS,KAAK,CAAC;GAC7E,MAAM,QAAQ;IACZ,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;GACZ;GACA,MAAM,cAAc,KAAK,QAAQ,OAAO,EAAE,SAAS,KAAK,CAAC;GACzD,MAAM,sBAAsB;IAC1B,WAAW;IACX,OAAO;IACP,KAAK;IACL,SAAS;IACT,UAAU;KACR,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAO;KAChB,KAAK;KACL;IACF;GACF;GACA,MAAM,+BAA+B;IACnC,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;KACR,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAK;KACd;IACF;GACF;GACA,MAAM,qCAAqC,KAAK,QAAQ,8BAA8B;IACpF,SAAS;IACT,UAAU;KACR,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAO;KAChB,EAAE,OAAO,OAAK;KACd;IACF;GACF,CAAC;GACD,MAAM,WAAW;IACf;IACA;IACA;IACA,KAAK;IACL,KAAK;IACL;IACA,KAAK;GACP;GACA,YAAY,WAAW;IACrB;IACA;IACA;IACA,KAAK;IACL,KAAK;IACL;IACA,KAAK,QAAQ,KAAK,sBAAsB,EAAE,SAAS,KAAK,CAAC;GAC3D;GACA,MAAM,SAAS,EAAE,UAAU;IACzB;IACA;IACA;IACA;IACA,KAAK;IACL,KAAK;GACP,EAAE;GAEF,MAAM,mBAAmB;IACvB,OAAO;IACP,KAAK;IACL,UAAU,CACR,EAAE,eAAe,SAAS,GAC1B,UACF;GACF;GACA,MAAM,gBAAgB,KAAK,WAAW,OAAO,KAAK,WAAW,eAAe,KAAK,WAAW;GAC5F,MAAM,gBAAgB;IAGpB,OAAO,MAAM,KAAK;IAClB,WAAW;GACb;GAEA,OAAO;IACL,MAAM;IACN,SAAS,CACP,MACA,IACF;IACA,UAAU;IACV,SAAS;IACT,UAAU;KACR,KAAK,QACH,OACA,KACA;MACE,aAAa;MACb,UAAU,CACR;OACE,WAAW;OACX,UAAU;QACR;SACE,OAAO;SACP,WAAW;QACb;QACA,EAAE,OAAO,WAAW;QACpB;SACE,OAAO;SACP,KAAK;QACP;OACF;MACF,CACF;KACF,CACF;KACA,KAAK;KACL,KAAK;KACL;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,UAAU,EAAE,SAAS,sFAAsF;KAC7G;KACA;KACA;KACA;MACE,eAAe;MACf,WAAW;MACX,KAAK;MACL,SAAS;MACT,UAAU;OACR,EAAE,eAAe,cAAc;OAC/B;OACA;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MACE,eAAe;MACf,WAAW;MACX,KAAK;MACL,SAAS;MACT,UAAU;OACR;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MACE,eAAe;MACf,WAAW;MACX,KAAK;MACL,SAAS;MACT,UAAU;OACR;OACA;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MAEE,WAAW;MACX,OAAO;MACP,cAAc;MACd,KAAK;MACL,YAAY;MACZ,UAAU,CACR;OACE,WAAW;OACX,OAAO;OACP,KAAK;MACP,CACF;KACF;KACA;MAGE,eAAe;MACf,WAAW;KACb;KACA;MACE,WAAW;MACX,OAAO,MAAM,gBAAgB,WAAW,KAAK,WAAW;MACxD,aAAa;MACb,KAAK;MACL,YAAY;MACZ,UAAU;MACV,UAAU;OAER;QACE,eAAe,mBAAmB,KAAK,GAAG;QAC1C,WAAW;OACb;OACA;QACE,OAAO,KAAK,WAAW;QACvB,aAAa;QACb,UAAU,CACR,KAAK,YACL,gBACF;QACA,WAAW;OACb;OACA,EAAE,OAAO,OAAO;OAChB;QACE,WAAW;QACX,OAAO;QACP,KAAK;QACL,cAAc;QACd,YAAY;QACZ,UAAU;QACV,WAAW;QACX,UAAU;SACR;SACA;SACA,KAAK;QACP;OACF;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;IACF;GACF;EACF;;;EC/ZA,MAAM,SAAS,SAAS;GACtB,OAAO;IACL,WAAW;KACT,OAAO;KACP,OAAO;IACT;IACA,eAAe,KAAK;IACpB,UAAU;KACR,OAAO;KACP,OAAO;IACT;IACA,eAAe;KACb,OAAO;KACP,OAAO;IACT;IACA,mBAAmB;KACjB,WAAW;KACX,OAAO;IACT;IACA,yBAAyB;KACvB,OAAO;KACP,OAAO;KACP,KAAK;KACL,SAAS;KACT,UAAU,CACR,KAAK,kBACL,KAAK,iBACP;IACF;IACA,iBAAiB;KACf,OAAO;KACP,OAAO,KAAK,YAAY;KASxB,WAAW;IACb;IACA,cAAc;KACZ,WAAW;KACX,OAAO;IACT;GACF;EACF;EAEA,MAAM,YAAY;GAChB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,WAAW;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,OAAO,CACX,GAAG,WACH,GAAG,QACL;EAKA,MAAM,iBAAiB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;EAGjB,MAAM,iBAAiB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;EAGjB,MAAM,kBAAkB;GACtB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;EAEjB,MAAM,aAAa;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;;EAUjB,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,MAAM,IAAI;GACxB,MAAM,gBAAgB,EAAE,OAAO,+BAA+B;GAC9D,MAAM,eAAe;GACrB,MAAM,iBAAiB;GAEvB,MAAM,UAAU,CACd,KAAK,kBACL,KAAK,iBACP;GAEA,OAAO;IACL,MAAM;IACN,kBAAkB;IAClB,SAAS;IACT,UAAU,EAAE,kBAAkB,UAAU;IACxC,kBAAkB,EAGhB,kBAAkB,eAAe;IACnC,UAAU;KACR,MAAM;KACN;KAGA,MAAM;KACN;MACE,WAAW;MACX,OAAO;MACP,WAAW;KACb;KACA;MACE,WAAW;MACX,OAAO;MACP,WAAW;KACb;KACA,MAAM;KACN;MACE,WAAW;MACX,UAAU,CACR,EAAE,OAAO,OAAO,eAAe,KAAK,GAAG,IAAI,IAAI,GAC/C,EAAE,OAAO,WAAW,gBAAgB,KAAK,GAAG,IAAI,IAAI,CACtD;KACF;KAOA,MAAM;KACN;MACE,WAAW;MACX,OAAO,SAAS,WAAW,KAAK,GAAG,IAAI;KACzC;KAEA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,MAAM;OACN,MAAM;OACN,MAAM;OACN,MAAM;OACN,MAAM;OACN,GAAG;OAIH;QACE,OAAO;QACP,KAAK;QACL,WAAW;QACX,UAAU,EAAE,UAAU,eAAe;QACrC,UAAU,CACR,GAAG,SACH;SACE,WAAW;SAGX,OAAO;SACP,gBAAgB;SAChB,YAAY;QACd,CACF;OACF;OACA,MAAM;MACR;KACF;KACA;MACE,OAAO,MAAM,UAAU,GAAG;MAC1B,KAAK;MACL,WAAW;MACX,SAAS;MACT,UAAU,CACR;OACE,WAAW;OACX,OAAO;MACT,GACA;OACE,OAAO;OACP,gBAAgB;OAChB,YAAY;OACZ,WAAW;OACX,UAAU;QACR,UAAU;QACV,SAAS;QACT,WAAW,eAAe,KAAK,GAAG;OACpC;OACA,UAAU;QACR;SACE,OAAO;SACP,WAAW;QACb;QACA,GAAG;QACH,MAAM;OACR;MACF,CACF;KACF;KACA;MACE,WAAW;MACX,OAAO,SAAS,KAAK,KAAK,GAAG,IAAI;KACnC;IACF;GACF;EACF;;;ECp7BA,SAAS,GAAG,MAAM;GAyEhB,MAAM,WAAW;IACf,SAAS;KA3BT;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAGW;IACX,MAAM;KAlDN;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IA+BU;IACV,SAAS;KA1ET;KACA;KACA;KACA;IAuEgB;IAChB,UAAU;KArEV;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAuDkB;GACpB;GACA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,QAAS;IACpB,UAAU;IACV,SAAS;IACT,UAAU;KACR,KAAK;KACL,KAAK;KACL;MACE,WAAW;MACX,UAAU;OACR,KAAK;OACL,KAAK;OACL;QACE,OAAO;QACP,KAAK;OACP;MACF;KACF;KACA;MACE,WAAW;MACX,UAAU;OACR;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;OACA;QACE,OAAO;QACP,WAAW;OACb;MACF;KACF;KACA,EAAE,OAAO,KACT;KACA;MACE,WAAW;MACX,eAAe;MACf,KAAK;MACL,YAAY;MACZ,UAAU,CACR,KAAK,YACL;OACE,WAAW;OACX,OAAO;OACP,KAAK;OACL,YAAY;OACZ,UAAU;OACV,SAAS;MACX,CACF;KACF;IACF;GACF;EACF;;;ECrJA,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GACnB,MAAM,UAAU;IACd,WAAW;IACX,WAAW;IACX,UAAU,CACR,EAAE,OAAO,uBAAuB,GAChC,EAAE,OAAO,KAAK,UAAU,CAC1B;GACF;GACA,MAAM,WAAW,KAAK,QAAQ;GAC9B,SAAS,WAAW,CAClB;IACE,OAAO;IACP,KAAK;GACP,GACA;IACE,OAAO;IACP,KAAK;GACP,CACF;GACA,MAAM,YAAY;IAChB,WAAW;IACX,UAAU,CACR,EAAE,OAAO,oBAAoB,GAC7B,EAAE,OAAO,cAAc,CACzB;GACF;GACA,MAAM,WAAW;IACf,WAAW;IACX,OAAO;GACT;GACA,MAAM,UAAU;IACd,WAAW;IACX,UAAU,CAAE,KAAK,gBAAiB;IAClC,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;IACF;GACF;GACA,MAAM,QAAQ;IACZ,OAAO;IACP,KAAK;IACL,UAAU;KACR;KACA;KACA;KACA;KACA;KACA;IACF;IACA,WAAW;GACb;GAKA,MAAM,UAAU,MAAM,OACpB,kBAAU,iBAAyB,SACrC;GAMA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,MAAO;IAClB,kBAAkB;IAClB,SAAS;IACT,UAAU;KACR;KACA;MACE,WAAW;MACX,OAAO;MACP,KAAK;KACP;KACA;MACE,OAlBa,MAAM,OACvB,SAAS,gBAAgB,SAAS,MAClC,MAAM,UAAU,eAAe,CAgBX;MAChB,WAAW;MACX,QAAQ;OACN,KAAK;OACL,UAAU;QACR;QACA;QACA;QACA;QACA;QACA;OACF;MACF;KACF;IACF;GACF;EACF;;;ECrHA,IAAI,gBAAgB;EACpB,IAAI,OAAO,OAAO,cAAc;EAChC,IAAI,YAAY;EAChB,IAAI,UAAU;GACZ,WAAW;GACX,UAAU;IAGR,EAAE,OAAO,QAAQ,cAAc,KAAK,KAAK,WAAW,KAAK,cAC1C,cAAc,aAAa;IAE1C,EAAE,OAAO,OAAO,cAAc,KAAK,KAAK,8BAA8B;IACtE,EAAE,OAAO,IAAI,KAAK,aAAa;IAC/B,EAAE,OAAO,OAAO,cAAc,YAAY;IAG1C,EAAE,OAAO,aAAa,UAAU,SAAS,UAAU,QAAQ,UAAU,cACtD,cAAc,aAAa;IAG1C,EAAE,OAAO,iCAAiC;IAG1C,EAAE,OAAO,YAAY,UAAU,WAAW;IAG1C,EAAE,OAAO,yBAAyB;IAGlC,EAAE,OAAO,gCAAgC;GAC3C;GACA,WAAW;EACb;;;;;;;;;;;;EAqBA,SAAS,WAAW,IAAI,cAAc,OAAO;GAC3C,IAAI,UAAU,IAAI,OAAO;GAEzB,OAAO,GAAG,QAAQ,eAAc,MAAK;IACnC,OAAO,WAAW,IAAI,cAAc,QAAQ,CAAC;GAC/C,CAAC;EACH;;EAGA,SAAS,KAAK,MAAM;GAClB,MAAM,QAAQ,KAAK;GAGnB,MAAM,gBAAgB;GAGtB,MAAM,6BAA6B;GAanC,MAAM,wBAAwB,WAAW,qVACA,UAAU,CAAC;GAuEpD,MAAM,WAAW;IACf,SAAS;KArET;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IA0BqB;IACrB,SAAS;KAlBT;KACA;KACA;IAgBgB;IAChB,MAAM;KAbN;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAMU;IACV,UAAU,CAzBV,SACA,MAwBkB;GACpB;GAEA,MAAM,aAAa;IACjB,WAAW;IACX,OAAO;IACP,UAAU,CACR;KACE,OAAO;KACP,KAAK;KACL,UAAU,CAAE,MAAO;IACrB,CACF;GACF;GACA,MAAM,SAAS;IACb,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;IACV,WAAW;IACX,UAAU,CAAE,KAAK,oBAAqB;IACtC,YAAY;GACd;GAEA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,KAAM;IACjB,UAAU;IACV,SAAS;IACT,UAAU;KACR,KAAK,QACH,WACA,QACA;MACE,WAAW;MACX,UAAU,CACR;OAEE,OAAO;OACP,WAAW;MACb,GACA;OACE,WAAW;OACX,OAAO;MACT,CACF;KACF,CACF;KAEA;MACE,OAAO;MACP,UAAU;MACV,WAAW;KACb;KACA,KAAK;KACL,KAAK;KACL;MACE,OAAO;MACP,KAAK;MACL,WAAW;MACX,UAAU,CAAE,KAAK,gBAAiB;KACpC;KACA,KAAK;KACL,KAAK;KACL;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;KACF;KACA;MAEE,OAAO;MACP,OAAO;KACT;KACA;MAGE,eAAe;MACf,WAAW;KACb;KACA;MACE,OAAO;OACL;OACA,MAAM,OAAO,uBAAuB,4BAA4B,KAAK;OACrE;OACA;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;MACA,UAAU;OACR;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;MACE,OAAO;OACL;OACA,MAAM,OAAO,uBAAuB,4BAA4B,KAAK;OACrE;OACA;MACF;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;MACA,UAAU;MACV,UAAU;OACR;QACE,WAAW;QACX,OAAO;QACP,KAAK;QACL,UAAU;QACV,WAAW;QACX,UAAU;SACR;SACA,KAAK;SACL,KAAK;SACL;SACA,KAAK;QACP;OACF;OACA,KAAK;OACL,KAAK;MACP;KACF;KACA;KACA;IACF;GACF;EACF;;;ECvTA,MAAMC,aAAW;EAEjB,MAAMC,aAAW;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAIA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;EACF;EACA,MAAMC,aAAW;GACf;GACA;GACA;GACA;GACA;GACA;EACF;EAGA,MAAMC,UAAQ;GAEZ;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GAEA;EACF;EAEA,MAAMC,gBAAc;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAMC,qBAAmB;GACvB;GACA;GACA;GACA;GAEA;GA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B,EAAE,OAAO,wCAAwC;GACzE,MAAM,OAAO;IACX,WAAW;IACX,UAAU;KAER,EAAE,OAAO,gCAAgC;KACzC,EAAE,OAAO,gCAAgC;KAEzC;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA,EAAE,OAAO,QAAQ;KACjB;MACE,OAAO;MAGP,UAAU,CACR;OACE,OAAO;OACP,KAAK;MACP,CACF;MACA,WAAW;KACb;IACF;GACF;GACA,MAAM,OAAO;IACX,WAAW;IACX,OAAO;IACP,KAAK;IACL,YAAY;GACd;GACA,MAAM,iBAAiB;IACrB,OAAO;IACP,aAAa;IACb,UAAU,CACR;KACE,WAAW;KACX,OAAO;KACP,KAAK;KACL,cAAc;KACd,YAAY;IACd,GACA;KACE,WAAW;KACX,OAAO;KACP,KAAK;KACL,cAAc;IAChB,CACF;GACF;GAEA,MAAM,OAAO;IACX,UAAU;KAGR;MACE,OAAO;MACP,WAAW;KACb;KAEA;MACE,OAAO;MACP,WAAW;KACb;KACA;MACE,OAAO,MAAM,OAAO,aAAa,2BAAY,YAAY;MACzD,WAAW;KACb;KAEA;MACE,OAAO;MACP,WAAW;KACb;KAEA;MACE,OAAO;MACP,WAAW;KACb;IACF;IACA,aAAa;IACb,UAAU;KACR,EAEE,OAAO,WAAW;KACpB;MACE,WAAW;MACX,WAAW;MACX,OAAO;MACP,KAAK;MACL,cAAc;MACd,WAAW;KACb;KACA;MACE,WAAW;MACX,WAAW;MACX,OAAO;MACP,KAAK;MACL,cAAc;MACd,YAAY;KACd;KACA;MACE,WAAW;MACX,WAAW;MACX,OAAO;MACP,KAAK;MACL,cAAc;MACd,YAAY;KACd;IACF;GACF;GACA,MAAM,OAAO;IACX,WAAW;IACX,UAAU,CAAC;IACX,UAAU,CACR;KACE,OAAO;KACP,KAAK;IACP,GACA;KACE,OAAO;KACP,KAAK;IACP,CACF;GACF;GACA,MAAM,SAAS;IACb,WAAW;IACX,UAAU,CAAC;IACX,UAAU,CACR;KACE,OAAO;KACP,KAAK;IACP,GACA;KACE,OAAO;KACP,KAAK;KACL,WAAW;IACb,CACF;GACF;GAKA,MAAM,sBAAsB,KAAK,QAAQ,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;GAC/D,MAAM,sBAAsB,KAAK,QAAQ,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;GACjE,KAAK,SAAS,KAAK,mBAAmB;GACtC,OAAO,SAAS,KAAK,mBAAmB;GAExC,IAAI,cAAc,CAChB,aACA,IACF;GAEA;IACE;IACA;IACA;IACA;GACF,CAAC,CAAC,SAAQ,MAAK;IACb,EAAE,WAAW,EAAE,SAAS,OAAO,WAAW;GAC5C,CAAC;GAED,cAAc,YAAY,OAAO,MAAM,MAAM;GAqC7C,OAAO;IACL,MAAM;IACN,SAAS;KACP;KACA;KACA;IACF;IACA,UAAU;KACR;MA1CF,WAAW;MACX,UAAU,CACR;OACE,OAAO;OACP,KAAK;OACL,UAAU;MACZ,GACA;OACE,OAAO;OACP,UAAU,CACR,EAAE,OAAO,UAAU,GACnB;QACE,OAAO;QACP,KAAK;QACL,UAAU;OACZ,CACF;MACF,CACF;KAwBO;KACL;KACA;KAGA;KACA;KACA;KACA;MA5BF,WAAW;MACX,OAAO;MACP,UAAU;MACV,KAAK;KAyBM;KACT;KACA;KACA;KACA;MAxBF,OAAO;MACP,OAAO;KAuBA;IACP;GACF;EACF;;;EChPA,SAAS,OAAO,MAAM;GACpB,MAAM,QAAQ,KAAK;GACnB,MAAM,WAAW;GACjB,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GA0GA,MAAM,WAAW;IACf,UAAU;IACV,SAAS;IACT,UAAU;KA1GV;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAkCkB;IAClB,SAAS;KA/BT;KACA;KACA;KACA;KACA;KACA;IA0BgB;IAChB,MAAM;KApBN;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAQU;GACZ;GAEA,MAAM,SAAS;IACb,WAAW;IACX,OAAO;GACT;GAEA,MAAM,QAAQ;IACZ,WAAW;IACX,OAAO;IACP,KAAK;IACL,UAAU;IACV,SAAS;GACX;GAEA,MAAM,kBAAkB;IACtB,OAAO;IACP,WAAW;GACb;GAEA,MAAM,SAAS;IACb,WAAW;IACX,UAAU,CAAE,KAAK,gBAAiB;IAClC,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,UAAU,CACR,KAAK,kBACL,MACF;MACA,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU,CACR,KAAK,kBACL,MACF;MACA,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;OACA;MACF;KACF;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;OACA;MACF;KACF;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;KACP;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;MACF;KACF;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU;OACR,KAAK;OACL;OACA;MACF;KACF;KACA,KAAK;KACL,KAAK;IACP;GACF;GAGA,MAAM,YAAY;GAClB,MAAM,aAAa,QAAQ,UAAU,SAAS,UAAU,QAAQ,UAAU;GAM1E,MAAM,YAAY,OAAO,eAAe,KAAK,GAAG;GAChD,MAAM,SAAS;IACb,WAAW;IACX,WAAW;IACX,UAAU;KAWR,EACE,OAAO,QAAQ,UAAU,KAAK,WAAW,cAAc,UAAU,WAAW,UAAU,GACxF;KACA,EACE,OAAO,IAAI,WAAW,QACxB;KAQA,EACE,OAAO,0CAA0C,UAAU,GAC7D;KACA,EACE,OAAO,4BAA4B,UAAU,GAC/C;KACA,EACE,OAAO,6BAA6B,UAAU,GAChD;KACA,EACE,OAAO,mCAAmC,UAAU,GACtD;KAIA,EACE,OAAO,OAAO,UAAU,UAAU,UAAU,GAC9C;IACF;GACF;GACA,MAAM,eAAe;IACnB,WAAW;IACX,OAAO,MAAM,UAAU,SAAS;IAChC,KAAK;IACL,UAAU;IACV,UAAU,CACR,EACE,OAAO,UACT,GAEA;KACE,OAAO;KACP,KAAK;KACL,gBAAgB;IAClB,CACF;GACF;GACA,MAAM,SAAS;IACb,WAAW;IACX,UAAU,CAER;KACE,WAAW;KACX,OAAO;KACP,MAAM;IACR,GACA;KACE,OAAO;KACP,KAAK;KACL,cAAc;KACd,YAAY;KACZ,UAAU;KACV,UAAU;MACR;MACA;MACA;MACA;MACA,KAAK;KACP;IACF,CACF;GACF;GACA,MAAM,WAAW;IACf;IACA;IACA;GACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS;KACP;KACA;KACA;IACF;IACA,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;KACR;KACA;KACA;MAEE,OAAO;MACP,OAAO;KACT;KACA;MAGE,eAAe;MACf,WAAW;KACb;KACA;MAAE,OAAO;MAAU,OAAO;KAAU;KACpC;KACA;KACA,KAAK;KACL;MACE,OAAO;OACL;OAAS;OACT;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;MACA,UAAU,CAAE,MAAO;KACrB;KACA;MACE,UAAU,CACR,EACE,OAAO;OACL;OAAW;OACX;OAAU;OACV;OAAS;OAAS;MACpB,EACF,GACA,EACE,OAAO;OACL;OAAW;OACX;MACF,EACF,CACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,UAAU;OACR;OACA;OACA;MACF;KACF;IACF;GACF;EACF;;;;EC5aA,SAAS,KAAK,MAAM;GAClB,MAAM,QAAQ,KAAK;GAGnB,MAAM,iBAAiB;GACvB,MAAM,sBAAsB,MAAM,OAAO,gBAAgB,KAAK,mBAAmB;GACjF,MAAM,WAAW,MAAM,OAAO,gBAAgB,KAAK,QAAQ;GAE3D,MAAM,kBAAkB;IACtB,OAAO;IACP,WAAW;IACX,OAAO,MAAM,OACX,MACA,yCACA,UACA,MAAM,UAAU,OAAO,CAAC;GAC5B;GAEA,MAAM,WAAW;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,WAAW;IACf;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,WAAW;IAEf;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,MAAM,QAAQ;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL,MAAM;IACN,SAAS,CAAE,IAAK;IAChB,UAAU;KACR,UAAU,KAAK,WAAW;KAC1B,MAAM;KACN,SAAS;KACT,SAAS;KACT,UAAU;IACZ;IACA,SAAS;IACT,UAAU;KACR,KAAK;KACL,KAAK,QAAQ,QAAQ,QAAQ,EAAE,UAAU,CAAE,MAAO,EAAE,CAAC;KACrD,KAAK,QAAQ,KAAK,mBAAmB;MACnC,OAAO;MACP,SAAS;KACX,CAAC;KACD;MACE,OAAO;MAEP,OAAO;KACT;KACA;MACE,OAAO;MACP,UAAU,CACR,EAAE,OAAO,2BAA2B,GACpC;OACE,OAAO;OACP,KAAK;OACL,UAAU,CACR;QACE,OAAO;QACP,OAAO;OACT,CACF;MACF,CACF;KACF;KACA;MACE,OAAO;MACP,UAAU;OACR,EAAE,OAAO,4DAAgC;OACzC,EAAE,OAAO,6DAAiC;OAC1C,EAAE,OAAO,mEAAuC;OAChD,EAAE,OAAO,8FACgB;MAC3B;MACA,WAAW;KACb;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;MACP,OAAO;MACP,KAAK;MACL,UAAU,CACR;OACE,OAAO;OACP,OAAO;OACP,KAAK;OACL,UAAU,CACR,KAAK,gBACP;MACF,CACF;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KAEA;MACE,OAAO;OACL;OACA;OACA;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO;OACL;OACA;OACA;MACF;MACA,OAAO;OACL,GAAG;OACH,GAAG;MACL;KACF;KACA;MACE,OAAO,KAAK,WAAW;MACvB,UAAU;OACR,SAAS;OACT,UAAU;OACV,MAAM;MACR;KACF;KACA;MACE,OAAO;MACP,OAAO;KACT;KACA;IACF;GACF;EACF;;;EC3TA,SAAS,IAAI,MAAM;GACjB,MAAM,QAAQ,KAAK;GACnB,MAAM,eAAe,KAAK,QAAQ,MAAM,GAAG;GAC3C,MAAM,SAAS;IACb,OAAO;IACP,UAAU,CACR;KACE,OAAO;KACP,KAAK;KACL,UAAU,CAAE,EAAE,OAAO,KAAK,CAAE;IAC9B,CACF;GACF;GACA,MAAM,oBAAoB;IACxB,OAAO;IACP,KAAK;IACL,UAAU,CAAE,EAAE,OAAO,KAAK,CAAE;GAC9B;GAEA,MAAM,WAAW;IACf;IACA;IAGA;GACF;GAEA,MAAM,mBAAmB;IACvB;IACA;IACA;IACA;GACF;GAEA,MAAM,QAAQ;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,qBAAqB;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAGA,MAAM,iBAAiB;IACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAKA,MAAM,qBAAqB;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAGA,MAAM,0BAA0B;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAIA,MAAM,SAAS;IACb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,YAAY;GAElB,MAAM,WAAW,CACf,GAAG,gBACH,GAAG,kBACL,CAAC,CAAC,QAAQ,YAAY;IACpB,OAAO,CAAC,mBAAmB,SAAS,OAAO;GAC7C,CAAC;GAED,MAAM,WAAW;IACf,OAAO;IACP,OAAO;GACT;GAEA,MAAM,WAAW;IACf,OAAO;IACP,OAAO;IACP,WAAW;GACb;GAEA,MAAM,gBAAgB;IACpB,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO;IAC7D,WAAW;IACX,UAAU,EAAE,UAAU,UAAU;GAClC;GAMA,SAAS,aAAa,MAAM;IAC1B,OAAO,MAAM,OACX,MACA,MAAM,OAAO,GAAG,KAAK,KAAK,OAAO;KAC/B,OAAO,GAAG,QAAQ,OAAO,MAAM;IACjC,CAAC,CAAC,GACF,IACF;GACF;GAEA,MAAM,sBAAsB;IAC1B,OAAO;IACP,OAAO,aAAa,MAAM;IAC1B,WAAW;GACb;GAGA,SAAS,gBAAgB,MAAM,EAC7B,YAAY,SACV,CAAC,GAAG;IACN,MAAM,YAAY;IAClB,aAAa,cAAc,CAAC;IAC5B,OAAO,KAAK,KAAK,SAAS;KACxB,IAAI,KAAK,MAAM,QAAQ,KAAK,WAAW,SAAS,IAAI,GAClD,OAAO;UACF,IAAI,UAAU,IAAI,GACvB,OAAO,GAAG,KAAK;UAEf,OAAO;IAEX,CAAC;GACH;GAEA,OAAO;IACL,MAAM;IACN,kBAAkB;IAElB,SAAS;IACT,UAAU;KACR,UAAU;KACV,SACE,gBAAgB,UAAU,EAAE,OAAO,MAAM,EAAE,SAAS,EAAE,CAAC;KACzD,SAAS;KACT,MAAM;KACN,UAAU;IACZ;IACA,UAAU;KACR;MACE,OAAO;MACP,OAAO,aAAa,gBAAgB;KACtC;KACA;KACA;KACA;KACA;KACA;KACA,KAAK;KACL,KAAK;KACL;KACA;IACF;GACF;EACF;;;EClrBA,MAAM,WAAW;EAEjB,MAAM,WAAW;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAIA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;EACF;EACA,MAAM,WAAW;GACf;GACA;GACA;GACA;GACA;GACA;EACF;EAGA,MAAM,QAAQ;GAEZ;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GACA;GAEA;GAEA;EACF;EAEA,MAAM,cAAc;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,mBAAmB;GACvB;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GA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gB;IACpB,gBAAgB;IAChB,SAAS;IACT,WAAW;IACX,UAAU,CACR;KACE,WAAW;KACX,OAAO;KACP,WAAW;IACb,GACA;KACE,OAAO;KACP,WAAW;KACX,UAAU,CACR;MACE,WAAW;MACX,YAAY;MACZ,UAAU;OACR;QACE,OAAO;QACP,KAAK;QACL,UAAU,CAAE,YAAa;OAC3B;OACA;QACE,OAAO;QACP,KAAK;QACL,UAAU,CAAE,YAAa;OAC3B;OACA,EAAE,OAAO,eAAe;MAC1B;KACF,CACF;IACF,CACF;GACF;GACA,OAAO;IACL,MAAM;IACN,SAAS;KACP;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,kBAAkB;IAClB,cAAc;IACd,UAAU;KACR;MACE,WAAW;MACX,OAAO;MACP,KAAK;MACL,WAAW;MACX,UAAU;OACR;OACA;OACA;OACA;OACA;QACE,OAAO;QACP,KAAK;QACL,UAAU,CACR;SACE,WAAW;SACX,OAAO;SACP,KAAK;SACL,UAAU;UACR;UACA;UACA;UACA;SACF;QACF,CACF;OACF;MACF;KACF;KACA,KAAK,QACH,QACA,OACA,EAAE,WAAW,GAAG,CAClB;KACA;MACE,OAAO;MACP,KAAK;MACL,WAAW;KACb;KACA;KAEA;MACE,WAAW;MACX,KAAK;MACL,UAAU,CACR;OACE,OAAO;OACP,WAAW;OACX,UAAU,CACR,sBACF;MACF,GACA,EACE,OAAO,oBACT,CACF;KAEF;KACA;MACE,WAAW;MAMX,OAAO;MACP,KAAK;MACL,UAAU,EAAE,MAAM,QAAQ;MAC1B,UAAU,CAAE,aAAc;MAC1B,QAAQ;OACN,KAAK;OACL,WAAW;OACX,aAAa;MACf;KACF;KACA;MACE,WAAW;MAEX,OAAO;MACP,KAAK;MACL,UAAU,EAAE,MAAM,SAAS;MAC3B,UAAU,CAAE,aAAc;MAC1B,QAAQ;OACN,KAAK;OACL,WAAW;OACX,aAAa;MACf;KACF;KAEA;MACE,WAAW;MACX,OAAO;KACT;KAEA;MACE,WAAW;MACX,OAAO,MAAM,OACX,KACA,MAAM,UAAU,MAAM,OACpB,aAIA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"}
|