{"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 = false;\n\n  /** Whether the badge is disabled. */\n  @Input({ alias: 'sbbBadgeDisabled', transform: booleanAttribute }) disabled: boolean = false;\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":[],"mappings":";;;;;AAcA,IAAI,MAAM,GAAG,CAAC;AAKd,MAAM,mBAAmB,GAAG,mBAAmB;MAalC,QAAQ,CAAA;AACX,EAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,EAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,EAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,EAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,EAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAAE,IAAA,QAAQ,EAAE;AAAI,GAAE,CAAC;AAG/C,EAAA,QAAQ,GAAqB,OAAO;AAG/D,EAAA,IACI,OAAO,GAAA;IACT,OAAO,IAAI,CAAC,QAAQ;AACtB,EAAA;EACA,IAAI,OAAO,CAAC,UAA8C,EAAA;AACxD,IAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;AACzC,EAAA;EACQ,QAAQ;AAGhB,EAAA,IACI,WAAW,GAAA;IACb,OAAO,IAAI,CAAC,YAAY;AAC1B,EAAA;EACA,IAAI,WAAW,CAAC,cAAsB,EAAA;AACpC,IAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC;AACjD,EAAA;EACQ,YAAY;AAG6C,EAAA,MAAM,GAAY,KAAK;AAGrB,EAAA,QAAQ,GAAY,KAAK;EAG5F,GAAG,GAAW,MAAM,EAAE;EAGd,aAAa;AAGb,EAAA,cAAc,GAAG,KAAK;AAG9B,EAAA,WAAA,GAAA;AACE,IAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;AACjD,MAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AACpD,MAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,aAAa,CAAC,YAAY,EAAE;QACzD,MAAM,KAAK,CAAC,+CAA+C,CAAC;AAC9D,MAAA;AACF,IAAA;AACF,EAAA;AAMA,EAAA,eAAe,GAAA;IACb,OAAO,IAAI,CAAC,aAAa;AAC3B,EAAA;AAEA,EAAA,QAAQ,GAAA;IAIN,IAAI,CAAC,oBAAoB,EAAE;IAE3B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvC,MAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC/C,MAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3C,IAAA;IAEA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC5B,EAAA;AAEA,EAAA,WAAW,GAAA;AAGT,IAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;MAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AAChD,IAAA;AAEA,IAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AACzF,EAAA;AAGQ,EAAA,mBAAmB,GAAA;IACzB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;IACzD,MAAM,WAAW,GAAG,kBAAkB;IAEtC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,qBAAqB,IAAI,CAAC,GAAG,CAAA,CAAE,CAAC;AAIhE,IAAA,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AAChD,IAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAE/C,IAAA,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;AAC5C,MAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACvD,IAAA;IAEA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC;IAGxD,IAAI,OAAO,qBAAqB,KAAK,UAAU,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;AAC3F,MAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,QAAA,qBAAqB,CAAC,MAAK;AACzB,UAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,MAAM;AACL,MAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACzC,IAAA;AAEA,IAAA,OAAO,YAAY;AACrB,EAAA;EAGQ,sBAAsB,CAAC,UAA8C,EAAA;IAC3E,MAAM,oBAAoB,GAAW,CAAA,EAAG,UAAU,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;IAKjE,IAAI,IAAI,CAAC,cAAc,IAAI,oBAAoB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACtE,MAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACjD,IAAA;IAEA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,MAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,oBAAoB;AACvD,IAAA;IAEA,IAAI,CAAC,QAAQ,GAAG,oBAAoB;AACtC,EAAA;EAGQ,0BAA0B,CAAC,cAAsB,EAAA;AACvD,IAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AACvF,IAAA,IAAI,cAAc,EAAE;AAClB,MAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC;AAC9E,IAAA;IACA,IAAI,CAAC,YAAY,GAAG,cAAc;AACpC,EAAA;AAGQ,EAAA,oBAAoB,GAAA;AAG1B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAC5D,CAAA,UAAA,EAAa,mBAAmB,EAAE,CACnC;IACD,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC7C,MAAA,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa,EAAE;QACvC,YAAY,CAAC,MAAM,EAAE;AACvB,MAAA;AACF,IAAA;AACF,EAAA;;;;;UA9JW,QAAQ;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;;;;UAAR,QAAQ;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,YAAA;AAAA,IAAA,MAAA,EAAA;AAAA,MAAA,QAAA,EAAA,CAAA,kBAAA,EAAA,UAAA,CAAA;AAAA,MAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,CAAA;AAAA,MAAA,WAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,CAAA;AAAA,MAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EA+B0B,gBAAgB,CAAA;AAAA,MAAA,QAAA,EAAA,CAAA,kBAAA,EAAA,UAAA,EAGd,gBAAgB;KAAA;AAAA,IAAA,IAAA,EAAA;AAAA,MAAA,UAAA,EAAA;AAAA,QAAA,uBAAA,EAAA,wBAAA;AAAA,QAAA,uBAAA,EAAA,wBAAA;AAAA,QAAA,wBAAA,EAAA,oBAAA;AAAA,QAAA,0BAAA,EAAA;OAAA;AAAA,MAAA,cAAA,EAAA;KAAA;AAAA,IAAA,QAAA,EAAA;AAAA,GAAA,CAAA;;;;;;QAlCpD,QAAQ;AAAA,EAAA,UAAA,EAAA,CAAA;UAVpB,SAAS;AAAC,IAAA,IAAA,EAAA,CAAA;AACT,MAAA,QAAQ,EAAE,YAAY;AACtB,MAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,yBAAyB,EAAE,sBAAsB;AACjD,QAAA,yBAAyB,EAAE,sBAAsB;AACjD,QAAA,0BAA0B,EAAE,oBAAoB;AAChD,QAAA,4BAA4B,EAAE;AAC/B;KACF;;;;;YASE,KAAK;aAAC,kBAAkB;;;YAGxB,KAAK;aAAC,UAAU;;;YAUhB,KAAK;aAAC,qBAAqB;;;YAU3B,KAAK;AAAC,MAAA,IAAA,EAAA,CAAA;AAAE,QAAA,KAAK,EAAE,gBAAgB;AAAE,QAAA,SAAS,EAAE;OAAkB;;;YAG9D,KAAK;AAAC,MAAA,IAAA,EAAA,CAAA;AAAE,QAAA,KAAK,EAAE,kBAAkB;AAAE,QAAA,SAAS,EAAE;OAAkB;;;;;MCxDtD,cAAc,CAAA;;;;;UAAd,cAAc;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAd,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,cAAc;cAHf,UAAU,EAAE,eAAe,EAAE,QAAQ;cACrC,QAAQ;AAAA,GAAA,CAAA;;;;;UAEP,cAAc;AAAA,IAAA,OAAA,EAAA,CAHf,UAAU,EAAE,eAAe;AAAA,GAAA,CAAA;;;;;;QAG1B,cAAc;AAAA,EAAA,UAAA,EAAA,CAAA;UAJ1B,QAAQ;AAAC,IAAA,IAAA,EAAA,CAAA;AACR,MAAA,OAAO,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC;MAChD,OAAO,EAAE,CAAC,QAAQ;KACnB;;;;;;"}