{"version":3,"file":"usitsdasdesign-dds-ng-breadcrumbs.mjs","sources":["../../src/app/dds/breadcrumbs/utils.ts","../../src/app/dds/breadcrumbs/breadcrumbs/constants.ts","../../src/app/dds/breadcrumbs/breadcrumbs/breadcrumbs.component.ts","../../src/app/dds/breadcrumbs/breadcrumbs/breadcrumbs.component.html","../../src/app/dds/breadcrumbs/breadcrumbs.module.ts","../../src/app/dds/breadcrumbs/usitsdasdesign-dds-ng-breadcrumbs.ts"],"sourcesContent":["import { ElementRef, QueryList } from \"@angular/core\";\n\n// Sums the widths of the specified elements.\nexport function sumPartWidth(els: QueryList<ElementRef<HTMLElement>>): number {\n  return els.reduce((prev: number, next: ElementRef<HTMLElement>) => {\n    return prev + next.nativeElement.getBoundingClientRect().width;\n  }, 0);\n}\n","import { ThemeClassesMap, ThemeMapEnum } from '@usitsdasdesign/dds-ng/core/theme';\nimport { Size, Themes } from '@usitsdasdesign/dds-ng/shared';\n\nexport const MIN_LENGTH = 3;\nexport const MIN_WIDTH = 0;\nexport const STICKER_WIDTH = 160;\nexport const STICKER_INDENT = 8;\nexport const STICKER_SHIFT = 0;\n\nexport const themeClassesMap: ThemeClassesMap = {\n  [ThemeMapEnum.Size]: {\n    [Size.sm]: 'dds-breadcrumbs_sm',\n  },\n  [ThemeMapEnum.Themes]: {\n    [Themes.dark]: 'dds-link_dark',\n    [Themes.blue]: 'dds-link_blue',\n  },\n};\n\nexport const dropdownThemeClassesMap: ThemeClassesMap = {\n  [ThemeMapEnum.Size]: {\n    [Size.sm]: 'dds-breadcrumbs-dropdown_sm',\n  },\n};\n\nexport const ARIA_CURRENT_PAGE = 'page';\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { ContextMenuComponent, ContextMenuModule } from '@usitsdasdesign/dds-ng/context-menu';\nimport { DestroyCtor, DestroyMixin, I18nCtor, I18nMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { ThemeClassesMap, ThemeModule } from '@usitsdasdesign/dds-ng/core/theme';\nimport { KeyCodes, LinkOptions, PositionState, Size, Themes } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { I18nModule, I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { StickerDirective, StickerModule } from '@usitsdasdesign/dds-ng/sticker';\nimport { sumPartWidth } from '../utils';\nimport { MIN_LENGTH, MIN_WIDTH, STICKER_INDENT, STICKER_SHIFT, STICKER_WIDTH, dropdownThemeClassesMap, themeClassesMap } from './constants';\n\nconst BreadcrumbsBase: DestroyCtor & I18nCtor = DestroyMixin(I18nMixin());\n\n@Component({\n  selector: 'dds-breadcrumbs',\n  templateUrl: './breadcrumbs.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, RouterModule, StickerModule, ContextMenuModule, ThemeModule, FocusHandlerModule, I18nModule],\n})\nexport class BreadcrumbsComponent extends BreadcrumbsBase implements OnChanges, AfterViewInit {\n  // The size of the breadcrumbs.\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n\n  // The theme of the breadcrumbs.\n  @Input() theme: Themes | string | undefined = this.ddsConfig.getConfig().theme;\n\n  // The maximum width of the breadcrumbs.\n  @Input() maxWidth: string | undefined;\n\n  // The maximum width of each breadcrumb link.\n  @Input() maxLinkWidth: string | undefined;\n\n  // Custom CSS class for the breadcrumbs.\n  @Input() customClass: string | undefined;\n\n  // Whether the breadcrumbs are displayed in inverse colors.\n  @Input() isInverse: boolean | undefined;\n\n  // Whether the breadcrumbs are responsive.\n  @Input() isResponsive: boolean | undefined = true;\n\n  // The list of breadcrumb items.\n  @Input()\n  set items(linksList: LinkOptions[]) {\n    this.separateItems(linksList);\n\n    this._items = linksList;\n  }\n\n  get items(): LinkOptions[] {\n    return this._items;\n  }\n\n  // The width of the sticker.\n  @Input() stickerWidth: number | string | undefined = STICKER_WIDTH;\n\n  // The maximum height of the sticker.\n  @Input() stickerMaxHeight: number | string | undefined;\n\n  // The shift of the sticker.\n  @Input() stickerShift: number | undefined = STICKER_SHIFT;\n\n  // Custom CSS class for the sticker.\n  @Input() stickerCustomClass: string | undefined;\n\n  // The position of the sticker.\n  @Input() stickerPosition: PositionState | string | undefined = this.ddsConfig.getConfig().stickerPosition;\n\n  // The indent of the sticker.\n  @Input() stickerIndent: number | undefined = STICKER_INDENT;\n\n  // Whether the sticker is dynamic.\n  @Input() stickerIsDynamic: boolean | undefined = true;\n\n  // Event emitter for when a navigation item is clicked.\n  @Output() clickedNavItem: EventEmitter<LinkOptions> = new EventEmitter();\n\n  @ViewChild('stickerDir') sticker: StickerDirective;\n  @ViewChild('wrapper') wrapper: ElementRef<HTMLElement>;\n  @ViewChild('collapsedIcon') collapsedIcon: ElementRef<HTMLElement>;\n  @ViewChildren('mainPartLinks') mainPartLinks: QueryList<ElementRef<HTMLElement>>;\n  @ViewChildren('restPartLinks') restPartLinks: QueryList<ElementRef<HTMLElement>>;\n  @ViewChildren('links') links: QueryList<ElementRef<HTMLElement>>;\n\n  public mainPart: LinkOptions[] = [];\n  public restPart: LinkOptions[] = [];\n  public collapsedList: LinkOptions[] = [];\n  public themeConfig: ThemeClassesMap = themeClassesMap;\n  public dropdownThemeConfig: ThemeClassesMap = dropdownThemeClassesMap;\n  public isCollapsed: boolean;\n  public collapsedListOfWidth: number[] = [];\n  public isCollapsedShown = false;\n  public breadcrumbsAriaLabel: string;\n  public collapsedBtnAriaLabel: string;\n  public minLength = MIN_LENGTH;\n\n  private wrapWidth: number;\n  private collapsedIconWidth: number;\n  private mainPartWidth: number;\n  private restPartWidth: number;\n  private contentWidth: number;\n  private diffWidth: number;\n  private lastElWidth: number;\n  private visibleLinksNumber: number;\n  private keyboardTrigger: boolean;\n  private _items: LinkOptions[] = [];\n\n  // Host listener for window resize events.\n  @HostListener('window:resize') onResize(): void {\n    this.fitCheck();\n  }\n\n  // Determines if the collapsed button should be shown.\n  get isCollapsedBtnShown(): boolean {\n    return this.isCollapsed && this.items?.length > this.minLength;\n  }\n\n  // Determines if the dark theme is applied.\n  get isDarkTheme(): boolean {\n    return this.theme === Themes.dark;\n  }\n\n  constructor(public cdr: ChangeDetectorRef, private router: Router, public i18n: I18nService, private ddsConfig: DdsConfigService) {\n    super();\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.items || changes.maxWidth) {\n      this.fitCheck();\n    }\n  }\n\n  public ngAfterViewInit(): void {\n    this.fitCheck();\n  }\n\n  // Handles click events.\n  public clicked(): void {\n    this.keyboardTrigger = false;\n  }\n\n  // Handles keydown events.\n  public handleKeydown(event: KeyboardEvent) {\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      event.preventDefault();\n      this.keyboardTrigger = true;\n      this.sticker.show();\n    }\n  }\n\n  // Initializes the context menu.\n  public contextMenuInit(contextMenu: ContextMenuComponent): void {\n    if (this.keyboardTrigger) {\n      contextMenu?.keyManager?.setFirstItemActive();\n    }\n  }\n\n  // Changes the navigation to the specified link.\n  public changeNavigation(link: string): void {\n    this.router.navigateByUrl(link);\n    this.sticker.hide();\n  }\n\n  // Skips the last link if the value is true.\n  public skipLastLink(value: boolean): number {\n    return value ? -1 : 0;\n  }\n\n  // Handles focus out events.\n  public focusOut(): void {\n    this.sticker.hide();\n  }\n\n  // Sets whether the collapsed button is shown.\n  public setIsCollapsedShown(value: boolean): void {\n    this.isCollapsedShown = value;\n  }\n\n  // Prevents the default action for the current page link.\n  public preventCurrentPage(event: MouseEvent, last: boolean): void {\n    if (last) {\n      event.preventDefault();\n    }\n  }\n\n  // Separates the breadcrumb items into main and rest parts.\n  private separateItems(linksList: LinkOptions[]): void {\n    if (linksList.length < 2) {\n      this.restPart = linksList.length ? [linksList[0]] : [];\n    } else if (linksList.length <= this.minLength) {\n      this.mainPart = [linksList[0]];\n      this.restPart = linksList.filter((el, i) => i !== 0);\n    } else {\n      this.mainPart = linksList.slice(0, linksList.length - 2);\n      this.restPart = linksList.slice(linksList.length - 2);\n    }\n  }\n\n  // Checks if the breadcrumb elements fit within the available width.\n  private fitCheck(): void {\n    if (this.isResponsive) {\n      this.checkElements();\n\n      if (this.contentWidth > this.wrapWidth) {\n        this.isCollapsed = true;\n        while (this.contentWidth > this.wrapWidth && this.visibleLinksNumber > MIN_LENGTH) {\n          this.collapsedListOfWidth.push(this.lastElWidth);\n          this.collapsedList.push(this.mainPart.pop());\n          this.checkElements();\n        }\n      } else if (this.diffWidth > this.collapsedListOfWidth[this.collapsedListOfWidth.length - 1]) {\n        this.isCollapsed = true;\n        while (this.diffWidth > this.collapsedListOfWidth[this.collapsedListOfWidth.length - 1]) {\n          this.collapsedListOfWidth.pop();\n          this.mainPart.push(this.collapsedList.pop());\n          this.checkElements();\n          if (!this.collapsedListOfWidth.length) {\n            this.isCollapsed = false;\n            if (this.sticker?.isActive) this.sticker.hide();\n          }\n        }\n      } else if (this.contentWidth < this.wrapWidth && !this.collapsedList.length) {\n        this.isCollapsed = false;\n        if (this.sticker?.isActive) this.sticker.hide();\n      }\n\n      this.cdr.detectChanges();\n    }\n  }\n\n  // Checks the dimensions of the breadcrumb elements.\n  private checkElements(): void {\n    this.cdr.detectChanges();\n    this.wrapWidth = this.wrapper.nativeElement.getBoundingClientRect().width;\n    this.collapsedIconWidth = this.collapsedIcon ? this.collapsedIcon.nativeElement.getBoundingClientRect().width : MIN_WIDTH;\n    this.mainPartWidth = sumPartWidth(this.mainPartLinks);\n    this.restPartWidth = sumPartWidth(this.restPartLinks);\n    this.contentWidth = this.mainPartWidth + this.collapsedIconWidth + this.restPartWidth;\n    this.diffWidth = this.wrapWidth - this.contentWidth;\n    this.lastElWidth = this.mainPartLinks?.last?.nativeElement.getBoundingClientRect().width;\n    this.visibleLinksNumber = this.mainPart.length + this.restPart.length;\n  }\n\n  // Sets the i18n texts for the breadcrumbs.\n  protected setI18nTexts(translation: ITranslation): void {\n    this.breadcrumbsAriaLabel = translation.BREADCRUMBS.A11Y.ARIA_LABEL;\n    this.collapsedBtnAriaLabel = translation.BREADCRUMBS.A11Y.COLLAPSED_BTN_ARIA_LABEL;\n    this.cdr.detectChanges();\n  }\n}\n","<nav [ngStyle]=\"{\n        'max-width': maxWidth\n      }\"\n     [size]=\"size\"\n     [ddsTheme]=\"themeConfig\"\n     [attr.aria-label]=\"breadcrumbsAriaLabel\"\n     class=\"dds-breadcrumbs {{customClass}}\"\n     #wrapper>\n\n  <ul class=\"dds-breadcrumbs__list\">\n    @if (items?.length) {\n    @for (link of mainPart; track link.title) {\n    <li class=\"dds-breadcrumbs__link\"\n        #mainPartLinks>\n      <a [routerLink]=\"[link.path]\"\n         [title]=\"link.title\"\n         [ngClass]=\"{\n                'dds-link_inverse': isInverse\n          }\"\n         [ngStyle]=\"{\n            'max-width': maxLinkWidth\n          }\"\n         [theme]=\"theme\"\n         [ddsTheme]=\"themeConfig\"\n         ddsFocus\n         class=\"dds-link dds-link_silent\"\n         (click)=\"clickedNavItem.emit(link)\"\n         [queryParamsHandling]=\"link.queryParamsHandling || ''\"\n         #links>{{link.title}}</a>\n      <span class=\"dds-breadcrumbs__divider\"\n            aria-hidden=\"true\">/</span>\n    </li>\n    }\n\n    <li [ngClass]=\"{'dds-breadcrumbs__collapsed-btn-wrap_show': isCollapsedBtnShown}\"\n        class=\"dds-breadcrumbs__link dds-breadcrumbs__collapsed-btn-wrap\"\n        #collapsedIcon>\n      <button [ngClass]=\"{\n              'dds-link_inverse': isInverse\n          }\"\n              [ddsSticker]=\"collapsedDropdown\"\n              [stickerWidth]=\"stickerWidth\"\n              [stickerMaxHeight]=\"stickerMaxHeight\"\n              [stickerShift]=\"stickerShift\"\n              [stickerPosition]=\"stickerPosition\"\n              [stickerIndent]=\"stickerIndent\"\n              [stickerCustomClass]=\"stickerCustomClass\"\n              [stickerIsDynamic]=\"stickerIsDynamic\"\n              [theme]=\"theme\"\n              [ddsTheme]=\"themeConfig\"\n              aria-haspopup=\"dialog\"\n              [attr.aria-expanded]=\"isCollapsedShown\"\n              [attr.aria-label]=\"collapsedBtnAriaLabel\"\n              role=\"listbox\"\n              ddsFocus\n              class=\"dds-link dds-link_silent dds-breadcrumbs__collapsed-btn\"\n              (keydown)=\"handleKeydown($event)\"\n              (onHidden)=\"setIsCollapsedShown(false)\"\n              (onShown)=\"setIsCollapsedShown(true)\"\n              (click)=\"clicked()\"\n              #stickerDir=\"dds-sticker\">. . .</button>\n      <span class=\"dds-breadcrumbs__divider\">/</span>\n    </li>\n\n    @for (link of restPart; track link.title; let last = $last) {\n      @if (!last) {\n        <li class=\"dds-breadcrumbs__link\"\n            #restPartLinks>\n          <a [routerLink]=\"[link.path]\"\n            [title]=\"link.title\"\n            [ngClass]=\"{\n              'dds-link_inverse': isInverse\n        }\"\n            [ngStyle]=\"{\n              'max-width': maxLinkWidth && !last\n            }\"\n            [theme]=\"theme\"\n            [ddsTheme]=\"themeConfig\"\n            ddsFocus\n            class=\"dds-link dds-link_silent\"\n            (click)=\"clickedNavItem.emit(link)\"\n            [queryParamsHandling]=\"link.queryParamsHandling || ''\"\n            #links>{{link.title}}</a>\n\n          <span class=\"dds-breadcrumbs__divider\">/</span>\n        </li>\n      }\n      @else {\n        <li [ngClass]=\"{\n              'dds-breadcrumbs__link_last': last,\n              'dds-breadcrumbs__link_last-inverse': last && isInverse\n            }\"\n            class=\"dds-breadcrumbs__link\"\n            #restPartLinks>\n          <a [title]=\"link.title\"\n             [ngClass]=\"{\n              'dds-link_dark': last || isDarkTheme,\n              'dds-link_inverse': isInverse\n            }\"\n            [ngStyle]=\"{\n              'max-width': maxLinkWidth && !last\n            }\"\n            [theme]=\"theme\"\n            [ddsTheme]=\"themeConfig\"\n            aria-current=\"page\"\n            ddsFocus\n            tabindex=\"0\"\n            class=\"dds-link dds-link_silent\"\n            (click)=\" preventCurrentPage($event, last)\"\n            [queryParamsHandling]=\"link.queryParamsHandling || ''\"\n            #links>{{link.title}}</a>\n        </li>\n      }\n    }\n\n    <ng-template #collapsedDropdown>\n      <dds-context-menu [size]=\"size\"\n                        [ddsTheme]=\"dropdownThemeConfig\"\n                        [isInverse]=\"isInverse\"\n                        class=\"dds-breadcrumbs-dropdown\"\n                        (onInit)=\"contextMenuInit($event)\"\n                        (keyboardFocusOut)=\"focusOut()\">\n        @for (link of collapsedList; track link.title) {\n        <dds-context-menu-item [title]=\"link.title\"\n                               (selectedItem)=\"changeNavigation(link.path)\">\n          {{link.title}}\n        </dds-context-menu-item>\n        }\n      </dds-context-menu>\n    </ng-template>\n    }\n  </ul>\n</nav>\n","import { NgModule } from '@angular/core';\nimport { BreadcrumbsComponent } from './breadcrumbs/breadcrumbs.component';\n\n@NgModule({\n  declarations: [],\n  imports: [BreadcrumbsComponent],\n  exports: [BreadcrumbsComponent],\n})\nexport class BreadcrumbsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}