@smallpearl/ngx-helper 0.31.12 → 0.31.13

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.
@@ -265,7 +265,7 @@ class SPMatMenuListItemComponent {
265
265
  <ng-template #divider>
266
266
  <div class="menu-divider"></div>
267
267
  </ng-template>
268
- `, isInline: true, styles: [".menu-list-item{margin-right:8px!important}.pl-8{padding-left:8px}.twistie-separator{flex:1 1 0%}.routeIcon{margin-right:10px;font-size:16pt}.menu-item-text{font-size:10pt}.menu-twistie{font-size:10pt;height:12px;width:12px}mat-icon{margin-left:8px!important;margin-right:8px!important}.menu-item-color{background-color:var(--sp-mat-menu-menu-item-bg-color)!important;color:var(--sp-mat-menu-menu-item-fg-color)!important}.highlighted,.highlighted .menu-item-color{background-color:var( --sp-mat-menu-highlighted-menu-item-bg-color )!important;color:var(--sp-mat-menu-highlighted-menu-item-fg-color)!important}.mdc-list-item{padding-right:0}.menu-divider{height:1em}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i5.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: SPMatMenuListItemComponent, selector: "ngx-mat-menu-list-item", inputs: ["highlighted", "item", "depth", "parent", "showIcon"] }], animations: [
268
+ `, isInline: true, styles: [".menu-list-item{border-radius:0!important;margin-right:8px!important}.menu-list-item{--mdc-list-list-item-one-line-container-height: 44px}.pl-8{padding-left:8px}.twistie-separator{flex:1 1 0%}.routeIcon{margin-right:10px;font-size:16pt}.menu-item-text{font-size:10pt}.menu-twistie{font-size:10pt;height:12px;width:12px}mat-icon{margin-left:8px!important;margin-right:8px!important}.menu-item-color{background-color:var(--sp-mat-menu-menu-item-bg-color)!important;color:var(--sp-mat-menu-menu-item-fg-color)!important}.highlighted,.highlighted .menu-item-color{background-color:var(--sp-mat-menu-highlighted-menu-item-bg-color)!important;color:var(--sp-mat-menu-highlighted-menu-item-fg-color)!important}.mdc-list-item{padding-right:0}.menu-divider{height:1em}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i5.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: SPMatMenuListItemComponent, selector: "ngx-mat-menu-list-item", inputs: ["highlighted", "item", "depth", "parent", "showIcon"] }], animations: [
269
269
  trigger('indicatorRotate', [
270
270
  state('collapsed', style({ transform: 'rotate(0deg)' })),
271
271
  state('expanded', style({ transform: 'rotate(180deg)' })),
@@ -333,7 +333,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
333
333
  state('expanded', style({ transform: 'rotate(180deg)' })),
334
334
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),
335
335
  ]),
336
- ], standalone: false, styles: [".menu-list-item{margin-right:8px!important}.pl-8{padding-left:8px}.twistie-separator{flex:1 1 0%}.routeIcon{margin-right:10px;font-size:16pt}.menu-item-text{font-size:10pt}.menu-twistie{font-size:10pt;height:12px;width:12px}mat-icon{margin-left:8px!important;margin-right:8px!important}.menu-item-color{background-color:var(--sp-mat-menu-menu-item-bg-color)!important;color:var(--sp-mat-menu-menu-item-fg-color)!important}.highlighted,.highlighted .menu-item-color{background-color:var( --sp-mat-menu-highlighted-menu-item-bg-color )!important;color:var(--sp-mat-menu-highlighted-menu-item-fg-color)!important}.mdc-list-item{padding-right:0}.menu-divider{height:1em}\n"] }]
336
+ ], standalone: false, styles: [".menu-list-item{border-radius:0!important;margin-right:8px!important}.menu-list-item{--mdc-list-list-item-one-line-container-height: 44px}.pl-8{padding-left:8px}.twistie-separator{flex:1 1 0%}.routeIcon{margin-right:10px;font-size:16pt}.menu-item-text{font-size:10pt}.menu-twistie{font-size:10pt;height:12px;width:12px}mat-icon{margin-left:8px!important;margin-right:8px!important}.menu-item-color{background-color:var(--sp-mat-menu-menu-item-bg-color)!important;color:var(--sp-mat-menu-menu-item-fg-color)!important}.highlighted,.highlighted .menu-item-color{background-color:var(--sp-mat-menu-highlighted-menu-item-bg-color)!important;color:var(--sp-mat-menu-highlighted-menu-item-fg-color)!important}.mdc-list-item{padding-right:0}.menu-divider{height:1em}\n"] }]
337
337
  }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: i2.MatDialog }, { type: i0.ChangeDetectorRef }], propDecorators: { highlighted: [{
338
338
  type: Input
339
339
  }], ariaExpanded: [{
@@ -1 +1 @@
1
- {"version":3,"file":"smallpearl-ngx-helper-mat-side-menu-layout.mjs","sources":["../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/layout.service.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-list-item.component.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-pane.component.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-layout.component.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-layout.module.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/smallpearl-ngx-helper-mat-side-menu-layout.ts"],"sourcesContent":["import {\n BreakpointObserver,\n BreakpointState,\n Breakpoints,\n} from '@angular/cdk/layout';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, Subject, takeUntil } from 'rxjs';\n\nexport interface SideMenuLayoutProps {\n smallScreen: boolean;\n toolbarHeight: number;\n}\n\n@Injectable({ providedIn: 'any' })\nexport class LayoutService implements OnDestroy {\n marginTop: number = 64;\n toolbarHeight: number = 64;\n smallScreen: boolean = false;\n\n destroy = new Subject<void>();\n _previousUrl: string = '';\n\n layoutChanged = new BehaviorSubject<SideMenuLayoutProps>({\n smallScreen: false,\n toolbarHeight: 64,\n });\n\n constructor(public breakpointObserver: BreakpointObserver, router: Router) {\n this.breakpointObserver\n .observe([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge,\n ])\n .pipe(takeUntil(this.destroy))\n .subscribe((result: BreakpointState) => {\n let smallScreen = this.smallScreen;\n let marginTop = this.marginTop;\n for (const query of Object.keys(result.breakpoints)) {\n if (result.breakpoints[query]) {\n if (query == Breakpoints.XSmall) {\n smallScreen = true;\n marginTop = 56;\n // } else if (query === Breakpoints.Small) {\n // smallScreen = true;\n // marginTop = 56;\n } else {\n smallScreen = false;\n }\n }\n }\n if (this.smallScreen != smallScreen || this.marginTop != marginTop) {\n this.smallScreen = smallScreen;\n this.toolbarHeight = this.marginTop = marginTop;\n const newLayout = {\n smallScreen: smallScreen,\n toolbarHeight: marginTop,\n };\n this.layoutChanged.next(newLayout);\n }\n });\n\n // router.events\n // .pipe(\n // filter(\n // (e: RouterEvent) =>\n // e instanceof NavigationStart && (router.url.startsWith('/community') || router.url.startsWith('/company'))\n // ),\n // tap(() => {\n // // console.log(`URL: ${this.router.url}`);\n // this._previousUrl = router.url;\n // })\n // )\n // .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy.next();\n }\n\n get previousUrl() {\n return this._previousUrl;\n }\n}\n","import {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { NavItem } from './nav-item';\n\n@Component({\n selector: 'ngx-mat-menu-list-item',\n template: `\n <a\n *ngIf=\"item.children || item.route; else divider\"\n mat-list-item\n [ngStyle]=\"{ 'padding-left': depth * 8 + 'px' }\"\n [disabled]=\"item.disabled\"\n [attr.routerLink]=\"!item.children ? item.route : null\"\n class=\"menu-list-item pl-8\"\n [ngClass]=\"{\n highlighted: this.highlighted,\n 'not-highlighted': !this.highlighted,\n }\"\n routerLinkActive=\"is-active\"\n (click)=\"onItemSelected($event, item)\"\n >\n <mat-icon\n *ngIf=\"\n (item.icon && showIcon && !item.iconType) || item.iconType == 'mat'\n \"\n class=\"menu-item-color\"\n matListItemIcon\n >{{ item.icon }}</mat-icon\n >\n <i\n *ngIf=\"item.icon && showIcon && item.iconType != 'mat'\"\n [class]=\"'menu-item-color ' + item.icon\"\n ></i>\n <span class=\"menu-item-color\">{{ item.text }}</span>\n <span class=\"twistie-separator\"></span>\n <span *ngIf=\"item.children && item.children.length\">\n <mat-icon\n class=\"menu-twistie menu-item-color\"\n [@indicatorRotate]=\"expanded ? 'expanded' : 'collapsed'\"\n >\n expand_more\n </mat-icon>\n </span>\n </a>\n <div>\n <ngx-mat-menu-list-item\n class=\"menu-child\"\n [showIcon]=\"showIcon\"\n [ngStyle]=\"{ display: expanded ? 'inherit' : 'none' }\"\n *ngFor=\"let child of item.children\"\n [item]=\"child\"\n [parent]=\"this\"\n [depth]=\"depth + 1\"\n ></ngx-mat-menu-list-item>\n </div>\n <ng-template #divider>\n <div class=\"menu-divider\"></div>\n </ng-template>\n `,\n styles: [\n `\n .menu-list-item {\n margin-right: 8px !important;\n }\n .pl-8 {\n padding-left: 8px;\n }\n .twistie-separator {\n flex: 1 1 0%;\n }\n .routeIcon {\n margin-right: 10px;\n font-size: 16pt;\n }\n .menu-item-text {\n font-size: 10pt;\n }\n .menu-twistie {\n font-size: 10pt;\n height: 12px;\n width: 12px;\n }\n mat-icon {\n margin-left: 8px !important;\n margin-right: 8px !important;\n }\n .menu-item-color {\n background-color: var(--sp-mat-menu-menu-item-bg-color) !important;\n color: var(--sp-mat-menu-menu-item-fg-color) !important;\n }\n .highlighted {\n background-color: var(\n --sp-mat-menu-highlighted-menu-item-bg-color\n ) !important;\n color: var(--sp-mat-menu-highlighted-menu-item-fg-color) !important;\n }\n .highlighted .menu-item-color {\n background-color: var(\n --sp-mat-menu-highlighted-menu-item-bg-color\n ) !important;\n color: var(--sp-mat-menu-highlighted-menu-item-fg-color) !important;\n }\n .mdc-list-item {\n padding-right: 0px;\n }\n .menu-divider {\n height: 1em;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('indicatorRotate', [\n state('collapsed', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\n ]),\n ],\n standalone: false\n})\nexport class SPMatMenuListItemComponent implements OnInit, OnDestroy {\n expanded = false;\n @Input() highlighted = false;\n @HostBinding('attr.aria-expanded') ariaExpanded = this.expanded;\n\n // The NavItem associated with this item.\n @Input() item!: NavItem;\n\n // This is an implementation property that is used to control with offset\n // of the menu item from the start of the screen to indicate that an item\n // is a child of a parent menu item.\n @Input() depth!: number;\n\n // The parent of this menu item. Set only for child items. Will be undefined\n // for top level menu items\n @Input() parent!: SPMatMenuListItemComponent;\n\n @Input() showIcon: boolean = true;\n\n // All child MenuListItemComponents so that we can check each one if\n // the current url ends with the child component's NavItem.route.\n // If it does then we have to mark this component as expanded.\n @ViewChildren(SPMatMenuListItemComponent)\n children!: QueryList<SPMatMenuListItemComponent>;\n\n constructor(\n public route: ActivatedRoute,\n public router: Router,\n private dialog: MatDialog,\n private cdr: ChangeDetectorRef\n ) {\n if (this.depth === undefined) {\n this.depth = 1;\n }\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {}\n\n // Return highlighted status\n get isHighlighted() {\n return this.highlighted;\n }\n\n toggleHighlight(highlight: boolean) {\n if (highlight != this.highlighted) {\n this.highlighted = highlight;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Expand a parent container menu item.\n */\n expand() {\n if (!this.item?.route && !this.expanded) {\n this.expanded = this.ariaExpanded = true;\n this.cdr.detectChanges();\n if (this.parent) {\n this.parent.expand();\n }\n }\n }\n\n /**\n * Collapse an expanded parent container menu item.\n */\n collapse() {\n if (!this.item?.route && this.expanded) {\n this.expanded = this.ariaExpanded = false;\n this.cdr.detectChanges();\n }\n }\n\n checkChildrenForHighlight(lastUrlSegment: string) {\n let childHighlighted = false;\n this.children.forEach((childItem) => {\n if (childItem.item.route === lastUrlSegment) {\n childItem.toggleHighlight(true);\n childHighlighted = true;\n } else {\n childItem.toggleHighlight(false);\n if (childItem.item?.children) {\n if (childItem.checkChildrenForHighlight(lastUrlSegment)) {\n childHighlighted = true;\n }\n }\n childItem.expand(); // open the childItem\n }\n });\n return childHighlighted; // Return highlighted state so that caller can\n // expand itself.\n }\n\n // Item selection handler\n onItemSelected(ev: Event, item: NavItem): void {\n this.dialog.closeAll();\n\n // Leaf menu item, navigate the router to the item's route.\n if (!item.children) {\n if (item?.backButton && item?.backHref) {\n // Idiotic way to implement Back button! This will conflict\n // with the browser history as the current satellite app\n // page would become the previous page to backHref page! A complex\n // mechanism to navigate back accurately, by popping all the\n // intermediate pages is beyond our scope for now.\n this.router.navigateByUrl(item.backHref);\n } else if (item.route) {\n this.router.navigate([item.route], {\n relativeTo: this.route,\n state: {\n backHref: window.location.pathname,\n },\n });\n }\n } else {\n // Sub menu items, toogle the item to show/hide the child menu items.\n ev.preventDefault();\n ev.stopImmediatePropagation();\n this.expanded = !this.expanded;\n this.cdr.detectChanges();\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n runInInjectionContext,\n SimpleChanges,\n TemplateRef,\n viewChildren\n} from '@angular/core';\nimport { MatSidenav } from '@angular/material/sidenav';\nimport { NavigationEnd, Router, Event as RouterEvent } from '@angular/router';\nimport { Subject, filter, takeUntil, tap } from 'rxjs';\nimport { LayoutService, SideMenuLayoutProps } from './layout.service';\nimport { SPMatMenuListItemComponent } from './mat-menu-list-item.component';\nimport { NavItem } from './nav-item';\n\n@Component({\n selector: 'ngx-mat-menu-pane',\n template: `\n <div class=\"menu-pane-wrapper\">\n <div class=\"sidenav-branding mat-toolbar-single-row\">\n <div class=\"branding branding-logo\">\n <img *ngIf=\"brandingImage\" [src]=\"brandingImage\" />\n </div>\n <h4 class=\"mat-typography branding branding-text\">\n {{ brandingText }}\n </h4>\n </div>\n <div class=\"sidenav-menu\">\n <div *ngIf=\"menuTitle\" class=\"mat-body title\">{{ menuTitle }}</div>\n <mat-nav-list>\n <ngx-mat-menu-list-item\n *ngIf=\"backButtonNavItem\"\n [item]=\"backButtonNavItem\"\n ></ngx-mat-menu-list-item>\n <ngx-mat-menu-list-item\n *ngFor=\"let item of menuItems\"\n [item]=\"item\"\n [showIcon]=\"showIcons\"\n ></ngx-mat-menu-list-item>\n </mat-nav-list>\n </div>\n <div class=\"sidenav-version\" *ngIf=\"menuPaneFooterContent\">\n <ng-container *ngTemplateOutlet=\"menuPaneFooterContent\"> </ng-container>\n </div>\n </div>\n `,\n styleUrls: ['./mat-menu-pane.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class SPMatMenuPaneComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n @Input() menuTitle: string = '';\n @Input() showBackButton: boolean = false;\n @Input() defaultBackButtonHref: string = '';\n @Input() backButtonText: string = 'BACK';\n @Input() menuItems: NavItem[] = [];\n @Input() brandingText: string = 'BRAND';\n @Input() brandingImage: string = '';\n @Input() matSideNav: MatSidenav | undefined;\n @Input() appVersion: string = '0.0';\n @Input() menuPaneFooterContent!: TemplateRef<any>;\n @Input() showIcons: boolean = true;\n @Input() baseUrl = '';\n layout!: SideMenuLayoutProps;\n\n backButtonNavItem: NavItem | undefined;\n destroy = new Subject<void>();\n\n menuItemComps = viewChildren(SPMatMenuListItemComponent);\n\n // So that if menuItems is specified via an async pipe, we can highlight the\n // current URL after the menuItems are loaded.\n menuItemComps$ = effect(() => {\n const components = this.menuItemComps();\n runInInjectionContext(this.injector, () => {\n this.highlightUrlMenuItem(this.router.routerState.snapshot.url);\n });\n });\n\n constructor(\n public cdr: ChangeDetectorRef,\n private layoutService: LayoutService,\n private router: Router,\n private injector: Injector\n ) {}\n\n ngOnInit() {\n this.layoutService.layoutChanged\n .pipe(\n takeUntil(this.destroy),\n tap((newLayout) => {\n // console.log(\n // 'Layout changed - new toolbar height:',\n // newLayout.toolbarHeight\n // );\n this.layout = newLayout;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n if (this.showBackButton) {\n this.backButtonNavItem = {\n route: this.layoutService.previousUrl\n ? this.layoutService.previousUrl\n : this.defaultBackButtonHref,\n text: this.backButtonText,\n icon: 'arrow_back',\n backButton: true,\n backHref: window.history.state ? window.history.state['backHref'] : '#',\n };\n this.cdr.detectChanges();\n }\n\n this.router.events\n .pipe(\n takeUntil(this.destroy),\n filter((e) => e instanceof NavigationEnd),\n tap((e: RouterEvent) => {\n if (this.matSideNav && this.layout.smallScreen) {\n this.matSideNav.close();\n }\n const ne = e as NavigationEnd;\n this.highlightUrlMenuItem(ne.urlAfterRedirects);\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy.next();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['backButtonText']) {\n if (this.backButtonNavItem) {\n this.backButtonNavItem = {\n ...this.backButtonNavItem,\n text: this.backButtonText,\n };\n this.cdr.detectChanges();\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.highlightUrlMenuItem(this.router.routerState.snapshot.url);\n }\n\n /**\n * Highlights the menu item for the specified URL.\n *\n * @param url the full url of the current navigation\n *\n * The way this function works is like this.\n *\n * It first finds the NavItem matching the given URL in url arg. It does\n * this by removing the baseUrl from the url and then comparing the\n * NavItem.route attached to each SPMatMenuListItemComponent. This is done\n * recursively covering all NavItem.children. When a matching NavItem is\n * found, the function goes on to find the SPMatMenuListItemComponent which\n * has this NavItem attached to it. This too is done recursively to find\n * the innermost NavItem with matching URL.\n *\n * When a matching SPMatMenuListItemComponent is found, it first deselects\n * the previous SPMatMenuListItemComponent selection and then goes on to\n * select the newly matched SPMatMenuListItemComponent. If the\n * SPMatMenuListItemComponent is a child of a parent NavItem, the parent\n * NavItem is expanded. Similarly when deselecting the current selection,\n * if it belongs to a parent NavItem and the parent is not shared by the\n * currently matched SPMatMenuListItemComponent, it collapses the parent\n * of the previously selected SPMatMenuListItemComponent. (Quite a mouthful\n * of a sentence, but it's exactly how it works.)\n */\n highlightUrlMenuItem(url: string) {\n // Remove baseUrl from our url-to-SPMatMenuListItem matching logic\n const baseUrl = this.baseUrl.startsWith('/') ? this.baseUrl.substring(1) : this.baseUrl;\n const baseUrlIndex = url.search(baseUrl);\n if (baseUrlIndex != -1) {\n url = url.substring(baseUrlIndex+baseUrl.length);\n }\n\n // Filter out empty strings so that we avoid a pointless iteration of the\n // menuItemComps() array.\n const urlParts = url.split('/').filter(u => !!u);\n url = urlParts.join('/');\n // console.log(`highlightCurrentUrlMenuItem - baseUrl: ${this.baseUrl} url: ${url}, urlParts: ${urlParts}`);\n let highlightedItemFound = false;\n\n // Function to find the NavItem for for the given url. Returns a NavItem\n // if a matching NavItem is found, undefined otherwise.\n const findNavItemForUrl = (baseUrl: string, navItem: NavItem): NavItem|undefined => {\n let matchingItem: NavItem|undefined = undefined;\n if (navItem.children) {\n for (let index = 0; !matchingItem && index < navItem.children.length; index++) {\n matchingItem = findNavItemForUrl(baseUrl + (navItem?.route ?? ''), navItem.children[index]);\n }\n } else if (navItem.route) {\n if (url === navItem.route) {\n matchingItem = navItem;\n }\n }\n return matchingItem;\n }\n\n let matchingNavItem: NavItem|undefined = undefined;\n for (let index = 0; !matchingNavItem && index < this.menuItemComps().length; index++) {\n const element = this.menuItemComps()[index];\n if (element?.item) {\n matchingNavItem = findNavItemForUrl(url, element?.item);\n }\n }\n\n // Function to find the SPMatMenuListItemComponent for the given NavItem.\n // Returns SPMatMenuListItemComponent if a match is found, undefined\n // otherwise.\n const findMenuItemCompForNavItem = (\n menuItemComp: SPMatMenuListItemComponent,\n target: NavItem\n ): SPMatMenuListItemComponent | undefined => {\n let matchingMenuItemComp: SPMatMenuListItemComponent | undefined = undefined;\n if (menuItemComp.item === target) {\n matchingMenuItemComp = menuItemComp;\n } else if (menuItemComp.item?.children) {\n for (let index = 0; !matchingMenuItemComp && index < menuItemComp.children.length; index++) {\n matchingMenuItemComp = findMenuItemCompForNavItem(menuItemComp.children.get(index)!, target);\n }\n }\n return matchingMenuItemComp;\n };\n\n let matchingMenuItemComp: SPMatMenuListItemComponent | undefined = undefined;\n if (matchingNavItem) {\n for (let index = 0; !matchingMenuItemComp && index < this.menuItemComps().length; index++) {\n const element = this.menuItemComps()[index];\n matchingMenuItemComp = findMenuItemCompForNavItem(this.menuItemComps()[index], matchingNavItem);\n }\n }\n\n if (matchingMenuItemComp) {\n this.highlightMenuItemComp(matchingMenuItemComp);\n }\n\n // old logic, which is a little confusing and depends on state stored\n // in SPMatMenuListItemComponent.\n /*\n for (let index = 0; !highlightedItemFound && index < urlParts.length; index++) {\n const lastUrlSegment = urlParts[index];\n this.menuItemComps().find(menuItemComp => {\n const route = menuItemComp.item?.route;\n if (route === lastUrlSegment) {\n if (!menuItemComp.item?.children) {\n menuItemComp.toggleHighlight(true);\n highlightedItemFound = true;\n } else if (menuItemComp.checkChildrenForHighlight(lastUrlSegment)) {\n menuItemComp.expand();\n highlightedItemFound = true;\n }\n } else {\n menuItemComp.toggleHighlight(false);\n if (menuItemComp.item?.children) {\n if (menuItemComp.checkChildrenForHighlight(lastUrlSegment)) {\n menuItemComp.expand();\n highlightedItemFound = true\n };\n }\n }\n });\n }\n */\n }\n\n // To keep track of current highlighted SPMatMenuListItemComponent.\n private _curHighlitedMenuItemComp!: SPMatMenuListItemComponent|undefined;\n highlightMenuItemComp(menuItemComp: SPMatMenuListItemComponent) {\n // Deslect currently highliged SPMatMenuListItemComponent if it's different\n // from the menuItemComp arg.\n const lastHighlitedMenuItemComp = this._curHighlitedMenuItemComp;\n if (this._curHighlitedMenuItemComp && this._curHighlitedMenuItemComp !== menuItemComp) {\n this._curHighlitedMenuItemComp.toggleHighlight(false);\n this._curHighlitedMenuItemComp = undefined;\n }\n menuItemComp.toggleHighlight(true);\n if (lastHighlitedMenuItemComp && lastHighlitedMenuItemComp?.parent) {\n lastHighlitedMenuItemComp.parent.collapse();\n }\n if (menuItemComp.parent) {\n menuItemComp.parent.expand();\n }\n this._curHighlitedMenuItemComp = menuItemComp;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { MatSidenav } from '@angular/material/sidenav';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport { LayoutService, SideMenuLayoutProps } from './layout.service';\nimport { NavItem } from './nav-item';\n\n@Component({\n selector: 'sp-mat-menu-layout',\n template: `\n <mat-sidenav-container class=\"layout-container\">\n <mat-sidenav\n class=\"layout-menu-pane\"\n opened\n #menuNav\n [mode]=\"layout.smallScreen ? 'over' : 'side'\"\n [opened]=\"!layout.smallScreen\"\n [fixedInViewport]=\"layout.smallScreen\"\n >\n <div class=\"layout-menu-container\">\n <ngx-mat-menu-pane\n [baseUrl]=\"baseUrl\"\n [showBackButton]=\"showBackButton\"\n [showIcons]=\"showIcons\"\n [defaultBackButtonHref]=\"defaultBackButtonHref\"\n [backButtonText]=\"backButtonText\"\n [brandingImage]=\"brandingImage\"\n [brandingText]=\"brandingText\"\n [menuItems]=\"menuItems\"\n [matSideNav]=\"menuNav\"\n [menuPaneFooterContent]=\"menuPaneFooterContent\"\n [menuTitle]=\"menuTitle\"\n class=\"h-100\"\n ></ngx-mat-menu-pane>\n </div>\n </mat-sidenav>\n\n <mat-sidenav\n [ngStyle]=\"{\n 'min-width.px': infoPaneMinWidth,\n 'max-width.px': infoPaneMaxWidth\n }\"\n #infoPane\n closed\n mode=\"over\"\n position=\"end\"\n >\n <ng-container *ngTemplateOutlet=\"infoPaneContent\"></ng-container>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"layout-content\">\n <mat-toolbar class=\"layout-content-toolbar\">\n <button mat-icon-button (click)=\"onToggleMenuPane()\">\n <mat-icon>menu</mat-icon>\n </button>\n <ng-template #defaultToolbarTitle>\n <h4>{{ appTitle }}</h4>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n toolbarTitleContent ? toolbarTitleContent : defaultToolbarTitle\n \"\n ></ng-container>\n <span class=\"spacer\"></span>\n <ng-container *ngTemplateOutlet=\"toolbarEndContent\"></ng-container>\n </mat-toolbar>\n <div class=\"layout-content-content\" [class]=\"contentContainerClass\">\n <router-outlet></router-outlet>\n </div>\n </mat-sidenav-content>\n </mat-sidenav-container>\n `,\n styles: [\n `\n .layout-menu-pane {\n background-color: var(--sp-mat-menu-bg-color) !important;\n color: var(--sp-mat-menu-fg-color) !important;\n }\n .layout-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n .layout-menu-container {\n height: 100%;\n max-width: var(--sp-mat-menu-sidemenu-max-width, 50%);\n min-width: var(--sp-mat-menu-sidemenu-min-width, 250px);\n text-wrap: nowrap;\n overflow-x: scroll;\n overflow-y: scroll;\n }\n .layout-content {\n height: 100vh;\n display: flex;\n flex-direction: column;\n overflow-x: clip;\n }\n .layout-content-toolbar {\n border-bottom: 1px solid var(--sp-mat-menu-toolbar-border-color);\n flex-grow: 0;\n background-color: var(--sp-mat-menu-toolbar-bg-color);\n color: var(--sp-mat-menu-toolbar-fg-color);\n padding: 0 0;\n min-height: var(--mat-toolbar-standard-height);\n max-height: var(--mat-toolbar-standard-height);\n }\n .layout-content-content {\n flex-grow: 1;\n overflow: hidden;\n }\n .h-100 {\n height: 100%;\n }\n .spacer {\n flex: 1 1 auto;\n }\n `,\n ],\n // Add this style to make the content-container scroll from within.\n // That is override the window scrolling with the content div private\n // scroller.\n // .content-container {\n // overflow-x: scroll;\n // overflow-y: scroll;\n // }\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class SPMatMenuLayoutComponent implements OnInit, OnDestroy {\n @ViewChild('menuNav') menuNav!: MatSidenav;\n layout!: SideMenuLayoutProps;\n destroy = new Subject<void>();\n containerHeight: number = 500;\n topBottomPadding: number = 6;\n @Input() baseUrl = '';\n @Input() showBackButton: boolean = false;\n @Input() defaultBackButtonHref: string = '';\n @Input() backButtonText: string = 'BACK';\n @Input() brandingImage: string = '';\n @Input() brandingText: string = '';\n @Input() appTitle: string = '';\n @Input() menuTitle: string = '';\n @Input() menuItems: NavItem[] = [];\n // Template Partials for configurable portions of the layout\n @Input() menuPaneFooterContent!: TemplateRef<any>;\n @Input() toolbarEndContent!: TemplateRef<any>;\n @Input() infoPaneContent!: TemplateRef<any>;\n @Input() toolbarTitleContent!: TemplateRef<any>;\n // Width of the info pane on the right (or left for LTR) of the screen.\n @Input() infoPaneMinWidth: number = 250;\n @Input() infoPaneMaxWidth: number = 400;\n @Input() contentContainerClass: string = '';\n @Input() showIcons: boolean = true;\n // Allows querying infoPane to activate it or to set its attributes\n @ViewChild('infoPane') readonly infoPane!: MatSidenav;\n\n constructor(\n private layoutService: LayoutService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.layoutService.layoutChanged\n .pipe(\n takeUntil(this.destroy),\n tap((newLayout: SideMenuLayoutProps) => {\n this.layout = newLayout;\n this.containerHeight =\n window.innerHeight -\n (newLayout.toolbarHeight + this.topBottomPadding * 2);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy.next();\n this.destroy.complete();\n }\n\n onToggleMenuPane() {\n if (this.menuNav) {\n this.menuNav.toggle();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatListModule } from '@angular/material/list';\nimport { RouterOutlet } from '@angular/router';\nimport { SPMatMenuLayoutComponent } from './mat-menu-layout.component';\nimport { SPMatMenuListItemComponent } from './mat-menu-list-item.component';\nimport { SPMatMenuPaneComponent } from './mat-menu-pane.component';\n\n@NgModule({\n declarations: [SPMatMenuPaneComponent, SPMatMenuListItemComponent, SPMatMenuLayoutComponent],\n imports: [\n CommonModule,\n RouterOutlet,\n MatSidenavModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n MatListModule\n ],\n exports: [SPMatMenuPaneComponent, SPMatMenuListItemComponent, SPMatMenuLayoutComponent],\n})\nexport class SPMatMenuLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i1.LayoutService","i4","i5.SPMatMenuListItemComponent","i3","i5","i6","i8.SPMatMenuPaneComponent"],"mappings":"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"}
1
+ {"version":3,"file":"smallpearl-ngx-helper-mat-side-menu-layout.mjs","sources":["../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/layout.service.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-list-item.component.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-pane.component.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-layout.component.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/src/mat-menu-layout.module.ts","../../../../projects/smallpearl/ngx-helper/mat-side-menu-layout/smallpearl-ngx-helper-mat-side-menu-layout.ts"],"sourcesContent":["import {\n BreakpointObserver,\n BreakpointState,\n Breakpoints,\n} from '@angular/cdk/layout';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, Subject, takeUntil } from 'rxjs';\n\nexport interface SideMenuLayoutProps {\n smallScreen: boolean;\n toolbarHeight: number;\n}\n\n@Injectable({ providedIn: 'any' })\nexport class LayoutService implements OnDestroy {\n marginTop: number = 64;\n toolbarHeight: number = 64;\n smallScreen: boolean = false;\n\n destroy = new Subject<void>();\n _previousUrl: string = '';\n\n layoutChanged = new BehaviorSubject<SideMenuLayoutProps>({\n smallScreen: false,\n toolbarHeight: 64,\n });\n\n constructor(public breakpointObserver: BreakpointObserver, router: Router) {\n this.breakpointObserver\n .observe([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge,\n ])\n .pipe(takeUntil(this.destroy))\n .subscribe((result: BreakpointState) => {\n let smallScreen = this.smallScreen;\n let marginTop = this.marginTop;\n for (const query of Object.keys(result.breakpoints)) {\n if (result.breakpoints[query]) {\n if (query == Breakpoints.XSmall) {\n smallScreen = true;\n marginTop = 56;\n // } else if (query === Breakpoints.Small) {\n // smallScreen = true;\n // marginTop = 56;\n } else {\n smallScreen = false;\n }\n }\n }\n if (this.smallScreen != smallScreen || this.marginTop != marginTop) {\n this.smallScreen = smallScreen;\n this.toolbarHeight = this.marginTop = marginTop;\n const newLayout = {\n smallScreen: smallScreen,\n toolbarHeight: marginTop,\n };\n this.layoutChanged.next(newLayout);\n }\n });\n\n // router.events\n // .pipe(\n // filter(\n // (e: RouterEvent) =>\n // e instanceof NavigationStart && (router.url.startsWith('/community') || router.url.startsWith('/company'))\n // ),\n // tap(() => {\n // // console.log(`URL: ${this.router.url}`);\n // this._previousUrl = router.url;\n // })\n // )\n // .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy.next();\n }\n\n get previousUrl() {\n return this._previousUrl;\n }\n}\n","import {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { NavItem } from './nav-item';\n\n@Component({\n selector: 'ngx-mat-menu-list-item',\n template: `\n <a\n *ngIf=\"item.children || item.route; else divider\"\n mat-list-item\n [ngStyle]=\"{ 'padding-left': depth * 8 + 'px' }\"\n [disabled]=\"item.disabled\"\n [attr.routerLink]=\"!item.children ? item.route : null\"\n class=\"menu-list-item pl-8\"\n [ngClass]=\"{\n highlighted: this.highlighted,\n 'not-highlighted': !this.highlighted,\n }\"\n routerLinkActive=\"is-active\"\n (click)=\"onItemSelected($event, item)\"\n >\n <mat-icon\n *ngIf=\"\n (item.icon && showIcon && !item.iconType) || item.iconType == 'mat'\n \"\n class=\"menu-item-color\"\n matListItemIcon\n >{{ item.icon }}</mat-icon\n >\n <i\n *ngIf=\"item.icon && showIcon && item.iconType != 'mat'\"\n [class]=\"'menu-item-color ' + item.icon\"\n ></i>\n <span class=\"menu-item-color\">{{ item.text }}</span>\n <span class=\"twistie-separator\"></span>\n <span *ngIf=\"item.children && item.children.length\">\n <mat-icon\n class=\"menu-twistie menu-item-color\"\n [@indicatorRotate]=\"expanded ? 'expanded' : 'collapsed'\"\n >\n expand_more\n </mat-icon>\n </span>\n </a>\n <div>\n <ngx-mat-menu-list-item\n class=\"menu-child\"\n [showIcon]=\"showIcon\"\n [ngStyle]=\"{ display: expanded ? 'inherit' : 'none' }\"\n *ngFor=\"let child of item.children\"\n [item]=\"child\"\n [parent]=\"this\"\n [depth]=\"depth + 1\"\n ></ngx-mat-menu-list-item>\n </div>\n <ng-template #divider>\n <div class=\"menu-divider\"></div>\n </ng-template>\n `,\n styleUrls: ['./mat-menu-list-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('indicatorRotate', [\n state('collapsed', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\n ]),\n ],\n standalone: false\n})\nexport class SPMatMenuListItemComponent implements OnInit, OnDestroy {\n expanded = false;\n @Input() highlighted = false;\n @HostBinding('attr.aria-expanded') ariaExpanded = this.expanded;\n\n // The NavItem associated with this item.\n @Input() item!: NavItem;\n\n // This is an implementation property that is used to control with offset\n // of the menu item from the start of the screen to indicate that an item\n // is a child of a parent menu item.\n @Input() depth!: number;\n\n // The parent of this menu item. Set only for child items. Will be undefined\n // for top level menu items\n @Input() parent!: SPMatMenuListItemComponent;\n\n @Input() showIcon: boolean = true;\n\n // All child MenuListItemComponents so that we can check each one if\n // the current url ends with the child component's NavItem.route.\n // If it does then we have to mark this component as expanded.\n @ViewChildren(SPMatMenuListItemComponent)\n children!: QueryList<SPMatMenuListItemComponent>;\n\n constructor(\n public route: ActivatedRoute,\n public router: Router,\n private dialog: MatDialog,\n private cdr: ChangeDetectorRef\n ) {\n if (this.depth === undefined) {\n this.depth = 1;\n }\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {}\n\n // Return highlighted status\n get isHighlighted() {\n return this.highlighted;\n }\n\n toggleHighlight(highlight: boolean) {\n if (highlight != this.highlighted) {\n this.highlighted = highlight;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Expand a parent container menu item.\n */\n expand() {\n if (!this.item?.route && !this.expanded) {\n this.expanded = this.ariaExpanded = true;\n this.cdr.detectChanges();\n if (this.parent) {\n this.parent.expand();\n }\n }\n }\n\n /**\n * Collapse an expanded parent container menu item.\n */\n collapse() {\n if (!this.item?.route && this.expanded) {\n this.expanded = this.ariaExpanded = false;\n this.cdr.detectChanges();\n }\n }\n\n checkChildrenForHighlight(lastUrlSegment: string) {\n let childHighlighted = false;\n this.children.forEach((childItem) => {\n if (childItem.item.route === lastUrlSegment) {\n childItem.toggleHighlight(true);\n childHighlighted = true;\n } else {\n childItem.toggleHighlight(false);\n if (childItem.item?.children) {\n if (childItem.checkChildrenForHighlight(lastUrlSegment)) {\n childHighlighted = true;\n }\n }\n childItem.expand(); // open the childItem\n }\n });\n return childHighlighted; // Return highlighted state so that caller can\n // expand itself.\n }\n\n // Item selection handler\n onItemSelected(ev: Event, item: NavItem): void {\n this.dialog.closeAll();\n\n // Leaf menu item, navigate the router to the item's route.\n if (!item.children) {\n if (item?.backButton && item?.backHref) {\n // Idiotic way to implement Back button! This will conflict\n // with the browser history as the current satellite app\n // page would become the previous page to backHref page! A complex\n // mechanism to navigate back accurately, by popping all the\n // intermediate pages is beyond our scope for now.\n this.router.navigateByUrl(item.backHref);\n } else if (item.route) {\n this.router.navigate([item.route], {\n relativeTo: this.route,\n state: {\n backHref: window.location.pathname,\n },\n });\n }\n } else {\n // Sub menu items, toogle the item to show/hide the child menu items.\n ev.preventDefault();\n ev.stopImmediatePropagation();\n this.expanded = !this.expanded;\n this.cdr.detectChanges();\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n runInInjectionContext,\n SimpleChanges,\n TemplateRef,\n viewChildren\n} from '@angular/core';\nimport { MatSidenav } from '@angular/material/sidenav';\nimport { NavigationEnd, Router, Event as RouterEvent } from '@angular/router';\nimport { Subject, filter, takeUntil, tap } from 'rxjs';\nimport { LayoutService, SideMenuLayoutProps } from './layout.service';\nimport { SPMatMenuListItemComponent } from './mat-menu-list-item.component';\nimport { NavItem } from './nav-item';\n\n@Component({\n selector: 'ngx-mat-menu-pane',\n template: `\n <div class=\"menu-pane-wrapper\">\n <div class=\"sidenav-branding mat-toolbar-single-row\">\n <div class=\"branding branding-logo\">\n <img *ngIf=\"brandingImage\" [src]=\"brandingImage\" />\n </div>\n <h4 class=\"mat-typography branding branding-text\">\n {{ brandingText }}\n </h4>\n </div>\n <div class=\"sidenav-menu\">\n <div *ngIf=\"menuTitle\" class=\"mat-body title\">{{ menuTitle }}</div>\n <mat-nav-list>\n <ngx-mat-menu-list-item\n *ngIf=\"backButtonNavItem\"\n [item]=\"backButtonNavItem\"\n ></ngx-mat-menu-list-item>\n <ngx-mat-menu-list-item\n *ngFor=\"let item of menuItems\"\n [item]=\"item\"\n [showIcon]=\"showIcons\"\n ></ngx-mat-menu-list-item>\n </mat-nav-list>\n </div>\n <div class=\"sidenav-version\" *ngIf=\"menuPaneFooterContent\">\n <ng-container *ngTemplateOutlet=\"menuPaneFooterContent\"> </ng-container>\n </div>\n </div>\n `,\n styleUrls: ['./mat-menu-pane.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class SPMatMenuPaneComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n @Input() menuTitle: string = '';\n @Input() showBackButton: boolean = false;\n @Input() defaultBackButtonHref: string = '';\n @Input() backButtonText: string = 'BACK';\n @Input() menuItems: NavItem[] = [];\n @Input() brandingText: string = 'BRAND';\n @Input() brandingImage: string = '';\n @Input() matSideNav: MatSidenav | undefined;\n @Input() appVersion: string = '0.0';\n @Input() menuPaneFooterContent!: TemplateRef<any>;\n @Input() showIcons: boolean = true;\n @Input() baseUrl = '';\n layout!: SideMenuLayoutProps;\n\n backButtonNavItem: NavItem | undefined;\n destroy = new Subject<void>();\n\n menuItemComps = viewChildren(SPMatMenuListItemComponent);\n\n // So that if menuItems is specified via an async pipe, we can highlight the\n // current URL after the menuItems are loaded.\n menuItemComps$ = effect(() => {\n const components = this.menuItemComps();\n runInInjectionContext(this.injector, () => {\n this.highlightUrlMenuItem(this.router.routerState.snapshot.url);\n });\n });\n\n constructor(\n public cdr: ChangeDetectorRef,\n private layoutService: LayoutService,\n private router: Router,\n private injector: Injector\n ) {}\n\n ngOnInit() {\n this.layoutService.layoutChanged\n .pipe(\n takeUntil(this.destroy),\n tap((newLayout) => {\n // console.log(\n // 'Layout changed - new toolbar height:',\n // newLayout.toolbarHeight\n // );\n this.layout = newLayout;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n if (this.showBackButton) {\n this.backButtonNavItem = {\n route: this.layoutService.previousUrl\n ? this.layoutService.previousUrl\n : this.defaultBackButtonHref,\n text: this.backButtonText,\n icon: 'arrow_back',\n backButton: true,\n backHref: window.history.state ? window.history.state['backHref'] : '#',\n };\n this.cdr.detectChanges();\n }\n\n this.router.events\n .pipe(\n takeUntil(this.destroy),\n filter((e) => e instanceof NavigationEnd),\n tap((e: RouterEvent) => {\n if (this.matSideNav && this.layout.smallScreen) {\n this.matSideNav.close();\n }\n const ne = e as NavigationEnd;\n this.highlightUrlMenuItem(ne.urlAfterRedirects);\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy.next();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['backButtonText']) {\n if (this.backButtonNavItem) {\n this.backButtonNavItem = {\n ...this.backButtonNavItem,\n text: this.backButtonText,\n };\n this.cdr.detectChanges();\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.highlightUrlMenuItem(this.router.routerState.snapshot.url);\n }\n\n /**\n * Highlights the menu item for the specified URL.\n *\n * @param url the full url of the current navigation\n *\n * The way this function works is like this.\n *\n * It first finds the NavItem matching the given URL in url arg. It does\n * this by removing the baseUrl from the url and then comparing the\n * NavItem.route attached to each SPMatMenuListItemComponent. This is done\n * recursively covering all NavItem.children. When a matching NavItem is\n * found, the function goes on to find the SPMatMenuListItemComponent which\n * has this NavItem attached to it. This too is done recursively to find\n * the innermost NavItem with matching URL.\n *\n * When a matching SPMatMenuListItemComponent is found, it first deselects\n * the previous SPMatMenuListItemComponent selection and then goes on to\n * select the newly matched SPMatMenuListItemComponent. If the\n * SPMatMenuListItemComponent is a child of a parent NavItem, the parent\n * NavItem is expanded. Similarly when deselecting the current selection,\n * if it belongs to a parent NavItem and the parent is not shared by the\n * currently matched SPMatMenuListItemComponent, it collapses the parent\n * of the previously selected SPMatMenuListItemComponent. (Quite a mouthful\n * of a sentence, but it's exactly how it works.)\n */\n highlightUrlMenuItem(url: string) {\n // Remove baseUrl from our url-to-SPMatMenuListItem matching logic\n const baseUrl = this.baseUrl.startsWith('/') ? this.baseUrl.substring(1) : this.baseUrl;\n const baseUrlIndex = url.search(baseUrl);\n if (baseUrlIndex != -1) {\n url = url.substring(baseUrlIndex+baseUrl.length);\n }\n\n // Filter out empty strings so that we avoid a pointless iteration of the\n // menuItemComps() array.\n const urlParts = url.split('/').filter(u => !!u);\n url = urlParts.join('/');\n // console.log(`highlightCurrentUrlMenuItem - baseUrl: ${this.baseUrl} url: ${url}, urlParts: ${urlParts}`);\n let highlightedItemFound = false;\n\n // Function to find the NavItem for for the given url. Returns a NavItem\n // if a matching NavItem is found, undefined otherwise.\n const findNavItemForUrl = (baseUrl: string, navItem: NavItem): NavItem|undefined => {\n let matchingItem: NavItem|undefined = undefined;\n if (navItem.children) {\n for (let index = 0; !matchingItem && index < navItem.children.length; index++) {\n matchingItem = findNavItemForUrl(baseUrl + (navItem?.route ?? ''), navItem.children[index]);\n }\n } else if (navItem.route) {\n if (url === navItem.route) {\n matchingItem = navItem;\n }\n }\n return matchingItem;\n }\n\n let matchingNavItem: NavItem|undefined = undefined;\n for (let index = 0; !matchingNavItem && index < this.menuItemComps().length; index++) {\n const element = this.menuItemComps()[index];\n if (element?.item) {\n matchingNavItem = findNavItemForUrl(url, element?.item);\n }\n }\n\n // Function to find the SPMatMenuListItemComponent for the given NavItem.\n // Returns SPMatMenuListItemComponent if a match is found, undefined\n // otherwise.\n const findMenuItemCompForNavItem = (\n menuItemComp: SPMatMenuListItemComponent,\n target: NavItem\n ): SPMatMenuListItemComponent | undefined => {\n let matchingMenuItemComp: SPMatMenuListItemComponent | undefined = undefined;\n if (menuItemComp.item === target) {\n matchingMenuItemComp = menuItemComp;\n } else if (menuItemComp.item?.children) {\n for (let index = 0; !matchingMenuItemComp && index < menuItemComp.children.length; index++) {\n matchingMenuItemComp = findMenuItemCompForNavItem(menuItemComp.children.get(index)!, target);\n }\n }\n return matchingMenuItemComp;\n };\n\n let matchingMenuItemComp: SPMatMenuListItemComponent | undefined = undefined;\n if (matchingNavItem) {\n for (let index = 0; !matchingMenuItemComp && index < this.menuItemComps().length; index++) {\n const element = this.menuItemComps()[index];\n matchingMenuItemComp = findMenuItemCompForNavItem(this.menuItemComps()[index], matchingNavItem);\n }\n }\n\n if (matchingMenuItemComp) {\n this.highlightMenuItemComp(matchingMenuItemComp);\n }\n\n // old logic, which is a little confusing and depends on state stored\n // in SPMatMenuListItemComponent.\n /*\n for (let index = 0; !highlightedItemFound && index < urlParts.length; index++) {\n const lastUrlSegment = urlParts[index];\n this.menuItemComps().find(menuItemComp => {\n const route = menuItemComp.item?.route;\n if (route === lastUrlSegment) {\n if (!menuItemComp.item?.children) {\n menuItemComp.toggleHighlight(true);\n highlightedItemFound = true;\n } else if (menuItemComp.checkChildrenForHighlight(lastUrlSegment)) {\n menuItemComp.expand();\n highlightedItemFound = true;\n }\n } else {\n menuItemComp.toggleHighlight(false);\n if (menuItemComp.item?.children) {\n if (menuItemComp.checkChildrenForHighlight(lastUrlSegment)) {\n menuItemComp.expand();\n highlightedItemFound = true\n };\n }\n }\n });\n }\n */\n }\n\n // To keep track of current highlighted SPMatMenuListItemComponent.\n private _curHighlitedMenuItemComp!: SPMatMenuListItemComponent|undefined;\n highlightMenuItemComp(menuItemComp: SPMatMenuListItemComponent) {\n // Deslect currently highliged SPMatMenuListItemComponent if it's different\n // from the menuItemComp arg.\n const lastHighlitedMenuItemComp = this._curHighlitedMenuItemComp;\n if (this._curHighlitedMenuItemComp && this._curHighlitedMenuItemComp !== menuItemComp) {\n this._curHighlitedMenuItemComp.toggleHighlight(false);\n this._curHighlitedMenuItemComp = undefined;\n }\n menuItemComp.toggleHighlight(true);\n if (lastHighlitedMenuItemComp && lastHighlitedMenuItemComp?.parent) {\n lastHighlitedMenuItemComp.parent.collapse();\n }\n if (menuItemComp.parent) {\n menuItemComp.parent.expand();\n }\n this._curHighlitedMenuItemComp = menuItemComp;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { MatSidenav } from '@angular/material/sidenav';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport { LayoutService, SideMenuLayoutProps } from './layout.service';\nimport { NavItem } from './nav-item';\n\n@Component({\n selector: 'sp-mat-menu-layout',\n template: `\n <mat-sidenav-container class=\"layout-container\">\n <mat-sidenav\n class=\"layout-menu-pane\"\n opened\n #menuNav\n [mode]=\"layout.smallScreen ? 'over' : 'side'\"\n [opened]=\"!layout.smallScreen\"\n [fixedInViewport]=\"layout.smallScreen\"\n >\n <div class=\"layout-menu-container\">\n <ngx-mat-menu-pane\n [baseUrl]=\"baseUrl\"\n [showBackButton]=\"showBackButton\"\n [showIcons]=\"showIcons\"\n [defaultBackButtonHref]=\"defaultBackButtonHref\"\n [backButtonText]=\"backButtonText\"\n [brandingImage]=\"brandingImage\"\n [brandingText]=\"brandingText\"\n [menuItems]=\"menuItems\"\n [matSideNav]=\"menuNav\"\n [menuPaneFooterContent]=\"menuPaneFooterContent\"\n [menuTitle]=\"menuTitle\"\n class=\"h-100\"\n ></ngx-mat-menu-pane>\n </div>\n </mat-sidenav>\n\n <mat-sidenav\n [ngStyle]=\"{\n 'min-width.px': infoPaneMinWidth,\n 'max-width.px': infoPaneMaxWidth\n }\"\n #infoPane\n closed\n mode=\"over\"\n position=\"end\"\n >\n <ng-container *ngTemplateOutlet=\"infoPaneContent\"></ng-container>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"layout-content\">\n <mat-toolbar class=\"layout-content-toolbar\">\n <button mat-icon-button (click)=\"onToggleMenuPane()\">\n <mat-icon>menu</mat-icon>\n </button>\n <ng-template #defaultToolbarTitle>\n <h4>{{ appTitle }}</h4>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n toolbarTitleContent ? toolbarTitleContent : defaultToolbarTitle\n \"\n ></ng-container>\n <span class=\"spacer\"></span>\n <ng-container *ngTemplateOutlet=\"toolbarEndContent\"></ng-container>\n </mat-toolbar>\n <div class=\"layout-content-content\" [class]=\"contentContainerClass\">\n <router-outlet></router-outlet>\n </div>\n </mat-sidenav-content>\n </mat-sidenav-container>\n `,\n styles: [\n `\n .layout-menu-pane {\n background-color: var(--sp-mat-menu-bg-color) !important;\n color: var(--sp-mat-menu-fg-color) !important;\n }\n .layout-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n .layout-menu-container {\n height: 100%;\n max-width: var(--sp-mat-menu-sidemenu-max-width, 50%);\n min-width: var(--sp-mat-menu-sidemenu-min-width, 250px);\n text-wrap: nowrap;\n overflow-x: scroll;\n overflow-y: scroll;\n }\n .layout-content {\n height: 100vh;\n display: flex;\n flex-direction: column;\n overflow-x: clip;\n }\n .layout-content-toolbar {\n border-bottom: 1px solid var(--sp-mat-menu-toolbar-border-color);\n flex-grow: 0;\n background-color: var(--sp-mat-menu-toolbar-bg-color);\n color: var(--sp-mat-menu-toolbar-fg-color);\n padding: 0 0;\n min-height: var(--mat-toolbar-standard-height);\n max-height: var(--mat-toolbar-standard-height);\n }\n .layout-content-content {\n flex-grow: 1;\n overflow: hidden;\n }\n .h-100 {\n height: 100%;\n }\n .spacer {\n flex: 1 1 auto;\n }\n `,\n ],\n // Add this style to make the content-container scroll from within.\n // That is override the window scrolling with the content div private\n // scroller.\n // .content-container {\n // overflow-x: scroll;\n // overflow-y: scroll;\n // }\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class SPMatMenuLayoutComponent implements OnInit, OnDestroy {\n @ViewChild('menuNav') menuNav!: MatSidenav;\n layout!: SideMenuLayoutProps;\n destroy = new Subject<void>();\n containerHeight: number = 500;\n topBottomPadding: number = 6;\n @Input() baseUrl = '';\n @Input() showBackButton: boolean = false;\n @Input() defaultBackButtonHref: string = '';\n @Input() backButtonText: string = 'BACK';\n @Input() brandingImage: string = '';\n @Input() brandingText: string = '';\n @Input() appTitle: string = '';\n @Input() menuTitle: string = '';\n @Input() menuItems: NavItem[] = [];\n // Template Partials for configurable portions of the layout\n @Input() menuPaneFooterContent!: TemplateRef<any>;\n @Input() toolbarEndContent!: TemplateRef<any>;\n @Input() infoPaneContent!: TemplateRef<any>;\n @Input() toolbarTitleContent!: TemplateRef<any>;\n // Width of the info pane on the right (or left for LTR) of the screen.\n @Input() infoPaneMinWidth: number = 250;\n @Input() infoPaneMaxWidth: number = 400;\n @Input() contentContainerClass: string = '';\n @Input() showIcons: boolean = true;\n // Allows querying infoPane to activate it or to set its attributes\n @ViewChild('infoPane') readonly infoPane!: MatSidenav;\n\n constructor(\n private layoutService: LayoutService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.layoutService.layoutChanged\n .pipe(\n takeUntil(this.destroy),\n tap((newLayout: SideMenuLayoutProps) => {\n this.layout = newLayout;\n this.containerHeight =\n window.innerHeight -\n (newLayout.toolbarHeight + this.topBottomPadding * 2);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy.next();\n this.destroy.complete();\n }\n\n onToggleMenuPane() {\n if (this.menuNav) {\n this.menuNav.toggle();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatListModule } from '@angular/material/list';\nimport { RouterOutlet } from '@angular/router';\nimport { SPMatMenuLayoutComponent } from './mat-menu-layout.component';\nimport { SPMatMenuListItemComponent } from './mat-menu-list-item.component';\nimport { SPMatMenuPaneComponent } from './mat-menu-pane.component';\n\n@NgModule({\n declarations: [SPMatMenuPaneComponent, SPMatMenuListItemComponent, SPMatMenuLayoutComponent],\n imports: [\n CommonModule,\n RouterOutlet,\n MatSidenavModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n MatListModule\n ],\n exports: [SPMatMenuPaneComponent, SPMatMenuListItemComponent, SPMatMenuLayoutComponent],\n})\nexport class SPMatMenuLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i1.LayoutService","i4","i5.SPMatMenuListItemComponent","i3","i5","i6","i8.SPMatMenuPaneComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "path": "src/assets/i18n/"
7
7
  }
8
8
  ],
9
- "version": "0.31.12",
9
+ "version": "0.31.13",
10
10
  "peerDependencies": {
11
11
  "@angular/common": "^19.1.0",
12
12
  "@angular/core": "^19.1.0",
@@ -47,13 +47,17 @@
47
47
  "types": "./entity-field/index.d.ts",
48
48
  "default": "./fesm2022/smallpearl-ngx-helper-entity-field.mjs"
49
49
  },
50
+ "./forms": {
51
+ "types": "./forms/index.d.ts",
52
+ "default": "./fesm2022/smallpearl-ngx-helper-forms.mjs"
53
+ },
50
54
  "./locale": {
51
55
  "types": "./locale/index.d.ts",
52
56
  "default": "./fesm2022/smallpearl-ngx-helper-locale.mjs"
53
57
  },
54
- "./forms": {
55
- "types": "./forms/index.d.ts",
56
- "default": "./fesm2022/smallpearl-ngx-helper-forms.mjs"
58
+ "./mat-busy-wheel": {
59
+ "types": "./mat-busy-wheel/index.d.ts",
60
+ "default": "./fesm2022/smallpearl-ngx-helper-mat-busy-wheel.mjs"
57
61
  },
58
62
  "./mat-context-menu": {
59
63
  "types": "./mat-context-menu/index.d.ts",
@@ -63,10 +67,6 @@
63
67
  "types": "./hover-dropdown/index.d.ts",
64
68
  "default": "./fesm2022/smallpearl-ngx-helper-hover-dropdown.mjs"
65
69
  },
66
- "./mat-busy-wheel": {
67
- "types": "./mat-busy-wheel/index.d.ts",
68
- "default": "./fesm2022/smallpearl-ngx-helper-mat-busy-wheel.mjs"
69
- },
70
70
  "./mat-entity-crud": {
71
71
  "types": "./mat-entity-crud/index.d.ts",
72
72
  "default": "./fesm2022/smallpearl-ngx-helper-mat-entity-crud.mjs"
@@ -75,10 +75,6 @@
75
75
  "types": "./mat-entity-list/index.d.ts",
76
76
  "default": "./fesm2022/smallpearl-ngx-helper-mat-entity-list.mjs"
77
77
  },
78
- "./mat-file-input": {
79
- "types": "./mat-file-input/index.d.ts",
80
- "default": "./fesm2022/smallpearl-ngx-helper-mat-file-input.mjs"
81
- },
82
78
  "./mat-form-error": {
83
79
  "types": "./mat-form-error/index.d.ts",
84
80
  "default": "./fesm2022/smallpearl-ngx-helper-mat-form-error.mjs"
@@ -95,6 +91,10 @@
95
91
  "types": "./mat-tel-input/index.d.ts",
96
92
  "default": "./fesm2022/smallpearl-ngx-helper-mat-tel-input.mjs"
97
93
  },
94
+ "./mat-file-input": {
95
+ "types": "./mat-file-input/index.d.ts",
96
+ "default": "./fesm2022/smallpearl-ngx-helper-mat-file-input.mjs"
97
+ },
98
98
  "./sideload": {
99
99
  "types": "./sideload/index.d.ts",
100
100
  "default": "./fesm2022/smallpearl-ngx-helper-sideload.mjs"