@dereekb/dbx-web 12.1.6 → 12.1.8

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.
Files changed (43) hide show
  1. package/esm2022/lib/extension/download/text/download.text.component.mjs +18 -14
  2. package/esm2022/table/lib/index.mjs +4 -1
  3. package/esm2022/table/lib/table.cell.action.component.mjs +2 -2
  4. package/esm2022/table/lib/table.component.mjs +99 -8
  5. package/esm2022/table/lib/table.fullsummaryrow.component.mjs +34 -0
  6. package/esm2022/table/lib/table.group.directive.mjs +20 -0
  7. package/esm2022/table/lib/table.group.footer.component.mjs +35 -0
  8. package/esm2022/table/lib/table.group.header.component.mjs +35 -0
  9. package/esm2022/table/lib/table.item.action.component.mjs +4 -4
  10. package/esm2022/table/lib/table.item.cell.component.mjs +4 -4
  11. package/esm2022/table/lib/table.item.directive.mjs +7 -7
  12. package/esm2022/table/lib/table.item.header.component.mjs +4 -4
  13. package/esm2022/table/lib/table.mjs +10 -2
  14. package/esm2022/table/lib/table.module.mjs +4 -16
  15. package/esm2022/table/lib/table.store.mjs +16 -2
  16. package/fesm2022/dereekb-dbx-web-table.mjs +232 -27
  17. package/fesm2022/dereekb-dbx-web-table.mjs.map +1 -1
  18. package/fesm2022/dereekb-dbx-web.mjs +15 -11
  19. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  20. package/lib/extension/download/text/download.text.component.d.ts +7 -9
  21. package/lib/extension/table/_table.scss +7 -0
  22. package/lib/layout/style/_style.scss +4 -0
  23. package/package.json +1 -1
  24. package/table/lib/date/daterange.table.cell.input.component.d.ts +1 -1
  25. package/table/lib/index.d.ts +3 -0
  26. package/table/lib/table.cell.action.component.d.ts +1 -1
  27. package/table/lib/table.cell.input.component.d.ts +1 -1
  28. package/table/lib/table.cell.summaryend.component.d.ts +1 -1
  29. package/table/lib/table.cell.summarystart.component.d.ts +1 -1
  30. package/table/lib/table.column.directive.d.ts +1 -1
  31. package/table/lib/table.component.d.ts +38 -15
  32. package/table/lib/table.d.ts +47 -7
  33. package/table/lib/table.directive.d.ts +2 -2
  34. package/table/lib/table.fullsummaryrow.component.d.ts +12 -0
  35. package/table/lib/table.group.directive.d.ts +14 -0
  36. package/table/lib/table.group.footer.component.d.ts +9 -0
  37. package/table/lib/table.group.header.component.d.ts +9 -0
  38. package/table/lib/table.item.action.component.d.ts +2 -2
  39. package/table/lib/table.item.cell.component.d.ts +2 -2
  40. package/table/lib/table.item.directive.d.ts +6 -6
  41. package/table/lib/table.item.header.component.d.ts +2 -2
  42. package/table/lib/table.module.d.ts +1 -13
  43. package/table/lib/table.store.d.ts +11 -9
@@ -1,8 +1,8 @@
1
1
  import { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input, viewChild } from '@angular/core';
2
2
  import { MatSnackBar } from '@angular/material/snack-bar';
3
- import { loadingStateContext, successResult, valueFromFinishedLoadingState } from '@dereekb/rxjs';
3
+ import { loadingStateContext, successResult, valueFromFinishedLoadingState, maybeValueFromObservableOrValue } from '@dereekb/rxjs';
4
4
  import { MS_IN_SECOND } from '@dereekb/util';
5
- import { combineLatest, distinctUntilChanged, first, map, of, shareReplay, switchMap, tap } from 'rxjs';
5
+ import { first, of, shareReplay, switchMap, tap } from 'rxjs';
6
6
  import { Clipboard } from '@angular/cdk/clipboard';
7
7
  import { DomSanitizer } from '@angular/platform-browser';
8
8
  import { AbstractSubscriptionDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';
@@ -28,9 +28,11 @@ export class DbxDownloadTextViewComponent extends AbstractSubscriptionDirective
28
28
  showPreview = input(true);
29
29
  content = input(undefined);
30
30
  contentState = input(undefined);
31
+ contentState$ = toObservable(this.contentState).pipe(maybeValueFromObservableOrValue(), shareReplay(1));
32
+ contentStateSignal = toSignal(this.contentState$);
31
33
  contentLoadingStateSignal = computed(() => {
32
34
  const content = this.content();
33
- const contentState = this.contentState();
35
+ const contentState = this.contentStateSignal();
34
36
  let result;
35
37
  if (contentState) {
36
38
  result = contentState;
@@ -49,22 +51,24 @@ export class DbxDownloadTextViewComponent extends AbstractSubscriptionDirective
49
51
  return of(undefined);
50
52
  }
51
53
  }));
52
- contentData$ = this.content$.pipe(map((x) => x?.content));
53
- fileName$ = this.content$.pipe(map((x) => x?.name ?? 'File'), shareReplay(1));
54
- fileUrl$ = this.content$.pipe(map((content) => {
54
+ contentSignal = toSignal(this.content$);
55
+ contentDataSignal = computed(() => this.contentSignal()?.content);
56
+ fileUrlSignal = computed(() => {
57
+ const content = this.contentSignal();
55
58
  let fileUrl = undefined;
56
59
  if (content) {
57
60
  const blob = new Blob([content.content], { type: content.mimeType ?? 'application/octet-stream' });
58
61
  fileUrl = this._sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(blob));
59
62
  }
60
63
  return fileUrl;
61
- }), shareReplay(1));
62
- downloadReady$ = combineLatest([toObservable(this.downloadButton), this.fileName$, this.fileUrl$]).pipe(map(([button, name, url]) => Boolean(button && name && url)), distinctUntilChanged(), shareReplay(1));
63
- contentSignal = toSignal(this.content$);
64
- contentDataSignal = toSignal(this.contentData$);
65
- fileNameSignal = toSignal(this.fileName$);
66
- fileUrlSignal = toSignal(this.fileUrl$);
67
- downloadReadySignal = toSignal(this.downloadReady$);
64
+ });
65
+ fileNameSignal = computed(() => this.contentSignal()?.name ?? 'File');
66
+ downloadReadySignal = computed(() => {
67
+ const downloadButton = this.downloadButton();
68
+ const fileName = this.fileNameSignal();
69
+ const fileUrl = this.fileUrlSignal();
70
+ return Boolean(downloadButton && fileName && fileUrl);
71
+ });
68
72
  context = loadingStateContext({ obs: this.contentLoadingState$ });
69
73
  handleCopyToClipboard = () => {
70
74
  return this.content$.pipe(first(), switchMap((downloadTextContent) => {
@@ -110,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
110
114
  type: Component,
111
115
  args: [{ selector: 'dbx-download-text-view', standalone: true, imports: [NgTemplateOutlet, DbxLoadingComponent, DbxActionModule, DbxActionButtonDirective, DbxButtonComponent, DbxButtonSpacerDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dbx-download-text-view\">\n <dbx-loading [context]=\"context\" [linear]=\"linear()\" [text]=\"loadingText()\">\n <ng-container *ngTemplateOutlet=\"contentView\"></ng-container>\n </dbx-loading>\n</div>\n\n<!-- Template -->\n<ng-template #contentView>\n <div class=\"dbx-download-text-view-content\">\n @if (showTitle()) {\n <div class=\"dbx-download-text-view-content-title dbx-mb2 mat-subtitle-2\">{{ fileNameSignal() }}</div>\n }\n @if (showPreview()) {\n <div class=\"dbx-download-text-preview dbx-json dbx-content-pit dbx-content-pit-scrollable dbx-mb3\">{{ contentDataSignal() }}</div>\n }\n <div class=\"dbx-download-text-view-actions\">\n <dbx-button dbxAction dbxActionValue [raised]=\"true\" [dbxActionHandler]=\"handleCopyToClipboard\" icon=\"content_copy\" dbxActionButton text=\"Copy To Clipboard\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <a #downloadButton [href]=\"fileUrlSignal()\" [attr.download]=\"fileNameSignal()\"><dbx-button icon=\"download\" text=\"Download\" [raised]=\"true\" [working]=\"!downloadReadySignal()\" [disabled]=\"!downloadReadySignal()\"></dbx-button></a>\n </div>\n </div>\n</ng-template>\n" }]
112
116
  }] });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQudGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3NyYy9saWIvZXh0ZW5zaW9uL2Rvd25sb2FkL3RleHQvZG93bmxvYWQudGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3NyYy9saWIvZXh0ZW5zaW9uL2Rvd25sb2FkL3RleHQvZG93bmxvYWQudGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBcUMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxZQUFZLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFjLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFN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RUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDM0YsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNqRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQzt3R0F0SFMsNEJBQTRCOzRGQUE1Qiw0QkFBNEIseTlCQUtrRCxVQUFVLG9FQy9CckcsMnJDQXNCQSw0Q0RDWSxnQkFBZ0Isb0pBQUUsbUJBQW1CLGtLQUFFLGVBQWUsb2hCQUE0QixrQkFBa0IseU5BQUUsd0JBQXdCOzs0RkFHN0gsNEJBQTRCO2tCQVB4QyxTQUFTOytCQUVFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLENBQUMsbUJBQ3hILHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBXb3JrVXNpbmdPYnNlcnZhYmxlLCBMb2FkaW5nU3RhdGUsIGxvYWRpbmdTdGF0ZUNvbnRleHQsIHN1Y2Nlc3NSZXN1bHQsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBNU19JTl9TRUNPTkQsIHR5cGUgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaXJzdCwgbWFwLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7IERvd25sb2FkVGV4dENvbnRlbnQgfSBmcm9tICcuL2Rvd25sb2FkLnRleHQnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFic3RyYWN0U3Vic2NyaXB0aW9uRGlyZWN0aXZlLCBEYnhBY3Rpb25CdXR0b25EaXJlY3RpdmUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGJ4TG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYnhCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhBY3Rpb25Nb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9hY3Rpb24vYWN0aW9uLm1vZHVsZSc7XG5pbXBvcnQgeyBEYnhCdXR0b25TcGFjZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vYnV0dG9uLnNwYWNlci5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIERieFN0cnVjdHVyZURpcmVjdGl2ZSB1c2VkIHNwZWNpZmljYWxseSBvbiB0aGUgYm9keSBvZiB0aGUgYXBwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvd25sb2FkLnRleHQuY29tcG9uZW50Lmh0bWwnLFxuICBzZWxlY3RvcjogJ2RieC1kb3dubG9hZC10ZXh0LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgRGJ4TG9hZGluZ0NvbXBvbmVudCwgRGJ4QWN0aW9uTW9kdWxlLCBEYnhBY3Rpb25CdXR0b25EaXJlY3RpdmUsIERieEJ1dHRvbkNvbXBvbmVudCwgRGJ4QnV0dG9uU3BhY2VyRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RG93bmxvYWRUZXh0Vmlld0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0U3Vic2NyaXB0aW9uRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xpcGJvYXJkID0gaW5qZWN0KENsaXBib2FyZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hdFNuYWNrYmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRCdXR0b24gPSB2aWV3Q2hpbGQ8c3RyaW5nLCBNYXliZTxFbGVtZW50UmVmPj4oJ2Rvd25sb2FkQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pO1xuXG4gIHJlYWRvbmx5IGxvYWRpbmdUZXh0ID0gaW5wdXQ8TWF5YmU8c3RyaW5nPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgbGluZWFyID0gaW5wdXQ8TWF5YmU8Ym9vbGVhbj4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHNob3dUaXRsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzaG93UHJldmlldyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnQgPSBpbnB1dDxNYXliZTxEb3dubG9hZFRleHRDb250ZW50Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgY29udGVudFN0YXRlID0gaW5wdXQ8TWF5YmU8TG9hZGluZ1N0YXRlPERvd25sb2FkVGV4dENvbnRlbnQ+Pj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBjb250ZW50TG9hZGluZ1N0YXRlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQoKTtcbiAgICBjb25zdCBjb250ZW50U3RhdGUgPSB0aGlzLmNvbnRlbnRTdGF0ZSgpO1xuXG4gICAgbGV0IHJlc3VsdDogTWF5YmU8TG9hZGluZ1N0YXRlPERvd25sb2FkVGV4dENvbnRlbnQ+PjtcblxuICAgIGlmIChjb250ZW50U3RhdGUpIHtcbiAgICAgIHJlc3VsdCA9IGNvbnRlbnRTdGF0ZTtcbiAgICB9IGVsc2UgaWYgKGNvbnRlbnQpIHtcbiAgICAgIHJlc3VsdCA9IHN1Y2Nlc3NSZXN1bHQoY29udGVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGVudExvYWRpbmdTdGF0ZSQgPSB0b09ic2VydmFibGUodGhpcy5jb250ZW50TG9hZGluZ1N0YXRlU2lnbmFsKTtcbiAgcmVhZG9ubHkgY29udGVudCQ6IE9ic2VydmFibGU8TWF5YmU8RG93bmxvYWRUZXh0Q29udGVudD4+ID0gdGhpcy5jb250ZW50TG9hZGluZ1N0YXRlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHgpIHtcbiAgICAgICAgcmV0dXJuIG9mKHgpLnBpcGUodmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnREYXRhJCA9IHRoaXMuY29udGVudCQucGlwZShtYXAoKHgpID0+IHg/LmNvbnRlbnQpKTtcblxuICByZWFkb25seSBmaWxlTmFtZSQgPSB0aGlzLmNvbnRlbnQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5uYW1lID8/ICdGaWxlJyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBmaWxlVXJsJDogT2JzZXJ2YWJsZTxNYXliZTxTYWZlUmVzb3VyY2VVcmw+PiA9IHRoaXMuY29udGVudCQucGlwZShcbiAgICBtYXAoKGNvbnRlbnQpID0+IHtcbiAgICAgIGxldCBmaWxlVXJsOiBNYXliZTxTYWZlUmVzb3VyY2VVcmw+ID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NvbnRlbnQuY29udGVudF0sIHsgdHlwZTogY29udGVudC5taW1lVHlwZSA/PyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9KTtcbiAgICAgICAgZmlsZVVybCA9IHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwod2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsZVVybDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHkkID0gY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMuZG93bmxvYWRCdXR0b24pLCB0aGlzLmZpbGVOYW1lJCwgdGhpcy5maWxlVXJsJF0pLnBpcGUoXG4gICAgbWFwKChbYnV0dG9uLCBuYW1lLCB1cmxdKSA9PiBCb29sZWFuKGJ1dHRvbiAmJiBuYW1lICYmIHVybCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjb250ZW50U2lnbmFsID0gdG9TaWduYWwodGhpcy5jb250ZW50JCk7XG4gIHJlYWRvbmx5IGNvbnRlbnREYXRhU2lnbmFsID0gdG9TaWduYWwodGhpcy5jb250ZW50RGF0YSQpO1xuXG4gIHJlYWRvbmx5IGZpbGVOYW1lU2lnbmFsID0gdG9TaWduYWwodGhpcy5maWxlTmFtZSQpO1xuICByZWFkb25seSBmaWxlVXJsU2lnbmFsID0gdG9TaWduYWwodGhpcy5maWxlVXJsJCk7XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHlTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmRvd25sb2FkUmVhZHkkKTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy5jb250ZW50TG9hZGluZ1N0YXRlJCB9KTtcblxuICByZWFkb25seSBoYW5kbGVDb3B5VG9DbGlwYm9hcmQ6IFdvcmtVc2luZ09ic2VydmFibGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudCQucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICBzd2l0Y2hNYXAoKGRvd25sb2FkVGV4dENvbnRlbnQ6IE1heWJlPERvd25sb2FkVGV4dENvbnRlbnQ+KSA9PiB7XG4gICAgICAgIGlmIChkb3dubG9hZFRleHRDb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLl9jbGlwYm9hcmQuYmVnaW5Db3B5KGRvd25sb2FkVGV4dENvbnRlbnQuY29udGVudCk7XG5cbiAgICAgICAgICAgIGxldCBzZWNvbmRzUmVtYWluaW5nRm9yQ29weSA9IDIwOyAvLyBhdHRlbXB0IHRvIGNvcHkgZm9yIHVwIHRvIDIwIHNlY29uZHNcblxuICAgICAgICAgICAgY29uc3QgYXR0ZW1wdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29weUlzRmluaXNoZWQgPSBwZW5kaW5nLmNvcHkoKTtcblxuICAgICAgICAgICAgICBpZiAoIWNvcHlJc0ZpbmlzaGVkICYmIC0tc2Vjb25kc1JlbWFpbmluZ0ZvckNvcHkpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGVtcHQsIE1TX0lOX1NFQ09ORCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdG8gZGVzdHJveSB3aGVuIHlvdSdyZSBkb25lIVxuICAgICAgICAgICAgICAgIHBlbmRpbmcuZGVzdHJveSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvcHlJc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXR0ZW1wdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKChzdWNjZXNzKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5fbWF0U25hY2tiYXIub3BlbignQ29waWVkIHRvIGNsaXBib2FyZCcsIHVuZGVmaW5lZCwgeyBkdXJhdGlvbjogMyAqIE1TX0lOX1NFQ09ORCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9tYXRTbmFja2Jhci5vcGVuKCdDb250ZW50IGZhaWxlZCB0byBjb3B5Li4uJywgdW5kZWZpbmVkLCB7IGR1cmF0aW9uOiAzICogTVNfSU5fU0VDT05EIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWRvd25sb2FkLXRleHQtdmlld1wiPlxuICA8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiIFtsaW5lYXJdPVwibGluZWFyKClcIiBbdGV4dF09XCJsb2FkaW5nVGV4dCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRWaWV3XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGJ4LWxvYWRpbmc+XG48L2Rpdj5cblxuPCEtLSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFZpZXc+XG4gIDxkaXYgY2xhc3M9XCJkYngtZG93bmxvYWQtdGV4dC12aWV3LWNvbnRlbnRcIj5cbiAgICBAaWYgKHNob3dUaXRsZSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGJ4LWRvd25sb2FkLXRleHQtdmlldy1jb250ZW50LXRpdGxlIGRieC1tYjIgbWF0LXN1YnRpdGxlLTJcIj57eyBmaWxlTmFtZVNpZ25hbCgpIH19PC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc2hvd1ByZXZpZXcoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImRieC1kb3dubG9hZC10ZXh0LXByZXZpZXcgZGJ4LWpzb24gZGJ4LWNvbnRlbnQtcGl0IGRieC1jb250ZW50LXBpdC1zY3JvbGxhYmxlIGRieC1tYjNcIj57eyBjb250ZW50RGF0YVNpZ25hbCgpIH19PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJkYngtZG93bmxvYWQtdGV4dC12aWV3LWFjdGlvbnNcIj5cbiAgICAgIDxkYngtYnV0dG9uIGRieEFjdGlvbiBkYnhBY3Rpb25WYWx1ZSBbcmFpc2VkXT1cInRydWVcIiBbZGJ4QWN0aW9uSGFuZGxlcl09XCJoYW5kbGVDb3B5VG9DbGlwYm9hcmRcIiBpY29uPVwiY29udGVudF9jb3B5XCIgZGJ4QWN0aW9uQnV0dG9uIHRleHQ9XCJDb3B5IFRvIENsaXBib2FyZFwiPjwvZGJ4LWJ1dHRvbj5cbiAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgPGEgI2Rvd25sb2FkQnV0dG9uIFtocmVmXT1cImZpbGVVcmxTaWduYWwoKVwiIFthdHRyLmRvd25sb2FkXT1cImZpbGVOYW1lU2lnbmFsKClcIj48ZGJ4LWJ1dHRvbiBpY29uPVwiZG93bmxvYWRcIiB0ZXh0PVwiRG93bmxvYWRcIiBbcmFpc2VkXT1cInRydWVcIiBbd29ya2luZ109XCIhZG93bmxvYWRSZWFkeVNpZ25hbCgpXCIgW2Rpc2FibGVkXT1cIiFkb3dubG9hZFJlYWR5U2lnbmFsKClcIj48L2RieC1idXR0b24+PC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQudGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3NyYy9saWIvZXh0ZW5zaW9uL2Rvd25sb2FkL3RleHQvZG93bmxvYWQudGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3NyYy9saWIvZXh0ZW5zaW9uL2Rvd25sb2FkL3RleHQvZG93bmxvYWQudGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBcUMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLDZCQUE2QixFQUEwQiwrQkFBK0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5TCxPQUFPLEVBQUUsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUs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Q0FDSCxDQUFDO0lBQ0osQ0FBQyxDQUFDO3dHQWxIUyw0QkFBNEI7NEZBQTVCLDRCQUE0Qix5OUJBS2tELFVBQVUsb0VDL0JyRywyckNBc0JBLDRDRENZLGdCQUFnQixvSkFBRSxtQkFBbUIsa0tBQUUsZUFBZSxvaEJBQTRCLGtCQUFrQix5TkFBRSx3QkFBd0I7OzRGQUc3SCw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBRUUsd0JBQXdCLGNBQ3RCLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsQ0FBQyxtQkFDeEgsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFdvcmtVc2luZ09ic2VydmFibGUsIExvYWRpbmdTdGF0ZSwgbG9hZGluZ1N0YXRlQ29udGV4dCwgc3VjY2Vzc1Jlc3VsdCwgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUsIE1heWJlT2JzZXJ2YWJsZU9yVmFsdWUsIG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IE1TX0lOX1NFQ09ORCwgdHlwZSBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZmlyc3QsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgRG93bmxvYWRUZXh0Q29udGVudCB9IGZyb20gJy4vZG93bmxvYWQudGV4dCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUsIERieEFjdGlvbkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYnhMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERieEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERieEFjdGlvbk1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2FjdGlvbi9hY3Rpb24ubW9kdWxlJztcbmltcG9ydCB7IERieEJ1dHRvblNwYWNlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2J1dHRvbi9idXR0b24uc3BhY2VyLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogRGJ4U3RydWN0dXJlRGlyZWN0aXZlIHVzZWQgc3BlY2lmaWNhbGx5IG9uIHRoZSBib2R5IG9mIHRoZSBhcHAuXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZG93bmxvYWQudGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHNlbGVjdG9yOiAnZGJ4LWRvd25sb2FkLXRleHQtdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0LCBEYnhMb2FkaW5nQ29tcG9uZW50LCBEYnhBY3Rpb25Nb2R1bGUsIERieEFjdGlvbkJ1dHRvbkRpcmVjdGl2ZSwgRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhCdXR0b25TcGFjZXJEaXJlY3RpdmVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYnhEb3dubG9hZFRleHRWaWV3Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0U25hY2tiYXIgPSBpbmplY3QoTWF0U25hY2tCYXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuICByZWFkb25seSBkb3dubG9hZEJ1dHRvbiA9IHZpZXdDaGlsZDxzdHJpbmcsIE1heWJlPEVsZW1lbnRSZWY+PignZG93bmxvYWRCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSk7XG5cbiAgcmVhZG9ubHkgbG9hZGluZ1RleHQgPSBpbnB1dDxNYXliZTxzdHJpbmc+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBsaW5lYXIgPSBpbnB1dDxNYXliZTxib29sZWFuPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd1RpdGxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNob3dQcmV2aWV3ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgY29udGVudCA9IGlucHV0PE1heWJlPERvd25sb2FkVGV4dENvbnRlbnQ+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBjb250ZW50U3RhdGUgPSBpbnB1dDxNYXliZU9ic2VydmFibGVPclZhbHVlPExvYWRpbmdTdGF0ZTxEb3dubG9hZFRleHRDb250ZW50Pj4+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgY29udGVudFN0YXRlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmNvbnRlbnRTdGF0ZSkucGlwZShtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBjb250ZW50U3RhdGVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbnRlbnRTdGF0ZSQpO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnRMb2FkaW5nU3RhdGVTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCgpO1xuICAgIGNvbnN0IGNvbnRlbnRTdGF0ZSA9IHRoaXMuY29udGVudFN0YXRlU2lnbmFsKCk7XG5cbiAgICBsZXQgcmVzdWx0OiBNYXliZTxMb2FkaW5nU3RhdGU8RG93bmxvYWRUZXh0Q29udGVudD4+O1xuXG4gICAgaWYgKGNvbnRlbnRTdGF0ZSkge1xuICAgICAgcmVzdWx0ID0gY29udGVudFN0YXRlO1xuICAgIH0gZWxzZSBpZiAoY29udGVudCkge1xuICAgICAgcmVzdWx0ID0gc3VjY2Vzc1Jlc3VsdChjb250ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBjb250ZW50TG9hZGluZ1N0YXRlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmNvbnRlbnRMb2FkaW5nU3RhdGVTaWduYWwpO1xuICByZWFkb25seSBjb250ZW50JDogT2JzZXJ2YWJsZTxNYXliZTxEb3dubG9hZFRleHRDb250ZW50Pj4gPSB0aGlzLmNvbnRlbnRMb2FkaW5nU3RhdGUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICByZXR1cm4gb2YoeCkucGlwZSh2YWx1ZUZyb21GaW5pc2hlZExvYWRpbmdTdGF0ZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY29udGVudFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29udGVudCQpO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnREYXRhU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb250ZW50U2lnbmFsKCk/LmNvbnRlbnQpO1xuXG4gIHJlYWRvbmx5IGZpbGVVcmxTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudFNpZ25hbCgpO1xuXG4gICAgbGV0IGZpbGVVcmw6IE1heWJlPFNhZmVSZXNvdXJjZVVybD4gPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoY29udGVudCkge1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjb250ZW50LmNvbnRlbnRdLCB7IHR5cGU6IGNvbnRlbnQubWltZVR5cGUgPz8gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSk7XG4gICAgICBmaWxlVXJsID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVVcmw7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbGVOYW1lU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb250ZW50U2lnbmFsKCk/Lm5hbWUgPz8gJ0ZpbGUnKTtcblxuICByZWFkb25seSBkb3dubG9hZFJlYWR5U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRvd25sb2FkQnV0dG9uID0gdGhpcy5kb3dubG9hZEJ1dHRvbigpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5maWxlTmFtZVNpZ25hbCgpO1xuICAgIGNvbnN0IGZpbGVVcmwgPSB0aGlzLmZpbGVVcmxTaWduYWwoKTtcbiAgICByZXR1cm4gQm9vbGVhbihkb3dubG9hZEJ1dHRvbiAmJiBmaWxlTmFtZSAmJiBmaWxlVXJsKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMuY29udGVudExvYWRpbmdTdGF0ZSQgfSk7XG5cbiAgcmVhZG9ubHkgaGFuZGxlQ29weVRvQ2xpcGJvYXJkOiBXb3JrVXNpbmdPYnNlcnZhYmxlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQkLnBpcGUoXG4gICAgICBmaXJzdCgpLFxuICAgICAgc3dpdGNoTWFwKChkb3dubG9hZFRleHRDb250ZW50OiBNYXliZTxEb3dubG9hZFRleHRDb250ZW50PikgPT4ge1xuICAgICAgICBpZiAoZG93bmxvYWRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5fY2xpcGJvYXJkLmJlZ2luQ29weShkb3dubG9hZFRleHRDb250ZW50LmNvbnRlbnQpO1xuXG4gICAgICAgICAgICBsZXQgc2Vjb25kc1JlbWFpbmluZ0ZvckNvcHkgPSAyMDsgLy8gYXR0ZW1wdCB0byBjb3B5IGZvciB1cCB0byAyMCBzZWNvbmRzXG5cbiAgICAgICAgICAgIGNvbnN0IGF0dGVtcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvcHlJc0ZpbmlzaGVkID0gcGVuZGluZy5jb3B5KCk7XG5cbiAgICAgICAgICAgICAgaWYgKCFjb3B5SXNGaW5pc2hlZCAmJiAtLXNlY29uZHNSZW1haW5pbmdGb3JDb3B5KSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChhdHRlbXB0LCBNU19JTl9TRUNPTkQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRvIGRlc3Ryb3kgd2hlbiB5b3UncmUgZG9uZSFcbiAgICAgICAgICAgICAgICBwZW5kaW5nLmRlc3Ryb3koKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb3B5SXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF0dGVtcHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcCgoc3VjY2VzcykgPT4ge1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuX21hdFNuYWNrYmFyLm9wZW4oJ0NvcGllZCB0byBjbGlwYm9hcmQnLCB1bmRlZmluZWQsIHsgZHVyYXRpb246IDMgKiBNU19JTl9TRUNPTkQgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fbWF0U25hY2tiYXIub3BlbignQ29udGVudCBmYWlsZWQgdG8gY29weS4uLicsIHVuZGVmaW5lZCwgeyBkdXJhdGlvbjogMyAqIE1TX0lOX1NFQ09ORCB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xufVxuIiwiPGRpdiBjbGFzcz1cImRieC1kb3dubG9hZC10ZXh0LXZpZXdcIj5cbiAgPGRieC1sb2FkaW5nIFtjb250ZXh0XT1cImNvbnRleHRcIiBbbGluZWFyXT1cImxpbmVhcigpXCIgW3RleHRdPVwibG9hZGluZ1RleHQoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50Vmlld1wiPjwvbmctY29udGFpbmVyPlxuICA8L2RieC1sb2FkaW5nPlxuPC9kaXY+XG5cbjwhLS0gVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2NvbnRlbnRWaWV3PlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRvd25sb2FkLXRleHQtdmlldy1jb250ZW50XCI+XG4gICAgQGlmIChzaG93VGl0bGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImRieC1kb3dubG9hZC10ZXh0LXZpZXctY29udGVudC10aXRsZSBkYngtbWIyIG1hdC1zdWJ0aXRsZS0yXCI+e3sgZmlsZU5hbWVTaWduYWwoKSB9fTwvZGl2PlxuICAgIH1cbiAgICBAaWYgKHNob3dQcmV2aWV3KCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkYngtZG93bmxvYWQtdGV4dC1wcmV2aWV3IGRieC1qc29uIGRieC1jb250ZW50LXBpdCBkYngtY29udGVudC1waXQtc2Nyb2xsYWJsZSBkYngtbWIzXCI+e3sgY29udGVudERhdGFTaWduYWwoKSB9fTwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LWRvd25sb2FkLXRleHQtdmlldy1hY3Rpb25zXCI+XG4gICAgICA8ZGJ4LWJ1dHRvbiBkYnhBY3Rpb24gZGJ4QWN0aW9uVmFsdWUgW3JhaXNlZF09XCJ0cnVlXCIgW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlQ29weVRvQ2xpcGJvYXJkXCIgaWNvbj1cImNvbnRlbnRfY29weVwiIGRieEFjdGlvbkJ1dHRvbiB0ZXh0PVwiQ29weSBUbyBDbGlwYm9hcmRcIj48L2RieC1idXR0b24+XG4gICAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXI+PC9kYngtYnV0dG9uLXNwYWNlcj5cbiAgICAgIDxhICNkb3dubG9hZEJ1dHRvbiBbaHJlZl09XCJmaWxlVXJsU2lnbmFsKClcIiBbYXR0ci5kb3dubG9hZF09XCJmaWxlTmFtZVNpZ25hbCgpXCI+PGRieC1idXR0b24gaWNvbj1cImRvd25sb2FkXCIgdGV4dD1cIkRvd25sb2FkXCIgW3JhaXNlZF09XCJ0cnVlXCIgW3dvcmtpbmddPVwiIWRvd25sb2FkUmVhZHlTaWduYWwoKVwiIFtkaXNhYmxlZF09XCIhZG93bmxvYWRSZWFkeVNpZ25hbCgpXCI+PC9kYngtYnV0dG9uPjwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -8,6 +8,9 @@ export * from './table.column.header.component';
8
8
  export * from './table.column.footer.component';
9
9
  export * from './table.component';
10
10
  export * from './table.directive';
11
+ export * from './table.group.directive';
12
+ export * from './table.group.header.component';
13
+ export * from './table.group.footer.component';
11
14
  export * from './table.item.action.component';
12
15
  export * from './table.item.cell.component';
13
16
  export * from './table.item.directive';
@@ -15,4 +18,4 @@ export * from './table.item.header.component';
15
18
  export * from './table.module';
16
19
  export * from './table.store';
17
20
  export * from './table';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmZvb3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5pdGVtLmFjdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5pdGVtLmNlbGwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5pdGVtLmhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlJztcbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmZvb3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuZ3JvdXAuZm9vdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uYWN0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uY2VsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5pdGVtLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uaGVhZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLnN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUnO1xuIl19
@@ -6,7 +6,7 @@ import { DbxInjectionComponent } from '@dereekb/dbx-core';
6
6
  import * as i0 from "@angular/core";
7
7
  export class DbxTableActionCellComponent {
8
8
  tableStore = inject(DbxTableStore);
9
- config$ = this.tableStore.viewDelegate$.pipe(map((x) => x.summaryRowEnd), distinctUntilChanged());
9
+ config$ = this.tableStore.viewDelegate$.pipe(map((x) => x.actionHeader), distinctUntilChanged());
10
10
  configSignal = toSignal(this.config$);
11
11
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableActionCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
12
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxTableActionCellComponent, isStandalone: true, selector: "dbx-table-action-cell", ngImport: i0, template: `
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
25
25
  imports: [DbxInjectionComponent]
26
26
  }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNlbGwuYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQVcxRCxNQUFNLE9BQU8sMkJBQTJCO0lBQzdCLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbkMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQzNCLG9CQUFvQixFQUFFLENBQ3ZCLENBQUM7SUFFTyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3R0FScEMsMkJBQTJCOzRGQUEzQiwyQkFBMkIsaUZBUDVCOztHQUVULDREQUdTLHFCQUFxQjs7NEZBRXBCLDJCQUEyQjtrQkFUdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtYWN0aW9uLWNlbGwnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtaW5qZWN0aW9uIFtjb25maWddPVwiY29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRGJ4SW5qZWN0aW9uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZUFjdGlvbkNlbGxDb21wb25lbnQge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmUpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyQgPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5zdW1tYXJ5Um93RW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgcmVhZG9ubHkgY29uZmlnU2lnbmFsID0gdG9TaWduYWwodGhpcy5jb25maWckKTtcbn1cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNlbGwuYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQVcxRCxNQUFNLE9BQU8sMkJBQTJCO0lBQzdCLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbkMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQzFCLG9CQUFvQixFQUFFLENBQ3ZCLENBQUM7SUFFTyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3R0FScEMsMkJBQTJCOzRGQUEzQiwyQkFBMkIsaUZBUDVCOztHQUVULDREQUdTLHFCQUFxQjs7NEZBRXBCLDJCQUEyQjtrQkFUdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtYWN0aW9uLWNlbGwnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtaW5qZWN0aW9uIFtjb25maWddPVwiY29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRGJ4SW5qZWN0aW9uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZUFjdGlvbkNlbGxDb21wb25lbnQge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmUpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyQgPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5hY3Rpb25IZWFkZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBjb25maWdTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbmZpZyQpO1xufVxuIl19
@@ -1,8 +1,8 @@
1
1
  import { ChangeDetectionStrategy, Component, inject, computed, input } from '@angular/core';
2
2
  import { toSignal } from '@angular/core/rxjs-interop';
3
3
  import { DbxTableStore } from './table.store';
4
- import { loadingStateContext } from '@dereekb/rxjs';
5
- import { shareReplay, map } from 'rxjs';
4
+ import { loadingStateContext, mapLoadingStateValueWithOperator, valueFromFinishedLoadingState } from '@dereekb/rxjs';
5
+ import { shareReplay, map, switchMap } from 'rxjs';
6
6
  import { DbxLoadingComponent } from '@dereekb/dbx-web';
7
7
  import { InfiniteScrollDirective } from 'ngx-infinite-scroll';
8
8
  import { MatTableModule } from '@angular/material/table';
@@ -15,10 +15,21 @@ import { DbxTableItemHeaderComponent } from './table.item.header.component';
15
15
  import { DbxTableItemActionComponent } from './table.item.action.component';
16
16
  import { DbxTableActionCellComponent } from './table.cell.action.component';
17
17
  import { DbxTableColumnHeaderComponent } from './table.column.header.component';
18
+ import { DbxTableGroupHeaderComponent } from './table.group.header.component';
19
+ import { DbxTableGroupFooterComponent } from './table.group.footer.component';
20
+ import { pushArrayItemsIntoArray } from '@dereekb/util';
21
+ import { NgClass } from '@angular/common';
22
+ import { DbxTableFullSummaryRowComponent } from './table.fullsummaryrow.component';
18
23
  import * as i0 from "@angular/core";
19
24
  import * as i1 from "@angular/material/table";
20
25
  export const DBX_TABLE_ITEMS_COLUMN_NAME = '_items';
21
26
  export const DBX_TABLE_ACTIONS_COLUMN_NAME = '_actions';
27
+ export function isDbxTableViewGroupElement(element) {
28
+ return element.type === 'group';
29
+ }
30
+ export function isDbxTableViewItemElement(element) {
31
+ return element.type === 'item';
32
+ }
22
33
  /**
23
34
  * A table with fixed content
24
35
  */
@@ -35,7 +46,48 @@ export class DbxTableViewComponent {
35
46
  innerColumnNames$ = this.innerColumns$.pipe(map((x) => x.map((y) => y.columnName)), shareReplay(1));
36
47
  innerColumnsSignal = toSignal(this.innerColumns$);
37
48
  innerColumnNamesSignal = toSignal(this.innerColumnNames$);
38
- elements$ = this.tableStore.items$;
49
+ elementsState$ = this.tableStore.groupsState$.pipe(mapLoadingStateValueWithOperator(switchMap((groups) => {
50
+ return this.tableStore.viewDelegate$.pipe(map((viewDelegate) => {
51
+ const { groupHeader: inputGroupHeader, groupFooter: inputGroupFooter } = viewDelegate;
52
+ const hasGroupHeader = inputGroupHeader != null ? (group) => inputGroupHeader(group) != null : () => false;
53
+ const hasGroupFooter = inputGroupFooter != null ? (group) => inputGroupFooter(group) != null : () => false;
54
+ return groups
55
+ .map((group) => {
56
+ const { items } = group;
57
+ const itemElements = items.map((item) => ({
58
+ type: 'item',
59
+ item
60
+ }));
61
+ let elements;
62
+ if (group.default) {
63
+ elements = itemElements;
64
+ }
65
+ else {
66
+ const header = hasGroupHeader(group);
67
+ const footer = hasGroupFooter(group);
68
+ elements = [];
69
+ if (header) {
70
+ elements.push({
71
+ type: 'group',
72
+ location: 'header',
73
+ group
74
+ });
75
+ }
76
+ pushArrayItemsIntoArray(elements, itemElements);
77
+ if (footer) {
78
+ elements.push({
79
+ type: 'group',
80
+ location: 'footer',
81
+ group
82
+ });
83
+ }
84
+ }
85
+ return elements;
86
+ })
87
+ .flat();
88
+ }));
89
+ })), shareReplay(1));
90
+ elements$ = this.elementsState$.pipe(valueFromFinishedLoadingState([]), shareReplay(1));
39
91
  displayedColumns$ = this.innerColumnNames$.pipe(map((columnNames) => {
40
92
  return [this.itemsColumnName, ...columnNames, this.actionsColumnName];
41
93
  }), shareReplay(1));
@@ -43,20 +95,59 @@ export class DbxTableViewComponent {
43
95
  const columnNames = this.innerColumnNamesSignal() || [];
44
96
  return [this.itemsColumnName, ...columnNames, this.actionsColumnName];
45
97
  });
98
+ visibleColumnsSignal = computed(() => {
99
+ const displayedColumns = this.displayedColumnsSignal();
100
+ // TODO: Every time the table is rendered/size changes/etc we should recompute width of the first n columns that span the viewport
101
+ // in order to calculate a colspan for the group header/footer that is not greater than span of the table for a given view size
102
+ // I.E. if the screen shrinks to only show the first 4 columns, then the colspan should be 4.
103
+ // as a temporary measure, we just show half the columns
104
+ return displayedColumns.length / 2;
105
+ });
46
106
  trackByFunction$ = this.tableStore.viewDelegate$.pipe(map((x) => x.trackBy ?? this.DEFAULT_TRACK_BY_FUNCTION), shareReplay(1));
47
- trackByFunctionSignal = toSignal(this.trackByFunction$, { initialValue: this.DEFAULT_TRACK_BY_FUNCTION });
107
+ inputTrackByFunctionSignal = toSignal(this.trackByFunction$, { initialValue: this.DEFAULT_TRACK_BY_FUNCTION });
108
+ trackElementByFunctionSignal = computed(() => {
109
+ const trackByFunction = this.inputTrackByFunctionSignal();
110
+ const fn = (index, element) => {
111
+ if (element.type === 'item') {
112
+ return `i_${trackByFunction(index, element.item)}`;
113
+ }
114
+ else {
115
+ return `g_${element.group.groupId}`;
116
+ }
117
+ };
118
+ return fn;
119
+ });
48
120
  context = loadingStateContext({ obs: this.tableStore.dataState$ });
49
- dataLoadingContext = loadingStateContext({ obs: this.tableStore.itemsState$ });
121
+ dataLoadingContext = loadingStateContext({ obs: this.elementsState$ });
50
122
  contextSignal = toSignal(this.context.state$);
51
123
  dataLoadingContextSignal = toSignal(this.dataLoadingContext.state$);
124
+ viewDelegateSignal = toSignal(this.tableStore.viewDelegate$);
52
125
  onScrollDown() {
53
126
  this.tableStore.loadMore();
54
127
  }
128
+ showItemRow(_, row) {
129
+ return row.type === 'item';
130
+ }
131
+ showGroupHeaderRow(_, row) {
132
+ return row.type === 'group' && row.location === 'header';
133
+ }
134
+ showGroupFooterRow(_, row) {
135
+ return row.type === 'group' && row.location === 'footer';
136
+ }
137
+ showFooterRowSignal = computed(() => {
138
+ const viewDelegate = this.viewDelegateSignal();
139
+ const showFooterRow = viewDelegate && (viewDelegate.summaryRowHeader != null || viewDelegate.columnFooter != null || viewDelegate.summaryRowEnd != null);
140
+ return showFooterRow;
141
+ });
142
+ showFullSummaryRowSignal = computed(() => {
143
+ const viewDelegate = this.viewDelegateSignal();
144
+ return viewDelegate?.fullSummaryRow != null;
145
+ });
55
146
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxTableViewComponent, isStandalone: true, selector: "dbx-table-view", inputs: { scrollDistance: { classPropertyName: "scrollDistance", publicName: "scrollDistance", isSignal: true, isRequired: false, transformFunction: null }, throttleScroll: { classPropertyName: "throttleScroll", publicName: "throttleScroll", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elements$\" [trackBy]=\"trackByFunctionSignal() || DEFAULT_TRACK_BY_FUNCTION\">\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [element]=\"element\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [element]=\"element\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [element]=\"element\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal()\"></tr>\n\n <tr mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
147
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxTableViewComponent, isStandalone: true, selector: "dbx-table-view", inputs: { scrollDistance: { classPropertyName: "scrollDistance", publicName: "scrollDistance", isSignal: true, isRequired: false, transformFunction: null }, throttleScroll: { classPropertyName: "throttleScroll", publicName: "throttleScroll", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elements$\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.item) {\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.item) {\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.item) {\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
148
  }
58
149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableViewComponent, decorators: [{
59
150
  type: Component,
60
- args: [{ selector: 'dbx-table-view', imports: [DbxLoadingComponent, InfiniteScrollDirective, MatTableModule, DbxTableInputCellComponent, DbxTableItemHeaderComponent, DbxTableItemCellComponent, DbxTableItemActionComponent, DbxTableActionCellComponent, DbxTableColumnHeaderComponent, DbxTableColumnFooterComponent, DbxTableSummaryStartCellComponent, DbxTableSummaryEndCellComponent], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elements$\" [trackBy]=\"trackByFunctionSignal() || DEFAULT_TRACK_BY_FUNCTION\">\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [element]=\"element\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [element]=\"element\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [element]=\"element\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal()\"></tr>\n\n <tr mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n</dbx-loading>\n" }]
151
+ args: [{ selector: 'dbx-table-view', imports: [DbxLoadingComponent, NgClass, InfiniteScrollDirective, MatTableModule, DbxTableInputCellComponent, DbxTableItemHeaderComponent, DbxTableItemCellComponent, DbxTableItemActionComponent, DbxTableActionCellComponent, DbxTableColumnHeaderComponent, DbxTableColumnFooterComponent, DbxTableSummaryStartCellComponent, DbxTableSummaryEndCellComponent, DbxTableGroupHeaderComponent, DbxTableGroupFooterComponent, DbxTableFullSummaryRowComponent], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elements$\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.item) {\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.item) {\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.item) {\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n" }]
61
152
  }] });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFtQixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFFaEYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsUUFBUSxDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLFVBQVUsQ0FBQztBQUV4RDs7R0FFRztBQVFILE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBLGFBQXNCLENBQUEsQ0FBQyxDQUFDO0lBRTVDLHlCQUF5QixHQUF5QixDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25FLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRU8sY0FBYyxHQUFHLEtBQUssQ0FBUyxHQUFHLENBQUMsQ0FBQztJQUNwQyxjQUFjLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRW5DLGVBQWUsR0FBRywyQkFBMkIsQ0FBQztJQUM5QyxpQkFBaUIsR0FBRyw2QkFBNkIsQ0FBQztJQUVsRCxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDekMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQ3RDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxzQkFBc0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFMUQsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBRW5DLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3RELEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFTSxnQkFBZ0IsR0FBbUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM1RixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQ3ZELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8scUJBQXFCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBRTFHLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbkUsa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRS9FLGFBQWEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5Qyx3QkFBd0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTdFLFlBQVk7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7d0dBbkRVLHFCQUFxQjs0RkFBckIscUJBQXFCLDRYQy9CbEMsNGpGQXNEQSw0Q0QzQlksbUJBQW1CLG1LQUFFLHVCQUF1Qix5V0FBRSxjQUFjLDA3Q0FBRSwwQkFBMEIsaUVBQUUsMkJBQTJCLGtFQUFFLHlCQUF5QixvRkFBRSwyQkFBMkIsa0VBQUUsMkJBQTJCLGtFQUFFLDZCQUE2QixvRUFBRSw2QkFBNkIsb0VBQUUsaUNBQWlDLHlFQUFFLCtCQUErQjs7NEZBSTNVLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxnQkFBZ0IsV0FFakIsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsaUNBQWlDLEVBQUUsK0JBQStCLENBQUMsbUJBQ3RVLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFRyYWNrQnlGdW5jdGlvbiwgaW5qZWN0LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgbG9hZGluZ1N0YXRlQ29udGV4dCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4TG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUgfSBmcm9tICduZ3gtaW5maW5pdGUtc2Nyb2xsJztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRGJ4VGFibGVJbnB1dENlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlU3VtbWFyeUVuZENlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNlbGwuc3VtbWFyeWVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnlzdGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUNlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLml0ZW0uY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVBY3Rpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLmFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW5IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IERCWF9UQUJMRV9JVEVNU19DT0xVTU5fTkFNRSA9ICdfaXRlbXMnO1xuZXhwb3J0IGNvbnN0IERCWF9UQUJMRV9BQ1RJT05TX0NPTFVNTl9OQU1FID0gJ19hY3Rpb25zJztcblxuLyoqXG4gKiBBIHRhYmxlIHdpdGggZml4ZWQgY29udGVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtEYnhMb2FkaW5nQ29tcG9uZW50LCBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSwgTWF0VGFibGVNb2R1bGUsIERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50LCBEYnhUYWJsZUl0ZW1IZWFkZXJDb21wb25lbnQsIERieFRhYmxlSXRlbUNlbGxDb21wb25lbnQsIERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCwgRGJ4VGFibGVBY3Rpb25DZWxsQ29tcG9uZW50LCBEYnhUYWJsZUNvbHVtbkhlYWRlckNvbXBvbmVudCwgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQsIERieFRhYmxlU3VtbWFyeVN0YXJ0Q2VsbENvbXBvbmVudCwgRGJ4VGFibGVTdW1tYXJ5RW5kQ2VsbENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFRhYmxlVmlld0NvbXBvbmVudDxJLCBDLCBUPiB7XG4gIHJlYWRvbmx5IHRhYmxlU3RvcmUgPSBpbmplY3QoRGJ4VGFibGVTdG9yZTxJLCBDLCBUPik7XG5cbiAgcmVhZG9ubHkgREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTjogVHJhY2tCeUZ1bmN0aW9uPGFueT4gPSAoaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG5cbiAgcmVhZG9ubHkgc2Nyb2xsRGlzdGFuY2UgPSBpbnB1dDxudW1iZXI+KDAuNSk7XG4gIHJlYWRvbmx5IHRocm90dGxlU2Nyb2xsID0gaW5wdXQ8bnVtYmVyPig1MCk7XG5cbiAgcmVhZG9ubHkgaXRlbXNDb2x1bW5OYW1lID0gREJYX1RBQkxFX0lURU1TX0NPTFVNTl9OQU1FO1xuICByZWFkb25seSBhY3Rpb25zQ29sdW1uTmFtZSA9IERCWF9UQUJMRV9BQ1RJT05TX0NPTFVNTl9OQU1FO1xuXG4gIHJlYWRvbmx5IGlubmVyQ29sdW1ucyQgPSB0aGlzLnRhYmxlU3RvcmUuY29sdW1ucyQ7XG4gIHJlYWRvbmx5IGlubmVyQ29sdW1uTmFtZXMkID0gdGhpcy5pbm5lckNvbHVtbnMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcCgoeSkgPT4geS5jb2x1bW5OYW1lKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbm5lckNvbHVtbnNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmlubmVyQ29sdW1ucyQpO1xuICByZWFkb25seSBpbm5lckNvbHVtbk5hbWVzU2lnbmFsID0gdG9TaWduYWwodGhpcy5pbm5lckNvbHVtbk5hbWVzJCk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudHMkID0gdGhpcy50YWJsZVN0b3JlLml0ZW1zJDtcblxuICByZWFkb25seSBkaXNwbGF5ZWRDb2x1bW5zJCA9IHRoaXMuaW5uZXJDb2x1bW5OYW1lcyQucGlwZShcbiAgICBtYXAoKGNvbHVtbk5hbWVzKSA9PiB7XG4gICAgICByZXR1cm4gW3RoaXMuaXRlbXNDb2x1bW5OYW1lLCAuLi5jb2x1bW5OYW1lcywgdGhpcy5hY3Rpb25zQ29sdW1uTmFtZV07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkaXNwbGF5ZWRDb2x1bW5zU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gdGhpcy5pbm5lckNvbHVtbk5hbWVzU2lnbmFsKCkgfHwgW107XG4gICAgcmV0dXJuIFt0aGlzLml0ZW1zQ29sdW1uTmFtZSwgLi4uY29sdW1uTmFtZXMsIHRoaXMuYWN0aW9uc0NvbHVtbk5hbWVdO1xuICB9KTtcblxuICByZWFkb25seSB0cmFja0J5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPFRyYWNrQnlGdW5jdGlvbjxUPj4gPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50cmFja0J5ID8/IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0cmFja0J5RnVuY3Rpb25TaWduYWwgPSB0b1NpZ25hbCh0aGlzLnRyYWNrQnlGdW5jdGlvbiQsIHsgaW5pdGlhbFZhbHVlOiB0aGlzLkRFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT04gfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMudGFibGVTdG9yZS5kYXRhU3RhdGUkIH0pO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHQgPSBsb2FkaW5nU3RhdGVDb250ZXh0KHsgb2JzOiB0aGlzLnRhYmxlU3RvcmUuaXRlbXNTdGF0ZSQgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29udGV4dC5zdGF0ZSQpO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHRTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmRhdGFMb2FkaW5nQ29udGV4dC5zdGF0ZSQpO1xuXG4gIG9uU2Nyb2xsRG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlU3RvcmUubG9hZE1vcmUoKTtcbiAgfVxufVxuIiwiPGRieC1sb2FkaW5nIFtjb250ZXh0XT1cImNvbnRleHRcIj5cbiAgPGRieC1sb2FkaW5nIGNsYXNzPVwiZGJ4LXRhYmxlLXZpZXctbG9hZGluZ1wiIFtsaW5lYXJdPVwidHJ1ZVwiIFtjb250ZXh0XT1cImRhdGFMb2FkaW5nQ29udGV4dFwiPjwvZGJ4LWxvYWRpbmc+XG4gIDxzZWN0aW9uIGNsYXNzPVwiZGJ4LXRhYmxlLXZpZXdcIiBpbmZpbml0ZS1zY3JvbGwgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwic2Nyb2xsRGlzdGFuY2UoKVwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cInRocm90dGxlU2Nyb2xsKClcIiBbc2Nyb2xsV2luZG93XT1cImZhbHNlXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsRG93bigpXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZGJ4LXRhYmxlLXZpZXctdGFibGVcIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiZWxlbWVudHMkXCIgW3RyYWNrQnldPVwidHJhY2tCeUZ1bmN0aW9uU2lnbmFsKCkgfHwgREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTlwiPlxuICAgICAgPCEtLSBIZWFkZXIvSXRlbSBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiaXRlbXNDb2x1bW5OYW1lXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1pbnB1dC1jZWxsPjwvZGJ4LXRhYmxlLWlucHV0LWNlbGw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1pdGVtLWhlYWRlciBbZWxlbWVudF09XCJlbGVtZW50XCI+PC9kYngtdGFibGUtaXRlbS1oZWFkZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1zdW1tYXJ5LXN0YXJ0LWNlbGw+PC9kYngtdGFibGUtc3VtbWFyeS1zdGFydC1jZWxsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gQ29sdW1uIERlZmluaXRpb25zIC0tPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGlubmVyQ29sdW1uc1NpZ25hbCgpOyB0cmFjayBjb2x1bW4uY29sdW1uTmFtZSkge1xuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmNvbHVtbk5hbWVcIiBbc3RpY2t5XT1cImZhbHNlXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxkYngtdGFibGUtY29sdW1uLWhlYWRlciBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWNvbHVtbi1oZWFkZXI+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgPGRieC10YWJsZS1pdGVtLWNlbGwgW2VsZW1lbnRdPVwiZWxlbWVudFwiIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9kYngtdGFibGUtaXRlbS1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxkYngtdGFibGUtY29sdW1uLWZvb3RlciBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWNvbHVtbi1mb290ZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGFpbC9BY3Rpb24gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImFjdGlvbnNDb2x1bW5OYW1lXCIgW3N0aWNreUVuZF09XCJ0cnVlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1hY3Rpb24tY2VsbD48L2RieC10YWJsZS1hY3Rpb24tY2VsbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0tYWN0aW9uIFtlbGVtZW50XT1cImVsZW1lbnRcIj48L2RieC10YWJsZS1pdGVtLWFjdGlvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLXN1bW1hcnktZW5kLWNlbGw+PC9kYngtdGFibGUtc3VtbWFyeS1lbmQtY2VsbD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFRhYmxlIFZpZXcgLS0+XG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgc3RpY2t5OiB0cnVlXCI+PC90cj5cblxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNTaWduYWwoKVwiPjwvdHI+XG5cbiAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgIDwvdGFibGU+XG4gIDwvc2VjdGlvbj5cbjwvZGJ4LWxvYWRpbmc+XG4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFtQixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGdDQUFnQyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxF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MkIsa0VBQUUsMkJBQTJCLGtFQUFFLDZCQUE2QixvRUFBRSw2QkFBNkIsb0VBQUUsaUNBQWlDLHlFQUFFLCtCQUErQix1RUFBRSw0QkFBNEIsbUVBQUUsNEJBQTRCLG1FQUFFLCtCQUErQjs7NEZBSWpiLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxnQkFBZ0IsV0FFakIsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLGlDQUFpQyxFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLCtCQUErQixDQUFDLG1CQUM1YSx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBUcmFja0J5RnVuY3Rpb24sIGluamVjdCwgY29tcHV0ZWQsIGlucHV0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgTG9hZGluZ1N0YXRlLCBsb2FkaW5nU3RhdGVDb250ZXh0LCBtYXBMb2FkaW5nU3RhdGVWYWx1ZVdpdGhPcGVyYXRvciwgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5LCBtYXAsIE9ic2VydmFibGUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4TG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUgfSBmcm9tICduZ3gtaW5maW5pdGUtc2Nyb2xsJztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRGJ4VGFibGVJbnB1dENlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlU3VtbWFyeUVuZENlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNlbGwuc3VtbWFyeWVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnlzdGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUNlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLml0ZW0uY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVBY3Rpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLmFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW5IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUdyb3VwLCBEZWZhdWx0RGJ4VGFibGVJdGVtR3JvdXAgfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7IERieFRhYmxlR3JvdXBIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmdyb3VwLmhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVHcm91cEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuZ3JvdXAuZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBwdXNoQXJyYXlJdGVtc0ludG9BcnJheSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYnhUYWJsZUZ1bGxTdW1tYXJ5Um93Q29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5mdWxsc3VtbWFyeXJvdy5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgREJYX1RBQkxFX0lURU1TX0NPTFVNTl9OQU1FID0gJ19pdGVtcyc7XG5leHBvcnQgY29uc3QgREJYX1RBQkxFX0FDVElPTlNfQ09MVU1OX05BTUUgPSAnX2FjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieFRhYmxlVmlld0dyb3VwRWxlbWVudDxULCBHPiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdncm91cCc7XG4gIHJlYWRvbmx5IGxvY2F0aW9uOiAnaGVhZGVyJyB8ICdmb290ZXInO1xuICByZWFkb25seSBncm91cDogRGJ4VGFibGVJdGVtR3JvdXA8VCwgRz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4ge1xuICByZWFkb25seSB0eXBlOiAnaXRlbSc7XG4gIHJlYWRvbmx5IGl0ZW06IFQ7XG59XG5cbmV4cG9ydCB0eXBlIERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4gPSBEYnhUYWJsZVZpZXdHcm91cEVsZW1lbnQ8VCwgRz4gfCBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+KGVsZW1lbnQ6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBlbGVtZW50IGlzIERieFRhYmxlVmlld0dyb3VwRWxlbWVudDxULCBHPiB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdncm91cCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+KGVsZW1lbnQ6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBlbGVtZW50IGlzIERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+IHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gJ2l0ZW0nO1xufVxuXG4vKipcbiAqIEEgdGFibGUgd2l0aCBmaXhlZCBjb250ZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC10YWJsZS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW0RieExvYWRpbmdDb21wb25lbnQsIE5nQ2xhc3MsIEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlLCBNYXRUYWJsZU1vZHVsZSwgRGJ4VGFibGVJbnB1dENlbGxDb21wb25lbnQsIERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCwgRGJ4VGFibGVJdGVtQ2VsbENvbXBvbmVudCwgRGJ4VGFibGVJdGVtQWN0aW9uQ29tcG9uZW50LCBEYnhUYWJsZUFjdGlvbkNlbGxDb21wb25lbnQsIERieFRhYmxlQ29sdW1uSGVhZGVyQ29tcG9uZW50LCBEYnhUYWJsZUNvbHVtbkZvb3RlckNvbXBvbmVudCwgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50LCBEYnhUYWJsZVN1bW1hcnlFbmRDZWxsQ29tcG9uZW50LCBEYnhUYWJsZUdyb3VwSGVhZGVyQ29tcG9uZW50LCBEYnhUYWJsZUdyb3VwRm9vdGVyQ29tcG9uZW50LCBEYnhUYWJsZUZ1bGxTdW1tYXJ5Um93Q29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVWaWV3Q29tcG9uZW50PEksIEMsIFQsIEcgPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IHRhYmxlU3RvcmUgPSBpbmplY3QoRGJ4VGFibGVTdG9yZTxJLCBDLCBULCBHPik7XG5cbiAgcmVhZG9ubHkgREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTjogVHJhY2tCeUZ1bmN0aW9uPGFueT4gPSAoaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG5cbiAgcmVhZG9ubHkgc2Nyb2xsRGlzdGFuY2UgPSBpbnB1dDxudW1iZXI+KDAuNSk7XG4gIHJlYWRvbmx5IHRocm90dGxlU2Nyb2xsID0gaW5wdXQ8bnVtYmVyPig1MCk7XG5cbiAgcmVhZG9ubHkgaXRlbXNDb2x1bW5OYW1lID0gREJYX1RBQkxFX0lURU1TX0NPTFVNTl9OQU1FO1xuICByZWFkb25seSBhY3Rpb25zQ29sdW1uTmFtZSA9IERCWF9UQUJMRV9BQ1RJT05TX0NPTFVNTl9OQU1FO1xuXG4gIHJlYWRvbmx5IGlubmVyQ29sdW1ucyQgPSB0aGlzLnRhYmxlU3RvcmUuY29sdW1ucyQ7XG4gIHJlYWRvbmx5IGlubmVyQ29sdW1uTmFtZXMkID0gdGhpcy5pbm5lckNvbHVtbnMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcCgoeSkgPT4geS5jb2x1bW5OYW1lKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbm5lckNvbHVtbnNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmlubmVyQ29sdW1ucyQpO1xuICByZWFkb25seSBpbm5lckNvbHVtbk5hbWVzU2lnbmFsID0gdG9TaWduYWwodGhpcy5pbm5lckNvbHVtbk5hbWVzJCk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudHNTdGF0ZSQ6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz5bXT4+ID0gdGhpcy50YWJsZVN0b3JlLmdyb3Vwc1N0YXRlJC5waXBlKFxuICAgIG1hcExvYWRpbmdTdGF0ZVZhbHVlV2l0aE9wZXJhdG9yKFxuICAgICAgc3dpdGNoTWFwKChncm91cHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkLnBpcGUoXG4gICAgICAgICAgbWFwKCh2aWV3RGVsZWdhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXBIZWFkZXI6IGlucHV0R3JvdXBIZWFkZXIsIGdyb3VwRm9vdGVyOiBpbnB1dEdyb3VwRm9vdGVyIH0gPSB2aWV3RGVsZWdhdGU7XG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cEhlYWRlciA9IGlucHV0R3JvdXBIZWFkZXIgIT0gbnVsbCA/IChncm91cDogRGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pID0+IGlucHV0R3JvdXBIZWFkZXIoZ3JvdXApICE9IG51bGwgOiAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwRm9vdGVyID0gaW5wdXRHcm91cEZvb3RlciAhPSBudWxsID8gKGdyb3VwOiBEYnhUYWJsZUl0ZW1Hcm91cDxULCBHPikgPT4gaW5wdXRHcm91cEZvb3Rlcihncm91cCkgIT0gbnVsbCA6ICgpID0+IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzXG4gICAgICAgICAgICAgIC5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gZ3JvdXA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtRWxlbWVudHM6IERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+W10gPSBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnaXRlbScsXG4gICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRzOiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+W107XG5cbiAgICAgICAgICAgICAgICBpZiAoKGdyb3VwIGFzIERlZmF1bHREYnhUYWJsZUl0ZW1Hcm91cDxULCBHPikuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudHMgPSBpdGVtRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGhhc0dyb3VwSGVhZGVyKGdyb3VwKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvb3RlciA9IGhhc0dyb3VwRm9vdGVyKGdyb3VwKTtcblxuICAgICAgICAgICAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcHVzaEFycmF5SXRlbXNJbnRvQXJyYXkoZWxlbWVudHMsIGl0ZW1FbGVtZW50cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2Zvb3RlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmxhdCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlbGVtZW50cyQgPSB0aGlzLmVsZW1lbnRzU3RhdGUkLnBpcGUodmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoW10pLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLmlubmVyQ29sdW1uTmFtZXMkLnBpcGUoXG4gICAgbWFwKChjb2x1bW5OYW1lcykgPT4ge1xuICAgICAgcmV0dXJuIFt0aGlzLml0ZW1zQ29sdW1uTmFtZSwgLi4uY29sdW1uTmFtZXMsIHRoaXMuYWN0aW9uc0NvbHVtbk5hbWVdO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1uc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRoaXMuaW5uZXJDb2x1bW5OYW1lc1NpZ25hbCgpIHx8IFtdO1xuICAgIHJldHVybiBbdGhpcy5pdGVtc0NvbHVtbk5hbWUsIC4uLmNvbHVtbk5hbWVzLCB0aGlzLmFjdGlvbnNDb2x1bW5OYW1lXTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpO1xuXG4gICAgLy8gVE9ETzogRXZlcnkgdGltZSB0aGUgdGFibGUgaXMgcmVuZGVyZWQvc2l6ZSBjaGFuZ2VzL2V0YyB3ZSBzaG91bGQgcmVjb21wdXRlIHdpZHRoIG9mIHRoZSBmaXJzdCBuIGNvbHVtbnMgdGhhdCBzcGFuIHRoZSB2aWV3cG9ydFxuICAgIC8vIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSBhIGNvbHNwYW4gZm9yIHRoZSBncm91cCBoZWFkZXIvZm9vdGVyIHRoYXQgaXMgbm90IGdyZWF0ZXIgdGhhbiBzcGFuIG9mIHRoZSB0YWJsZSBmb3IgYSBnaXZlbiB2aWV3IHNpemVcbiAgICAvLyBJLkUuIGlmIHRoZSBzY3JlZW4gc2hyaW5rcyB0byBvbmx5IHNob3cgdGhlIGZpcnN0IDQgY29sdW1ucywgdGhlbiB0aGUgY29sc3BhbiBzaG91bGQgYmUgNC5cblxuICAgIC8vIGFzIGEgdGVtcG9yYXJ5IG1lYXN1cmUsIHdlIGp1c3Qgc2hvdyBoYWxmIHRoZSBjb2x1bW5zXG5cbiAgICByZXR1cm4gZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLyAyO1xuICB9KTtcblxuICByZWFkb25seSB0cmFja0J5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPFRyYWNrQnlGdW5jdGlvbjxUPj4gPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50cmFja0J5ID8/IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFRyYWNrQnlGdW5jdGlvblNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudHJhY2tCeUZ1bmN0aW9uJCwgeyBpbml0aWFsVmFsdWU6IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiB9KTtcbiAgcmVhZG9ubHkgdHJhY2tFbGVtZW50QnlGdW5jdGlvblNpZ25hbDogU2lnbmFsPFRyYWNrQnlGdW5jdGlvbjxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+Pj4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdHJhY2tCeUZ1bmN0aW9uID0gdGhpcy5pbnB1dFRyYWNrQnlGdW5jdGlvblNpZ25hbCgpIGFzIFRyYWNrQnlGdW5jdGlvbjxUPjtcblxuICAgIGNvbnN0IGZuOiBUcmFja0J5RnVuY3Rpb248RGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPj4gPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPikgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgIHJldHVybiBgaV8ke3RyYWNrQnlGdW5jdGlvbihpbmRleCwgZWxlbWVudC5pdGVtIGFzIFQpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYGdfJHtlbGVtZW50Lmdyb3VwLmdyb3VwSWR9YDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZuO1xuICB9KTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy50YWJsZVN0b3JlLmRhdGFTdGF0ZSQgfSk7XG4gIHJlYWRvbmx5IGRhdGFMb2FkaW5nQ29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMuZWxlbWVudHNTdGF0ZSQgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29udGV4dC5zdGF0ZSQpO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHRTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmRhdGFMb2FkaW5nQ29udGV4dC5zdGF0ZSQpO1xuXG4gIHJlYWRvbmx5IHZpZXdEZWxlZ2F0ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkKTtcblxuICBvblNjcm9sbERvd24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVN0b3JlLmxvYWRNb3JlKCk7XG4gIH1cblxuICBzaG93SXRlbVJvdyhfOiBudW1iZXIsIHJvdzogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cudHlwZSA9PT0gJ2l0ZW0nO1xuICB9XG5cbiAgc2hvd0dyb3VwSGVhZGVyUm93KF86IG51bWJlciwgcm93OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSAnZ3JvdXAnICYmIHJvdy5sb2NhdGlvbiA9PT0gJ2hlYWRlcic7XG4gIH1cblxuICBzaG93R3JvdXBGb290ZXJSb3coXzogbnVtYmVyLCByb3c6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09ICdncm91cCcgJiYgcm93LmxvY2F0aW9uID09PSAnZm9vdGVyJztcbiAgfVxuXG4gIHJlYWRvbmx5IHNob3dGb290ZXJSb3dTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RlbGVnYXRlID0gdGhpcy52aWV3RGVsZWdhdGVTaWduYWwoKTtcbiAgICBjb25zdCBzaG93Rm9vdGVyUm93ID0gdmlld0RlbGVnYXRlICYmICh2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0hlYWRlciAhPSBudWxsIHx8IHZpZXdEZWxlZ2F0ZS5jb2x1bW5Gb290ZXIgIT0gbnVsbCB8fCB2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0VuZCAhPSBudWxsKTtcbiAgICByZXR1cm4gc2hvd0Zvb3RlclJvdztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvd0Z1bGxTdW1tYXJ5Um93U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEZWxlZ2F0ZSA9IHRoaXMudmlld0RlbGVnYXRlU2lnbmFsKCk7XG4gICAgcmV0dXJuIHZpZXdEZWxlZ2F0ZT8uZnVsbFN1bW1hcnlSb3cgIT0gbnVsbDtcbiAgfSk7XG59XG4iLCI8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiPlxuICA8ZGJ4LWxvYWRpbmcgY2xhc3M9XCJkYngtdGFibGUtdmlldy1sb2FkaW5nXCIgW2xpbmVhcl09XCJ0cnVlXCIgW2NvbnRleHRdPVwiZGF0YUxvYWRpbmdDb250ZXh0XCI+PC9kYngtbG9hZGluZz5cbiAgPHNlY3Rpb24gY2xhc3M9XCJkYngtdGFibGUtdmlld1wiIGluZmluaXRlLXNjcm9sbCBbaW5maW5pdGVTY3JvbGxEaXN0YW5jZV09XCJzY3JvbGxEaXN0YW5jZSgpXCIgW2luZmluaXRlU2Nyb2xsVGhyb3R0bGVdPVwidGhyb3R0bGVTY3JvbGwoKVwiIFtzY3JvbGxXaW5kb3ddPVwiZmFsc2VcIiAoc2Nyb2xsZWQpPVwib25TY3JvbGxEb3duKClcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJkYngtdGFibGUtdmlldy10YWJsZVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJlbGVtZW50cyRcIiBbdHJhY2tCeV09XCJ0cmFja0VsZW1lbnRCeUZ1bmN0aW9uU2lnbmFsKClcIiBtdWx0aVRlbXBsYXRlRGF0YVJvd3M+XG4gICAgICA8IS0tIEdyb3VwcyAtLT5cbiAgICAgIDwhLS0gR3JvdXAgSGVhZGVyIGNvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZ3JvdXBIZWFkZXJDb2x1bW5cIiBbc3RpY2t5XT1cInRydWVcIj5cbiAgICAgICAgPHRkIG1hdC1jZWxsIFthdHRyLmNvbHNwYW5dPVwidmlzaWJsZUNvbHVtbnNTaWduYWwoKVwiICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWdyb3VwLWhlYWRlciBbZ3JvdXBdPVwiZWxlbWVudC5ncm91cFwiPjwvZGJ4LXRhYmxlLWdyb3VwLWhlYWRlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEdyb3VwIEZvb3RlciBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImdyb3VwRm9vdGVyQ29sdW1uXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCBbYXR0ci5jb2xzcGFuXT1cInZpc2libGVDb2x1bW5zU2lnbmFsKClcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1ncm91cC1mb290ZXIgW2dyb3VwXT1cImVsZW1lbnQuZ3JvdXBcIj48L2RieC10YWJsZS1ncm91cC1mb290ZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJdGVtcyAtLT5cbiAgICAgIDwhLS0gSGVhZGVyL0l0ZW0gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIml0ZW1zQ29sdW1uTmFtZVwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtaW5wdXQtY2VsbD48L2RieC10YWJsZS1pbnB1dC1jZWxsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIEBpZiAoZWxlbWVudC5pdGVtKSB7XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0taGVhZGVyIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiPjwvZGJ4LXRhYmxlLWl0ZW0taGVhZGVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLXN1bW1hcnktc3RhcnQtY2VsbD48L2RieC10YWJsZS1zdW1tYXJ5LXN0YXJ0LWNlbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDb2x1bW4gRGVmaW5pdGlvbnMgLS0+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgaW5uZXJDb2x1bW5zU2lnbmFsKCk7IHRyYWNrIGNvbHVtbi5jb2x1bW5OYW1lKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sdW1uTmFtZVwiIFtzdGlja3ldPVwiZmFsc2VcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgPGRieC10YWJsZS1jb2x1bW4taGVhZGVyIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9kYngtdGFibGUtY29sdW1uLWhlYWRlcj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICBAaWYgKGVsZW1lbnQuaXRlbSkge1xuICAgICAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0tY2VsbCBbaXRlbV09XCJlbGVtZW50Lml0ZW1cIiBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWl0ZW0tY2VsbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWNvbHVtbi1mb290ZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L2RieC10YWJsZS1jb2x1bW4tZm9vdGVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFRhaWwvQWN0aW9uIGNvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJhY3Rpb25zQ29sdW1uTmFtZVwiIFtzdGlja3lFbmRdPVwidHJ1ZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtYWN0aW9uLWNlbGw+PC9kYngtdGFibGUtYWN0aW9uLWNlbGw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgQGlmIChlbGVtZW50Lml0ZW0pIHtcbiAgICAgICAgICAgIDxkYngtdGFibGUtaXRlbS1hY3Rpb24gW2l0ZW1dPVwiZWxlbWVudC5pdGVtXCI+PC9kYngtdGFibGUtaXRlbS1hY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtc3VtbWFyeS1lbmQtY2VsbD48L2RieC10YWJsZS1zdW1tYXJ5LWVuZC1jZWxsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gVGFibGUgVmlldyAtLT5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyBzdGlja3k6IHRydWVcIj48L3RyPlxuXG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEhlYWRlckNvbHVtbiddOyB3aGVuOiBzaG93R3JvdXBIZWFkZXJSb3dcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgd2hlbjogc2hvd0l0ZW1Sb3dcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZ3JvdXBGb290ZXJDb2x1bW4nXTsgd2hlbjogc2hvd0dyb3VwRm9vdGVyUm93XCI+PC90cj5cblxuICAgICAgPHRyIFtuZ0NsYXNzXT1cInsgJ2RieC1oaWRlJzogIXNob3dGb290ZXJSb3dTaWduYWwoKSB9XCIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICA8L3RhYmxlPlxuICA8L3NlY3Rpb24+XG4gIDwhLS0gRnVsbCBzdW1tYXJ5IHJvdyAtLT5cbiAgQGlmIChzaG93RnVsbFN1bW1hcnlSb3dTaWduYWwoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLXRhYmxlIGRieC10YWJsZS12aWV3LWZ1bGwtc3VtbWFyeS1yb3ctY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWRjLWRhdGEtdGFibGVfX2NlbGwgbWF0LW1kYy1yb3dcIj5cbiAgICAgICAgPGRieC10YWJsZS1mdWxsLXN1bW1hcnktcm93PjwvZGJ4LXRhYmxlLWZ1bGwtc3VtbWFyeS1yb3c+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kYngtbG9hZGluZz5cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { map, distinctUntilChanged } from 'rxjs';
4
+ import { DbxTableStore } from './table.store';
5
+ import { DbxInjectionComponent } from '@dereekb/dbx-core';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * A table header component used for injecting the input picker view.
9
+ */
10
+ export class DbxTableFullSummaryRowComponent {
11
+ tableStore = inject(DbxTableStore);
12
+ config$ = this.tableStore.viewDelegate$.pipe(map((x) => x.fullSummaryRow), distinctUntilChanged());
13
+ configSignal = toSignal(this.config$);
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableFullSummaryRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxTableFullSummaryRowComponent, isStandalone: true, selector: "dbx-table-full-summary-row", host: { classAttribute: "dbx-h100 dbx-flex-bar" }, ngImport: i0, template: `
16
+ <dbx-injection [config]="configSignal()"></dbx-injection>
17
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxInjectionComponent, selector: "dbx-injection, [dbxInjection], [dbx-injection]", inputs: ["config", "template"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableFullSummaryRowComponent, decorators: [{
20
+ type: Component,
21
+ args: [{
22
+ selector: 'dbx-table-full-summary-row',
23
+ template: `
24
+ <dbx-injection [config]="configSignal()"></dbx-injection>
25
+ `,
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
+ standalone: true,
28
+ imports: [DbxInjectionComponent],
29
+ host: {
30
+ class: 'dbx-h100 dbx-flex-bar'
31
+ }
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZnVsbHN1bW1hcnlyb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmZ1bGxzdW1tYXJ5cm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUUxRDs7R0FFRztBQWFILE1BQU0sT0FBTywrQkFBK0I7SUFDakMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVuQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDNUIsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztJQUVPLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dHQVJwQywrQkFBK0I7NEZBQS9CLCtCQUErQix5SUFWaEM7O0dBRVQsNERBR1MscUJBQXFCOzs0RkFLcEIsK0JBQStCO2tCQVozQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLHVCQUF1QjtxQkFDL0I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuXG4vKipcbiAqIEEgdGFibGUgaGVhZGVyIGNvbXBvbmVudCB1c2VkIGZvciBpbmplY3RpbmcgdGhlIGlucHV0IHBpY2tlciB2aWV3LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtZnVsbC1zdW1tYXJ5LXJvdycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRieC1pbmplY3Rpb24gW2NvbmZpZ109XCJjb25maWdTaWduYWwoKVwiPjwvZGJ4LWluamVjdGlvbj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtEYnhJbmplY3Rpb25Db21wb25lbnRdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkYngtaDEwMCBkYngtZmxleC1iYXInXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVGdWxsU3VtbWFyeVJvd0NvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHRhYmxlU3RvcmUgPSBpbmplY3QoRGJ4VGFibGVTdG9yZSk7XG5cbiAgcmVhZG9ubHkgY29uZmlnJCA9IHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmZ1bGxTdW1tYXJ5Um93KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgcmVhZG9ubHkgY29uZmlnU2lnbmFsID0gdG9TaWduYWwodGhpcy5jb25maWckKTtcbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { toObservable } from '@angular/core/rxjs-interop';
2
+ import { filterMaybe } from '@dereekb/rxjs';
3
+ import { Directive, inject, input } from '@angular/core';
4
+ import { distinctUntilChanged } from 'rxjs';
5
+ import { DbxTableStore } from './table.store';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Abstract directive that has an element input.
9
+ */
10
+ export class AbstractDbxTableGroupDirective {
11
+ tableStore = inject((DbxTableStore));
12
+ group = input();
13
+ group$ = toObservable(this.group).pipe(filterMaybe(), distinctUntilChanged());
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractDbxTableGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
15
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: AbstractDbxTableGroupDirective, inputs: { group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractDbxTableGroupDirective, decorators: [{
18
+ type: Directive
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmdyb3VwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTlDOztHQUVHO0FBRUgsTUFBTSxPQUFnQiw4QkFBOEI7SUFDekMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBLGFBQStCLENBQUEsQ0FBQyxDQUFDO0lBRXJELEtBQUssR0FBRyxLQUFLLEVBQWtDLENBQUM7SUFDaEQsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQzt3R0FKbkUsOEJBQThCOzRGQUE5Qiw4QkFBOEI7OzRGQUE5Qiw4QkFBOEI7a0JBRG5ELFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXJNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgdHlwZSBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtR3JvdXAgfSBmcm9tICcuL3RhYmxlJztcblxuLyoqXG4gKiBBYnN0cmFjdCBkaXJlY3RpdmUgdGhhdCBoYXMgYW4gZWxlbWVudCBpbnB1dC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYnhUYWJsZUdyb3VwRGlyZWN0aXZlPFQsIEMgPSB1bmtub3duLCBHID0gdW5rbm93bj4ge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmU8dW5rbm93biwgQywgVCwgRz4pO1xuXG4gIHJlYWRvbmx5IGdyb3VwID0gaW5wdXQ8TWF5YmU8RGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4+PigpO1xuICByZWFkb25seSBncm91cCQgPSB0b09ic2VydmFibGUodGhpcy5ncm91cCkucGlwZShmaWx0ZXJNYXliZSgpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbn1cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { map, distinctUntilChanged } from 'rxjs';
4
+ import { maybeValueFromObservableOrValue } from '@dereekb/rxjs';
5
+ import { DbxInjectionComponent } from '@dereekb/dbx-core';
6
+ import { AbstractDbxTableGroupDirective } from './table.group.directive';
7
+ import * as i0 from "@angular/core";
8
+ export class DbxTableGroupFooterComponent extends AbstractDbxTableGroupDirective {
9
+ config$ = this.tableStore.viewDelegate$.pipe(map((viewDelegate) => {
10
+ const groupFooter = viewDelegate.groupFooter;
11
+ let obs = undefined;
12
+ if (groupFooter) {
13
+ obs = this.group$.pipe(map((x) => groupFooter(x)));
14
+ }
15
+ return obs;
16
+ }), maybeValueFromObservableOrValue(), distinctUntilChanged());
17
+ configSignal = toSignal(this.config$);
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableGroupFooterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxTableGroupFooterComponent, isStandalone: true, selector: "dbx-table-group-footer", usesInheritance: true, ngImport: i0, template: `
20
+ <dbx-injection [config]="configSignal()"></dbx-injection>
21
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxInjectionComponent, selector: "dbx-injection, [dbxInjection], [dbx-injection]", inputs: ["config", "template"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableGroupFooterComponent, decorators: [{
24
+ type: Component,
25
+ args: [{
26
+ selector: 'dbx-table-group-footer',
27
+ template: `
28
+ <dbx-injection [config]="configSignal()"></dbx-injection>
29
+ `,
30
+ changeDetection: ChangeDetectionStrategy.OnPush,
31
+ imports: [DbxInjectionComponent],
32
+ standalone: true
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZ3JvdXAuZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5ncm91cC5mb290ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUEwQiwrQkFBK0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQStCLE1BQU0sbUJBQW1CLENBQUM7QUFDdkYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBV3pFLE1BQU0sT0FBTyw0QkFBZ0MsU0FBUSw4QkFBaUM7SUFDM0UsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7UUFDbkIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLEdBQUcsR0FBd0QsU0FBUyxDQUFDO1FBRXpFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsRUFDRiwrQkFBK0IsRUFBRSxFQUNqQyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBRU8sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0dBaEJwQyw0QkFBNEI7NEZBQTVCLDRCQUE0Qix5R0FQN0I7O0dBRVQsNERBRVMscUJBQXFCOzs0RkFHcEIsNEJBQTRCO2tCQVR4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZSwgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50LCBEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERieFRhYmxlR3JvdXBEaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLmdyb3VwLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC10YWJsZS1ncm91cC1mb290ZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtaW5qZWN0aW9uIFtjb25maWddPVwiY29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbRGJ4SW5qZWN0aW9uQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZUdyb3VwRm9vdGVyQ29tcG9uZW50PFQ+IGV4dGVuZHMgQWJzdHJhY3REYnhUYWJsZUdyb3VwRGlyZWN0aXZlPFQ+IHtcbiAgcmVhZG9ubHkgY29uZmlnJCA9IHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkLnBpcGUoXG4gICAgbWFwKCh2aWV3RGVsZWdhdGUpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwRm9vdGVyID0gdmlld0RlbGVnYXRlLmdyb3VwRm9vdGVyO1xuICAgICAgbGV0IG9iczogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc+ID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3JvdXBGb290ZXIpIHtcbiAgICAgICAgb2JzID0gdGhpcy5ncm91cCQucGlwZShtYXAoKHgpID0+IGdyb3VwRm9vdGVyKHgpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBjb25maWdTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbmZpZyQpO1xufVxuIl19