{"version":3,"file":"miccou-ngx-text-diff.mjs","sources":["../../../projects/ngx-text-diff/src/lib/ngx-text-diff.utils.ts","../../../projects/ngx-text-diff/src/lib/ngx-text-diff.service.ts","../../../projects/ngx-text-diff/src/lib/ngx-text-diff-container.directive.ts","../../../projects/ngx-text-diff/src/lib/loader-spinner/loader-spinner.component.ts","../../../projects/ngx-text-diff/src/lib/loader-spinner/loader-spinner.component.html","../../../projects/ngx-text-diff/src/lib/format-line.pipe.ts","../../../projects/ngx-text-diff/src/lib/ngx-text-diff.component.ts","../../../projects/ngx-text-diff/src/lib/ngx-text-diff.component.html","../../../projects/ngx-text-diff/src/lib/ngx-text-diff.module.ts","../../../projects/ngx-text-diff/src/public_api.ts","../../../projects/ngx-text-diff/src/miccou-ngx-text-diff.ts"],"sourcesContent":["export const isNil = val => val === undefined || val === null;\nexport const isEmpty = val => val == null || !(Object.keys(val) || val).length || (Object.keys(val) || val).length === 0;\n","import { Injectable } from '@angular/core';\nimport { Diff, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from 'diff-match-patch';\nimport { DiffLineResult, DiffPart, DiffTableRowResult } from './ngx-text-diff.model';\nimport { isEmpty, isNil } from './ngx-text-diff.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxTextDiffService {\n  diffParser: diff_match_patch;\n\n  constructor() {\n    this.initParser();\n  }\n\n  private initParser() {\n    this.diffParser = new diff_match_patch();\n  }\n\n  getDiffsByLines(left: string, right: string): Promise<DiffTableRowResult[]> {\n    return new Promise<DiffTableRowResult[]>((resolve, reject) => {\n      const a = this.diffParser.diff_linesToChars_(left, right);\n      const lineText1 = a.chars1;\n      const lineText2 = a.chars2;\n      const linesArray = a.lineArray;\n      const diffs: Diff[] = this.diffParser.diff_main(lineText1, lineText2, true);\n      this.diffParser.diff_charsToLines_(diffs, linesArray);\n      const rows: DiffTableRowResult[] = this.formatOutput(diffs);\n      if (!rows) {\n        reject('Error');\n      }\n\n      resolve(rows);\n    });\n  }\n\n  private formatOutput(diffs: Diff[]): DiffTableRowResult[] {\n    let lineLeft = 1;\n    let lineRight = 1;\n    return diffs.reduce((rows: DiffTableRowResult[], diff: Diff) => {\n      if (!rows) {\n        rows = [];\n      }\n      const diffType: number = diff[0];\n      const diffValue: string = diff[1];\n      let leftDiffRow: DiffTableRowResult = null;\n      let rightDiffRow: DiffTableRowResult = null;\n      let leftContent: DiffLineResult = null;\n      let rightContent: DiffLineResult = null;\n      let rowTemp: DiffTableRowResult = null;\n      switch (diffType) {\n        case DIFF_EQUAL: // 0\n          diffValue\n            .split('\\n')\n            .filter((value, index, array) => {\n              if (index === array.length - 1) {\n                return !isEmpty(value);\n              }\n              return true;\n            })\n            .forEach(line => {\n              leftContent = {\n                lineNumber: lineLeft,\n                lineContent: line,\n                lineDiffs: [],\n                prefix: ''\n              };\n              rightContent = {\n                lineNumber: lineRight,\n                lineContent: line,\n                lineDiffs: [],\n                prefix: ''\n              };\n              rowTemp = {\n                leftContent,\n                rightContent,\n                belongTo: 'both',\n                hasDiffs: false,\n                numDiffs: 0,\n              };\n              rows.push(rowTemp);\n              lineRight = lineRight + 1;\n              lineLeft = lineLeft + 1;\n            });\n          break;\n        case DIFF_DELETE: // -1\n          diffValue\n            .split('\\n')\n            .filter((value, index, array) => {\n              if (index === array.length - 1) {\n                return !isEmpty(value);\n              }\n              return true;\n            })\n            .forEach(line => {\n              rightDiffRow = rows.find(\n                row => !row.leftContent && row.rightContent && row.rightContent.lineNumber === lineLeft && row.rightContent.prefix !== ''\n              );\n              leftContent = {\n                lineNumber: lineLeft,\n                lineContent: line,\n                lineDiffs: [{ content: line, isDiff: true }],\n                prefix: '-'\n              };\n              if (rightDiffRow) {\n                rightDiffRow.leftContent = leftContent;\n                rightDiffRow.leftContent.lineDiffs = this.getDiffParts(\n                  rightDiffRow.leftContent.lineContent,\n                  rightDiffRow.rightContent.lineContent\n                );\n                rightDiffRow.rightContent.lineDiffs = this.getDiffParts(\n                  rightDiffRow.rightContent.lineContent,\n                  rightDiffRow.leftContent.lineContent\n                );\n                rightDiffRow.belongTo = 'both';\n                rightDiffRow.numDiffs = this.countDiffs(rightDiffRow);\n              } else {\n                rows.push({\n                  leftContent,\n                  rightContent: null,\n                  hasDiffs: true,\n                  belongTo: 'left',\n                  numDiffs: 1,\n                });\n              }\n              lineLeft = lineLeft + 1;\n            });\n          break;\n        case DIFF_INSERT: // 1\n          diffValue\n            .split('\\n')\n            .filter((value, index, array) => {\n              if (index === array.length - 1) {\n                return !isEmpty(value);\n              }\n              return true;\n            })\n            .forEach(line => {\n              leftDiffRow = rows.find(\n                row => row.leftContent && !row.rightContent && row.leftContent.lineNumber === lineRight && row.leftContent.prefix !== ''\n              );\n              rightContent = {\n                lineNumber: lineRight,\n                lineContent: line,\n                lineDiffs: [{ content: line, isDiff: true }],\n                prefix: '+'\n              };\n              if (leftDiffRow) {\n                leftDiffRow.rightContent = rightContent;\n                leftDiffRow.leftContent.lineDiffs = this.getDiffParts(\n                  leftDiffRow.leftContent.lineContent,\n                  leftDiffRow.rightContent.lineContent\n                );\n                leftDiffRow.rightContent.lineDiffs = this.getDiffParts(\n                  leftDiffRow.rightContent.lineContent,\n                  leftDiffRow.leftContent.lineContent\n                );\n                leftDiffRow.belongTo = 'both';\n                leftDiffRow.numDiffs = this.countDiffs(leftDiffRow);\n              } else {\n                rows.push({\n                  leftContent: null,\n                  rightContent,\n                  hasDiffs: true,\n                  belongTo: 'right',\n                  numDiffs: 1,\n                });\n              }\n              lineRight = lineRight + 1;\n            });\n          break;\n      }\n      return rows;\n    }, []);\n  }\n\n  private countDiffs(result: DiffTableRowResult): number {\n    let diffCount = 0;\n    if (result.leftContent) {\n      diffCount += result.leftContent.lineDiffs.filter(diff => diff.isDiff).length;\n    }\n    if (result.leftContent) {\n      diffCount += result.rightContent.lineDiffs.filter(diff => diff.isDiff).length;\n    }\n    return diffCount;\n  }\n\n  private getDiffParts(value: string, compareValue: string): DiffPart[] {\n    const diffParts: DiffPart[] = [];\n    let i = 0;\n    let j = 0;\n    let shared = '';\n    let diff = '';\n\n    while (i < value.length) {\n      if (value[i] === compareValue[j] && j < compareValue.length) {\n        if (diff !== '') {\n          diffParts.push({ content: diff, isDiff: true });\n          diff = '';\n        }\n        shared += value[i];\n      } else {\n        if (shared !== '') {\n          diffParts.push({ content: shared, isDiff: false });\n          shared = '';\n        }\n        diff += value[i];\n      }\n      i++;\n      j++;\n    }\n\n    if (diff !== '') {\n      diffParts.push({ content: diff, isDiff: true });\n    } else if (shared !== '') {\n      diffParts.push({ content: shared, isDiff: false });\n    }\n\n    return diffParts;\n  }\n}\n","import { Directive, Input, ElementRef } from '@angular/core';\n\n@Directive({\n  selector: '[tdContainer]',\n})\nexport class ContainerDirective {\n  @Input() id: string;\n\n  element: HTMLTableHeaderCellElement;\n\n  constructor(private _el: ElementRef) {\n    this.element = _el.nativeElement;\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'td-loader-spinner',\n  templateUrl: './loader-spinner.component.html',\n  styleUrls: ['./loader-spinner.component.css']\n})\nexport class LoaderSpinnerComponent implements OnInit {\n  @Input() active = false;\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n","<div class=\"td-loading-roller\" *ngIf=\"active\">\n  <div></div>\n  <div></div>\n  <div></div>\n  <div></div>\n  <div></div>\n  <div></div>\n  <div></div>\n  <div></div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'formatLine'\n})\nexport class FormatLinePipe implements PipeTransform {\n  transform(line: string, diffs?: string[]): string {\n    if (!line) {\n      return ' ';\n    }\n    if (!!diffs && diffs.length > 0) {\n      /*diffs.forEach(diff => {\n        line = line.replace(diff, `<span class=\"highli\">${diff}</span>`);\n      });*/\n    }\n    return line\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/ /g, '&nbsp;');\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  EventEmitter,\n  ViewChildren,\n  QueryList,\n  AfterViewInit\n} from '@angular/core';\nimport { DiffContent, DiffPart, DiffTableFormat, DiffTableFormatOption, DiffTableRowResult, DiffResults } from './ngx-text-diff.model';\nimport { NgxTextDiffService } from './ngx-text-diff.service';\nimport { Observable, Subscription } from 'rxjs';\nimport { ContainerDirective } from './ngx-text-diff-container.directive';\nimport { ScrollDispatcher, CdkScrollable } from '@angular/cdk/scrolling';\n\n@Component({\n  selector: 'td-ngx-text-diff',\n  templateUrl: './ngx-text-diff.component.html',\n  styleUrls: ['./ngx-text-diff.component.css'],\n})\nexport class NgxTextDiffComponent implements OnInit, AfterViewInit, OnDestroy {\n  private _hideMatchingLines = false;\n  @ViewChildren(ContainerDirective) containers: QueryList<ContainerDirective>;\n  @Input() format: DiffTableFormat = 'SideBySide';\n  @Input() left = '';\n  @Input() right = '';\n  @Input() diffContent: Observable<DiffContent>;\n  @Input() loading = false;\n  @Input() showToolbar = true;\n  @Input() showBtnToolbar = true;\n  @Input()\n  get hideMatchingLines() {\n    return this._hideMatchingLines;\n  }\n\n  set hideMatchingLines(hide: boolean) {\n    this.hideMatchingLinesChanged(hide);\n  }\n  @Input() outerContainerClass: string;\n  @Input() outerContainerStyle: any;\n  @Input() toolbarClass: string;\n  @Input() toolbarStyle: any;\n  @Input() compareRowsClass: string;\n  @Input() compareRowsStyle: any;\n  @Input() synchronizeScrolling = true;\n  @Output() compareResults = new EventEmitter<DiffResults>();\n  subscriptions: Subscription[] = [];\n  tableRows: DiffTableRowResult[] = [];\n  filteredTableRows: DiffTableRowResult[] = [];\n  tableRowsLineByLine: DiffTableRowResult[] = [];\n  filteredTableRowsLineByLine: DiffTableRowResult[] = [];\n  diffsCount = 0;\n\n  formatOptions: DiffTableFormatOption[] = [\n    {\n      id: 'side-by-side',\n      name: 'side-by-side',\n      label: 'Side by Side',\n      value: 'SideBySide',\n      icon: 'la-code',\n    },\n    {\n      id: 'line-by-line',\n      name: 'line-by-line',\n      label: 'Line by Line',\n      value: 'LineByLine',\n      icon: 'la-file-text',\n    },\n  ];\n\n  constructor(private scrollService: ScrollDispatcher, private diff: NgxTextDiffService, private cd: ChangeDetectorRef) {}\n\n  ngOnInit() {\n    this.loading = true;\n    if (this.diffContent) {\n      this.subscriptions.push(\n        this.diffContent.subscribe(content => {\n          this.loading = true;\n          this.left = content.leftContent;\n          this.right = content.rightContent;\n          this.renderDiffs()\n            .then(() => {\n              this.cd.detectChanges();\n              this.loading = false;\n            })\n            .catch(() => (this.loading = false));\n        })\n      );\n    }\n    this.renderDiffs()\n      .then(() => (this.loading = false))\n      .catch(e => (this.loading = false));\n  }\n\n  ngAfterViewInit() {\n    this.initScrollListener();\n  }\n\n  ngOnDestroy(): void {\n    if (this.subscriptions) {\n      this.subscriptions.forEach(subscription => subscription.unsubscribe());\n    }\n  }\n\n  hideMatchingLinesChanged(value: boolean) {\n    this._hideMatchingLines = value;\n    if (this.hideMatchingLines) {\n      this.filteredTableRows = this.tableRows.filter(\n        row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')\n      );\n      this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(\n        row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')\n      );\n    } else {\n      this.filteredTableRows = this.tableRows;\n      this.filteredTableRowsLineByLine = this.tableRowsLineByLine;\n    }\n  }\n\n  setDiffTableFormat(format: DiffTableFormat) {\n    this.format = format;\n  }\n\n  async renderDiffs() {\n    try {\n      this.diffsCount = 0;\n      this.tableRows = await this.diff.getDiffsByLines(this.left, this.right);\n      this.tableRowsLineByLine = this.tableRows.reduce((tableLineByLine: DiffTableRowResult[], row: DiffTableRowResult) => {\n        if (!tableLineByLine) {\n          tableLineByLine = [];\n        }\n        if (row.hasDiffs) {\n          if (row.leftContent) {\n            tableLineByLine.push({\n              leftContent: row.leftContent,\n              rightContent: null,\n              belongTo: row.belongTo,\n              hasDiffs: true,\n              numDiffs: row.numDiffs,\n            });\n          }\n          if (row.rightContent) {\n            tableLineByLine.push({\n              leftContent: null,\n              rightContent: row.rightContent,\n              belongTo: row.belongTo,\n              hasDiffs: true,\n              numDiffs: row.numDiffs,\n            });\n          }\n        } else {\n          tableLineByLine.push(row);\n        }\n\n        return tableLineByLine;\n      }, []);\n      this.diffsCount = this.tableRows.filter(row => row.hasDiffs).length;\n      this.filteredTableRows = this.tableRows;\n      this.filteredTableRowsLineByLine = this.tableRowsLineByLine;\n      this.emitCompareResultsEvent();\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  emitCompareResultsEvent() {\n    const diffResults: DiffResults = {\n      hasDiff: this.diffsCount > 0,\n      diffsCount: this.diffsCount,\n      rowsWithDiff: this.tableRows\n        .filter(row => row.hasDiffs)\n        .map(row => ({\n          leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null,\n          rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null,\n          numDiffs: row.numDiffs,\n        })),\n    };\n\n    this.compareResults.next(diffResults);\n  }\n\n  trackTableRows(index, row: DiffTableRowResult) {\n    return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined;\n  }\n\n  trackDiffs(index, diff: DiffPart) {\n    return diff && diff.content ? diff.content : undefined;\n  }\n\n  private initScrollListener() {\n    this.subscriptions.push(this.scrollService.scrolled().subscribe((scrollableEv: CdkScrollable) => {\n      if (scrollableEv && this.synchronizeScrolling) {\n        const scrollableId = scrollableEv.getElementRef().nativeElement.id;\n        const nonScrolledContainer: ContainerDirective = this.containers.find(container => container.id !== scrollableId);\n        if (nonScrolledContainer) {\n          nonScrolledContainer.element.scrollTo({\n            top: scrollableEv.measureScrollOffset('top'),\n            left: scrollableEv.measureScrollOffset('left'),\n          });\n        }\n      }\n    }));\n  }\n}\n","<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\n\n  <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\n    <div class=\"td-toolbar-show-diff\">\n      <label class=\"td-checkbox-container\">\n        Only Show Lines with Differences ({{ diffsCount }})\n        <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\n        <span class=\"checkmark\"></span>\n      </label>\n    </div>\n  </div>\n\n  <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\n    <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\n      <button\n        *ngFor=\"let option of formatOptions\"\n        [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\n        [name]=\"option.name\"\n        [id]=\"option.id\"\n        [disabled]=\"!!option.disabled\"\n        (click)=\"setDiffTableFormat(option.value)\"\n      >\n        {{ option.label }}\n      </button>\n    </div>\n  </div>\n\n  <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\n    <!-- Right side-by-side -->\n    <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-left-compare-container\" tdContainer cdkScrollable>\n      <table class=\"td-table\">\n        <tbody>\n          <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\n            <td\n              scope=\"row\"\n              class=\"fit-column line-number-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\n            >\n              {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\n            </td>\n            <td\n              class=\"fit-column prefix-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\n            >\n              <span>{{ row.leftContent?.prefix || ' ' }}</span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\n              *ngIf=\"!row.hasDiffs\"\n            >\n              <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\n              *ngIf=\"row.hasDiffs\"\n            >\n              <span\n                [innerHTML]=\"diff.content | formatLine\"\n                [ngClass]=\"{ highlight: diff.isDiff }\"\n                *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\n              ></span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <!-- Left side-by-side -->\n    <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-right-compare-container\" tdContainer cdkScrollable>\n      <table class=\"td-table\">\n        <tbody>\n          <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\n            <td\n              scope=\"row\"\n              class=\"fit-column line-number-col\"\n              [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\n            >\n              {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\n            </td>\n            <td\n              class=\"fit-column prefix-col\"\n              [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\n            >\n              <span>{{ row.rightContent?.prefix || ' ' }}</span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\n              *ngIf=\"!row.hasDiffs\"\n            >\n              <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\n              *ngIf=\"row.hasDiffs\"\n            >\n              <span\n                [innerHTML]=\"diff.content | formatLine\"\n                [ngClass]=\"{ highlight: diff.isDiff }\"\n                *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\n              ></span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <!-- Line By Line - combined table -->\n    <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\n      <table class=\"td-table\">\n        <tbody>\n          <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\n            <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\n            <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\n            <td\n              class=\"fit-column prefix-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\n            >\n              <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\n              *ngIf=\"!row.hasDiffs\"\n            >\n              <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\n              *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\n            >\n              <span\n                [innerHTML]=\"diff.content | formatLine\"\n                [ngClass]=\"{ highlight: diff.isDiff }\"\n                *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\n              ></span>\n            </td>\n            <td\n              class=\"content-col\"\n              [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\n              *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\n            >\n              <span\n                [innerHTML]=\"diff.content | formatLine\"\n                [ngClass]=\"{ highlight: diff.isDiff }\"\n                *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\n              ></span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { NgxTextDiffComponent } from './ngx-text-diff.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { LoaderSpinnerComponent } from './loader-spinner/loader-spinner.component';\nimport { FormatLinePipe } from './format-line.pipe';\nimport { ContainerDirective } from './ngx-text-diff-container.directive';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, ScrollingModule],\n  declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe, ContainerDirective],\n  exports: [NgxTextDiffComponent],\n})\nexport class NgxTextDiffModule {}\n","/*\n * Public API Surface of ngx-text-diff\n */\n\nexport * from './lib/ngx-text-diff.service';\nexport * from './lib/ngx-text-diff.component';\nexport * from './lib/ngx-text-diff.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2.NgxTextDiffService","i5.LoaderSpinnerComponent","i6.ContainerDirective","i7.FormatLinePipe"],"mappings":"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"}