UNPKG

@coreui/angular

Version:

CoreUI Components Library for Angular

107 lines 16.8 kB
import { afterRender, Component, computed, contentChild, ElementRef, inject, input, signal } from '@angular/core'; import { DOCUMENT, NgClass, NgTemplateOutlet } from '@angular/common'; import { BreakpointObserver } from '@angular/cdk/layout'; import { CollapseDirective } from '../collapse'; import { ThemeDirective } from '../shared'; import * as i0 from "@angular/core"; import * as i1 from "../shared/theme.directive"; // todo: fix container prop issue not rendering children // todo: workaround - use <c-container> component directly in template export class NavbarComponent { constructor() { this.#breakpointObserver = inject(BreakpointObserver); this.#document = inject(DOCUMENT); this.#hostElement = inject(ElementRef); /** * Sets the color context of the component to one of CoreUI’s themed colors. * @type Colors */ this.color = input(); /** * Defines optional container wrapping children elements. */ this.container = input(); /** * Defines the responsive breakpoint to determine when content collapses. */ this.expand = input(); /** * Place component in non-static positions. */ this.placement = input(); this.role = input('navigation'); this.collapse = contentChild(CollapseDirective); this.hostClasses = computed(() => { const color = this.color(); const expand = this.expand(); const expandClassSuffix = expand === true ? '' : `-${expand}`; const placement = this.placement(); return { navbar: true, [`navbar-expand${expandClassSuffix}`]: !!expand, [`bg-${color}`]: !!color, [`${placement}`]: !!placement }; }); this.containerClass = computed(() => { const container = this.container(); return `container${container !== true ? '-' + container : ''}`; }); this.computedStyle = signal(''); this.afterNextRenderFn = afterRender({ read: () => { const expand = this.expand(); if (typeof expand === 'string') { const computedStyle = this.#document.defaultView ?.getComputedStyle(this.#hostElement.nativeElement) ?.getPropertyValue(`--cui-breakpoint-${expand}`) ?? false; computedStyle && this.computedStyle.set(computedStyle); } } }); this.breakpoint = computed(() => { const expand = this.expand(); if (typeof expand === 'string') { return this.computedStyle(); } return false; }); } #breakpointObserver; #document; #hostElement; #observer; ngAfterContentInit() { const breakpoint = this.breakpoint(); if (breakpoint) { const onBreakpoint = `(min-width: ${breakpoint})`; this.#observer = this.#breakpointObserver .observe([onBreakpoint]) .pipe() .subscribe((result) => { const collapse = this.collapse(); if (collapse) { const animate = collapse.animate(); collapse.animate.set(false); collapse.toggle(false); setTimeout(() => { collapse.toggle(result.matches); setTimeout(() => { collapse.animate.set(animate); }); }); } }); } } ngOnDestroy() { this.#observer?.unsubscribe(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.12", type: NavbarComponent, isStandalone: true, selector: "c-navbar", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, expand: { classPropertyName: "expand", publicName: "expand", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()", "attr.role": "role()" } }, queries: [{ propertyName: "collapse", first: true, predicate: CollapseDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.ThemeDirective, inputs: ["colorScheme", "colorScheme"] }], ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"container() ? withContainerTemplate : noContainerTemplate\" />\n\n<ng-template #withContainerTemplate>\n <div [ngClass]=\"containerClass()\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-template #noContainerTemplate>\n <ng-content />\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NavbarComponent, decorators: [{ type: Component, args: [{ selector: 'c-navbar', standalone: true, imports: [NgClass, NgTemplateOutlet], hostDirectives: [{ directive: ThemeDirective, inputs: ['colorScheme'] }], host: { '[class]': 'hostClasses()', '[attr.role]': 'role()' }, template: "<ng-container *ngTemplateOutlet=\"container() ? withContainerTemplate : noContainerTemplate\" />\n\n<ng-template #withContainerTemplate>\n <div [ngClass]=\"containerClass()\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-template #noContainerTemplate>\n <ng-content />\n</ng-template>\n" }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbmF2YmFyL25hdmJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL25hdmJhci9uYXZiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7O0FBRzNDLHdEQUF3RDtBQUN4RCx1RUFBdUU7QUFVdkUsTUFBTSxPQUFPLGVBQWU7SUFSNUI7UUFTVyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTNDOzs7V0FHRztRQUNNLFVBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUVqQzs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLEVBQXlELENBQUM7UUFFcEY7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxFQUErQyxDQUFDO1FBRXZFOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssRUFBK0Ms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RUFBRSxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbkMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7NEJBQ2QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hDLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQzsrR0FuR1UsZUFBZTttR0FBZixlQUFlLGl6QkE0Qk8saUJBQWlCLDRKQzNEcEQsMFNBV0EsNENEZ0JZLE9BQU8sb0ZBQUUsZ0JBQWdCOzs0RkFJeEIsZUFBZTtrQkFSM0IsU0FBUzsrQkFDRSxVQUFVLGNBRVIsSUFBSSxXQUNQLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLGtCQUNwQixDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFFBQ2xFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgYWZ0ZXJSZW5kZXIsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcblxuaW1wb3J0IHsgQ29sbGFwc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9jb2xsYXBzZSc7XG5pbXBvcnQgeyBDb2xvcnMgfSBmcm9tICcuLi9jb3JldWkudHlwZXMnO1xuaW1wb3J0IHsgVGhlbWVEaXJlY3RpdmUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8vIHRvZG86IGZpeCBjb250YWluZXIgcHJvcCBpc3N1ZSBub3QgcmVuZGVyaW5nIGNoaWxkcmVuXG4vLyB0b2RvOiB3b3JrYXJvdW5kIC0gIHVzZSA8Yy1jb250YWluZXI+IGNvbXBvbmVudCBkaXJlY3RseSBpbiB0ZW1wbGF0ZVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLW5hdmJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbeyBkaXJlY3RpdmU6IFRoZW1lRGlyZWN0aXZlLCBpbnB1dHM6IFsnY29sb3JTY2hlbWUnXSB9XSxcbiAgaG9zdDogeyAnW2NsYXNzXSc6ICdob3N0Q2xhc3NlcygpJywgJ1thdHRyLnJvbGVdJzogJ3JvbGUoKScgfVxufSlcbmV4cG9ydCBjbGFzcyBOYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICByZWFkb25seSAjYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG4gIHJlYWRvbmx5ICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHJlYWRvbmx5ICNob3N0RWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgY29tcG9uZW50IHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXG4gICAqIEB0eXBlIENvbG9yc1xuICAgKi9cbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dDxDb2xvcnM+KCk7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgb3B0aW9uYWwgY29udGFpbmVyIHdyYXBwaW5nIGNoaWxkcmVuIGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyID0gaW5wdXQ8Ym9vbGVhbiB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCAneHhsJyB8ICdmbHVpZCc+KCk7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludCB0byBkZXRlcm1pbmUgd2hlbiBjb250ZW50IGNvbGxhcHNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGFuZCA9IGlucHV0PGJvb2xlYW4gfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3h4bCc+KCk7XG5cbiAgLyoqXG4gICAqIFBsYWNlIGNvbXBvbmVudCBpbiBub24tc3RhdGljIHBvc2l0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHBsYWNlbWVudCA9IGlucHV0PCdmaXhlZC10b3AnIHwgJ2ZpeGVkLWJvdHRvbScgfCAnc3RpY2t5LXRvcCc+KCk7XG5cbiAgcmVhZG9ubHkgcm9sZSA9IGlucHV0KCduYXZpZ2F0aW9uJyk7XG5cbiAgcmVhZG9ubHkgY29sbGFwc2UgPSBjb250ZW50Q2hpbGQoQ29sbGFwc2VEaXJlY3RpdmUpO1xuXG4gIHJlYWRvbmx5IGhvc3RDbGFzc2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5jb2xvcigpO1xuICAgIGNvbnN0IGV4cGFuZCA9IHRoaXMuZXhwYW5kKCk7XG4gICAgY29uc3QgZXhwYW5kQ2xhc3NTdWZmaXg6IHN0cmluZyA9IGV4cGFuZCA9PT0gdHJ1ZSA/ICcnIDogYC0ke2V4cGFuZH1gO1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IHRoaXMucGxhY2VtZW50KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdmJhcjogdHJ1ZSxcbiAgICAgIFtgbmF2YmFyLWV4cGFuZCR7ZXhwYW5kQ2xhc3NTdWZmaXh9YF06ICEhZXhwYW5kLFxuICAgICAgW2BiZy0ke2NvbG9yfWBdOiAhIWNvbG9yLFxuICAgICAgW2Ake3BsYWNlbWVudH1gXTogISFwbGFjZW1lbnRcbiAgICB9IGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICB9KTtcblxuICByZWFkb25seSBjb250YWluZXJDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcigpO1xuICAgIHJldHVybiBgY29udGFpbmVyJHtjb250YWluZXIgIT09IHRydWUgPyAnLScgKyBjb250YWluZXIgOiAnJ31gO1xuICB9KTtcblxuICByZWFkb25seSBjb21wdXRlZFN0eWxlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IGFmdGVyTmV4dFJlbmRlckZuID0gYWZ0ZXJSZW5kZXIoe1xuICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGFuZCA9IHRoaXMuZXhwYW5kKCk7XG4gICAgICBpZiAodHlwZW9mIGV4cGFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9XG4gICAgICAgICAgdGhpcy4jZG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICAgICAgICAgID8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgPy5nZXRQcm9wZXJ0eVZhbHVlKGAtLWN1aS1icmVha3BvaW50LSR7ZXhwYW5kfWApID8/IGZhbHNlO1xuICAgICAgICBjb21wdXRlZFN0eWxlICYmIHRoaXMuY29tcHV0ZWRTdHlsZS5zZXQoY29tcHV0ZWRTdHlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZWFkb25seSBicmVha3BvaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGFuZCA9IHRoaXMuZXhwYW5kKCk7XG4gICAgaWYgKHR5cGVvZiBleHBhbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlZFN0eWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgI29ic2VydmVyITogU3Vic2NyaXB0aW9uO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBicmVha3BvaW50ID0gdGhpcy5icmVha3BvaW50KCk7XG4gICAgaWYgKGJyZWFrcG9pbnQpIHtcbiAgICAgIGNvbnN0IG9uQnJlYWtwb2ludCA9IGAobWluLXdpZHRoOiAke2JyZWFrcG9pbnR9KWA7XG4gICAgICB0aGlzLiNvYnNlcnZlciA9IHRoaXMuI2JyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAub2JzZXJ2ZShbb25CcmVha3BvaW50XSlcbiAgICAgICAgLnBpcGUoKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xsYXBzZSA9IHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgICBpZiAoY29sbGFwc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGFuaW1hdGUgPSBjb2xsYXBzZS5hbmltYXRlKCk7XG4gICAgICAgICAgICBjb2xsYXBzZS5hbmltYXRlLnNldChmYWxzZSk7XG4gICAgICAgICAgICBjb2xsYXBzZS50b2dnbGUoZmFsc2UpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbGxhcHNlLnRvZ2dsZShyZXN1bHQubWF0Y2hlcyk7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlLmFuaW1hdGUuc2V0KGFuaW1hdGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jb2JzZXJ2ZXI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250YWluZXIoKSA/IHdpdGhDb250YWluZXJUZW1wbGF0ZSA6IG5vQ29udGFpbmVyVGVtcGxhdGVcIiAvPlxuXG48bmctdGVtcGxhdGUgI3dpdGhDb250YWluZXJUZW1wbGF0ZT5cbiAgPGRpdiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzcygpXCI+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vQ29udGFpbmVyVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IC8+XG48L25nLXRlbXBsYXRlPlxuIl19