Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ngx-text-diff

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ngx-text-diff - npm Package Compare versions

Comparing version 0.5.4 to 0.6.0

CHANGELOG.md

1324

bundles/ngx-text-diff.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('diff-match-patch'), require('@angular/common'), require('@angular/forms'), require('@angular/core')) :
typeof define === 'function' && define.amd ? define('ngx-text-diff', ['exports', 'diff-match-patch', '@angular/common', '@angular/forms', '@angular/core'], factory) :
(factory((global['ngx-text-diff'] = {}),global.diffMatchPatch,global.ng.common,global.ng.forms,global.ng.core));
}(this, (function (exports,diffMatchPatch,common,forms,i0) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('diff-match-patch'), require('rxjs'), require('@angular/cdk/scrolling'), require('@angular/common'), require('@angular/forms')) :
typeof define === 'function' && define.amd ? define('ngx-text-diff', ['exports', '@angular/core', 'diff-match-patch', 'rxjs', '@angular/cdk/scrolling', '@angular/common', '@angular/forms'], factory) :
(global = global || self, factory(global['ngx-text-diff'] = {}, global.ng.core, global.diffMatchPatch, global.rxjs, global.ng.cdk.scrolling, global.ng.common, global.ng.forms));
}(this, (function (exports, core, diffMatchPatch, rxjs, scrolling, common, forms) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
var isEmpty = function (val) { return val == null || !(Object.keys(val) || val).length || (Object.keys(val) || val).length === 0; };
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var NgxTextDiffService = /** @class */ (function () {
function NgxTextDiffService() {
this.initParser();
}
/**
* @private
* @return {?}
*/
NgxTextDiffService.prototype.initParser = /**
* @private
* @return {?}
*/
function () {
this.diffParser = new diffMatchPatch.diff_match_patch();
};
/**
* @param {?} left
* @param {?} right
* @return {?}
*/
NgxTextDiffService.prototype.getDiffsByLines = /**
* @param {?} left
* @param {?} right
* @return {?}
*/
function (left, right) {
var _this = this;
return new Promise(function (resolve, reject) {
/** @type {?} */
var a = _this.diffParser.diff_linesToChars_(left, right);
/** @type {?} */
var lineText1 = a.chars1;
/** @type {?} */
var lineText2 = a.chars2;
/** @type {?} */
var linesArray = a.lineArray;
/** @type {?} */
var diffs = _this.diffParser.diff_main(lineText1, lineText2, true);
_this.diffParser.diff_charsToLines_(diffs, linesArray);
/** @type {?} */
var rows = _this.formatOutput(diffs);
if (!rows) {
reject('Error');
}
resolve(rows);
});
};
/**
* @private
* @param {?} diffs
* @return {?}
*/
NgxTextDiffService.prototype.formatOutput = /**
* @private
* @param {?} diffs
* @return {?}
*/
function (diffs) {
var _this = this;
/** @type {?} */
var lineLeft = 1;
/** @type {?} */
var lineRight = 1;
return diffs.reduce(function (rows, diff) {
if (!rows) {
rows = [];
}
/** @type {?} */
var diffType = diff[0];
/** @type {?} */
var diffValue = diff[1];
/** @type {?} */
var leftDiffRow = null;
/** @type {?} */
var rightDiffRow = null;
/** @type {?} */
var leftContent = null;
/** @type {?} */
var rightContent = null;
/** @type {?} */
var rowTemp = null;
switch (diffType) {
case diffMatchPatch.DIFF_EQUAL: // 0
diffValue
.split('\n')
.filter(function (value, index, array) {
if (index === array.length - 1) {
return !isEmpty(value);
}
return true;
})
.forEach(function (line) {
leftContent = {
lineNumber: lineLeft,
lineContent: line,
lineDiffs: [],
prefix: ''
};
rightContent = {
lineNumber: lineRight,
lineContent: line,
lineDiffs: [],
prefix: ''
};
rowTemp = {
leftContent: leftContent,
rightContent: rightContent,
belongTo: 'both',
hasDiffs: false,
numDiffs: 0,
};
rows.push(rowTemp);
lineRight = lineRight + 1;
lineLeft = lineLeft + 1;
});
break;
case diffMatchPatch.DIFF_DELETE: // -1
diffValue
.split('\n')
.filter(function (value, index, array) {
if (index === array.length - 1) {
return !isEmpty(value);
}
return true;
})
.forEach(function (line) {
rightDiffRow = rows.find(function (row) { return !row.leftContent && row.rightContent && row.rightContent.lineNumber === lineLeft && row.rightContent.prefix !== ''; });
leftContent = {
lineNumber: lineLeft,
lineContent: line,
lineDiffs: [{ content: line, isDiff: true }],
prefix: '-'
};
if (rightDiffRow) {
rightDiffRow.leftContent = leftContent;
rightDiffRow.leftContent.lineDiffs = _this.getDiffParts(rightDiffRow.leftContent.lineContent, rightDiffRow.rightContent.lineContent);
rightDiffRow.rightContent.lineDiffs = _this.getDiffParts(rightDiffRow.rightContent.lineContent, rightDiffRow.leftContent.lineContent);
rightDiffRow.belongTo = 'both';
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow);
}
else {
rows.push({
leftContent: leftContent,
rightContent: null,
hasDiffs: true,
belongTo: 'left',
numDiffs: 1,
});
}
lineLeft = lineLeft + 1;
});
break;
case diffMatchPatch.DIFF_INSERT: // 1
diffValue
.split('\n')
.filter(function (value, index, array) {
if (index === array.length - 1) {
return !isEmpty(value);
}
return true;
})
.forEach(function (line) {
leftDiffRow = rows.find(function (row) { return row.leftContent && !row.rightContent && row.leftContent.lineNumber === lineRight && row.leftContent.prefix !== ''; });
rightContent = {
lineNumber: lineRight,
lineContent: line,
lineDiffs: [{ content: line, isDiff: true }],
prefix: '+'
};
if (leftDiffRow) {
leftDiffRow.rightContent = rightContent;
leftDiffRow.leftContent.lineDiffs = _this.getDiffParts(leftDiffRow.leftContent.lineContent, leftDiffRow.rightContent.lineContent);
leftDiffRow.rightContent.lineDiffs = _this.getDiffParts(leftDiffRow.rightContent.lineContent, leftDiffRow.leftContent.lineContent);
leftDiffRow.belongTo = 'both';
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow);
}
else {
rows.push({
leftContent: null,
rightContent: rightContent,
hasDiffs: true,
belongTo: 'right',
numDiffs: 1,
});
}
lineRight = lineRight + 1;
});
break;
}
return rows;
}, []);
};
/**
* @private
* @param {?} result
* @return {?}
*/
NgxTextDiffService.prototype.countDiffs = /**
* @private
* @param {?} result
* @return {?}
*/
function (result) {
/** @type {?} */
var diffCount = 0;
if (result.leftContent) {
diffCount += result.leftContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length;
}
if (result.leftContent) {
diffCount += result.rightContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length;
}
return diffCount;
};
/**
* @private
* @param {?} value
* @param {?} compareValue
* @return {?}
*/
NgxTextDiffService.prototype.getDiffParts = /**
* @private
* @param {?} value
* @param {?} compareValue
* @return {?}
*/
function (value, compareValue) {
/** @type {?} */
var diffParts = [];
/** @type {?} */
var i = 0;
/** @type {?} */
var j = 0;
/** @type {?} */
var shared = '';
/** @type {?} */
var diff = '';
while (i < value.length) {
if (value[i] === compareValue[j] && j < compareValue.length) {
if (diff !== '') {
diffParts.push({ content: diff, isDiff: true });
diff = '';
}
shared += value[i];
}
else {
if (shared !== '') {
diffParts.push({ content: shared, isDiff: false });
shared = '';
}
diff += value[i];
}
i++;
j++;
}
if (diff !== '') {
diffParts.push({ content: diff, isDiff: true });
}
else if (shared !== '') {
diffParts.push({ content: shared, isDiff: false });
}
return diffParts;
};
NgxTextDiffService.decorators = [
{ type: i0.Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
NgxTextDiffService.ctorParameters = function () { return []; };
/** @nocollapse */ NgxTextDiffService.ngInjectableDef = i0.defineInjectable({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" });
return NgxTextDiffService;
}());
/*! *****************************************************************************

@@ -305,96 +21,430 @@ Copyright (c) Microsoft Corporation. All rights reserved.

***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var __assign = function() {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
function __rest(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
}
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param(paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
}
function __metadata(metadataKey, metadataValue) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try {
step(generator.next(value));
}
catch (e) {
reject(e);
} }
function rejected(value) { try {
step(generator["throw"](value));
}
catch (e) {
reject(e);
} }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function () { if (t[0] & 1)
throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f)
throw new TypeError("Generator is already executing.");
while (_)
try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
return t;
if (y = 0, t)
op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return { value: op[1], done: false };
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __exportStar(m, exports) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
function __values(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spread() {
for (var ar = [], i = 0; i < arguments.length; i++)
ar = ar.concat(__read(arguments[i]));
return ar;
}
function __spreadArrays() {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
function fulfill(value) { resume("next", value); }
function reject(value) { resume("throw", value); }
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}
function __asyncDelegator(o) {
var i, p;
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
}
function __asyncValues(o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}
function __makeTemplateObject(cooked, raw) {
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
return cooked;
};
function __importStar(mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result.default = mod;
return result;
}
function __importDefault(mod) {
return (mod && mod.__esModule) ? mod : { default: mod };
}
function __classPrivateFieldGet(receiver, privateMap) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to get private field on non-instance");
}
return privateMap.get(receiver);
}
function __classPrivateFieldSet(receiver, privateMap, value) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to set private field on non-instance");
}
privateMap.set(receiver, value);
return value;
}
var isNil = function (val) { return val === undefined || val === null; };
var isEmpty = function (val) { return val == null || !(Object.keys(val) || val).length || (Object.keys(val) || val).length === 0; };
var NgxTextDiffService = /** @class */ (function () {
function NgxTextDiffService() {
this.initParser();
}
NgxTextDiffService.prototype.initParser = function () {
this.diffParser = new diffMatchPatch.diff_match_patch();
};
NgxTextDiffService.prototype.getDiffsByLines = function (left, right) {
var _this = this;
return new Promise(function (resolve, reject) {
var a = _this.diffParser.diff_linesToChars_(left, right);
var lineText1 = a.chars1;
var lineText2 = a.chars2;
var linesArray = a.lineArray;
var diffs = _this.diffParser.diff_main(lineText1, lineText2, true);
_this.diffParser.diff_charsToLines_(diffs, linesArray);
var rows = _this.formatOutput(diffs);
if (!rows) {
reject('Error');
}
resolve(rows);
});
};
NgxTextDiffService.prototype.formatOutput = function (diffs) {
var _this = this;
var lineLeft = 1;
var lineRight = 1;
return diffs.reduce(function (rows, diff) {
if (!rows) {
rows = [];
}
var diffType = diff[0];
var diffValue = diff[1];
var leftDiffRow = null;
var rightDiffRow = null;
var leftContent = null;
var rightContent = null;
var rowTemp = null;
switch (diffType) {
case diffMatchPatch.DIFF_EQUAL: // 0
diffValue
.split('\n')
.filter(function (value, index, array) {
if (index === array.length - 1) {
return !isEmpty(value);
}
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
_.label = op[1];
break;
return true;
})
.forEach(function (line) {
leftContent = {
lineNumber: lineLeft,
lineContent: line,
lineDiffs: [],
prefix: ''
};
rightContent = {
lineNumber: lineRight,
lineContent: line,
lineDiffs: [],
prefix: ''
};
rowTemp = {
leftContent: leftContent,
rightContent: rightContent,
belongTo: 'both',
hasDiffs: false,
numDiffs: 0,
};
rows.push(rowTemp);
lineRight = lineRight + 1;
lineLeft = lineLeft + 1;
});
break;
case diffMatchPatch.DIFF_DELETE: // -1
diffValue
.split('\n')
.filter(function (value, index, array) {
if (index === array.length - 1) {
return !isEmpty(value);
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
return true;
})
.forEach(function (line) {
rightDiffRow = rows.find(function (row) { return !row.leftContent && row.rightContent && row.rightContent.lineNumber === lineLeft && row.rightContent.prefix !== ''; });
leftContent = {
lineNumber: lineLeft,
lineContent: line,
lineDiffs: [{ content: line, isDiff: true }],
prefix: '-'
};
if (rightDiffRow) {
rightDiffRow.leftContent = leftContent;
rightDiffRow.leftContent.lineDiffs = _this.getDiffParts(rightDiffRow.leftContent.lineContent, rightDiffRow.rightContent.lineContent);
rightDiffRow.rightContent.lineDiffs = _this.getDiffParts(rightDiffRow.rightContent.lineContent, rightDiffRow.leftContent.lineContent);
rightDiffRow.belongTo = 'both';
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow);
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
else {
rows.push({
leftContent: leftContent,
rightContent: null,
hasDiffs: true,
belongTo: 'left',
numDiffs: 1,
});
}
if (t[2])
_.ops.pop();
_.trys.pop();
continue;
lineLeft = lineLeft + 1;
});
break;
case diffMatchPatch.DIFF_INSERT: // 1
diffValue
.split('\n')
.filter(function (value, index, array) {
if (index === array.length - 1) {
return !isEmpty(value);
}
return true;
})
.forEach(function (line) {
leftDiffRow = rows.find(function (row) { return row.leftContent && !row.rightContent && row.leftContent.lineNumber === lineRight && row.leftContent.prefix !== ''; });
rightContent = {
lineNumber: lineRight,
lineContent: line,
lineDiffs: [{ content: line, isDiff: true }],
prefix: '+'
};
if (leftDiffRow) {
leftDiffRow.rightContent = rightContent;
leftDiffRow.leftContent.lineDiffs = _this.getDiffParts(leftDiffRow.leftContent.lineContent, leftDiffRow.rightContent.lineContent);
leftDiffRow.rightContent.lineDiffs = _this.getDiffParts(leftDiffRow.rightContent.lineContent, leftDiffRow.leftContent.lineContent);
leftDiffRow.belongTo = 'both';
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow);
}
else {
rows.push({
leftContent: null,
rightContent: rightContent,
hasDiffs: true,
belongTo: 'right',
numDiffs: 1,
});
}
lineRight = lineRight + 1;
});
break;
}
return rows;
}, []);
};
NgxTextDiffService.prototype.countDiffs = function (result) {
var diffCount = 0;
if (result.leftContent) {
diffCount += result.leftContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length;
}
if (result.leftContent) {
diffCount += result.rightContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length;
}
return diffCount;
};
NgxTextDiffService.prototype.getDiffParts = function (value, compareValue) {
var diffParts = [];
var i = 0;
var j = 0;
var shared = '';
var diff = '';
while (i < value.length) {
if (value[i] === compareValue[j] && j < compareValue.length) {
if (diff !== '') {
diffParts.push({ content: diff, isDiff: true });
diff = '';
}
op = body.call(thisArg, _);
shared += value[i];
}
catch (e) {
op = [6, e];
y = 0;
else {
if (shared !== '') {
diffParts.push({ content: shared, isDiff: false });
shared = '';
}
diff += value[i];
}
finally {
f = t = 0;
}
if (op[0] & 5)
throw op[1];
return { value: op[0] ? op[1] : void 0, done: true };
i++;
j++;
}
if (diff !== '') {
diffParts.push({ content: diff, isDiff: true });
}
else if (shared !== '') {
diffParts.push({ content: shared, isDiff: false });
}
return diffParts;
};
NgxTextDiffService.ɵprov = core["ɵɵdefineInjectable"]({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" });
NgxTextDiffService = __decorate([
core.Injectable({
providedIn: 'root'
}),
__metadata("design:paramtypes", [])
], NgxTextDiffService);
return NgxTextDiffService;
}());
var ContainerDirective = /** @class */ (function () {
function ContainerDirective(_el) {
this._el = _el;
this.element = _el.nativeElement;
}
}
ContainerDirective.ctorParameters = function () { return [
{ type: core.ElementRef }
]; };
__decorate([
core.Input(),
__metadata("design:type", String)
], ContainerDirective.prototype, "id", void 0);
ContainerDirective = __decorate([
core.Directive({
selector: '[tdContainer]',
}),
__metadata("design:paramtypes", [core.ElementRef])
], ContainerDirective);
return ContainerDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var NgxTextDiffComponent = /** @class */ (function () {
function NgxTextDiffComponent(diff, cd) {
function NgxTextDiffComponent(scrollService, diff, cd) {
this.scrollService = scrollService;
this.diff = diff;

@@ -409,3 +459,4 @@ this.cd = cd;

this.showBtnToolbar = true;
this.compareResults = new i0.EventEmitter();
this.synchronizeScrolling = true;
this.compareResults = new core.EventEmitter();
this.subscriptions = [];

@@ -435,11 +486,6 @@ this.tableRows = [];

Object.defineProperty(NgxTextDiffComponent.prototype, "hideMatchingLines", {
get: /**
* @return {?}
*/ function () {
get: function () {
return this._hideMatchingLines;
},
set: /**
* @param {?} hide
* @return {?}
*/ function (hide) {
set: function (hide) {
this.hideMatchingLinesChanged(hide);

@@ -450,216 +496,218 @@ },

});
/**
* @return {?}
*/
NgxTextDiffComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.loading = true;
if (this.diffContent) {
this.subscriptions.push(this.diffContent.subscribe(function (content) {
_this.loading = true;
_this.left = content.leftContent;
_this.right = content.rightContent;
_this.renderDiffs()
.then(function () {
_this.cd.detectChanges();
_this.loading = false;
})
.catch(function () { return (_this.loading = false); });
}));
}
this.renderDiffs()
.then(function () { return (_this.loading = false); })
.catch(function (e) { return (_this.loading = false); });
};
/**
* @return {?}
*/
NgxTextDiffComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.subscriptions) {
this.subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); });
}
};
/**
* @param {?} value
* @return {?}
*/
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._hideMatchingLines = value;
if (this.hideMatchingLines) {
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); });
this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); });
}
else {
this.filteredTableRows = this.tableRows;
this.filteredTableRowsLineByLine = this.tableRowsLineByLine;
}
};
/**
* @param {?} format
* @return {?}
*/
NgxTextDiffComponent.prototype.setDiffTableFormat = /**
* @param {?} format
* @return {?}
*/
function (format) {
this.format = format;
};
/**
* @return {?}
*/
NgxTextDiffComponent.prototype.renderDiffs = /**
* @return {?}
*/
function () {
return __awaiter(this, void 0, void 0, function () {
var _a, e_1;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 2, , 3]);
this.diffsCount = 0;
_a = this;
return [4 /*yield*/, this.diff.getDiffsByLines(this.left, this.right)];
case 1:
_a.tableRows = _b.sent();
this.tableRowsLineByLine = this.tableRows.reduce(function (tableLineByLine, row) {
if (!tableLineByLine) {
tableLineByLine = [];
NgxTextDiffComponent.prototype.ngOnInit = function () {
var _this = this;
this.loading = true;
if (this.diffContent) {
this.subscriptions.push(this.diffContent.subscribe(function (content) {
_this.loading = true;
_this.left = content.leftContent;
_this.right = content.rightContent;
_this.renderDiffs()
.then(function () {
_this.cd.detectChanges();
_this.loading = false;
})
.catch(function () { return (_this.loading = false); });
}));
}
this.renderDiffs()
.then(function () { return (_this.loading = false); })
.catch(function (e) { return (_this.loading = false); });
};
NgxTextDiffComponent.prototype.ngAfterViewInit = function () {
this.initScrollListener();
};
NgxTextDiffComponent.prototype.ngOnDestroy = function () {
if (this.subscriptions) {
this.subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); });
}
};
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = function (value) {
this._hideMatchingLines = value;
if (this.hideMatchingLines) {
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); });
this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); });
}
else {
this.filteredTableRows = this.tableRows;
this.filteredTableRowsLineByLine = this.tableRowsLineByLine;
}
};
NgxTextDiffComponent.prototype.setDiffTableFormat = function (format) {
this.format = format;
};
NgxTextDiffComponent.prototype.renderDiffs = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, e_1;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 2, , 3]);
this.diffsCount = 0;
_a = this;
return [4 /*yield*/, this.diff.getDiffsByLines(this.left, this.right)];
case 1:
_a.tableRows = _b.sent();
this.tableRowsLineByLine = this.tableRows.reduce(function (tableLineByLine, row) {
if (!tableLineByLine) {
tableLineByLine = [];
}
if (row.hasDiffs) {
if (row.leftContent) {
tableLineByLine.push({
leftContent: row.leftContent,
rightContent: null,
belongTo: row.belongTo,
hasDiffs: true,
numDiffs: row.numDiffs,
});
}
if (row.hasDiffs) {
if (row.leftContent) {
tableLineByLine.push({
leftContent: row.leftContent,
rightContent: null,
belongTo: row.belongTo,
hasDiffs: true,
numDiffs: row.numDiffs,
});
}
if (row.rightContent) {
tableLineByLine.push({
leftContent: null,
rightContent: row.rightContent,
belongTo: row.belongTo,
hasDiffs: true,
numDiffs: row.numDiffs,
});
}
if (row.rightContent) {
tableLineByLine.push({
leftContent: null,
rightContent: row.rightContent,
belongTo: row.belongTo,
hasDiffs: true,
numDiffs: row.numDiffs,
});
}
else {
tableLineByLine.push(row);
}
return tableLineByLine;
}, []);
this.diffsCount = this.tableRows.filter(function (row) { return row.hasDiffs; }).length;
this.filteredTableRows = this.tableRows;
this.filteredTableRowsLineByLine = this.tableRowsLineByLine;
this.emitCompareResultsEvent();
return [3 /*break*/, 3];
case 2:
e_1 = _b.sent();
throw e_1;
case 3: return [2 /*return*/];
}
});
}
else {
tableLineByLine.push(row);
}
return tableLineByLine;
}, []);
this.diffsCount = this.tableRows.filter(function (row) { return row.hasDiffs; }).length;
this.filteredTableRows = this.tableRows;
this.filteredTableRowsLineByLine = this.tableRowsLineByLine;
this.emitCompareResultsEvent();
return [3 /*break*/, 3];
case 2:
e_1 = _b.sent();
throw e_1;
case 3: return [2 /*return*/];
}
});
});
};
NgxTextDiffComponent.prototype.emitCompareResultsEvent = function () {
var diffResults = {
hasDiff: this.diffsCount > 0,
diffsCount: this.diffsCount,
rowsWithDiff: this.tableRows
.filter(function (row) { return row.hasDiffs; })
.map(function (row) { return ({
leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null,
rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null,
numDiffs: row.numDiffs,
}); }),
};
/**
* @return {?}
*/
NgxTextDiffComponent.prototype.emitCompareResultsEvent = /**
* @return {?}
*/
function () {
/** @type {?} */
var diffResults = {
hasDiff: this.diffsCount > 0,
diffsCount: this.diffsCount,
rowsWithDiff: this.tableRows
.filter(function (row) { return row.hasDiffs; })
.map(function (row) {
return ({
leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null,
rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null,
numDiffs: row.numDiffs,
this.compareResults.next(diffResults);
};
NgxTextDiffComponent.prototype.trackTableRows = function (index, row) {
return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined;
};
NgxTextDiffComponent.prototype.trackDiffs = function (index, diff) {
return diff && diff.content ? diff.content : undefined;
};
NgxTextDiffComponent.prototype.initScrollListener = function () {
var _this = this;
this.subscriptions.push(this.scrollService.scrolled().subscribe(function (scrollableEv) {
if (scrollableEv && _this.synchronizeScrolling) {
var scrollableId_1 = scrollableEv.getElementRef().nativeElement.id;
var nonScrolledContainer = _this.containers.find(function (container) { return container.id !== scrollableId_1; });
if (nonScrolledContainer) {
nonScrolledContainer.element.scrollTo({
top: scrollableEv.measureScrollOffset('top'),
left: scrollableEv.measureScrollOffset('left'),
});
}),
};
this.compareResults.next(diffResults);
};
/**
* @param {?} index
* @param {?} row
* @return {?}
*/
NgxTextDiffComponent.prototype.trackTableRows = /**
* @param {?} index
* @param {?} row
* @return {?}
*/
function (index, row) {
return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined;
};
/**
* @param {?} index
* @param {?} diff
* @return {?}
*/
NgxTextDiffComponent.prototype.trackDiffs = /**
* @param {?} index
* @param {?} diff
* @return {?}
*/
function (index, diff) {
return diff && diff.content ? diff.content : undefined;
};
NgxTextDiffComponent.decorators = [
{ type: i0.Component, args: [{
selector: 'td-ngx-text-diff',
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\"\r\n >Show Lines with Diffs ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [".td-wrapper{display:-ms-grid;display:grid;width:100%;grid-row-gap:10px;-ms-grid-columns:([col] 50%)[2];grid-template-columns:repeat(2,[col] 50%);-ms-grid-rows:([row] auto)[2];grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{-ms-grid-column:1;grid-column:1;-ms-grid-row:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;-ms-grid-column:2;grid-column:2;-ms-grid-row:1;grid-row:1}.td-table-container{-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2;-ms-grid-row:2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]
}] }
];
/** @nocollapse */
NgxTextDiffComponent.ctorParameters = function () {
return [
{ type: NgxTextDiffService },
{ type: i0.ChangeDetectorRef }
];
}
}
}));
};
NgxTextDiffComponent.propDecorators = {
format: [{ type: i0.Input }],
left: [{ type: i0.Input }],
right: [{ type: i0.Input }],
diffContent: [{ type: i0.Input }],
loading: [{ type: i0.Input }],
showToolbar: [{ type: i0.Input }],
showBtnToolbar: [{ type: i0.Input }],
hideMatchingLines: [{ type: i0.Input }],
outerContainerClass: [{ type: i0.Input }],
outerContainerStyle: [{ type: i0.Input }],
toolbarClass: [{ type: i0.Input }],
toolbarStyle: [{ type: i0.Input }],
compareRowsClass: [{ type: i0.Input }],
compareRowsStyle: [{ type: i0.Input }],
compareResults: [{ type: i0.Output }]
};
NgxTextDiffComponent.ctorParameters = function () { return [
{ type: scrolling.ScrollDispatcher },
{ type: NgxTextDiffService },
{ type: core.ChangeDetectorRef }
]; };
__decorate([
core.ViewChildren(ContainerDirective),
__metadata("design:type", core.QueryList)
], NgxTextDiffComponent.prototype, "containers", void 0);
__decorate([
core.Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "format", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "left", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "right", void 0);
__decorate([
core.Input(),
__metadata("design:type", rxjs.Observable)
], NgxTextDiffComponent.prototype, "diffContent", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "loading", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "showToolbar", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "showBtnToolbar", void 0);
__decorate([
core.Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Boolean])
], NgxTextDiffComponent.prototype, "hideMatchingLines", null);
__decorate([
core.Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "outerContainerClass", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "outerContainerStyle", void 0);
__decorate([
core.Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "toolbarClass", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "toolbarStyle", void 0);
__decorate([
core.Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "compareRowsClass", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "compareRowsStyle", void 0);
__decorate([
core.Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "synchronizeScrolling", void 0);
__decorate([
core.Output(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "compareResults", void 0);
NgxTextDiffComponent = __decorate([
core.Component({
selector: 'td-ngx-text-diff',
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">\r\n Only Show Lines with Differences ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <!-- Right side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-left-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Left side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-right-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Line By Line - combined table -->\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [".td-wrapper{display:grid;width:100%;grid-row-gap:10px;grid-template-columns:repeat(2,[col] 50%);grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{grid-column:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;grid-column:2;grid-row:1}.td-table-container{grid-column:1/2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{position:relative;position:-webkit-sticky;position:sticky;left:0;top:auto;border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]
}),
__metadata("design:paramtypes", [scrolling.ScrollDispatcher, NgxTextDiffService, core.ChangeDetectorRef])
], NgxTextDiffComponent);
return NgxTextDiffComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var LoaderSpinnerComponent = /** @class */ (function () {

@@ -669,93 +717,64 @@ function LoaderSpinnerComponent() {

}
/**
* @return {?}
*/
LoaderSpinnerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
LoaderSpinnerComponent.decorators = [
{ type: i0.Component, args: [{
selector: 'td-loader-spinner',
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n",
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;-webkit-transform-origin:32px 32px;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}"]
}] }
];
/** @nocollapse */
LoaderSpinnerComponent.ctorParameters = function () { return []; };
LoaderSpinnerComponent.propDecorators = {
active: [{ type: i0.Input }]
};
LoaderSpinnerComponent.prototype.ngOnInit = function () { };
__decorate([
core.Input(),
__metadata("design:type", Object)
], LoaderSpinnerComponent.prototype, "active", void 0);
LoaderSpinnerComponent = __decorate([
core.Component({
selector: 'td-loader-spinner',
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n",
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"]
}),
__metadata("design:paramtypes", [])
], LoaderSpinnerComponent);
return LoaderSpinnerComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var FormatLinePipe = /** @class */ (function () {
function FormatLinePipe() {
}
/**
* @param {?} line
* @param {?=} diffs
* @return {?}
*/
FormatLinePipe.prototype.transform = /**
* @param {?} line
* @param {?=} diffs
* @return {?}
*/
function (line, diffs) {
if (!line) {
return ' ';
}
if (!!diffs && diffs.length > 0) ;
return line
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/ /g, '&nbsp;');
};
FormatLinePipe.decorators = [
{ type: i0.Pipe, args: [{
name: 'formatLine'
},] }
];
FormatLinePipe.prototype.transform = function (line, diffs) {
if (!line) {
return ' ';
}
if (!!diffs && diffs.length > 0) {
/*diffs.forEach(diff => {
line = line.replace(diff, `<span class="highli">${diff}</span>`);
});*/
}
return line
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/ /g, '&nbsp;');
};
FormatLinePipe = __decorate([
core.Pipe({
name: 'formatLine'
})
], FormatLinePipe);
return FormatLinePipe;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var NgxTextDiffModule = /** @class */ (function () {
function NgxTextDiffModule() {
}
NgxTextDiffModule.decorators = [
{ type: i0.NgModule, args: [{
imports: [common.CommonModule, forms.FormsModule],
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe],
exports: [NgxTextDiffComponent]
},] }
];
NgxTextDiffModule = __decorate([
core.NgModule({
imports: [common.CommonModule, forms.FormsModule, scrolling.ScrollingModule],
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe, ContainerDirective],
exports: [NgxTextDiffComponent],
})
], NgxTextDiffModule);
return NgxTextDiffModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
exports.NgxTextDiffService = NgxTextDiffService;
exports.NgxTextDiffComponent = NgxTextDiffComponent;
exports.NgxTextDiffModule = NgxTextDiffModule;
exports.ɵb = FormatLinePipe;
exports.ɵa = LoaderSpinnerComponent;
exports.NgxTextDiffService = NgxTextDiffService;
exports.ɵa = ContainerDirective;
exports.ɵb = LoaderSpinnerComponent;
exports.ɵc = FormatLinePipe;

@@ -765,3 +784,2 @@ Object.defineProperty(exports, '__esModule', { value: true });

})));
//# sourceMappingURL=ngx-text-diff.umd.js.map
//# sourceMappingURL=ngx-text-diff.umd.js.map

@@ -1,2 +0,16 @@

!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("diff-match-patch"),require("@angular/common"),require("@angular/forms"),require("@angular/core")):"function"==typeof define&&define.amd?define("ngx-text-diff",["exports","diff-match-patch","@angular/common","@angular/forms","@angular/core"],n):n(t["ngx-text-diff"]={},t.diffMatchPatch,t.ng.common,t.ng.forms,t.ng.core)}(this,function(t,p,n,e,r){"use strict";var h=function(t){return null==t||!(Object.keys(t)||t).length||0===(Object.keys(t)||t).length},o=function(){function t(){this.initParser()}return t.prototype.initParser=function(){this.diffParser=new p.diff_match_patch},t.prototype.getDiffsByLines=function(s,f){var d=this;return new Promise(function(t,n){var e=d.diffParser.diff_linesToChars_(s,f),r=e.chars1,o=e.chars2,i=e.lineArray,l=d.diffParser.diff_main(r,o,!0);d.diffParser.diff_charsToLines_(l,i);var a=d.formatOutput(l);a||n("Error"),t(a)})},t.prototype.formatOutput=function(t){var f=this,d=1,c=1;return t.reduce(function(n,t){n||(n=[]);var e=t[0],r=t[1],o=null,i=null,l=null,a=null,s=null;switch(e){case p.DIFF_EQUAL:r.split("\n").filter(function(t,n,e){return n!==e.length-1||!h(t)}).forEach(function(t){s={leftContent:l={lineNumber:d,lineContent:t,lineDiffs:[],prefix:""},rightContent:a={lineNumber:c,lineContent:t,lineDiffs:[],prefix:""},belongTo:"both",hasDiffs:!1,numDiffs:0},n.push(s),c+=1,d+=1});break;case p.DIFF_DELETE:r.split("\n").filter(function(t,n,e){return n!==e.length-1||!h(t)}).forEach(function(t){i=n.find(function(t){return!t.leftContent&&t.rightContent&&t.rightContent.lineNumber===d&&""!==t.rightContent.prefix}),l={lineNumber:d,lineContent:t,lineDiffs:[{content:t,isDiff:!0}],prefix:"-"},i?(i.leftContent=l,i.leftContent.lineDiffs=f.getDiffParts(i.leftContent.lineContent,i.rightContent.lineContent),i.rightContent.lineDiffs=f.getDiffParts(i.rightContent.lineContent,i.leftContent.lineContent),i.belongTo="both",i.numDiffs=f.countDiffs(i)):n.push({leftContent:l,rightContent:null,hasDiffs:!0,belongTo:"left",numDiffs:1}),d+=1});break;case p.DIFF_INSERT:r.split("\n").filter(function(t,n,e){return n!==e.length-1||!h(t)}).forEach(function(t){o=n.find(function(t){return t.leftContent&&!t.rightContent&&t.leftContent.lineNumber===c&&""!==t.leftContent.prefix}),a={lineNumber:c,lineContent:t,lineDiffs:[{content:t,isDiff:!0}],prefix:"+"},o?(o.rightContent=a,o.leftContent.lineDiffs=f.getDiffParts(o.leftContent.lineContent,o.rightContent.lineContent),o.rightContent.lineDiffs=f.getDiffParts(o.rightContent.lineContent,o.leftContent.lineContent),o.belongTo="both",o.numDiffs=f.countDiffs(o)):n.push({leftContent:null,rightContent:a,hasDiffs:!0,belongTo:"right",numDiffs:1}),c+=1})}return n},[])},t.prototype.countDiffs=function(t){var n=0;return t.leftContent&&(n+=t.leftContent.lineDiffs.filter(function(t){return t.isDiff}).length),t.leftContent&&(n+=t.rightContent.lineDiffs.filter(function(t){return t.isDiff}).length),n},t.prototype.getDiffParts=function(t,n){for(var e=[],r=0,o=0,i="",l="";r<t.length;)t[r]===n[o]&&o<n.length?(""!==l&&(e.push({content:l,isDiff:!0}),l=""),i+=t[r]):(""!==i&&(e.push({content:i,isDiff:!1}),i=""),l+=t[r]),r++,o++;return""!==l?e.push({content:l,isDiff:!0}):""!==i&&e.push({content:i,isDiff:!1}),e},t.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],t.ctorParameters=function(){return[]},t.ngInjectableDef=r.defineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}();function i(r,o){var i,l,a,t,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return t={next:n(0),"throw":n(1),"return":n(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function n(n){return function(t){return function e(t){if(i)throw new TypeError("Generator is already executing.");for(;s;)try{if(i=1,l&&(a=2&t[0]?l["return"]:t[0]?l["throw"]||((a=l["return"])&&a.call(l),0):l.next)&&!(a=a.call(l,t[1])).done)return a;switch(l=0,a&&(t=[2&t[0],a.value]),t[0]){case 0:case 1:a=t;break;case 4:return s.label++,{value:t[1],done:!1};case 5:s.label++,l=t[1],t=[0];continue;case 7:t=s.ops.pop(),s.trys.pop();continue;default:if(!(a=0<(a=s.trys).length&&a[a.length-1])&&(6===t[0]||2===t[0])){s=0;continue}if(3===t[0]&&(!a||t[1]>a[0]&&t[1]<a[3])){s.label=t[1];break}if(6===t[0]&&s.label<a[1]){s.label=a[1],a=t;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(t);break}a[2]&&s.ops.pop(),s.trys.pop();continue}t=o.call(r,s)}catch(n){t=[6,n],l=0}finally{i=a=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([n,t])}}}var l=function(){function t(t,n){this.diff=t,this.cd=n,this._hideMatchingLines=!1,this.format="SideBySide",this.left="",this.right="",this.loading=!1,this.showToolbar=!0,this.showBtnToolbar=!0,this.compareResults=new r.EventEmitter,this.subscriptions=[],this.tableRows=[],this.filteredTableRows=[],this.tableRowsLineByLine=[],this.filteredTableRowsLineByLine=[],this.diffsCount=0,this.formatOptions=[{id:"side-by-side",name:"side-by-side",label:"Side by Side",value:"SideBySide",icon:"la-code"},{id:"line-by-line",name:"line-by-line",label:"Line by Line",value:"LineByLine",icon:"la-file-text"}]}return Object.defineProperty(t.prototype,"hideMatchingLines",{get:function(){return this._hideMatchingLines},set:function(t){this.hideMatchingLinesChanged(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var n=this;this.loading=!0,this.diffContent&&this.subscriptions.push(this.diffContent.subscribe(function(t){n.loading=!0,n.left=t.leftContent,n.right=t.rightContent,n.renderDiffs().then(function(){n.cd.detectChanges(),n.loading=!1})["catch"](function(){return n.loading=!1})})),this.renderDiffs().then(function(){return n.loading=!1})["catch"](function(t){return n.loading=!1})},t.prototype.ngOnDestroy=function(){this.subscriptions&&this.subscriptions.forEach(function(t){return t.unsubscribe()})},t.prototype.hideMatchingLinesChanged=function(t){this._hideMatchingLines=t,this.hideMatchingLines?(this.filteredTableRows=this.tableRows.filter(function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix}),this.filteredTableRowsLineByLine=this.tableRowsLineByLine.filter(function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix})):(this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine)},t.prototype.setDiffTableFormat=function(t){this.format=t},t.prototype.renderDiffs=function(){return function t(n,l,a,s){return new(a||(a=Promise))(function(t,e){function r(t){try{i(s.next(t))}catch(n){e(n)}}function o(t){try{i(s["throw"](t))}catch(n){e(n)}}function i(n){n.done?t(n.value):new a(function(t){t(n.value)}).then(r,o)}i((s=s.apply(n,l||[])).next())})}(this,void 0,void 0,function(){var n;return i(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),this.diffsCount=0,[4,(n=this).diff.getDiffsByLines(this.left,this.right)];case 1:return n.tableRows=t.sent(),this.tableRowsLineByLine=this.tableRows.reduce(function(t,n){return t||(t=[]),n.hasDiffs?(n.leftContent&&t.push({leftContent:n.leftContent,rightContent:null,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs}),n.rightContent&&t.push({leftContent:null,rightContent:n.rightContent,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs})):t.push(n),t},[]),this.diffsCount=this.tableRows.filter(function(t){return t.hasDiffs}).length,this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine,this.emitCompareResultsEvent(),[3,3];case 2:throw t.sent();case 3:return[2]}})})},t.prototype.emitCompareResultsEvent=function(){var t={hasDiff:0<this.diffsCount,diffsCount:this.diffsCount,rowsWithDiff:this.tableRows.filter(function(t){return t.hasDiffs}).map(function(t){return{leftLineNumber:t.leftContent?t.leftContent.lineNumber:null,rightLineNumber:t.rightContent?t.rightContent.lineNumber:null,numDiffs:t.numDiffs}})};this.compareResults.next(t)},t.prototype.trackTableRows=function(t,n){return n&&n.leftContent?n.leftContent.lineContent:n&&n.rightContent?n.rightContent.lineContent:undefined},t.prototype.trackDiffs=function(t,n){return n&&n.content?n.content:undefined},t.decorators=[{type:r.Component,args:[{selector:"td-ngx-text-diff",template:'<td-loader-spinner [active]="loading"></td-loader-spinner>\r\n<div class="td-wrapper" [ngClass]="outerContainerClass" [ngStyle]="outerContainerStyle" *ngIf="!loading">\r\n\r\n <div [ngClass]="toolbarClass" [ngStyle]="toolbarStyle" *ngIf="showToolbar">\r\n <div class="td-toolbar-show-diff">\r\n <label class="td-checkbox-container"\r\n >Show Lines with Diffs ({{ diffsCount }})\r\n <input type="checkbox" id="showDiffs" [ngModel]="hideMatchingLines" (ngModelChange)="hideMatchingLinesChanged($event)" />\r\n <span class="checkmark"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class="td-toolbar-select-format" *ngIf="showToolbar && showBtnToolbar">\r\n <div class="td-btn-group td-btn-group-toggle" data-toggle="buttons">\r\n <button\r\n *ngFor="let option of formatOptions"\r\n [ngClass]="{ active: format === option.value, disabled: !!option.disabled }"\r\n [name]="option.name"\r\n [id]="option.id"\r\n [disabled]="!!option.disabled"\r\n (click)="setDiffTableFormat(option.value)"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class="td-table-wrapper" [ngClass]="compareRowsClass" [ngStyle]="compareRowsStyle">\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n <span>{{ row.leftContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n <span>{{ row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.rightContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class="td-table-container line-by-line" *ngIf="format === \'LineByLine\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRowsLineByLine; trackBy: trackTableRows">\r\n <td scope="row" class="fit-column line-number-col-left">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope="row" class="fit-column line-number-col">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n',styles:[".td-wrapper{display:-ms-grid;display:grid;width:100%;grid-row-gap:10px;-ms-grid-columns:([col] 50%)[2];grid-template-columns:repeat(2,[col] 50%);-ms-grid-rows:([row] auto)[2];grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{-ms-grid-column:1;grid-column:1;-ms-grid-row:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;-ms-grid-column:2;grid-column:2;-ms-grid-row:1;grid-row:1}.td-table-container{-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2;-ms-grid-row:2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]}]}],t.ctorParameters=function(){return[{type:o},{type:r.ChangeDetectorRef}]},t.propDecorators={format:[{type:r.Input}],left:[{type:r.Input}],right:[{type:r.Input}],diffContent:[{type:r.Input}],loading:[{type:r.Input}],showToolbar:[{type:r.Input}],showBtnToolbar:[{type:r.Input}],hideMatchingLines:[{type:r.Input}],outerContainerClass:[{type:r.Input}],outerContainerStyle:[{type:r.Input}],toolbarClass:[{type:r.Input}],toolbarStyle:[{type:r.Input}],compareRowsClass:[{type:r.Input}],compareRowsStyle:[{type:r.Input}],compareResults:[{type:r.Output}]},t}(),a=function(){function t(){this.active=!1}return t.prototype.ngOnInit=function(){},t.decorators=[{type:r.Component,args:[{selector:"td-loader-spinner",template:'<div class="td-loading-roller" *ngIf="active">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n',styles:['.td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;-webkit-transform-origin:32px 32px;transform-origin:32px 32px}.td-loading-roller div:after{content:" ";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}']}]}],t.ctorParameters=function(){return[]},t.propDecorators={active:[{type:r.Input}]},t}(),s=function(){function t(){}return t.prototype.transform=function(t,n){return t?(n&&n.length,t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/ /g,"&nbsp;")):" "},t.decorators=[{type:r.Pipe,args:[{name:"formatLine"}]}],t}(),f=function(){function t(){}return t.decorators=[{type:r.NgModule,args:[{imports:[n.CommonModule,e.FormsModule],declarations:[l,a,s],exports:[l]}]}],t}();t.NgxTextDiffService=o,t.NgxTextDiffComponent=l,t.NgxTextDiffModule=f,t.ɵb=s,t.ɵa=a,Object.defineProperty(t,"__esModule",{value:!0})});
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("diff-match-patch"),require("rxjs"),require("@angular/cdk/scrolling"),require("@angular/common"),require("@angular/forms")):"function"==typeof define&&define.amd?define("ngx-text-diff",["exports","@angular/core","diff-match-patch","rxjs","@angular/cdk/scrolling","@angular/common","@angular/forms"],n):n((t=t||self)["ngx-text-diff"]={},t.ng.core,t.diffMatchPatch,t.rxjs,t.ng.cdk.scrolling,t.ng.common,t.ng.forms)}(this,(function(t,n,e,r,i,o,l){"use strict";
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */function s(t,n,e,r){var i,o=arguments.length,l=o<3?n:null===r?r=Object.getOwnPropertyDescriptor(n,e):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(t,n,e,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(l=(o<3?i(l):o>3?i(n,e,l):i(n,e))||l);return o>3&&l&&Object.defineProperty(n,e,l),l}function a(t,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,n)}function f(t,n,e,r){return new(e||(e=Promise))((function(i,o){function l(t){try{a(r.next(t))}catch(t){o(t)}}function s(t){try{a(r.throw(t))}catch(t){o(t)}}function a(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(l,s)}a((r=r.apply(t,n||[])).next())}))}function d(t,n){var e,r,i,o,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(e)throw new TypeError("Generator is already executing.");for(;l;)try{if(e=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return l.label++,{value:o[1],done:!1};case 5:l.label++,r=o[1],o=[0];continue;case 7:o=l.ops.pop(),l.trys.pop();continue;default:if(!(i=l.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){l=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){l.label=o[1];break}if(6===o[0]&&l.label<i[1]){l.label=i[1],i=o;break}if(i&&l.label<i[2]){l.label=i[2],l.ops.push(o);break}i[2]&&l.ops.pop(),l.trys.pop();continue}o=n.call(t,l)}catch(t){o=[6,t],r=0}finally{e=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}var c=function(t){return null==t||!(Object.keys(t)||t).length||0===(Object.keys(t)||t).length},p=function(){function t(){this.initParser()}return t.prototype.initParser=function(){this.diffParser=new e.diff_match_patch},t.prototype.getDiffsByLines=function(t,n){var e=this;return new Promise((function(r,i){var o=e.diffParser.diff_linesToChars_(t,n),l=o.chars1,s=o.chars2,a=o.lineArray,f=e.diffParser.diff_main(l,s,!0);e.diffParser.diff_charsToLines_(f,a);var d=e.formatOutput(f);d||i("Error"),r(d)}))},t.prototype.formatOutput=function(t){var n=this,r=1,i=1;return t.reduce((function(t,o){t||(t=[]);var l=o[0],s=o[1],a=null,f=null,d=null,p=null,h=null;switch(l){case e.DIFF_EQUAL:s.split("\n").filter((function(t,n,e){return n!==e.length-1||!c(t)})).forEach((function(n){h={leftContent:d={lineNumber:r,lineContent:n,lineDiffs:[],prefix:""},rightContent:p={lineNumber:i,lineContent:n,lineDiffs:[],prefix:""},belongTo:"both",hasDiffs:!1,numDiffs:0},t.push(h),i+=1,r+=1}));break;case e.DIFF_DELETE:s.split("\n").filter((function(t,n,e){return n!==e.length-1||!c(t)})).forEach((function(e){f=t.find((function(t){return!t.leftContent&&t.rightContent&&t.rightContent.lineNumber===r&&""!==t.rightContent.prefix})),d={lineNumber:r,lineContent:e,lineDiffs:[{content:e,isDiff:!0}],prefix:"-"},f?(f.leftContent=d,f.leftContent.lineDiffs=n.getDiffParts(f.leftContent.lineContent,f.rightContent.lineContent),f.rightContent.lineDiffs=n.getDiffParts(f.rightContent.lineContent,f.leftContent.lineContent),f.belongTo="both",f.numDiffs=n.countDiffs(f)):t.push({leftContent:d,rightContent:null,hasDiffs:!0,belongTo:"left",numDiffs:1}),r+=1}));break;case e.DIFF_INSERT:s.split("\n").filter((function(t,n,e){return n!==e.length-1||!c(t)})).forEach((function(e){a=t.find((function(t){return t.leftContent&&!t.rightContent&&t.leftContent.lineNumber===i&&""!==t.leftContent.prefix})),p={lineNumber:i,lineContent:e,lineDiffs:[{content:e,isDiff:!0}],prefix:"+"},a?(a.rightContent=p,a.leftContent.lineDiffs=n.getDiffParts(a.leftContent.lineContent,a.rightContent.lineContent),a.rightContent.lineDiffs=n.getDiffParts(a.rightContent.lineContent,a.leftContent.lineContent),a.belongTo="both",a.numDiffs=n.countDiffs(a)):t.push({leftContent:null,rightContent:p,hasDiffs:!0,belongTo:"right",numDiffs:1}),i+=1}))}return t}),[])},t.prototype.countDiffs=function(t){var n=0;return t.leftContent&&(n+=t.leftContent.lineDiffs.filter((function(t){return t.isDiff})).length),t.leftContent&&(n+=t.rightContent.lineDiffs.filter((function(t){return t.isDiff})).length),n},t.prototype.getDiffParts=function(t,n){for(var e=[],r=0,i=0,o="",l="";r<t.length;)t[r]===n[i]&&i<n.length?(""!==l&&(e.push({content:l,isDiff:!0}),l=""),o+=t[r]):(""!==o&&(e.push({content:o,isDiff:!1}),o=""),l+=t[r]),r++,i++;return""!==l?e.push({content:l,isDiff:!0}):""!==o&&e.push({content:o,isDiff:!1}),e},t.ɵprov=n["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t=s([n.Injectable({providedIn:"root"}),a("design:paramtypes",[])],t)}(),h=function(){function t(t){this._el=t,this.element=t.nativeElement}return t.ctorParameters=function(){return[{type:n.ElementRef}]},s([n.Input(),a("design:type",String)],t.prototype,"id",void 0),t=s([n.Directive({selector:"[tdContainer]"}),a("design:paramtypes",[n.ElementRef])],t)}(),u=function(){function t(t,e,r){this.scrollService=t,this.diff=e,this.cd=r,this._hideMatchingLines=!1,this.format="SideBySide",this.left="",this.right="",this.loading=!1,this.showToolbar=!0,this.showBtnToolbar=!0,this.synchronizeScrolling=!0,this.compareResults=new n.EventEmitter,this.subscriptions=[],this.tableRows=[],this.filteredTableRows=[],this.tableRowsLineByLine=[],this.filteredTableRowsLineByLine=[],this.diffsCount=0,this.formatOptions=[{id:"side-by-side",name:"side-by-side",label:"Side by Side",value:"SideBySide",icon:"la-code"},{id:"line-by-line",name:"line-by-line",label:"Line by Line",value:"LineByLine",icon:"la-file-text"}]}return Object.defineProperty(t.prototype,"hideMatchingLines",{get:function(){return this._hideMatchingLines},set:function(t){this.hideMatchingLinesChanged(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this.loading=!0,this.diffContent&&this.subscriptions.push(this.diffContent.subscribe((function(n){t.loading=!0,t.left=n.leftContent,t.right=n.rightContent,t.renderDiffs().then((function(){t.cd.detectChanges(),t.loading=!1})).catch((function(){return t.loading=!1}))}))),this.renderDiffs().then((function(){return t.loading=!1})).catch((function(n){return t.loading=!1}))},t.prototype.ngAfterViewInit=function(){this.initScrollListener()},t.prototype.ngOnDestroy=function(){this.subscriptions&&this.subscriptions.forEach((function(t){return t.unsubscribe()}))},t.prototype.hideMatchingLinesChanged=function(t){this._hideMatchingLines=t,this.hideMatchingLines?(this.filteredTableRows=this.tableRows.filter((function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix})),this.filteredTableRowsLineByLine=this.tableRowsLineByLine.filter((function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix}))):(this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine)},t.prototype.setDiffTableFormat=function(t){this.format=t},t.prototype.renderDiffs=function(){return f(this,void 0,void 0,(function(){var t;return d(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),this.diffsCount=0,t=this,[4,this.diff.getDiffsByLines(this.left,this.right)];case 1:return t.tableRows=n.sent(),this.tableRowsLineByLine=this.tableRows.reduce((function(t,n){return t||(t=[]),n.hasDiffs?(n.leftContent&&t.push({leftContent:n.leftContent,rightContent:null,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs}),n.rightContent&&t.push({leftContent:null,rightContent:n.rightContent,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs})):t.push(n),t}),[]),this.diffsCount=this.tableRows.filter((function(t){return t.hasDiffs})).length,this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine,this.emitCompareResultsEvent(),[3,3];case 2:throw n.sent();case 3:return[2]}}))}))},t.prototype.emitCompareResultsEvent=function(){var t={hasDiff:this.diffsCount>0,diffsCount:this.diffsCount,rowsWithDiff:this.tableRows.filter((function(t){return t.hasDiffs})).map((function(t){return{leftLineNumber:t.leftContent?t.leftContent.lineNumber:null,rightLineNumber:t.rightContent?t.rightContent.lineNumber:null,numDiffs:t.numDiffs}}))};this.compareResults.next(t)},t.prototype.trackTableRows=function(t,n){return n&&n.leftContent?n.leftContent.lineContent:n&&n.rightContent?n.rightContent.lineContent:void 0},t.prototype.trackDiffs=function(t,n){return n&&n.content?n.content:void 0},t.prototype.initScrollListener=function(){var t=this;this.subscriptions.push(this.scrollService.scrolled().subscribe((function(n){if(n&&t.synchronizeScrolling){var e=n.getElementRef().nativeElement.id,r=t.containers.find((function(t){return t.id!==e}));r&&r.element.scrollTo({top:n.measureScrollOffset("top"),left:n.measureScrollOffset("left")})}})))},t.ctorParameters=function(){return[{type:i.ScrollDispatcher},{type:p},{type:n.ChangeDetectorRef}]},s([n.ViewChildren(h),a("design:type",n.QueryList)],t.prototype,"containers",void 0),s([n.Input(),a("design:type",String)],t.prototype,"format",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"left",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"right",void 0),s([n.Input(),a("design:type",r.Observable)],t.prototype,"diffContent",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"loading",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"showToolbar",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"showBtnToolbar",void 0),s([n.Input(),a("design:type",Boolean),a("design:paramtypes",[Boolean])],t.prototype,"hideMatchingLines",null),s([n.Input(),a("design:type",String)],t.prototype,"outerContainerClass",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"outerContainerStyle",void 0),s([n.Input(),a("design:type",String)],t.prototype,"toolbarClass",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"toolbarStyle",void 0),s([n.Input(),a("design:type",String)],t.prototype,"compareRowsClass",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"compareRowsStyle",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"synchronizeScrolling",void 0),s([n.Output(),a("design:type",Object)],t.prototype,"compareResults",void 0),t=s([n.Component({selector:"td-ngx-text-diff",template:'<td-loader-spinner [active]="loading"></td-loader-spinner>\r\n<div class="td-wrapper" [ngClass]="outerContainerClass" [ngStyle]="outerContainerStyle" *ngIf="!loading">\r\n\r\n <div [ngClass]="toolbarClass" [ngStyle]="toolbarStyle" *ngIf="showToolbar">\r\n <div class="td-toolbar-show-diff">\r\n <label class="td-checkbox-container">\r\n Only Show Lines with Differences ({{ diffsCount }})\r\n <input type="checkbox" id="showDiffs" [ngModel]="hideMatchingLines" (ngModelChange)="hideMatchingLinesChanged($event)" />\r\n <span class="checkmark"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class="td-toolbar-select-format" *ngIf="showToolbar && showBtnToolbar">\r\n <div class="td-btn-group td-btn-group-toggle" data-toggle="buttons">\r\n <button\r\n *ngFor="let option of formatOptions"\r\n [ngClass]="{ active: format === option.value, disabled: !!option.disabled }"\r\n [name]="option.name"\r\n [id]="option.id"\r\n [disabled]="!!option.disabled"\r\n (click)="setDiffTableFormat(option.value)"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class="td-table-wrapper" [ngClass]="compareRowsClass" [ngStyle]="compareRowsStyle">\r\n \x3c!-- Right side-by-side --\x3e\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'" id="td-left-compare-container" tdContainer cdkScrollable>\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n <span>{{ row.leftContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \x3c!-- Left side-by-side --\x3e\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'" id="td-right-compare-container" tdContainer cdkScrollable>\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n <span>{{ row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.rightContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \x3c!-- Line By Line - combined table --\x3e\r\n <div class="td-table-container line-by-line" *ngIf="format === \'LineByLine\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRowsLineByLine; trackBy: trackTableRows">\r\n <td scope="row" class="fit-column line-number-col-left">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope="row" class="fit-column line-number-col">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n',styles:[".td-wrapper{display:grid;width:100%;grid-row-gap:10px;grid-template-columns:repeat(2,[col] 50%);grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{grid-column:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;grid-column:2;grid-row:1}.td-table-container{grid-column:1/2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{position:relative;position:-webkit-sticky;position:sticky;left:0;top:auto;border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]}),a("design:paramtypes",[i.ScrollDispatcher,p,n.ChangeDetectorRef])],t)}(),g=function(){function t(){this.active=!1}return t.prototype.ngOnInit=function(){},s([n.Input(),a("design:type",Object)],t.prototype,"active",void 0),t=s([n.Component({selector:"td-loader-spinner",template:'<div class="td-loading-roller" *ngIf="active">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n',styles:['.td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;transform-origin:32px 32px}.td-loading-roller div:after{content:" ";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}']}),a("design:paramtypes",[])],t)}(),b=function(){function t(){}return t.prototype.transform=function(t,n){return t?(n&&n.length,t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/ /g,"&nbsp;")):" "},t=s([n.Pipe({name:"formatLine"})],t)}(),m=function(){function t(){}return t=s([n.NgModule({imports:[o.CommonModule,l.FormsModule,i.ScrollingModule],declarations:[u,g,b,h],exports:[u]})],t)}();t.NgxTextDiffComponent=u,t.NgxTextDiffModule=m,t.NgxTextDiffService=p,t.ɵa=h,t.ɵb=g,t.ɵc=b,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=ngx-text-diff.umd.min.js.map

@@ -1,12 +0,4 @@

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate } from "tslib";
import { Pipe } from '@angular/core';
export class FormatLinePipe {
/**
* @param {?} line
* @param {?=} diffs
* @return {?}
*/
let FormatLinePipe = class FormatLinePipe {
transform(line, diffs) {

@@ -28,8 +20,9 @@ if (!line) {

}
}
FormatLinePipe.decorators = [
{ type: Pipe, args: [{
name: 'formatLine'
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWxpbmUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvZm9ybWF0LWxpbmUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFLcEQsTUFBTSxPQUFPLGNBQWM7Ozs7OztJQUN6QixTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWdCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9COztpQkFFSztTQUNOO1FBQ0QsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7WUFuQkYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxZQUFZO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmb3JtYXRMaW5lJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0TGluZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICB0cmFuc2Zvcm0obGluZTogc3RyaW5nLCBkaWZmcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGlmICghbGluZSkge1xyXG4gICAgICByZXR1cm4gJyAnO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZGlmZnMgJiYgZGlmZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKmRpZmZzLmZvckVhY2goZGlmZiA9PiB7XHJcbiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShkaWZmLCBgPHNwYW4gY2xhc3M9XCJoaWdobGlcIj4ke2RpZmZ9PC9zcGFuPmApO1xyXG4gICAgICB9KTsqL1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbmVcclxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcclxuICAgICAgLnJlcGxhY2UoLyAvZywgJyZuYnNwOycpO1xyXG4gIH1cclxufVxyXG4iXX0=
};
FormatLinePipe = __decorate([
Pipe({
name: 'formatLine'
})
], FormatLinePipe);
export { FormatLinePipe };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWxpbmUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvZm9ybWF0LWxpbmUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFLcEQsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztJQUN6QixTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWdCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9COztpQkFFSztTQUNOO1FBQ0QsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0YsQ0FBQTtBQWpCWSxjQUFjO0lBSDFCLElBQUksQ0FBQztRQUNKLElBQUksRUFBRSxZQUFZO0tBQ25CLENBQUM7R0FDVyxjQUFjLENBaUIxQjtTQWpCWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmb3JtYXRMaW5lJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0TGluZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICB0cmFuc2Zvcm0obGluZTogc3RyaW5nLCBkaWZmcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGlmICghbGluZSkge1xyXG4gICAgICByZXR1cm4gJyAnO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZGlmZnMgJiYgZGlmZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKmRpZmZzLmZvckVhY2goZGlmZiA9PiB7XHJcbiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShkaWZmLCBgPHNwYW4gY2xhc3M9XCJoaWdobGlcIj4ke2RpZmZ9PC9zcGFuPmApO1xyXG4gICAgICB9KTsqL1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbmVcclxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcclxuICAgICAgLnJlcGxhY2UoLyAvZywgJyZuYnNwOycpO1xyXG4gIH1cclxufVxyXG4iXX0=

@@ -1,31 +0,22 @@

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate, __metadata } from "tslib";
import { Component, Input } from '@angular/core';
export class LoaderSpinnerComponent {
let LoaderSpinnerComponent = class LoaderSpinnerComponent {
constructor() {
this.active = false;
}
/**
* @return {?}
*/
ngOnInit() { }
}
LoaderSpinnerComponent.decorators = [
{ type: Component, args: [{
selector: 'td-loader-spinner',
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n",
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;-webkit-transform-origin:32px 32px;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}"]
}] }
];
/** @nocollapse */
LoaderSpinnerComponent.ctorParameters = () => [];
LoaderSpinnerComponent.propDecorators = {
active: [{ type: Input }]
};
if (false) {
/** @type {?} */
LoaderSpinnerComponent.prototype.active;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9sb2FkZXItc3Bpbm5lci9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBT3pELE1BQU0sT0FBTyxzQkFBc0I7SUFHakM7UUFGUyxXQUFNLEdBQUcsS0FBSyxDQUFDO0lBRVQsQ0FBQzs7OztJQUVoQixRQUFRLEtBQUksQ0FBQzs7O1lBVmQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLG9OQUE4Qzs7YUFFL0M7Ozs7O3FCQUVFLEtBQUs7Ozs7SUFBTix3Q0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbG9hZGVyLXNwaW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJTcGlubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcbn1cclxuIl19
__decorate([
Input(),
__metadata("design:type", Object)
], LoaderSpinnerComponent.prototype, "active", void 0);
LoaderSpinnerComponent = __decorate([
Component({
selector: 'td-loader-spinner',
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n",
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"]
}),
__metadata("design:paramtypes", [])
], LoaderSpinnerComponent);
export { LoaderSpinnerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9sb2FkZXItc3Bpbm5lci9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBT3pELElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXNCO0lBR2pDO1FBRlMsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUVULENBQUM7SUFFaEIsUUFBUSxLQUFJLENBQUM7Q0FDZCxDQUFBO0FBTFU7SUFBUixLQUFLLEVBQUU7O3NEQUFnQjtBQURiLHNCQUFzQjtJQUxsQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLG9OQUE4Qzs7S0FFL0MsQ0FBQzs7R0FDVyxzQkFBc0IsQ0FNbEM7U0FOWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbG9hZGVyLXNwaW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJTcGlubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcbn1cclxuIl19

@@ -1,15 +0,10 @@

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { ChangeDetectorRef, Component, Input, Output, EventEmitter } from '@angular/core';
import { __awaiter, __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit, Output, EventEmitter, ViewChildren, QueryList, AfterViewInit } from '@angular/core';
import { NgxTextDiffService } from './ngx-text-diff.service';
import { Observable } from 'rxjs';
export class NgxTextDiffComponent {
/**
* @param {?} diff
* @param {?} cd
*/
constructor(diff, cd) {
import { ContainerDirective } from './ngx-text-diff-container.directive';
import { ScrollDispatcher, CdkScrollable } from '@angular/cdk/scrolling';
let NgxTextDiffComponent = class NgxTextDiffComponent {
constructor(scrollService, diff, cd) {
this.scrollService = scrollService;
this.diff = diff;

@@ -24,2 +19,3 @@ this.cd = cd;

this.showBtnToolbar = true;
this.synchronizeScrolling = true;
this.compareResults = new EventEmitter();

@@ -49,18 +45,8 @@ this.subscriptions = [];

}
/**
* @return {?}
*/
get hideMatchingLines() {
return this._hideMatchingLines;
}
/**
* @param {?} hide
* @return {?}
*/
set hideMatchingLines(hide) {
this.hideMatchingLinesChanged(hide);
}
/**
* @return {?}
*/
ngOnInit() {

@@ -85,5 +71,5 @@ this.loading = true;

}
/**
* @return {?}
*/
ngAfterViewInit() {
this.initScrollListener();
}
ngOnDestroy() {

@@ -94,6 +80,2 @@ if (this.subscriptions) {

}
/**
* @param {?} value
* @return {?}
*/
hideMatchingLinesChanged(value) {

@@ -110,14 +92,7 @@ this._hideMatchingLines = value;

}
/**
* @param {?} format
* @return {?}
*/
setDiffTableFormat(format) {
this.format = format;
}
/**
* @return {?}
*/
renderDiffs() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return __awaiter(this, void 0, void 0, function* () {
try {

@@ -165,7 +140,3 @@ this.diffsCount = 0;

}
/**
* @return {?}
*/
emitCompareResultsEvent() {
/** @type {?} */
const diffResults = {

@@ -184,107 +155,106 @@ hasDiff: this.diffsCount > 0,

}
/**
* @param {?} index
* @param {?} row
* @return {?}
*/
trackTableRows(index, row) {
return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined;
}
/**
* @param {?} index
* @param {?} diff
* @return {?}
*/
trackDiffs(index, diff) {
return diff && diff.content ? diff.content : undefined;
}
}
NgxTextDiffComponent.decorators = [
{ type: Component, args: [{
selector: 'td-ngx-text-diff',
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\"\r\n >Show Lines with Diffs ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [".td-wrapper{display:-ms-grid;display:grid;width:100%;grid-row-gap:10px;-ms-grid-columns:([col] 50%)[2];grid-template-columns:repeat(2,[col] 50%);-ms-grid-rows:([row] auto)[2];grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{-ms-grid-column:1;grid-column:1;-ms-grid-row:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;-ms-grid-column:2;grid-column:2;-ms-grid-row:1;grid-row:1}.td-table-container{-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2;-ms-grid-row:2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]
}] }
];
/** @nocollapse */
initScrollListener() {
this.subscriptions.push(this.scrollService.scrolled().subscribe((scrollableEv) => {
if (scrollableEv && this.synchronizeScrolling) {
const scrollableId = scrollableEv.getElementRef().nativeElement.id;
const nonScrolledContainer = this.containers.find(container => container.id !== scrollableId);
if (nonScrolledContainer) {
nonScrolledContainer.element.scrollTo({
top: scrollableEv.measureScrollOffset('top'),
left: scrollableEv.measureScrollOffset('left'),
});
}
}
}));
}
};
NgxTextDiffComponent.ctorParameters = () => [
{ type: ScrollDispatcher },
{ type: NgxTextDiffService },
{ type: ChangeDetectorRef }
];
NgxTextDiffComponent.propDecorators = {
format: [{ type: Input }],
left: [{ type: Input }],
right: [{ type: Input }],
diffContent: [{ type: Input }],
loading: [{ type: Input }],
showToolbar: [{ type: Input }],
showBtnToolbar: [{ type: Input }],
hideMatchingLines: [{ type: Input }],
outerContainerClass: [{ type: Input }],
outerContainerStyle: [{ type: Input }],
toolbarClass: [{ type: Input }],
toolbarStyle: [{ type: Input }],
compareRowsClass: [{ type: Input }],
compareRowsStyle: [{ type: Input }],
compareResults: [{ type: Output }]
};
if (false) {
/**
* @type {?}
* @private
*/
NgxTextDiffComponent.prototype._hideMatchingLines;
/** @type {?} */
NgxTextDiffComponent.prototype.format;
/** @type {?} */
NgxTextDiffComponent.prototype.left;
/** @type {?} */
NgxTextDiffComponent.prototype.right;
/** @type {?} */
NgxTextDiffComponent.prototype.diffContent;
/** @type {?} */
NgxTextDiffComponent.prototype.loading;
/** @type {?} */
NgxTextDiffComponent.prototype.showToolbar;
/** @type {?} */
NgxTextDiffComponent.prototype.showBtnToolbar;
/** @type {?} */
NgxTextDiffComponent.prototype.outerContainerClass;
/** @type {?} */
NgxTextDiffComponent.prototype.outerContainerStyle;
/** @type {?} */
NgxTextDiffComponent.prototype.toolbarClass;
/** @type {?} */
NgxTextDiffComponent.prototype.toolbarStyle;
/** @type {?} */
NgxTextDiffComponent.prototype.compareRowsClass;
/** @type {?} */
NgxTextDiffComponent.prototype.compareRowsStyle;
/** @type {?} */
NgxTextDiffComponent.prototype.compareResults;
/** @type {?} */
NgxTextDiffComponent.prototype.subscriptions;
/** @type {?} */
NgxTextDiffComponent.prototype.tableRows;
/** @type {?} */
NgxTextDiffComponent.prototype.filteredTableRows;
/** @type {?} */
NgxTextDiffComponent.prototype.tableRowsLineByLine;
/** @type {?} */
NgxTextDiffComponent.prototype.filteredTableRowsLineByLine;
/** @type {?} */
NgxTextDiffComponent.prototype.diffsCount;
/** @type {?} */
NgxTextDiffComponent.prototype.formatOptions;
/**
* @type {?}
* @private
*/
NgxTextDiffComponent.prototype.diff;
/**
* @type {?}
* @private
*/
NgxTextDiffComponent.prototype.cd;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFPaEQsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFpRC9CLFlBQW9CLElBQXdCLEVBQVUsRUFBcUI7UUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWhEbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFdBQU0sR0FBb0IsWUFBWSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQWVyQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDM0Qsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGNBQVMsR0FBeUIsRUFBRSxDQUFDO1FBQ3JDLHNCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDN0Msd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztRQUMvQyxnQ0FBMkIsR0FBeUIsRUFBRSxDQUFDO1FBQ3ZELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixrQkFBYSxHQUE0QjtZQUN2QztnQkFDRSxFQUFFLEVBQUUsY0FBYztnQkFDbEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BC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SUFDbEMsNENBQThCOztJQUM5Qiw0Q0FBMkI7O0lBQzNCLGdEQUFrQzs7SUFDbEMsZ0RBQStCOztJQUMvQiw4Q0FBMkQ7O0lBQzNELDZDQUFtQzs7SUFDbkMseUNBQXFDOztJQUNyQyxpREFBNkM7O0lBQzdDLG1EQUErQzs7SUFDL0MsMkRBQXVEOztJQUN2RCwwQ0FBZTs7SUFFZiw2Q0FlRTs7Ozs7SUFFVSxvQ0FBZ0M7Ozs7O0lBQUUsa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmQ29udGVudCwgRGlmZlBhcnQsIERpZmZUYWJsZUZvcm1hdCwgRGlmZlRhYmxlRm9ybWF0T3B0aW9uLCBEaWZmVGFibGVSb3dSZXN1bHQsIERpZmZSZXN1bHRzIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLm1vZGVsJztcclxuaW1wb3J0IHsgTmd4VGV4dERpZmZTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbmd4LXRleHQtZGlmZicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25neC10ZXh0LWRpZmYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10ZXh0LWRpZmYuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfaGlkZU1hdGNoaW5nTGluZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZSc7XHJcbiAgQElucHV0KCkgbGVmdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJpZ2h0ID0gJyc7XHJcbiAgQElucHV0KCkgZGlmZkNvbnRlbnQ6IE9ic2VydmFibGU8RGlmZkNvbnRlbnQ+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0J0blRvb2xiYXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGhpZGVNYXRjaGluZ0xpbmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGVNYXRjaGluZ0xpbmVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGhpZGVNYXRjaGluZ0xpbmVzKGhpZGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaGlkZU1hdGNoaW5nTGluZXNDaGFuZ2VkKGhpZGUpO1xyXG4gIH1cclxuICBASW5wdXQoKSBvdXRlckNvbnRhaW5lckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3V0ZXJDb250YWluZXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbXBhcmVSb3dzQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBjb21wYXJlUm93c1N0eWxlOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNvbXBhcmVSZXN1bHRzID0gbmV3IEV2ZW50RW1pdHRlcjxEaWZmUmVzdWx0cz4oKTtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICB0YWJsZVJvd3NMaW5lQnlMaW5lOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IFtdO1xyXG4gIGZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBuYW1lOiAnbGluZS1ieS1saW5lJyxcclxuICAgICAgbGFiZWw6ICdMaW5lIGJ5IExpbmUnLFxyXG4gICAgICB2YWx1ZTogJ0xpbmVCeUxpbmUnLFxyXG4gICAgICBpY29uOiAnbGEtZmlsZS10ZXh0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWZmOiBOZ3hUZXh0RGlmZlNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kaWZmQ29udGVudCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRpZmZDb250ZW50LnN1YnNjcmliZShjb250ZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxlZnQgPSBjb250ZW50LmxlZnRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yaWdodCA9IGNvbnRlbnQucmlnaHRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJEaWZmcygpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgLnRoZW4oKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcclxuICAgICAgLmNhdGNoKGUgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVNYXRjaGluZ0xpbmVzQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGlkZU1hdGNoaW5nTGluZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmhpZGVNYXRjaGluZ0xpbmVzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZS5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93cyA9IHRoaXMudGFibGVSb3dzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpZmZUYWJsZUZvcm1hdChmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCkge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJEaWZmcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGlmZnNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMudGFibGVSb3dzID0gYXdhaXQgdGhpcy5kaWZmLmdldERpZmZzQnlMaW5lcyh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93cy5yZWR1Y2UoKHRhYmxlTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10sIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YWJsZUxpbmVCeUxpbmUpIHtcclxuICAgICAgICAgIHRhYmxlTGluZUJ5TGluZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93Lmhhc0RpZmZzKSB7XHJcbiAgICAgICAgICBpZiAocm93LmxlZnRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogcm93LmxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJvdy5yaWdodENvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogcm93LnJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGluZUJ5TGluZTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIocm93ID0+IHJvdy5oYXNEaWZmcykubGVuZ3RoO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lO1xyXG4gICAgICB0aGlzLmVtaXRDb21wYXJlUmVzdWx0c0V2ZW50KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29tcGFyZVJlc3VsdHNFdmVudCgpIHtcclxuICAgIGNvbnN0IGRpZmZSZXN1bHRzOiBEaWZmUmVzdWx0cyA9IHtcclxuICAgICAgaGFzRGlmZjogdGhpcy5kaWZmc0NvdW50ID4gMCxcclxuICAgICAgZGlmZnNDb3VudDogdGhpcy5kaWZmc0NvdW50LFxyXG4gICAgICByb3dzV2l0aERpZmY6IHRoaXMudGFibGVSb3dzXHJcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lmhhc0RpZmZzKVxyXG4gICAgICAgIC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICBsZWZ0TGluZU51bWJlcjogcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgOiBudWxsLFxyXG4gICAgICAgICAgcmlnaHRMaW5lTnVtYmVyOiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyIDogbnVsbCxcclxuICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmVSZXN1bHRzLm5leHQoZGlmZlJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tUYWJsZVJvd3MoaW5kZXgsIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5sZWZ0Q29udGVudCA/IHJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCA6IHJvdyAmJiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHRyYWNrRGlmZnMoaW5kZXgsIGRpZmY6IERpZmZQYXJ0KSB7XHJcbiAgICByZXR1cm4gZGlmZiAmJiBkaWZmLmNvbnRlbnQgPyBkaWZmLmNvbnRlbnQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
__decorate([
ViewChildren(ContainerDirective),
__metadata("design:type", QueryList)
], NgxTextDiffComponent.prototype, "containers", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "format", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "left", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "right", void 0);
__decorate([
Input(),
__metadata("design:type", Observable)
], NgxTextDiffComponent.prototype, "diffContent", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "loading", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "showToolbar", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "showBtnToolbar", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Boolean])
], NgxTextDiffComponent.prototype, "hideMatchingLines", null);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "outerContainerClass", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "outerContainerStyle", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "toolbarClass", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "toolbarStyle", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTextDiffComponent.prototype, "compareRowsClass", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "compareRowsStyle", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "synchronizeScrolling", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], NgxTextDiffComponent.prototype, "compareResults", void 0);
NgxTextDiffComponent = __decorate([
Component({
selector: 'td-ngx-text-diff',
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">\r\n Only Show Lines with Differences ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <!-- Right side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-left-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Left side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-right-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Line By Line - combined table -->\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [".td-wrapper{display:grid;width:100%;grid-row-gap:10px;grid-template-columns:repeat(2,[col] 50%);grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{grid-column:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;grid-column:2;grid-row:1}.td-table-container{grid-column:1/2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{position:relative;position:-webkit-sticky;position:sticky;left:0;top:auto;border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]
}),
__metadata("design:paramtypes", [ScrollDispatcher, NgxTextDiffService, ChangeDetectorRef])
], NgxTextDiffComponent);
export { NgxTextDiffComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEVBQ1QsYUFBYSxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU96RSxJQUFhLG9CQUFvQixHQUFqQyxNQUFhLG9CQUFvQjtJQWtEL0IsWUFBb0IsYUFBK0IsRUFBVSxJQUF3QixFQUFVLEVBQXFCO1FBQWhHLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQW9CO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFqRDVHLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUxQixXQUFNLEdBQW9CLFlBQVksQ0FBQztRQUN2QyxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFldEIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUMzRCxrQkFBYSxHQUFtQixF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LEVBQUU7OzhEQUF1QjtBQUN0QjtJQUFSLEtBQUssRUFBRTs7a0VBQTZCO0FBQzNCO0lBQVQsTUFBTSxFQUFFOzs0REFBa0Q7QUF6QmhELG9CQUFvQjtJQUxoQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLHcvT0FBNkM7O0tBRTlDLENBQUM7cUNBbURtQyxnQkFBZ0IsRUFBZ0Isa0JBQWtCLEVBQWMsaUJBQWlCO0dBbER6RyxvQkFBb0IsQ0F1TGhDO1NBdkxZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEFmdGVyVmlld0luaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlmZkNvbnRlbnQsIERpZmZQYXJ0LCBEaWZmVGFibGVGb3JtYXQsIERpZmZUYWJsZUZvcm1hdE9wdGlvbiwgRGlmZlRhYmxlUm93UmVzdWx0LCBEaWZmUmVzdWx0cyB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5tb2RlbCc7XHJcbmltcG9ydCB7IE5neFRleHREaWZmU2VydmljZSB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi1jb250YWluZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2Nyb2xsRGlzcGF0Y2hlciwgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0ZC1uZ3gtdGV4dC1kaWZmJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXRleHQtZGlmZi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LXRleHQtZGlmZi5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9oaWRlTWF0Y2hpbmdMaW5lcyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGRyZW4oQ29udGFpbmVyRGlyZWN0aXZlKSBjb250YWluZXJzOiBRdWVyeUxpc3Q8Q29udGFpbmVyRGlyZWN0aXZlPjtcclxuICBASW5wdXQoKSBmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCA9ICdTaWRlQnlTaWRlJztcclxuICBASW5wdXQoKSBsZWZ0ID0gJyc7XHJcbiAgQElucHV0KCkgcmlnaHQgPSAnJztcclxuICBASW5wdXQoKSBkaWZmQ29udGVudDogT2JzZXJ2YWJsZTxEaWZmQ29udGVudD47XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dUb29sYmFyID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QnRuVG9vbGJhciA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBnZXQgaGlkZU1hdGNoaW5nTGluZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGlkZU1hdGNoaW5nTGluZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgaGlkZU1hdGNoaW5nTGluZXMoaGlkZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5oaWRlTWF0Y2hpbmdMaW5lc0NoYW5nZWQoaGlkZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG91dGVyQ29udGFpbmVyQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBvdXRlckNvbnRhaW5lclN0eWxlOiBhbnk7XHJcbiAgQElucHV0KCkgdG9vbGJhckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdG9vbGJhclN0eWxlOiBhbnk7XHJcbiAgQElucHV0KCkgY29tcGFyZVJvd3NDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbXBhcmVSb3dzU3R5bGU6IGFueTtcclxuICBASW5wdXQoKSBzeW5jaHJvbml6ZVNjcm9sbGluZyA9IHRydWU7XHJcbiAgQE91dHB1dCgpIGNvbXBhcmVSZXN1bHRzID0gbmV3IEV2ZW50RW1pdHRlcjxEaWZmUmVzdWx0cz4oKTtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICB0YWJsZVJvd3NMaW5lQnlMaW5lOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IFtdO1xyXG4gIGZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBuYW1lOiAnbGluZS1ieS1saW5lJyxcclxuICAgICAgbGFiZWw6ICdMaW5lIGJ5IExpbmUnLFxyXG4gICAgICB2YWx1ZTogJ0xpbmVCeUxpbmUnLFxyXG4gICAgICBpY29uOiAnbGEtZmlsZS10ZXh0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzY3JvbGxTZXJ2aWNlOiBTY3JvbGxEaXNwYXRjaGVyLCBwcml2YXRlIGRpZmY6IE5neFRleHREaWZmU2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRpZmZDb250ZW50KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuZGlmZkNvbnRlbnQuc3Vic2NyaWJlKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubGVmdCA9IGNvbnRlbnQubGVmdENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0ID0gY29udGVudC5yaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyRGlmZnMoKVxyXG4gICAgICAudGhlbigoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxyXG4gICAgICAuY2F0Y2goZSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVNYXRjaGluZ0xpbmVzQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGlkZU1hdGNoaW5nTGluZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmhpZGVNYXRjaGluZ0xpbmVzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZS5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93cyA9IHRoaXMudGFibGVSb3dzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpZmZUYWJsZUZvcm1hdChmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCkge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJEaWZmcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGlmZnNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMudGFibGVSb3dzID0gYXdhaXQgdGhpcy5kaWZmLmdldERpZmZzQnlMaW5lcyh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93cy5yZWR1Y2UoKHRhYmxlTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10sIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YWJsZUxpbmVCeUxpbmUpIHtcclxuICAgICAgICAgIHRhYmxlTGluZUJ5TGluZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93Lmhhc0RpZmZzKSB7XHJcbiAgICAgICAgICBpZiAocm93LmxlZnRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogcm93LmxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJvdy5yaWdodENvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogcm93LnJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGluZUJ5TGluZTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIocm93ID0+IHJvdy5oYXNEaWZmcykubGVuZ3RoO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lO1xyXG4gICAgICB0aGlzLmVtaXRDb21wYXJlUmVzdWx0c0V2ZW50KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29tcGFyZVJlc3VsdHNFdmVudCgpIHtcclxuICAgIGNvbnN0IGRpZmZSZXN1bHRzOiBEaWZmUmVzdWx0cyA9IHtcclxuICAgICAgaGFzRGlmZjogdGhpcy5kaWZmc0NvdW50ID4gMCxcclxuICAgICAgZGlmZnNDb3VudDogdGhpcy5kaWZmc0NvdW50LFxyXG4gICAgICByb3dzV2l0aERpZmY6IHRoaXMudGFibGVSb3dzXHJcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lmhhc0RpZmZzKVxyXG4gICAgICAgIC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICBsZWZ0TGluZU51bWJlcjogcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgOiBudWxsLFxyXG4gICAgICAgICAgcmlnaHRMaW5lTnVtYmVyOiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyIDogbnVsbCxcclxuICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmVSZXN1bHRzLm5leHQoZGlmZlJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tUYWJsZVJvd3MoaW5kZXgsIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5sZWZ0Q29udGVudCA/IHJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCA6IHJvdyAmJiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHRyYWNrRGlmZnMoaW5kZXgsIGRpZmY6IERpZmZQYXJ0KSB7XHJcbiAgICByZXR1cm4gZGlmZiAmJiBkaWZmLmNvbnRlbnQgPyBkaWZmLmNvbnRlbnQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRTY3JvbGxMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZUV2OiBDZGtTY3JvbGxhYmxlKSA9PiB7XHJcbiAgICAgIGlmIChzY3JvbGxhYmxlRXYgJiYgdGhpcy5zeW5jaHJvbml6ZVNjcm9sbGluZykge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVJZCA9IHNjcm9sbGFibGVFdi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5pZDtcclxuICAgICAgICBjb25zdCBub25TY3JvbGxlZENvbnRhaW5lcjogQ29udGFpbmVyRGlyZWN0aXZlID0gdGhpcy5jb250YWluZXJzLmZpbmQoY29udGFpbmVyID0+IGNvbnRhaW5lci5pZCAhPT0gc2Nyb2xsYWJsZUlkKTtcclxuICAgICAgICBpZiAobm9uU2Nyb2xsZWRDb250YWluZXIpIHtcclxuICAgICAgICAgIG5vblNjcm9sbGVkQ29udGFpbmVyLmVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6IHNjcm9sbGFibGVFdi5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKSxcclxuICAgICAgICAgICAgbGVmdDogc2Nyb2xsYWJsZUV2Lm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2xlZnQnKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxufVxyXG4iXX0=

@@ -1,85 +0,1 @@

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @record
*/
export function DiffTableFormatOption() { }
if (false) {
/** @type {?} */
DiffTableFormatOption.prototype.id;
/** @type {?} */
DiffTableFormatOption.prototype.name;
/** @type {?} */
DiffTableFormatOption.prototype.label;
/** @type {?} */
DiffTableFormatOption.prototype.value;
/** @type {?|undefined} */
DiffTableFormatOption.prototype.icon;
/** @type {?|undefined} */
DiffTableFormatOption.prototype.disabled;
}
/**
* @record
*/
export function DiffContent() { }
if (false) {
/** @type {?} */
DiffContent.prototype.leftContent;
/** @type {?} */
DiffContent.prototype.rightContent;
}
/**
* @record
*/
export function DiffPart() { }
if (false) {
/** @type {?} */
DiffPart.prototype.content;
/** @type {?} */
DiffPart.prototype.isDiff;
}
/**
* @record
*/
export function DiffLineResult() { }
if (false) {
/** @type {?} */
DiffLineResult.prototype.lineNumber;
/** @type {?} */
DiffLineResult.prototype.prefix;
/** @type {?} */
DiffLineResult.prototype.lineContent;
/** @type {?} */
DiffLineResult.prototype.lineDiffs;
}
/**
* @record
*/
export function DiffTableRowResult() { }
if (false) {
/** @type {?} */
DiffTableRowResult.prototype.leftContent;
/** @type {?} */
DiffTableRowResult.prototype.rightContent;
/** @type {?} */
DiffTableRowResult.prototype.belongTo;
/** @type {?} */
DiffTableRowResult.prototype.hasDiffs;
/** @type {?} */
DiffTableRowResult.prototype.numDiffs;
}
/**
* @record
*/
export function DiffResults() { }
if (false) {
/** @type {?} */
DiffResults.prototype.hasDiff;
/** @type {?} */
DiffResults.prototype.diffsCount;
/** @type {?} */
DiffResults.prototype.rowsWithDiff;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvbmd4LXRleHQtZGlmZi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsMkNBT0M7OztJQU5DLG1DQUFXOztJQUNYLHFDQUFhOztJQUNiLHNDQUFjOztJQUNkLHNDQUF1Qjs7SUFDdkIscUNBQWM7O0lBQ2QseUNBQW1COzs7OztBQUdyQixpQ0FHQzs7O0lBRkMsa0NBQW9COztJQUNwQixtQ0FBcUI7Ozs7O0FBR3ZCLDhCQUdDOzs7SUFGQywyQkFBZ0I7O0lBQ2hCLDBCQUFnQjs7Ozs7QUFHbEIsb0NBS0M7OztJQUpDLG9DQUFtQjs7SUFDbkIsZ0NBQWU7O0lBQ2YscUNBQW9COztJQUNwQixtQ0FBc0I7Ozs7O0FBR3hCLHdDQU1DOzs7SUFMQyx5Q0FBNEI7O0lBQzVCLDBDQUE2Qjs7SUFDN0Isc0NBQW1COztJQUNuQixzQ0FBa0I7O0lBQ2xCLHNDQUFpQjs7Ozs7QUFHbkIsaUNBUUM7OztJQVBDLDhCQUFpQjs7SUFDakIsaUNBQW1COztJQUNuQixtQ0FJSSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIERpZmZUYWJsZUZvcm1hdCA9ICdTaWRlQnlTaWRlJyB8ICdMaW5lQnlMaW5lJztcclxuZXhwb3J0IHR5cGUgU2lkZURpZmYgPSAnYm90aCcgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmVGFibGVGb3JtYXRPcHRpb24ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IERpZmZUYWJsZUZvcm1hdDtcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmQ29udGVudCB7XHJcbiAgbGVmdENvbnRlbnQ6IHN0cmluZztcclxuICByaWdodENvbnRlbnQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmUGFydCB7XHJcbiAgY29udGVudDogc3RyaW5nO1xyXG4gIGlzRGlmZjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmTGluZVJlc3VsdCB7XHJcbiAgbGluZU51bWJlcjogbnVtYmVyO1xyXG4gIHByZWZpeDogc3RyaW5nO1xyXG4gIGxpbmVDb250ZW50OiBzdHJpbmc7XHJcbiAgbGluZURpZmZzOiBEaWZmUGFydFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZUYWJsZVJvd1Jlc3VsdCB7XHJcbiAgbGVmdENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0O1xyXG4gIHJpZ2h0Q29udGVudDogRGlmZkxpbmVSZXN1bHQ7XHJcbiAgYmVsb25nVG86IFNpZGVEaWZmO1xyXG4gIGhhc0RpZmZzOiBib29sZWFuO1xyXG4gIG51bURpZmZzOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlJlc3VsdHMge1xyXG4gIGhhc0RpZmY6IGJvb2xlYW47XHJcbiAgZGlmZnNDb3VudDogbnVtYmVyO1xyXG4gIHJvd3NXaXRoRGlmZjoge1xyXG4gICAgbGVmdExpbmVOdW1iZXI/OiBudW1iZXI7XHJcbiAgICByaWdodExpbmVOdW1iZXI/OiBudW1iZXI7XHJcbiAgICBudW1EaWZmczogbnVtYmVyO1xyXG4gIH1bXTtcclxufVxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvbmd4LXRleHQtZGlmZi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRGlmZlRhYmxlRm9ybWF0ID0gJ1NpZGVCeVNpZGUnIHwgJ0xpbmVCeUxpbmUnO1xyXG5leHBvcnQgdHlwZSBTaWRlRGlmZiA9ICdib3RoJyB8ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZUYWJsZUZvcm1hdE9wdGlvbiB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogRGlmZlRhYmxlRm9ybWF0O1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb250ZW50IHtcclxuICBsZWZ0Q29udGVudDogc3RyaW5nO1xyXG4gIHJpZ2h0Q29udGVudDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZQYXJ0IHtcclxuICBjb250ZW50OiBzdHJpbmc7XHJcbiAgaXNEaWZmOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZMaW5lUmVzdWx0IHtcclxuICBsaW5lTnVtYmVyOiBudW1iZXI7XHJcbiAgcHJlZml4OiBzdHJpbmc7XHJcbiAgbGluZUNvbnRlbnQ6IHN0cmluZztcclxuICBsaW5lRGlmZnM6IERpZmZQYXJ0W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlRhYmxlUm93UmVzdWx0IHtcclxuICBsZWZ0Q29udGVudDogRGlmZkxpbmVSZXN1bHQ7XHJcbiAgcmlnaHRDb250ZW50OiBEaWZmTGluZVJlc3VsdDtcclxuICBiZWxvbmdUbzogU2lkZURpZmY7XHJcbiAgaGFzRGlmZnM6IGJvb2xlYW47XHJcbiAgbnVtRGlmZnM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmUmVzdWx0cyB7XHJcbiAgaGFzRGlmZjogYm9vbGVhbjtcclxuICBkaWZmc0NvdW50OiBudW1iZXI7XHJcbiAgcm93c1dpdGhEaWZmOiB7XHJcbiAgICBsZWZ0TGluZU51bWJlcj86IG51bWJlcjtcclxuICAgIHJpZ2h0TGluZU51bWJlcj86IG51bWJlcjtcclxuICAgIG51bURpZmZzOiBudW1iZXI7XHJcbiAgfVtdO1xyXG59XHJcbiJdfQ==

@@ -1,5 +0,2 @@

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate } from "tslib";
import { NgModule } from '@angular/core';

@@ -11,11 +8,14 @@ import { NgxTextDiffComponent } from './ngx-text-diff.component';

import { FormatLinePipe } from './format-line.pipe';
export class NgxTextDiffModule {
}
NgxTextDiffModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FormsModule],
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe],
exports: [NgxTextDiffComponent]
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBT3BELE1BQU0sT0FBTyxpQkFBaUI7OztZQUw3QixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztnQkFDcEMsWUFBWSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxDQUFDO2dCQUM1RSxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzthQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neFRleHREaWZmQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMb2FkZXJTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkZXItc3Bpbm5lci9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtYXRMaW5lUGlwZSB9IGZyb20gJy4vZm9ybWF0LWxpbmUucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICBkZWNsYXJhdGlvbnM6IFtOZ3hUZXh0RGlmZkNvbXBvbmVudCwgTG9hZGVyU3Bpbm5lckNvbXBvbmVudCwgRm9ybWF0TGluZVBpcGVdLFxyXG4gIGV4cG9ydHM6IFtOZ3hUZXh0RGlmZkNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFRleHREaWZmTW9kdWxlIHt9XHJcbiJdfQ==
import { ContainerDirective } from './ngx-text-diff-container.directive';
import { ScrollingModule } from '@angular/cdk/scrolling';
let NgxTextDiffModule = class NgxTextDiffModule {
};
NgxTextDiffModule = __decorate([
NgModule({
imports: [CommonModule, FormsModule, ScrollingModule],
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe, ContainerDirective],
exports: [NgxTextDiffComponent],
})
], NgxTextDiffModule);
export { NgxTextDiffModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU96RCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtDQUFHLENBQUE7QUFBcEIsaUJBQWlCO0lBTDdCLFFBQVEsQ0FBQztRQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDO1FBQ3JELFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQztRQUNoRyxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztLQUNoQyxDQUFDO0dBQ1csaUJBQWlCLENBQUc7U0FBcEIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmd4VGV4dERpZmZDb21wb25lbnQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IExvYWRlclNwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2xvYWRlci1zcGlubmVyL2xvYWRlci1zcGlubmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1hdExpbmVQaXBlIH0gZnJvbSAnLi9mb3JtYXQtbGluZS5waXBlJztcclxuaW1wb3J0IHsgQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNjcm9sbGluZ01vZHVsZV0sXHJcbiAgZGVjbGFyYXRpb25zOiBbTmd4VGV4dERpZmZDb21wb25lbnQsIExvYWRlclNwaW5uZXJDb21wb25lbnQsIEZvcm1hdExpbmVQaXBlLCBDb250YWluZXJEaXJlY3RpdmVdLFxyXG4gIGV4cG9ydHM6IFtOZ3hUZXh0RGlmZkNvbXBvbmVudF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZk1vZHVsZSB7fVxyXG4iXX0=

@@ -1,5 +0,2 @@

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate, __metadata } from "tslib";
import { Injectable } from '@angular/core';

@@ -9,32 +6,17 @@ import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from 'diff-match-patch';

import * as i0 from "@angular/core";
export class NgxTextDiffService {
let NgxTextDiffService = class NgxTextDiffService {
constructor() {
this.initParser();
}
/**
* @private
* @return {?}
*/
initParser() {
this.diffParser = new diff_match_patch();
}
/**
* @param {?} left
* @param {?} right
* @return {?}
*/
getDiffsByLines(left, right) {
return new Promise((resolve, reject) => {
/** @type {?} */
const a = this.diffParser.diff_linesToChars_(left, right);
/** @type {?} */
const lineText1 = a.chars1;
/** @type {?} */
const lineText2 = a.chars2;
/** @type {?} */
const linesArray = a.lineArray;
/** @type {?} */
const diffs = this.diffParser.diff_main(lineText1, lineText2, true);
this.diffParser.diff_charsToLines_(diffs, linesArray);
/** @type {?} */
const rows = this.formatOutput(diffs);

@@ -47,11 +29,4 @@ if (!rows) {

}
/**
* @private
* @param {?} diffs
* @return {?}
*/
formatOutput(diffs) {
/** @type {?} */
let lineLeft = 1;
/** @type {?} */
let lineRight = 1;

@@ -62,15 +37,8 @@ return diffs.reduce((rows, diff) => {

}
/** @type {?} */
const diffType = diff[0];
/** @type {?} */
const diffValue = diff[1];
/** @type {?} */
let leftDiffRow = null;
/** @type {?} */
let rightDiffRow = null;
/** @type {?} */
let leftContent = null;
/** @type {?} */
let rightContent = null;
/** @type {?} */
let rowTemp = null;

@@ -188,9 +156,3 @@ switch (diffType) {

}
/**
* @private
* @param {?} result
* @return {?}
*/
countDiffs(result) {
/** @type {?} */
let diffCount = 0;

@@ -205,18 +167,7 @@ if (result.leftContent) {

}
/**
* @private
* @param {?} value
* @param {?} compareValue
* @return {?}
*/
getDiffParts(value, compareValue) {
/** @type {?} */
const diffParts = [];
/** @type {?} */
let i = 0;
/** @type {?} */
let j = 0;
/** @type {?} */
let shared = '';
/** @type {?} */
let diff = '';

@@ -249,15 +200,11 @@ while (i < value.length) {

}
}
NgxTextDiffService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
NgxTextDiffService.ctorParameters = () => [];
/** @nocollapse */ NgxTextDiffService.ngInjectableDef = i0.defineInjectable({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" });
if (false) {
/** @type {?} */
NgxTextDiffService.prototype.diffParser;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUt2RCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFFRCxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBdUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7O2tCQUNyRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDOztrQkFDbkQsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTOztrQkFDeEIsS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztrQkFDaEQsSUFBSSxHQUF5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUss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QUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO29CQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2lCQUNYO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO29CQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDbkQsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDYjtnQkFDRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDakQ7YUFBTSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs7WUF0TkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7Ozs7O0lBRUMsd0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmLCBESUZGX0RFTEVURSwgRElGRl9FUVVBTCwgRElGRl9JTlNFUlQsIGRpZmZfbWF0Y2hfcGF0Y2ggfSBmcm9tICdkaWZmLW1hdGNoLXBhdGNoJztcclxuaW1wb3J0IHsgRGlmZkxpbmVSZXN1bHQsIERpZmZQYXJ0LCBEaWZmVGFibGVSb3dSZXN1bHQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi51dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZlNlcnZpY2Uge1xyXG4gIGRpZmZQYXJzZXI6IGRpZmZfbWF0Y2hfcGF0Y2g7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0UGFyc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYXJzZXIoKSB7XHJcbiAgICB0aGlzLmRpZmZQYXJzZXIgPSBuZXcgZGlmZl9tYXRjaF9wYXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlmZnNCeUxpbmVzKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxEaWZmVGFibGVSb3dSZXN1bHRbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBhID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbGluZXNUb0NoYXJzXyhsZWZ0LCByaWdodCk7XHJcbiAgICAgIGNvbnN0IGxpbmVUZXh0MSA9IGEuY2hhcnMxO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDIgPSBhLmNoYXJzMjtcclxuICAgICAgY29uc3QgbGluZXNBcnJheSA9IGEubGluZUFycmF5O1xyXG4gICAgICBjb25zdCBkaWZmczogRGlmZltdID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbWFpbihsaW5lVGV4dDEsIGxpbmVUZXh0MiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGlmZlBhcnNlci5kaWZmX2NoYXJzVG9MaW5lc18oZGlmZnMsIGxpbmVzQXJyYXkpO1xyXG4gICAgICBjb25zdCByb3dzOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IHRoaXMuZm9ybWF0T3V0cHV0KGRpZmZzKTtcclxuICAgICAgaWYgKCFyb3dzKSB7XHJcbiAgICAgICAgcmVqZWN0KCdFcnJvcicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXNvbHZlKHJvd3MpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE91dHB1dChkaWZmczogRGlmZltdKTogRGlmZlRhYmxlUm93UmVzdWx0W10ge1xyXG4gICAgbGV0IGxpbmVMZWZ0ID0gMTtcclxuICAgIGxldCBsaW5lUmlnaHQgPSAxO1xyXG4gICAgcmV0dXJuIGRpZmZzLnJlZHVjZSgocm93czogRGlmZlRhYmxlUm93UmVzdWx0W10sIGRpZmY6IERpZmYpID0+IHtcclxuICAgICAgaWYgKCFyb3dzKSB7XHJcbiAgICAgICAgcm93cyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRpZmZUeXBlOiBudW1iZXIgPSBkaWZmWzBdO1xyXG4gICAgICBjb25zdCBkaWZmVmFsdWU6IHN0cmluZyA9IGRpZmZbMV07XHJcbiAgICAgIGxldCBsZWZ0RGlmZlJvdzogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJpZ2h0RGlmZlJvdzogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IGxlZnRDb250ZW50OiBEaWZmTGluZVJlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByaWdodENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJvd1RlbXA6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIHN3aXRjaCAoZGlmZlR5cGUpIHtcclxuICAgICAgICBjYXNlIERJRkZfRVFVQUw6IC8vIDBcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVMZWZ0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcmlnaHRDb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZVJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcm93VGVtcCA9IHtcclxuICAgICAgICAgICAgICAgIGxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgYmVsb25nVG86ICdib3RoJyxcclxuICAgICAgICAgICAgICAgIGhhc0RpZmZzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG51bURpZmZzOiAwLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcm93cy5wdXNoKHJvd1RlbXApO1xyXG4gICAgICAgICAgICAgIGxpbmVSaWdodCA9IGxpbmVSaWdodCArIDE7XHJcbiAgICAgICAgICAgICAgbGluZUxlZnQgPSBsaW5lTGVmdCArIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBESUZGX0RFTEVURTogLy8gLTFcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICByaWdodERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gIXJvdy5sZWZ0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50ICYmIHJvdy5yaWdodENvbnRlbnQubGluZU51bWJlciA9PT0gbGluZUxlZnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggIT09ICcnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVMZWZ0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFt7IGNvbnRlbnQ6IGxpbmUsIGlzRGlmZjogdHJ1ZSB9XSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJy0nXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAocmlnaHREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQgPSBsZWZ0Q29udGVudDtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93Lm51bURpZmZzID0gdGhpcy5jb3VudERpZmZzKHJpZ2h0RGlmZlJvdyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBiZWxvbmdUbzogJ2xlZnQnLFxyXG4gICAgICAgICAgICAgICAgICBudW1EaWZmczogMSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lTGVmdCA9IGxpbmVMZWZ0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERJRkZfSU5TRVJUOiAvLyAxXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gcm93LmxlZnRDb250ZW50ICYmICFyb3cucmlnaHRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5saW5lTnVtYmVyID09PSBsaW5lUmlnaHQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCAhPT0gJydcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcrJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5yaWdodENvbnRlbnQgPSByaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubnVtRGlmZnMgPSB0aGlzLmNvdW50RGlmZnMobGVmdERpZmZSb3cpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgYmVsb25nVG86ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgIG51bURpZmZzOiAxLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxpbmVSaWdodCA9IGxpbmVSaWdodCArIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50RGlmZnMocmVzdWx0OiBEaWZmVGFibGVSb3dSZXN1bHQpOiBudW1iZXIge1xyXG4gICAgbGV0IGRpZmZDb3VudCA9IDA7XHJcbiAgICBpZiAocmVzdWx0LmxlZnRDb250ZW50KSB7XHJcbiAgICAgIGRpZmZDb3VudCArPSByZXN1bHQubGVmdENvbnRlbnQubGluZURpZmZzLmZpbHRlcihkaWZmID0+IGRpZmYuaXNEaWZmKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0LmxlZnRDb250ZW50KSB7XHJcbiAgICAgIGRpZmZDb3VudCArPSByZXN1bHQucmlnaHRDb250ZW50LmxpbmVEaWZmcy5maWx0ZXIoZGlmZiA9PiBkaWZmLmlzRGlmZikubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZDb3VudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGlmZlBhcnRzKHZhbHVlOiBzdHJpbmcsIGNvbXBhcmVWYWx1ZTogc3RyaW5nKTogRGlmZlBhcnRbXSB7XHJcbiAgICBjb25zdCBkaWZmUGFydHM6IERpZmZQYXJ0W10gPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGxldCBzaGFyZWQgPSAnJztcclxuICAgIGxldCBkaWZmID0gJyc7XHJcblxyXG4gICAgd2hpbGUgKGkgPCB2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKHZhbHVlW2ldID09PSBjb21wYXJlVmFsdWVbal0gJiYgaiA8IGNvbXBhcmVWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoZGlmZiAhPT0gJycpIHtcclxuICAgICAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogZGlmZiwgaXNEaWZmOiB0cnVlIH0pO1xyXG4gICAgICAgICAgZGlmZiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFyZWQgKz0gdmFsdWVbaV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHNoYXJlZCAhPT0gJycpIHtcclxuICAgICAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogc2hhcmVkLCBpc0RpZmY6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgc2hhcmVkID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmYgKz0gdmFsdWVbaV07XHJcbiAgICAgIH1cclxuICAgICAgaSsrO1xyXG4gICAgICBqKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpZmYgIT09ICcnKSB7XHJcbiAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogZGlmZiwgaXNEaWZmOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzaGFyZWQgIT09ICcnKSB7XHJcbiAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogc2hhcmVkLCBpc0RpZmY6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkaWZmUGFydHM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
};
NgxTextDiffService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" });
NgxTextDiffService = __decorate([
Injectable({
providedIn: 'root'
}),
__metadata("design:paramtypes", [])
], NgxTextDiffService);
export { NgxTextDiffService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUt2RCxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtJQUc3QjtRQUNFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQXVCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDM0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9CLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdEQsTUFBTSxJQUFJLEdBQXlCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakI7WUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWE7UUFDaEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUEwQixFQUFFLElBQVUsRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNYO1lBQ0QsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLFdBQVcsR0FBdUIsSUFBSSxDQUFDO1lBQzNDLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7WUFDNUMsSUFBSSxXQUFXLEdBQW1CLElBQUksQ0FBQztZQUN2QyxJQUFJLFlBQVksR0FBbUIsSUFBSSxDQUFDO1lBQ3hDLElBQUksT0FBTyxHQUF1QixJQUFJLENBQUM7WUFDdkMsUUFBUSxRQUFRLEVBQUU7Z0JBQ2hCLEtBQUssVUFBVSxFQUFFLElBQUk7b0JBQ25CLFNBQVM7eUJBQ04sS0FBSyxDQUFDLElBQUksQ0FBQzt5QkFDWCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUM5QixJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDeEI7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3lCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDZCxXQUFXLEdBQUc7NEJBQ1osVUFBVSxFQUFFLFFBQVE7NEJBQ3BCLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixTQUFTLEVBQUUsRUFBRTs0QkFDYixNQUFNLEVBQUUsRUFBRTt5QkFDWCxDQUFDO3dCQUNGLFlBQVksR0FBRzs0QkFDYixVQUFVLEVBQUUsU0FBUzs0QkFDckIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLFNBQVMsRUFBRSxFQUFFOzRCQUNiLE1BQU0sRUFBRSxFQUFFO3lCQUNYLENBQUM7d0JBQ0YsT0FBTyxHQUFHOzRCQUNSLFdBQVc7NEJBQ1gsWUFBWTs0QkFDWixRQUFRLEVBQUUsTUFBTTs0QkFDaEIsUUFBUSxFQUFFLEtBQUs7NEJBQ2YsUUFBUSxFQUFFLENBQUM7eUJBQ1osQ0FBQzt3QkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNuQixTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQzt3QkFDMUIsUUFBUSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxDQUFDO29CQUNMLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLEVBQUUsS0FBSztvQkFDckIsU0FBUzt5QkFDTixLQUFLLENBQUMsSUFBSSxDQUFDO3lCQUNYLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQzlCLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM5QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUN4Qjt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDLENBQUM7eUJBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNkLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQzFILENBQUM7d0JBQ0YsV0FBVyxHQUFHOzRCQUNaLFVBQVUsRUFBRSxRQUFROzRCQUNwQixXQUFXLEVBQUUsSUFBSTs0QkFDakIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzs0QkFDNUMsTUFBTSxFQUFFLEdBQUc7eUJBQ1osQ0FBQzt3QkFDRixJQUFJLFlBQVksRUFBRTs0QkFDaEIsWUFBWSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7NEJBQ3ZDLFlBQVksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ3BELFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUNwQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDdEMsQ0FBQzs0QkFDRixZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNyRCxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFDckMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ3JDLENBQUM7NEJBQ0YsWUFBWSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7NEJBQy9CLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDdkQ7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQztnQ0FDUixXQUFXO2dDQUNYLFlBQVksRUFBRSxJQUFJO2dDQUNsQixRQUFRLEVBQUUsSUFBSTtnQ0FDZCxRQUFRLEVBQUUsTUFBTTtnQ0FDaEIsUUFBUSxFQUFFLENBQUM7NkJBQ1osQ0FBQyxDQUFDO3lCQUNKO3dCQUNELFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLENBQUMsQ0FBQztvQkFDTCxNQUFNO2dCQUNSLEtBQUssV0FBVyxFQUFFLElBQUk7b0JBQ3BCLFNBQVM7eUJBQ04sS0FBSyxDQUFDLElBQUksQ0FBQzt5QkFDWCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUM5QixJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDeEI7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3lCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDZCxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUN6SCxDQUFDO3dCQUNGLFlBQVksR0FBRzs0QkFDYixVQUFVLEVBQUUsU0FBUzs0QkFDckIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQzVDLE1BQU0sRUFBRSxHQUFHO3lCQUNaLENBQUM7d0JBQ0YsSUFBSSxXQUFXLEVBQUU7NEJBQ2YsV0FBVyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7NEJBQ3hDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ25ELFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUNuQyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDckMsQ0FBQzs0QkFDRixXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNwRCxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFDcEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ3BDLENBQUM7NEJBQ0YsV0FBVyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7NEJBQzlCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzt5QkFDckQ7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQztnQ0FDUixXQUFXLEVBQUUsSUFBSTtnQ0FDakIsWUFBWTtnQ0FDWixRQUFRLEVBQUUsSUFBSTtnQ0FDZCxRQUFRLEVBQUUsT0FBTztnQ0FDakIsUUFBUSxFQUFFLENBQUM7NkJBQ1osQ0FBQyxDQUFDO3lCQUNKO3dCQUNELFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO29CQUM1QixDQUFDLENBQUMsQ0FBQztvQkFDTCxNQUFNO2FBQ1Q7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxVQUFVLENBQUMsTUFBMEI7UUFDM0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0QixTQUFTLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM5RTtRQUNELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0QixTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMvRTtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLFlBQW9CO1FBQ3RELE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWQsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNELElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtvQkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztpQkFDWDtnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNMLElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRTtvQkFDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ25ELE1BQU0sR0FBRyxFQUFFLENBQUM7aUJBQ2I7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQjtZQUNELENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7U0FDTDtRQUVELElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO2FBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGLENBQUE7O0FBcE5ZLGtCQUFrQjtJQUg5QixVQUFVLENBQUM7UUFDVixVQUFVLEVBQUUsTUFBTTtLQUNuQixDQUFDOztHQUNXLGtCQUFrQixDQW9OOUI7U0FwTlksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmLCBESUZGX0RFTEVURSwgRElGRl9FUVVBTCwgRElGRl9JTlNFUlQsIGRpZmZfbWF0Y2hfcGF0Y2ggfSBmcm9tICdkaWZmLW1hdGNoLXBhdGNoJztcclxuaW1wb3J0IHsgRGlmZkxpbmVSZXN1bHQsIERpZmZQYXJ0LCBEaWZmVGFibGVSb3dSZXN1bHQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi51dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZlNlcnZpY2Uge1xyXG4gIGRpZmZQYXJzZXI6IGRpZmZfbWF0Y2hfcGF0Y2g7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0UGFyc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYXJzZXIoKSB7XHJcbiAgICB0aGlzLmRpZmZQYXJzZXIgPSBuZXcgZGlmZl9tYXRjaF9wYXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlmZnNCeUxpbmVzKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxEaWZmVGFibGVSb3dSZXN1bHRbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBhID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbGluZXNUb0NoYXJzXyhsZWZ0LCByaWdodCk7XHJcbiAgICAgIGNvbnN0IGxpbmVUZXh0MSA9IGEuY2hhcnMxO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDIgPSBhLmNoYXJzMjtcclxuICAgICAgY29uc3QgbGluZXNBcnJheSA9IGEubGluZUFycmF5O1xyXG4gICAgICBjb25zdCBkaWZmczogRGlmZltdID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbWFpbihsaW5lVGV4dDEsIGxpbmVUZXh0MiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGlmZlBhcnNlci5kaWZmX2NoYXJzVG9MaW5lc18oZGlmZnMsIGxpbmVzQXJyYXkpO1xyXG4gICAgICBjb25zdCByb3dzOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IHRoaXMuZm9ybWF0T3V0cHV0KGRpZmZzKTtcclxuICAgICAgaWYgKCFyb3dzKSB