UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

131 lines 15.8 kB
import { Directive, HostListener, Injector, Input } from '@angular/core'; import { CoreBaseComponent } from '../../../../controls/common/base.component'; import { ActionBarComponent } from './action-bar.component'; import * as i0 from "@angular/core"; export class ActionBarDirective extends CoreBaseComponent { /** * Constructs a new instance of the ActionBarDirective * @param injector The injector for the sme base component */ constructor(injector) { super(injector); /** * Indicates if the action bar should appear collapsed (defaults to false). */ this.smeActionBarCompact = true; /** * Indicates if the action bar should appear at all (defaults to true). */ this.smeActionBarAvailable = true; this.hovered = false; this.focused = false; } /** * The source name to use for logging */ get logSourceName() { return 'ActionBarDirective'; } /** * Callback method that executes after the default change-detector runs. */ ngDoCheck() { super.ngDoCheck(); const offsetLeft = this.hostElement.nativeElement.offsetLeft; const offsetTop = this.hostElement.nativeElement.offsetTop; const offsetParent = this.hostElement.nativeElement.offsetParent; const clientWidth = this.hostElement.nativeElement.clientWidth; if (this.offsetLeft !== offsetLeft || this.offsetTop !== offsetTop || this.offsetParent !== offsetParent || this.clientWidth !== clientWidth) { if (this.smeActionBar) { this.repositionActionBar(); } } this.offsetLeft = offsetLeft; this.offsetTop = offsetTop; this.offsetParent = offsetParent; this.clientWidth = clientWidth; } /** * Implementation of angular OnChanges interface. * On every input change, we recalculate the clamp. */ ngOnChanges(changes) { super.ngOnChanges(changes); if (changes.smeActionBar && this.smeActionBar) { this.repositionActionBar(); this.smeActionBar.setVisibility(this.smeActionBarAvailable); } if (changes.smeActionBarAvailable) { this.smeActionBar.setVisibility(this.smeActionBarAvailable); } } repositionActionBar() { if (this.smeActionBar) { this.smeActionBar.repositionRelativeTo(this.hostElement.nativeElement, this.smeActionBarCompact); } } showHideActionBar() { if (this.smeActionBar) { this.smeActionBar.showHide(this.hovered || this.focused); } } /** * Host listeners for window resize events. */ onWindowResize(event) { if (this.smeActionBar) { setTimeout(() => this.repositionActionBar()); } } /** * Host listeners for focus events. */ onFocusEvent(event) { // on focus in/out change focused state this.focused = event.type === 'focusin' || (this.focused && event.type !== 'focusout'); this.showHideActionBar(); } /** * Host listeners for mouse events. */ onMouseEvent(event) { // on mouse enter/leave change hovered state this.hovered = event.type === 'mouseenter' || (this.hovered && event.type !== 'mouseleave'); this.showHideActionBar(); } } /** @nocollapse */ ActionBarDirective.ɵfac = function ActionBarDirective_Factory(t) { return new (t || ActionBarDirective)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ ActionBarDirective.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: ActionBarDirective, selectors: [["", "smeActionBar", ""]], hostBindings: function ActionBarDirective_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("resize", function ActionBarDirective_resize_HostBindingHandler($event) { return ctx.onWindowResize($event); }, false, i0.ɵɵresolveWindow)("focusin", function ActionBarDirective_focusin_HostBindingHandler($event) { return ctx.onFocusEvent($event); })("focusout", function ActionBarDirective_focusout_HostBindingHandler($event) { return ctx.onFocusEvent($event); })("mouseenter", function ActionBarDirective_mouseenter_HostBindingHandler($event) { return ctx.onMouseEvent($event); })("mouseleave", function ActionBarDirective_mouseleave_HostBindingHandler($event) { return ctx.onMouseEvent($event); }); } }, inputs: { smeActionBar: "smeActionBar", smeActionBarCompact: "smeActionBarCompact", smeActionBarAvailable: "smeActionBarAvailable" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionBarDirective, [{ type: Directive, args: [{ selector: '[smeActionBar]' }] }], function () { return [{ type: i0.Injector }]; }, { smeActionBar: [{ type: Input }], smeActionBarCompact: [{ type: Input }], smeActionBarAvailable: [{ type: Input }], onWindowResize: [{ type: HostListener, args: ['window:resize', ['$event']] }], onFocusEvent: [{ type: HostListener, args: ['focusin', ['$event']] }, { type: HostListener, args: ['focusout', ['$event']] }], onMouseEvent: [{ type: HostListener, args: ['mouseenter', ['$event']] }, { type: HostListener, args: ['mouseleave', ['$event']] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJhci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9hY3Rpb25zL2NvbnRhaW5lcnMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFXLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFLNUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGlCQUFpQjtJQStCckQ7OztPQUdHO0lBQ0gsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUF0QnBCOztXQUVHO1FBQ2Esd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNDOztXQUVHO1FBQ2EsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBRXJDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztJQVl4QixDQUFDO0lBbkNEOztPQUVHO0lBQ0gsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8sb0JBQW9CLENBQUM7SUFDaEMsQ0FBQztJQWdDRDs7T0FFRztJQUNJLFNBQVM7UUFDWixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUMzRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7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O2tCQUFsQyxLQUFLO1lBS1UscUJBQXFCO2tCQUFwQyxLQUFLO1lBdUVDLGNBQWM7a0JBRHBCLFlBQVk7bUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBWWxDLFlBQVk7a0JBRmxCLFlBQVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDOztrQkFDbEMsWUFBWTttQkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFZN0IsWUFBWTtrQkFGbEIsWUFBWTttQkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7O2tCQUNyQyxZQUFZO21CQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRG9DaGVjaywgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbnRyb2xzL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGlvbkJhckNvbXBvbmVudCB9IGZyb20gJy4vYWN0aW9uLWJhci5jb21wb25lbnQnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tzbWVBY3Rpb25CYXJdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQmFyRGlyZWN0aXZlIGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIERvQ2hlY2sge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdBY3Rpb25CYXJEaXJlY3RpdmUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEFjdGlvbkJhckNvbXBvbmVudCB0byBhdHRhY2ggdG8uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzbWVBY3Rpb25CYXI6IEFjdGlvbkJhckNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGJhciBzaG91bGQgYXBwZWFyIGNvbGxhcHNlZCAoZGVmYXVsdHMgdG8gZmFsc2UpLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc21lQWN0aW9uQmFyQ29tcGFjdCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBiYXIgc2hvdWxkIGFwcGVhciBhdCBhbGwgKGRlZmF1bHRzIHRvIHRydWUpLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc21lQWN0aW9uQmFyQXZhaWxhYmxlID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIGhvdmVyZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBvZmZzZXRUb3A6IG51bWJlcjtcclxuICAgIHByaXZhdGUgb2Zmc2V0TGVmdDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBvZmZzZXRQYXJlbnQ6IEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGNsaWVudFdpZHRoOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBY3Rpb25CYXJEaXJlY3RpdmVcclxuICAgICAqIEBwYXJhbSBpbmplY3RvciBUaGUgaW5qZWN0b3IgZm9yIHRoZSBzbWUgYmFzZSBjb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgYWZ0ZXIgdGhlIGRlZmF1bHQgY2hhbmdlLWRldGVjdG9yIHJ1bnMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudDtcclxuICAgICAgICBjb25zdCBjbGllbnRXaWR0aCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgICAgICBpZiAodGhpcy5vZmZzZXRMZWZ0ICE9PSBvZmZzZXRMZWZ0XHJcbiAgICAgICAgICAgIHx8IHRoaXMub2Zmc2V0VG9wICE9PSBvZmZzZXRUb3BcclxuICAgICAgICAgICAgfHwgdGhpcy5vZmZzZXRQYXJlbnQgIT09IG9mZnNldFBhcmVudFxyXG4gICAgICAgICAgICB8fCB0aGlzLmNsaWVudFdpZHRoICE9PSBjbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbWVBY3Rpb25CYXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3NpdGlvbkFjdGlvbkJhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub2Zmc2V0TGVmdCA9IG9mZnNldExlZnQ7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRUb3AgPSBvZmZzZXRUb3A7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XHJcbiAgICAgICAgdGhpcy5jbGllbnRXaWR0aCA9IGNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBPbkNoYW5nZXMgaW50ZXJmYWNlLlxyXG4gICAgICogT24gZXZlcnkgaW5wdXQgY2hhbmdlLCB3ZSByZWNhbGN1bGF0ZSB0aGUgY2xhbXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuc21lQWN0aW9uQmFyICYmIHRoaXMuc21lQWN0aW9uQmFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdGlvbkFjdGlvbkJhcigpO1xyXG4gICAgICAgICAgICB0aGlzLnNtZUFjdGlvbkJhci5zZXRWaXNpYmlsaXR5KHRoaXMuc21lQWN0aW9uQmFyQXZhaWxhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuc21lQWN0aW9uQmFyQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc21lQWN0aW9uQmFyLnNldFZpc2liaWxpdHkodGhpcy5zbWVBY3Rpb25CYXJBdmFpbGFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcG9zaXRpb25BY3Rpb25CYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc21lQWN0aW9uQmFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc21lQWN0aW9uQmFyLnJlcG9zaXRpb25SZWxhdGl2ZVRvKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5zbWVBY3Rpb25CYXJDb21wYWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93SGlkZUFjdGlvbkJhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zbWVBY3Rpb25CYXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zbWVBY3Rpb25CYXIuc2hvd0hpZGUodGhpcy5ob3ZlcmVkIHx8IHRoaXMuZm9jdXNlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9zdCBsaXN0ZW5lcnMgZm9yIHdpbmRvdyByZXNpemUgZXZlbnRzLlxyXG4gICAgICovXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZShldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNtZUFjdGlvbkJhcikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVwb3NpdGlvbkFjdGlvbkJhcigpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIb3N0IGxpc3RlbmVycyBmb3IgZm9jdXMgZXZlbnRzLlxyXG4gICAgICovXHJcbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c2luJywgWyckZXZlbnQnXSlcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkZvY3VzRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgLy8gb24gZm9jdXMgaW4vb3V0IGNoYW5nZSBmb2N1c2VkIHN0YXRlXHJcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nIHx8ICh0aGlzLmZvY3VzZWQgJiYgZXZlbnQudHlwZSAhPT0gJ2ZvY3Vzb3V0Jyk7XHJcbiAgICAgICAgdGhpcy5zaG93SGlkZUFjdGlvbkJhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9zdCBsaXN0ZW5lcnMgZm9yIG1vdXNlIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbk1vdXNlRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgLy8gb24gbW91c2UgZW50ZXIvbGVhdmUgY2hhbmdlIGhvdmVyZWQgc3RhdGVcclxuICAgICAgICB0aGlzLmhvdmVyZWQgPSBldmVudC50eXBlID09PSAnbW91c2VlbnRlcicgfHwgKHRoaXMuaG92ZXJlZCAmJiBldmVudC50eXBlICE9PSAnbW91c2VsZWF2ZScpO1xyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVBY3Rpb25CYXIoKTtcclxuICAgIH1cclxufVxyXG4iXX0=