{"version":3,"file":"ngx-stackedit.mjs","sources":["../../../src/app/editor/components/toolbar/mermaid-layouts.ts","../../../src/app/editor/components/toolbar/image-insert/image-insert.component.ts","../../../src/app/editor/components/toolbar/image-insert/image-insert.component.html","../../../src/app/editor/components/toolbar/link-insert/link-insert.component.ts","../../../src/app/editor/components/toolbar/link-insert/link-insert.component.html","../../../src/app/editor/editor-actions.ts","../../../src/app/editor/components/toolbar/toolbar.component.ts","../../../src/app/editor/components/toolbar/toolbar.component.html","../../../src/app/editor/prism/custom-markdown.ts","../../../src/app/editor/prism/index.ts","../../../src/app/editor/markdownConversionSvc.ts","../../../src/app/editor/editor/sectionUtils.ts","../../../src/app/editor/editor/utils.ts","../../../src/app/editor/editor/undo-manager.ts","../../../src/app/editor/editor/watcher.ts","../../../src/app/editor/editor/highlighter.ts","../../../src/app/editor/editor/selection-manager.ts","../../../src/app/editor/editor/keystroke.ts","../../../src/app/editor/editor/vanilla-mirror.ts","../../../src/app/editor/extensions/libs/markdownItTasklist.ts","../../../src/app/editor/extensions/libs/markdownItAnchor.ts","../../../src/app/editor/extensions/markdownExtension.ts","../../../src/app/editor/monaco/mermaid-tokenizer.ts","../../../src/app/editor/monaco/regex-tokenizer.ts","../../../src/app/editor/monaco/log-tokenizer.ts","../../../src/app/editor/monaco/index.ts","../../../src/app/editor/extensions/mermaidExtension.ts","../../../src/app/editor/editor.ts","../../../src/app/editor/key-commands.ts","../../../src/app/editor/editor.component.ts","../../../src/app/editor/editor.component.html","../../../src/app/editor/ngx-stackedit.ts"],"sourcesContent":["export default [{\n            label: \"Flow Chart\", value: `\\n\\`\\`\\`mermaid\nflowchart LR\n    markdown[This ** is ** _Markdown_]\n    newLines[\"Line1\n    Line 2\n    Line 3\"]\n    markdown --> newLines\n\\`\\`\\``\n            },\n            {\n            label: \"Sequence Diagram\", value: `\\n\\`\\`\\`mermaid\nsequenceDiagram\n    Alice ->> Bob: Hello Bob, how are you?\n    Bob-->>John: How about you John?\n    Bob--x Alice: I am good thanks!\n    Bob-x John: I am good thanks!\n    Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row.\n\n    Bob-->Alice: Checking with John...\n    Alice->John: Yes... John, how are you?\n\\`\\`\\``\n            },\n            {\n            label: \"Class Diagram\", value: `\\n\\`\\`\\`mermaid\nclassDiagram\n    note \"From Duck till Zebra\"\n    Animal <|-- Duck\n    note for Duck \"can fly\\ncan swim\\ncan dive\\ncan help in debugging\"\n    Animal <|-- Fish\n    Animal <|-- Zebra\n    Animal : +int age\n    Animal : +String gender\n    Animal: +isMammal()\n    Animal: +mate()\n    class Duck{\n        +String beakColor\n        +swim()\n        +quack()\n    }\n    class Fish{\n        -int sizeInFeet\n        -canEat()\n    }\n    class Zebra{\n        +bool is_wild\n        +run()\n    }\n\\`\\`\\``\n            },\n            {\n            label: \"State Diagram\", value: `\\n\\`\\`\\`mermaid\nstateDiagram-v2\n    [*] --> Still\n    Still --> [*]\n\n    Still --> Moving\n    Moving --> Still\n    Moving --> Crash\n    Crash --> [*]\n\\`\\`\\``\n            },\n            {\n            label: \"Entity Relationship Diagram\", value: `\\n\\`\\`\\`mermaid\n---\ntitle: Order example\n---\nerDiagram\n    CUSTOMER ||--o{ ORDER : places\n    ORDER ||--|{ LINE-ITEM : contains\n    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses\n\\`\\`\\``\n                    },\n                    {\n            label: \"User Journey Diagram\", value: `\\n\\`\\`\\`mermaid\njourney\n    title My working day\n    section Go to work\n      Make tea: 5: Me\n      Go upstairs: 3: Me\n      Do work: 1: Me, Cat\n    section Go home\n      Go downstairs: 5: Me\n      Sit down: 5: Me\n\\`\\`\\``\n                    },\n                    {\n            label: \"Gantt Chart\", value: `\\n\\`\\`\\`mermaid\ngantt\n    title A Gantt Diagram\n    dateFormat YYYY-MM-DD\n    section Section\n        A task          :a1, 2014-01-01, 30d\n        Another task    :after a1, 20d\n    section Another\n        Task in Another :2014-01-12, 12d\n        another task    :24d\n\\`\\`\\``\n                    },\n                    {\n            label: \"Pie Chart\", value: `\\n\\`\\`\\`mermaid\npie title Pets adopted by volunteers\n    \"Dogs\": 386\n    \"Cats\": 85\n    \"Rats\": 15\n\\`\\`\\``\n                    },\n                    {\n            label: \"Requirement Diagram\", value: `\\n\\`\\`\\`mermaid\nrequirementDiagram\n\n    requirement test_req {\n        id: 1\n        text: the test text.\n        risk: high\n        verifymethod: test\n    }\n\n    element test_entity {\n        type: simulation\n    }\n\n    test_entity - satisfies -> test_req\n\\`\\`\\``\n                    },\n                    {\n            label: \"Mindmap\", value: `\\n\\`\\`\\`mermaid\nmindmap\n  root((mindmap))\n    Origins\n      Long history\n      ::icon(fa fa-book)\n      Popularisation\n        British popular psychology author Tony Buzan\n    Research\n      On effectiveness<br/>and features\n      On Automatic creation\n        Uses\n            Creative techniques\n            Strategic planning\n            Argument mapping\n    Tools\n      Pen and paper\n      Mermaid\n\\`\\`\\``\n                    },\n                    {\n            label: \"Timeline\", value: `\\n\\`\\`\\`mermaid\ntimeline\n    title History of Social Media Platform\n    2002 : LinkedIn\n    2004 : Facebook\n         : Google\n    2005 : Youtube\n    2006 : Twitter\n\\`\\`\\``\n}];\n","\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { StackEditorComponent } from '../../../editor.component';\n\n@Component({\n    selector: 'app-image-insert',\n    templateUrl: './image-insert.component.html',\n    styleUrls: ['./image-insert.component.scss'],\n    imports: [\n        MatIconModule,\n        MatTooltipModule,\n        MatInputModule,\n        MatButtonModule,\n        MatProgressSpinnerModule,\n        FormsModule\n    ],\n    standalone: true\n})\nexport class ImageInsertComponent implements OnInit {\n\n    isSaving = false;\n\n    imageUrl = '';\n    imagePlaceholder = '';\n\n    private stackEditor: StackEditorComponent;\n\n    constructor(\n        public readonly dialogRef: MatDialogRef<any>,\n        @Inject(MAT_DIALOG_DATA) public readonly data\n    ) {\n        this.stackEditor = data.stackEditor;\n        const editor = this.stackEditor.editorSvc.clEditor;\n        this.imagePlaceholder = editor.getContent().slice(editor.selectionMgr.selectionStart, editor.selectionMgr.selectionEnd);\n    }\n\n    ngOnInit() {\n\n    }\n\n    onFileUpload(files: FileList) {\n        this.stackEditor.onImageUpload.next({\n            data: files,\n            ...this.stackEditor.editorSvc.clEditor.selectionMgr,\n            stackEditor: this.stackEditor\n        });\n        this.dialogRef.close();\n    }\n\n    async applyChanges() {\n        this.stackEditor.editorSvc.clEditor.replaceSelection(`![${this.imagePlaceholder}](${this.imageUrl})`);\n        this.dialogRef.close();\n    }\n}\n","\n<div>\n    <mat-form-field>\n        <mat-label>Image URL</mat-label>\n        <input matInput type=\"text\" [(ngModel)]=\"imageUrl\">\n\n        <input #file type=\"file\" style=\"display: none;\">\n\n        @if (data.stackEditor.allowImageUpload) {\n            <button\n                mat-flat-button\n\n                (click)=\"file.click(); onFileUpload(file.files)\"\n                style=\"float: right\"\n            >\n                <mat-icon>upload_file</mat-icon>\n                Or upload an Image\n            </button>\n        }\n    </mat-form-field>\n</div>\n\n<mat-form-field>\n    <mat-label matTooltip=\"Text shown if the image fails to load\">Placeholder Text</mat-label>\n    <input matInput type=\"text\" [(ngModel)]=\"imagePlaceholder\">\n</mat-form-field>\n\n<div style=\"flex: 1\"></div>\n\n<div style=\"display: flex; justify-content: end;\">\n    <button mat-flat-button (click)=\"applyChanges()\">\n\n        @if (isSaving) {\n            <mat-progress-spinner\n                mode=\"indeterminate\"\n                [diameter]=\"18\"\n                style=\"display: inline\"\n            />\n        }\n        @else {\n            <mat-icon>check</mat-icon>\n        }\n\n        Ok\n    </button>\n    <button\n        mat-flat-button\n        (click)=\"dialogRef.close()\"\n    >\n        <mat-icon>close</mat-icon>\n        Cancel\n    </button>\n</div>\n","\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { StackEditorComponent } from '../../../editor.component';\n\n@Component({\n    selector: 'app-link-insert',\n    templateUrl: './link-insert.component.html',\n    styleUrls: ['./link-insert.component.scss'],\n    imports: [\n        MatIconModule,\n        MatTooltipModule,\n        MatInputModule,\n        MatButtonModule,\n        MatProgressSpinnerModule,\n        FormsModule\n    ],\n    standalone: true\n})\nexport class LinkInsertComponent implements OnInit {\n\n    isSaving = false;\n\n    linkUrl = '';\n    linkText = '';\n\n    private stackEditor: StackEditorComponent;\n\n    constructor(\n        public readonly dialogRef: MatDialogRef<any>,\n        @Inject(MAT_DIALOG_DATA) public readonly data\n    ) {\n        this.stackEditor = data.stackEditor;\n        const editor = this.stackEditor.editorSvc.clEditor;\n        this.linkText = editor.getContent().slice(editor.selectionMgr.selectionStart, editor.selectionMgr.selectionEnd)\n    }\n\n    ngOnInit() {\n\n    }\n\n    async applyChanges() {\n        this.stackEditor.editorSvc.clEditor.replaceSelection(`[${this.linkText}](${this.linkUrl})`);\n        this.dialogRef.close();\n    }\n}\n","<mat-form-field>\n    <mat-label matTooltip=\"Preview text for the link\">Link Text</mat-label>\n    <input matInput type=\"text\" [(ngModel)]=\"linkText\">\n</mat-form-field>\n\n<mat-form-field>\n    <mat-label matTooltip=\"URL that the link points to\">Link URL</mat-label>\n    <input matInput type=\"text\" [(ngModel)]=\"linkUrl\">\n</mat-form-field>\n\n<div style=\"flex: 1\"></div>\n\n<div style=\"display: flex; justify-content: end;\">\n    <button mat-flat-button (click)=\"applyChanges()\">\n\n        @if (isSaving) {\n            <mat-progress-spinner\n                mode=\"indeterminate\"\n                [diameter]=\"18\"\n                style=\"display: inline\"\n            />\n        }\n        @else {\n            <mat-icon>check</mat-icon>\n        }\n\n        Ok\n    </button>\n    <button mat-flat-button (click)=\"dialogRef.close()\">\n        <mat-icon>close</mat-icon>\n        Cancel\n    </button>\n</div>\n","import { MatDialog } from '@angular/material/dialog';\nimport { ImageInsertComponent } from './components/toolbar/image-insert/image-insert.component';\nimport { LinkInsertComponent } from './components/toolbar/link-insert/link-insert.component';\nimport { StackEditorComponent } from './editor.component';\n\nexport class EditorActions {\n    get editor() { return this.stackEditor.editorSvc.clEditor; }\n    get wrapSelection() {\n        return this.editor.wrapSelection.bind(this.editor) as typeof this.editor.wrapSelection;\n    }\n\n    colorizeText(color: string) {\n        this.wrapSelection(`<span style=\"color: ${color}\">`, \"</span>\");\n    }\n\n    setTextFont(font: string) {\n        this.wrapSelection(`<span style=\"font-family: ${font}\">`, \"</span>\");\n    }\n\n    boldText() {\n        this.wrapSelection(\"**\", \"**\");\n    }\n\n    italicizeText() {\n        this.wrapSelection(\"_\", \"_\");\n    }\n\n    strikethroughText() {\n        this.wrapSelection(\"~~\", \"~~\");\n    }\n\n    blockQuoteText() {\n        this.wrapSelection(\"> \", '', null, true);\n    }\n\n    insertOrderedList() {\n        this.wrapSelection(\" 1. \", '', null, true);\n    }\n\n    insertList() {\n        this.wrapSelection(\" - \", '', null, true);\n    }\n\n    insertCheckList() {\n        this.wrapSelection(\" - [ ] \", '', null, true);\n    }\n\n    insertInlineCode() {\n        this.wrapSelection(\"`\", \"`\");\n    }\n\n    insertCodeBlock() {\n        // TODO: align to start of line\n        this.wrapSelection(\"```\\n\", \"\\n```\", null, true);\n    }\n    insertComment() {\n        this.wrapSelection(\"<!-- \", \" -->\", null, true);\n    }\n\n    /**\n      * | Heading 1 |     |\n        | ---       | --- |\n        |           |     |\n     */\n    insertTable(cols: number, rows: number) {\n        let text: string[] = [];\n\n        for (let i = 0; i < rows + 2; i++) {\n            // Empty cell\n            let placeholder = ''.padStart(8 + (cols.toString().length), ' ');\n            let cells: string[] = [];\n\n            // If we're on the second row, we place dashes in the cell.\n            if (i == 1)\n                placeholder = ''.padStart(8 + (cols.toString().length), '-');\n\n            for (let j = 0; j < cols; j++) {\n                // If we're on the first row, we use \"Heading 1\" etc.\n                if (i == 0)\n                    placeholder = \"Heading \" + (j + 1);\n\n                cells.push(placeholder);\n            }\n\n            text.push(\"| \" + cells.join(\" | \") + \" |\");\n        }\n\n        const table = text.join('\\n');\n        this.wrapSelection('', '\\n' + table, null, true);\n    }\n\n    openImageDialog() {\n        this.dialog.open(ImageInsertComponent, { data: { stackEditor: this.stackEditor } });\n    }\n\n    openLinkDialog() {\n        this.dialog.open(LinkInsertComponent, { data: { stackEditor: this.stackEditor } });\n    }\n\n    constructor(\n        public stackEditor?: StackEditorComponent,\n        public dialog?: MatDialog\n    ) {\n\n    }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { KeyboardService, MenuDirective, MenuItem, ThemeService, TooltipDirective } from '@dotglitch/ngx-common';\n\nimport mermaidLayouts from './mermaid-layouts';\n\nimport { Subscription } from 'rxjs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { StackEditorComponent } from '../../editor.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ImageInsertComponent } from './image-insert/image-insert.component';\nimport { LinkInsertComponent } from './link-insert/link-insert.component';\nimport { EditorActions } from '../../editor-actions';\n\n@Component({\n    selector: 'app-toolbar',\n    templateUrl: './toolbar.component.html',\n    styleUrls: ['./toolbar.component.scss'],\n    imports: [\n        MatIconModule,\n        MatTooltipModule,\n        MatButtonModule,\n        TooltipDirective,\n        MenuDirective\n    ],\n    standalone: true\n})\nexport class ToolbarComponent {\n    get editor() { return this.stackEditor.editorSvc.clEditor }\n    get wrapSelection() {\n        return this.editor.wrapSelection.bind(this.editor) as typeof this.editor.wrapSelection;\n    }\n\n    // 2D array of color hex codes that show up for the color picker.\n    @Input() colorList = [\n        // Gray  red     yellow  green   gcyan   lblue   dblue   violet  puke    brown\n        \"#000000 #4c4c4c #666666 #808080 #999999 #b3b3b3 #cccccc #e6e6e6 #f2f2f2 #ffffff\".split(' '),\n        \"#d4dae4 #ffcdd2 #f9e6ad #bce4ce #bdf0e9 #b3e5fc #aec1ff #c5c0da #d6bdcc #d2c5c1\".split(' '),\n        \"#b0b8cd #fe9998 #f4d679 #90d2af #92e7dc #81d4fa #88a3f9 #9f97c1 #c492ac #b4a09a\".split(' '),\n        \"#949db1 #f35c4e #edb90f #33b579 #02d7c5 #29b6f6 #5874cd #7e6bad #a9537c #826358\".split(' '),\n        \"#727a8c #e94633 #eaa100 #36955f #11b3a5 #039be5 #2349ae #584a8f #963a64 #624339\".split(' '),\n        \"#5e6677 #d73c2d #ea8f00 #247346 #018b80 #0288d1 #163fa2 #4f4083 #81355a #5d4037\".split(' '),\n        \"#3f4757 #ca3626 #ea7e00 #1d5b38 #026b60 #0277bd #083596 #473776 #6e3051 #4e342e\".split(' '),\n        \"#1d2534 #bb2b1a #ea5d00 #17492d #024f43 #01579b #002381 #3a265f #4c2640 #3e2723\".split(' ')\n    ];\n\n    textSizeMenu: MenuItem[] = [\n        { label: \"Heading 1\", action: () => this.injectHeading(1) },\n        { label: \"Heading 2\", action: () => this.injectHeading(2) },\n        { label: \"Heading 3\", action: () => this.injectHeading(3) },\n        { label: \"Heading 4\", action: () => this.injectHeading(4) },\n        { label: \"Heading 5\", action: () => this.injectHeading(5) },\n        { label: \"Heading 6\", action: () => this.injectHeading(6) }\n    ];\n\n    diagramMenu: MenuItem[] = [\n        { label: \"Mermaid Diagrams:\" },\n        { label: \"Live Editor\", link: \"https://mermaid.live/edit\", linkTarget: \"_blank\" },\n        { label: \"Examples\", link: \"https://mermaid.js.org/syntax/examples.html\", linkTarget: \"_blank\" },\n        \"separator\",\n        ...mermaidLayouts.map(l => ({\n            label: l.label,\n            action: () => this.wrapSelection(l.value, '', null, true)\n        }))\n    ];\n\n    cursorIsInHeading = false;\n    cursorIsInBold = false;\n    cursorIsInItalic = false;\n    cursorIsInStrikethrough = false;\n    cursorIsInUnderline = false;\n    cursorIsInBlockquote = false;\n    cursorIsInLink = false;\n    cursorIsInOrderedList = false;\n    cursorIsInList = false;\n    cursorIsInChecklist = false;\n    cursorIsInTable = false;\n    cursorIsInInlineCode = false;\n    cursorIsInCode = false;\n    currentTextColor = \"#f00\";\n\n    actions: EditorActions;\n\n    constructor(\n        public readonly stackEditor: StackEditorComponent,\n        private readonly dialog: MatDialog,\n        public readonly theme: ThemeService,\n    ) {\n        this.actions = new EditorActions(stackEditor, dialog);\n    }\n\n    bindEditorEvents() {\n        // Handle cursor position updates\n        this.stackEditor.editorSvc.on(\"selectionRange\", this.onSelectionChange.bind(this))\n    }\n\n    async onSelectionChange() {\n        this.cursorIsInHeading = false;\n        this.cursorIsInBold = false;\n        this.cursorIsInItalic = false;\n        this.cursorIsInStrikethrough = false;\n        this.cursorIsInBlockquote = false;\n        this.cursorIsInLink = false;\n        this.cursorIsInOrderedList = false;\n        this.cursorIsInList = false;\n        this.cursorIsInChecklist = false;\n        this.cursorIsInTable = false;\n        this.cursorIsInInlineCode = false;\n        this.cursorIsInCode = false;\n\n        // Large selection -- don't perform evaluations\n        if (this.stackEditor.editorSvc.clEditor.selectionMgr.selectionStart != this.stackEditor.editorSvc.clEditor.selectionMgr.selectionEnd) {\n            return;\n        }\n\n        const { parentElement } = this.stackEditor.editorSvc?.selectionRange?.commonAncestorContainer as Node || {};\n\n        if (!parentElement) return;\n\n        const inheritedClasses = [];\n        let currentElement: HTMLElement = parentElement;\n        for (let i = 0; i < 10 && currentElement && !currentElement.classList.contains(\"cledit-section\"); i++) {\n            currentElement.classList.forEach(c => inheritedClasses.push(c));\n            currentElement = currentElement.parentElement;\n        }\n\n        const content = this.stackEditor.editorSvc.clEditor.getContent();\n        const matches = content.substring(0, this.stackEditor.editorSvc.clEditor.selectionMgr.selectionStart).split('\\n');\n        const currentLine = matches?.slice(-1)?.[0];\n\n        if (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].some(c => inheritedClasses.includes(c)))\n            this.cursorIsInHeading = true;\n        if (inheritedClasses.includes(\"bold\"))\n            this.cursorIsInBold = true;\n        if (inheritedClasses.includes(\"italic\"))\n            this.cursorIsInItalic = true;\n        if (inheritedClasses.includes(\"strike\"))\n            this.cursorIsInStrikethrough = true;\n        if (inheritedClasses.includes(\"blockquote\") || currentLine.match(/^\\s*>\\s*/))\n            this.cursorIsInBlockquote = true;\n        if (inheritedClasses.includes(\"bold\"))\n            this.cursorIsInLink = true;\n\n        // TODO: This detection will not work for nested items\n        // These need custom markdown highlighting to work properly\n        if (currentLine.match(/^\\s*\\d+\\.\\s*/))\n            this.cursorIsInOrderedList = true;\n        if (currentLine.match(/^\\s*[\\-*]\\s*/))\n            this.cursorIsInList = true;\n        if (currentLine.match(/^\\s*[\\-*]\\s*\\[[ xX*]?\\]\\s*/)) {\n            this.cursorIsInList = false;\n            this.cursorIsInChecklist = true;\n        }\n\n        // Needs custom highlighting\n        if (inheritedClasses.includes(\"table\"))\n            this.cursorIsInTable = true;\n\n        if (inheritedClasses.includes(\"code-snippet\"))\n            this.cursorIsInInlineCode = true;\n        if (inheritedClasses.includes(\"code-block\"))\n            this.cursorIsInCode = true;\n    }\n\n    injectHeading(size: number) {\n        const headerString = ''.padStart(size, '#') + ' ';\n        this.wrapSelection(headerString, '', null, true);\n    }\n\n    toggleTOC() {\n        this.stackEditor.showToc = !this.stackEditor.showToc;\n    }\n\n    toggleEditor() {\n        this.stackEditor.mode = this.stackEditor.mode == 'view' ? 'edit' : 'view';\n        if (this.stackEditor.mode == 'view' && !this.stackEditor.showPreview)\n            this.stackEditor.showPreview = !this.stackEditor.showPreview;\n    }\n\n    togglePreview() {\n        this.stackEditor.showPreview = !this.stackEditor.showPreview;\n        if (this.stackEditor.mode == 'view' && !this.stackEditor.showPreview)\n            this.stackEditor.mode = this.stackEditor.mode == 'view' ? 'edit' : 'view';\n    }\n}\n","<!-- Header -->\n<mat-icon [ngx-menu]=\"textSizeMenu\" [class.reflect]=\"cursorIsInHeading\" matTooltip=\"Headings\">format_size</mat-icon>\n<!-- Color -->\n<mat-icon [ngx-tooltip]=\"colorPopup\" [ngx-tooltip-config]=\"{ triggers: ['click'], position: 'bottom' }\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" style=\"margin-top: -3px;\">\n        <path [style.fill]=\"currentTextColor\" d=\"M2 20L2 24L22 24L22 20L2 20z\" />\n        <path fill=\"var(--text-color)\" d=\"M10.75 3L5.49 17L7.91 17L9.18 13.42L14.83 13.42L16.09 17L18.51 17L13.25 3L10.75 3z M11.94 5.6L12.06 5.6L14.09 11.39L9.91 11.39L11.94 5.6z\" />\n    </svg>\n</mat-icon>\n\n<ng-template #colorPopup let-dialog=\"dialog\">\n    @for (ctx of [{color: '#000'}]; track ctx) {\n        <div\n            class=\"table-popup\"\n        >\n            <div\n                [style.color]=\"ctx.color\"\n                [style.background-color]=\"\"\n            >\n                {{ctx.color}}\n            </div>\n            <div class=\"grouped\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n                @for (row of colorList; track row) {\n                    <div class=\"table-row\">\n                        @for (color of row; track color) {\n                            <div\n\n                                class=\"col-cell\"\n                                style=\"width: 24px; height: 24px\"\n                                [style.background-color]=\"color + 'ee'\"\n                                [style.border-color]=\"color + ''\"\n                                (click)=\"actions.colorizeText(currentTextColor = color); dialog.close()\"\n                                (pointerenter)=\"ctx.color = color\"\n                            >\n                            </div>\n                        }\n                    </div>\n                }\n            </div>\n        </div>\n    }\n</ng-template>\n\n<!-- Bold -->\n<mat-icon\n    (mousedown)=\"actions.boldText(); $event.preventDefault()\"\n    [class.reflect]=\"cursorIsInBold\"\n    matTooltip=\"Bold\"\n>\n    format_bold\n</mat-icon>\n<!-- Italic -->\n<mat-icon\n    (mousedown)=\"actions.italicizeText(); $event.preventDefault()\"\n    [class.reflect]=\"cursorIsInItalic\"\n    matTooltip=\"Italic\"\n>\n    format_italic\n</mat-icon>\n<!-- Strikethrough -->\n<mat-icon\n    (mousedown)=\"actions.strikethroughText(); $event.preventDefault()\"\n    [class.reflect]=\"cursorIsInStrikethrough\"\n    matTooltip=\"Strikethrough\"\n>\n    format_strikethrough\n</mat-icon>\n<!-- Underscore -->\n<!-- <mat-icon>format_underlined</mat-icon> -->\n\n<!-- Quote -->\n<mat-icon\n    (mousedown)=\"actions.blockQuoteText(); $event.preventDefault()\"\n    [class.reflect]=\"cursorIsInBlockquote\"\n    matTooltip=\"Blockquote\"\n>\n    format_quote\n</mat-icon>\n<!-- Link -->\n<mat-icon\n    matTooltip=\"Insert a Link\"\n    [class.reflect]=\"cursorIsInLink\"\n    (mousedown)=\"actions.openLinkDialog(); $event.preventDefault()\"\n>\n    link\n</mat-icon>\n\n<!-- Ordered list -->\n<mat-icon (mousedown)=\"actions.insertOrderedList(); $event.preventDefault()\" [class.reflect]=\"cursorIsInOrderedList\" matTooltip=\"Ordered List\">format_list_numbered</mat-icon>\n<!-- Unordered list -->\n<mat-icon (mousedown)=\"actions.insertList(); $event.preventDefault()\" [class.reflect]=\"cursorIsInList\" matTooltip=\"Unordered list\">format_list_bulleted</mat-icon>\n<!-- Checklist -->\n<mat-icon (mousedown)=\"actions.insertCheckList(); $event.preventDefault()\" [class.reflect]=\"cursorIsInChecklist\" matTooltip=\"Checklist\">rule</mat-icon>\n\n<!-- Table -->\n<mat-icon [ngx-tooltip]=\"tablePopup\" [ngx-tooltip-config]=\"{ triggers: ['click'], position: 'bottom' }\" [class.reflect]=\"cursorIsInTable\">table_chart</mat-icon>\n<ng-template #tablePopup let-data=\"data\" let-dialog=\"dialog\">\n    @for (ctx of [{cols: 0, rows: 0}]; track ctx) {\n        <div\n\n            class=\"table-popup\"\n        >\n            <div>{{ctx.cols}}x{{ctx.rows}}</div>\n            <div class=\"grouped\">\n                @for (row of [1,2,3,4,5,6]; track row) {\n                    <div class=\"table-row\">\n                        @for (col of [1,2,3,4,5,6]; track col) {\n                            <div\n\n                                class=\"col-cell\"\n                                [class.selected]=\"ctx.cols >= col && ctx.rows >= row\"\n                                (pointerenter)=\"ctx.cols = col; ctx.rows = row\"\n                                (click)=\"actions.insertTable(ctx.cols, ctx.rows); dialog.close()\"\n                            ></div>\n                        }\n                    </div>\n                }\n            </div>\n        </div>\n    }\n</ng-template>\n\n<!-- Image -->\n<mat-icon\n    matTooltip=\"Insert an image\"\n    (mousedown)=\"actions.openImageDialog(); $event.preventDefault()\"\n>\n    add_photo_alternate\n</mat-icon>\n\n\n<!-- Inline code -->\n<mat-icon\n    (mousedown)=\"actions.insertInlineCode(); $event.preventDefault()\"\n    [class.reflect]=\"cursorIsInInlineCode\"\n    matTooltip=\"Inline highlight\"\n>\n    code\n</mat-icon>\n<!-- Code Block -->\n<mat-icon\n    (mousedown)=\"actions.insertCodeBlock(); $event.preventDefault()\"\n    [class.reflect]=\"cursorIsInCode\"\n    matTooltip=\"Code block\"\n>\n    data_object\n</mat-icon>\n\n<!-- Mermaid Diagrams... -->\n@if (stackEditor.showMermaid) {\n    <mat-icon\n        [ngx-menu]=\"diagramMenu\"\n        [ngx-menu-config]=\"{\n            customClass: ['mermaid-menu']\n        }\"\n        matTooltip=\"Diagrams\"\n    >\n        account_tree\n    </mat-icon>\n}\n\n<span style=\"flex: 1\">\n    <!-- {{stackEditor.editorSvc?.focus}}\n     //\n    {{stackEditor.editorSvc?.clEditor?.selectionMgr?.selectionStart}}::\n    {{stackEditor.editorSvc?.clEditor?.selectionMgr?.selectionEnd}} -->\n</span>\n\n@if (stackEditor.showToc != 'off') {\n    <mat-icon\n\n        (mousedown)=\"toggleTOC(); $event.preventDefault()\"\n        [matTooltip]=\"stackEditor.showToc ? 'Close Table of Contents' : 'Open Table of Contents'\"\n    >\n        toc\n    </mat-icon>\n}\n\n@if (stackEditor.showPreview != 'off' && stackEditor.mode != 'viewonly') {\n    <mat-icon\n        (mousedown)=\"toggleEditor(); $event.preventDefault()\"\n        matTooltip=\"Close Editor\"\n    >\n        check\n    </mat-icon>\n}\n\n@if (stackEditor.showPreview != 'off') {\n    <mat-icon\n        (mousedown)=\"togglePreview(); $event.preventDefault()\"\n        [matTooltip]=\"stackEditor.showPreview ? 'Hide Preview': 'Open Preview'\"\n    >\n        visibility_off\n    </mat-icon>\n}\n","/**\n * This file controls the editor syntax highlighting.\n *\n * The order keys are assigned is _important_!\n * The parser checks if a regex matches based on the order of the key in the containing object.\n */\n\ntype treeNode = {\n    parent: Omit<treeNode, 'parent'>,\n    children: treeNode[],\n    depth: number,\n    nodeAttributes: {\n        [key: string]: string;\n    },\n\n    /**\n     * The index of the opening `<` in the span tag\n     * e.g.\n     * foobar <span color=\"\">...</span>\n     *        ^\n     */\n    outerStartIndex: number,\n    /**\n     * The index of the first character of content in the span tag\n     * e.g.\n     * foobar <span color=\"\">...</span>\n     *                       ^\n     */\n    innerStartIndex: number,\n    /**\n     * The index of the last character inside of the span tag\n     * e.g.\n     * foobar <span color=\"\">...</span>\n     *                         ^\n     */\n    innerEndIndex: number,\n    /**\n     * The index of the final terminating '>' of the span tag.\n     * e.g.\n     * foobar <span color=\"\">...</span>\n     *                                ^\n     */\n    outerEndIndex: number,\n};\n\nconst scanSpan = (text: string) => {\n    let spanDepth = 0;\n\n    const rootNode = {\n        depth: 0,\n        children: [] as treeNode[],\n        outerStartIndex: 0,\n        innerStartIndex: 0,\n        innerEndIndex: text.length,\n        outerEndIndex: text.length\n    } as treeNode;\n    let spanTree: treeNode = rootNode as any;\n\n    for (let i = 0; i < text.length; i++) {\n        // Only do semantic checking when an opening angle bracket is encountered\n        if (text.charCodeAt(i) != 0x3c) continue;\n\n        const chunk = text.slice(i);\n\n        // Encountered the start of a node\n        if (chunk.match(/^<\\s*?span\\s+?style\\s*?=/)) {\n            spanDepth++;\n\n            const tagMatch = chunk.match(/^<\\s*?span([\\s]*?style\\s*?=\\s*?(?<style>\"[^\"]+\"|'[']+'))\\s*?[^>]*?>/);\n\n            const newItem: treeNode = {\n                children: [],\n                parent: spanTree,\n                depth: spanDepth,\n                outerStartIndex: i,\n                innerStartIndex: i + tagMatch[0]?.length,\n                innerEndIndex: -1,\n                outerEndIndex: -1,\n                nodeAttributes: tagMatch.groups\n            };\n\n            spanTree.children.push(newItem);\n            spanTree = newItem;\n        }\n        // Navigate up the tree by one level\n        else if (chunk.match(/^<\\s*?\\/\\s*?span\\s*?>/)) {\n            spanDepth--;\n\n            // This scenario can happen when there are more\n            // closing span tags than there should be\n            if (!spanTree.parent || spanDepth < 0) {\n                break; // give up -- bad input\n            }\n\n            spanTree.innerEndIndex = i;\n            spanTree.outerEndIndex = i + chunk.match(/^<\\s*?\\/\\s*?span\\s*?>/)[0].length;\n\n            spanTree = spanTree.parent as any;\n        }\n    }\n\n    return rootNode;\n}\n\nexport default (Prism) => {\n\n    const spanStyled = {\n        // Regex match does not work as we need to match the closing </span> tag.\n        // pattern: /<span style=\"color: #(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})\">.*?<\\/span>/g,\n        pattern: {\n            /**\n             * Instead we implement the exec method that Prism ultimately calls.\n             * Return `null` if there are no matches, or the first match in the\n             * format of a regex exec result.\n             */\n            exec: (str: string) => {\n                const root = scanSpan(str);\n                const match = root.children[0];\n\n                if (!match)\n                    return null;\n\n                const res = [match].map(m => str.slice(m.outerStartIndex, m.outerEndIndex));\n\n                res['index'] = match?.outerStartIndex;\n                res['input'] = str;\n                res['groups'] = { foo: 'bar' };\n                return res;\n            }\n        },\n        lookbehind: true,\n        greedy: false,\n        inside: {\n            \"color-hex\": {\n                pattern: /#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})(?=[^A-Fa-f0-9])/,\n                lookbehind: true,\n                greedy: true\n            },\n            \"content\": {\n                pattern: /(?:<span style=\"color: #(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})\">).+(?=<\\/span>)/,\n                lookbehind: true,\n                greedy: true,\n                inside: Prism.languages.markdown\n            },\n            ['special-attr']: Prism.languages.markdown['special-attr'],\n            punctuation: Prism.languages.markdown.punctuation,\n            tag: Prism.languages.markdown.tag\n        }\n    };\n\n    Prism.languages.insertBefore('markdown', 'url', {\n        'img-url': {\n            // [![<label>](<imgurl>)](<linkurl>)\n            pattern: /\\[!\\[[^\\]\\n]+?\\]\\((?:\\([^\\)\\n]+?\\)|[^\\(\\)\\n]+?)+?\\)\\]\\([^\\)\\n]+?\\)/,\n            // pattern: /\\[!\\[[^\\]]+\\]\\(/,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'src': {\n                    pattern: /(\\()(?:\\([^\\)\\r\\n]+\\)|[^\\(\\)\\r\\n])+?(?=\\)$)/,\n                    lookbehind: true\n                }\n            },\n            alias: \"token\"\n        },\n        'img': {\n            pattern: /!\\[[^\\]\\r\\n]+\\]\\((?:\\([^\\)\\r\\n]+\\)|[^\\(\\)\\r\\n])+?\\)/,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'string': {\n                    pattern: /(!\\[)[^\\]\\r\\n]+(?=\\])/,\n                    lookbehind: true,\n                },\n                'img-src': {\n                    pattern: /(\\]\\()[^\\r\\n]+(?=\\))/s,\n                    lookbehind: true,\n                },\n                'punctuation': {\n                    pattern: /[\\[\\]\\(\\)!]/,\n                    greedy: true,\n                    lookbehind: true\n                }\n            }\n        },\n        'link': {\n            pattern: /\\[[^\\]]+?\\]\\([^)]+?\\)/g,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'string': {\n                    pattern: /(\\[)[^\\]\\r\\n]+(?=\\])/,\n                    lookbehind: true,\n                },\n                'src': {\n                    pattern: /(\\]\\()[^('\" \\t]+(?=[)'\" \\t])/,\n                    lookbehind: true,\n                    inside: {\n                        'punctuation': {\n                            pattern: /[\\[\\]\\(\\)]/,\n                            greedy: true,\n                            lookbehind: true\n                        }\n                    }\n                },\n                'punctuation': {\n                    pattern: /[\\[\\]\\(\\)]/,\n                    greedy: true,\n                    lookbehind: true\n                }\n            }\n        }\n    });\n\n    Prism.languages.markdown['code-snippet'].inside = {\n        punctuation: {\n            pattern: /`/,\n            greedy: true,\n            lookbehind: true\n        }\n    }\n\n    Prism.languages.insertBefore('markdown', 'hr', {\n        \"linebreak\": {\n            pattern: /^[ ]{0,3}---/,\n            greedy: true,\n            lookbehind: true\n        },\n    });\n\n    Prism.languages.insertBefore('markdown', 'comment', {\n        'comment': /<!--.*?-->/s,\n        'span-styled': spanStyled\n    });\n    const basicRules = {\n        color: Prism.languages.markdown.color,\n        bold: Prism.languages.markdown.bold,\n        italic: Prism.languages.markdown.italic,\n        strike: Prism.languages.markdown.strike,\n        'code-snippet': Prism.languages.markdown['code-snippet'],\n        'span-styled': Prism.languages.markdown['span-styled'],\n        'img-url': Prism.languages.markdown['img-url'],\n        'img': Prism.languages.markdown['img'],\n        'link': Prism.languages.markdown['link']\n    }\n\n    Prism.languages.insertBefore('markdown', 'title', {\n        'h6': {\n            pattern: /^[ ]{0,3}######[ \\t]*?.+$/gm,\n            lookbehind: true,\n            greedy: true\n        },\n        'h5': {\n            pattern: /^[ ]{0,3}#####[ \\t]*?.+$/gm,\n            lookbehind: true,\n            greedy: true\n        },\n        'h4': {\n            pattern: /^[ ]{0,3}####[ \\t]*?.+$/gm,\n            lookbehind: true,\n            greedy: true\n        },\n        'h3': {\n            pattern: /^[ ]{0,3}###[ \\t]*?.+$/gm,\n            lookbehind: true,\n            greedy: true\n        },\n        'h2': {\n            pattern: /^[ ]{0,3}##[ \\t]*?.+$/gm,\n            lookbehind: true,\n            greedy: true\n        },\n        'h1': {\n            pattern: /^[ ]{0,3}#[ \\t]*?.+$/gm,\n            lookbehind: true,\n            greedy: true\n        },\n\n    });\n\n    // Order of assignment is quite important\n    Prism.languages.markdown['img-url'].inside.img = Prism.languages.markdown['img'];\n    Prism.languages.markdown['img-url'].inside.punctuation = {\n        pattern: /[\\[\\]\\(\\)!]/,\n        greedy: true,\n        lookbehind: true\n    };\n\n    Prism.languages.insertBefore('markdown', 'comment', {\n        'image-spinner': {\n            pattern: /```img-spinner```/g,\n            lookbehind: true,\n            greedy: true\n        },\n        'table-block': {\n            // Regex match does not work as we need to match the closing </span> tag.\n            // pattern: /<span style=\"color: #(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})\">.*?<\\/span>/g,\n            pattern: /\\s{0,3}\\|(?:[^|]+\\|)+\\n(?:\\s{0,3}\\|\\s*(?::?-+:?\\s*\\|)+)(?:\\s{0,3}\\|(?:[^|]+\\|)+\\n)+/s,\n            lookbehind: true,\n            greedy: false,\n            inside: {\n                'header-row': {\n                    pattern: /^\\s{0,3}\\|(?:[^|\\n]+\\|)+\\n(?=\\s{0,3}\\|\\s*(?:-+\\s*\\|)+)/s,\n                    lookbehind: true,\n                    greedy: false,\n                    inside: {\n                        'cell': {\n                            pattern: /(\\|)[^|]+(?=\\|)/,\n                            lookbehind: true,\n                            greedy: false,\n                            inside: basicRules\n                        },\n                        'pipe': /\\|/\n                    }\n                },\n                'table-row': {\n                    pattern: /\\n\\s{0,3}\\|(?:[^|\\n]+\\|)+(?=\\n|$)/s,\n                    lookbehind: true,\n                    greedy: false,\n                    inside: {\n                        'cell': {\n                            pattern: /(\\|)[^|]+(?=\\|)/,\n                            lookbehind: true,\n                            greedy: false,\n                            inside: basicRules\n                        },\n                        'pipe': /\\|/\n                    }\n                },\n                'break-row': {\n                    pattern: /\\s{0,3}\\|\\s*(?::?-+:?\\s*\\|)+/,\n                    inside: {\n                        'pipe': /\\|/,\n                        'dash': /\\-+/,\n                        'colon': /:/,\n                    }\n                }\n            }\n        },\n        'blockquote': {\n            pattern: /(^|\\n)\\s*>.+?(?=\\n\\s*\\n|$)/s,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'punctuation': /(^|\\n)\\s*>/,\n                'content': {\n                    pattern: /.+/\n                }\n            }\n        },\n        'injection-fence': {\n            pattern: /\\`\\`\\`<injected>(?:.+?)<\\/injected>\\s*\\`\\`\\`/s,\n            greedy: true,\n            lookbehind: true\n        },\n        'number-list': {\n            pattern: /^\\s+\\d+\\.\\s+.+$/s,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'punctuation': /(\\n|^)\\s+\\d+\\./,\n                ...basicRules\n            }\n        },\n        'check-list': {\n            pattern: /^\\s+[-*]\\s+\\[[Xx ]?\\]\\s+.+$/s,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'punctuation': /(\\n|^)\\s+[-*]\\s+\\[[Xx ]?\\]/,\n                ...basicRules\n            }\n        },\n        'bullet-list': {\n            pattern: /^\\s+[-*]\\s+.+$/s,\n            lookbehind: true,\n            greedy: true,\n            inside: {\n                'punctuation': /(\\n|^)\\s+[-*]/,\n                ...basicRules\n            }\n        }\n    });\n    Prism.languages.markdown['span-styled'].inside.content.inside.color = Prism.languages.markdown['span-styled'];\n    Prism.languages.markdown['blockquote'].inside.content.inside = Prism.languages.markdown;\n\n    // Add inside highlighting to the header levels\n    for (let i = 1; i <= 6; i++) {\n        Prism.languages.markdown['h' + i].inside = {\n            ...basicRules,\n            hash: /#+/\n        }\n    }\n\n    // Bypass the Prism wrapper on `code`\n    // This disables markdown language prism highlighting\n    // which is faster for us when we use the Monaco editor\n    Prism.languages.markdown['code_custom'] = Prism.languages.markdown.code;\n    const codeBlockRule = Prism.languages.markdown['code_custom'].find(c => !!c.inside)?.inside['code-block'];\n    if (codeBlockRule) {\n        codeBlockRule.pattern =\n            /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?:\\n|\\r\\n?)(?=^```\\n?$)/m\n        codeBlockRule.alias = \"prism\"; // add 'prism' class to code-blocks\n        codeBlockRule.inside = undefined;\n    }\n    Prism.languages.markdown.code = undefined;\n\n    Prism.hooks.add('wrap', (env: {\n        attributes: { [key: string]: string },\n        classes: string[],\n        content: string,\n        language: string,\n        tag: string,\n        type: string\n    }) => {\n        if (env.type == 'span-styled') {\n\n            const { style } = env.content\n                    .replace(/<[^>]+?>/g, '')\n                    .match(/style=\"(?<style>[^\"]+?)\"/)?.groups || {};\n\n            if (style)\n                env.attributes['style'] = style;\n        }\n        else if (env.type == 'code_custom') {\n            // Questionable mermaid diagram detection\n            if (env.content.match(/^<span class=\"token punctuation\">```<\\/span><span class=\"token code-language\">mermaid<\\/span>/)) {\n                env.classes.push(\"mermaid\");\n            }\n        }\n    });\n}\n","import Prism from 'prismjs';\n\nimport 'prismjs/components/prism-asciidoc';\nimport 'prismjs/components/prism-awk';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-batch';\nimport 'prismjs/components/prism-c';\nimport 'prismjs/components/prism-cmake';\nimport 'prismjs/components/prism-csharp';\nimport 'prismjs/components/prism-cshtml';\nimport 'prismjs/components/prism-csp';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-csv';\nimport 'prismjs/components/prism-dns-zone-file';\nimport 'prismjs/components/prism-docker';\nimport 'prismjs/components/prism-erlang';\nimport 'prismjs/components/prism-excel-formula';\nimport 'prismjs/components/prism-graphql';\nimport 'prismjs/components/prism-gradle';\nimport 'prismjs/components/prism-groovy';\nimport 'prismjs/components/prism-hsts';\nimport 'prismjs/components/prism-http';\nimport 'prismjs/components/prism-icon';\nimport 'prismjs/components/prism-ini';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-jq';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-json5';\nimport 'prismjs/components/prism-jsonp';\nimport 'prismjs/components/prism-jsstacktrace';\nimport 'prismjs/components/prism-jsx';\nimport 'prismjs/components/prism-log';\nimport 'prismjs/components/prism-makefile';\nimport 'prismjs/components/prism-markdown';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-mermaid';\nimport 'prismjs/components/prism-nginx';\nimport 'prismjs/components/prism-perl';\n// import 'prismjs/components/prism-php';\nimport 'prismjs/components/prism-plant-uml';\nimport 'prismjs/components/prism-powerquery';\nimport 'prismjs/components/prism-powershell';\nimport 'prismjs/components/prism-sql';\nimport 'prismjs/components/prism-properties';\nimport 'prismjs/components/prism-puppet';\nimport 'prismjs/components/prism-python';\nimport 'prismjs/components/prism-regex';\nimport 'prismjs/components/prism-rest';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-rust';\nimport 'prismjs/components/prism-sass';\nimport 'prismjs/components/prism-scheme';\nimport 'prismjs/components/prism-scss';\nimport 'prismjs/components/prism-sql';\nimport 'prismjs/components/prism-toml';\nimport 'prismjs/components/prism-tsx';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-uri';\nimport 'prismjs/components/prism-yaml';\n\nimport customMarkdown from './custom-markdown';\ncustomMarkdown(Prism);\n\nconst keywordSupport = {\n    \"import\": {\n        pattern: /^\\s*import\\s+[^;]+?(?:;|$|\\n)/ms,\n        greedy: true,\n        lookbehind: true,\n        inside: {\n            \"keyword\": {\n                pattern: /^import/,\n                greedy: true,\n                lookbehind: true\n            },\n            \"string\": {\n                pattern: /(?:'[^']+?'|\"[^\"]+?\"|`[^`]+?`)/,\n                greedy: true,\n                lookbehind: true\n            },\n            \"subject\": {\n                pattern: /\\{[^}]+?\\}/,\n                greedy: true,\n                lookbehind: true,\n                inside: {\n                    \"keyword\": {\n                        pattern: /import|from/,\n                        greedy: true,\n                        lookbehind: true\n                    },\n                    \"punctuation\": {\n                        pattern: /[{},]/,\n                        greedy: true,\n                        lookbehind: true\n                    }\n                }\n            },\n            \"default-subject\": {\n                pattern: /import\\s*?([^'\"`]+)\\s*?(?:from|['\"`])/,\n                greedy: true,\n                lookbehind: true,\n                inside: {\n                    \"keyword\": {\n                        pattern: /import|from/,\n                        greedy: true,\n                        lookbehind: true\n                    },\n                    \"punctuation\": {\n                        pattern: /[{},]/,\n                        greedy: true,\n                        lookbehind: true\n                    }\n                }\n            },\n            \"punctuation\": {\n                pattern: /[,;]/,\n                greedy: true,\n                lookbehind: true\n            },\n            \"keyword keyword-from\": {\n                pattern: /from/,\n                greedy: true,\n                lookbehind: true\n            }\n        }\n    }\n};\n\nPrism.languages.insertBefore('typescript', 'keyword', keywordSupport);\nPrism.languages.insertBefore('javascript', 'keyword', keywordSupport);\n\nexport default Prism;\n","import DiffMatchPatch from 'diff-match-patch';\nimport Prism from './prism';\nimport MarkdownIt from 'markdown-it';\n\n/**\n * This provides the HTML rendering for markdown preview content.\n */\n\nexport const htmlSectionMarker = '\\uF111\\uF222\\uF333\\uF444';\nconst diffMatchPatch = new DiffMatchPatch();\n\n// Create aliases for syntax highlighting\nconst languageAliases = ({\n    js: 'javascript',\n    json: 'javascript',\n    html: 'markup',\n    svg: 'markup',\n    xml: 'markup',\n    py: 'python',\n    rb: 'ruby',\n    yml: 'yaml',\n    ps1: 'powershell',\n    psm1: 'powershell',\n});\nObject.entries(languageAliases).forEach(([alias, language]) => {\n    Prism.languages[alias] = Prism.languages[language];\n});\n\n// Add programming language parsing capability to markdown fences\nconst insideFences = {};\nObject.entries(Prism.languages).forEach(([name, language]) => {\n    if (Prism.util.type(language) === 'Object') {\n        insideFences[`language-${name}`] = {\n            pattern: new RegExp(`(\\`\\`\\`|~~~)${name}\\\\W[\\\\s\\\\S]*`),\n            inside: {\n                'cl cl-pre': /(```|~~~).*/,\n                rest: language,\n            },\n        };\n    }\n});\n\n// Disable spell checking in specific tokens\nconst noSpellcheckTokens = Object.create(null);\n[\n    'code',\n    'pre',\n    'pre gfm',\n    'math block',\n    'math inline',\n    'math expr block',\n    'math expr inline',\n    'latex block',\n]\n    .forEach((key) => {\n        noSpellcheckTokens[key] = true;\n    });\nPrism.hooks.add('wrap', (env) => {\n    if (noSpellcheckTokens[env.type]) {\n        env.attributes.spellcheck = 'false';\n    }\n});\n\nfunction createFlagMap(arr) {\n    return arr.reduce((map, type) => ({ ...map, [type]: true }), {});\n}\nconst startSectionBlockTypeMap = createFlagMap([\n    'paragraph_open',\n    'blockquote_open',\n    'heading_open',\n    'code',\n    'fence',\n    'table_open',\n    'html_block',\n    'bullet_list_open',\n    'ordered_list_open',\n    'hr',\n    'dl_open',\n]);\nconst listBlockTypeMap = createFlagMap([\n    'bullet_list_open',\n    'ordered_list_open',\n]);\nconst blockquoteBlockTypeMap = createFlagMap([\n    'blockquote_open',\n]);\nconst tableBlockTypeMap = createFlagMap([\n    'table_open'\n]);\nconst deflistBlockTypeMap = createFlagMap([\n    'dl_open',\n]);\n\nfunction hashArray(arr, valueHash, valueArray) {\n    const hash = [];\n    arr.forEach((str) => {\n        let strHash = valueHash[str];\n        if (strHash === undefined) {\n            strHash = valueArray.length;\n            valueArray.push(str);\n            valueHash[str] = strHash;\n        }\n        hash.push(strHash);\n    });\n    return String.fromCharCode.apply(null, hash);\n}\n\nexport default {\n    /**\n     * Creates a converter and init it with extensions.\n     * @returns {Object} A converter.\n     */\n    createConverter() {\n        // Let the listeners add the rules\n        const converter = new MarkdownIt('zero');\n        converter.core.ruler.enable([], true);\n        converter.block.ruler.enable([], true);\n        converter.inline.ruler.enable([], true);\n\n        Object.keys(startSectionBlockTypeMap).forEach((type) => {\n            const rule = converter.renderer.rules[type] || converter.renderer.renderToken;\n\n            converter.renderer.rules[type] = (tokens, idx, opts, env, self) => {\n                if (tokens[idx]['sectionDelimiter']) {\n                    // Add section delimiter\n                    return htmlSectionMarker + rule.call(converter.renderer, tokens, idx, opts, env, self);\n                }\n\n                return rule.call(converter.renderer, tokens, idx, opts, env, self);\n            };\n        });\n\n        return converter;\n    },\n\n    /**\n     * Parse markdown sections by passing the 2 first block rules of the markdown-it converter.\n     * @param {Object} converter The markdown-it converter.\n     * @param {String} text The text to be parsed.\n     * @returns {Object} A parsing context to be passed to `convert`.\n     */\n    parseSections(converter: MarkdownIt, text: string) {\n        const markdownState = new converter.core.State(text, converter, {});\n        const markdownCoreRules = converter.core.ruler.getRules('');\n        markdownCoreRules[0](markdownState); // Pass the normalize rule\n        markdownCoreRules[1](markdownState); // Pass the block rule\n        const lines = text.split('\\n');\n        if (!lines[lines.length - 1]) {\n            // In cledit, last char is always '\\n'.\n            // Remove it as one will be added by addSection\n            lines.pop();\n        }\n        const parsingCtx = {\n            text,\n            sections: [],\n            converter,\n            markdownState,\n            markdownCoreRules,\n        };\n        let data = 'main';\n        let i = 0;\n\n        function addSection(maxLine) {\n            const section = {\n                text: '',\n                data,\n            };\n\n            // Limit the execution of this lookup.\n            for (; i < maxLine && i < 1000000; i += 1) {\n                section.text += `${lines[i]}\\n`;\n            }\n\n            parsingCtx.sections.push(section);\n        }\n\n        markdownState.tokens.forEach((token, index) => {\n            // index === 0 means there are empty lines at the begining of the file\n            if (token.level === 0 && startSectionBlockTypeMap[token.type]) {\n                if (index > 0) {\n                    token['sectionDelimiter'] = true;\n                    addSection(token.map[0]);\n                }\n\n                if (listBlockTypeMap[token.type])            data = 'list';\n                else if (blockquoteBlockTypeMap[token.type]) data = 'blockquote';\n                else if (tableBlockTypeMap[token.type])      data = 'table';\n                else if (deflistBlockTypeMap[token.type])    data = 'deflist';\n                else                                         data = 'main';\n            }\n        });\n\n        addSection(lines.length);\n        return parsingCtx;\n    },\n\n    /**\n     * Convert markdown sections previously parsed with `parseSections`.\n     * @param {Object} parsingCtx The parsing context returned by `parseSections`.\n     * @param {Object} previousConversionCtx The conversion context returned by a previous call\n     * to `convert`, in order to calculate the `htmlSectionDiff` of the returned conversion context.\n     * @returns {Object} A conversion context.\n     */\n    convert(parsingCtx, previousConversionCtx) {\n        // This function can be called twice without editor modification\n        // so prevent from converting it again.\n        if (!parsingCtx.markdownState.isConverted) {\n            // Skip 2 first rules previously passed in parseSections\n            parsingCtx.markdownCoreRules.slice(2).forEach(rule => rule(parsingCtx.markdownState));\n            parsingCtx.markdownState.isConverted = true;\n        }\n\n        const { tokens } = parsingCtx.markdownState;\n\n        const html: string = parsingCtx.converter.renderer.render(\n            tokens,\n            parsingCtx.converter.options,\n            parsingCtx.markdownState.env,\n        );\n\n        const htmlSectionList = html.split(htmlSectionMarker);\n\n        if (htmlSectionList[0] === '') {\n            htmlSectionList.shift();\n        }\n        const valueHash = Object.create(null);\n        const valueArray = [];\n        const newSectionHash = hashArray(htmlSectionList, valueHash, valueArray);\n\n        let htmlSectionDiff;\n        if (previousConversionCtx) {\n            const oldSectionHash = hashArray(\n                previousConversionCtx.htmlSectionList,\n                valueHash,\n                valueArray,\n            );\n            htmlSectionDiff = diffMatchPatch.diff_main(oldSectionHash, newSectionHash, false);\n        }\n        else {\n            htmlSectionDiff = [\n                [1, newSectionHash],\n            ];\n        }\n        return {\n            text: parsingCtx.text,\n            sectionList: parsingCtx.sectionList,\n            htmlSectionList,\n            htmlSectionDiff,\n        };\n    },\n\n    /**\n     * Helper to highlight arbitrary markdown\n     * @param {Object} markdown The markdown content to highlight.\n     * @param {Object} converter An optional converter.\n     * @param {Object} grammars Optional grammars.\n     * @returns {Object} The highlighted markdown in HTML format.\n     */\n    highlight(markdown, converter = this.defaultConverter, grammars = this.defaultPrismGrammars) {\n        const parsingCtx = this.parseSections(converter, markdown);\n        return parsingCtx.sections\n            .map(section => Prism.highlight(section.text, grammars[section.data])).join('');\n    },\n};\n","import { Editor } from '../editor';\n\nexport class SectionDimension {\n    constructor(\n        public topOffset: number,\n        public height: number\n    ) {\n    }\n}\n\nexport default {\n    measureSectionDimensions(editorSvc: Editor) {\n        const firstSectionDesc = editorSvc.previewCtx.sectionDescList?.[0];\n\n        if (!firstSectionDesc) return;\n\n        firstSectionDesc.editorDimension = new SectionDimension(\n            0,\n            firstSectionDesc.editorElt.offsetHeight\n        );\n\n        firstSectionDesc.previewDimension = new SectionDimension(\n            0,\n            firstSectionDesc.previewElt.offsetHeight\n        );\n\n        firstSectionDesc.tocDimension = new SectionDimension(\n            0,\n            firstSectionDesc.tocElt.offsetHeight\n        );\n\n        for (let i = 1; i < editorSvc.previewCtx.sectionDescList.length-1; i++) {\n            const nextSectionDesc = editorSvc.previewCtx.sectionDescList[i];\n\n            nextSectionDesc.editorDimension = new SectionDimension(\n                nextSectionDesc.editorElt.offsetTop,\n                nextSectionDesc.editorElt.offsetHeight\n            );\n\n            nextSectionDesc.previewDimension = new SectionDimension(\n                nextSectionDesc.previewElt.offsetTop,\n                nextSectionDesc.previewElt.offsetHeight\n            );\n\n            nextSectionDesc.tocDimension = new SectionDimension(\n                nextSectionDesc.tocElt.offsetTop,\n                nextSectionDesc.tocElt.offsetHeight\n            );\n        }\n    }\n};\n","\nexport const isGecko = 'MozAppearance' in document.documentElement.style;\nexport const isWebkit = 'WebkitAppearance' in document.documentElement.style;\nexport const isMsie = 'msTransform' in document.documentElement.style;\nexport const isMac = navigator.userAgent.indexOf('Mac OS X') !== -1;\n\nexport const defer = (() => {\n    const queue = new Array(1000);\n    let queueLength = 0;\n    function flush() {\n        for (let i = 0; i < queueLength; i += 1) {\n            try {\n                queue[i]();\n            }\n            catch (e) {\n                console.error(e.message, e.stack);\n            }\n            queue[i] = undefined;\n        }\n        queueLength = 0;\n    }\n\n    let iterations = 0;\n    const observer = new window.MutationObserver(flush);\n    const node = document.createTextNode('');\n    observer.observe(node, { characterData: true });\n\n    return (fn) => {\n        queue[queueLength] = fn;\n        queueLength += 1;\n        if (queueLength === 1) {\n            iterations = (iterations + 1) % 2;\n            node.data = iterations as any;\n        }\n    };\n})();\n\nexport const debounce = <T = Function>(func: T, wait = 0): T => {\n    let timeoutId;\n    let isExpected;\n    return (wait\n        ? () => {\n            clearTimeout(timeoutId);\n            timeoutId = setTimeout(func as any, wait);\n        }\n        : () => {\n            if (!isExpected) {\n                isExpected = true;\n                defer(() => {\n                    isExpected = false;\n                    (func as any)();\n                });\n            }\n        }) as any;\n};\n\n\nexport const findContainer = (elt, offset) => {\n    let containerOffset = 0;\n    let container;\n    let child = elt;\n    let limit = 0;\n    do {\n        container = child;\n        child = child.firstChild;\n        if (child) {\n            let limit = 0;\n            do {\n                const len = child.textContent.length;\n                if (containerOffset <= offset && containerOffset + len > offset) {\n                    break;\n                }\n                containerOffset += len;\n                child = child.nextSibling;\n            }\n            while (child && limit++ < 10000);\n        }\n    }\n    while (child && child.firstChild && child.nodeType !== 3 && limit++ < 10000);\n\n    if (child) {\n        return {\n            container: child,\n            offsetInContainer: offset - containerOffset,\n        };\n    }\n\n    limit = 0;\n    while (container.lastChild && limit++ < 10000) {\n        container = container.lastChild;\n    }\n    return {\n        container,\n        offsetInContainer: container.nodeType === 3 ? container.textContent.length : 0,\n    };\n}\n\n\nexport class EventEmittingClass {\n    private listenerMap = Object.create(null);\n\n    $trigger(eventType, ...args) {\n        const listeners = this.listenerMap[eventType];\n        if (listeners) {\n            listeners.forEach((listener) => {\n                // try {\n                listener.apply(this, args);\n                // } catch (e) {\n                //     // eslint-disable-next-line no-console\n                //     console.error(e.message, e.stack);\n                // }\n            });\n        }\n    }\n\n    on(eventType, listener) {\n        let listeners = this.listenerMap[eventType];\n        if (!listeners) {\n            listeners = [];\n            this.listenerMap[eventType] = listeners;\n        }\n        listeners.push(listener);\n    }\n\n    off(eventType, listener) {\n        const listeners = this.listenerMap[eventType];\n        if (listeners) {\n            const index = listeners.indexOf(listener);\n            if (index !== -1) {\n                listeners.splice(index, 1);\n            }\n        }\n    }\n}\n","import DiffMatchPatch from 'diff-match-patch';\nimport { EventEmittingClass, debounce } from './utils';\nimport { VanillaMirror } from './vanilla-mirror';\n\ntype Patch = {\n    length1: number,\n    length2: number,\n    start1: number,\n    start2: number,\n    diffs: [-1 | 0 | 1, string][]\n}\n\nclass State {\n    patches: Patch[];\n\n    constructor(\n        private undoManager: UndoManager\n    ) { }\n\n    // TODO: This is wired poorly, rewrite.\n    addToUndoStack() {\n        this.undoManager.undoStack.push(this);\n        this.patches = this.undoManager.previousPatches;\n        this.undoManager.previousPatches = [];\n    }\n\n    addToRedoStack() {\n        this.undoManager.redoStack.push(this);\n        this.patches = this.undoManager.previousPatches;\n        this.undoManager.previousPatches = [];\n    }\n}\n\n// Why is this a separate class?\nclass StateMgr {\n    currentTime: number;\n    lastTime: number;\n    lastMode: 'typing' | 'single';\n    currentMode: 'typing' | 'single';\n\n    constructor(\n        private undoManager: UndoManager\n    ) { }\n\n    isBufferState() {\n        this.currentTime = Date.now();\n        return this.currentMode !== 'single' &&\n            this.currentMode === this.lastMode &&\n            this.currentTime - this.lastTime < this.undoManager.options.bufferStateUntilIdle;\n    }\n\n    setDefaultMode(mode: \"typing\" | \"single\") {\n        this.currentMode = this.currentMode || mode;\n    }\n\n    resetMode() {\n        this.currentMode = undefined;\n        this.lastMode = undefined;\n    }\n\n    saveMode() {\n        this.lastMode = this.currentMode;\n        this.currentMode = undefined;\n        this.lastTime = this.currentTime;\n    }\n}\n\nexport class UndoManager extends EventEmittingClass {\n    diffMatchPatch = new DiffMatchPatch();\n    selectionMgr;\n    undoStack: State[] = [];\n    redoStack: State[] = [];\n    currentState: State;\n    previousPatches: Patch[] = [];\n    currentPatches: Patch[] = [];\n\n    stateMgr = new StateMgr(this);\n\n    get canUndo () { return this.undoStack.length != 0 };\n    get canRedo () { return this.redoStack.length != 0 };\n\n    options = {\n        undoStackMaxSize: 200,\n        bufferStateUntilIdle: 1000,\n    }\n\n    constructor(\n        private editor: VanillaMirror,\n        options?: {\n            undoStackMaxSize: number,\n            bufferStateUntilIdle: number\n        }\n    ) {\n        super();\n\n        this.options = { ...options || {} as any };\n        this.selectionMgr = editor.selectionMgr;\n        this.currentState = this.currentState || new State(this);\n    }\n\n    setCurrentMode(mode) {\n        this.stateMgr.currentMode = mode;\n    };\n    setDefaultMode = this.stateMgr.setDefaultMode.bind(this)\n\n    addDiffs(oldContent: string, newContent, diffs) {\n        const patches = this.diffMatchPatch.patch_make(oldContent, diffs);\n        patches.forEach(patch => this.currentPatches.push(patch));\n    };\n\n    saveCurrentPatches() {\n        // Move currentPatches into previousPatches\n        Array.prototype.push.apply(this.previousPatches, this.currentPatches);\n        this.currentPatches = [];\n    }\n\n    saveState = debounce(() => {\n        this.redoStack.length = 0;\n        if (!this.stateMgr.isBufferState()) {\n            this.currentState.addToUndoStack();\n\n            // Limit the size of the stack\n            while (this.undoStack.length > this.options.undoStackMaxSize) {\n                this.undoStack.shift();\n            }\n        }\n        this.saveCurrentPatches();\n        this.currentState = new State(this);\n        this.stateMgr.saveMode();\n        this.$trigger('undoStateChange');\n    });\n\n    restoreState(patchesParam: Patch[], isForward = false) {\n        let patches = patchesParam;\n        // Update editor\n        const content = this.editor.getContent();\n        if (!isForward) {\n            patches = this.diffMatchPatch.patch_deepCopy(patches).reverse();\n            patches.forEach((patch) => {\n                patch.diffs.forEach((diff) => {\n                    // TODO: This might be a bug.\n                    // @ts-ignore\n                    diff[0] = -diff[0];\n                });\n            });\n        }\n\n        const newContent = this.diffMatchPatch.patch_apply(patches, content)[0];\n        const newContentText = newContent.text || newContent;\n        const range = this.editor.setContent(newContentText, true);\n        const selection = newContent.selection || {\n            start: range.end,\n            end: range.end,\n        };\n\n        this.selectionMgr.setSelectionStartEnd(selection.start, selection.end);\n        this.selectionMgr.updateCursorCoordinates(true);\n\n        this.stateMgr.resetMode();\n        this.$trigger('undoStateChange');\n        this.editor.adjustCursorPosition();\n    }\n\n    undo() {\n        const state = this.undoStack.pop();\n        if (!state) return;\n\n        this.saveCurrentPatches();\n        this.currentState.addToRedoStack();\n        this.restoreState(this.currentState.patches);\n        this.previousPatches = state.patches;\n        this.currentState = state;\n    }\n\n    redo() {\n        const state = this.redoStack.pop();\n        if (!state) return;\n\n        this.currentState.addToUndoStack();\n        this.restoreState(state.patches, true);\n        this.previousPatches = state.patches;\n        this.currentState = state;\n    }\n}\n\n","import { VanillaMirror } from './vanilla-mirror';\n\nexport class Watcher {\n\n    isWatching = false;\n    contentObserver: MutationObserver;\n\n    constructor(private editor: VanillaMirror, public listener) {\n\n    }\n\n    startWatching = () => {\n        this.stopWatching();\n        this.isWatching = true;\n\n        this.contentObserver = new MutationObserver(this.listener);\n        this.contentObserver.observe(this.editor.$contentElt, {\n            childList: true,\n            subtree: true,\n            characterData: true,\n        });\n    }\n\n    stopWatching = () => {\n        if (this.contentObserver) {\n            this.contentObserver.disconnect();\n            this.contentObserver = undefined;\n        }\n        this.isWatching = false;\n    }\n\n    noWatch = (cb) => {\n        if (this.isWatching === true) {\n            this.stopWatching();\n            cb();\n            this.startWatching();\n        } else {\n            cb();\n        }\n    }\n}\n\n","import markdownConversionSvc from '../markdownConversionSvc';\nimport Prism from '../prism';\nimport { EventEmittingClass, debounce } from './utils';\nimport { VanillaMirror } from './vanilla-mirror';\nimport type * as Monaco from 'monaco-editor';\n\nexport class Section {\n    text;\n    data: \"list\" | \"main\" | \"blockquote\";\n    elt: HTMLDivElement;\n\n    // AFAIK nothing ever sets this\n    forceHighlighting = false;\n\n    monaco: Monaco.editor.IStandaloneCodeEditor;\n\n    get ulid() {\n        return this.elt.getAttribute(\"ulid\")\n    }\n\n    constructor(text: string | any) {\n        this.text = text.text === undefined ? text : text.text;\n        this.data = text.data;\n    }\n\n    setElement(elt: HTMLDivElement) {\n        this.elt = elt;\n        elt['section'] = this;\n    }\n}\n\nexport class Highlighter extends EventEmittingClass {\n    isComposing = 0;\n    trailingNode: HTMLElement;\n    get contentElt() { return this.editor.$contentElt };\n    cancelComposition: any;\n\n    sectionList: Section[] = [];\n    insertBeforeSection: Section;\n\n    readonly trailingNodeTag = 'div';\n    readonly lfHtml = `<span class=\"lf\">\\n</span>`;\n\n    constructor(private editor: VanillaMirror) {\n        super();\n    }\n\n    fixContent(modifiedSections: Section[], removedSections: Section[], noContentFix: boolean) {\n        modifiedSections.forEach((section) => {\n            section.forceHighlighting = true;\n            if (!noContentFix) {\n                // if (isWebkit) {\n                //     [...section.elt.getElementsByClassName('hd-lf')]\n                //         .forEach(lfElt => lfElt.parentNode.removeChild(lfElt));\n                //     [...section.elt.getElementsByTagName('br')]\n                //         .forEach(brElt => brElt.parentNode.replaceChild(document.createTextNode('\\n'), brElt));\n                // }\n                if (section.elt.textContent.slice(-1) !== '\\n') {\n                    section.elt.appendChild(document.createTextNode('\\n'));\n                }\n            }\n        });\n    }\n\n    addTrailingNode() {\n        this.trailingNode = document.createElement(this.trailingNodeTag);\n        this.contentElt.appendChild(this.trailingNode);\n    };\n\n    calcLineNumbers = debounce(() => {\n        [...(this.editor.$contentElt?.querySelectorAll(\".lf\") || []) as any].forEach((e, i) => {\n            e.setAttribute(\"data-linenumber\", i+1);\n        });\n    }, 25)\n\n    sectionHighlighter(section: Section) {\n        const highlighted = Prism.highlight(section.text, Prism.languages.markdown, 'markdown');\n\n        return `<div class=\"prism language-markdown\">${highlighted}</div>`;\n    }\n\n    parseSections(content: string, isInit = false) {\n        if (this.isComposing && !this.cancelComposition)\n            return this.sectionList;\n\n        this.cancelComposition = false;\n\n        const { editorSvc } = this.editor.ngEditor;\n        editorSvc.parsingCtx = markdownConversionSvc.parseSections(editorSvc.converter, content);\n\n        const newSectionList: Section[] = editorSvc.parsingCtx.sections\n            .map(sectionText => new Section(sectionText));\n\n        let modifiedSections: Section[] = [];\n        let sectionsToRemove: Section[] = [];\n        this.insertBeforeSection = undefined;\n\n        if (isInit) {\n            // Render everything if isInit\n            sectionsToRemove = this.sectionList;\n            this.sectionList = newSectionList;\n            modifiedSections = newSectionList;\n        }\n        else {\n            // Find modified section starting from top\n            let leftIndex = this.sectionList.length;\n            this.sectionList.find((section, index) => {\n                const newSection = newSectionList[index];\n                if (index >= newSectionList.length ||\n                    section.forceHighlighting ||\n                    // Check text modification\n                    section.text !== newSection.text ||\n                    // Check that section has not been detached or moved\n                    section.elt.parentNode !== this.contentElt ||\n                    // Check also the content since nodes can be injected in sections via copy/paste\n                    section.elt.textContent !== newSection.text\n                ) {\n                    leftIndex = index;\n                    return true;\n                }\n                return false;\n            });\n\n            // Find modified section starting from bottom\n            let rightIndex = -this.sectionList.length;\n            this.sectionList.slice().reverse().find((section, index) => {\n                const newSection = newSectionList[newSectionList.length - index - 1];\n                if (index >= newSectionList.length ||\n                    section.forceHighlighting ||\n                    // Check modified\n                    section.text !== newSection.text ||\n                    // Check that section has not been detached or moved\n                    section.elt.parentNode !== this.contentElt ||\n                    // Check also the content since nodes can be injected in sections via copy/paste\n                    section.elt.textContent !== newSection.text\n                ) {\n                    rightIndex = -index;\n                    return true;\n                }\n                return false;\n            });\n\n            if (leftIndex - rightIndex > this.sectionList.length) {\n                // Prevent overlap\n                rightIndex = leftIndex - this.sectionList.length;\n            }\n\n            const leftSections = this.sectionList.slice(0, leftIndex);\n            modifiedSections = newSectionList.slice(leftIndex, newSectionList.length + rightIndex);\n            const rightSections = this.sectionList.slice(this.sectionList.length + rightIndex, this.sectionList.length);\n            this.insertBeforeSection = rightSections?.[0];\n            sectionsToRemove = this.sectionList.slice(leftIndex, this.sectionList.length + rightIndex);\n            this.sectionList = leftSections.concat(modifiedSections).concat(rightSections);\n        }\n\n        // TODO: All of the rendering logic for the editor should be unified.\n        const highlight = (section: Section) => {\n            const initialMarkup = this.sectionHighlighter(section) as string;\n            const html = initialMarkup.replace(/\\n/g, this.lfHtml);\n\n            const sectionElt = document.createElement('div');\n            sectionElt.className = 'cledit-section';\n            sectionElt.innerHTML = html;\n            section.setElement(sectionElt);\n            this.$trigger('sectionHighlighted', section);\n        };\n\n        const newSectionEltList = document.createDocumentFragment();\n\n        modifiedSections.forEach((section) => {\n            section.forceHighlighting = false;\n            highlight(section);\n            newSectionEltList.appendChild(section.elt);\n        });\n\n        this.editor.watcher.noWatch(() => {\n            try {\n                if (isInit) {\n                    this.contentElt.innerHTML = '';\n                    this.contentElt.appendChild(newSectionEltList);\n                    this.addTrailingNode();\n                    return;\n                }\n\n                // Remove outdated sections\n                sectionsToRemove.forEach((section) => {\n                    // section may be already removed\n                    if (section.elt.parentNode === this.contentElt) {\n                        this.contentElt.removeChild(section.elt);\n                    }\n                    // To detect sections that come back with built-in undo\n                    section.elt['section'] = undefined;\n                });\n\n                if (this.insertBeforeSection !== undefined) {\n                    this.contentElt.insertBefore(newSectionEltList, this.insertBeforeSection.elt);\n                }\n                else {\n                    this.contentElt.appendChild(newSectionEltList);\n                }\n\n                // Remove unauthorized nodes (text nodes outside of sections or\n                // duplicated sections via copy/paste)\n                let childNode = this.contentElt.firstChild;\n                while (childNode) {\n                    const nextNode = childNode.nextSibling;\n                    if (!childNode['section']) {\n                        this.contentElt.removeChild(childNode);\n                    }\n                    childNode = nextNode;\n                }\n                this.addTrailingNode();\n                this.$trigger('highlighted');\n\n                if (this.editor.selectionMgr.hasFocus) {\n                    this.editor.selectionMgr.restoreSelection();\n                    this.editor.selectionMgr.updateCursorCoordinates();\n                }\n\n                if (this.editor.ngEditor.showLineNumbers)\n                    this.calcLineNumbers();\n            }\n            catch(err) {\n                // Handle the error to prevent the watcher from failing.\n                console.error(err);\n            }\n        });\n\n        return this.sectionList;\n    };\n}\n\n\n","import { EventEmittingClass, debounce, findContainer } from './utils';\nimport { VanillaMirror } from './vanilla-mirror';\n\nexport class SelectionMgr extends EventEmittingClass {\n    get contentElt() { return this.editor.$contentElt };\n    get scrollElt() { return this.editor.$contentElt.parentElement };\n\n    get hasFocus() { return this.contentElt === document.activeElement };\n\n    lastSelectionStart = 0;\n    lastSelectionEnd = 0;\n    selectionStart = 0;\n    selectionEnd = 0;\n    selectionIsReverse = false;\n\n    selectionStartNode: Node;\n    selectionStartOffset: number;\n    selectionEndNode: Node;\n    selectionEndOffset: number;\n\n    cursorCoordinates: {\n        top: number,\n        height: number,\n        left: number\n    } = { top: 0, height: 0, left: 0 };\n\n    adjustScroll;\n    oldSelectionRange;\n\n    constructor(private editor: VanillaMirror) {\n        super();\n    }\n\n    createRange(start: number | { node, offset; }, end: number | { node, offset; }) {\n        let startContainer = typeof start === 'number'\n            ? this.editor.getNodeAndOffsetAtIndex(start < 0 ? 0 : start)\n            : start;\n        startContainer = startContainer ?? this.editor.getNodeAndOffsetAtIndex(0)\n\n        let endContainer = startContainer;\n        if (start !== end) {\n            endContainer = typeof end === 'number'\n                ? this.editor.getNodeAndOffsetAtIndex(end < 0 ? 0 : end)\n                : end;\n        }\n\n        const range = document.createRange();\n        range.setStart(startContainer.node, startContainer.offset);\n        range.setEnd(\n            endContainer?.node ?? startContainer.node,\n            endContainer?.offset ?? startContainer.offset\n        );\n\n        return range;\n    };\n\n    updateCursorCoordinates(adjustScrollParam = false) {\n        this.adjustScroll = this.adjustScroll || adjustScrollParam;\n\n        const startNodeOffset = this.editor.getNodeAndOffsetAtIndex(this.selectionStart);\n        const endNodeOffset = this.selectionStart == this.selectionEnd\n            ? startNodeOffset\n            : this.editor.getNodeAndOffsetAtIndex(this.selectionEnd);\n\n        const coordinates = this.getCoordinates(endNodeOffset);\n\n        // Keep track of both the start and end offset nodes\n        this.selectionStartNode = startNodeOffset.node;\n        this.selectionStartOffset = startNodeOffset.offset;\n        this.selectionEndNode = endNodeOffset.node;\n        this.selectionEndOffset = endNodeOffset.offset;\n\n        // This is the cardinal coordinates of the selection top-left point.\n        // ? why is this even here\n        if (this.cursorCoordinates.top !== coordinates.top ||\n            this.cursorCoordinates.height !== coordinates.height ||\n            this.cursorCoordinates.left !== coordinates.left\n        ) {\n            this.cursorCoordinates = coordinates;\n            this.$trigger('cursorCoordinatesChanged', coordinates);\n        }\n\n        // Scroll the coords into view\n        if (this.adjustScroll) {\n            // let scrollEltHeight = this.scrollElt.clientHeight;\n            // if (typeof this.adjustScroll === 'number') {\n            //     scrollEltHeight -= this.adjustScroll;\n            // }\n            // const adjustment = (scrollEltHeight / 2) * .15;\n            // let cursorTop = this.cursorCoordinates.top + (this.cursorCoordinates.height / 2);\n            // // Adjust cursorTop with contentElt position relative to scrollElt\n            // cursorTop += (this.contentElt.getBoundingClientRect().top - this.scrollElt.getBoundingClientRect().top)\n            //     + this.scrollElt.scrollTop;\n            // const minScrollTop = cursorTop - adjustment;\n            // const maxScrollTop = (cursorTop + adjustment) - scrollEltHeight;\n\n            // if (this.scrollElt.scrollTop > minScrollTop) {\n            //     this.scrollElt.scrollTop = minScrollTop;\n            // }\n            // else if (this.scrollElt.scrollTop < maxScrollTop) {\n            //     this.scrollElt.scrollTop = maxScrollTop;\n            // }\n\n            const { top, height } = this.cursorCoordinates;\n            const caretTop = top + height;\n\n            // console.log(caretTop, this.scrollElt)\n\n            if (caretTop > (this.scrollElt.scrollTop + this.scrollElt.clientHeight) - 24) {\n                this.scrollElt.scrollTo({\n                    top: Math.max(0, (caretTop - this.scrollElt.clientHeight) + 24)\n                });\n            }\n        }\n        this.adjustScroll = false;\n    };\n\n    /**\n     * Check if the selection has been changed,\n     * if so, emit a `selectionChanged` event.\n     */\n    checkSelection(selectionRange) {\n        if (!this.oldSelectionRange ||\n            this.oldSelectionRange.startContainer !== selectionRange.startContainer ||\n            this.oldSelectionRange.startOffset !== selectionRange.startOffset ||\n            this.oldSelectionRange.endContainer !== selectionRange.endContainer ||\n            this.oldSelectionRange.endOffset !== selectionRange.endOffset\n        ) {\n            this.oldSelectionRange = selectionRange;\n            this.$trigger('selectionChanged', this.selectionStart, this.selectionEnd, selectionRange);\n            return true;\n        }\n        return false;\n    };\n\n\n    restoreSelection() {\n        const min = Math.min(this.selectionStart, this.selectionEnd);\n        const max = Math.max(this.selectionStart, this.selectionEnd);\n        const selectionRange = this.createRange(min, max);\n\n        if (!document.contains(selectionRange.commonAncestorContainer)) {\n            return null;\n        }\n\n        const selection = window.getSelection();\n        selection.removeAllRanges();\n        const isBackward = this.selectionStart > this.selectionEnd;\n\n        if (isBackward && selection.extend) {\n            const beginRange = selectionRange.cloneRange();\n            beginRange.collapse(false);\n            selection.addRange(beginRange);\n            selection.extend(selectionRange.startContainer, selectionRange.startOffset);\n        }\n        else {\n            selection.addRange(selectionRange);\n        }\n\n        this.checkSelection(selectionRange);\n        return selectionRange;\n    };\n\n    setSelection(start: number = this.selectionStart, end: number = this.selectionEnd) {\n        this.selectionStart = start < 0 ? 0 : start;\n        this.selectionEnd = end < 0 ? 0 : end;\n        this.lastSelectionStart = this.selectionStart;\n        this.lastSelectionEnd = this.selectionEnd;\n    }\n\n    setSelectionStartEnd(start: number, end: number, restoreSelection = true) {\n        this.setSelection(start, end);\n        if (restoreSelection && this.hasFocus) {\n            return this.restoreSelection();\n        }\n        return null;\n    }\n\n    saveSelectionState(selection: Selection = window.getSelection()) {\n        if (!this.hasFocus) {\n            return null;\n        }\n\n        let { selectionStart, selectionEnd } = this;\n\n        if (selection.rangeCount <= 0) {\n            return null;\n        }\n\n        const selectionRange = selection.getRangeAt(0);\n        let node = selectionRange.startContainer;\n\n        if (!(this.contentElt.compareDocumentPosition(node) & window.Node.DOCUMENT_POSITION_CONTAINED_BY)\n            && this.contentElt !== node\n        ) {\n            return null;\n        }\n\n        let offset = selectionRange.startOffset;\n        if (node.firstChild && offset > 0) {\n            node = node.childNodes[offset - 1];\n            offset = node.textContent.length;\n        }\n\n        let container = node;\n        while (node !== this.contentElt) {\n            node = node.previousSibling;\n            while (node) {\n                offset += node.textContent?.length ?? 0;\n                node = node.previousSibling;\n            }\n            node = container.parentNode;\n            container = node;\n        }\n\n        let selectionText = selectionRange.toString();\n        // Fix end of line when only br is selected\n        const brElt = selectionRange.endContainer.firstChild;\n        if (brElt && brElt['tagName'] === 'BR' && selectionRange.endOffset === 1) {\n            selectionText += '\\n';\n        }\n\n        const isBackwardsSelection = (() => {\n            if (selection.anchorNode === selection.focusNode) {\n                return selection.anchorOffset > selection.focusOffset;\n            }\n\n            const anchorTree: HTMLElement[] = [];\n            const focusTree: HTMLElement[] = [];\n            let _focusNode: Node = selection.focusNode;\n            let _anchorNode: Node = selection.anchorNode;\n\n            // Build two node paths\n            do {\n                focusTree.unshift(_focusNode?.parentElement);\n                _focusNode = _focusNode?.parentElement;\n            }\n            while (_focusNode && _focusNode != this.editor.$contentElt)\n\n            do {\n                anchorTree.unshift(_anchorNode?.parentElement);\n                _anchorNode = _anchorNode?.parentElement;\n            }\n            while (_anchorNode && _anchorNode != this.editor.$contentElt)\n\n            // Walk down tree A until it diverges from tree B\n            // Max 128 depth.\n            for (let i = 0; i < 128; i++) {\n\n                // The trees have diverged!\n                if (!focusTree[i]) {\n                    const commonElement = focusTree[i - 1];\n                    const nodes = [...commonElement.childNodes as any];\n                    return nodes.indexOf(selection.focusNode) < nodes.indexOf(anchorTree[i]);\n                }\n\n                // The trees have diverged!\n                if (!anchorTree[i]) {\n                    const commonElement = anchorTree[i - 1];\n                    const nodes = [...commonElement.childNodes as any];\n                    return nodes.indexOf(focusTree[i]) < nodes.indexOf(selection.anchorNode);\n                }\n\n                // The trees have diverged!\n                if (anchorTree[i] != focusTree[i]) {\n                    const commonElement = anchorTree[i - 1];\n                    const nodes = [...commonElement.childNodes as any];\n                    return nodes.indexOf(focusTree[i]) < nodes.indexOf(anchorTree[i]);\n                }\n            }\n            return false;\n        })();\n\n        if (isBackwardsSelection) {\n            selectionStart = offset + selectionText.length;\n            selectionEnd = offset;\n        }\n        else {\n            selectionStart = offset;\n            selectionEnd = offset + selectionText.length;\n        }\n\n        if (selectionStart >= this.editor.value.length) {\n            // If cursor is after the trailingNode\n            selectionEnd = this.editor.value.length;\n            selectionStart = selectionEnd;\n            return this.setSelectionStartEnd(selectionStart, selectionEnd);\n        }\n        else {\n            this.setSelection(selectionStart, selectionEnd);\n            const result = this.checkSelection(selectionRange);\n            // selectionRange doesn't change when selection is at the start of a section\n            return result || this.lastSelectionStart !== this.selectionStart;\n        }\n    }\n\n    getSelectedText() {\n        const min = Math.min(this.selectionStart, this.selectionEnd);\n        const max = Math.max(this.selectionStart, this.selectionEnd);\n\n        return this.editor.getContent().substring(min, max);\n    };\n\n    private getCoordinates(offset: {node, offset}) {\n        if (!offset) return {\n            top: 0,\n            height: 0,\n            left: 0\n        }\n        const container = offset.node;\n        const offsetInContainer = offset.offset;\n\n        let containerElt: HTMLElement = container as any;\n        if (!containerElt.hasChildNodes() && container.parentNode) {\n            containerElt = container.parentNode as HTMLElement;\n        }\n\n        let isInvisible = false;\n        while (!containerElt.offsetHeight) {\n            isInvisible = true;\n            if (containerElt.previousSibling) {\n                containerElt = containerElt.previousSibling as HTMLElement;\n            }\n            else {\n                containerElt = containerElt.parentNode as HTMLElement;\n                if (!containerElt) {\n                    return {\n                        top: 0,\n                        height: 0,\n                        left: 0,\n                    };\n                }\n            }\n        }\n\n        let rect;\n        let left = 'left';\n        if (isInvisible || container.textContent === '\\n') {\n            rect = containerElt.getBoundingClientRect();\n        }\n        else {\n            const inputOffset = offset['editorOffset'];\n            const selectedChar = this.editor.value[inputOffset];\n            let startOffset = {\n                node: container,\n                offset: offsetInContainer,\n            };\n            let endOffset = {\n                node: container,\n                offset: offsetInContainer,\n            };\n            if (inputOffset > 0 && (selectedChar === undefined || selectedChar === '\\n')) {\n                left = 'right';\n                if (startOffset.offset === 0) {\n                    // Need to calculate offset-1\n                    // TODO: This may be a bug\n                    startOffset = inputOffset - 1 as any;\n                }\n                else {\n                    startOffset.offset -= 1;\n                }\n            }\n            else if (endOffset.offset === container.textContent.length) {\n                // When cursor starts at 0 ...?\n                // Need to calculate offset+1\n                endOffset = inputOffset + 1;\n            }\n            else {\n                endOffset.offset += 1;\n            }\n            const range = this.createRange(startOffset, endOffset);\n            rect = range.getBoundingClientRect();\n        }\n\n        const contentRect = this.contentElt.getBoundingClientRect();\n        return {\n            top: Math.round((rect.top - contentRect.top) + this.contentElt.scrollTop),\n            height: Math.round(rect.height),\n            left: Math.round((rect[left] - contentRect.left) + this.contentElt.scrollLeft),\n        };\n    };\n\n    getClosestWordOffset(offset: number) {\n        let offsetStart = 0;\n        let offsetEnd = 0;\n        let nextOffset = 0;\n\n        this.editor.getContent().split(/\\s/).find((word) => {\n            if (word) {\n                offsetStart = nextOffset;\n                offsetEnd = nextOffset + word.length;\n                if (offsetEnd > offset) {\n                    return true;\n                }\n            }\n            nextOffset += word.length + 1;\n            return false;\n        });\n\n        return {\n            start: offsetStart,\n            end: offsetEnd,\n        };\n    };\n}\n\n\n","import { isMac } from './utils';\nimport { VanillaMirror } from './vanilla-mirror';\n\ntype State = {\n    before: string;\n    after: string;\n    selection: string;\n    isBackwardSelection: boolean;\n}\n\nexport function Keystroke(handler: (evt: KeyboardEvent, state: State, editor: VanillaMirror) => boolean, priority?) {\n    this.handler = handler;\n    this.priority = priority || 100;\n}\n\n\nlet clearNewline;\nconst charTypes = Object.create(null);\n\n// Word separators, as in Sublime Text\n'./\\\\()\"\\'-:,.;<>~!@#$%^&*|+=[]{}`~?'.split('').forEach((wordSeparator) => {\n    charTypes[wordSeparator] = 'wordSeparator';\n});\ncharTypes[' '] = 'space';\ncharTypes['\\t'] = 'space';\ncharTypes['\\n'] = 'newLine';\n\nfunction getNextWordOffset(text: string, offset: number, isBackward = false) {\n    let previousType;\n    let result = offset;\n    while ((isBackward && result > 0) || (!isBackward && result < text.length)) {\n        const currentType = charTypes[isBackward ? text[result - 1] : text[result]] || 'word';\n        if (previousType && currentType !== previousType) {\n            if (previousType === 'word' || currentType === 'space' || previousType === 'newLine' || currentType === 'newLine') {\n                break;\n            }\n        }\n        previousType = currentType;\n        if (isBackward) {\n            result -= 1;\n        }\n        else {\n            result += 1;\n        }\n    }\n    return result;\n}\n\nexport const defaultKeystrokes = [\n    // CTRL+Z, CTRL+Y\n    new Keystroke((evt, state, editor) => {\n        if ((!evt.ctrlKey && !evt.metaKey) || evt.altKey) {\n            return false;\n        }\n\n\n        let action;\n        if (evt.key.toLowerCase() == \"y\")\n            action = 'redo';\n        if (evt.key.toLowerCase() == \"z\")\n            action = evt.shiftKey ? 'redo' : 'undo';\n\n        if (action) {\n            evt.preventDefault();\n            setTimeout(() => editor.undoMgr[action](), 10);\n            return true;\n        }\n        return false;\n    }),\n\n    // Bracket matching  () {} []\n    new Keystroke((evt, state, editor) => {\n        if ((!evt.ctrlKey && !evt.metaKey) || evt.altKey) {\n            return false;\n        }\n\n        const isInPrism = editor.selectionMgr;\n\n        // let action;\n        let boundChars: [string, string];\n\n        switch(evt.key) {\n            case (\"(\"): boundChars = [\"(\", \")\"]; break;\n            case (\"{\"): boundChars = [\"{\", \"}\"]; break;\n            case (\"[\"): boundChars = [\"[\", \"]\"]; break;\n            case (\"<\"): boundChars = [\"<\", \">\"]; break;\n        }\n\n        if (boundChars) {\n\n        }\n\n        //     action = 'redo';\n        // if (evt.key.toLowerCase() == \"y\")\n        //     action = evt.shiftKey ? 'redo' : 'undo';\n\n        // if (action) {\n        //     evt.preventDefault();\n        //     setTimeout(() => editor.undoMgr[action](), 10);\n        //     return true;\n        // }\n        return false;\n    }),\n\n    // TAB\n    new Keystroke((evt, state, editor) => {\n        if (evt.key !== 'Tab' || evt.metaKey || evt.ctrlKey) {\n            return false;\n        }\n\n        const strSplice = (str: string, i: number, remove: number, add = '') =>\n            str.slice(0, i) + add + str.slice(i + (+remove || 0));\n\n        evt.preventDefault();\n        const isInverse = evt.shiftKey;\n        const lf = state.before.lastIndexOf('\\n') + 1;\n        const indentText = ''.padStart(editor.ngEditor.tabSize, editor.ngEditor.tabChar);\n\n        if (isInverse) {\n            if (/\\s/.test(state.before.charAt(lf))) {\n                state.before = strSplice(state.before, lf, editor.ngEditor.tabSize);\n            }\n            state.selection = state.selection.replace(new RegExp(`^([ ]{${editor.ngEditor.tabSize}}|\\t)`, 'gm'), '');\n        }\n        else if (state.selection) {\n            // const beforeLen = state.selection.length;\n            state.before = strSplice(state.before, lf, 0, indentText);\n            state.selection = state.selection.replace(/\\n(?=[\\s\\S])/g, '\\n' + indentText);\n            // const newChars = state.selection.length - beforeLen;\n\n            // editor.getNodeAtIndex()\n            // const sel = window.getSelection();\n            // sel.extend(sel.anchorNode, sel.anchorOffset + newChars);\n        }\n        else {\n            state.before += indentText;\n        }\n        return true;\n    }),\n\n    // ENTER\n    new Keystroke((evt, state, editor) => {\n        if (evt.key !== 'Enter') {\n            clearNewline = false;\n\n            return false;\n        }\n\n        const lf = state.before.lastIndexOf('\\n') + 1;\n        if (clearNewline) {\n            state.before = state.before.substring(0, lf);\n            state.selection = '';\n            clearNewline = false;\n\n            return true;\n        }\n\n        clearNewline = false;\n        const previousLine = state.before.slice(lf);\n        const currentLine = state.after.slice(0, state.after.indexOf('\\n'));\n        const indent = previousLine.match(/^\\s*/)[0];\n\n        const listRx = /^\\s*[-*]\\s*\\S?/;\n        const orderedListRx = /^\\s*\\d+\\.\\s*\\S?/;\n        const checkListRx = /^\\s*-\\s*\\[[ xX]?\\]\\s*\\S?/;\n\n        const isList        = listRx.test(previousLine) && !listRx.test(currentLine);\n        const isOrderedList = orderedListRx.test(previousLine) && !orderedListRx.test(currentLine);\n        const isCheckList   = checkListRx.test(previousLine) && !checkListRx.test(currentLine);\n\n        editor.undoMgr.setCurrentMode('single');\n\n        let prefix = '';\n        if (isList) prefix = '- ';\n        if (isOrderedList) {\n            const prevNumber = previousLine.match(/^\\s*(?<num>\\d+)\\.\\s*\\S/)?.groups?.['num'];\n\n            let num = parseInt(prevNumber);\n            if (Number.isNaN(num))\n                num = 1;\n            else\n                num++;\n            prefix = num + '. ';\n        }\n        if (isCheckList) prefix = '- [ ] ';\n\n        if (indent.length > 0 || isList || isOrderedList || isCheckList)\n            clearNewline = true;\n\n        state.before += `\\n${indent}${prefix}`;\n        state.selection = '';\n        evt.preventDefault();\n\n        setTimeout(() => {\n            editor.selectionMgr.updateCursorCoordinates(true)\n        }, 1);\n\n        return true;\n    }),\n\n    // BACKSPACE, DELETE\n    // new Keystroke((evt, state, editor) => {\n    //     if (evt.key !== 'Backspace' && evt.key !== 'Delete') {\n    //         return false;\n    //     }\n\n    //     editor.undoMgr.setCurrentMode('delete');\n    //     if (!state.selection) {\n    //         const isJump = (isMac && evt.altKey) || (!isMac && evt.ctrlKey);\n    //         if (isJump) {\n    //             // Custom kill word behavior\n    //             const text = state.before + state.after;\n    //             const offset = getNextWordOffset(text, state.before.length, evt.key === 'Backspace');\n    //             if (evt.key === 'Backspace') {\n    //                 state.before = state.before.slice(0, offset);\n    //             }\n    //             else {\n    //                 state.after = state.after.slice(offset - text.length);\n    //             }\n    //             return true;\n    //         }\n    //         else if (evt.key == 'Backspace' && state.before.slice(-1) === '\\n') {\n    //             // Special treatment for end of lines\n    //             state.before = state.before.slice(0, -1);\n    //             evt.preventDefault();\n    //             return true;\n    //         }\n    //         else if (evt.key == 'Delete' && state.after.slice(0, 1) === '\\n') {\n    //             state.after = state.after.slice(1);\n    //             evt.preventDefault();\n    //             return true;\n    //         }\n    //         return false;\n    //     }\n    //     else {\n    //         state.selection = '';\n    //         return true;\n    //     }\n    // }),\n\n    // LEFT_ARROW, RIGHT_ARROW\n    new Keystroke((evt, state, editor) => {\n        if (evt.code !== 'ArrowLeft' && evt.code !== 'ArrowRight') {\n            return false;\n        }\n        const isJump = (isMac && evt.altKey) || (!isMac && evt.ctrlKey);\n        if (!isJump) {\n            return false;\n        }\n\n        // Custom jump behavior\n        const textContent = editor.getContent();\n        const offset = getNextWordOffset(\n            textContent,\n            editor.selectionMgr.selectionEnd,\n            evt.code == \"ArrowLeft\",\n        );\n        if (evt.shiftKey) {\n            // rebuild the state completely\n            const min = Math.min(editor.selectionMgr.selectionStart, offset);\n            const max = Math.max(editor.selectionMgr.selectionStart, offset);\n            state.before = textContent.slice(0, min);\n            state.after = textContent.slice(max);\n            state.selection = textContent.slice(min, max);\n            state.isBackwardSelection = editor.selectionMgr.selectionStart > offset;\n        }\n        else {\n            state.before = textContent.slice(0, offset);\n            state.after = textContent.slice(offset);\n            state.selection = '';\n        }\n        evt.preventDefault();\n        return true;\n    }),\n];\n","import DiffMatchPatch from 'diff-match-patch';\nimport TurndownService from 'turndown/lib/turndown.browser.umd';\nimport type * as Monaco from 'monaco-editor';\n\nimport { UndoManager } from './undo-manager';\nimport { Watcher } from './watcher';\nimport { EventEmittingClass, debounce } from './utils';\nimport { Highlighter } from './highlighter';\nimport { SelectionMgr } from './selection-manager';\nimport { defaultKeystrokes } from './keystroke';\nimport { StackEditorComponent } from '../editor.component';\n\nexport class VanillaMirror extends EventEmittingClass {\n\n    ignoreUndo = false;\n    noContentFix = false;\n    skipSaveSelection: boolean;\n    $markers = {};\n    $keystrokes = [];\n    value = '';\n    get $contentElt() { return this.editorElt };\n\n    watcher = new Watcher(this, this.onMutationObserved.bind(this));\n    highlighter = new Highlighter(this);\n    diffMatchPatch = new DiffMatchPatch();\n    selectionMgr = new SelectionMgr(this);\n    undoMgr = new UndoManager(this);\n\n    mouseDownSelectionCoords = {\n        selectionStart: 0,\n        selectionEnd: 0\n    }\n\n    turndownService = new TurndownService({\n        \"headingStyle\": \"atx\",\n        \"hr\": \"----------\",\n        \"bulletListMarker\": \"-\",\n        \"codeBlockStyle\": \"fenced\",\n        \"fence\": \"```\",\n        \"emDelimiter\": \"_\",\n        \"strongDelimiter\": \"**\",\n        \"linkStyle\": \"inlined\",\n        \"linkReferenceStyle\": \"full\"\n    });\n\n    constructor(\n        public ngEditor: StackEditorComponent,\n        private editorElt: HTMLElement,\n        private lastTextContent: string = \" \"\n    ) {\n        super();\n\n        if (typeof this.lastTextContent != 'string')\n            this.lastTextContent = '';\n        if (!this.lastTextContent.endsWith(\"\\n\"))\n            this.lastTextContent += \"\\n\\n\";\n\n        window['editor'] = this;\n\n        this.toggleEditable(true);\n\n        // Disable escaping\n        this.turndownService.escape = str => str;\n\n        // This handles 'Enter' and keyboard arrow events.\n        editorElt.addEventListener('keydown', this.keydownHandler((evt) => this.onKeyDown(evt)));\n        editorElt.addEventListener('paste', (evt) => this.onPaste(evt));\n\n        // Mouseup can happen outside the editor element\n        editorElt.addEventListener('mouseup', this.onMouseUp);\n        editorElt.addEventListener('mousedown', this.onMouseDown);\n\n        // Resize provokes cursor coordinate changes\n        window.addEventListener('resize', this.onWindowResize);\n        document.addEventListener(\"selectionchange\", this.onSelectionChange);\n\n        this.addKeystroke(defaultKeystrokes);\n\n        this.watcher.startWatching();\n    }\n\n    destroy() {\n        this.watcher.stopWatching();\n\n        window.removeEventListener('resize', this.onWindowResize);\n        document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n\n    toggleEditable(isEditable: boolean) {\n        this.editorElt.contentEditable = isEditable == null ? !this.editorElt.contentEditable : isEditable as any;\n        this.editorElt.spellcheck = false;\n    }\n\n    onMouseUp: (evt: MouseEvent) => void = ((evt: MouseEvent) => {\n        const { selectionStart, selectionEnd } = this.mouseDownSelectionCoords;\n\n        // If selection is unchanged, deselect the text.\n        if (\n            selectionStart == this.selectionMgr.lastSelectionStart &&\n            selectionEnd == this.selectionMgr.lastSelectionEnd\n        ) {\n            this.rebaseSelectionByPixel(evt.clientX, evt.clientY);\n        }\n    }).bind(this);\n\n    onMouseDown: (evt: MouseEvent) => void = ((evt: MouseEvent) => {\n        const { selectionStart, selectionEnd } = this.selectionMgr;\n        this.mouseDownSelectionCoords = {\n            selectionStart, selectionEnd\n        };\n    }).bind(this);\n\n    onWindowResize: () => void = (() => {\n        this.selectionMgr.updateCursorCoordinates();\n    }).bind(this)\n\n    // TODO: may need to debounce this -- has been seen to cause CPU locking\n    onSelectionChange: () => void = (() => {\n\n        // If the editor isn't focused, don't perform updates\n        if (!document.activeElement?.classList?.contains(\"editor-inner\"))\n            return;\n\n        this.selectionMgr.saveSelectionState();\n        this.selectionMgr.updateCursorCoordinates(true);\n\n        const {\n            selectionStart,\n            selectionStartNode,\n            selectionStartOffset,\n            selectionEnd,\n            selectionEndNode,\n            selectionEndOffset\n        } = this.selectionMgr;\n\n        // console.log({\n        //     selectionStartNode,\n        //     selectionStartOffset,\n        //     selectionEndNode,\n        //     selectionEndOffset\n        // })\n\n        // Only check if we're in single selection mode.\n        if (selectionStart != selectionEnd)\n            return;\n        // Skip if the editor isn't focused\n        if (!this.editorElt.matches(':focus'))\n            return;\n\n        this.ngEditor.editorSvc.focus = \"editorContentEditable\";\n\n        // Build a tree of nodes up until the section container\n        let node = selectionEndNode.parentElement;\n        const nodeTree = [node];\n        while (node.parentElement && !node.classList.contains(\"cledit-section\"))\n            nodeTree.push(node = node.parentElement);\n\n        const sectionElement = node;\n        const ulid = sectionElement.getAttribute(\"ulid\");\n\n        const codeBlock = sectionElement.querySelector(\".code-block\");\n        if (codeBlock && nodeTree.includes(codeBlock as any)) {\n            const editor = codeBlock['_editor'] as Monaco.editor.IStandaloneCodeEditor;\n            const text = this.value;\n\n            const sectionIndex = this.ngEditor.editorSvc.sectionList\n                .findIndex(s => s.ulid == ulid);\n            const section = this.ngEditor.editorSvc.sectionList[sectionIndex];\n            const beforeSections = this.ngEditor.editorSvc.sectionList.slice(0, Math.max(0, sectionIndex));\n\n            const preLines = text.slice(0, selectionEnd).match(/[\\r\\n]/g)?.length || 0;\n            const preSectionLines = beforeSections.map(s => s.text).join('').match(/[\\r\\n]/g)?.length || 0;\n            const sectionLines = section.text.match(/[\\r\\n]/g)?.length || 0;\n            let lineNo = preLines - preSectionLines;\n            // Gets the line number of the current selection\n\n            // Round to the beginning/end\n            if (lineNo > sectionLines/2)\n                lineNo = sectionLines;\n            else if (lineNo < sectionLines/2)\n                lineNo = 0;\n\n            // console.log({\n            //     selectionEndOffset,\n            //     lineNo,\n            //     preLines,\n            //     preSectionLines\n            // })\n\n            this.ngEditor.editorSvc.focus = \"monaco\";\n\n            editor.setSelection({\n                startLineNumber: lineNo,\n                startColumn: 0,\n                endLineNumber: lineNo,\n                endColumn: 0\n            }, \"stackedit\");\n\n            editor.focus();\n        }\n    }).bind(this)\n\n    init() {\n        const sectionList = this.highlighter.parseSections(this.lastTextContent, true);\n        this.$trigger('contentChanged', this.lastTextContent, [0, this.lastTextContent], sectionList);\n\n        this.setSelection(0, 0);\n        this.selectionMgr.saveSelectionState();\n    }\n\n    getNodeAndOffsetAtIndex(index: number): { node: Node, offset: number } {\n        let i = 0;\n        const recursivelyFindNode = (el: HTMLElement) => {\n            // This doesn't have children, so we can simply read the textContent\n            if (el.nodeType != 1 || el.childNodes.length == 0) {\n                const cl = el.textContent.length;\n                if (index == 0 || i + cl > index) {\n                    const offset = Math.max(index - i, 0);\n                    return {\n                        node: el,\n                        offset,\n                        editorOffset: index\n                    };\n                }\n                else {\n                    i += cl;\n                }\n                return null;\n            }\n\n            // This has childNodes, and no content override\n            else {\n                // @ts-ignore\n                const children = [...el.childNodes];\n                for (let i = 0; i < children.length; i++) {\n                    const res = recursivelyFindNode(children[i]);\n                    if (res) return res;\n                }\n            }\n            return null;\n        };\n\n        return recursivelyFindNode(this.editorElt);\n    }\n\n    getContent(): string {\n        const recursivelyCollectChildrenText = (el) => {\n            // This doesn't have children, so we can simply read the textContent\n            if (el.nodeType != 1 || el.childNodes.length == 0) {\n                return el.textContent;\n            }\n\n            // This has childNodes, and no content override\n            else {\n                const sections = [...el.childNodes].map(c =>\n                    recursivelyCollectChildrenText(c));\n\n                return sections.join('');\n            }\n        }\n\n        const text = recursivelyCollectChildrenText(this.editorElt);\n\n\n        // Markdown-it sanitization (Mac/DOS to Unix)\n        // let textContent = contentElt.textContent.replace(/\\r[\\n\\u0085]?|[\\u2424\\u2028\\u0085]/g, '\\n');\n        let textContent = text.replace(/\\r[\\n\\u0085]?|[\\u2424\\u2028\\u0085]/g, '\\n');\n\n        // Append a newline at the end if one isn't present.\n        if (textContent.slice(-1) !== '\\n') {\n            textContent += '\\n';\n        }\n        return this.value = textContent;\n    }\n\n    onMutationObserved(mutations: MutationRecord[]) {\n\n        this.watcher.noWatch(() => {\n            const removedSections = [];\n            const modifiedSections = [];\n\n            const markModifiedSection = (node) => {\n                let currentNode = node;\n                while (currentNode && currentNode !== this.editorElt) {\n                    if (currentNode.section) {\n                        const array = currentNode.parentNode ? modifiedSections : removedSections;\n                        if (array.indexOf(currentNode.section) === -1) {\n                            array.push(currentNode.section);\n                        }\n                        return;\n                    }\n                    currentNode = currentNode.parentNode;\n                }\n            }\n\n            mutations.forEach((mutation) => {\n                markModifiedSection(mutation.target);\n                mutation.addedNodes.forEach(markModifiedSection);\n                mutation.removedNodes.forEach(markModifiedSection);\n            });\n\n            this.highlighter.fixContent(modifiedSections, removedSections, this.noContentFix);\n            this.noContentFix = false;\n        });\n\n        if (!this.skipSaveSelection) {\n            this.selectionMgr.saveSelectionState();\n        }\n        this.skipSaveSelection = false;\n\n        const newTextContent = this.getContent();\n        const diffs = this.diffMatchPatch.diff_main(this.lastTextContent, newTextContent);\n        Object.entries(this.$markers).forEach(([key, marker]) => {\n            (marker as any).adjustOffset(diffs);\n        });\n\n        const sectionList = this.highlighter.parseSections(newTextContent);\n        this.$trigger('contentChanged', newTextContent, diffs, sectionList);\n        if (!this.ignoreUndo) {\n            this.undoMgr.addDiffs(this.lastTextContent, newTextContent, diffs);\n            this.undoMgr.setDefaultMode('typing');\n            this.undoMgr.saveState();\n        }\n        this.ignoreUndo = false;\n        this.lastTextContent = newTextContent;\n        this.triggerSpellCheck();\n    }\n\n    // TODO: use better spell checker ?\n    triggerSpellCheck = debounce(() => {\n        // Hack for Chrome to trigger the spell checker\n        const selection = window.getSelection();\n        if (this.selectionMgr.hasFocus\n            && !this.highlighter.isComposing\n            && this.selectionMgr.selectionStart === this.selectionMgr.selectionEnd\n            && selection.modify\n        ) {\n            if (this.selectionMgr.selectionStart) {\n                selection.modify('move', 'backward', 'character');\n                selection.modify('move', 'forward', 'character');\n            } else {\n                selection.modify('move', 'forward', 'character');\n                selection.modify('move', 'backward', 'character');\n            }\n        }\n    }, 10);\n\n    // Detect editor changes\n    setSelection(start: number, end: number) {\n        this.selectionMgr.setSelectionStartEnd(start, end == null ? start : end);\n        this.selectionMgr.updateCursorCoordinates();\n    }\n\n    scrollCursorIntoView() {\n        this.selectionMgr.updateCursorCoordinates(true);\n    }\n\n    keydownHandler(handler) {\n        return (evt) => {\n            if (!['Control', 'Alt', 'Shift', 'Cmd'].includes(evt.key)) {\n                handler(evt);\n            }\n        };\n    }\n\n    adjustCursorPosition(force?) {\n        this.selectionMgr.saveSelectionState();\n    }\n\n    replaceContent(selectionStart, selectionEnd, replacement) {\n        const min = Math.min(selectionStart, selectionEnd);\n        const max = Math.max(selectionStart, selectionEnd);\n        const range = this.selectionMgr.createRange(min, max);\n        const rangeText = `${range}`;\n        // Range can contain a br element, which is not taken into account in rangeText\n        if (rangeText.length === max - min && rangeText === replacement) {\n            return null;\n        }\n        range.deleteContents();\n        range.insertNode(document.createTextNode(replacement));\n        return range;\n    }\n\n    addKeystroke(keystroke) {\n        const keystrokes = Array.isArray(keystroke) ? keystroke : [keystroke];\n        this.$keystrokes = this.$keystrokes\n            .concat(keystrokes)\n            .sort((keystroke1, keystroke2) => keystroke1.priority - keystroke2.priority);\n    }\n\n    setContent(value: string, noUndo?: boolean, maxStartOffsetOpt?: number) {\n        if (value === null || value === undefined)\n            value = '\\n';\n\n        this.value = value;\n\n        const textContent = this.getContent();\n        const maxStartOffset = maxStartOffsetOpt != null && maxStartOffsetOpt < textContent.length\n            ? maxStartOffsetOpt\n            : textContent.length - 1;\n        const startOffset = Math.min(\n            this.diffMatchPatch.diff_commonPrefix(textContent, value),\n            maxStartOffset,\n        );\n        const endOffset = Math.min(\n            this.diffMatchPatch.diff_commonSuffix(textContent, value),\n            textContent.length - startOffset,\n            value.length - startOffset,\n        );\n        const replacement = value.substring(startOffset, value.length - endOffset);\n        const range = this.replaceContent(startOffset, textContent.length - endOffset, replacement);\n        if (range) {\n            this.ignoreUndo = noUndo;\n            this.noContentFix = true;\n        }\n        return {\n            start: startOffset,\n            end: value.length - endOffset,\n            range,\n        };\n    }\n\n    insertTextAtCarat(text: string) {\n        const { selectionStart, selectionEnd } = this.selectionMgr;\n\n        const content = this.getContent();\n\n        const before = content.slice(0, selectionStart);\n        const selection = content.slice(selectionStart, selectionEnd);\n        const after = content.slice(selectionEnd);\n\n        const patchedText = before + text + after;\n\n        this.setContent(patchedText);\n        const afterPoint = before.length + text.length;\n        this.selectionMgr.setSelectionStartEnd(afterPoint, afterPoint);\n    }\n\n    replace(selectionStart: number, selectionEnd: number, replacement: string) {\n        this.undoMgr.setDefaultMode('single');\n        this.replaceContent(selectionStart, selectionEnd, replacement);\n        const startOffset = Math.min(selectionStart, selectionEnd);\n        const endOffset = startOffset + replacement.length;\n        this.selectionMgr.setSelectionStartEnd(endOffset, endOffset);\n        this.selectionMgr.updateCursorCoordinates(true);\n    }\n\n    replaceAll(search: string | RegExp, replacement: string, startOffset = 0) {\n        if (typeof search == 'string')\n            search = new RegExp(search, 'gm');\n\n        this.undoMgr.setDefaultMode('single');\n        const text = this.getContent();\n        const subtext = text.slice(startOffset);\n        const value = subtext.replace(search, replacement);\n\n        if (value !== subtext) {\n            const offset = this.setContent(text.slice(0, startOffset) + value);\n            this.selectionMgr.setSelectionStartEnd(offset.end, offset.end);\n            this.selectionMgr.updateCursorCoordinates(true);\n        }\n    }\n\n    focus() {\n        this.selectionMgr.restoreSelection();\n        this.editorElt.focus();\n    }\n\n    addMarker(marker) {\n        this.$markers[marker.id] = marker;\n    }\n\n    removeMarker(marker) {\n        delete this.$markers[marker.id];\n    }\n\n    onKeyDown(evt) {\n        this.selectionMgr.saveSelectionState();\n\n        // Perform keystroke\n        let contentChanging = false;\n        const textContent = this.getContent();\n        let min = Math.min(this.selectionMgr.selectionStart, this.selectionMgr.selectionEnd);\n        let max = Math.max(this.selectionMgr.selectionStart, this.selectionMgr.selectionEnd);\n\n        const state = {\n            before: textContent.slice(0, min),\n            after: textContent.slice(max),\n            selection: textContent.slice(min, max),\n            isBackwardSelection: this.selectionMgr.selectionStart > this.selectionMgr.selectionEnd,\n        };\n\n        this.$keystrokes.find((keystroke) => {\n            if (!keystroke.handler(evt, state, this)) {\n                return false;\n            }\n\n            const newContent = state.before + state.selection + state.after;\n            if (newContent !== this.getContent()) {\n                this.setContent(newContent, false, min);\n                contentChanging = true;\n                this.skipSaveSelection = true;\n                this.highlighter.cancelComposition = true;\n            }\n\n            min = state.before.length;\n            max = min + state.selection.length;\n            this.selectionMgr.setSelectionStartEnd(\n                state.isBackwardSelection ? max : min,\n                state.isBackwardSelection ? min : max,\n                !contentChanging, // Expect a restore selection on mutation event\n            );\n\n            return true;\n        });\n\n        /// WTF does this shit even do?!\n        if (!contentChanging) {\n            // Optimization to avoid saving selection\n            // this.adjustCursorPosition();\n        }\n    }\n\n    onCompositionStart() {\n        this.highlighter.isComposing += 1;\n    }\n\n    onCompositionEnd() {\n        setTimeout(() => {\n            if (this.highlighter.isComposing) {\n                this.highlighter.isComposing -= 1;\n                if (!this.highlighter.isComposing) {\n                    this.onMutationObserved([]);\n                }\n            }\n        }, 1);\n    }\n\n    onPaste(evt) {\n        this.undoMgr.setCurrentMode('single');\n        evt.preventDefault();\n\n        const clipboardData = evt.clipboardData;\n        let data = clipboardData.getData('text/plain');\n\n        const files = [...clipboardData.files] as File[];\n\n        // TODO: should this be interleaved with text paste?\n        if (files.length > 0 && this.ngEditor.allowImageUpload) {\n            this.insertTextAtCarat(\"```img-spinner```\");\n            this.ngEditor.onImageUpload.next({ data: files, ...this.selectionMgr, stackEditor: this.ngEditor });\n            return;\n        }\n\n        // TODO: Re-enable after paste dialog is added.\n        if (false && this.turndownService) {\n            try {\n                const html = clipboardData.getData('text/html');\n                if (html) {\n                    // TODO: Add a popup dialog to choose using whatever we\n                    // end up with, after using Turndown, or raw HTML propagation\n                    // Inject a custom fence around pasted content\n                    // data = `\\n\\`\\`\\`<injected>\\n${html}\\n</injected>\\n\\`\\`\\`\\n`;\n\n                    // const sanitizedHtml = htmlSanitizer.sanitizeHtml(html)\n                    //     .replace(/&#160;/g, ' '); // Replace non-breaking spaces with classic spaces\n                    // if (sanitizedHtml) {\n                    //     data = this.turndownService.turndown(sanitizedHtml);\n                    //     // Handle double newlines added on HTML paste.\n                    //     // TODO: Check if this needs to be placed elsewhere.\n\n                    //     data = data\n                    //         // Fix duplicate newlines that are inserted\n                    //         .replace(/\\n\\n/g, '\\n')\n                    //         // Fix duplicate spaces that get inserted\n                    //         .replace(/(?<!^)  /gm, ' ');\n                    // }\n                }\n            }\n            catch (e) {\n                // Ignore\n            }\n        }\n\n        if (!data) {\n            return;\n        }\n\n        this.replace(this.selectionMgr.selectionStart, this.selectionMgr.selectionEnd, data);\n        this.adjustCursorPosition();\n    }\n\n    onCopy(evt) {\n        if (evt.clipboardData) {\n            evt.clipboardData.setData('text/plain', this.selectionMgr.getSelectedText());\n            evt.preventDefault();\n        }\n    }\n\n    onCut(evt) {\n        if (evt.clipboardData) {\n            evt.clipboardData.setData('text/plain', this.selectionMgr.getSelectedText());\n            evt.preventDefault();\n            this.replace(this.selectionMgr.selectionStart, this.selectionMgr.selectionEnd, '');\n        } else {\n            this.undoMgr.setCurrentMode('single');\n        }\n        this.adjustCursorPosition();\n    }\n\n    /**\n     * Return the line at a given character index\n     * This is _not_ the line number, but the index of the char in the whole string.\n     *\n     * This will default in the case of an empty modal.\n     */\n    getLine(charIndex: number, text = this.getContent()) {\n        const lines = text.split(/[\\r\\n]/g);\n        const number = text.slice(0, charIndex).match(/[\\r\\n]/g)?.length || 0;\n        const line = lines[number] || '';\n        const lineStart = lines.slice(0, number).map(l => l.length).reduce((a, b) => a + b, 0) + (number);\n        const lineEnd = lineStart + line.length;\n\n        return {\n            lineStart,\n            lineEnd,\n            line\n        };\n    }\n\n    /**\n     * Wrap the current selection in text\n     */\n    wrapSelection(before = '', after = '', indent?: number, insertNewline = false) {\n        const { selectionStart, selectionEnd } = this.selectionMgr;\n        const text = this.getContent() as string;\n\n        const { lineStart, lineEnd, line } = (selectionStart == selectionEnd)\n            ? this.getLine(selectionStart, text)\n            : {} as any;\n\n        const startIndex = lineStart ?? Math.min(selectionStart, selectionEnd);\n        const endIndex = lineEnd ?? Math.max(selectionStart, selectionEnd);\n\n        const selectionText = line ?? text.slice(startIndex, endIndex);\n        let preString = text.slice(0, startIndex);\n        let postString = text.slice(endIndex);\n\n        // Check if this is a duplicate invocation that should remove the decoration effect\n        const isRemoval = preString.endsWith(before) && postString.startsWith(after);\n\n        if (isRemoval) {\n            // Strip out the previously added before and after text\n            preString = preString.slice(0, preString.length - before.length);\n            postString = postString.slice(after.length);\n\n            // Move the selection to what was before adding the text\n            this.selectionMgr.selectionStart -= before.length;\n            this.selectionMgr.selectionEnd -= (before.length + after.length);\n\n            // Clear before and after for re-use of the update logic.\n            before = '';\n            after = '';\n            indent = null;\n            insertNewline = false;\n        }\n        else {\n            this.selectionMgr.selectionStart += before.length;\n            this.selectionMgr.selectionEnd += before.length;\n        }\n\n        let updatedSelection = selectionText;\n\n        if (indent) {\n            // Indent all lines in the selection\n            updatedSelection = selectionText\n                .split('\\n')\n                .map(l => ''.padStart(indent, ' ') + l)\n                .join('\\n');\n        }\n\n        if (insertNewline && before) {\n            // Insert a newline at the start if we're in the middle of a selection.\n            if (!preString.endsWith('\\n'))\n                before = \"\\n\" + before;\n        }\n\n        const patchedText =\n            preString +\n            before +\n            updatedSelection +\n            after +\n            postString;\n\n        this.setContent(patchedText);\n\n        this.selectionMgr.setSelectionStartEnd(this.selectionMgr.selectionStart, this.selectionMgr.selectionEnd);\n    }\n\n    /**\n     * Replace the current selection with the given text.\n     */\n    replaceSelection(text: string) {\n        const { selectionStart, selectionEnd } = this.selectionMgr;\n        let content = this.getContent() as string;\n\n        const startIndex = Math.min(selectionStart, selectionEnd);\n        const endIndex = Math.max(selectionStart, selectionEnd);\n\n        const preString = content.slice(0, startIndex);\n        const postString = content.slice(endIndex);\n\n        const patchedText =\n            preString +\n            text +\n            postString;\n\n        this.setContent(patchedText);\n    }\n\n    rebaseSelectionByPixel(x: number, y: number) {\n        let selection = window.getSelection();\n\n        // TODO: There may be a better way to collapse the selection.\n\n        let range;\n        // All webkit browsers support this properly. (incl. Safari)\n        if (typeof document.caretRangeFromPoint == \"function\") {\n            range = document.caretRangeFromPoint(x, y);\n            if (range) selection.collapse(range.startContainer, range.startOffset);\n        }\n        // Ugly stepchild named Firefox needs this mess.\n        else if (typeof document['caretPositionFromPoint'] == \"function\") {\n            range = document['caretPositionFromPoint'](x, y);\n            if (range) selection.collapse(range.offsetNode, range.offset);\n        }\n        // Fallthrough if we can't get the nearest range to the pointer click.\n        // Occurs in rare edge cases, and would occur if browsers ever actually deprecate\n        // caretRangeFromPoint\n        else if (!range) {\n            selection.collapse(selection.focusNode, selection.focusOffset);\n        }\n\n        this.selectionMgr.saveSelectionState();\n    }\n}\n","// @ts-nocheck\nimport MarkdownIt, { Token } from 'markdown-it';\n\n/**\n * Original: https://github.com/revin/markdown-it-task-lists/blob/master/index.js (Sep 22, 2023)\n * (ISC License)\n *\n */\nlet disableCheckboxes = true;\nlet useLabelWrapper = false;\nlet useLabelAfter = false;\n\nconst render: MarkdownIt.PluginWithOptions = (md, options) => {\n    if (options) {\n        disableCheckboxes = !options.enabled;\n        useLabelWrapper = !!options.label;\n        useLabelAfter = !!options.labelAfter;\n    }\n\n    md.core.ruler.after('inline', 'github-task-lists', function (state) {\n        const tokens = state.tokens;\n        for (let i = 2; i < tokens.length; i++) {\n            if (isTodoItem(tokens, i)) {\n                todoify(tokens[i], state.Token);\n                attrSet(tokens[i - 2], 'class', 'task-list-item' + (!disableCheckboxes ? ' enabled' : ''));\n                attrSet(tokens[parentToken(tokens, i - 2)], 'class', 'contains-task-list');\n            }\n        }\n    });\n};\nexport default render;\n\n\nfunction attrSet(token, name, value) {\n    const index = token.attrIndex(name);\n    const attr = [name, value];\n\n    if (index < 0) {\n        token.attrPush(attr);\n    }\n    else {\n        token.attrs[index] = attr;\n    }\n}\n\nfunction parentToken(tokens, index: number) {\n    const targetLevel = tokens[index].level - 1;\n    for (let i = index - 1; i >= 0; i--) {\n        if (tokens[i].level === targetLevel) {\n            return i;\n        }\n    }\n    return -1;\n}\n\nfunction isTodoItem(tokens, index: number) {\n    return isInline(tokens[index]) &&\n        isParagraph(tokens[index - 1]) &&\n        isListItem(tokens[index - 2]) &&\n        startsWithTodoMarkdown(tokens[index]);\n}\n\nfunction todoify(token, TokenConstructor: Token) {\n    token.children.unshift(makeCheckbox(token, TokenConstructor));\n    token.children[1].content = token.children[1].content.slice(3);\n    token.content = token.content.slice(3);\n\n    if (useLabelWrapper) {\n        if (useLabelAfter) {\n            token.children.pop();\n\n            // Use large random number as id property of the checkbox.\n            const id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000);\n            token.children[0].content = token.children[0].content.slice(0, -1) + ' id=\"' + id + '\">';\n            token.children.push(afterLabel(token.content, id, TokenConstructor));\n        }\n        else {\n            token.children.unshift(beginLabel(TokenConstructor));\n            token.children.push(endLabel(TokenConstructor));\n        }\n    }\n}\n\nfunction makeCheckbox(token, TokenConstructor: Token) {\n    const checkbox = new TokenConstructor('html_inline', '', 0);\n    const disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n\n    if (token.content.indexOf('[ ] ') === 0) {\n        checkbox.content = '<input class=\"task-list-item-checkbox\"' + disabledAttr + 'type=\"checkbox\">';\n    }\n    else if (token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0) {\n        checkbox.content = '<input class=\"task-list-item-checkbox\" checked=\"\"' + disabledAttr + 'type=\"checkbox\">';\n    }\n    return checkbox;\n}\n\n// these next two functions are kind of hacky; probably should really be a\n// true block-level token with .tag=='label'\nfunction beginLabel(TokenConstructor: Token) {\n    const token = new TokenConstructor('html_inline', '', 0);\n    token.content = '<label>';\n    return token;\n}\n\nfunction endLabel(TokenConstructor: Token) {\n    const token = new TokenConstructor('html_inline', '', 0);\n    token.content = '</label>';\n    return token;\n}\n\nfunction afterLabel(content: string, id: string, TokenConstructor: Token) {\n    const token = new TokenConstructor('html_inline', '', 0);\n    token.content = '<label class=\"task-list-item-label\" for=\"' + id + '\">' + content + '</label>';\n    token.attrs = [{ for: id }] as any;\n    return token;\n}\n\nfunction isInline(token) { return token.type === 'inline'; }\nfunction isParagraph(token) { return token.type === 'paragraph_open'; }\nfunction isListItem(token) { return token.type === 'list_item_open'; }\n\nfunction startsWithTodoMarkdown(token) {\n    // leading whitespace in a list item is already trimmed off by markdown-it\n    return token.content.indexOf('[ ] ') === 0 || token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0;\n}\n","export default (md) => {\n  md.core.ruler.before('replacements', 'anchors', (state) => {\n    const anchorHash = {};\n    let headingOpenToken;\n    let headingContent;\n    state.tokens.forEach((token) => {\n      if (token.type === 'heading_open') {\n        headingContent = '';\n        headingOpenToken = token;\n      } else if (token.type === 'heading_close') {\n        headingOpenToken.headingContent = headingContent;\n\n        // According to http://pandoc.org/README.html#extension-auto_identifiers\n        let slug = headingContent\n          .replace(/\\s/g, '-') // Replace all spaces and newlines with hyphens\n          .replace(/[\\0-,/:-@[-^`{-~]/g, '') // Remove all punctuation, except underscores, hyphens, and periods\n          .toLowerCase(); // Convert all alphabetic characters to lowercase\n\n        // Remove everything up to the first letter\n        let i;\n        for (i = 0; i < slug.length; i += 1) {\n          const charCode = slug.charCodeAt(i);\n          if ((charCode >= 0x61 && charCode <= 0x7A) || charCode > 0x7E) {\n            break;\n          }\n        }\n\n        // If nothing left after this, use `section`\n        slug = slug.slice(i) || 'section';\n\n        let anchor = slug;\n        let index = 1;\n        while (Object.prototype.hasOwnProperty.call(anchorHash, anchor)) {\n          anchor = `${slug}-${index}`;\n          index += 1;\n        }\n        anchorHash[anchor] = true;\n        headingOpenToken.headingAnchor = anchor;\n        headingOpenToken.attrs = [\n          ['id', anchor],\n        ];\n        headingOpenToken = undefined;\n      } else if (headingOpenToken) {\n        headingContent += token.children.reduce((result, child) => {\n          if (child.type !== 'footnote_ref') {\n            return result + child.content;\n          }\n          return result;\n        }, '');\n      }\n    });\n  });\n};\n","import Prism from '../prism';\nimport markdownitAbbr from 'markdown-it-abbr';\nimport markdownitDeflist from 'markdown-it-deflist';\nimport markdownitFootnote from 'markdown-it-footnote';\nimport markdownitMark from 'markdown-it-mark';\n// import markdownitImgsize from 'markdown-it-imsize';\nimport markdownitSub from 'markdown-it-sub';\nimport markdownitSup from 'markdown-it-sup';\nimport markdownitTasklist from './libs/markdownItTasklist';\nimport markdownitAnchor from './libs/markdownItAnchor';\nimport MarkdownIt from 'markdown-it';\nimport { Editor } from '../editor';\n\nconst coreBaseRules = [\n    'normalize',\n    'block',\n    'inline',\n    'linkify',\n    'replacements',\n    'smartquotes',\n];\nconst blockBaseRules = [\n    'code',\n    'fence',\n    'blockquote',\n    'hr',\n    'list',\n    'reference',\n    'heading',\n    'lheading',\n    'html_block',\n    'table',\n    'paragraph',\n];\nconst inlineBaseRules = [\n    'text',\n    'newline',\n    'escape',\n    'backticks',\n    'strikethrough',\n    'emphasis',\n    'link',\n    'image',\n    'autolink',\n    'html_inline',\n    'entity',\n];\nconst inlineBaseRules2 = [\n    'balance_pairs',\n    'strikethrough',\n    'emphasis',\n    // 'text_collapse'\n];\nexport default (editorSvc: Editor) => {\n    // editorSvc.onGetOptions((options, properties) => Object\n    //     .assign(options, properties.extensions.markdown));\n\n    editorSvc.onInitConverter(0, (markdown: MarkdownIt, options) => {\n        markdown.set({\n            html: true,\n            breaks: true,\n            linkify: true,\n            typographer: true,\n            langPrefix: 'prism language-',\n        });\n\n        markdown.core.ruler.enable(coreBaseRules);\n\n        const blockRules = blockBaseRules.slice();\n        markdown.block.ruler.enable(blockRules);\n\n        const inlineRules = inlineBaseRules.slice();\n        const inlineRules2 = inlineBaseRules2.slice();\n        markdown.inline.ruler.enable(inlineRules);\n        markdown.inline.ruler2.enable(inlineRules2);\n\n        if (options.imgsize) {\n            // TODO: Restore this without having a stroke\n            // >> Module not found: Error: Can't resolve 'fs' in '/home/knackstedt/source/@dotglitch/stackedit/node_modules/markdown-it-imsize/lib/imsize/types'\n            // markdown.use(markdownitImgsize);\n        }\n        markdown.use(markdownitAbbr);\n        markdown.use(markdownitDeflist);\n        markdown.use(markdownitFootnote);\n        markdown.use(markdownitMark);\n        markdown.use(markdownitSub);\n        markdown.use(markdownitSup);\n        markdown.use(markdownitTasklist);\n        markdown.use(markdownitAnchor);\n\n\n        // Transform style into align attribute to pass the HTML sanitizer\n        const textAlignLength = 'text-align:'.length;\n        markdown.renderer.rules['td_open'] = (tokens, idx, opts) => {\n            const token = tokens[idx];\n            if (token.attrs && token.attrs.length && token.attrs[0][0] === 'style') {\n                token.attrs = [\n                    ['align', token.attrs[0][1].slice(textAlignLength)],\n                ];\n            }\n            return markdown.renderer.renderToken(tokens, idx, opts);\n        };\n        markdown.renderer.rules['th_open'] = markdown.renderer.rules['td_open'];\n\n        markdown.renderer.rules['footnote_ref'] = (tokens, idx) => {\n            const n = `${Number(tokens[idx].meta.id + 1)}`;\n            let id = `fnref${n}`;\n            if (tokens[idx].meta.subId > 0) {\n                id += `:${tokens[idx].meta.subId}`;\n            }\n            return `<sup class=\"footnote-ref\"><a href=\"#fn${n}\" id=\"${id}\">${n}</a></sup>`;\n        };\n    });\n\n    editorSvc.onSectionPreview((elt, options, isEditor) => {\n        // Highlight with Prism\n        elt.querySelectorAll('.prism').forEach((prismElt) => {\n            if (!prismElt.$highlightedWithPrism) {\n                Prism.highlightElement(prismElt);\n                prismElt.$highlightedWithPrism = true;\n\n                // Save as piktuuure\n                if (prismElt.classList.contains(\"language-mermaid\")) {\n                    const copyButton = document.createElement('mat-icon');\n                    copyButton.classList.add(\"material-icons\");\n                    copyButton.classList.add(\"copy-button\");\n                    copyButton.innerHTML = \"download\";\n                    copyButton.onclick = () => {\n                        const ulid = elt.getAttribute(\"ulid\");\n                        const diagram = editorSvc.previewElt.querySelector(`[ulid=\"${ulid}\"] .language-mermaid svg`);\n                        const svg = diagram.outerHTML\n                            .replace(/<br>/g, '<br/>');\n\n                        const blob = new Blob([svg], { type: 'image/svg+xml' });\n                        const a = document.createElement('a');\n                        a.href = URL.createObjectURL(blob);\n\n                        a.download = `mermaid-diagram.svg`;\n                        a.style.position = 'fixed';\n                        a.style.left = '-1000vw';\n                        a.target = '_blank';\n                        a.setAttribute(\"rel\", 'noopener');\n\n                        document.body.appendChild(a);\n                        a.click();\n                        a.remove();\n\n                    };\n                    prismElt.parentElement.parentElement.append(copyButton);\n                }\n                else {\n                    const copyButton = document.createElement('mat-icon');\n                    copyButton.classList.add(\"material-icons\");\n                    copyButton.classList.add(\"copy-button\");\n                    copyButton.innerHTML = \"content_copy\";\n                    copyButton.onclick = () => {\n                        navigator.clipboard.writeText(prismElt.textContent);\n                    };\n                    prismElt.parentElement.append(copyButton);\n                }\n            }\n        });\n\n        // Transform task spans into checkboxes\n        elt.querySelectorAll('.task-list-item-checkbox').forEach((spanElt: HTMLElement) => {\n            const target = spanElt.parentElement as HTMLElement;\n            const label = target.textContent.replace(/^[☑☐]\\s?/, '');\n            const isChecked = spanElt.getAttribute(\"checked\") != null;\n\n            target.innerHTML = `<input type=\"checkbox\" ${isChecked ? 'checked=\"true\"' : ''}><label> ${label}</label>`;\n        });\n    });\n};\n","// Cloned from Mermaid's playground sourcecode\n\nimport type * as Monaco from 'monaco-editor';\n\nexport const setupMermaidLanguage = (monacoEditor: typeof Monaco): void => {\n    monacoEditor.languages.register({ id: 'mermaid' });\n    const requirementDiagrams = [\n        'requirement',\n        'functionalRequirement',\n        'interfaceRequirement',\n        'performanceRequirement',\n        'physicalRequirement',\n        'designConstraint'\n    ];\n    const keywords: Record<\n        string,\n        {\n            typeKeywords: string[];\n            blockKeywords: string[];\n            keywords: string[];\n        }\n    > = {\n        flowchart: {\n            typeKeywords: ['flowchart', 'flowchart-v2', 'graph'],\n            blockKeywords: ['subgraph', 'end'],\n            keywords: [\n                'TB',\n                'TD',\n                'BT',\n                'RL',\n                'LR',\n                'click',\n                'call',\n                'href',\n                '_self',\n                '_blank',\n                '_parent',\n                '_top',\n                'linkStyle',\n                'style',\n                'classDef',\n                'class',\n                'direction',\n                'interpolate'\n            ]\n        },\n        sequenceDiagram: {\n            typeKeywords: ['sequenceDiagram'],\n            blockKeywords: ['alt', 'par', 'and', 'loop', 'else', 'end', 'rect', 'opt', 'alt', 'rect'],\n            keywords: [\n                'participant',\n                'as',\n                'Note',\n                'note',\n                'right of',\n                'left of',\n                'over',\n                'activate',\n                'deactivate',\n                'autonumber',\n                'title',\n                'actor',\n                'accDescription',\n                'link',\n                'links'\n            ]\n        },\n        classDiagram: {\n            typeKeywords: ['classDiagram', 'classDiagram-v2'],\n            blockKeywords: ['class'],\n            keywords: [\n                'link',\n                'click',\n                'callback',\n                'call',\n                'href',\n                'cssClass',\n                'direction',\n                'TB',\n                'BT',\n                'RL',\n                'LR',\n                'title',\n                'accDescription',\n                'order'\n            ]\n        },\n        stateDiagram: {\n            typeKeywords: ['stateDiagram', 'stateDiagram-v2'],\n            blockKeywords: ['state', 'note', 'end'],\n            keywords: ['state', 'as', 'hide empty description', 'direction', 'TB', 'BT', 'RL', 'LR']\n        },\n        erDiagram: {\n            typeKeywords: ['erDiagram'],\n            blockKeywords: [],\n            keywords: ['title', 'accDescription']\n        },\n        journey: {\n            typeKeywords: ['journey'],\n            blockKeywords: ['section'],\n            keywords: ['title']\n        },\n        info: {\n            typeKeywords: ['info'],\n            blockKeywords: [],\n            keywords: ['showInfo']\n        },\n        gantt: {\n            typeKeywords: ['gantt'],\n            blockKeywords: [],\n            keywords: [\n                'title',\n                'dateFormat',\n                'axisFormat',\n                'todayMarker',\n                'section',\n                'excludes',\n                'inclusiveEndDates'\n            ]\n        },\n        requirementDiagram: {\n            typeKeywords: ['requirement', 'requirementDiagram'],\n            blockKeywords: [...requirementDiagrams, 'element'],\n            keywords: []\n        },\n        gitGraph: {\n            typeKeywords: ['gitGraph'],\n            blockKeywords: [],\n            keywords: [\n                'accTitle',\n                'accDescr',\n                'commit',\n                'cherry-pick',\n                'branch',\n                'merge',\n                'reset',\n                'checkout',\n                'LR',\n                'BT',\n                'id',\n                'msg',\n                'type',\n                'tag',\n                'NORMAL',\n                'REVERSE',\n                'HIGHLIGHT'\n            ]\n        },\n        pie: {\n            typeKeywords: ['pie'],\n            blockKeywords: [],\n            keywords: ['showData', 'title', 'accDescr', 'accTitle']\n        },\n        c4Diagram: {\n            typeKeywords: ['C4Context', 'C4Container', 'C4Component', 'C4Dynamic', 'C4Deployment'],\n            blockKeywords: [\n                'Boundary',\n                'Enterprise_Boundary',\n                'System_Boundary',\n                'Container_Boundary',\n                'Node',\n                'Node_L',\n                'Node_R'\n            ],\n            keywords: [\n                'title',\n                'accDescription',\n                'direction',\n                'TB',\n                'BT',\n                'RL',\n                'LR',\n                'Person_Ext',\n                'Person',\n                'SystemQueue_Ext',\n                'SystemDb_Ext',\n                'System_Ext',\n                'SystemQueue',\n                'SystemDb',\n                'System',\n                'ContainerQueue_Ext',\n                'ContainerDb_Ext',\n                'Container_Ext',\n                'ContainerQueue',\n                'ContainerDb',\n                'Container',\n                'ComponentQueue_Ext',\n                'ComponentDb_Ext',\n                'Component_Ext',\n                'ComponentQueue',\n                'ComponentDb',\n                'Component',\n                'Deployment_Node',\n                'Rel',\n                'BiRel',\n                'Rel_Up',\n                'Rel_U',\n                'Rel_Down',\n                'Rel_D',\n                'Rel_Left',\n                'Rel_L',\n                'Rel_Right',\n                'Rel_R',\n                'Rel_Back',\n                'RelIndex'\n            ]\n        },\n        sankey: {\n            typeKeywords: ['sankey-beta'],\n            blockKeywords: [],\n            keywords: []\n        }\n    };\n\n    const configDirectiveHandler = [\n        /^\\s*%%(?={)/,\n        {\n            token: 'string',\n            next: '@configDirective',\n            nextEmbedded: 'javascript'\n        }\n    ] as Monaco.languages.IShortMonarchLanguageRule1;\n\n    // Register a tokens provider for the mermaid language\n    monacoEditor.languages.setMonarchTokensProvider('mermaid', {\n        ...Object.entries(keywords)\n            .map((entry) =>\n                Object.fromEntries(\n                    Object.entries(entry[1]).map((deepEntry) => [\n                        entry[0] + deepEntry[0][0].toUpperCase() + deepEntry[0].slice(1),\n                        deepEntry[1]\n                    ])\n                )\n            )\n            // eslint-disable-next-line unicorn/no-array-reduce\n            .reduce(\n                (overallKeywords, nextKeyword) => ({\n                    ...overallKeywords,\n                    ...nextKeyword\n                }),\n                {}\n            ),\n        tokenizer: {\n            root: [\n                [/^\\s*gitGraph/m, 'typeKeyword', 'gitGraph'],\n                [/^\\s*info/m, 'typeKeyword', 'info'],\n                [/^\\s*pie/m, 'typeKeyword', 'pie'],\n                [/^\\s*(flowchart|flowchart-v2|graph)/m, 'typeKeyword', 'flowchart'],\n                [/^\\s*sequenceDiagram/, 'typeKeyword', 'sequenceDiagram'],\n                [/^\\s*classDiagram(-v2)?/, 'typeKeyword', 'classDiagram'],\n                [/^\\s*journey/, 'typeKeyword', 'journey'],\n                [/^\\s*gantt/, 'typeKeyword', 'gantt'],\n                [/^\\s*stateDiagram(-v2)?/, 'typeKeyword', 'stateDiagram'],\n                [/^\\s*er(Diagram)?/, 'typeKeyword', 'erDiagram'],\n                [/^\\s*requirement(Diagram)?/, 'typeKeyword', 'requirementDiagram'],\n                [/^\\s*sankey-beta/m, 'typeKeyword', 'sankey'],\n                [\n                    /^\\s*(C4Context|C4Container|C4Component|C4Dynamic|C4Deployment)/m,\n                    'typeKeyword',\n                    'c4Diagram'\n                ],\n                configDirectiveHandler,\n                [/%%[^${].*$/, 'comment']\n            ],\n            configDirective: [[/%%$/, { token: 'string', next: '@pop', nextEmbedded: '@pop' }]],\n            gitGraph: [\n                configDirectiveHandler,\n                [/option(?=s)/, { token: 'typeKeyword', next: 'optionsGitGraph' }],\n                [/(accTitle|accDescr)(\\s*:)(\\s*[^\\n\\r]+$)/, ['keyword', 'delimiter.bracket', 'string']],\n                [\n                    /(^\\s*branch)(.*?)(\\s+order)(:\\s*)(\\d+\\s*$)/,\n                    ['keyword', 'variable', 'keyword', 'delimiter.bracket', 'number']\n                ],\n                [/\".*?\"/, 'string'],\n                [\n                    /(^\\s*)(branch|reset|merge|checkout)(\\s*\\S+)/m,\n                    ['delimiter.bracket', 'keyword', 'variable']\n                ],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@gitGraphBlockKeywords': 'typeKeyword',\n                            '@gitGraphKeywords': 'keyword'\n                        }\n                    }\n                ],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],\n                [/\\^/, 'delimiter.bracket']\n            ],\n            optionsGitGraph: [\n                [\n                    /s$/,\n                    {\n                        token: 'typeKeyword',\n                        nextEmbedded: 'json'\n                    }\n                ],\n                ['end', { token: 'typeKeyword', next: '@pop', nextEmbedded: '@pop' }]\n            ],\n            info: [\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@infoBlockKeywords': 'typeKeyword',\n                            '@infoKeywords': 'keyword'\n                        }\n                    }\n                ]\n            ],\n            pie: [\n                configDirectiveHandler,\n                [/(title|accDescription)(.*$)/, ['keyword', 'string']],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@pieBlockKeywords': 'typeKeyword',\n                            '@pieKeywords': 'keyword'\n                        }\n                    }\n                ],\n                [/\".*?\"/, 'string'],\n                [/\\s*\\d+/, 'number'],\n                [/:/, 'delimiter.bracket'],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']\n            ],\n            flowchart: [\n                configDirectiveHandler,\n                [/[ox]?(--+|==+)[ox]/, 'transition'],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@flowchartBlockKeywords': 'typeKeyword',\n                            '@flowchartKeywords': 'keyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [/\\|+.+?\\|+/, 'string'],\n                [/\\[+(\\\\.+?[/\\\\]|\\/.+?[/\\\\])]+/, 'string'],\n                [/[>[]+[^[\\]|]+?]+/, 'string'],\n                [/{+.+?}+/, 'string'],\n                [/\\(+.+?\\)+/, 'string'],\n                [/-\\.+->?/, 'transition'],\n                [/(-[.-])([^>-][^-]+?)(-{3,}|-{2,}>|\\.-+>)/, ['transition', 'string', 'transition']],\n                [/(==+)([^=]+?)(={3,}|={2,}>)/, ['transition', 'string', 'transition']],\n                [/<?(--+|==+)>|===+|---+/, 'transition'],\n                [/:::/, 'transition'],\n                [/[&;]/, 'delimiter.bracket'],\n                [/\".*?\"/, 'string'],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']\n            ],\n            sequenceDiagram: [\n                configDirectiveHandler,\n                [/(title:?|accDescription)([^\\n\\r;]*$)/, ['keyword', 'string']],\n                [/(autonumber)([^\\S\\n\\r]+off[^\\S\\n\\r]*$)/, ['keyword', 'keyword']],\n                [/(autonumber)((?:[^\\S\\n\\r]+\\d+){2}[^\\S\\n\\r]*$)/, ['keyword', 'number']],\n                [/(autonumber)([^\\S\\n\\r]+\\d+[^\\S\\n\\r]*$)/, ['keyword', 'number']],\n                [\n                    /(link\\s+)(.*?)(:)(\\s*.*?)(\\s*@)(\\s*[^\\n\\r;]+)/,\n                    ['keyword', 'variable', 'delimiter.bracket', 'string', 'delimiter.bracket', 'string']\n                ],\n                [\n                    /((?:links|properties)\\s+)([^\\n\\r:]*?)(:\\s+)/,\n                    [\n                        { token: 'keyword' },\n                        { token: 'variable' },\n                        {\n                            token: 'delimiter.bracket',\n                            nextEmbedded: 'javascript',\n                            next: '@sequenceDiagramLinksProps'\n                        }\n                    ]\n                ],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@sequenceDiagramBlockKeywords': 'typeKeyword',\n                            '@sequenceDiagramKeywords': 'keyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [/(--?>?>|--?[)x])[+-]?/, 'transition'],\n                [/(:)([^\\n:]*?$)/, ['delimiter.bracket', 'string']],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']\n            ],\n            sequenceDiagramLinksProps: [\n                // [/^:/, { token: 'delimiter.bracket', nextEmbedded: 'json' }],\n                [/$|;/, { nextEmbedded: '@pop', next: '@pop', token: 'delimiter.bracket' }]\n            ],\n            classDiagram: [\n                configDirectiveHandler,\n                [/(^\\s*(?:title|accDescription))(\\s+.*$)/, ['keyword', 'string']],\n                [\n                    /(\\*|<\\|?|o|)(--|\\.\\.)(\\*|\\|?>|o|)([\\t ]*[A-Za-z]+[\\t ]*)(:)(.*?$)/,\n                    ['transition', 'transition', 'transition', 'variable', 'delimiter.bracket', 'string']\n                ],\n                [/(?!class\\s)([A-Za-z]+)(\\s+[A-Za-z]+)/, ['type', 'variable']],\n                [/(\\*|<\\|?|o)?(--|\\.\\.)(\\*|\\|?>|o)?/, 'transition'],\n                [/^\\s*class\\s(?!.*{)/, 'keyword'],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@classDiagramBlockKeywords': 'typeKeyword',\n                            '@classDiagramKeywords': 'keyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],\n                [/(<<)(.+?)(>>)/, ['delimiter.bracket', 'annotation', 'delimiter.bracket']],\n                [/\".*?\"/, 'string'],\n                [/:::/, 'transition'],\n                [/:|\\+|-|#|~|\\*\\s*$|\\$\\s*$|\\(|\\)|{|}/, 'delimiter.bracket']\n            ],\n            journey: [\n                configDirectiveHandler,\n                [/(title)(.*)/, ['keyword', 'string']],\n                [/(section)(.*)/, ['typeKeyword', 'string']],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@journeyBlockKeywords': 'typeKeyword',\n                            '@journeyKeywords': 'keyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [\n                    /(^\\s*.+?)(:)(.*?)(:)(.*?)([$,])/,\n                    [\n                        'string',\n                        'delimiter.bracket',\n                        'number',\n                        'delimiter.bracket',\n                        'variable',\n                        'delimiter.bracket'\n                    ]\n                ],\n                [/,/, 'delimiter.bracket'],\n                [/(^\\s*.+?)(:)([^:]*?)$/, ['string', 'delimiter.bracket', 'variable']],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']\n            ],\n            gantt: [\n                configDirectiveHandler,\n                [/(title)(.*)/, ['keyword', 'string']],\n                [/(section)(.*)/, ['typeKeyword', 'string']],\n                [/^\\s*([^\\n:]*?)(:)/, ['string', 'delimiter.bracket']],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@ganttBlockKeywords': 'typeKeyword',\n                            '@ganttKeywords': 'keyword'\n                        }\n                    }\n                ],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],\n                [/:/, 'delimiter.bracket']\n            ],\n            stateDiagram: [\n                configDirectiveHandler,\n                [/note[^:]*$/, { token: 'typeKeyword', next: 'stateDiagramNote' }],\n                ['hide empty description', 'keyword'],\n                [/^\\s*state\\s(?!.*{)/, 'keyword'],\n                [/(<<)(fork|join|choice)(>>)/, 'annotation'],\n                [/(\\[\\[)(fork|join|choice)(]])/, ['delimiter.bracket', 'annotation', 'delimiter.bracket']],\n                [\n                    /[A-Za-z][\\w$]*/,\n                    {\n                        cases: {\n                            '@stateDiagramBlockKeywords': 'typeKeyword',\n                            '@stateDiagramKeywords': 'keyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [/\".*?\"/, 'string'],\n                [/(:)([^\\n:]*?$)/, ['delimiter.bracket', 'string']],\n                [/{|}/, 'delimiter.bracket'],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],\n                [/-->/, 'transition'],\n                [/\\[.*?]/, 'string']\n            ],\n            stateDiagramNote: [\n                [/^\\s*end note$/, { token: 'typeKeyword', next: '@pop' }],\n                [/.*/, 'string']\n            ],\n            erDiagram: [\n                configDirectiveHandler,\n                [/(title|accDescription)(.*$)/, ['keyword', 'string']],\n                [/[|}][o|](--|\\.\\.)[o|][{|]/, 'transition'],\n                [/\".*?\"/, 'string'],\n                [/(:)(.*?$)/, ['delimiter.bracket', 'string']],\n                [/[:{}]/, 'delimiter.bracket'],\n                [/([A-Za-z]+)(\\s+[A-Za-z]+)/, ['type', 'variable']],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],\n                [/[A-Z_a-z-][\\w$]*/, 'variable']\n            ],\n            requirementDiagram: [\n                configDirectiveHandler,\n                [/->|<-|-/, 'transition'],\n                [/(\\d+\\.)*\\d+/, 'number'],\n                [\n                    /[A-Z_a-z-][\\w$]*/,\n                    {\n                        cases: {\n                            '@requirementDiagramBlockKeywords': 'typeKeyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [/[/:{}]/, 'delimiter.bracket'],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],\n                [/\".*?\"/, 'string']\n            ],\n            c4Diagram: [\n                configDirectiveHandler,\n                [/(title|accDescription)(.*$)/, ['keyword', 'string']],\n                [/\\(/, { token: 'delimiter.bracket', next: 'c4DiagramParenthesis' }],\n                [\n                    /[A-Z_a-z-][\\w$]*/,\n                    {\n                        cases: {\n                            '@c4DiagramBlockKeywords': 'typeKeyword',\n                            '@c4DiagramKeywords': 'keyword',\n                            '@default': 'variable'\n                        }\n                    }\n                ],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']\n            ],\n            c4DiagramParenthesis: [\n                [/,/, 'delimiter.bracket'],\n                [/\\)/, { next: '@pop', token: 'delimiter.bracket' }],\n                [/[^),]/, 'string']\n            ],\n            sankey: [\n                configDirectiveHandler,\n                [/(title)(.*)/, ['keyword', 'string']],\n                [/(accTitle|accDescr)(\\s*:)(\\s*[^\\n\\r]+$)/, ['keyword', 'delimiter.bracket', 'string']],\n                [/\".*?\"/, 'string'],\n                [/[A-Za-z]+/, 'string'],\n                [/\\s*\\d+/, 'number'],\n                [/,/, 'delimiter.bracket'],\n                [/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']\n            ]\n        }\n    });\n\n    monacoEditor.editor.defineTheme('mermaid-dark', {\n        base: 'vs-dark',\n        inherit: true,\n        colors: {},\n        rules: [\n            { token: 'typeKeyword', foreground: '9650c8', fontStyle: 'bold' },\n            { token: 'transition', foreground: '008800', fontStyle: 'bold' },\n            { token: 'identifier', foreground: '9cdcfe' }\n        ]\n    });\n\n    monacoEditor.editor.defineTheme('mermaid', {\n        base: 'vs',\n        inherit: true,\n        colors: {},\n        rules: [\n            { token: 'typeKeyword', foreground: '9650c8', fontStyle: 'bold' },\n            { token: 'keyword', foreground: '649696' },\n            { token: 'custom-error', foreground: 'ff0000', fontStyle: 'bold' },\n            { token: 'string', foreground: 'AA8500' },\n            { token: 'transition', foreground: '008800', fontStyle: 'bold' },\n            { token: 'delimiter.bracket', foreground: '000000', fontStyle: 'bold' },\n            { token: 'annotation', foreground: '4b4b96' },\n            { token: 'number', foreground: '4b4b96' },\n            { token: 'comment', foreground: '888c89' },\n            { token: 'variable', foreground: 'A22889' },\n            { token: 'type', foreground: '2BDEA8' },\n            { token: 'identifier', foreground: '9cdcfe' }\n        ]\n    });\n\n    monacoEditor.languages.registerCompletionItemProvider('mermaid', {\n        provideCompletionItems: () => {\n            return {\n                suggestions: []\n            };\n        }\n    });\n\n    monacoEditor.languages.setLanguageConfiguration('mermaid', {\n        autoClosingPairs: [\n            {\n                open: '(',\n                close: ')'\n            },\n            {\n                open: '{',\n                close: '}'\n            },\n            {\n                open: '[',\n                close: ']'\n            }\n        ],\n        brackets: [\n            ['(', ')'],\n            ['{', '}'],\n            ['[', ']']\n        ],\n        comments: {\n            lineComment: '%%'\n        }\n    });\n};\n","import * as Monaco from 'monaco-editor';\n\n\nconst basicFlags: [RegExp, any][] = [\n    // +*?\n    // Mark invalid quantifiers\n    [/[+?*][+?][+*?]/, \"invalid\"],\n    [/[+?*][*]/, \"invalid\"],\n\n    [/[+?*][+?]?/, \"quantifier\"],\n    [/\\|/, \"alternator\"],\n\n    [/\\\\u[A-F0-9a-f]{2}/, \"unicode\"],\n    [/\\\\x[A-F0-9a-f]{4}/, \"unicode\"],\n    [/\\\\\\d{3}/, \"octal\"],\n\n    [/\\\\./, \"escape\"],\n\n    [/\\(\\?#/, { token: \"comment\", bracket: '@open', next: \"@comment\" }],\n    [/\\(/, { token: \"group-terminator\", bracket: '@open', next: \"@group\" }],\n\n\n    [/\\{/, { token: \"quantifier\", bracket: '@open', next: \"@quantifier\" }],\n    [/\\[\\[:/, { token: \"posix\", bracket: '@open', next: \"@posix\" }],\n    [/\\[\\^/, { token: \"neg-literal\", bracket: '@open', next: '@negativeLiteral' }],\n    [/\\[/, { token: \"literal\", bracket: '@open', next: '@literal' }],\n];\n\nexport function setupRegexLanguage(monaco: typeof Monaco) {\n    monaco.languages.register({ id: 'rgx' });\n\n    monaco.languages.setMonarchTokensProvider('rgx', {\n        defaultToken: \"basic\",\n        tokenPostfix: \".rgx\",\n        tokenizer: {\n            root: [\n                ...basicFlags\n            ],\n\n            group: [\n                [/\\?:/, { token: \"non-capture-group\", bracket: '@open', next: \"@nonCaptureGroup\" }],\n                [/\\?=/, { token: \"lookahead\", bracket: '@open', next: \"@lookahead\" }],\n                [/\\?<=/, { token: \"lookbehind\", bracket: '@open', next: \"@lookbehind\" }],\n                [/\\?</, { token: \"group-name\", bracket: '@open', next: \"@namedGroup\" }],\n                [/\\?!/, { token: \"negative-lookahead\", bracket: '@open', next: \"@negativeLookahead\" }],\n                // [/\\(/, { token: \"capture-group\", bracket: '@open', next: \"@captureGroup\" }],\n                ...basicFlags,\n                [/\\)/, { token: \"group-terminator\", bracket: \"@close\", next: '@pop' }]\n            ],\n\n            //(?#...)\n            comment: [\n\n                [/\\\\./, \"comment\"],\n                [/\\)/, { token: \"comment\", bracket: \"@close\", next: '@pop' }],\n                [/./, 'comment'],\n            ],\n\n            //(...)\n            captureGroup: [\n                ...basicFlags,\n            ],\n\n            //(?:...)\n            nonCaptureGroup: [\n                ...basicFlags,\n                [/\\)/, { token: \"group-terminator\", bracket: \"@close\", next: '@pop' }]\n            ],\n\n            //(?=...)\n            lookahead: [\n                ...basicFlags,\n                [/\\)/, { token: \"group-terminator\", bracket: \"@close\", next: '@pop' }]\n            ],\n\n            //(?<foobar>baz)\n            namedGroup: [\n                [/\\\\./, \"group-name\"],\n                [/>/, { token: \"group-name\", bracket: \"@close\", next: '@pop' }],\n                [/./, 'group-name'],\n            ],\n\n            //(?<=...)\n            lookbehind: [\n                ...basicFlags,\n                [/\\)/, { token: \"group-terminator\", bracket: \"@close\", next: '@pop' }]\n            ],\n\n            //(?!...)\n            negativeLookahead: [\n                ...basicFlags,\n                [/\\)/, { token: \"group-terminator\", bracket: \"@close\", next: '@pop' }]\n            ],\n\n            // {1,99} {99} {,99} {99,}\n            quantifier: [\n                [/\\d+/, 'quantifier'],\n                [/,/, 'quantifier'],\n                [/\\}/, { token: \"quantifier\", bracket: \"@close\", next: '@pop' }]\n            ],\n\n            // [[:alnum:]]\n            posix: [\n                [/./, \"posix-operator\"],\n                [/:\\]\\]/, { token: \"posix\", bracket: \"@close\", next: '@pop' }],\n            ],\n\n            // [a-z] [abcdef()] [^abcdef] [abc\\]def]\n            literal: [\n                [/\\\\x[A-F0-9a-f]{2}(?:-)/i, { token: \"unicode-range\", bracket: '@open', next: \"@unicodeRange\" }],\n                [/\\\\u[A-F0-9a-f]{4}(?:-)/i, { token: \"unicode-range\", bracket: '@open', next: \"@unicodeRange\" }],\n                [/\\\\\\d{3}(?:-)/i, { token: \"octal-range\", bracket: '@open', next: \"@unicodeRange\" }],\n\n                [/\\\\x[A-F0-9a-f]{2}/, \"literal-unicode\"],\n                [/\\\\u[A-F0-9a-f]{4}/, \"literal-unicode\"],\n                [/\\\\\\d{3}/, \"octal\"],\n\n                [/\\\\./, \"literal-escape\"],\n\n                [/.(?:-)/i, { token: \"char-range\", bracket: '@open', next: \"@charRange\" }],\n\n                // [/(?<=\\/)\\]/, \"literal\"],\n                [/\\]/, { token: \"literal\", bracket: \"@close\", next: '@pop' }],\n                [/./, 'literal']\n            ],\n\n            negativeLiteral: [\n                [/\\\\x[A-F0-9a-f]{2}(?=-)/i, { token: \"unicode-range\", bracket: '@open', next: \"@unicodeRange\" }],\n                [/\\\\u[A-F0-9a-f]{4}(?=-)/i, { token: \"unicode-range\", bracket: '@open', next: \"@unicodeRange\" }],\n                [/\\\\\\d{3}(?=-)/i, { token: \"octal-range\", bracket: '@open', next: \"@unicodeRange\" }],\n\n                [/\\\\x[A-F0-9a-f]{2}/, \"neg-literal-unicode\"],\n                [/\\\\u[A-F0-9a-f]{4}/, \"neg-literal-unicode\"],\n                [/\\\\\\d{3}/, \"octal\"],\n\n                [/\\\\./, \"literal-escape\"],\n\n                [/.(?:-)/i, { token: \"char-range\", bracket: '@open', next: \"@charRange\" }],\n\n                [/\\]/, { token: \"neg-literal\", bracket: \"@close\", next: '@pop' }],\n                [/./, 'neg-literal']\n            ],\n\n            octalRange: [\n                [/-/, \"octal-range\"],\n                [/\\\\\\d{3}/, { token: \"octal-range\", bracket: \"@close\", next: '@pop' }],\n            ],\n\n            unicodeRange: [\n                [/-/, \"unicode-range\"],\n                [/\\\\x[a-f0-9A-F]{2}/, { token: \"unicode-range\", bracket: \"@close\", next: '@pop' }],\n                [/\\\\u[a-f0-9A-F]{4}/, { token: \"unicode-range\", bracket: \"@close\", next: '@pop' }],\n            ],\n\n            charRange: [\n                [/-/, \"char-range\"],\n                [/\\\\x[a-f0-9A-F]{2}/, { token: \"char-range\", bracket: \"@close\", next: '@pop' }],\n                [/\\\\u[a-f0-9A-F]{4}/, { token: \"char-range\", bracket: \"@close\", next: '@pop' }],\n                [/./, { token: \"char-range\", bracket: \"@close\", next: '@pop' }],\n            ]\n        }\n    });\n\n    monaco.editor.defineTheme('vs-dark', {\n        base: 'vs-dark',\n        inherit: true,\n        colors: {},\n        rules: [\n            { token: 'basic.rgx', foreground: '#aedaae', },\n            { token: 'unicode.rgx', foreground: '#ffa500' },\n\n            { token: 'invalid.rgx', foreground: '#ff0000', fontStyle: 'italic' },\n            { token: 'comment.rgx', foreground: '#6a9955', fontStyle: 'italic' },\n            { token: 'posix.rgx', foreground: '#8eff8e', },\n            { token: 'posix-operator.rgx', foreground: '#8eff8e' },\n\n            { token: 'literal.rgx', foreground: '#dcdc96' },\n            { token: 'literal-unicode.rgx', foreground: '#ffa500', fontStyle: \"italic\" },\n            { token: 'literal-escape.rgx', foreground: '#8eff8e' },\n            { token: 'octal.rgx', foreground: '#ff00ff', fontStyle: \"italic\" },\n            { token: 'octal-range.rgx', foreground: '#ffff00', fontStyle: \"italic\" },\n\n            { token: 'char-range.rgx', foreground: '#f0f064' },\n            { token: 'unicode-range.rgx', foreground: '#f0f064', fontStyle: \"italic\" },\n\n            { token: 'neg-literal.rgx', foreground: '#d27878' },\n            { token: 'neg-literal-unicode.rgx', foreground: '#eb6464', fontStyle: \"italic\" },\n\n\n            { token: 'quantifier.rgx', foreground: '#80c4ff' },\n            { token: 'escape.rgx', foreground: '#8e8eff' },\n            { token: 'alternator.rgx', foreground: '#ffffff' },\n\n            { token: 'negative-lookahead.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'capture-group.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'non-capture-group.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'lookahead.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'lookbehind.rgx', foreground: '#999999', fontStyle: \"italic\" },\n        ],\n    });\n\n    monaco.editor.defineTheme('vs', {\n        base: 'vs',\n        inherit: true,\n        colors: {},\n        rules: [\n            { token: 'basic.rgx', foreground: '#aedaae', },\n            { token: 'unicode.rgx', foreground: '#ffa500' },\n\n            { token: 'invalid.rgx', foreground: '#ff0000', fontStyle: 'italic' },\n            { token: 'comment.rgx', foreground: '#6a9955', fontStyle: 'italic' },\n            { token: 'posix.rgx', foreground: '#8eff8e', },\n            { token: 'posix-operator.rgx', foreground: '#8eff8e' },\n\n            { token: 'literal.rgx', foreground: '#dcdc96' },\n            { token: 'literal-unicode.rgx', foreground: '#ffa500', fontStyle: \"italic\" },\n            { token: 'literal-escape.rgx', foreground: '#8eff8e' },\n            { token: 'octal.rgx', foreground: '#ff00ff', fontStyle: \"italic\" },\n            { token: 'octal-range.rgx', foreground: '#ffff00', fontStyle: \"italic\" },\n\n            { token: 'char-range.rgx', foreground: '#f0f064' },\n            { token: 'unicode-range.rgx', foreground: '#f0f064', fontStyle: \"italic\" },\n\n            { token: 'neg-literal.rgx', foreground: '#d27878' },\n            { token: 'neg-literal-unicode.rgx', foreground: '#eb6464', fontStyle: \"italic\" },\n\n\n            { token: 'quantifier.rgx', foreground: '#80c4ff' },\n            { token: 'escape.rgx', foreground: '#8e8eff' },\n            { token: 'alternator.rgx', foreground: '#ffffff' },\n\n            { token: 'negative-lookahead.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'capture-group.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'non-capture-group.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'lookahead.rgx', foreground: '#999999', fontStyle: \"italic\" },\n            { token: 'lookbehind.rgx', foreground: '#999999', fontStyle: \"italic\" },\n        ],\n    });\n}\n","import * as Monaco from 'monaco-editor';\n// ! Extremely helpful demonstrations:\n// https://microsoft.github.io/monaco-editor/monarch.html\n\n/** Important notes:\n *  - Regex flags do not effect tokenization. You must specify both lowercase and uppercase text.\n *  - Tokenization does not effect link detection.\n */\n\nexport function setupLogLanguage(monaco: typeof Monaco){\n    monaco.languages.register({ id: 'log' });\n\n    monaco.languages.setMonarchTokensProvider('log', {\n        defaultToken: \"\",\n        tokenPostfix: \".log\",\n        tokenizer: {\n            root: [\n\n                // Match exception \"at\"\n                [/^(  at|\\tat|    at| --- at) /gm, { token: 'exception-stack', bracket: '@open', next: '@exception' }],\n\n                // Known Types.\n                [/\\b(TypeError|Generator|Promise|httpAdapter|Axios|Function|JSON|Require stack|<anonymous>)\\b/g, \"type\"],\n\n                // Common NodeJS System Errors.\n                // https://nodejs.org/api/errors.html\n                [/(EACCES|EADDRINUSE|ECONNREFUSED|ECONNRESET|EEXIST|EISDIR|EMFILE|ENOENT|ENOTDIR|ENOTEMPTY|ENOTFOUND|EPERM|EPIPE|ETIMEDOUT)/, \"system-error\"],\n                // socket timeout exception: java.net.NoRouteToHostException\n                [/\\b(FILE_NOT_FOUND)\\b/, \"system-error\"],\n                [/\\b(GET|POST|PUT|PATCH|DELETE|COPY|HEAD|OPTIONS|LINK|UNLINK|PURGE|LOCK|UNLOCK|PROPFIND|VIEW)\\b/, \"http-method\"],\n\n\n                // Technology specific Exceptions\n                [/\\b(java\\.[a-z0-9A-Z]+?\\.[A-Za-z]+?Exception)\\b/, \"severity-error\"],\n\n\n                // Trace/Verbose\n                [/[\\b:\\s\\[](TRACE|[Tt]race|verb|verbose)[\\b:\\s\\]]/, \"severity-verbose\"],\n                // DEBUG\n                [/[\\b\\[\\s](debug|DEBUG)[\\b\\s\\]]/, \"severity-debug\"],\n                // INFO\n                [ /[\\b\\s\\[](INFO|EVENT|hint|info|INFO|information|notice)[\\b:\\s\\]]/, \"severity-info\" ],\n                // Warn\n                [ /[\\b\\[\\s](WARNING|[Ww]arning|[Ww]arn|WARN)[\\b:\\s\\]]/, \"severity-warning\" ],\n                // Error\n                [/[\\[\\b\\s](error|fatal|alert|critical|crash|emergency|PROTERR|ERROR)[\\b:\\s\\]]/, \"severity-error\"],\n\n\n\n\n                // Match the GMT log format from (apache)?\n                // e.g. Fri, 03 Dec 2021 15:31:37 GMT\n                // Monarch is ignoring the case-insensitive flag.\n                [/([mM]on|[tT]ue|[wW]ed|[tT]hu|[fF]ri|[sS]at|[sS]un), \\d\\d ([jJ]an|[fF]eb|[mM]ar|[aA]pr|[mM]ay|[jJ]un|[jJ]ul|[aA]ug|[sS]ep|[oO]ct|[nN]ov|[dD]ec) 20\\d\\d \\d\\d:\\d\\d:\\d\\d [A-Z]{3}/i, \"date\"],\n\n                // ISO dates (\"2020-01-01\")\n                [/\\b\\d{4}-\\d{2}-\\d{2}(T|\\b)/, \"date\"],\n                // Culture specific dates (\"01/01/2020\", \"01.01.2020\")\n                [/\\b\\d{2}[^\\w\\s]\\d{2}[^\\w\\s]\\d{4}\\b/, \"date\"],\n                // Clock times with optional timezone (\"01:01:01\", \"01:01:01.001\", \"01:01:01+01:01\")\n                [ /\\d{1,2}:\\d{2}(:\\d{2}([.,]\\d{1,})?)?(Z| ?[+-]\\d{1,2}:\\d{2})?\\b/, \"date\" ],\n                [ /\\d{9,10}0000/, \"date\" ],\n\n                // 20171223-23:55:24:443\n                [/2[01]\\d{6}-\\d{1,2}:\\d{1,2}:\\d{1,2}:\\d{1,3}/, \"date\"],\n\n                // [Mon Dec 05 19:00:54 2005]\n                [/\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d\\d \\d\\d:\\d\\d:\\d\\d 2[01]\\d\\d\\]/, \"date\"],\n\n                // Jul 27 14:41:59 | Jul  9 22:53:22\n                [/[A-Z][a-z]{2} [\\d ]\\d \\d\\d:\\d\\d:\\d\\d/, \"date\"],\n\n                // 17/06/09 20:11:10\n                [/\\d\\d\\/\\d\\d\\/\\d\\d \\d\\d:\\d\\d:\\d\\d/, \"date\"],\n\n                // 1131567328 2005.11.09\n                [/\\d{9,14} 2[01]\\d\\d\\.\\d\\d\\.\\d\\d/, \"date\"],\n\n                // Nov 9 12:11:23\n                [/[A-Z][a-z]{2} \\d \\d\\d:\\d\\d:\\d\\d/, \"date\"],\n\n                // TODO: Sat Feb 19 07:28:05 UTC 2022\n\n                // API scope matching\n                // e.g. [Library]\n                [/\\[[^\\]]+\\]+/, \"scope\"],\n                [/\\|[a-zA-Z0-9_]+\\|/, \"scope\"],\n                [/\\*{3,}/, \"scope\"],\n\n\n\n\n                // Git commit hashes of length 40, 10, or 7\n                [/[\\b ]([0-9a-fA-F]{40}|[0-9a-fA-F]{10}|[0-9a-fA-F]{7})[\\b \\n,]/, \"constant\" ],\n                // Guids\n                [/[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}/, \"constant\" ],\n                // Constants\n                [/[\\b ]([0-9a-f]{16}|true|false|null|new)[\\b \\n,]/, \"constant\"],\n\n                // Addresses such as 0x00000000002ec640\n                [/[\\b ](\\u0040?0x[0-9a-fA-F]{2,64})[\\b \\n,]/g, \"constant\"],\n\n                // Nan and Undefined may be important.\n                [/NaN|[Uu]ndefiend/, \"severity-warning\"],\n\n                // Match numbers\n                [/\\d+(s|ms|b)/g, \"number\"],\n                [/[\\b ](\\d\\.\\d+)[\\b \\n,]/g, \"number\"],\n                [/[\\b ](\\d+)[\\b \\n,]/g, \"number\"],\n                [/[\\b ](\\(\\d+\\))[\\b \\n,]/g, \"number\"],\n                [/[\\b ]([0-9A-F]{28})[\\b \\n,]/g, \"number\"],\n                // 0x08701021\n                // TODO: ip:55dccd85bc63 sp:7ffc3c6eaf40\n\n                // Strings\n                [/\"[^\"]*\"/, \"string\"],\n                // Regex not supported in webview\n                // [/(?<![\\w])'[^']*'/, \"string\"],\n\n                // Match remote Urls\n                // Fully qualified with protocol\n                [/(https?|ftps?|sftp|ftpes|tls|ssh|git|file|pop3?):\\/\\/\\S+/, \"file-uri1\"],\n                [/(https?|ftps?|hfds):\\/\\/[^ \\n]+/, \"file-uri2\"],\n\n                // C:\\\n                //\n                [/([A-Z]:\\\\|\\/[a-z]\\/)(([^\\\\\\/\\n])+?[\\\\\\/])+([^\\\\\\/\\n])+?[^\\s\\[\\]\\(\\)\\,\\#]+/, \"file-uri3\"],\n                // [/([A-Z]:\\\\|\\/[a-z]\\/)(([^\\\\\\/\\n])+?[\\\\\\/])+([^\\\\\\/\\n])+?\\.[a-z0-9]{2,12}/, \"file-uri\"],\n\n                // TODO: /usr/share/fonts/truetype/freefont\n\n\n                // linux-headers-6.2.0-76060200-generic:amd64\n                // (6.2.0-76060200.202302191831~1677858327~22.04~3cea1be)\n\n                [/(>= |= )[\\d\\.~\\-a-z]+/, \"version-map\"],\n\n                // Intercept BEFORE ip address.\n                // CurrentState:112\n\n                // Match IP addresses\n                //      [::ffff:192.168.1.107]                                                           [2001:0db8:85a3:0000:0000:8a2e:0370:7334]\n                // ::ffff:127.0.0.1\n                // IPv6\n                [/\\b(::1|::ffff:(([12]\\d\\d|\\d\\d?)\\.([12]\\d\\d|\\d\\d?)\\.([12]\\d\\d|\\d\\d?)\\.([12]\\d\\d|\\d\\d?))|([a-f0-9]{0,4}:){1,7}[a-f0-9]{1,4})(:\\d{2,5})?\\b/g, \"ip-address\"],\n                // IPv4\n                [/\\b(([12]\\d\\d|\\d\\d?)\\.([12]\\d\\d|\\d\\d?)\\.([12]\\d\\d|\\d\\d?)\\.([12]\\d\\d|\\d\\d?))(:\\d{2,5})?\\b/g, \"ip-address\"],\n\n                // /apps/x86_64/system/ganglia-3.0.1/sbin/gmetad\n                // [/[\\b :](\\/[^\\/\\\\\\[\\]:\\n]+)+\\/?/, \"file-uri4\"],\n\n                [/\\b\\.\\.\\.\\b/, \"muted\"],\n\n                // @ref http_logging section.\n                [/\\(/, \"control\", \"@http_logging\"],\n            ],\n\n            exception: [\n                [/(\\s{2,4}|\\t)at/, 'exception-stack'],\n                [/([A-Z]:\\\\|\\/[a-z]\\/)?[a-zA-Z0-9\\/\\\\_~.\\-\\u0040 ]+?\\.(js|ts|go)/, 'file-uri5'],\n                [/:\\d+:\\d+/, 'file-position'],\n                [/[\\b ]([0-9a-f]{16}|true|false|null|new)[\\b \\n,]/, \"constant\"],\n\n                [/^(?=[^\\s]{4})/, { token: \"control\", bracket: '@close', next: \"@pop\"}]\n            ],\n\n            http_logging: [\n                [/GET|POST|PUT|PATCH|DELETE|COPY|HEAD|OPTIONS|LINK|UNLINK|PURGE|LOCK|UNLOCK|PROPFIND|VIEW/i, \"http-method\"],\n\n                [/ -?\\d+ |-?\\d{4,99}|\\b\\d{1,2}\\b/g, \"number\"],\n                [/[\\b ]0x[0-9a-fA-F]{2,64}[\\b ]/g, \"number\"],\n\n                [/1\\d\\d/i, \"severity-verbose\"],\n                [/2\\d\\d/i, \"severity-debug\"],\n                [/3\\d\\d/i, \"constant\"],\n                [/4\\d\\d/i, \"severity-warning\"],\n                [/5\\d\\d/i, \"severity-error\"],\n                [/\\)|\\s/, 'control', '@pop']\n            ]\n        }\n    });\n\n    monaco.editor.defineTheme('vs-dark', {\n        base: 'vs-dark',\n        inherit: true,\n        colors: {\n\n        },\n        rules: [\n            { token: 'severity-verbose.log', foreground: '#90a4ae' },\n            { token: 'severity-debug.log',   foreground: '#7cace8' },\n            { token: 'severity-info.log',    foreground: '#4caf50' },\n            { token: 'severity-error.log',   foreground: '#e43e3e', fontStyle: 'bold' },\n            { token: 'severity-warning.log', foreground: '#ff9800' },\n\n            { token: 'date.log',             foreground: '#00bfae' },\n            { token: 'scope.log',            foreground: '#aaaaaa' },\n            { token: 'code.log',             foreground: '#8aacbc' },\n\n            { token: 'exception-stack.log',  foreground: '#ff9800', fontStyle: 'bold' },\n            { token: 'file-uri.log',         foreground: '#90caf9', fontStyle: 'italic' },\n            { token: 'file-uri1.log',        foreground: '#90caf8', fontStyle: 'italic' },\n            { token: 'file-uri2.log',        foreground: '#90caf7', fontStyle: 'italic' },\n            { token: 'file-uri3.log',        foreground: '#90caf6', fontStyle: 'italic' },\n            { token: 'file-uri4.log',        foreground: '#90caf5', fontStyle: 'italic' },\n            { token: 'file-uri5.log',        foreground: '#90caf4', fontStyle: 'italic' },\n            { token: 'file-uri6.log',        foreground: '#90caf3', fontStyle: 'italic' },\n            { token: 'file-uri7.log',        foreground: '#90caf2', fontStyle: 'italic' },\n            { token: 'ip-address.log',       foreground: '#90f998', fontStyle: 'italic' },\n            { token: 'file-position.log',    foreground: '#b6e7ff' },\n            { token: 'type.log',             foreground: '#2196f3' },\n            { token: 'http-method.log',      foreground: '#bdbdbd' },\n            { token: 'system-error.log',     foreground: '#ffc107' },\n            { token: 'muted.log',            foreground: '#777777' },\n        ],\n    });\n\n    monaco.editor.defineTheme('vs', {\n        base: 'vs',\n        inherit: true,\n        colors: {\n\n        },\n        rules: [\n            { token: 'severity-verbose.log', foreground: '#90a4ae' },\n            { token: 'severity-debug.log', foreground: '#7cace8' },\n            { token: 'severity-info.log', foreground: '#4caf50' },\n            { token: 'severity-error.log', foreground: '#e43e3e', fontStyle: 'bold' },\n            { token: 'severity-warning.log', foreground: '#ff9800' },\n\n            { token: 'date.log', foreground: '#00bfae' },\n            { token: 'scope.log', foreground: '#aaaaaa' },\n            { token: 'code.log', foreground: '#8aacbc' },\n\n            { token: 'exception-stack.log', foreground: '#ff9800', fontStyle: 'bold' },\n            { token: 'file-uri.log', foreground: '#90caf9', fontStyle: 'italic' },\n            { token: 'file-uri1.log', foreground: '#90caf8', fontStyle: 'italic' },\n            { token: 'file-uri2.log', foreground: '#90caf7', fontStyle: 'italic' },\n            { token: 'file-uri3.log', foreground: '#90caf6', fontStyle: 'italic' },\n            { token: 'file-uri4.log', foreground: '#90caf5', fontStyle: 'italic' },\n            { token: 'file-uri5.log', foreground: '#90caf4', fontStyle: 'italic' },\n            { token: 'file-uri6.log', foreground: '#90caf3', fontStyle: 'italic' },\n            { token: 'file-uri7.log', foreground: '#90caf2', fontStyle: 'italic' },\n            { token: 'ip-address.log', foreground: '#90f998', fontStyle: 'italic' },\n            { token: 'file-position.log', foreground: '#b6e7ff' },\n            { token: 'type.log', foreground: '#2196f3' },\n            { token: 'http-method.log', foreground: '#bdbdbd' },\n            { token: 'system-error.log', foreground: '#ffc107' },\n            { token: 'muted.log', foreground: '#777777' },\n        ],\n    });\n}\n","import * as MonacoEditor from 'monaco-editor';\nimport { setupMermaidLanguage } from './mermaid-tokenizer';\nimport { setupRegexLanguage } from './regex-tokenizer';\nimport { setupLogLanguage } from './log-tokenizer';\n\nlet isMonacoInstalled = false;\nconst installationLocation = '/lib/monaco/vs';\n\nexport function installMonaco() {\n    if (isMonacoInstalled || window['monaco']) return;\n\n    // Monaco has a UMD loader that requires this\n    // Merge with any pre-existing global require objects.\n    if (!window['require']) window['require'] = {} as any;\n    if (!window['require']['paths']) window['require']['paths'] = {};\n\n    window['require']['paths'].vs = installationLocation;\n\n    const monacoFiles = [\n        'loader.js',\n        'editor/editor.main.nls.js',\n        'editor/editor.main.js',\n    ];\n\n    for (let i = 0; i < monacoFiles.length; i++) {\n        const script = document.createElement(\"script\");\n        script.setAttribute(\"defer\", \"\");\n        script.setAttribute(\"src\", installationLocation + '/' + monacoFiles[i]);\n        document.body.append(script);\n    }\n    isMonacoInstalled = true;\n}\n\nexport function waitForMonacoInstall() {\n    return new Promise((res, rej) => {\n        let count = 0;\n        let i = window.setInterval(() => {\n            count++;\n\n            if (window['monaco'] != undefined) {\n                window.clearInterval(i);\n\n                setupMermaidLanguage(window['monaco']);\n                setupRegexLanguage(window['monaco']);\n                setupLogLanguage(window['monaco']);\n\n                res(true);\n            }\n            if (count >= 100) {\n                window.clearInterval(i);\n                res(false);\n            }\n        }, 100);\n    });\n}\n\nexport const MonacoAliasMap = {\n    'ts': 'typescript',\n    'js': 'javascript',\n    'sh': 'shell',\n    'bash': 'shell',\n    'ash': 'shell',\n    'zsh': 'shell',\n    'yml': 'yaml',\n    'rb': 'ruby',\n    'ps1': 'powershell',\n    'pwsh': 'powershell',\n    'py': 'python',\n    'py2': 'python',\n    'py3': 'python',\n    'python2': 'python',\n    'python3': 'python',\n    'md': 'markdown',\n    'c#': 'csharp',\n    'cs': 'csharp',\n    'c++': 'cpp',\n    'h': 'cpp',\n    'regex': 'rgx',\n    'pcre': 'rgx',\n    'rx': 'rgx'\n};\n\n// .sh.js.ts.py.bat.ps1.rb.lua.r\nexport const invokableLanguages = [\n    \"javascript\"\n]\n","import mermaid, { MermaidConfig } from 'mermaid';\nimport { ulid } from 'ulidx';\n\nconst config: MermaidConfig = {\n    logLevel: 5,\n    startOnLoad: false,\n    arrowMarkerAbsolute: false,\n    theme: 'base',\n    securityLevel: \"strict\",\n    wrap: true,\n    htmlLabels: true,\n    fontSize: 20,\n    themeVariables: {\n        primaryColor: '#464646',\n        primaryTextColor: '#fff',\n        // primaryBorderColor: '#7C0000',\n        lineColor: '#84FFFF',\n        secondaryColor: '#00E5FF',\n        tertiaryColor: '#536DFE',\n        noteBkgColor: '#84FFFF',\n        noteTextColor: '#121212'\n    },\n    flowchart: {\n        htmlLabels: true,\n        curve: 'linear',\n    },\n    sequence: {\n        diagramMarginX: 50,\n        diagramMarginY: 10,\n        actorMargin: 50,\n        width: 150,\n        height: 65,\n        boxMargin: 10,\n        boxTextMargin: 5,\n        noteMargin: 10,\n        messageMargin: 35,\n        mirrorActors: true,\n        bottomMarginAdj: 1,\n        useMaxWidth: true,\n    },\n    gantt: {\n        titleTopMargin: 25,\n        barHeight: 20,\n        barGap: 4,\n        topPadding: 50,\n        leftPadding: 75,\n        gridLineStartPadding: 35,\n        fontSize: 11,\n        numberSectionStyles: 4,\n        axisFormat: '%Y-%m-%d',\n    },\n};\n\nconst containerElt = document.createElement('div');\ncontainerElt.className = 'hidden-rendering-container';\ndocument.body.appendChild(containerElt);\n\nlet init = () => {\n    mermaid.initialize(config);\n    init = () => { };\n};\n\nconst render = (elt: HTMLElement, text?: string) => new Promise(r => {\n    init();\n    const svgId = `mermaid-svg-${ulid()}`;\n\n    // Trigger this slightly out-of sync to allow\n    // the rest of the startup sequences to settle.\n    setTimeout(() => {\n        mermaid.mermaidAPI.renderAsync(svgId, text ?? elt.textContent, () => {\n            while (elt?.firstChild) {\n                elt.removeChild(elt.lastChild);\n            }\n\n            const el = containerElt.querySelector('#' + svgId)\n            elt.appendChild(el);\n        }, containerElt)\n            .catch(e => {\n                // In the event of an invalid mermaid chart, render the section with an error message.\n                elt.innerHTML = `<pre>${e.message}</pre>`;\n                // if (e.message == \"Cannot read properties of null (reading 'firstChild')\")\n            });\n\n    }, 0);\n});\n\nexport default (extensionSvc) => {\n\n    extensionSvc.onGetOptions((options, properties) => {\n        options.mermaid = properties.extensions.mermaid.enabled;\n    });\n\n    extensionSvc.onSectionPreview((elt) => {\n        elt.querySelectorAll('.prism.language-mermaid')\n            .forEach(diagramElt => render(diagramElt.parentNode));\n    });\n\n};\n\nexport const RenderMermaid = render\n","import DiffMatchPatch from 'diff-match-patch';\nimport MarkdownIt from 'markdown-it';\nimport { ulid } from 'ulidx';\n// import dompurify from 'dompurify';\nimport type * as Monaco from 'monaco-editor';\n\nimport Prism from './prism';\nimport markdownConversionSvc from './markdownConversionSvc';\nimport sectionUtils, { SectionDimension } from './editor/sectionUtils';\nimport { VanillaMirror } from './editor/vanilla-mirror';\nimport { EventEmittingClass, findContainer, debounce } from './editor/utils';\nimport { StackEditorComponent } from './editor.component';\nimport markdownGFM from './extensions/markdownExtension';\nimport { Section } from './editor/highlighter';\nimport { MonacoAliasMap, invokableLanguages, waitForMonacoInstall } from './monaco';\nimport { RenderMermaid } from './extensions/mermaidExtension';\nimport { SecurityContext } from '@angular/core';\n\ndeclare const monaco: typeof Monaco;\n\nconst allowDebounce = (action, wait) => {\n    let timeoutId;\n    return (doDebounce = false, ...params) => {\n        clearTimeout(timeoutId);\n        if (doDebounce) {\n            timeoutId = setTimeout(() => action(...params), wait);\n        }\n        else {\n            action(...params);\n        }\n    };\n};\n\n\nexport class SectionDesc {\n    public editorElt: HTMLElement;\n\n    public editorDimension: SectionDimension;\n    public previewDimension: SectionDimension;\n    public tocDimension: SectionDimension;\n\n    public previewText: string;\n    public textToPreviewDiffs: [0 | 1 | -1, string][];\n\n    public ulid = ulid();\n\n    constructor(\n        public section: Section,\n        public previewElt: HTMLElement,\n        public tocElt: HTMLElement,\n        public html: string\n    ) {\n        this.editorElt = section.elt;\n\n        previewElt?.setAttribute(\"ulid\", this.ulid);\n        tocElt?.setAttribute(\"ulid\", this.ulid);\n        section?.elt?.setAttribute(\"ulid\", this.ulid);\n    }\n}\n\n// Use a vue instance as an event bus\nexport class Editor extends EventEmittingClass {\n\n    public clEditor: VanillaMirror;\n\n    diffMatchPatch = new DiffMatchPatch();\n    instantPreview = true;\n    tokens;\n\n    // Other object;\n    parsingCtx: any;\n    conversionCtx: any;\n    previewCtx = {\n        sectionDescList: [] as SectionDesc[]\n    };\n    previewCtxMeasured: any;\n    previewCtxWithDiffs: any;\n    sectionList: Section[];\n    selectionRange: any;\n\n    converter: MarkdownIt;\n\n    getOptionsListeners = [];\n    initConverterListeners = [];\n    sectionPreviewListeners = [];\n\n    imageElementCache: { [key: string]: HTMLElement } = {};\n\n    overlay1: HTMLElement;\n    overlay2: HTMLElement;\n    underlay: HTMLElement;\n\n    focus: \"editorContentEditable\" | \"monaco\";\n\n    /**\n     * Pass the elements to the store and initialize the editor.\n     */\n    constructor(\n        private ngEditor: StackEditorComponent,\n        public editorElt: HTMLElement,\n        public previewElt: HTMLElement,\n        public tocElt: HTMLElement\n    ) {\n        super();\n\n        this.overlay1 = editorElt.querySelector(\".editor-overlay-1\");\n        this.overlay2 = editorElt.querySelector(\".editor-overlay-2\");\n        this.underlay = editorElt.querySelector(\".editor-underlay\");\n\n        // Enable standard markdown rendering support\n        markdownGFM(this);\n\n        Promise.all([\n            // (!ngEditor.options.disableEmoji)\n            //     ? import('./extensions/emojiExtension').then((ext) => ext.default(this))\n            //     : null,\n            (!ngEditor.options.disableMermaid)\n                ? import('./extensions/mermaidExtension').then((ext) => ext.default(this))\n                : null,\n        ].filter(e => !!e)).then((extensions) => {\n            this.converter = markdownConversionSvc.createConverter();\n            this.initConverter(this.converter, ngEditor.options.markdownIt);\n            this.clEditor = new VanillaMirror(\n                this.ngEditor,\n                editorElt.querySelector('.editor-inner'),\n                this.ngEditor.value\n                );\n\n            let scrollMode: \"editor\" | \"preview\";\n            let lastScrollEvent = 0;\n            const scrollDebounceTime = 500;\n\n            // Manually handle scroll events\n            const onScroll = (e) => {\n                e.preventDefault();\n                this.restoreScrollPosition(\n                    this.getScrollPosition(scrollMode == 'editor' ? editorElt : previewElt)\n                );\n            };\n\n            editorElt.parentElement.parentElement.onscroll = evt => {\n                if (scrollMode == \"editor\" || lastScrollEvent + scrollDebounceTime < Date.now()) {\n                    scrollMode = \"editor\";\n                    lastScrollEvent = Date.now();\n                    onScroll(evt);\n                }\n            };\n            previewElt.parentElement.parentElement.parentElement.onscroll = evt => {\n                if (scrollMode == \"preview\" || lastScrollEvent + scrollDebounceTime < Date.now()) {\n                    scrollMode = \"preview\";\n                    lastScrollEvent = Date.now();\n                    onScroll(evt);\n                }\n            };\n\n            const refreshPreview = allowDebounce(() => {\n                this.convert();\n                if (this.instantPreview) {\n                    this.refreshPreview();\n                    this.measureSectionDimensions(false, true);\n                }\n                else {\n                    setTimeout(() => this.refreshPreview(), 10);\n                }\n                this.instantPreview = false;\n            }, 25);\n\n            let newSectionList;\n            let newSelectionRange;\n            this.clEditor.on('contentChanged', (text, diffs, sectionList) => {\n                this.parsingCtx.sectionList = sectionList;\n                newSectionList = sectionList;\n                onEditorChanged(!this.instantPreview);\n            });\n\n            const onEditorChanged = allowDebounce(() => {\n                if (this.sectionList !== newSectionList) {\n                    this.sectionList = newSectionList;\n                    this.$trigger('sectionList', this.sectionList);\n                    refreshPreview(!this.instantPreview);\n                }\n                if (this.selectionRange !== newSelectionRange) {\n                    this.selectionRange = newSelectionRange;\n                    this.$trigger('selectionRange', this.selectionRange);\n                }\n            }, 10);\n\n            window.addEventListener('resize', this.refreshScrollSync);\n            // Need to listen to focus because resize events that occur\n            // when the tab isn't focused may not always fire.\n            window.addEventListener('focus', this.refreshScrollSync);\n\n            this.clEditor.selectionMgr.on('selectionChanged', (start, end, selectionRange) => {\n                newSelectionRange = selectionRange;\n                onEditorChanged(!this.instantPreview);\n            });\n\n            this.clEditor.highlighter.on('sectionHighlighted', (section) =>\n                this.onEditorRenderSection(section));\n\n            this.measureSectionDimensions(false, true, true);\n            this.initClEditor();\n\n            this.clEditor.toggleEditable(true);\n            this.$trigger('loaded');\n        });\n    }\n\n    destroy() {\n        this.clEditor.destroy();\n        window.removeEventListener('resize', this.refreshScrollSync);\n        window.removeEventListener('focus', this.refreshScrollSync);\n    }\n\n    onGetOptions(listener: Function) {\n        this.getOptionsListeners.push(listener);\n    }\n\n    onInitConverter(priority: number, listener: Function) {\n        this.initConverterListeners[priority] = listener;\n    }\n\n    onSectionPreview(listener: Function) {\n        this.sectionPreviewListeners.push(listener);\n    }\n\n    getOptions(properties, isCurrentFile?) {\n        return this.getOptionsListeners.reduce((options, listener) => {\n            listener(options, properties, isCurrentFile);\n            return options;\n        }, {});\n    }\n\n    initConverter(markdown: MarkdownIt, options: any) {\n        // Use forEach as it's a sparsed array\n        this.initConverterListeners.forEach((listener) => {\n            listener(markdown, options);\n        });\n    }\n\n    sectionPreview(elt, options, isEditor) {\n        this.sectionPreviewListeners.forEach((listener) => {\n            listener(elt, options, isEditor);\n        });\n    }\n\n    onEditorRenderSection(s: Section) {\n        const section = s;\n\n        // Render images inline in the editor.\n        section.elt.querySelectorAll('.token.img').forEach((imgTokenElt) => {\n            const srcElt = imgTokenElt.querySelector('.img-src');\n            if (!srcElt) return;\n            // TODO: sanitize URIs?\n            // Also add support for URI whitelists.\n\n            // Create an img element before the .img.token and wrap both elements\n            // into a .token.img-wrapper\n            const imgElt = document.createElement('img');\n            imgElt.style.display = 'none';\n            const uri = srcElt.textContent;\n\n            imgElt.onload = () => {\n                imgElt.style.display = '';\n\n                sectionUtils.measureSectionDimensions(this);\n                this.previewCtxMeasured = this.previewCtx;\n                this.sectionList?.forEach(s => s.monaco?.['_resize']());\n                this.restoreScrollPosition();\n\n                const width = imgElt.offsetWidth;\n                const height = imgElt.offsetHeight;\n\n                if (height > 30) {\n                    imgElt.parentElement.classList.add(\"img-block\")\n                }\n\n                const rsObserver = new ResizeObserver(() => {\n                    this.restoreScrollPosition();\n                });\n                rsObserver.observe(imgElt, { box: 'border-box' });\n            };\n            imgElt.src = uri;\n            // Take img size into account\n            const sizeElt = imgTokenElt.querySelector('.size');\n            if (sizeElt) {\n                const match = sizeElt.textContent.match(/=(\\d*)x(\\d*)/);\n                if (match[1]) {\n                    imgElt.width = parseInt(match[1], 10);\n                }\n                if (match[2]) {\n                    imgElt.height = parseInt(match[2], 10);\n                }\n            }\n\n            this.imageElementCache[uri] = imgElt;\n\n            const imgTokenWrapper = document.createElement('span');\n            imgTokenWrapper.className = 'token img-wrapper';\n            imgTokenElt.parentNode.insertBefore(imgTokenWrapper, imgTokenElt);\n            imgTokenWrapper.appendChild(imgElt);\n            imgTokenWrapper.appendChild(imgTokenElt);\n        });\n\n        let imgCache = {};\n        this.clEditor.highlighter.on('highlighted', () => {\n            Object.entries(this.imageElementCache).forEach(([key, imgElt]) => {\n\n                const cachedImgElt = imgCache[key];\n                if (cachedImgElt) {\n                    // Found a previously loaded image that has just been released\n                    imgElt.parentNode.replaceChild(cachedImgElt, imgElt);\n                }\n                else {\n                    imgCache[key] = imgElt;\n                }\n            });\n            this.imageElementCache = {};\n        });\n\n        section.elt.querySelectorAll('.image-spinner').forEach((fenceElement: HTMLElement) => {\n            const insertWrapper = document.createElement('div');\n            insertWrapper.className = 'img-spinner';\n            insertWrapper.innerHTML = `<div class=\"spinnerMax\"><div class=\"spinnerMid\"><div class=\"spinnerMin\"><span>\\`\\`\\`img-spinner\\`\\`\\`</span></div></div></div>`;\n\n            fenceElement.insertAdjacentElement('beforebegin', insertWrapper);\n            fenceElement.remove();\n        });\n\n        // Run on next tick to allow for style updates to propagate\n        setTimeout(() => {\n            // return;\n            section.elt.querySelectorAll('.code-block').forEach((cb: HTMLElement) => {\n                const codeBlock = cb;\n                section.elt.classList.add(\"monaco-injected\");\n                const id = section.elt.getAttribute(\"ulid\");\n                const langEl = codeBlock.parentElement.querySelector('.code-language');\n                const targetLang = langEl.textContent?.toLowerCase() || 'auto';\n                // Map aliases to known monaco languages\n                const language = MonacoAliasMap[targetLang] || targetLang;\n\n                const monacoContainer = document.createElement('div');\n                monacoContainer.setAttribute(\"ulid\", section.elt.getAttribute(\"ulid\"));\n                monacoContainer.classList.add(\"monaco-container\");\n\n                let languages: string[] = [];\n\n                switch (this.ngEditor.codeRunner) {\n                    case \"custom\": languages = this.ngEditor.customCodeLanguages; break;\n                    case \"eval\": languages = ['javascript', 'js']; break;\n                    case \"piston\": languages = window['root']?.utils.pistonRuntimes\n                        .map(l => [l.language, ...l.aliases]).flat(); break;\n                }\n\n                if (this.ngEditor.showCodeRunButton && languages.includes(targetLang)) {\n                    const runButton = document.createElement('mat-icon');\n                    runButton.classList.add(\"material-icons\");\n                    runButton.classList.add(\"run-button\");\n                    runButton.innerHTML = \"play_arrow\";\n                    runButton.onclick = async () => {\n                        switch (this.ngEditor.codeRunner) {\n                            case \"custom\": {\n                                this.ngEditor.onCustomCodeExecute.next({\n                                    content: codeBlock.textContent,\n                                    language: targetLang\n                                })\n                                break;\n                            }\n                            case \"eval\": {\n                                // TODO: run in worker thread to secure it, if even a little bit.\n                                let res = eval(codeBlock.textContent);\n                                if (typeof res == \"function\")\n                                    res = await res();\n                                break;\n                            }\n                            case \"piston\": {\n                                const runtimes = await window['root']?.utils.getPistonRuntimes()\n                                    .catch(e => []);\n                                const lang = runtimes.find(r =>\n                                    r.language == language || r.aliases.includes(language)\n                                );\n                                window['root']?.utils.runPistonScript(lang, [{\n                                    content: codeBlock.textContent,\n                                    encoding: \"utf-8\",\n                                    name: ulid()\n                                }]);\n                            }\n                        }\n\n                        // ... Do something with the result\n                    }\n                    monacoContainer.append(runButton);\n                }\n\n                if (this.ngEditor.showCodeCopyButton) {\n                    const copyButton = document.createElement('mat-icon');\n                    copyButton.classList.add(\"material-icons\");\n                    copyButton.classList.add(\"copy-button\");\n                    copyButton.innerHTML = \"content_copy\";\n                    copyButton.onclick = () => {\n                        navigator.clipboard.writeText(section.text);\n                    }\n                    monacoContainer.append(copyButton);\n                }\n\n\n                // Lookup the closest actual style definition\n                const originalStyles = (() => {\n                    const styleOrder = [\n                        window.getComputedStyle(codeBlock),\n                        window.getComputedStyle(section.elt),\n                        window.getComputedStyle(this.editorElt),\n                        window.getComputedStyle(document.body)\n                    ];\n                    const obj = {};\n                    Object.keys(styleOrder[0]).forEach(key => {\n                        obj[key] = styleOrder[0][key] ||\n                                styleOrder[1][key] ||\n                                styleOrder[2][key] ||\n                                styleOrder[3][key]\n                    });\n                    return obj as CSSStyleDeclaration;\n                })();\n\n                const settings: Monaco.editor.IStandaloneEditorConstructionOptions = {\n                    theme: \"vs-dark\",\n                    automaticLayout: true,\n                    colorDecorators: true,\n                    lineHeight: 24,\n                    folding: true,\n                    // ! This _cannot_ be used reliably without testing on\n                    // Windows, macOS, AND Linux\n                    // fontFamily: 'var(--stackedit-font-family-mono)',\n                    fontSize: parseInt(originalStyles?.fontSize?.replace('px', '')) || 16,\n                    scrollbar: {\n                        alwaysConsumeMouseWheel: false\n                    },\n                    minimap: {\n                        enabled: false\n                    },\n                    smoothScrolling: true,\n                    mouseWheelScrollSensitivity: 2,\n                    scrollBeyondLastLine: false,\n                    value: codeBlock.textContent,\n                    language: language\n                };\n                const editor = section.monaco = monaco.editor.create(monacoContainer, settings);\n                const model = editor.getModel();\n\n                // ! Time for untyped bindings.\n                monacoContainer['_editor'] = editor;\n                codeBlock['_editor'] = editor;\n                codeBlock['_monacoContainer'] = monacoContainer;\n                codeBlock['_section'] = section;\n                editor['_resize'] = () => {\n                    // Add 1 extra line to accommodate the scroll bar and other pixel\n                    // imperfect artifacts\n                    monacoContainer.style.height = codeBlock.offsetHeight + (0) + \"px\";\n                    monacoContainer.style.width = codeBlock.offsetWidth + \"px\";\n                    monacoContainer.style.top = codeBlock.offsetTop + 'px';\n                    monacoContainer.style.left = (codeBlock.offsetLeft - this.overlay1.offsetLeft) + 'px';\n                    // monacoContainer.style.left = '12px';\n                }\n                editor['_resize']();\n                const rsObserver = new ResizeObserver(editor['_resize']);\n                rsObserver.observe(codeBlock, { box: 'border-box' });\n\n                // Prevent editor click handler from deselecting the element\n                monacoContainer.onclick = evt => {\n                    evt.stopPropagation();\n                    this.focus = \"monaco\";\n                }\n\n                let lastCursPos: Monaco.Position;\n                const disposables = [\n                    model.onDidChangeContent(() => {\n                        const text = editor.getValue();\n                        const cleanedText = text.replace(/\\\\n/gm, '\\n')\n                            .replace(/\\\\\"/gm, '\"');\n\n                        section.text = cleanedText;\n\n                        // Handle completely passively.\n                        // Watcher will trigger a rebuild of monaco.\n                        this.clEditor.watcher.noWatch(() => {\n                            codeBlock.textContent = cleanedText;\n\n                            const previewSection = this.previewElt.querySelector(`.cl-preview-section[ulid=\"${id}\"]`);\n                            const prismContainer = previewSection?.querySelector(\".prism\");\n                            if (!previewSection) return;\n\n                            const mermaidElement = previewSection.querySelector(\".language-mermaid\");\n                            if (mermaidElement) {\n                                RenderMermaid(mermaidElement as HTMLElement, cleanedText);\n                            }\n                            else {\n                                const lang = prismContainer.classList.value\n                                    .split(\" \")\n                                    .find(v => v.startsWith(\"language-\"))\n                                    ?.replace('language-', '') || \"auto\";\n\n                                const updated = Prism.highlight(cleanedText, Prism.languages[lang]);\n                                prismContainer.innerHTML = updated;\n                            }\n                        });\n                    }),\n                    editor.onDidChangeCursorPosition(e => {\n                        lastCursPos = e.position;\n                    }),\n                    editor.onKeyDown(e => {\n                        if (e.altKey || e.shiftKey || e.ctrlKey)\n                            return;\n\n                        if (e.code != \"ArrowUp\" && e.code != \"ArrowDown\")\n                            return;\n\n                        lastCursPos = lastCursPos || editor.getSelection().getPosition();\n\n                        const gutter =  editor.getDomNode().querySelector('.margin-view-overlays') as HTMLDivElement;\n\n                        if (e.code == \"ArrowUp\" && lastCursPos.lineNumber <= 1) {\n                            e.preventDefault();\n                            const node = codeBlock.previousElementSibling.previousElementSibling;\n\n                            const { left, top } = node.getBoundingClientRect();\n                            this.clEditor.rebaseSelectionByPixel(left + gutter.offsetWidth, top);\n                            this.clEditor.focus();\n                            this.focus = \"editorContentEditable\";\n                            return;\n                        }\n\n                        const text = editor.getValue();\n                        const lines = text.match(/[\\r\\n]/g).length;\n                        if (e.code == \"ArrowDown\" && lastCursPos.lineNumber >= lines+1) {\n                            e.preventDefault();\n                            const node = codeBlock.nextElementSibling;\n\n                            const {left, top} = node.getBoundingClientRect();\n                            this.clEditor.rebaseSelectionByPixel(left + gutter.offsetWidth, top);\n                            this.clEditor.focus();\n                            this.focus = \"editorContentEditable\";\n                            return;\n                        }\n                    })\n                ];\n\n\n                editor['_dispose'] = () => {\n                    rsObserver.disconnect();\n                    disposables.forEach(d => d.dispose());\n                    editor.dispose();\n                }\n\n                this.overlay1.appendChild(monacoContainer);\n            });\n        })\n    }\n\n    /**\n     * Get an object describing the position of the scroll bar in the file.\n     */\n    getScrollPosition(elt: HTMLElement) {\n\n        const dimensionKey = elt === this.editorElt\n            ? 'editorDimension'\n            : 'previewDimension';\n\n        const { scrollTop } = dimensionKey == \"editorDimension\" ? elt.parentElement.parentElement : elt.parentElement.parentElement.parentElement;\n\n        let result;\n\n        this.previewCtxMeasured?.sectionDescList.find((sectionDesc, sectionIdx) => {\n            if (!sectionDesc[dimensionKey]) return false;\n\n            if (scrollTop >= (sectionDesc[dimensionKey].topOffset + sectionDesc[dimensionKey].height)) {\n                return false;\n            }\n            const posInSection = (scrollTop - sectionDesc[dimensionKey].topOffset) /\n                (sectionDesc[dimensionKey].height || 1);\n\n            result = {\n                sectionDesc,\n                sectionIdx,\n                posInSection\n            };\n            return true;\n        });\n\n        return result;\n    }\n\n    /**\n     * Restore the scroll position from the current file content state.\n     */\n    restoreScrollPosition(scrollPosition?) {\n        const sectionDesc: SectionDesc = this.previewCtxMeasured?.sectionDescList[scrollPosition?.sectionIdx];\n        if (!sectionDesc) return;\n\n        const editorScroller = this.editorElt.parentElement.parentElement;\n        const previewScroller = this.previewElt.parentElement.parentElement.parentElement;\n\n        const editorScrollTop = sectionDesc.editorDimension.topOffset +\n            (sectionDesc.editorDimension.height * scrollPosition.posInSection);\n\n        editorScroller.scrollTo(0, editorScrollTop);\n\n        const previewScrollTop = sectionDesc.previewDimension.topOffset +\n            (sectionDesc.previewDimension.height * scrollPosition.posInSection);\n\n        previewScroller.scrollTo(0, previewScrollTop);\n    }\n\n    /**\n     * Get the offset in the preview corresponding to the offset of the markdown in the editor\n     * @unused\n     */\n    getPreviewOffset(\n        editorOffset,\n        sectionDescList = (this.previewCtxWithDiffs || {} as any).sectionDescList,\n    ) {\n        if (!sectionDescList) {\n            return null;\n        }\n        let offset = editorOffset;\n        let previewOffset = 0;\n        sectionDescList.find((sectionDesc) => {\n            if (!sectionDesc.textToPreviewDiffs) {\n                previewOffset = null;\n                return true;\n            }\n            if (sectionDesc.section.text.length >= offset) {\n                previewOffset += this.diffMatchPatch.diff_xIndex(sectionDesc.textToPreviewDiffs, offset);\n                return true;\n            }\n            offset -= sectionDesc.section.text.length;\n            previewOffset += sectionDesc.previewText.length;\n            return false;\n        });\n        return previewOffset;\n    }\n\n    /**\n     * Get the offset of the markdown in the editor corresponding to the offset in the preview\n     * @unused\n     */\n    getEditorOffset(\n        previewOffset,\n        sectionDescList = (this.previewCtxWithDiffs || {}).sectionDescList,\n    ) {\n        if (!sectionDescList) {\n            return null;\n        }\n        let offset = previewOffset;\n        let editorOffset = 0;\n        sectionDescList.find((sectionDesc) => {\n            if (!sectionDesc.textToPreviewDiffs) {\n                editorOffset = null;\n                return true;\n            }\n            if (sectionDesc.previewText.length >= offset) {\n                const previewToTextDiffs = sectionDesc.textToPreviewDiffs\n                    .map(diff => [-diff[0], diff[1]]);\n                editorOffset += this.diffMatchPatch.diff_xIndex(previewToTextDiffs, offset);\n                return true;\n            }\n            offset -= sectionDesc.previewText.length;\n            editorOffset += sectionDesc.section.text.length;\n            return false;\n        });\n        return editorOffset;\n    }\n\n    /**\n     * Get the coordinates of an offset in the preview\n     * @unused\n     *\n     * ! Was used by discussions\n     */\n    getPreviewOffsetCoordinates(offset?: number) {\n        // TODO:\n        const start = findContainer(this.previewElt, offset && offset - 1);\n        const end = findContainer(this.previewElt, offset || offset + 1);\n        const range = document.createRange();\n        range.setStart(start.container, start.offsetInContainer);\n        range.setEnd(end.container, end.offsetInContainer);\n        const rect = range.getBoundingClientRect();\n        const contentRect = this.previewElt.getBoundingClientRect();\n\n        return {\n            top: Math.round((rect.top - contentRect.top) + this.previewElt.scrollTop),\n            height: Math.round(rect.height),\n            left: Math.round((rect.right - contentRect.left) + this.previewElt.scrollLeft),\n        };\n    }\n\n    /**\n     * Scroll the preview (or the editor if preview is hidden) to the specified anchor\n     * @unused\n     */\n    scrollToAnchor(anchor: string) {\n        let scrollTop = 0;\n        const scrollerElt = this.previewElt.parentElement.parentElement.parentElement as HTMLElement;\n        const elt = document.getElementById(anchor);\n\n        if (!elt) return;\n\n        scrollTop = Math.min(Math.max(elt.offsetTop, 0), );\n\n        const maxScrollTop = scrollerElt.scrollHeight - scrollerElt.offsetHeight;\n        if (scrollTop < 0) {\n            scrollTop = 0;\n        }\n        else if (scrollTop > maxScrollTop) {\n            scrollTop = maxScrollTop;\n        }\n    }\n\n    /**\n     * Initialize the cledit editor with markdown-it section parser and Prism highlighter\n     */\n    initClEditor() {\n        this.previewCtxMeasured = null;\n        this.$trigger('previewCtxMeasured', null);\n        this.previewCtxWithDiffs = null;\n        this.$trigger('previewCtxWithDiffs', null);\n\n        this.clEditor.init();\n        this.restoreScrollPosition();\n    }\n\n    /**\n     * Finish the conversion initiated by the section parser\n     */\n    convert() {\n        this.conversionCtx = markdownConversionSvc.convert(this.parsingCtx, this.conversionCtx);\n        this.$trigger('conversionCtx', this.conversionCtx);\n        this.tokens = this.parsingCtx.markdownState?.tokens;\n    }\n\n    /**\n     * Refresh the preview with the result of `convert()`\n     */\n    async refreshPreview() {\n        const sectionDescList: SectionDesc[] = [];\n\n        let sectionIdx = 0;\n        let sectionDescIdx = 0;\n        let insertBeforePreviewElt = this.previewElt.firstChild;\n        let insertBeforeTocElt = this.tocElt.firstChild;\n        let previewHtml = '';\n        let loadingImages = [];\n\n        this.conversionCtx.htmlSectionDiff.forEach((item) => {\n            if (!item) return;\n\n            for (let i = 0; i < item[1]?.length; i++) {\n                const section = this.conversionCtx.sectionList?.[sectionIdx];\n\n                // In rare cases sections may fail to render and cause\n                // the editor to spit out errors\n                if (!item || !section)\n                    continue;\n\n                if (item[0] === 0) {\n                    let sectionDesc = this.previewCtx.sectionDescList?.[sectionDescIdx] as SectionDesc;\n\n                    // ??? This occurs sometimes\n                    if (!sectionDesc) continue;\n\n                    // Trigger a resize event\n                    sectionDesc.section?.monaco?.['_resize']();\n\n                    sectionDescIdx++;\n\n                    if (sectionDesc.editorElt !== section.elt) {\n                        // Force textToPreviewDiffs computation\n                        sectionDesc = new SectionDesc(\n                            section,\n                            sectionDesc.previewElt,\n                            sectionDesc.tocElt,\n                            sectionDesc.html,\n                        );\n                    }\n\n                    sectionDescList.push(sectionDesc);\n                    previewHtml += sectionDesc.html;\n                    sectionIdx++;\n                    insertBeforePreviewElt = insertBeforePreviewElt.nextSibling;\n                    insertBeforeTocElt = insertBeforeTocElt.nextSibling;\n                }\n                else if (item[0] === -1) {\n                    let sectionDesc = this.previewCtx.sectionDescList[sectionDescIdx] as SectionDesc;\n\n                    // Dispose an injected monaco editor\n                    sectionDesc?.section?.monaco?.['_dispose']();\n\n                    sectionDescIdx++;\n                    const sectionPreviewElt = insertBeforePreviewElt;\n                    insertBeforePreviewElt = insertBeforePreviewElt.nextSibling;\n                    this.previewElt.removeChild(sectionPreviewElt);\n                    const sectionTocElt = insertBeforeTocElt;\n                    insertBeforeTocElt = insertBeforeTocElt.nextSibling;\n                    this.tocElt.removeChild(sectionTocElt);\n                }\n                else if (item[0] === 1) {\n                    // const html = dompurify.sanitize(this.conversionCtx.htmlSectionList[sectionIdx], {\n                    //     // URIs should always follow this format\n                    //     ALLOWED_URI_REGEXP: /.*/i\n                    //     // ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|xxx):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i\n                    //     // ALLOWED_URI_REGEXP: /^(?<url>(?<host>(?<protocol>[A-Za-z]{3,9}:(?:\\/\\/)?)?(?<domain>(?:[a-z]+\\.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.\\-:]+))?(?<path>(?:\\/[\\+~%\\/.\\w_\\-]*)?\\??(?:[\\-\\+=&;%@.\\w_\\/\\[\\] ]*)#?(?:[\\w]*))?)/i\n                    // });\n                    let markdown = this.conversionCtx.htmlSectionList[sectionIdx];\n\n                    // Run all before render hooks against the text\n                    this.ngEditor.hooks?.filter(h => h?.kind == \"beforeRender\")\n                        .forEach(hook => {\n                            markdown = hook.fn(markdown);\n                        });\n\n                    const html = this.ngEditor.sanitizer.sanitize(SecurityContext.HTML, markdown);\n                    sectionIdx++;\n\n                    // Create preview section element\n                    const sectionPreviewElt = document.createElement('div');\n                    sectionPreviewElt.className = 'cl-preview-section';\n                    sectionPreviewElt.innerHTML = html;\n\n                    if (insertBeforePreviewElt) {\n                        this.previewElt.insertBefore(sectionPreviewElt, insertBeforePreviewElt);\n                    }\n                    else {\n                        this.previewElt.appendChild(sectionPreviewElt);\n                    }\n\n                    // Go through all extensions and render their HTML for the section\n                    this.sectionPreview(sectionPreviewElt, this.ngEditor.options.markdownIt, true);\n\n                    // Make some anchors external links\n                    [...sectionPreviewElt.querySelectorAll('a') as any].forEach(el => {\n                        const url = el.getAttribute('href');\n\n                        // Make external links open in a new tab.\n                        if (/^((https?|ftps?|ssh|wss?):\\/\\/|mailto:)/.test(url))\n                            el.setAttribute(\"target\", '_blank');\n                    });\n\n                    loadingImages = [\n                        ...loadingImages,\n                        ...Array.prototype.slice.call(sectionPreviewElt.getElementsByTagName('img')),\n                    ];\n\n                    // Create TOC section element\n                    const sectionTocElt = document.createElement('div');\n                    sectionTocElt.className = 'cl-toc-section';\n                    const headingElt = sectionPreviewElt.querySelector('h1, h2, h3, h4, h5, h6');\n\n                    sectionTocElt.onclick = () => {\n\n                        sectionPreviewElt.scrollIntoView();\n                        sectionPreviewElt.classList.add('focus-highlight');\n                        sectionPreviewElt.style.setProperty('--focus-highlight-background-color', '#69f0ae88');\n\n                        setTimeout(() => {\n                            sectionPreviewElt.style.setProperty('--focus-highlight-background-color', '#0000');\n\n                            setTimeout(() => {\n                                sectionPreviewElt.classList.remove('focus-highlight');\n                            }, 600);\n                        }, 200);\n                    }\n\n                    if (headingElt) {\n                        const clonedElt = headingElt.cloneNode(true) as HTMLElement;\n                        clonedElt.removeAttribute('id');\n                        sectionTocElt.appendChild(clonedElt);\n                    }\n                    if (insertBeforeTocElt) {\n                        this.tocElt.insertBefore(sectionTocElt, insertBeforeTocElt);\n                    }\n                    else {\n                        this.tocElt.appendChild(sectionTocElt);\n                    }\n\n                    previewHtml += html;\n                    sectionDescList.push(new SectionDesc(section, sectionPreviewElt, sectionTocElt, html));\n                }\n            }\n\n            // Mark the item as having been rastered\n            // to prevent duplicate sections from being added\n            item[0] = 0;\n        });\n\n        this.tocElt.classList[\n            this.tocElt.querySelector('.cl-toc-section *') ? 'remove' : 'add'\n        ]('toc-tab--empty');\n\n        this.previewCtx = {\n            markdown: this.conversionCtx.text,\n            html: previewHtml.replace(/^\\s+|\\s+$/g, ''),\n            text: this.previewElt.textContent,\n            sectionDescList: sectionDescList as any,\n        } as any;\n\n        this.$trigger('previewCtx', this.previewCtx);\n        this.makeTextToPreviewDiffs();\n\n        // Wait for images to load\n        const loadedPromises = loadingImages.map(imgElt => new Promise<void>((resolve) => {\n            if (!imgElt.src) {\n                resolve();\n                return;\n            }\n            const img = new Image();\n            img.onload = resolve as any;\n            img.onerror = resolve as any;\n            img.src = imgElt.src;\n        }));\n        await Promise.all(loadedPromises);\n\n        // Debounce if sections have already been measured\n        this.measureSectionDimensions(!!this.previewCtxMeasured, true);\n    }\n\n    /**\n     * Refresh the stored heights of the preview\n     * and editor elements\n     */\n    refreshScrollSync: () => void = (() => {\n        this.refreshPreview();\n        // this.measureSectionDimensions(false, true);\n\n        // Trigger a scroll event\n        this.editorElt.scrollBy(0, 0);\n    }).bind(this)\n\n    /**\n     * Measure the height of each section in editor, preview and toc.\n     */\n    measureSectionDimensions = allowDebounce((restoreScrollPosition = false, force = false) => {\n        if (!force && this.previewCtx === this.previewCtxMeasured)\n            return;\n\n        sectionUtils.measureSectionDimensions(this);\n        this.previewCtxMeasured = this.previewCtx;\n\n        if (restoreScrollPosition) {\n            this.restoreScrollPosition();\n        }\n        this.sectionList?.forEach(s => s.monaco?.['_resize']());\n\n        this.$trigger('previewCtxMeasured', this.previewCtxMeasured);\n    }, 500)\n\n    /**\n     * Compute the diffs between editor's markdown and preview's html\n     * asynchronously unless there is only one section to compute.\n     */\n    makeTextToPreviewDiffs() {\n        if (this.previewCtx !== this.previewCtxWithDiffs) {\n            const makeOne = () => {\n                let hasOne = false;\n                const hasMore = this.previewCtx.sectionDescList\n                    .some((sectionDesc: any) => {\n                        if (!sectionDesc.textToPreviewDiffs) {\n                            if (hasOne) {\n                                return true;\n                            }\n                            if (!sectionDesc.previewText) {\n                                sectionDesc.previewText = sectionDesc.previewElt.textContent;\n                            }\n                            sectionDesc.textToPreviewDiffs = this.diffMatchPatch.diff_main(\n                                sectionDesc.section.text,\n                                sectionDesc.previewText,\n                            );\n                            hasOne = true;\n                        }\n                        return false;\n                    });\n                if (hasMore) {\n                    setTimeout(() => makeOne(), 5);\n                }\n                else {\n                    this.previewCtxWithDiffs = this.previewCtx;\n                    this.$trigger('previewCtxWithDiffs', this.previewCtxWithDiffs);\n                }\n            };\n            makeOne();\n        }\n    }\n}\n","import { CommandAction, CommandPaletteService } from '@dotglitch/ngx-common';\nimport { StackEditorComponent } from './editor.component';\nimport { EditorActions } from './editor-actions';\nimport { MatDialog } from '@angular/material/dialog';\n\nexport class KeyCommands {\n    get editor() { return this.stackEditor.editorSvc.clEditor; }\n    get wrapSelection() {\n        return this.editor.wrapSelection.bind(this.editor) as typeof this.editor.wrapSelection;\n    }\n\n    private actions: EditorActions = new EditorActions();\n\n    constructor(\n        private readonly element: HTMLElement,\n        private readonly commandPalette: CommandPaletteService,\n        private readonly stackEditor: StackEditorComponent,\n        private readonly dialog: MatDialog\n    ) {\n        commandPalette.initialize({\n            keybind: \"ctrl+p\"\n        });\n\n        commandPalette.attachElementCommands(element, this.commands);\n\n        this.actions.stackEditor = stackEditor;\n        this.actions.dialog = dialog;\n    }\n\n    dispose() {\n        this.commandPalette.detachElementCommands(this.element, this.commands);\n    }\n\n    private readonly commands: CommandAction[] = [\n        {\n            label: \"Insert Comment\",\n            shortcutKey: \"ctrl+slash\",\n            action: this.actions.insertComment.bind(this)\n        },\n        {\n            label: \"Bold Text\",\n            shortcutKey: \"ctrl+b\",\n            action: this.actions.boldText.bind(this)\n        },\n        // {\n        //     label: \"Bold\",\n        //     shortcutKey: \"ctrl+*\",\n        //     action: () => this.wrapSelection(\"**\", \"**\")\n        // },\n        // {\n        //     label: \"Italic\",\n        //     shortcutKey: \"ctrl+i\",\n        //     ctrl: true,\n        //     action: this.italicizeText.bind(this)\n        // },\n        // {\n        //     label: \"Bold\",\n        //     shortcutKey: \"ctrl+_\",\n        //     ctrl: true,\n        //     action: this.italicizeText.bind(this)\n        // },\n        // {\n        //     label: \"Select All\",\n        //     key: \"/\",\n        //     ctrl: true\n        // action: this.insertComment.bind(this)\n        // }\n        {\n            label: \"Select Line\",\n            shortcutKey: \"ctrl+l\",\n            action: () => {\n                const text = this.editor.getContent();\n                const { selectionStart, selectionEnd } = this.editor.selectionMgr;\n\n                // select the current line\n                if (selectionStart == selectionEnd) {\n                    const line = this.editor.getLine(selectionStart, text);\n                    this.editor.selectionMgr.setSelection(line.lineStart, line.lineEnd);\n                }\n                // Expand the selection to the start of the first line, and the end of the last line\n                // If that is already the case, select the next line below the end.\n                else {\n                    const startLine = this.editor.getLine(selectionStart, text);\n                    const endLine = this.editor.getLine(selectionEnd, text);\n\n                    // Select the next line below the selection\n                    if (startLine.lineStart == selectionStart && endLine.lineEnd == selectionEnd) {\n                        const nextLine = this.editor.getLine(endLine.lineEnd + 1, text);\n\n                        this.editor.selectionMgr.setSelection(startLine.lineStart, nextLine.lineEnd);\n                    }\n                    // Expand the selection to the start and end of the first and last lines.\n                    else {\n                        this.editor.selectionMgr.setSelection(startLine.lineStart, endLine.lineEnd);\n                    }\n                }\n            }\n        },\n        {\n            label: \"Duplicate Current Line\",\n            shortcutKey: \"ctrl+shift+d\",\n            action: () => {\n                const text = this.editor.getContent();\n                const { selectionStart, selectionEnd } = this.editor.selectionMgr;\n\n                // Duplicate the current line\n                if (selectionStart == selectionEnd) {\n                    const line = this.editor.getLine(selectionStart, text);\n                    const copy = '\\n' + line.line;\n                    const patched = text.slice(0, line.lineEnd) + copy + text.slice(line.lineEnd);\n\n                    this.editor.setContent(patched);\n\n                    // Run this on the next tick to give the browser time to settle things\n                    // Observe an issue on duplicating content at the last line.\n                    setTimeout(() => {\n                        this.editor.setSelection(selectionStart + copy.length, selectionEnd + copy.length);\n                    });\n                }\n                // Expand the selection to the start of the first line, and the end of the last line\n                // Duplicate the contents through the start and the end.\n                else {\n                    const startLine = this.editor.getLine(selectionStart, text);\n                    const endLine = this.editor.getLine(selectionEnd, text);\n                    const copyLines = '\\n' + text.slice(startLine.lineStart, endLine.lineEnd);\n                    const patched = text.slice(0, endLine.lineEnd) + copyLines + text.slice(endLine.lineEnd);\n\n                    this.editor.setContent(patched);\n\n                    // Run this on the next tick to give the browser time to settle things\n                    // Observe an issue on duplicating content at the last line.\n                    setTimeout(() => {\n                        this.editor.setSelection(selectionStart + copyLines.length, selectionEnd + copyLines.length);\n                    });\n                }\n            }\n        }\n    ]\n}\n","import { Component, EventEmitter, Inject, InjectionToken, Input, Optional, Output, Sanitizer, ViewChild, ViewContainerRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ThemeService, DialogService, LazyLoaderService, CommandPaletteService } from '@dotglitch/ngx-common';\nimport { MermaidConfig } from 'mermaid';\n\nimport { ToolbarComponent } from './components/toolbar/toolbar.component';\n// import { StatusbarComponent } from './components/statusbar/statusbar.component';\n\nimport { Editor } from './editor';\nimport { installMonaco, waitForMonacoInstall } from './monaco';\nimport { Subscription } from 'rxjs';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { KeyCommands } from './key-commands';\nimport { DomSanitizer } from '@angular/platform-browser';\n\ntype StackEditConfig = Partial<{\n    /**\n     * Mermaid chart configuration\n     */\n    mermaid: MermaidConfig,\n    /**\n     * Set to `true` to disable loading Mermaid.\n     * Will automatically reduce bundle\n     */\n    disableMermaid: boolean,\n    /**\n     * Markdown-it configuration\n     */\n    markdownIt: {\n        \"emoji\": boolean,\n        \"emojiShortcuts\": boolean,\n        \"abc\": boolean,\n        \"math\": boolean,\n        \"abbr\": boolean,\n        \"breaks\": boolean,\n        \"deflist\": boolean,\n        \"del\": boolean,\n        \"fence\": boolean,\n        \"footnote\": boolean,\n        \"imgsize\": boolean,\n        \"linkify\": boolean,\n        \"mark\": boolean,\n        \"sub\": boolean,\n        \"sup\": boolean,\n        \"table\": boolean,\n        \"tasklist\": boolean,\n        \"typographer\": boolean\n    }\n\n    /**\n     *\n     */\n    emojiConfig: {},\n    /**\n     *\n     */\n    disableEmoji: boolean\n    // mathConfig: {}\n\n}>;\n\ntype Hook = (\n    {\n        /**\n         * Runs immediately before a chunk of markdown is rendered. Output will be sanitized by Angular's sanitizer.\n         */\n        kind: \"beforeRender\",\n        fn: (markdown: string) => string\n    }\n) & {\n    options: Object;\n}\n\nconst defaults = {\n    markdownIt: {\n        \"emoji\": true,\n        \"emojiShortcuts\": false,\n        \"abc\": true,\n        \"math\": true,\n        \"abbr\": true,\n        \"breaks\": true,\n        \"deflist\": true,\n        \"del\": true,\n        \"fence\": true,\n        \"footnote\": true,\n        \"imgsize\": true,\n        \"linkify\": true,\n        \"mark\": true,\n        \"sub\": true,\n        \"sup\": true,\n        \"table\": true,\n        \"tasklist\": true,\n        \"typographer\": true,\n        \"mermaid\": true,\n    }\n}\n\nexport const NGX_STACKEDIT_CONFIG = new InjectionToken<StackEditConfig>('stackedit-config');\n\n@Component({\n    selector: 'ngx-stackedit-img-dialog',\n    template: '<img [src]=\"url\" (click)=\"dialog.close()\">',\n    styles: `:host{max-width: min(90vh, 90vw); max-height: min(90vh, 90vw)} img { border-radius: 6px }`,\n    standalone: true\n})\nclass ImageComponent {\n    constructor(\n        @Inject(MAT_DIALOG_DATA) public readonly url: string,\n        public readonly dialog: MatDialogRef<any>\n    ) {}\n}\n\n@Component({\n    selector: 'ngx-stackedit',\n    templateUrl: './editor.component.html',\n    styleUrls: ['./editor.component.scss'],\n    imports: [\n        MatIconModule,\n        MatTooltipModule,\n        // TooltipDirective,\n        // MenuDirective,\n        ToolbarComponent,\n        NgScrollbarModule,\n        // AngularSplitModule\n    ],\n    host: {\n        \"(pointerdown)\": \"onPointerDown($event)\"\n    },\n    standalone: true\n})\nexport class StackEditorComponent {\n\n    @ViewChild(ToolbarComponent) toolbar: ToolbarComponent;\n\n    get $el() { return this.viewContainer.element.nativeElement as HTMLElement }\n\n    /**\n     * Dictates the theme of the editor.\n     */\n    @Input() theme: \"light\" | \"dark\";\n    /**\n     * What mode should the editor be in.\n     * - Possible values are `edit` | `view` | `viewonly`\n     * - Default `edit`\n     * view mode **disables** the editor view & toolbar.\n     */\n    @Input() mode: \"edit\" | \"view\" | \"viewonly\" = \"edit\";\n    /**\n     * Should the table of contents be viewable?\n     * `true` shown by default\n     * `false` hidden by default\n     * `\"off\"` disable the TOC altogether\n     *\n     * Default `false`\n     */\n    @Input() showToc: boolean | \"off\" = false;\n    /**\n     * Controls whether the preview is open on initialization\n     * `true` visible\n     * `false` hidden\n     * `\"off\"` disabled\n     * Default `true`\n     */\n    @Input() showPreview: boolean | \"off\" = true;\n    /**\n     * Controls whether a \"run\" button is shown for applicable\n     * code blocks in the editor view.\n     */\n    @Input() showCodeRunButton: boolean = false;\n    /**\n     * Control the execution runtime for code blocks.\n     * > only valid for `showCodeRunButton` = true.\n     * - If set to `eval`, only javascript code blocks will have a run button\n     * - If set to `piston`, a HTTP request will be made to check the\n     *     available runtimes\n     *  - If set to `custom`, you need to define the runnable languages in\n     *     `customCodeLanguages` and hook onto `onCustomCodeExecute`.\n     */\n    @Input() codeRunner: \"piston\" | \"eval\" | \"custom\" = null;\n    /**\n     * If `codeRunner` is set to true\n     */\n    @Input() customCodeLanguages: string[] = [];\n    /**\n     * Controls whether a \"copy\" button is shown for applicable\n     * code blocks in the editor view.\n     */\n    @Input() showCodeCopyButton: boolean = true;\n\n    /**\n     * Controls whether the mermaid insert button is visible\n     * `true` visible\n     * `false` hidden\n     * Default `true`\n     */\n    @Input() showMermaid: boolean = true;\n\n    @Input() showLineNumbers = false;\n    @Input() allowImageUpload = true;\n\n    @Input() tabSize = 4;\n    @Input() tabChar: ' ' | '\\t' = ' ';\n\n\n    /**\n     * ! WIP -- this feature is not supported\n     * Hide punctuation markings in the editor\n     *\n     * This requires improved editor table, mermaid,\n     * and code block rendering\n     */\n    @Input() hideWritingSymbols: boolean = false;\n\n    /**\n     * Event hooks that may be provided to perform mutations\n     */\n    @Input() hooks: Hook[] = [];\n\n    private _value = '';\n    /**\n     * Initial value of the editor.\n     * 2-way binding capable.\n     */\n    @Input() set value (value: string) {\n        this._value = value;\n\n        if (this.editorSvc) {\n            this.editorSvc.clEditor.setContent(value, true);\n        }\n    }\n    get value() { return this._value };\n    /**\n     * Emits when the value of the editor changed.\n     * Can be used standalone or in 2-way binding.\n     */\n    @Output() valueChange = new EventEmitter<string>();\n\n    /**\n     * Emits when a file is pasted and needs to be uploaded.\n     */\n    @Output() onFileUpload = new EventEmitter<string>();\n\n    /**\n     * Emits when the user uploads an image via file upload.\n     */\n    @Output() onImageUpload = new EventEmitter<any>();\n\n    /**\n     *\n     */\n    @Output() onCustomCodeExecute = new EventEmitter<{ content: string, language: string }>();\n\n    editorSvc: Editor;\n    public options: StackEditConfig = {};\n\n    private resizeChecker;\n    private width = 0;\n    private height = 0;\n    private subscriptions: Subscription[];\n    private keyCommands: KeyCommands;\n\n    constructor(\n        private readonly viewContainer: ViewContainerRef,\n        private readonly lazyLoader: LazyLoaderService,\n        private readonly commandPalette: CommandPaletteService,\n        public  readonly themeService: ThemeService,\n        public  readonly dialog: DialogService,\n        public  readonly matDialog: MatDialog,\n        public readonly  sanitizer: DomSanitizer,\n        @Optional() @Inject(NGX_STACKEDIT_CONFIG) private config: StackEditConfig = {}\n    ) {\n        this.options = {\n            ...defaults,\n            ...config\n        };\n\n        this.subscriptions = [\n            this.themeService.subscribe(t => {\n                window['monaco']?.editor.setTheme(\n                    t == \"dark\" ? \"vs-dark\" : \"vs\"\n                );\n            })\n        ];\n\n        lazyLoader.registerComponent({\n            id: \"image-editor\",\n            group: \"@dotglitch\",\n            load: () => import('./components/image-editor/image-editor.component')\n        })\n    }\n\n    ngOnChanges() {\n        if (this.theme)\n            this.themeService.setTheme(this.theme);\n    }\n\n    async ngAfterViewInit() {\n        installMonaco();\n\n        // This is only active in tauri mode.\n        if (this.codeRunner == \"piston\") {\n            await window['root']?.utils.getPistonRuntimes()\n                .catch(e => null)\n        }\n\n        await waitForMonacoInstall();\n\n        // This is replaced during automation.\n        this.$el.setAttribute(\"version\", \"1.1.73\");\n\n        const editorElt = this.$el.querySelector('.editor') as HTMLElement;\n        const previewElt = this.$el.querySelector('.preview__inner') as HTMLElement;\n        const tocElt = this.$el.querySelector('.toc__inner') as HTMLElement;\n        this.editorSvc = new Editor(this, editorElt, previewElt, tocElt);\n        this.toolbar.bindEditorEvents();\n\n        this.keyCommands = new KeyCommands(editorElt, this.commandPalette, this, this.matDialog);\n\n        // Bind the 'value' property\n        this.editorSvc.on(\"loaded\", () => {\n            this.editorSvc.clEditor.setContent(this.value);\n            this.editorSvc.clEditor.on('contentChanged', (content, diffs, sectionList) => {\n                this.valueChange.next(content);\n            });\n        });\n\n        this.resizeChecker = setInterval(() => {\n            if (\n                this.height != 0 && this.height != this.$el.clientHeight ||\n                this.width != 0 && this.width != this.$el.clientWidth\n            ) {\n                this.triggerResize();\n            }\n\n            this.height = this.$el.clientHeight;\n            this.width = this.$el.clientWidth;\n        }, 300);\n    }\n\n    ngOnDestroy() {\n        clearInterval(this.resizeChecker);\n        this.subscriptions.forEach(s => s.unsubscribe());\n        this.editorSvc?.destroy();\n    }\n\n    public finalizeImageUpload({ label, link }) {\n        const text = `![${label}](${link})`;\n        this.editorSvc.clEditor.replaceAll(/```img-spinner```/gs, text);\n    }\n\n    private triggerResize() {\n\n    }\n\n    toggleEditor() {\n        this.mode = this.mode == 'view' ? 'edit' : 'view';\n        if (this.mode == 'view' && !this.showPreview)\n            this.showPreview = !this.showPreview;\n    }\n\n    onPointerDown(e: PointerEvent) {\n        if (e.target instanceof HTMLImageElement) {\n            this.matDialog.open(ImageComponent, { data: e.target.src })\n        }\n    }\n}\n\n\nexport const renderMarkdown = (input: string) => {\n    // const converter = markdownConversionSvc.createConverter();\n    // this.initConverter(converter, defaults.markdownIt);\n}\n","<app-toolbar [style.flex]=\"'0 0 ' + (mode == 'edit' ? 44 : 0) + 'px'\"></app-toolbar>\n\n@if (mode == 'view') {\n    <mat-icon\n        class=\"edit_btn\"\n        (mousedown)=\"toggleEditor(); $event.preventDefault()\"\n        matTooltip=\"Edit Description\"\n    >\n        edit\n    </mat-icon>\n}\n\n<div\n    class=\"contents\"\n>\n    <ng-scrollbar\n        class=\"editor-container\"\n        [class.hidden]=\"mode != 'edit'\"\n        [class.expand]=\"showPreview == 'off' || !showPreview\"\n        [class.show-toc]=\"showToc && showToc != 'off'\"\n        style=\"background-color: var(--editor-background-color); cursor: text\"\n        (click)=\"editorSvc.clEditor.focus()\"\n    >\n        <div\n            class=\"editor markdown-highlighting\"\n            style=\"width: 100%\"\n            [class.linenumbers]=\"showLineNumbers\"\n        >\n            <div class=\"editor-underlay\"></div>\n            <div class=\"editor-inner\"></div>\n            <div class=\"editor-overlay-1\"></div>\n            <div class=\"editor-overlay-2\"></div>\n        </div>\n    </ng-scrollbar>\n\n    <ng-scrollbar\n        class=\"preview-container\"\n        [class.hidden]=\"showPreview == 'off' || !showPreview\"\n        [class.expand]=\"mode != 'edit'\"\n        [class.show-toc]=\"showToc && showToc != 'off'\"\n        style=\"background-color: var(--preview-background-color)\"\n    >\n        <div\n            class=\"preview\"\n            style=\"width: 100%\"\n        >\n            <div class=\"preview__inner\"></div>\n        </div>\n    </ng-scrollbar>\n\n    <!-- TODO: -->\n    <ng-scrollbar\n        class=\"toc-container\"\n        [style.width]=\"(showToc == 'off' || !showToc)  ? '0px' : '240px'\"\n    >\n        <div\n            class=\"toc\"\n        >\n            <div class=\"toc__inner\"></div>\n        </div>\n    </ng-scrollbar>\n</div>\n\n<!-- <app-statusbar [style.flex]=\"'0 0 ' + (mode != 'viewonly' ? 22 : 0) + 'px'\"></app-statusbar> -->\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './editor.component';\n"],"names":["i1.StackEditorComponent","i2","i3","i4","i5","render","markdownitTasklist","i6"],"mappings":"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"}