@testgorilla/tgo-ui 12.2.0 → 12.3.2

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.
Files changed (85) hide show
  1. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +3 -0
  2. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
  3. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +6 -1
  4. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
  5. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +1 -1
  6. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
  7. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +6 -4
  8. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
  9. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1 -1
  10. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
  11. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +3 -0
  12. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
  13. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +3 -0
  14. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +19 -4
  16. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
  17. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +3 -0
  18. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
  19. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +11 -1
  20. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
  21. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +7 -1
  22. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
  23. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +3 -0
  24. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
  25. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +3 -0
  26. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
  27. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +8 -2
  28. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
  29. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +3 -0
  30. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
  31. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs +12 -3
  32. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs.map +1 -1
  33. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +6 -2
  34. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
  35. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +3 -0
  36. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
  37. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +3 -0
  38. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
  39. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +6 -0
  40. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
  41. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +3 -0
  42. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
  43. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +3 -0
  44. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
  45. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs +250 -50
  46. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
  47. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +4 -0
  48. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
  49. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +4 -1
  50. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
  51. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +5 -2
  52. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
  53. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +3 -0
  54. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
  55. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +9 -2
  56. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
  57. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +89 -7
  58. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
  59. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +3 -0
  60. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
  61. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +7 -4
  62. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
  63. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +13 -4
  64. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
  65. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +3 -0
  66. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
  67. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +1 -1
  68. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
  69. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +3 -0
  70. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
  71. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +3 -0
  72. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
  73. package/mcp/catalog.json +1 -1
  74. package/package.json +2 -2
  75. package/types/testgorilla-tgo-ui-components-alert-banner.d.ts +1 -0
  76. package/types/testgorilla-tgo-ui-components-autocomplete-v2.d.ts +1 -1
  77. package/types/testgorilla-tgo-ui-components-button.d.ts +32 -0
  78. package/types/testgorilla-tgo-ui-components-core.d.ts +1 -0
  79. package/types/testgorilla-tgo-ui-components-field.d.ts +1 -0
  80. package/types/testgorilla-tgo-ui-components-infinite-scroll-table.d.ts +3 -3
  81. package/types/testgorilla-tgo-ui-components-popover.d.ts +51 -5
  82. package/types/testgorilla-tgo-ui-components-radio-button.d.ts +1 -0
  83. package/types/testgorilla-tgo-ui-components-scale.d.ts +1 -0
  84. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +59 -1
  85. package/types/testgorilla-tgo-ui-components-slider.d.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-breadcrumb.mjs","names":[],"sources":["../../../components/breadcrumb/breadcrumb.component.ts","../../../components/breadcrumb/breadcrumb.component.html","../../../components/breadcrumb/breadcrumb.component.module.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n input,\n signal,\n ViewChild,\n OnDestroy,\n computed,\n EventEmitter,\n Output,\n effect,\n ChangeDetectionStrategy,\n Injector,\n afterNextRender,\n ElementRef,\n} from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, TruncatePipe, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { OverflowMenuButtonsType, OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\nimport { SkeletonComponent } from '@testgorilla/tgo-ui/components/skeleton';\n\nimport { BreadcrumbItem, BreadcrumbSize } from './breadcrumb.model';\n\n@Component({\n selector: 'ui-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ButtonComponentModule,\n OverflowMenuComponentModule,\n MatTooltip,\n IconComponentModule,\n SkeletonComponent,\n AsyncPipe,\n UiTranslatePipe,\n TruncatePipe,\n ],\n})\nexport class BreadcrumbComponent implements AfterViewInit, OnDestroy {\n size = input<BreadcrumbSize>('large');\n items = input<BreadcrumbItem[]>([]);\n applicationTheme = input<ApplicationTheme>('light');\n includeBackButton = input<boolean>(false);\n isLoading = input<boolean>(false);\n numberOfLoadingItems = input<number>(3);\n maxItemLength = input<number>(18);\n\n readonly testId = input<string | null>(null);\n\n protected readonly backButtonTestId = computed(() => (this.testId() ? `${this.testId()}-back` : null));\n\n protected itemTestId(value: string): string | null {\n const testId = this.testId();\n return testId ? `${testId}-item-${value}` : null;\n }\n @Output() selectItem: EventEmitter<string> = new EventEmitter<string>();\n @Output() backButtonClickEvent: EventEmitter<Event> = new EventEmitter<Event>();\n\n loadingItems = computed(() => new Array<undefined>(this.numberOfLoadingItems()));\n isOverflowing = signal<boolean>(false);\n visibleItems = signal<BreadcrumbItem[]>([]);\n overflowItems = signal<BreadcrumbItem[]>([]);\n overflowButtonItems = computed<OverflowMenuButtonsType[]>(() =>\n this.overflowItems().map(item => ({\n label: item.label,\n value: item.value,\n }))\n );\n shouldTruncateLastItem = signal<boolean>(false);\n\n @ViewChild('breadcrumbContainer') breadcrumbContainer!: ElementRef<HTMLElement>;\n\n private resizeObserver?: ResizeObserver;\n private itemsInOverflow = 0;\n private previousLoadingState?: boolean;\n private readonly injector: Injector;\n\n constructor(private readonly parentInjector: Injector) {\n this.injector = parentInjector;\n // React to items changes and recalculate overflow\n effect(() => {\n this.items();\n this.itemsInOverflow = 0;\n\n // Only proceed if not in loading state\n if (!this.isLoading()) {\n // Use afterNextRender to ensure DOM is updated before calculating\n afterNextRender(\n () => {\n if (this.breadcrumbContainer?.nativeElement) {\n this.calculateItemDistribution();\n }\n },\n { injector: this.injector }\n );\n }\n });\n\n // React to loading state changes and setup ResizeObserver when loading changes from true to false\n effect(() => {\n const currentLoadingState = this.isLoading();\n\n if (this.previousLoadingState === true && currentLoadingState === false) {\n // Use afterNextRender to ensure DOM is ready before setting up observer\n afterNextRender(\n () => {\n this.setupResizeObserver();\n },\n { injector: this.injector }\n );\n }\n\n this.previousLoadingState = currentLoadingState;\n });\n }\n\n ngAfterViewInit() {\n this.calculateItemDistribution();\n this.setupResizeObserver();\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n }\n\n private calculateItemDistribution() {\n if (!this.breadcrumbContainer?.nativeElement || this.items().length === 0) {\n this.resetToAllVisible();\n return;\n }\n\n const element = this.breadcrumbContainer.nativeElement;\n const hasHorizontalOverflow = element.scrollWidth > element.clientWidth;\n\n if (hasHorizontalOverflow) {\n this.handleOverflow();\n } else if (this.itemsInOverflow > 0) {\n // Check if we can bring items back from overflow\n this.tryReduceOverflow();\n } else {\n this.resetToAllVisible();\n }\n }\n\n private handleOverflow() {\n this.itemsInOverflow = Math.min(this.itemsInOverflow + 1, this.items().length - 1);\n\n this.updateItemArrays();\n this.isOverflowing.set(true);\n\n // Wait for DOM to render the updated template after hiding items\n // We need to measure dimensions AFTER the DOM has been updated with the new visible items\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const element = this.breadcrumbContainer.nativeElement;\n const stillOverflowing = element.scrollWidth > element.clientWidth;\n\n if (stillOverflowing && this.itemsInOverflow < this.items().length - 1) {\n this.handleOverflow();\n } else if (stillOverflowing && this.itemsInOverflow === this.items().length - 1) {\n this.shouldTruncateLastItem.set(true);\n }\n }\n }, 0);\n }\n\n private tryReduceOverflow() {\n const testItemsInOverflow = this.itemsInOverflow - 1;\n\n if (testItemsInOverflow >= 0) {\n const testVisibleItems = this.items().slice(testItemsInOverflow);\n const testOverflowItems = testItemsInOverflow > 0 ? this.items().slice(0, testItemsInOverflow) : [];\n\n this.visibleItems.set(testVisibleItems);\n this.overflowItems.set(testOverflowItems);\n\n // Always reset truncation when trying to reduce overflow\n this.shouldTruncateLastItem.set(false);\n\n // Wait for DOM to render with test configuration before measuring\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const element = this.breadcrumbContainer.nativeElement;\n const hasOverflow = element.scrollWidth > element.clientWidth;\n\n if (!hasOverflow) {\n // It fits! Update the counter\n this.itemsInOverflow = testItemsInOverflow;\n this.isOverflowing.set(this.itemsInOverflow > 0);\n\n // Try to reduce more if there are still items in overflow\n if (this.itemsInOverflow > 0) {\n // Schedule next reduction attempt after current render cycle\n setTimeout(() => this.tryReduceOverflow(), 0);\n }\n } else {\n // Doesn't fit, revert to previous state\n this.updateItemArrays();\n\n // Wait for DOM to render reverted state before checking truncation\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const containerElement = this.breadcrumbContainer.nativeElement;\n const stillOverflowing = containerElement.scrollWidth > containerElement.clientWidth;\n\n if (stillOverflowing && this.itemsInOverflow === this.items().length - 1) {\n this.shouldTruncateLastItem.set(true);\n }\n }\n }, 0);\n }\n }\n }, 0);\n } else {\n // testItemsInOverflow < 0, means we're trying to show all items\n this.resetToAllVisible();\n\n // Wait for DOM to render all items before measuring overflow\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const element = this.breadcrumbContainer.nativeElement;\n const hasOverflow = element.scrollWidth > element.clientWidth;\n\n if (hasOverflow) {\n // Still overflows with all items, need to go back to overflow state\n this.itemsInOverflow = 1; // Start with minimal overflow\n this.handleOverflow();\n }\n }\n }, 0);\n }\n }\n\n private updateItemArrays() {\n if (this.itemsInOverflow > 0) {\n this.overflowItems.set(this.items().slice(0, this.itemsInOverflow));\n this.visibleItems.set(this.items().slice(this.itemsInOverflow));\n } else {\n this.resetToAllVisible();\n }\n }\n\n private resetToAllVisible() {\n this.visibleItems.set(this.items());\n this.overflowItems.set([]);\n this.isOverflowing.set(false);\n this.shouldTruncateLastItem.set(false);\n this.itemsInOverflow = 0;\n }\n\n private setupResizeObserver() {\n if (!this.breadcrumbContainer?.nativeElement) {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n this.calculateItemDistribution();\n });\n\n this.resizeObserver.observe(this.breadcrumbContainer.nativeElement);\n }\n}\n","@if (!isLoading()) {\n <div\n class=\"breadcrumb\"\n [attr.theme]=\"applicationTheme()\"\n #breadcrumbContainer\n [class]=\"'breadcrumb-' + size()\"\n [attr.data-testid]=\"testId()\"\n >\n @if (includeBackButton()) {\n <ui-button\n [variant]=\"'icon-button'\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId()\"\n (buttonClickEvent)=\"backButtonClickEvent.emit($event)\"\n ></ui-button>\n }\n @if (isOverflowing()) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"overflowMenu\"\n [buttons]=\"overflowButtonItems()\"\n [matTooltip]=\"('COMMON.OPTIONS' | uiTranslate | async)!\"\n [matTooltipClass]=\"applicationTheme()\"\n [isDynamicMenu]=\"true\"\n (selectItem)=\"selectItem.emit($event)\"\n class=\"breadcrumb-overflow-menu\"\n ></ui-overflow-menu>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n @for (item of visibleItems(); track item.value) {\n @if (!$last) {\n <span\n class=\"breadcrumb-item\"\n tabindex=\"0\"\n [matTooltip]=\"item.label.length > maxItemLength() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [attr.aria-label]=\"item.label\"\n [attr.data-testid]=\"itemTestId(item.value)\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label | truncate: maxItemLength() : '...' }}\n </span>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n } @else {\n <strong\n class=\"breadcrumb-item-active\"\n tabindex=\"0\"\n [matTooltip]=\"shouldTruncateLastItem() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [class.breadcrumb-item-active-truncated]=\"shouldTruncateLastItem()\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"'page'\"\n [attr.data-testid]=\"itemTestId(item.value)\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label }}\n </strong>\n }\n }\n </div>\n} @else {\n <div class=\"breadcrumb\">\n @for (i of loadingItems(); track $index) {\n <ui-skeleton count=\"1\" [theme]=\"{ width: '160px', margin: '10px 0 0' }\"></ui-skeleton>\n @if ($index !== numberOfLoadingItems() - 1) {\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n }\n </div>\n}\n<ng-template #overflowMenu>\n <div class=\"breadcrumb-item breadcrumb-overflow\" [class]=\"'breadcrumb-' + size()\">...</div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe, TruncatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\nimport { SkeletonComponent } from '@testgorilla/tgo-ui/components/skeleton';\n\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\n@NgModule({\n imports: [\n CommonModule,\n IconComponentModule,\n MatTooltipModule,\n OverflowMenuComponentModule,\n ButtonComponentModule,\n SkeletonComponent,\n UiTranslatePipe,\n TruncatePipe,\n BreadcrumbComponent,\n ],\n exports: [BreadcrumbComponent],\n})\nexport class BreadcrumbComponentModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-breadcrumb.mjs","names":[],"sources":["../../../components/breadcrumb/breadcrumb.component.ts","../../../components/breadcrumb/breadcrumb.component.html","../../../components/breadcrumb/breadcrumb.component.module.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n input,\n signal,\n ViewChild,\n OnDestroy,\n computed,\n EventEmitter,\n Output,\n effect,\n ChangeDetectionStrategy,\n Injector,\n afterNextRender,\n ElementRef,\n} from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { ApplicationTheme, TruncatePipe, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { OverflowMenuButtonsType, OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\nimport { SkeletonComponent } from '@testgorilla/tgo-ui/components/skeleton';\n\nimport { BreadcrumbItem, BreadcrumbSize } from './breadcrumb.model';\n\n@Component({\n selector: 'ui-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ButtonComponentModule,\n OverflowMenuComponentModule,\n MatTooltip,\n IconComponentModule,\n SkeletonComponent,\n AsyncPipe,\n UiTranslatePipe,\n TruncatePipe,\n ],\n})\nexport class BreadcrumbComponent implements AfterViewInit, OnDestroy {\n size = input<BreadcrumbSize>('large');\n items = input<BreadcrumbItem[]>([]);\n applicationTheme = input<ApplicationTheme>('light');\n includeBackButton = input<boolean>(false);\n isLoading = input<boolean>(false);\n numberOfLoadingItems = input<number>(3);\n maxItemLength = input<number>(18);\n\n readonly testId = input<string | null>(null);\n\n protected readonly backButtonTestId = computed(() => (this.testId() ? `${this.testId()}-back` : null));\n\n protected itemTestId(value: string): string | null {\n const testId = this.testId();\n return testId ? `${testId}-item-${value}` : null;\n }\n @Output() selectItem: EventEmitter<string> = new EventEmitter<string>();\n @Output() backButtonClickEvent: EventEmitter<Event> = new EventEmitter<Event>();\n\n loadingItems = computed(() => new Array<undefined>(this.numberOfLoadingItems()));\n isOverflowing = signal<boolean>(false);\n visibleItems = signal<BreadcrumbItem[]>([]);\n overflowItems = signal<BreadcrumbItem[]>([]);\n overflowButtonItems = computed<OverflowMenuButtonsType[]>(() =>\n this.overflowItems().map(item => ({\n label: item.label,\n value: item.value,\n }))\n );\n shouldTruncateLastItem = signal<boolean>(false);\n\n @ViewChild('breadcrumbContainer') breadcrumbContainer!: ElementRef<HTMLElement>;\n\n private resizeObserver?: ResizeObserver;\n private itemsInOverflow = 0;\n private previousLoadingState?: boolean;\n private readonly injector: Injector;\n\n constructor(private readonly parentInjector: Injector) {\n this.injector = parentInjector;\n // React to items changes and recalculate overflow\n effect(() => {\n this.items();\n this.itemsInOverflow = 0;\n\n // Only proceed if not in loading state\n if (!this.isLoading()) {\n // Use afterNextRender to ensure DOM is updated before calculating\n afterNextRender(\n () => {\n if (this.breadcrumbContainer?.nativeElement) {\n this.calculateItemDistribution();\n }\n },\n { injector: this.injector }\n );\n }\n });\n\n // React to loading state changes and setup ResizeObserver when loading changes from true to false\n effect(() => {\n const currentLoadingState = this.isLoading();\n\n if (this.previousLoadingState === true && currentLoadingState === false) {\n // Use afterNextRender to ensure DOM is ready before setting up observer\n afterNextRender(\n () => {\n this.setupResizeObserver();\n },\n { injector: this.injector }\n );\n }\n\n this.previousLoadingState = currentLoadingState;\n });\n }\n\n ngAfterViewInit() {\n this.calculateItemDistribution();\n this.setupResizeObserver();\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n }\n\n private calculateItemDistribution() {\n if (!this.breadcrumbContainer?.nativeElement || this.items().length === 0) {\n this.resetToAllVisible();\n return;\n }\n\n const element = this.breadcrumbContainer.nativeElement;\n const hasHorizontalOverflow = element.scrollWidth > element.clientWidth;\n\n if (hasHorizontalOverflow) {\n this.handleOverflow();\n } else if (this.itemsInOverflow > 0) {\n // Check if we can bring items back from overflow\n this.tryReduceOverflow();\n } else {\n this.resetToAllVisible();\n }\n }\n\n private handleOverflow() {\n this.itemsInOverflow = Math.min(this.itemsInOverflow + 1, this.items().length - 1);\n\n this.updateItemArrays();\n this.isOverflowing.set(true);\n\n // Wait for DOM to render the updated template after hiding items\n // We need to measure dimensions AFTER the DOM has been updated with the new visible items\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const element = this.breadcrumbContainer.nativeElement;\n const stillOverflowing = element.scrollWidth > element.clientWidth;\n\n if (stillOverflowing && this.itemsInOverflow < this.items().length - 1) {\n this.handleOverflow();\n } else if (stillOverflowing && this.itemsInOverflow === this.items().length - 1) {\n this.shouldTruncateLastItem.set(true);\n }\n }\n }, 0);\n }\n\n private tryReduceOverflow() {\n const testItemsInOverflow = this.itemsInOverflow - 1;\n\n if (testItemsInOverflow >= 0) {\n const testVisibleItems = this.items().slice(testItemsInOverflow);\n const testOverflowItems = testItemsInOverflow > 0 ? this.items().slice(0, testItemsInOverflow) : [];\n\n this.visibleItems.set(testVisibleItems);\n this.overflowItems.set(testOverflowItems);\n\n // Always reset truncation when trying to reduce overflow\n this.shouldTruncateLastItem.set(false);\n\n // Wait for DOM to render with test configuration before measuring\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const element = this.breadcrumbContainer.nativeElement;\n const hasOverflow = element.scrollWidth > element.clientWidth;\n\n if (!hasOverflow) {\n // It fits! Update the counter\n this.itemsInOverflow = testItemsInOverflow;\n this.isOverflowing.set(this.itemsInOverflow > 0);\n\n // Try to reduce more if there are still items in overflow\n if (this.itemsInOverflow > 0) {\n // Schedule next reduction attempt after current render cycle\n setTimeout(() => this.tryReduceOverflow(), 0);\n }\n } else {\n // Doesn't fit, revert to previous state\n this.updateItemArrays();\n\n // Wait for DOM to render reverted state before checking truncation\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const containerElement = this.breadcrumbContainer.nativeElement;\n const stillOverflowing = containerElement.scrollWidth > containerElement.clientWidth;\n\n if (stillOverflowing && this.itemsInOverflow === this.items().length - 1) {\n this.shouldTruncateLastItem.set(true);\n }\n }\n }, 0);\n }\n }\n }, 0);\n } else {\n // testItemsInOverflow < 0, means we're trying to show all items\n this.resetToAllVisible();\n\n // Wait for DOM to render all items before measuring overflow\n setTimeout(() => {\n if (this.breadcrumbContainer?.nativeElement) {\n const element = this.breadcrumbContainer.nativeElement;\n const hasOverflow = element.scrollWidth > element.clientWidth;\n\n if (hasOverflow) {\n // Still overflows with all items, need to go back to overflow state\n this.itemsInOverflow = 1; // Start with minimal overflow\n this.handleOverflow();\n }\n }\n }, 0);\n }\n }\n\n private updateItemArrays() {\n if (this.itemsInOverflow > 0) {\n this.overflowItems.set(this.items().slice(0, this.itemsInOverflow));\n this.visibleItems.set(this.items().slice(this.itemsInOverflow));\n } else {\n this.resetToAllVisible();\n }\n }\n\n private resetToAllVisible() {\n this.visibleItems.set(this.items());\n this.overflowItems.set([]);\n this.isOverflowing.set(false);\n this.shouldTruncateLastItem.set(false);\n this.itemsInOverflow = 0;\n }\n\n private setupResizeObserver() {\n if (!this.breadcrumbContainer?.nativeElement) {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n this.calculateItemDistribution();\n });\n\n this.resizeObserver.observe(this.breadcrumbContainer.nativeElement);\n }\n}\n","@if (!isLoading()) {\n <div\n class=\"breadcrumb\"\n [attr.theme]=\"applicationTheme()\"\n #breadcrumbContainer\n [class]=\"'breadcrumb-' + size()\"\n [attr.data-testid]=\"testId()\"\n >\n @if (includeBackButton()) {\n <ui-button\n [variant]=\"'icon-button'\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId()\"\n (buttonClickEvent)=\"backButtonClickEvent.emit($event)\"\n ></ui-button>\n }\n @if (isOverflowing()) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"overflowMenu\"\n [buttons]=\"overflowButtonItems()\"\n [matTooltip]=\"('COMMON.OPTIONS' | uiTranslate | async)!\"\n [matTooltipClass]=\"applicationTheme()\"\n [isDynamicMenu]=\"true\"\n (selectItem)=\"selectItem.emit($event)\"\n class=\"breadcrumb-overflow-menu\"\n ></ui-overflow-menu>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n @for (item of visibleItems(); track item.value) {\n @if (!$last) {\n <span\n class=\"breadcrumb-item\"\n tabindex=\"0\"\n [matTooltip]=\"item.label.length > maxItemLength() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [attr.aria-label]=\"item.label\"\n [attr.data-testid]=\"itemTestId(item.value)\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label | truncate: maxItemLength() : '...' }}\n </span>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n } @else {\n <strong\n class=\"breadcrumb-item-active\"\n tabindex=\"0\"\n [matTooltip]=\"shouldTruncateLastItem() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [class.breadcrumb-item-active-truncated]=\"shouldTruncateLastItem()\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"'page'\"\n [attr.data-testid]=\"itemTestId(item.value)\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label }}\n </strong>\n }\n }\n </div>\n} @else {\n <div class=\"breadcrumb\">\n @for (i of loadingItems(); track $index) {\n <ui-skeleton count=\"1\" [theme]=\"{ width: '160px', margin: '10px 0 0' }\"></ui-skeleton>\n @if ($index !== numberOfLoadingItems() - 1) {\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n }\n </div>\n}\n<ng-template #overflowMenu>\n <div class=\"breadcrumb-item breadcrumb-overflow\" [class]=\"'breadcrumb-' + size()\">...</div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';\nimport { UiTranslatePipe, TruncatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { OverflowMenuComponentModule } from '@testgorilla/tgo-ui/components/overflow-menu';\nimport { SkeletonComponent } from '@testgorilla/tgo-ui/components/skeleton';\n\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\n@NgModule({\n imports: [\n CommonModule,\n IconComponentModule,\n MatTooltipModule,\n OverflowMenuComponentModule,\n ButtonComponentModule,\n SkeletonComponent,\n UiTranslatePipe,\n TruncatePipe,\n BreadcrumbComponent,\n ],\n exports: [BreadcrumbComponent],\n})\nexport class BreadcrumbComponentModule {}\n"],"mappings":"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"}