@smartbit4all/ng-client 6.0.19 → 6.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, RendererStyleFlags2, Directive, Input, HostBinding, HostListener, Component, EventEmitter, Output, signal, computed, ViewChildren, ViewChild, input, ElementRef, forwardRef, Pipe, ViewContainerRef, ViewEncapsulation, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, output, effect, inject, ApplicationRef, viewChild, ChangeDetectorRef } from '@angular/core';
2
+ import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, RendererStyleFlags2, Directive, Input, HostBinding, HostListener, input, computed, Component, EventEmitter, Output, signal, ViewChildren, ViewChild, ElementRef, forwardRef, Pipe, ViewContainerRef, ViewEncapsulation, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, output, effect, inject, ApplicationRef, viewChild, ChangeDetectorRef } from '@angular/core';
3
3
  import * as i1 from '@angular/common/http';
4
4
  import { HttpHeaders, HttpContext, HttpErrorResponse, HttpParams, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
5
5
  import { Subject, lastValueFrom, take, tap, takeUntil, interval, startWith, map, distinctUntilChanged, catchError, throwError, from } from 'rxjs';
@@ -3225,16 +3225,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
3225
3225
  }] } });
3226
3226
 
3227
3227
  class UiBadgeComponent {
3228
- ngOnInit() {
3229
- if (this.descriptor?.value) {
3230
- this.effectiveValue = this.descriptor.value;
3231
- }
3232
- else if (this.inputValue) {
3233
- this.effectiveValue = this.inputValue;
3234
- }
3228
+ constructor() {
3229
+ this.descriptor = input();
3230
+ this.inputValue = input();
3231
+ this.effectiveValue = computed(() => this.descriptor()?.value || this.inputValue());
3235
3232
  }
3236
3233
  getBadgeClass() {
3237
- switch (this.descriptor?.color?.toLowerCase()) {
3234
+ switch (this.descriptor()?.color?.toLowerCase()) {
3238
3235
  case 'primary':
3239
3236
  return 'badge-primary';
3240
3237
  case 'secondary':
@@ -3250,16 +3247,12 @@ class UiBadgeComponent {
3250
3247
  }
3251
3248
  }
3252
3249
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiBadgeComponent, selector: "ui-badge", inputs: { descriptor: "descriptor", inputValue: "inputValue" }, ngImport: i0, template: "<ng-content></ng-content>\r\n\r\n@if (effectiveValue) {\r\n<div class=\"ui-action-badge\" [ngClass]=\"getBadgeClass()\">\r\n {{ effectiveValue }}\r\n</div>\r\n}\r\n", styles: [".ui-action-badge{position:absolute;top:.1rem;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0;padding:0 .5rem;border-radius:1rem;color:#fff;font-size:.75rem;font-weight:700;line-height:1rem;display:inline-block;text-align:center;white-space:nowrap;z-index:100}:host{display:flex;width:fit-content;height:fit-content;position:relative}.badge-primary{background-color:var(--primary-color)}.badge-secondary{background-color:var(--secondary-color)}.badge-accent{background-color:var(--accent-color)}.badge-error{background-color:var(--error-color)}.badge-warn{background-color:var(--warn-color)}.badge-default{background-color:#ef4444}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
3250
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiBadgeComponent, selector: "ui-badge", inputs: { descriptor: { classPropertyName: "descriptor", publicName: "descriptor", isSignal: true, isRequired: false, transformFunction: null }, inputValue: { classPropertyName: "inputValue", publicName: "inputValue", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-content></ng-content>\r\n\r\n@if (effectiveValue()) {\r\n <div class=\"ui-action-badge\" [ngClass]=\"getBadgeClass()\">\r\n {{ effectiveValue() }}\r\n </div>\r\n}\r\n", styles: [".ui-action-badge{position:absolute;top:.1rem;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0;padding:0 .5rem;border-radius:1rem;color:#fff;font-size:.75rem;font-weight:700;line-height:1rem;display:inline-block;text-align:center;white-space:nowrap;z-index:100}:host{display:flex;width:fit-content;height:fit-content;position:relative}.badge-primary{background-color:var(--primary-color)}.badge-secondary{background-color:var(--secondary-color)}.badge-accent{background-color:var(--accent-color)}.badge-error{background-color:var(--error-color)}.badge-warn{background-color:var(--warn-color)}.badge-default{background-color:#ef4444}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
3254
3251
  }
3255
3252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiBadgeComponent, decorators: [{
3256
3253
  type: Component,
3257
- args: [{ selector: 'ui-badge', template: "<ng-content></ng-content>\r\n\r\n@if (effectiveValue) {\r\n<div class=\"ui-action-badge\" [ngClass]=\"getBadgeClass()\">\r\n {{ effectiveValue }}\r\n</div>\r\n}\r\n", styles: [".ui-action-badge{position:absolute;top:.1rem;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0;padding:0 .5rem;border-radius:1rem;color:#fff;font-size:.75rem;font-weight:700;line-height:1rem;display:inline-block;text-align:center;white-space:nowrap;z-index:100}:host{display:flex;width:fit-content;height:fit-content;position:relative}.badge-primary{background-color:var(--primary-color)}.badge-secondary{background-color:var(--secondary-color)}.badge-accent{background-color:var(--accent-color)}.badge-error{background-color:var(--error-color)}.badge-warn{background-color:var(--warn-color)}.badge-default{background-color:#ef4444}\n"] }]
3258
- }], propDecorators: { descriptor: [{
3259
- type: Input
3260
- }], inputValue: [{
3261
- type: Input
3262
- }] } });
3254
+ args: [{ selector: 'ui-badge', template: "<ng-content></ng-content>\r\n\r\n@if (effectiveValue()) {\r\n <div class=\"ui-action-badge\" [ngClass]=\"getBadgeClass()\">\r\n {{ effectiveValue() }}\r\n </div>\r\n}\r\n", styles: [".ui-action-badge{position:absolute;top:.1rem;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0;padding:0 .5rem;border-radius:1rem;color:#fff;font-size:.75rem;font-weight:700;line-height:1rem;display:inline-block;text-align:center;white-space:nowrap;z-index:100}:host{display:flex;width:fit-content;height:fit-content;position:relative}.badge-primary{background-color:var(--primary-color)}.badge-secondary{background-color:var(--secondary-color)}.badge-accent{background-color:var(--accent-color)}.badge-error{background-color:var(--error-color)}.badge-warn{background-color:var(--warn-color)}.badge-default{background-color:#ef4444}\n"] }]
3255
+ }] });
3263
3256
 
3264
3257
  class UiBadgeDirective {
3265
3258
  constructor(vcr, el, renderer) {
@@ -3273,8 +3266,8 @@ class UiBadgeDirective {
3273
3266
  const host = this.el.nativeElement;
3274
3267
  const parent = host.parentNode;
3275
3268
  const badgeComponent = this.vcr.createComponent(UiBadgeComponent);
3276
- badgeComponent.instance.descriptor = this.descriptor;
3277
- badgeComponent.instance.inputValue = this.inputValue;
3269
+ badgeComponent.setInput('descriptor', this.descriptor);
3270
+ badgeComponent.setInput('inputValue', this.inputValue);
3278
3271
  this.renderer.insertBefore(parent, badgeComponent.location.nativeElement, host);
3279
3272
  this.renderer.removeChild(parent, host);
3280
3273
  this.renderer.appendChild(badgeComponent.location.nativeElement, host);
@@ -3425,7 +3418,6 @@ class UiActionButtonComponent {
3425
3418
  this._destroy$.complete();
3426
3419
  }
3427
3420
  async onActionClicked(event, model) {
3428
- event.stopPropagation();
3429
3421
  this.actionClick.emit({
3430
3422
  event,
3431
3423
  code: model.uiAction.code,
@@ -3433,7 +3425,6 @@ class UiActionButtonComponent {
3433
3425
  });
3434
3426
  }
3435
3427
  onActionDoubleClicked(event) {
3436
- event.stopPropagation();
3437
3428
  this.actionDoubleClick.emit({
3438
3429
  event,
3439
3430
  code: this.code,
@@ -4213,13 +4204,7 @@ class SmartViewContextService {
4213
4204
  parameters: new Map(),
4214
4205
  };
4215
4206
  viewContextUpdate.deviceInfo.componentLibrary = this.componentLibrary;
4216
- try {
4217
- var selectedTheme = await this.themeService.getSelectedTheme();
4218
- viewContextUpdate.deviceInfo.themeName = selectedTheme.name;
4219
- }
4220
- catch (e) {
4221
- // No themes are avalible
4222
- }
4207
+ viewContextUpdate.deviceInfo.themeName = this.themeService.currentTheme();
4223
4208
  this.viewContext = await this.view.updateViewContext(viewContextUpdate).toPromise();
4224
4209
  return this.viewContext;
4225
4210
  }
@@ -6428,7 +6413,12 @@ class UiActionService {
6428
6413
  };
6429
6414
  }
6430
6415
  else if (uiAction.submit || uiAction.model) {
6431
- uiActionRequest.params['model'] = uiActionModel.serviceToUse.getModel();
6416
+ if (options?.widgetId && options?.nodeId) {
6417
+ uiActionRequest.params['clientPageModel'] = uiActionModel.serviceToUse.getModel();
6418
+ }
6419
+ else {
6420
+ uiActionRequest.params['model'] = uiActionModel.serviceToUse.getModel();
6421
+ }
6432
6422
  }
6433
6423
  if (uiAction.composite) {
6434
6424
  const containerUuid = uiActionModel.serviceToUse.uuid;
@@ -11293,35 +11283,23 @@ class SmartGridToolbarActionsUtil {
11293
11283
  static showToolbar(row, columnName) {
11294
11284
  return !!row.actions && row.actions.length > 0 && !!row.columnActions?.[columnName];
11295
11285
  }
11286
+ // ##### IN ROW ACTIONS
11296
11287
  static calculateCellToActionMap(rows, serviceToUse, gridId) {
11297
- let cellToActionMap = {};
11288
+ const cellToActionMap = {};
11298
11289
  rows.forEach((row) => {
11299
11290
  if (row?.columnActions && row?.actions) {
11300
11291
  Object.keys(row.columnActions).forEach((columnName) => {
11301
- let key = row.id + columnName;
11292
+ const key = row.id + columnName;
11302
11293
  const actionCodes = row.columnActions[columnName];
11303
- const actions = row.actions.filter((action) => action.code && actionCodes.includes(action.code));
11304
- const actionModels = actions.map((uiAction) => {
11305
- //Add row to uiAction
11306
- let _uiAction = { ...uiAction };
11307
- _uiAction.params = {
11308
- ...uiAction.params,
11309
- model: row,
11310
- };
11311
- // Add gridId and widgetId to uiActionMod
11312
- return {
11313
- serviceToUse: serviceToUse,
11314
- uiAction: _uiAction,
11315
- nodeId: row.id,
11316
- widgetId: gridId,
11317
- };
11318
- });
11319
- cellToActionMap[key] = actionModels;
11294
+ cellToActionMap[key] = row.actions
11295
+ .filter((action) => action.code && actionCodes.includes(action.code))
11296
+ .map((uiAction) => this.toActionModel(uiAction, row, serviceToUse, gridId));
11320
11297
  });
11321
11298
  }
11322
11299
  });
11323
11300
  return cellToActionMap;
11324
11301
  }
11302
+ // ##### MENU ACTIONS
11325
11303
  static calculateMenuActions(row, orderedColumns) {
11326
11304
  var _columnsToFilter = [
11327
11305
  ...orderedColumns.map((col) => col.startsWith('data.') ? col.substring('data.'.length) : col),
@@ -11333,10 +11311,29 @@ class SmartGridToolbarActionsUtil {
11333
11311
  .flat();
11334
11312
  return row.actions?.filter((action) => !columnCodes.includes(action.code)) ?? [];
11335
11313
  }
11314
+ static calculateMenuActionModels(row, orderedColumns, serviceToUse, gridId) {
11315
+ return this.calculateMenuActions(row, orderedColumns).map((uiAction) => this.toActionModel(uiAction, row, serviceToUse, gridId));
11316
+ }
11336
11317
  static getActionModelsFromMap(cellToActionMap, row, header) {
11337
11318
  let key = row.id + header;
11338
11319
  return cellToActionMap[key];
11339
11320
  }
11321
+ // ##### HELPERS
11322
+ static toActionModel(uiAction, row, serviceToUse, gridId) {
11323
+ const _uiAction = {
11324
+ ...uiAction,
11325
+ params: {
11326
+ ...uiAction.params,
11327
+ model: row,
11328
+ },
11329
+ };
11330
+ return {
11331
+ serviceToUse,
11332
+ uiAction: _uiAction,
11333
+ nodeId: row.id,
11334
+ widgetId: gridId,
11335
+ };
11336
+ }
11340
11337
  }
11341
11338
 
11342
11339
  class Table {
@@ -11828,35 +11825,27 @@ class Table {
11828
11825
  return SmartGridToolbarActionsUtil.showToolbar(row, this.originalProperty(columnName));
11829
11826
  }
11830
11827
  getRowMenuActionModel(element) {
11831
- var cacheKey = element.id;
11832
- if (this.rowMenuActionModelCache.has(cacheKey)) {
11833
- return this.rowMenuActionModelCache.get(cacheKey);
11834
- }
11835
- var service = this.smartTable.getServiceToUse();
11836
- var gridId = this.smartTable.getGridId();
11837
- if (!service || !gridId) {
11828
+ const service = this.smartTable.getServiceToUse();
11829
+ const gridId = this.smartTable.getGridId();
11830
+ if (!service || !gridId)
11838
11831
  return undefined;
11839
- }
11840
- var leftoverActions = SmartGridToolbarActionsUtil.calculateMenuActions(element, this.smartTable.tableHeaders) ?? [];
11841
- var menuUiAction = {
11832
+ const leftoverActions = SmartGridToolbarActionsUtil.calculateMenuActionModels(element, this.smartTable.tableHeaders, service, gridId);
11833
+ const menuUiAction = {
11842
11834
  code: 'rowMenu',
11843
11835
  descriptor: {
11844
11836
  icon: 'more_vert',
11845
- iconColor: 'primary',
11846
11837
  title: '',
11847
11838
  type: UiActionButtonType.ICON,
11848
11839
  color: 'primary',
11849
11840
  },
11850
- subActions: leftoverActions,
11841
+ subActions: leftoverActions.map((m) => m.uiAction),
11851
11842
  };
11852
- var model = {
11843
+ return {
11853
11844
  serviceToUse: service,
11854
11845
  uiAction: menuUiAction,
11855
11846
  nodeId: element.id,
11856
11847
  widgetId: gridId,
11857
11848
  };
11858
- this.rowMenuActionModelCache.set(cacheKey, model);
11859
- return model;
11860
11849
  }
11861
11850
  getRowMenuActionModelArray(element) {
11862
11851
  var cacheKey = element.id;
@@ -17371,13 +17360,13 @@ class SmartGridComponent {
17371
17360
  return row.id;
17372
17361
  }
17373
17362
  getRowMenuActionModelArray(row) {
17374
- var cacheKey = row.id;
17363
+ const cacheKey = row.id;
17375
17364
  if (this.rowMenuActionModelArrayCache.has(cacheKey)) {
17376
17365
  return this.rowMenuActionModelArrayCache.get(cacheKey);
17377
17366
  }
17378
17367
  if (!this.rowMenuActionModelCache.has(cacheKey)) {
17379
- var leftoverActions = this.calculateMenuActions(row) ?? [];
17380
- var menuUiAction = {
17368
+ const leftoverActionModels = SmartGridToolbarActionsUtil.calculateMenuActionModels(row, this.smartGrid.gridModel.view?.orderedColumnNames, this.smartGrid.serviceToUse, this.smartGrid.gridIdentifier);
17369
+ const menuUiAction = {
17381
17370
  code: 'rowMenu',
17382
17371
  descriptor: {
17383
17372
  icon: 'ellipsis-v',
@@ -17385,9 +17374,9 @@ class SmartGridComponent {
17385
17374
  type: UiActionButtonType.ICON,
17386
17375
  color: 'primary',
17387
17376
  },
17388
- subActions: leftoverActions,
17377
+ subActions: leftoverActionModels.map((m) => m.uiAction),
17389
17378
  };
17390
- var model = {
17379
+ const model = {
17391
17380
  serviceToUse: this.smartGrid.serviceToUse,
17392
17381
  uiAction: menuUiAction,
17393
17382
  nodeId: row.id,
@@ -17395,7 +17384,7 @@ class SmartGridComponent {
17395
17384
  };
17396
17385
  this.rowMenuActionModelCache.set(cacheKey, model);
17397
17386
  }
17398
- var arr = [this.rowMenuActionModelCache.get(cacheKey)];
17387
+ const arr = [this.rowMenuActionModelCache.get(cacheKey)];
17399
17388
  this.rowMenuActionModelArrayCache.set(cacheKey, arr);
17400
17389
  return arr;
17401
17390
  }
@@ -18978,9 +18967,9 @@ class SmarttreeGenericService extends SmarttreeService {
18978
18967
  this.constructUiActionModels(uiActions);
18979
18968
  }
18980
18969
  if (!rootNodes) {
18981
- throw new Error('RootNodes are undefined!');
18970
+ console.error('RootNodes are undefined!');
18982
18971
  }
18983
- return rootNodes;
18972
+ return rootNodes ?? [];
18984
18973
  }
18985
18974
  async downloadChildren(parentNode) {
18986
18975
  let uuid = this.viewContext.getUuidOfPage(this.pageName);
@@ -19362,11 +19351,11 @@ class SmartTreeComponent {
19362
19351
  return `${cssClass}-${plusProperty}`;
19363
19352
  }
19364
19353
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartTreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
19365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartTreeComponent, selector: "smart-tree", inputs: { treeStyle: "treeStyle", treeService: "treeService" }, host: { properties: { "attr.data-testid": "this.testId" } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true }, { propertyName: "trigger", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\" (click)=\"onOpenNode($event, node)\">\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <div *ngIf=\"!treeData\" class=\"tree-skeleton\" aria-hidden=\"true\">\r\n <div class=\"skeleton-row\" style=\"--depth: 0; --w: 58%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 1; --w: 72%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 2; --w: 45%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 2; --w: 60%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 1; --w: 50%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 2; --w: 65%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 0; --w: 40%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 1; --w: 55%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}.tree-skeleton{--skeleton-bg-color: #c7cbd1;display:flex;flex-direction:column;gap:.5rem;padding:1rem}.skeleton-row{display:flex;align-items:center;gap:.5rem;padding-left:calc(var(--depth, 0) * 1.25rem)}.skeleton-caret{width:.9rem;height:.9rem;border-radius:2px;background:var(--skeleton-bg-color);flex-shrink:0;animation:skeleton-pulse 2s ease-in-out infinite}.skeleton-label{height:1.2rem;width:var(--w);border-radius:4px;background:var(--skeleton-bg-color);animation:skeleton-pulse 2s ease-in-out infinite}.skeleton-label.leaf{margin-left:1.1rem}@keyframes skeleton-pulse{0%,to{opacity:.35}50%{opacity:1}}@media (prefers-reduced-motion: reduce){.skeleton-caret,.skeleton-label{animation:none}}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11$1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i11$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i11$1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i11$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i11$1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "component", type: i5$1.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: i5$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }] }); }
19354
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartTreeComponent, selector: "smart-tree", inputs: { treeStyle: "treeStyle", treeService: "treeService" }, host: { properties: { "attr.data-testid": "this.testId" } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true }, { propertyName: "trigger", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\" (click)=\"onOpenNode($event, node)\">\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\" class=\"tree-loading\">\r\n <mat-spinner diameter=\"24\" color=\"primary\"></mat-spinner>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}.tree-loading{display:flex;justify-content:center;align-items:center;min-height:200px;width:100%}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11$1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i11$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i11$1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i11$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i11$1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "component", type: i5$1.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: i5$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: i1$7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
19366
19355
  }
19367
19356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartTreeComponent, decorators: [{
19368
19357
  type: Component,
19369
- args: [{ selector: 'smart-tree', template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\" (click)=\"onOpenNode($event, node)\">\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <div *ngIf=\"!treeData\" class=\"tree-skeleton\" aria-hidden=\"true\">\r\n <div class=\"skeleton-row\" style=\"--depth: 0; --w: 58%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 1; --w: 72%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 2; --w: 45%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 2; --w: 60%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 1; --w: 50%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 2; --w: 65%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 0; --w: 40%\">\r\n <span class=\"skeleton-caret\"></span>\r\n <span class=\"skeleton-label\"></span>\r\n </div>\r\n <div class=\"skeleton-row\" style=\"--depth: 1; --w: 55%\">\r\n <span class=\"skeleton-label leaf\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}.tree-skeleton{--skeleton-bg-color: #c7cbd1;display:flex;flex-direction:column;gap:.5rem;padding:1rem}.skeleton-row{display:flex;align-items:center;gap:.5rem;padding-left:calc(var(--depth, 0) * 1.25rem)}.skeleton-caret{width:.9rem;height:.9rem;border-radius:2px;background:var(--skeleton-bg-color);flex-shrink:0;animation:skeleton-pulse 2s ease-in-out infinite}.skeleton-label{height:1.2rem;width:var(--w);border-radius:4px;background:var(--skeleton-bg-color);animation:skeleton-pulse 2s ease-in-out infinite}.skeleton-label.leaf{margin-left:1.1rem}@keyframes skeleton-pulse{0%,to{opacity:.35}50%{opacity:1}}@media (prefers-reduced-motion: reduce){.skeleton-caret,.skeleton-label{animation:none}}\n"] }]
19358
+ args: [{ selector: 'smart-tree', template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\" (click)=\"onOpenNode($event, node)\">\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\" class=\"tree-loading\">\r\n <mat-spinner diameter=\"24\" color=\"primary\"></mat-spinner>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}.tree-loading{display:flex;justify-content:center;align-items:center;min-height:200px;width:100%}\n"] }]
19370
19359
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { trigger: [{
19371
19360
  type: ViewChildren,
19372
19361
  args: [MatMenuTrigger]
@@ -19391,7 +19380,8 @@ class SmarttreeModule {
19391
19380
  MatTreeModule,
19392
19381
  MatMenuModule,
19393
19382
  SmartIconModule,
19394
- SmartViewContextModule], exports: [SmartTreeComponent] }); }
19383
+ SmartViewContextModule,
19384
+ MatProgressSpinnerModule], exports: [SmartTreeComponent] }); }
19395
19385
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmarttreeModule, providers: [
19396
19386
  SmarttreeService,
19397
19387
  SmarttreeGenericService,
@@ -19403,7 +19393,8 @@ class SmarttreeModule {
19403
19393
  MatTreeModule,
19404
19394
  MatMenuModule,
19405
19395
  SmartIconModule,
19406
- SmartViewContextModule] }); }
19396
+ SmartViewContextModule,
19397
+ MatProgressSpinnerModule] }); }
19407
19398
  }
19408
19399
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmarttreeModule, decorators: [{
19409
19400
  type: NgModule,
@@ -19418,6 +19409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
19418
19409
  MatMenuModule,
19419
19410
  SmartIconModule,
19420
19411
  SmartViewContextModule,
19412
+ MatProgressSpinnerModule,
19421
19413
  ],
19422
19414
  exports: [SmartTreeComponent],
19423
19415
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
@@ -25239,6 +25231,7 @@ class SubjectSelectorComponent extends SmartComponent {
25239
25231
  onUuidResolved(uuid) {
25240
25232
  if (this.filterService.config) {
25241
25233
  this.filterService.config.uuid = uuid;
25234
+ this.filterService.load();
25242
25235
  }
25243
25236
  }
25244
25237
  setup() {