@smallpearl/ngx-helper 0.33.49 → 20.0.2
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/core/index.d.ts +3 -1
- package/entities/index.d.ts +313 -2
- package/entity-field/index.d.ts +101 -2
- package/fesm2022/smallpearl-ngx-helper-entities.mjs +18 -18
- package/fesm2022/smallpearl-ngx-helper-entities.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-entity-field.mjs +5 -4
- package/fesm2022/smallpearl-ngx-helper-entity-field.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-forms.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-hover-dropdown.mjs +6 -6
- package/fesm2022/smallpearl-ngx-helper-hover-dropdown.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-locale.mjs +6 -6
- package/fesm2022/smallpearl-ngx-helper-locale.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-busy-wheel.mjs +57 -31
- package/fesm2022/smallpearl-ngx-helper-mat-busy-wheel.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-context-menu.mjs +15 -15
- package/fesm2022/smallpearl-ngx-helper-mat-context-menu.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-entity-crud.mjs +347 -359
- package/fesm2022/smallpearl-ngx-helper-mat-entity-crud.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-entity-list.mjs +152 -146
- package/fesm2022/smallpearl-ngx-helper-mat-entity-list.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-file-input.mjs +5 -5
- package/fesm2022/smallpearl-ngx-helper-mat-file-input.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-form-error.mjs +19 -19
- package/fesm2022/smallpearl-ngx-helper-mat-form-error.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-select-entity.mjs +25 -26
- package/fesm2022/smallpearl-ngx-helper-mat-select-entity.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-select-infinite-scroll.mjs +7 -7
- package/fesm2022/smallpearl-ngx-helper-mat-select-infinite-scroll.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-side-menu-layout.mjs +24 -24
- package/fesm2022/smallpearl-ngx-helper-mat-side-menu-layout.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-mat-tel-input.mjs +8 -9
- package/fesm2022/smallpearl-ngx-helper-mat-tel-input.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-sideload.mjs.map +1 -1
- package/fesm2022/smallpearl-ngx-helper-stationary-with-line-items.mjs +35 -35
- package/fesm2022/smallpearl-ngx-helper-stationary-with-line-items.mjs.map +1 -1
- package/forms/index.d.ts +55 -1
- package/hover-dropdown/index.d.ts +44 -1
- package/index.d.ts +4 -5
- package/locale/index.d.ts +55 -5
- package/mat-busy-wheel/index.d.ts +165 -4
- package/mat-context-menu/index.d.ts +65 -1
- package/mat-entity-crud/index.d.ts +1075 -6
- package/mat-entity-list/index.d.ts +394 -3
- package/mat-file-input/index.d.ts +61 -1
- package/mat-form-error/index.d.ts +184 -6
- package/mat-select-entity/index.d.ts +194 -1
- package/mat-select-infinite-scroll/index.d.ts +45 -2
- package/mat-side-menu-layout/index.d.ts +180 -6
- package/mat-tel-input/index.d.ts +169 -2
- package/package.json +14 -14
- package/sideload/index.d.ts +20 -1
- package/stationary-with-line-items/index.d.ts +78 -1
- package/core/src/version.d.ts +0 -1
- package/entities/src/paged-loader.d.ts +0 -219
- package/entities/src/paginator.d.ts +0 -87
- package/entity-field/src/entity-field.d.ts +0 -70
- package/entity-field/src/provider.d.ts +0 -27
- package/forms/src/validation-error-handler.d.ts +0 -52
- package/hover-dropdown/src/hover-dropdown.directive.d.ts +0 -41
- package/locale/src/currency.pipe.d.ts +0 -14
- package/locale/src/date.pipe.d.ts +0 -14
- package/locale/src/format-currency.d.ts +0 -1
- package/locale/src/format-date.d.ts +0 -2
- package/locale/src/is-empty.d.ts +0 -1
- package/locale/src/providers.d.ts +0 -20
- package/mat-busy-wheel/src/busy-wheel-op.d.ts +0 -65
- package/mat-busy-wheel/src/busy-wheel.component.d.ts +0 -12
- package/mat-busy-wheel/src/busy-wheel.service.d.ts +0 -42
- package/mat-busy-wheel/src/host-busy-wheel.directive.d.ts +0 -35
- package/mat-context-menu/src/mat-context-menu.component.d.ts +0 -61
- package/mat-entity-crud/src/convert-context-input-to-http-context.d.ts +0 -11
- package/mat-entity-crud/src/default-config.d.ts +0 -9
- package/mat-entity-crud/src/form-view-host.component.d.ts +0 -43
- package/mat-entity-crud/src/mat-entity-crud-form-base.d.ts +0 -277
- package/mat-entity-crud/src/mat-entity-crud-internal-types.d.ts +0 -138
- package/mat-entity-crud/src/mat-entity-crud-item-action.d.ts +0 -68
- package/mat-entity-crud/src/mat-entity-crud-types.d.ts +0 -158
- package/mat-entity-crud/src/mat-entity-crud.component.d.ts +0 -367
- package/mat-entity-crud/src/preview-host.component.d.ts +0 -21
- package/mat-entity-crud/src/preview-pane.component.d.ts +0 -31
- package/mat-entity-crud/src/providers.d.ts +0 -3
- package/mat-entity-list/src/config.d.ts +0 -6
- package/mat-entity-list/src/mat-entity-list-types.d.ts +0 -128
- package/mat-entity-list/src/mat-entity-list.component.d.ts +0 -259
- package/mat-entity-list/src/providers.d.ts +0 -3
- package/mat-file-input/src/mat-file-input.component.d.ts +0 -58
- package/mat-form-error/src/locales/en.d.ts +0 -4
- package/mat-form-error/src/locales/hu.d.ts +0 -4
- package/mat-form-error/src/locales/index.d.ts +0 -5
- package/mat-form-error/src/locales/pt-br.d.ts +0 -4
- package/mat-form-error/src/locales/zh-hans.d.ts +0 -4
- package/mat-form-error/src/locales/zh-hant.d.ts +0 -4
- package/mat-form-error/src/ngx-error-list.component.d.ts +0 -9
- package/mat-form-error/src/ngx-mat-error-control.d.ts +0 -17
- package/mat-form-error/src/ngx-mat-error-def.directive.d.ts +0 -30
- package/mat-form-error/src/ngx-mat-errors-for-date-range-picker.directive.d.ts +0 -8
- package/mat-form-error/src/ngx-mat-errors.component.d.ts +0 -44
- package/mat-form-error/src/types.d.ts +0 -68
- package/mat-form-error/src/utils/coerce-to-observable.d.ts +0 -3
- package/mat-form-error/src/utils/distinct-until-error-changed.d.ts +0 -2
- package/mat-form-error/src/utils/find-error-for-control.d.ts +0 -9
- package/mat-form-error/src/utils/get-abstract-controls.d.ts +0 -3
- package/mat-form-error/src/utils/get-control-with-error.d.ts +0 -3
- package/mat-select-entity/src/mat-select-entity.component.d.ts +0 -190
- package/mat-select-infinite-scroll/src/mat-select-infinite-scroll.directive.d.ts +0 -19
- package/mat-select-infinite-scroll/src/mat-select-infinite-scroll.service.d.ts +0 -25
- package/mat-side-menu-layout/src/layout.service.d.ts +0 -23
- package/mat-side-menu-layout/src/mat-menu-layout.component.d.ts +0 -39
- package/mat-side-menu-layout/src/mat-menu-layout.module.d.ts +0 -18
- package/mat-side-menu-layout/src/mat-menu-list-item.component.d.ts +0 -36
- package/mat-side-menu-layout/src/mat-menu-pane.component.d.ts +0 -66
- package/mat-side-menu-layout/src/nav-item.d.ts +0 -10
- package/mat-tel-input/src/country-codes.d.ts +0 -5
- package/mat-tel-input/src/mat-telephone.component.d.ts +0 -129
- package/mat-tel-input/src/providers.d.ts +0 -38
- package/ngx-helper.d.ts +0 -2
- package/public-api.d.ts +0 -1
- package/sideload/src/sideload.d.ts +0 -18
- package/stationary-with-line-items/src/stationary-with-line-items.component.d.ts +0 -74
|
@@ -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 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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"}
|
|
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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
2
|
+
import { InjectionToken, Input, ViewChild, Optional, Inject, Self, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import * as i2 from '@angular/cdk/a11y';
|
|
4
4
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
5
|
import * as i4 from '@angular/common';
|
|
@@ -7,16 +7,15 @@ import { CommonModule } from '@angular/common';
|
|
|
7
7
|
import * as i1 from '@angular/common/http';
|
|
8
8
|
import * as i3 from '@angular/forms';
|
|
9
9
|
import { FormGroup, FormControl, Validators, NgControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
10
|
-
import * as
|
|
10
|
+
import * as i7 from '@angular/material/form-field';
|
|
11
11
|
import { MAT_FORM_FIELD, MatFormFieldControl } from '@angular/material/form-field';
|
|
12
12
|
import { PhoneNumberUtil, PhoneNumberType } from 'google-libphonenumber';
|
|
13
13
|
import { BehaviorSubject, ReplaySubject, Subject, NEVER } from 'rxjs';
|
|
14
14
|
import { map, takeUntil, take, tap, catchError } from 'rxjs/operators';
|
|
15
|
-
import * as
|
|
15
|
+
import * as i6 from 'ngx-mat-select-search';
|
|
16
16
|
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
|
|
17
17
|
import * as i5 from '@angular/material/select';
|
|
18
18
|
import { MatSelectModule } from '@angular/material/select';
|
|
19
|
-
import * as i6 from '@angular/material/core';
|
|
20
19
|
|
|
21
20
|
const QQMAT_TELEPHONE_INPUT_CONFIG_PROVIDER = new InjectionToken('QQMatTelephoneInputConfigProvider');
|
|
22
21
|
|
|
@@ -742,8 +741,8 @@ class SPMatTelephoneInputComponent {
|
|
|
742
741
|
this.countries = this.countries.sort((a, b) => a.name.localeCompare(b.name));
|
|
743
742
|
}
|
|
744
743
|
}
|
|
745
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
746
|
-
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
744
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SPMatTelephoneInputComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: MAT_FORM_FIELD, optional: true }, { token: i3.NgControl, optional: true, self: true }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
745
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SPMatTelephoneInputComponent, isStandalone: true, selector: "sp-mat-telephone-input", inputs: { mobile: "mobile", allowedCountries: "allowedCountries", defaultCountry: "defaultCountry", userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], placeholder: "placeholder", required: "required", searchText: "searchText", noEntriesFoundLabel: "noEntriesFoundLabel", disabled: "disabled", value: "value" }, providers: [
|
|
747
746
|
{ provide: MatFormFieldControl, useExisting: SPMatTelephoneInputComponent },
|
|
748
747
|
], viewQueries: [{ propertyName: "countrySelect", first: true, predicate: ["countryCodeSelector"], descendants: true, static: true }, { propertyName: "nationalInput", first: true, predicate: ["nationalNumberInput"], descendants: true }], ngImport: i0, template: `
|
|
749
748
|
<!--
|
|
@@ -806,9 +805,9 @@ class SPMatTelephoneInputComponent {
|
|
|
806
805
|
(input)="onNationalNumberChange($event)"
|
|
807
806
|
/>
|
|
808
807
|
</div>
|
|
809
|
-
`, isInline: true, styles: [".tel-input-wrapper{display:flex;padding:1px}.error-border{border-color:red}.box-border{border-bottom:1px solid gray;border-radius:4px}mat-select{display:inline-block;border:none;outline:none;scroll-behavior:smooth;background:none;width:30%}mat-select:focus{border:none;outline:none;background:none;scroll-behavior:smooth}input{flex:1 1 auto;background:none;border:none}input:focus{border:none;outline:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "
|
|
808
|
+
`, isInline: true, styles: [".tel-input-wrapper{display:flex;padding:1px}.error-border{border-color:red}.box-border{border-bottom:1px solid gray;border-radius:4px}mat-select{display:inline-block;border:none;outline:none;scroll-behavior:smooth;background:none;width:30%}mat-select:focus{border:none;outline:none;background:none;scroll-behavior:smooth}input{flex:1 1 auto;background:none;border:none}input:focus{border:none;outline:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i6.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
810
809
|
}
|
|
811
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
810
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SPMatTelephoneInputComponent, decorators: [{
|
|
812
811
|
type: Component,
|
|
813
812
|
args: [{ selector: 'sp-mat-telephone-input', template: `
|
|
814
813
|
<!--
|
|
@@ -880,7 +879,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
880
879
|
], providers: [
|
|
881
880
|
{ provide: MatFormFieldControl, useExisting: SPMatTelephoneInputComponent },
|
|
882
881
|
], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".tel-input-wrapper{display:flex;padding:1px}.error-border{border-color:red}.box-border{border-bottom:1px solid gray;border-radius:4px}mat-select{display:inline-block;border:none;outline:none;scroll-behavior:smooth;background:none;width:30%}mat-select:focus{border:none;outline:none;background:none;scroll-behavior:smooth}input{flex:1 1 auto;background:none;border:none}input:focus{border:none;outline:none}\n"] }]
|
|
883
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type:
|
|
882
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i7.MatFormField, decorators: [{
|
|
884
883
|
type: Optional
|
|
885
884
|
}, {
|
|
886
885
|
type: Inject,
|