All files / application-header si-header-logo.directive.ts

100% Statements 7/7
100% Branches 0/0
100% Functions 3/3
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50                                              1x 3x   3x 3x     3x         3x     3x                      
/**
 * Copyright (c) Siemens 2016 - 2025
 * SPDX-License-Identifier: MIT
 */
import {
  afterNextRender,
  Directive,
  ElementRef,
  HostListener,
  inject,
  Injector,
  OnInit,
  signal
} from '@angular/core';
 
/** The siemens logo. Should be located inside `.header-brand`. */
@Directive({
  selector: 'si-header-logo, [siHeaderLogo]',
  host: {
    class: 'header-logo px-6 focus-inside',
    '[attr.aria-label]': 'logoText()'
  }
})
export class SiHeaderLogoDirective implements OnInit {
  protected readonly logoText = signal<string | undefined>(undefined);
 
  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
  private injector = inject(Injector);
 
  ngOnInit(): void {
    this.updateLogoText();
  }
 
  @HostListener('window:theme-switch')
  protected updateLogoText(): void {
    afterNextRender(
      {
        read: () =>
          this.logoText.set(
            window
              .getComputedStyle(this.elementRef.nativeElement)
              .getPropertyValue('--element-brand-logo-text')
              .replace(/^["']|["']$/g, '')
          )
      },
      { injector: this.injector }
    );
  }
}