@rivet-health/design-system 27.0.1 → 27.1.0

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.
@@ -37,7 +37,7 @@ export class TableColumnSettingsSideSheetComponent {
37
37
  });
38
38
  const fuse = new Fuse(allColumns, {
39
39
  keys: ['resolvedName'],
40
- distance: 0,
40
+ ignoreLocation: true,
41
41
  threshold: 0,
42
42
  });
43
43
  return { fuse, allColumns };
@@ -150,14 +150,14 @@ export class TableColumnSettingsSideSheetComponent {
150
150
  }
151
151
  }
152
152
  TableColumnSettingsSideSheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableColumnSettingsSideSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
- TableColumnSettingsSideSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnPinChange(column, false)\"\n >\n Unfreeze column\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition"] }, { kind: "component", type: i6.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: i7.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i8.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
153
+ TableColumnSettingsSideSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0)\"\n >\n Un-freeze columns\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition"] }, { kind: "component", type: i6.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: i7.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i8.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
154
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableColumnSettingsSideSheetComponent, decorators: [{
155
155
  type: Component,
156
- args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnPinChange(column, false)\"\n >\n Unfreeze column\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"] }]
156
+ args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0)\"\n >\n Un-freeze columns\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"] }]
157
157
  }], propDecorators: { manager: [{
158
158
  type: Input
159
159
  }], anchor: [{
160
160
  type: ViewChild,
161
161
  args: ['trigger', { read: ElementRef }]
162
162
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQXNCdkUsTUFBTSxPQUFPLHFDQUFxQztJQU5sRDtRQWtCVyxTQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUErSGxFLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBQ25DLHlCQUFvQixHQUFrQixJQUFJLENBQUM7S0F1QzVDO0lBcEtDLFFBQVE7UUFDTixJQUFJLENB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LElBQUksRUFBRTtZQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUM5QixPQUFPLEVBQUUsT0FBTzthQUNqQixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O2tJQXZMVSxxQ0FBcUM7c0hBQXJDLHFDQUFxQywwTEFTbEIsVUFBVSw2QkN4QzFDLG9vUEFnTkE7MkZEakxhLHFDQUFxQztrQkFOakQsU0FBUzsrQkFDRSxzQ0FBc0MsbUJBRy9CLHVCQUF1QixDQUFDLE1BQU07OEJBUy9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixNQUFNO3NCQURMLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgRnVzZSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92aXN1YWxpemF0aW9uL2hpZ2hsaWdodC9oaWdobGlnaHQuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG50eXBlIENvbHVtbkxpc3Q8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPSAoUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4gJiB7XG4gIHJlc29sdmVkTmFtZTogQyB8IHN0cmluZztcbiAgaGlnaGxpZ2h0SW5kaWNlczogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgc3RhdGVJbmRleDogbnVtYmVyO1xuICBpc0xhc3RQaW5uZWRDb2x1bW46IGJvb2xlYW47XG59KVtdO1xuXG50eXBlIENvbHVtbkdyb3VwczxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPiA9IHtcbiAgZW5hYmxlZENvbHVtbnM6IENvbHVtbkxpc3Q8Qz47XG4gIGRpc2FibGVkQ29sdW1uczogQ29sdW1uTGlzdDxDPjtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi10YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uU2V0dGluZ3NTaWRlU2hlZXRDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPiBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2VGFibGUuTWFuYWdlcjxSLCBDLCBGPjtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGFuY2hvcj86IEVsZW1lbnRSZWY7XG5cbiAgcmVhZG9ubHkgb3BlbiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGZpbHRlclF1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgcmVhZG9ubHkgc2VhcmNoaW5nID0gdGhpcy5maWx0ZXJRdWVyeS5waXBlKG1hcChxdWVyeSA9PiAhIXF1ZXJ5KSk7XG5cbiAgY29sdW1uTGlzdD86IE9ic2VydmFibGU8Q29sdW1uR3JvdXBzPEM+PjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbHVtbkxpc3QgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWFuYWdlciEuc3RhdGUucGlwZShcbiAgICAgICAgbWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnNMZW5ndGggPSBzLmRpc3BsYXkuYWxsQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHMuZGlzcGxheS5hbGxDb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXh0Q29sdW1uUGlubmVkID1cbiAgICAgICAgICAgICAgaSArIDIgPD0gY29sdW1uc0xlbmd0aFxuICAgICAgICAgICAgICAgID8gcy5kaXNwbGF5LmFsbENvbHVtbnNbaSArIDFdLnBpbm5lZFxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgcmVzb2x2ZWROYW1lOlxuICAgICAgICAgICAgICAgIHMuZGlzcGxheS5jb2x1bW5OYW1lTWFwLmdldChjb2x1bW4ubmFtZSkgPz8gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIHN0YXRlSW5kZXg6IGksXG4gICAgICAgICAgICAgIGlzTGFzdFBpbm5lZENvbHVtbjogY29sdW1uLnBpbm5lZCAmJiAhbmV4dENvbHVtblBpbm5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFsbENvbHVtbnMsIHtcbiAgICAgICAgICAgIGtleXM6IFsncmVzb2x2ZWROYW1lJ10sXG4gICAgICAgICAgICBkaXN0YW5jZTogMCxcbiAgICAgICAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyBmdXNlLCBhbGxDb2x1bW5zIH07XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHRoaXMuZmlsdGVyUXVlcnksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3sgZnVzZSwgYWxsQ29sdW1ucyB9LCBmaWx0ZXJRdWVyeV0pID0+IHtcbiAgICAgICAgaWYgKGZpbHRlclF1ZXJ5KSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKGZpbHRlclF1ZXJ5KS5tYXAobWF0Y2ggPT4gKHtcbiAgICAgICAgICAgIC4uLm1hdGNoLml0ZW0sXG4gICAgICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXG4gICAgICAgICAgICAgIC4uLihtYXRjaC5tYXRjaGVzPy5maW5kKHJlc3VsdCA9PiByZXN1bHQua2V5ID09PSAncmVzb2x2ZWROYW1lJylcbiAgICAgICAgICAgICAgICA/LmluZGljZXMgfHwgW10pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgZW5hYmxlZENvbHVtbnMgPSBtYXRjaGVzLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmVuYWJsZWQpO1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkQ29sdW1ucyA9IG1hdGNoZXMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmVuYWJsZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVuYWJsZWRDb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZWRDb2x1bW5zLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxWaXNhYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXSxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRDb2x1bW5zID0gYWxsVmlzYWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbHVtbiA9PiBjb2x1bW4uZW5hYmxlZCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWRDb2x1bW5zID0gYWxsVmlzYWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbHVtbiA9PiAhY29sdW1uLmVuYWJsZWQsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmFibGVkQ29sdW1uczogZW5hYmxlZENvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZWRDb2x1bW5zOiBkaXNhYmxlZENvbHVtbnMsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY29sdW1uRW5hYmxlZENoYW5nZShjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnLFxuICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZSxcbiAgICAgIGVuYWJsZWQsXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5QaW5DaGFuZ2UoY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiwgcGlubmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtblBpbkNoYW5nZScsXG4gICAgICBjb2x1bW46IGNvbHVtbi5uYW1lLFxuICAgICAgcGlubmVkLFxuICAgIH0pO1xuICB9XG4gIHJlc2V0VG9EZWZhdWx0KCkge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdyZXNldFRvRGVmYXVsdENvbHVtbnMnLFxuICAgIH0pO1xuICB9XG5cbiAgY29sdW1uTW92ZVRvKGNvbHVtbjogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uTW92ZVRvQ2hhbmdlJyxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbkZyZWV6ZVVwVG8oZnJlZXplOiBib29sZWFuLCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJyxcbiAgICAgIGZyZWV6ZSxcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgYWxsQ29sdW1uc0Rpc2FibGVkKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPT0gMCAmJiBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgYWxsQ29sdW1uc0VuYWJsZWQoY29sdW1uczogQ29sdW1uR3JvdXBzPEM+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID09IDAgJiYgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBlbmFibGVBbGxDb2x1bW5zKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZScsXG4gICAgICBlbmFibGVkLFxuICAgIH0pO1xuICB9XG5cbiAgZHJhZ2dlZENvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdnZWRDb2x1bW5OYW1lOiBDIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdnZWRPdmVyQ29sdW1uSWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBkcmFnU3RhcnQoaWR4OiBudW1iZXIsIG5hbWU6IEMpIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5JZHggPSBpZHg7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBkcmFnT3ZlcihvbnRvSWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gb250b0lkeDtcbiAgfVxuXG4gIGRyb3Aob250b0lkeDogbnVtYmVyLCBzdGF0ZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5PcmRlckNoYW5nZScsXG4gICAgICAgIHByZXZpb3VzSW5kZXg6IHRoaXMuZHJhZ2dlZENvbHVtbklkeCxcbiAgICAgICAgbmV3SW5kZXg6IHN0YXRlSW5kZXgsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnZ2VkQ29sdW1uTmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZHJvcEVuYWJsZWRTdGF0ZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnLFxuICAgICAgICBjb2x1bW46IHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUsXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG51bGw7XG4gICAgICB0aGlzLmRyYWdnZWRDb2x1bW5OYW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlZENvbHVtbnNXaXRoT2Zmc2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbn1cbiIsIjxidXR0b24gI3RyaWdnZXIgcml2QnV0dG9uIChjbGljayk9XCJvcGVuLm5leHQodHJ1ZSlcIj5Db2x1bW5zPC9idXR0b24+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5MaXN0IHwgYXN5bmM7IGxldCBjb2x1bW5zXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcGVuIHwgYXN5bmNcIj5cbiAgICA8cml2LXNpZGUtc2hlZXQgKGNsb3NlKT1cIm9wZW4ubmV4dChmYWxzZSk7IGZpbHRlclF1ZXJ5Lm5leHQoJycpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICA8c3Bhbj5Db2x1bW5zPC9zcGFuPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICBbaWNvbl09XCInWCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW4ubmV4dChmYWxzZSk7IGZpbHRlclF1ZXJ5Lm5leHQoJycpXCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cml2LXNlYXJjaFxuICAgICAgICAgIFtuYW1lXT1cIidjb2x1bW4tc2VhcmNoJ1wiXG4gICAgICAgICAgW3ZhbHVlXT1cIihmaWx0ZXJRdWVyeSB8IGFzeW5jKSB8fCAnJ1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpbHRlclF1ZXJ5Lm5leHQoJGV2ZW50KVwiXG4gICAgICAgID48L3Jpdi1zZWFyY2g+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIlxuICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKHRydWUpXCJcbiAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbi1oZWFkZXItbGFiZWxcIj5TaG93biBpbiB0YWJsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxDb2x1bW5zRW5hYmxlZChjb2x1bW5zKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuYWJsZUFsbENvbHVtbnMoZmFsc2UpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEhpZGUgYWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMuZW5hYmxlZENvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRyb3BwYWJsZV09XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydChjb2x1bW4uc3RhdGVJbmRleCwgY29sdW1uLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcihpKVwiXG4gICAgICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wKGksIGNvbHVtbi5zdGF0ZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLXRvcF09XCJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ID4gaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5kcmFnZ2VkLW92ZXItYm90dG9tXT1cIlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNvbHVtbklkeCA9PT0gaSAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggPCBpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5UZW1wbGF0ZTsgY29udGV4dDogeyBjb2x1bW4gfVwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmlzTGFzdFBpbm5lZENvbHVtbiAmJiAhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uIHNjcm9sbC1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZyb3plblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlubmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cml2LWljb24gW25hbWVdPVwiJ1BpbkluYWN0aXZlJ1wiIFtzaXplXT1cIjIwXCI+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RnJvemVuIHRocm91Z2ggaGVyZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbcml2VG9vbHRpcF09XCInVW4tZnJlZXplIGNvbHVtbnMnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWNvbHVtbi5lbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInWCdcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW5GcmVlemVVcFRvKGZhbHNlLCBjb2x1bW4uc3RhdGVJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID09IDAgJiYgIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCJcbiAgICAgICAgICAgIChkcm9wKT1cImRyb3BFbmFibGVkU3RhdGUodHJ1ZSlcIlxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPk5vIGNvbHVtbnMgc2hvd248L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIHJpdkJ1dHRvbiBbdmFyaWFudF09XCInZ2hvc3QnXCIgKGNsaWNrKT1cInJlc2V0VG9EZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgUmVzZXQgdG8gZGVmYXVsdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKCEoc2VhcmNoaW5nIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgKChzZWFyY2hpbmcgfCBhc3luYykgJiYgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwKSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKGZhbHNlKVwiXG4gICAgICAgICAgICAoZHJhZ292ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4taGVhZGVyLWxhYmVsXCI+SGlkZGVuIGZyb20gdGFibGU8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxDb2x1bW5zRGlzYWJsZWQoY29sdW1ucylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmFibGVBbGxDb2x1bW5zKHRydWUpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNob3cgYWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kcmFnZ2FibGVdPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRyb3BwYWJsZV09XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5uYW1lKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBkcmFnT3ZlcihpICsgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoZHJvcCk9XCJcbiAgICAgICAgICAgICAgICAgIGRyb3AoaSArIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoLCBjb2x1bW4uc3RhdGVJbmRleClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5UZW1wbGF0ZTsgY29udGV4dDogeyBjb2x1bW4gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcml2LXNpZGUtc2hlZXQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uVGVtcGxhdGUgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIHNjcm9sbC1wYWRkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyZW9yZGVyXCIgKm5nSWY9XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiPlxuICAgICAgICA8cml2LWljb24gW25hbWVdPVwiJ1Jlb3JkZXInXCIgW3NpemVdPVwiMjBcIj48L3Jpdi1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHJpdi1oaWdobGlnaHRcbiAgICAgICAgW3RleHRdPVwiY29sdW1uLnJlc29sdmVkTmFtZVwiXG4gICAgICAgIFtpbmRpY2VzXT1cImNvbHVtbi5oaWdobGlnaHRJbmRpY2VzXCJcbiAgICAgID48L3Jpdi1oaWdobGlnaHQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDxyaXYtbWVudSBjbGFzcz1cImhpZGRlblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZW5hYmxlZCAmJiAhY29sdW1uLmlzTGFzdFBpbm5lZENvbHVtblwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5GcmVlemVVcFRvKHRydWUsIGNvbHVtbi5zdGF0ZUluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgICBGcmVlemUgdXAgdG8gY29sdW1uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZW5hYmxlZCAmJiBjb2x1bW4uaXNMYXN0UGlubmVkQ29sdW1uXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtblBpbkNoYW5nZShjb2x1bW4sIGZhbHNlKVwiXG4gICAgICAgID5cbiAgICAgICAgICBVbmZyZWV6ZSBjb2x1bW5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gcml2LW1lbnUtaXRlbSAoY2xpY2spPVwiY29sdW1uTW92ZVRvKGNvbHVtbiwgJ3N0YXJ0JylcIj5cbiAgICAgICAgICBNb3ZlIHRvIHN0YXJ0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHJpdi1tZW51LWl0ZW0gKGNsaWNrKT1cImNvbHVtbk1vdmVUbyhjb2x1bW4sICdlbmQnKVwiPlxuICAgICAgICAgIE1vdmUgdG8gZW5kXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbiwgIWNvbHVtbi5lbmFibGVkKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2x1bW4uZW5hYmxlZCA/ICdIaWRlIGNvbHVtbicgOiAnU2hvdyBjb2x1bW4nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9yaXYtbWVudT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcml2QnV0dG9uXG4gICAgICAgIFtyaXZUb29sdGlwXT1cImNvbHVtbi5lbmFibGVkID8gJ0hpZGUgY29sdW1uJyA6ICdTaG93IGNvbHVtbidcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWNvbHVtbi5lbmFibGVkXCJcbiAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICBbaWNvbl09XCJjb2x1bW4uZW5hYmxlZCA/ICdFeWUnIDogJ0V5ZU9mZidcIlxuICAgICAgICAoY2xpY2spPVwiY29sdW1uRW5hYmxlZENoYW5nZShjb2x1bW4sICFjb2x1bW4uZW5hYmxlZClcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQXNCdkUsTUFBTSxPQUFPLHFDQUFxQztJQU5sRDtRQWtCVyxTQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUErSGxFLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBQ25DLHlCQUFvQixHQUFrQixJQUFJLENBQUM7S0F1QzVDO0lBcEtDLFFBQVE7UUFDTixJQUFJLENB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SyxJQUFJLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDOUIsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELHlCQUF5QixDQUFDLEtBQWE7UUFDckMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztrSUF2TFUscUNBQXFDO3NIQUFyQyxxQ0FBcUMsMExBU2xCLFVBQVUsNkJDeEMxQywwbVBBZ05BOzJGRGpMYSxxQ0FBcUM7a0JBTmpELFNBQVM7K0JBQ0Usc0NBQXNDLG1CQUcvQix1QkFBdUIsQ0FBQyxNQUFNOzhCQVMvQyxPQUFPO3NCQUROLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IEZ1c2UgZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxudHlwZSBDb2x1bW5MaXN0PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+ID0gKFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+ICYge1xuICByZXNvbHZlZE5hbWU6IEMgfCBzdHJpbmc7XG4gIGhpZ2hsaWdodEluZGljZXM6IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gIHN0YXRlSW5kZXg6IG51bWJlcjtcbiAgaXNMYXN0UGlubmVkQ29sdW1uOiBib29sZWFuO1xufSlbXTtcblxudHlwZSBDb2x1bW5Hcm91cHM8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPSB7XG4gIGVuYWJsZWRDb2x1bW5zOiBDb2x1bW5MaXN0PEM+O1xuICBkaXNhYmxlZENvbHVtbnM6IENvbHVtbkxpc3Q8Qz47XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbHVtblNldHRpbmdzU2lkZVNoZWV0Q29tcG9uZW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4gaW1wbGVtZW50cyBPbkluaXRcbntcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlRhYmxlLk1hbmFnZXI8UiwgQywgRj47XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBhbmNob3I/OiBFbGVtZW50UmVmO1xuXG4gIHJlYWRvbmx5IG9wZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICByZWFkb25seSBmaWx0ZXJRdWVyeSA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gIHJlYWRvbmx5IHNlYXJjaGluZyA9IHRoaXMuZmlsdGVyUXVlcnkucGlwZShtYXAocXVlcnkgPT4gISFxdWVyeSkpO1xuXG4gIGNvbHVtbkxpc3Q/OiBPYnNlcnZhYmxlPENvbHVtbkdyb3VwczxDPj47XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5MaXN0ID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmFnZXIhLnN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gcy5kaXNwbGF5LmFsbENvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBzLmRpc3BsYXkuYWxsQ29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbHVtblBpbm5lZCA9XG4gICAgICAgICAgICAgIGkgKyAyIDw9IGNvbHVtbnNMZW5ndGhcbiAgICAgICAgICAgICAgICA/IHMuZGlzcGxheS5hbGxDb2x1bW5zW2kgKyAxXS5waW5uZWRcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIHJlc29sdmVkTmFtZTpcbiAgICAgICAgICAgICAgICBzLmRpc3BsYXkuY29sdW1uTmFtZU1hcC5nZXQoY29sdW1uLm5hbWUpID8/IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBzdGF0ZUluZGV4OiBpLFxuICAgICAgICAgICAgICBpc0xhc3RQaW5uZWRDb2x1bW46IGNvbHVtbi5waW5uZWQgJiYgIW5leHRDb2x1bW5QaW5uZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhbGxDb2x1bW5zLCB7XG4gICAgICAgICAgICBrZXlzOiBbJ3Jlc29sdmVkTmFtZSddLFxuICAgICAgICAgICAgaWdub3JlTG9jYXRpb246IHRydWUsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgZnVzZSwgYWxsQ29sdW1ucyB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0aGlzLmZpbHRlclF1ZXJ5LFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt7IGZ1c2UsIGFsbENvbHVtbnMgfSwgZmlsdGVyUXVlcnldKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmdXNlLnNlYXJjaChmaWx0ZXJRdWVyeSkubWFwKG1hdGNoID0+ICh7XG4gICAgICAgICAgICAuLi5tYXRjaC5pdGVtLFxuICAgICAgICAgICAgaGlnaGxpZ2h0SW5kaWNlczogW1xuICAgICAgICAgICAgICAuLi4obWF0Y2gubWF0Y2hlcz8uZmluZChyZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3Jlc29sdmVkTmFtZScpXG4gICAgICAgICAgICAgICAgPy5pbmRpY2VzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGNvbnN0IGVuYWJsZWRDb2x1bW5zID0gbWF0Y2hlcy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lbmFibGVkKTtcbiAgICAgICAgICBjb25zdCBkaXNhYmxlZENvbHVtbnMgPSBtYXRjaGVzLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbmFibGVkQ29sdW1ucyxcbiAgICAgICAgICAgIGRpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsVmlzYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgaGlnaGxpZ2h0SW5kaWNlczogW10sXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IGFsbFZpc2FibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICBjb2x1bW4gPT4gY29sdW1uLmVuYWJsZWQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkQ29sdW1ucyA9IGFsbFZpc2FibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICBjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5hYmxlZENvbHVtbnM6IGVuYWJsZWRDb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVkQ29sdW1uczogZGlzYWJsZWRDb2x1bW5zLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbHVtbkVuYWJsZWRDaGFuZ2UoY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJyxcbiAgICAgIGNvbHVtbjogY29sdW1uLm5hbWUsXG4gICAgICBlbmFibGVkLFxuICAgIH0pO1xuICB9XG5cbiAgY29sdW1uUGluQ2hhbmdlKGNvbHVtbjogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sIHBpbm5lZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnLFxuICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZSxcbiAgICAgIHBpbm5lZCxcbiAgICB9KTtcbiAgfVxuICByZXNldFRvRGVmYXVsdCgpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbk1vdmVUbyhjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZScsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLm5hbWUsXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5GcmVlemVVcFRvKGZyZWV6ZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZScsXG4gICAgICBmcmVlemUsXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIGFsbENvbHVtbnNEaXNhYmxlZChjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID09IDAgJiYgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgZW5hYmxlQWxsQ29sdW1ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnLFxuICAgICAgZW5hYmxlZCxcbiAgICB9KTtcbiAgfVxuXG4gIGRyYWdnZWRDb2x1bW5JZHg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkQ29sdW1uTmFtZTogQyB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkT3ZlckNvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ1N0YXJ0KGlkeDogbnVtYmVyLCBuYW1lOiBDKSB7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uSWR4ID0gaWR4O1xuICAgIHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZHJhZ092ZXIob250b0lkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG9udG9JZHg7XG4gIH1cblxuICBkcm9wKG9udG9JZHg6IG51bWJlciwgc3RhdGVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnLFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLmRyYWdnZWRDb2x1bW5JZHgsXG4gICAgICAgIG5ld0luZGV4OiBzdGF0ZUluZGV4LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGRyb3BFbmFibGVkU3RhdGUoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5OYW1lICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJyxcbiAgICAgICAgY29sdW1uOiB0aGlzLmRyYWdnZWRDb2x1bW5OYW1lLFxuICAgICAgICBlbmFibGVkOiBlbmFibGVkLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnZ2VkQ29sdW1uTmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZWRDb2x1bW5zV2l0aE9mZnNldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG4iLCI8YnV0dG9uICN0cmlnZ2VyIHJpdkJ1dHRvbiAoY2xpY2spPVwib3Blbi5uZXh0KHRydWUpXCI+Q29sdW1uczwvYnV0dG9uPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uTGlzdCB8IGFzeW5jOyBsZXQgY29sdW1uc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib3BlbiB8IGFzeW5jXCI+XG4gICAgPHJpdi1zaWRlLXNoZWV0IChjbG9zZSk9XCJvcGVuLm5leHQoZmFsc2UpOyBmaWx0ZXJRdWVyeS5uZXh0KCcnKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgPHNwYW4+Q29sdW1uczwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuLm5leHQoZmFsc2UpOyBmaWx0ZXJRdWVyeS5uZXh0KCcnKVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICBbbmFtZV09XCInY29sdW1uLXNlYXJjaCdcIlxuICAgICAgICAgIFt2YWx1ZV09XCIoZmlsdGVyUXVlcnkgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWx0ZXJRdWVyeS5uZXh0KCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uc1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCJcbiAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZSh0cnVlKVwiXG4gICAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4taGVhZGVyLWxhYmVsXCI+U2hvd24gaW4gdGFibGU8L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsQ29sdW1uc0VuYWJsZWQoY29sdW1ucylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmFibGVBbGxDb2x1bW5zKGZhbHNlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBIaWRlIGFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcChpLCBjb2x1bW4uc3RhdGVJbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci10b3BdPVwiXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA+IGlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLWJvdHRvbV09XCJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4IDwgaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uVGVtcGxhdGU7IGNvbnRleHQ6IHsgY29sdW1uIH1cIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5pc0xhc3RQaW5uZWRDb2x1bW4gJiYgIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcm96ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbm5lZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidQaW5JbmFjdGl2ZSdcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkZyb3plbiB0aHJvdWdoIGhlcmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW3JpdlRvb2x0aXBdPVwiJ1VuLWZyZWV6ZSBjb2x1bW5zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFjb2x1bW4uZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uRnJlZXplVXBUbyhmYWxzZSwgY29sdW1uLnN0YXRlSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmICEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWhlYWRlclwiXG4gICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKHRydWUpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj5ObyBjb2x1bW5zIHNob3duPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiByaXZCdXR0b24gW3ZhcmlhbnRdPVwiJ2dob3N0J1wiIChjbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgIFJlc2V0IHRvIGRlZmF1bHRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGl2aWRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICghKHNlYXJjaGluZyB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICgoc2VhcmNoaW5nIHwgYXN5bmMpICYmIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZShmYWxzZSlcIlxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPkhpZGRlbiBmcm9tIHRhYmxlPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsQ29sdW1uc0Rpc2FibGVkKGNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlQWxsQ29sdW1ucyh0cnVlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTaG93IGFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmRpc2FibGVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KGNvbHVtbi5zdGF0ZUluZGV4LCBjb2x1bW4ubmFtZSlcIlxuICAgICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgZHJhZ092ZXIoaSArIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGRyb3ApPVwiXG4gICAgICAgICAgICAgICAgICBkcm9wKGkgKyBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCwgY29sdW1uLnN0YXRlSW5kZXgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uVGVtcGxhdGU7IGNvbnRleHQ6IHsgY29sdW1uIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1zaWRlLXNoZWV0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NvbHVtblRlbXBsYXRlIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicmVvcmRlclwiICpuZ0lmPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIj5cbiAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidSZW9yZGVyJ1wiIFtzaXplXT1cIjIwXCI+PC9yaXYtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgIFt0ZXh0XT1cImNvbHVtbi5yZXNvbHZlZE5hbWVcIlxuICAgICAgICBbaW5kaWNlc109XCJjb2x1bW4uaGlnaGxpZ2h0SW5kaWNlc1wiXG4gICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8cml2LW1lbnUgY2xhc3M9XCJoaWRkZW5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVuYWJsZWQgJiYgIWNvbHVtbi5waW5uZWRcIlxuICAgICAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwiY29sdW1uRnJlZXplVXBUbyh0cnVlLCBjb2x1bW4uc3RhdGVJbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgRnJlZXplIHVwIHRvIGNvbHVtblxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVuYWJsZWQgJiYgY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5GcmVlemVVcFRvKGZhbHNlLCAwKVwiXG4gICAgICAgID5cbiAgICAgICAgICBVbi1mcmVlemUgY29sdW1uc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiByaXYtbWVudS1pdGVtIChjbGljayk9XCJjb2x1bW5Nb3ZlVG8oY29sdW1uLCAnc3RhcnQnKVwiPlxuICAgICAgICAgIE1vdmUgdG8gc3RhcnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gcml2LW1lbnUtaXRlbSAoY2xpY2spPVwiY29sdW1uTW92ZVRvKGNvbHVtbiwgJ2VuZCcpXCI+XG4gICAgICAgICAgTW92ZSB0byBlbmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkVuYWJsZWRDaGFuZ2UoY29sdW1uLCAhY29sdW1uLmVuYWJsZWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbHVtbi5lbmFibGVkID8gJ0hpZGUgY29sdW1uJyA6ICdTaG93IGNvbHVtbicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1tZW51PlxuICAgICAgPGJ1dHRvblxuICAgICAgICByaXZCdXR0b25cbiAgICAgICAgW3JpdlRvb2x0aXBdPVwiY29sdW1uLmVuYWJsZWQgPyAnSGlkZSBjb2x1bW4nIDogJ1Nob3cgY29sdW1uJ1wiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgIFtpY29uXT1cImNvbHVtbi5lbmFibGVkID8gJ0V5ZScgOiAnRXllT2ZmJ1wiXG4gICAgICAgIChjbGljayk9XCJjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbiwgIWNvbHVtbi5lbmFibGVkKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -5460,7 +5460,7 @@ class TableColumnSettingsSideSheetComponent {
5460
5460
  });
5461
5461
  const fuse = new Fuse(allColumns, {
5462
5462
  keys: ['resolvedName'],
5463
- distance: 0,
5463
+ ignoreLocation: true,
5464
5464
  threshold: 0,
5465
5465
  });
5466
5466
  return { fuse, allColumns };
@@ -5577,10 +5577,10 @@ class TableColumnSettingsSideSheetComponent {
5577
5577
  }
5578
5578
  }
5579
5579
  TableColumnSettingsSideSheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableColumnSettingsSideSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5580
- TableColumnSettingsSideSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnPinChange(column, false)\"\n >\n Unfreeze column\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: MenuComponent, selector: "riv-menu", inputs: ["preferredPosition"] }, { kind: "component", type: MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5580
+ TableColumnSettingsSideSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0)\"\n >\n Un-freeze columns\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "active"] }, { kind: "component", type: HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: MenuComponent, selector: "riv-menu", inputs: ["preferredPosition"] }, { kind: "component", type: MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5581
5581
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableColumnSettingsSideSheetComponent, decorators: [{
5582
5582
  type: Component,
5583
- args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.isLastPinnedColumn\"\n riv-menu-item\n (click)=\"columnPinChange(column, false)\"\n >\n Unfreeze column\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"] }]
5583
+ args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, column.stateIndex)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n <div\n *ngIf=\"column.isLastPinnedColumn && !(searching | async)\"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"columnFreezeUpTo(false, column.stateIndex)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"columns.enabledColumns.length == 0 && !(searching | async)\"\n class=\"column-header\"\n (drop)=\"dropEnabledState(true)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n (!(searching | async) ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false)\"\n (dragover)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n *ngIf=\"!(searching | async)\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"!(searching | async)\"\n [attr.droppable]=\"!(searching | async)\"\n (dragstart)=\"dragStart(column.stateIndex, column.name)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(i + columns.enabledColumns.length, column.stateIndex)\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"columnTemplate; context: { column }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\">\n <div class=\"column scroll-padding\">\n <div class=\"column\">\n <span class=\"reorder\" *ngIf=\"!(searching | async)\">\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu class=\"hidden\">\n <button\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(true, column.stateIndex)\"\n >\n Freeze up to column\n </button>\n <button\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0)\"\n >\n Un-freeze columns\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n Move to start\n </button>\n <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n Move to end\n </button>\n <button\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n rivButton\n [rivTooltip]=\"column.enabled ? 'Hide column' : 'Show column'\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled)\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"] }]
5584
5584
  }], propDecorators: { manager: [{
5585
5585
  type: Input
5586
5586
  }], anchor: [{