@coolon/angular-ui-powerups 16.1.0-aplpha.152 → 16.1.0-aplpha.154

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvdGFibGUtYWN0aW9uLWNvbHVtbi9tZW51LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRGYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVCdWlsZGVyPFJvdyBleHRlbmRzIG9iamVjdD4ge1xuICBhZGRDb21tYW5kKGZhY3Rvcnk6IENvbW1hbmQuRmFjdG9yeTxSb3c+LCBmYWNlOiBDb21tYW5kRmFjZSk6dm9pZDtcbiAgYWRkU2VwYXJhdG9yKCk6dm9pZDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvdGFibGUtYWN0aW9uLWNvbHVtbi9tZW51LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRGYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgRmlsZURvd25sb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZmlsZS9maWxlLWRvd25sb2FkL2ZpbGUtZG93bmxvYWQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBNZW51QnVpbGRlcjxSb3cgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgYWRkQ29tbWFuZChmYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8Um93PiwgZmFjZTogQ29tbWFuZEZhY2UpOnZvaWQ7XG4gIGFkZERvd25sb2FkKGNhbGxiYWNrOiAocm93OlJvdykgPT4gRmlsZURvd25sb2FkQ29tcG9uZW50LkRvd25sb2FkSW5mbyk6dm9pZDtcbiAgYWRkU2VwYXJhdG9yKCk6dm9pZDtcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Component, Input, ViewChild } from '@angular/core';
2
2
  import { MatMenuTrigger } from '@angular/material/menu';
3
- import { Dsl } from '@coolon/pectin';
4
3
  import { DisposableComponent } from '../../../disposable-component';
4
+ import { Track } from '../../../track';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/common";
7
7
  import * as i2 from "../../../commands/group/tool-bar/tool-bar.component";
@@ -9,7 +9,9 @@ import * as i3 from "../../../commands/command/command.component";
9
9
  import * as i4 from "../../../commands/group/popup-menu/more-menu.component";
10
10
  import * as i5 from "../../../commands/separator.component";
11
11
  import * as i6 from "../../../commands/flex.component";
12
- class MenuItemData {
12
+ import * as i7 from "../../../file/file-download/file-download.component";
13
+ // TODO: This performs poorly, lots of factory calls initial rendering and on mouse movements
14
+ class CommandData {
13
15
  factory;
14
16
  face;
15
17
  constructor(factory, face) {
@@ -17,6 +19,21 @@ class MenuItemData {
17
19
  this.face = face;
18
20
  }
19
21
  }
22
+ class DownloadData {
23
+ createInfo;
24
+ cache = new WeakMap();
25
+ constructor(createInfo) {
26
+ this.createInfo = createInfo;
27
+ }
28
+ createDownloadInfo(value) {
29
+ if (this.cache.has(value)) {
30
+ return this.cache.get(value);
31
+ }
32
+ const info = this.createInfo(value);
33
+ this.cache.set(value, info);
34
+ return info;
35
+ }
36
+ }
20
37
  /**
21
38
  *
22
39
  */
@@ -25,83 +42,104 @@ export class TableActionColumnComponent extends DisposableComponent {
25
42
  menu;
26
43
  actions = [];
27
44
  moreActions = [];
45
+ trackByIndex = Track.byIndex;
46
+ constructor() {
47
+ super();
48
+ this.onInit(() => console.log("table action column init"));
49
+ }
28
50
  addCommand(commandFactory, properties) {
29
- this.actions.push(new MenuItemData(commandFactory, properties));
51
+ this.actions.push(new CommandData(commandFactory, properties));
30
52
  }
31
53
  addSeparator() {
32
54
  this.actions.push(null);
33
55
  }
56
+ addDownload(factory) {
57
+ this.actions.push(new DownloadData(factory));
58
+ }
34
59
  addMoreMenu(builder) {
35
60
  const self = this;
36
61
  builder({
37
62
  addCommand(factory, face) {
38
- self.moreActions.push(new MenuItemData(factory, face));
63
+ self.moreActions.push(new CommandData(factory, face));
64
+ },
65
+ addDownload(factory) {
66
+ self.moreActions.push(new DownloadData(factory));
39
67
  },
40
68
  addSeparator() {
41
69
  self.moreActions.push(null);
42
70
  }
43
71
  });
44
72
  }
45
- constructor() {
46
- super();
47
- }
48
- createMoreMenuCommand(item, value) {
49
- const { when } = Dsl.disposeWith(this);
50
- const command = item.factory.create(value, { disposedWith: this });
51
- when(command.busy$).becomesFalsey(() => {
52
- this.closeMoreMenu();
53
- });
54
- return command;
55
- }
73
+ // createMoreMenuCommand(item: CommandData<T>, value: T): Command<void> {
74
+ // const { when } = Dsl.disposeWith(this);
75
+ // const command = item.factory.create(value, { disposedWith: this });
76
+ // when(command.busy$).becomesFalsey(() => {
77
+ // this.closeMoreMenu();
78
+ // });
79
+ // return command;
80
+ // }
56
81
  closeMoreMenu() {
57
82
  this.menu.closeMenu();
58
83
  }
84
+ isCommand(item) {
85
+ return item instanceof CommandData;
86
+ }
87
+ isDownload(item) {
88
+ return item instanceof DownloadData;
89
+ }
90
+ isSeparator(item) {
91
+ return !item;
92
+ }
59
93
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableActionColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
94
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableActionColumnComponent, selector: "aup-table-action-column", inputs: { value: "value" }, viewQueries: [{ propertyName: "menu", first: true, predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: `
61
95
  <aup-tool-bar>
62
- <ng-container *ngFor="let action of actions">
63
- <aup-command *ngIf="action"
96
+ <ng-container *ngFor="let action of actions;trackBy: trackByIndex">
97
+ <aup-command *ngIf="isCommand(action)"
64
98
  #comp
65
99
  [command]="action.factory.create(value, {disposedWith: comp})"
66
- [face]="action.face"></aup-command>
67
- <aup-separator *ngIf="!action"/>
100
+ [face]="action.face" />
101
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
102
+ <aup-separator *ngIf="isSeparator(action)" />
68
103
  </ng-container>
69
104
  </aup-tool-bar>
70
105
  <ng-container *ngIf="moreActions.length > 0">
71
- <aup-flex class="flex"/>
106
+ <aup-flex class="flex" />
72
107
  <aup-more-menu>
73
- <ng-container *ngFor="let action of moreActions">
74
- <aup-command *ngIf="action"
108
+ <ng-container *ngFor="let action of moreActions; trackBy: trackByIndex">
109
+ <aup-command *ngIf="isCommand(action)"
75
110
  #comp
76
111
  [command]="action.factory.create(value, {disposedWith: comp})"
77
- [face]="action.face"></aup-command>
78
- <aup-separator *ngIf="!action"/>
112
+ [face]="action.face" />
113
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
114
+ <aup-separator *ngIf="isSeparator(action)" />
79
115
  </ng-container>
80
116
  </aup-more-menu>
81
117
  </ng-container>
82
- `, isInline: true, styles: [":host{display:inline-flex;flex-direction:row;align-items:center}:host:last-child{padding-right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ToolBarComponent, selector: "aup-tool-bar" }, { kind: "component", type: i3.CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: i4.MoreMenuComponent, selector: "aup-more-menu", inputs: ["tooltip"] }, { kind: "component", type: i5.SeparatorComponent, selector: "aup-separator" }, { kind: "component", type: i6.FlexComponent, selector: "aup-flex" }] });
118
+ `, isInline: true, styles: [":host{display:inline-flex;flex-direction:row;align-items:center}:host:last-child{padding-right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ToolBarComponent, selector: "aup-tool-bar" }, { kind: "component", type: i3.CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: i4.MoreMenuComponent, selector: "aup-more-menu", inputs: ["tooltip"] }, { kind: "component", type: i5.SeparatorComponent, selector: "aup-separator" }, { kind: "component", type: i6.FlexComponent, selector: "aup-flex" }, { kind: "component", type: i7.FileDownloadComponent, selector: "aup-file-download", inputs: ["download$", "download", "alignFace"] }] });
83
119
  }
84
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableActionColumnComponent, decorators: [{
85
121
  type: Component,
86
122
  args: [{ selector: 'aup-table-action-column', template: `
87
123
  <aup-tool-bar>
88
- <ng-container *ngFor="let action of actions">
89
- <aup-command *ngIf="action"
124
+ <ng-container *ngFor="let action of actions;trackBy: trackByIndex">
125
+ <aup-command *ngIf="isCommand(action)"
90
126
  #comp
91
127
  [command]="action.factory.create(value, {disposedWith: comp})"
92
- [face]="action.face"></aup-command>
93
- <aup-separator *ngIf="!action"/>
128
+ [face]="action.face" />
129
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
130
+ <aup-separator *ngIf="isSeparator(action)" />
94
131
  </ng-container>
95
132
  </aup-tool-bar>
96
133
  <ng-container *ngIf="moreActions.length > 0">
97
- <aup-flex class="flex"/>
134
+ <aup-flex class="flex" />
98
135
  <aup-more-menu>
99
- <ng-container *ngFor="let action of moreActions">
100
- <aup-command *ngIf="action"
136
+ <ng-container *ngFor="let action of moreActions; trackBy: trackByIndex">
137
+ <aup-command *ngIf="isCommand(action)"
101
138
  #comp
102
139
  [command]="action.factory.create(value, {disposedWith: comp})"
103
- [face]="action.face"></aup-command>
104
- <aup-separator *ngIf="!action"/>
140
+ [face]="action.face" />
141
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
142
+ <aup-separator *ngIf="isSeparator(action)" />
105
143
  </ng-container>
106
144
  </aup-more-menu>
107
145
  </ng-container>
@@ -112,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
112
150
  type: ViewChild,
113
151
  args: [MatMenuTrigger]
114
152
  }] } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWN0aW9uLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9yZW5kZXJlci90YWJsZS1hY3Rpb24tY29sdW1uL3RhYmxlLWFjdGlvbi1jb2x1bW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxFQUFXLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7OztBQUtwRSxNQUFNLFlBQVk7SUFDSztJQUE0QztJQUFqRSxZQUFxQixPQUFpQyxFQUFXLElBQWlCO1FBQTdELFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBQVcsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUNsRixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQW1DSCxNQUFNLE9BQU8sMEJBQTZDLFNBQVEsbUJBQW1CO0lBR25GLEtBQUssQ0FBSTtJQUdULElBQUksQ0FBaUI7SUFFWixPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUNoQyxXQUFXLEdBQXNCLEVBQUUsQ0FBQztJQUU3QyxVQUFVLENBQUMsY0FBd0MsRUFBRSxVQUF1QjtRQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0M7UUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQztZQUNOLFVBQVUsQ0FBQyxPQUEyQixFQUFFLElBQWlCO2dCQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsWUFBWTtnQkFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNEO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBcUIsRUFBRSxLQUFRO1FBQ25ELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7dUdBN0NVLDBCQUEwQjsyRkFBMUIsMEJBQTBCLGlJQUsxQixjQUFjLHVFQXJDZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDs7MkZBVVUsMEJBQTBCO2tCQWxDdEMsU0FBUzsrQkFDRSx5QkFBeUIsWUFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQ7MEVBYUQsS0FBSztzQkFESixLQUFLO2dCQUlOLElBQUk7c0JBREgsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuXG5pbXBvcnQgeyBDb21tYW5kLCBEc2wgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBDb21tYW5kRmFjZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1hbmRzL2NvbW1hbmQtZmFjZSc7XG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZGlzcG9zYWJsZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi4vY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBNZW51QnVpbGRlciB9IGZyb20gJy4vbWVudS1idWlsZGVyJztcblxuXG5jbGFzcyBNZW51SXRlbURhdGE8VCBleHRlbmRzIG9iamVjdD4gIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PFQsIHZvaWQ+LCByZWFkb25seSBmYWNlOiBDb21tYW5kRmFjZSkge1xuICB9XG59XG5cbi8qKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVwLXRhYmxlLWFjdGlvbi1jb2x1bW4nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxhdXAtdG9vbC1iYXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICA8YXVwLWNvbW1hbmQgKm5nSWY9XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgI2NvbXBcbiAgICAgICAgICAgICAgICAgICAgIFtjb21tYW5kXT1cImFjdGlvbi5mYWN0b3J5LmNyZWF0ZSh2YWx1ZSwge2Rpc3Bvc2VkV2l0aDogY29tcH0pXCJcbiAgICAgICAgICAgICAgICAgICAgIFtmYWNlXT1cImFjdGlvbi5mYWNlXCI+PC9hdXAtY29tbWFuZD5cbiAgICAgICAgPGF1cC1zZXBhcmF0b3IgKm5nSWY9XCIhYWN0aW9uXCIvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9hdXAtdG9vbC1iYXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vcmVBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxhdXAtZmxleCBjbGFzcz1cImZsZXhcIi8+XG4gICAgICA8YXVwLW1vcmUtbWVudT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG1vcmVBY3Rpb25zXCI+XG4gICAgICAgICAgPGF1cC1jb21tYW5kICpuZ0lmPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgI2NvbXBcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvbW1hbmRdPVwiYWN0aW9uLmZhY3RvcnkuY3JlYXRlKHZhbHVlLCB7ZGlzcG9zZWRXaXRoOiBjb21wfSlcIlxuICAgICAgICAgICAgICAgICAgICAgICBbZmFjZV09XCJhY3Rpb24uZmFjZVwiPjwvYXVwLWNvbW1hbmQ+XG4gICAgICAgICAgPGF1cC1zZXBhcmF0b3IgKm5nSWY9XCIhYWN0aW9uXCIvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYXVwLW1vcmUtbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbYDpob3N0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgfVxuICB9YF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVBY3Rpb25Db2x1bW5Db21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQ2VsbFJlbmRlcmVyPFQ+LCBNZW51QnVpbGRlcjxUPiB7XG5cbiAgQElucHV0KClcbiAgdmFsdWU6IFQ7XG5cbiAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlcilcbiAgbWVudTogTWF0TWVudVRyaWdnZXI7XG5cbiAgcmVhZG9ubHkgYWN0aW9uczogTWVudUl0ZW1EYXRhPFQ+W10gPSBbXTtcbiAgcmVhZG9ubHkgbW9yZUFjdGlvbnM6IE1lbnVJdGVtRGF0YTxUPltdID0gW107XG5cbiAgYWRkQ29tbWFuZChjb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PFQsIHZvaWQ+LCBwcm9wZXJ0aWVzOiBDb21tYW5kRmFjZSkge1xuICAgIHRoaXMuYWN0aW9ucy5wdXNoKG5ldyBNZW51SXRlbURhdGEoY29tbWFuZEZhY3RvcnksIHByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIGFkZFNlcGFyYXRvcigpIHtcbiAgICB0aGlzLmFjdGlvbnMucHVzaChudWxsKTtcbiAgfVxuXG4gIGFkZE1vcmVNZW51KGJ1aWxkZXI6KG1lbnU6IE1lbnVCdWlsZGVyPFQ+KSA9PiB2b2lkKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgYnVpbGRlcih7XG4gICAgICBhZGRDb21tYW5kKGZhY3Rvcnk6IENvbW1hbmQuRmFjdG9yeTxUPiwgZmFjZTogQ29tbWFuZEZhY2Upe1xuICAgICAgICBzZWxmLm1vcmVBY3Rpb25zLnB1c2gobmV3IE1lbnVJdGVtRGF0YShmYWN0b3J5LCBmYWNlKSk7XG4gICAgICB9LFxuICAgICAgYWRkU2VwYXJhdG9yKCkge1xuICAgICAgICBzZWxmLm1vcmVBY3Rpb25zLnB1c2gobnVsbCk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY3JlYXRlTW9yZU1lbnVDb21tYW5kKGl0ZW06IE1lbnVJdGVtRGF0YTxUPiwgdmFsdWU6IFQpOiBDb21tYW5kPHZvaWQ+IHtcbiAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBjb25zdCBjb21tYW5kID0gaXRlbS5mYWN0b3J5LmNyZWF0ZSh2YWx1ZSwge2Rpc3Bvc2VkV2l0aDogdGhpc30pO1xuICAgIHdoZW4oY29tbWFuZC5idXN5JCkuYmVjb21lc0ZhbHNleSgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NlTW9yZU1lbnUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29tbWFuZDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VNb3JlTWVudSgpIHtcbiAgICB0aGlzLm1lbnUuY2xvc2VNZW51KCk7XG4gIH1cbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWN0aW9uLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9yZW5kZXJlci90YWJsZS1hY3Rpb24tY29sdW1uL3RhYmxlLWFjdGlvbi1jb2x1bW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFLdkMsNkZBQTZGO0FBRTdGLE1BQU0sV0FBVztJQUNNO0lBQTRDO0lBQWpFLFlBQXFCLE9BQWlDLEVBQVcsSUFBaUI7UUFBN0QsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFBVyxTQUFJLEdBQUosSUFBSSxDQUFhO0lBQ2xGLENBQUM7Q0FDRjtBQUVELE1BQU0sWUFBWTtJQUdJO0lBRlosS0FBSyxHQUFHLElBQUksT0FBTyxFQUF5QyxDQUFDO0lBRXJFLFlBQW9CLFVBQTREO1FBQTVELGVBQVUsR0FBVixVQUFVLENBQWtEO0lBQ2hGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFRO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBS0Q7O0dBRUc7QUFzQ0gsTUFBTSxPQUFPLDBCQUE2QyxTQUFRLG1CQUFtQjtJQUduRixLQUFLLENBQUk7SUFHVCxJQUFJLENBQWlCO0lBRVosT0FBTyxHQUFrQixFQUFFLENBQUM7SUFDNUIsV0FBVyxHQUFrQixFQUFFLENBQUM7SUFFaEMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUE7SUFFckM7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxjQUF3QyxFQUFFLFVBQXVCO1FBQzFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUF1RDtRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBdUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQztZQUNOLFVBQVUsQ0FBQyxPQUEyQixFQUFFLElBQWlCO2dCQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsV0FBVyxDQUFDLE9BQXVEO2dCQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxZQUFZO2dCQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDRDQUE0QztJQUM1Qyx3RUFBd0U7SUFDeEUsOENBQThDO0lBQzlDLDRCQUE0QjtJQUM1QixRQUFRO0lBQ1Isb0JBQW9CO0lBQ3BCLElBQUk7SUFFSSxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFpQjtRQUN6QixPQUFPLElBQUksWUFBWSxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFpQjtRQUMxQixPQUFPLElBQUksWUFBWSxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFpQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2YsQ0FBQzt1R0FwRVUsMEJBQTBCOzJGQUExQiwwQkFBMEIsaUlBSzFCLGNBQWMsdUVBeENmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQ7OzJGQVdVLDBCQUEwQjtrQkFyQ3RDLFNBQVM7K0JBQ0UseUJBQXlCLFlBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQ7MEVBY0QsS0FBSztzQkFESixLQUFLO2dCQUlOLElBQUk7c0JBREgsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuXG5pbXBvcnQgeyBDb21tYW5kLCBEc2wsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgQ29tbWFuZEZhY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tYW5kcy9jb21tYW5kLWZhY2UnO1xuaW1wb3J0IHsgRGlzcG9zYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Rpc3Bvc2FibGUtY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVEb3dubG9hZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ZpbGUvZmlsZS1kb3dubG9hZC9maWxlLWRvd25sb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFjayB9IGZyb20gJy4uLy4uLy4uL3RyYWNrJztcbmltcG9ydCB7IENlbGxSZW5kZXJlciB9IGZyb20gJy4uL2NlbGwtcmVuZGVyZXInO1xuaW1wb3J0IHsgTWVudUJ1aWxkZXIgfSBmcm9tICcuL21lbnUtYnVpbGRlcic7XG5cblxuLy8gVE9ETzogVGhpcyBwZXJmb3JtcyBwb29ybHksIGxvdHMgb2YgZmFjdG9yeSBjYWxscyBpbml0aWFsIHJlbmRlcmluZyBhbmQgb24gbW91c2UgbW92ZW1lbnRzXG5cbmNsYXNzIENvbW1hbmREYXRhPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PFQsIHZvaWQ+LCByZWFkb25seSBmYWNlOiBDb21tYW5kRmFjZSkge1xuICB9XG59XG5cbmNsYXNzIERvd25sb2FkRGF0YTxUIGV4dGVuZHMgb2JqZWN0PiB7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgV2Vha01hcDxULCBGaWxlRG93bmxvYWRDb21wb25lbnQuRG93bmxvYWRJbmZvPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY3JlYXRlSW5mbzogKHZhbHVlOiBUKSA9PiBGaWxlRG93bmxvYWRDb21wb25lbnQuRG93bmxvYWRJbmZvKSB7XG4gIH1cblxuICBjcmVhdGVEb3dubG9hZEluZm8odmFsdWU6IFQpOiBGaWxlRG93bmxvYWRDb21wb25lbnQuRG93bmxvYWRJbmZvIHtcbiAgICBpZiAodGhpcy5jYWNoZS5oYXModmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBpbmZvID0gdGhpcy5jcmVhdGVJbmZvKHZhbHVlKTtcbiAgICB0aGlzLmNhY2hlLnNldCh2YWx1ZSwgaW5mbyk7XG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cblxudHlwZSBNZW51SXRlbTxUIGV4dGVuZHMgb2JqZWN0PiA9IENvbW1hbmREYXRhPFQ+IHwgRG93bmxvYWREYXRhPFQ+IHwgbnVsbDtcblxuXG4vKipcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1cC10YWJsZS1hY3Rpb24tY29sdW1uJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YXVwLXRvb2wtYmFyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnM7dHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XG4gICAgICAgIDxhdXAtY29tbWFuZCAqbmdJZj1cImlzQ29tbWFuZChhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICNjb21wXG4gICAgICAgICAgICAgICAgICAgICBbY29tbWFuZF09XCJhY3Rpb24uZmFjdG9yeS5jcmVhdGUodmFsdWUsIHtkaXNwb3NlZFdpdGg6IGNvbXB9KVwiXG4gICAgICAgICAgICAgICAgICAgICBbZmFjZV09XCJhY3Rpb24uZmFjZVwiIC8+XG4gICAgICAgIDxhdXAtZmlsZS1kb3dubG9hZCAqbmdJZj1cImlzRG93bmxvYWQoYWN0aW9uKVwiIFtkb3dubG9hZF09XCJhY3Rpb24uY3JlYXRlRG93bmxvYWRJbmZvKHZhbHVlKVwiIC8+XG4gICAgICAgIDxhdXAtc2VwYXJhdG9yICpuZ0lmPVwiaXNTZXBhcmF0b3IoYWN0aW9uKVwiIC8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2F1cC10b29sLWJhcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9yZUFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgPGF1cC1mbGV4IGNsYXNzPVwiZmxleFwiIC8+XG4gICAgICA8YXVwLW1vcmUtbWVudT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG1vcmVBY3Rpb25zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cbiAgICAgICAgICA8YXVwLWNvbW1hbmQgKm5nSWY9XCJpc0NvbW1hbmQoYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICNjb21wXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb21tYW5kXT1cImFjdGlvbi5mYWN0b3J5LmNyZWF0ZSh2YWx1ZSwge2Rpc3Bvc2VkV2l0aDogY29tcH0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2ZhY2VdPVwiYWN0aW9uLmZhY2VcIiAvPlxuICAgICAgICAgIDxhdXAtZmlsZS1kb3dubG9hZCAqbmdJZj1cImlzRG93bmxvYWQoYWN0aW9uKVwiIFtkb3dubG9hZF09XCJhY3Rpb24uY3JlYXRlRG93bmxvYWRJbmZvKHZhbHVlKVwiIC8+XG4gICAgICAgICAgPGF1cC1zZXBhcmF0b3IgKm5nSWY9XCJpc1NlcGFyYXRvcihhY3Rpb24pXCIgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2F1cC1tb3JlLW1lbnU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIHN0eWxlczogW2A6aG9zdCB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgfVxuICB9YF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVBY3Rpb25Db2x1bW5Db21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQ2VsbFJlbmRlcmVyPFQ+LCBNZW51QnVpbGRlcjxUPiB7XG5cbiAgQElucHV0KClcbiAgdmFsdWU6IFQ7XG5cbiAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlcilcbiAgbWVudTogTWF0TWVudVRyaWdnZXI7XG5cbiAgcmVhZG9ubHkgYWN0aW9uczogTWVudUl0ZW08VD5bXSA9IFtdO1xuICByZWFkb25seSBtb3JlQWN0aW9uczogTWVudUl0ZW08VD5bXSA9IFtdO1xuXG4gIHJlYWRvbmx5IHRyYWNrQnlJbmRleCA9IFRyYWNrLmJ5SW5kZXhcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMub25Jbml0KCgpID0+IGNvbnNvbGUubG9nKFwidGFibGUgYWN0aW9uIGNvbHVtbiBpbml0XCIpKTtcbiAgfVxuXG4gIGFkZENvbW1hbmQoY29tbWFuZEZhY3Rvcnk6IENvbW1hbmQuRmFjdG9yeTxULCB2b2lkPiwgcHJvcGVydGllczogQ29tbWFuZEZhY2UpIHtcbiAgICB0aGlzLmFjdGlvbnMucHVzaChuZXcgQ29tbWFuZERhdGEoY29tbWFuZEZhY3RvcnksIHByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIGFkZFNlcGFyYXRvcigpIHtcbiAgICB0aGlzLmFjdGlvbnMucHVzaChudWxsKTtcbiAgfVxuXG4gIGFkZERvd25sb2FkKGZhY3Rvcnk6IChyb3c6IFQpID0+IEZpbGVEb3dubG9hZENvbXBvbmVudC5Eb3dubG9hZEluZm8pIHtcbiAgICB0aGlzLmFjdGlvbnMucHVzaChuZXcgRG93bmxvYWREYXRhKGZhY3RvcnkpKTtcbiAgfVxuXG4gIGFkZE1vcmVNZW51KGJ1aWxkZXI6IChtZW51OiBNZW51QnVpbGRlcjxUPikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGJ1aWxkZXIoe1xuICAgICAgYWRkQ29tbWFuZChmYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8VD4sIGZhY2U6IENvbW1hbmRGYWNlKSB7XG4gICAgICAgIHNlbGYubW9yZUFjdGlvbnMucHVzaChuZXcgQ29tbWFuZERhdGEoZmFjdG9yeSwgZmFjZSkpO1xuICAgICAgfSxcbiAgICAgIGFkZERvd25sb2FkKGZhY3Rvcnk6IChyb3c6IFQpID0+IEZpbGVEb3dubG9hZENvbXBvbmVudC5Eb3dubG9hZEluZm8pIHtcbiAgICAgICAgc2VsZi5tb3JlQWN0aW9ucy5wdXNoKG5ldyBEb3dubG9hZERhdGEoZmFjdG9yeSkpO1xuICAgICAgfSxcbiAgICAgIGFkZFNlcGFyYXRvcigpIHtcbiAgICAgICAgc2VsZi5tb3JlQWN0aW9ucy5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY3JlYXRlTW9yZU1lbnVDb21tYW5kKGl0ZW06IENvbW1hbmREYXRhPFQ+LCB2YWx1ZTogVCk6IENvbW1hbmQ8dm9pZD4ge1xuICAvLyAgIGNvbnN0IHsgd2hlbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAvLyAgIGNvbnN0IGNvbW1hbmQgPSBpdGVtLmZhY3RvcnkuY3JlYXRlKHZhbHVlLCB7IGRpc3Bvc2VkV2l0aDogdGhpcyB9KTtcbiAgLy8gICB3aGVuKGNvbW1hbmQuYnVzeSQpLmJlY29tZXNGYWxzZXkoKCkgPT4ge1xuICAvLyAgICAgdGhpcy5jbG9zZU1vcmVNZW51KCk7XG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIGNvbW1hbmQ7XG4gIC8vIH1cblxuICBwcml2YXRlIGNsb3NlTW9yZU1lbnUoKSB7XG4gICAgdGhpcy5tZW51LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgaXNDb21tYW5kKGl0ZW06IE1lbnVJdGVtPFQ+KTogaXRlbSBpcyBDb21tYW5kRGF0YTxUPiB7XG4gICAgcmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBDb21tYW5kRGF0YTtcbiAgfVxuXG4gIGlzRG93bmxvYWQoaXRlbTogTWVudUl0ZW08VD4pOiBpdGVtIGlzIERvd25sb2FkRGF0YTxUPiB7XG4gICAgcmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBEb3dubG9hZERhdGE7XG4gIH1cblxuICBpc1NlcGFyYXRvcihpdGVtOiBNZW51SXRlbTxUPikge1xuICAgIHJldHVybiAhaXRlbTtcbiAgfVxufVxuIl19
@@ -4366,7 +4366,8 @@ class FooterRowModel {
4366
4366
  })(FooterRowModel || (FooterRowModel = {}));
4367
4367
  ProxyRegistry.registerOneTimeBinding(FooterRowModel);
4368
4368
 
4369
- class MenuItemData {
4369
+ // TODO: This performs poorly, lots of factory calls initial rendering and on mouse movements
4370
+ class CommandData {
4370
4371
  factory;
4371
4372
  face;
4372
4373
  constructor(factory, face) {
@@ -4374,6 +4375,21 @@ class MenuItemData {
4374
4375
  this.face = face;
4375
4376
  }
4376
4377
  }
4378
+ class DownloadData {
4379
+ createInfo;
4380
+ cache = new WeakMap();
4381
+ constructor(createInfo) {
4382
+ this.createInfo = createInfo;
4383
+ }
4384
+ createDownloadInfo(value) {
4385
+ if (this.cache.has(value)) {
4386
+ return this.cache.get(value);
4387
+ }
4388
+ const info = this.createInfo(value);
4389
+ this.cache.set(value, info);
4390
+ return info;
4391
+ }
4392
+ }
4377
4393
  /**
4378
4394
  *
4379
4395
  */
@@ -4382,83 +4398,104 @@ class TableActionColumnComponent extends DisposableComponent {
4382
4398
  menu;
4383
4399
  actions = [];
4384
4400
  moreActions = [];
4401
+ trackByIndex = Track.byIndex;
4402
+ constructor() {
4403
+ super();
4404
+ this.onInit(() => console.log("table action column init"));
4405
+ }
4385
4406
  addCommand(commandFactory, properties) {
4386
- this.actions.push(new MenuItemData(commandFactory, properties));
4407
+ this.actions.push(new CommandData(commandFactory, properties));
4387
4408
  }
4388
4409
  addSeparator() {
4389
4410
  this.actions.push(null);
4390
4411
  }
4412
+ addDownload(factory) {
4413
+ this.actions.push(new DownloadData(factory));
4414
+ }
4391
4415
  addMoreMenu(builder) {
4392
4416
  const self = this;
4393
4417
  builder({
4394
4418
  addCommand(factory, face) {
4395
- self.moreActions.push(new MenuItemData(factory, face));
4419
+ self.moreActions.push(new CommandData(factory, face));
4420
+ },
4421
+ addDownload(factory) {
4422
+ self.moreActions.push(new DownloadData(factory));
4396
4423
  },
4397
4424
  addSeparator() {
4398
4425
  self.moreActions.push(null);
4399
4426
  }
4400
4427
  });
4401
4428
  }
4402
- constructor() {
4403
- super();
4404
- }
4405
- createMoreMenuCommand(item, value) {
4406
- const { when } = Dsl.disposeWith(this);
4407
- const command = item.factory.create(value, { disposedWith: this });
4408
- when(command.busy$).becomesFalsey(() => {
4409
- this.closeMoreMenu();
4410
- });
4411
- return command;
4412
- }
4429
+ // createMoreMenuCommand(item: CommandData<T>, value: T): Command<void> {
4430
+ // const { when } = Dsl.disposeWith(this);
4431
+ // const command = item.factory.create(value, { disposedWith: this });
4432
+ // when(command.busy$).becomesFalsey(() => {
4433
+ // this.closeMoreMenu();
4434
+ // });
4435
+ // return command;
4436
+ // }
4413
4437
  closeMoreMenu() {
4414
4438
  this.menu.closeMenu();
4415
4439
  }
4440
+ isCommand(item) {
4441
+ return item instanceof CommandData;
4442
+ }
4443
+ isDownload(item) {
4444
+ return item instanceof DownloadData;
4445
+ }
4446
+ isSeparator(item) {
4447
+ return !item;
4448
+ }
4416
4449
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableActionColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4417
4450
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableActionColumnComponent, selector: "aup-table-action-column", inputs: { value: "value" }, viewQueries: [{ propertyName: "menu", first: true, predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: `
4418
4451
  <aup-tool-bar>
4419
- <ng-container *ngFor="let action of actions">
4420
- <aup-command *ngIf="action"
4452
+ <ng-container *ngFor="let action of actions;trackBy: trackByIndex">
4453
+ <aup-command *ngIf="isCommand(action)"
4421
4454
  #comp
4422
4455
  [command]="action.factory.create(value, {disposedWith: comp})"
4423
- [face]="action.face"></aup-command>
4424
- <aup-separator *ngIf="!action"/>
4456
+ [face]="action.face" />
4457
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
4458
+ <aup-separator *ngIf="isSeparator(action)" />
4425
4459
  </ng-container>
4426
4460
  </aup-tool-bar>
4427
4461
  <ng-container *ngIf="moreActions.length > 0">
4428
- <aup-flex class="flex"/>
4462
+ <aup-flex class="flex" />
4429
4463
  <aup-more-menu>
4430
- <ng-container *ngFor="let action of moreActions">
4431
- <aup-command *ngIf="action"
4464
+ <ng-container *ngFor="let action of moreActions; trackBy: trackByIndex">
4465
+ <aup-command *ngIf="isCommand(action)"
4432
4466
  #comp
4433
4467
  [command]="action.factory.create(value, {disposedWith: comp})"
4434
- [face]="action.face"></aup-command>
4435
- <aup-separator *ngIf="!action"/>
4468
+ [face]="action.face" />
4469
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
4470
+ <aup-separator *ngIf="isSeparator(action)" />
4436
4471
  </ng-container>
4437
4472
  </aup-more-menu>
4438
4473
  </ng-container>
4439
- `, isInline: true, styles: [":host{display:inline-flex;flex-direction:row;align-items:center}:host:last-child{padding-right:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolBarComponent, selector: "aup-tool-bar" }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: MoreMenuComponent, selector: "aup-more-menu", inputs: ["tooltip"] }, { kind: "component", type: SeparatorComponent, selector: "aup-separator" }, { kind: "component", type: FlexComponent, selector: "aup-flex" }] });
4474
+ `, isInline: true, styles: [":host{display:inline-flex;flex-direction:row;align-items:center}:host:last-child{padding-right:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolBarComponent, selector: "aup-tool-bar" }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: MoreMenuComponent, selector: "aup-more-menu", inputs: ["tooltip"] }, { kind: "component", type: SeparatorComponent, selector: "aup-separator" }, { kind: "component", type: FlexComponent, selector: "aup-flex" }, { kind: "component", type: FileDownloadComponent, selector: "aup-file-download", inputs: ["download$", "download", "alignFace"] }] });
4440
4475
  }
4441
4476
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableActionColumnComponent, decorators: [{
4442
4477
  type: Component,
4443
4478
  args: [{ selector: 'aup-table-action-column', template: `
4444
4479
  <aup-tool-bar>
4445
- <ng-container *ngFor="let action of actions">
4446
- <aup-command *ngIf="action"
4480
+ <ng-container *ngFor="let action of actions;trackBy: trackByIndex">
4481
+ <aup-command *ngIf="isCommand(action)"
4447
4482
  #comp
4448
4483
  [command]="action.factory.create(value, {disposedWith: comp})"
4449
- [face]="action.face"></aup-command>
4450
- <aup-separator *ngIf="!action"/>
4484
+ [face]="action.face" />
4485
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
4486
+ <aup-separator *ngIf="isSeparator(action)" />
4451
4487
  </ng-container>
4452
4488
  </aup-tool-bar>
4453
4489
  <ng-container *ngIf="moreActions.length > 0">
4454
- <aup-flex class="flex"/>
4490
+ <aup-flex class="flex" />
4455
4491
  <aup-more-menu>
4456
- <ng-container *ngFor="let action of moreActions">
4457
- <aup-command *ngIf="action"
4492
+ <ng-container *ngFor="let action of moreActions; trackBy: trackByIndex">
4493
+ <aup-command *ngIf="isCommand(action)"
4458
4494
  #comp
4459
4495
  [command]="action.factory.create(value, {disposedWith: comp})"
4460
- [face]="action.face"></aup-command>
4461
- <aup-separator *ngIf="!action"/>
4496
+ [face]="action.face" />
4497
+ <aup-file-download *ngIf="isDownload(action)" [download]="action.createDownloadInfo(value)" />
4498
+ <aup-separator *ngIf="isSeparator(action)" />
4462
4499
  </ng-container>
4463
4500
  </aup-more-menu>
4464
4501
  </ng-container>