@meshmakers/octo-ui 3.2.47-0 → 3.2.48-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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgModule, EventEmitter, Pipe, ViewChild, Input, Output, Component } from '@angular/core';
2
+ import { NgModule, EventEmitter, ViewChild, Input, Output, Component } from '@angular/core';
3
3
  import { CommonModule, AsyncPipe, NgIf, NgForOf } from '@angular/common';
4
4
  import { fromEvent, merge, BehaviorSubject } from 'rxjs';
5
5
  import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
@@ -147,22 +147,6 @@ function getDisplayName(column) {
147
147
  return column.displayName ?? column.dataKey;
148
148
  }
149
149
 
150
- class PascalCasePipe {
151
- transform(value) {
152
- if (!value)
153
- return value;
154
- return value.charAt(0).toUpperCase() + value.slice(1);
155
- }
156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: PascalCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
157
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.4", ngImport: i0, type: PascalCasePipe, isStandalone: true, name: "pascalCase" });
158
- }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: PascalCasePipe, decorators: [{
160
- type: Pipe,
161
- args: [{
162
- standalone: true,
163
- name: "pascalCase"
164
- }]
165
- }] });
166
150
  class MmOctoTableComponent {
167
151
  dataSource;
168
152
  actionColumns = [];
@@ -319,7 +303,7 @@ class MmOctoTableComponent {
319
303
  };
320
304
  getDisplayName = getDisplayName;
321
305
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: MmOctoTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
322
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.4", type: MmOctoTableComponent, isStandalone: true, selector: "mm-octo-table", inputs: { dataSource: "dataSource", actionColumns: "actionColumns", leftToolbarActions: "leftToolbarActions", optionActions: "optionActions", searchFilterColumns: "searchFilterColumns", currentId: "currentId", defaultSortColumn: "defaultSortColumn", rowIsClickable: "rowIsClickable", pageSizeOptions: "pageSizeOptions", selectedPageSize: "selectedPageSize", selectedRowId: "selectedRowId", columns: "columns" }, 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 columns\" [matColumnDef]=\"getDisplayName(column)\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ getDisplayName(column) | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ getDisplayName(column) | pascalCase }}:</span>\n {{ accessElement(element, column) }}\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 @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnNames.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnNames.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: 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"] }] });
306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.4", type: MmOctoTableComponent, isStandalone: true, selector: "mm-octo-table", inputs: { dataSource: "dataSource", actionColumns: "actionColumns", leftToolbarActions: "leftToolbarActions", optionActions: "optionActions", searchFilterColumns: "searchFilterColumns", currentId: "currentId", defaultSortColumn: "defaultSortColumn", rowIsClickable: "rowIsClickable", pageSizeOptions: "pageSizeOptions", selectedPageSize: "selectedPageSize", selectedRowId: "selectedRowId", columns: "columns" }, 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 columns\" [matColumnDef]=\"getDisplayName(column)\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ getDisplayName(column) }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ getDisplayName(column)}:</span>\n {{ accessElement(element, column) }}\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 @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnNames.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnNames.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: 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: "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"] }] });
323
307
  }
324
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: MmOctoTableComponent, decorators: [{
325
309
  type: Component,
@@ -345,7 +329,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
345
329
  NgIf,
346
330
  MatHeaderCellDef,
347
331
  NgForOf,
348
- PascalCasePipe,
349
332
  MatIcon,
350
333
  MatIconButton,
351
334
  MatMenu,
@@ -366,7 +349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
366
349
  MatCellDef,
367
350
  MatHeaderRowDef,
368
351
  MatRowDef
369
- ], 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 columns\" [matColumnDef]=\"getDisplayName(column)\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ getDisplayName(column) | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ getDisplayName(column) | pascalCase }}:</span>\n {{ accessElement(element, column) }}\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 @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnNames.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnNames.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: 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"] }]
352
+ ], 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 columns\" [matColumnDef]=\"getDisplayName(column)\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ getDisplayName(column) }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ getDisplayName(column)}:</span>\n {{ accessElement(element, column) }}\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 @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnNames.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnNames.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: 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"] }]
370
353
  }], ctorParameters: () => [], propDecorators: { dataSource: [{
371
354
  type: Input
372
355
  }], actionColumns: [{
@@ -434,5 +417,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
434
417
  * Generated bundle index. Do not edit.
435
418
  */
436
419
 
437
- export { ListElementModule, MmOctoTableComponent, MmOctoUiModule, OctoListNavigation, OctoListNavigationDataInfo, OctoListNavigationOptions, PascalCasePipe, getDisplayName };
420
+ export { ListElementModule, MmOctoTableComponent, MmOctoUiModule, OctoListNavigation, OctoListNavigationDataInfo, OctoListNavigationOptions, getDisplayName };
438
421
  //# 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/octoListNavigation.ts","../../../../projects/meshmakers/octo-ui/src/lib/mm-octo-table/mm-octo-table.model.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","export interface TableColumn {\n displayName?: string | null;\n dataKey: string;\n}\n\n\nexport function getDisplayName(column: TableColumn): string {\n return column.displayName ?? column.dataKey;\n}\n\nexport type ColumnDefinition =\n | string\n | TableColumn;\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\";\nimport { ColumnDefinition, getDisplayName, TableColumn } from \"./mm-octo-table.model\";\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 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\n @Input() actionColumns: ActionColumn[] = [];\n @Input() leftToolbarActions: ToolbarAction[] = [];\n @Input() optionActions: ActionColumn[] = [];\n @Input() searchFilterColumns: string[] = [];\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 @Input() set columns(cols: ColumnDefinition[]){\n if(cols === null || cols === undefined || cols.length === 0) {\n this._columns = [];\n return;\n }\n\n this._columns = [];\n\n for (const column of cols) {\n if(typeof column === 'string'){\n this._columns.push({dataKey: column});\n }else{\n this._columns.push(column);\n }\n }\n }\n\n get columns(): TableColumn[]{\n return this._columns;\n }\n _columns: TableColumn[] = [];\n\n\n selectedRow: any = null; // Track the selected row\n\n selectedPageSizeSubject: BehaviorSubject<number> = new BehaviorSubject<number>(this.selectedPageSize);\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 get columnNames(): string[] {\n return this._columns.map(c => getDisplayName(c));\n }\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\n\n if (!this.dataSource) {\n throw new Error('No dataSource provided');\n }\n\n this.checkSelectedRow();\n }\n\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: TableColumn): any {\n if(column.dataKey.indexOf('.') === -1) {\n return element[column.dataKey];\n }\n\n // else we have a nested object\n const keys = column.dataKey.split('.');\n let value = element;\n for(const key of keys) {\n value = value[key];\n }\n return value;\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 protected readonly getDisplayName = getDisplayName;\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 columns\" [matColumnDef]=\"getDisplayName(column)\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ getDisplayName(column) | pascalCase }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ getDisplayName(column) | pascalCase }}:</span>\n {{ accessElement(element, column) }}\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 @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnNames.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnNames.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: 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\nexport * from './lib/mm-octo-table/mm-octo-table.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
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.model.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","export interface TableColumn {\n displayName?: string | null;\n dataKey: string;\n}\n\n\nexport function getDisplayName(column: TableColumn): string {\n return column.displayName ?? column.dataKey;\n}\n\nexport type ColumnDefinition =\n | string\n | TableColumn;\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\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\";\nimport { ColumnDefinition, getDisplayName, TableColumn } from \"./mm-octo-table.model\";\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 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\n @Input() actionColumns: ActionColumn[] = [];\n @Input() leftToolbarActions: ToolbarAction[] = [];\n @Input() optionActions: ActionColumn[] = [];\n @Input() searchFilterColumns: string[] = [];\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 @Input() set columns(cols: ColumnDefinition[]){\n if(cols === null || cols === undefined || cols.length === 0) {\n this._columns = [];\n return;\n }\n\n this._columns = [];\n\n for (const column of cols) {\n if(typeof column === 'string'){\n this._columns.push({dataKey: column});\n }else{\n this._columns.push(column);\n }\n }\n }\n\n get columns(): TableColumn[]{\n return this._columns;\n }\n _columns: TableColumn[] = [];\n\n\n selectedRow: any = null; // Track the selected row\n\n selectedPageSizeSubject: BehaviorSubject<number> = new BehaviorSubject<number>(this.selectedPageSize);\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 get columnNames(): string[] {\n return this._columns.map(c => getDisplayName(c));\n }\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\n\n if (!this.dataSource) {\n throw new Error('No dataSource provided');\n }\n\n this.checkSelectedRow();\n }\n\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: TableColumn): any {\n if(column.dataKey.indexOf('.') === -1) {\n return element[column.dataKey];\n }\n\n // else we have a nested object\n const keys = column.dataKey.split('.');\n let value = element;\n for(const key of keys) {\n value = value[key];\n }\n return value;\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 protected readonly getDisplayName = getDisplayName;\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 columns\" [matColumnDef]=\"getDisplayName(column)\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{ getDisplayName(column) }}</mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"isMobile\">{{ getDisplayName(column)}:</span>\n {{ accessElement(element, column) }}\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 @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnNames.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnNames.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnNames\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: 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\nexport * from './lib/mm-octo-table/mm-octo-table.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,15 +2,9 @@ import { ElementRef, OnInit, AfterViewInit, EventEmitter } from "@angular/core";
2
2
  import { MatPaginator, PageEvent } from "@angular/material/paginator";
3
3
  import { MatSort } from '@angular/material/sort';
4
4
  import { BehaviorSubject, Observable } from "rxjs";
5
- import { PipeTransform } from '@angular/core';
6
5
  import { AssetRepoGraphQlDataSource } from "@meshmakers/octo-services";
7
6
  import { ColumnDefinition, getDisplayName, TableColumn } from "./mm-octo-table.model";
8
7
  import * as i0 from "@angular/core";
9
- export declare class PascalCasePipe implements PipeTransform {
10
- transform(value: string): string;
11
- static ɵfac: i0.ɵɵFactoryDeclaration<PascalCasePipe, never>;
12
- static ɵpipe: i0.ɵɵPipeDeclaration<PascalCasePipe, "pascalCase", true>;
13
- }
14
8
  export interface ActionColumn {
15
9
  columnName: string;
16
10
  iconName?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshmakers/octo-ui",
3
- "version": "3.2.47-0",
3
+ "version": "3.2.48-0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.3",
6
6
  "@angular/core": "^19.2.3"