import {
ChangeDetectionStrategy,
Component,
DoCheck,
ElementRef,
forwardRef,
Inject,
Injector,
Input
} from "@angular/core";
import { SdmTopbarContainerControl } from "./SdmTopbarContainerControl";
import { SdmSidebarContainerControl } from "./SdmSidebarContainerControl";
import { SdInputValidate } from "@simplysm/sd-angular";
import { faBars } from "@fortawesome/pro-duotone-svg-icons/faBars";
@Component({
selector: "sdm-topbar",
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
`,
styles: [/* language=SCSS */ `
@import "../../scss/mixins";
:host {
display: block;
position: absolute;
top: 0;
width: 100%;
height: var(--sd-topbar-height);
color: var(--text-brightness-light);
background: var(--background-color);
> ._nav {
display: inline-block;
height: var(--sd-topbar-height);
white-space: nowrap;
vertical-align: top;
}
> ._content {
display: inline-block;
padding-left: calc((var(--sd-topbar-height) - var(--line-height)) / 2);
height: var(--sd-topbar-height);
&::ng-deep > * {
line-height: var(--sd-topbar-height);
}
}
> ._menu {
float: right;
white-space: nowrap;
}
> ._sidebar-toggle-button {
display: inline-block;
line-height: var(--sd-topbar-height);
width: var(--sd-topbar-height);
padding: 0 var(--gap-default);
text-align: center;
color: var(--text-brightness-lighter);
@include mobile-active-effect(true);
+ ._content {
padding: 0;
}
}
}
`]
})
export class SdmTopbarControl implements DoCheck {
public icons = {
fadBars: faBars
};
public readonly sidebarContainerControl?: SdmSidebarContainerControl;
@Input()
@SdInputValidate(Boolean)
public hideSidebarToggleButton?: boolean;
public constructor(@Inject(forwardRef(() => SdmTopbarContainerControl))
private readonly _topbarContainerControl: SdmTopbarContainerControl,
private readonly _injector: Injector,
private readonly _elRef: ElementRef) {
this.sidebarContainerControl = this._injector.get(SdmSidebarContainerControl, null) ?? undefined;
}
public onSidebarToggleButtonClick(): void {
this.sidebarContainerControl!.toggle = !this.sidebarContainerControl!.toggle;
}
public ngDoCheck(): void {
this._topbarContainerControl.paddingTopPx = this._elRef.nativeElement.offsetHeight;
}
}