ngx-material-navigation 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +97 -0
- package/LICENSE.md +21 -0
- package/README.md +119 -0
- package/components/footer/footer.component.d.ts +13 -0
- package/components/footer/footer.module.d.ts +8 -0
- package/components/navbar/nav-element/nav-element.component.d.ts +35 -0
- package/components/navbar/nav-element/nav-element.module.d.ts +13 -0
- package/components/navbar/nav-menu/nav-menu.component.d.ts +42 -0
- package/components/navbar/nav-menu/nav-menu.module.d.ts +11 -0
- package/components/navbar/navbar.component.d.ts +53 -0
- package/components/navbar/navbar.module.d.ts +11 -0
- package/esm2020/components/footer/footer.component.mjs +17 -0
- package/esm2020/components/footer/footer.module.mjs +22 -0
- package/esm2020/components/navbar/nav-element/nav-element.component.mjs +51 -0
- package/esm2020/components/navbar/nav-element/nav-element.module.mjs +42 -0
- package/esm2020/components/navbar/nav-menu/nav-menu.component.mjs +71 -0
- package/esm2020/components/navbar/nav-menu/nav-menu.module.mjs +34 -0
- package/esm2020/components/navbar/navbar.component.mjs +97 -0
- package/esm2020/components/navbar/navbar.module.mjs +34 -0
- package/esm2020/models/nav-button.model.mjs +2 -0
- package/esm2020/models/nav-image.model.mjs +2 -0
- package/esm2020/models/nav-link.model.mjs +8 -0
- package/esm2020/models/nav-menu.model.mjs +2 -0
- package/esm2020/models/nav-title.model.mjs +2 -0
- package/esm2020/models/nav.model.mjs +4 -0
- package/esm2020/models/navbar.model.mjs +2 -0
- package/esm2020/ngx-material-navigation.mjs +5 -0
- package/esm2020/public-api.mjs +16 -0
- package/esm2020/utilities/nav.utilities.mjs +198 -0
- package/fesm2015/ngx-material-navigation.mjs +551 -0
- package/fesm2015/ngx-material-navigation.mjs.map +1 -0
- package/fesm2020/ngx-material-navigation.mjs +551 -0
- package/fesm2020/ngx-material-navigation.mjs.map +1 -0
- package/models/nav-button.model.d.ts +11 -0
- package/models/nav-image.model.d.ts +40 -0
- package/models/nav-link.model.d.ts +39 -0
- package/models/nav-menu.model.d.ts +28 -0
- package/models/nav-title.model.d.ts +52 -0
- package/models/nav.model.d.ts +23 -0
- package/models/navbar.model.d.ts +11 -0
- package/ngx-material-navigation.d.ts +5 -0
- package/package.json +39 -0
- package/public-api.d.ts +12 -0
- package/utilities/nav.utilities.d.ts +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-material-navigation.mjs","sources":["../../../projects/ngx-material-navigation/src/models/nav.model.ts","../../../projects/ngx-material-navigation/src/models/nav-link.model.ts","../../../projects/ngx-material-navigation/src/utilities/nav.utilities.ts","../../../projects/ngx-material-navigation/src/components/navbar/nav-menu/nav-menu.component.ts","../../../projects/ngx-material-navigation/src/components/navbar/nav-menu/nav-menu.component.html","../../../projects/ngx-material-navigation/src/components/navbar/nav-element/nav-element.component.ts","../../../projects/ngx-material-navigation/src/components/navbar/nav-element/nav-element.component.html","../../../projects/ngx-material-navigation/src/components/navbar/navbar.component.ts","../../../projects/ngx-material-navigation/src/components/navbar/navbar.component.html","../../../projects/ngx-material-navigation/src/components/navbar/nav-menu/nav-menu.module.ts","../../../projects/ngx-material-navigation/src/components/navbar/nav-element/nav-element.module.ts","../../../projects/ngx-material-navigation/src/components/navbar/navbar.module.ts","../../../projects/ngx-material-navigation/src/components/footer/footer.component.ts","../../../projects/ngx-material-navigation/src/components/footer/footer.component.html","../../../projects/ngx-material-navigation/src/components/footer/footer.module.ts","../../../projects/ngx-material-navigation/src/public-api.ts","../../../projects/ngx-material-navigation/src/ngx-material-navigation.ts"],"sourcesContent":["import { NavButton } from './nav-button.model';\r\nimport { NavImage, NavImageWithExternalLink, NavImageWithInternalLink } from './nav-image.model';\r\nimport { NavInternalLink, NavExternalLink } from './nav-link.model';\r\nimport { NavMenu } from './nav-menu.model';\r\nimport { NavTitle, NavTitleWithExternalLink, NavTitleWithInternalLink } from './nav-title.model';\r\n\r\n// eslint-disable-next-line jsdoc/require-jsdoc\r\nexport abstract class BaseNavElement {\r\n /**\r\n * The type of the element.\r\n */\r\n type!: 'title' | 'titleWithInternalLink' | 'titleWithExternalLink' |\r\n 'image' | 'imageWithInternalLink' | 'imageWithExternalLink' |\r\n 'internalLink' | 'button' | 'externalLink' | 'menu';\r\n /**\r\n * The position of the element.\r\n */\r\n position?: 'left' | 'center' | 'right';\r\n /**\r\n * At which breakpoint the element should be moved inside the sidenav.\r\n */\r\n collapse!: 'lg' | 'md' | 'sm' | 'never' | 'always';\r\n}\r\n\r\n/**\r\n * One of the many NavElements.\r\n */\r\nexport type NavElement =\r\n NavTitle | NavTitleWithInternalLink | NavTitleWithExternalLink\r\n | NavImage | NavImageWithExternalLink | NavImageWithInternalLink\r\n | NavButton | NavInternalLink | NavExternalLink | NavMenu;","import { Route } from '@angular/router';\r\nimport { BaseNavElement } from './nav.model';\r\n\r\n/**\r\n * The base abstract definition for internal and external links.\r\n */\r\nexport abstract class NavLink extends BaseNavElement {\r\n /**\r\n * The name to display for the link.\r\n */\r\n name!: string;\r\n /**\r\n * An icon to display left of the link.\r\n */\r\n icon?: string;\r\n /**\r\n * Whether or not the link should be opened in a new tab.\r\n */\r\n openInNewTab?: boolean;\r\n}\r\n\r\n/**\r\n * The definition for an internal route.\r\n */\r\nexport interface NavInternalLink extends NavLink {\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n type: 'internalLink',\r\n /**\r\n * The route of the Link. Can be either an angular route or a simple string.\r\n */\r\n route: Route | string\r\n}\r\n\r\n/**\r\n * The definition for an external link.\r\n */\r\nexport interface NavExternalLink extends NavLink {\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n type: 'externalLink',\r\n /**\r\n * The url of the link.\r\n */\r\n url: string\r\n};","import { Route, Routes } from '@angular/router';\r\nimport { NavButton } from '../models/nav-button.model';\r\nimport { NavMenu, NavMenuElement } from '../models/nav-menu.model';\r\nimport { NavImage, NavImageWithExternalLink, NavImageWithInternalLink } from '../models/nav-image.model';\r\nimport { NavTitle, NavTitleWithExternalLink, NavTitleWithInternalLink } from '../models/nav-title.model';\r\nimport { NavElement } from '../models/nav.model';\r\nimport { NavExternalLink, NavInternalLink } from '../models/nav-link.model';\r\nimport { NavbarRow } from '../models/navbar.model';\r\n\r\n/**\r\n * Contains HelperMethods around handling Navigation.\r\n */\r\nexport abstract class NavUtilities {\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asTitle(element: NavElement): NavTitle {\r\n return element as NavTitle;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asAngularRoute(route: Route | string): Route {\r\n return route as Route;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asStringRoute(route: Route | string): string {\r\n return route as string;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asInternalLink(element: NavElement | NavMenuElement): NavInternalLink {\r\n return element as NavInternalLink;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asExternalLink(element: NavElement | NavMenuElement): NavExternalLink {\r\n return element as NavExternalLink;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asMenu(element: NavElement | NavMenuElement): NavMenu {\r\n return element as NavMenu;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asButton(element: NavElement): NavButton {\r\n return element as NavButton;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asImage(element: NavElement): NavImage {\r\n return element as NavImage;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asImageWithInternalLink(element: NavElement): NavImageWithInternalLink {\r\n return element as NavImageWithInternalLink;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asImageWithExternalLink(element: NavElement): NavImageWithExternalLink {\r\n return element as NavImageWithExternalLink;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asTitleWithInternalLink(element: NavElement): NavTitleWithInternalLink {\r\n return element as NavTitleWithInternalLink;\r\n }\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n static asTitleWithExternalLink(element: NavElement): NavTitleWithExternalLink {\r\n return element as NavTitleWithExternalLink;\r\n }\r\n\r\n /**\r\n * Checks if the provided element is a NavInternalLink.\r\n *\r\n * @param element - The element to check.\r\n * @returns Whether or not the given element is a NavInternalLink.\r\n */\r\n static isInternalLink(element: NavElement): element is NavInternalLink {\r\n if ((element as NavInternalLink).route) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks if the provided element is a NavMenu.\r\n *\r\n * @param element - The element to check.\r\n * @returns Whether or not the given element is a NavMenu.\r\n */\r\n static isMenu(element: NavElement): element is NavMenu {\r\n if ((element as NavMenu).elements) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks if the provided value is an angular route.\r\n *\r\n * @param route - The value to check.\r\n * @returns Whether or not the given value is an angular route.\r\n */\r\n static isAngularRoute(route: Route | string): route is Route {\r\n if ((route as Route).path) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks if the provided element is a NavElement.\r\n *\r\n * @param value - The element to check.\r\n * @returns Whether or not the given element is a NavElement.\r\n */\r\n static isNavElement(value: NavElement | NavbarRow): value is NavElement {\r\n if ((value as NavElement).type) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the angular routes.\r\n * Extracts them from the navbarRows and adds any additional routes provided in additionalRoutes.\r\n *\r\n * @param navbarRows - The NavbarRows used as a configuration for the navbar element.\r\n * @param additionalRoutes - Any additional routes that aren't included in the NavbarRows.\r\n * @returns All found angular routes.\r\n */\r\n static getAngularRoutes(navbarRows: NavbarRow[] = [], additionalRoutes: Routes = []): Routes {\r\n let allRoutes: Routes = [];\r\n allRoutes = allRoutes.concat(NavUtilities.getRoutesFromNavbar(navbarRows));\r\n allRoutes = allRoutes.concat(additionalRoutes);\r\n // Filters to only contain unique paths\r\n const uniquePaths: string[] = [];\r\n const res: Routes = [];\r\n for (const route of allRoutes) {\r\n if (!uniquePaths.find(r => r === route.path)) {\r\n res.push(route);\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n private static getRoutesFromNavbar(navbarRows: NavbarRow[]): Routes {\r\n let res: Routes = [];\r\n for (const row of navbarRows) {\r\n res = res.concat(NavUtilities.getRoutesFromElements(row.elements));\r\n };\r\n return res;\r\n }\r\n\r\n private static getRoutesFromElements(elements: NavElement[]): Routes {\r\n let res: Routes = [];\r\n const internalLinks: NavInternalLink[] = elements.filter(e => NavUtilities.isInternalLink(e)) as NavInternalLink[];\r\n const angularRoutes: Routes = internalLinks.filter(l => NavUtilities.isAngularRoute(l.route)).map(l => l.route) as Routes;\r\n res = res.concat(angularRoutes);\r\n const menus: NavMenu[] = elements.filter(e => NavUtilities.isMenu(e)) as NavMenu[];\r\n for (const menu of menus) {\r\n res = res.concat(NavUtilities.getRoutesFromElements(menu.elements as NavElement[]));\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Get all elements at the provided position with the provided screenWidth from the given elements.\r\n *\r\n * @param position - The position for which to get the elements.\r\n * @param screenWidth - The current screen width. Is needed to hide elements that are already collapsed into the sidenav.\r\n * @param rows - The rows to get the elements from.\r\n * @returns All Elements for the provided input.\r\n */\r\n static getNavbarElements(\r\n position: 'left' | 'center' | 'right',\r\n screenWidth: 'lg' | 'md' | 'sm',\r\n rows?: NavbarRow[]\r\n ): NavElement[] {\r\n if (!rows || !rows.length) {\r\n return [];\r\n }\r\n let res: NavElement[] = [];\r\n for (const row of rows ) {\r\n res = res.concat(row.elements);\r\n }\r\n\r\n if (position === 'left') {\r\n res = res.filter(e => !e.position || e.position === position);\r\n }\r\n else {\r\n res = res.filter(e => e.position === position);\r\n }\r\n switch (screenWidth) {\r\n case 'lg':\r\n return res.filter(e => e.collapse !== 'always' && e.collapse !== 'lg');\r\n case 'md':\r\n return res.filter(e => e.collapse !== 'always' && e.collapse !== 'lg' && e.collapse !== 'md');\r\n case 'sm':\r\n return res.filter(e => e.collapse !== 'always' && e.collapse !== 'lg' && e.collapse !== 'md' && e.collapse !== 'sm');\r\n }\r\n }\r\n\r\n /**\r\n * Gets all the elements to display in the sidenav.\r\n *\r\n * @param screenWidth - The current screen width.\r\n * @param rows - The rows to get the elements from.\r\n * @returns The NavElements to display in the sidenav.\r\n */\r\n static getSidenavElements(screenWidth: 'lg' | 'md' | 'sm', rows?: NavbarRow[]): NavElement[] {\r\n if (!rows || !rows.length) {\r\n return [];\r\n }\r\n let res: NavElement[] = [];\r\n for (const row of rows) {\r\n res = res.concat(row.elements);\r\n }\r\n switch (screenWidth) {\r\n case 'lg':\r\n return res.filter(e => e.collapse === 'always' || e.collapse === 'lg');\r\n case 'md':\r\n return res.filter(e => e.collapse === 'always' || e.collapse === 'lg' || e.collapse === 'md');\r\n case 'sm':\r\n return res.filter(e => e.collapse === 'always' || e.collapse === 'lg' || e.collapse === 'md' || e.collapse === 'sm');\r\n }\r\n }\r\n}","import { AfterContentChecked, Component, HostListener, Input, ViewChild } from '@angular/core';\r\nimport { MatMenu } from '@angular/material/menu';\r\nimport { NavMenu, NavMenuElement } from \"../../../models/nav-menu.model\";\r\nimport { NavUtilities } from '../../../utilities/nav.utilities';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { MatButton } from '@angular/material/button';\r\n\r\n/**\r\n * Displays a menu based on the provided NavMenu data.\r\n */\r\n@Component({\r\n selector: 'ngx-mat-navigation-menu',\r\n templateUrl: './nav-menu.component.html',\r\n styleUrls: ['./nav-menu.component.scss']\r\n})\r\nexport class NavMenuComponent implements AfterContentChecked {\r\n\r\n @ViewChild('menu', {static: true})\r\n menu!: MatMenu;\r\n\r\n /**\r\n * The data that is used to generate the menu.\r\n */\r\n @Input()\r\n navMenu!: NavMenu;\r\n\r\n /**\r\n * The sidenav element. Is needed so that it can be closed from within a menu.\r\n */\r\n @Input()\r\n sidenav?: MatSidenav;\r\n\r\n /**\r\n * The width of the menu. Is set to the value of the button opening it.\r\n */\r\n @Input()\r\n menuWidth!: number;\r\n\r\n NavUtilities = NavUtilities;\r\n\r\n @ViewChild('nestedMenuButton')\r\n nestedMenuButton!: MatButton;\r\n\r\n nestedMenuWidth!: number;\r\n\r\n ngAfterContentChecked(): void {\r\n if (this.nestedMenuButton) {\r\n this.nestedMenuWidth = this.getMenuWidth();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the width of the nestedMenu.\r\n */\r\n @HostListener('window:resize', ['$event'])\r\n onResize(): void {\r\n if (this.nestedMenuButton) {\r\n this.nestedMenuWidth = this.getMenuWidth();\r\n }\r\n }\r\n\r\n private getMenuWidth(): number {\r\n return (this.nestedMenuButton._elementRef.nativeElement as HTMLElement).offsetWidth;\r\n }\r\n\r\n /**\r\n * Defines if the sidenav should be closed when the given element is clicked.\r\n *\r\n * @param element - The element that has been clicked.\r\n */\r\n clickSidenavElement(element: NavMenuElement): void {\r\n if (this.sidenav) {\r\n switch (element.type) {\r\n case 'image':\r\n case 'title':\r\n case 'menu':\r\n return;\r\n default:\r\n this.sidenav.close();\r\n return;\r\n }\r\n }\r\n }\r\n}","<mat-menu #menu=\"matMenu\" [overlapTrigger]=\"false\">\r\n <div *ngFor=\"let element of navMenu.elements\" [style.min-width.px]=\"menuWidth\">\r\n <div [ngSwitch]=\"element.type\">\r\n <!-- Internal Link -->\r\n <a mat-button *ngSwitchCase=\"'internalLink'\"\r\n (click)=\"clickSidenavElement(element)\"\r\n [routerLink]=\"\r\n NavUtilities.asAngularRoute(NavUtilities.asInternalLink(element).route).path\r\n ? NavUtilities.asAngularRoute(NavUtilities.asInternalLink(element).route).path\r\n : NavUtilities.asStringRoute(NavUtilities.asInternalLink(element).route)\"\r\n [target]=\"NavUtilities.asInternalLink(element).openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asInternalLink(element).openInNewTab ? 'noreferrer noopener' : undefined\"\r\n >\r\n <i *ngIf=\"NavUtilities.asInternalLink(element).icon\" [class]=\"NavUtilities.asInternalLink(element).icon\"></i> \r\n {{NavUtilities.asInternalLink(element).name}}\r\n </a>\r\n <!-- External Link -->\r\n <span *ngSwitchCase=\"'externalLink'\">\r\n <a mat-button\r\n (click)=\"clickSidenavElement(element)\"\r\n [href]=\"NavUtilities.asExternalLink(element).url\"\r\n [target]=\"NavUtilities.asExternalLink(element).openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asExternalLink(element).openInNewTab ? 'noreferrer noopener' : undefined\"\r\n >\r\n <i *ngIf=\"NavUtilities.asExternalLink(element).icon\" [class]=\"NavUtilities.asExternalLink(element).icon\"></i>\r\n {{NavUtilities.asExternalLink(element).name}}\r\n </a>\r\n </span>\r\n <!-- Nested Menu -->\r\n <button #nestedMenuButton id=\"menu-button\" *ngSwitchCase=\"'menu'\" mat-menu-item [matMenuTriggerFor]=\"internalMenu.menu\">\r\n <i *ngIf=\"NavUtilities.asMenu(element).icon\" [class]=\"NavUtilities.asMenu(element).icon\"></i>\r\n {{NavUtilities.asMenu(element).name}}\r\n </button>\r\n <ngx-mat-navigation-menu #internalMenu [navMenu]=\"NavUtilities.asMenu(element)\" [sidenav]=\"sidenav\" [menuWidth]=\"nestedMenuWidth\">\r\n </ngx-mat-navigation-menu>\r\n </div>\r\n </div>\r\n</mat-menu>","import { AfterContentChecked, Component, HostListener, Input, ViewChild } from '@angular/core';\r\nimport { NavElement } from '../../../models/nav.model';\r\nimport { NavUtilities } from '../../../utilities/nav.utilities';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { MatButton } from '@angular/material/button';\r\n\r\n/**\r\n * Displays a single Navigation Element.\r\n */\r\n@Component({\r\n selector: 'ngx-mat-navigation-element',\r\n templateUrl: './nav-element.component.html',\r\n styleUrls: ['./nav-element.component.scss']\r\n})\r\nexport class NavElementComponent implements AfterContentChecked {\r\n\r\n NavUtilities = NavUtilities;\r\n\r\n /**\r\n * The element to display.\r\n */\r\n @Input()\r\n element!: NavElement;\r\n\r\n /**\r\n * A reference to the sidenav. Is needed for the menu to close the sidenav.\r\n */\r\n @Input()\r\n sidenav?: MatSidenav;\r\n\r\n /**\r\n * Whether or not this element should be displayed inside the sidenav.\r\n * Used to apply different styling.\r\n */\r\n @Input()\r\n sidenavElement?: boolean;\r\n\r\n @ViewChild('menuButton')\r\n menuButton!: MatButton;\r\n\r\n menuWidth!: number;\r\n\r\n ngAfterContentChecked(): void {\r\n if (this.menuButton) {\r\n this.menuWidth = this.getMenuWidth();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the width of the menu to the value of its button.\r\n */\r\n @HostListener('window:resize', ['$event'])\r\n onResize(): void {\r\n if (this.menuButton) {\r\n this.menuWidth = this.getMenuWidth();\r\n }\r\n }\r\n\r\n private getMenuWidth(): number {\r\n return (this.menuButton._elementRef.nativeElement as HTMLElement).offsetWidth;\r\n }\r\n}","<span [ngSwitch]=\"element.type\">\r\n <!-- Title -->\r\n <h1 mat-menu-item disabled *ngSwitchCase=\"'title'\" [class.sidenavElement]=\"sidenavElement\">\r\n <i *ngIf=\"NavUtilities.asTitle(element).icon\" [class]=\"NavUtilities.asTitle(element).icon\"></i>\r\n {{NavUtilities.asTitle(element).title}}\r\n </h1>\r\n <!-- Title with internal link -->\r\n <a id=\"title-link\" disableRipple mat-menu-item *ngSwitchCase=\"'titleWithInternalLink'\"\r\n [routerLink]=\" \r\n NavUtilities.asAngularRoute(NavUtilities.asTitleWithInternalLink(element).link.route).path !== undefined\r\n ? NavUtilities.asAngularRoute(NavUtilities.asTitleWithInternalLink(element).link.route).path\r\n : NavUtilities.asStringRoute(NavUtilities.asTitleWithInternalLink(element).link.route)\"\r\n [target]=\"NavUtilities.asTitleWithInternalLink(element).link.openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asTitleWithInternalLink(element).link.openInNewTab ? 'noreferrer noopener' : undefined\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n >\r\n <h1>\r\n <i *ngIf=\"NavUtilities.asTitle(element).icon\" [class]=\"NavUtilities.asTitle(element).icon\"></i>\r\n {{NavUtilities.asTitle(element).title}}\r\n </h1>\r\n </a>\r\n <!-- Title with external link -->\r\n <a class=\"title-link\" disableRipple mat-menu-item *ngSwitchCase=\"'titleWithExternalLink'\"\r\n [href]=\"NavUtilities.asTitleWithExternalLink(element).link.url\"\r\n [target]=\"NavUtilities.asTitleWithExternalLink(element).link.openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asTitleWithExternalLink(element).link.openInNewTab ? 'noreferrer noopener' : undefined\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n >\r\n <h1>\r\n <i *ngIf=\"NavUtilities.asTitle(element).icon\" [class]=\"NavUtilities.asTitle(element).icon\"></i>\r\n {{NavUtilities.asTitle(element).title}}\r\n </h1>\r\n </a>\r\n <!-- Image -->\r\n <img mat-menu-item disabled *ngSwitchCase=\"'image'\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n [src]=\"NavUtilities.asImage(element).url\"\r\n >\r\n <!-- Image with internal link -->\r\n <a id=\"image-link\" disableRipple mat-menu-item *ngSwitchCase=\"'imageWithInternalLink'\"\r\n [routerLink]=\"\r\n NavUtilities.asAngularRoute(NavUtilities.asImageWithInternalLink(element).link.route).path !== undefined\r\n ? NavUtilities.asAngularRoute(NavUtilities.asImageWithInternalLink(element).link.route).path\r\n : NavUtilities.asStringRoute(NavUtilities.asImageWithInternalLink(element).link.route)\"\r\n [target]=\"NavUtilities.asImageWithInternalLink(element).link.openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asImageWithInternalLink(element).link.openInNewTab ? 'noreferrer noopener' : undefined\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n >\r\n <img [src]=\"NavUtilities.asImageWithInternalLink(element).url\">\r\n </a>\r\n <!-- Image with external link -->\r\n <a id=\"image-link\" disableRipple mat-menu-item *ngSwitchCase=\"'imageWithExternalLink'\"\r\n [href]=\"NavUtilities.asImageWithExternalLink(element).link.url\"\r\n [target]=\"NavUtilities.asImageWithExternalLink(element).link.openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asImageWithExternalLink(element).link.openInNewTab ? 'noreferrer noopener' : undefined\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n >\r\n <img [src]=\"NavUtilities.asImageWithExternalLink(element).url\">\r\n </a>\r\n <!-- Button -->\r\n <button *ngSwitchCase=\"'button'\"\r\n mat-raised-button\r\n (click)=\"NavUtilities.asButton(element).action()\"\r\n [class.sidenavElementButton]=\"sidenavElement\"\r\n >\r\n <i *ngIf=\"NavUtilities.asButton(element).icon\" [class]=\"NavUtilities.asButton(element).icon\"></i>\r\n {{NavUtilities.asButton(element).name}}\r\n </button>\r\n <!-- Internal Link -->\r\n <a mat-button *ngSwitchCase=\"'internalLink'\"\r\n [routerLink]=\"\r\n NavUtilities.asAngularRoute(NavUtilities.asInternalLink(element).route).path !== undefined\r\n ? NavUtilities.asAngularRoute(NavUtilities.asInternalLink(element).route).path\r\n : NavUtilities.asStringRoute(NavUtilities.asInternalLink(element).route)\"\r\n [target]=\"NavUtilities.asInternalLink(element).openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asInternalLink(element).openInNewTab ? 'noreferrer noopener' : undefined\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n >\r\n <i *ngIf=\"NavUtilities.asInternalLink(element).icon\" [class]=\"NavUtilities.asInternalLink(element).icon\"></i> \r\n {{NavUtilities.asInternalLink(element).name}}\r\n </a>\r\n <!-- External Link -->\r\n <span *ngSwitchCase=\"'externalLink'\">\r\n <a mat-button\r\n [href]=\"NavUtilities.asExternalLink(element).url\"\r\n [target]=\"NavUtilities.asExternalLink(element).openInNewTab ? '_blank' : '_self'\"\r\n [rel]=\"NavUtilities.asExternalLink(element).openInNewTab ? 'noreferrer noopener' : undefined\"\r\n [class.sidenavElement]=\"sidenavElement\"\r\n >\r\n <i *ngIf=\"NavUtilities.asExternalLink(element).icon\" [class]=\"NavUtilities.asExternalLink(element).icon\"></i>\r\n {{NavUtilities.asExternalLink(element).name}}\r\n </a>\r\n </span>\r\n <!-- Menu -->\r\n <button #menuButton *ngSwitchCase=\"'menu'\" mat-button [matMenuTriggerFor]=\"menu.menu\" [class.sidenavElement]=\"sidenavElement\">\r\n <i *ngIf=\"NavUtilities.asMenu(element).icon\" [class]=\"NavUtilities.asMenu(element).icon\"></i>\r\n {{NavUtilities.asMenu(element).name}}\r\n </button>\r\n <ngx-mat-navigation-menu #menu\r\n [navMenu]=\"NavUtilities.asMenu(element)\"\r\n [sidenav]=\"sidenav\"\r\n [menuWidth]=\"menuWidth\">\r\n </ngx-mat-navigation-menu>\r\n \r\n</span>","import { Component, HostListener, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\nimport { NavElement } from '../../models/nav.model';\r\nimport { NavbarRow } from '../../models/navbar.model';\r\nimport { NavUtilities } from '../../utilities/nav.utilities';\r\n\r\n/**\r\n * The navbar component.\r\n * Takes in your configuration and builds a toolbar as well as a sidenav accordingly.\r\n * Also handles responsiveness.\r\n */\r\n@Component({\r\n selector: 'ngx-mat-navigation-navbar',\r\n templateUrl: './navbar.component.html',\r\n styleUrls: ['./navbar.component.scss']\r\n})\r\nexport class NavbarComponent implements OnInit {\r\n\r\n NavUtilities = NavUtilities;\r\n\r\n /**\r\n * The navbar rows to build the navbar from.\r\n */\r\n @Input()\r\n navbarRows!: NavbarRow[];\r\n\r\n /**\r\n * The minimum height of the navbar.\r\n */\r\n @Input()\r\n minHeight!: number;\r\n\r\n /**\r\n * The minimum height of all other elements that are on the same level as the navbar component.\r\n */\r\n @Input()\r\n minHeightOtherElements!: number;\r\n\r\n /**\r\n * The minimum width of the sidenav.\r\n */\r\n @Input()\r\n minSidenavWidth?: string;\r\n\r\n @ViewChild('sidenav')\r\n sidenav!: MatSidenav;\r\n\r\n sidenavElements: NavElement[] = [];\r\n\r\n burgerMenu: NavElement = {\r\n type: 'button',\r\n name: '',\r\n icon: 'fas fa-bars',\r\n action: () => this.sidenav.toggle(),\r\n collapse: 'never'\r\n };\r\n\r\n sanitizedMinHeight!: SafeStyle;\r\n\r\n screenWidth!: number;\r\n screenWidthName!: 'lg' | 'md' | 'sm';\r\n\r\n constructor(public sanitizer: DomSanitizer) {}\r\n\r\n ngOnInit(): void {\r\n if (\r\n !this.minHeight || typeof this.minHeight !== 'number'\r\n || !this.minHeightOtherElements || typeof this.minHeightOtherElements !== 'number'\r\n ) {\r\n throw new Error('Incorrect input data');\r\n }\r\n else {\r\n this.sanitizedMinHeight = this.sanitizer.bypassSecurityTrustStyle(\r\n `calc(100vh - ${this.minHeight + this.minHeightOtherElements}px)`\r\n );\r\n this.screenWidth = window.innerWidth;\r\n this.screenWidthName = this.getCurrentScreenWidth();\r\n this.sidenavElements = NavUtilities.getSidenavElements(this.screenWidthName, this.navbarRows);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the current screen width and filters the sidenav elements accordingly.\r\n */\r\n @HostListener('window:resize', ['$event'])\r\n onResize(): void {\r\n this.screenWidth = window.innerWidth;\r\n this.screenWidthName = this.getCurrentScreenWidth();\r\n this.sidenavElements = NavUtilities.getSidenavElements(this.screenWidthName, this.navbarRows);\r\n if (!this.sidenavElements.length && this.sidenav.opened) {\r\n this.sidenav.close();\r\n }\r\n }\r\n\r\n /**\r\n * Defines if the sidenav should be closed when the given element is clicked.\r\n *\r\n * @param element - The element that has been clicked.\r\n */\r\n clickSidenavElement(element: NavElement): void {\r\n switch (element.type) {\r\n case 'image':\r\n case 'title':\r\n case 'menu':\r\n return;\r\n default:\r\n this.sidenav.close();\r\n }\r\n }\r\n\r\n private getCurrentScreenWidth(): 'lg' | 'md' | 'sm' {\r\n if (this.screenWidth < 768) {\r\n return 'sm';\r\n }\r\n else if (this.screenWidth < 992) {\r\n return 'md';\r\n }\r\n else {\r\n return 'lg';\r\n }\r\n }\r\n}","<mat-toolbar class=\"mat-elevation-z8\" [style.min-height.px]=\"minHeight\">\r\n <div *ngIf=\"navbarRows.length>1\" class=\"container\">\r\n <mat-toolbar-row class=\"toolbar-row\" *ngFor=\"let row of navbarRows\">\r\n <span class=\"toolbar-row\">\r\n <span class=\"left\">\r\n <span *ngFor=\"let element of NavUtilities.getNavbarElements('left', screenWidthName, navbarRows)\">\r\n <ngx-mat-navigation-element [element]=\"element\"></ngx-mat-navigation-element>\r\n </span>\r\n </span>\r\n <span class=\"center\">\r\n <span *ngFor=\"let element of NavUtilities.getNavbarElements('center', screenWidthName, navbarRows)\">\r\n <ngx-mat-navigation-element [element]=\"element\"></ngx-mat-navigation-element>\r\n </span>\r\n </span>\r\n <span class=\"right\">\r\n <span *ngFor=\"let element of NavUtilities.getNavbarElements('right', screenWidthName, navbarRows)\">\r\n <ngx-mat-navigation-element [element]=\"element\"></ngx-mat-navigation-element>\r\n </span>\r\n <span *ngIf=\"sidenavElements.length && (navbarRows.indexOf(row) === 0)\" style=\"margin-left: 10px;\">\r\n <ngx-mat-navigation-element [element]=\"burgerMenu\"></ngx-mat-navigation-element>\r\n </span>\r\n </span>\r\n </span>\r\n </mat-toolbar-row>\r\n </div>\r\n <div *ngIf=\"!(navbarRows.length>1)\" class=\"container\">\r\n <span class=\"toolbar-row\">\r\n <span *ngFor=\"let element of NavUtilities.getNavbarElements('left', screenWidthName, navbarRows)\">\r\n <ngx-mat-navigation-element [element]=\"element\"></ngx-mat-navigation-element>\r\n </span>\r\n <span class=\"center\">\r\n <span *ngFor=\"let element of NavUtilities.getNavbarElements('center', screenWidthName, navbarRows)\">\r\n <ngx-mat-navigation-element [element]=\"element\"></ngx-mat-navigation-element>\r\n </span>\r\n </span>\r\n <span class=\"right\">\r\n <span *ngFor=\"let element of NavUtilities.getNavbarElements('right', screenWidthName, navbarRows)\">\r\n <ngx-mat-navigation-element [element]=\"element\"></ngx-mat-navigation-element>\r\n </span>\r\n <span *ngIf=\"sidenavElements.length\" style=\"margin-left: 10px;\">\r\n <ngx-mat-navigation-element [element]=\"burgerMenu\"></ngx-mat-navigation-element>\r\n </span>\r\n </span>\r\n </span>\r\n </div>\r\n</mat-toolbar>\r\n\r\n<mat-sidenav-container style=\"background-color: transparent; padding-top: 40px;\"\r\n [style.min-height]=\"sanitizedMinHeight\">\r\n <mat-sidenav #sidenav position=\"end\" style=\"padding: 20px;\" [style.min-width]=\"minSidenavWidth\" [autoFocus]=\"false\">\r\n <p *ngFor=\"let element of sidenavElements\">\r\n <ngx-mat-navigation-element (click)=\"clickSidenavElement(element)\" style=\"display: inline-block; width: 100%;\" [sidenav]=\"sidenav\" [sidenavElement]=\"true\" [element]=\"element\"></ngx-mat-navigation-element>\r\n </p>\r\n </mat-sidenav>\r\n <mat-sidenav-content style=\"padding-bottom: 40px;\">\r\n <div class=\"container\">\r\n <ng-content></ng-content>\r\n </div>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavMenuComponent } from './nav-menu.component';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatMenuModule,\r\n RouterModule,\r\n MatButtonModule\r\n ],\r\n declarations: [NavMenuComponent],\r\n exports: [NavMenuComponent]\r\n})\r\nexport class NavMenuModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavElementComponent } from './nav-element.component';\r\nimport { NavMenuModule } from '../nav-menu/nav-menu.module';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n NavMenuModule,\r\n RouterModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatSidenavModule\r\n ],\r\n declarations: [NavElementComponent],\r\n exports: [NavElementComponent]\r\n})\r\nexport class NavElementModule { }","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { NavbarComponent } from './navbar.component';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { NavElementModule } from './nav-element/nav-element.module';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\n\r\n@NgModule({\r\n declarations: [NavbarComponent],\r\n imports: [\r\n CommonModule,\r\n MatToolbarModule,\r\n NavElementModule,\r\n MatSidenavModule\r\n ],\r\n exports: [NavbarComponent]\r\n})\r\nexport class NgxMatNavigationNavbarModule {}","import { Component, Input } from '@angular/core';\r\n\r\n/**\r\n * Displays a footer based on the provided input data.\r\n */\r\n@Component({\r\n selector: 'ngx-mat-navigation-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent {\r\n\r\n /**\r\n * The minimum height of the footer.\r\n */\r\n @Input()\r\n minHeight!: number;\r\n\r\n constructor() { }\r\n}","<div class=\"mat-elevation-z8\" [style.minHeight.px]=\"minHeight\" style=\"background-color: #F5F5F5;\">\r\n\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FooterComponent } from './footer.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [FooterComponent],\r\n exports: [FooterComponent]\r\n})\r\nexport class NgxMatNavigationFooterModule { }","/*\n * Public API Surface of ngx-material-navigation\n */\nexport * from './models/nav-button.model';\nexport * from './models/nav-image.model';\nexport * from './models/nav-link.model';\nexport * from './models/nav-menu.model';\nexport * from './models/nav-title.model';\nexport * from './models/nav.model';\nexport * from './models/navbar.model';\n\nexport * from './components/navbar/navbar.component';\nexport * from './components/navbar/navbar.module';\n\nexport * from './components/footer/footer.component';\nexport * from './components/footer/footer.module';\n\nexport * from './utilities/nav.utilities';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.NavMenuComponent","i4","i5","i1","i2","i3.NavElementComponent"],"mappings":"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"}
|