@elderbyte/ngx-starter 15.0.1-mdc → 15.0.2-mdc
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.
- package/esm2020/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +3 -3
- package/esm2020/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +7 -5
- package/fesm2015/elderbyte-ngx-starter.mjs +7 -5
- package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
- package/fesm2020/elderbyte-ngx-starter.mjs +7 -5
- package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.d.ts +3 -1
- package/package.json +1 -1
- package/src/lib/components/data-view/grid/elder-grid/elder-grid.component.scss +10 -30
- package/theming/_elder-mdc-support.scss +5 -0
|
@@ -248,7 +248,7 @@ ElderGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
248
248
|
provide: ELDER_DATA_VIEW,
|
|
249
249
|
useExisting: forwardRef(() => ElderGridComponent)
|
|
250
250
|
}
|
|
251
|
-
], queries: [{ propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <div *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <!-- cdkDrag [cdkDragDisabled]=\"true\" [cdkDragData]=\"tile\" -->\n <!-- <div class=\"tile-placeholder\" *cdkDragPlaceholder></div> -->\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n [class.elder-click-through]=\"true\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{(selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked'}}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}} / {{total$ | async}}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{tile}}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.scroll-fix{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.cdk-drag-preview{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{flex:0 1 100%;background:#ccc;border:dotted 3px #999;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.elder-grid-tile-overlay{position:absolute;inset:0;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}.elder-click-through{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i9.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i10.ElderSingleSortComponent, selector: "elder-single-sort", inputs: ["availableSorts", "translationPrefix", "sort"], outputs: ["sortChange"] }, { kind: "component", type: i11.ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: i12.DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: i13.DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "directive", type: i14.ElderInfiniteScrollLegacyDirective, selector: "[infiniteScroll]" }, { kind: "directive", type: i15.ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "component", type: i16.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i17.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
251
|
+
], queries: [{ propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <mat-card appearance=\"outlined\" *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{(selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked'}}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </mat-card>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}} / {{total$ | async}}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{tile}}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i9.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i10.ElderSingleSortComponent, selector: "elder-single-sort", inputs: ["availableSorts", "translationPrefix", "sort"], outputs: ["sortChange"] }, { kind: "component", type: i11.ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: i12.DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: i13.DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "directive", type: i14.ElderInfiniteScrollLegacyDirective, selector: "[infiniteScroll]" }, { kind: "directive", type: i15.ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "component", type: i16.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i17.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
252
252
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ElderGridComponent, decorators: [{
|
|
253
253
|
type: Component,
|
|
254
254
|
args: [{ selector: 'elder-grid', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
@@ -256,7 +256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
256
256
|
provide: ELDER_DATA_VIEW,
|
|
257
257
|
useExisting: forwardRef(() => ElderGridComponent)
|
|
258
258
|
}
|
|
259
|
-
], template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <
|
|
259
|
+
], template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <mat-card appearance=\"outlined\" *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{(selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked'}}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </mat-card>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}} / {{total$ | async}}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{tile}}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"] }]
|
|
260
260
|
}], ctorParameters: function () { return [{ type: i1.SelectionModel, decorators: [{
|
|
261
261
|
type: Optional
|
|
262
262
|
}] }, { type: i2.ElderDataViewOptionsProvider, decorators: [{
|
|
@@ -304,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
304
304
|
}], columnCount: [{
|
|
305
305
|
type: Input
|
|
306
306
|
}] } });
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBRVgsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUF3Qyx3QkFBd0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBR2xJLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0scUVB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SztnQkFJQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBSUMscUJBQXFCO3NCQUQzQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJM0MsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZO2dCQUloQixvQkFBb0I7c0JBRDFCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBOEQvRCxZQUFZO3NCQUR0QixLQUFLO2dCQVVLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBVUssSUFBSTtzQkFEZCxLQUFLO2dCQXNCSyxXQUFXO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0lEYXRhQ29udGV4dCwgSURhdGFDb250ZXh0Q29udGludWFibGUsIGlzQ29udGludWFibGVEYXRhQ29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2RhdGEvZGF0YS1jb250ZXh0L2RhdGEtY29udGV4dCc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vc2VsZWN0aW9uL3NlbGVjdGlvbi1tb2RlbCc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U29ydH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2RhdGEvc29ydCc7XG5pbXBvcnQge0VMREVSX0RBVEFfVklFV30gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXcnO1xuaW1wb3J0IHtFbGRlckRhdGFWaWV3QmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXctYmFzZSc7XG5pbXBvcnQge01hdFBhZ2luYXRvcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7TWF0VGFibGVEYXRhQ29udGV4dEJpbmRpbmdCdWlsZGVyfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvbWF0LXRhYmxlLWRhdGEtY29udGV4dC1iaW5kaW5nJztcbmltcG9ydCB7RWxkZXJEYXRhVmlld09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXctb3B0aW9ucy1wcm92aWRlcic7XG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tlbGRlckdyaWRUaWxlXSd9KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZFRpbGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIHByb2plY3RzIG1hcmtlZCBjb250ZW50IGludG8gYSB0b29sYmFyLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tlbGRlckdyaWRUb29sYmFyXSd9KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZFRvb2xiYXJEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbGRlci1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTERFUl9EQVRBX1ZJRVcsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbGRlckdyaWRDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZENvbXBvbmVudCBleHRlbmRzIEVsZGVyRGF0YVZpZXdCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHJpdmF0ZSBfY29sdW1uQ291bnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaXplVG9Db2x1bW5zID0gbmV3IE1hcChbXG4gICAgW0JyZWFrcG9pbnRzLlhTbWFsbCwgMV0sXG4gICAgW0JyZWFrcG9pbnRzLlNtYWxsLCAyXSxcbiAgICBbQnJlYWtwb2ludHMuTWVkaXVtLCAzXSxcbiAgICBbQnJlYWtwb2ludHMuTGFyZ2UsIDRdLFxuICAgIFtCcmVha3BvaW50cy5YTGFyZ2UsIDVdXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBMb2FkIG5leHQgY2h1bmsgYWZ0ZXIgY3VycmVudCBpcyBkb25lXG4gICAqL1xuICBwcml2YXRlIGxvYWROZXh0UXVldWVkID0gZmFsc2U7XG5cbiAgcHVibGljIGRhdGFSb3dzJDogT2JzZXJ2YWJsZTxhbnlbXVtdPjtcblxuICBwdWJsaWMgY2FuTG9hZE1vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgdG90YWwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgQENvbnRlbnRDaGlsZChFbGRlckdyaWRUaWxlRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyB0aWxlVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfdGlsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvb3RlclZpc2libGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtSGVpZ2h0ID0gMjUwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZXNwb25zaXZlQ29sdW1uQ291bnQgPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgdmlydHVhbFNjcm9sbFZpZXdQb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF2YWlsYWJsZVNvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzb3J0VHJhbnNsYXRpb25QcmVmaXggPSAnZG9jdW1lbnRzLnNvcnRzLic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGhpZGRlbkZpZWxkOiBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgcmVxdWlyZWQuIElkIGlzIGF1dG9tYXRpY2FsbHkgcGlja2VkIGZyb20gdGhlIERhdGFTb3VyY2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWRGaWVsZCA9ICdpZCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdGlvblZpc2libGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwYWdlU2l6ZU9wdGlvbnMgPSBbMzAsIDUwLCAxMDAsIDE1MCwgMjAwXTtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpXG4gIHB1YmxpYyBtYXRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICBAQ29udGVudENoaWxkKEVsZGVyR3JpZFRvb2xiYXJEaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHRvb2xiYXJUZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF90b29sYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgZGF0YVZpZXdPcHRpb25zUHJvdmlkZXI6IEVsZGVyRGF0YVZpZXdPcHRpb25zUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlclxuICApIHtcbiAgICBzdXBlcihzZWxlY3Rpb25Nb2RlbCwgZGF0YVZpZXdPcHRpb25zUHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmVjeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBjb25zdCBjb2x1bW5Db3VudCQgPSAoXG4gICAgICB0aGlzLnJlc3BvbnNpdmVDb2x1bW5Db3VudFxuICAgICAgICA/IHRoaXMucmVzcG9uc2l2ZUNvbHVtbigpXG4gICAgICAgIDogdGhpcy5fY29sdW1uQ291bnQpO1xuXG4gICAgdGhpcy5kYXRhUm93cyQgPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgW1xuICAgICAgICB0aGlzLmRhdGFDb250ZXh0JC5waXBlKFxuICAgICAgICAgIGZpbHRlcihkYyA9PiAhIWRjKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoZGMgPT4gZGMuZGF0YSlcbiAgICAgICAgKSxcbiAgICAgICAgY29sdW1uQ291bnQkXG4gICAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgIG1hcChcbiAgICAgICAgKFtkYXRhLCBjb2x1bW5zXSkgPT4gdGhpcy5ncm91cEZvckNvbHVtbnMoZGF0YSwgY29sdW1ucylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIE1hdFRhYmxlRGF0YUNvbnRleHRCaW5kaW5nQnVpbGRlclxuICAgICAgLnN0YXJ0KHRoaXMuZGF0YUNvbnRleHQkKVxuICAgICAgLndpdGhQYWdpbmF0b3Iob2YodGhpcy5tYXRQYWdpbmF0b3IpKVxuICAgICAgLmJpbmRVbnRpbCh0aGlzLmRlc3Ryb3kkKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGlsZVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdGlsZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbGVUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGlsZVRlbXBsYXRlIHx8IHRoaXMudGlsZVRlbXBsYXRlUXVlcnk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvb2xiYXJUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX3Rvb2xiYXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCB0b29sYmFyVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xiYXJUZW1wbGF0ZSB8fCB0aGlzLnRvb2xiYXJUZW1wbGF0ZVF1ZXJ5O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhKGRhdGE6IElEYXRhQ29udGV4dDxhbnk+KSB7XG4gICAgdGhpcy5kYXRhQ29udGV4dCQubmV4dChkYXRhKTtcblxuICAgIHRoaXMudG90YWwkID0gZGF0YS50b3RhbC5waXBlKFxuICAgICAgbWFwKHRvdGFsID0+IHRvdGFsID8gdG90YWwgKyAnJyA6ICfiiJ4nKVxuICAgICk7XG5cbiAgICBpZiAoaXNDb250aW51YWJsZURhdGFDb250ZXh0KGRhdGEpKSB7XG4gICAgICB0aGlzLmNhbkxvYWRNb3JlJCA9IGNvbWJpbmVMYXRlc3QoW2RhdGEubG9hZGluZywgZGF0YS5oYXNNb3JlRGF0YV0pLnBpcGUoXG4gICAgICAgIG1hcCgoW2xvYWRpbmcsIGhhc01vcmVEYXRhXSkgPT4gIWxvYWRpbmcgJiYgaGFzTW9yZURhdGEpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbkxvYWRNb3JlJCA9IG9mKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFTbmFwc2hvdCgpOiBJRGF0YUNvbnRleHRDb250aW51YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29udGludWFibGU7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbHVtbkNvdW50KGNvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9jb2x1bW5Db3VudC5uZXh0KGNvdW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uQ291bnQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBpblNlbGVjdGlvbk1vZGUoY3VycmVudFNlbGVjdGlvbjogYW55W10pOiBib29sZWFuIHtcblxuICAgIGlmICh0aGlzLmludGVyYWN0aW9uTW9kZSA9PT0gJ3NlbGVjdGlvbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlcXVlc3RNb3JlRGF0YVpvbmVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhU25hcHNob3QuaGFzTW9yZURhdGFTbmFwc2hvdCkge1xuXG4gICAgICBpZiAodGhpcy5kYXRhU25hcHNob3Quc25hcHNob3QuaXNMb2FkaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU25hcHNob3QubG9hZE1vcmUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICBsb2FkZWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkTmV4dFF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RNb3JlRGF0YVpvbmVkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyYWNrQnlGbigpOiBUcmFja0J5RnVuY3Rpb248YW55PiB7XG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCBlbnRpdHk6IGFueSkgPT4gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIsIGl0ZW1zOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogU29ydCk6IHZvaWQge1xuICAgIGNvbnN0IGRjID0gdGhpcy5kYXRhQ29udGV4dCQuZ2V0VmFsdWUoKTtcbiAgICBpZiAoZGMpIHtcbiAgICAgIGRjLnNvcnQucmVwbGFjZVNvcnRzKFtzb3J0XSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dUaWxlKHRpbGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aWxlICYmICh0aGlzLmhpZGRlbkZpZWxkID8gIXRpbGVbdGhpcy5oaWRkZW5GaWVsZF0gOiB0cnVlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgc2Nyb2xsVG9wKCkge1xuICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoMCwgJ3Ntb290aCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEZvckNvbHVtbnMobm9kZXM6IGFueVtdLCBjb2x1bW5zOiBudW1iZXIpOiBhbnlbXVtdIHtcblxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBbXTtcblxuICAgIGNvbnN0IHJvd0NvdW50ID0gbm9kZXMubGVuZ3RoIC8gY29sdW1ucztcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCByb3dDb3VudDsgcm93SW5kZXgrKykge1xuICAgICAgY29uc3Qgcm93U3RhcnRJbmRleCA9IHJvd0luZGV4ICogY29sdW1ucztcbiAgICAgIGNvbnN0IHJvdyA9IG5vZGVzLnNsaWNlKHJvd1N0YXJ0SW5kZXgsIHJvd1N0YXJ0SW5kZXggKyBjb2x1bW5zKTtcblxuICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBjb2x1bW5zKSB7XG4gICAgICAgIHJvdy5wdXNoKG51bGwpOyAvLyBGaWxsIHVwIHJlbWFpbmluZ1xuICAgICAgfVxuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBwcml2YXRlIHJlc3BvbnNpdmVDb2x1bW4oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCBicmVha3BvaW50cyA9IEFycmF5LmZyb20odGhpcy5zaXplVG9Db2x1bW5zLmtleXMoKSk7XG4gICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoYnJlYWtwb2ludHMpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgbGV0IGFjdGl2ZVNpemUgPSBCcmVha3BvaW50cy5NZWRpdW07XG4gICAgICAgIGZvciAoY29uc3QgcXVlcnkgb2YgT2JqZWN0LmtleXMocmVzdWx0LmJyZWFrcG9pbnRzKSkge1xuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XG4gICAgICAgICAgICBhY3RpdmVTaXplID0gcXVlcnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZVRvQ29sdW1ucy5nZXQoYWN0aXZlU2l6ZSk7XG4gICAgICB9KSxcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuYWN0aXZlQ29sdW1uQ291bnQoKSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUNvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcbiAgICB0aGlzLnNpemVUb0NvbHVtbnMuZm9yRWFjaCgoY29scywgbXFBbGlhcykgPT4ge1xuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChtcUFsaWFzKSkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbkNvdW50O1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmdWxsXCJcbiAgICAgICAgICBbY2xhc3MuZW1iZWRkZWRdPVwiZW1iZWRkZWRcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlblwiXG4+XG4gIDwhLS0gR3JpZCBCcm93c2VyIC0tPlxuICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmdWxsIGVsZGVyLWdyaWQtY29udGFpbmVyXCJcbiAgICAgICAqbmdJZj1cImRhdGFDb250ZXh0JCB8IGFzeW5jIGFzIGRhdGFcIlxuICAgICAgIFtlbGRlckRhdGFDb250ZXh0U2VsZWN0aW9uXT1cImRhdGFcIiAjZGF0YVNlbGVjdGlvbj1cImVsZGVyRGF0YUNvbnRleHRTZWxlY3Rpb25cIlxuICAgICAgIFtlbGRlckRhdGFDb250ZXh0U2VsZWN0aW9uTW9kZWxdPVwic2VsZWN0aW9uTW9kZWxcIlxuICA+XG4gICAgPCEtLSBUb29sYmFyIFJvdyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidG9vbGJhclZpc2libGVcIlxuICAgICAgICAgY2xhc3M9XCJsYXlvdXQtcm93IHBsYWNlLXN0YXJ0LWNlbnRlciBmbGV4LW5vbmUgZWxkZXItZ3JpZC10b29sYmFyXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIGZsZXgtbm9uZVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7IHBhZGRpbmctcmlnaHQ6IDhweFwiICpuZ0lmPVwic2VsZWN0aW9uVmlzaWJsZVwiPlxuICAgICAgICA8ZWxkZXItc2VsZWN0aW9uLW1hc3Rlci1jaGVja2JveCBjbGFzcz1cImZsZXgtbm9uZVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMnB4XCI+PC9lbGRlci1zZWxlY3Rpb24tbWFzdGVyLWNoZWNrYm94PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiB0aGlzfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGVsZGVyLXNpbmdsZS1zb3J0ICpuZ0lmPVwiYXZhaWxhYmxlU29ydHMgJiYgYXZhaWxhYmxlU29ydHMubGVuZ3RoID4gMCAmJiBkYXRhLnNvcnQuc29ydHMgfCBhc3luYyBhcyBzb3J0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVTb3J0c109XCJhdmFpbGFibGVTb3J0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0aW9uUHJlZml4XT1cInNvcnRUcmFuc2xhdGlvblByZWZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHNbMF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInVwZGF0ZVNvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9lbGRlci1zaW5nbGUtc29ydD5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cInRvb2xiYXJWaXNpYmxlXCI+PC9tYXQtZGl2aWRlcj5cblxuICAgIDxlbGRlci1kYXRhLWNvbnRleHQtc3RhdGUtaW5kaWNhdG9yIGNsYXNzPVwiZmxleC1ub25lXCIgW2RhdGFDb250ZXh0XT1cImRhdGFcIj5cbiAgICA8L2VsZGVyLWRhdGEtY29udGV4dC1zdGF0ZS1pbmRpY2F0b3I+XG5cbiAgICA8IS0tIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCIgLS0+XG4gICAgPCEtLSBjZGtEcm9wTGlzdCAtLT5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICBjbGFzcz1cImxheW91dC1jb2wgZmxleCBlbGRlci1ncmlkLWJyb3dzZXJcIlxuICAgICAgaWQ9XCJkb2N1bWVudHMtY29udGFpbmVyXCJcbiAgICAgIFtpdGVtU2l6ZV09XCJpdGVtSGVpZ2h0XCJcbiAgICAgIFttaW5CdWZmZXJQeF09XCJpdGVtSGVpZ2h0ICogMlwiXG4gICAgICBbbWF4QnVmZmVyUHhdPVwiaXRlbUhlaWdodCAqIDNcIlxuICAgICAgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICAgIFtldmVudFRocm90dGxlXT1cIjIwMFwiXG4gICAgICBbb2Zmc2V0RmFjdG9yXT1cIjJcIlxuICAgICAgW2lnbm9yZVNjcm9sbEV2ZW50XT1cImRhdGEubG9hZGluZyB8IGFzeW5jXCJcbiAgICAgIFtjb250YWluZXJJZF09XCInZG9jdW1lbnRzLWNvbnRhaW5lcidcIiBbbGlzdGVuVG9Ib3N0XT1cImZhbHNlXCJcbiAgICAgIChjbG9zZVRvRW5kKT1cInJlcXVlc3RNb3JlRGF0YVpvbmVkKCRldmVudClcIj5cblxuICAgICAgPCEtLSAoc2Nyb2xsaW5nKT1cIm9uU2Nyb2xsaW5nKCRldmVudClcIiAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YVJvd3MkOyB0cmFja0J5OiB0cmFja0J5SW5kZXg7IHRlbXBsYXRlQ2FjaGVTaXplOiA1MFwiXG4gICAgICAgIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLXJvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaXRlbUhlaWdodCArICdweCdcIj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWxlIG9mIHJvdzsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG5cbiAgICAgICAgICA8IS0tIFRpbGUgQ2VsbCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpbGUodGlsZSlcIiBjbGFzcz1cImVsZGVyLWdyaWQtdGlsZVwiPlxuICAgICAgICAgICAgPCEtLSBjZGtEcmFnIFtjZGtEcmFnRGlzYWJsZWRdPVwidHJ1ZVwiIFtjZGtEcmFnRGF0YV09XCJ0aWxlXCIgLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0aWxlLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2sodGlsZSlcIlxuICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtRG91YmxlQ2xpY2sodGlsZSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGlsZVRlbXBsYXRlIHx8IHNpbXBsZVRpbGVUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogdGlsZX1cIj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBPdmVybGF5IChTZWxlY3Rpb24pIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb24gfCBhc3luYyBhcyBzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtb3ZlcmxheVwiXG4gICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWxkZXItZ3JpZC10aWxlLW92ZXJsYXktaGlkZGVuXT1cIiFpblNlbGVjdGlvbk1vZGUoc2VsZWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWxkZXItZ3JpZC10aWxlLW92ZXJsYXktdmlzaWJsZV09XCJpblNlbGVjdGlvbk1vZGUoc2VsZWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWxkZXItY2xpY2stdGhyb3VnaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGVsLnRvZ2dsZSh0aWxlKVwiIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtY2hlY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVsZGVyLXNlbGVjdGVkXT1cIihzZWxlY3Rpb25Nb2RlbC5vYnNlcnZlU2VsZWN0aW9uKHRpbGUpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7KHNlbGVjdGlvbk1vZGVsLm9ic2VydmVTZWxlY3Rpb24odGlsZSkgfCBhc3luYykgPyAnY2hlY2tfY2lyY2xlJyA6ICdyYWRpb19idXR0b25fdW5jaGVja2VkJ319XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93VGlsZSh0aWxlKVwiIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLWhpZGRlblwiPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgY2xhc3M9XCJmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cIihkYXRhPy5sb2FkaW5nIHwgYXN5bmMpID8gJ2luZGV0ZXJtaW5hdGUnIDogJ2RldGVybWluYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIihkYXRhICYmIChkYXRhLnN0YXR1cyB8IGFzeW5jKT8uaGFzRXJyb3IpID8gJ3dhcm4nIDogJ3ByaW1hcnknXCI+XG4gICAgPC9tYXQtcHJvZ3Jlc3MtYmFyPlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1yb3cgcGxhY2UtZW5kLWNlbnRlciBnYXAtbWQgZmxleC1ub25lIGVsZGVyLWdyaWQtZm9vdGVyXCJcbiAgICAgICAgICpuZ0lmPVwiZm9vdGVyVmlzaWJsZVwiXG4gICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEycHhcIj5cblxuICAgICAgPCEtLSBDb250aW51YWJsZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbnRpbnVhYmxlXCI+XG4gICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1jYXB0aW9uIG5vc2VsZWN0XCIgc3R5bGU9XCJjb2xvcjogZ3JheVwiPlxuICAgICAgICAgICAge3soZGF0YVNuYXBzaG90Py5kYXRhIHwgYXN5bmMpPy5sZW5ndGh9fSAvIHt7dG90YWwkIHwgYXN5bmN9fVxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKGNhbkxvYWRNb3JlJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGFTbmFwc2hvdC5sb2FkTW9yZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFBhZ2VkIC0tPlxuICAgICAgPG1hdC1wYWdpbmF0b3IgI21hdFBhZ2luYXRvciAqbmdJZj1cImlzQWN0aXZlUGFnZWQgJiYgKGRhdGFBY3RpdmVQYWdlZC5wYWdlIHwgYXN5bmMpIGFzIHBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xlbmd0aF09XCJkYXRhQ29udGV4dD8udG90YWwgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2U/LmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlPy5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCI+XG4gICAgICA8L21hdC1wYWdpbmF0b3I+XG5cbiAgICAgIDwhLS0gTG9jYWwgU291cmNlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FjdGl2ZVBhZ2VkICYmICFpc0NvbnRpbnVhYmxlXCI+XG4gICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1jYXB0aW9uIG5vc2VsZWN0XCIgc3R5bGU9XCJjb2xvcjogZ3JheVwiPlxuICAgICAgICAgICAge3soZGF0YVNuYXBzaG90Py5kYXRhIHwgYXN5bmMpPy5sZW5ndGh9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9kaXY+XG5cblxuICA8L2Rpdj5cbjwvbWF0LWNhcmQ+XG5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlVGlsZVRlbXBsYXRlIGxldC10aWxlPlxuICA8ZGl2ICpuZ0lmPVwidGlsZVwiIGNsYXNzPVwibGF5b3V0LWNvbCBwbGFjZS1jZW50ZXItY2VudGVyIGZsZXhcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZVwiPlxuICAgIDxwIGNsYXNzPVwibm9zZWxlY3RcIj5UaWxlOiB7e3RpbGV9fTwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBRVgsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUF3Qyx3QkFBd0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBR2xJLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0scUVB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SztnQkFJQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBSUMscUJBQXFCO3NCQUQzQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJM0MsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZO2dCQUloQixvQkFBb0I7c0JBRDFCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBOEQvRCxZQUFZO3NCQUR0QixLQUFLO2dCQVVLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBVUssSUFBSTtzQkFEZCxLQUFLO2dCQXNCSyxXQUFXO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0lEYXRhQ29udGV4dCwgSURhdGFDb250ZXh0Q29udGludWFibGUsIGlzQ29udGludWFibGVEYXRhQ29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2RhdGEvZGF0YS1jb250ZXh0L2RhdGEtY29udGV4dCc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vc2VsZWN0aW9uL3NlbGVjdGlvbi1tb2RlbCc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U29ydH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2RhdGEvc29ydCc7XG5pbXBvcnQge0VMREVSX0RBVEFfVklFV30gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXcnO1xuaW1wb3J0IHtFbGRlckRhdGFWaWV3QmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXctYmFzZSc7XG5pbXBvcnQge01hdFBhZ2luYXRvcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7TWF0VGFibGVEYXRhQ29udGV4dEJpbmRpbmdCdWlsZGVyfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvbWF0LXRhYmxlLWRhdGEtY29udGV4dC1iaW5kaW5nJztcbmltcG9ydCB7RWxkZXJEYXRhVmlld09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXctb3B0aW9ucy1wcm92aWRlcic7XG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tlbGRlckdyaWRUaWxlXSd9KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZFRpbGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIHByb2plY3RzIG1hcmtlZCBjb250ZW50IGludG8gYSB0b29sYmFyLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tlbGRlckdyaWRUb29sYmFyXSd9KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZFRvb2xiYXJEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbGRlci1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTERFUl9EQVRBX1ZJRVcsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbGRlckdyaWRDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZENvbXBvbmVudCBleHRlbmRzIEVsZGVyRGF0YVZpZXdCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHJpdmF0ZSBfY29sdW1uQ291bnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaXplVG9Db2x1bW5zID0gbmV3IE1hcChbXG4gICAgW0JyZWFrcG9pbnRzLlhTbWFsbCwgMV0sXG4gICAgW0JyZWFrcG9pbnRzLlNtYWxsLCAyXSxcbiAgICBbQnJlYWtwb2ludHMuTWVkaXVtLCAzXSxcbiAgICBbQnJlYWtwb2ludHMuTGFyZ2UsIDRdLFxuICAgIFtCcmVha3BvaW50cy5YTGFyZ2UsIDVdXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBMb2FkIG5leHQgY2h1bmsgYWZ0ZXIgY3VycmVudCBpcyBkb25lXG4gICAqL1xuICBwcml2YXRlIGxvYWROZXh0UXVldWVkID0gZmFsc2U7XG5cbiAgcHVibGljIGRhdGFSb3dzJDogT2JzZXJ2YWJsZTxhbnlbXVtdPjtcblxuICBwdWJsaWMgY2FuTG9hZE1vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgdG90YWwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgQENvbnRlbnRDaGlsZChFbGRlckdyaWRUaWxlRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyB0aWxlVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfdGlsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvb3RlclZpc2libGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtSGVpZ2h0ID0gMjUwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZXNwb25zaXZlQ29sdW1uQ291bnQgPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgdmlydHVhbFNjcm9sbFZpZXdQb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF2YWlsYWJsZVNvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzb3J0VHJhbnNsYXRpb25QcmVmaXggPSAnZG9jdW1lbnRzLnNvcnRzLic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGhpZGRlbkZpZWxkOiBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgcmVxdWlyZWQuIElkIGlzIGF1dG9tYXRpY2FsbHkgcGlja2VkIGZyb20gdGhlIERhdGFTb3VyY2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWRGaWVsZCA9ICdpZCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdGlvblZpc2libGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwYWdlU2l6ZU9wdGlvbnMgPSBbMzAsIDUwLCAxMDAsIDE1MCwgMjAwXTtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpXG4gIHB1YmxpYyBtYXRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICBAQ29udGVudENoaWxkKEVsZGVyR3JpZFRvb2xiYXJEaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHRvb2xiYXJUZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF90b29sYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgZGF0YVZpZXdPcHRpb25zUHJvdmlkZXI6IEVsZGVyRGF0YVZpZXdPcHRpb25zUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlclxuICApIHtcbiAgICBzdXBlcihzZWxlY3Rpb25Nb2RlbCwgZGF0YVZpZXdPcHRpb25zUHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmVjeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBjb25zdCBjb2x1bW5Db3VudCQgPSAoXG4gICAgICB0aGlzLnJlc3BvbnNpdmVDb2x1bW5Db3VudFxuICAgICAgICA/IHRoaXMucmVzcG9uc2l2ZUNvbHVtbigpXG4gICAgICAgIDogdGhpcy5fY29sdW1uQ291bnQpO1xuXG4gICAgdGhpcy5kYXRhUm93cyQgPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgW1xuICAgICAgICB0aGlzLmRhdGFDb250ZXh0JC5waXBlKFxuICAgICAgICAgIGZpbHRlcihkYyA9PiAhIWRjKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoZGMgPT4gZGMuZGF0YSlcbiAgICAgICAgKSxcbiAgICAgICAgY29sdW1uQ291bnQkXG4gICAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgIG1hcChcbiAgICAgICAgKFtkYXRhLCBjb2x1bW5zXSkgPT4gdGhpcy5ncm91cEZvckNvbHVtbnMoZGF0YSwgY29sdW1ucylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIE1hdFRhYmxlRGF0YUNvbnRleHRCaW5kaW5nQnVpbGRlclxuICAgICAgLnN0YXJ0KHRoaXMuZGF0YUNvbnRleHQkKVxuICAgICAgLndpdGhQYWdpbmF0b3Iob2YodGhpcy5tYXRQYWdpbmF0b3IpKVxuICAgICAgLmJpbmRVbnRpbCh0aGlzLmRlc3Ryb3kkKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGlsZVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdGlsZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbGVUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGlsZVRlbXBsYXRlIHx8IHRoaXMudGlsZVRlbXBsYXRlUXVlcnk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvb2xiYXJUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX3Rvb2xiYXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCB0b29sYmFyVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xiYXJUZW1wbGF0ZSB8fCB0aGlzLnRvb2xiYXJUZW1wbGF0ZVF1ZXJ5O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhKGRhdGE6IElEYXRhQ29udGV4dDxhbnk+KSB7XG4gICAgdGhpcy5kYXRhQ29udGV4dCQubmV4dChkYXRhKTtcblxuICAgIHRoaXMudG90YWwkID0gZGF0YS50b3RhbC5waXBlKFxuICAgICAgbWFwKHRvdGFsID0+IHRvdGFsID8gdG90YWwgKyAnJyA6ICfiiJ4nKVxuICAgICk7XG5cbiAgICBpZiAoaXNDb250aW51YWJsZURhdGFDb250ZXh0KGRhdGEpKSB7XG4gICAgICB0aGlzLmNhbkxvYWRNb3JlJCA9IGNvbWJpbmVMYXRlc3QoW2RhdGEubG9hZGluZywgZGF0YS5oYXNNb3JlRGF0YV0pLnBpcGUoXG4gICAgICAgIG1hcCgoW2xvYWRpbmcsIGhhc01vcmVEYXRhXSkgPT4gIWxvYWRpbmcgJiYgaGFzTW9yZURhdGEpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbkxvYWRNb3JlJCA9IG9mKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFTbmFwc2hvdCgpOiBJRGF0YUNvbnRleHRDb250aW51YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29udGludWFibGU7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbHVtbkNvdW50KGNvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9jb2x1bW5Db3VudC5uZXh0KGNvdW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uQ291bnQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBpblNlbGVjdGlvbk1vZGUoY3VycmVudFNlbGVjdGlvbjogYW55W10pOiBib29sZWFuIHtcblxuICAgIGlmICh0aGlzLmludGVyYWN0aW9uTW9kZSA9PT0gJ3NlbGVjdGlvbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlcXVlc3RNb3JlRGF0YVpvbmVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhU25hcHNob3QuaGFzTW9yZURhdGFTbmFwc2hvdCkge1xuXG4gICAgICBpZiAodGhpcy5kYXRhU25hcHNob3Quc25hcHNob3QuaXNMb2FkaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU25hcHNob3QubG9hZE1vcmUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICBsb2FkZWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkTmV4dFF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RNb3JlRGF0YVpvbmVkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyYWNrQnlGbigpOiBUcmFja0J5RnVuY3Rpb248YW55PiB7XG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCBlbnRpdHk6IGFueSkgPT4gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIsIGl0ZW1zOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogU29ydCk6IHZvaWQge1xuICAgIGNvbnN0IGRjID0gdGhpcy5kYXRhQ29udGV4dCQuZ2V0VmFsdWUoKTtcbiAgICBpZiAoZGMpIHtcbiAgICAgIGRjLnNvcnQucmVwbGFjZVNvcnRzKFtzb3J0XSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dUaWxlKHRpbGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aWxlICYmICh0aGlzLmhpZGRlbkZpZWxkID8gIXRpbGVbdGhpcy5oaWRkZW5GaWVsZF0gOiB0cnVlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgc2Nyb2xsVG9wKCkge1xuICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoMCwgJ3Ntb290aCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEZvckNvbHVtbnMobm9kZXM6IGFueVtdLCBjb2x1bW5zOiBudW1iZXIpOiBhbnlbXVtdIHtcblxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBbXTtcblxuICAgIGNvbnN0IHJvd0NvdW50ID0gbm9kZXMubGVuZ3RoIC8gY29sdW1ucztcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCByb3dDb3VudDsgcm93SW5kZXgrKykge1xuICAgICAgY29uc3Qgcm93U3RhcnRJbmRleCA9IHJvd0luZGV4ICogY29sdW1ucztcbiAgICAgIGNvbnN0IHJvdyA9IG5vZGVzLnNsaWNlKHJvd1N0YXJ0SW5kZXgsIHJvd1N0YXJ0SW5kZXggKyBjb2x1bW5zKTtcblxuICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBjb2x1bW5zKSB7XG4gICAgICAgIHJvdy5wdXNoKG51bGwpOyAvLyBGaWxsIHVwIHJlbWFpbmluZ1xuICAgICAgfVxuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBwcml2YXRlIHJlc3BvbnNpdmVDb2x1bW4oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCBicmVha3BvaW50cyA9IEFycmF5LmZyb20odGhpcy5zaXplVG9Db2x1bW5zLmtleXMoKSk7XG4gICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoYnJlYWtwb2ludHMpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgbGV0IGFjdGl2ZVNpemUgPSBCcmVha3BvaW50cy5NZWRpdW07XG4gICAgICAgIGZvciAoY29uc3QgcXVlcnkgb2YgT2JqZWN0LmtleXMocmVzdWx0LmJyZWFrcG9pbnRzKSkge1xuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XG4gICAgICAgICAgICBhY3RpdmVTaXplID0gcXVlcnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZVRvQ29sdW1ucy5nZXQoYWN0aXZlU2l6ZSk7XG4gICAgICB9KSxcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuYWN0aXZlQ29sdW1uQ291bnQoKSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUNvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcbiAgICB0aGlzLnNpemVUb0NvbHVtbnMuZm9yRWFjaCgoY29scywgbXFBbGlhcykgPT4ge1xuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChtcUFsaWFzKSkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbkNvdW50O1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmdWxsXCJcbiAgICAgICAgICBbY2xhc3MuZW1iZWRkZWRdPVwiZW1iZWRkZWRcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlblwiXG4+XG4gIDwhLS0gR3JpZCBCcm93c2VyIC0tPlxuICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmdWxsIGVsZGVyLWdyaWQtY29udGFpbmVyXCJcbiAgICAgICAqbmdJZj1cImRhdGFDb250ZXh0JCB8IGFzeW5jIGFzIGRhdGFcIlxuICAgICAgIFtlbGRlckRhdGFDb250ZXh0U2VsZWN0aW9uXT1cImRhdGFcIiAjZGF0YVNlbGVjdGlvbj1cImVsZGVyRGF0YUNvbnRleHRTZWxlY3Rpb25cIlxuICAgICAgIFtlbGRlckRhdGFDb250ZXh0U2VsZWN0aW9uTW9kZWxdPVwic2VsZWN0aW9uTW9kZWxcIlxuICA+XG4gICAgPCEtLSBUb29sYmFyIFJvdyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidG9vbGJhclZpc2libGVcIlxuICAgICAgICAgY2xhc3M9XCJsYXlvdXQtcm93IHBsYWNlLXN0YXJ0LWNlbnRlciBmbGV4LW5vbmUgZWxkZXItZ3JpZC10b29sYmFyXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtY29sIGZsZXgtbm9uZVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7IHBhZGRpbmctcmlnaHQ6IDhweFwiICpuZ0lmPVwic2VsZWN0aW9uVmlzaWJsZVwiPlxuICAgICAgICA8ZWxkZXItc2VsZWN0aW9uLW1hc3Rlci1jaGVja2JveCBjbGFzcz1cImZsZXgtbm9uZVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMnB4XCI+PC9lbGRlci1zZWxlY3Rpb24tbWFzdGVyLWNoZWNrYm94PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiB0aGlzfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGVsZGVyLXNpbmdsZS1zb3J0ICpuZ0lmPVwiYXZhaWxhYmxlU29ydHMgJiYgYXZhaWxhYmxlU29ydHMubGVuZ3RoID4gMCAmJiBkYXRhLnNvcnQuc29ydHMgfCBhc3luYyBhcyBzb3J0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVTb3J0c109XCJhdmFpbGFibGVTb3J0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0aW9uUHJlZml4XT1cInNvcnRUcmFuc2xhdGlvblByZWZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHNbMF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInVwZGF0ZVNvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9lbGRlci1zaW5nbGUtc29ydD5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cInRvb2xiYXJWaXNpYmxlXCI+PC9tYXQtZGl2aWRlcj5cblxuICAgIDxlbGRlci1kYXRhLWNvbnRleHQtc3RhdGUtaW5kaWNhdG9yIGNsYXNzPVwiZmxleC1ub25lXCIgW2RhdGFDb250ZXh0XT1cImRhdGFcIj5cbiAgICA8L2VsZGVyLWRhdGEtY29udGV4dC1zdGF0ZS1pbmRpY2F0b3I+XG5cbiAgICA8IS0tIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCIgLS0+XG4gICAgPCEtLSBjZGtEcm9wTGlzdCAtLT5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICBjbGFzcz1cImxheW91dC1jb2wgZmxleCBlbGRlci1ncmlkLWJyb3dzZXJcIlxuICAgICAgaWQ9XCJkb2N1bWVudHMtY29udGFpbmVyXCJcbiAgICAgIFtpdGVtU2l6ZV09XCJpdGVtSGVpZ2h0XCJcbiAgICAgIFttaW5CdWZmZXJQeF09XCJpdGVtSGVpZ2h0ICogMlwiXG4gICAgICBbbWF4QnVmZmVyUHhdPVwiaXRlbUhlaWdodCAqIDNcIlxuICAgICAgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICAgIFtldmVudFRocm90dGxlXT1cIjIwMFwiXG4gICAgICBbb2Zmc2V0RmFjdG9yXT1cIjJcIlxuICAgICAgW2lnbm9yZVNjcm9sbEV2ZW50XT1cImRhdGEubG9hZGluZyB8IGFzeW5jXCJcbiAgICAgIFtjb250YWluZXJJZF09XCInZG9jdW1lbnRzLWNvbnRhaW5lcidcIiBbbGlzdGVuVG9Ib3N0XT1cImZhbHNlXCJcbiAgICAgIChjbG9zZVRvRW5kKT1cInJlcXVlc3RNb3JlRGF0YVpvbmVkKCRldmVudClcIj5cblxuICAgICAgPCEtLSAoc2Nyb2xsaW5nKT1cIm9uU2Nyb2xsaW5nKCRldmVudClcIiAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YVJvd3MkOyB0cmFja0J5OiB0cmFja0J5SW5kZXg7IHRlbXBsYXRlQ2FjaGVTaXplOiA1MFwiXG4gICAgICAgIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLXJvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaXRlbUhlaWdodCArICdweCdcIj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWxlIG9mIHJvdzsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG5cbiAgICAgICAgICA8IS0tIFRpbGUgQ2VsbCAtLT5cbiAgICAgICAgICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgKm5nSWY9XCJzaG93VGlsZSh0aWxlKVwiIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2sodGlsZSlcIlxuICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtRG91YmxlQ2xpY2sodGlsZSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGlsZVRlbXBsYXRlIHx8IHNpbXBsZVRpbGVUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogdGlsZX1cIj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBPdmVybGF5IChTZWxlY3Rpb24pIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb24gfCBhc3luYyBhcyBzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtb3ZlcmxheSBlbGRlci1jbGljay10aHJvdWdoXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lbGRlci1ncmlkLXRpbGUtb3ZlcmxheS1oaWRkZW5dPVwiIWluU2VsZWN0aW9uTW9kZShzZWxlY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lbGRlci1ncmlkLXRpbGUtb3ZlcmxheS12aXNpYmxlXT1cImluU2VsZWN0aW9uTW9kZShzZWxlY3Rpb24pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGVsLnRvZ2dsZSh0aWxlKVwiIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtY2hlY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVsZGVyLXNlbGVjdGVkXT1cIihzZWxlY3Rpb25Nb2RlbC5vYnNlcnZlU2VsZWN0aW9uKHRpbGUpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7KHNlbGVjdGlvbk1vZGVsLm9ic2VydmVTZWxlY3Rpb24odGlsZSkgfCBhc3luYykgPyAnY2hlY2tfY2lyY2xlJyA6ICdyYWRpb19idXR0b25fdW5jaGVja2VkJ319XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNhcmQ+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dUaWxlKHRpbGUpXCIgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtaGlkZGVuXCI+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2Rpdj5cblxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG5cbiAgICA8bWF0LXByb2dyZXNzLWJhciBjbGFzcz1cImZsZXgtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiKGRhdGE/LmxvYWRpbmcgfCBhc3luYykgPyAnaW5kZXRlcm1pbmF0ZScgOiAnZGV0ZXJtaW5hdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiKGRhdGEgJiYgKGRhdGEuc3RhdHVzIHwgYXN5bmMpPy5oYXNFcnJvcikgPyAnd2FybicgOiAncHJpbWFyeSdcIj5cbiAgICA8L21hdC1wcm9ncmVzcy1iYXI+XG5cbiAgICA8IS0tIEZvb3RlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBwbGFjZS1lbmQtY2VudGVyIGdhcC1tZCBmbGV4LW5vbmUgZWxkZXItZ3JpZC1mb290ZXJcIlxuICAgICAgICAgKm5nSWY9XCJmb290ZXJWaXNpYmxlXCJcbiAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTJweFwiPlxuXG4gICAgICA8IS0tIENvbnRpbnVhYmxlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29udGludWFibGVcIj5cbiAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWNhcHRpb24gbm9zZWxlY3RcIiBzdHlsZT1cImNvbG9yOiBncmF5XCI+XG4gICAgICAgICAgICB7eyhkYXRhU25hcHNob3Q/LmRhdGEgfCBhc3luYyk/Lmxlbmd0aH19IC8ge3t0b3RhbCQgfCBhc3luY319XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoY2FuTG9hZE1vcmUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVNuYXBzaG90LmxvYWRNb3JlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gUGFnZWQgLS0+XG4gICAgICA8bWF0LXBhZ2luYXRvciAjbWF0UGFnaW5hdG9yICpuZ0lmPVwiaXNBY3RpdmVQYWdlZCAmJiAoZGF0YUFjdGl2ZVBhZ2VkLnBhZ2UgfCBhc3luYykgYXMgcGFnZVwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cImRhdGFDb250ZXh0Py50b3RhbCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZT8uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2U/LnNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIj5cbiAgICAgIDwvbWF0LXBhZ2luYXRvcj5cblxuICAgICAgPCEtLSBMb2NhbCBTb3VyY2UgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQWN0aXZlUGFnZWQgJiYgIWlzQ29udGludWFibGVcIj5cbiAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWNhcHRpb24gbm9zZWxlY3RcIiBzdHlsZT1cImNvbG9yOiBncmF5XCI+XG4gICAgICAgICAgICB7eyhkYXRhU25hcHNob3Q/LmRhdGEgfCBhc3luYyk/Lmxlbmd0aH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L2Rpdj5cblxuXG4gIDwvZGl2PlxuPC9tYXQtY2FyZD5cblxuPG5nLXRlbXBsYXRlICNzaW1wbGVUaWxlVGVtcGxhdGUgbGV0LXRpbGU+XG4gIDxkaXYgKm5nSWY9XCJ0aWxlXCIgY2xhc3M9XCJsYXlvdXQtY29sIHBsYWNlLWNlbnRlci1jZW50ZXIgZmxleFwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlXCI+XG4gICAgPHAgY2xhc3M9XCJub3NlbGVjdFwiPlRpbGU6IHt7dGlsZX19PC9wPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
2
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
3
3
|
import { combineLatest } from 'rxjs';
|
|
4
4
|
import { map, tap } from 'rxjs/operators';
|
|
@@ -64,9 +64,11 @@ export class ElderThemeToggleComponent {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
ElderThemeToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ElderThemeToggleComponent, deps: [{ token: i1.ElderThemeService }, { token: i2.ElderThemePreferenceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
-
ElderThemeToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ElderThemeToggleComponent, selector: "elder-theme-toggle", ngImport: i0, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n
|
|
67
|
+
ElderThemeToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ElderThemeToggleComponent, selector: "elder-theme-toggle", inputs: { color: "color" }, ngImport: i0, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n>\n <mat-icon [color]=\"color\">\n {{activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2'}}\n </mat-icon>\n</mat-slide-toggle>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
68
68
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ElderThemeToggleComponent, decorators: [{
|
|
69
69
|
type: Component,
|
|
70
|
-
args: [{ selector: 'elder-theme-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n
|
|
71
|
-
}], ctorParameters: function () { return [{ type: i1.ElderThemeService }, { type: i2.ElderThemePreferenceService }]; }
|
|
72
|
-
|
|
70
|
+
args: [{ selector: 'elder-theme-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n>\n <mat-icon [color]=\"color\">\n {{activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2'}}\n </mat-icon>\n</mat-slide-toggle>\n" }]
|
|
71
|
+
}], ctorParameters: function () { return [{ type: i1.ElderThemeService }, { type: i2.ElderThemePreferenceService }]; }, propDecorators: { color: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}] } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItdGhlbWUtdG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvdGhlbWUvZWxkZXItdGhlbWUtdG9nZ2xlL2VsZGVyLXRoZW1lLXRvZ2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3RoZW1lL2VsZGVyLXRoZW1lLXRvZ2dsZS9lbGRlci10aGVtZS10b2dnbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFheEMsTUFBTSxPQUFPLHlCQUF5QjtJQWVwQzs7OztnRkFJNEU7SUFFNUUsWUFDbUIsWUFBK0IsRUFDL0Isc0JBQW1EO1FBRG5ELGlCQUFZLEdBQVosWUFBWSxDQUFtQjtRQUMvQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQTZCO1FBckJ0RTs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQWlCdkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FDckM7WUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFDdkYsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUSxDQUFDLElBQWE7UUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQTtRQUMzRCxJQUFJLEtBQWdCLENBQUM7UUFDckIsSUFBRyxJQUFJLEVBQUU7WUFDUCxLQUFLLEdBQUcsTUFBTTtpQkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsS0FBSyxHQUFHLFlBQVksQ0FBQztTQUN0QjtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsaUJBQWlCLENBQ3ZCLFlBQXVCLEVBQ3ZCLFdBQXNCO1FBRXRCLElBQUcsWUFBWSxFQUFFLEVBQUUsS0FBSyxXQUFXLEVBQUUsRUFBRSxFQUFDO1lBQ3RDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO2FBQU87WUFDTixPQUFPLFdBQVcsQ0FBQztTQUNwQjtJQUNILENBQUM7O3NIQXZFVSx5QkFBeUI7MEdBQXpCLHlCQUF5QixzRkNqQnRDLDZWQVNBOzJGRFFhLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTTtrSkFleEMsS0FBSztzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7RWxkZXJUaGVtZVNlcnZpY2V9IGZyb20gJy4uL2VsZGVyLXRoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGhlbWVTcGVjfSBmcm9tICcuLi90aGVtZS1zcGVjJztcbmltcG9ydCB7RWxkZXJUaGVtZVByZWZlcmVuY2VTZXJ2aWNlfSBmcm9tICcuLi9lbGRlci10aGVtZS1wcmVmZXJlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG50eXBlIFRvZ2dsZVRoZW1lID0gJ2RlZmF1bHQnIHwgJ3NlY29uZGFyeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLXRoZW1lLXRvZ2dsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci10aGVtZS10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci10aGVtZS10b2dnbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJUaGVtZVRvZ2dsZUNvbXBvbmVudCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVUb2dnbGVUaGVtZSQ6IE9ic2VydmFibGU8VG9nZ2xlVGhlbWU+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2xvcjogVGhlbWVQYWxldHRlO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGhlbWVTZXJ2aWNlOiBFbGRlclRoZW1lU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lUHJlZmVyZW5jZVNlcnZpY2U6IEVsZGVyVGhlbWVQcmVmZXJlbmNlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmFjdGl2ZVRvZ2dsZVRoZW1lJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLmRlZmF1bHRUaGVtZSQsXG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLmFjdGl2ZVRoZW1lJFxuICAgICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2RlZmF1bHRUaGVtZSwgYWN0aXZlVGhlbWVdKSA9PiB0aGlzLmRlY2lkZVRvZ2dsZVRoZW1lKGRlZmF1bHRUaGVtZSwgYWN0aXZlVGhlbWUpKSxcbiAgICAgIHRhcCh0dCA9PiB0aGlzLmxvZ2dlci5pbmZvKCdBY3RpdmUgdG9nZ2xlIHRoZW1lOiAnICsgdHQpKVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgb25Ub2dnbGUodGdnbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHRoZW1lcyA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lc1NuYXBzaG90O1xuICAgIGNvbnN0IGRlZmF1bHRUaGVtZSA9IHRoaXMudGhlbWVTZXJ2aWNlLmRlZmF1bHRUaGVtZVNuYXBzaG90XG4gICAgbGV0IHRoZW1lOiBUaGVtZVNwZWM7XG4gICAgaWYodGdnbCkge1xuICAgICAgdGhlbWUgPSB0aGVtZXNcbiAgICAgICAgLmZpbmQodGhlbWUgPT4gdGhlbWUuaWQgIT09IGRlZmF1bHRUaGVtZT8uaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGVtZSA9IGRlZmF1bHRUaGVtZTtcbiAgICB9XG4gICAgaWYgKHRoZW1lKSB7XG4gICAgICB0aGlzLnRoZW1lUHJlZmVyZW5jZVNlcnZpY2UuYWN0aXZhdGVUaGVtZUFuZFNhdmUodGhlbWUuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgZGVjaWRlVG9nZ2xlVGhlbWUoXG4gICAgZGVmYXVsdFRoZW1lOiBUaGVtZVNwZWMsXG4gICAgYWN0aXZlVGhlbWU6IFRoZW1lU3BlY1xuICApOiBUb2dnbGVUaGVtZSB7XG4gICAgaWYoZGVmYXVsdFRoZW1lPy5pZCA9PT0gYWN0aXZlVGhlbWU/LmlkKXtcbiAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfSBlbHNlICB7XG4gICAgICByZXR1cm4gJ3NlY29uZGFyeSc7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cImFjdGl2ZVRvZ2dsZVRoZW1lJCB8IGFzeW5jIGFzIGFjdGl2ZVRvZ2dsZVRoZW1lXCJcbiAgW25nTW9kZWxdPVwiYWN0aXZlVG9nZ2xlVGhlbWUgIT09ICdkZWZhdWx0J1wiXG4gIChuZ01vZGVsQ2hhbmdlKT1cIm9uVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbj5cbiAgPG1hdC1pY29uIFtjb2xvcl09XCJjb2xvclwiPlxuICAgIHt7YWN0aXZlVG9nZ2xlVGhlbWUgPT09ICdkZWZhdWx0JyA/ICdsaWdodF9tb2RlJyA6ICdicmlnaHRuZXNzXzInfX1cbiAgPC9tYXQtaWNvbj5cbjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiJdfQ==
|
|
@@ -8646,11 +8646,13 @@ class ElderThemeToggleComponent {
|
|
|
8646
8646
|
}
|
|
8647
8647
|
}
|
|
8648
8648
|
ElderThemeToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ElderThemeToggleComponent, deps: [{ token: ElderThemeService }, { token: ElderThemePreferenceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
8649
|
-
ElderThemeToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ElderThemeToggleComponent, selector: "elder-theme-toggle", ngImport: i0, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n
|
|
8649
|
+
ElderThemeToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ElderThemeToggleComponent, selector: "elder-theme-toggle", inputs: { color: "color" }, ngImport: i0, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n>\n <mat-icon [color]=\"color\">\n {{activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2'}}\n </mat-icon>\n</mat-slide-toggle>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8650
8650
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ElderThemeToggleComponent, decorators: [{
|
|
8651
8651
|
type: Component,
|
|
8652
|
-
args: [{ selector: 'elder-theme-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n
|
|
8653
|
-
}], ctorParameters: function () { return [{ type: ElderThemeService }, { type: ElderThemePreferenceService }]; }
|
|
8652
|
+
args: [{ selector: 'elder-theme-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-slide-toggle *ngIf=\"activeToggleTheme$ | async as activeToggleTheme\"\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n>\n <mat-icon [color]=\"color\">\n {{activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2'}}\n </mat-icon>\n</mat-slide-toggle>\n" }]
|
|
8653
|
+
}], ctorParameters: function () { return [{ type: ElderThemeService }, { type: ElderThemePreferenceService }]; }, propDecorators: { color: [{
|
|
8654
|
+
type: Input
|
|
8655
|
+
}] } });
|
|
8654
8656
|
|
|
8655
8657
|
/**
|
|
8656
8658
|
* Applies material theme palettes to material components.
|
|
@@ -15754,7 +15756,7 @@ ElderGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
15754
15756
|
provide: ELDER_DATA_VIEW,
|
|
15755
15757
|
useExisting: forwardRef(() => ElderGridComponent)
|
|
15756
15758
|
}
|
|
15757
|
-
], queries: [{ propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <div *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <!-- cdkDrag [cdkDragDisabled]=\"true\" [cdkDragData]=\"tile\" -->\n <!-- <div class=\"tile-placeholder\" *cdkDragPlaceholder></div> -->\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n [class.elder-click-through]=\"true\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{(selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked'}}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}} / {{total$ | async}}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{tile}}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.scroll-fix{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.cdk-drag-preview{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{flex:0 1 100%;background:#ccc;border:dotted 3px #999;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.elder-grid-tile-overlay{position:absolute;inset:0;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}.elder-click-through{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5$3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i4$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i9.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: ElderSingleSortComponent, selector: "elder-single-sort", inputs: ["availableSorts", "translationPrefix", "sort"], outputs: ["sortChange"] }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "directive", type: ElderInfiniteScrollLegacyDirective, selector: "[infiniteScroll]" }, { kind: "directive", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "component", type: i12.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i17.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
15759
|
+
], queries: [{ propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <mat-card appearance=\"outlined\" *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{(selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked'}}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </mat-card>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}} / {{total$ | async}}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{tile}}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5$3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i4$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i9.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: ElderSingleSortComponent, selector: "elder-single-sort", inputs: ["availableSorts", "translationPrefix", "sort"], outputs: ["sortChange"] }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "directive", type: ElderInfiniteScrollLegacyDirective, selector: "[infiniteScroll]" }, { kind: "directive", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "component", type: i12.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i17.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
15758
15760
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ElderGridComponent, decorators: [{
|
|
15759
15761
|
type: Component,
|
|
15760
15762
|
args: [{ selector: 'elder-grid', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
@@ -15762,7 +15764,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
15762
15764
|
provide: ELDER_DATA_VIEW,
|
|
15763
15765
|
useExisting: forwardRef(() => ElderGridComponent)
|
|
15764
15766
|
}
|
|
15765
|
-
], template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <
|
|
15767
|
+
], template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n style=\"overflow: hidden\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n <elder-single-sort *ngIf=\"availableSorts && availableSorts.length > 0 && data.sort.sorts | async as sorts\"\n class=\"flex-none\"\n [availableSorts]=\"availableSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [sort]=\"sorts[0]\"\n (sortChange)=\"updateSort($event)\">\n </elder-single-sort>\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"documents-container\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n infiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"'documents-container'\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <mat-card appearance=\"outlined\" *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{(selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked'}}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </mat-card>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}} / {{total$ | async}}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{(dataSnapshot?.data | async)?.length}}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{tile}}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"] }]
|
|
15766
15768
|
}], ctorParameters: function () {
|
|
15767
15769
|
return [{ type: SelectionModel, decorators: [{
|
|
15768
15770
|
type: Optional
|