@meshmakers/octo-ui 3.2.18-0 → 3.2.20-0

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,10 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { NgModule, EventEmitter, Pipe, Component, Input, Output, ViewChild } from '@angular/core';
3
3
  import { CommonModule, AsyncPipe, NgIf, NgForOf } from '@angular/common';
4
- import { fromEvent, merge, map, of, BehaviorSubject } from 'rxjs';
5
- import { debounceTime, distinctUntilChanged, tap, catchError } from 'rxjs/operators';
6
- import { DataSourceBase, PagedResultDto } from '@meshmakers/shared-services';
7
- import { GraphQL } from '@meshmakers/octo-services';
4
+ import { fromEvent, merge, BehaviorSubject } from 'rxjs';
5
+ import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
6
+ import { SortOrdersDto, SearchFilterTypesDto } from '@meshmakers/octo-services';
8
7
  import { MatPaginator } from '@angular/material/paginator';
9
8
  import { MatSort, MatSortHeader } from '@angular/material/sort';
10
9
  import { MatButton, MatIconButton } from '@angular/material/button';
@@ -19,11 +18,11 @@ import { MatListItemIcon } from '@angular/material/list';
19
18
  import { RouterLink } from '@angular/router';
20
19
 
21
20
  class ListElementModule {
22
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ListElementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.4", ngImport: i0, type: ListElementModule, imports: [CommonModule] });
24
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ListElementModule, imports: [CommonModule] });
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: ListElementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
22
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: ListElementModule, imports: [CommonModule] });
23
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: ListElementModule, imports: [CommonModule] });
25
24
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ListElementModule, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: ListElementModule, decorators: [{
27
26
  type: NgModule,
28
27
  args: [{
29
28
  declarations: [],
@@ -31,42 +30,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
31
30
  }]
32
31
  }] });
33
32
 
34
- /* eslint-disable */
35
- // @generated
36
- // This file was automatically generated and should not be edited.
37
- /** Defines the operator of field compare */
38
- var FieldFilterOperatorsDto;
39
- (function (FieldFilterOperatorsDto) {
40
- FieldFilterOperatorsDto["AnyEqDto"] = "ANY_EQ";
41
- FieldFilterOperatorsDto["EqualsDto"] = "EQUALS";
42
- FieldFilterOperatorsDto["GreaterEqualThanDto"] = "GREATER_EQUAL_THAN";
43
- FieldFilterOperatorsDto["GreaterThanDto"] = "GREATER_THAN";
44
- FieldFilterOperatorsDto["InDto"] = "IN";
45
- FieldFilterOperatorsDto["LessEqualThanDto"] = "LESS_EQUAL_THAN";
46
- FieldFilterOperatorsDto["LessThanDto"] = "LESS_THAN";
47
- FieldFilterOperatorsDto["LikeDto"] = "LIKE";
48
- FieldFilterOperatorsDto["MatchDto"] = "MATCH";
49
- FieldFilterOperatorsDto["MatchRegExDto"] = "MATCH_REG_EX";
50
- FieldFilterOperatorsDto["NotEqualsDto"] = "NOT_EQUALS";
51
- FieldFilterOperatorsDto["NotInDto"] = "NOT_IN";
52
- })(FieldFilterOperatorsDto || (FieldFilterOperatorsDto = {}));
53
- /** The type of search that is used (a text based search using text analysis (high performance, scoring, maybe more false positives) or filtering of attributes (lower performance, more exact results) */
54
- var SearchFilterTypesDto;
55
- (function (SearchFilterTypesDto) {
56
- SearchFilterTypesDto["AttributeFilterDto"] = "ATTRIBUTE_FILTER";
57
- SearchFilterTypesDto["TextSearchDto"] = "TEXT_SEARCH";
58
- })(SearchFilterTypesDto || (SearchFilterTypesDto = {}));
59
- /** Defines the sort order */
60
- var SortOrdersDto;
61
- (function (SortOrdersDto) {
62
- SortOrdersDto["AscendingDto"] = "ASCENDING";
63
- SortOrdersDto["DefaultDto"] = "DEFAULT";
64
- SortOrdersDto["DescendingDto"] = "DESCENDING";
65
- })(SortOrdersDto || (SortOrdersDto = {}));
66
- //==============================================================
67
- // END Enums and Input Objects
68
- //==============================================================
69
-
70
33
  class OctoListNavigationDataInfo {
71
34
  skip;
72
35
  take;
@@ -80,7 +43,7 @@ class OctoListNavigationDataInfo {
80
43
  class OctoListNavigationOptions {
81
44
  language;
82
45
  searchFilterType;
83
- searchFilterAttributeNames;
46
+ searchFilterAttributePaths;
84
47
  constructor() {
85
48
  this.language = null;
86
49
  }
@@ -113,13 +76,13 @@ class OctoListNavigation {
113
76
  language: this.octoOptions.language,
114
77
  searchTerm: filterString,
115
78
  type: this.octoOptions.searchFilterType,
116
- attributeNames: this.octoOptions.searchFilterAttributeNames
79
+ attributePaths: this.octoOptions.searchFilterAttributePaths
117
80
  };
118
81
  }
119
82
  const sort = [];
120
83
  if (sortField && sortDirection) {
121
84
  sort.push({
122
- attributeName: sortField,
85
+ attributePath: sortField,
123
86
  sortOrder: sortDirection === 'asc' ? SortOrdersDto.AscendingDto : SortOrdersDto.DescendingDto
124
87
  });
125
88
  }
@@ -180,82 +143,16 @@ class OctoListNavigation {
180
143
  }
181
144
  }
182
145
 
183
- class GraphQlDataSource extends DataSourceBase {
184
- }
185
- class NewGraphQlDataSource extends GraphQlDataSource {
186
- messageService;
187
- query;
188
- defaultSort;
189
- queryRef;
190
- subscription;
191
- constructor(messageService, query, defaultSort = null) {
192
- super();
193
- this.messageService = messageService;
194
- this.query = query;
195
- this.defaultSort = defaultSort;
196
- this.queryRef = null;
197
- this.subscription = null;
198
- }
199
- clear() {
200
- super.clear();
201
- this.queryRef?.stopPolling();
202
- this.queryRef = null;
203
- this.subscription?.unsubscribe();
204
- this.subscription = null;
205
- }
206
- async refetch() {
207
- await this.queryRef?.refetch();
208
- }
209
- async refetchWith(skip = 0, take = 10, searchFilter = null, fieldFilter = null, sort = null) {
210
- const variables = this.createVariables(skip, take, searchFilter, fieldFilter, sort);
211
- await this.queryRef?.refetch(variables);
212
- }
213
- createVariables(skip = 0, take = 10, searchFilter = null, fieldFilter = null, sort = null) {
214
- // Default sort
215
- if ((!sort || (sort && sort.length === 0)) && searchFilter === null) {
216
- sort = new Array();
217
- if (this.defaultSort) {
218
- sort = this.defaultSort;
219
- }
220
- }
221
- return {
222
- first: take,
223
- after: GraphQL.offsetToCursor(skip),
224
- sort,
225
- searchFilter,
226
- fieldFilters: fieldFilter
227
- };
228
- }
229
- loadData(skip = 0, take = 10, searchFilter = null, fieldFilter = null, sort = null) {
230
- super.onBeginLoad();
231
- this.clear();
232
- const variables = this.createVariables(skip, take, searchFilter, fieldFilter, sort);
233
- this.queryRef = this.query.watch(variables);
234
- this.subscription = this.queryRef.valueChanges
235
- .pipe(map((v, i) => this.executeLoad(v, i)))
236
- .pipe(catchError((error) => {
237
- this.messageService.showError(error, 'Error during load of data');
238
- return of(new PagedResultDto());
239
- }))
240
- .subscribe((pagedResult) => {
241
- super.onCompleteLoad(pagedResult);
242
- });
243
- }
244
- executeLoad(_value, _index) {
245
- return new PagedResultDto();
246
- }
247
- }
248
-
249
146
  class PascalCasePipe {
250
147
  transform(value) {
251
148
  if (!value)
252
149
  return value;
253
150
  return value.charAt(0).toUpperCase() + value.slice(1);
254
151
  }
255
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: PascalCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
256
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.4", ngImport: i0, type: PascalCasePipe, isStandalone: true, name: "pascalCase" });
152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PascalCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
153
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: PascalCasePipe, isStandalone: true, name: "pascalCase" });
257
154
  }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: PascalCasePipe, decorators: [{
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PascalCasePipe, decorators: [{
259
156
  type: Pipe,
260
157
  args: [{
261
158
  standalone: true,
@@ -343,7 +240,7 @@ class MmOctoTableComponent {
343
240
  const sort = [];
344
241
  if (field) {
345
242
  sort.push({
346
- attributeName: field,
243
+ attributePath: field,
347
244
  sortOrder: direction === 'asc' ? SortOrdersDto.AscendingDto : SortOrdersDto.DescendingDto
348
245
  });
349
246
  }
@@ -410,10 +307,10 @@ class MmOctoTableComponent {
410
307
  hasActionColumns = () => {
411
308
  return this.actionColumns.length > 0 || this.optionActions.length > 0;
412
309
  };
413
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MmOctoTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
414
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MmOctoTableComponent, isStandalone: true, selector: "mm-octo-table", inputs: { dataSource: "dataSource", dataColumns: "dataColumns", actionColumns: "actionColumns", leftToolbarActions: "leftToolbarActions", optionActions: "optionActions", searchFilterColumns: "searchFilterColumns", currentRoute: "currentRoute", currentId: "currentId", defaultSortColumn: "defaultSortColumn", rowIsClickable: "rowIsClickable", pageSizeOptions: "pageSizeOptions", selectedPageSize: "selectedPageSize", selectedRowId: "selectedRowId" }, outputs: { rowClicked: "rowClicked", searchFilterStringUpdated: "searchFilterStringUpdated", actionColumnClick: "actionColumnClick" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div>\n <mat-progress-bar *ngIf=\"loading || (dataSource?.loading$ | async)\" mode=\"indeterminate\"></mat-progress-bar>\n</div>\n\n<mat-toolbar class=\"octo-toolbar octo-detail-toolbar\">\n @for (toolbarAction of leftToolbarActions; track toolbarAction) {\n <button mat-flat-button routerLink=\"{{toolbarAction.route}}\" type=\"button\" [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\">\n @if (toolbarAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ toolbarAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (toolbarAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ toolbarAction.iconName }}</mat-icon>\n }\n {{ toolbarAction.actionText }}\n </button>\n }\n\n <div class=\"octo-spacer\"></div>\n\n <div class=\"octo-toolbar-search\">\n <mat-form-field appearance=\"outline\">\n <mat-label>\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n Search\n </mat-label>\n <input #input matInput [disabled]=\"loading\">\n </mat-form-field>\n </div>\n</mat-toolbar>\n\n<mat-table [class.isMobile]=\"isMobile\" [dataSource]=\"dataSource\" class=\"mat-elevation-z8 table-container\" mat-table matSort\n matSortActive=\"{{defaultSortColumn}}\" matSortDirection=\"asc\" matSortDisableClear=\"true\">\n\n <ng-container *ngFor=\"let column of dataColumns?.columnNames\" [matColumnDef]=\"column\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ column | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ column | pascalCase }}:</span>\n {{ accessElement(element, column, dataColumns.accessPaths) }}\n </mat-cell>\n </ng-container>\n\n <!-- Consolidated Action Column with multiple buttons -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>Actions</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @for (column of actionColumns; track column) {\n <ng-container>\n <button mat-button (click)=\"emitRowData({action: column.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n <mat-icon *ngIf=\"column?.svgIconName\" class=\"svg-icon\" svgIcon=\"{{ column.svgIconName }}\" matListItemIcon></mat-icon>\n <mat-icon *ngIf=\"column?.iconName\" class=\"material-symbols-outlined\">{{ column.iconName }}</mat-icon>\n </button>\n </ng-container>\n }\n\n <!-- Options menu with additional actions -->\n @if (optionActions.length > 0) {\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"Options\">\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n </button>\n }\n\n <mat-menu #menu=\"matMenu\">\n @for (optionAction of optionActions; track optionAction) {\n <ng-container>\n <button mat-menu-item\n (click)=\"emitRowData({action: optionAction.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n @if (optionAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ optionAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (optionAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ optionAction.iconName }}</mat-icon>\n }\n {{ optionAction.columnName | pascalCase }}\n </button>\n </ng-container>\n }\n </mat-menu>\n </mat-cell>\n </ng-container>\n\n <!-- Row when there are actions -->\n @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames?.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames?.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames\"></mat-row>\n }\n\n</mat-table>\n\n<mat-paginator [length]=\"dataSource?.totalCount$ | async\" (page)=\"selectedPageSizeChanged($event)\" [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"selectedPageSizeSubject.getValue()\"></mat-paginator>\n", styles: [".table-container{display:block;width:100%;max-height:70vh;overflow-x:auto;overflow-y:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: 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: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: PascalCasePipe, name: "pascalCase" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: 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: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
310
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: MmOctoTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
311
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: MmOctoTableComponent, isStandalone: true, selector: "mm-octo-table", inputs: { dataSource: "dataSource", dataColumns: "dataColumns", actionColumns: "actionColumns", leftToolbarActions: "leftToolbarActions", optionActions: "optionActions", searchFilterColumns: "searchFilterColumns", currentRoute: "currentRoute", currentId: "currentId", defaultSortColumn: "defaultSortColumn", rowIsClickable: "rowIsClickable", pageSizeOptions: "pageSizeOptions", selectedPageSize: "selectedPageSize", selectedRowId: "selectedRowId" }, outputs: { rowClicked: "rowClicked", searchFilterStringUpdated: "searchFilterStringUpdated", actionColumnClick: "actionColumnClick" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div>\n <mat-progress-bar *ngIf=\"loading || (dataSource?.loading$ | async)\" mode=\"indeterminate\"></mat-progress-bar>\n</div>\n\n<mat-toolbar class=\"octo-toolbar octo-detail-toolbar\">\n @for (toolbarAction of leftToolbarActions; track toolbarAction) {\n <button mat-flat-button routerLink=\"{{toolbarAction.route}}\" type=\"button\" [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\">\n @if (toolbarAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ toolbarAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (toolbarAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ toolbarAction.iconName }}</mat-icon>\n }\n {{ toolbarAction.actionText }}\n </button>\n }\n\n <div class=\"octo-spacer\"></div>\n\n <div class=\"octo-toolbar-search\">\n <mat-form-field appearance=\"outline\">\n <mat-label>\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n Search\n </mat-label>\n <input #input matInput [disabled]=\"loading\">\n </mat-form-field>\n </div>\n</mat-toolbar>\n\n<mat-table [class.isMobile]=\"isMobile\" [dataSource]=\"dataSource\" class=\"mat-elevation-z8 table-container\" mat-table matSort\n matSortActive=\"{{defaultSortColumn}}\" matSortDirection=\"asc\" matSortDisableClear=\"true\">\n\n <ng-container *ngFor=\"let column of dataColumns?.columnNames\" [matColumnDef]=\"column\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ column | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ column | pascalCase }}:</span>\n {{ accessElement(element, column, dataColumns.accessPaths) }}\n </mat-cell>\n </ng-container>\n\n <!-- Consolidated Action Column with multiple buttons -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>Actions</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @for (column of actionColumns; track column) {\n <ng-container>\n <button mat-button (click)=\"emitRowData({action: column.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n <mat-icon *ngIf=\"column?.svgIconName\" class=\"svg-icon\" svgIcon=\"{{ column.svgIconName }}\" matListItemIcon></mat-icon>\n <mat-icon *ngIf=\"column?.iconName\" class=\"material-symbols-outlined\">{{ column.iconName }}</mat-icon>\n </button>\n </ng-container>\n }\n\n <!-- Options menu with additional actions -->\n @if (optionActions.length > 0) {\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"Options\">\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n </button>\n }\n\n <mat-menu #menu=\"matMenu\">\n @for (optionAction of optionActions; track optionAction) {\n <ng-container>\n <button mat-menu-item\n (click)=\"emitRowData({action: optionAction.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n @if (optionAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ optionAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (optionAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ optionAction.iconName }}</mat-icon>\n }\n {{ optionAction.columnName | pascalCase }}\n </button>\n </ng-container>\n }\n </mat-menu>\n </mat-cell>\n </ng-container>\n\n <!-- Row when there are actions -->\n @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames?.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames?.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames\"></mat-row>\n }\n\n</mat-table>\n\n<mat-paginator [length]=\"dataSource?.totalCount$ | async\" (page)=\"selectedPageSizeChanged($event)\" [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"selectedPageSizeSubject.getValue()\"></mat-paginator>\n", styles: [".table-container{display:block;width:100%;max-height:70vh;overflow-x:auto;overflow-y:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: 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: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: PascalCasePipe, name: "pascalCase" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: 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: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
415
312
  }
416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MmOctoTableComponent, decorators: [{
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: MmOctoTableComponent, decorators: [{
417
314
  type: Component,
418
315
  args: [{ selector: 'mm-octo-table', standalone: true, imports: [
419
316
  AsyncPipe,
@@ -503,11 +400,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
503
400
  }] } });
504
401
 
505
402
  class MmOctoUiModule {
506
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MmOctoUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
507
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.4", ngImport: i0, type: MmOctoUiModule, imports: [MmOctoTableComponent], exports: [MmOctoTableComponent] });
508
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MmOctoUiModule, imports: [MmOctoTableComponent] });
403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: MmOctoUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
404
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: MmOctoUiModule, imports: [MmOctoTableComponent], exports: [MmOctoTableComponent] });
405
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: MmOctoUiModule, imports: [MmOctoTableComponent] });
509
406
  }
510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MmOctoUiModule, decorators: [{
407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: MmOctoUiModule, decorators: [{
511
408
  type: NgModule,
512
409
  args: [{
513
410
  declarations: [],
@@ -528,5 +425,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
528
425
  * Generated bundle index. Do not edit.
529
426
  */
530
427
 
531
- export { FieldFilterOperatorsDto, GraphQlDataSource, ListElementModule, MmOctoTableComponent, MmOctoUiModule, NewGraphQlDataSource, OctoListNavigation, OctoListNavigationDataInfo, OctoListNavigationOptions, PascalCasePipe, SearchFilterTypesDto, SortOrdersDto };
428
+ export { ListElementModule, MmOctoTableComponent, MmOctoUiModule, OctoListNavigation, OctoListNavigationDataInfo, OctoListNavigationOptions, PascalCasePipe };
532
429
  //# sourceMappingURL=meshmakers-octo-ui.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"meshmakers-octo-ui.mjs","sources":["../../../../projects/meshmakers/octo-ui/src/lib/list-element/list-element.module.ts","../../../../projects/meshmakers/octo-ui/src/lib/list-element/globalTypes.ts","../../../../projects/meshmakers/octo-ui/src/lib/list-element/octoListNavigation.ts","../../../../projects/meshmakers/octo-ui/src/lib/list-element/newGraphQlDataSource.ts","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-table/mm-octo-table.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-table/mm-octo-table.component.html","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-ui.module.ts","../../../../projects/meshmakers/octo-ui/src/public-api.ts","../../../../projects/meshmakers/octo-ui/src/meshmakers-octo-ui.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule]\n})\nexport class ListElementModule {}\n","/* eslint-disable */\n// @generated\n// This file was automatically generated and should not be edited.\n\n//==============================================================\n// START Enums and Input Objects\n//==============================================================\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\n\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string; }\n String: { input: string; output: string; }\n Boolean: { input: boolean; output: boolean; }\n Int: { input: number; output: number; }\n Float: { input: number; output: number; }\n BigInt: { input: any; output: any; }\n CkAttributeId: { input: string; output: string; }\n CkEnumId: { input: string; output: string; }\n CkModelId: { input: any; output: any; }\n CkRecordId: { input: string; output: string; }\n CkTypeId: { input: string; output: string; }\n DateTime: { input: any; output: any; }\n Decimal: { input: any; output: any; }\n LargeBinary: { input: any; output: any; }\n OctoObjectId: { input: string; output: string; }\n Seconds: { input: any; output: any; }\n SimpleScalar: { input: any; output: any; }\n ULong: { input: any; output: any; }\n Uri: { input: any; output: any; }\n};\n\nexport type FieldFilterDto = {\n attributeName: Scalars['String']['input'];\n comparisonValue?: InputMaybe<Scalars['SimpleScalar']['input']>;\n operator: FieldFilterOperatorsDto;\n};\n\n/** Defines the operator of field compare */\nexport enum FieldFilterOperatorsDto {\n AnyEqDto = 'ANY_EQ',\n EqualsDto = 'EQUALS',\n GreaterEqualThanDto = 'GREATER_EQUAL_THAN',\n GreaterThanDto = 'GREATER_THAN',\n InDto = 'IN',\n LessEqualThanDto = 'LESS_EQUAL_THAN',\n LessThanDto = 'LESS_THAN',\n LikeDto = 'LIKE',\n MatchDto = 'MATCH',\n MatchRegExDto = 'MATCH_REG_EX',\n NotEqualsDto = 'NOT_EQUALS',\n NotInDto = 'NOT_IN'\n}\n\n\nexport type SearchFilterDto = {\n attributeNames?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n language?: InputMaybe<Scalars['String']['input']>;\n searchTerm: Scalars['String']['input'];\n type?: InputMaybe<SearchFilterTypesDto>;\n};\n\n/** The type of search that is used (a text based search using text analysis (high performance, scoring, maybe more false positives) or filtering of attributes (lower performance, more exact results) */\nexport enum SearchFilterTypesDto {\n AttributeFilterDto = 'ATTRIBUTE_FILTER',\n TextSearchDto = 'TEXT_SEARCH'\n}\n\nexport type SortDto = {\n attributeName: Scalars['String']['input'];\n sortOrder?: InputMaybe<SortOrdersDto>;\n};\n\n/** Defines the sort order */\nexport enum SortOrdersDto {\n AscendingDto = 'ASCENDING',\n DefaultDto = 'DEFAULT',\n DescendingDto = 'DESCENDING'\n}\n\n//==============================================================\n// END Enums and Input Objects\n//==============================================================\n","import { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, SortDirection } from '@angular/material/sort';\nimport { ElementRef, EventEmitter } from '@angular/core';\nimport { fromEvent, merge } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\nimport { SearchFilterDto, SearchFilterTypesDto, SortDto, SortOrdersDto } from './globalTypes';\n\nexport class OctoListNavigationDataInfo {\n skip: number;\n take: number;\n searchFilter?: SearchFilterDto;\n sort?: SortDto[];\n\n constructor() {\n this.skip = 0;\n this.take = 10;\n }\n}\n\nexport class OctoListNavigationOptions {\n language: string | null;\n searchFilterType?: SearchFilterTypesDto;\n searchFilterAttributeNames?: string[];\n\n constructor() {\n this.language = null;\n }\n}\n\nexport class OctoListNavigation {\n public loadDataRequest = new EventEmitter<OctoListNavigationDataInfo>();\n\n lastSortDirection: SortDirection | null;\n lastSortField: string | null;\n lastSearchText: string | null;\n\n constructor(\n private readonly paginator: MatPaginator,\n private readonly sort: MatSort,\n private readonly searchBox?: ElementRef<HTMLInputElement>,\n private readonly octoOptions?: OctoListNavigationOptions\n ) {\n this.lastSortDirection = null;\n this.lastSortField = null;\n this.lastSearchText = null;\n }\n\n public get loadDataInfo(): OctoListNavigationDataInfo {\n const filterString = this.searchBox?.nativeElement.value;\n const sortField = this.sort.active;\n const sortDirection = this.sort.direction;\n\n let filter = null;\n if (filterString && this.octoOptions) {\n filter = {\n language: this.octoOptions.language,\n searchTerm: filterString,\n type: this.octoOptions.searchFilterType,\n attributeNames: this.octoOptions.searchFilterAttributeNames\n } as SearchFilterDto;\n }\n\n const sort = [];\n if (sortField && sortDirection) {\n sort.push(({\n attributeName: sortField,\n sortOrder: sortDirection === 'asc' ? SortOrdersDto.AscendingDto : SortOrdersDto.DescendingDto\n } as SortDto));\n }\n\n return {\n skip: this.paginator.pageIndex * this.paginator.pageSize,\n take: this.paginator.pageSize,\n searchFilter: filter,\n sort\n } as OctoListNavigationDataInfo;\n }\n\n init(): void {\n\n if (this.searchBox) {\n // server-side search\n fromEvent<ElementRef>(this.searchBox.nativeElement, 'keyup')\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(() => {\n this.paginator.pageIndex = 0;\n if (!this.searchBox) {\n return;\n }\n\n const searchText = this.searchBox.nativeElement.value;\n\n if (!this.lastSearchText && searchText) {\n this.lastSortDirection = this.sort.direction;\n this.lastSortField = this.sort.active;\n\n // Reset sorting to see the score rating (default sorting returned from server)\n this.sort.sort({ id: '', start: 'asc', disableClear: false });\n }\n\n this.lastSearchText = searchText;\n\n if (!searchText && this.lastSortField) {\n if (this.lastSortDirection === 'asc') {\n this.sort.sort({\n id: this.lastSortField,\n start: 'asc',\n disableClear: true\n });\n } else if (this.lastSortDirection === 'desc') {\n this.sort.sort({\n id: this.lastSortField,\n start: 'desc',\n disableClear: true\n });\n }\n }\n\n this.loadData();\n })\n )\n .subscribe();\n }\n\n // reset the paginator after sorting\n this.sort.sortChange.subscribe(() => (this.paginator.pageIndex = 0));\n\n merge(this.sort.sortChange, this.paginator.page)\n .pipe(\n tap(() => {\n this.loadData();\n })\n )\n .subscribe();\n }\n\n private loadData(): void {\n this.loadDataRequest.emit(this.loadDataInfo);\n }\n}\n","import { map, of, Subscription } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { DataSourceBase, MessageService, PagedResultDto } from '@meshmakers/shared-services';\nimport { FieldFilterDto, InputMaybe, SearchFilterDto, SortDto } from './globalTypes';\nimport { Query, QueryRef } from 'apollo-angular';\nimport type { ApolloQueryResult, OperationVariables } from '@apollo/client/core';\nimport { GraphQL } from '@meshmakers/octo-services';\n\nexport interface IQueryVariablesDto extends OperationVariables {\n first?: number | null | undefined;\n after?: string | null | undefined;\n sort?: InputMaybe<InputMaybe<SortDto> | InputMaybe<SortDto>[]> | undefined;\n searchFilter?: InputMaybe<SearchFilterDto> | undefined;\n fieldFilters?: InputMaybe<InputMaybe<FieldFilterDto>[] | InputMaybe<FieldFilterDto>>;\n}\n\nexport abstract class GraphQlDataSource<TDto> extends DataSourceBase<TDto> {\n public abstract refetch(): Promise<void>;\n\n public abstract refetchWith(\n skip?: number,\n take?: number,\n searchFilter?: SearchFilterDto | null,\n fieldFilter?: FieldFilterDto[] | null,\n sort?: SortDto[] | null\n ): Promise<void>;\n\n public abstract loadData(\n skip?: number,\n take?: number,\n searchFilter?: SearchFilterDto | null,\n fieldFilter?: FieldFilterDto[] | null,\n sort?: SortDto[] | null\n ): void;\n}\n\nexport class NewGraphQlDataSource<TDto, TQueryDto, TVariablesDto extends IQueryVariablesDto> extends GraphQlDataSource<TDto> {\n private queryRef: QueryRef<TQueryDto, TVariablesDto> | null;\n private subscription: Subscription | null;\n\n constructor(\n protected messageService: MessageService,\n private readonly query: Query<TQueryDto, TVariablesDto>,\n private readonly defaultSort: SortDto[] | null = null\n ) {\n super();\n this.queryRef = null;\n this.subscription = null;\n }\n\n override clear(): void {\n super.clear();\n this.queryRef?.stopPolling();\n this.queryRef = null;\n this.subscription?.unsubscribe();\n this.subscription = null;\n }\n\n public async refetch(): Promise<void> {\n await this.queryRef?.refetch();\n }\n\n public async refetchWith(\n skip = 0,\n take = 10,\n searchFilter: SearchFilterDto | null = null,\n fieldFilter: FieldFilterDto[] | null = null,\n sort: SortDto[] | null = null\n ): Promise<void> {\n const variables = this.createVariables(skip, take, searchFilter, fieldFilter, sort);\n await this.queryRef?.refetch(variables);\n }\n\n protected createVariables(\n skip = 0,\n take = 10,\n searchFilter: SearchFilterDto | null = null,\n fieldFilter: FieldFilterDto[] | null = null,\n sort: SortDto[] | null = null\n ): TVariablesDto {\n // Default sort\n if ((!sort || (sort && sort.length === 0)) && searchFilter === null) {\n sort = new Array<SortDto>();\n if (this.defaultSort) {\n sort = this.defaultSort;\n }\n }\n\n return {\n first: take,\n after: GraphQL.offsetToCursor(skip),\n sort,\n searchFilter,\n fieldFilters: fieldFilter\n } as TVariablesDto;\n }\n\n public loadData(\n skip = 0,\n take = 10,\n searchFilter: SearchFilterDto | null = null,\n fieldFilter: FieldFilterDto[] | null = null,\n sort: SortDto[] | null = null\n ): void {\n super.onBeginLoad();\n this.clear();\n\n const variables = this.createVariables(skip, take, searchFilter, fieldFilter, sort);\n this.queryRef = this.query.watch(variables);\n\n this.subscription = this.queryRef.valueChanges\n .pipe(map((v, i) => this.executeLoad(v, i)))\n .pipe(\n catchError((error: string) => {\n this.messageService.showError(error, 'Error during load of data');\n\n return of(new PagedResultDto<TDto>());\n })\n )\n .subscribe((pagedResult) => {\n super.onCompleteLoad(pagedResult);\n });\n }\n\n protected executeLoad(_value: ApolloQueryResult<TQueryDto>, _index: number): PagedResultDto<TDto> {\n return new PagedResultDto<TDto>();\n }\n}\n","import { Component, ElementRef, Input, ViewChild, OnInit, AfterViewInit, Output, EventEmitter } from \"@angular/core\";\nimport { MatPaginator, PageEvent } from \"@angular/material/paginator\";\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\nimport { BehaviorSubject, fromEvent, merge, Observable } from \"rxjs\";\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\nimport { AsyncPipe, NgForOf, NgIf } from \"@angular/common\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport {\n MatCell, MatCellDef,\n MatColumnDef,\n MatHeaderCell, MatHeaderCellDef,\n MatHeaderRow, MatHeaderRowDef,\n MatRow, MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatToolbar } from '@angular/material/toolbar';\n\n\n// pascal-case.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NewGraphQlDataSource } from \"../list-element/newGraphQlDataSource\";\nimport { SearchFilterDto, SearchFilterTypesDto, SortDto, SortOrdersDto } from \"../list-element/globalTypes\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatListItemIcon } from \"@angular/material/list\";\nimport { RouterLink } from \"@angular/router\";\n\n@Pipe({\n standalone: true,\n name: \"pascalCase\"\n})\nexport class PascalCasePipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n}\n\nexport interface DataColumns {\n columnNames: string[];\n accessPaths: Record<string, string>\n}\n\nexport interface ActionColumn {\n columnName: string;\n iconName?: string;\n svgIconName?: string;\n}\n\nexport interface ToolbarAction {\n iconName?: string;\n svgIconName?: string;\n route?: string;\n actionText: string;\n isDisabled?: Observable<boolean>;\n}\n\n@Component({\n selector: 'mm-octo-table',\n standalone: true,\n imports: [\n AsyncPipe,\n MatButton,\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFormField,\n MatHeaderCell,\n MatIcon,\n MatInput,\n MatLabel,\n MatPaginator,\n MatProgressBar,\n MatRow,\n MatRowDef,\n MatSort,\n MatSortHeader,\n MatTable,\n MatToolbar,\n NgIf,\n MatHeaderCellDef,\n NgForOf,\n PascalCasePipe,\n MatIcon,\n MatIconButton,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatIcon,\n MatIcon,\n MatListItemIcon,\n MatHeaderRow,\n MatHeaderRowDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatButton,\n MatIcon,\n RouterLink,\n MatIcon,\n MatHeaderCellDef,\n MatCellDef,\n MatHeaderRowDef,\n MatRowDef\n ],\n templateUrl: './mm-octo-table.component.html',\n styleUrl: './mm-octo-table.component.scss'\n})\nexport class MmOctoTableComponent implements OnInit, AfterViewInit {\n @Input() dataSource!: NewGraphQlDataSource<any, any, any>;\n @Input() dataColumns: DataColumns = { columnNames: [], accessPaths: {} };\n @Input() actionColumns: ActionColumn[] = [];\n @Input() leftToolbarActions: ToolbarAction[] = [];\n @Input() optionActions: ActionColumn[] = [];\n @Input() searchFilterColumns: string[] = [];\n @Input() currentRoute = \"\";\n @Input() currentId = \"\";\n @Input() defaultSortColumn = \"\";\n @Input() rowIsClickable = true;\n\n @Input() pageSizeOptions= [5, 10, 20, 50];\n @Input() selectedPageSize = 5;\n\n @Output() rowClicked = new EventEmitter<any>();\n @Output() searchFilterStringUpdated = new EventEmitter<string>();\n @Input() selectedRowId = \"\"\n\n @Output() actionColumnClick = new EventEmitter<{ action: string; id: string, entry: any }>()\n\n selectedRow: any = null; // Track the selected row\n\n selectedPageSizeSubject: BehaviorSubject<number> = new BehaviorSubject<number>(this.selectedPageSize);\n\n\n @ViewChild(MatPaginator, { static: false }) paginator?: MatPaginator;\n @ViewChild(MatSort, { static: false }) sort?: MatSort;\n @ViewChild('input', { static: false }) input?: ElementRef<HTMLInputElement>;\n\n protected loading = false;\n protected isMobile: boolean;\n\n constructor() {\n this.isMobile = false;\n }\n\n ngOnInit(): void {\n\n this.selectedPageSizeSubject.next(this.selectedPageSize);\n // at least add the currentId to the search filter columns\n if(this.currentId && !this.searchFilterColumns.includes(this.currentId)) {\n this.searchFilterColumns.push(this.currentId);\n }\n\n if (!this.dataSource) {\n throw new Error('No dataSource provided');\n }\n\n this.checkSelectedRow();\n }\n\n // noinspection JSUnusedGlobalSymbols\n ngAfterViewInit(): void {\n if (this.sort && this.input && this.paginator) {\n\n fromEvent(this.input.nativeElement, 'keyup')\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(() => {\n // server-side search\n if (this.paginator) {\n this.paginator.pageIndex = 0;\n }\n this.searchFilterStringUpdated.emit(this.input?.nativeElement?.value ?? \"\");\n this.loadData();\n })\n )\n .subscribe();\n\n // reset the paginator after sorting\n this.sort.sortChange.subscribe(() => {\n if (this.paginator) this.paginator.pageIndex = 0;\n });\n\n merge(this.sort.sortChange, this.paginator.page)\n .pipe(\n tap(() => {\n this.loadData();\n })\n )\n .subscribe();\n }\n }\n\n loadData(): void {\n if (!this.input || !this.sort) {\n return;\n }\n const filterString = this.input.nativeElement.value;\n const field = this.sort.active;\n const direction = this.sort.direction;\n\n let filter = null;\n if (filterString) {\n filter = {\n type: SearchFilterTypesDto.AttributeFilterDto,\n attributeNames: this.searchFilterColumns,\n searchTerm: filterString\n } as SearchFilterDto;\n }\n\n const sort = [];\n if (field) {\n sort.push(({\n attributeName: field,\n sortOrder: direction === 'asc' ? SortOrdersDto.AscendingDto : SortOrdersDto.DescendingDto\n } as SortDto));\n }\n\n if (this.paginator) {\n this.dataSource?.loadData(this.paginator.pageIndex * this.paginator.pageSize, this.paginator.pageSize, filter, null, sort);\n }\n }\n\n protected readonly encodeURIComponent = encodeURIComponent;\n\n accessElement(element:any, column: string, accessPaths: Record<string, string>): any {\n // get keys of accessPaths\n const keys = Object.keys(accessPaths);\n // check if column is in keys\n if(!keys.includes(column)) {\n return element[column];\n }\n\n try {\n // if column is in accessPaths, try split accessPaths[column] by '.' and access element\n const path = accessPaths[column].split('.');\n let result = element;\n for (const p of path) {\n result = result[p];\n }\n return result;\n } catch {\n //console.log(`Error accessing element: ${e}`);\n return \"NONE\";\n }\n }\n\n selectedPageSizeChanged($event: PageEvent) {\n console.log($event.pageSize)\n this.selectedPageSizeSubject.next($event.pageSize);\n }\n\n getActionColumnNames(): string[] {\n return this.actionColumns.map(ac => ac.columnName);\n }\n\n\n onRowClick(row: any) {\n if (this.rowIsClickable) {\n this.selectedRow = row; // Set the clicked row as the selected one\n this.rowClicked.emit(row); // Emit the clicked row data\n }\n }\n\n isRowSelected(row: any): boolean {\n return this.selectedRow === row; // Check if the row is selected\n }\n\n checkSelectedRow() {\n\n // @ts-expect-error jnu\n this.dataSource.connect(null).subscribe((data) => {\n for(const entry of data) {\n if(entry.rtId === this.selectedRowId) {\n this.onRowClick(entry)\n }\n }\n });\n }\n\n\n emitRowData(data: { action: string; id: string, entry: any }) {\n this.actionColumnClick.emit(data)\n }\n\n\n // Predicate for rows with optionActions\n hasOptionActions = (_row: any) => {\n return this.optionActions.length > 0;\n };\n\n // Predicate for rows with actionColumns but no optionActions\n hasActionColumns = () => {\n return this.actionColumns.length > 0 || this.optionActions.length > 0;\n };\n}\n","<div>\n <mat-progress-bar *ngIf=\"loading || (dataSource?.loading$ | async)\" mode=\"indeterminate\"></mat-progress-bar>\n</div>\n\n<mat-toolbar class=\"octo-toolbar octo-detail-toolbar\">\n @for (toolbarAction of leftToolbarActions; track toolbarAction) {\n <button mat-flat-button routerLink=\"{{toolbarAction.route}}\" type=\"button\" [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\">\n @if (toolbarAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ toolbarAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (toolbarAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ toolbarAction.iconName }}</mat-icon>\n }\n {{ toolbarAction.actionText }}\n </button>\n }\n\n <div class=\"octo-spacer\"></div>\n\n <div class=\"octo-toolbar-search\">\n <mat-form-field appearance=\"outline\">\n <mat-label>\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n Search\n </mat-label>\n <input #input matInput [disabled]=\"loading\">\n </mat-form-field>\n </div>\n</mat-toolbar>\n\n<mat-table [class.isMobile]=\"isMobile\" [dataSource]=\"dataSource\" class=\"mat-elevation-z8 table-container\" mat-table matSort\n matSortActive=\"{{defaultSortColumn}}\" matSortDirection=\"asc\" matSortDisableClear=\"true\">\n\n <ng-container *ngFor=\"let column of dataColumns?.columnNames\" [matColumnDef]=\"column\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ column | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ column | pascalCase }}:</span>\n {{ accessElement(element, column, dataColumns.accessPaths) }}\n </mat-cell>\n </ng-container>\n\n <!-- Consolidated Action Column with multiple buttons -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>Actions</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @for (column of actionColumns; track column) {\n <ng-container>\n <button mat-button (click)=\"emitRowData({action: column.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n <mat-icon *ngIf=\"column?.svgIconName\" class=\"svg-icon\" svgIcon=\"{{ column.svgIconName }}\" matListItemIcon></mat-icon>\n <mat-icon *ngIf=\"column?.iconName\" class=\"material-symbols-outlined\">{{ column.iconName }}</mat-icon>\n </button>\n </ng-container>\n }\n\n <!-- Options menu with additional actions -->\n @if (optionActions.length > 0) {\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"Options\">\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n </button>\n }\n\n <mat-menu #menu=\"matMenu\">\n @for (optionAction of optionActions; track optionAction) {\n <ng-container>\n <button mat-menu-item\n (click)=\"emitRowData({action: optionAction.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n @if (optionAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ optionAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (optionAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ optionAction.iconName }}</mat-icon>\n }\n {{ optionAction.columnName | pascalCase }}\n </button>\n </ng-container>\n }\n </mat-menu>\n </mat-cell>\n </ng-container>\n\n <!-- Row when there are actions -->\n @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames?.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames?.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames\"></mat-row>\n }\n\n</mat-table>\n\n<mat-paginator [length]=\"dataSource?.totalCount$ | async\" (page)=\"selectedPageSizeChanged($event)\" [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"selectedPageSizeSubject.getValue()\"></mat-paginator>\n","import { NgModule } from '@angular/core';\nimport { MmOctoTableComponent } from \"./mm-octo-table/mm-octo-table.component\";\n\n\n\n@NgModule({\n declarations: [\n\n ],\n imports: [\n MmOctoTableComponent\n ],\n exports: [\n MmOctoTableComponent\n ]\n})\nexport class MmOctoUiModule { }\n","/*\n * Public API Surface of octo-ui\n */\n\nexport * from './lib/list-element/list-element.module';\nexport * from './lib/list-element/octoListNavigation';\nexport * from './lib/list-element/newGraphQlDataSource';\nexport * from './lib/list-element/globalTypes';\n\nexport * from './lib/mm-octo-table/mm-octo-table.component';\nexport * from './lib/mm-octo-ui.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;MAOa,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAFlB,YAAY,CAAA,EAAA,CAAA;AAEX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAFlB,YAAY,CAAA,EAAA,CAAA;;2FAEX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY;AACvB,iBAAA;;;ACND;AACA;AACA;AAqCA;IACY;AAAZ,CAAA,UAAY,uBAAuB,EAAA;AACjC,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,QAAmB;AACnB,IAAA,uBAAA,CAAA,WAAA,CAAA,GAAA,QAAoB;AACpB,IAAA,uBAAA,CAAA,qBAAA,CAAA,GAAA,oBAA0C;AAC1C,IAAA,uBAAA,CAAA,gBAAA,CAAA,GAAA,cAA+B;AAC/B,IAAA,uBAAA,CAAA,OAAA,CAAA,GAAA,IAAY;AACZ,IAAA,uBAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC,IAAA,uBAAA,CAAA,aAAA,CAAA,GAAA,WAAyB;AACzB,IAAA,uBAAA,CAAA,SAAA,CAAA,GAAA,MAAgB;AAChB,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,OAAkB;AAClB,IAAA,uBAAA,CAAA,eAAA,CAAA,GAAA,cAA8B;AAC9B,IAAA,uBAAA,CAAA,cAAA,CAAA,GAAA,YAA2B;AAC3B,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,QAAmB;AACrB,CAAC,EAbW,uBAAuB,KAAvB,uBAAuB,GAalC,EAAA,CAAA,CAAA;AAUD;IACY;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC;AACvC,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,aAA6B;AAC/B,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,GAG/B,EAAA,CAAA,CAAA;AAOD;IACY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,WAA0B;AAC1B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,SAAsB;AACtB,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,YAA4B;AAC9B,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA;AAED;AACA;AACA;;MC5Ea,0BAA0B,CAAA;AACrC,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,YAAY;AACZ,IAAA,IAAI;AAEJ,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;;AAEjB;MAEY,yBAAyB,CAAA;AACpC,IAAA,QAAQ;AACR,IAAA,gBAAgB;AAChB,IAAA,0BAA0B;AAE1B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;AAEvB;MAEY,kBAAkB,CAAA;AAQV,IAAA,SAAA;AACA,IAAA,IAAA;AACA,IAAA,SAAA;AACA,IAAA,WAAA;AAVZ,IAAA,eAAe,GAAG,IAAI,YAAY,EAA8B;AAEvE,IAAA,iBAAiB;AACjB,IAAA,aAAa;AACb,IAAA,cAAc;AAEd,IAAA,WAAA,CACmB,SAAuB,EACvB,IAAa,EACb,SAAwC,EACxC,WAAuC,EAAA;QAHvC,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAW,CAAA,WAAA,GAAX,WAAW;AAE5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;AAG5B,IAAA,IAAW,YAAY,GAAA;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAClC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS;QAEzC,IAAI,MAAM,GAAG,IAAI;AACjB,QAAA,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,MAAM,GAAG;AACP,gBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;AACnC,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB;AACvC,gBAAA,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC;aACf;;QAGtB,MAAM,IAAI,GAAG,EAAE;AACf,QAAA,IAAI,SAAS,IAAI,aAAa,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAE;AACT,gBAAA,aAAa,EAAE,SAAS;AACxB,gBAAA,SAAS,EAAE,aAAa,KAAK,KAAK,GAAG,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC;AACrE,aAAA,CAAC;;QAGhB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AACxD,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AAC7B,YAAA,YAAY,EAAE,MAAM;YACpB;SAC6B;;IAGjC,IAAI,GAAA;AAEF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;YAElB,SAAS,CAAa,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO;AACxD,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAK;AACP,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;AAC5B,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB;;gBAGF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK;AAErD,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;oBACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS;oBAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;;AAGrC,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;AAG/D,gBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;AAEhC,gBAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;AACrC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;AACpC,wBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;4BACb,EAAE,EAAE,IAAI,CAAC,aAAa;AACtB,4BAAA,KAAK,EAAE,KAAK;AACZ,4BAAA,YAAY,EAAE;AACf,yBAAA,CAAC;;AACG,yBAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,MAAM,EAAE;AAC5C,wBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;4BACb,EAAE,EAAE,IAAI,CAAC,aAAa;AACtB,4BAAA,KAAK,EAAE,MAAM;AACb,4BAAA,YAAY,EAAE;AACf,yBAAA,CAAC;;;gBAIN,IAAI,CAAC,QAAQ,EAAE;AACjB,aAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;;;QAIhB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAEpE,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AAC5C,aAAA,IAAI,CACH,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,QAAQ,EAAE;AACjB,SAAC,CAAC;AAEH,aAAA,SAAS,EAAE;;IAGR,QAAQ,GAAA;QACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;AAE/C;;AC7HK,MAAgB,iBAAwB,SAAQ,cAAoB,CAAA;AAkBzE;AAEK,MAAO,oBAAgF,SAAQ,iBAAuB,CAAA;AAK9G,IAAA,cAAA;AACO,IAAA,KAAA;AACA,IAAA,WAAA;AANX,IAAA,QAAQ;AACR,IAAA,YAAY;AAEpB,IAAA,WAAA,CACY,cAA8B,EACvB,KAAsC,EACtC,cAAgC,IAAI,EAAA;AAErD,QAAA,KAAK,EAAE;QAJG,IAAc,CAAA,cAAA,GAAd,cAAc;QACP,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAW,CAAA,WAAA,GAAX,WAAW;AAG5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;IAGjB,KAAK,GAAA;QACZ,KAAK,CAAC,KAAK,EAAE;AACb,QAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;AAGnB,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;;AAGzB,IAAA,MAAM,WAAW,CACtB,IAAI,GAAG,CAAC,EACR,IAAI,GAAG,EAAE,EACT,eAAuC,IAAI,EAC3C,cAAuC,IAAI,EAC3C,OAAyB,IAAI,EAAA;AAE7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC;QACnF,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;;AAG/B,IAAA,eAAe,CACvB,IAAI,GAAG,CAAC,EACR,IAAI,GAAG,EAAE,EACT,YAAA,GAAuC,IAAI,EAC3C,WAAA,GAAuC,IAAI,EAC3C,OAAyB,IAAI,EAAA;;AAG7B,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,EAAE;AACnE,YAAA,IAAI,GAAG,IAAI,KAAK,EAAW;AAC3B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,GAAG,IAAI,CAAC,WAAW;;;QAI3B,OAAO;AACL,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;YACnC,IAAI;YACJ,YAAY;AACZ,YAAA,YAAY,EAAE;SACE;;AAGb,IAAA,QAAQ,CACb,IAAI,GAAG,CAAC,EACR,IAAI,GAAG,EAAE,EACT,YAAA,GAAuC,IAAI,EAC3C,WAAA,GAAuC,IAAI,EAC3C,OAAyB,IAAI,EAAA;QAE7B,KAAK,CAAC,WAAW,EAAE;QACnB,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC;QACnF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;AAE3C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAa,KAAI;YAC3B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,2BAA2B,CAAC;AAEjE,YAAA,OAAO,EAAE,CAAC,IAAI,cAAc,EAAQ,CAAC;AACvC,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,WAAW,KAAI;AACzB,YAAA,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;AACnC,SAAC,CAAC;;IAGI,WAAW,CAAC,MAAoC,EAAE,MAAc,EAAA;QACxE,OAAO,IAAI,cAAc,EAAQ;;AAEpC;;MC5FY,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AACxB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;uGAH5C,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;MA6EY,oBAAoB,CAAA;AACtB,IAAA,UAAU;IACV,WAAW,GAAiB,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IAChE,aAAa,GAAmB,EAAE;IAClC,kBAAkB,GAAoB,EAAE;IACxC,aAAa,GAAmB,EAAE;IAClC,mBAAmB,GAAa,EAAE;IAClC,YAAY,GAAG,EAAE;IACjB,SAAS,GAAG,EAAE;IACd,iBAAiB,GAAG,EAAE;IACtB,cAAc,GAAG,IAAI;IAErB,eAAe,GAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChC,gBAAgB,GAAG,CAAC;AAEnB,IAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,IAAA,yBAAyB,GAAG,IAAI,YAAY,EAAU;IACvD,aAAa,GAAG,EAAE;AAEjB,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8C;AAE5F,IAAA,WAAW,GAAQ,IAAI,CAAC;IAExB,uBAAuB,GAA4B,IAAI,eAAe,CAAS,IAAI,CAAC,gBAAgB,CAAC;AAGzD,IAAA,SAAS;AACd,IAAA,IAAI;AACJ,IAAA,KAAK;IAElC,OAAO,GAAG,KAAK;AACf,IAAA,QAAQ;AAElB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;IAGvB,QAAQ,GAAA;QAEN,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAExD,QAAA,IAAG,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACvE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG/C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;;QAG3C,IAAI,CAAC,gBAAgB,EAAE;;;IAIzB,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;YAE7C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO;AACxC,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAK;;AAEP,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;;AAE9B,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC3E,IAAI,CAAC,QAAQ,EAAE;AACjB,aAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;;YAGd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;gBAClC,IAAI,IAAI,CAAC,SAAS;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;AAClD,aAAC,CAAC;AAEF,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AAC5C,iBAAA,IAAI,CACH,GAAG,CAAC,MAAK;gBACP,IAAI,CAAC,QAAQ,EAAE;AACjB,aAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;;;IAIlB,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC7B;;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK;AACnD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS;QAErC,IAAI,MAAM,GAAG,IAAI;QACjB,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,GAAG;gBACP,IAAI,EAAE,oBAAoB,CAAC,kBAAkB;gBAC7C,cAAc,EAAE,IAAI,CAAC,mBAAmB;AACxC,gBAAA,UAAU,EAAE;aACM;;QAGtB,MAAM,IAAI,GAAG,EAAE;QACf,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,CAAE;AACT,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,SAAS,EAAE,SAAS,KAAK,KAAK,GAAG,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC;AACjE,aAAA,CAAC;;AAGhB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;;;IAI3G,kBAAkB,GAAG,kBAAkB;AAE1D,IAAA,aAAa,CAAC,OAAW,EAAE,MAAc,EAAE,WAAmC,EAAA;;QAE5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;;QAErC,IAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC;;AAGxB,QAAA,IAAI;;YAEF,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3C,IAAI,MAAM,GAAG,OAAO;AACpB,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,gBAAA,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;;AAEpB,YAAA,OAAO,MAAM;;AACb,QAAA,MAAO;;AAEP,YAAA,OAAO,MAAM;;;AAIjB,IAAA,uBAAuB,CAAC,MAAiB,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;;IAGpD,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC;;AAIpD,IAAA,UAAU,CAAC,GAAQ,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;;AAI9B,IAAA,aAAa,CAAC,GAAQ,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,GAAG,CAAC;;IAGlC,gBAAgB,GAAA;;AAGd,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC/C,YAAA,KAAI,MAAM,KAAK,IAAI,IAAI,EAAE;gBACvB,IAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;AACpC,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;;AAG5B,SAAC,CAAC;;AAIJ,IAAA,WAAW,CAAC,IAAgD,EAAA;AAC1D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAKnC,IAAA,gBAAgB,GAAG,CAAC,IAAS,KAAI;AAC/B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;AACtC,KAAC;;IAGD,gBAAgB,GAAG,MAAK;AACtB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;AACvE,KAAC;uGA3LU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EA0BpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,YAAY,EACZ,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,OAAO,EC1IpB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2xIA6FA,ED5BI,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,mEACP,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,YAAY,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,EACZ,aAAa,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,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,WAAA,EAAA,IAAA,EACP,QAAQ,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,WAAA,EAAA,IAAA,EACR,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,EACd,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAM,EACN,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAQ,EACR,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAU,EACV,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAI,EACJ,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,+DAChB,OAAO,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAlDE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAqDvB,aAAa,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,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,EACP,WAAW,EACX,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,EAAA,cAAc,EAGd,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,WAAA,EAAA,IAAA,EAAA,eAAe,EACf,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,EACZ,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,oHAKf,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAUD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAlDhC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA;wBACP,SAAS;wBACT,SAAS;wBACT,OAAO;wBACP,UAAU;wBACV,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,OAAO;wBACP,QAAQ;wBACR,QAAQ;wBACR,YAAY;wBACZ,cAAc;wBACd,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,aAAa;wBACb,QAAQ;wBACR,UAAU;wBACV,IAAI;wBACJ,gBAAgB;wBAChB,OAAO;wBACP,cAAc;wBACd,OAAO;wBACP,aAAa;wBACb,OAAO;wBACP,WAAW;wBACX,cAAc;wBACd,OAAO;wBACP,OAAO;wBACP,eAAe;wBACf,YAAY;wBACZ,eAAe;wBACf,YAAY;wBACZ,eAAe;wBACf,SAAS;wBACT,OAAO;wBACP,UAAU;wBACV,OAAO;wBACP,gBAAgB;wBAChB,UAAU;wBACV,eAAe;wBACf;AACD,qBAAA,EAAA,QAAA,EAAA,2xIAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA;wDAKQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBACS,yBAAyB,EAAA,CAAA;sBAAlC;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAES,iBAAiB,EAAA,CAAA;sBAA1B;gBAO2C,SAAS,EAAA,CAAA;sBAApD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACH,IAAI,EAAA,CAAA;sBAA1C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACE,KAAK,EAAA,CAAA;sBAA3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;ME3H1B,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAd,cAAc,EAAA,OAAA,EAAA,CANvB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAGpB,oBAAoB,CAAA,EAAA,CAAA;AAGX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YANvB,oBAAoB,CAAA,EAAA,CAAA;;2FAMX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAEb;AACD,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;ACfD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"meshmakers-octo-ui.mjs","sources":["../../../../projects/meshmakers/octo-ui/src/lib/list-element/list-element.module.ts","../../../../projects/meshmakers/octo-ui/src/lib/list-element/octoListNavigation.ts","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-table/mm-octo-table.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-table/mm-octo-table.component.html","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-ui.module.ts","../../../../projects/meshmakers/octo-ui/src/public-api.ts","../../../../projects/meshmakers/octo-ui/src/meshmakers-octo-ui.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule]\n})\nexport class ListElementModule {}\n","import { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, SortDirection } from '@angular/material/sort';\nimport { ElementRef, EventEmitter } from '@angular/core';\nimport { fromEvent, merge } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\nimport { SearchFilterDto, SearchFilterTypesDto, SortDto, SortOrdersDto } from \"@meshmakers/octo-services\";\n\nexport class OctoListNavigationDataInfo {\n skip: number;\n take: number;\n searchFilter?: SearchFilterDto;\n sort?: SortDto[];\n\n constructor() {\n this.skip = 0;\n this.take = 10;\n }\n}\n\nexport class OctoListNavigationOptions {\n language: string | null;\n searchFilterType?: SearchFilterTypesDto;\n searchFilterAttributePaths?: string[];\n\n constructor() {\n this.language = null;\n }\n}\n\nexport class OctoListNavigation {\n public loadDataRequest = new EventEmitter<OctoListNavigationDataInfo>();\n\n lastSortDirection: SortDirection | null;\n lastSortField: string | null;\n lastSearchText: string | null;\n\n constructor(\n private readonly paginator: MatPaginator,\n private readonly sort: MatSort,\n private readonly searchBox?: ElementRef<HTMLInputElement>,\n private readonly octoOptions?: OctoListNavigationOptions\n ) {\n this.lastSortDirection = null;\n this.lastSortField = null;\n this.lastSearchText = null;\n }\n\n public get loadDataInfo(): OctoListNavigationDataInfo {\n const filterString = this.searchBox?.nativeElement.value;\n const sortField = this.sort.active;\n const sortDirection = this.sort.direction;\n\n let filter = null;\n if (filterString && this.octoOptions) {\n filter = {\n language: this.octoOptions.language,\n searchTerm: filterString,\n type: this.octoOptions.searchFilterType,\n attributePaths: this.octoOptions.searchFilterAttributePaths\n } as SearchFilterDto;\n }\n\n const sort = [];\n if (sortField && sortDirection) {\n sort.push(({\n attributePath: sortField,\n sortOrder: sortDirection === 'asc' ? SortOrdersDto.AscendingDto : SortOrdersDto.DescendingDto\n } as SortDto));\n }\n\n return {\n skip: this.paginator.pageIndex * this.paginator.pageSize,\n take: this.paginator.pageSize,\n searchFilter: filter,\n sort\n } as OctoListNavigationDataInfo;\n }\n\n init(): void {\n\n if (this.searchBox) {\n // server-side search\n fromEvent<ElementRef>(this.searchBox.nativeElement, 'keyup')\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(() => {\n this.paginator.pageIndex = 0;\n if (!this.searchBox) {\n return;\n }\n\n const searchText = this.searchBox.nativeElement.value;\n\n if (!this.lastSearchText && searchText) {\n this.lastSortDirection = this.sort.direction;\n this.lastSortField = this.sort.active;\n\n // Reset sorting to see the score rating (default sorting returned from server)\n this.sort.sort({ id: '', start: 'asc', disableClear: false });\n }\n\n this.lastSearchText = searchText;\n\n if (!searchText && this.lastSortField) {\n if (this.lastSortDirection === 'asc') {\n this.sort.sort({\n id: this.lastSortField,\n start: 'asc',\n disableClear: true\n });\n } else if (this.lastSortDirection === 'desc') {\n this.sort.sort({\n id: this.lastSortField,\n start: 'desc',\n disableClear: true\n });\n }\n }\n\n this.loadData();\n })\n )\n .subscribe();\n }\n\n // reset the paginator after sorting\n this.sort.sortChange.subscribe(() => (this.paginator.pageIndex = 0));\n\n merge(this.sort.sortChange, this.paginator.page)\n .pipe(\n tap(() => {\n this.loadData();\n })\n )\n .subscribe();\n }\n\n private loadData(): void {\n this.loadDataRequest.emit(this.loadDataInfo);\n }\n}\n","import { Component, ElementRef, Input, ViewChild, OnInit, AfterViewInit, Output, EventEmitter } from \"@angular/core\";\nimport { MatPaginator, PageEvent } from \"@angular/material/paginator\";\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\nimport { BehaviorSubject, fromEvent, merge, Observable } from \"rxjs\";\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\nimport { AsyncPipe, NgForOf, NgIf } from \"@angular/common\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport {\n MatCell, MatCellDef,\n MatColumnDef,\n MatHeaderCell, MatHeaderCellDef,\n MatHeaderRow, MatHeaderRowDef,\n MatRow, MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatToolbar } from '@angular/material/toolbar';\n\n\n// pascal-case.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatListItemIcon } from \"@angular/material/list\";\nimport { RouterLink } from \"@angular/router\";\nimport { AssetRepoGraphQlDataSource, SearchFilterDto, SearchFilterTypesDto, SortDto, SortOrdersDto } from \"@meshmakers/octo-services\";\n\n@Pipe({\n standalone: true,\n name: \"pascalCase\"\n})\nexport class PascalCasePipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n}\n\nexport interface DataColumns {\n columnNames: string[];\n accessPaths: Record<string, string>\n}\n\nexport interface ActionColumn {\n columnName: string;\n iconName?: string;\n svgIconName?: string;\n}\n\nexport interface ToolbarAction {\n iconName?: string;\n svgIconName?: string;\n route?: string;\n actionText: string;\n isDisabled?: Observable<boolean>;\n}\n\n@Component({\n selector: 'mm-octo-table',\n standalone: true,\n imports: [\n AsyncPipe,\n MatButton,\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFormField,\n MatHeaderCell,\n MatIcon,\n MatInput,\n MatLabel,\n MatPaginator,\n MatProgressBar,\n MatRow,\n MatRowDef,\n MatSort,\n MatSortHeader,\n MatTable,\n MatToolbar,\n NgIf,\n MatHeaderCellDef,\n NgForOf,\n PascalCasePipe,\n MatIcon,\n MatIconButton,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatIcon,\n MatIcon,\n MatListItemIcon,\n MatHeaderRow,\n MatHeaderRowDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatButton,\n MatIcon,\n RouterLink,\n MatIcon,\n MatHeaderCellDef,\n MatCellDef,\n MatHeaderRowDef,\n MatRowDef\n ],\n templateUrl: './mm-octo-table.component.html',\n styleUrl: './mm-octo-table.component.scss'\n})\nexport class MmOctoTableComponent implements OnInit, AfterViewInit {\n @Input() dataSource!: AssetRepoGraphQlDataSource<any, any, any>;\n @Input() dataColumns: DataColumns = { columnNames: [], accessPaths: {} };\n @Input() actionColumns: ActionColumn[] = [];\n @Input() leftToolbarActions: ToolbarAction[] = [];\n @Input() optionActions: ActionColumn[] = [];\n @Input() searchFilterColumns: string[] = [];\n @Input() currentRoute = \"\";\n @Input() currentId = \"\";\n @Input() defaultSortColumn = \"\";\n @Input() rowIsClickable = true;\n\n @Input() pageSizeOptions= [5, 10, 20, 50];\n @Input() selectedPageSize = 5;\n\n @Output() rowClicked = new EventEmitter<any>();\n @Output() searchFilterStringUpdated = new EventEmitter<string>();\n @Input() selectedRowId = \"\"\n\n @Output() actionColumnClick = new EventEmitter<{ action: string; id: string, entry: any }>()\n\n selectedRow: any = null; // Track the selected row\n\n selectedPageSizeSubject: BehaviorSubject<number> = new BehaviorSubject<number>(this.selectedPageSize);\n\n\n @ViewChild(MatPaginator, { static: false }) paginator?: MatPaginator;\n @ViewChild(MatSort, { static: false }) sort?: MatSort;\n @ViewChild('input', { static: false }) input?: ElementRef<HTMLInputElement>;\n\n protected loading = false;\n protected isMobile: boolean;\n\n constructor() {\n this.isMobile = false;\n }\n\n ngOnInit(): void {\n\n this.selectedPageSizeSubject.next(this.selectedPageSize);\n // at least add the currentId to the search filter columns\n if(this.currentId && !this.searchFilterColumns.includes(this.currentId)) {\n this.searchFilterColumns.push(this.currentId);\n }\n\n if (!this.dataSource) {\n throw new Error('No dataSource provided');\n }\n\n this.checkSelectedRow();\n }\n\n // noinspection JSUnusedGlobalSymbols\n ngAfterViewInit(): void {\n if (this.sort && this.input && this.paginator) {\n\n fromEvent(this.input.nativeElement, 'keyup')\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(() => {\n // server-side search\n if (this.paginator) {\n this.paginator.pageIndex = 0;\n }\n this.searchFilterStringUpdated.emit(this.input?.nativeElement?.value ?? \"\");\n this.loadData();\n })\n )\n .subscribe();\n\n // reset the paginator after sorting\n this.sort.sortChange.subscribe(() => {\n if (this.paginator) this.paginator.pageIndex = 0;\n });\n\n merge(this.sort.sortChange, this.paginator.page)\n .pipe(\n tap(() => {\n this.loadData();\n })\n )\n .subscribe();\n }\n }\n\n loadData(): void {\n if (!this.input || !this.sort) {\n return;\n }\n const filterString = this.input.nativeElement.value;\n const field = this.sort.active;\n const direction = this.sort.direction;\n\n let filter = null;\n if (filterString) {\n filter = {\n type: SearchFilterTypesDto.AttributeFilterDto,\n attributeNames: this.searchFilterColumns,\n searchTerm: filterString\n } as SearchFilterDto;\n }\n\n const sort = [];\n if (field) {\n sort.push(({\n attributePath: field,\n sortOrder: direction === 'asc' ? SortOrdersDto.AscendingDto : SortOrdersDto.DescendingDto\n } as SortDto));\n }\n\n if (this.paginator) {\n this.dataSource?.loadData(this.paginator.pageIndex * this.paginator.pageSize, this.paginator.pageSize, filter, null, sort);\n }\n }\n\n protected readonly encodeURIComponent = encodeURIComponent;\n\n accessElement(element:any, column: string, accessPaths: Record<string, string>): any {\n // get keys of accessPaths\n const keys = Object.keys(accessPaths);\n // check if column is in keys\n if(!keys.includes(column)) {\n return element[column];\n }\n\n try {\n // if column is in accessPaths, try split accessPaths[column] by '.' and access element\n const path = accessPaths[column].split('.');\n let result = element;\n for (const p of path) {\n result = result[p];\n }\n return result;\n } catch {\n //console.log(`Error accessing element: ${e}`);\n return \"NONE\";\n }\n }\n\n selectedPageSizeChanged($event: PageEvent) {\n console.log($event.pageSize)\n this.selectedPageSizeSubject.next($event.pageSize);\n }\n\n getActionColumnNames(): string[] {\n return this.actionColumns.map(ac => ac.columnName);\n }\n\n\n onRowClick(row: any) {\n if (this.rowIsClickable) {\n this.selectedRow = row; // Set the clicked row as the selected one\n this.rowClicked.emit(row); // Emit the clicked row data\n }\n }\n\n isRowSelected(row: any): boolean {\n return this.selectedRow === row; // Check if the row is selected\n }\n\n checkSelectedRow() {\n\n // @ts-expect-error jnu\n this.dataSource.connect(null).subscribe((data) => {\n for(const entry of data) {\n if(entry.rtId === this.selectedRowId) {\n this.onRowClick(entry)\n }\n }\n });\n }\n\n\n emitRowData(data: { action: string; id: string, entry: any }) {\n this.actionColumnClick.emit(data)\n }\n\n\n // Predicate for rows with optionActions\n hasOptionActions = (_row: any) => {\n return this.optionActions.length > 0;\n };\n\n // Predicate for rows with actionColumns but no optionActions\n hasActionColumns = () => {\n return this.actionColumns.length > 0 || this.optionActions.length > 0;\n };\n}\n","<div>\n <mat-progress-bar *ngIf=\"loading || (dataSource?.loading$ | async)\" mode=\"indeterminate\"></mat-progress-bar>\n</div>\n\n<mat-toolbar class=\"octo-toolbar octo-detail-toolbar\">\n @for (toolbarAction of leftToolbarActions; track toolbarAction) {\n <button mat-flat-button routerLink=\"{{toolbarAction.route}}\" type=\"button\" [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\">\n @if (toolbarAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ toolbarAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (toolbarAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ toolbarAction.iconName }}</mat-icon>\n }\n {{ toolbarAction.actionText }}\n </button>\n }\n\n <div class=\"octo-spacer\"></div>\n\n <div class=\"octo-toolbar-search\">\n <mat-form-field appearance=\"outline\">\n <mat-label>\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n Search\n </mat-label>\n <input #input matInput [disabled]=\"loading\">\n </mat-form-field>\n </div>\n</mat-toolbar>\n\n<mat-table [class.isMobile]=\"isMobile\" [dataSource]=\"dataSource\" class=\"mat-elevation-z8 table-container\" mat-table matSort\n matSortActive=\"{{defaultSortColumn}}\" matSortDirection=\"asc\" matSortDisableClear=\"true\">\n\n <ng-container *ngFor=\"let column of dataColumns?.columnNames\" [matColumnDef]=\"column\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ column | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ column | pascalCase }}:</span>\n {{ accessElement(element, column, dataColumns.accessPaths) }}\n </mat-cell>\n </ng-container>\n\n <!-- Consolidated Action Column with multiple buttons -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>Actions</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @for (column of actionColumns; track column) {\n <ng-container>\n <button mat-button (click)=\"emitRowData({action: column.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n <mat-icon *ngIf=\"column?.svgIconName\" class=\"svg-icon\" svgIcon=\"{{ column.svgIconName }}\" matListItemIcon></mat-icon>\n <mat-icon *ngIf=\"column?.iconName\" class=\"material-symbols-outlined\">{{ column.iconName }}</mat-icon>\n </button>\n </ng-container>\n }\n\n <!-- Options menu with additional actions -->\n @if (optionActions.length > 0) {\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"Options\">\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n </button>\n }\n\n <mat-menu #menu=\"matMenu\">\n @for (optionAction of optionActions; track optionAction) {\n <ng-container>\n <button mat-menu-item\n (click)=\"emitRowData({action: optionAction.columnName, id: encodeURIComponent(element[currentId]), entry: element})\">\n @if (optionAction?.svgIconName) {\n <mat-icon class=\"svg-icon\" svgIcon=\"{{ optionAction.svgIconName }}\" matListItemIcon></mat-icon>\n }\n @if (optionAction?.iconName) {\n <mat-icon class=\"material-symbols-outlined\">{{ optionAction.iconName }}</mat-icon>\n }\n {{ optionAction.columnName | pascalCase }}\n </button>\n </ng-container>\n }\n </mat-menu>\n </mat-cell>\n </ng-container>\n\n <!-- Row when there are actions -->\n @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames?.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames?.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"dataColumns?.columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: dataColumns?.columnNames\"></mat-row>\n }\n\n</mat-table>\n\n<mat-paginator [length]=\"dataSource?.totalCount$ | async\" (page)=\"selectedPageSizeChanged($event)\" [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"selectedPageSizeSubject.getValue()\"></mat-paginator>\n","import { NgModule } from '@angular/core';\nimport { MmOctoTableComponent } from \"./mm-octo-table/mm-octo-table.component\";\n\n\n\n@NgModule({\n declarations: [\n\n ],\n imports: [\n MmOctoTableComponent\n ],\n exports: [\n MmOctoTableComponent\n ]\n})\nexport class MmOctoUiModule { }\n","/*\n * Public API Surface of octo-ui\n */\n\nexport * from './lib/list-element/list-element.module';\nexport * from './lib/list-element/octoListNavigation';\n\n\nexport * from './lib/mm-octo-table/mm-octo-table.component';\nexport * from './lib/mm-octo-ui.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { MatPaginator } from '@angular/material/paginator';
2
2
  import { MatSort, SortDirection } from '@angular/material/sort';
3
3
  import { ElementRef, EventEmitter } from '@angular/core';
4
- import { SearchFilterDto, SearchFilterTypesDto, SortDto } from './globalTypes';
4
+ import { SearchFilterDto, SearchFilterTypesDto, SortDto } from "@meshmakers/octo-services";
5
5
  export declare class OctoListNavigationDataInfo {
6
6
  skip: number;
7
7
  take: number;
@@ -12,7 +12,7 @@ export declare class OctoListNavigationDataInfo {
12
12
  export declare class OctoListNavigationOptions {
13
13
  language: string | null;
14
14
  searchFilterType?: SearchFilterTypesDto;
15
- searchFilterAttributeNames?: string[];
15
+ searchFilterAttributePaths?: string[];
16
16
  constructor();
17
17
  }
18
18
  export declare class OctoListNavigation {
@@ -3,7 +3,7 @@ import { MatPaginator, PageEvent } from "@angular/material/paginator";
3
3
  import { MatSort } from '@angular/material/sort';
4
4
  import { BehaviorSubject, Observable } from "rxjs";
5
5
  import { PipeTransform } from '@angular/core';
6
- import { NewGraphQlDataSource } from "../list-element/newGraphQlDataSource";
6
+ import { AssetRepoGraphQlDataSource } from "@meshmakers/octo-services";
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class PascalCasePipe implements PipeTransform {
9
9
  transform(value: string): string;
@@ -27,7 +27,7 @@ export interface ToolbarAction {
27
27
  isDisabled?: Observable<boolean>;
28
28
  }
29
29
  export declare class MmOctoTableComponent implements OnInit, AfterViewInit {
30
- dataSource: NewGraphQlDataSource<any, any, any>;
30
+ dataSource: AssetRepoGraphQlDataSource<any, any, any>;
31
31
  dataColumns: DataColumns;
32
32
  actionColumns: ActionColumn[];
33
33
  leftToolbarActions: ToolbarAction[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshmakers/octo-ui",
3
- "version": "3.2.18-0",
3
+ "version": "3.2.20-0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.1.2",
6
6
  "@angular/core": "^19.1.2"
package/public-api.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  export * from './lib/list-element/list-element.module';
2
2
  export * from './lib/list-element/octoListNavigation';
3
- export * from './lib/list-element/newGraphQlDataSource';
4
- export * from './lib/list-element/globalTypes';
5
3
  export * from './lib/mm-octo-table/mm-octo-table.component';
6
4
  export * from './lib/mm-octo-ui.module';
@@ -1,122 +0,0 @@
1
- export type Maybe<T> = T | null;
2
- export type InputMaybe<T> = Maybe<T>;
3
- /** All built-in and custom scalars, mapped to their actual values */
4
- export type Scalars = {
5
- ID: {
6
- input: string;
7
- output: string;
8
- };
9
- String: {
10
- input: string;
11
- output: string;
12
- };
13
- Boolean: {
14
- input: boolean;
15
- output: boolean;
16
- };
17
- Int: {
18
- input: number;
19
- output: number;
20
- };
21
- Float: {
22
- input: number;
23
- output: number;
24
- };
25
- BigInt: {
26
- input: any;
27
- output: any;
28
- };
29
- CkAttributeId: {
30
- input: string;
31
- output: string;
32
- };
33
- CkEnumId: {
34
- input: string;
35
- output: string;
36
- };
37
- CkModelId: {
38
- input: any;
39
- output: any;
40
- };
41
- CkRecordId: {
42
- input: string;
43
- output: string;
44
- };
45
- CkTypeId: {
46
- input: string;
47
- output: string;
48
- };
49
- DateTime: {
50
- input: any;
51
- output: any;
52
- };
53
- Decimal: {
54
- input: any;
55
- output: any;
56
- };
57
- LargeBinary: {
58
- input: any;
59
- output: any;
60
- };
61
- OctoObjectId: {
62
- input: string;
63
- output: string;
64
- };
65
- Seconds: {
66
- input: any;
67
- output: any;
68
- };
69
- SimpleScalar: {
70
- input: any;
71
- output: any;
72
- };
73
- ULong: {
74
- input: any;
75
- output: any;
76
- };
77
- Uri: {
78
- input: any;
79
- output: any;
80
- };
81
- };
82
- export type FieldFilterDto = {
83
- attributeName: Scalars['String']['input'];
84
- comparisonValue?: InputMaybe<Scalars['SimpleScalar']['input']>;
85
- operator: FieldFilterOperatorsDto;
86
- };
87
- /** Defines the operator of field compare */
88
- export declare enum FieldFilterOperatorsDto {
89
- AnyEqDto = "ANY_EQ",
90
- EqualsDto = "EQUALS",
91
- GreaterEqualThanDto = "GREATER_EQUAL_THAN",
92
- GreaterThanDto = "GREATER_THAN",
93
- InDto = "IN",
94
- LessEqualThanDto = "LESS_EQUAL_THAN",
95
- LessThanDto = "LESS_THAN",
96
- LikeDto = "LIKE",
97
- MatchDto = "MATCH",
98
- MatchRegExDto = "MATCH_REG_EX",
99
- NotEqualsDto = "NOT_EQUALS",
100
- NotInDto = "NOT_IN"
101
- }
102
- export type SearchFilterDto = {
103
- attributeNames?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
104
- language?: InputMaybe<Scalars['String']['input']>;
105
- searchTerm: Scalars['String']['input'];
106
- type?: InputMaybe<SearchFilterTypesDto>;
107
- };
108
- /** The type of search that is used (a text based search using text analysis (high performance, scoring, maybe more false positives) or filtering of attributes (lower performance, more exact results) */
109
- export declare enum SearchFilterTypesDto {
110
- AttributeFilterDto = "ATTRIBUTE_FILTER",
111
- TextSearchDto = "TEXT_SEARCH"
112
- }
113
- export type SortDto = {
114
- attributeName: Scalars['String']['input'];
115
- sortOrder?: InputMaybe<SortOrdersDto>;
116
- };
117
- /** Defines the sort order */
118
- export declare enum SortOrdersDto {
119
- AscendingDto = "ASCENDING",
120
- DefaultDto = "DEFAULT",
121
- DescendingDto = "DESCENDING"
122
- }
@@ -1,30 +0,0 @@
1
- import { DataSourceBase, MessageService, PagedResultDto } from '@meshmakers/shared-services';
2
- import { FieldFilterDto, InputMaybe, SearchFilterDto, SortDto } from './globalTypes';
3
- import { Query } from 'apollo-angular';
4
- import type { ApolloQueryResult, OperationVariables } from '@apollo/client/core';
5
- export interface IQueryVariablesDto extends OperationVariables {
6
- first?: number | null | undefined;
7
- after?: string | null | undefined;
8
- sort?: InputMaybe<InputMaybe<SortDto> | InputMaybe<SortDto>[]> | undefined;
9
- searchFilter?: InputMaybe<SearchFilterDto> | undefined;
10
- fieldFilters?: InputMaybe<InputMaybe<FieldFilterDto>[] | InputMaybe<FieldFilterDto>>;
11
- }
12
- export declare abstract class GraphQlDataSource<TDto> extends DataSourceBase<TDto> {
13
- abstract refetch(): Promise<void>;
14
- abstract refetchWith(skip?: number, take?: number, searchFilter?: SearchFilterDto | null, fieldFilter?: FieldFilterDto[] | null, sort?: SortDto[] | null): Promise<void>;
15
- abstract loadData(skip?: number, take?: number, searchFilter?: SearchFilterDto | null, fieldFilter?: FieldFilterDto[] | null, sort?: SortDto[] | null): void;
16
- }
17
- export declare class NewGraphQlDataSource<TDto, TQueryDto, TVariablesDto extends IQueryVariablesDto> extends GraphQlDataSource<TDto> {
18
- protected messageService: MessageService;
19
- private readonly query;
20
- private readonly defaultSort;
21
- private queryRef;
22
- private subscription;
23
- constructor(messageService: MessageService, query: Query<TQueryDto, TVariablesDto>, defaultSort?: SortDto[] | null);
24
- clear(): void;
25
- refetch(): Promise<void>;
26
- refetchWith(skip?: number, take?: number, searchFilter?: SearchFilterDto | null, fieldFilter?: FieldFilterDto[] | null, sort?: SortDto[] | null): Promise<void>;
27
- protected createVariables(skip?: number, take?: number, searchFilter?: SearchFilterDto | null, fieldFilter?: FieldFilterDto[] | null, sort?: SortDto[] | null): TVariablesDto;
28
- loadData(skip?: number, take?: number, searchFilter?: SearchFilterDto | null, fieldFilter?: FieldFilterDto[] | null, sort?: SortDto[] | null): void;
29
- protected executeLoad(_value: ApolloQueryResult<TQueryDto>, _index: number): PagedResultDto<TDto>;
30
- }