ngssm-tree 19.3.5 → 19.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.
- package/fesm2022/ngssm-tree.mjs +51 -51
- package/fesm2022/ngssm-tree.mjs.map +1 -1
- package/package.json +1 -1
package/fesm2022/ngssm-tree.mjs
CHANGED
|
@@ -224,10 +224,10 @@ class TreeNodeLoadingEffect {
|
|
|
224
224
|
}
|
|
225
225
|
});
|
|
226
226
|
}
|
|
227
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
228
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
227
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeLoadingEffect, deps: [{ token: NGSSM_TREE_DATA_SERVICE, optional: true }, { token: i1.Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
228
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeLoadingEffect }); }
|
|
229
229
|
}
|
|
230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeLoadingEffect, decorators: [{
|
|
231
231
|
type: Injectable
|
|
232
232
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
233
233
|
type: Inject,
|
|
@@ -334,10 +334,10 @@ class NgssmTreeComponent {
|
|
|
334
334
|
this.store.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));
|
|
335
335
|
}
|
|
336
336
|
}
|
|
337
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
338
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
337
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
338
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NgssmTreeComponent, isStandalone: true, selector: "ngssm-tree", inputs: { treeConfig: { classPropertyName: "treeConfig", publicName: "treeConfig", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
339
339
|
}
|
|
340
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmTreeComponent, decorators: [{
|
|
341
341
|
type: Component,
|
|
342
342
|
args: [{ selector: 'ngssm-tree', imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"] }]
|
|
343
343
|
}], ctorParameters: () => [] });
|
|
@@ -379,10 +379,10 @@ class NgssmBreadcrumbComponent {
|
|
|
379
379
|
this.store.dispatchAction(new SelectNodeAction(treeId, node.nodeId));
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
383
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
383
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NgssmBreadcrumbComponent, isStandalone: true, selector: "ngssm-breadcrumb", inputs: { treeId: { classPropertyName: "treeId", publicName: "treeId", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
384
384
|
}
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmBreadcrumbComponent, decorators: [{
|
|
386
386
|
type: Component,
|
|
387
387
|
args: [{ selector: 'ngssm-breadcrumb', imports: [CommonModule, MatIconModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"] }]
|
|
388
388
|
}], ctorParameters: () => [] });
|
|
@@ -447,10 +447,10 @@ class NgssmTreeSearchDialogComponent {
|
|
|
447
447
|
regex: result.error
|
|
448
448
|
};
|
|
449
449
|
}
|
|
450
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
451
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
450
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmTreeSearchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
451
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NgssmTreeSearchDialogComponent, isStandalone: true, selector: "ngssm-ngssm-tree-search-dialog", viewQueries: [{ propertyName: "resultsViewerContainer", first: true, predicate: ["resultsViewerContainer"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host .mat-mdc-dialog-content{max-height:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
452
452
|
}
|
|
453
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
453
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmTreeSearchDialogComponent, decorators: [{
|
|
454
454
|
type: Component,
|
|
455
455
|
args: [{ selector: 'ngssm-ngssm-tree-search-dialog', imports: [
|
|
456
456
|
CommonModule,
|
|
@@ -532,10 +532,10 @@ class TreeNodesSearchingEffect {
|
|
|
532
532
|
this.dialog?.close();
|
|
533
533
|
this.dialog = undefined;
|
|
534
534
|
}
|
|
535
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
536
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
535
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesSearchingEffect, deps: [{ token: i4.MatDialog }, { token: i1.Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
536
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesSearchingEffect }); }
|
|
537
537
|
}
|
|
538
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
538
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesSearchingEffect, decorators: [{
|
|
539
539
|
type: Injectable
|
|
540
540
|
}], ctorParameters: () => [{ type: i4.MatDialog }, { type: i1.Logger }] });
|
|
541
541
|
|
|
@@ -657,10 +657,10 @@ let TreeNodeExpandReducer$1 = class TreeNodeExpandReducer {
|
|
|
657
657
|
}
|
|
658
658
|
return state;
|
|
659
659
|
}
|
|
660
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
661
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
660
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeExpandReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
661
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeExpandReducer }); }
|
|
662
662
|
};
|
|
663
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeExpandReducer$1, decorators: [{
|
|
664
664
|
type: Injectable
|
|
665
665
|
}] });
|
|
666
666
|
|
|
@@ -683,10 +683,10 @@ class TreeNodeSelectionReducer {
|
|
|
683
683
|
}
|
|
684
684
|
return state;
|
|
685
685
|
}
|
|
686
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
687
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
686
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeSelectionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
687
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeSelectionReducer }); }
|
|
688
688
|
}
|
|
689
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
689
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeSelectionReducer, decorators: [{
|
|
690
690
|
type: Injectable
|
|
691
691
|
}] });
|
|
692
692
|
|
|
@@ -767,10 +767,10 @@ class TreeNodesSearchReducer {
|
|
|
767
767
|
}
|
|
768
768
|
return state;
|
|
769
769
|
}
|
|
770
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
771
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
770
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesSearchReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
771
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesSearchReducer }); }
|
|
772
772
|
}
|
|
773
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesSearchReducer, decorators: [{
|
|
774
774
|
type: Injectable
|
|
775
775
|
}] });
|
|
776
776
|
|
|
@@ -814,10 +814,10 @@ class TreeNodesReducer {
|
|
|
814
814
|
}
|
|
815
815
|
return state;
|
|
816
816
|
}
|
|
817
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
818
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
817
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
818
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesReducer }); }
|
|
819
819
|
}
|
|
820
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
820
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodesReducer, decorators: [{
|
|
821
821
|
type: Injectable
|
|
822
822
|
}] });
|
|
823
823
|
|
|
@@ -856,10 +856,10 @@ let TreesReducer$1 = class TreesReducer {
|
|
|
856
856
|
}
|
|
857
857
|
return state;
|
|
858
858
|
}
|
|
859
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
860
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
859
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
860
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreesReducer }); }
|
|
861
861
|
};
|
|
862
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
862
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreesReducer$1, decorators: [{
|
|
863
863
|
type: Injectable
|
|
864
864
|
}] });
|
|
865
865
|
|
|
@@ -1064,10 +1064,10 @@ class TreesReducer {
|
|
|
1064
1064
|
}
|
|
1065
1065
|
return state;
|
|
1066
1066
|
}
|
|
1067
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1068
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1067
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1068
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreesReducer }); }
|
|
1069
1069
|
}
|
|
1070
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1070
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreesReducer, decorators: [{
|
|
1071
1071
|
type: Injectable
|
|
1072
1072
|
}] });
|
|
1073
1073
|
|
|
@@ -1149,10 +1149,10 @@ class TreeNodeExpandReducer {
|
|
|
1149
1149
|
}
|
|
1150
1150
|
});
|
|
1151
1151
|
}
|
|
1152
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1153
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1152
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeExpandReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1153
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeExpandReducer }); }
|
|
1154
1154
|
}
|
|
1155
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeExpandReducer, decorators: [{
|
|
1156
1156
|
type: Injectable
|
|
1157
1157
|
}] });
|
|
1158
1158
|
|
|
@@ -1271,10 +1271,10 @@ class TreeNodeEditionReducer {
|
|
|
1271
1271
|
isExpanded: true
|
|
1272
1272
|
});
|
|
1273
1273
|
}
|
|
1274
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1275
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1274
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeEditionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1275
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeEditionReducer }); }
|
|
1276
1276
|
}
|
|
1277
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: TreeNodeEditionReducer, decorators: [{
|
|
1278
1278
|
type: Injectable
|
|
1279
1279
|
}] });
|
|
1280
1280
|
|
|
@@ -1379,10 +1379,10 @@ class CutAndPasteReducer {
|
|
|
1379
1379
|
}
|
|
1380
1380
|
});
|
|
1381
1381
|
}
|
|
1382
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1383
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CutAndPasteReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1383
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CutAndPasteReducer }); }
|
|
1384
1384
|
}
|
|
1385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CutAndPasteReducer, decorators: [{
|
|
1386
1386
|
type: Injectable
|
|
1387
1387
|
}] });
|
|
1388
1388
|
|
|
@@ -1488,10 +1488,10 @@ class NgssmExpressionTreeNodeComponent {
|
|
|
1488
1488
|
this.store.dispatchAction(new NgssmPasteExpressionTreeNodeAction(treeId, nodeId, target));
|
|
1489
1489
|
}
|
|
1490
1490
|
}
|
|
1491
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1492
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
1491
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmExpressionTreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1492
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NgssmExpressionTreeNodeComponent, isStandalone: true, selector: "ngssm-expression-tree-node", inputs: { nodeId: { classPropertyName: "nodeId", publicName: "nodeId", isSignal: true, isRequired: false, transformFunction: null }, treeConfig: { classPropertyName: "treeConfig", publicName: "treeConfig", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (nodeCssIcon(); as css) {\n <div class=\"ngssm-expression-tree-node-icon\" id=\"treeNodeIcon\">\n <mat-icon class=\"{{ css }}\"></mat-icon>\n </div>\n}\n\n<div\n class=\"ngssm-expression-tree-node-label\"\n [matMenuTriggerFor]=\"contextMenu\"\n [class.ngssm-expression-tree-node-to-cut]=\"cutAndPaste().isPartOfCut === true\"\n id=\"treeNodeLabel\">\n {{ nodeLabel() }}\n</div>\n\n<div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"nodeDescription()\"></div>\n\n@let component = componentToDisplay();\n@if (component) {\n <div\n class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"component\"\n [ngssmComponentAction]=\"componentAction()\"></div>\n}\n\n<mat-menu #contextMenu=\"matMenu\" [class]=\"'ngssm-expression-tree-popup-menu'\">\n @let cutAndPasteSetup = cutAndPaste();\n @if (treeConfig()?.displayCutAndPasteMenus === true && cutAndPasteSetup) {\n <div class=\"flex-column-stretch\">\n @if (cutAndPasteSetup.isCutAndPasteInProgress === false) {\n <button mat-menu-item (click)=\"cut()\" [disabled]=\"cutAndPasteSetup.canCut !== true\">\n <mat-icon class=\"fa-solid fa-scissors\"></mat-icon>\n <span>Cut</span>\n </button>\n } @else {\n <button mat-menu-item (click)=\"cancelCut()\">\n <mat-icon class=\"fa-solid fa-slash\"></mat-icon>\n <span>Cancel cut</span>\n </button>\n }\n\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteInside !== true\" (click)=\"paste('Inside')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste inside</span>\n </button>\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteAfter !== true\" (click)=\"paste('After')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste after</span>\n </button>\n <mat-divider></mat-divider>\n </div>\n }\n\n <button mat-menu-item (click)=\"expandAll()\">\n <mat-icon class=\"fa-solid fa-up-right-and-down-left-from-center\"></mat-icon>\n <span>Expand all</span>\n </button>\n <button mat-menu-item (click)=\"collapseAll()\">\n <mat-icon class=\"fa-solid fa-down-left-and-up-right-to-center\"></mat-icon>\n <span>Collapse all</span>\n </button>\n</mat-menu>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;flex:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2$3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1493
1493
|
}
|
|
1494
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmExpressionTreeNodeComponent, decorators: [{
|
|
1495
1495
|
type: Component,
|
|
1496
1496
|
args: [{ selector: 'ngssm-expression-tree-node', imports: [CommonModule, MatIconModule, MatMenuModule, MatDividerModule, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (nodeCssIcon(); as css) {\n <div class=\"ngssm-expression-tree-node-icon\" id=\"treeNodeIcon\">\n <mat-icon class=\"{{ css }}\"></mat-icon>\n </div>\n}\n\n<div\n class=\"ngssm-expression-tree-node-label\"\n [matMenuTriggerFor]=\"contextMenu\"\n [class.ngssm-expression-tree-node-to-cut]=\"cutAndPaste().isPartOfCut === true\"\n id=\"treeNodeLabel\">\n {{ nodeLabel() }}\n</div>\n\n<div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"nodeDescription()\"></div>\n\n@let component = componentToDisplay();\n@if (component) {\n <div\n class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"component\"\n [ngssmComponentAction]=\"componentAction()\"></div>\n}\n\n<mat-menu #contextMenu=\"matMenu\" [class]=\"'ngssm-expression-tree-popup-menu'\">\n @let cutAndPasteSetup = cutAndPaste();\n @if (treeConfig()?.displayCutAndPasteMenus === true && cutAndPasteSetup) {\n <div class=\"flex-column-stretch\">\n @if (cutAndPasteSetup.isCutAndPasteInProgress === false) {\n <button mat-menu-item (click)=\"cut()\" [disabled]=\"cutAndPasteSetup.canCut !== true\">\n <mat-icon class=\"fa-solid fa-scissors\"></mat-icon>\n <span>Cut</span>\n </button>\n } @else {\n <button mat-menu-item (click)=\"cancelCut()\">\n <mat-icon class=\"fa-solid fa-slash\"></mat-icon>\n <span>Cancel cut</span>\n </button>\n }\n\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteInside !== true\" (click)=\"paste('Inside')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste inside</span>\n </button>\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteAfter !== true\" (click)=\"paste('After')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste after</span>\n </button>\n <mat-divider></mat-divider>\n </div>\n }\n\n <button mat-menu-item (click)=\"expandAll()\">\n <mat-icon class=\"fa-solid fa-up-right-and-down-left-from-center\"></mat-icon>\n <span>Expand all</span>\n </button>\n <button mat-menu-item (click)=\"collapseAll()\">\n <mat-icon class=\"fa-solid fa-down-left-and-up-right-to-center\"></mat-icon>\n <span>Collapse all</span>\n </button>\n</mat-menu>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;flex:1}\n"] }]
|
|
1497
1497
|
}], ctorParameters: () => [] });
|
|
@@ -1517,10 +1517,10 @@ class NgssmExpressionTreeNodeDetailsComponent {
|
|
|
1517
1517
|
});
|
|
1518
1518
|
});
|
|
1519
1519
|
}
|
|
1520
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1521
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
1520
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmExpressionTreeNodeDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1521
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NgssmExpressionTreeNodeDetailsComponent, isStandalone: true, selector: "ngssm-expression-tree-node-details", inputs: { nodeId: { classPropertyName: "nodeId", publicName: "nodeId", isSignal: true, isRequired: false, transformFunction: null }, treeConfig: { classPropertyName: "treeConfig", publicName: "treeConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { heightChanged: "heightChanged" }, ngImport: i0, template: "@if (componentToDisplay(); as component) {\n <div [ngssmComponentDisplay]=\"component\" [ngssmComponentAction]=\"componentAction()\"></div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1522
1522
|
}
|
|
1523
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1523
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmExpressionTreeNodeDetailsComponent, decorators: [{
|
|
1524
1524
|
type: Component,
|
|
1525
1525
|
args: [{ selector: 'ngssm-expression-tree-node-details', imports: [CommonModule, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (componentToDisplay(); as component) {\n <div [ngssmComponentDisplay]=\"component\" [ngssmComponentAction]=\"componentAction()\"></div>\n}\n" }]
|
|
1526
1526
|
}], ctorParameters: () => [] });
|
|
@@ -1588,10 +1588,10 @@ class NgssmExpressionTreeComponent {
|
|
|
1588
1588
|
forceRefresh() {
|
|
1589
1589
|
this.changeDetectorRef.markForCheck();
|
|
1590
1590
|
}
|
|
1591
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1592
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
1591
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmExpressionTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1592
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NgssmExpressionTreeComponent, isStandalone: true, selector: "ngssm-expression-tree", inputs: { treeConfig: { classPropertyName: "treeConfig", publicName: "treeConfig", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let defaultPadding = treeConfig()?.nodePadding ?? 20;\n\n<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\">\n @if (config.disableVirtualization) {\n <div class=\"ngssm-expression-tree-nodes-container\">\n @for (item of displayedNodes(); track item.data.id) {\n <div class=\"ngssm-expression-tree-node\" id=\"{{ 'node_' + item.data.id }}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { config, item }\"></ng-container>\n </div>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"config.rowSize ?? 30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedNodes(); trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\"\n id=\"{{ 'node_' + item.data.id }}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { config, item }\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n }\n </mat-card-content>\n }\n</mat-card>\n\n<ng-template #nodeTemplate let-config=\"config\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"config.rowSize ?? 30\">\n @for (part of item.path; track part) {\n <mat-divider\n [vertical]=\"true\"\n class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"config.rowSize ?? 30\"\n [style.margin-right.px]=\"defaultPadding\">\n </mat-divider>\n }\n @if ((item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false) {\n <mat-icon class=\"{{ config.expandIconClass }}\" (click)=\"$event.stopPropagation(); expand(item)\" id=\"expandIcon\"> </mat-icon>\n }\n\n @if ((item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true) {\n <mat-icon class=\"{{ config.collapseIconClass }}\" (click)=\"$event.stopPropagation(); collapse(item)\" id=\"collapseIcon\"> </mat-icon>\n }\n\n <ngssm-expression-tree-node [nodeId]=\"item.data.id\" [treeConfig]=\"config\"> </ngssm-expression-tree-node>\n </div>\n @if (item.data.hasRowDetail === true && item.isExpanded === true) {\n <div class=\"flex-row-center fxFlex\">\n @for (part of item.path; track part) {\n <mat-divider\n [vertical]=\"true\"\n class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\"\n [style.margin-right.px]=\"defaultPadding\">\n </mat-divider>\n }\n\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <ngssm-expression-tree-node-details [nodeId]=\"item.data.id\" [treeConfig]=\"config\" (heightChanged)=\"forceRefresh()\">\n </ngssm-expression-tree-node-details>\n </div>\n </div>\n }\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: NgssmExpressionTreeNodeComponent, selector: "ngssm-expression-tree-node", inputs: ["nodeId", "treeConfig"] }, { kind: "component", type: NgssmExpressionTreeNodeDetailsComponent, selector: "ngssm-expression-tree-node-details", inputs: ["nodeId", "treeConfig"], outputs: ["heightChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1593
1593
|
}
|
|
1594
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1594
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NgssmExpressionTreeComponent, decorators: [{
|
|
1595
1595
|
type: Component,
|
|
1596
1596
|
args: [{ selector: 'ngssm-expression-tree', imports: [
|
|
1597
1597
|
CommonModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-node-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/display-search-dialog.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/search-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-partial-search-results.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/load-children-of-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-node.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/search-status.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/tree-nodes-search.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/selectors.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-nodes-searching.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes-search.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/provide-ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expression-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expression-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-clear-expression-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-init-expression-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expand-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-collapse-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-add-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-delete-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-update-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-collapse-all-expression-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expand-all-expression-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-add-expression-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-cut-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-paste-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-cancel-cut-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/model/ngssm-expression-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/state/ngssm-expression-tree.state.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/tree-node-edition.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/cut-and-paste.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/provide-ngssm-expression-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.html","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.html","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.html","../../../projects/ngssm-tree/src/public-api.ts","../../../projects/ngssm-tree/src/ngssm-tree.ts"],"sourcesContent":["export enum NgssmTreeActionType {\n initNgssmTree = '[NgssmTreeActionType] initNgssmTree',\n deleteNgssmTree = '[NgssmTreeActionType] deleteNgssmTree',\n expandNode = '[NgssmTreeActionType] expandNode',\n collapseNode = '[NgssmTreeActionType] collapseNode',\n registerNodes = '[NgssmTreeActionType] registerNodes',\n selectNode = '[NgssmTreeActionType] selectNode',\n loadChildrenOfNode = '[NgssmTreeActionType] loadChildrenOfNode',\n displaySearchDialog = '[NgssmTreeActionType] displaySearchDialog',\n closeSearchDialog = '[NgssmTreeActionType] closeSearchDialog',\n searchTreeNodes = '[NgssmTreeActionType] searchTreeNodes',\n registerPartialSearchResults = '[NgssmTreeActionType] registerPartialSearchResults',\n abortTreeNodesSearch = '[NgssmTreeActionType] abortTreeNodesSearch'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(\n public readonly type: string,\n public readonly treeId: string\n ) {}\n}\n","import { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class InitNgssmTreeAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly treeType: string,\n public readonly root: NodeData\n ) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { TreeAction } from './tree-action';\n\nexport class TreeNodeAction extends TreeAction {\n constructor(\n actionType: string,\n treeId: string,\n public readonly nodeId: string\n ) {\n super(actionType, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class ExpandNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId, nodeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { Action } from 'ngssm-store';\n\nimport { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerNodes;\n\n constructor(\n public readonly dataStatus: DataStatus,\n public readonly treeId: string,\n public readonly parentNodeId: string,\n public readonly nodes: NodeData[] = []\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class CollapseNodeAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly nodeId: string\n ) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class SelectNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId, nodeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DeleteNgssmTreeAction extends TreeAction {\n constructor(treeId: string) {\n super(NgssmTreeActionType.deleteNgssmTree, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DisplaySearchDialogAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly startNodeId: string\n ) {\n super(NgssmTreeActionType.displaySearchDialog, treeId);\n }\n}\n","import { Action } from 'ngssm-store';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class SearchTreeNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.searchTreeNodes;\n\n constructor(public readonly searchPattern: string) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmTreeNode } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterPartialSearchResultsAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerPartialSearchResults;\n\n constructor(\n public readonly matchingNodes: NgssmTreeNode[],\n public nodesToProcess: NgssmTreeNode[]\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class LoadChildrenOfNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.loadChildrenOfNode, treeId, nodeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeNode {\n status: DataStatus;\n isExpanded?: boolean;\n level: number;\n parentFullPath?: string;\n\n node: NodeData;\n}\n\nexport const getNgssmTreeNodeFullPath = (node: NgssmTreeNode): string => {\n if (node.parentFullPath) {\n return `${node.parentFullPath}/${node.node.label}`;\n }\n\n return node.node.label;\n};\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n // Component used to display the result of a search\n readonly searchResultViewer?: Type<unknown>;\n load(treeId: string, nodeId: string): Observable<NodeData[]>;\n}\n\nexport const NGSSM_TREE_DATA_SERVICE = new InjectionToken<NgssmTreeDataService>('NGSSM_TREE_DATA_SERVICE');\n","import { NgssmTreeNode } from './ngssm-tree-node';\n\nexport interface NgssmTree {\n nodes: NgssmTreeNode[];\n selectedNode?: string;\n type: string;\n}\n\nexport const getNgssmTreePath = (tree: NgssmTree, nodeId: string): NgssmTreeNode[] => {\n const nodesPerId = new Map<string, NgssmTreeNode>(tree.nodes.map((n) => [n.node.nodeId, n]));\n const path: NgssmTreeNode[] = [];\n let node = nodesPerId.get(nodeId);\n while (node) {\n path.unshift(node);\n node = node.node.parentNodeId ? nodesPerId.get(node.node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]);\n }\n\n return path;\n};\n","export enum SearchStatus {\n none = 'None',\n inProgress = 'In progress',\n done = 'Done',\n aborted = 'Aborted'\n}\n","import { SearchStatus } from '../model';\n\nexport interface TreeNodesSearch {\n treeId?: string;\n rootSearchNodeId?: string;\n rootSearchPath?: string;\n searchPattern?: string;\n searchStatus: SearchStatus;\n toProcess: { nodeId: string; fullPath: string }[];\n matchingNodes: string[];\n}\n\nexport const getDefaultTreeNodesSearch = (): TreeNodesSearch => ({\n searchStatus: SearchStatus.none,\n toProcess: [],\n matchingNodes: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { NgssmTree } from '../model';\nimport { getDefaultTreeNodesSearch, TreeNodesSearch } from './tree-nodes-search';\n\nexport const selectNgssmTreeState = (state: State): NgssmTreeState => state[NgssmTreeStateSpecification.featureStateKey] as NgssmTreeState;\n\nexport const updateNgssmTreeState = (state: State, command: Spec<NgssmTreeState, never>): State =>\n update(state, {\n [NgssmTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmTreeState {\n trees: Record<string, NgssmTree>;\n treeNodesSearch: TreeNodesSearch;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmTreeStateSpecification.featureStateKey,\n initialState: NgssmTreeStateSpecification.initialState\n})\nexport class NgssmTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-tree-state';\n public static readonly initialState: NgssmTreeState = {\n trees: {},\n treeNodesSearch: getDefaultTreeNodesSearch()\n };\n}\n","import { State } from 'ngssm-store';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState } from './ngssm-tree.state';\n\nexport const selectNgssmTreeNode = (state: State, treeId: string, nodeId: string): NgssmTreeNode | undefined =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.find((n) => n.node.nodeId === nodeId);\n\nexport const selectNgssmTreeNodeChildren = (state: State, treeId: string, nodeId: string): NgssmTreeNode[] =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.filter((n) => n.node.parentNodeId === nodeId) ?? [];\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction, TreeNodeAction } from '../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE } from '../model';\nimport { selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeLoadingEffect implements Effect {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.selectNode,\n NgssmTreeActionType.loadChildrenOfNode\n ];\n\n constructor(\n @Inject(NGSSM_TREE_DATA_SERVICE) @Optional() private dataServices: NgssmTreeDataService[],\n private logger: Logger\n ) {}\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const treeNodeAction = action as TreeNodeAction;\n if (!selectNgssmTreeState(state).trees[treeNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${treeNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[treeNodeAction.treeId].type;\n const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);\n if (!dataService) {\n this.logger.error(`Trying to process action for tree with no data service: ${treeNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[treeNodeAction.treeId].nodes.find((n) => n.node.nodeId === treeNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(treeNodeAction.treeId, treeNodeAction.nodeId).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.loaded, treeNodeAction.treeId, treeNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(`Unable to load children nodes for tree '${treeNodeAction.treeId}' and node '${treeNodeAction.nodeId}'`, error);\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.error, treeNodeAction.treeId, treeNodeAction.nodeId));\n }\n });\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTree, NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, DisplaySearchDialogAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\ninterface DisplayedNode {\n node: NgssmTreeNode;\n canSearch: boolean;\n}\n\n@Component({\n selector: 'ngssm-tree',\n imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-tree.component.html',\n styleUrls: ['./ngssm-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeComponent {\n private readonly store = inject(Store);\n private readonly trees = createSignal((state) => selectNgssmTreeState(state).trees);\n private readonly tree = signal<NgssmTree | undefined>(undefined);\n\n public readonly treeConfig = input<NgssmTreeConfig | undefined | null>();\n\n public readonly dataStatus = DataStatus;\n public readonly displayedItems = signal<DisplayedNode[]>([]);\n public readonly selectedNodeId = signal<string | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentConfig = this.treeConfig();\n const currentTrees = this.trees();\n if (currentConfig) {\n this.tree.set(currentTrees[currentConfig.treeId]);\n } else {\n this.tree.set(undefined);\n }\n });\n\n effect(() => {\n const currentTree = this.tree();\n const config = untracked(() => this.treeConfig());\n if (!currentTree || !config) {\n this.displayedItems.set([]);\n return;\n }\n\n const alwaysTrue = () => true;\n const filter: (node: NodeData) => boolean = config.filter ?? alwaysTrue;\n const canSearch: (node: NodeData) => boolean = config.canSearch ?? alwaysTrue;\n\n const items: DisplayedNode[] = [];\n let hiddenLevel = -1;\n const nodesToFindSelected = new Map<string, { isDisplayed: boolean; node: NgssmTreeNode }>();\n (currentTree.nodes ?? []).forEach((t) => {\n if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {\n hiddenLevel = t.level;\n }\n\n if (hiddenLevel === -1 || t.level <= hiddenLevel) {\n if (filter(t.node)) {\n items.push({\n node: t,\n canSearch: canSearch(t.node)\n });\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });\n }\n }\n\n if (t.node.isExpandable && t.level <= hiddenLevel) {\n hiddenLevel = t.isExpanded === true ? -1 : t.level;\n }\n\n if (!nodesToFindSelected.has(t.node.nodeId)) {\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });\n }\n });\n\n this.displayedItems.set(items);\n\n let selectedNode = currentTree.selectedNode;\n if (!selectedNode) {\n this.selectedNodeId.set(undefined);\n } else {\n while (selectedNode) {\n const item = nodesToFindSelected.get(selectedNode);\n if (item?.isDisplayed !== true) {\n selectedNode = item?.node.node.parentNodeId;\n } else {\n break;\n }\n }\n\n this.selectedNodeId.set(selectedNode);\n }\n });\n }\n\n public getItemId(_: number, node: DisplayedNode): string {\n return node.node.node.nodeId;\n }\n\n public expand(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public collapse(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public selectNode(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public displaySearchDialog(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-breadcrumb',\n imports: [CommonModule, MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent {\n private readonly store = inject(Store);\n private readonly treeState = createSignal((state) => selectNgssmTreeState(state));\n\n public readonly treeId = input<string | undefined>(undefined);\n\n public readonly nodes = signal<NodeData[]>([]);\n\n constructor() {\n effect(() => {\n const currentTreeId = this.treeId();\n if (!currentTreeId) {\n this.nodes.set([]);\n return;\n }\n\n const state = this.treeState();\n\n const tree = state?.trees[currentTreeId];\n if (!tree) {\n this.nodes.set([]);\n return;\n }\n\n const nodesPerId = new Map<string, NodeData>(tree.nodes.map((n) => [n.node.nodeId, n.node]));\n const path: NodeData[] = [];\n let node = tree.selectedNode ? nodesPerId.get(tree.selectedNode) : undefined;\n while (node) {\n path.unshift(node);\n node = node.parentNodeId ? nodesPerId.get(node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]?.node);\n }\n\n this.nodes.set(path);\n });\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this.treeId();\n if (treeId) {\n this.store.dispatchAction(new SelectNodeAction(treeId, node.nodeId));\n }\n }\n}\n","<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, ViewContainerRef, ChangeDetectorRef, inject, viewChild, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { selectNgssmTreeState } from '../../state';\nimport { NgssmTreeActionType, SearchTreeNodesAction } from '../../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE, SearchStatus } from '../../model';\n\n@Component({\n selector: 'ngssm-ngssm-tree-search-dialog',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatDialogModule,\n MatButtonModule,\n MatCardModule,\n MatIconModule,\n MatProgressSpinnerModule\n ],\n templateUrl: './ngssm-tree-search-dialog.component.html',\n styleUrls: ['./ngssm-tree-search-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeSearchDialogComponent {\n private readonly store = inject(Store);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly dataServices: NgssmTreeDataService[] = inject(NGSSM_TREE_DATA_SERVICE, {\n optional: true\n }) as unknown as NgssmTreeDataService[];\n\n public readonly resultsViewerContainer = viewChild('resultsViewerContainer', { read: ViewContainerRef });\n\n public readonly searchStatus = SearchStatus;\n public readonly searchRootPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.rootSearchPath ?? '');\n public readonly currentSearchedPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.toProcess[0]?.fullPath ?? '');\n public readonly currentSearchStatus = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.searchStatus);\n\n public readonly searchPatternControl = new FormControl<string | undefined>(undefined, [\n Validators.required,\n (c) => this.validatedRegex(c)\n ]);\n\n constructor() {\n const effectRef = effect(() => {\n const container = this.resultsViewerContainer();\n if (!container) {\n return;\n }\n\n const treeState = selectNgssmTreeState(this.store.state());\n const treeId = treeState.treeNodesSearch.treeId;\n if (!treeId) {\n return;\n }\n\n const treeType = treeState.trees[treeId]?.type;\n if (!treeType) {\n return;\n }\n\n const dataService = this.dataServices.find((d) => d.treeType === treeType);\n if (!dataService?.searchResultViewer) {\n return;\n }\n\n this.resultsViewerContainer()?.createComponent(dataService.searchResultViewer);\n this.changeDetectorRef.markForCheck();\n\n effectRef.destroy();\n });\n }\n\n public close(): void {\n this.store.dispatchActionType(NgssmTreeActionType.closeSearchDialog);\n }\n\n public search(): void {\n const searchPattern = this.searchPatternControl.value;\n if (searchPattern) {\n this.store.dispatchAction(new SearchTreeNodesAction(searchPattern));\n }\n }\n\n public abort(): void {\n this.store.dispatchActionType(NgssmTreeActionType.abortTreeNodesSearch);\n }\n\n private validatedRegex(control: AbstractControl): ValidationErrors | null {\n const result = defaultRegexEditorValidator.validatePattern(control.value);\n if (result.isValid) {\n return null;\n }\n\n return {\n regex: result.error\n };\n }\n}\n","<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { LoadChildrenOfNodeAction, NgssmTreeActionType, RegisterPartialSearchResultsAction } from '../actions';\nimport { NgssmTreeSearchDialogComponent } from '../components';\nimport { NgssmTreeNode, SearchStatus } from '../model';\nimport { selectNgssmTreeNode, selectNgssmTreeNodeChildren, selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchingEffect implements Effect {\n private dialog: MatDialogRef<NgssmTreeSearchDialogComponent> | undefined;\n\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerNodes,\n NgssmTreeActionType.registerPartialSearchResults\n ];\n\n constructor(\n private matDialog: MatDialog,\n private logger: Logger\n ) {}\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n this.dialog = this.matDialog.open(NgssmTreeSearchDialogComponent, {\n disableClose: true,\n width: '80vw',\n height: '80vh'\n });\n\n break;\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n this.closeDialog();\n\n break;\n }\n\n case NgssmTreeActionType.searchTreeNodes:\n case NgssmTreeActionType.registerNodes:\n case NgssmTreeActionType.registerPartialSearchResults: {\n const searchState = selectNgssmTreeState(state).treeNodesSearch;\n if (!searchState.treeId || !searchState.rootSearchNodeId || searchState.searchStatus !== SearchStatus.inProgress) {\n return;\n }\n\n if (searchState.toProcess.length === 0) {\n return;\n }\n\n const currentNode = selectNgssmTreeNode(state, searchState.treeId, searchState.toProcess[0].nodeId);\n if (!currentNode) {\n this.logger.error(`No node for treeId '${searchState.treeId}' with id '${searchState.toProcess[0].nodeId}'.`);\n return;\n }\n\n if (currentNode.node.isExpandable && currentNode.status !== DataStatus.loaded && currentNode.status !== DataStatus.loading) {\n actiondispatcher.dispatchAction(new LoadChildrenOfNodeAction(searchState.treeId, currentNode.node.nodeId));\n return;\n }\n\n const childrenNodes = selectNgssmTreeNodeChildren(state, searchState.treeId, currentNode.node.nodeId);\n const matching: NgssmTreeNode[] = [];\n const toProcess: NgssmTreeNode[] = [];\n childrenNodes.forEach((node) => {\n const fullPath = `${node.parentFullPath}/${node.node.label}`;\n if (defaultRegexEditorValidator.isMatch(searchState.searchPattern ?? '', fullPath)) {\n matching.push(node);\n }\n\n if (node.node.isExpandable) {\n toProcess.push(node);\n }\n });\n\n actiondispatcher.dispatchAction(new RegisterPartialSearchResultsAction(matching, toProcess));\n\n break;\n }\n }\n }\n\n private closeDialog(): void {\n this.dialog?.close();\n this.dialog = undefined;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, LoadChildrenOfNodeAction, NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.collapseNode,\n NgssmTreeActionType.selectNode,\n NgssmTreeActionType.loadChildrenOfNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.expandNode: {\n const expandNodeAction = action as ExpandNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [expandNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status === DataStatus.loaded) {\n item = update(result[index], {\n isExpanded: { $set: true }\n });\n } else {\n item = update(result[index], {\n isExpanded: { $set: true },\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.collapseNode: {\n const collapseNodeAction = action as CollapseNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [collapseNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === collapseNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n isExpanded: { $set: false }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n if (\n selectNgssmTreeState(state).trees[selectNodeAction.treeId].nodes.find((n) => n.node.nodeId === selectNodeAction.nodeId)\n ?.status === DataStatus.loaded\n ) {\n break;\n }\n\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === selectNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.loadChildrenOfNode: {\n const loadChildrenOfNodeAction = action as LoadChildrenOfNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [loadChildrenOfNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === loadChildrenOfNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status !== DataStatus.loaded) {\n item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeSelectionReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.selectNode];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n selectedNode: { $set: selectNodeAction.nodeId }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplaySearchDialogAction, NgssmTreeActionType, RegisterPartialSearchResultsAction, SearchTreeNodesAction } from '../actions';\nimport { getNgssmTreeNodeFullPath, getNgssmTreePath, SearchStatus } from '../model';\nimport { getDefaultTreeNodesSearch, selectNgssmTreeNode, selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerPartialSearchResults,\n NgssmTreeActionType.abortTreeNodesSearch\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n const displaySearchDialogAction = action as DisplaySearchDialogAction;\n const path = getNgssmTreePath(\n selectNgssmTreeState(state).trees[displaySearchDialogAction.treeId],\n displaySearchDialogAction.startNodeId\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n treeId: { $set: displaySearchDialogAction.treeId },\n rootSearchNodeId: { $set: displaySearchDialogAction.startNodeId },\n rootSearchPath: { $set: path.map((p) => p.node.label).join('/') }\n }\n });\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: { $set: getDefaultTreeNodesSearch() }\n });\n }\n\n case NgssmTreeActionType.searchTreeNodes: {\n const searchTreeNodesAction = action as SearchTreeNodesAction;\n const startNode = selectNgssmTreeNode(\n state,\n selectNgssmTreeState(state).treeNodesSearch.treeId ?? '',\n selectNgssmTreeState(state).treeNodesSearch.rootSearchNodeId ?? ''\n );\n const toBeProcess: { nodeId: string; fullPath: string }[] = [];\n if (startNode) {\n toBeProcess.push({ nodeId: startNode.node.nodeId, fullPath: getNgssmTreeNodeFullPath(startNode) });\n }\n\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchPattern: { $set: searchTreeNodesAction.searchPattern },\n searchStatus: { $set: SearchStatus.inProgress },\n toProcess: { $set: toBeProcess },\n matchingNodes: { $set: [] }\n }\n });\n }\n\n case NgssmTreeActionType.registerPartialSearchResults: {\n const registerPartialSearchResultsAction = action as RegisterPartialSearchResultsAction;\n const toProcess: { nodeId: string; fullPath: string }[] = selectNgssmTreeState(state).treeNodesSearch.toProcess.slice(1);\n toProcess.push(\n ...registerPartialSearchResultsAction.nodesToProcess.map((n) => ({\n nodeId: n.node.nodeId,\n fullPath: getNgssmTreeNodeFullPath(n)\n }))\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: {\n $apply: (value) => {\n if (toProcess.length === 0) {\n return SearchStatus.done;\n }\n\n return value;\n }\n },\n toProcess: { $set: toProcess },\n matchingNodes: { $push: registerPartialSearchResultsAction.matchingNodes.map((n) => n.node.nodeId) }\n }\n });\n }\n\n case NgssmTreeActionType.abortTreeNodesSearch: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: { $set: SearchStatus.aborted },\n toProcess: { $set: [] }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.registerNodes];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.registerNodes: {\n const registerNodesAction = action as RegisterNodesAction;\n return updateNgssmTreeState(state, {\n trees: {\n [registerNodesAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const index = nodes.findIndex((n) => n.node.nodeId === registerNodesAction.parentNodeId);\n if (index === -1) {\n return nodes;\n }\n\n return [\n ...nodes.slice(0, index),\n update(nodes[index], { status: { $set: registerNodesAction.dataStatus } }),\n ...registerNodesAction.nodes.map((i) => ({\n status: DataStatus.none,\n isExpanded: false,\n level: nodes[index].level + 1,\n node: i,\n parentFullPath:\n nodes[index].parentFullPath !== undefined\n ? `${nodes[index].parentFullPath}/${nodes[index].node.label}`\n : nodes[index].node.label\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DeleteNgssmTreeAction, InitNgssmTreeAction, NgssmTreeActionType } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.initNgssmTree, NgssmTreeActionType.deleteNgssmTree];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.initNgssmTree: {\n const initNgssmTreeAction = action as InitNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [initNgssmTreeAction.treeId]: {\n $set: {\n nodes: [\n {\n status: DataStatus.none,\n isExpanded: false,\n level: 0,\n node: initNgssmTreeAction.root\n }\n ],\n type: initNgssmTreeAction.treeType\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.deleteNgssmTree: {\n const deleteNgssmTreeAction = action as DeleteNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: { $unset: [deleteNgssmTreeAction.treeId] }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffects, provideReducers } from 'ngssm-store';\n\nimport { TreeNodeLoadingEffect } from './effects/tree-node-loading.effect';\nimport { TreeNodesSearchingEffect } from './effects/tree-nodes-searching.effect';\nimport { TreeNodeExpandReducer } from './reducers/tree-node-expand.reducer';\nimport { TreeNodeSelectionReducer } from './reducers/tree-node-selection.reducer';\nimport { TreeNodesSearchReducer } from './reducers/tree-nodes-search.reducer';\nimport { TreeNodesReducer } from './reducers/tree-nodes.reducer';\nimport { TreesReducer } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(TreeNodeExpandReducer, TreeNodeSelectionReducer, TreeNodesSearchReducer, TreeNodesReducer, TreesReducer),\n provideEffects(TreeNodeLoadingEffect, TreeNodesSearchingEffect)\n ]);\n};\n","export enum NgssmExpressionTreeActionType {\n // List of trees management\n ngssmInitExpressionTree = '[NgssmExpressionTreeActionType] ngssmInitExpressionTree',\n ngssmClearExpressionTree = '[NgssmExpressionTreeActionType] ngssmClearExpressionTree',\n\n // Manage expand/collapse\n ngssmCollapseExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmCollapseExpressionTreeNode',\n ngssmExpandExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmExpandExpressionTreeNode',\n ngssmCollapseAllExpressionTreeNodes = '[NgssmExpressionTreeActionType] ngssmCollapseAllExpressionTreeNodes',\n ngssmExpandAllExpressionTreeNodes = '[NgssmExpressionTreeActionType] ngssmExpandAllExpressionTreeNodes',\n\n // Node edition\n ngssmAddExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmAddExpressionTreeNode',\n ngssmAddExpressionTreeNodes = '[NgssmExpressionTreeActionType] ngssmAddExpressionTreeNodes',\n ngssmDeleteExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmDeleteExpressionTreeNode',\n ngssmUpdateExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmUpdateExpressionTreeNode',\n\n // Cut/Paste\n ngssmCutExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmCutExpressionTreeNode',\n ngssmPasteExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmPasteExpressionTreeNode',\n ngssmCancelCutExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmCancelCutExpressionTreeNode'\n}\n","import { Action } from 'ngssm-store';\n\nexport class NgssmExpressionTreeAction implements Action {\n constructor(\n public readonly type: string,\n public readonly treeId: string\n ) {}\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmClearExpressionTreeAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmClearExpressionTree, treeId);\n }\n}\n","import { NgssmNode } from '../model';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmInitExpressionTreeAction<TData = unknown> extends NgssmExpressionTreeAction {\n constructor(\n treeId: string,\n public readonly nodes: NgssmNode<TData>[]\n ) {\n super(NgssmExpressionTreeActionType.ngssmInitExpressionTree, treeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmExpressionTreeNodeAction extends NgssmExpressionTreeAction {\n constructor(\n type: string,\n treeId: string,\n public readonly nodeId: string\n ) {\n super(type, treeId);\n }\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\n\nexport class NgssmExpandExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmExpandExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\n\nexport class NgssmCollapseExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCollapseExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmNode } from '../model';\n\nexport class NgssmAddExpressionTreeNodeAction<TData = unknown> extends NgssmExpressionTreeAction {\n constructor(\n treeId: string,\n public readonly node: NgssmNode<TData>\n ) {\n super(NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode, treeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmDeleteExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmUpdateExpressionTreeNodeAction<TData = unknown> extends NgssmExpressionTreeNodeAction {\n constructor(\n treeId: string,\n nodeId: string,\n public readonly data: TData\n ) {\n super(NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmCollapseAllExpressionTreeNodesAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCollapseAllExpressionTreeNodes, treeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmExpandAllExpressionTreeNodesAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmExpandAllExpressionTreeNodes, treeId);\n }\n}\n","import { NgssmNode } from '../model';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmAddExpressionTreeNodesAction<TData = unknown> extends NgssmExpressionTreeAction {\n constructor(\n treeId: string,\n public readonly nodes: NgssmNode<TData>[]\n ) {\n super(NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes, treeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmCutExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCutExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { CutAndPasteTarget } from '../model';\n\nexport class NgssmPasteExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(\n treeId: string,\n nodeId: string,\n public readonly target: CutAndPasteTarget\n ) {\n super(NgssmExpressionTreeActionType.ngssmPasteExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmCancelCutExpressionTreeNodeAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCancelCutExpressionTreeNode, treeId);\n }\n}\n","import { NgssmExpressionTreeData } from './ngssm-expression-tree-data';\nimport { NgssmExpressionTreeNode } from './ngssm-expression-tree-node';\nimport { NgssmNode } from './ngssm-node';\n\nexport interface NgssmExpressionTree<TData = unknown> {\n nodes: NgssmExpressionTreeNode<TData>[];\n data: NgssmExpressionTreeData<TData>;\n nodeCut?: NgssmExpressionTreeNode<TData>;\n}\n\nexport const createNgssmExpressionTreeFromNodes = <TData = unknown>(nodes: NgssmNode<TData>[]): NgssmExpressionTree<TData> => {\n const tree: NgssmExpressionTree<TData> = {\n nodes: [],\n data: {}\n };\n\n let path: string[] = [];\n nodes.forEach((node) => {\n if (!node.parentId) {\n path = [];\n } else {\n const parentIdIndex = path.indexOf(node.parentId);\n if (parentIdIndex === -1) {\n path.push(node.parentId);\n } else {\n path.splice(parentIdIndex + 1);\n }\n }\n\n tree.nodes.push({\n path: [...path],\n data: node,\n isExpanded: node.isExpandable === true\n });\n\n tree.data[node.id] = node.data;\n });\n\n return tree;\n};\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmExpressionTree } from '../model';\n\nexport const selectNgssmExpressionTreeState = (state: State): NgssmExpressionTreeState =>\n state[NgssmExpressionTreeStateSpecification.featureStateKey] as NgssmExpressionTreeState;\n\nexport const updateNgssmExpressionTreeState = (state: State, command: Spec<NgssmExpressionTreeState, never>): State =>\n update(state, {\n [NgssmExpressionTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmExpressionTreeState {\n trees: Record<string, NgssmExpressionTree>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmExpressionTreeStateSpecification.featureStateKey,\n initialState: NgssmExpressionTreeStateSpecification.initialState\n})\nexport class NgssmExpressionTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-expression-tree-state';\n public static readonly initialState: NgssmExpressionTreeState = {\n trees: {}\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmClearExpressionTreeAction, NgssmExpressionTreeActionType, NgssmInitExpressionTreeAction } from '../actions';\nimport { createNgssmExpressionTreeFromNodes } from '../model';\nimport { updateNgssmExpressionTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmInitExpressionTree,\n NgssmExpressionTreeActionType.ngssmClearExpressionTree\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmInitExpressionTree: {\n const ngssmInitExpressionTreeAction = action as NgssmInitExpressionTreeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmInitExpressionTreeAction.treeId]: {\n $set: createNgssmExpressionTreeFromNodes(ngssmInitExpressionTreeAction.nodes)\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmClearExpressionTree: {\n const ngssmClearExpressionTreeAction = action as NgssmClearExpressionTreeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n $unset: [ngssmClearExpressionTreeAction.treeId]\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmCollapseAllExpressionTreeNodesAction,\n NgssmCollapseExpressionTreeNodeAction,\n NgssmExpandAllExpressionTreeNodesAction,\n NgssmExpandExpressionTreeNodeAction,\n NgssmExpressionTreeActionType\n} from '../actions';\nimport { NgssmExpressionTreeNode } from '../model';\nimport { updateNgssmExpressionTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmExpandExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmCollapseExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmCollapseAllExpressionTreeNodes,\n NgssmExpressionTreeActionType.ngssmExpandAllExpressionTreeNodes\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmExpandExpressionTreeNode: {\n const ngssmExpandExpressionTreeNodeAction = action as NgssmExpandExpressionTreeNodeAction;\n return this.setIsExpanded(state, ngssmExpandExpressionTreeNodeAction.treeId, ngssmExpandExpressionTreeNodeAction.nodeId, true);\n }\n\n case NgssmExpressionTreeActionType.ngssmCollapseExpressionTreeNode: {\n const ngssmCollapseExpressionTreeNodeAction = action as NgssmCollapseExpressionTreeNodeAction;\n return this.setIsExpanded(state, ngssmCollapseExpressionTreeNodeAction.treeId, ngssmCollapseExpressionTreeNodeAction.nodeId, false);\n }\n\n case NgssmExpressionTreeActionType.ngssmCollapseAllExpressionTreeNodes: {\n const ngssmExpressionTreeAction = action as NgssmCollapseAllExpressionTreeNodesAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmExpressionTreeAction.treeId]: {\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [];\n values.forEach((value) =>\n output.push({\n ...value,\n isExpanded: false\n })\n );\n\n return output;\n }\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmExpandAllExpressionTreeNodes: {\n const ngssmExpressionTreeAction = action as NgssmExpandAllExpressionTreeNodesAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmExpressionTreeAction.treeId]: {\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [];\n values.forEach((value) =>\n output.push({\n ...value,\n isExpanded: true\n })\n );\n\n return output;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n\n private setIsExpanded(state: State, treeId: string, nodeId: string, isExpanded: boolean): State {\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [treeId]: {\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output = [...values];\n const index = output.findIndex((n) => n.data.id === nodeId);\n if (index !== -1) {\n output.splice(index, 1, update(output[index], { isExpanded: { $set: isExpanded } }));\n }\n\n return output;\n }\n }\n }\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmAddExpressionTreeNodeAction,\n NgssmAddExpressionTreeNodesAction,\n NgssmDeleteExpressionTreeNodeAction,\n NgssmExpressionTreeActionType,\n NgssmUpdateExpressionTreeNodeAction\n} from '../actions';\nimport { selectNgssmExpressionTreeState, updateNgssmExpressionTreeState } from '../state';\nimport { NgssmExpressionTreeData, NgssmExpressionTreeNode, NgssmNode } from '../model';\n\n@Injectable()\nexport class TreeNodeEditionReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode: {\n const ngssmAddExpressionTreeNodeAction = action as NgssmAddExpressionTreeNodeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmAddExpressionTreeNodeAction.treeId]: {\n data: {\n [ngssmAddExpressionTreeNodeAction.node.id]: { $set: ngssmAddExpressionTreeNodeAction.node.data }\n },\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [...values];\n this.addNodeToList(ngssmAddExpressionTreeNodeAction.node, output);\n return output;\n }\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes: {\n const ngssmAddExpressionTreeNodesAction = action as NgssmAddExpressionTreeNodesAction;\n const newProps: NgssmExpressionTreeData = {};\n ngssmAddExpressionTreeNodesAction.nodes.forEach((node) => (newProps[node.id] = node.data));\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmAddExpressionTreeNodesAction.treeId]: {\n data: { $merge: newProps },\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [...values];\n ngssmAddExpressionTreeNodesAction.nodes.forEach((node) => this.addNodeToList(node, output));\n return output;\n }\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode: {\n const ngssmDeleteExpressionTreeNodeAction = action as NgssmDeleteExpressionTreeNodeAction;\n const nodeIdsToDelete: string[] = selectNgssmExpressionTreeState(state)\n .trees[ngssmDeleteExpressionTreeNodeAction.treeId].nodes.filter((n) =>\n n.path.includes(ngssmDeleteExpressionTreeNodeAction.nodeId)\n )\n .map((n) => n.data.id);\n nodeIdsToDelete.push(ngssmDeleteExpressionTreeNodeAction.nodeId);\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmDeleteExpressionTreeNodeAction.treeId]: {\n nodes: { $apply: (values: NgssmExpressionTreeNode[]) => values.filter((v) => !nodeIdsToDelete.includes(v.data.id)) },\n data: { $unset: nodeIdsToDelete }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode: {\n const ngssmUpdateExpressionTreeNodeAction = action as NgssmUpdateExpressionTreeNodeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmUpdateExpressionTreeNodeAction.treeId]: {\n data: {\n [ngssmUpdateExpressionTreeNodeAction.nodeId]: { $set: ngssmUpdateExpressionTreeNodeAction.data }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n\n private addNodeToList(node: NgssmNode, nodeList: NgssmExpressionTreeNode[]): void {\n if (node.parentId === undefined) {\n nodeList.push({\n path: [],\n data: node,\n isExpanded: true\n });\n return;\n }\n\n let parentNode: NgssmExpressionTreeNode | undefined;\n let insertionIndex = -1;\n for (let i = 0; i < nodeList.length; i++) {\n if (parentNode) {\n if (nodeList[i].path.includes(node.parentId)) {\n insertionIndex = i + 1;\n } else {\n break;\n }\n\n continue;\n }\n\n if (nodeList[i].data.id === node.parentId) {\n parentNode = nodeList[i];\n insertionIndex = i + 1;\n continue;\n }\n }\n\n if (!parentNode || insertionIndex === -1) {\n throw new Error('Invalid parent id');\n }\n\n nodeList.splice(insertionIndex, 0, {\n path: [...parentNode.path, parentNode.data.id],\n data: node,\n isExpanded: true\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmCancelCutExpressionTreeNodeAction,\n NgssmCutExpressionTreeNodeAction,\n NgssmExpressionTreeActionType,\n NgssmPasteExpressionTreeNodeAction\n} from '../actions';\nimport { selectNgssmExpressionTreeState, updateNgssmExpressionTreeState } from '../state';\nimport { NgssmExpressionTreeNode } from '../model';\n\n@Injectable()\nexport class CutAndPasteReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmCutExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmCancelCutExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmPasteExpressionTreeNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmCutExpressionTreeNode: {\n const ngssmCutExpressionTreeNodeAction = action as NgssmCutExpressionTreeNodeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmCutExpressionTreeNodeAction.treeId]: {\n nodeCut: {\n $set: selectNgssmExpressionTreeState(state).trees[ngssmCutExpressionTreeNodeAction.treeId]?.nodes.find(\n (n) => n.data.id === ngssmCutExpressionTreeNodeAction.nodeId\n )\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmCancelCutExpressionTreeNode: {\n const ngssmCancelCutExpressionTreeNodeAction = action as NgssmCancelCutExpressionTreeNodeAction;\n return this.resetCutAndPaste(state, ngssmCancelCutExpressionTreeNodeAction.treeId);\n }\n\n case NgssmExpressionTreeActionType.ngssmPasteExpressionTreeNode: {\n const ngssmPasteExpressionTreeNodeAction = action as NgssmPasteExpressionTreeNodeAction;\n const tree = selectNgssmExpressionTreeState(state).trees[ngssmPasteExpressionTreeNodeAction.treeId];\n const cutNode = tree.nodeCut;\n if (!cutNode) {\n return state;\n }\n\n const currentIndex = tree.nodes.findIndex((n) => n.data.id === cutNode.data.id);\n if (currentIndex === -1) {\n return this.resetCutAndPaste(state, ngssmPasteExpressionTreeNodeAction.treeId);\n }\n\n const targetNode = tree.nodes.find((n) => n.data.id === ngssmPasteExpressionTreeNodeAction.nodeId);\n if (!targetNode) {\n return this.resetCutAndPaste(state, ngssmPasteExpressionTreeNodeAction.treeId);\n }\n\n let targetIndex = tree.nodes.findIndex((n) => n.data.id === ngssmPasteExpressionTreeNodeAction.nodeId);\n if (ngssmPasteExpressionTreeNodeAction.target === 'Inside') {\n targetIndex = targetIndex + 1;\n } else {\n for (let index = targetIndex; index < tree.nodes.length; index++) {\n if (!(tree.nodes[index + 1]?.path ?? []).includes(ngssmPasteExpressionTreeNodeAction.nodeId)) {\n targetIndex = index + 1;\n break;\n }\n }\n }\n\n const newBasePath =\n ngssmPasteExpressionTreeNodeAction.target === 'After' ? targetNode.path : [...targetNode.path, targetNode.data.id];\n const pathPartsToRemove = cutNode.path.length;\n if (newBasePath === cutNode.path && currentIndex === targetIndex) {\n return this.resetCutAndPaste(state, ngssmPasteExpressionTreeNodeAction.treeId);\n }\n\n const movedNode = update(cutNode, {\n path: { $set: newBasePath },\n data: {\n parentId: { $set: ngssmPasteExpressionTreeNodeAction.target === 'After' ? targetNode.data.parentId : targetNode.data.id }\n }\n });\n\n const nodesToMove: NgssmExpressionTreeNode[] = tree.nodes\n .filter((n) => n.path.includes(cutNode.data.id))\n .map((node) => ({\n ...node,\n path: [...newBasePath, ...node.path.slice(pathPartsToRemove)]\n }));\n\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmPasteExpressionTreeNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmExpressionTreeNode[]) => {\n const output = [...nodes];\n if (targetIndex > currentIndex) {\n output.splice(targetIndex, 0, movedNode, ...nodesToMove);\n output.splice(currentIndex, nodesToMove.length + 1);\n return output;\n }\n\n output.splice(currentIndex, nodesToMove.length + 1);\n output.splice(targetIndex, 0, movedNode, ...nodesToMove);\n\n return output;\n }\n },\n nodeCut: { $set: undefined }\n }\n }\n });\n }\n }\n\n return state;\n }\n\n private resetCutAndPaste(state: State, treeId: string): State {\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [treeId]: { $unset: ['nodeCut'] }\n }\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideReducers } from 'ngssm-store';\n\nimport { CutAndPasteReducer, TreeNodeEditionReducer, TreeNodeExpandReducer, TreesReducer } from './reducers';\n\nexport const provideNgssmExpressionTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([provideReducers(CutAndPasteReducer, TreeNodeEditionReducer, TreeNodeExpandReducer, TreesReducer)]);\n};\n","import { Component, ChangeDetectionStrategy, Type, inject, input, signal, effect, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmExpressionTreeConfig, NgssmExpressionTreeCustomComponent, CutAndPasteTarget, NgssmExpressionTree } from '../../model';\nimport { selectNgssmExpressionTreeState } from '../../state';\nimport {\n NgssmCancelCutExpressionTreeNodeAction,\n NgssmCollapseAllExpressionTreeNodesAction,\n NgssmCutExpressionTreeNodeAction,\n NgssmExpandAllExpressionTreeNodesAction,\n NgssmPasteExpressionTreeNodeAction\n} from '../../actions';\n\ninterface CutAndPaste {\n isCutAndPasteInProgress: boolean;\n isPartOfCut: boolean;\n canCut: boolean;\n canPasteInside: boolean;\n canPasteAfter: boolean;\n}\n\nconst getDefaultCutAndPaste = (): CutAndPaste => ({\n isCutAndPasteInProgress: false,\n isPartOfCut: false,\n canCut: false,\n canPasteInside: false,\n canPasteAfter: false\n});\n\n@Component({\n selector: 'ngssm-expression-tree-node',\n imports: [CommonModule, MatIconModule, MatMenuModule, MatDividerModule, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-expression-tree-node.component.html',\n styleUrls: ['./ngssm-expression-tree-node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmExpressionTreeNodeComponent {\n private readonly store = inject(Store);\n private readonly trees = createSignal((state) => selectNgssmExpressionTreeState(state).trees);\n private readonly tree = signal<NgssmExpressionTree | undefined>(undefined);\n\n public readonly nodeId = input<string | null | undefined>();\n public readonly treeConfig = input<NgssmExpressionTreeConfig | null | undefined>(undefined);\n\n public readonly nodeLabel = signal<string>('');\n public readonly nodeCssIcon = signal<string | undefined>(undefined);\n public readonly nodeDescription = signal<string | undefined>(undefined);\n public readonly cutAndPaste = signal<CutAndPaste>(getDefaultCutAndPaste());\n public readonly componentAction = signal<NgssmComponentAction | undefined>(undefined);\n public readonly componentToDisplay = signal<Type<unknown> | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentNodeId = this.nodeId();\n const config = this.treeConfig();\n if (!currentNodeId || !config) {\n this.tree.set(undefined);\n return;\n }\n\n this.tree.set(this.trees()[config.treeId]);\n });\n\n effect(() => {\n const currentNodeId = this.nodeId();\n const config = this.treeConfig();\n if (!currentNodeId || !config) {\n return;\n }\n\n this.componentAction.set((c: unknown) => (c as NgssmExpressionTreeCustomComponent).setup(config.treeId, currentNodeId));\n this.componentToDisplay.set(config.nodeDescriptionComponent);\n });\n\n effect(() => {\n const currentTree = this.tree();\n const currentNodeId = untracked(() => this.nodeId());\n const currentConfig = untracked(() => this.treeConfig());\n if (!currentNodeId || !currentTree || !currentConfig) {\n return;\n }\n\n const node = currentTree.nodes.find((v) => v.data.id === currentNodeId);\n const nodeValue = currentTree.data[currentNodeId];\n const cutAndPaste: CutAndPaste = getDefaultCutAndPaste();\n const nodeCut = currentTree.nodeCut;\n if (node && currentConfig && nodeValue) {\n this.nodeLabel.set(currentConfig.getNodeLabel?.(node, nodeValue) ?? '');\n this.nodeCssIcon.set(currentConfig.getNodeCssIcon?.(node, nodeValue) ?? undefined);\n this.nodeDescription.set(currentConfig.getNodeDescription?.(node, nodeValue));\n cutAndPaste.canCut = currentConfig.canCut?.(node) ?? true;\n\n if (nodeCut) {\n cutAndPaste.isPartOfCut = nodeCut.data.id === node.data.id || node.path.includes(nodeCut.data.id);\n\n if (!cutAndPaste.isPartOfCut) {\n cutAndPaste.canPasteInside = currentConfig.canPaste?.(nodeCut, node, 'Inside') ?? false;\n cutAndPaste.canPasteAfter = currentConfig.canPaste?.(nodeCut, node, 'After') ?? false;\n }\n }\n }\n\n cutAndPaste.isCutAndPasteInProgress = !!nodeCut;\n\n this.cutAndPaste.set(cutAndPaste);\n });\n }\n\n public expandAll(): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmExpandAllExpressionTreeNodesAction(treeId));\n }\n }\n\n public collapseAll(): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmCollapseAllExpressionTreeNodesAction(treeId));\n }\n }\n\n public cut(): void {\n const treeId = this.treeConfig()?.treeId;\n const nodeId = this.nodeId();\n if (treeId && nodeId) {\n this.store.dispatchAction(new NgssmCutExpressionTreeNodeAction(treeId, nodeId));\n }\n }\n\n public cancelCut(): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmCancelCutExpressionTreeNodeAction(treeId));\n }\n }\n\n public paste(target: CutAndPasteTarget): void {\n const treeId = this.treeConfig()?.treeId;\n const nodeId = this.nodeId();\n if (treeId && nodeId) {\n this.store.dispatchAction(new NgssmPasteExpressionTreeNodeAction(treeId, nodeId, target));\n }\n }\n}\n","@if (nodeCssIcon(); as css) {\n <div class=\"ngssm-expression-tree-node-icon\" id=\"treeNodeIcon\">\n <mat-icon class=\"{{ css }}\"></mat-icon>\n </div>\n}\n\n<div\n class=\"ngssm-expression-tree-node-label\"\n [matMenuTriggerFor]=\"contextMenu\"\n [class.ngssm-expression-tree-node-to-cut]=\"cutAndPaste().isPartOfCut === true\"\n id=\"treeNodeLabel\">\n {{ nodeLabel() }}\n</div>\n\n<div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"nodeDescription()\"></div>\n\n@let component = componentToDisplay();\n@if (component) {\n <div\n class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"component\"\n [ngssmComponentAction]=\"componentAction()\"></div>\n}\n\n<mat-menu #contextMenu=\"matMenu\" [class]=\"'ngssm-expression-tree-popup-menu'\">\n @let cutAndPasteSetup = cutAndPaste();\n @if (treeConfig()?.displayCutAndPasteMenus === true && cutAndPasteSetup) {\n <div class=\"flex-column-stretch\">\n @if (cutAndPasteSetup.isCutAndPasteInProgress === false) {\n <button mat-menu-item (click)=\"cut()\" [disabled]=\"cutAndPasteSetup.canCut !== true\">\n <mat-icon class=\"fa-solid fa-scissors\"></mat-icon>\n <span>Cut</span>\n </button>\n } @else {\n <button mat-menu-item (click)=\"cancelCut()\">\n <mat-icon class=\"fa-solid fa-slash\"></mat-icon>\n <span>Cancel cut</span>\n </button>\n }\n\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteInside !== true\" (click)=\"paste('Inside')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste inside</span>\n </button>\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteAfter !== true\" (click)=\"paste('After')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste after</span>\n </button>\n <mat-divider></mat-divider>\n </div>\n }\n\n <button mat-menu-item (click)=\"expandAll()\">\n <mat-icon class=\"fa-solid fa-up-right-and-down-left-from-center\"></mat-icon>\n <span>Expand all</span>\n </button>\n <button mat-menu-item (click)=\"collapseAll()\">\n <mat-icon class=\"fa-solid fa-down-left-and-up-right-to-center\"></mat-icon>\n <span>Collapse all</span>\n </button>\n</mat-menu>\n","import { Component, ChangeDetectionStrategy, ElementRef, Type, input, output, inject, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmExpressionTreeConfig, NgssmExpressionTreeCustomComponent } from '../../model';\n\n@Component({\n selector: 'ngssm-expression-tree-node-details',\n imports: [CommonModule, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-expression-tree-node-details.component.html',\n styleUrls: ['./ngssm-expression-tree-node-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmExpressionTreeNodeDetailsComponent {\n private readonly elementRef = inject(ElementRef);\n\n public readonly nodeId = input<string | null | undefined>();\n public readonly treeConfig = input<NgssmExpressionTreeConfig | null | undefined>();\n public readonly heightChanged = output<number>();\n\n public readonly componentAction = signal<NgssmComponentAction | undefined>(undefined);\n public readonly componentToDisplay = signal<Type<unknown> | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentNodeId = this.nodeId();\n const currentConfig = this.treeConfig();\n\n if (!currentNodeId || !currentConfig) {\n return;\n }\n\n this.componentAction.set((c: unknown) => (c as NgssmExpressionTreeCustomComponent).setup(currentConfig.treeId, currentNodeId));\n this.componentToDisplay.set(currentConfig.nodeDetailComponent);\n setTimeout(() => {\n this.heightChanged.emit(this.elementRef?.nativeElement.getBoundingClientRect().height ?? 0);\n });\n });\n }\n}\n","@if (componentToDisplay(); as component) {\n <div [ngssmComponentDisplay]=\"component\" [ngssmComponentAction]=\"componentAction()\"></div>\n}\n","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, inject, input, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { NgssmExpressionTreeConfig, NgssmExpressionTreeNode } from '../../model';\nimport { selectNgssmExpressionTreeState } from '../../state';\nimport { NgssmCollapseExpressionTreeNodeAction, NgssmExpandExpressionTreeNodeAction } from '../../actions';\nimport { NgssmExpressionTreeNodeComponent } from '../ngssm-expression-tree-node/ngssm-expression-tree-node.component';\nimport { NgssmExpressionTreeNodeDetailsComponent } from '../ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component';\n\n@Component({\n selector: 'ngssm-expression-tree',\n imports: [\n CommonModule,\n ScrollingModule,\n MatCard,\n MatCardContent,\n MatDivider,\n MatIcon,\n NgssmExpressionTreeNodeComponent,\n NgssmExpressionTreeNodeDetailsComponent\n ],\n templateUrl: './ngssm-expression-tree.component.html',\n styleUrls: ['./ngssm-expression-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmExpressionTreeComponent<T = unknown> {\n private readonly store = inject(Store);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n private readonly trees = createSignal((state) => selectNgssmExpressionTreeState(state).trees);\n\n public readonly treeConfig = input<NgssmExpressionTreeConfig<T> | null | undefined, NgssmExpressionTreeConfig<T> | null | undefined>(\n undefined,\n {\n transform: (value) => {\n if (!value) {\n return value;\n }\n\n const config: NgssmExpressionTreeConfig<T> = {\n ...value\n };\n if (!config.getNodeLabel) {\n config.getNodeLabel = (node) => node.data.id;\n }\n\n if (!config.expandIconClass) {\n config.expandIconClass = 'fa-solid fa-chevron-right';\n }\n\n if (!config.collapseIconClass) {\n config.collapseIconClass = 'fa-solid fa-chevron-down';\n }\n\n return config;\n }\n }\n );\n public readonly displayedNodes = signal<NgssmExpressionTreeNode[]>([]);\n\n constructor() {\n effect(() => {\n const config = this.treeConfig();\n if (!config) {\n this.displayedNodes.set([]);\n return;\n }\n\n const nodes: NgssmExpressionTreeNode[] = [];\n const collapsedNodes = new Set<string>();\n (this.trees()[config.treeId]?.nodes ?? []).forEach((node) => {\n if (node.data.isExpandable === true && node.isExpanded === false) {\n collapsedNodes.add(node.data.id);\n }\n\n if (!node.data.parentId || node.path.findIndex((p) => collapsedNodes.has(p)) === -1) {\n nodes.push(node);\n }\n });\n\n this.displayedNodes.set(nodes);\n });\n }\n\n public getItemId(_: number, node: NgssmExpressionTreeNode): string {\n return node.data.id;\n }\n\n public expand(node: NgssmExpressionTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmExpandExpressionTreeNodeAction(treeId, node.data.id));\n }\n }\n\n public collapse(node: NgssmExpressionTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmCollapseExpressionTreeNodeAction(treeId, node.data.id));\n }\n }\n\n public forceRefresh(): void {\n this.changeDetectorRef.markForCheck();\n }\n}\n","@let defaultPadding = treeConfig()?.nodePadding ?? 20;\n\n<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\">\n @if (config.disableVirtualization) {\n <div class=\"ngssm-expression-tree-nodes-container\">\n @for (item of displayedNodes(); track item.data.id) {\n <div class=\"ngssm-expression-tree-node\" id=\"{{ 'node_' + item.data.id }}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { config, item }\"></ng-container>\n </div>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"config.rowSize ?? 30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedNodes(); trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\"\n id=\"{{ 'node_' + item.data.id }}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { config, item }\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n }\n </mat-card-content>\n }\n</mat-card>\n\n<ng-template #nodeTemplate let-config=\"config\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"config.rowSize ?? 30\">\n @for (part of item.path; track part) {\n <mat-divider\n [vertical]=\"true\"\n class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"config.rowSize ?? 30\"\n [style.margin-right.px]=\"defaultPadding\">\n </mat-divider>\n }\n @if ((item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false) {\n <mat-icon class=\"{{ config.expandIconClass }}\" (click)=\"$event.stopPropagation(); expand(item)\" id=\"expandIcon\"> </mat-icon>\n }\n\n @if ((item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true) {\n <mat-icon class=\"{{ config.collapseIconClass }}\" (click)=\"$event.stopPropagation(); collapse(item)\" id=\"collapseIcon\"> </mat-icon>\n }\n\n <ngssm-expression-tree-node [nodeId]=\"item.data.id\" [treeConfig]=\"config\"> </ngssm-expression-tree-node>\n </div>\n @if (item.data.hasRowDetail === true && item.isExpanded === true) {\n <div class=\"flex-row-center fxFlex\">\n @for (part of item.path; track part) {\n <mat-divider\n [vertical]=\"true\"\n class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\"\n [style.margin-right.px]=\"defaultPadding\">\n </mat-divider>\n }\n\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <ngssm-expression-tree-node-details [nodeId]=\"item.data.id\" [treeConfig]=\"config\" (heightChanged)=\"forceRefresh()\">\n </ngssm-expression-tree-node-details>\n </div>\n </div>\n }\n</ng-template>\n","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/ngssm-tree/public-api';\nexport * from './lib/ngssm-expression-tree/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i2","i7","i8","TreeNodeExpandReducer","TreesReducer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAY;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,qCAAqD;AACrD,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,uCAAyD;AACzD,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,kCAA+C;AAC/C,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,oCAAmD;AACnD,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,qCAAqD;AACrD,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,kCAA+C;AAC/C,IAAA,mBAAA,CAAA,oBAAA,CAAA,GAAA,0CAA+D;AAC/D,IAAA,mBAAA,CAAA,qBAAA,CAAA,GAAA,2CAAiE;AACjE,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,yCAA6D;AAC7D,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,uCAAyD;AACzD,IAAA,mBAAA,CAAA,8BAAA,CAAA,GAAA,oDAAmF;AACnF,IAAA,mBAAA,CAAA,sBAAA,CAAA,GAAA,4CAAmE;AACrE,CAAC,EAbW,mBAAmB,KAAnB,mBAAmB,GAa9B,EAAA,CAAA,CAAA;;MCXY,UAAU,CAAA;IACrB,WACkB,CAAA,IAAY,EACZ,MAAc,EAAA;QADd,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAM,CAAA,MAAA,GAAN,MAAM;;AAEzB;;ACHK,MAAO,mBAAoB,SAAQ,UAAU,CAAA;AACjD,IAAA,WAAA,CACE,MAAc,EACE,QAAgB,EAChB,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC;QAHhC,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAIvB;;ACVK,MAAO,cAAe,SAAQ,UAAU,CAAA;AAC5C,IAAA,WAAA,CACE,UAAkB,EAClB,MAAc,EACE,MAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;QAFT,IAAM,CAAA,MAAA,GAAN,MAAM;;AAIzB;;ACPK,MAAO,gBAAiB,SAAQ,cAAc,CAAA;IAClD,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;;AAExD;;MCDY,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CACkB,UAAsB,EACtB,MAAc,EACd,YAAoB,EACpB,QAAoB,EAAE,EAAA;QAHtB,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAK,CAAA,KAAA,GAAL,KAAK;AANP,QAAA,IAAA,CAAA,IAAI,GAAW,mBAAmB,CAAC,aAAa;;AAQjE;;ACZK,MAAO,kBAAmB,SAAQ,UAAU,CAAA;IAChD,WACE,CAAA,MAAc,EACE,MAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC;QAF/B,IAAM,CAAA,MAAA,GAAN,MAAM;;AAIzB;;ACPK,MAAO,gBAAiB,SAAQ,cAAc,CAAA;IAClD,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;;AAExD;;ACJK,MAAO,qBAAsB,SAAQ,UAAU,CAAA;AACnD,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,CAAC,mBAAmB,CAAC,eAAe,EAAE,MAAM,CAAC;;AAErD;;ACJK,MAAO,yBAA0B,SAAQ,UAAU,CAAA;IACvD,WACE,CAAA,MAAc,EACE,WAAmB,EAAA;AAEnC,QAAA,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,CAAC;QAFtC,IAAW,CAAA,WAAA,GAAX,WAAW;;AAI9B;;MCPY,qBAAqB,CAAA;AAGhC,IAAA,WAAA,CAA4B,aAAqB,EAAA;QAArB,IAAa,CAAA,aAAA,GAAb,aAAa;AAFzB,QAAA,IAAA,CAAA,IAAI,GAAW,mBAAmB,CAAC,eAAe;;AAGnE;;MCFY,kCAAkC,CAAA;IAG7C,WACkB,CAAA,aAA8B,EACvC,cAA+B,EAAA;QADtB,IAAa,CAAA,aAAA,GAAb,aAAa;QACtB,IAAc,CAAA,cAAA,GAAd,cAAc;AAJP,QAAA,IAAA,CAAA,IAAI,GAAW,mBAAmB,CAAC,4BAA4B;;AAMhF;;ACTK,MAAO,wBAAyB,SAAQ,cAAc,CAAA;IAC1D,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC;;AAEhE;;ACKY,MAAA,wBAAwB,GAAG,CAAC,IAAmB,KAAY;AACtE,IAAA,IAAI,IAAI,CAAC,cAAc,EAAE;QACvB,OAAO,CAAA,EAAG,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAE;;AAGpD,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;AACxB;;MCPa,uBAAuB,GAAG,IAAI,cAAc,CAAuB,yBAAyB;;MCH5F,gBAAgB,GAAG,CAAC,IAAe,EAAE,MAAc,KAAqB;IACnF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAwB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAoB,EAAE;IAChC,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IACjC,OAAO,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS;;AAGpF,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAG1B,IAAA,OAAO,IAAI;AACb;;ICtBY;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA;;ACOY,MAAA,yBAAyB,GAAG,OAAwB;IAC/D,YAAY,EAAE,YAAY,CAAC,IAAI;AAC/B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,aAAa,EAAE;AAChB,CAAA;;ACTM,MAAM,oBAAoB,GAAG,CAAC,KAAY,KAAqB,KAAK,CAAC,2BAA2B,CAAC,eAAe;AAEhH,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAE,OAAoC,KACrF,MAAM,CAAC,KAAK,EAAE;AACZ,IAAA,CAAC,2BAA2B,CAAC,eAAe,GAAG;AAChD,CAAA;AAWU,IAAA,2BAA2B,GAAjC,MAAM,2BAA2B,CAAA;aACf,IAAe,CAAA,eAAA,GAAG,kBAAH,CAAsB;AACrC,IAAA,SAAA,IAAA,CAAA,YAAY,GAAmB;AACpD,QAAA,KAAK,EAAE,EAAE;QACT,eAAe,EAAE,yBAAyB;AAC3C,KAHkC,CAGjC;;AALS,2BAA2B,GAAA,UAAA,CAAA;AAJvC,IAAA,iBAAiB,CAAC;QACjB,eAAe,EAAE,2BAA2B,CAAC,eAAe;QAC5D,YAAY,EAAE,2BAA2B,CAAC;KAC3C;AACY,CAAA,EAAA,2BAA2B,CAMvC;;ACzBY,MAAA,mBAAmB,GAAG,CAAC,KAAY,EAAE,MAAc,EAAE,MAAc,KAC9E,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;AAE1E,MAAA,2BAA2B,GAAG,CAAC,KAAY,EAAE,MAAc,EAAE,MAAc,KACtF,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,IAAI;;MCEvF,qBAAqB,CAAA;IAOhC,WACuD,CAAA,YAAoC,EACjF,MAAc,EAAA;QAD+B,IAAY,CAAA,YAAA,GAAZ,YAAY;QACzD,IAAM,CAAA,MAAA,GAAN,MAAM;AARA,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,mBAAmB,CAAC,UAAU;AAC9B,YAAA,mBAAmB,CAAC,UAAU;AAC9B,YAAA,mBAAmB,CAAC;SACrB;;AAOM,IAAA,aAAa,CAAC,gBAAkC,EAAE,KAAY,EAAE,MAAc,EAAA;QACnF,MAAM,cAAc,GAAG,MAAwB;AAC/C,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAsD,mDAAA,EAAA,cAAc,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC;YACjG;;AAGF,QAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI;QAC9E,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAClF,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,wDAAA,EAA2D,cAAc,CAAC,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,CAAG,CAAC;YACpH;;AAGF,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;QAChI,IAAI,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE;YACvC;;AAGF,QAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;YACvE,IAAI,EAAE,CAAC,KAAK,KACV,gBAAgB,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAClI,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,cAAc,CAAC,MAAM,CAAA,YAAA,EAAe,cAAc,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC;AACjI,gBAAA,gBAAgB,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;;AAE3H,SAAA,CAAC;;AAtCO,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAQtB,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHARtB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;0BASI,MAAM;2BAAC,uBAAuB;;0BAAG;;;MCQzB,kBAAkB,CAAA;AAW7B,IAAA,WAAA,GAAA;AAViB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAClE,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAwB,SAAS,CAAC;QAEhD,IAAU,CAAA,UAAA,GAAG,KAAK,EAAsC;QAExD,IAAU,CAAA,UAAA,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAkB,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAqB,SAAS,CAAC;QAGpE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACjC,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;;iBAC5C;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;AAE5B,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/B,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE;AAC3B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B;;AAGF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI;AAC7B,YAAA,MAAM,MAAM,GAAgC,MAAM,CAAC,MAAM,IAAI,UAAU;AACvE,YAAA,MAAM,SAAS,GAAgC,MAAM,CAAC,SAAS,IAAI,UAAU;YAE7E,MAAM,KAAK,GAAoB,EAAE;AACjC,YAAA,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,YAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAyD;AAC5F,YAAA,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;AACtC,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;AACvE,oBAAA,WAAW,GAAG,CAAC,CAAC,KAAK;;gBAGvB,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,WAAW,EAAE;AAChD,oBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;wBAClB,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,CAAC;AACP,4BAAA,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI;AAC5B,yBAAA,CAAC;AACF,wBAAA,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;;AAI1E,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,IAAI,WAAW,EAAE;AACjD,oBAAA,WAAW,GAAG,CAAC,CAAC,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;;AAGpD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC3C,oBAAA,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;AAE3E,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAE9B,YAAA,IAAI,YAAY,GAAG,WAAW,CAAC,YAAY;YAC3C,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;;iBAC7B;gBACL,OAAO,YAAY,EAAE;oBACnB,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;AAClD,oBAAA,IAAI,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE;wBAC9B,YAAY,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;;yBACtC;wBACL;;;AAIJ,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;;AAEzC,SAAC,CAAC;;IAGG,SAAS,CAAC,CAAS,EAAE,IAAmB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;;AAGvB,IAAA,MAAM,CAAC,IAAmB,EAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAItE,IAAA,QAAQ,CAAC,IAAmB,EAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAIxE,IAAA,UAAU,CAAC,IAAmB,EAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAItE,IAAA,mBAAmB,CAAC,IAAmB,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;8GA7G3E,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B/B,sxDAwCA,EAAA,MAAA,EAAA,CAAA,ikBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKpF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EACb,OAAA,EAAA,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,CAAC,EAG/E,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,sxDAAA,EAAA,MAAA,EAAA,CAAA,ikBAAA,CAAA,EAAA;;;MENpC,wBAAwB,CAAA;AAQnC,IAAA,WAAA,GAAA;AAPiB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAEjE,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAqB,SAAS,CAAC;AAE7C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAa,EAAE,CAAC;QAG5C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB;;AAGF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAE9B,MAAM,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;YACxC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB;;AAGF,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAmB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5F,MAAM,IAAI,GAAe,EAAE;YAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS;YAC5E,OAAO,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAClB,gBAAA,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS;;AAG1E,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;;AAGhC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,SAAC,CAAC;;AAGG,IAAA,UAAU,CAAC,IAAc,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;;8GA3C7D,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,mNClBrC,4bAcA,EAAA,MAAA,EAAA,CAAA,gDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDDY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,qLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK3C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;+BACE,kBAAkB,EAAA,OAAA,EACnB,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,eAAA,EAGtC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4bAAA,EAAA,MAAA,EAAA,CAAA,gDAAA,CAAA,EAAA;;;MEoBpC,8BAA8B,CAAA;AAmBzC,IAAA,WAAA,GAAA;AAlBiB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,YAAY,GAA2B,MAAM,CAAC,uBAAuB,EAAE;AACtF,YAAA,QAAQ,EAAE;AACX,SAAA,CAAsC;QAEvB,IAAsB,CAAA,sBAAA,GAAG,SAAS,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAExF,IAAY,CAAA,YAAA,GAAG,YAAY;AAC3B,QAAA,IAAA,CAAA,cAAc,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,cAAc,IAAI,EAAE,CAAC;QAC1G,IAAmB,CAAA,mBAAA,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;AACvH,QAAA,IAAA,CAAA,mBAAmB,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;AAEvG,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,WAAW,CAAqB,SAAS,EAAE;AACpF,YAAA,UAAU,CAAC,QAAQ;YACnB,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;AAC7B,SAAA,CAAC;AAGA,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAK;AAC5B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE;YAC/C,IAAI,CAAC,SAAS,EAAE;gBACd;;YAGF,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC1D,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,MAAM;YAC/C,IAAI,CAAC,MAAM,EAAE;gBACX;;YAGF,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI;YAC9C,IAAI,CAAC,QAAQ,EAAE;gBACb;;AAGF,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC1E,YAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,EAAE;gBACpC;;YAGF,IAAI,CAAC,sBAAsB,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,kBAAkB,CAAC;AAC9E,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;YAErC,SAAS,CAAC,OAAO,EAAE;AACrB,SAAC,CAAC;;IAGG,KAAK,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;;IAG/D,MAAM,GAAA;AACX,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK;QACrD,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC;;;IAIhE,KAAK,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;;AAGjE,IAAA,cAAc,CAAC,OAAwB,EAAA;QAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;AACzE,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,OAAO,IAAI;;QAGb,OAAO;YACL,KAAK,EAAE,MAAM,CAAC;SACf;;8GAxEQ,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAO4C,gBAAgB,EC3CvG,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,y0DA+CA,yKD1BI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,6NACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAlB1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EACjC,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb;qBACD,EAGgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,y0DAAA,EAAA,MAAA,EAAA,CAAA,kHAAA,CAAA,EAAA;;;MErBpC,wBAAwB,CAAA;IAWnC,WACU,CAAA,SAAoB,EACpB,MAAc,EAAA;QADd,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAM,CAAA,MAAA,GAAN,MAAM;AAVA,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,mBAAmB,CAAC,mBAAmB;AACvC,YAAA,mBAAmB,CAAC,iBAAiB;AACrC,YAAA,mBAAmB,CAAC,eAAe;AACnC,YAAA,mBAAmB,CAAC,aAAa;AACjC,YAAA,mBAAmB,CAAC;SACrB;;AAOM,IAAA,aAAa,CAAC,gBAAkC,EAAE,KAAY,EAAE,MAAc,EAAA;AACnF,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,mBAAmB,EAAE;gBAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE;AAChE,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE;AACT,iBAAA,CAAC;gBAEF;;AAGF,YAAA,KAAK,mBAAmB,CAAC,iBAAiB,EAAE;gBAC1C,IAAI,CAAC,WAAW,EAAE;gBAElB;;YAGF,KAAK,mBAAmB,CAAC,eAAe;YACxC,KAAK,mBAAmB,CAAC,aAAa;AACtC,YAAA,KAAK,mBAAmB,CAAC,4BAA4B,EAAE;gBACrD,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe;AAC/D,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,WAAW,CAAC,YAAY,KAAK,YAAY,CAAC,UAAU,EAAE;oBAChH;;gBAGF,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtC;;AAGF,gBAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACnG,IAAI,CAAC,WAAW,EAAE;oBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAuB,oBAAA,EAAA,WAAW,CAAC,MAAM,CAAA,WAAA,EAAc,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;oBAC7G;;gBAGF,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE;AAC1H,oBAAA,gBAAgB,CAAC,cAAc,CAAC,IAAI,wBAAwB,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC1G;;AAGF,gBAAA,MAAM,aAAa,GAAG,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrG,MAAM,QAAQ,GAAoB,EAAE;gBACpC,MAAM,SAAS,GAAoB,EAAE;AACrC,gBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7B,oBAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,IAAI,CAAC,cAAc,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5D,oBAAA,IAAI,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE;AAClF,wBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGrB,oBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,wBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAExB,iBAAC,CAAC;gBAEF,gBAAgB,CAAC,cAAc,CAAC,IAAI,kCAAkC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAE5F;;;;IAKE,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;;8GAhFd,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;oCCAY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,mBAAmB,CAAC,UAAU;AAC9B,YAAA,mBAAmB,CAAC,YAAY;AAChC,YAAA,mBAAmB,CAAC,UAAU;AAC9B,YAAA,mBAAmB,CAAC;SACrB;AA6HF;IA3HQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,MAAM,gBAAgB,GAAG,MAA0B;gBACnD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG;AACzB,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;oCACzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAC;AAChF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,wCAAA,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;wCACxB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;AACrC,4CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3B,gDAAA,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI;AACzB,6CAAA,CAAC;;6CACG;AACL,4CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3B,gDAAA,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B,gDAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO;AACnC,6CAAA,CAAC;;wCAGJ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;;AAG/B,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,YAAY,EAAE;gBACrC,MAAM,kBAAkB,GAAG,MAA4B;gBACvD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,kBAAkB,CAAC,MAAM,GAAG;AAC3B,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;oCACzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,kBAAkB,CAAC,MAAM,CAAC;AAClF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wCAChB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,4CAAA,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK;AAC1B,yCAAA,CAAC;wCAEF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;;AAG/B,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,MAAM,gBAAgB,GAAG,MAA0B;AACnD,gBAAA,IACE,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM;AACpH,sBAAE,MAAM,KAAK,UAAU,CAAC,MAAM,EAChC;oBACA;;gBAGF,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG;AACzB,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;oCACzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAC;AAChF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wCAChB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,4CAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO;AACnC,yCAAA,CAAC;wCAEF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;;AAG/B,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,kBAAkB,EAAE;gBAC3C,MAAM,wBAAwB,GAAG,MAAkC;gBACnE,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,wBAAwB,CAAC,MAAM,GAAG;AACjC,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;oCACzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,CAAC;AACxF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,wCAAA,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;wCACxB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;AACrC,4CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3B,gDAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO;AACnC,6CAAA,CAAC;;wCAGJ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;;AAG/B,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;8GAjIH,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArBG,uBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCHY,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAkB9E;IAhBQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,MAAM,gBAAgB,GAAG,MAA0B;gBACnD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG;AACzB,4BAAA,YAAY,EAAE,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC9C;AACF;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;8GAjBH,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MCEY,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,mBAAmB,CAAC,mBAAmB;AACvC,YAAA,mBAAmB,CAAC,iBAAiB;AACrC,YAAA,mBAAmB,CAAC,eAAe;AACnC,YAAA,mBAAmB,CAAC,4BAA4B;AAChD,YAAA,mBAAmB,CAAC;SACrB;AAqFF;IAnFQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,mBAAmB,EAAE;gBAC5C,MAAM,yBAAyB,GAAG,MAAmC;gBACrE,MAAM,IAAI,GAAG,gBAAgB,CAC3B,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,EACnE,yBAAyB,CAAC,WAAW,CACtC;gBACD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,eAAe,EAAE;AACf,wBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,yBAAyB,CAAC,MAAM,EAAE;AAClD,wBAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,yBAAyB,CAAC,WAAW,EAAE;wBACjE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAChE;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,iBAAiB,EAAE;gBAC1C,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,eAAe,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;AACrD,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,eAAe,EAAE;gBACxC,MAAM,qBAAqB,GAAG,MAA+B;AAC7D,gBAAA,MAAM,SAAS,GAAG,mBAAmB,CACnC,KAAK,EACL,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,IAAI,EAAE,EACxD,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,gBAAgB,IAAI,EAAE,CACnE;gBACD,MAAM,WAAW,GAA2C,EAAE;gBAC9D,IAAI,SAAS,EAAE;oBACb,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;;gBAGpG,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,eAAe,EAAE;AACf,wBAAA,aAAa,EAAE,EAAE,IAAI,EAAE,qBAAqB,CAAC,aAAa,EAAE;AAC5D,wBAAA,YAAY,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE;AAC/C,wBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAChC,wBAAA,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE;AAC1B;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,4BAA4B,EAAE;gBACrD,MAAM,kCAAkC,GAAG,MAA4C;AACvF,gBAAA,MAAM,SAAS,GAA2C,oBAAoB,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACxH,gBAAA,SAAS,CAAC,IAAI,CACZ,GAAG,kCAAkC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAC/D,oBAAA,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;AACrB,oBAAA,QAAQ,EAAE,wBAAwB,CAAC,CAAC;iBACrC,CAAC,CAAC,CACJ;gBACD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,eAAe,EAAE;AACf,wBAAA,YAAY,EAAE;AACZ,4BAAA,MAAM,EAAE,CAAC,KAAK,KAAI;AAChB,gCAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oCAC1B,OAAO,YAAY,CAAC,IAAI;;AAG1B,gCAAA,OAAO,KAAK;;AAEf,yBAAA;AACD,wBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC9B,aAAa,EAAE,EAAE,KAAK,EAAE,kCAAkC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACnG;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,oBAAoB,EAAE;gBAC7C,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,eAAe,EAAE;AACf,wBAAA,YAAY,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE;AAC5C,wBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE;AACtB;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;8GA1FH,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCIY,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa,CAAC,mBAAmB,CAAC,aAAa,CAAC;AAyCjF;IAvCQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,aAAa,EAAE;gBACtC,MAAM,mBAAmB,GAAG,MAA6B;gBACzD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC5B,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;oCACjC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,mBAAmB,CAAC,YAAY,CAAC;AACxF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,wCAAA,OAAO,KAAK;;oCAGd,OAAO;AACL,wCAAA,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AACxB,wCAAA,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,EAAE,CAAC;wCAC1E,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;4CACvC,MAAM,EAAE,UAAU,CAAC,IAAI;AACvB,4CAAA,UAAU,EAAE,KAAK;4CACjB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC;AAC7B,4CAAA,IAAI,EAAE,CAAC;4CACP,cAAc,EACZ,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK;AAC9B,kDAAE,CAAG,EAAA,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAI,CAAA,EAAA,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAE;kDAC3D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AACzB,yCAAA,CAAC,CAAC;AACH,wCAAA,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;qCACzB;;AAEJ;AACF;AACF;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;8GAxCH,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;2BCFY,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;QAEkB,IAAgB,CAAA,gBAAA,GAAa,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC;AAmCtH;IAjCQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,aAAa,EAAE;gBACtC,MAAM,mBAAmB,GAAG,MAA6B;gBACzD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC5B,4BAAA,IAAI,EAAE;AACJ,gCAAA,KAAK,EAAE;AACL,oCAAA;wCACE,MAAM,EAAE,UAAU,CAAC,IAAI;AACvB,wCAAA,UAAU,EAAE,KAAK;AACjB,wCAAA,KAAK,EAAE,CAAC;wCACR,IAAI,EAAE,mBAAmB,CAAC;AAC3B;AACF,iCAAA;gCACD,IAAI,EAAE,mBAAmB,CAAC;AAC3B;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,mBAAmB,CAAC,eAAe,EAAE;gBACxC,MAAM,qBAAqB,GAAG,MAA+B;gBAC7D,OAAO,oBAAoB,CAAC,KAAK,EAAE;oBACjC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAChD,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;8GAlCH,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAZ,YAAY,EAAA,CAAA,CAAA;;2FAAZC,cAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;ACIM,MAAM,gBAAgB,GAAG,MAA2B;AACzD,IAAA,OAAO,wBAAwB,CAAC;QAC9B,eAAe,CAACD,uBAAqB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,gBAAgB,EAAEC,cAAY,CAAC;AACxH,QAAA,cAAc,CAAC,qBAAqB,EAAE,wBAAwB;AAC/D,KAAA,CAAC;AACJ;;ICjBY;AAAZ,CAAA,UAAY,6BAA6B,EAAA;;AAEvC,IAAA,6BAAA,CAAA,yBAAA,CAAA,GAAA,yDAAmF;AACnF,IAAA,6BAAA,CAAA,0BAAA,CAAA,GAAA,0DAAqF;;AAGrF,IAAA,6BAAA,CAAA,iCAAA,CAAA,GAAA,iEAAmG;AACnG,IAAA,6BAAA,CAAA,+BAAA,CAAA,GAAA,+DAA+F;AAC/F,IAAA,6BAAA,CAAA,qCAAA,CAAA,GAAA,qEAA2G;AAC3G,IAAA,6BAAA,CAAA,mCAAA,CAAA,GAAA,mEAAuG;;AAGvG,IAAA,6BAAA,CAAA,4BAAA,CAAA,GAAA,4DAAyF;AACzF,IAAA,6BAAA,CAAA,6BAAA,CAAA,GAAA,6DAA2F;AAC3F,IAAA,6BAAA,CAAA,+BAAA,CAAA,GAAA,+DAA+F;AAC/F,IAAA,6BAAA,CAAA,+BAAA,CAAA,GAAA,+DAA+F;;AAG/F,IAAA,6BAAA,CAAA,4BAAA,CAAA,GAAA,4DAAyF;AACzF,IAAA,6BAAA,CAAA,8BAAA,CAAA,GAAA,8DAA6F;AAC7F,IAAA,6BAAA,CAAA,kCAAA,CAAA,GAAA,kEAAqG;AACvG,CAAC,EArBW,6BAA6B,KAA7B,6BAA6B,GAqBxC,EAAA,CAAA,CAAA;;MCnBY,yBAAyB,CAAA;IACpC,WACkB,CAAA,IAAY,EACZ,MAAc,EAAA;QADd,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAM,CAAA,MAAA,GAAN,MAAM;;AAEzB;;ACJK,MAAO,8BAA+B,SAAQ,yBAAyB,CAAA;AAC3E,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,CAAC,6BAA6B,CAAC,wBAAwB,EAAE,MAAM,CAAC;;AAExE;;ACHK,MAAO,6BAA+C,SAAQ,yBAAyB,CAAA;IAC3F,WACE,CAAA,MAAc,EACE,KAAyB,EAAA;AAEzC,QAAA,KAAK,CAAC,6BAA6B,CAAC,uBAAuB,EAAE,MAAM,CAAC;QAFpD,IAAK,CAAA,KAAA,GAAL,KAAK;;AAIxB;;ACTK,MAAO,6BAA8B,SAAQ,yBAAyB,CAAA;AAC1E,IAAA,WAAA,CACE,IAAY,EACZ,MAAc,EACE,MAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAFH,IAAM,CAAA,MAAA,GAAN,MAAM;;AAIzB;;ACPK,MAAO,mCAAoC,SAAQ,6BAA6B,CAAA;IACpF,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,6BAA6B,CAAC,6BAA6B,EAAE,MAAM,EAAE,MAAM,CAAC;;AAErF;;ACJK,MAAO,qCAAsC,SAAQ,6BAA6B,CAAA;IACtF,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,6BAA6B,CAAC,+BAA+B,EAAE,MAAM,EAAE,MAAM,CAAC;;AAEvF;;ACHK,MAAO,gCAAkD,SAAQ,yBAAyB,CAAA;IAC9F,WACE,CAAA,MAAc,EACE,IAAsB,EAAA;AAEtC,QAAA,KAAK,CAAC,6BAA6B,CAAC,0BAA0B,EAAE,MAAM,CAAC;QAFvD,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAIvB;;ACRK,MAAO,mCAAoC,SAAQ,6BAA6B,CAAA;IACpF,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,6BAA6B,CAAC,6BAA6B,EAAE,MAAM,EAAE,MAAM,CAAC;;AAErF;;ACJK,MAAO,mCAAqD,SAAQ,6BAA6B,CAAA;AACrG,IAAA,WAAA,CACE,MAAc,EACd,MAAc,EACE,IAAW,EAAA;QAE3B,KAAK,CAAC,6BAA6B,CAAC,6BAA6B,EAAE,MAAM,EAAE,MAAM,CAAC;QAFlE,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAIvB;;ACRK,MAAO,yCAA0C,SAAQ,yBAAyB,CAAA;AACtF,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,CAAC,6BAA6B,CAAC,mCAAmC,EAAE,MAAM,CAAC;;AAEnF;;ACJK,MAAO,uCAAwC,SAAQ,yBAAyB,CAAA;AACpF,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,CAAC,6BAA6B,CAAC,iCAAiC,EAAE,MAAM,CAAC;;AAEjF;;ACHK,MAAO,iCAAmD,SAAQ,yBAAyB,CAAA;IAC/F,WACE,CAAA,MAAc,EACE,KAAyB,EAAA;AAEzC,QAAA,KAAK,CAAC,6BAA6B,CAAC,2BAA2B,EAAE,MAAM,CAAC;QAFxD,IAAK,CAAA,KAAA,GAAL,KAAK;;AAIxB;;ACRK,MAAO,gCAAiC,SAAQ,6BAA6B,CAAA;IACjF,WAAY,CAAA,MAAc,EAAE,MAAc,EAAA;QACxC,KAAK,CAAC,6BAA6B,CAAC,0BAA0B,EAAE,MAAM,EAAE,MAAM,CAAC;;AAElF;;ACHK,MAAO,kCAAmC,SAAQ,6BAA6B,CAAA;AACnF,IAAA,WAAA,CACE,MAAc,EACd,MAAc,EACE,MAAyB,EAAA;QAEzC,KAAK,CAAC,6BAA6B,CAAC,4BAA4B,EAAE,MAAM,EAAE,MAAM,CAAC;QAFjE,IAAM,CAAA,MAAA,GAAN,MAAM;;AAIzB;;ACTK,MAAO,sCAAuC,SAAQ,yBAAyB,CAAA;AACnF,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,CAAC,6BAA6B,CAAC,gCAAgC,EAAE,MAAM,CAAC;;AAEhF;;ACGY,MAAA,kCAAkC,GAAG,CAAkB,KAAyB,KAAgC;AAC3H,IAAA,MAAM,IAAI,GAA+B;AACvC,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,IAAI,EAAE;KACP;IAED,IAAI,IAAI,GAAa,EAAE;AACvB,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,GAAG,EAAE;;aACJ;YACL,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjD,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;iBACnB;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;;;AAIlC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,YAAA,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;AACf,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI,CAAC,YAAY,KAAK;AACnC,SAAA,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI;AAChC,KAAC,CAAC;AAEF,IAAA,OAAO,IAAI;AACb;;AClCO,MAAM,8BAA8B,GAAG,CAAC,KAAY,KACzD,KAAK,CAAC,qCAAqC,CAAC,eAAe;AAEtD,MAAM,8BAA8B,GAAG,CAAC,KAAY,EAAE,OAA8C,KACzG,MAAM,CAAC,KAAK,EAAE;AACZ,IAAA,CAAC,qCAAqC,CAAC,eAAe,GAAG;AAC1D,CAAA;AAUU,IAAA,qCAAqC,GAA3C,MAAM,qCAAqC,CAAA;aACzB,IAAe,CAAA,eAAA,GAAG,6BAAH,CAAiC;AAChD,IAAA,SAAA,IAAA,CAAA,YAAY,GAA6B;AAC9D,QAAA,KAAK,EAAE;AACR,KAFkC,CAEjC;;AAJS,qCAAqC,GAAA,UAAA,CAAA;AAJjD,IAAA,iBAAiB,CAAC;QACjB,eAAe,EAAE,qCAAqC,CAAC,eAAe;QACtE,YAAY,EAAE,qCAAqC,CAAC;KACrD;AACY,CAAA,EAAA,qCAAqC,CAKjD;;MCjBY,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,6BAA6B,CAAC,uBAAuB;AACrD,YAAA,6BAA6B,CAAC;SAC/B;AA2BF;IAzBQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,6BAA6B,CAAC,uBAAuB,EAAE;gBAC1D,MAAM,6BAA6B,GAAG,MAAuC;gBAC7E,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,6BAA6B,CAAC,MAAM,GAAG;AACtC,4BAAA,IAAI,EAAE,kCAAkC,CAAC,6BAA6B,CAAC,KAAK;AAC7E;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,6BAA6B,CAAC,wBAAwB,EAAE;gBAC3D,MAAM,8BAA8B,GAAG,MAAwC;gBAC/E,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,MAAM,EAAE,CAAC,8BAA8B,CAAC,MAAM;AAC/C;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;8GA7BH,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAZ,YAAY,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;MCSY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,6BAA6B,CAAC,6BAA6B;AAC3D,YAAA,6BAA6B,CAAC,+BAA+B;AAC7D,YAAA,6BAA6B,CAAC,mCAAmC;AACjE,YAAA,6BAA6B,CAAC;SAC/B;AAmFF;IAjFQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,6BAA6B,CAAC,6BAA6B,EAAE;gBAChE,MAAM,mCAAmC,GAAG,MAA6C;AACzF,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,mCAAmC,CAAC,MAAM,EAAE,mCAAmC,CAAC,MAAM,EAAE,IAAI,CAAC;;AAGhI,YAAA,KAAK,6BAA6B,CAAC,+BAA+B,EAAE;gBAClE,MAAM,qCAAqC,GAAG,MAA+C;AAC7F,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,qCAAqC,CAAC,MAAM,EAAE,qCAAqC,CAAC,MAAM,EAAE,KAAK,CAAC;;AAGrI,YAAA,KAAK,6BAA6B,CAAC,mCAAmC,EAAE;gBACtE,MAAM,yBAAyB,GAAG,MAAmD;gBACrF,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,yBAAyB,CAAC,MAAM,GAAG;AAClC,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,MAAiC,KAAI;oCAC5C,MAAM,MAAM,GAA8B,EAAE;oCAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KACnB,MAAM,CAAC,IAAI,CAAC;AACV,wCAAA,GAAG,KAAK;AACR,wCAAA,UAAU,EAAE;AACb,qCAAA,CAAC,CACH;AAED,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,6BAA6B,CAAC,iCAAiC,EAAE;gBACpE,MAAM,yBAAyB,GAAG,MAAiD;gBACnF,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,yBAAyB,CAAC,MAAM,GAAG;AAClC,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,MAAiC,KAAI;oCAC5C,MAAM,MAAM,GAA8B,EAAE;oCAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KACnB,MAAM,CAAC,IAAI,CAAC;AACV,wCAAA,GAAG,KAAK;AACR,wCAAA,UAAU,EAAE;AACb,qCAAA,CAAC,CACH;AAED,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;AAGN,IAAA,aAAa,CAAC,KAAY,EAAE,MAAc,EAAE,MAAc,EAAE,UAAmB,EAAA;QACrF,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,YAAA,KAAK,EAAE;gBACL,CAAC,MAAM,GAAG;AACR,oBAAA,KAAK,EAAE;AACL,wBAAA,MAAM,EAAE,CAAC,MAAiC,KAAI;AAC5C,4BAAA,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;AAC1B,4BAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;AAC3D,4BAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gCAChB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;;AAGtF,4BAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,SAAA,CAAC;;8GAvFO,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCDY,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,6BAA6B,CAAC,0BAA0B;AACxD,YAAA,6BAA6B,CAAC,6BAA6B;AAC3D,YAAA,6BAA6B,CAAC,6BAA6B;AAC3D,YAAA,6BAA6B,CAAC;SAC/B;AAuHF;IArHQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,6BAA6B,CAAC,0BAA0B,EAAE;gBAC7D,MAAM,gCAAgC,GAAG,MAA0C;gBACnF,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gCAAgC,CAAC,MAAM,GAAG;AACzC,4BAAA,IAAI,EAAE;AACJ,gCAAA,CAAC,gCAAgC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,gCAAgC,CAAC,IAAI,CAAC,IAAI;AAC/F,6BAAA;AACD,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,MAAiC,KAAI;AAC5C,oCAAA,MAAM,MAAM,GAA8B,CAAC,GAAG,MAAM,CAAC;oCACrD,IAAI,CAAC,aAAa,CAAC,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC;AACjE,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,6BAA6B,CAAC,2BAA2B,EAAE;gBAC9D,MAAM,iCAAiC,GAAG,MAA2C;gBACrF,MAAM,QAAQ,GAA4B,EAAE;gBAC5C,iCAAiC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1F,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,iCAAiC,CAAC,MAAM,GAAG;AAC1C,4BAAA,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC1B,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,MAAiC,KAAI;AAC5C,oCAAA,MAAM,MAAM,GAA8B,CAAC,GAAG,MAAM,CAAC;AACrD,oCAAA,iCAAiC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3F,oCAAA,OAAO,MAAM;;AAEhB;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,6BAA6B,CAAC,6BAA6B,EAAE;gBAChE,MAAM,mCAAmC,GAAG,MAA6C;AACzF,gBAAA,MAAM,eAAe,GAAa,8BAA8B,CAAC,KAAK;qBACnE,KAAK,CAAC,mCAAmC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAChE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,MAAM,CAAC;AAE5D,qBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,gBAAA,eAAe,CAAC,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC;gBAChE,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,mCAAmC,CAAC,MAAM,GAAG;AAC5C,4BAAA,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,MAAiC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;AACpH,4BAAA,IAAI,EAAE,EAAE,MAAM,EAAE,eAAe;AAChC;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,6BAA6B,CAAC,6BAA6B,EAAE;gBAChE,MAAM,mCAAmC,GAAG,MAA6C;gBACzF,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,mCAAmC,CAAC,MAAM,GAAG;AAC5C,4BAAA,IAAI,EAAE;gCACJ,CAAC,mCAAmC,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,mCAAmC,CAAC,IAAI;AAC/F;AACF;AACF;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;IAGN,aAAa,CAAC,IAAe,EAAE,QAAmC,EAAA;AACxE,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,QAAQ,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;YACF;;AAGF,QAAA,IAAI,UAA+C;AACnD,QAAA,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC5C,oBAAA,cAAc,GAAG,CAAC,GAAG,CAAC;;qBACjB;oBACL;;gBAGF;;AAGF,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE;AACzC,gBAAA,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;AACxB,gBAAA,cAAc,GAAG,CAAC,GAAG,CAAC;gBACtB;;;QAIJ,IAAI,CAAC,UAAU,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;;AAGtC,QAAA,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE;AACjC,YAAA,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;;8GA3HO,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCEY,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,6BAA6B,CAAC,0BAA0B;AACxD,YAAA,6BAA6B,CAAC,gCAAgC;AAC9D,YAAA,6BAA6B,CAAC;SAC/B;AA8GF;IA5GQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,6BAA6B,CAAC,0BAA0B,EAAE;gBAC7D,MAAM,gCAAgC,GAAG,MAA0C;gBACnF,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gCAAgC,CAAC,MAAM,GAAG;AACzC,4BAAA,OAAO,EAAE;AACP,gCAAA,IAAI,EAAE,8BAA8B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CACpG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,gCAAgC,CAAC,MAAM;AAE/D;AACF;AACF;AACF,iBAAA,CAAC;;AAGJ,YAAA,KAAK,6BAA6B,CAAC,gCAAgC,EAAE;gBACnE,MAAM,sCAAsC,GAAG,MAAgD;gBAC/F,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sCAAsC,CAAC,MAAM,CAAC;;AAGpF,YAAA,KAAK,6BAA6B,CAAC,4BAA4B,EAAE;gBAC/D,MAAM,kCAAkC,GAAG,MAA4C;AACvF,gBAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,kCAAkC,CAAC,MAAM,CAAC;AACnG,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;gBAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,oBAAA,OAAO,KAAK;;gBAGd,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/E,gBAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;oBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,kCAAkC,CAAC,MAAM,CAAC;;gBAGhF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,kCAAkC,CAAC,MAAM,CAAC;gBAClG,IAAI,CAAC,UAAU,EAAE;oBACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,kCAAkC,CAAC,MAAM,CAAC;;gBAGhF,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,kCAAkC,CAAC,MAAM,CAAC;AACtG,gBAAA,IAAI,kCAAkC,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC1D,oBAAA,WAAW,GAAG,WAAW,GAAG,CAAC;;qBACxB;AACL,oBAAA,KAAK,IAAI,KAAK,GAAG,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;wBAChE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,EAAE;AAC5F,4BAAA,WAAW,GAAG,KAAK,GAAG,CAAC;4BACvB;;;;AAKN,gBAAA,MAAM,WAAW,GACf,kCAAkC,CAAC,MAAM,KAAK,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACpH,gBAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;gBAC7C,IAAI,WAAW,KAAK,OAAO,CAAC,IAAI,IAAI,YAAY,KAAK,WAAW,EAAE;oBAChE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,kCAAkC,CAAC,MAAM,CAAC;;AAGhF,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE;AAChC,oBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC3B,oBAAA,IAAI,EAAE;wBACJ,QAAQ,EAAE,EAAE,IAAI,EAAE,kCAAkC,CAAC,MAAM,KAAK,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE;AACxH;AACF,iBAAA,CAAC;AAEF,gBAAA,MAAM,WAAW,GAA8B,IAAI,CAAC;AACjD,qBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,qBAAA,GAAG,CAAC,CAAC,IAAI,MAAM;AACd,oBAAA,GAAG,IAAI;AACP,oBAAA,IAAI,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAC7D,iBAAA,CAAC,CAAC;gBAEL,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,kCAAkC,CAAC,MAAM,GAAG;AAC3C,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAgC,KAAI;AAC3C,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;AACzB,oCAAA,IAAI,WAAW,GAAG,YAAY,EAAE;AAC9B,wCAAA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;wCACxD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,wCAAA,OAAO,MAAM;;oCAGf,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,oCAAA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;AAExD,oCAAA,OAAO,MAAM;;AAEhB,6BAAA;AACD,4BAAA,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS;AAC3B;AACF;AACF,iBAAA,CAAC;;;AAIN,QAAA,OAAO,KAAK;;IAGN,gBAAgB,CAAC,KAAY,EAAE,MAAc,EAAA;QACnD,OAAO,8BAA8B,CAAC,KAAK,EAAE;AAC3C,YAAA,KAAK,EAAE;gBACL,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC;AAChC;AACF,SAAA,CAAC;;8GAjHO,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlB,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACTM,MAAM,0BAA0B,GAAG,MAA2B;AACnE,IAAA,OAAO,wBAAwB,CAAC,CAAC,eAAe,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC,CAAC;AACrI;;ACmBA,MAAM,qBAAqB,GAAG,OAAoB;AAChD,IAAA,uBAAuB,EAAE,KAAK;AAC9B,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,aAAa,EAAE;AAChB,CAAA,CAAC;MASW,gCAAgC,CAAA;AAe3C,IAAA,WAAA,GAAA;AAdiB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,8BAA8B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC5E,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAkC,SAAS,CAAC;QAE1D,IAAM,CAAA,MAAA,GAAG,KAAK,EAA6B;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAA+C,SAAS,CAAC;AAE3E,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAS,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAqB,SAAS,CAAC;AACnD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,SAAS,CAAC;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAc,qBAAqB,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAmC,SAAS,CAAC;AACrE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAA4B,SAAS,CAAC;QAG/E,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBACxB;;AAGF,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5C,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE;gBAC7B;;YAGF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAU,KAAM,CAAwC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACvH,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC;AAC9D,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/B,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACpD,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxD,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE;gBACpD;;YAGF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC;YACvE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,YAAA,MAAM,WAAW,GAAgB,qBAAqB,EAAE;AACxD,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO;AACnC,YAAA,IAAI,IAAI,IAAI,aAAa,IAAI,SAAS,EAAE;AACtC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;AACvE,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,EAAE,SAAS,CAAC,IAAI,SAAS,CAAC;AAClF,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7E,gBAAA,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI;gBAEzD,IAAI,OAAO,EAAE;oBACX,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAEjG,oBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC5B,wBAAA,WAAW,CAAC,cAAc,GAAG,aAAa,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK;AACvF,wBAAA,WAAW,CAAC,aAAa,GAAG,aAAa,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK;;;;AAK3F,YAAA,WAAW,CAAC,uBAAuB,GAAG,CAAC,CAAC,OAAO;AAE/C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,SAAC,CAAC;;IAGG,SAAS,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,uCAAuC,CAAC,MAAM,CAAC,CAAC;;;IAI3E,WAAW,GAAA;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,yCAAyC,CAAC,MAAM,CAAC,CAAC;;;IAI7E,GAAG,GAAA;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;IAI5E,SAAS,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,sCAAsC,CAAC,MAAM,CAAC,CAAC;;;AAI1E,IAAA,KAAK,CAAC,MAAyB,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;;8GAzGlF,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1C7C,8wEA6DA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,8BAA8B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK3F,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAC7B,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,8BAA8B,CAAC,EAGtF,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8wEAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA;;;ME1BpC,uCAAuC,CAAA;AAUlD,IAAA,WAAA,GAAA;AATiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEhC,IAAM,CAAA,MAAA,GAAG,KAAK,EAA6B;QAC3C,IAAU,CAAA,UAAA,GAAG,KAAK,EAAgD;QAClE,IAAa,CAAA,aAAA,GAAG,MAAM,EAAU;AAEhC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAmC,SAAS,CAAC;AACrE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAA4B,SAAS,CAAC;QAG/E,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AAEvC,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE;gBACpC;;YAGF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAU,KAAM,CAAwC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC9H,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC;YAC9D,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7F,aAAC,CAAC;AACJ,SAAC,CAAC;;8GAxBO,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,ECdpD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mJAGA,EDMY,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,8BAA8B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK3C,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBAPnD,SAAS;+BACE,oCAAoC,EAAA,OAAA,EACrC,CAAC,YAAY,EAAE,8BAA8B,CAAC,EAAA,eAAA,EAGtC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mJAAA,EAAA;;;MEmBpC,4BAA4B,CAAA;AAmCvC,IAAA,WAAA,GAAA;AAlCiB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE7C,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,8BAA8B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAE7E,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAChC,SAAS,EACT;AACE,YAAA,SAAS,EAAE,CAAC,KAAK,KAAI;gBACnB,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,KAAK;;AAGd,gBAAA,MAAM,MAAM,GAAiC;AAC3C,oBAAA,GAAG;iBACJ;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACxB,oBAAA,MAAM,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;;AAG9C,gBAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC3B,oBAAA,MAAM,CAAC,eAAe,GAAG,2BAA2B;;AAGtD,gBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;AAC7B,oBAAA,MAAM,CAAC,iBAAiB,GAAG,0BAA0B;;AAGvD,gBAAA,OAAO,MAAM;;AAEhB,SAAA,CACF;AACe,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAA4B,EAAE,CAAC;QAGpE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B;;YAGF,MAAM,KAAK,GAA8B,EAAE;AAC3C,YAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU;YACxC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1D,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;oBAChE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGlC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACnF,oBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEpB,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,SAAC,CAAC;;IAGG,SAAS,CAAC,CAAS,EAAE,IAA6B,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;;AAGd,IAAA,MAAM,CAAC,IAA6B,EAAA;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,mCAAmC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;;AAIrF,IAAA,QAAQ,CAAC,IAA6B,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,qCAAqC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;;IAIvF,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;8GA9E5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,oOC/BzC,i7FAiEA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/CI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,6DACd,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gCAAgC,yGAChC,uCAAuC,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAM9B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAhBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EACxB,OAAA,EAAA;wBACP,YAAY;wBACZ,eAAe;wBACf,OAAO;wBACP,cAAc;wBACd,UAAU;wBACV,OAAO;wBACP,gCAAgC;wBAChC;qBACD,EAGgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,i7FAAA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA;;;AE7BjD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-node-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/display-search-dialog.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/search-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-partial-search-results.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/load-children-of-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-node.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/search-status.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/tree-nodes-search.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/selectors.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-nodes-searching.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes-search.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/provide-ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expression-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expression-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-clear-expression-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-init-expression-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expand-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-collapse-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-add-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-delete-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-update-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-collapse-all-expression-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-expand-all-expression-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-add-expression-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-cut-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-paste-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/actions/ngssm-cancel-cut-expression-tree-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/model/ngssm-expression-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/state/ngssm-expression-tree.state.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/tree-node-edition.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/reducers/cut-and-paste.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/provide-ngssm-expression-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.html","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.html","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.html","../../../projects/ngssm-tree/src/public-api.ts","../../../projects/ngssm-tree/src/ngssm-tree.ts"],"sourcesContent":["export enum NgssmTreeActionType {\n initNgssmTree = '[NgssmTreeActionType] initNgssmTree',\n deleteNgssmTree = '[NgssmTreeActionType] deleteNgssmTree',\n expandNode = '[NgssmTreeActionType] expandNode',\n collapseNode = '[NgssmTreeActionType] collapseNode',\n registerNodes = '[NgssmTreeActionType] registerNodes',\n selectNode = '[NgssmTreeActionType] selectNode',\n loadChildrenOfNode = '[NgssmTreeActionType] loadChildrenOfNode',\n displaySearchDialog = '[NgssmTreeActionType] displaySearchDialog',\n closeSearchDialog = '[NgssmTreeActionType] closeSearchDialog',\n searchTreeNodes = '[NgssmTreeActionType] searchTreeNodes',\n registerPartialSearchResults = '[NgssmTreeActionType] registerPartialSearchResults',\n abortTreeNodesSearch = '[NgssmTreeActionType] abortTreeNodesSearch'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(\n public readonly type: string,\n public readonly treeId: string\n ) {}\n}\n","import { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class InitNgssmTreeAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly treeType: string,\n public readonly root: NodeData\n ) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { TreeAction } from './tree-action';\n\nexport class TreeNodeAction extends TreeAction {\n constructor(\n actionType: string,\n treeId: string,\n public readonly nodeId: string\n ) {\n super(actionType, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class ExpandNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId, nodeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { Action } from 'ngssm-store';\n\nimport { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerNodes;\n\n constructor(\n public readonly dataStatus: DataStatus,\n public readonly treeId: string,\n public readonly parentNodeId: string,\n public readonly nodes: NodeData[] = []\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class CollapseNodeAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly nodeId: string\n ) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class SelectNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId, nodeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DeleteNgssmTreeAction extends TreeAction {\n constructor(treeId: string) {\n super(NgssmTreeActionType.deleteNgssmTree, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DisplaySearchDialogAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly startNodeId: string\n ) {\n super(NgssmTreeActionType.displaySearchDialog, treeId);\n }\n}\n","import { Action } from 'ngssm-store';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class SearchTreeNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.searchTreeNodes;\n\n constructor(public readonly searchPattern: string) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmTreeNode } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterPartialSearchResultsAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerPartialSearchResults;\n\n constructor(\n public readonly matchingNodes: NgssmTreeNode[],\n public nodesToProcess: NgssmTreeNode[]\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class LoadChildrenOfNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.loadChildrenOfNode, treeId, nodeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeNode {\n status: DataStatus;\n isExpanded?: boolean;\n level: number;\n parentFullPath?: string;\n\n node: NodeData;\n}\n\nexport const getNgssmTreeNodeFullPath = (node: NgssmTreeNode): string => {\n if (node.parentFullPath) {\n return `${node.parentFullPath}/${node.node.label}`;\n }\n\n return node.node.label;\n};\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n // Component used to display the result of a search\n readonly searchResultViewer?: Type<unknown>;\n load(treeId: string, nodeId: string): Observable<NodeData[]>;\n}\n\nexport const NGSSM_TREE_DATA_SERVICE = new InjectionToken<NgssmTreeDataService>('NGSSM_TREE_DATA_SERVICE');\n","import { NgssmTreeNode } from './ngssm-tree-node';\n\nexport interface NgssmTree {\n nodes: NgssmTreeNode[];\n selectedNode?: string;\n type: string;\n}\n\nexport const getNgssmTreePath = (tree: NgssmTree, nodeId: string): NgssmTreeNode[] => {\n const nodesPerId = new Map<string, NgssmTreeNode>(tree.nodes.map((n) => [n.node.nodeId, n]));\n const path: NgssmTreeNode[] = [];\n let node = nodesPerId.get(nodeId);\n while (node) {\n path.unshift(node);\n node = node.node.parentNodeId ? nodesPerId.get(node.node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]);\n }\n\n return path;\n};\n","export enum SearchStatus {\n none = 'None',\n inProgress = 'In progress',\n done = 'Done',\n aborted = 'Aborted'\n}\n","import { SearchStatus } from '../model';\n\nexport interface TreeNodesSearch {\n treeId?: string;\n rootSearchNodeId?: string;\n rootSearchPath?: string;\n searchPattern?: string;\n searchStatus: SearchStatus;\n toProcess: { nodeId: string; fullPath: string }[];\n matchingNodes: string[];\n}\n\nexport const getDefaultTreeNodesSearch = (): TreeNodesSearch => ({\n searchStatus: SearchStatus.none,\n toProcess: [],\n matchingNodes: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { NgssmTree } from '../model';\nimport { getDefaultTreeNodesSearch, TreeNodesSearch } from './tree-nodes-search';\n\nexport const selectNgssmTreeState = (state: State): NgssmTreeState => state[NgssmTreeStateSpecification.featureStateKey] as NgssmTreeState;\n\nexport const updateNgssmTreeState = (state: State, command: Spec<NgssmTreeState, never>): State =>\n update(state, {\n [NgssmTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmTreeState {\n trees: Record<string, NgssmTree>;\n treeNodesSearch: TreeNodesSearch;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmTreeStateSpecification.featureStateKey,\n initialState: NgssmTreeStateSpecification.initialState\n})\nexport class NgssmTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-tree-state';\n public static readonly initialState: NgssmTreeState = {\n trees: {},\n treeNodesSearch: getDefaultTreeNodesSearch()\n };\n}\n","import { State } from 'ngssm-store';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState } from './ngssm-tree.state';\n\nexport const selectNgssmTreeNode = (state: State, treeId: string, nodeId: string): NgssmTreeNode | undefined =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.find((n) => n.node.nodeId === nodeId);\n\nexport const selectNgssmTreeNodeChildren = (state: State, treeId: string, nodeId: string): NgssmTreeNode[] =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.filter((n) => n.node.parentNodeId === nodeId) ?? [];\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction, TreeNodeAction } from '../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE } from '../model';\nimport { selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeLoadingEffect implements Effect {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.selectNode,\n NgssmTreeActionType.loadChildrenOfNode\n ];\n\n constructor(\n @Inject(NGSSM_TREE_DATA_SERVICE) @Optional() private dataServices: NgssmTreeDataService[],\n private logger: Logger\n ) {}\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const treeNodeAction = action as TreeNodeAction;\n if (!selectNgssmTreeState(state).trees[treeNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${treeNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[treeNodeAction.treeId].type;\n const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);\n if (!dataService) {\n this.logger.error(`Trying to process action for tree with no data service: ${treeNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[treeNodeAction.treeId].nodes.find((n) => n.node.nodeId === treeNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(treeNodeAction.treeId, treeNodeAction.nodeId).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.loaded, treeNodeAction.treeId, treeNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(`Unable to load children nodes for tree '${treeNodeAction.treeId}' and node '${treeNodeAction.nodeId}'`, error);\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.error, treeNodeAction.treeId, treeNodeAction.nodeId));\n }\n });\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTree, NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, DisplaySearchDialogAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\ninterface DisplayedNode {\n node: NgssmTreeNode;\n canSearch: boolean;\n}\n\n@Component({\n selector: 'ngssm-tree',\n imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-tree.component.html',\n styleUrls: ['./ngssm-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeComponent {\n private readonly store = inject(Store);\n private readonly trees = createSignal((state) => selectNgssmTreeState(state).trees);\n private readonly tree = signal<NgssmTree | undefined>(undefined);\n\n public readonly treeConfig = input<NgssmTreeConfig | undefined | null>();\n\n public readonly dataStatus = DataStatus;\n public readonly displayedItems = signal<DisplayedNode[]>([]);\n public readonly selectedNodeId = signal<string | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentConfig = this.treeConfig();\n const currentTrees = this.trees();\n if (currentConfig) {\n this.tree.set(currentTrees[currentConfig.treeId]);\n } else {\n this.tree.set(undefined);\n }\n });\n\n effect(() => {\n const currentTree = this.tree();\n const config = untracked(() => this.treeConfig());\n if (!currentTree || !config) {\n this.displayedItems.set([]);\n return;\n }\n\n const alwaysTrue = () => true;\n const filter: (node: NodeData) => boolean = config.filter ?? alwaysTrue;\n const canSearch: (node: NodeData) => boolean = config.canSearch ?? alwaysTrue;\n\n const items: DisplayedNode[] = [];\n let hiddenLevel = -1;\n const nodesToFindSelected = new Map<string, { isDisplayed: boolean; node: NgssmTreeNode }>();\n (currentTree.nodes ?? []).forEach((t) => {\n if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {\n hiddenLevel = t.level;\n }\n\n if (hiddenLevel === -1 || t.level <= hiddenLevel) {\n if (filter(t.node)) {\n items.push({\n node: t,\n canSearch: canSearch(t.node)\n });\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });\n }\n }\n\n if (t.node.isExpandable && t.level <= hiddenLevel) {\n hiddenLevel = t.isExpanded === true ? -1 : t.level;\n }\n\n if (!nodesToFindSelected.has(t.node.nodeId)) {\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });\n }\n });\n\n this.displayedItems.set(items);\n\n let selectedNode = currentTree.selectedNode;\n if (!selectedNode) {\n this.selectedNodeId.set(undefined);\n } else {\n while (selectedNode) {\n const item = nodesToFindSelected.get(selectedNode);\n if (item?.isDisplayed !== true) {\n selectedNode = item?.node.node.parentNodeId;\n } else {\n break;\n }\n }\n\n this.selectedNodeId.set(selectedNode);\n }\n });\n }\n\n public getItemId(_: number, node: DisplayedNode): string {\n return node.node.node.nodeId;\n }\n\n public expand(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public collapse(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public selectNode(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public displaySearchDialog(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-breadcrumb',\n imports: [CommonModule, MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent {\n private readonly store = inject(Store);\n private readonly treeState = createSignal((state) => selectNgssmTreeState(state));\n\n public readonly treeId = input<string | undefined>(undefined);\n\n public readonly nodes = signal<NodeData[]>([]);\n\n constructor() {\n effect(() => {\n const currentTreeId = this.treeId();\n if (!currentTreeId) {\n this.nodes.set([]);\n return;\n }\n\n const state = this.treeState();\n\n const tree = state?.trees[currentTreeId];\n if (!tree) {\n this.nodes.set([]);\n return;\n }\n\n const nodesPerId = new Map<string, NodeData>(tree.nodes.map((n) => [n.node.nodeId, n.node]));\n const path: NodeData[] = [];\n let node = tree.selectedNode ? nodesPerId.get(tree.selectedNode) : undefined;\n while (node) {\n path.unshift(node);\n node = node.parentNodeId ? nodesPerId.get(node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]?.node);\n }\n\n this.nodes.set(path);\n });\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this.treeId();\n if (treeId) {\n this.store.dispatchAction(new SelectNodeAction(treeId, node.nodeId));\n }\n }\n}\n","<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, ViewContainerRef, ChangeDetectorRef, inject, viewChild, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { selectNgssmTreeState } from '../../state';\nimport { NgssmTreeActionType, SearchTreeNodesAction } from '../../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE, SearchStatus } from '../../model';\n\n@Component({\n selector: 'ngssm-ngssm-tree-search-dialog',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatDialogModule,\n MatButtonModule,\n MatCardModule,\n MatIconModule,\n MatProgressSpinnerModule\n ],\n templateUrl: './ngssm-tree-search-dialog.component.html',\n styleUrls: ['./ngssm-tree-search-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeSearchDialogComponent {\n private readonly store = inject(Store);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly dataServices: NgssmTreeDataService[] = inject(NGSSM_TREE_DATA_SERVICE, {\n optional: true\n }) as unknown as NgssmTreeDataService[];\n\n public readonly resultsViewerContainer = viewChild('resultsViewerContainer', { read: ViewContainerRef });\n\n public readonly searchStatus = SearchStatus;\n public readonly searchRootPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.rootSearchPath ?? '');\n public readonly currentSearchedPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.toProcess[0]?.fullPath ?? '');\n public readonly currentSearchStatus = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.searchStatus);\n\n public readonly searchPatternControl = new FormControl<string | undefined>(undefined, [\n Validators.required,\n (c) => this.validatedRegex(c)\n ]);\n\n constructor() {\n const effectRef = effect(() => {\n const container = this.resultsViewerContainer();\n if (!container) {\n return;\n }\n\n const treeState = selectNgssmTreeState(this.store.state());\n const treeId = treeState.treeNodesSearch.treeId;\n if (!treeId) {\n return;\n }\n\n const treeType = treeState.trees[treeId]?.type;\n if (!treeType) {\n return;\n }\n\n const dataService = this.dataServices.find((d) => d.treeType === treeType);\n if (!dataService?.searchResultViewer) {\n return;\n }\n\n this.resultsViewerContainer()?.createComponent(dataService.searchResultViewer);\n this.changeDetectorRef.markForCheck();\n\n effectRef.destroy();\n });\n }\n\n public close(): void {\n this.store.dispatchActionType(NgssmTreeActionType.closeSearchDialog);\n }\n\n public search(): void {\n const searchPattern = this.searchPatternControl.value;\n if (searchPattern) {\n this.store.dispatchAction(new SearchTreeNodesAction(searchPattern));\n }\n }\n\n public abort(): void {\n this.store.dispatchActionType(NgssmTreeActionType.abortTreeNodesSearch);\n }\n\n private validatedRegex(control: AbstractControl): ValidationErrors | null {\n const result = defaultRegexEditorValidator.validatePattern(control.value);\n if (result.isValid) {\n return null;\n }\n\n return {\n regex: result.error\n };\n }\n}\n","<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { LoadChildrenOfNodeAction, NgssmTreeActionType, RegisterPartialSearchResultsAction } from '../actions';\nimport { NgssmTreeSearchDialogComponent } from '../components';\nimport { NgssmTreeNode, SearchStatus } from '../model';\nimport { selectNgssmTreeNode, selectNgssmTreeNodeChildren, selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchingEffect implements Effect {\n private dialog: MatDialogRef<NgssmTreeSearchDialogComponent> | undefined;\n\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerNodes,\n NgssmTreeActionType.registerPartialSearchResults\n ];\n\n constructor(\n private matDialog: MatDialog,\n private logger: Logger\n ) {}\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n this.dialog = this.matDialog.open(NgssmTreeSearchDialogComponent, {\n disableClose: true,\n width: '80vw',\n height: '80vh'\n });\n\n break;\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n this.closeDialog();\n\n break;\n }\n\n case NgssmTreeActionType.searchTreeNodes:\n case NgssmTreeActionType.registerNodes:\n case NgssmTreeActionType.registerPartialSearchResults: {\n const searchState = selectNgssmTreeState(state).treeNodesSearch;\n if (!searchState.treeId || !searchState.rootSearchNodeId || searchState.searchStatus !== SearchStatus.inProgress) {\n return;\n }\n\n if (searchState.toProcess.length === 0) {\n return;\n }\n\n const currentNode = selectNgssmTreeNode(state, searchState.treeId, searchState.toProcess[0].nodeId);\n if (!currentNode) {\n this.logger.error(`No node for treeId '${searchState.treeId}' with id '${searchState.toProcess[0].nodeId}'.`);\n return;\n }\n\n if (currentNode.node.isExpandable && currentNode.status !== DataStatus.loaded && currentNode.status !== DataStatus.loading) {\n actiondispatcher.dispatchAction(new LoadChildrenOfNodeAction(searchState.treeId, currentNode.node.nodeId));\n return;\n }\n\n const childrenNodes = selectNgssmTreeNodeChildren(state, searchState.treeId, currentNode.node.nodeId);\n const matching: NgssmTreeNode[] = [];\n const toProcess: NgssmTreeNode[] = [];\n childrenNodes.forEach((node) => {\n const fullPath = `${node.parentFullPath}/${node.node.label}`;\n if (defaultRegexEditorValidator.isMatch(searchState.searchPattern ?? '', fullPath)) {\n matching.push(node);\n }\n\n if (node.node.isExpandable) {\n toProcess.push(node);\n }\n });\n\n actiondispatcher.dispatchAction(new RegisterPartialSearchResultsAction(matching, toProcess));\n\n break;\n }\n }\n }\n\n private closeDialog(): void {\n this.dialog?.close();\n this.dialog = undefined;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, LoadChildrenOfNodeAction, NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.collapseNode,\n NgssmTreeActionType.selectNode,\n NgssmTreeActionType.loadChildrenOfNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.expandNode: {\n const expandNodeAction = action as ExpandNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [expandNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status === DataStatus.loaded) {\n item = update(result[index], {\n isExpanded: { $set: true }\n });\n } else {\n item = update(result[index], {\n isExpanded: { $set: true },\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.collapseNode: {\n const collapseNodeAction = action as CollapseNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [collapseNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === collapseNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n isExpanded: { $set: false }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n if (\n selectNgssmTreeState(state).trees[selectNodeAction.treeId].nodes.find((n) => n.node.nodeId === selectNodeAction.nodeId)\n ?.status === DataStatus.loaded\n ) {\n break;\n }\n\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === selectNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.loadChildrenOfNode: {\n const loadChildrenOfNodeAction = action as LoadChildrenOfNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [loadChildrenOfNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === loadChildrenOfNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status !== DataStatus.loaded) {\n item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeSelectionReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.selectNode];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n selectedNode: { $set: selectNodeAction.nodeId }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplaySearchDialogAction, NgssmTreeActionType, RegisterPartialSearchResultsAction, SearchTreeNodesAction } from '../actions';\nimport { getNgssmTreeNodeFullPath, getNgssmTreePath, SearchStatus } from '../model';\nimport { getDefaultTreeNodesSearch, selectNgssmTreeNode, selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerPartialSearchResults,\n NgssmTreeActionType.abortTreeNodesSearch\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n const displaySearchDialogAction = action as DisplaySearchDialogAction;\n const path = getNgssmTreePath(\n selectNgssmTreeState(state).trees[displaySearchDialogAction.treeId],\n displaySearchDialogAction.startNodeId\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n treeId: { $set: displaySearchDialogAction.treeId },\n rootSearchNodeId: { $set: displaySearchDialogAction.startNodeId },\n rootSearchPath: { $set: path.map((p) => p.node.label).join('/') }\n }\n });\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: { $set: getDefaultTreeNodesSearch() }\n });\n }\n\n case NgssmTreeActionType.searchTreeNodes: {\n const searchTreeNodesAction = action as SearchTreeNodesAction;\n const startNode = selectNgssmTreeNode(\n state,\n selectNgssmTreeState(state).treeNodesSearch.treeId ?? '',\n selectNgssmTreeState(state).treeNodesSearch.rootSearchNodeId ?? ''\n );\n const toBeProcess: { nodeId: string; fullPath: string }[] = [];\n if (startNode) {\n toBeProcess.push({ nodeId: startNode.node.nodeId, fullPath: getNgssmTreeNodeFullPath(startNode) });\n }\n\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchPattern: { $set: searchTreeNodesAction.searchPattern },\n searchStatus: { $set: SearchStatus.inProgress },\n toProcess: { $set: toBeProcess },\n matchingNodes: { $set: [] }\n }\n });\n }\n\n case NgssmTreeActionType.registerPartialSearchResults: {\n const registerPartialSearchResultsAction = action as RegisterPartialSearchResultsAction;\n const toProcess: { nodeId: string; fullPath: string }[] = selectNgssmTreeState(state).treeNodesSearch.toProcess.slice(1);\n toProcess.push(\n ...registerPartialSearchResultsAction.nodesToProcess.map((n) => ({\n nodeId: n.node.nodeId,\n fullPath: getNgssmTreeNodeFullPath(n)\n }))\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: {\n $apply: (value) => {\n if (toProcess.length === 0) {\n return SearchStatus.done;\n }\n\n return value;\n }\n },\n toProcess: { $set: toProcess },\n matchingNodes: { $push: registerPartialSearchResultsAction.matchingNodes.map((n) => n.node.nodeId) }\n }\n });\n }\n\n case NgssmTreeActionType.abortTreeNodesSearch: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: { $set: SearchStatus.aborted },\n toProcess: { $set: [] }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.registerNodes];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.registerNodes: {\n const registerNodesAction = action as RegisterNodesAction;\n return updateNgssmTreeState(state, {\n trees: {\n [registerNodesAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const index = nodes.findIndex((n) => n.node.nodeId === registerNodesAction.parentNodeId);\n if (index === -1) {\n return nodes;\n }\n\n return [\n ...nodes.slice(0, index),\n update(nodes[index], { status: { $set: registerNodesAction.dataStatus } }),\n ...registerNodesAction.nodes.map((i) => ({\n status: DataStatus.none,\n isExpanded: false,\n level: nodes[index].level + 1,\n node: i,\n parentFullPath:\n nodes[index].parentFullPath !== undefined\n ? `${nodes[index].parentFullPath}/${nodes[index].node.label}`\n : nodes[index].node.label\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DeleteNgssmTreeAction, InitNgssmTreeAction, NgssmTreeActionType } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.initNgssmTree, NgssmTreeActionType.deleteNgssmTree];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.initNgssmTree: {\n const initNgssmTreeAction = action as InitNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [initNgssmTreeAction.treeId]: {\n $set: {\n nodes: [\n {\n status: DataStatus.none,\n isExpanded: false,\n level: 0,\n node: initNgssmTreeAction.root\n }\n ],\n type: initNgssmTreeAction.treeType\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.deleteNgssmTree: {\n const deleteNgssmTreeAction = action as DeleteNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: { $unset: [deleteNgssmTreeAction.treeId] }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffects, provideReducers } from 'ngssm-store';\n\nimport { TreeNodeLoadingEffect } from './effects/tree-node-loading.effect';\nimport { TreeNodesSearchingEffect } from './effects/tree-nodes-searching.effect';\nimport { TreeNodeExpandReducer } from './reducers/tree-node-expand.reducer';\nimport { TreeNodeSelectionReducer } from './reducers/tree-node-selection.reducer';\nimport { TreeNodesSearchReducer } from './reducers/tree-nodes-search.reducer';\nimport { TreeNodesReducer } from './reducers/tree-nodes.reducer';\nimport { TreesReducer } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(TreeNodeExpandReducer, TreeNodeSelectionReducer, TreeNodesSearchReducer, TreeNodesReducer, TreesReducer),\n provideEffects(TreeNodeLoadingEffect, TreeNodesSearchingEffect)\n ]);\n};\n","export enum NgssmExpressionTreeActionType {\n // List of trees management\n ngssmInitExpressionTree = '[NgssmExpressionTreeActionType] ngssmInitExpressionTree',\n ngssmClearExpressionTree = '[NgssmExpressionTreeActionType] ngssmClearExpressionTree',\n\n // Manage expand/collapse\n ngssmCollapseExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmCollapseExpressionTreeNode',\n ngssmExpandExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmExpandExpressionTreeNode',\n ngssmCollapseAllExpressionTreeNodes = '[NgssmExpressionTreeActionType] ngssmCollapseAllExpressionTreeNodes',\n ngssmExpandAllExpressionTreeNodes = '[NgssmExpressionTreeActionType] ngssmExpandAllExpressionTreeNodes',\n\n // Node edition\n ngssmAddExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmAddExpressionTreeNode',\n ngssmAddExpressionTreeNodes = '[NgssmExpressionTreeActionType] ngssmAddExpressionTreeNodes',\n ngssmDeleteExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmDeleteExpressionTreeNode',\n ngssmUpdateExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmUpdateExpressionTreeNode',\n\n // Cut/Paste\n ngssmCutExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmCutExpressionTreeNode',\n ngssmPasteExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmPasteExpressionTreeNode',\n ngssmCancelCutExpressionTreeNode = '[NgssmExpressionTreeActionType] ngssmCancelCutExpressionTreeNode'\n}\n","import { Action } from 'ngssm-store';\n\nexport class NgssmExpressionTreeAction implements Action {\n constructor(\n public readonly type: string,\n public readonly treeId: string\n ) {}\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmClearExpressionTreeAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmClearExpressionTree, treeId);\n }\n}\n","import { NgssmNode } from '../model';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmInitExpressionTreeAction<TData = unknown> extends NgssmExpressionTreeAction {\n constructor(\n treeId: string,\n public readonly nodes: NgssmNode<TData>[]\n ) {\n super(NgssmExpressionTreeActionType.ngssmInitExpressionTree, treeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmExpressionTreeNodeAction extends NgssmExpressionTreeAction {\n constructor(\n type: string,\n treeId: string,\n public readonly nodeId: string\n ) {\n super(type, treeId);\n }\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\n\nexport class NgssmExpandExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmExpandExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\n\nexport class NgssmCollapseExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCollapseExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmNode } from '../model';\n\nexport class NgssmAddExpressionTreeNodeAction<TData = unknown> extends NgssmExpressionTreeAction {\n constructor(\n treeId: string,\n public readonly node: NgssmNode<TData>\n ) {\n super(NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode, treeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmDeleteExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmUpdateExpressionTreeNodeAction<TData = unknown> extends NgssmExpressionTreeNodeAction {\n constructor(\n treeId: string,\n nodeId: string,\n public readonly data: TData\n ) {\n super(NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmCollapseAllExpressionTreeNodesAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCollapseAllExpressionTreeNodes, treeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmExpandAllExpressionTreeNodesAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmExpandAllExpressionTreeNodes, treeId);\n }\n}\n","import { NgssmNode } from '../model';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\n\nexport class NgssmAddExpressionTreeNodesAction<TData = unknown> extends NgssmExpressionTreeAction {\n constructor(\n treeId: string,\n public readonly nodes: NgssmNode<TData>[]\n ) {\n super(NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes, treeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmCutExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCutExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeNodeAction } from './ngssm-expression-tree-node.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\nimport { CutAndPasteTarget } from '../model';\n\nexport class NgssmPasteExpressionTreeNodeAction extends NgssmExpressionTreeNodeAction {\n constructor(\n treeId: string,\n nodeId: string,\n public readonly target: CutAndPasteTarget\n ) {\n super(NgssmExpressionTreeActionType.ngssmPasteExpressionTreeNode, treeId, nodeId);\n }\n}\n","import { NgssmExpressionTreeAction } from './ngssm-expression-tree.action';\nimport { NgssmExpressionTreeActionType } from './ngssm-expression-tree-action-type';\n\nexport class NgssmCancelCutExpressionTreeNodeAction extends NgssmExpressionTreeAction {\n constructor(treeId: string) {\n super(NgssmExpressionTreeActionType.ngssmCancelCutExpressionTreeNode, treeId);\n }\n}\n","import { NgssmExpressionTreeData } from './ngssm-expression-tree-data';\nimport { NgssmExpressionTreeNode } from './ngssm-expression-tree-node';\nimport { NgssmNode } from './ngssm-node';\n\nexport interface NgssmExpressionTree<TData = unknown> {\n nodes: NgssmExpressionTreeNode<TData>[];\n data: NgssmExpressionTreeData<TData>;\n nodeCut?: NgssmExpressionTreeNode<TData>;\n}\n\nexport const createNgssmExpressionTreeFromNodes = <TData = unknown>(nodes: NgssmNode<TData>[]): NgssmExpressionTree<TData> => {\n const tree: NgssmExpressionTree<TData> = {\n nodes: [],\n data: {}\n };\n\n let path: string[] = [];\n nodes.forEach((node) => {\n if (!node.parentId) {\n path = [];\n } else {\n const parentIdIndex = path.indexOf(node.parentId);\n if (parentIdIndex === -1) {\n path.push(node.parentId);\n } else {\n path.splice(parentIdIndex + 1);\n }\n }\n\n tree.nodes.push({\n path: [...path],\n data: node,\n isExpanded: node.isExpandable === true\n });\n\n tree.data[node.id] = node.data;\n });\n\n return tree;\n};\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmExpressionTree } from '../model';\n\nexport const selectNgssmExpressionTreeState = (state: State): NgssmExpressionTreeState =>\n state[NgssmExpressionTreeStateSpecification.featureStateKey] as NgssmExpressionTreeState;\n\nexport const updateNgssmExpressionTreeState = (state: State, command: Spec<NgssmExpressionTreeState, never>): State =>\n update(state, {\n [NgssmExpressionTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmExpressionTreeState {\n trees: Record<string, NgssmExpressionTree>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmExpressionTreeStateSpecification.featureStateKey,\n initialState: NgssmExpressionTreeStateSpecification.initialState\n})\nexport class NgssmExpressionTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-expression-tree-state';\n public static readonly initialState: NgssmExpressionTreeState = {\n trees: {}\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmClearExpressionTreeAction, NgssmExpressionTreeActionType, NgssmInitExpressionTreeAction } from '../actions';\nimport { createNgssmExpressionTreeFromNodes } from '../model';\nimport { updateNgssmExpressionTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmInitExpressionTree,\n NgssmExpressionTreeActionType.ngssmClearExpressionTree\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmInitExpressionTree: {\n const ngssmInitExpressionTreeAction = action as NgssmInitExpressionTreeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmInitExpressionTreeAction.treeId]: {\n $set: createNgssmExpressionTreeFromNodes(ngssmInitExpressionTreeAction.nodes)\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmClearExpressionTree: {\n const ngssmClearExpressionTreeAction = action as NgssmClearExpressionTreeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n $unset: [ngssmClearExpressionTreeAction.treeId]\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmCollapseAllExpressionTreeNodesAction,\n NgssmCollapseExpressionTreeNodeAction,\n NgssmExpandAllExpressionTreeNodesAction,\n NgssmExpandExpressionTreeNodeAction,\n NgssmExpressionTreeActionType\n} from '../actions';\nimport { NgssmExpressionTreeNode } from '../model';\nimport { updateNgssmExpressionTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmExpandExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmCollapseExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmCollapseAllExpressionTreeNodes,\n NgssmExpressionTreeActionType.ngssmExpandAllExpressionTreeNodes\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmExpandExpressionTreeNode: {\n const ngssmExpandExpressionTreeNodeAction = action as NgssmExpandExpressionTreeNodeAction;\n return this.setIsExpanded(state, ngssmExpandExpressionTreeNodeAction.treeId, ngssmExpandExpressionTreeNodeAction.nodeId, true);\n }\n\n case NgssmExpressionTreeActionType.ngssmCollapseExpressionTreeNode: {\n const ngssmCollapseExpressionTreeNodeAction = action as NgssmCollapseExpressionTreeNodeAction;\n return this.setIsExpanded(state, ngssmCollapseExpressionTreeNodeAction.treeId, ngssmCollapseExpressionTreeNodeAction.nodeId, false);\n }\n\n case NgssmExpressionTreeActionType.ngssmCollapseAllExpressionTreeNodes: {\n const ngssmExpressionTreeAction = action as NgssmCollapseAllExpressionTreeNodesAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmExpressionTreeAction.treeId]: {\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [];\n values.forEach((value) =>\n output.push({\n ...value,\n isExpanded: false\n })\n );\n\n return output;\n }\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmExpandAllExpressionTreeNodes: {\n const ngssmExpressionTreeAction = action as NgssmExpandAllExpressionTreeNodesAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmExpressionTreeAction.treeId]: {\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [];\n values.forEach((value) =>\n output.push({\n ...value,\n isExpanded: true\n })\n );\n\n return output;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n\n private setIsExpanded(state: State, treeId: string, nodeId: string, isExpanded: boolean): State {\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [treeId]: {\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output = [...values];\n const index = output.findIndex((n) => n.data.id === nodeId);\n if (index !== -1) {\n output.splice(index, 1, update(output[index], { isExpanded: { $set: isExpanded } }));\n }\n\n return output;\n }\n }\n }\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmAddExpressionTreeNodeAction,\n NgssmAddExpressionTreeNodesAction,\n NgssmDeleteExpressionTreeNodeAction,\n NgssmExpressionTreeActionType,\n NgssmUpdateExpressionTreeNodeAction\n} from '../actions';\nimport { selectNgssmExpressionTreeState, updateNgssmExpressionTreeState } from '../state';\nimport { NgssmExpressionTreeData, NgssmExpressionTreeNode, NgssmNode } from '../model';\n\n@Injectable()\nexport class TreeNodeEditionReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode: {\n const ngssmAddExpressionTreeNodeAction = action as NgssmAddExpressionTreeNodeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmAddExpressionTreeNodeAction.treeId]: {\n data: {\n [ngssmAddExpressionTreeNodeAction.node.id]: { $set: ngssmAddExpressionTreeNodeAction.node.data }\n },\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [...values];\n this.addNodeToList(ngssmAddExpressionTreeNodeAction.node, output);\n return output;\n }\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes: {\n const ngssmAddExpressionTreeNodesAction = action as NgssmAddExpressionTreeNodesAction;\n const newProps: NgssmExpressionTreeData = {};\n ngssmAddExpressionTreeNodesAction.nodes.forEach((node) => (newProps[node.id] = node.data));\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmAddExpressionTreeNodesAction.treeId]: {\n data: { $merge: newProps },\n nodes: {\n $apply: (values: NgssmExpressionTreeNode[]) => {\n const output: NgssmExpressionTreeNode[] = [...values];\n ngssmAddExpressionTreeNodesAction.nodes.forEach((node) => this.addNodeToList(node, output));\n return output;\n }\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode: {\n const ngssmDeleteExpressionTreeNodeAction = action as NgssmDeleteExpressionTreeNodeAction;\n const nodeIdsToDelete: string[] = selectNgssmExpressionTreeState(state)\n .trees[ngssmDeleteExpressionTreeNodeAction.treeId].nodes.filter((n) =>\n n.path.includes(ngssmDeleteExpressionTreeNodeAction.nodeId)\n )\n .map((n) => n.data.id);\n nodeIdsToDelete.push(ngssmDeleteExpressionTreeNodeAction.nodeId);\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmDeleteExpressionTreeNodeAction.treeId]: {\n nodes: { $apply: (values: NgssmExpressionTreeNode[]) => values.filter((v) => !nodeIdsToDelete.includes(v.data.id)) },\n data: { $unset: nodeIdsToDelete }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode: {\n const ngssmUpdateExpressionTreeNodeAction = action as NgssmUpdateExpressionTreeNodeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmUpdateExpressionTreeNodeAction.treeId]: {\n data: {\n [ngssmUpdateExpressionTreeNodeAction.nodeId]: { $set: ngssmUpdateExpressionTreeNodeAction.data }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n\n private addNodeToList(node: NgssmNode, nodeList: NgssmExpressionTreeNode[]): void {\n if (node.parentId === undefined) {\n nodeList.push({\n path: [],\n data: node,\n isExpanded: true\n });\n return;\n }\n\n let parentNode: NgssmExpressionTreeNode | undefined;\n let insertionIndex = -1;\n for (let i = 0; i < nodeList.length; i++) {\n if (parentNode) {\n if (nodeList[i].path.includes(node.parentId)) {\n insertionIndex = i + 1;\n } else {\n break;\n }\n\n continue;\n }\n\n if (nodeList[i].data.id === node.parentId) {\n parentNode = nodeList[i];\n insertionIndex = i + 1;\n continue;\n }\n }\n\n if (!parentNode || insertionIndex === -1) {\n throw new Error('Invalid parent id');\n }\n\n nodeList.splice(insertionIndex, 0, {\n path: [...parentNode.path, parentNode.data.id],\n data: node,\n isExpanded: true\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmCancelCutExpressionTreeNodeAction,\n NgssmCutExpressionTreeNodeAction,\n NgssmExpressionTreeActionType,\n NgssmPasteExpressionTreeNodeAction\n} from '../actions';\nimport { selectNgssmExpressionTreeState, updateNgssmExpressionTreeState } from '../state';\nimport { NgssmExpressionTreeNode } from '../model';\n\n@Injectable()\nexport class CutAndPasteReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmExpressionTreeActionType.ngssmCutExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmCancelCutExpressionTreeNode,\n NgssmExpressionTreeActionType.ngssmPasteExpressionTreeNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmExpressionTreeActionType.ngssmCutExpressionTreeNode: {\n const ngssmCutExpressionTreeNodeAction = action as NgssmCutExpressionTreeNodeAction;\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmCutExpressionTreeNodeAction.treeId]: {\n nodeCut: {\n $set: selectNgssmExpressionTreeState(state).trees[ngssmCutExpressionTreeNodeAction.treeId]?.nodes.find(\n (n) => n.data.id === ngssmCutExpressionTreeNodeAction.nodeId\n )\n }\n }\n }\n });\n }\n\n case NgssmExpressionTreeActionType.ngssmCancelCutExpressionTreeNode: {\n const ngssmCancelCutExpressionTreeNodeAction = action as NgssmCancelCutExpressionTreeNodeAction;\n return this.resetCutAndPaste(state, ngssmCancelCutExpressionTreeNodeAction.treeId);\n }\n\n case NgssmExpressionTreeActionType.ngssmPasteExpressionTreeNode: {\n const ngssmPasteExpressionTreeNodeAction = action as NgssmPasteExpressionTreeNodeAction;\n const tree = selectNgssmExpressionTreeState(state).trees[ngssmPasteExpressionTreeNodeAction.treeId];\n const cutNode = tree.nodeCut;\n if (!cutNode) {\n return state;\n }\n\n const currentIndex = tree.nodes.findIndex((n) => n.data.id === cutNode.data.id);\n if (currentIndex === -1) {\n return this.resetCutAndPaste(state, ngssmPasteExpressionTreeNodeAction.treeId);\n }\n\n const targetNode = tree.nodes.find((n) => n.data.id === ngssmPasteExpressionTreeNodeAction.nodeId);\n if (!targetNode) {\n return this.resetCutAndPaste(state, ngssmPasteExpressionTreeNodeAction.treeId);\n }\n\n let targetIndex = tree.nodes.findIndex((n) => n.data.id === ngssmPasteExpressionTreeNodeAction.nodeId);\n if (ngssmPasteExpressionTreeNodeAction.target === 'Inside') {\n targetIndex = targetIndex + 1;\n } else {\n for (let index = targetIndex; index < tree.nodes.length; index++) {\n if (!(tree.nodes[index + 1]?.path ?? []).includes(ngssmPasteExpressionTreeNodeAction.nodeId)) {\n targetIndex = index + 1;\n break;\n }\n }\n }\n\n const newBasePath =\n ngssmPasteExpressionTreeNodeAction.target === 'After' ? targetNode.path : [...targetNode.path, targetNode.data.id];\n const pathPartsToRemove = cutNode.path.length;\n if (newBasePath === cutNode.path && currentIndex === targetIndex) {\n return this.resetCutAndPaste(state, ngssmPasteExpressionTreeNodeAction.treeId);\n }\n\n const movedNode = update(cutNode, {\n path: { $set: newBasePath },\n data: {\n parentId: { $set: ngssmPasteExpressionTreeNodeAction.target === 'After' ? targetNode.data.parentId : targetNode.data.id }\n }\n });\n\n const nodesToMove: NgssmExpressionTreeNode[] = tree.nodes\n .filter((n) => n.path.includes(cutNode.data.id))\n .map((node) => ({\n ...node,\n path: [...newBasePath, ...node.path.slice(pathPartsToRemove)]\n }));\n\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [ngssmPasteExpressionTreeNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmExpressionTreeNode[]) => {\n const output = [...nodes];\n if (targetIndex > currentIndex) {\n output.splice(targetIndex, 0, movedNode, ...nodesToMove);\n output.splice(currentIndex, nodesToMove.length + 1);\n return output;\n }\n\n output.splice(currentIndex, nodesToMove.length + 1);\n output.splice(targetIndex, 0, movedNode, ...nodesToMove);\n\n return output;\n }\n },\n nodeCut: { $set: undefined }\n }\n }\n });\n }\n }\n\n return state;\n }\n\n private resetCutAndPaste(state: State, treeId: string): State {\n return updateNgssmExpressionTreeState(state, {\n trees: {\n [treeId]: { $unset: ['nodeCut'] }\n }\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideReducers } from 'ngssm-store';\n\nimport { CutAndPasteReducer, TreeNodeEditionReducer, TreeNodeExpandReducer, TreesReducer } from './reducers';\n\nexport const provideNgssmExpressionTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([provideReducers(CutAndPasteReducer, TreeNodeEditionReducer, TreeNodeExpandReducer, TreesReducer)]);\n};\n","import { Component, ChangeDetectionStrategy, Type, inject, input, signal, effect, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmExpressionTreeConfig, NgssmExpressionTreeCustomComponent, CutAndPasteTarget, NgssmExpressionTree } from '../../model';\nimport { selectNgssmExpressionTreeState } from '../../state';\nimport {\n NgssmCancelCutExpressionTreeNodeAction,\n NgssmCollapseAllExpressionTreeNodesAction,\n NgssmCutExpressionTreeNodeAction,\n NgssmExpandAllExpressionTreeNodesAction,\n NgssmPasteExpressionTreeNodeAction\n} from '../../actions';\n\ninterface CutAndPaste {\n isCutAndPasteInProgress: boolean;\n isPartOfCut: boolean;\n canCut: boolean;\n canPasteInside: boolean;\n canPasteAfter: boolean;\n}\n\nconst getDefaultCutAndPaste = (): CutAndPaste => ({\n isCutAndPasteInProgress: false,\n isPartOfCut: false,\n canCut: false,\n canPasteInside: false,\n canPasteAfter: false\n});\n\n@Component({\n selector: 'ngssm-expression-tree-node',\n imports: [CommonModule, MatIconModule, MatMenuModule, MatDividerModule, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-expression-tree-node.component.html',\n styleUrls: ['./ngssm-expression-tree-node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmExpressionTreeNodeComponent {\n private readonly store = inject(Store);\n private readonly trees = createSignal((state) => selectNgssmExpressionTreeState(state).trees);\n private readonly tree = signal<NgssmExpressionTree | undefined>(undefined);\n\n public readonly nodeId = input<string | null | undefined>();\n public readonly treeConfig = input<NgssmExpressionTreeConfig | null | undefined>(undefined);\n\n public readonly nodeLabel = signal<string>('');\n public readonly nodeCssIcon = signal<string | undefined>(undefined);\n public readonly nodeDescription = signal<string | undefined>(undefined);\n public readonly cutAndPaste = signal<CutAndPaste>(getDefaultCutAndPaste());\n public readonly componentAction = signal<NgssmComponentAction | undefined>(undefined);\n public readonly componentToDisplay = signal<Type<unknown> | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentNodeId = this.nodeId();\n const config = this.treeConfig();\n if (!currentNodeId || !config) {\n this.tree.set(undefined);\n return;\n }\n\n this.tree.set(this.trees()[config.treeId]);\n });\n\n effect(() => {\n const currentNodeId = this.nodeId();\n const config = this.treeConfig();\n if (!currentNodeId || !config) {\n return;\n }\n\n this.componentAction.set((c: unknown) => (c as NgssmExpressionTreeCustomComponent).setup(config.treeId, currentNodeId));\n this.componentToDisplay.set(config.nodeDescriptionComponent);\n });\n\n effect(() => {\n const currentTree = this.tree();\n const currentNodeId = untracked(() => this.nodeId());\n const currentConfig = untracked(() => this.treeConfig());\n if (!currentNodeId || !currentTree || !currentConfig) {\n return;\n }\n\n const node = currentTree.nodes.find((v) => v.data.id === currentNodeId);\n const nodeValue = currentTree.data[currentNodeId];\n const cutAndPaste: CutAndPaste = getDefaultCutAndPaste();\n const nodeCut = currentTree.nodeCut;\n if (node && currentConfig && nodeValue) {\n this.nodeLabel.set(currentConfig.getNodeLabel?.(node, nodeValue) ?? '');\n this.nodeCssIcon.set(currentConfig.getNodeCssIcon?.(node, nodeValue) ?? undefined);\n this.nodeDescription.set(currentConfig.getNodeDescription?.(node, nodeValue));\n cutAndPaste.canCut = currentConfig.canCut?.(node) ?? true;\n\n if (nodeCut) {\n cutAndPaste.isPartOfCut = nodeCut.data.id === node.data.id || node.path.includes(nodeCut.data.id);\n\n if (!cutAndPaste.isPartOfCut) {\n cutAndPaste.canPasteInside = currentConfig.canPaste?.(nodeCut, node, 'Inside') ?? false;\n cutAndPaste.canPasteAfter = currentConfig.canPaste?.(nodeCut, node, 'After') ?? false;\n }\n }\n }\n\n cutAndPaste.isCutAndPasteInProgress = !!nodeCut;\n\n this.cutAndPaste.set(cutAndPaste);\n });\n }\n\n public expandAll(): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmExpandAllExpressionTreeNodesAction(treeId));\n }\n }\n\n public collapseAll(): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmCollapseAllExpressionTreeNodesAction(treeId));\n }\n }\n\n public cut(): void {\n const treeId = this.treeConfig()?.treeId;\n const nodeId = this.nodeId();\n if (treeId && nodeId) {\n this.store.dispatchAction(new NgssmCutExpressionTreeNodeAction(treeId, nodeId));\n }\n }\n\n public cancelCut(): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmCancelCutExpressionTreeNodeAction(treeId));\n }\n }\n\n public paste(target: CutAndPasteTarget): void {\n const treeId = this.treeConfig()?.treeId;\n const nodeId = this.nodeId();\n if (treeId && nodeId) {\n this.store.dispatchAction(new NgssmPasteExpressionTreeNodeAction(treeId, nodeId, target));\n }\n }\n}\n","@if (nodeCssIcon(); as css) {\n <div class=\"ngssm-expression-tree-node-icon\" id=\"treeNodeIcon\">\n <mat-icon class=\"{{ css }}\"></mat-icon>\n </div>\n}\n\n<div\n class=\"ngssm-expression-tree-node-label\"\n [matMenuTriggerFor]=\"contextMenu\"\n [class.ngssm-expression-tree-node-to-cut]=\"cutAndPaste().isPartOfCut === true\"\n id=\"treeNodeLabel\">\n {{ nodeLabel() }}\n</div>\n\n<div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"nodeDescription()\"></div>\n\n@let component = componentToDisplay();\n@if (component) {\n <div\n class=\"ngssm-expression-tree-node-description-component\"\n [ngssmComponentDisplay]=\"component\"\n [ngssmComponentAction]=\"componentAction()\"></div>\n}\n\n<mat-menu #contextMenu=\"matMenu\" [class]=\"'ngssm-expression-tree-popup-menu'\">\n @let cutAndPasteSetup = cutAndPaste();\n @if (treeConfig()?.displayCutAndPasteMenus === true && cutAndPasteSetup) {\n <div class=\"flex-column-stretch\">\n @if (cutAndPasteSetup.isCutAndPasteInProgress === false) {\n <button mat-menu-item (click)=\"cut()\" [disabled]=\"cutAndPasteSetup.canCut !== true\">\n <mat-icon class=\"fa-solid fa-scissors\"></mat-icon>\n <span>Cut</span>\n </button>\n } @else {\n <button mat-menu-item (click)=\"cancelCut()\">\n <mat-icon class=\"fa-solid fa-slash\"></mat-icon>\n <span>Cancel cut</span>\n </button>\n }\n\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteInside !== true\" (click)=\"paste('Inside')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste inside</span>\n </button>\n <button mat-menu-item [disabled]=\"cutAndPasteSetup.canPasteAfter !== true\" (click)=\"paste('After')\">\n <mat-icon class=\"fa-solid fa-paste\"></mat-icon>\n <span>Paste after</span>\n </button>\n <mat-divider></mat-divider>\n </div>\n }\n\n <button mat-menu-item (click)=\"expandAll()\">\n <mat-icon class=\"fa-solid fa-up-right-and-down-left-from-center\"></mat-icon>\n <span>Expand all</span>\n </button>\n <button mat-menu-item (click)=\"collapseAll()\">\n <mat-icon class=\"fa-solid fa-down-left-and-up-right-to-center\"></mat-icon>\n <span>Collapse all</span>\n </button>\n</mat-menu>\n","import { Component, ChangeDetectionStrategy, ElementRef, Type, input, output, inject, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmExpressionTreeConfig, NgssmExpressionTreeCustomComponent } from '../../model';\n\n@Component({\n selector: 'ngssm-expression-tree-node-details',\n imports: [CommonModule, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-expression-tree-node-details.component.html',\n styleUrls: ['./ngssm-expression-tree-node-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmExpressionTreeNodeDetailsComponent {\n private readonly elementRef = inject(ElementRef);\n\n public readonly nodeId = input<string | null | undefined>();\n public readonly treeConfig = input<NgssmExpressionTreeConfig | null | undefined>();\n public readonly heightChanged = output<number>();\n\n public readonly componentAction = signal<NgssmComponentAction | undefined>(undefined);\n public readonly componentToDisplay = signal<Type<unknown> | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentNodeId = this.nodeId();\n const currentConfig = this.treeConfig();\n\n if (!currentNodeId || !currentConfig) {\n return;\n }\n\n this.componentAction.set((c: unknown) => (c as NgssmExpressionTreeCustomComponent).setup(currentConfig.treeId, currentNodeId));\n this.componentToDisplay.set(currentConfig.nodeDetailComponent);\n setTimeout(() => {\n this.heightChanged.emit(this.elementRef?.nativeElement.getBoundingClientRect().height ?? 0);\n });\n });\n }\n}\n","@if (componentToDisplay(); as component) {\n <div [ngssmComponentDisplay]=\"component\" [ngssmComponentAction]=\"componentAction()\"></div>\n}\n","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, inject, input, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { NgssmExpressionTreeConfig, NgssmExpressionTreeNode } from '../../model';\nimport { selectNgssmExpressionTreeState } from '../../state';\nimport { NgssmCollapseExpressionTreeNodeAction, NgssmExpandExpressionTreeNodeAction } from '../../actions';\nimport { NgssmExpressionTreeNodeComponent } from '../ngssm-expression-tree-node/ngssm-expression-tree-node.component';\nimport { NgssmExpressionTreeNodeDetailsComponent } from '../ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component';\n\n@Component({\n selector: 'ngssm-expression-tree',\n imports: [\n CommonModule,\n ScrollingModule,\n MatCard,\n MatCardContent,\n MatDivider,\n MatIcon,\n NgssmExpressionTreeNodeComponent,\n NgssmExpressionTreeNodeDetailsComponent\n ],\n templateUrl: './ngssm-expression-tree.component.html',\n styleUrls: ['./ngssm-expression-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmExpressionTreeComponent<T = unknown> {\n private readonly store = inject(Store);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n private readonly trees = createSignal((state) => selectNgssmExpressionTreeState(state).trees);\n\n public readonly treeConfig = input<NgssmExpressionTreeConfig<T> | null | undefined, NgssmExpressionTreeConfig<T> | null | undefined>(\n undefined,\n {\n transform: (value) => {\n if (!value) {\n return value;\n }\n\n const config: NgssmExpressionTreeConfig<T> = {\n ...value\n };\n if (!config.getNodeLabel) {\n config.getNodeLabel = (node) => node.data.id;\n }\n\n if (!config.expandIconClass) {\n config.expandIconClass = 'fa-solid fa-chevron-right';\n }\n\n if (!config.collapseIconClass) {\n config.collapseIconClass = 'fa-solid fa-chevron-down';\n }\n\n return config;\n }\n }\n );\n public readonly displayedNodes = signal<NgssmExpressionTreeNode[]>([]);\n\n constructor() {\n effect(() => {\n const config = this.treeConfig();\n if (!config) {\n this.displayedNodes.set([]);\n return;\n }\n\n const nodes: NgssmExpressionTreeNode[] = [];\n const collapsedNodes = new Set<string>();\n (this.trees()[config.treeId]?.nodes ?? []).forEach((node) => {\n if (node.data.isExpandable === true && node.isExpanded === false) {\n collapsedNodes.add(node.data.id);\n }\n\n if (!node.data.parentId || node.path.findIndex((p) => collapsedNodes.has(p)) === -1) {\n nodes.push(node);\n }\n });\n\n this.displayedNodes.set(nodes);\n });\n }\n\n public getItemId(_: number, node: NgssmExpressionTreeNode): string {\n return node.data.id;\n }\n\n public expand(node: NgssmExpressionTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmExpandExpressionTreeNodeAction(treeId, node.data.id));\n }\n }\n\n public collapse(node: NgssmExpressionTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new NgssmCollapseExpressionTreeNodeAction(treeId, node.data.id));\n }\n }\n\n public forceRefresh(): void {\n this.changeDetectorRef.markForCheck();\n }\n}\n","@let defaultPadding = treeConfig()?.nodePadding ?? 20;\n\n<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\">\n @if (config.disableVirtualization) {\n <div class=\"ngssm-expression-tree-nodes-container\">\n @for (item of displayedNodes(); track item.data.id) {\n <div class=\"ngssm-expression-tree-node\" id=\"{{ 'node_' + item.data.id }}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { config, item }\"></ng-container>\n </div>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"config.rowSize ?? 30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedNodes(); trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\"\n id=\"{{ 'node_' + item.data.id }}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { config, item }\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n }\n </mat-card-content>\n }\n</mat-card>\n\n<ng-template #nodeTemplate let-config=\"config\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"config.rowSize ?? 30\">\n @for (part of item.path; track part) {\n <mat-divider\n [vertical]=\"true\"\n class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"config.rowSize ?? 30\"\n [style.margin-right.px]=\"defaultPadding\">\n </mat-divider>\n }\n @if ((item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false) {\n <mat-icon class=\"{{ config.expandIconClass }}\" (click)=\"$event.stopPropagation(); expand(item)\" id=\"expandIcon\"> </mat-icon>\n }\n\n @if ((item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true) {\n <mat-icon class=\"{{ config.collapseIconClass }}\" (click)=\"$event.stopPropagation(); collapse(item)\" id=\"collapseIcon\"> </mat-icon>\n }\n\n <ngssm-expression-tree-node [nodeId]=\"item.data.id\" [treeConfig]=\"config\"> </ngssm-expression-tree-node>\n </div>\n @if (item.data.hasRowDetail === true && item.isExpanded === true) {\n <div class=\"flex-row-center fxFlex\">\n @for (part of item.path; track part) {\n <mat-divider\n [vertical]=\"true\"\n class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\"\n [style.margin-right.px]=\"defaultPadding\">\n </mat-divider>\n }\n\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <ngssm-expression-tree-node-details [nodeId]=\"item.data.id\" [treeConfig]=\"config\" (heightChanged)=\"forceRefresh()\">\n </ngssm-expression-tree-node-details>\n </div>\n </div>\n }\n</ng-template>\n","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/ngssm-tree/public-api';\nexport * from './lib/ngssm-expression-tree/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i2","i7","i8","TreeNodeExpandReducer","TreesReducer"],"mappings":"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"}
|