ngssm-tree 15.3.6 → 15.3.7

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.
@@ -6,6 +6,7 @@ import { MatDividerModule } from '@angular/material/divider';
6
6
  import { MatIconModule } from '@angular/material/icon';
7
7
  import { BehaviorSubject, takeUntil } from 'rxjs';
8
8
  import { NgSsmComponent } from 'ngssm-store';
9
+ import { NgssmComponentDisplayDirective } from 'ngssm-toolkit';
9
10
  import { selectNgssmExpressionTreeState } from '../../state';
10
11
  import { NgssmCollapseExpressionTreeNodeAction, NgssmExpandExpressionTreeNodeAction } from '../../actions';
11
12
  import * as i0 from "@angular/core";
@@ -44,8 +45,14 @@ export class NgssmExpressionTreeComponent extends NgSsmComponent {
44
45
  const config = {
45
46
  ...value
46
47
  };
47
- if (!value.getNodeLabel) {
48
- value.getNodeLabel = (node) => node.data.id;
48
+ if (!config.getNodeLabel) {
49
+ config.getNodeLabel = (node) => node.data.id;
50
+ }
51
+ if (!config.expandIconClass) {
52
+ config.expandIconClass = 'fa-solid fa-chevron-right';
53
+ }
54
+ if (!config.collapseIconClass) {
55
+ config.collapseIconClass = 'fa-solid fa-chevron-down';
49
56
  }
50
57
  this._treeConfig$.next(config);
51
58
  this._treeSubscription = this.watch((s) => selectNgssmExpressionTreeState(s).trees[value.treeId]).subscribe((tree) => this._tree$.next(tree));
@@ -74,13 +81,16 @@ export class NgssmExpressionTreeComponent extends NgSsmComponent {
74
81
  this.dispatchAction(new NgssmCollapseExpressionTreeNodeAction(treeId, node.data.id));
75
82
  }
76
83
  }
84
+ getComponentDescriptionAction(node) {
85
+ return (c) => c.setNode(node);
86
+ }
77
87
  }
78
88
  NgssmExpressionTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgssmExpressionTreeComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
79
- NgssmExpressionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: NgssmExpressionTreeComponent, isStandalone: true, selector: "ngssm-expression-tree", inputs: { treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-tree-node\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.data.isExpandable && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\">\n </mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.data.isExpandable && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
89
+ NgssmExpressionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: NgssmExpressionTreeComponent, isStandalone: true, selector: "ngssm-expression-tree", inputs: { treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\"\n *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\"\n *ngIf=\"treeConfig.disableVirtualization !== true\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"ngssm-expression-tree-nodes-container\" *ngIf=\"treeConfig.disableVirtualization === true\">\n <div *ngFor=\"let item of displayedNodes$ | async; trackBy: getItemId\" class=\"ngssm-expression-tree-node\"\n id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n\n<ng-template #nodeTemplate let-treeConfig=\"treeConfig\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"treeConfig.rowSize ?? 30\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"{{treeConfig.expandIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\" id=\"expandIcon\">\n </mat-icon>\n <mat-icon class=\"{{treeConfig.collapseIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\" id=\"collapseIcon\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n <div class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"treeConfig.getNodeDescriptionComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\">\n\n </div>\n </div>\n <div *ngIf=\"item.data.hasRowDetail === true && item.isExpanded === true\" class=\"flex-row-center fxFlex\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\" *ngFor=\" let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <div [ngssmComponentDisplay]=\"treeConfig.getNodeDetailComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\"></div>\n </div>\n </div>\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
80
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgssmExpressionTreeComponent, decorators: [{
81
91
  type: Component,
82
- args: [{ selector: 'ngssm-expression-tree', standalone: true, imports: [CommonModule, ScrollingModule, MatCardModule, MatDividerModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-tree-node\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.data.isExpandable && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\">\n </mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.data.isExpandable && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>", styles: [":host{display:flex;flex-direction:column}\n"] }]
92
+ args: [{ selector: 'ngssm-expression-tree', standalone: true, imports: [CommonModule, ScrollingModule, MatCardModule, MatDividerModule, MatIconModule, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\"\n *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\"\n *ngIf=\"treeConfig.disableVirtualization !== true\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"ngssm-expression-tree-nodes-container\" *ngIf=\"treeConfig.disableVirtualization === true\">\n <div *ngFor=\"let item of displayedNodes$ | async; trackBy: getItemId\" class=\"ngssm-expression-tree-node\"\n id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n\n<ng-template #nodeTemplate let-treeConfig=\"treeConfig\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"treeConfig.rowSize ?? 30\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"{{treeConfig.expandIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\" id=\"expandIcon\">\n </mat-icon>\n <mat-icon class=\"{{treeConfig.collapseIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\" id=\"collapseIcon\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n <div class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"treeConfig.getNodeDescriptionComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\">\n\n </div>\n </div>\n <div *ngIf=\"item.data.hasRowDetail === true && item.isExpanded === true\" class=\"flex-row-center fxFlex\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\" *ngFor=\" let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <div [ngssmComponentDisplay]=\"treeConfig.getNodeDetailComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\"></div>\n </div>\n </div>\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"] }]
83
93
  }], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { treeConfig: [{
84
94
  type: Input
85
95
  }] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUE0QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUUsT0FBTyxFQUFFLGNBQWMsRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUdwRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVUzRyxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsY0FB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LEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFTSxNQUFNLENBQUMsSUFBNkI7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDcEQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksbUNBQW1DLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsSUFBNkI7UUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDcEQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUkscUNBQXFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7O3lIQTFFVSw0QkFBNEI7NkdBQTVCLDRCQUE0Qiw4SUN0QnpDLDRtREF1Qlcsb0dETkMsWUFBWSxvVEFBRSxlQUFlLDJqQkFBRSxhQUFhLDBOQUFFLGdCQUFnQixrSUFBRSxhQUFhOzJGQUs1RSw0QkFBNEI7a0JBUnhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxtQkFHdkUsdUJBQXVCLENBQUMsTUFBTTs0RkE2QjNCLFVBQVU7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ1NzbUNvbXBvbmVudCwgU3RvcmUgfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5cbmltcG9ydCB7IE5nc3NtRXhwcmVzc2lvblRyZWUsIE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcsIE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21FeHByZXNzaW9uVHJlZVN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUnO1xuaW1wb3J0IHsgTmdzc21Db2xsYXBzZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbiwgTmdzc21FeHBhbmRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdzc20tZXhwcmVzc2lvbi10cmVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2Nyb2xsaW5nTW9kdWxlLCBNYXRDYXJkTW9kdWxlLCBNYXREaXZpZGVyTW9kdWxlLCBNYXRJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25nc3NtLWV4cHJlc3Npb24tdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3NzbUV4cHJlc3Npb25UcmVlQ29tcG9uZW50IGV4dGVuZHMgTmdTc21Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tmdzc21FeHByZXNzaW9uVHJlZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcGxheWVkTm9kZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3RyZWVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuXG4gICAgdGhpcy5fdHJlZSQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCQpKS5zdWJzY3JpYmUoKHRyZWUpID0+IHtcbiAgICAgIGNvbnN0IGRpc3BsYXllZE5vZGVzOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdID0gW107XG4gICAgICBjb25zdCBjb2xsYXBzZWROb2RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgKHRyZWU/Lm5vZGVzID8/IFtdKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuaXNFeHBhbmRhYmxlID09PSB0cnVlICYmIG5vZGUuaXNFeHBhbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb2xsYXBzZWROb2Rlcy5hZGQobm9kZS5kYXRhLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5kYXRhLnBhcmVudElkIHx8IG5vZGUucGF0aC5maW5kSW5kZXgoKHApID0+IGNvbGxhcHNlZE5vZGVzLmhhcyhwKSkgPT09IC0xKSB7XG4gICAgICAgICAgZGlzcGxheWVkTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2Rpc3BsYXllZE5vZGVzJC5uZXh0KGRpc3BsYXllZE5vZGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdHJlZUNvbmZpZyh2YWx1ZTogTmdzc21FeHByZXNzaW9uVHJlZUNvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmVlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RyZWVDb25maWckLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcgPSB7XG4gICAgICAuLi52YWx1ZVxuICAgIH07XG4gICAgaWYgKCF2YWx1ZS5nZXROb2RlTGFiZWwpIHtcbiAgICAgIHZhbHVlLmdldE5vZGVMYWJlbCA9IChub2RlKSA9PiBub2RlLmRhdGEuaWQ7XG4gICAgfVxuICAgIHRoaXMuX3RyZWVDb25maWckLm5leHQoY29uZmlnKTtcbiAgICB0aGlzLl90cmVlU3Vic2NyaXB0aW9uID0gdGhpcy53YXRjaCgocykgPT4gc2VsZWN0Tmdzc21FeHByZXNzaW9uVHJlZVN0YXRlKHMpLnRyZWVzW3ZhbHVlLnRyZWVJZF0pLnN1YnNjcmliZSgodHJlZSkgPT5cbiAgICAgIHRoaXMuX3RyZWUkLm5leHQodHJlZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCB0cmVlQ29uZmlnJCgpOiBPYnNlcnZhYmxlPE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJlZUNvbmZpZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc3BsYXllZE5vZGVzJCgpOiBPYnNlcnZhYmxlPE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheWVkTm9kZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1JZChfOiBudW1iZXIsIG5vZGU6IE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbm9kZS5kYXRhLmlkO1xuICB9XG5cbiAgcHVibGljIGdldERlZmF1bHRQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/Lm5vZGVQYWRkaW5nID8/IDIwO1xuICB9XG5cbiAgcHVibGljIGV4cGFuZChub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBOZ3NzbUV4cGFuZEV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUuZGF0YS5pZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZShub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBOZ3NzbUNvbGxhcHNlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uKHRyZWVJZCwgbm9kZS5kYXRhLmlkKSk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmbGV4LWNvbHVtbi1zdHJldGNoIGZ4RmxleCBuZ3NzbS10cmVlLW5vZGVcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImZsZXgtY29sdW1uLXN0cmV0Y2ggZnhGbGV4XCIgKm5nSWY9XCIodHJlZUNvbmZpZyQgfCBhc3luYykgYXMgdHJlZUNvbmZpZ1wiPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFtpdGVtU2l6ZV09XCJ0cmVlQ29uZmlnLnJvd1NpemUgPz8gMzBcIiBjbGFzcz1cImZ4RmxleFwiPlxuICAgICAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZE5vZGVzJCB8IGFzeW5jOyB0cmFja0J5OiBnZXRJdGVtSWRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwidHJlZUNvbmZpZy5yb3dTaXplID8/IDMwXCIgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZVwiIGlkPVwie3snbm9kZV8nICsgaXRlbS5kYXRhLmlkfX1cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgW3ZlcnRpY2FsXT1cInRydWVcIiBjbGFzcz1cIm5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRyZWVDb25maWcucm93U2l6ZSA/PyAzMFwiICpuZ0Zvcj1cImxldCBwYXJ0IG9mIGl0ZW0ucGF0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW4tcmlnaHQucHhdPVwiZ2V0RGVmYXVsdFBhZGRpbmcoKVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1yaWdodFwiICpuZ0lmPVwiaXRlbS5kYXRhLmlzRXhwYW5kYWJsZSAmJiBpdGVtLmlzRXhwYW5kZWQgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtleHBhbmQoaXRlbSk7XCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd25cIiAqbmdJZj1cIml0ZW0uZGF0YS5pc0V4cGFuZGFibGUgJiYgaXRlbS5pc0V4cGFuZGVkID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtjb2xsYXBzZShpdGVtKTtcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7e3RyZWVDb25maWcuZ2V0Tm9kZUxhYmVsPy4oaXRlbSl9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwidHJlZUNvbmZpZy5nZXROb2RlRGVzY3JpcHRpb24/LihpdGVtKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+Il19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUE0QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUUsT0FBTyxFQUFFLGNBQWMsRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQXdCLDhCQUE4QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXJGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxlQUFl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OEI7MkZBSzVHLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLDhCQUE4QixDQUFDLG1CQUd2Ryx1QkFBdUIsQ0FBQyxNQUFNOzRGQTZCM0IsVUFBVTtzQkFBN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5nU3NtQ29tcG9uZW50LCBTdG9yZSB9IGZyb20gJ25nc3NtLXN0b3JlJztcbmltcG9ydCB7IE5nc3NtQ29tcG9uZW50QWN0aW9uLCBOZ3NzbUNvbXBvbmVudERpc3BsYXlEaXJlY3RpdmUgfSBmcm9tICduZ3NzbS10b29sa2l0JztcblxuaW1wb3J0IHtcbiAgTmdzc21FeHByZXNzaW9uVHJlZSxcbiAgTmdzc21FeHByZXNzaW9uVHJlZUNvbmZpZyxcbiAgTmdzc21FeHByZXNzaW9uVHJlZURlc2NyaXB0aW9uQ29tcG9uZW50LFxuICBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVxufSBmcm9tICcuLi8uLi9tb2RlbCc7XG5pbXBvcnQgeyBzZWxlY3ROZ3NzbUV4cHJlc3Npb25UcmVlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5pbXBvcnQgeyBOZ3NzbUNvbGxhcHNlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uLCBOZ3NzbUV4cGFuZEV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbiB9IGZyb20gJy4uLy4uL2FjdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3NzbS1leHByZXNzaW9uLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTY3JvbGxpbmdNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE5nc3NtQ29tcG9uZW50RGlzcGxheURpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmdzc21FeHByZXNzaW9uVHJlZUNvbXBvbmVudCBleHRlbmRzIE5nU3NtQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5nc3NtRXhwcmVzc2lvblRyZWUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BsYXllZE5vZGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tmdzc21FeHByZXNzaW9uVHJlZU5vZGVbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmVlQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tmdzc21FeHByZXNzaW9uVHJlZUNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF90cmVlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZSkge1xuICAgIHN1cGVyKHN0b3JlKTtcblxuICAgIHRoaXMuX3RyZWUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBbGwkKSkuc3Vic2NyaWJlKCh0cmVlKSA9PiB7XG4gICAgICBjb25zdCBkaXNwbGF5ZWROb2RlczogTmdzc21FeHByZXNzaW9uVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgY29sbGFwc2VkTm9kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICh0cmVlPy5ub2RlcyA/PyBbXSkuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5kYXRhLmlzRXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiBub2RlLmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29sbGFwc2VkTm9kZXMuYWRkKG5vZGUuZGF0YS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUuZGF0YS5wYXJlbnRJZCB8fCBub2RlLnBhdGguZmluZEluZGV4KChwKSA9PiBjb2xsYXBzZWROb2Rlcy5oYXMocCkpID09PSAtMSkge1xuICAgICAgICAgIGRpc3BsYXllZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9kaXNwbGF5ZWROb2RlcyQubmV4dChkaXNwbGF5ZWROb2Rlcyk7XG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRyZWVDb25maWcodmFsdWU6IE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdHJlZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnID0ge1xuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICAgIGlmICghY29uZmlnLmdldE5vZGVMYWJlbCkge1xuICAgICAgY29uZmlnLmdldE5vZGVMYWJlbCA9IChub2RlKSA9PiBub2RlLmRhdGEuaWQ7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcuZXhwYW5kSWNvbkNsYXNzKSB7XG4gICAgICBjb25maWcuZXhwYW5kSWNvbkNsYXNzID0gJ2ZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLmNvbGxhcHNlSWNvbkNsYXNzKSB7XG4gICAgICBjb25maWcuY29sbGFwc2VJY29uQ2xhc3MgPSAnZmEtc29saWQgZmEtY2hldnJvbi1kb3duJztcbiAgICB9XG5cbiAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gICAgdGhpcy5fdHJlZVN1YnNjcmlwdGlvbiA9IHRoaXMud2F0Y2goKHMpID0+IHNlbGVjdE5nc3NtRXhwcmVzc2lvblRyZWVTdGF0ZShzKS50cmVlc1t2YWx1ZS50cmVlSWRdKS5zdWJzY3JpYmUoKHRyZWUpID0+XG4gICAgICB0aGlzLl90cmVlJC5uZXh0KHRyZWUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHJlZUNvbmZpZyQoKTogT2JzZXJ2YWJsZTxOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWVDb25maWckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5ZWROb2RlcyQoKTogT2JzZXJ2YWJsZTxOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXllZE5vZGVzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtSWQoXzogbnVtYmVyLCBub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUuZGF0YS5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0UGFkZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy5ub2RlUGFkZGluZyA/PyAyMDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQobm9kZTogTmdzc21FeHByZXNzaW9uVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlSWQgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy50cmVlSWQ7XG4gICAgaWYgKHRyZWVJZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgTmdzc21FeHBhbmRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24odHJlZUlkLCBub2RlLmRhdGEuaWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY29sbGFwc2Uobm9kZTogTmdzc21FeHByZXNzaW9uVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlSWQgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy50cmVlSWQ7XG4gICAgaWYgKHRyZWVJZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgTmdzc21Db2xsYXBzZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUuZGF0YS5pZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnREZXNjcmlwdGlvbkFjdGlvbihub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZSk6IE5nc3NtQ29tcG9uZW50QWN0aW9uIHtcbiAgICByZXR1cm4gKGM6IE5nc3NtRXhwcmVzc2lvblRyZWVEZXNjcmlwdGlvbkNvbXBvbmVudCkgPT4gYy5zZXROb2RlKG5vZGUpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmbGV4LWNvbHVtbi1zdHJldGNoIGZ4RmxleCBuZ3NzbS1leHByZXNzaW9uLXRyZWVcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImZsZXgtY29sdW1uLXN0cmV0Y2ggZnhGbGV4IG5nc3NtLWV4cHJlc3Npb24tdHJlZS1jb250ZW50XCJcbiAgICAgICAgKm5nSWY9XCIodHJlZUNvbmZpZyQgfCBhc3luYykgYXMgdHJlZUNvbmZpZ1wiPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFtpdGVtU2l6ZV09XCJ0cmVlQ29uZmlnLnJvd1NpemUgPz8gMzBcIiBjbGFzcz1cImZ4RmxleFwiXG4gICAgICAgICAgICAqbmdJZj1cInRyZWVDb25maWcuZGlzYWJsZVZpcnR1YWxpemF0aW9uICE9PSB0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheWVkTm9kZXMkIHwgYXN5bmM7IHRyYWNrQnk6IGdldEl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZVwiIGlkPVwie3snbm9kZV8nICsgaXRlbS5kYXRhLmlkfX1cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZVRlbXBsYXRlO2NvbnRleHQ6IHt0cmVlQ29uZmlnLCBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGVzLWNvbnRhaW5lclwiICpuZ0lmPVwidHJlZUNvbmZpZy5kaXNhYmxlVmlydHVhbGl6YXRpb24gPT09IHRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheWVkTm9kZXMkIHwgYXN5bmM7IHRyYWNrQnk6IGdldEl0ZW1JZFwiIGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgIGlkPVwie3snbm9kZV8nICsgaXRlbS5kYXRhLmlkfX1cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZVRlbXBsYXRlO2NvbnRleHQ6IHt0cmVlQ29uZmlnLCBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlIGxldC10cmVlQ29uZmlnPVwidHJlZUNvbmZpZ1wiIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvdy1jZW50ZXIgZnhGbGV4XCIgW3N0eWxlLmhlaWdodC5weF09XCJ0cmVlQ29uZmlnLnJvd1NpemUgPz8gMzBcIj5cbiAgICAgICAgPG1hdC1kaXZpZGVyIFt2ZXJ0aWNhbF09XCJ0cnVlXCIgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kaXZpZGVyXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwidHJlZUNvbmZpZy5yb3dTaXplID8/IDMwXCIgKm5nRm9yPVwibGV0IHBhcnQgb2YgaXRlbS5wYXRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXJnaW4tcmlnaHQucHhdPVwiZ2V0RGVmYXVsdFBhZGRpbmcoKVwiPlxuICAgICAgICA8L21hdC1kaXZpZGVyPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ7e3RyZWVDb25maWcuZXhwYW5kSWNvbkNsYXNzfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCIoaXRlbS5kYXRhLmlzRXhwYW5kYWJsZSB8fCBpdGVtLmRhdGEuaGFzUm93RGV0YWlsKSAmJiBpdGVtLmlzRXhwYW5kZWQgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZXhwYW5kKGl0ZW0pO1wiIGlkPVwiZXhwYW5kSWNvblwiPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ7e3RyZWVDb25maWcuY29sbGFwc2VJY29uQ2xhc3N9fVwiXG4gICAgICAgICAgICAqbmdJZj1cIihpdGVtLmRhdGEuaXNFeHBhbmRhYmxlIHx8IGl0ZW0uZGF0YS5oYXNSb3dEZXRhaWwpICYmIGl0ZW0uaXNFeHBhbmRlZCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2NvbGxhcHNlKGl0ZW0pO1wiIGlkPVwiY29sbGFwc2VJY29uXCI+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1sYWJlbFwiPlxuICAgICAgICAgICAge3t0cmVlQ29uZmlnLmdldE5vZGVMYWJlbD8uKGl0ZW0pfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwidHJlZUNvbmZpZy5nZXROb2RlRGVzY3JpcHRpb24/LihpdGVtKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRlc2NyaXB0aW9uLWNvbXBvbmVudFwiXG4gICAgICAgICAgICBbbmdzc21Db21wb25lbnREaXNwbGF5XT1cInRyZWVDb25maWcuZ2V0Tm9kZURlc2NyaXB0aW9uQ29tcG9uZW50Py4oaXRlbSlcIlxuICAgICAgICAgICAgW25nc3NtQ29tcG9uZW50QWN0aW9uXT1cImdldENvbXBvbmVudERlc2NyaXB0aW9uQWN0aW9uKGl0ZW0pXCI+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIml0ZW0uZGF0YS5oYXNSb3dEZXRhaWwgPT09IHRydWUgJiYgaXRlbS5pc0V4cGFuZGVkID09PSB0cnVlXCIgY2xhc3M9XCJmbGV4LXJvdy1jZW50ZXIgZnhGbGV4XCI+XG4gICAgICAgIDxtYXQtZGl2aWRlciBbdmVydGljYWxdPVwidHJ1ZVwiIGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtZGl2aWRlclwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRldGFpbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcIiAqbmdGb3I9XCIgbGV0IHBhcnQgb2YgaXRlbS5wYXRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXJnaW4tcmlnaHQucHhdPVwiZ2V0RGVmYXVsdFBhZGRpbmcoKVwiPlxuICAgICAgICA8L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2ICNkZXRhaWxDb250YWluZXIgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWwtY29tcG9uZW50XCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ3NzbUNvbXBvbmVudERpc3BsYXldPVwidHJlZUNvbmZpZy5nZXROb2RlRGV0YWlsQ29tcG9uZW50Py4oaXRlbSlcIlxuICAgICAgICAgICAgICAgIFtuZ3NzbUNvbXBvbmVudEFjdGlvbl09XCJnZXRDb21wb25lbnREZXNjcmlwdGlvbkFjdGlvbihpdGVtKVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
@@ -2,4 +2,5 @@ export * from './ngssm-expression-tree';
2
2
  export * from './ngssm-expression-tree-node';
3
3
  export * from './ngssm-node';
4
4
  export * from './ngssm-expression-tree-config';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvbmdzc20tZXhwcmVzc2lvbi10cmVlL21vZGVsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZSc7XG5leHBvcnQgKiBmcm9tICcuL25nc3NtLW5vZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtY29uZmlnJztcbiJdfQ==
5
+ export * from './ngssm-expression-tree-description-component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvbmdzc20tZXhwcmVzc2lvbi10cmVlL21vZGVsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZSc7XG5leHBvcnQgKiBmcm9tICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlJztcbmV4cG9ydCAqIGZyb20gJy4vbmdzc20tbm9kZSc7XG5leHBvcnQgKiBmcm9tICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtZGVzY3JpcHRpb24tY29tcG9uZW50JztcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbW9kZWwvbmdzc20tZXhwcmVzc2lvbi10cmVlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21FeHByZXNzaW9uVHJlZU5vZGUgfSBmcm9tICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnPFREYXRhID0gYW55PiB7XG4gIHRyZWVJZDogc3RyaW5nO1xuICBub2RlUGFkZGluZz86IG51bWJlcjsgLy8gYnkgZGVmYXVsdCAyMHB4XG4gIHJvd1NpemU/OiBudW1iZXI7IC8vIGJ5IGRlZmF1bHQgMzBweFxuICBnZXROb2RlTGFiZWw/OiAobm9kZTogTmdzc21FeHByZXNzaW9uVHJlZU5vZGU8VERhdGE+KSA9PiBzdHJpbmc7XG4gIGdldE5vZGVEZXNjcmlwdGlvbj86IChub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZTxURGF0YT4pID0+IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbW9kZWwvbmdzc20tZXhwcmVzc2lvbi10cmVlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21FeHByZXNzaW9uVHJlZURlc2NyaXB0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtZGVzY3JpcHRpb24tY29tcG9uZW50JztcbmltcG9ydCB7IE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlIH0gZnJvbSAnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZSc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXJhbWVlcnMgb2YgYW4gZXhwcmVzc2lvbiB0cmVlIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWc8VERhdGEgPSBhbnk+IHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgb2YgdGhlIHRyZWUgdXNlZCB0byBhc3NvY2lhdGUgZGF0YSBzdG9yZWQgaW4gdGhlIHN0YXRlIHdpdGggdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICovXG4gIHRyZWVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBubyB2aXJ0dWFsaXphdGlvbiBpcyBhcHBsaWVkLlxuICAgKi9cbiAgZGlzYWJsZVZpcnR1YWxpemF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQmFzZSBsZWZ0IHBhZGRpbmcgZm9yIGEgIHJvdyBpbiBwaXhlbHMuXG4gICAqIFRoZSByZWFsIHBhZGRpbmcgaXMgdGhlIGRlcHRoIG9mIHRoZSBub2RlIG11bHRpcGxpZWQgYnkgdGhpcyB2YWx1ZS5cbiAgICogQnkgZGVmYXVsdCAyMHB4LlxuICAgKi9cbiAgbm9kZVBhZGRpbmc/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiBhIHJvdyBpbiBwaXhlbHMuXG4gICAqIEJ5IGRlZmF1bHQgMzBweC5cbiAgICovXG4gIHJvd1NpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjc3MgY2xhc3MgdXNlZCB0byByZW5kZXIgdGhlIGV4cGFuZCBpY29uLlxuICAgKiBCeSBkZWZhdWx0ICdmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0J1xuICAgKi9cbiAgZXhwYW5kSWNvbkNsYXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3NzIGNsYXNzIHVzZWQgdG8gcmVuZGVyIHRoZSBjb2xscGFzZSBpY29uLlxuICAgKiBCeSBkZWZhdWx0ICdmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd24nXG4gICAqL1xuICBjb2xsYXBzZUljb25DbGFzcz86IHN0cmluZztcblxuICAvKipcbiAgICogR2V0IHRoZSBsYWJlbCBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5vZGVcbiAgICogQHJldHVybnMgVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgbGFiZWxcbiAgICovXG4gIGdldE5vZGVMYWJlbD86IChub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZTxURGF0YT4pID0+IHN0cmluZztcblxuICAvKipcbiAgICogSHRtbCByZW5kZXJlZCBhdCB0aGUgcmlnaHQgb2YgdGhlIGxhYmVsIHRvIGRpc3BsYXkgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcGFyYW0gbm9kZVxuICAgKiBAcmV0dXJucyBUaGUgaHRtbCB1c2VkIHRvIHJlbmRlciB0aGUgbm9kZSBkZXNjcmlwdGlvblxuICAgKi9cbiAgZ2V0Tm9kZURlc2NyaXB0aW9uPzogKG5vZGU6IE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlPFREYXRhPikgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUbyByZW5kZXIgZGVzY3JpcHRpb24gb2YgYSBub2RlIGJ5IHVzaW5nIGEgY3VzdG9tIGFuZ3VsYXIgY29tcG9uZW50IGluc3RlYWQgb2Ygc2ltcGxlIGh0bWwuXG4gICAqIEBwYXJhbSBub2RlXG4gICAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gcmVuZGVyLiBJdCBtdXN0IGltcGxlbWVudCB7QGxpbmsgTmdzc21FeHByZXNzaW9uVHJlZURlc2NyaXB0aW9uQ29tcG9uZW50fS5cbiAgICovXG4gIGdldE5vZGVEZXNjcmlwdGlvbkNvbXBvbmVudD86IChub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZTxURGF0YT4pID0+IGFueTtcblxuICAvKipcbiAgICogVG8gcmVuZGVyIG5vZGUgZGV0YWlsIHdpdGggYSBjdXN0b20gYW5ndWxhciBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBub2RlXG4gICAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gcmVuZGVyLiBJdCBtdXN0IGltcGxlbWVudCB7QGxpbmsgTmdzc21FeHByZXNzaW9uVHJlZURlc2NyaXB0aW9uQ29tcG9uZW50fVxuICAgKi9cbiAgZ2V0Tm9kZURldGFpbENvbXBvbmVudD86IChub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZTxURGF0YT4pID0+IGFueTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLWRlc2NyaXB0aW9uLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbW9kZWwvbmdzc20tZXhwcmVzc2lvbi10cmVlLWRlc2NyaXB0aW9uLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21FeHByZXNzaW9uVHJlZU5vZGUgfSBmcm9tICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3NzbUV4cHJlc3Npb25UcmVlRGVzY3JpcHRpb25Db21wb25lbnQ8VERhdGEgPSBhbnk+IHtcbiAgc2V0Tm9kZSh2YWx1ZTogTmdzc21FeHByZXNzaW9uVHJlZU5vZGU8VERhdGE+KTogdm9pZDtcbn1cbiJdfQ==
@@ -19,9 +19,9 @@ export const createNgssmExpressionTreeFromNodes = (nodes) => {
19
19
  tree.nodes.push({
20
20
  path: [...path],
21
21
  data: node,
22
- isExpanded: true
22
+ isExpanded: node.isExpandable === true
23
23
  });
24
24
  });
25
25
  return tree;
26
26
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL25nc3NtLWV4cHJlc3Npb24tdHJlZS9tb2RlbC9uZ3NzbS1leHByZXNzaW9uLXRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FBYyxLQUF5QixFQUE4QixFQUFFO0lBQ3ZILE1BQU0sSUFBSSxHQUErQjtRQUN2QyxLQUFLLEVBQUUsRUFBRTtLQUNWLENBQUM7SUFFRixJQUFJLElBQUksR0FBYSxFQUFFLENBQUM7SUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksR0FBRyxFQUFFLENBQUM7U0FDWDthQUFNO1lBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNkLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21FeHByZXNzaW9uVHJlZU5vZGUgfSBmcm9tICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlJztcbmltcG9ydCB7IE5nc3NtTm9kZSB9IGZyb20gJy4vbmdzc20tbm9kZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmdzc21FeHByZXNzaW9uVHJlZTxURGF0YSA9IGFueT4ge1xuICBub2RlczogTmdzc21FeHByZXNzaW9uVHJlZU5vZGU8VERhdGE+W107XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZ3NzbUV4cHJlc3Npb25UcmVlRnJvbU5vZGVzID0gPFREYXRhID0gYW55Pihub2RlczogTmdzc21Ob2RlPFREYXRhPltdKTogTmdzc21FeHByZXNzaW9uVHJlZTxURGF0YT4gPT4ge1xuICBjb25zdCB0cmVlOiBOZ3NzbUV4cHJlc3Npb25UcmVlPFREYXRhPiA9IHtcbiAgICBub2RlczogW11cbiAgfTtcblxuICBsZXQgcGF0aDogc3RyaW5nW10gPSBbXTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGlmICghbm9kZS5wYXJlbnRJZCkge1xuICAgICAgcGF0aCA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJlbnRJZEluZGV4ID0gcGF0aC5pbmRleE9mKG5vZGUucGFyZW50SWQpO1xuICAgICAgaWYgKHBhcmVudElkSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHBhdGgucHVzaChub2RlLnBhcmVudElkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGguc3BsaWNlKHBhcmVudElkSW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cmVlLm5vZGVzLnB1c2goe1xuICAgICAgcGF0aDogWy4uLnBhdGhdLFxuICAgICAgZGF0YTogbm9kZSxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL25nc3NtLWV4cHJlc3Npb24tdHJlZS9tb2RlbC9uZ3NzbS1leHByZXNzaW9uLXRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FBYyxLQUF5QixFQUE4QixFQUFFO0lBQ3ZILE1BQU0sSUFBSSxHQUErQjtRQUN2QyxLQUFLLEVBQUUsRUFBRTtLQUNWLENBQUM7SUFFRixJQUFJLElBQUksR0FBYSxFQUFFLENBQUM7SUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksR0FBRyxFQUFFLENBQUM7U0FDWDthQUFNO1lBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNkLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJO1NBQ3ZDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZSB9IGZyb20gJy4vbmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUnO1xuaW1wb3J0IHsgTmdzc21Ob2RlIH0gZnJvbSAnLi9uZ3NzbS1ub2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3NzbUV4cHJlc3Npb25UcmVlPFREYXRhID0gYW55PiB7XG4gIG5vZGVzOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZTxURGF0YT5bXTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5nc3NtRXhwcmVzc2lvblRyZWVGcm9tTm9kZXMgPSA8VERhdGEgPSBhbnk+KG5vZGVzOiBOZ3NzbU5vZGU8VERhdGE+W10pOiBOZ3NzbUV4cHJlc3Npb25UcmVlPFREYXRhPiA9PiB7XG4gIGNvbnN0IHRyZWU6IE5nc3NtRXhwcmVzc2lvblRyZWU8VERhdGE+ID0ge1xuICAgIG5vZGVzOiBbXVxuICB9O1xuXG4gIGxldCBwYXRoOiBzdHJpbmdbXSA9IFtdO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgaWYgKCFub2RlLnBhcmVudElkKSB7XG4gICAgICBwYXRoID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmVudElkSW5kZXggPSBwYXRoLmluZGV4T2Yobm9kZS5wYXJlbnRJZCk7XG4gICAgICBpZiAocGFyZW50SWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcGF0aC5wdXNoKG5vZGUucGFyZW50SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aC5zcGxpY2UocGFyZW50SWRJbmRleCArIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyZWUubm9kZXMucHVzaCh7XG4gICAgICBwYXRoOiBbLi4ucGF0aF0sXG4gICAgICBkYXRhOiBub2RlLFxuICAgICAgaXNFeHBhbmRlZDogbm9kZS5pc0V4cGFuZGFibGUgPT09IHRydWVcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbW9kZWwvbmdzc20tbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBOZ3NzbU5vZGU8VERhdGEgPSBhbnk+IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIGlzRXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIGRhdGE6IFREYXRhO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbW9kZWwvbmdzc20tbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBOZ3NzbU5vZGU8VERhdGEgPSBhbnk+IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIGlzRXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIGhhc1Jvd0RldGFpbD86IGJvb2xlYW47XG4gIGRhdGE6IFREYXRhO1xufVxuIl19
@@ -5,7 +5,7 @@ import * as i1 from 'ngssm-store';
5
5
  import { NgSsmFeatureState, NGSSM_EFFECT, NgSsmComponent, NGSSM_REDUCER } from 'ngssm-store';
6
6
  import { __decorate } from 'tslib';
7
7
  import update from 'immutability-helper';
8
- import { defaultRegexEditorValidator } from 'ngssm-toolkit';
8
+ import { defaultRegexEditorValidator, NgssmComponentDisplayDirective } from 'ngssm-toolkit';
9
9
  import * as i2 from '@angular/common';
10
10
  import { CommonModule } from '@angular/common';
11
11
  import * as i3 from '@angular/cdk/scrolling';
@@ -1023,7 +1023,7 @@ const createNgssmExpressionTreeFromNodes = (nodes) => {
1023
1023
  tree.nodes.push({
1024
1024
  path: [...path],
1025
1025
  data: node,
1026
- isExpanded: true
1026
+ isExpanded: node.isExpandable === true
1027
1027
  });
1028
1028
  });
1029
1029
  return tree;
@@ -1174,8 +1174,14 @@ class NgssmExpressionTreeComponent extends NgSsmComponent {
1174
1174
  return;
1175
1175
  }
1176
1176
  const config = Object.assign({}, value);
1177
- if (!value.getNodeLabel) {
1178
- value.getNodeLabel = (node) => node.data.id;
1177
+ if (!config.getNodeLabel) {
1178
+ config.getNodeLabel = (node) => node.data.id;
1179
+ }
1180
+ if (!config.expandIconClass) {
1181
+ config.expandIconClass = 'fa-solid fa-chevron-right';
1182
+ }
1183
+ if (!config.collapseIconClass) {
1184
+ config.collapseIconClass = 'fa-solid fa-chevron-down';
1179
1185
  }
1180
1186
  this._treeConfig$.next(config);
1181
1187
  this._treeSubscription = this.watch((s) => selectNgssmExpressionTreeState(s).trees[value.treeId]).subscribe((tree) => this._tree$.next(tree));
@@ -1207,12 +1213,15 @@ class NgssmExpressionTreeComponent extends NgSsmComponent {
1207
1213
  this.dispatchAction(new NgssmCollapseExpressionTreeNodeAction(treeId, node.data.id));
1208
1214
  }
1209
1215
  }
1216
+ getComponentDescriptionAction(node) {
1217
+ return (c) => c.setNode(node);
1218
+ }
1210
1219
  }
1211
1220
  NgssmExpressionTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgssmExpressionTreeComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
1212
- NgssmExpressionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: NgssmExpressionTreeComponent, isStandalone: true, selector: "ngssm-expression-tree", inputs: { treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-tree-node\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.data.isExpandable && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\">\n </mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.data.isExpandable && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1221
+ NgssmExpressionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: NgssmExpressionTreeComponent, isStandalone: true, selector: "ngssm-expression-tree", inputs: { treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\"\n *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\"\n *ngIf=\"treeConfig.disableVirtualization !== true\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"ngssm-expression-tree-nodes-container\" *ngIf=\"treeConfig.disableVirtualization === true\">\n <div *ngFor=\"let item of displayedNodes$ | async; trackBy: getItemId\" class=\"ngssm-expression-tree-node\"\n id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n\n<ng-template #nodeTemplate let-treeConfig=\"treeConfig\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"treeConfig.rowSize ?? 30\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"{{treeConfig.expandIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\" id=\"expandIcon\">\n </mat-icon>\n <mat-icon class=\"{{treeConfig.collapseIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\" id=\"collapseIcon\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n <div class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"treeConfig.getNodeDescriptionComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\">\n\n </div>\n </div>\n <div *ngIf=\"item.data.hasRowDetail === true && item.isExpanded === true\" class=\"flex-row-center fxFlex\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\" *ngFor=\" let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <div [ngssmComponentDisplay]=\"treeConfig.getNodeDetailComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\"></div>\n </div>\n </div>\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1213
1222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgssmExpressionTreeComponent, decorators: [{
1214
1223
  type: Component,
1215
- args: [{ selector: 'ngssm-expression-tree', standalone: true, imports: [CommonModule, ScrollingModule, MatCardModule, MatDividerModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-tree-node\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.data.isExpandable && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\">\n </mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.data.isExpandable && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>", styles: [":host{display:flex;flex-direction:column}\n"] }]
1224
+ args: [{ selector: 'ngssm-expression-tree', standalone: true, imports: [CommonModule, ScrollingModule, MatCardModule, MatDividerModule, MatIconModule, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\"\n *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\"\n *ngIf=\"treeConfig.disableVirtualization !== true\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"ngssm-expression-tree-nodes-container\" *ngIf=\"treeConfig.disableVirtualization === true\">\n <div *ngFor=\"let item of displayedNodes$ | async; trackBy: getItemId\" class=\"ngssm-expression-tree-node\"\n id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n\n<ng-template #nodeTemplate let-treeConfig=\"treeConfig\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"treeConfig.rowSize ?? 30\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"{{treeConfig.expandIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\" id=\"expandIcon\">\n </mat-icon>\n <mat-icon class=\"{{treeConfig.collapseIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\" id=\"collapseIcon\">\n </mat-icon>\n <div class=\"ngssm-expression-tree-node-label\">\n {{treeConfig.getNodeLabel?.(item)}}\n </div>\n <div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"treeConfig.getNodeDescription?.(item)\">\n </div>\n <div class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"treeConfig.getNodeDescriptionComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\">\n\n </div>\n </div>\n <div *ngIf=\"item.data.hasRowDetail === true && item.isExpanded === true\" class=\"flex-row-center fxFlex\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\" *ngFor=\" let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <div [ngssmComponentDisplay]=\"treeConfig.getNodeDetailComponent?.(item)\"\n [ngssmComponentAction]=\"getComponentDescriptionAction(item)\"></div>\n </div>\n </div>\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"] }]
1216
1225
  }], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { treeConfig: [{
1217
1226
  type: Input
1218
1227
  }] } });