{"version":3,"file":"badge.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/badge/badge.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/badge/badge.module.ts"],"sourcesContent":["import { AriaDescriber } from '@angular/cdk/a11y';\nimport {\n  ANIMATION_MODULE_TYPE,\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n} from '@angular/core';\n\nlet nextId = 0;\n\n/** Allowed position options for sbbBadgePosition */\nexport type SbbBadgePosition = 'after' | 'above';\n\nconst BADGE_CONTENT_CLASS = 'sbb-badge-content';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[sbbBadge]',\n  host: {\n    class: 'sbb-badge',\n    '[class.sbb-badge-above]': 'position !== \"after\"',\n    '[class.sbb-badge-after]': 'position === \"after\"',\n    '[class.sbb-badge-hidden]': 'hidden || !content',\n    '[class.sbb-badge-disabled]': 'disabled',\n  },\n})\nexport class SbbBadge implements OnInit, OnDestroy {\n  private _ngZone = inject(NgZone);\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _ariaDescriber = inject(AriaDescriber);\n  private _renderer = inject(Renderer2);\n  private _animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n  /** Position the badge should reside. */\n  @Input('sbbBadgePosition') position: SbbBadgePosition = 'above';\n\n  /** The content for the badge */\n  @Input('sbbBadge')\n  get content(): string | number | undefined | null {\n    return this._content;\n  }\n  set content(newContent: string | number | undefined | null) {\n    this._updateRenderedContent(newContent);\n  }\n  private _content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('sbbBadgeDescription')\n  get description(): string {\n    return this._description;\n  }\n  set description(newDescription: string) {\n    this._updateHostAriaDescription(newDescription);\n  }\n  private _description: string;\n\n  /** Whether the badge is hidden. */\n  @Input({ alias: 'sbbBadgeHidden', transform: booleanAttribute }) hidden: boolean;\n\n  /** Whether the badge is disabled. */\n  @Input({ alias: 'sbbBadgeDisabled', transform: booleanAttribute }) disabled: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  /** Visible badge element. */\n  private _badgeElement: HTMLElement | undefined;\n\n  /** Whether the OnInit lifecycle hook has run yet */\n  private _isInitialized = false;\n\n  constructor(...args: unknown[]);\n  constructor() {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const nativeElement = this._elementRef.nativeElement;\n      if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n        throw Error('sbbBadge must be attached to an element node.');\n      }\n    }\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered.\n   * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  ngOnInit() {\n    // We may have server-side rendered badge that we need to clear.\n    // We need to do this in ngOnInit because the full content of the component\n    // on which the badge is attached won't necessarily be in the DOM until this point.\n    this._clearExistingBadges();\n\n    if (this.content && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n      this._updateRenderedContent(this.content);\n    }\n\n    this._isInitialized = true;\n  }\n\n  ngOnDestroy() {\n    // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.\n    // We have to destroy it ourselves, otherwise it'll be retained in memory.\n    if (this._renderer.destroyNode) {\n      this._renderer.destroyNode(this._badgeElement);\n    }\n\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'sbb-badge-active';\n\n    badgeElement.setAttribute('id', `sbb-badge-content-${this._id}`);\n\n    // The badge is aria-hidden because we don't want it to appear in the page's navigation\n    // flow. Instead, we use the badge to describe the decorated element with aria-describedby.\n    badgeElement.setAttribute('aria-hidden', 'true');\n    badgeElement.classList.add(BADGE_CONTENT_CLASS);\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_sbb-animation-noopable');\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Update the text content of the badge element in the DOM, creating the element if necessary. */\n  private _updateRenderedContent(newContent: string | number | undefined | null): void {\n    const newContentNormalized: string = `${newContent ?? ''}`.trim();\n\n    // Don't create the badge element if the directive isn't initialized because we want to\n    // append the badge element to the *end* of the host element's content for backwards\n    // compatibility.\n    if (this._isInitialized && newContentNormalized && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    }\n\n    if (this._badgeElement) {\n      this._badgeElement.textContent = newContentNormalized;\n    }\n\n    this._content = newContentNormalized;\n  }\n\n  /** Updates the host element's aria description via AriaDescriber. */\n  private _updateHostAriaDescription(newDescription: string): void {\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n    if (newDescription) {\n      this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);\n    }\n    this._description = newDescription;\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges() {\n    // Only check direct children of this host element in order to avoid deleting\n    // any badges that might exist in descendant elements.\n    const badges = this._elementRef.nativeElement.querySelectorAll(\n      `:scope > .${BADGE_CONTENT_CLASS}`,\n    );\n    for (const badgeElement of Array.from(badges)) {\n      if (badgeElement !== this._badgeElement) {\n        badgeElement.remove();\n      }\n    }\n  }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\n\nimport { SbbBadge } from './badge';\n\n@NgModule({\n  imports: [A11yModule, SbbCommonModule, SbbBadge],\n  exports: [SbbBadge],\n})\nexport class SbbBadgeModule {}\n"],"names":["nextId","BADGE_CONTENT_CLASS","SbbBadge","_ngZone","inject","NgZone","_elementRef","ElementRef","_ariaDescriber","AriaDescriber","_renderer","Renderer2","_animationMode","ANIMATION_MODULE_TYPE","optional","position","content","_content","newContent","_updateRenderedContent","description","_description","newDescription","_updateHostAriaDescription","hidden","disabled","_id","_badgeElement","_isInitialized","constructor","ngDevMode","nativeElement","nodeType","ELEMENT_NODE","Error","getBadgeElement","ngOnInit","_clearExistingBadges","_createBadgeElement","ngOnDestroy","destroyNode","removeDescription","badgeElement","createElement","activeClass","setAttribute","classList","add","appendChild","requestAnimationFrame","runOutsideAngular","newContentNormalized","trim","textContent","describe","badges","querySelectorAll","Array","from","remove","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","inputs","booleanAttribute","host","properties","classAttribute","ngImport","decorators","args","class","Input","alias","transform","SbbBadgeModule","NgModule","ɵmod","ɵɵngDeclareNgModule","minVersion","version","type","A11yModule","SbbCommonModule","imports","exports"],"mappings":"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"}