@meshmakers/octo-ui-legacy 3.3.490 → 3.3.510

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 { EventEmitter, TemplateRef, ViewChild, Input, Output, ContentChildren, Component, inject, NgZone, ElementRef, Injector, forwardRef, HostBinding } from '@angular/core';
2
+ import { EventEmitter, TemplateRef, ViewChild, Input, Output, ContentChildren, Component, InjectionToken, inject, NgZone, ElementRef, Injector, forwardRef, HostBinding } from '@angular/core';
3
3
  import { MatPaginator } from '@angular/material/paginator';
4
4
  import { MatSort, MatSortHeader } from '@angular/material/sort';
5
5
  import { BehaviorSubject, fromEvent, merge, Subject } from 'rxjs';
@@ -321,9 +321,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
321
321
  /**
322
322
  * Material Design replacement for legacy mm-breadcrumb from @meshmakers/shared-ui.
323
323
  * Uses BreadCrumbService from shared-services.
324
+ *
325
+ * Supports optional translation via BREADCRUMB_TRANSLATE_FN injection token.
326
+ * If provided, breadcrumb labels are passed through the translate function.
324
327
  */
328
+ /**
329
+ * Optional injection token for breadcrumb label translation.
330
+ * Provide a function that takes a translation key and returns the translated string.
331
+ * If the key is a dynamic value (e.g. an ID), the function should return it unchanged.
332
+ *
333
+ * Example usage with @ngx-translate:
334
+ * ```
335
+ * providers: [
336
+ * { provide: BREADCRUMB_TRANSLATE_FN, useFactory: (ts: TranslateService) => (key: string) => ts.instant(key), deps: [TranslateService] }
337
+ * ]
338
+ * ```
339
+ */
340
+ const BREADCRUMB_TRANSLATE_FN = new InjectionToken('BREADCRUMB_TRANSLATE_FN');
325
341
  class MmBreadcrumbComponent {
326
342
  breadcrumbService = inject(BreadCrumbService);
343
+ translateFn = inject(BREADCRUMB_TRANSLATE_FN, { optional: true });
327
344
  breadcrumbData = [];
328
345
  subscription = null;
329
346
  ngOnInit() {
@@ -334,15 +351,20 @@ class MmBreadcrumbComponent {
334
351
  ngOnDestroy() {
335
352
  this.subscription?.unsubscribe();
336
353
  }
354
+ translate(text) {
355
+ if (!text)
356
+ return '';
357
+ return this.translateFn ? this.translateFn(text) : text;
358
+ }
337
359
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MmBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
338
360
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: MmBreadcrumbComponent, isStandalone: true, selector: "mm-breadcrumb", ngImport: i0, template: `
339
361
  @if (breadcrumbData.length > 0) {
340
362
  <nav class="breadcrumb-nav">
341
363
  @for (item of breadcrumbData; track item.url; let last = $last) {
342
364
  @if (item.url && !last) {
343
- <a [routerLink]="item.url" class="breadcrumb-link">{{ item.text }}</a>
365
+ <a [routerLink]="item.url" class="breadcrumb-link">{{ translate(item.text) }}</a>
344
366
  } @else {
345
- <span class="breadcrumb-current">{{ item.text }}</span>
367
+ <span class="breadcrumb-current">{{ translate(item.text) }}</span>
346
368
  }
347
369
  @if (!last) {
348
370
  <span class="breadcrumb-separator"> / </span>
@@ -359,9 +381,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
359
381
  <nav class="breadcrumb-nav">
360
382
  @for (item of breadcrumbData; track item.url; let last = $last) {
361
383
  @if (item.url && !last) {
362
- <a [routerLink]="item.url" class="breadcrumb-link">{{ item.text }}</a>
384
+ <a [routerLink]="item.url" class="breadcrumb-link">{{ translate(item.text) }}</a>
363
385
  } @else {
364
- <span class="breadcrumb-current">{{ item.text }}</span>
386
+ <span class="breadcrumb-current">{{ translate(item.text) }}</span>
365
387
  }
366
388
  @if (!last) {
367
389
  <span class="breadcrumb-separator"> / </span>
@@ -805,5 +827,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
805
827
  * Generated bundle index. Do not edit.
806
828
  */
807
829
 
808
- export { MmBreadcrumbComponent, MmEntitySelectInputComponent, MmNotificationBarComponent, MmOctoTableComponent, getDataKey, getDisplayName };
830
+ export { BREADCRUMB_TRANSLATE_FN, MmBreadcrumbComponent, MmEntitySelectInputComponent, MmNotificationBarComponent, MmOctoTableComponent, getDataKey, getDisplayName };
809
831
  //# sourceMappingURL=meshmakers-octo-ui-legacy.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"meshmakers-octo-ui-legacy.mjs","sources":["../../../../projects/meshmakers/octo-ui-legacy/src/lib/table/mm-octo-table.model.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/table/mm-octo-table.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/table/mm-octo-table.component.html","../../../../projects/meshmakers/octo-ui-legacy/src/lib/breadcrumb/mm-breadcrumb.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/notification-bar/mm-notification-bar.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/entity-select-input/mm-entity-select-input.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/public-api.ts","../../../../projects/meshmakers/octo-ui-legacy/src/meshmakers-octo-ui-legacy.ts"],"sourcesContent":["export interface TableColumn {\n displayName?: string | null;\n dataKey: string;\n templateName?: string;\n sortingDisabled?: boolean;\n}\n\nexport function getDisplayName(column: TableColumn): string {\n return column.displayName ?? column.dataKey;\n}\n\nexport function getDataKey(column: TableColumn): string {\n return column.dataKey;\n}\n\nexport type ColumnDefinition = string | TableColumn;\n","/**\n * Material Design replacement for legacy Kendo-based MmOctoTableComponent.\n * Uses Angular Material table with sorting, pagination, and search.\n */\nimport {\n Component,\n ElementRef,\n Input,\n ViewChild,\n OnInit,\n AfterViewInit,\n AfterContentInit,\n OnDestroy,\n Output,\n EventEmitter,\n ContentChildren,\n QueryList,\n TemplateRef\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\nimport { BehaviorSubject, fromEvent, merge, Observable, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\nimport { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n 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';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatListItemIcon } from '@angular/material/list';\nimport { RouterLink } from '@angular/router';\nimport { SearchFilterDto, SearchFilterTypesDto, SortDto, SortOrdersDto } from '@meshmakers/octo-services';\nimport { AssetRepoGraphQlDataSource } from '@meshmakers/octo-services';\nimport { ColumnDefinition, getDisplayName, getDataKey, TableColumn } from './mm-octo-table.model';\n\nexport interface ActionColumn {\n displayText: string;\n actionId: string;\n iconName?: string;\n svgIconName?: string;\n}\n\nexport interface ToolbarAction {\n iconName?: string;\n svgIconName?: string;\n route?: string;\n clickHandler?: () => void;\n actionText: string;\n isDisabled?: Observable<boolean>;\n isHidden?: 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 MatIconButton,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatListItemIcon,\n MatHeaderRow,\n MatHeaderRowDef,\n MatButton,\n RouterLink,\n MatCellDef,\n MatHeaderRowDef,\n MatRowDef,\n NgTemplateOutlet\n ],\n templateUrl: './mm-octo-table.component.html',\n styleUrl: './mm-octo-table.component.scss'\n})\n \nexport class MmOctoTableComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {\n \n @Input() dataSource!: AssetRepoGraphQlDataSource<any, any, any>;\n \n @ContentChildren(TemplateRef) cellTemplates!: QueryList<TemplateRef<any>>;\n \n templateMap = new Map<string, TemplateRef<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 \n @Output() rowClicked = new EventEmitter<any>();\n @Output() searchFilterStringUpdated = new EventEmitter<string>();\n @Input() selectedRowId = '';\n\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;\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 private loadingSubscription?: Subscription;\n private wasLoadingPreviously = false;\n private hadFocusBeforeLoading = false;\n\n get columnDataKeys(): string[] {\n return this._columns.map((c) => getDataKey(c));\n }\n\n get columnDisplayNames(): string[] {\n return this._columns.map((c) => getDisplayName(c));\n }\n\n ngOnInit(): void {\n this.selectedPageSizeSubject.next(this.selectedPageSize);\n\n if (!this.dataSource) {\n throw new Error('No dataSource provided');\n }\n\n this.checkSelectedRow();\n }\n\n ngAfterContentInit(): void {\n this.templateMap.clear();\n if (this.cellTemplates) {\n \n this.cellTemplates.forEach((template: any) => {\n const refName = template._declarationTContainer?.localNames?.[0];\n if (refName) {\n this.templateMap.set(refName, template);\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n if (this.dataSource?.loading$) {\n this.loadingSubscription = this.dataSource.loading$.subscribe((isLoading) => {\n if (this.wasLoadingPreviously && !isLoading && this.hadFocusBeforeLoading && this.input) {\n setTimeout(() => {\n this.input?.nativeElement?.focus();\n this.hadFocusBeforeLoading = false;\n }, 0);\n }\n\n if (!this.wasLoadingPreviously && isLoading && this.input) {\n this.hadFocusBeforeLoading = document.activeElement === this.input.nativeElement;\n }\n\n this.wasLoadingPreviously = isLoading;\n });\n }\n\n if (this.sort && this.input && this.paginator) {\n fromEvent(this.input.nativeElement, 'keyup')\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(() => {\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 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 this.loadData();\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: SearchFilterDto | null = null;\n if (filterString) {\n filter = {\n type: SearchFilterTypesDto.AttributeFilterDto,\n attributePaths: this.searchFilterColumns,\n searchTerm: filterString\n };\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 \n accessElement(element: any, column: TableColumn): any {\n if (column.templateName) {\n return element;\n }\n if (column.dataKey.indexOf('.') === -1) {\n return element[column.dataKey];\n }\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 this.selectedPageSizeSubject.next($event.pageSize);\n }\n\n getActionDisplayTexts(): string[] {\n return this.actionColumns.map((ac) => ac.displayText);\n }\n\n \n onRowClick(row: any) {\n if (this.rowIsClickable) {\n this.selectedRow = row;\n this.rowClicked.emit(row);\n }\n }\n\n \n isRowSelected(row: any): boolean {\n return this.selectedRow === row;\n }\n\n checkSelectedRow() {\n \n this.dataSource.connect(null as any).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 hasOptionActions = () => {\n return this.optionActions.length > 0;\n };\n\n hasActionColumns = () => {\n return this.actionColumns.length > 0 || this.optionActions.length > 0;\n };\n protected readonly getDisplayName = getDisplayName;\n protected readonly getDataKey = getDataKey;\n\n isSortable(column: TableColumn): boolean {\n if (column.sortingDisabled !== undefined) {\n return !column.sortingDisabled;\n }\n return true;\n }\n\n \n getTemplate(templateName: string): TemplateRef<any> | undefined {\n return this.templateMap.get(templateName);\n }\n\n ngOnDestroy(): void {\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n }\n}\n","<div>\n @if (dataSource?.loading$ | async) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n</div>\n\n<mat-toolbar class=\"octo-toolbar octo-detail-toolbar\">\n @for (toolbarAction of leftToolbarActions; track toolbarAction) {\n @if (toolbarAction.route) {\n <button\n mat-flat-button\n [routerLink]=\"toolbarAction.route\"\n type=\"button\"\n [hidden]=\"!toolbarAction.isHidden ? false : (toolbarAction.isHidden | async)\"\n [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\"\n >\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 } @else {\n <button\n mat-flat-button\n type=\"button\"\n (click)=\"toolbarAction.clickHandler?.()\"\n [hidden]=\"!toolbarAction.isHidden ? false : (toolbarAction.isHidden | async)\"\n [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\"\n >\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\n <div class=\"octo-spacer\"></div>\n\n <div class=\"octo-toolbar-search\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n Search\n </mat-label>\n <input #input matInput [disabled]=\"dataSource?.loading$ | async\"/>\n </mat-form-field>\n </div>\n</mat-toolbar>\n\n<mat-table\n [dataSource]=\"dataSource\"\n class=\"mat-elevation-z8 table-container\"\n mat-table\n matSort\n matSortActive=\"{{ defaultSortColumn }}\"\n matSortDirection=\"asc\"\n matSortDisableClear=\"true\"\n>\n @for (column of columns; track column) {\n <ng-container [matColumnDef]=\"getDataKey(column)\">\n <mat-header-cell *matHeaderCellDef>\n <span *ngIf=\"isSortable(column); else nonSortableHeader\" mat-sort-header>\n {{ getDisplayName(column) }}\n </span>\n <ng-template #nonSortableHeader>\n {{ getDisplayName(column) }}\n </ng-template>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span class=\"mobile-label\">{{ getDisplayName(column)}}</span>\n @if (column.templateName) {\n <ng-container\n *ngTemplateOutlet=\"getTemplate(column.templateName); context: { $implicit: element }\"></ng-container>\n } @else {\n {{ accessElement(element, column) }}\n }\n </mat-cell>\n </ng-container>\n }\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\n (click)=\"emitRowData({ action: column.actionId, id: encodeURIComponent(element[currentId]), entry: element })\">\n <mat-icon *ngIf=\"column?.svgIconName\" class=\"svg-icon\" svgIcon=\"{{ column.svgIconName }}\"\n 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\n mat-menu-item\n (click)=\"emitRowData({ action: optionAction.actionId, id: encodeURIComponent(element[currentId]), entry: element })\"\n >\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.displayText }}\n </button>\n </ng-container>\n }\n </mat-menu>\n </mat-cell>\n </ng-container>\n\n @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnDataKeys.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnDataKeys.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnDataKeys\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnDataKeys\"></mat-row>\n }\n</mat-table>\n\n<mat-paginator\n [length]=\"dataSource?.totalCount$ | async\"\n (page)=\"selectedPageSizeChanged($event)\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"selectedPageSizeSubject.getValue()\"\n></mat-paginator>\n","/**\n * Material Design replacement for legacy mm-breadcrumb from @meshmakers/shared-ui.\n * Uses BreadCrumbService from shared-services.\n */\nimport { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { BreadCrumbService, BreadCrumbData } from '@meshmakers/shared-services';\nimport { RouterLink } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'mm-breadcrumb',\n standalone: true,\n imports: [RouterLink],\n template: `\n @if (breadcrumbData.length > 0) {\n <nav class=\"breadcrumb-nav\">\n @for (item of breadcrumbData; track item.url; let last = $last) {\n @if (item.url && !last) {\n <a [routerLink]=\"item.url\" class=\"breadcrumb-link\">{{ item.text }}</a>\n } @else {\n <span class=\"breadcrumb-current\">{{ item.text }}</span>\n }\n @if (!last) {\n <span class=\"breadcrumb-separator\"> / </span>\n }\n }\n </nav>\n }\n `,\n styles: [`\n .breadcrumb-nav {\n padding: 8px 16px;\n font-size: 14px;\n }\n .breadcrumb-link {\n color: #0275d8;\n text-decoration: none;\n }\n .breadcrumb-link:hover {\n text-decoration: underline;\n }\n .breadcrumb-current {\n color: #333;\n }\n .breadcrumb-separator {\n color: #999;\n margin: 0 4px;\n }\n `]\n})\n \nexport class MmBreadcrumbComponent implements OnInit, OnDestroy {\n private readonly breadcrumbService = inject(BreadCrumbService);\n protected breadcrumbData: BreadCrumbData[] = [];\n private subscription: Subscription | null = null;\n\n ngOnInit(): void {\n this.subscription = this.breadcrumbService.breadCrumbItems.subscribe(items => {\n this.breadcrumbData = items;\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n}\n","/**\n * Material Design replacement for legacy mm-notification-bar from @meshmakers/shared-ui.\n * Uses MatSnackBar to display error messages from MessageService.\n */\nimport { Component, OnInit, OnDestroy, inject, NgZone } from '@angular/core';\nimport { MessageService, NotificationMessage } from '@meshmakers/shared-services';\nimport { MatSnackBar, MatSnackBarRef, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { filter, debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'mm-notification-bar',\n standalone: true,\n imports: [MatSnackBarModule],\n template: ''\n})\n \nexport class MmNotificationBarComponent implements OnInit, OnDestroy {\n private readonly snackBar = inject(MatSnackBar);\n private readonly messageService = inject(MessageService);\n private readonly router = inject(Router);\n private readonly ngZone = inject(NgZone);\n\n private currentSnackBarRef: MatSnackBarRef<unknown> | null = null;\n private subscriptions: Subscription[] = [];\n private snackBarOpenTime = 0;\n\n ngOnInit(): void {\n const errorSubscription = this.messageService.getLatestErrorMessage().subscribe((value: NotificationMessage | null) => {\n if (value) {\n this.closeCurrentSnackBar();\n\n const message = value.details\n ? `${value.message}: ${value.details}`\n : value.message;\n\n this.currentSnackBarRef = this.snackBar.open(message, 'Close', {\n horizontalPosition: 'center',\n verticalPosition: 'top',\n duration: 10000,\n panelClass: ['error-snackbar']\n });\n\n this.snackBarOpenTime = Date.now();\n }\n });\n\n const navigationSubscription = this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => {\n this.closeCurrentSnackBar();\n });\n\n this.setupGlobalInteractionListeners();\n this.subscriptions.push(errorSubscription, navigationSubscription);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.closeCurrentSnackBar();\n }\n\n private closeCurrentSnackBar(): void {\n if (this.currentSnackBarRef) {\n this.currentSnackBarRef.dismiss();\n this.currentSnackBarRef = null;\n }\n }\n\n private setupGlobalInteractionListeners(): void {\n this.ngZone.runOutsideAngular(() => {\n const events = ['click', 'keydown', 'scroll', 'touchstart'];\n\n events.forEach(eventType => {\n const subscription = fromEvent(document, eventType)\n .pipe(\n debounceTime(500),\n filter(() => this.currentSnackBarRef !== null),\n filter((event) => this.shouldCloseOnInteraction(event))\n )\n .subscribe(() => {\n this.ngZone.run(() => {\n this.closeCurrentSnackBar();\n });\n });\n\n this.subscriptions.push(subscription);\n });\n });\n }\n\n private shouldCloseOnInteraction(event: Event): boolean {\n if (!this.currentSnackBarRef) return false;\n\n const timeSinceOpen = Date.now() - this.snackBarOpenTime;\n if (timeSinceOpen < 1000) return false;\n\n const target = event.target as Element;\n const snackBarElement = document.querySelector('.mat-mdc-snack-bar-container');\n if (snackBarElement && snackBarElement.contains(target)) return false;\n\n if (event.type === 'keydown') {\n const keyEvent = event as KeyboardEvent;\n const excludedKeys = ['Tab', 'Shift', 'Control', 'Alt', 'Meta'];\n return !excludedKeys.includes(keyEvent.key);\n }\n\n return true;\n }\n}\n","/**\n * Material Design replacement for legacy mm-entity-select from @meshmakers/shared-ui.\n * Uses Angular Material Autocomplete with ControlValueAccessor.\n */\nimport {\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n inject\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInput, MatInputModule } from '@angular/material/input';\nimport { MatAutocompleteActivatedEvent, MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { EntitySelectDataSource } from '@meshmakers/shared-services';\nimport { Subject } from 'rxjs';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'mm-entity-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n MatAutocompleteModule,\n MatProgressSpinnerModule,\n ],\n template: `\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\" [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n @if (isLoading) {\n <mat-option class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n }\n @if (!isLoading) {\n @for (entity of filteredEntities; track entity) {\n <mat-option [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n }\n }\n </mat-autocomplete>\n `,\n styles: [`\n span { opacity: 0; transition: opacity 200ms; }\n :host.floating span { opacity: 1; }\n `],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmEntitySelectInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n }\n ]\n})\n \nexport class MmEntitySelectInputComponent implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<unknown>, Validator {\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n \n public filteredEntities: any[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-entity-select-${MmEntitySelectInputComponent.nextId++}`;\n\n \n public valueChange: EventEmitter<any> = new EventEmitter<any>();\n \n private _selectedEntity: any;\n @ViewChild('input') private readonly inputField: MatInput | null;\n protected describedBy = '';\n \n private activatedValue: any;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = '';\n this._prefix = '';\n\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n \n private _dataSource: EntitySelectDataSource<any> | null;\n\n \n public get dataSource(): EntitySelectDataSource<any> | null {\n return this._dataSource;\n }\n\n @Input()\n \n public set dataSource(value: EntitySelectDataSource<any> | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n \n public set disabled(dis: any) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n \n public set placeholder(plh: any) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n \n public set required(req: any) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n \n public get value(): any {\n return this._selectedEntity;\n }\n\n \n public set value(value: any) {\n if (value !== this._selectedEntity) {\n this.searchFormControl.setValue(value);\n this.setValue(value);\n }\n }\n\n public get empty(): boolean {\n const n = this.searchFormControl.value;\n return !n;\n }\n\n @HostBinding('class.floating')\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === 'string'),\n filter((value) => value.startsWith(this._prefix)),\n tap(() => (this.value = null)),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value: string) => {\n if (!this._dataSource) {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource?.onFilter(value.replace(this._prefix, '').trim());\n\n if (resultSet.items) {\n if (resultSet.items.length === 1) {\n this.value = resultSet.items[0];\n } else {\n this.filteredEntities = resultSet.items;\n }\n }\n this.isLoading = false;\n });\n }\n\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap(() => (this.filteredEntities = [])),\n \n filter((value: any) => typeof value === 'string'),\n tap(() => {\n this.setValue(null);\n }),\n filter((value) => value.toString().length >= 3),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value: string) => {\n if (!this._dataSource) {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource.onFilter(value);\n\n if (resultSet?.items) {\n this.filteredEntities = resultSet.items;\n }\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredEntities = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector('input')?.focus();\n }\n\n public onEntitySelected(event: MatAutocompleteSelectedEvent): void {\n this.value = event.option.value;\n this.filteredEntities = [];\n }\n\n public onEntityActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onEntityClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = null;\n }\n\n public onFocusOut(): void {\n if (this.filteredEntities.length === 1) {\n this.activatedValue = this.filteredEntities[0];\n this.value = this.filteredEntities[0];\n }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n \n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n \n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n \n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n \n const selection: any = control.value;\n if (typeof selection === 'string') {\n return { incorrect: true };\n }\n return null;\n }\n\n \n private _propagateChange = (_: any): void => {\n // noop\n };\n\n private readonly _onTouched = (): void => {\n // noop\n };\n\n \n private setValue(value: any): void {\n if (value !== this._selectedEntity) {\n this._selectedEntity = value;\n this.valueChange.emit(value);\n this._propagateChange(this._selectedEntity);\n this.stateChanges.next();\n }\n }\n}\n","/*\n * Public API Surface of octo-ui-legacy\n */\n\nexport * from './lib/table';\nexport * from './lib/breadcrumb';\nexport * from './lib/notification-bar';\nexport * from './lib/entity-select-input';\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-legacy.mjs","sources":["../../../../projects/meshmakers/octo-ui-legacy/src/lib/table/mm-octo-table.model.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/table/mm-octo-table.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/table/mm-octo-table.component.html","../../../../projects/meshmakers/octo-ui-legacy/src/lib/breadcrumb/mm-breadcrumb.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/notification-bar/mm-notification-bar.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/lib/entity-select-input/mm-entity-select-input.component.ts","../../../../projects/meshmakers/octo-ui-legacy/src/public-api.ts","../../../../projects/meshmakers/octo-ui-legacy/src/meshmakers-octo-ui-legacy.ts"],"sourcesContent":["export interface TableColumn {\n displayName?: string | null;\n dataKey: string;\n templateName?: string;\n sortingDisabled?: boolean;\n}\n\nexport function getDisplayName(column: TableColumn): string {\n return column.displayName ?? column.dataKey;\n}\n\nexport function getDataKey(column: TableColumn): string {\n return column.dataKey;\n}\n\nexport type ColumnDefinition = string | TableColumn;\n","/**\n * Material Design replacement for legacy Kendo-based MmOctoTableComponent.\n * Uses Angular Material table with sorting, pagination, and search.\n */\nimport {\n Component,\n ElementRef,\n Input,\n ViewChild,\n OnInit,\n AfterViewInit,\n AfterContentInit,\n OnDestroy,\n Output,\n EventEmitter,\n ContentChildren,\n QueryList,\n TemplateRef\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\nimport { BehaviorSubject, fromEvent, merge, Observable, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\nimport { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n 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';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatListItemIcon } from '@angular/material/list';\nimport { RouterLink } from '@angular/router';\nimport { SearchFilterDto, SearchFilterTypesDto, SortDto, SortOrdersDto } from '@meshmakers/octo-services';\nimport { AssetRepoGraphQlDataSource } from '@meshmakers/octo-services';\nimport { ColumnDefinition, getDisplayName, getDataKey, TableColumn } from './mm-octo-table.model';\n\nexport interface ActionColumn {\n displayText: string;\n actionId: string;\n iconName?: string;\n svgIconName?: string;\n}\n\nexport interface ToolbarAction {\n iconName?: string;\n svgIconName?: string;\n route?: string;\n clickHandler?: () => void;\n actionText: string;\n isDisabled?: Observable<boolean>;\n isHidden?: 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 MatIconButton,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatListItemIcon,\n MatHeaderRow,\n MatHeaderRowDef,\n MatButton,\n RouterLink,\n MatCellDef,\n MatHeaderRowDef,\n MatRowDef,\n NgTemplateOutlet\n ],\n templateUrl: './mm-octo-table.component.html',\n styleUrl: './mm-octo-table.component.scss'\n})\n \nexport class MmOctoTableComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {\n \n @Input() dataSource!: AssetRepoGraphQlDataSource<any, any, any>;\n \n @ContentChildren(TemplateRef) cellTemplates!: QueryList<TemplateRef<any>>;\n \n templateMap = new Map<string, TemplateRef<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 \n @Output() rowClicked = new EventEmitter<any>();\n @Output() searchFilterStringUpdated = new EventEmitter<string>();\n @Input() selectedRowId = '';\n\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;\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 private loadingSubscription?: Subscription;\n private wasLoadingPreviously = false;\n private hadFocusBeforeLoading = false;\n\n get columnDataKeys(): string[] {\n return this._columns.map((c) => getDataKey(c));\n }\n\n get columnDisplayNames(): string[] {\n return this._columns.map((c) => getDisplayName(c));\n }\n\n ngOnInit(): void {\n this.selectedPageSizeSubject.next(this.selectedPageSize);\n\n if (!this.dataSource) {\n throw new Error('No dataSource provided');\n }\n\n this.checkSelectedRow();\n }\n\n ngAfterContentInit(): void {\n this.templateMap.clear();\n if (this.cellTemplates) {\n \n this.cellTemplates.forEach((template: any) => {\n const refName = template._declarationTContainer?.localNames?.[0];\n if (refName) {\n this.templateMap.set(refName, template);\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n if (this.dataSource?.loading$) {\n this.loadingSubscription = this.dataSource.loading$.subscribe((isLoading) => {\n if (this.wasLoadingPreviously && !isLoading && this.hadFocusBeforeLoading && this.input) {\n setTimeout(() => {\n this.input?.nativeElement?.focus();\n this.hadFocusBeforeLoading = false;\n }, 0);\n }\n\n if (!this.wasLoadingPreviously && isLoading && this.input) {\n this.hadFocusBeforeLoading = document.activeElement === this.input.nativeElement;\n }\n\n this.wasLoadingPreviously = isLoading;\n });\n }\n\n if (this.sort && this.input && this.paginator) {\n fromEvent(this.input.nativeElement, 'keyup')\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(() => {\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 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 this.loadData();\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: SearchFilterDto | null = null;\n if (filterString) {\n filter = {\n type: SearchFilterTypesDto.AttributeFilterDto,\n attributePaths: this.searchFilterColumns,\n searchTerm: filterString\n };\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 \n accessElement(element: any, column: TableColumn): any {\n if (column.templateName) {\n return element;\n }\n if (column.dataKey.indexOf('.') === -1) {\n return element[column.dataKey];\n }\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 this.selectedPageSizeSubject.next($event.pageSize);\n }\n\n getActionDisplayTexts(): string[] {\n return this.actionColumns.map((ac) => ac.displayText);\n }\n\n \n onRowClick(row: any) {\n if (this.rowIsClickable) {\n this.selectedRow = row;\n this.rowClicked.emit(row);\n }\n }\n\n \n isRowSelected(row: any): boolean {\n return this.selectedRow === row;\n }\n\n checkSelectedRow() {\n \n this.dataSource.connect(null as any).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 hasOptionActions = () => {\n return this.optionActions.length > 0;\n };\n\n hasActionColumns = () => {\n return this.actionColumns.length > 0 || this.optionActions.length > 0;\n };\n protected readonly getDisplayName = getDisplayName;\n protected readonly getDataKey = getDataKey;\n\n isSortable(column: TableColumn): boolean {\n if (column.sortingDisabled !== undefined) {\n return !column.sortingDisabled;\n }\n return true;\n }\n\n \n getTemplate(templateName: string): TemplateRef<any> | undefined {\n return this.templateMap.get(templateName);\n }\n\n ngOnDestroy(): void {\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n }\n}\n","<div>\n @if (dataSource?.loading$ | async) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n</div>\n\n<mat-toolbar class=\"octo-toolbar octo-detail-toolbar\">\n @for (toolbarAction of leftToolbarActions; track toolbarAction) {\n @if (toolbarAction.route) {\n <button\n mat-flat-button\n [routerLink]=\"toolbarAction.route\"\n type=\"button\"\n [hidden]=\"!toolbarAction.isHidden ? false : (toolbarAction.isHidden | async)\"\n [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\"\n >\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 } @else {\n <button\n mat-flat-button\n type=\"button\"\n (click)=\"toolbarAction.clickHandler?.()\"\n [hidden]=\"!toolbarAction.isHidden ? false : (toolbarAction.isHidden | async)\"\n [disabled]=\"!toolbarAction.isDisabled ? false : (toolbarAction.isDisabled | async)\"\n >\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\n <div class=\"octo-spacer\"></div>\n\n <div class=\"octo-toolbar-search\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n Search\n </mat-label>\n <input #input matInput [disabled]=\"dataSource?.loading$ | async\"/>\n </mat-form-field>\n </div>\n</mat-toolbar>\n\n<mat-table\n [dataSource]=\"dataSource\"\n class=\"mat-elevation-z8 table-container\"\n mat-table\n matSort\n matSortActive=\"{{ defaultSortColumn }}\"\n matSortDirection=\"asc\"\n matSortDisableClear=\"true\"\n>\n @for (column of columns; track column) {\n <ng-container [matColumnDef]=\"getDataKey(column)\">\n <mat-header-cell *matHeaderCellDef>\n <span *ngIf=\"isSortable(column); else nonSortableHeader\" mat-sort-header>\n {{ getDisplayName(column) }}\n </span>\n <ng-template #nonSortableHeader>\n {{ getDisplayName(column) }}\n </ng-template>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span class=\"mobile-label\">{{ getDisplayName(column)}}</span>\n @if (column.templateName) {\n <ng-container\n *ngTemplateOutlet=\"getTemplate(column.templateName); context: { $implicit: element }\"></ng-container>\n } @else {\n {{ accessElement(element, column) }}\n }\n </mat-cell>\n </ng-container>\n }\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\n (click)=\"emitRowData({ action: column.actionId, id: encodeURIComponent(element[currentId]), entry: element })\">\n <mat-icon *ngIf=\"column?.svgIconName\" class=\"svg-icon\" svgIcon=\"{{ column.svgIconName }}\"\n 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\n mat-menu-item\n (click)=\"emitRowData({ action: optionAction.actionId, id: encodeURIComponent(element[currentId]), entry: element })\"\n >\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.displayText }}\n </button>\n </ng-container>\n }\n </mat-menu>\n </mat-cell>\n </ng-container>\n\n @if (hasActionColumns()) {\n <mat-header-row *matHeaderRowDef=\"columnDataKeys.concat(['actions'])\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnDataKeys.concat(['actions'])\"></mat-row>\n } @else {\n <mat-header-row *matHeaderRowDef=\"columnDataKeys\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: columnDataKeys\"></mat-row>\n }\n</mat-table>\n\n<mat-paginator\n [length]=\"dataSource?.totalCount$ | async\"\n (page)=\"selectedPageSizeChanged($event)\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"selectedPageSizeSubject.getValue()\"\n></mat-paginator>\n","/**\n * Material Design replacement for legacy mm-breadcrumb from @meshmakers/shared-ui.\n * Uses BreadCrumbService from shared-services.\n *\n * Supports optional translation via BREADCRUMB_TRANSLATE_FN injection token.\n * If provided, breadcrumb labels are passed through the translate function.\n */\nimport { Component, inject, InjectionToken, OnDestroy, OnInit } from '@angular/core';\nimport { BreadCrumbService, BreadCrumbData } from '@meshmakers/shared-services';\nimport { RouterLink } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\n/**\n * Optional injection token for breadcrumb label translation.\n * Provide a function that takes a translation key and returns the translated string.\n * If the key is a dynamic value (e.g. an ID), the function should return it unchanged.\n *\n * Example usage with @ngx-translate:\n * ```\n * providers: [\n * { provide: BREADCRUMB_TRANSLATE_FN, useFactory: (ts: TranslateService) => (key: string) => ts.instant(key), deps: [TranslateService] }\n * ]\n * ```\n */\nexport const BREADCRUMB_TRANSLATE_FN = new InjectionToken<(key: string) => string>('BREADCRUMB_TRANSLATE_FN');\n\n@Component({\n selector: 'mm-breadcrumb',\n standalone: true,\n imports: [RouterLink],\n template: `\n @if (breadcrumbData.length > 0) {\n <nav class=\"breadcrumb-nav\">\n @for (item of breadcrumbData; track item.url; let last = $last) {\n @if (item.url && !last) {\n <a [routerLink]=\"item.url\" class=\"breadcrumb-link\">{{ translate(item.text) }}</a>\n } @else {\n <span class=\"breadcrumb-current\">{{ translate(item.text) }}</span>\n }\n @if (!last) {\n <span class=\"breadcrumb-separator\"> / </span>\n }\n }\n </nav>\n }\n `,\n styles: [`\n .breadcrumb-nav {\n padding: 8px 16px;\n font-size: 14px;\n }\n .breadcrumb-link {\n color: #0275d8;\n text-decoration: none;\n }\n .breadcrumb-link:hover {\n text-decoration: underline;\n }\n .breadcrumb-current {\n color: #333;\n }\n .breadcrumb-separator {\n color: #999;\n margin: 0 4px;\n }\n `]\n})\n\nexport class MmBreadcrumbComponent implements OnInit, OnDestroy {\n private readonly breadcrumbService = inject(BreadCrumbService);\n private readonly translateFn = inject(BREADCRUMB_TRANSLATE_FN, { optional: true });\n protected breadcrumbData: BreadCrumbData[] = [];\n private subscription: Subscription | null = null;\n\n ngOnInit(): void {\n this.subscription = this.breadcrumbService.breadCrumbItems.subscribe(items => {\n this.breadcrumbData = items;\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n protected translate(text: string | undefined): string {\n if (!text) return '';\n return this.translateFn ? this.translateFn(text) : text;\n }\n}\n","/**\n * Material Design replacement for legacy mm-notification-bar from @meshmakers/shared-ui.\n * Uses MatSnackBar to display error messages from MessageService.\n */\nimport { Component, OnInit, OnDestroy, inject, NgZone } from '@angular/core';\nimport { MessageService, NotificationMessage } from '@meshmakers/shared-services';\nimport { MatSnackBar, MatSnackBarRef, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { filter, debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'mm-notification-bar',\n standalone: true,\n imports: [MatSnackBarModule],\n template: ''\n})\n \nexport class MmNotificationBarComponent implements OnInit, OnDestroy {\n private readonly snackBar = inject(MatSnackBar);\n private readonly messageService = inject(MessageService);\n private readonly router = inject(Router);\n private readonly ngZone = inject(NgZone);\n\n private currentSnackBarRef: MatSnackBarRef<unknown> | null = null;\n private subscriptions: Subscription[] = [];\n private snackBarOpenTime = 0;\n\n ngOnInit(): void {\n const errorSubscription = this.messageService.getLatestErrorMessage().subscribe((value: NotificationMessage | null) => {\n if (value) {\n this.closeCurrentSnackBar();\n\n const message = value.details\n ? `${value.message}: ${value.details}`\n : value.message;\n\n this.currentSnackBarRef = this.snackBar.open(message, 'Close', {\n horizontalPosition: 'center',\n verticalPosition: 'top',\n duration: 10000,\n panelClass: ['error-snackbar']\n });\n\n this.snackBarOpenTime = Date.now();\n }\n });\n\n const navigationSubscription = this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => {\n this.closeCurrentSnackBar();\n });\n\n this.setupGlobalInteractionListeners();\n this.subscriptions.push(errorSubscription, navigationSubscription);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.closeCurrentSnackBar();\n }\n\n private closeCurrentSnackBar(): void {\n if (this.currentSnackBarRef) {\n this.currentSnackBarRef.dismiss();\n this.currentSnackBarRef = null;\n }\n }\n\n private setupGlobalInteractionListeners(): void {\n this.ngZone.runOutsideAngular(() => {\n const events = ['click', 'keydown', 'scroll', 'touchstart'];\n\n events.forEach(eventType => {\n const subscription = fromEvent(document, eventType)\n .pipe(\n debounceTime(500),\n filter(() => this.currentSnackBarRef !== null),\n filter((event) => this.shouldCloseOnInteraction(event))\n )\n .subscribe(() => {\n this.ngZone.run(() => {\n this.closeCurrentSnackBar();\n });\n });\n\n this.subscriptions.push(subscription);\n });\n });\n }\n\n private shouldCloseOnInteraction(event: Event): boolean {\n if (!this.currentSnackBarRef) return false;\n\n const timeSinceOpen = Date.now() - this.snackBarOpenTime;\n if (timeSinceOpen < 1000) return false;\n\n const target = event.target as Element;\n const snackBarElement = document.querySelector('.mat-mdc-snack-bar-container');\n if (snackBarElement && snackBarElement.contains(target)) return false;\n\n if (event.type === 'keydown') {\n const keyEvent = event as KeyboardEvent;\n const excludedKeys = ['Tab', 'Shift', 'Control', 'Alt', 'Meta'];\n return !excludedKeys.includes(keyEvent.key);\n }\n\n return true;\n }\n}\n","/**\n * Material Design replacement for legacy mm-entity-select from @meshmakers/shared-ui.\n * Uses Angular Material Autocomplete with ControlValueAccessor.\n */\nimport {\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n inject\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInput, MatInputModule } from '@angular/material/input';\nimport { MatAutocompleteActivatedEvent, MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { EntitySelectDataSource } from '@meshmakers/shared-services';\nimport { Subject } from 'rxjs';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'mm-entity-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n MatAutocompleteModule,\n MatProgressSpinnerModule,\n ],\n template: `\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\" [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n @if (isLoading) {\n <mat-option class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n }\n @if (!isLoading) {\n @for (entity of filteredEntities; track entity) {\n <mat-option [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n }\n }\n </mat-autocomplete>\n `,\n styles: [`\n span { opacity: 0; transition: opacity 200ms; }\n :host.floating span { opacity: 1; }\n `],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmEntitySelectInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n }\n ]\n})\n \nexport class MmEntitySelectInputComponent implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<unknown>, Validator {\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n \n public filteredEntities: any[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-entity-select-${MmEntitySelectInputComponent.nextId++}`;\n\n \n public valueChange: EventEmitter<any> = new EventEmitter<any>();\n \n private _selectedEntity: any;\n @ViewChild('input') private readonly inputField: MatInput | null;\n protected describedBy = '';\n \n private activatedValue: any;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = '';\n this._prefix = '';\n\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n \n private _dataSource: EntitySelectDataSource<any> | null;\n\n \n public get dataSource(): EntitySelectDataSource<any> | null {\n return this._dataSource;\n }\n\n @Input()\n \n public set dataSource(value: EntitySelectDataSource<any> | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n \n public set disabled(dis: any) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n \n public set placeholder(plh: any) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n \n public set required(req: any) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n \n public get value(): any {\n return this._selectedEntity;\n }\n\n \n public set value(value: any) {\n if (value !== this._selectedEntity) {\n this.searchFormControl.setValue(value);\n this.setValue(value);\n }\n }\n\n public get empty(): boolean {\n const n = this.searchFormControl.value;\n return !n;\n }\n\n @HostBinding('class.floating')\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === 'string'),\n filter((value) => value.startsWith(this._prefix)),\n tap(() => (this.value = null)),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value: string) => {\n if (!this._dataSource) {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource?.onFilter(value.replace(this._prefix, '').trim());\n\n if (resultSet.items) {\n if (resultSet.items.length === 1) {\n this.value = resultSet.items[0];\n } else {\n this.filteredEntities = resultSet.items;\n }\n }\n this.isLoading = false;\n });\n }\n\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap(() => (this.filteredEntities = [])),\n \n filter((value: any) => typeof value === 'string'),\n tap(() => {\n this.setValue(null);\n }),\n filter((value) => value.toString().length >= 3),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value: string) => {\n if (!this._dataSource) {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource.onFilter(value);\n\n if (resultSet?.items) {\n this.filteredEntities = resultSet.items;\n }\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredEntities = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector('input')?.focus();\n }\n\n public onEntitySelected(event: MatAutocompleteSelectedEvent): void {\n this.value = event.option.value;\n this.filteredEntities = [];\n }\n\n public onEntityActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onEntityClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = null;\n }\n\n public onFocusOut(): void {\n if (this.filteredEntities.length === 1) {\n this.activatedValue = this.filteredEntities[0];\n this.value = this.filteredEntities[0];\n }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n \n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n \n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n \n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n \n const selection: any = control.value;\n if (typeof selection === 'string') {\n return { incorrect: true };\n }\n return null;\n }\n\n \n private _propagateChange = (_: any): void => {\n // noop\n };\n\n private readonly _onTouched = (): void => {\n // noop\n };\n\n \n private setValue(value: any): void {\n if (value !== this._selectedEntity) {\n this._selectedEntity = value;\n this.valueChange.emit(value);\n this._propagateChange(this._selectedEntity);\n this.stateChanges.next();\n }\n }\n}\n","/*\n * Public API Surface of octo-ui-legacy\n */\n\nexport * from './lib/table';\nexport * from './lib/breadcrumb';\nexport * from './lib/notification-bar';\nexport * from './lib/entity-select-input';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshmakers/octo-ui-legacy",
3
- "version": "3.3.490",
3
+ "version": "3.3.510",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.2.0",
6
6
  "@angular/core": "^21.2.0",
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, AfterViewInit, AfterContentInit, OnDestroy, QueryList, TemplateRef, EventEmitter, ElementRef, DoCheck } from '@angular/core';
2
+ import { OnInit, AfterViewInit, AfterContentInit, OnDestroy, QueryList, TemplateRef, EventEmitter, ElementRef, InjectionToken, DoCheck } from '@angular/core';
3
3
  import { MatPaginator, PageEvent } from '@angular/material/paginator';
4
4
  import { MatSort } from '@angular/material/sort';
5
5
  import { Observable, BehaviorSubject, Subject } from 'rxjs';
@@ -103,14 +103,32 @@ declare class MmOctoTableComponent implements OnInit, AfterViewInit, AfterConten
103
103
  /**
104
104
  * Material Design replacement for legacy mm-breadcrumb from @meshmakers/shared-ui.
105
105
  * Uses BreadCrumbService from shared-services.
106
+ *
107
+ * Supports optional translation via BREADCRUMB_TRANSLATE_FN injection token.
108
+ * If provided, breadcrumb labels are passed through the translate function.
106
109
  */
107
110
 
111
+ /**
112
+ * Optional injection token for breadcrumb label translation.
113
+ * Provide a function that takes a translation key and returns the translated string.
114
+ * If the key is a dynamic value (e.g. an ID), the function should return it unchanged.
115
+ *
116
+ * Example usage with @ngx-translate:
117
+ * ```
118
+ * providers: [
119
+ * { provide: BREADCRUMB_TRANSLATE_FN, useFactory: (ts: TranslateService) => (key: string) => ts.instant(key), deps: [TranslateService] }
120
+ * ]
121
+ * ```
122
+ */
123
+ declare const BREADCRUMB_TRANSLATE_FN: InjectionToken<(key: string) => string>;
108
124
  declare class MmBreadcrumbComponent implements OnInit, OnDestroy {
109
125
  private readonly breadcrumbService;
126
+ private readonly translateFn;
110
127
  protected breadcrumbData: BreadCrumbData[];
111
128
  private subscription;
112
129
  ngOnInit(): void;
113
130
  ngOnDestroy(): void;
131
+ protected translate(text: string | undefined): string;
114
132
  static ɵfac: i0.ɵɵFactoryDeclaration<MmBreadcrumbComponent, never>;
115
133
  static ɵcmp: i0.ɵɵComponentDeclaration<MmBreadcrumbComponent, "mm-breadcrumb", never, {}, {}, never, never, true, never>;
116
134
  }
@@ -205,5 +223,5 @@ declare class MmEntitySelectInputComponent implements OnInit, OnDestroy, DoCheck
205
223
  static ɵcmp: i0.ɵɵComponentDeclaration<MmEntitySelectInputComponent, "mm-entity-select", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; }, {}, never, never, true, never>;
206
224
  }
207
225
 
208
- export { MmBreadcrumbComponent, MmEntitySelectInputComponent, MmNotificationBarComponent, MmOctoTableComponent, getDataKey, getDisplayName };
226
+ export { BREADCRUMB_TRANSLATE_FN, MmBreadcrumbComponent, MmEntitySelectInputComponent, MmNotificationBarComponent, MmOctoTableComponent, getDataKey, getDisplayName };
209
227
  export type { ActionColumn, ColumnDefinition, TableColumn, ToolbarAction };