@rivet-health/design-system 16.2.0 → 16.2.1

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.
@@ -110,10 +110,10 @@ export class TableComponent {
110
110
  }
111
111
  }
112
112
  TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
- TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "riv-table", inputs: { manager: "manager" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)" } }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\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: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i4.CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: i5.CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkedColorToken", "indeterminateColorToken", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: i6.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i7.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: i8.SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "maxCalloutHeight", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "directive", type: i9.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i10.TableHeaderResizeHandleComponent, selector: "table-header-resize-handle", outputs: ["dragResize"] }, { kind: "component", type: i11.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "riv-table", inputs: { manager: "manager" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)" } }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.displayName ?? column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\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: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i4.CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: i5.CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkedColorToken", "indeterminateColorToken", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: i6.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i7.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: i8.SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "maxCalloutHeight", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "directive", type: i9.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i10.TableHeaderResizeHandleComponent, selector: "table-header-resize-handle", outputs: ["dragResize"] }, { kind: "component", type: i11.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
114
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, decorators: [{
115
115
  type: Component,
116
- args: [{ selector: 'riv-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"] }]
116
+ args: [{ selector: 'riv-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.displayName ?? column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"] }]
117
117
  }], propDecorators: { manager: [{
118
118
  type: Input
119
119
  }], cellTemplate: [{
@@ -132,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
132
132
  type: HostListener,
133
133
  args: ['document:keyup', ['$event']]
134
134
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWNwQyxNQUFNLE9BQU8sY0FBYztJQU4zQjtRQTBCVyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDdkMsNkJBQXdCLEdBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDekQsQ0FBQztRQUVLLG9CQUFlLEdBQ3RCO1lBQ0U7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUMxQixLQUFLLEVBQUUsUUFBUTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7U0FDRixDQUFDO1FBRUssZUFBVSxHQUF5QyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNyRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRVEsb0JBQWUsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQXdCN0QscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2Qyx5QkFBb0IsR0FBa0IsSUFBSSxDQUFDO1FBNEJuQyxVQUFLLEdBQVksS0FBSyxDQUFDO0tBcUNoQztJQXpGQyxRQUFRLENBQUMsTUFBUyxFQUFFLEtBQW9CO1FBQ3RDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxJQUFJLGNBQWMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUN6QixJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixNQUFNO29CQUNOLGNBQWMsRUFBRSxjQUFjO2lCQUMvQixDQUFDLENBQUM7YUFDSjtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLE1BQThCO1FBQ3JDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFFO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBS0QsU0FBUyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWU7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWU7UUFDbEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3BDLFFBQVEsRUFBRSxPQUFPO2FBQ2xCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQVU7UUFDeEIsSUFBSSxDQUFDLFlBQVksS0FBSztZQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN6QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSTtZQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOztZQUN4RCxPQUFPLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFLRCxPQUFPLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFHRCxLQUFLLENBQUMsS0FBb0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYyxFQUFFLFFBQWlCO1FBQy9DLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLEVBQUUsRUFBRSxLQUFLO1lBQ1QsUUFBUTtZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCLEVBQUUsTUFBOEI7UUFDM0QsSUFBSSxNQUFNLENBQUMsbUJBQW1CO1lBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELElBQUksTUFBTSxDQUFDLG9CQUFvQjtZQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsT0FBeUI7UUFFekIsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsT0FBeUI7UUFFekIsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNyQyxDQUFDOzsyR0FqSVUsY0FBYzsrRkFBZCxjQUFjLDhjQ3pCM0Isd3VTQXFQQTsyRkQ1TmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU07OEJBUS9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixZQUFZO3NCQURYLFlBQVk7dUJBQUMsTUFBTTtnQkFPcEIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE1BQU07Z0JBSXBCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxXQUFXO2dCQStFekIsT0FBTztzQkFETixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU01QyxLQUFLO3NCQURKLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUcmFja0J5RnVuY3Rpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG50eXBlIFBhZ2VTaXplT3B0aW9uID0ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPiB7XG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZUYWJsZS5NYW5hZ2VyPFIsIEMsIEY+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2NlbGwnKVxuICBjZWxsVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7XG4gICAgcm93OiBSaXZUYWJsZS5GdWxsUm93PFI+O1xuICAgIGNvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPjtcbiAgfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnbWVudScpXG4gIG1lbnVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgcm93OiBSaXZUYWJsZS5GdWxsUm93PFI+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGlvbicpXG4gIHNlbGVjdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEY+IH0+O1xuXG4gIHJlYWRvbmx5IGNvbnRhaW5lclNpemUgPSBuZXcgU3ViamVjdDxET01SZWN0PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DYWxsb3V0UG9zaXRpb246IE9ic2VydmFibGU8RE9NUmVjdD4gPVxuICAgIHRoaXMuY29udGFpbmVyU2l6ZS5waXBlKFxuICAgICAgbWFwKHJlY3QgPT4gbmV3IERPTVJlY3QocmVjdC54ICsgNDQsIHJlY3QueSAtIDEyLCAwLCAwKSksXG4gICAgKTtcblxuICByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnM6IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb25Hcm91cDxQYWdlU2l6ZU9wdGlvbj5bXSA9XG4gICAgW1xuICAgICAge1xuICAgICAgICBvcHRpb25zOiBSaXZUYWJsZS5wYWdlU2l6ZXMubWFwKHBhZ2VTaXplID0+ICh7XG4gICAgICAgICAgaWQ6IHBhZ2VTaXplLnRvU3RyaW5nKCksXG4gICAgICAgICAgdGl0bGU6IHBhZ2VTaXplLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsdWU6IHBhZ2VTaXplLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIF07XG5cbiAgcmVhZG9ubHkgdHJhY2tCeVJvdzogVHJhY2tCeUZ1bmN0aW9uPFJpdlRhYmxlLkZ1bGxSb3c8Uj4+ID0gKF8sIHJvdykgPT5cbiAgICByb3cuaWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wb3JhcnlXaWR0aHM6IE1hcDxDLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICBzZXRXaWR0aChjb2x1bW46IEMsIHdpZHRoOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHdpZHRoID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZW1wb3JhcnlXaWR0aCA9IHRoaXMudGVtcG9yYXJ5V2lkdGhzLmdldChjb2x1bW4pO1xuICAgICAgaWYgKHRlbXBvcmFyeVdpZHRoKSB7XG4gICAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnY29sdW1uV2lkdGhDaGFuZ2UnLFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBwcmVmZXJyZWRXaWR0aDogdGVtcG9yYXJ5V2lkdGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50ZW1wb3JhcnlXaWR0aHMuZGVsZXRlKGNvbHVtbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcG9yYXJ5V2lkdGhzLnNldChjb2x1bW4sIHdpZHRoKTtcbiAgICB9XG4gIH1cbiAgZ2V0V2lkdGgoY29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+KTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy50ZW1wb3JhcnlXaWR0aHMuaGFzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMudGVtcG9yYXJ5V2lkdGhzLmdldChjb2x1bW4ubmFtZSkhLCBjb2x1bW4ubWluV2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29sdW1uLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIGRyYWdnZWRDb2x1bW5JZHg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkT3ZlckNvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ1N0YXJ0KGlkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uSWR4ID0gaWR4O1xuICB9XG5cbiAgZHJhZ092ZXIob250b0lkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG9udG9JZHg7XG4gIH1cblxuICBkcm9wKG9udG9JZHg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJyxcbiAgICAgICAgcHJldmlvdXNJbmRleDogdGhpcy5kcmFnZ2VkQ29sdW1uSWR4LFxuICAgICAgICBuZXdJbmRleDogb250b0lkeCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykgcmV0dXJuIGU7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiBlICE9PSBudWxsKSByZXR1cm4gZS50b1N0cmluZygpO1xuICAgIGVsc2UgcmV0dXJuICdBbiBlcnJvciBvY2N1cnJlZC4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzaGlmdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxuICBrZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgfVxuXG4gIHNlbGVjdGlvbkNoYW5nZShyb3dJZDogUlsnaWQnXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnLFxuICAgICAgaWQ6IHJvd0lkLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBjb250aWd1b3VzOiB0aGlzLnNoaWZ0LFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPikge1xuICAgIGlmIChjb2x1bW4uY2xpY2tQcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoY29sdW1uLmNsaWNrU3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGlzRXh0ZXJuYWxSb3dMaW5rKFxuICAgIHJvd0xpbms6IFJpdlRhYmxlLlJvd0xpbmssXG4gICk6IHJvd0xpbmsgaXMgUml2VGFibGUuRXh0ZXJuYWxSb3dMaW5rIHtcbiAgICByZXR1cm4gcm93TGluay50eXBlID09PSAnZXh0ZXJuYWwnO1xuICB9XG5cbiAgaXNJbnRlcm5hbFJvd0xpbmsoXG4gICAgcm93TGluazogUml2VGFibGUuUm93TGluayxcbiAgKTogcm93TGluayBpcyBSaXZUYWJsZS5JbnRlcm5hbFJvd0xpbmsge1xuICAgIHJldHVybiByb3dMaW5rLnR5cGUgPT09ICdpbnRlcm5hbCc7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uQ2FsbG91dFBvc2l0aW9uIHwgYXN5bmM7IGxldCBwb3NpdGlvblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICpyaXYtY2FsbG91dFxuICAgICAgICBbYW5jaG9yXT1cInBvc2l0aW9uXCJcbiAgICAgICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ3RvcC1yaWdodCdcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25UZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxyaXYtbG9hZGluZy1jb3ZlclxuICAgIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCJcbiAgICBbZXJyb3JNZXNzYWdlXT1cInMubG9hZC5lcnJvciA/IGdldEVycm9yTWVzc2FnZShzLmxvYWQuZXJyb3IpIDogdW5kZWZpbmVkXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAocml2Q2xpZW50U2l6ZSk9XCJjb250YWluZXJTaXplLm5leHQoJGV2ZW50KVwiPlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoICpuZ0lmPVwicy5zZWxlY3Rpb24uYWxsb3dTZWxlY3Rpb25cIiBjbGFzcz1cInNlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQgPT09ICdpbmRldGVybWluYXRlJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZScgfSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcml2LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzLmRpc3BsYXkuY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5waW5uZWRdPVwiY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldFdpZHRoKGNvbHVtbilcIlxuICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgZHJvcHBhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KGkpXCJcbiAgICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoaSlcIlxuICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wKGkpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci1sZWZ0XT1cIlxuICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggPiBpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kcmFnZ2VkLW92ZXItcmlnaHRdPVwiXG4gICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA8IGlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5vcmRlcmFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5sZWZ0XT1cImNvbHVtbi5hbGlnbm1lbnQgPT09ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnJpZ2h0XT1cImNvbHVtbi5hbGlnbm1lbnQgPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sdW1uLmRpc3BsYXlOYW1lID8/IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ub3JkZXJhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubGVmdF09XCJjb2x1bW4uYWxpZ25tZW50ID09PSAnbGVmdCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5yaWdodF09XCJjb2x1bW4uYWxpZ25tZW50ID09PSAncmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInMucXVlcnkub3JkZXI/LmNvbHVtbiA9PT0gY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb3JkZXJDb2x1bW5Ub2dnbGUnLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbi5uYW1lXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubmFtZSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHMucXVlcnkub3JkZXI/LmNvbHVtbiA9PT0gY29sdW1uLm5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBzLnF1ZXJ5Lm9yZGVyPy5kaXJlY3Rpb24gPT09ICdkZXNjJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnQXJyb3dEb3duJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnQXJyb3dVcCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDx0YWJsZS1oZWFkZXItcmVzaXplLWhhbmRsZVxuICAgICAgICAgICAgICAgIChkcmFnUmVzaXplKT1cInNldFdpZHRoKGNvbHVtbi5uYW1lLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvdGFibGUtaGVhZGVyLXJlc2l6ZS1oYW5kbGU+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0lmPVwibWVudVRlbXBsYXRlXCIgY2xhc3M9XCJtZW51LWhlYWRcIj48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID4gMDsgZWxzZSBlbXB0eVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIHMucmVzdWx0LnJvd3M7IHRyYWNrQnk6IHRyYWNrQnlSb3dcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Jvd0JvZHk+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInMuc2VsZWN0aW9uLmFsbG93U2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0aW9uLWJvZHlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXT1cIidyaXYtdGFibGUtc2VsZWN0aW9uLScgKyByb3cuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2Uocm93LmlkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcml2LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygcy5kaXNwbGF5LmNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnBpbm5lZF09XCJjb2x1bW4ucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZHZhbmNlZF09XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdhZHZhbmNlZCdcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3c6IHJvdywgY29sdW1uOiBjb2x1bW4gfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtYm9keVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIG1lbnVUZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93OiByb3cgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cucm93TGluazsgbGV0IHJsXCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFeHRlcm5hbFJvd0xpbmsocmwpXCJcbiAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJsLmhyZWZcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctbGlua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0JvZHlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbnRlcm5hbFJvd0xpbmsocmwpXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJsLnJvdXRlckxpbmtcIlxuICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInJsLnF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cInJsLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctbGlua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0JvZHlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCIhcm93LnJvd0xpbmtcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93Qm9keVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwicy5kaXNwbGF5LmNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPHJpdi16ZXJvLXN0YXRlXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlOyBsZXQgbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtemVyby1zdGF0ZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInMucXVlcnkucGFnaW5hdGlvbi5zaG93Q29udHJvbHNcIiBjbGFzcz1cInBhZ2luYXRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXNpemUtY29udHJvbHNcIj5cbiAgICAgICAgUmVzdWx0cyBwZXIgcGFnZTpcbiAgICAgICAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgICAgICAgW3NlbGVjdGVkT3B0aW9uXT1cIntcbiAgICAgICAgICAgIGlkOiBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRpdGxlOiBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlOiBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemVcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiXG4gICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3BhZ2VTaXplQ2hhbmdlJyxcbiAgICAgICAgICAgICAgc2l6ZTogJGV2ZW50LnZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2dyb3Vwc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICA+PC9yaXYtc2luZ2xlLXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInMucXVlcnkucGFnaW5hdGlvbi5zaG93Q29udHJvbHNcIiBjbGFzcz1cInBhZ2luYXRpb24tY29udHJvbHNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwicGFnaW5hdGUgcHJldmlvdXNcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJzLnF1ZXJ5LnBhZ2luYXRpb24ucHJldmlvdXMgPT09IG51bGxcIlxuICAgICAgICAgIChjbGljayk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJyB9KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cml2LWljb24gW25hbWVdPVwiJ0Fycm93TGVmdCdcIiBbc2l6ZV09XCIxNlwiPjwvcml2LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInMucXVlcnkucGFnaW5hdGlvbi5wYWdlc1swXSA+IDBcIiBjbGFzcz1cInRydW5jYXRlZC1wYWdlc1wiPlxuICAgICAgICAgICZoZWxsaXA7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWdlIG9mIHMucXVlcnkucGFnaW5hdGlvbi5wYWdlc1wiXG4gICAgICAgICAgY2xhc3M9XCJwYWdlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA9PT0gcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VcIlxuICAgICAgICAgIChjbGljayk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3BhZ2VDaGFuZ2UnLCBwYWdlIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHBhZ2UgKyAxIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZXNbcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VzLmxlbmd0aCAtIDFdIDxcbiAgICAgICAgICAgIHMucXVlcnkucGFnaW5hdGlvbi5wYWdlQ291bnQgLSAxXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInRydW5jYXRlZC1wYWdlc1wiXG4gICAgICAgID5cbiAgICAgICAgICAmaGVsbGlwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cInBhZ2luYXRlIG5leHRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJzLnF1ZXJ5LnBhZ2luYXRpb24ubmV4dCA9PT0gbnVsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnbmV4dFBhZ2VOYXZpZ2F0ZScgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidBcnJvd1JpZ2h0J1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtbG9hZGluZy1jb3Zlcj5cbjwvbmctY29udGFpbmVyPlxuIl19
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWNwQyxNQUFNLE9BQU8sY0FBYztJQU4zQjtRQTBCVyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDdkMsNkJBQXdCLEdBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDekQsQ0FBQztRQUVLLG9CQUFlLEdBQ3RCO1lBQ0U7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUMxQixLQUFLLEVBQUUsUUFBUTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7U0FDRixDQUFDO1FBRUssZUFBVSxHQUF5QyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNyRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRVEsb0JBQWUsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQXdCN0QscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2Qyx5QkFBb0IsR0FBa0IsSUFBSSxDQUFDO1FBNEJuQyxVQUFLLEdBQVksS0FBSyxDQUFDO0tBcUNoQztJQXpGQyxRQUFRLENBQUMsTUFBUyxFQUFFLEtBQW9CO1FBQ3RDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxJQUFJLGNBQWMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUN6QixJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixNQUFNO29CQUNOLGNBQWMsRUFBRSxjQUFjO2lCQUMvQixDQUFDLENBQUM7YUFDSjtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLE1BQThCO1FBQ3JDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFFO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBS0QsU0FBUyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWU7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWU7UUFDbEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3BDLFFBQVEsRUFBRSxPQUFPO2FBQ2xCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQVU7UUFDeEIsSUFBSSxDQUFDLFlBQVksS0FBSztZQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN6QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSTtZQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOztZQUN4RCxPQUFPLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFLRCxPQUFPLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFHRCxLQUFLLENBQUMsS0FBb0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYyxFQUFFLFFBQWlCO1FBQy9DLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLEVBQUUsRUFBRSxLQUFLO1lBQ1QsUUFBUTtZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCLEVBQUUsTUFBOEI7UUFDM0QsSUFBSSxNQUFNLENBQUMsbUJBQW1CO1lBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELElBQUksTUFBTSxDQUFDLG9CQUFvQjtZQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsT0FBeUI7UUFFekIsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsT0FBeUI7UUFFekIsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNyQyxDQUFDOzsyR0FqSVUsY0FBYzsrRkFBZCxjQUFjLDhjQ3pCM0IsOHZTQXFQQTsyRkQ1TmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU07OEJBUS9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixZQUFZO3NCQURYLFlBQVk7dUJBQUMsTUFBTTtnQkFPcEIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE1BQU07Z0JBSXBCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxXQUFXO2dCQStFekIsT0FBTztzQkFETixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU01QyxLQUFLO3NCQURKLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUcmFja0J5RnVuY3Rpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG50eXBlIFBhZ2VTaXplT3B0aW9uID0ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPiB7XG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZUYWJsZS5NYW5hZ2VyPFIsIEMsIEY+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2NlbGwnKVxuICBjZWxsVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7XG4gICAgcm93OiBSaXZUYWJsZS5GdWxsUm93PFI+O1xuICAgIGNvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPjtcbiAgfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnbWVudScpXG4gIG1lbnVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgcm93OiBSaXZUYWJsZS5GdWxsUm93PFI+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGlvbicpXG4gIHNlbGVjdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEY+IH0+O1xuXG4gIHJlYWRvbmx5IGNvbnRhaW5lclNpemUgPSBuZXcgU3ViamVjdDxET01SZWN0PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DYWxsb3V0UG9zaXRpb246IE9ic2VydmFibGU8RE9NUmVjdD4gPVxuICAgIHRoaXMuY29udGFpbmVyU2l6ZS5waXBlKFxuICAgICAgbWFwKHJlY3QgPT4gbmV3IERPTVJlY3QocmVjdC54ICsgNDQsIHJlY3QueSAtIDEyLCAwLCAwKSksXG4gICAgKTtcblxuICByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnM6IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb25Hcm91cDxQYWdlU2l6ZU9wdGlvbj5bXSA9XG4gICAgW1xuICAgICAge1xuICAgICAgICBvcHRpb25zOiBSaXZUYWJsZS5wYWdlU2l6ZXMubWFwKHBhZ2VTaXplID0+ICh7XG4gICAgICAgICAgaWQ6IHBhZ2VTaXplLnRvU3RyaW5nKCksXG4gICAgICAgICAgdGl0bGU6IHBhZ2VTaXplLnRvU3RyaW5nKCksXG4gICAgICAgICAgdmFsdWU6IHBhZ2VTaXplLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIF07XG5cbiAgcmVhZG9ubHkgdHJhY2tCeVJvdzogVHJhY2tCeUZ1bmN0aW9uPFJpdlRhYmxlLkZ1bGxSb3c8Uj4+ID0gKF8sIHJvdykgPT5cbiAgICByb3cuaWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wb3JhcnlXaWR0aHM6IE1hcDxDLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICBzZXRXaWR0aChjb2x1bW46IEMsIHdpZHRoOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHdpZHRoID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZW1wb3JhcnlXaWR0aCA9IHRoaXMudGVtcG9yYXJ5V2lkdGhzLmdldChjb2x1bW4pO1xuICAgICAgaWYgKHRlbXBvcmFyeVdpZHRoKSB7XG4gICAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnY29sdW1uV2lkdGhDaGFuZ2UnLFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBwcmVmZXJyZWRXaWR0aDogdGVtcG9yYXJ5V2lkdGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50ZW1wb3JhcnlXaWR0aHMuZGVsZXRlKGNvbHVtbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcG9yYXJ5V2lkdGhzLnNldChjb2x1bW4sIHdpZHRoKTtcbiAgICB9XG4gIH1cbiAgZ2V0V2lkdGgoY29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+KTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy50ZW1wb3JhcnlXaWR0aHMuaGFzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMudGVtcG9yYXJ5V2lkdGhzLmdldChjb2x1bW4ubmFtZSkhLCBjb2x1bW4ubWluV2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29sdW1uLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIGRyYWdnZWRDb2x1bW5JZHg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkT3ZlckNvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ1N0YXJ0KGlkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uSWR4ID0gaWR4O1xuICB9XG5cbiAgZHJhZ092ZXIob250b0lkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG9udG9JZHg7XG4gIH1cblxuICBkcm9wKG9udG9JZHg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJyxcbiAgICAgICAgcHJldmlvdXNJbmRleDogdGhpcy5kcmFnZ2VkQ29sdW1uSWR4LFxuICAgICAgICBuZXdJbmRleDogb250b0lkeCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykgcmV0dXJuIGU7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiBlICE9PSBudWxsKSByZXR1cm4gZS50b1N0cmluZygpO1xuICAgIGVsc2UgcmV0dXJuICdBbiBlcnJvciBvY2N1cnJlZC4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzaGlmdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxuICBrZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgfVxuXG4gIHNlbGVjdGlvbkNoYW5nZShyb3dJZDogUlsnaWQnXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnLFxuICAgICAgaWQ6IHJvd0lkLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBjb250aWd1b3VzOiB0aGlzLnNoaWZ0LFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPikge1xuICAgIGlmIChjb2x1bW4uY2xpY2tQcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoY29sdW1uLmNsaWNrU3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGlzRXh0ZXJuYWxSb3dMaW5rKFxuICAgIHJvd0xpbms6IFJpdlRhYmxlLlJvd0xpbmssXG4gICk6IHJvd0xpbmsgaXMgUml2VGFibGUuRXh0ZXJuYWxSb3dMaW5rIHtcbiAgICByZXR1cm4gcm93TGluay50eXBlID09PSAnZXh0ZXJuYWwnO1xuICB9XG5cbiAgaXNJbnRlcm5hbFJvd0xpbmsoXG4gICAgcm93TGluazogUml2VGFibGUuUm93TGluayxcbiAgKTogcm93TGluayBpcyBSaXZUYWJsZS5JbnRlcm5hbFJvd0xpbmsge1xuICAgIHJldHVybiByb3dMaW5rLnR5cGUgPT09ICdpbnRlcm5hbCc7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uQ2FsbG91dFBvc2l0aW9uIHwgYXN5bmM7IGxldCBwb3NpdGlvblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICpyaXYtY2FsbG91dFxuICAgICAgICBbYW5jaG9yXT1cInBvc2l0aW9uXCJcbiAgICAgICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ3RvcC1yaWdodCdcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25UZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxyaXYtbG9hZGluZy1jb3ZlclxuICAgIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCJcbiAgICBbZXJyb3JNZXNzYWdlXT1cInMubG9hZC5lcnJvciA/IGdldEVycm9yTWVzc2FnZShzLmxvYWQuZXJyb3IpIDogdW5kZWZpbmVkXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAocml2Q2xpZW50U2l6ZSk9XCJjb250YWluZXJTaXplLm5leHQoJGV2ZW50KVwiPlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoICpuZ0lmPVwicy5zZWxlY3Rpb24uYWxsb3dTZWxlY3Rpb25cIiBjbGFzcz1cInNlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQgPT09ICdpbmRldGVybWluYXRlJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZScgfSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcml2LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzLmRpc3BsYXkuY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5waW5uZWRdPVwiY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldFdpZHRoKGNvbHVtbilcIlxuICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgZHJvcHBhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KGkpXCJcbiAgICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoaSlcIlxuICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wKGkpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci1sZWZ0XT1cIlxuICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggPiBpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kcmFnZ2VkLW92ZXItcmlnaHRdPVwiXG4gICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA8IGlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5vcmRlcmFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5sZWZ0XT1cImNvbHVtbi5hbGlnbm1lbnQgPT09ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnJpZ2h0XT1cImNvbHVtbi5hbGlnbm1lbnQgPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sdW1uLmRpc3BsYXlOYW1lID8/IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ub3JkZXJhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubGVmdF09XCJjb2x1bW4uYWxpZ25tZW50ID09PSAnbGVmdCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5yaWdodF09XCJjb2x1bW4uYWxpZ25tZW50ID09PSAncmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInMucXVlcnkub3JkZXI/LmNvbHVtbiA9PT0gY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb3JkZXJDb2x1bW5Ub2dnbGUnLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbi5uYW1lXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4uZGlzcGxheU5hbWUgPz8gY29sdW1uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBzLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbi5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgcy5xdWVyeS5vcmRlcj8uZGlyZWN0aW9uID09PSAnZGVzYydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ0Fycm93RG93bidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ0Fycm93VXAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8dGFibGUtaGVhZGVyLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICAoZHJhZ1Jlc2l6ZSk9XCJzZXRXaWR0aChjb2x1bW4ubmFtZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L3RhYmxlLWhlYWRlci1yZXNpemUtaGFuZGxlPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIm1lbnVUZW1wbGF0ZVwiIGNsYXNzPVwibWVudS1oZWFkXCI+PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInMucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDA7IGVsc2UgZW1wdHlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBzLnJlc3VsdC5yb3dzOyB0cmFja0J5OiB0cmFja0J5Um93XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dCb2R5PlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzLnNlbGVjdGlvbi5hbGxvd1NlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGlvbi1ib2R5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxyaXYtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl09XCIncml2LXRhYmxlLXNlbGVjdGlvbi0nICsgcm93LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKHJvdy5pZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHMuZGlzcGxheS5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5waW5uZWRdPVwiY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYWR2YW5jZWRdPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYWR2YW5jZWQnXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi5hbGlnbm1lbnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93OiByb3csIGNvbHVtbjogY29sdW1uIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LWJvZHlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBtZW51VGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvdzogcm93IH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnJvd0xpbms7IGxldCBybFwiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRXh0ZXJuYWxSb3dMaW5rKHJsKVwiXG4gICAgICAgICAgICAgICAgICBbaHJlZl09XCJybC5ocmVmXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LWxpbmtcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dCb2R5XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSW50ZXJuYWxSb3dMaW5rKHJsKVwiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJybC5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJybC5xdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJybC5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LWxpbmtcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dCb2R5XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiIXJvdy5yb3dMaW5rXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0JvZHlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHk+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInMuZGlzcGxheS5jb2x1bW5zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxyaXYtemVyby1zdGF0ZVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgPjwvcml2LXplcm8tc3RhdGU+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzLnF1ZXJ5LnBhZ2luYXRpb24uc2hvd0NvbnRyb2xzXCIgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFnZS1zaXplLWNvbnRyb2xzXCI+XG4gICAgICAgIFJlc3VsdHMgcGVyIHBhZ2U6XG4gICAgICAgIDxyaXYtc2luZ2xlLXNlbGVjdFxuICAgICAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJ7XG4gICAgICAgICAgICBpZDogcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0aXRsZTogcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB2YWx1ZTogcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKHNlbGVjdGVkT3B0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdwYWdlU2l6ZUNoYW5nZScsXG4gICAgICAgICAgICAgIHNpemU6ICRldmVudC52YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtncm91cHNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzLnF1ZXJ5LnBhZ2luYXRpb24uc2hvd0NvbnRyb2xzXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cInBhZ2luYXRlIHByZXZpb3VzXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwicy5xdWVyeS5wYWdpbmF0aW9uLnByZXZpb3VzID09PSBudWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidBcnJvd0xlZnQnXCIgW3NpemVdPVwiMTZcIj48L3Jpdi1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZXNbMF0gPiAwXCIgY2xhc3M9XCJ0cnVuY2F0ZWQtcGFnZXNcIj5cbiAgICAgICAgICAmaGVsbGlwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcGFnZSBvZiBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZXNcIlxuICAgICAgICAgIGNsYXNzPVwicGFnZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPT09IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgICAoY2xpY2spPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdwYWdlQ2hhbmdlJywgcGFnZSB9KVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwYWdlICsgMSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VzW3MucXVlcnkucGFnaW5hdGlvbi5wYWdlcy5sZW5ndGggLSAxXSA8XG4gICAgICAgICAgICBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZUNvdW50IC0gMVxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJ0cnVuY2F0ZWQtcGFnZXNcIlxuICAgICAgICA+XG4gICAgICAgICAgJmhlbGxpcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJwYWdpbmF0ZSBuZXh0XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwicy5xdWVyeS5wYWdpbmF0aW9uLm5leHQgPT09IG51bGxcIlxuICAgICAgICAgIChjbGljayk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ25leHRQYWdlTmF2aWdhdGUnIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInQXJyb3dSaWdodCdcIiBbc2l6ZV09XCIxNlwiPjwvcml2LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvcml2LWxvYWRpbmctY292ZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -3742,10 +3742,10 @@ class TableComponent {
3742
3742
  }
3743
3743
  }
3744
3744
  TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3745
- TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "riv-table", inputs: { manager: "manager" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)" } }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\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: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkedColorToken", "indeterminateColorToken", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "maxCalloutHeight", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "directive", type: SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: TableHeaderResizeHandleComponent, selector: "table-header-resize-handle", outputs: ["dragResize"] }, { kind: "component", type: ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3745
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "riv-table", inputs: { manager: "manager" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)" } }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.displayName ?? column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\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: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkedColorToken", "indeterminateColorToken", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "maxCalloutHeight", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "directive", type: SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: TableHeaderResizeHandleComponent, selector: "table-header-resize-handle", outputs: ["dragResize"] }, { kind: "component", type: ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3746
3746
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, decorators: [{
3747
3747
  type: Component,
3748
- args: [{ selector: 'riv-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"] }]
3748
+ args: [{ selector: 'riv-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"s.selection.allowSelection\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.displayName ?? column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.displayName ?? column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td\n *ngIf=\"s.selection.allowSelection\"\n class=\"selection-body\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"handleClick($event, column)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n >\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n </ng-container>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n &hellip;\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle;height:calc(var(--base-grid-size) * 8 + var(--border-width))}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}a.row-link td{transition:background-color var(--short-transition)}a.row-link:hover td{background-color:var(--surface-light-2)}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.selection-body{position:sticky;z-index:1;left:0}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate:not(:disabled),.page:not(:disabled){cursor:pointer}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"] }]
3749
3749
  }], propDecorators: { manager: [{
3750
3750
  type: Input
3751
3751
  }], cellTemplate: [{