verben-ng-ui 1.3.2 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -53,7 +53,7 @@ export class DataColumnsComponent {
53
53
  const temp = this.visibleColumns[fromIndex];
54
54
  this.visibleColumns[fromIndex] = this.visibleColumns[toIndex];
55
55
  this.visibleColumns[toIndex] = temp;
56
- this.emitUpdatedColumns();
56
+ // Staged only — applied/emitted when the user clicks Save (see template).
57
57
  }
58
58
  // Column Selection functionality
59
59
  toggleSelectAll() {
@@ -62,13 +62,13 @@ export class DataColumnsComponent {
62
62
  this.visibleColumns.forEach((column) => {
63
63
  this.columnVisibility.set(column.id, newValue);
64
64
  });
65
- this.emitUpdatedColumns();
65
+ // Staged only — applied/emitted when the user clicks Save (see template).
66
66
  }
67
67
  toggleColumnVisibility(columnId) {
68
68
  const currentValue = this.columnVisibility.get(columnId);
69
69
  this.columnVisibility.set(columnId, !currentValue);
70
70
  this.updateSelectAllStatus();
71
- this.emitUpdatedColumns();
71
+ // Staged only — applied/emitted when the user clicks Save (see template).
72
72
  }
73
73
  isColumnVisible(columnId) {
74
74
  return this.columnVisibility.get(columnId) ?? false;
@@ -108,4 +108,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
108
108
  }], columnsUpdated: [{
109
109
  type: Output
110
110
  }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb2x1bW5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1jb2x1bW5zL2RhdGEtY29sdW1ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtY29sdW1ucy9kYXRhLWNvbHVtbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVUvRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLE9BQU8sQ0FBeUI7SUFDaEMsaUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQ2xDLGVBQWUsR0FBVyxDQUFDLENBQUM7SUFDM0IsY0FBYyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO0lBRXJFLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBQzNDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixnQkFBZ0IsR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVuRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMs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Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbHVtbkRlZmluaXRpb24gfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS1jb2x1bW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtY29sdW1ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWNvbHVtbnMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFDb2x1bW5zQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD5bXTtcbiAgQElucHV0KCkgZW5hYmxlRHJhZ0FuZERyb3A6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtYXhWaXNpYmxlSXRlbXM6IG51bWJlciA9IDU7XG4gIEBPdXRwdXQoKSBjb2x1bW5zVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uRGVmaW5pdGlvbjxUPltdPigpO1xuXG4gIHZpc2libGVDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10gPSBbXTtcbiAgc2hvd0FsbENvbHVtbnMgPSBmYWxzZTtcbiAgZHJhZ2dlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbHVtblZpc2liaWxpdHk6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xuICAgIC8vIEluaXRpYWxpemUgdmlzaWJpbGl0eSBtYXAgd2l0aCBjdXJyZW50IGNvbHVtbiBzdGF0ZXNcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5LnNldChjb2x1bW4uaWQsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdHVzKCk7XG4gIH1cblxuICBnZXQgY29sdW1uc1RvU2hvdygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsQ29sdW1uc1xuICAgICAgPyB0aGlzLnZpc2libGVDb2x1bW5zXG4gICAgICA6IHRoaXMudmlzaWJsZUNvbHVtbnMuc2xpY2UoMCwgdGhpcy5tYXhWaXNpYmxlSXRlbXMpO1xuICB9XG5cbiAgLy8gRHJhZyBhbmQgRHJvcCBmdW5jdGlvbmFsaXR5XG4gIG9uRHJhZ1N0YXJ0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlRHJhZ0FuZERyb3ApIHJldHVybjtcbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4O1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YSgndGV4dC9wbGFpbicsIFN0cmluZyhpbmRleCkpO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uRHJvcChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggIT09IG51bGwgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aGlzLnN3YXBDb2x1bW5zKHRoaXMuZHJhZ2dlZEluZGV4LCBpbmRleCk7XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcENvbHVtbnMoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHRlbXAgPSB0aGlzLnZpc2libGVDb2x1bW5zW2Zyb21JbmRleF07XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uc1tmcm9tSW5kZXhdID0gdGhpcy52aXNpYmxlQ29sdW1uc1t0b0luZGV4XTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zW3RvSW5kZXhdID0gdGVtcDtcbiAgICB0aGlzLmVtaXRVcGRhdGVkQ29sdW1ucygpO1xuICB9XG5cbiAgLy8gQ29sdW1uIFNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5XG4gIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNlbGVjdEFsbCA9ICF0aGlzLnNlbGVjdEFsbDtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuc2VsZWN0QWxsO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtblZpc2liaWxpdHkuc2V0KGNvbHVtbi5pZCwgbmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuZW1pdFVwZGF0ZWRDb2x1bW5zKCk7XG4gIH1cblxuICB0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmNvbHVtblZpc2liaWxpdHkuZ2V0KGNvbHVtbklkKTtcbiAgICB0aGlzLmNvbHVtblZpc2liaWxpdHkuc2V0KGNvbHVtbklkLCAhY3VycmVudFZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXR1cygpO1xuICAgIHRoaXMuZW1pdFVwZGF0ZWRDb2x1bW5zKCk7XG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZpc2liaWxpdHkuZ2V0KGNvbHVtbklkKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdHVzKCkge1xuICAgIHRoaXMuc2VsZWN0QWxsID0gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblZpc2liaWxpdHkudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgKHZhbHVlKSA9PiB2YWx1ZVxuICAgICk7XG4gIH1cblxuICBnZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgIDogY29sdW1uLmhlYWRlcjtcbiAgfVxuXG4gIHJlc2V0Q29sdW1ucygpIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5zKCk7XG4gICAgdGhpcy5lbWl0VXBkYXRlZENvbHVtbnMoKTtcbiAgfVxuXG4gIGVtaXRVcGRhdGVkQ29sdW1ucygpIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+XG4gICAgICB0aGlzLmNvbHVtblZpc2liaWxpdHkuZ2V0KGNvbHVtbi5pZClcbiAgICApO1xuICAgIHRoaXMuY29sdW1uc1VwZGF0ZWQuZW1pdCh1cGRhdGVkQ29sdW1ucyk7XG4gIH1cblxuICBnZXQgYWN0aXZlQ29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblZpc2liaWxpdHkudmFsdWVzKCkpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlKVxuICAgICAgLmxlbmd0aDtcbiAgfVxufVxuIiwiPHZlcmJlbi1jYXJkIHdpZHRoPVwiMjRyZW1cIiBib3JkZXJSYWRpdXM9XCIxcmVtXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIiBiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCI+XG4gICAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICA8aDQgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5Db2x1bW4gPHN1cD4oe3sgYWN0aXZlQ29sdW1uQ291bnQgfX0pPC9zdXA+PC9oND5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJyZXNldC1idXR0b25cIiAoY2xpY2spPVwicmVzZXRDb2x1bW5zKClcIj5SZXNldDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgPCEtLSBDb2x1bW4gT3B0aW9ucyAtLT5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvcGVydGllczwvaDM+XG4gICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImluZm9cIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICA8IS0tIFNlbGVjdCBBbGwgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLXdyYXBwZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWxlY3QtYWxsXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnNUb1Nob3c7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1vcHRpb25cIlxuICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRpbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1vcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICBAaWYgKGVuYWJsZURyYWdBbmREcm9wKSB7XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAgIGljb249XCJzcXVhcmUtZG90XCJcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDb2x1bW5WaXNpYmxlKGNvbHVtbi5pZClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2x1bW4uaWQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0Q29sdW1uSGVhZGVyKGNvbHVtbikgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICBcbiAgICAgICAgQGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPiBtYXhWaXNpYmxlSXRlbXMpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dBbGxDb2x1bW5zID0gIXNob3dBbGxDb2x1bW5zXCJcbiAgICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj57eyBzaG93QWxsQ29sdW1ucyA/IFwiU2hvdyBMZXNzXCIgOiBcIlNob3cgTW9yZVwiIH19PC9zcGFuPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiY2hldnJvblwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiOFwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjZcIlxuICAgICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cImVtaXRVcGRhdGVkQ29sdW1ucygpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1jYXJkPiJdfQ==
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb2x1bW5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1jb2x1bW5zL2RhdGEtY29sdW1ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtY29sdW1ucy9kYXRhLWNvbHVtbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVUvRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLE9BQU8sQ0FBeUI7SUFDaEMsaUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQ2xDLGVBQWUsR0FBVyxDQUFDLENBQUM7SUFDM0IsY0FBYyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO0lBRXJFLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBQzNDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixnQkFBZ0IsR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVuRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMs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dCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbHVtbkRlZmluaXRpb24gfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS1jb2x1bW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtY29sdW1ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWNvbHVtbnMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFDb2x1bW5zQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD5bXTtcbiAgQElucHV0KCkgZW5hYmxlRHJhZ0FuZERyb3A6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtYXhWaXNpYmxlSXRlbXM6IG51bWJlciA9IDU7XG4gIEBPdXRwdXQoKSBjb2x1bW5zVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uRGVmaW5pdGlvbjxUPltdPigpO1xuXG4gIHZpc2libGVDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10gPSBbXTtcbiAgc2hvd0FsbENvbHVtbnMgPSBmYWxzZTtcbiAgZHJhZ2dlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbHVtblZpc2liaWxpdHk6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xuICAgIC8vIEluaXRpYWxpemUgdmlzaWJpbGl0eSBtYXAgd2l0aCBjdXJyZW50IGNvbHVtbiBzdGF0ZXNcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5LnNldChjb2x1bW4uaWQsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdHVzKCk7XG4gIH1cblxuICBnZXQgY29sdW1uc1RvU2hvdygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsQ29sdW1uc1xuICAgICAgPyB0aGlzLnZpc2libGVDb2x1bW5zXG4gICAgICA6IHRoaXMudmlzaWJsZUNvbHVtbnMuc2xpY2UoMCwgdGhpcy5tYXhWaXNpYmxlSXRlbXMpO1xuICB9XG5cbiAgLy8gRHJhZyBhbmQgRHJvcCBmdW5jdGlvbmFsaXR5XG4gIG9uRHJhZ1N0YXJ0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlRHJhZ0FuZERyb3ApIHJldHVybjtcbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4O1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YSgndGV4dC9wbGFpbicsIFN0cmluZyhpbmRleCkpO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uRHJvcChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggIT09IG51bGwgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aGlzLnN3YXBDb2x1bW5zKHRoaXMuZHJhZ2dlZEluZGV4LCBpbmRleCk7XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcENvbHVtbnMoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHRlbXAgPSB0aGlzLnZpc2libGVDb2x1bW5zW2Zyb21JbmRleF07XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uc1tmcm9tSW5kZXhdID0gdGhpcy52aXNpYmxlQ29sdW1uc1t0b0luZGV4XTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zW3RvSW5kZXhdID0gdGVtcDtcbiAgICAvLyBTdGFnZWQgb25seSDigJQgYXBwbGllZC9lbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFNhdmUgKHNlZSB0ZW1wbGF0ZSkuXG4gIH1cblxuICAvLyBDb2x1bW4gU2VsZWN0aW9uIGZ1bmN0aW9uYWxpdHlcbiAgdG9nZ2xlU2VsZWN0QWxsKCkge1xuICAgIHRoaXMuc2VsZWN0QWxsID0gIXRoaXMuc2VsZWN0QWxsO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5zZWxlY3RBbGw7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIHRoaXMuY29sdW1uVmlzaWJpbGl0eS5zZXQoY29sdW1uLmlkLCBuZXdWYWx1ZSk7XG4gICAgfSk7XG4gICAgLy8gU3RhZ2VkIG9ubHkg4oCUIGFwcGxpZWQvZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBTYXZlIChzZWUgdGVtcGxhdGUpLlxuICB9XG5cbiAgdG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5jb2x1bW5WaXNpYmlsaXR5LmdldChjb2x1bW5JZCk7XG4gICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5LnNldChjb2x1bW5JZCwgIWN1cnJlbnRWYWx1ZSk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0dXMoKTtcbiAgICAvLyBTdGFnZWQgb25seSDigJQgYXBwbGllZC9lbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFNhdmUgKHNlZSB0ZW1wbGF0ZSkuXG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZpc2liaWxpdHkuZ2V0KGNvbHVtbklkKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdHVzKCkge1xuICAgIHRoaXMuc2VsZWN0QWxsID0gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblZpc2liaWxpdHkudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgKHZhbHVlKSA9PiB2YWx1ZVxuICAgICk7XG4gIH1cblxuICBnZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgIDogY29sdW1uLmhlYWRlcjtcbiAgfVxuXG4gIHJlc2V0Q29sdW1ucygpIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5zKCk7XG4gICAgdGhpcy5lbWl0VXBkYXRlZENvbHVtbnMoKTtcbiAgfVxuXG4gIGVtaXRVcGRhdGVkQ29sdW1ucygpIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+XG4gICAgICB0aGlzLmNvbHVtblZpc2liaWxpdHkuZ2V0KGNvbHVtbi5pZClcbiAgICApO1xuICAgIHRoaXMuY29sdW1uc1VwZGF0ZWQuZW1pdCh1cGRhdGVkQ29sdW1ucyk7XG4gIH1cblxuICBnZXQgYWN0aXZlQ29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblZpc2liaWxpdHkudmFsdWVzKCkpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlKVxuICAgICAgLmxlbmd0aDtcbiAgfVxufVxuIiwiPHZlcmJlbi1jYXJkIHdpZHRoPVwiMjRyZW1cIiBib3JkZXJSYWRpdXM9XCIxcmVtXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIiBiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCI+XG4gICAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICA8aDQgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5Db2x1bW4gPHN1cD4oe3sgYWN0aXZlQ29sdW1uQ291bnQgfX0pPC9zdXA+PC9oND5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJyZXNldC1idXR0b25cIiAoY2xpY2spPVwicmVzZXRDb2x1bW5zKClcIj5SZXNldDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgPCEtLSBDb2x1bW4gT3B0aW9ucyAtLT5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvcGVydGllczwvaDM+XG4gICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImluZm9cIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICA8IS0tIFNlbGVjdCBBbGwgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLXdyYXBwZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWxlY3QtYWxsXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnNUb1Nob3c7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1vcHRpb25cIlxuICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRpbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1vcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICBAaWYgKGVuYWJsZURyYWdBbmREcm9wKSB7XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAgIGljb249XCJzcXVhcmUtZG90XCJcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDb2x1bW5WaXNpYmxlKGNvbHVtbi5pZClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2x1bW4uaWQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0Q29sdW1uSGVhZGVyKGNvbHVtbikgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICBcbiAgICAgICAgQGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPiBtYXhWaXNpYmxlSXRlbXMpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dBbGxDb2x1bW5zID0gIXNob3dBbGxDb2x1bW5zXCJcbiAgICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj57eyBzaG93QWxsQ29sdW1ucyA/IFwiU2hvdyBMZXNzXCIgOiBcIlNob3cgTW9yZVwiIH19PC9zcGFuPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiY2hldnJvblwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiOFwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjZcIlxuICAgICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cImVtaXRVcGRhdGVkQ29sdW1ucygpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1jYXJkPiJdfQ==
@@ -55,6 +55,9 @@ export class DataImportComponent {
55
55
  invalidIndexSet = new Map();
56
56
  headers;
57
57
  _ext = 'xlsx';
58
+ static nextFileInputId = 0;
59
+ /** Unique per instance so several import cards can coexist on one page. */
60
+ fileInputId = `vbn-data-import-file-${DataImportComponent.nextFileInputId++}`;
58
61
  files = [];
59
62
  isDragging = false;
60
63
  showPreview = false;
@@ -174,10 +177,10 @@ export class DataImportComponent {
174
177
  // this.exportTemplateEvent.emit(this.headers());
175
178
  }
176
179
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportComponent, deps: [{ token: i1.DataImportService }], target: i0.ɵɵFactoryTarget.Component });
177
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataImportComponent, selector: "lib-data-import", inputs: { previewColumns: { classPropertyName: "previewColumns", publicName: "previewColumns", isSignal: true, isRequired: true, transformFunction: null }, formGroupConfig: { classPropertyName: "formGroupConfig", publicName: "formGroupConfig", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, columnTemplates: { classPropertyName: "columnTemplates", publicName: "columnTemplates", isSignal: true, isRequired: false, transformFunction: null }, parser: { classPropertyName: "parser", publicName: "parser", isSignal: true, isRequired: false, transformFunction: null }, previewData: { classPropertyName: "previewData", publicName: "previewData", isSignal: true, isRequired: false, transformFunction: null }, onImportComplete: { classPropertyName: "onImportComplete", publicName: "onImportComplete", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportTemplateEvent: "exportTemplateEvent", importEvent: "importEvent", importEventData: "importEventData", rowSave: "rowSave" }, providers: [DataImportService], ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\" [style.color]=\"'var(--vbn-color-border-focus)'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed var(--vbn-color-border);padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:var(--vbn-color-surface-alt)}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:var(--vbn-color-on-primary);color:var(--vbn-color-surface)}.export-button{background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary)}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i5.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataImportComponent, selector: "lib-data-import", inputs: { previewColumns: { classPropertyName: "previewColumns", publicName: "previewColumns", isSignal: true, isRequired: true, transformFunction: null }, formGroupConfig: { classPropertyName: "formGroupConfig", publicName: "formGroupConfig", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, columnTemplates: { classPropertyName: "columnTemplates", publicName: "columnTemplates", isSignal: true, isRequired: false, transformFunction: null }, parser: { classPropertyName: "parser", publicName: "parser", isSignal: true, isRequired: false, transformFunction: null }, previewData: { classPropertyName: "previewData", publicName: "previewData", isSignal: true, isRequired: false, transformFunction: null }, onImportComplete: { classPropertyName: "onImportComplete", publicName: "onImportComplete", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportTemplateEvent: "exportTemplateEvent", importEvent: "importEvent", importEventData: "importEventData", rowSave: "rowSave" }, providers: [DataImportService], ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label [attr.for]=\"fileInputId\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label\n [attr.for]=\"fileInputId\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n [attr.id]=\"fileInputId\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed var(--vbn-color-border);padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:var(--vbn-color-surface-alt)}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:var(--vbn-color-on-primary);color:var(--vbn-color-surface)}.export-button{background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary)}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i5.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
178
181
  }
179
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportComponent, decorators: [{
180
183
  type: Component,
181
- args: [{ selector: 'lib-data-import', providers: [DataImportService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\" [style.color]=\"'var(--vbn-color-border-focus)'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed var(--vbn-color-border);padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:var(--vbn-color-surface-alt)}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:var(--vbn-color-on-primary);color:var(--vbn-color-surface)}.export-button{background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary)}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"] }]
184
+ args: [{ selector: 'lib-data-import', providers: [DataImportService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label [attr.for]=\"fileInputId\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label\n [attr.for]=\"fileInputId\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n [attr.id]=\"fileInputId\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed var(--vbn-color-border);padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:var(--vbn-color-surface-alt)}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:var(--vbn-color-on-primary);color:var(--vbn-color-surface)}.export-button{background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary)}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"] }]
182
185
  }], ctorParameters: () => [{ type: i1.DataImportService }] });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFNBQVMsRUFFVixNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBUzFELE1BQU0sT0FBTyxtQkFBbUI7SUE0RFg7SUEzRG5CLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ3pELGVBQWUsR0FBRyxLQUFLLEVBSXBCLENBQUM7SUFDSjs7T0FFRztJQUNILE1BQU0sR0FBRyxLQUFLLEVBQVksQ0FBQztJQUMzQixLQUFLLEdBQUcsS0FBSyxDQUFTLGlCQUFpQixDQUFDLENBQUM7SUFDekMsZUFBZSxHQUFHLEtBQUssQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDeEQsTUFBTSxHQUFHLEtBQUssRUFBK0IsQ0FBQztJQUM5Qzs7T0FFRztJQUNILFdBQVcsR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUMzQjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLEVBQTRDLENBQUM7SUFDckU7O09BRUc7SUFDSCxtQkFBbUIsR0FBRyxNQUFNLEVBQVksQ0FBQztJQUN6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YixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRSxpREFBaUQ7SUFDbkQsQ0FBQzt3R0F6TVUsbUJBQW1COzRGQUFuQixtQkFBbUIsa3hDQUhuQixDQUFDLGlCQUFpQixDQUFDLDBCQzNCaEMsNGhMQWdNQTs7NEZEbEthLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxpQkFBaUIsYUFHaEIsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFDYix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgU2lnbmFsLFxuICBzaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtR3JvdXBcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgQ29sdW1uRGlyZWN0aXZlLFxuICBGb3JtR3JvdXBDb25maWcsXG59IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyBEYXRhSW1wb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS1pbXBvcnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWltcG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWltcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWltcG9ydC5jb21wb25lbnQuY3NzJyxcbiAgcHJvdmlkZXJzOiBbRGF0YUltcG9ydFNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUltcG9ydENvbXBvbmVudDxUIGV4dGVuZHMge30+IHtcbiAgcHJldmlld0NvbHVtbnMgPSBpbnB1dC5yZXF1aXJlZDxDb2x1bW5EZWZpbml0aW9uPFQ+W10+KCk7XG4gIGZvcm1Hcm91cENvbmZpZyA9IGlucHV0PFxuICAgIEZvcm1Hcm91cENvbmZpZzx7XG4gICAgICBbSyBpbiBrZXlvZiBUXTogQWJzdHJhY3RDb250cm9sO1xuICAgIH0+XG4gID4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBpbXBvcnRLZXkgb2YgcHJldmlld0NvbHVtbnMgaW5zdGVhZFxuICAgKi9cbiAgZmllbGRzID0gaW5wdXQ8c3RyaW5nW10+KCk7XG4gIHRpdGxlID0gaW5wdXQ8c3RyaW5nPignZXhwb3J0LXRlbXBsYXRlJyk7XG4gIGNvbHVtblRlbXBsYXRlcyA9IGlucHV0PHJlYWRvbmx5IENvbHVtbkRpcmVjdGl2ZVtdPihbXSk7XG4gIHBhcnNlciA9IGlucHV0PChkYXRhOiBhbnkpID0+IFBhcnRpYWw8VD5bXT4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSByZW1vdmUsIG5vdyBoYW5kbGVkIGludGVybmFsbHlcbiAgICovXG4gIHByZXZpZXdEYXRhID0gaW5wdXQ8VFtdPigpO1xuICAvKipcbiAgICogUGFzcyB0aGUgbWV0aG9kIHRvIHVzZSB0aGUgaW1wb3J0ZWQgZGF0YSxcbiAgICogYW5kIGV2ZW50dWFsbHkgcmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWxseSB1c2VkXG4gICAqL1xuICBvbkltcG9ydENvbXBsZXRlID0gaW5wdXQ8KGRhdGE6IFBhcnRpYWw8VD5bXSkgPT4gUHJvbWlzZTxib29sZWFuPj4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSByZW1vdmUsIG5vdyBoYW5kbGVkIGludGVybmFsbHlcbiAgICovXG4gIGV4cG9ydFRlbXBsYXRlRXZlbnQgPSBvdXRwdXQ8c3RyaW5nW10+KCk7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgcmVtb3ZlLCBub3cgaGFuZGxlZCBpbnRlcm5hbGx5XG4gICAqL1xuICBpbXBvcnRFdmVudCA9IG91dHB1dDxGaWxlPigpO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBvbkltcG9ydENvbXBsZXRlIGlucHV0IGluc3RlYWRcbiAgICovXG4gIGltcG9ydEV2ZW50RGF0YSA9IG91dHB1dDxQYXJ0aWFsPFQ+W10+KCk7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgcmVtb3ZlLCBub3cgaGFuZGxlZCBpbnRlcm5hbGx5XG4gICAqL1xuICByb3dTYXZlID0gb3V0cHV0PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFBhcnRpYWw8VD47XG4gIH0+KCk7XG5cbiAgLy8gZGF0YTogU2lnbmFsPChUICYgeyBpc0R1cGxpY2F0ZTogYm9vbGVhbiB9KVtdPjtcbiAgcHJldmlld0NvbHVtbnNMaXN0OiBTaWduYWw8Q29sdW1uRGVmaW5pdGlvbjxUPltdPjtcbiAgZm9ybXMgPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xuICB1bmlxdWVJZGVudGlmaWVyczogV3JpdGFibGVTaWduYWw8c3RyaW5nW10+ID0gc2lnbmFsKFtdKTtcbiAgLy8gZHVwbGljYXRlRGF0YU1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgZHVwbGljYXRlSW5kZXhTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgaW52YWxpZEluZGV4U2V0ID0gbmV3IE1hcDxudW1iZXIsIENvbHVtbkRpcmVjdGl2ZVsnY29sdW1uSWQnXVtdPigpO1xuXG4gIGhlYWRlcnM6IFNpZ25hbDxzdHJpbmdbXT47XG5cbiAgcHJpdmF0ZSBfZXh0OiAneGxzeCcgfCAneGxzJyB8ICdjc3YnID0gJ3hsc3gnO1xuXG4gIGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBzaG93UHJldmlldyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBEYXRhSW1wb3J0U2VydmljZTxUPikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBjb25zdCBjb2x1bW5zID0gdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKTtcblxuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSB0aGlzLnVuaXF1ZUlkZW50aWZpZXJzKCk7XG5cbiAgICAgIHRoaXMuc2VydmljZS5pbXBvcnRlZERhdGEoKT8uZm9yRWFjaCgoZCwgaSwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXJ2aWNlLmlzRHVwbGljYXRlKGQsIGFyciwgaWRlbnRpZmllcnMpKSB7XG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVJbmRleFNldC5hZGQoaSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgIC8vICAgLmZpbHRlcigoeyB2YWxpZGF0b3JGbiB9KSA9PiB2YWxpZGF0b3JGbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAvLyAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBPYmplY3QuZW50cmllcyhkKS5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAvLyAgICAgICAoZiwgW2ssIHZdLCBpKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKFxuICAgICAgICAvLyAgICAgICAgICAgY29sdW1uLnZhbGlkYXRvckZuICYmXG4gICAgICAgIC8vICAgICAgICAgICAhY29sdW1uLnZhbGlkYXRvckZuKHYgYXMgVFtrZXlvZiBUXSlcbiAgICAgICAgLy8gICAgICAgICApIHtcbiAgICAgICAgLy8gICAgICAgICAgIGYucHVzaChjb2x1bW4uaWQpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgLy8gICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgW11cbiAgICAgICAgLy8gICAgICk7XG5cbiAgICAgICAgLy8gICAgIGlmIChpbnZhbGlkRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgdGhpcy5pbnZhbGlkSW5kZXhTZXQuc2V0KGksIGludmFsaWRGaWVsZHMpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpZXdDb2x1bW5zKClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSB8fCBjb2wuZm9ybUNvbnRyb2xOYW1lKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gYWNjZXNzb3JLZXk6IGNvbHVtbi5pbXBvcnRLZXksXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgIGhlYWRlcjogJ0FjdGlvbnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5oZWFkZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5maWVsZHMoKSA/P1xuICAgICAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCgpXG4gICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSlcbiAgICAgICAgICAubWFwKChjb2wpID0+IGNvbC5oZWFkZXIudG9TdHJpbmcoKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gIH1cblxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVzID0gQXJyYXkuZnJvbShldmVudC5kYXRhVHJhbnNmZXIhLmZpbGVzKTtcblxuICAgIHRoaXMuc2VydmljZS5oYW5kbGVJbXBvcnQoXG4gICAgICB0aGlzLmZpbGVzWzBdLFxuICAgICAgdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKSxcbiAgICAgIHRoaXMucGFyc2VyKClcbiAgICApO1xuICAgIC8vIHRoaXMuaW1wb3J0RXZlbnQuZW1pdCh0aGlzLmZpbGVzWzBdKTtcbiAgICB0aGlzLnNob3dQcmV2aWV3ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbGVzID0gQXJyYXkuZnJvbShldmVudC50YXJnZXQuZmlsZXMpO1xuICAgIHRoaXMuc2VydmljZS5oYW5kbGVJbXBvcnQoXG4gICAgICB0aGlzLmZpbGVzWzBdLFxuICAgICAgdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKSxcbiAgICAgIHRoaXMucGFyc2VyKClcbiAgICApO1xuXG4gICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XG5cbiAgICAvLyB0aGlzLmltcG9ydEV2ZW50LmVtaXQodGhpcy5maWxlc1swXSk7XG4gICAgdGhpcy5zaG93UHJldmlldyA9IHRydWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmZpbGVzID0gW107XG4gICAgdGhpcy5zaG93UHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMuc2VydmljZS5jbGVhckRhdGEoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ1BSRVZEQVRBJywgdGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpKTtcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gdGhpcy5vbkltcG9ydENvbXBsZXRlKCk7XG4gICAgaWYgKG9uQ29tcGxldGUpIHtcbiAgICAgIG9uQ29tcGxldGUodGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpKS50aGVuKChzdWNjZXNzKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zaG93UHJldmlldyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbXBvcnRFdmVudERhdGEuZW1pdCh0aGlzLnNlcnZpY2UuaW1wb3J0ZWREYXRhKCkgfHwgW10pO1xuICAgICAgdGhpcy5zaG93UHJldmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbnRyb2xOYW1lcygpIHtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuZm9ybUdyb3VwQ29uZmlnKCk/LmNvbnRyb2xzO1xuICAgIGlmIChjb250cm9scykge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbnRyb2xzKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaGFuZGxlVGVtcGxhdGVFeHBvcnQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmhhbmRsZVRlbXBsYXRlRXhwb3J0KHRoaXMuaGVhZGVycygpLCB0aGlzLnRpdGxlKCkpO1xuICAgIC8vIHRoaXMuZXhwb3J0VGVtcGxhdGVFdmVudC5lbWl0KHRoaXMuaGVhZGVycygpKTtcbiAgfVxuXG4gIC8vIGdldEZvcm1Db250cm9sKGluZGV4OiBudW1iZXIsIGZpZWxkOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBjb250cm9sID0gdGhpcy4uZ2V0KGluZGV4KT8uZ2V0KGZpZWxkKSBhcyBGb3JtQ29udHJvbDxhbnk+O1xuICAvLyAgIGNvbnNvbGUubG9nKGNvbnRyb2wpO1xuICAvLyAgIHJldHVybiBjb250cm9sO1xuICAvLyB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpJ1wiXG4gIGJnQ29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itc3VyZmFjZSlcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+SW1wb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZVRlbXBsYXRlRXhwb3J0KClcIj5cbiAgICAgICAgRG93bmxvYWQgVGVtcGxhdGVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGxhYmVsIGZvcj1cImZpbGVJbnB1dFwiIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiPlVwbG9hZCBGaWxlPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcm9wLWFyZWFcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8cD5cbiAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3JcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlsZUlucHV0XCIgW3N0eWxlLmNvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKSdcIlxuICAgICAgICAgICAgPmNsaWNrIHRvIGJyb3dzZTwvbGFiZWxcbiAgICAgICAgICA+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIGlkPVwiZmlsZUlucHV0XCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgYWNjZXB0PVwiLmNzdiwgYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQsIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImZpbGVzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGgzPlVwbG9hZGVkIEZpbGVzOjwvaDM+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXNcIj57eyBmaWxlLm5hbWUgfX08L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWZvb3RlciBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cInNlcnZpY2UuaW1wb3J0ZWREYXRhKCkubGVuZ3RoIDwgMVwiXG4gICAgICBjbGFzcz1cImV4cG9ydC1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgPlxuICAgICAgSW1wb3J0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC92ZXJiZW4tY2FyZD5cblxuPCEtLSBNb2RhbCBDb21wb25lbnQgLS0+XG48dmVyYmVuLWRpYWxvZ3VlXG4gIFtzaG93Q2xvc2VJY29uXT1cInRydWVcIlxuICBbZGlzbWlzc091dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gIFtzaXplXT1cIidsYXJnZSdcIlxuICBbbW9kZV09XCInZGlhbG9ndWUnXCJcbiAgW2N1c3RvbUNsYXNzXT1cIidteS1tb2RhbC1jdXN0b20tY2xhc3MnXCJcbiAgW2Rpc2FibGVGb290ZXJdPVwiZmFsc2VcIlxuICBbbW9kYWxEYXRhXT1cIlt7IGRhdGE6IHt9IH1dXCJcbiAgW2lzVmlzaWJsZV09XCJzaG93UHJldmlld1wiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbiAgZGlhbG9ndWVXaWR0aD1cIjg1JVwiXG4+XG4gIDxhIGRvd25sb2FkPVwiXCI+PC9hPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjwhLS0gRGVmaW5lIHRlbXBsYXRlcyAtLT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxoMj5VcGxvYWQgUHJldmlldzwvaDI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBteS00XCI+XG4gICAgPHAgY2xhc3M9XCJcIj5Ub3RhbCBJdGVtczoge3sgc2VydmljZS5pbXBvcnRlZERhdGEoKS5sZW5ndGggfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkR1cGxpY2F0ZXM6IHt7IGR1cGxpY2F0ZUluZGV4U2V0LnNpemUgfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkludmFsaWQgSXRlbXM6IHt7IGludmFsaWRJbmRleFNldC5zaXplIH19PC9wPlxuXG4gICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRmluZCBkdXBsaWNhdGVzIGJ5XCJcbiAgICAgIFtvcHRpb25zXT1cImhlYWRlcnMoKVwiXG4gICAgICBbbmdNb2RlbF09XCJ1bmlxdWVJZGVudGlmaWVycygpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVuaXF1ZUlkZW50aWZpZXJzLnNldCgkZXZlbnQpXCJcbiAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cIm1heC1oZWlnaHQ6IG1pbig3NXZoLCA3ODBweCk7IG92ZXJmbG93OiBhdXRvXCI+XG4gICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICBbZGF0YV09XCJzZXJ2aWNlLmltcG9ydGVkRGF0YSgpXCJcbiAgICAgIFtjb2x1bW5zXT1cInByZXZpZXdDb2x1bW5zTGlzdCgpXCJcbiAgICAgIFtmb3JtR3JvdXBDb25maWddPVwiZm9ybUdyb3VwQ29uZmlnKClcIlxuICAgICAgW3VzZVZpcnR1YWxTY3JvbGxdPVwidHJ1ZVwiXG4gICAgICAocm93U2F2ZSk9XCJzZXJ2aWNlLmFkZFJvdygkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2NlbGxcbiAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICBsZXQtZGVsZXRlUm93PVwiZGVsZXRlUm93XCJcbiAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCJcbiAgICAgICAgICAgICAgaWNvbj1cImVkaXRcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuXG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICBsZXQtZGVsZXRlUm93PVwiZGVsZXRlUm93XCJcbiAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCJcbiAgICAgICAgICAgICAgaWNvbj1cInRpY2tcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuXG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbGliLWRhdGEtdGFibGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZvb3Rlci1idXR0b25zIGZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBteS00XCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBjYW5jZWwtYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJzaG93UHJldmlldyA9IGZhbHNlXCJcbiAgICA+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwic2F2ZSgpXCI+XG4gICAgICBDb21wbGV0ZVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFNBQVMsRUFFVixNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBUzFELE1BQU0sT0FBTyxtQkFBbUI7SUFnRVg7SUEvRG5CLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ3pELGVBQWUsR0FBRyxLQUFLLEVBSXBCLENBQUM7SUFDSjs7T0FFRztJQUNILE1BQU0sR0FBRyxLQUFLLEVBQVksQ0FBQztJQUMzQixLQUFLLEdBQUcsS0FBSyxDQUFTLGlCQUFpQixDQUFDLENBQUM7SUFDekMsZUFBZSxHQUFHLEtBQUssQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDeEQsTUFBTSxHQUFHLEtBQUssRUFBK0IsQ0FBQztJQUM5Qzs7T0FFRztJQUNILFdBQVcsR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUMzQjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLEVBQTRDLENBQUM7SUFDckU7O09BRUc7SUFDSCxtQkFBbUIsR0FBRyxNQUFNLEVBQVksQ0FBQztJQUN6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QUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLGlEQUFpRDtJQUNuRCxDQUFDO3dHQTdNVSxtQkFBbUI7NEZBQW5CLG1CQUFtQixreENBSG5CLENBQUMsaUJBQWlCLENBQUMsMEJDM0JoQyxpbExBa01BOzs0RkRwS2EsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGlCQUFpQixhQUdoQixDQUFDLGlCQUFpQixDQUFDLG1CQUNiLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Hcm91cFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb2x1bW5EaXJlY3RpdmUsXG4gIEZvcm1Hcm91cENvbmZpZyxcbn0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7IERhdGFJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWltcG9ydC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtaW1wb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtaW1wb3J0LmNvbXBvbmVudC5jc3MnLFxuICBwcm92aWRlcnM6IFtEYXRhSW1wb3J0U2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhSW1wb3J0Q29tcG9uZW50PFQgZXh0ZW5kcyB7fT4ge1xuICBwcmV2aWV3Q29sdW1ucyA9IGlucHV0LnJlcXVpcmVkPENvbHVtbkRlZmluaXRpb248VD5bXT4oKTtcbiAgZm9ybUdyb3VwQ29uZmlnID0gaW5wdXQ8XG4gICAgRm9ybUdyb3VwQ29uZmlnPHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfT5cbiAgPigpO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGltcG9ydEtleSBvZiBwcmV2aWV3Q29sdW1ucyBpbnN0ZWFkXG4gICAqL1xuICBmaWVsZHMgPSBpbnB1dDxzdHJpbmdbXT4oKTtcbiAgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCdleHBvcnQtdGVtcGxhdGUnKTtcbiAgY29sdW1uVGVtcGxhdGVzID0gaW5wdXQ8cmVhZG9ubHkgQ29sdW1uRGlyZWN0aXZlW10+KFtdKTtcbiAgcGFyc2VyID0gaW5wdXQ8KGRhdGE6IGFueSkgPT4gUGFydGlhbDxUPltdPigpO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHJlbW92ZSwgbm93IGhhbmRsZWQgaW50ZXJuYWxseVxuICAgKi9cbiAgcHJldmlld0RhdGEgPSBpbnB1dDxUW10+KCk7XG4gIC8qKlxuICAgKiBQYXNzIHRoZSBtZXRob2QgdG8gdXNlIHRoZSBpbXBvcnRlZCBkYXRhLFxuICAgKiBhbmQgZXZlbnR1YWxseSByZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bGx5IHVzZWRcbiAgICovXG4gIG9uSW1wb3J0Q29tcGxldGUgPSBpbnB1dDwoZGF0YTogUGFydGlhbDxUPltdKSA9PiBQcm9taXNlPGJvb2xlYW4+PigpO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHJlbW92ZSwgbm93IGhhbmRsZWQgaW50ZXJuYWxseVxuICAgKi9cbiAgZXhwb3J0VGVtcGxhdGVFdmVudCA9IG91dHB1dDxzdHJpbmdbXT4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSByZW1vdmUsIG5vdyBoYW5kbGVkIGludGVybmFsbHlcbiAgICovXG4gIGltcG9ydEV2ZW50ID0gb3V0cHV0PEZpbGU+KCk7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIG9uSW1wb3J0Q29tcGxldGUgaW5wdXQgaW5zdGVhZFxuICAgKi9cbiAgaW1wb3J0RXZlbnREYXRhID0gb3V0cHV0PFBhcnRpYWw8VD5bXT4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSByZW1vdmUsIG5vdyBoYW5kbGVkIGludGVybmFsbHlcbiAgICovXG4gIHJvd1NhdmUgPSBvdXRwdXQ8e1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAga2V5OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgZGF0YTogUGFydGlhbDxUPjtcbiAgfT4oKTtcblxuICAvLyBkYXRhOiBTaWduYWw8KFQgJiB7IGlzRHVwbGljYXRlOiBib29sZWFuIH0pW10+O1xuICBwcmV2aWV3Q29sdW1uc0xpc3Q6IFNpZ25hbDxDb2x1bW5EZWZpbml0aW9uPFQ+W10+O1xuICBmb3JtcyA9IG5ldyBGb3JtQXJyYXk8Rm9ybUdyb3VwPihbXSk7XG4gIHVuaXF1ZUlkZW50aWZpZXJzOiBXcml0YWJsZVNpZ25hbDxzdHJpbmdbXT4gPSBzaWduYWwoW10pO1xuICAvLyBkdXBsaWNhdGVEYXRhTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICBkdXBsaWNhdGVJbmRleFNldCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBpbnZhbGlkSW5kZXhTZXQgPSBuZXcgTWFwPG51bWJlciwgQ29sdW1uRGlyZWN0aXZlWydjb2x1bW5JZCddW10+KCk7XG5cbiAgaGVhZGVyczogU2lnbmFsPHN0cmluZ1tdPjtcblxuICBwcml2YXRlIF9leHQ6ICd4bHN4JyB8ICd4bHMnIHwgJ2NzdicgPSAneGxzeCc7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dEZpbGVJbnB1dElkID0gMDtcbiAgLyoqIFVuaXF1ZSBwZXIgaW5zdGFuY2Ugc28gc2V2ZXJhbCBpbXBvcnQgY2FyZHMgY2FuIGNvZXhpc3Qgb24gb25lIHBhZ2UuICovXG4gIHJlYWRvbmx5IGZpbGVJbnB1dElkID0gYHZibi1kYXRhLWltcG9ydC1maWxlLSR7RGF0YUltcG9ydENvbXBvbmVudC5uZXh0RmlsZUlucHV0SWQrK31gO1xuXG4gIGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBzaG93UHJldmlldyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBEYXRhSW1wb3J0U2VydmljZTxUPikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBjb25zdCBjb2x1bW5zID0gdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKTtcblxuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSB0aGlzLnVuaXF1ZUlkZW50aWZpZXJzKCk7XG5cbiAgICAgIHRoaXMuc2VydmljZS5pbXBvcnRlZERhdGEoKT8uZm9yRWFjaCgoZCwgaSwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXJ2aWNlLmlzRHVwbGljYXRlKGQsIGFyciwgaWRlbnRpZmllcnMpKSB7XG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVJbmRleFNldC5hZGQoaSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgIC8vICAgLmZpbHRlcigoeyB2YWxpZGF0b3JGbiB9KSA9PiB2YWxpZGF0b3JGbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAvLyAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBPYmplY3QuZW50cmllcyhkKS5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAvLyAgICAgICAoZiwgW2ssIHZdLCBpKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKFxuICAgICAgICAvLyAgICAgICAgICAgY29sdW1uLnZhbGlkYXRvckZuICYmXG4gICAgICAgIC8vICAgICAgICAgICAhY29sdW1uLnZhbGlkYXRvckZuKHYgYXMgVFtrZXlvZiBUXSlcbiAgICAgICAgLy8gICAgICAgICApIHtcbiAgICAgICAgLy8gICAgICAgICAgIGYucHVzaChjb2x1bW4uaWQpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgLy8gICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgW11cbiAgICAgICAgLy8gICAgICk7XG5cbiAgICAgICAgLy8gICAgIGlmIChpbnZhbGlkRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgdGhpcy5pbnZhbGlkSW5kZXhTZXQuc2V0KGksIGludmFsaWRGaWVsZHMpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpZXdDb2x1bW5zKClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSB8fCBjb2wuZm9ybUNvbnRyb2xOYW1lKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gYWNjZXNzb3JLZXk6IGNvbHVtbi5pbXBvcnRLZXksXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgIGhlYWRlcjogJ0FjdGlvbnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5oZWFkZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5maWVsZHMoKSA/P1xuICAgICAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCgpXG4gICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSlcbiAgICAgICAgICAubWFwKChjb2wpID0+IGNvbC5oZWFkZXIudG9TdHJpbmcoKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gIH1cblxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVzID0gQXJyYXkuZnJvbShldmVudC5kYXRhVHJhbnNmZXIhLmZpbGVzKTtcblxuICAgIHRoaXMuc2VydmljZS5oYW5kbGVJbXBvcnQoXG4gICAgICB0aGlzLmZpbGVzWzBdLFxuICAgICAgdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKSxcbiAgICAgIHRoaXMucGFyc2VyKClcbiAgICApO1xuICAgIC8vIHRoaXMuaW1wb3J0RXZlbnQuZW1pdCh0aGlzLmZpbGVzWzBdKTtcbiAgICB0aGlzLnNob3dQcmV2aWV3ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbGVzID0gQXJyYXkuZnJvbShldmVudC50YXJnZXQuZmlsZXMpO1xuICAgIHRoaXMuc2VydmljZS5oYW5kbGVJbXBvcnQoXG4gICAgICB0aGlzLmZpbGVzWzBdLFxuICAgICAgdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKSxcbiAgICAgIHRoaXMucGFyc2VyKClcbiAgICApO1xuXG4gICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XG5cbiAgICAvLyB0aGlzLmltcG9ydEV2ZW50LmVtaXQodGhpcy5maWxlc1swXSk7XG4gICAgdGhpcy5zaG93UHJldmlldyA9IHRydWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmZpbGVzID0gW107XG4gICAgdGhpcy5zaG93UHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMuc2VydmljZS5jbGVhckRhdGEoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ1BSRVZEQVRBJywgdGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpKTtcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gdGhpcy5vbkltcG9ydENvbXBsZXRlKCk7XG4gICAgaWYgKG9uQ29tcGxldGUpIHtcbiAgICAgIG9uQ29tcGxldGUodGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpKS50aGVuKChzdWNjZXNzKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zaG93UHJldmlldyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbXBvcnRFdmVudERhdGEuZW1pdCh0aGlzLnNlcnZpY2UuaW1wb3J0ZWREYXRhKCkgfHwgW10pO1xuICAgICAgdGhpcy5zaG93UHJldmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbnRyb2xOYW1lcygpIHtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuZm9ybUdyb3VwQ29uZmlnKCk/LmNvbnRyb2xzO1xuICAgIGlmIChjb250cm9scykge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbnRyb2xzKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaGFuZGxlVGVtcGxhdGVFeHBvcnQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmhhbmRsZVRlbXBsYXRlRXhwb3J0KHRoaXMuaGVhZGVycygpLCB0aGlzLnRpdGxlKCkpO1xuICAgIC8vIHRoaXMuZXhwb3J0VGVtcGxhdGVFdmVudC5lbWl0KHRoaXMuaGVhZGVycygpKTtcbiAgfVxuXG4gIC8vIGdldEZvcm1Db250cm9sKGluZGV4OiBudW1iZXIsIGZpZWxkOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBjb250cm9sID0gdGhpcy4uZ2V0KGluZGV4KT8uZ2V0KGZpZWxkKSBhcyBGb3JtQ29udHJvbDxhbnk+O1xuICAvLyAgIGNvbnNvbGUubG9nKGNvbnRyb2wpO1xuICAvLyAgIHJldHVybiBjb250cm9sO1xuICAvLyB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpJ1wiXG4gIGJnQ29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itc3VyZmFjZSlcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+SW1wb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZVRlbXBsYXRlRXhwb3J0KClcIj5cbiAgICAgICAgRG93bmxvYWQgVGVtcGxhdGVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGxhYmVsIFthdHRyLmZvcl09XCJmaWxlSW5wdXRJZFwiIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiPlVwbG9hZCBGaWxlPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcm9wLWFyZWFcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8cD5cbiAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3JcbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFthdHRyLmZvcl09XCJmaWxlSW5wdXRJZFwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICAgICAgICA+Y2xpY2sgdG8gYnJvd3NlPC9sYWJlbFxuICAgICAgICAgID5cbiAgICAgICAgPC9wPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgW2F0dHIuaWRdPVwiZmlsZUlucHV0SWRcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcbiAgICAgICAgICBhY2NlcHQ9XCIuY3N2LCBhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCwgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZmlsZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8aDM+VXBsb2FkZWQgRmlsZXM6PC9oMz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlc1wiPnt7IGZpbGUubmFtZSB9fTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwic2VydmljZS5pbXBvcnRlZERhdGEoKS5sZW5ndGggPCAxXCJcbiAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICA+XG4gICAgICBJbXBvcnRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuXG48IS0tIE1vZGFsIENvbXBvbmVudCAtLT5cbjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcbiAgW3NpemVdPVwiJ2xhcmdlJ1wiXG4gIFttb2RlXT1cIidkaWFsb2d1ZSdcIlxuICBbY3VzdG9tQ2xhc3NdPVwiJ215LW1vZGFsLWN1c3RvbS1jbGFzcydcIlxuICBbZGlzYWJsZUZvb3Rlcl09XCJmYWxzZVwiXG4gIFttb2RhbERhdGFdPVwiW3sgZGF0YToge30gfV1cIlxuICBbaXNWaXNpYmxlXT1cInNob3dQcmV2aWV3XCJcbiAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxuICBkaWFsb2d1ZVdpZHRoPVwiODUlXCJcbj5cbiAgPGEgZG93bmxvYWQ9XCJcIj48L2E+XG48L3ZlcmJlbi1kaWFsb2d1ZT5cblxuPCEtLSBEZWZpbmUgdGVtcGxhdGVzIC0tPlxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgPGgyPlVwbG9hZCBQcmV2aWV3PC9oMj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG15LTRcIj5cbiAgICA8cCBjbGFzcz1cIlwiPlRvdGFsIEl0ZW1zOiB7eyBzZXJ2aWNlLmltcG9ydGVkRGF0YSgpLmxlbmd0aCB9fTwvcD5cblxuICAgIDxwIGNsYXNzPVwiXCI+RHVwbGljYXRlczoge3sgZHVwbGljYXRlSW5kZXhTZXQuc2l6ZSB9fTwvcD5cblxuICAgIDxwIGNsYXNzPVwiXCI+SW52YWxpZCBJdGVtczoge3sgaW52YWxpZEluZGV4U2V0LnNpemUgfX08L3A+XG5cbiAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgW211bHRpc2VsZWN0XT1cInRydWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJGaW5kIGR1cGxpY2F0ZXMgYnlcIlxuICAgICAgW29wdGlvbnNdPVwiaGVhZGVycygpXCJcbiAgICAgIFtuZ01vZGVsXT1cInVuaXF1ZUlkZW50aWZpZXJzKClcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidW5pcXVlSWRlbnRpZmllcnMuc2V0KCRldmVudClcIlxuICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG4gIDwvZGl2PlxuICA8ZGl2IHN0eWxlPVwibWF4LWhlaWdodDogbWluKDc1dmgsIDc4MHB4KTsgb3ZlcmZsb3c6IGF1dG9cIj5cbiAgICA8bGliLWRhdGEtdGFibGVcbiAgICAgIFtkYXRhXT1cInNlcnZpY2UuaW1wb3J0ZWREYXRhKClcIlxuICAgICAgW2NvbHVtbnNdPVwicHJldmlld0NvbHVtbnNMaXN0KClcIlxuICAgICAgW2Zvcm1Hcm91cENvbmZpZ109XCJmb3JtR3JvdXBDb25maWcoKVwiXG4gICAgICBbdXNlVmlydHVhbFNjcm9sbF09XCJ0cnVlXCJcbiAgICAgIChyb3dTYXZlKT1cInNlcnZpY2UuYWRkUm93KCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAjY2VsbFxuICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgIGxldC1kZWxldGVSb3c9XCJkZWxldGVSb3dcIlxuICAgICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNjZWxsRWRpdFxuICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgIGxldC1kZWxldGVSb3c9XCJkZWxldGVSb3dcIlxuICAgICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICBpY29uPVwidGlja1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9saWItZGF0YS10YWJsZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJ1dHRvbnMgZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG15LTRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGNhbmNlbC1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInNob3dQcmV2aWV3ID0gZmFsc2VcIlxuICAgID5cbiAgICAgIENhbmNlbFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJzYXZlKClcIj5cbiAgICAgIENvbXBsZXRlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -4,6 +4,29 @@ import * as i0 from "@angular/core";
4
4
  export class DataImportService {
5
5
  importedData = signal([]);
6
6
  constructor() { }
7
+ /**
8
+ * A value carries no information if it is nullish, an empty/whitespace string,
9
+ * an invalid date, or a collection whose every member is itself blank.
10
+ * Numbers (including 0) and booleans (including false) are never blank.
11
+ */
12
+ isBlankValue(value) {
13
+ if (value === null || value === undefined)
14
+ return true;
15
+ if (typeof value === 'string')
16
+ return value.trim() === '';
17
+ if (value instanceof Date)
18
+ return Number.isNaN(value.getTime());
19
+ if (Array.isArray(value))
20
+ return value.every((v) => this.isBlankValue(v));
21
+ if (typeof value === 'object') {
22
+ return Object.values(value).every((v) => this.isBlankValue(v));
23
+ }
24
+ return false;
25
+ }
26
+ isBlankRow(row) {
27
+ const values = Object.values(row);
28
+ return values.length === 0 || values.every((v) => this.isBlankValue(v));
29
+ }
7
30
  // Function to transform imported data to match your model structure
8
31
  transformImportData(importedData, columnDefinitions) {
9
32
  // Create mappings from header to importKey and importBy
@@ -23,8 +46,12 @@ export class DataImportService {
23
46
  headerToImportByMap.set(header, col.importBy);
24
47
  }
25
48
  });
26
- // Transform each row in the imported data
27
- return importedData.map((row) => {
49
+ // Transform each row in the imported data. Rows the sheet still reports but
50
+ // that hold nothing (whitespace, leftover formatting) are dropped up front so
51
+ // importBy never fabricates values out of them.
52
+ return importedData
53
+ .filter((row) => !this.isBlankRow(row))
54
+ .map((row) => {
28
55
  const transformedRow = {};
29
56
  // Process each key in the row
30
57
  Object.entries(row).forEach(([key, value]) => {
@@ -52,7 +79,10 @@ export class DataImportService {
52
79
  }
53
80
  });
54
81
  return transformedRow;
55
- });
82
+ })
83
+ // A row can still end up empty here when none of its populated cells map to
84
+ // an importable column.
85
+ .filter((row) => !this.isBlankRow(row));
56
86
  }
57
87
  handleImport(file,
58
88
  // previewer?: (data: any[]) => void,
@@ -73,6 +103,7 @@ export class DataImportService {
73
103
  if (sheets.length) {
74
104
  const rows = utils.sheet_to_json(wb.Sheets[sheets[0]], {
75
105
  defval: null,
106
+ blankrows: false,
76
107
  });
77
108
  imported = this.transformImportData(rows, columnDefinitions);
78
109
  // console.log('TRANSFORMED', imported);
@@ -126,4 +157,4 @@ export class DataImportService {
126
157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportService, decorators: [{
127
158
  type: Injectable
128
159
  }], ctorParameters: () => [] });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQVksR0FBd0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLGdCQUFlLENBQUM7SUFFaEIsb0VBQW9FO0lBQ3BFLG1CQUFtQixDQUNqQixZQUFtQyxFQUNuQyxpQkFBd0M7UUFFeEMsd0RBQXdEO1FBQ3hELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFHaEMsQ0FBQztRQUVKLDJGQUEyRjtRQUMzRixpQkFBaUI7YUFDZCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQzthQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNmLE1BQU0sTUFBTSxHQUNWLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxRQUFRO2dCQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ1osQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFaEMsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xCLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFN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SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQixFQUFFLEtBQW1CLEVBQUUsV0FBcUI7UUFDdkUsT0FBTyxDQUNMLEtBQUssQ0FBQyxNQUFNLENBQ1YsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN0QixXQUFXLENBQUMsS0FBSyxDQUNmLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDYixLQUFLLENBQUMsVUFBcUIsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLFVBQXFCLENBQUMsS0FBSyxHQUFHLENBQUMsVUFBcUIsQ0FBQyxDQUM5RCxDQUNKLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO3dHQXRKVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbHVtbkRlZmluaXRpb24gfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgcmVhZCwgdXRpbHMsIHdyaXRlRmlsZSB9IGZyb20gJ3hsc3gnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUltcG9ydFNlcnZpY2U8VD4ge1xuICBpbXBvcnRlZERhdGE6IFdyaXRhYmxlU2lnbmFsPFRbXT4gPSBzaWduYWwoW10pO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvLyBGdW5jdGlvbiB0byB0cmFuc2Zvcm0gaW1wb3J0ZWQgZGF0YSB0byBtYXRjaCB5b3VyIG1vZGVsIHN0cnVjdHVyZVxuICB0cmFuc2Zvcm1JbXBvcnREYXRhPFQ+KFxuICAgIGltcG9ydGVkRGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10sXG4gICk6IFBhcnRpYWw8VD5bXSB7XG4gICAgLy8gQ3JlYXRlIG1hcHBpbmdzIGZyb20gaGVhZGVyIHRvIGltcG9ydEtleSBhbmQgaW1wb3J0QnlcbiAgICBjb25zdCBoZWFkZXJUb0ltcG9ydEtleU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBrZXlvZiBUPigpO1xuICAgIGNvbnN0IGhlYWRlclRvSW1wb3J0QnlNYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAga2V5b2YgVCB8ICgoaW1wb3J0ZWRSb3c6IGFueSkgPT4gVFtrZXlvZiBUXSlcbiAgICA+KCk7XG5cbiAgICAvLyBGaWx0ZXIgY29sdW1uIGRlZmluaXRpb25zIHRvIG9ubHkgdGhvc2Ugd2l0aCBpbXBvcnRLZXkgb3IgaW1wb3J0QnkgYW5kIHBvcHVsYXRlIHRoZSBtYXBzXG4gICAgY29sdW1uRGVmaW5pdGlvbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmltcG9ydEtleSB8fCBjb2wuaW1wb3J0QnkpXG4gICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9XG4gICAgICAgICAgdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGNvbC5oZWFkZXJcbiAgICAgICAgICAgIDogY29sLmhlYWRlcih7fSkudG9TdHJpbmcoKTtcblxuICAgICAgICBpZiAoY29sLmltcG9ydEtleSkge1xuICAgICAgICAgIGhlYWRlclRvSW1wb3J0S2V5TWFwLnNldChoZWFkZXIsIGNvbC5pbXBvcnRLZXkgYXMga2V5b2YgVCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLmltcG9ydEJ5KSB7XG4gICAgICAgICAgaGVhZGVyVG9JbXBvcnRCeU1hcC5zZXQoaGVhZGVyLCBjb2wuaW1wb3J0QnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSBlYWNoIHJvdyBpbiB0aGUgaW1wb3J0ZWQgZGF0YVxuICAgIHJldHVybiBpbXBvcnRlZERhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93OiBQYXJ0aWFsPFQ+ID0ge307XG5cbiAgICAgIC8vIFByb2Nlc3MgZWFjaCBrZXkgaW4gdGhlIHJvd1xuICAgICAgT2JqZWN0LmVudHJpZXMocm93KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBpbXBvcnRCeSB0cmFuc2Zvcm1hdGlvbiBmaXJzdCAodGFrZXMgcHJpb3JpdHkpXG4gICAgICAgIGNvbnN0IGltcG9ydEJ5ID0gaGVhZGVyVG9JbXBvcnRCeU1hcC5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoaW1wb3J0QnkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGltcG9ydEJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGltcG9ydEJ5IGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgZW50aXJlIGltcG9ydGVkIHJvd1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0S2V5ID0gaGVhZGVyVG9JbXBvcnRLZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUm93W2ltcG9ydEtleV0gPSBpbXBvcnRCeShyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbXBvcnRCeSBpcyBhIGRpcmVjdCBrZXkgcmVmZXJlbmNlXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1tpbXBvcnRCeV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGltcG9ydEtleSBpZiBubyBpbXBvcnRCeSBpcyBkZWZpbmVkXG4gICAgICAgICAgY29uc3QgaW1wb3J0S2V5ID0gaGVhZGVyVG9JbXBvcnRLZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKGltcG9ydEtleSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0S2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJvdztcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUltcG9ydChcbiAgICBmaWxlOiBGaWxlLFxuICAgIC8vIHByZXZpZXdlcj86IChkYXRhOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBjb2x1bW5EZWZpbml0aW9uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdLFxuICAgIHBhcnNlSW1wb3J0PzogKGRhdGE6IGFueSkgPT4gUGFydGlhbDxUPltdLFxuICApIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgLy8gY29uc3Qgd2IgPSByZWFkKGV2ZW50LnRhcmdldC5yZXN1bHQsIHtcbiAgICAgIC8vICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgIHJhdzogdHJ1ZSxcbiAgICAgIC8vICAgY2VsbFRleHQ6IHRydWUsXG4gICAgICAvLyAgIGNlbGxGb3JtdWxhOiBmYWxzZSxcbiAgICAgIC8vICAgY2VsbE5GOiBmYWxzZSxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gY29uc29sZS50aW1lKCdCZWdpbicpO1xuICAgICAgbGV0IGltcG9ydGVkOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3Qgd2IgPSByZWFkKGV2ZW50LnRhcmdldC5yZXN1bHQsIHsgY2VsbERhdGVzOiB0cnVlIH0pO1xuICAgICAgY29uc3Qgc2hlZXRzID0gd2IuU2hlZXROYW1lcztcbiAgICAgIGlmIChzaGVldHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB1dGlscy5zaGVldF90b19qc29uKHdiLlNoZWV0c1tzaGVldHNbMF1dLCB7XG4gICAgICAgICAgZGVmdmFsOiBudWxsLFxuICAgICAgICB9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG5cbiAgICAgICAgaW1wb3J0ZWQgPSB0aGlzLnRyYW5zZm9ybUltcG9ydERhdGEocm93cywgY29sdW1uRGVmaW5pdGlvbnMpIGFzIFRbXTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1RSQU5TRk9STUVEJywgaW1wb3J0ZWQpO1xuXG4gICAgICAgIGlmIChwYXJzZUltcG9ydCkge1xuICAgICAgICAgIGltcG9ydGVkID0gcGFyc2VJbXBvcnQoaW1wb3J0ZWQpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdQQVJTRUQnLCBpbXBvcnRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmlld2VyKGltcG9ydGVkKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbXBvcnRlZCBkYXRhOicsIEpTT04uc3RyaW5naWZ5KGltcG9ydGVkLCBudWxsLCAyKSk7XG4gICAgICAvLyBjb25zb2xlLnRpbWUoJ1N0YXJ0IFByb2Nlc3MnKTtcbiAgICAgIHRoaXMuaW1wb3J0ZWREYXRhLnNldChpbXBvcnRlZCk7XG4gICAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ0JlZ2luJyk7XG4gICAgICByZXR1cm4gaW1wb3J0ZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICB9XG5cbiAgaGFuZGxlVGVtcGxhdGVFeHBvcnQoZmllbGRzOiBzdHJpbmdbXSwgdGl0bGU6IHN0cmluZykge1xuICAgIC8vIGNvbnNvbGUubG9nKGZpZWxkcyk7XG4gICAgY29uc3Qgd2IgPSB1dGlscy5ib29rX25ldygpO1xuICAgIGNvbnN0IHdzOiBhbnkgPSB1dGlscy5qc29uX3RvX3NoZWV0KFtdKTtcbiAgICB1dGlscy5zaGVldF9hZGRfYW9hKHdzLCBbZmllbGRzXSk7XG4gICAgLy8gdXRpbHMuc2hlZXRfYWRkX2pzb24od3MsIHRoaXMuX2RhdGEsIHsgb3JpZ2luOiAnQTInLCBza2lwSGVhZGVyOiB0cnVlIH0pO1xuICAgIHV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgdGl0bGUpO1xuICAgIHdyaXRlRmlsZSh3YiwgdGl0bGUgKyAnLXRlbXBsYXRlLicgKyAneGxzeCcpO1xuICB9XG5cbiAgYWRkUm93KGV2ZW50OiB7IGluZGV4OiBudW1iZXI7IGtleTogc3RyaW5nIHwgbnVtYmVyOyBkYXRhOiBQYXJ0aWFsPFQ+IH0pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgdGhpcy5pbXBvcnRlZERhdGEudXBkYXRlKChkYXQpID0+IHtcbiAgICAgIC8vIGRhdFtldmVudC5pbmRleF0gPSB7IC4uLmRhdFtldmVudC5pbmRleF0sIC4uLmV2ZW50LmRhdGEgfTtcbiAgICAgIHJldHVybiBkYXQubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09PSBldmVudC5pbmRleCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmQsIC4uLmV2ZW50LmRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW1wb3J0ZWREYXRhKCkpO1xuICB9XG5cbiAgaXNEdXBsaWNhdGUoZGF0dW06IFBhcnRpYWw8VD4sIGFycmF5OiBQYXJ0aWFsPFQ+W10sIGlkZW50aWZpZXJzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiAoXG4gICAgICBhcnJheS5maWx0ZXIoXG4gICAgICAgIChkYXQpID0+XG4gICAgICAgICAgaWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGlkZW50aWZpZXJzLmV2ZXJ5KFxuICAgICAgICAgICAgKGlkZW50aWZpZXIpID0+XG4gICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gJiZcbiAgICAgICAgICAgICAgZGF0dW1baWRlbnRpZmllciBhcyBrZXlvZiBUXSA9PT0gZGF0W2lkZW50aWZpZXIgYXMga2V5b2YgVF0sXG4gICAgICAgICAgKSxcbiAgICAgICkubGVuZ3RoID4gMVxuICAgICk7XG4gIH1cblxuICBjbGVhckRhdGEoKSB7XG4gICAgdGhpcy5pbXBvcnRlZERhdGEuc2V0KFtdKTtcbiAgfVxufVxuIl19
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQVksR0FBd0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLGdCQUFlLENBQUM7SUFFaEI7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxLQUFjO1FBQ2pDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMxRCxJQUFJLEtBQUssWUFBWSxJQUFJO1lBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QztvQkFDdEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILG9DQUFvQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCLEVBQUUsS0FBbUIsRUFBRSxXQUFxQjtRQUN2RSxPQUFPLENBQ0wsS0FBSyxDQUFDLE1BQU0sQ0FDVixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxLQUFLLENBQ2YsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxVQUFxQixDQUFDO2dCQUM1QixLQUFLLENBQUMsVUFBcUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFxQixDQUFDLENBQzlELENBQ0osQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7d0dBbkxVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyByZWFkLCB1dGlscywgd3JpdGVGaWxlIH0gZnJvbSAneGxzeCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhSW1wb3J0U2VydmljZTxUPiB7XG4gIGltcG9ydGVkRGF0YTogV3JpdGFibGVTaWduYWw8VFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBBIHZhbHVlIGNhcnJpZXMgbm8gaW5mb3JtYXRpb24gaWYgaXQgaXMgbnVsbGlzaCwgYW4gZW1wdHkvd2hpdGVzcGFjZSBzdHJpbmcsXG4gICAqIGFuIGludmFsaWQgZGF0ZSwgb3IgYSBjb2xsZWN0aW9uIHdob3NlIGV2ZXJ5IG1lbWJlciBpcyBpdHNlbGYgYmxhbmsuXG4gICAqIE51bWJlcnMgKGluY2x1ZGluZyAwKSBhbmQgYm9vbGVhbnMgKGluY2x1ZGluZyBmYWxzZSkgYXJlIG5ldmVyIGJsYW5rLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0JsYW5rVmFsdWUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS50cmltKCkgPT09ICcnO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5ldmVyeSgodikgPT4gdGhpcy5pc0JsYW5rVmFsdWUodikpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWx1ZSBhcyBvYmplY3QpLmV2ZXJ5KCh2KSA9PiB0aGlzLmlzQmxhbmtWYWx1ZSh2KSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNCbGFua1Jvdyhyb3c6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMocm93KTtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZXMuZXZlcnkoKHYpID0+IHRoaXMuaXNCbGFua1ZhbHVlKHYpKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHRyYW5zZm9ybSBpbXBvcnRlZCBkYXRhIHRvIG1hdGNoIHlvdXIgbW9kZWwgc3RydWN0dXJlXG4gIHRyYW5zZm9ybUltcG9ydERhdGE8VD4oXG4gICAgaW1wb3J0ZWREYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgY29sdW1uRGVmaW5pdGlvbnM6IENvbHVtbkRlZmluaXRpb248VD5bXSxcbiAgKTogUGFydGlhbDxUPltdIHtcbiAgICAvLyBDcmVhdGUgbWFwcGluZ3MgZnJvbSBoZWFkZXIgdG8gaW1wb3J0S2V5IGFuZCBpbXBvcnRCeVxuICAgIGNvbnN0IGhlYWRlclRvSW1wb3J0S2V5TWFwID0gbmV3IE1hcDxzdHJpbmcsIGtleW9mIFQ+KCk7XG4gICAgY29uc3QgaGVhZGVyVG9JbXBvcnRCeU1hcCA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBrZXlvZiBUIHwgKChpbXBvcnRlZFJvdzogYW55KSA9PiBUW2tleW9mIFRdKVxuICAgID4oKTtcblxuICAgIC8vIEZpbHRlciBjb2x1bW4gZGVmaW5pdGlvbnMgdG8gb25seSB0aG9zZSB3aXRoIGltcG9ydEtleSBvciBpbXBvcnRCeSBhbmQgcG9wdWxhdGUgdGhlIG1hcHNcbiAgICBjb2x1bW5EZWZpbml0aW9uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSlcbiAgICAgIC5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVyID1cbiAgICAgICAgICB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gY29sLmhlYWRlclxuICAgICAgICAgICAgOiBjb2wuaGVhZGVyKHt9KS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0S2V5KSB7XG4gICAgICAgICAgaGVhZGVyVG9JbXBvcnRLZXlNYXAuc2V0KGhlYWRlciwgY29sLmltcG9ydEtleSBhcyBrZXlvZiBUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0QnkpIHtcbiAgICAgICAgICBoZWFkZXJUb0ltcG9ydEJ5TWFwLnNldChoZWFkZXIsIGNvbC5pbXBvcnRCeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGVhY2ggcm93IGluIHRoZSBpbXBvcnRlZCBkYXRhLiBSb3dzIHRoZSBzaGVldCBzdGlsbCByZXBvcnRzIGJ1dFxuICAgIC8vIHRoYXQgaG9sZCBub3RoaW5nICh3aGl0ZXNwYWNlLCBsZWZ0b3ZlciBmb3JtYXR0aW5nKSBhcmUgZHJvcHBlZCB1cCBmcm9udCBzb1xuICAgIC8vIGltcG9ydEJ5IG5ldmVyIGZhYnJpY2F0ZXMgdmFsdWVzIG91dCBvZiB0aGVtLlxuICAgIHJldHVybiBpbXBvcnRlZERhdGFcbiAgICAgIC5maWx0ZXIoKHJvdykgPT4gIXRoaXMuaXNCbGFua1Jvdyhyb3cpKVxuICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93OiBQYXJ0aWFsPFQ+ID0ge307XG5cbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIGtleSBpbiB0aGUgcm93XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJvdykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBpbXBvcnRCeSB0cmFuc2Zvcm1hdGlvbiBmaXJzdCAodGFrZXMgcHJpb3JpdHkpXG4gICAgICAgICAgY29uc3QgaW1wb3J0QnkgPSBoZWFkZXJUb0ltcG9ydEJ5TWFwLmdldChrZXkpO1xuXG4gICAgICAgICAgaWYgKGltcG9ydEJ5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGltcG9ydEJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0QnkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBlbnRpcmUgaW1wb3J0ZWQgcm93XG4gICAgICAgICAgICAgIGNvbnN0IGltcG9ydEtleSA9IGhlYWRlclRvSW1wb3J0S2V5TWFwLmdldChrZXkpO1xuICAgICAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0S2V5XSA9IGltcG9ydEJ5KHJvdyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGltcG9ydEJ5IGlzIGEgZGlyZWN0IGtleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0QnldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBpbXBvcnRLZXkgaWYgbm8gaW1wb3J0QnkgaXMgZGVmaW5lZFxuICAgICAgICAgICAgY29uc3QgaW1wb3J0S2V5ID0gaGVhZGVyVG9JbXBvcnRLZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUm93W2ltcG9ydEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJvdztcbiAgICAgIH0pXG4gICAgICAvLyBBIHJvdyBjYW4gc3RpbGwgZW5kIHVwIGVtcHR5IGhlcmUgd2hlbiBub25lIG9mIGl0cyBwb3B1bGF0ZWQgY2VsbHMgbWFwIHRvXG4gICAgICAvLyBhbiBpbXBvcnRhYmxlIGNvbHVtbi5cbiAgICAgIC5maWx0ZXIoKHJvdykgPT4gIXRoaXMuaXNCbGFua1Jvdyhyb3cpKTtcbiAgfVxuXG4gIGhhbmRsZUltcG9ydChcbiAgICBmaWxlOiBGaWxlLFxuICAgIC8vIHByZXZpZXdlcj86IChkYXRhOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBjb2x1bW5EZWZpbml0aW9uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdLFxuICAgIHBhcnNlSW1wb3J0PzogKGRhdGE6IGFueSkgPT4gUGFydGlhbDxUPltdLFxuICApIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgLy8gY29uc3Qgd2IgPSByZWFkKGV2ZW50LnRhcmdldC5yZXN1bHQsIHtcbiAgICAgIC8vICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgIHJhdzogdHJ1ZSxcbiAgICAgIC8vICAgY2VsbFRleHQ6IHRydWUsXG4gICAgICAvLyAgIGNlbGxGb3JtdWxhOiBmYWxzZSxcbiAgICAgIC8vICAgY2VsbE5GOiBmYWxzZSxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gY29uc29sZS50aW1lKCdCZWdpbicpO1xuICAgICAgbGV0IGltcG9ydGVkOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3Qgd2IgPSByZWFkKGV2ZW50LnRhcmdldC5yZXN1bHQsIHsgY2VsbERhdGVzOiB0cnVlIH0pO1xuICAgICAgY29uc3Qgc2hlZXRzID0gd2IuU2hlZXROYW1lcztcbiAgICAgIGlmIChzaGVldHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB1dGlscy5zaGVldF90b19qc29uKHdiLlNoZWV0c1tzaGVldHNbMF1dLCB7XG4gICAgICAgICAgZGVmdmFsOiBudWxsLFxuICAgICAgICAgIGJsYW5rcm93czogZmFsc2UsXG4gICAgICAgIH0pIGFzIFJlY29yZDxzdHJpbmcsIGFueT5bXTtcblxuICAgICAgICBpbXBvcnRlZCA9IHRoaXMudHJhbnNmb3JtSW1wb3J0RGF0YShyb3dzLCBjb2x1bW5EZWZpbml0aW9ucykgYXMgVFtdO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnVFJBTlNGT1JNRUQnLCBpbXBvcnRlZCk7XG5cbiAgICAgICAgaWYgKHBhcnNlSW1wb3J0KSB7XG4gICAgICAgICAgaW1wb3J0ZWQgPSBwYXJzZUltcG9ydChpbXBvcnRlZCk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ1BBUlNFRCcsIGltcG9ydGVkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2aWV3ZXIoaW1wb3J0ZWQpO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ0ltcG9ydGVkIGRhdGE6JywgSlNPTi5zdHJpbmdpZnkoaW1wb3J0ZWQsIG51bGwsIDIpKTtcbiAgICAgIC8vIGNvbnNvbGUudGltZSgnU3RhcnQgUHJvY2VzcycpO1xuICAgICAgdGhpcy5pbXBvcnRlZERhdGEuc2V0KGltcG9ydGVkKTtcbiAgICAgIC8vIGNvbnNvbGUudGltZUVuZCgnQmVnaW4nKTtcbiAgICAgIHJldHVybiBpbXBvcnRlZDtcbiAgICB9O1xuICAgIHJldHVybiByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gIH1cblxuICBoYW5kbGVUZW1wbGF0ZUV4cG9ydChmaWVsZHM6IHN0cmluZ1tdLCB0aXRsZTogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coZmllbGRzKTtcbiAgICBjb25zdCB3YiA9IHV0aWxzLmJvb2tfbmV3KCk7XG4gICAgY29uc3Qgd3M6IGFueSA9IHV0aWxzLmpzb25fdG9fc2hlZXQoW10pO1xuICAgIHV0aWxzLnNoZWV0X2FkZF9hb2Eod3MsIFtmaWVsZHNdKTtcbiAgICAvLyB1dGlscy5zaGVldF9hZGRfanNvbih3cywgdGhpcy5fZGF0YSwgeyBvcmlnaW46ICdBMicsIHNraXBIZWFkZXI6IHRydWUgfSk7XG4gICAgdXRpbHMuYm9va19hcHBlbmRfc2hlZXQod2IsIHdzLCB0aXRsZSk7XG4gICAgd3JpdGVGaWxlKHdiLCB0aXRsZSArICctdGVtcGxhdGUuJyArICd4bHN4Jyk7XG4gIH1cblxuICBhZGRSb3coZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsga2V5OiBzdHJpbmcgfCBudW1iZXI7IGRhdGE6IFBhcnRpYWw8VD4gfSkge1xuICAgIC8vIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB0aGlzLmltcG9ydGVkRGF0YS51cGRhdGUoKGRhdCkgPT4ge1xuICAgICAgLy8gZGF0W2V2ZW50LmluZGV4XSA9IHsgLi4uZGF0W2V2ZW50LmluZGV4XSwgLi4uZXZlbnQuZGF0YSB9O1xuICAgICAgcmV0dXJuIGRhdC5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgPT09IGV2ZW50LmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uZCwgLi4uZXZlbnQuZGF0YSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbXBvcnRlZERhdGEoKSk7XG4gIH1cblxuICBpc0R1cGxpY2F0ZShkYXR1bTogUGFydGlhbDxUPiwgYXJyYXk6IFBhcnRpYWw8VD5bXSwgaWRlbnRpZmllcnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFycmF5LmZpbHRlcihcbiAgICAgICAgKGRhdCkgPT5cbiAgICAgICAgICBpZGVudGlmaWVycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgaWRlbnRpZmllcnMuZXZlcnkoXG4gICAgICAgICAgICAoaWRlbnRpZmllcikgPT5cbiAgICAgICAgICAgICAgZGF0dW1baWRlbnRpZmllciBhcyBrZXlvZiBUXSAmJlxuICAgICAgICAgICAgICBkYXR1bVtpZGVudGlmaWVyIGFzIGtleW9mIFRdID09PSBkYXRbaWRlbnRpZmllciBhcyBrZXlvZiBUXSxcbiAgICAgICAgICApLFxuICAgICAgKS5sZW5ndGggPiAxXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLmltcG9ydGVkRGF0YS5zZXQoW10pO1xuICB9XG59XG4iXX0=
@@ -4,7 +4,15 @@ import * as i1 from "@angular/common";
4
4
  import * as i2 from "@angular/forms";
5
5
  import * as i3 from "verben-ng-ui/src/lib/components/svg";
6
6
  export class VisibleColumnComponent {
7
- columns = [];
7
+ _columns = [];
8
+ set columns(value) {
9
+ this._columns = value ?? [];
10
+ this.visibleColumns = this._columns.map((column) => !!column.checked);
11
+ this.updateSelectAllStatus();
12
+ }
13
+ get columns() {
14
+ return this._columns;
15
+ }
8
16
  items = [];
9
17
  enableDragAndDrop = true;
10
18
  displayedColumns = 5;
@@ -144,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
144
152
  }], resetFilter: [{
145
153
  type: Output
146
154
  }] } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaWJsZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy92aXNpYmxlLWNvbHVtbi92aXNpYmxlLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Zpc2libGUtY29sdW1uL3Zpc2libGUtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDOzs7OztBQWF2QixNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQzVCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsaUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQ2xDLGdCQUFnQixHQUFXLENBQUMsQ0FBQztJQUM3QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLEVBQUUsQ0FBVTtJQUNaLEVBQUUsQ0FBVTtJQUNaLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVU7SUFDZixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBVTtJQUNuQixZQUFZLENBQVU7SUFDdEIsY0FBYyxDQUFVO0lBQ3hCLGFBQWEsQ0FBVTtJQUN2QixNQUFNLENBQVU7SUFDaEIsWUFBWSxDQUFVO0lBQ3RCLFdBQVcsQ0FBVTtJQUNyQixXQUFXLENBQVc7SUFDdEIsWUFBWSxDQUEyQztJQUN0RCxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDbkQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFM0MsbUJBQW1CLEdBQWtCLEVBQUUsQ0FB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QkFBaEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURhdGFGaWx0ZXIgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuXG5pbnRlcmZhY2UgSXRlbSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXZpc2libGUtY29sdW1uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Zpc2libGUtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlzaWJsZS1jb2x1bW4uY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVmlzaWJsZUNvbHVtbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgQElucHV0KCkgaXRlbXM6IEl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBlbmFibGVEcmFnQW5kRHJvcDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGRpc3BsYXllZENvbHVtbnM6IG51bWJlciA9IDU7XG4gIEBJbnB1dCgpIHNob3dNb3JlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBkPzogc3RyaW5nO1xuICBASW5wdXQoKSBtZz86IHN0cmluZztcbiAgQElucHV0KCkgaGVpZ2h0Pzogc3RyaW5nO1xuICBASW5wdXQoKSB3aWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgYmdDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgYm94U2hhZG93Pzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlcnRpYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvcmRlcj86IHN0cmluZztcbiAgQElucHV0KCkgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RXaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VDb2x1bW4/OiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQ2FsbGJhY2s/OiAoaXRlbXM6IElEYXRhRmlsdGVyW10pID0+IFByb21pc2U8dm9pZD47XG4gIEBPdXRwdXQoKSBjb2x1bW5zVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SURhdGFGaWx0ZXJbXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0RmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIG9yaWdpbmFsQ29sdW1uT3JkZXI6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgdmlzaWJsZUNvbHVtbnM6IGJvb2xlYW5bXSA9IFtdO1xuICBkcmFnZ2VkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9yaWdpbmFsQ29sdW1uT3JkZXIgPSBbLi4udGhpcy5jb2x1bW5zXTtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCkge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5jaGVja2VkKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXR1cygpO1xuICB9XG5cbiAgcmVzZXRDb2x1bW5zKCkge1xuICAgIHRoaXMuY29sdW1ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmlnaW5hbENvbHVtbk9yZGVyKSk7IC8vIEVuc3VyZSBpdCdzIGEgZGVlcCBjb3B5XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7IC8vIFJlc2V0IHNlbGVjdCBhbGxcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXR1cygpO1xuICAgIHRoaXMucmVzZXRGaWx0ZXIuZW1pdCgpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRDb2x1bW5Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zLmZpbHRlcigoaXNWaXNpYmxlKSA9PiBpc1Zpc2libGUpLmxlbmd0aDtcbiAgfVxuXG4gIHNhdmVDb2x1bW5WaXNpYmlsaXR5KCkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb2x1bW4uY2hlY2tlZCA9IHRoaXMudmlzaWJsZUNvbHVtbnNbaW5kZXhdO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uY2hlY2tlZCk7XG4gICAgaWYgKHRoaXMuc2F2ZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnNhdmVDYWxsYmFjayhzZWxlY3RlZENvbHVtbnMpO1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnNVcGRhdGVkLmVtaXQoc2VsZWN0ZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHRvZ2dsZVNob3dNb3JlKCkge1xuICAgIHRoaXMuc2hvd01vcmUgPSAhdGhpcy5zaG93TW9yZTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnNob3dNb3JlID8gdGhpcy5jb2x1bW5zLmxlbmd0aCA6IDU7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5zZWxlY3RBbGwgPSAhdGhpcy5zZWxlY3RBbGw7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMubWFwKCgpID0+IHRoaXMuc2VsZWN0QWxsKTtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdEFsbFN0YXR1cygpIHtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZXZlcnkoKGlzVmlzaWJsZSkgPT4gaXNWaXNpYmxlKTtcbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4O1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YSgndGV4dC9wbGFpbicsIFN0cmluZyhpbmRleCkpO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uRHJvcChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggIT09IG51bGwgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aGlzLnN3YXBDb2x1bW5zKHRoaXMuZHJhZ2dlZEluZGV4LCBpbmRleCk7XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcENvbHVtbnMoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcikge1xuICAgIFt0aGlzLmNvbHVtbnNbZnJvbUluZGV4XSwgdGhpcy5jb2x1bW5zW3RvSW5kZXhdXSA9IFtcbiAgICAgIHRoaXMuY29sdW1uc1t0b0luZGV4XSxcbiAgICAgIHRoaXMuY29sdW1uc1tmcm9tSW5kZXhdLFxuICAgIF07XG4gICAgW3RoaXMudmlzaWJsZUNvbHVtbnNbZnJvbUluZGV4XSwgdGhpcy52aXNpYmxlQ29sdW1uc1t0b0luZGV4XV0gPSBbXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zW3RvSW5kZXhdLFxuICAgICAgdGhpcy52aXNpYmxlQ29sdW1uc1tmcm9tSW5kZXhdLFxuICAgIF07XG4gIH1cbn1cbiIsIjxkaXZcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gIFtzdHlsZS5ib3gtc2hhZG93XT1cImJveFNoYWRvd1wiXG4gIFtzdHlsZS5ib3JkZXJdPVwiYm9yZGVyXCJcbiAgW3N0eWxlLmJvcmRlci1yYWRpdXNdPVwiYm9yZGVyUmFkaXVzXCJcbiAgW3N0eWxlLmNvbG9yXT1cInRleHRDb2xvclwiXG4gIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcbiAgW3N0eWxlLnBhZGRpbmddPVwicGRcIlxuICBjbGFzcz1cImNvbHVtbi1jb250cm9sXCJcbj5cbiAgPGRpdiBjbGFzcz1cInZpc2libGUtY29sdW1uLWhlYWRlciBmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXNtXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tdGl0bGVcIj5cbiAgICAgIENvbHVtbiA8c3VwPlt7eyBnZXRTZWxlY3RlZENvbHVtbkNvdW50KCkgfX1dPC9zdXA+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0Q29sdW1ucygpXCI+UmVzZXQ8L3NwYW4+XG4gIDwvZGl2PlxuICA8aHIgLz5cblxuICA8IS0tIFNlbGVjdCBBbGwgQ2hlY2tib3ggLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXBcIiBbc3R5bGUucGFkZGluZ109XCInNHB4IDEwcHgnXCI+XG4gICAgPGxhYmVsIFtzdHlsZS5mb250LXNpemVdPVwiJzEzcHgnXCIgW3N0eWxlLmZvbnQtd2VpZ2h0XT1cIic1MDAnXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwic2VsZWN0QWxsXCIgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiIC8+XG4gICAgICBTZWxlY3QgQWxsXG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG5cbiA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gIDx1bCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImNvbHVtbi1vcHRpb25zLWNvbnRhaW5lclwiPlxuICAgIDxsaVxuICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoaSwgJGV2ZW50KVwiXG4gICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgIChkcm9wKT1cIm9uRHJvcChpLCAkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiaSA8IGRpc3BsYXllZENvbHVtbnNcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTRweCdcIlxuICAgICAgW3N0eWxlLm1hcmdpbi10b3BdPVwiJzE0cHgnXCJcbiAgICAgIGNsYXNzPVwiZmxleCBnYXAtc20gaXRlbXMtY2VudGVyXCJcbiAgICA+XG4gICAgICA8dmVyYmVuLXN2ZyAqbmdJZj1cImVuYWJsZURyYWdBbmREcm9wXCIgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiIGNsYXNzPVwic3ZnXCIgaWNvbj1cInNxdWFyZS1kb3RcIj48L3ZlcmJlbi1zdmc+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGdhcC1tZCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwidmlzaWJsZUNvbHVtbnNbaV1cIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RBbGxTdGF0dXMoKVwiIC8+XG4gICAgICAgIHt7IGNvbHVtbi5uYW1lIH19XG4gICAgICA8L2xhYmVsPlxuICAgIDwvbGk+XG4gIDwvdWw+XG5cbiAgPCEtLSBTaG93IE1vcmUgLyBTaG93IExlc3MgLS0+XG4gIDxkaXYgKm5nSWY9XCJkaXNwbGF5ZWRDb2x1bW5zIDw9IGNvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtzdHlsZS5wYWRkaW5nXT1cIicyMHB4IDEwcHggMHB4IDEwcHgnXCI+XG4gICAgPHNwYW4gKGNsaWNrKT1cInRvZ2dsZVNob3dNb3JlKClcIj5cbiAgICAgIHt7IGRpc3BsYXllZENvbHVtbnMgPT09IGNvbHVtbnMubGVuZ3RoID8gXCJTaG93IExlc3NcIiA6IFwiU2hvdyBNb3JlXCIgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuIDwvZGl2PlxuXG4gIDxociAvPlxuXG4gIDwhLS0gU2F2ZSBCdXR0b24gLS0+XG4gIDxkaXYgY2xhc3M9XCJidG4td3JhcHBlclwiPlxuICAgIDxidXR0b25cbiAgICAgIFtzdHlsZS5tYXJnaW4tdG9wXT1cIicwLjVyZW0nXCJcbiAgICAgIFtzdHlsZS5vdXRsaW5lXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUucGFkZGluZ109XCInMC4ycmVtIDEuNnJlbSdcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJ0ZXJ0aWFyeUNvbG9yXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNjAwJ1wiIFxuICAgICAgW2Rpc2FibGVkXT1cImdldFNlbGVjdGVkQ29sdW1uQ291bnQoKSA9PT0gMFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgIGRpc2FibGVkQnRuOiBnZXRTZWxlY3RlZENvbHVtbkNvdW50KCkgPT09IDAsXG4gICAgICAgIGVuYWJsZUJ0bjogZ2V0U2VsZWN0ZWRDb2x1bW5Db3VudCgpICE9PSAwXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJzYXZlQ29sdW1uVmlzaWJpbGl0eSgpXCJcbiAgICA+XG4gICAgICBTYXZlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaWJsZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy92aXNpYmxlLWNvbHVtbi92aXNpYmxlLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Zpc2libGUtY29sdW1uL3Zpc2libGUtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDOzs7OztBQWF2QixNQUFNLE9BQU8sc0JBQXNCO0lBQ3pCLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBRXJDLElBQ0ksT0FBTyxDQUFDLEtBQXVDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNRLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsaUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQ2xDLGdCQUFnQixHQUFXLENBQUMsQ0FBQztJQUM3QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLEVBQUUsQ0FBVTtJQUNaLEVBQUUsQ0FBVTtJQUNaLE1BQU0sQ0FBVTtJQUNo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Q0FBQyxPQUFPLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7U0FDL0IsQ0FBQztJQUNKLENBQUM7d0dBbEhVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDRuQkNuQm5DLG9uRkErRUE7OzRGRDVEYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzhCQU0zQyxPQUFPO3NCQURWLEtBQUs7Z0JBVUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURhdGFGaWx0ZXIgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuXG5pbnRlcmZhY2UgSXRlbSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXZpc2libGUtY29sdW1uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Zpc2libGUtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlzaWJsZS1jb2x1bW4uY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVmlzaWJsZUNvbHVtbkNvbXBvbmVudCB7XG4gIHByaXZhdGUgX2NvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogSURhdGFGaWx0ZXJbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWUgPz8gW107XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuX2NvbHVtbnMubWFwKChjb2x1bW4pID0+ICEhY29sdW1uLmNoZWNrZWQpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdHVzKCk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBJRGF0YUZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuICBASW5wdXQoKSBpdGVtczogSXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGVuYWJsZURyYWdBbmREcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheWVkQ29sdW1uczogbnVtYmVyID0gNTtcbiAgQElucHV0KCkgc2hvd01vcmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1nPzogc3RyaW5nO1xuICBASW5wdXQoKSBoZWlnaHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0NvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBib3hTaGFkb3c/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHRDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBzZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgdGVydGlhcnlDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgYm9yZGVyPzogc3RyaW5nO1xuICBASW5wdXQoKSBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdFdpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBjbG9zZUNvbHVtbj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNhdmVDYWxsYmFjaz86IChpdGVtczogSURhdGFGaWx0ZXJbXSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgQE91dHB1dCgpIGNvbHVtbnNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRGF0YUZpbHRlcltdPigpO1xuICBAT3V0cHV0KCkgcmVzZXRGaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgb3JpZ2luYWxDb2x1bW5PcmRlcjogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICB2aXNpYmxlQ29sdW1uczogYm9vbGVhbltdID0gW107XG4gIGRyYWdnZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3JpZ2luYWxDb2x1bW5PcmRlciA9IFsuLi50aGlzLmNvbHVtbnNdO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmNoZWNrZWQpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdHVzKCk7XG4gIH1cblxuICByZXNldENvbHVtbnMoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdpbmFsQ29sdW1uT3JkZXIpKTsgLy8gRW5zdXJlIGl0J3MgYSBkZWVwIGNvcHlcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTsgLy8gUmVzZXQgc2VsZWN0IGFsbFxuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdHVzKCk7XG4gICAgdGhpcy5yZXNldEZpbHRlci5lbWl0KCk7XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMuZmlsdGVyKChpc1Zpc2libGUpID0+IGlzVmlzaWJsZSkubGVuZ3RoO1xuICB9XG5cbiAgc2F2ZUNvbHVtblZpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgIGNvbHVtbi5jaGVja2VkID0gdGhpcy52aXNpYmxlQ29sdW1uc1tpbmRleF07XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5jaGVja2VkKTtcbiAgICBpZiAodGhpcy5zYXZlQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuc2F2ZUNhbGxiYWNrKHNlbGVjdGVkQ29sdW1ucyk7XG4gICAgfVxuICAgIHRoaXMuY29sdW1uc1VwZGF0ZWQuZW1pdChzZWxlY3RlZENvbHVtbnMpO1xuICB9XG5cbiAgdG9nZ2xlU2hvd01vcmUoKSB7XG4gICAgdGhpcy5zaG93TW9yZSA9ICF0aGlzLnNob3dNb3JlO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuc2hvd01vcmUgPyB0aGlzLmNvbHVtbnMubGVuZ3RoIDogNTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNlbGVjdEFsbCA9ICF0aGlzLnNlbGVjdEFsbDtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucy5tYXAoKCkgPT4gdGhpcy5zZWxlY3RBbGwpO1xuICB9XG5cbiAgdXBkYXRlU2VsZWN0QWxsU3RhdHVzKCkge1xuICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy52aXNpYmxlQ29sdW1ucy5ldmVyeSgoaXNWaXNpYmxlKSA9PiBpc1Zpc2libGUpO1xuICB9XG5cbiAgb25EcmFnU3RhcnQoaW5kZXg6IG51bWJlciwgZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gaW5kZXg7XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgU3RyaW5nKGluZGV4KSk7XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgb25Ecm9wKGluZGV4OiBudW1iZXIsIGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCAhPT0gbnVsbCAmJiB0aGlzLmRyYWdnZWRJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRoaXMuc3dhcENvbHVtbnModGhpcy5kcmFnZ2VkSW5kZXgsIGluZGV4KTtcbiAgICB9XG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzd2FwQ29sdW1ucyhmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSB7XG4gICAgW3RoaXMuY29sdW1uc1tmcm9tSW5kZXhdLCB0aGlzLmNvbHVtbnNbdG9JbmRleF1dID0gW1xuICAgICAgdGhpcy5jb2x1bW5zW3RvSW5kZXhdLFxuICAgICAgdGhpcy5jb2x1bW5zW2Zyb21JbmRleF0sXG4gICAgXTtcbiAgICBbdGhpcy52aXNpYmxlQ29sdW1uc1tmcm9tSW5kZXhdLCB0aGlzLnZpc2libGVDb2x1bW5zW3RvSW5kZXhdXSA9IFtcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnNbdG9JbmRleF0sXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zW2Zyb21JbmRleF0sXG4gICAgXTtcbiAgfVxufVxuIiwiPGRpdlxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiZ0NvbG9yXCJcbiAgW3N0eWxlLmJveC1zaGFkb3ddPVwiYm94U2hhZG93XCJcbiAgW3N0eWxlLmJvcmRlcl09XCJib3JkZXJcIlxuICBbc3R5bGUuYm9yZGVyLXJhZGl1c109XCJib3JkZXJSYWRpdXNcIlxuICBbc3R5bGUuY29sb3JdPVwidGV4dENvbG9yXCJcbiAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICBbc3R5bGUucGFkZGluZ109XCJwZFwiXG4gIGNsYXNzPVwiY29sdW1uLWNvbnRyb2xcIlxuPlxuICA8ZGl2IGNsYXNzPVwidmlzaWJsZS1jb2x1bW4taGVhZGVyIGZsZXgganVzdGlmeS1iZXR3ZWVuIHRleHQtc21cIj5cbiAgICA8c3BhbiBjbGFzcz1cImNvbHVtbi10aXRsZVwiPlxuICAgICAgQ29sdW1uIDxzdXA+W3t7IGdldFNlbGVjdGVkQ29sdW1uQ291bnQoKSB9fV08L3N1cD5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tcmVzZXRcIiAoY2xpY2spPVwicmVzZXRDb2x1bW5zKClcIj5SZXNldDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxociAvPlxuXG4gIDwhLS0gU2VsZWN0IEFsbCBDaGVja2JveCAtLT5cbiAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcFwiIFtzdHlsZS5wYWRkaW5nXT1cIic0cHggMTBweCdcIj5cbiAgICA8bGFiZWwgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTNweCdcIiBbc3R5bGUuZm9udC13ZWlnaHRdPVwiJzUwMCdcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RBbGxcIiAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgpXCIgLz5cbiAgICAgIFNlbGVjdCBBbGxcbiAgICA8L2xhYmVsPlxuICA8L2Rpdj5cblxuIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgPHVsICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiY29sdW1uLW9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgPGxpXG4gICAgICBbYXR0ci5kcmFnZ2FibGVdPVwiZW5hYmxlRHJhZ0FuZERyb3BcIlxuICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydChpLCAkZXZlbnQpXCJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgKGRyb3ApPVwib25Ecm9wKGksICRldmVudClcIlxuICAgICAgKm5nSWY9XCJpIDwgZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxNHB4J1wiXG4gICAgICBbc3R5bGUubWFyZ2luLXRvcF09XCInMTRweCdcIlxuICAgICAgY2xhc3M9XCJmbGV4IGdhcC1zbSBpdGVtcy1jZW50ZXJcIlxuICAgID5cbiAgICAgIDx2ZXJiZW4tc3ZnICpuZ0lmPVwiZW5hYmxlRHJhZ0FuZERyb3BcIiBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCIgY2xhc3M9XCJzdmdcIiBpY29uPVwic3F1YXJlLWRvdFwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggZ2FwLW1kIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJ2aXNpYmxlQ29sdW1uc1tpXVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVNlbGVjdEFsbFN0YXR1cygpXCIgLz5cbiAgICAgICAge3sgY29sdW1uLm5hbWUgfX1cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9saT5cbiAgPC91bD5cblxuICA8IS0tIFNob3cgTW9yZSAvIFNob3cgTGVzcyAtLT5cbiAgPGRpdiAqbmdJZj1cImRpc3BsYXllZENvbHVtbnMgPD0gY29sdW1ucy5sZW5ndGhcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW3N0eWxlLnBhZGRpbmddPVwiJzIwcHggMTBweCAwcHggMTBweCdcIj5cbiAgICA8c3BhbiAoY2xpY2spPVwidG9nZ2xlU2hvd01vcmUoKVwiPlxuICAgICAge3sgZGlzcGxheWVkQ29sdW1ucyA9PT0gY29sdW1ucy5sZW5ndGggPyBcIlNob3cgTGVzc1wiIDogXCJTaG93IE1vcmVcIiB9fVxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gPC9kaXY+XG5cbiAgPGhyIC8+XG5cbiAgPCEtLSBTYXZlIEJ1dHRvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImJ0bi13cmFwcGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW3N0eWxlLm1hcmdpbi10b3BdPVwiJzAuNXJlbSdcIlxuICAgICAgW3N0eWxlLm91dGxpbmVdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nXT1cIicwLjJyZW0gMS42cmVtJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJwcmltYXJ5Q29sb3JcIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cInRlcnRpYXJ5Q29sb3JcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgW3N0eWxlLmZvbnQtd2VpZ2h0XT1cIic2MDAnXCIgXG4gICAgICBbZGlzYWJsZWRdPVwiZ2V0U2VsZWN0ZWRDb2x1bW5Db3VudCgpID09PSAwXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgZGlzYWJsZWRCdG46IGdldFNlbGVjdGVkQ29sdW1uQ291bnQoKSA9PT0gMCxcbiAgICAgICAgZW5hYmxlQnRuOiBnZXRTZWxlY3RlZENvbHVtbkNvdW50KCkgIT09IDBcbiAgICAgIH1cIlxuICAgICAgKGNsaWNrKT1cInNhdmVDb2x1bW5WaXNpYmlsaXR5KClcIlxuICAgID5cbiAgICAgIFNhdmVcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -59,7 +59,7 @@ class DataColumnsComponent {
59
59
  const temp = this.visibleColumns[fromIndex];
60
60
  this.visibleColumns[fromIndex] = this.visibleColumns[toIndex];
61
61
  this.visibleColumns[toIndex] = temp;
62
- this.emitUpdatedColumns();
62
+ // Staged only — applied/emitted when the user clicks Save (see template).
63
63
  }
64
64
  // Column Selection functionality
65
65
  toggleSelectAll() {
@@ -68,13 +68,13 @@ class DataColumnsComponent {
68
68
  this.visibleColumns.forEach((column) => {
69
69
  this.columnVisibility.set(column.id, newValue);
70
70
  });
71
- this.emitUpdatedColumns();
71
+ // Staged only — applied/emitted when the user clicks Save (see template).
72
72
  }
73
73
  toggleColumnVisibility(columnId) {
74
74
  const currentValue = this.columnVisibility.get(columnId);
75
75
  this.columnVisibility.set(columnId, !currentValue);
76
76
  this.updateSelectAllStatus();
77
- this.emitUpdatedColumns();
77
+ // Staged only — applied/emitted when the user clicks Save (see template).
78
78
  }
79
79
  isColumnVisible(columnId) {
80
80
  return this.columnVisibility.get(columnId) ?? false;