{"version":3,"sources":["libs/extensions/index.ts","libs/components/app-container/app-container.component.ts","libs/components/app-container/app-container.component.html","apps/scholar/src/app/pages/login/account-type/account-type.component.ts","apps/scholar/src/app/pages/login/account-type/account-type.component.html","apps/scholar/src/app/pages/login/login.component.ts","apps/scholar/src/app/pages/login/login.component.html","apps/scholar/src/app/shared/authorization/directives/if-has-entitlement-context.ts","apps/scholar/src/app/shared/authorization/directives/if-has-entitlement.directive.ts","apps/scholar/src/app/shared/components/user-menu/user-menu.component.ts","apps/scholar/src/app/shared/components/user-menu/user-menu.component.html","apps/scholar/src/app/shared/components/google-translate-toggle/google-translate-toggle.component.ts","apps/scholar/src/app/shared/components/google-translate-toggle/google-translate-toggle.component.html","apps/scholar/src/app/shared/components/page-banner/page-banner.component.ts","apps/scholar/src/app/shared/components/page-banner/page-banner.component.html","node_modules/@capawesome/capacitor-app-update/dist/esm/definitions.js","node_modules/@capawesome/capacitor-app-update/dist/esm/index.js","apps/scholar/src/app/shared/state/app-version-state.service.ts","apps/scholar/src/app/app.component.ts","apps/scholar/src/app/app.component.html","node_modules/@angular/platform-browser/fesm2022/animations/async.mjs","libs/analytics/analytics.provider.ts","apps/scholar/src/app/pages/403/403.component.ts","apps/scholar/src/app/shared/components/calendar-pdf-button/calendar-pdf-button.component.ts","apps/scholar/src/app/shared/components/calendar-pdf-button/calendar-pdf-button.component.html","apps/scholar/src/app/shared/components/feedback-btn/feedback-btn.component.ts","apps/scholar/src/app/shared/components/feedback-btn/feedback-btn.component.html","apps/scholar/src/app/shared/services/api/todo.service.ts","apps/scholar/src/app/shared/components/todos/components/basic-todo/basic-todo.component.ts","apps/scholar/src/app/shared/components/todos/components/basic-todo/basic-todo.component.html","apps/scholar/src/app/shared/components/todos/components/form-completion-todo/form-completion-todo.component.ts","apps/scholar/src/app/shared/components/todos/components/form-completion-todo/form-completion-todo.component.html","apps/scholar/src/app/shared/components/todos/components/vop-survey-todo/vop-survey-todo.component.ts","apps/scholar/src/app/shared/components/todos/components/vop-survey-todo/vop-survey-todo.component.html","apps/scholar/src/app/shared/components/todos/todos.component.ts","apps/scholar/src/app/shared/components/todos/todos.component.html","apps/scholar/src/app/shared/components/training-dialog/training-dialog.component.ts","apps/scholar/src/app/shared/components/training-dialog/training-dialog.component.html","apps/scholar/src/app/shared/components/student-card/student-card.component.ts","apps/scholar/src/app/shared/components/student-card/student-card.component.html","apps/scholar/src/app/shared/components/student-list/student-list.component.ts","apps/scholar/src/app/shared/components/student-list/student-list.component.html","apps/scholar/src/app/pages/home/components/home-header/home-header.component.ts","apps/scholar/src/app/pages/home/components/home-header/home-header.component.html","apps/scholar/src/app/pages/home/home.component.ts","apps/scholar/src/app/pages/home/home.component.html","apps/scholar/src/app/shared/components/page-title/page-title.component.ts","apps/scholar/src/app/shared/components/page-title/page-title.component.html","apps/scholar/src/app/pages/volunteer/volunteer.component.ts","apps/scholar/src/app/pages/volunteer/volunteer.component.html","apps/scholar/src/app/pages/staff/components/staff-header/staff-header.component.ts","apps/scholar/src/app/pages/staff/components/staff-header/staff-header.component.html","node_modules/@angular/cdk/fesm2022/table.mjs","node_modules/@angular/material/fesm2022/table.mjs","apps/scholar/src/app/shared/services/api/impersonation.service.ts","apps/scholar/src/app/pages/staff/staff.component.ts","apps/scholar/src/app/pages/staff/staff.component.html","apps/scholar/src/app/pages/landing/landing.component.ts","node_modules/@angular/material/fesm2022/card.mjs","apps/scholar/src/app/shared/services/api/reenrollment.service.ts","apps/scholar/src/app/pages/reenrollment/reenrollment.component.ts","apps/scholar/src/app/pages/reenrollment/reenrollment.component.html","apps/scholar/src/app/pages/activate/activate.component.ts","apps/scholar/src/app/pages/activate/activate.component.html","apps/scholar/src/app/app.routes.ts","apps/scholar/src/app/shared/authorization/impersonation.interceptor.ts","apps/scholar/src/app/shared/services/api/setting.service.ts","apps/scholar/src/app/app.config.ts","libs/enums/environment.enum.ts","apps/scholar/src/main.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\ndeclare global {\n\tinterface String {\n\t\tremove(str: string): string;\n\t\tstripHtml(): string;\n\t}\n\n\tinterface Array {\n\t\tany(predicate?: (value: T, index: number, object: T[]) => boolean): boolean;\n\t\tcompare(items: Array): Array;\n\t\tfirst(): T;\n\t\tlast(): T;\n\t\tremove(predicate: (value: T) => boolean): void;\n\t\tremove(item: T): void;\n\t}\n}\n\n/** string extensions */\n\n/** remove the specified string from the given string */\nString.prototype.remove = function (str: string): string {\n\tif (this.includes(str)) {\n\t\treturn this.replace(str, '');\n\t}\n\treturn this as string;\n};\n\n/** strip html */\nString.prototype.stripHtml = function (): string {\n\tconst tmp: HTMLDivElement = document.createElement('div');\n\ttmp.innerHTML = this as string;\n\treturn tmp.textContent || tmp.innerText || '';\n};\n\n/** array extensions */\n\n/** find whether there are any elements in the array that match the predicate */\nArray.prototype.any = function (predicate?: (value: T, index: number, object: T[]) => boolean): boolean {\n\tif (!predicate) {\n\t\treturn this.length > 0;\n\t}\n\tif ((this as Array).find(predicate)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/** compare array to another array and return missing values */\nArray.prototype.compare = function (items: Array): Array {\n\tconst missingValues: Array = [];\n\tfor (let i: number = 0; i < this.length; i++) {\n\t\tif (!items.includes(this[i])) {\n\t\t\tmissingValues.push(this[i]);\n\t\t}\n\t}\n\treturn missingValues;\n};\n\n/** return the first element */\nArray.prototype.first = function (): T {\n\tif (this === undefined || this === null || this.length === 0) {\n\t\treturn null as T;\n\t} else {\n\t\treturn this[0];\n\t}\n};\n\n/** return the last element */\nArray.prototype.last = function (): T {\n\tif (this === undefined || this === null || this.length === 0) {\n\t\treturn null as T;\n\t} else {\n\t\treturn this[this.length - 1];\n\t}\n};\n\n/** remove an entry from an array */\nArray.prototype.remove = function (x: T | ((value: T) => boolean)): void {\n\tif (typeof x === 'function') {\n\t\tconst array: T[] = this as T[];\n\t\tarray.forEach((item, i) => {\n\t\t\tif ((x as (value: T) => boolean).call(this, item) === true) {\n\t\t\t\tarray.splice(i, 1);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (this.includes(x)) {\n\t\t\tthis.splice(this.indexOf(x), 1);\n\t\t}\n\t}\n};\n\nexport {};\n","import { Component } from '@angular/core';\n\n@Component({\n\tselector: 'dm-application-container',\n\ttemplateUrl: './app-container.component.html',\n\tstyleUrl: './app-container.component.scss',\n\tstandalone: true\n})\nexport class AppContainerComponent {}\n","\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { PageBaseComponent } from '../../page-base.component';\n\n@Component({\n\tstandalone: true,\n\tselector: 'app-account-type',\n\ttemplateUrl: './account-type.component.html',\n\tstyleUrls: ['./account-type.component.scss'],\n\timports: [CommonModule, MatButtonModule ,ContentBoxComponent, HeaderComponent,RouterModule, MatIconModule]\n})\nexport class AccountTypeComponent extends PageBaseComponent {\n\t@Output() loginTypeSelected = new EventEmitter<'parent' | 'student' | 'staff'>();\n\n\tpassDataToParent(loginType: 'parent' | 'student' | 'staff') {\n\t\tthis.loginTypeSelected.emit(loginType);\n\t}\n}\n","\n\t\"logo\"\n\n\t
\n\t\tWelcome!\n\t\t

Let us know who you are so we can get you to the right place.

\n\t
\n\n\t
\n\t\t\n\n\t\t\n\n\t\t\n\t
\n
","import { CommonModule } from '@angular/common';\nimport { AfterViewChecked, Component, OnInit, Renderer2, Signal, ViewEncapsulation, WritableSignal, computed, inject, signal } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { AuthenticationConfigurationService, AuthenticationService, INHAAuthConfiguration, NHALoginComponent } from 'nha-login';\nimport { RouterService, StorageService } from 'nha-services';\nimport { PageBaseComponent } from '../page-base.component';\nimport { AccountTypeComponent } from './account-type/account-type.component';\nimport { Capacitor } from '@capacitor/core';\n\ntype LoginType = 'parent' | 'student' | 'staff';\n\n@Component({\n\tstandalone: true,\n\tselector: 'app-login',\n\ttemplateUrl: './login.component.html',\n\tstyleUrls: ['./login.component.scss'],\n\timports: [CommonModule, FormsModule, ReactiveFormsModule, AccountTypeComponent, NHALoginComponent, MatButtonModule],\n\tencapsulation: ViewEncapsulation.None\n})\nexport class LoginComponent extends PageBaseComponent implements OnInit, AfterViewChecked {\n\tprivate _appSettings: IAppSettings = inject(APP_CONFIG);\n\tprivate _renderer = inject(Renderer2);\n\tprivate _authConfigurationService: AuthenticationConfigurationService = inject(AuthenticationConfigurationService);\n\tprivate _authService: AuthenticationService = inject(AuthenticationService);\n\tprivate _storageService: StorageService = new StorageService(true);\n\tprivate _router: RouterService = inject(RouterService);\n\n\tprivate _unlisten: () => void;\n\n\tpublic isNative: boolean = Capacitor.isNativePlatform();\n\n\tpublic loginType: WritableSignal = signal(\n\t\t(this._storageService.get('loginType') as LoginType) || undefined\n\t);\n\n\tpublic needHelpLink: string = `${this._appSettings.cmsBaseUrl}/en/parent-help-page`;\n\n\tpublic allowAnonymous: Signal = computed(() => {\n\t\treturn this._router.routeData()['allowAnonymous'] && this._router.routeData()['allowAnonymous'] === true;\n\t});\n\n\tpublic isAuthenticated = this._authService.isAuthenticated();\n\n\tngOnInit(): void {\n\t\tif (!this.isLoggedIn) {\n\t\t\tthis._authService.setRedirectOnLogin(window.location.href);\n\t\t}\n\t}\n\n\tngAfterViewChecked(): void {\n\t\tconst customLink = document.querySelector('a.link.js-custom');\n\n\t\tif (customLink) {\n\t\t\tif (this._unlisten) {\n\t\t\t\tthis._unlisten();\n\t\t\t}\n\n\t\t\tthis._unlisten = this._renderer.listen(customLink, 'click', (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis._storageService.remove('loginType');\n\t\t\t\tthis.loginType.set(undefined);\n\t\t\t});\n\t\t}\n\t}\n\n\thandleLoginType(loginType: 'parent' | 'student' | 'staff') {\n\t\tconst loginTypes: { [key: string]: INHAAuthConfiguration } = {\n\t\t\tparent: this._appSettings.parentOktaConfig,\n\t\t\tstaff: this._appSettings.studentOktaConfig,\n\t\t\tstudent: this._appSettings.studentOktaConfig\n\t\t};\n\n\t\tconst configuration = this.modifyConfiguration(loginTypes[loginType], loginType);\n\n\t\tthis._authConfigurationService.setConfiguration(configuration);\n\n\t\tthis.loginType.set(loginType);\n\t\tthis._storageService.set('loginType', loginType);\n\n\t\twindow.location.href = this._storageService.get('redirectOnLogin') || '/';\n\t}\n\n\tprivate modifyConfiguration(configuration: INHAAuthConfiguration, loginType: string): INHAAuthConfiguration {\n\t\tconfiguration.authWidget.features = {\n\t\t\tshowPasswordToggleOnSignInPage: true\n\t\t};\n\n\t\tloginType = loginType.charAt(0).toUpperCase() + loginType.slice(1);\n\n\t\tconfiguration.authWidget.helpLinks = {\n\t\t\thelp: this.needHelpLink,\n\t\t\tcustom: [\n\t\t\t\t{\n\t\t\t\t\ttext: `Not A ${loginType}?`,\n\t\t\t\t\thref: '#'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tconfiguration.authWidget.i18n = {\n\t\t\ten: {\n\t\t\t\t'primaryauth.title': `${loginType} Portal Login`\n\t\t\t}\n\t\t};\n\n\t\treturn configuration;\n\t}\n}\n","@if (loginType() || allowAnonymous() === true) {\n\t\n\t\t\n\t\n\t@if (!isAuthenticated && !isNative) {\n\t\t
\n\t\t\t\n\t\t
\n\t}\n\n} @else {\n\t\n}\n","import { TemplateRef, ɵstringify as stringify } from '@angular/core';\n\nexport class IfHasEntitlementContext {\n\tpublic entitlement: string | undefined = undefined;\n\tpublic entitlements: string[] | { entitlementType: string; entitlementName: string }[];\n\n\tpublic hasEntitlement: boolean = false;\n\tpublic additionalCondition: boolean = false;\n\tpublic additionalConditionType: string;\n\n\tget conditionsMet(): boolean {\n\t\tif (!this.additionalConditionType) {\n\t\t\treturn this.hasEntitlement;\n\t\t} else if (this.additionalConditionType === 'and') {\n\t\t\treturn this.hasEntitlement && this.additionalCondition;\n\t\t} else if (this.additionalConditionType === 'or') {\n\t\t\treturn this.hasEntitlement || this.additionalCondition;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nexport function assertTemplate(property: string, templateRef: TemplateRef | null): void {\n\tconst isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n\tif (!isTemplateRefOrNull) {\n\t\tthrow new Error(`${property} must be a TemplateRef, but received '${stringify(templateRef)}'.`);\n\t}\n}\n","/* eslint-disable @angular-eslint/directive-selector */\nimport { Directive, EmbeddedViewRef, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { UserStateService } from '../../state/user.state';\nimport { assertTemplate, IfHasEntitlementContext } from './if-has-entitlement-context';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, Observable } from 'rxjs';\nimport { IUser } from '../../types/iuser.interface';\n\n@Directive({\n\tselector: '[ifHasEntitlement]',\n\tstandalone: true\n})\nexport class IfHasEntitlementDirective {\n\tprivate _userStateService: UserStateService = inject(UserStateService);\n\tprivate _viewContainer: ViewContainerRef = inject(ViewContainerRef);\n\n\tprivate _context: IfHasEntitlementContext = new IfHasEntitlementContext();\n\tprivate _thenTemplateRef: TemplateRef | null = null;\n\tprivate _elseTemplateRef: TemplateRef | null = null;\n\tprivate _thenViewRef: EmbeddedViewRef | null = null;\n\tprivate _elseViewRef: EmbeddedViewRef | null = null;\n\n\tprivate _user: Observable;\n\n\t@Input()\n\tset ifHasEntitlement(entitlement: string | { entitlementType: string; entitlementName: string }) {\n\t\t/** check the type */\n\t\tif (typeof entitlement !== 'string') {\n\t\t\tentitlement = `${entitlement.entitlementType}|${entitlement.entitlementName}`;\n\t\t}\n\n\t\tthis._user.subscribe((user) => {\n\t\t\tthis._context.entitlement = entitlement;\n\t\t\tthis._context.hasEntitlement = this._userStateService.hasEntitlement(user, this._context.entitlement);\n\t\t\tthis._updateView();\n\t\t});\n\t}\n\n\t@Input('ifHasEntitlementAnd')\n\tset And(and: boolean) {\n\t\tthis._context.additionalCondition = and;\n\t\tthis._context.additionalConditionType = 'and';\n\t\tthis._updateView();\n\t}\n\n\t@Input('ifHasEntitlementOr')\n\tset Or(or: boolean) {\n\t\tthis._context.additionalCondition = or;\n\t\tthis._context.additionalConditionType = 'or';\n\t\tthis._updateView();\n\t}\n\n\t/**\n\t * A template to show if the condition expression evaluates to true.\n\t */\n\t@Input()\n\tset ifHasEntitlementThen(thenTemplateRef: TemplateRef | null) {\n\t\tassertTemplate('ifHasEntitlementThen', thenTemplateRef);\n\t\tthis._thenTemplateRef = thenTemplateRef;\n\t\tthis._thenViewRef = null; // clear previous view if any.\n\t\tthis._updateView();\n\t}\n\n\t/**\n\t * A template to show if the condition expression evaluates to false.\n\t */\n\t@Input()\n\tset ifHasEntitlementElse(elseTemplateRef: TemplateRef | null) {\n\t\tassertTemplate('ifHasEntitlementElse', elseTemplateRef);\n\t\tthis._elseTemplateRef = elseTemplateRef;\n\t\tthis._elseViewRef = null; // clear previous view if any.\n\t\tthis._updateView();\n\t}\n\n\tconstructor(_templateRef: TemplateRef | null) {\n\t\tthis._thenTemplateRef = _templateRef;\n\t\tthis._user = toObservable(this._userStateService.user).pipe(\n\t\t\tfilter((user) => user !== undefined),\n\t\t\ttakeUntilDestroyed()\n\t\t);\n\t}\n\n\tprivate _updateView() {\n\t\tif (this._context.conditionsMet) {\n\t\t\tif (!this._thenViewRef) {\n\t\t\t\tthis._viewContainer.clear();\n\t\t\t\tthis._elseViewRef = null;\n\t\t\t\tif (this._thenTemplateRef) {\n\t\t\t\t\tthis._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this._elseViewRef) {\n\t\t\t\tthis._viewContainer.clear();\n\t\t\t\tthis._thenViewRef = null;\n\t\t\t\tif (this._elseTemplateRef) {\n\t\t\t\t\tthis._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { UserIconComponent } from '../../../../../../../libs/components/user-icon/user-icon.component';\nimport { RouterModule } from '@angular/router';\nimport { AuthenticationService } from 'nha-login';\nimport { IfHasEntitlementDirective } from '../../authorization/directives';\nimport { UserStateService } from '../../state/user.state';\nimport { Cookies, StorageService } from 'nha-services';\n\n@Component({\n\tselector: 'app-user-menu',\n\tstandalone: true,\n\timports: [CommonModule, RouterModule, UserIconComponent, MatIconModule, MatMenuModule, IfHasEntitlementDirective],\n\ttemplateUrl: './user-menu.component.html',\n\tstyleUrl: './user-menu.component.scss'\n})\nexport class UserMenuComponent implements OnInit {\n\tprivate _authenticationService = inject(AuthenticationService);\n\tprivate _userStateService: UserStateService = inject(UserStateService);\n\tprivate _storageService: StorageService = new StorageService(true);\n\n\tpublic user = this._userStateService.user;\n\n\tpublic isImpersonating: boolean = Cookies.get('impersonation-user') !== null;\n\n\tasync ngOnInit(): Promise {\n\t\tconst impersonationTimestamp = Cookies.get('impersonation-timestamp');\n\t\tif (impersonationTimestamp) {\n\t\t\tsetInterval(() => {\n\t\t\t\tconst currentDate = new Date();\n\t\t\t\tconst timestamp = new Date(`${currentDate.getFullYear()}-${currentDate.getMonth() + 1}-${currentDate.getDate()} ${impersonationTimestamp}`);\n\t\t\t\ttimestamp.setHours(timestamp.getHours() + 1);\n\t\t\t\tconst now = new Date();\n\n\t\t\t\tif (now > timestamp) {\n\t\t\t\t\tthis.exitImpersonation();\n\t\t\t\t}\n\t\t\t}, 10000);\n\t\t}\n\t}\n\n\texitImpersonation(): void {\n\t\tCookies.remove('impersonation-user');\n\t\tCookies.remove('impersonation-user-type');\n\t\tCookies.remove('impersonation-timestamp');\n\n\t\twindow.location.href = '/';\n\t}\n\n\tasync logout(): Promise {\n\t\tCookies.clear();\n\t\tthis._storageService.remove('loginType');\n\n\t\tawait this._authenticationService.signOut();\n\t}\n}\n","@let userInfo = user();\n@let imageUrl = userInfo?.userImage && userInfo?.userImage !== null ? 'data:image/jpeg;base64, ' + userInfo?.userImage : './assets/user-placeholder.svg';\n\n@if (isImpersonating) {\n\t
\n\t\tsupervisor_account\n\t
\n}\n\n\n\n\t\n\t\taccount_circle\n\t\tProfile\n\t\n\t@if (isImpersonating) {\n\t\t\n\t}\n\t\n\n","import { Component, ElementRef, Host, HostListener, inject, OnInit, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { AnalyticsService } from '@nha/analytics/analytics.service';\n\n@Component({\n\tselector: 'app-google-translate-toggle',\n\tstandalone: true,\n\timports: [MatButtonModule, MatIcon],\n\ttemplateUrl: './google-translate-toggle.component.html',\n\tstyleUrl: './google-translate-toggle.component.scss'\n})\nexport class GoogleTranslateToggleComponent implements OnInit {\n\tprivate _elementRef: ElementRef = inject(ElementRef);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n\tisGoogleTranslateVisible = signal(false);\n\n\t@HostListener('document:click', ['$event'])\n\tonDocumentClick(event: MouseEvent) {\n\t\tif (!this._elementRef.nativeElement.contains(event.target)) {\n\t\t\tif (this.isGoogleTranslateVisible()) {\n\t\t\t\tthis.isGoogleTranslateVisible.set(false);\n\t\t\t}\n\t\t}\n\t}\n\n\t@HostListener('click')\n\tshowGoogleTranslate(): void {\n\t\tthis.isGoogleTranslateVisible.set(true);\n\t\tthis._analyticsService.logEvent('google_translate_toggle', {});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.setupGoogleTranslate();\n\t}\n\n\tprivate setupGoogleTranslate(): void {\n\t\tconst translateElement = document.getElementById('google_translate_element');\n\t\tif (!translateElement) {\n\t\t\tconsole.error('Google Translate Element not found');\n\t\t\treturn;\n\t\t}\n\t\tnew window.google.translate.TranslateElement({ pageLanguage: 'en' }, 'google_translate_element');\n\t}\n}\n","Translate Page\ntranslate\n
\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, HostBinding, inject, OnInit } from '@angular/core';\nimport { WindowScrollService, LoadableComponent, ComponentLoaderService } from 'nha-services';\nimport { UserMenuComponent } from '../user-menu/user-menu.component';\nimport { GoogleTranslateToggleComponent } from '../google-translate-toggle/google-translate-toggle.component';\nimport { Device } from '@capacitor/device';\n\n@Component({\n\tstandalone: true,\n\timports: [CommonModule, UserMenuComponent, GoogleTranslateToggleComponent],\n\tselector: 'app-page-banner',\n\ttemplateUrl: './page-banner.component.html',\n\tstyleUrl: './page-banner.component.scss'\n})\nexport class PageBannerComponent implements OnInit {\n\tprivate _scrollY = inject(WindowScrollService).scrollY;\n\n\t@HostBinding('class.pinned')\n\tprivate _pinned = false;\n\n\t@HostBinding('class.ios')\n\tisIOS = false;\n\n\tprivate _componentLoaderService = inject(ComponentLoaderService);\n\n\tpublic mainContentComponent!: LoadableComponent;\n\tpublic menuContentComponent!: LoadableComponent;\n\n\tconstructor() {\n\t\tlet lastScroll = 0;\n\n\t\tthis._componentLoaderService.addContainer('banner-main-content');\n\t\tthis._componentLoaderService.addContainer('banner-menu-content');\n\n\t\teffect(() => {\n\t\t\tconst dmPageBanner = document.querySelector('app-page-banner') as HTMLElement;\n\n\t\t\tif (!dmPageBanner) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst dmPageBannerHeight = dmPageBanner.clientHeight;\n\t\t\tconst spacingTop = dmPageBanner.clientHeight;\n\t\t\tconst dmPageBannerParent = dmPageBanner.parentElement as HTMLElement;\n\t\t\tconst dmPageBannerParentRect = dmPageBannerParent.getBoundingClientRect();\n\n\t\t\tdmPageBanner.style.top = `${dmPageBannerHeight * -1}px`;\n\n\t\t\tif (this._scrollY() === 0 || (lastScroll < this._scrollY() && this._scrollY() > dmPageBannerHeight)) {\n\t\t\t\t// at the top or scrolling down\n\t\t\t\tthis._pinned = false;\n\t\t\t\tdmPageBannerParent.style.paddingTop = `0px`;\n\t\t\t}\n\n\t\t\tif (this._scrollY() > 0 && lastScroll > this._scrollY() && this._scrollY() > dmPageBannerHeight) {\n\t\t\t\t// scrolling up\n\t\t\t\tthis._pinned = true;\n\t\t\t\tdmPageBannerParent.style.paddingTop = `${spacingTop}px`;\n\t\t\t\tdmPageBanner.style.left = `${dmPageBannerParentRect.left}px`;\n\t\t\t\tdmPageBanner.style.right = `${dmPageBannerParentRect.left}px`;\n\t\t\t}\n\n\t\t\tlastScroll = this._scrollY();\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tDevice.getInfo().then((info) => {\n\t\t\tthis.isIOS = info.platform === 'ios';\n\t\t});\n\n\t\tthis.mainContentComponent = this._componentLoaderService.getContainer('banner-main-content');\n\t\tthis.menuContentComponent = this._componentLoaderService.getContainer('banner-menu-content');\n\t}\n}\n","
\n\t\n
\n
\n\t\n\t\n\t\n
\n\n","export var AppUpdateAvailability = /*#__PURE__*/function (AppUpdateAvailability) {\n AppUpdateAvailability[AppUpdateAvailability[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n AppUpdateAvailability[AppUpdateAvailability[\"UPDATE_NOT_AVAILABLE\"] = 1] = \"UPDATE_NOT_AVAILABLE\";\n AppUpdateAvailability[AppUpdateAvailability[\"UPDATE_AVAILABLE\"] = 2] = \"UPDATE_AVAILABLE\";\n AppUpdateAvailability[AppUpdateAvailability[\"UPDATE_IN_PROGRESS\"] = 3] = \"UPDATE_IN_PROGRESS\";\n return AppUpdateAvailability;\n}(AppUpdateAvailability || {});\nexport var FlexibleUpdateInstallStatus = /*#__PURE__*/function (FlexibleUpdateInstallStatus) {\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"PENDING\"] = 1] = \"PENDING\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"DOWNLOADING\"] = 2] = \"DOWNLOADING\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"INSTALLING\"] = 3] = \"INSTALLING\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"INSTALLED\"] = 4] = \"INSTALLED\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"FAILED\"] = 5] = \"FAILED\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"CANCELED\"] = 6] = \"CANCELED\";\n FlexibleUpdateInstallStatus[FlexibleUpdateInstallStatus[\"DOWNLOADED\"] = 11] = \"DOWNLOADED\";\n return FlexibleUpdateInstallStatus;\n}(FlexibleUpdateInstallStatus || {});\nexport var AppUpdateResultCode = /*#__PURE__*/function (AppUpdateResultCode) {\n /**\n * The user has accepted the update.\n */\n AppUpdateResultCode[AppUpdateResultCode[\"OK\"] = 0] = \"OK\";\n /**\n * The user has denied or cancelled the update.\n */\n AppUpdateResultCode[AppUpdateResultCode[\"CANCELED\"] = 1] = \"CANCELED\";\n /**\n * Some other error prevented either the user from providing consent or the update to proceed.\n */\n AppUpdateResultCode[AppUpdateResultCode[\"FAILED\"] = 2] = \"FAILED\";\n /**\n * No update available.\n */\n AppUpdateResultCode[AppUpdateResultCode[\"NOT_AVAILABLE\"] = 3] = \"NOT_AVAILABLE\";\n /**\n * Update type not allowed.\n */\n AppUpdateResultCode[AppUpdateResultCode[\"NOT_ALLOWED\"] = 4] = \"NOT_ALLOWED\";\n /**\n * App update info missing.\n * You must call `getAppUpdateInfo()` before requesting an update.\n */\n AppUpdateResultCode[AppUpdateResultCode[\"INFO_MISSING\"] = 5] = \"INFO_MISSING\";\n return AppUpdateResultCode;\n}(AppUpdateResultCode || {});\n\n","import { registerPlugin } from '@capacitor/core';\nconst AppUpdate = registerPlugin('AppUpdate', {\n web: () => import('./web').then(m => new m.AppUpdateWeb())\n});\nexport * from './definitions';\nexport { AppUpdate };\n","import { Injectable, signal } from '@angular/core';\nimport { Capacitor } from '@capacitor/core';\nimport { AppUpdate, AppUpdateAvailability } from '@capawesome/capacitor-app-update';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AppVersionStateService {\n\tcurrentAppVersion = signal(null);\n\tavailableAppVersion = signal(null);\n\tcurrentPlatform = signal(Capacitor.getPlatform());\n\n\tgetCurrentAppVersion = async () => {\n\t\tconst result = await AppUpdate.getAppUpdateInfo();\n\t\tif (this.currentPlatform() === 'android') {\n\t\t\tthis.currentAppVersion.set(result.currentVersionCode);\n\t\t} else {\n\t\t\tthis.currentAppVersion.set(result.currentVersionName ?? null);\n\t\t}\n\t};\n\n\tgetAvailableAppVersion = async () => {\n\t\tconst result = await AppUpdate.getAppUpdateInfo();\n\t\tif (this.currentPlatform() === 'android') {\n\t\t\tthis.availableAppVersion.set(result.availableVersionCode ?? null);\n\t\t} else {\n\t\t\tthis.availableAppVersion.set(result.availableVersionName ?? null);\n\t\t}\n\t};\n\n\tperformUpdate = async () => {\n\t\tconst availableVersion = this.availableAppVersion();\n\t\tconst currentVersion = this.currentAppVersion();\n\n\t\tif (!availableVersion || !currentVersion) {\n\t\t\tconsole.warn('App versions are not available.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst updateAvailable = availableVersion !== currentVersion;\n\n\t\tif (this.currentPlatform() === 'android' && updateAvailable) {\n\t\t\tthis.performImmediateUpdate();\n\t\t} else if (updateAvailable) {\n\t\t\tthis.openAppStore();\n\t\t}\n\t};\n\n\topenAppStore = async () => {\n\t\tawait AppUpdate.openAppStore();\n\t};\n\n\t//Only available on Android\n\tperformImmediateUpdate = async () => {\n\t\tconst result = await AppUpdate.getAppUpdateInfo();\n\t\tif (result.updateAvailability !== AppUpdateAvailability.UPDATE_AVAILABLE) {\n\t\t\treturn;\n\t\t}\n\t\tif (result.immediateUpdateAllowed) {\n\t\t\tawait AppUpdate.performImmediateUpdate();\n\t\t}\n\t};\n\n\t//THIS IS FOR FLEXIBLE UPDATES - Disabled for now\n\t// //Only available on Android\n\t// startFlexibleUpdate = async () => {\n\t// \tconst result = await AppUpdate.getAppUpdateInfo();\n\t// \tif (result.updateAvailability !== AppUpdateAvailability.UPDATE_AVAILABLE) {\n\t// \t\treturn;\n\t// \t}\n\t// \tif (result.flexibleUpdateAllowed) {\n\t// \t\tawait AppUpdate.startFlexibleUpdate();\n\t// \t}\n\t// };\n\n\t// //Only available on Adroid\n\t// completeFlexibleUpdate = async () => {\n\t// \tawait AppUpdate.completeFlexibleUpdate();\n\t// };\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { Device } from '@capacitor/device';\nimport { AnalyticsService } from '@nha/analytics/analytics.service';\nimport { AppContainerComponent } from '@nha/components/app-container/app-container.component';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { catchError, filter, Observable } from 'rxjs';\nimport { ContentBoxComponent } from '../../../../libs/components/content-box/content-box.component';\nimport { LoginComponent } from './pages/login/login.component';\nimport { PageBaseComponent } from './pages/page-base.component';\nimport { PageBannerComponent } from './shared/components/page-banner/page-banner.component';\nimport { StudentStateService } from './shared/state';\nimport { AppVersionStateService } from './shared/state/app-version-state.service';\nimport { UserStateService } from './shared/state/user.state';\nimport { IStudent } from './shared/types/istudent.interface';\nimport { IGuardianUser, IUser } from './shared/types/iuser.interface';\n\n@Component({\n\tstandalone: true,\n\timports: [RouterModule, MatButtonModule, MatIconModule, AppContainerComponent, PageBannerComponent, LoginComponent, ContentBoxComponent],\n\tselector: 'app-root',\n\ttemplateUrl: './app.component.html',\n\tstyleUrl: './app.component.scss'\n})\nexport class AppComponent extends PageBaseComponent implements OnInit {\n\tprivate _userStateService: UserStateService = inject(UserStateService);\n\tprivate _studentStateService: StudentStateService = inject(StudentStateService);\n\tprivate _appVersionStateService: AppVersionStateService = inject(AppVersionStateService);\n\n\tprivate _router: Router = inject(Router);\n\tprivate activeRoute: ActivatedRoute = inject(ActivatedRoute);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n\tprivate _appSettings = inject(APP_CONFIG);\n\n\tprivate _user$: Observable = toObservable(this._userStateService.user).pipe(\n\t\tfilter((user) => user !== undefined),\n\t\tcatchError((err) => {\n\t\t\treturn [];\n\t\t}),\n\t\ttakeUntilDestroyed()\n\t);\n\n\tprivate _currentStudent$: Observable = toObservable(this._studentStateService.currentStudent).pipe(\n\t\tfilter((student) => student !== undefined),\n\t\ttakeUntilDestroyed()\n\t);\n\n\tpublic failedToLoad = this._userStateService.failedToLoad;\n\n\tngOnInit(): void {\n\t\tDevice.getInfo().then((info) => {\n\t\t\tif (info.platform !== 'web') {\n\t\t\t\tconst trueStr = this._appSettings.forceUpdateEnabled === 'true';\n\t\t\t\tif (trueStr) {\n\t\t\t\t\tthis._appVersionStateService.performUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (this.isLoggedIn) {\n\t\t\tthis._userStateService.loadUser();\n\t\t\tthis._user$.subscribe((user) => {\n\t\t\t\tif (user.userType === 'guardian') {\n\t\t\t\t\tthis._analyticsService.setUserData(user.userGuid, 'guardian', !(user as IGuardianUser).doNotTrack);\n\t\t\t\t}\n\n\t\t\t\tif (user.userType === 'student') {\n\t\t\t\t\tthis._analyticsService.setUserData(user.userGuid, 'student', true);\n\t\t\t\t}\n\n\t\t\t\tif (['student', 'guardian'].includes(user.userType)) {\n\t\t\t\t\tthis._studentStateService.loadStudents();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._currentStudent$.subscribe((student) => {\n\t\t\t\tconst sisRecord = this._studentStateService.primaryStudentInSchool(student.studentID)();\n\t\t\t\tthis._analyticsService.logActiveStudent({\n\t\t\t\t\tstudentID: student?.studentID,\n\t\t\t\t\tacademicYear: sisRecord?.academicYearID,\n\t\t\t\t\tschoolName: sisRecord?.schoolName\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tthis._router.events.pipe(filter((evt) => evt instanceof NavigationEnd)).subscribe((evt: NavigationEnd) => {\n\t\t\tlet activePageTitle = '';\n\t\t\tlet child = this.activeRoute.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tif (child.snapshot?.routeConfig?.title) {\n\t\t\t\t\tif (activePageTitle === '') {\n\t\t\t\t\t\tactivePageTitle = child.snapshot.routeConfig.title.toString();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactivePageTitle += ' - ' + child.snapshot.routeConfig.title.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tchild = child.firstChild;\n\t\t\t}\n\n\t\t\tthis._analyticsService.logPageView(activePageTitle, evt.urlAfterRedirects);\n\t\t});\n\t}\n}\n","\n \n \n\n @if(failedToLoad()) {\n
\n \n cloud_off\n Unable to load your profile information.\n Please check your internet connection and try again.\n \n
\n }\n\n \n
\n
\n\n","/**\n * @license Angular v18.2.1\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, ɵChangeDetectionScheduler, ɵRuntimeError, Injectable, ɵperformanceMarkFeature, makeEnvironmentProviders, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2 } from '@angular/platform-browser';\nconst ANIMATION_PREFIX = '@';\nlet AsyncAnimationRendererFactory = /*#__PURE__*/(() => {\n class AsyncAnimationRendererFactory {\n /**\n *\n * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)\n */\n constructor(doc, delegate, zone, animationType, moduleImpl) {\n this.doc = doc;\n this.delegate = delegate;\n this.zone = zone;\n this.animationType = animationType;\n this.moduleImpl = moduleImpl;\n this._rendererFactoryPromise = null;\n this.scheduler = inject(ɵChangeDetectionScheduler, {\n optional: true\n });\n }\n /** @nodoc */\n ngOnDestroy() {\n // When the root view is removed, the renderer defers the actual work to the\n // `TransitionAnimationEngine` to do this, and the `TransitionAnimationEngine` doesn't actually\n // remove the DOM node, but just calls `markElementAsRemoved()`. The actual DOM node is not\n // removed until `TransitionAnimationEngine` \"flushes\".\n // Note: we already flush on destroy within the `InjectableAnimationEngine`. The injectable\n // engine is not provided when async animations are used.\n this._engine?.flush();\n }\n /**\n * @internal\n */\n loadImpl() {\n // Note on the `.then(m => m)` part below: Closure compiler optimizations in g3 require\n // `.then` to be present for a dynamic import (or an import should be `await`ed) to detect\n // the set of imported symbols.\n const moduleImpl = this.moduleImpl ?? import('@angular/animations/browser').then(m => m);\n return moduleImpl.catch(e => {\n throw new ɵRuntimeError(5300 /* RuntimeErrorCode.ANIMATION_RENDERER_ASYNC_LOADING_FAILURE */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Async loading for animations package was ' + 'enabled, but loading failed. Angular falls back to using regular rendering. ' + \"No animations will be displayed and their styles won't be applied.\");\n }).then(({\n ɵcreateEngine,\n ɵAnimationRendererFactory\n }) => {\n // We can't create the renderer yet because we might need the hostElement and the type\n // Both are provided in createRenderer().\n this._engine = ɵcreateEngine(this.animationType, this.doc);\n const rendererFactory = new ɵAnimationRendererFactory(this.delegate, this._engine, this.zone);\n this.delegate = rendererFactory;\n return rendererFactory;\n });\n }\n /**\n * This method is delegating the renderer creation to the factories.\n * It uses default factory while the animation factory isn't loaded\n * and will rely on the animation factory once it is loaded.\n *\n * Calling this method will trigger as side effect the loading of the animation module\n * if the renderered component uses animations.\n */\n createRenderer(hostElement, rendererType) {\n const renderer = this.delegate.createRenderer(hostElement, rendererType);\n if (renderer.ɵtype === 0 /* AnimationRendererType.Regular */) {\n // The factory is already loaded, this is an animation renderer\n return renderer;\n }\n // We need to prevent the DomRenderer to throw an error because of synthetic properties\n if (typeof renderer.throwOnSyntheticProps === 'boolean') {\n renderer.throwOnSyntheticProps = false;\n }\n // Using a dynamic renderer to switch the renderer implementation once the module is loaded.\n const dynamicRenderer = new DynamicDelegationRenderer(renderer);\n // Kick off the module loading if the component uses animations but the module hasn't been\n // loaded yet.\n if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {\n this._rendererFactoryPromise = this.loadImpl();\n }\n this._rendererFactoryPromise?.then(animationRendererFactory => {\n const animationRenderer = animationRendererFactory.createRenderer(hostElement, rendererType);\n dynamicRenderer.use(animationRenderer);\n this.scheduler?.notify(9 /* NotificationSource.AsyncAnimationsLoaded */);\n }).catch(e => {\n // Permanently use regular renderer when loading fails.\n dynamicRenderer.use(renderer);\n });\n return dynamicRenderer;\n }\n begin() {\n this.delegate.begin?.();\n }\n end() {\n this.delegate.end?.();\n }\n whenRenderingDone() {\n return this.delegate.whenRenderingDone?.() ?? Promise.resolve();\n }\n static {\n this.ɵfac = function AsyncAnimationRendererFactory_Factory(__ngFactoryType__) {\n i0.ɵɵinvalidFactory();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AsyncAnimationRendererFactory,\n factory: AsyncAnimationRendererFactory.ɵfac\n });\n }\n }\n return AsyncAnimationRendererFactory;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The class allows to dynamicly switch between different renderer implementations\n * by changing the delegate renderer.\n */\nclass DynamicDelegationRenderer {\n constructor(delegate) {\n this.delegate = delegate;\n // List of callbacks that need to be replayed on the animation renderer once its loaded\n this.replay = [];\n this.ɵtype = 1 /* AnimationRendererType.Delegated */;\n }\n use(impl) {\n this.delegate = impl;\n if (this.replay !== null) {\n // Replay queued actions using the animation renderer to apply\n // all events and properties collected while loading was in progress.\n for (const fn of this.replay) {\n fn(impl);\n }\n // Set to `null` to indicate that the queue was processed\n // and we no longer need to collect events and properties.\n this.replay = null;\n }\n }\n get data() {\n return this.delegate.data;\n }\n destroy() {\n this.replay = null;\n this.delegate.destroy();\n }\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n createComment(value) {\n return this.delegate.createComment(value);\n }\n createText(value) {\n return this.delegate.createText(value);\n }\n get destroyNode() {\n return this.delegate.destroyNode;\n }\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n }\n insertBefore(parent, newChild, refChild, isMove) {\n this.delegate.insertBefore(parent, newChild, refChild, isMove);\n }\n removeChild(parent, oldChild, isHostElement) {\n this.delegate.removeChild(parent, oldChild, isHostElement);\n }\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n parentNode(node) {\n return this.delegate.parentNode(node);\n }\n nextSibling(node) {\n return this.delegate.nextSibling(node);\n }\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n addClass(el, name) {\n this.delegate.addClass(el, name);\n }\n removeClass(el, name) {\n this.delegate.removeClass(el, name);\n }\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n setProperty(el, name, value) {\n // We need to keep track of animation properties set on default renderer\n // So we can also set them also on the animation renderer\n if (this.shouldReplay(name)) {\n this.replay.push(renderer => renderer.setProperty(el, name, value));\n }\n this.delegate.setProperty(el, name, value);\n }\n setValue(node, value) {\n this.delegate.setValue(node, value);\n }\n listen(target, eventName, callback) {\n // We need to keep track of animation events registred by the default renderer\n // So we can also register them against the animation renderer\n if (this.shouldReplay(eventName)) {\n this.replay.push(renderer => renderer.listen(target, eventName, callback));\n }\n return this.delegate.listen(target, eventName, callback);\n }\n shouldReplay(propOrEventName) {\n //`null` indicates that we no longer need to collect events and properties\n return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);\n }\n}\n\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * When you use this function instead of the eager `provideAnimations()`, animations won't be\n * rendered until the renderer is loaded.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimationsAsync()\n * ]\n * });\n * ```\n *\n * @param type pass `'noop'` as argument to disable animations.\n *\n * @publicApi\n */\nfunction provideAnimationsAsync(type = 'animations') {\n ɵperformanceMarkFeature('NgAsyncAnimations');\n return makeEnvironmentProviders([{\n provide: RendererFactory2,\n useFactory: (doc, renderer, zone) => {\n return new AsyncAnimationRendererFactory(doc, renderer, zone, type);\n },\n deps: [DOCUMENT, ɵDomRendererFactory2, NgZone]\n }, {\n provide: ANIMATION_MODULE_TYPE,\n useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations'\n }]);\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { provideAnimationsAsync, AsyncAnimationRendererFactory as ɵAsyncAnimationRendererFactory };\n","import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { APP_CONFIG, IAppSettings } from '../config/interfaces/iapp-settings.interface';\nimport { AnalyticsService } from './analytics.service';\n\n// Declare gTM dataLayer array.\ndeclare global {\n\tinterface Window {\n\t\tdataLayer: any[];\n\t\tgtag: any;\n\t}\n}\n\nexport function provideAnalytics(): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: APP_INITIALIZER,\n\t\t\tmulti: true,\n\t\t\tuseFactory: (config: IAppSettings, service: AnalyticsService) => {\n\t\t\t\treturn async () => {\n\t\t\t\t\tawait service.initialize(config?.analytics?.streamID, config?.analytics?.enabled || false);\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [APP_CONFIG, AnalyticsService]\n\t\t}\n\t]);\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n\tselector: 'app-unauthorized',\n\tstandalone: true,\n\timports: [CommonModule],\n\ttemplate: `

Unauthorized!

`,\n\tstyles: ``\n})\nexport class UnauthorizedComponent {}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Signal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { catchError, map, switchMap } from 'rxjs';\nimport { CalendarService } from '../../services/api/calendar.service';\nimport { StudentStateService } from '../../state';\nimport { ICalendarPdf } from '../../types/icalendar-pdf.interface';\nimport { IStudent } from '../../types/istudent.interface';\n\n@Component({\n\tselector: 'app-calendar-pdf-button',\n\tstandalone: true,\n\timports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule],\n\ttemplateUrl: './calendar-pdf-button.component.html'\n})\nexport class CalendarPdfButtonComponent {\n\tprivate _studentStateService = inject(StudentStateService);\n\tprivate _calendarService: CalendarService = inject(CalendarService);\n\n\tpublic calendarPdfs: Signal<{ schoolID: number; schoolName: string; calendar: ICalendarPdf }[] | undefined> = toSignal(\n\t\ttoObservable(this._studentStateService.students).pipe(\n\t\t\tswitchMap((students: IStudent[]) => {\n\t\t\t\tconst uniqueSchools: { schoolID: number; schoolName: string }[] = [];\n\t\t\t\tstudents\n\t\t\t\t\t.flatMap((x) => x.studentInSchoolRecords)\n\t\t\t\t\t.forEach((sisRecord) => {\n\t\t\t\t\t\tconst schoolID: number = sisRecord.schoolID;\n\t\t\t\t\t\tconst schoolName: string = sisRecord.schoolShortName;\n\n\t\t\t\t\t\tif (!uniqueSchools.find((school) => school.schoolID === schoolID)) {\n\t\t\t\t\t\t\tuniqueSchools.push({ schoolID: schoolID, schoolName: schoolName });\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tif (uniqueSchools.length === 0) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\treturn this._calendarService.getCalendarPdfForSchools(uniqueSchools.map((school) => school.schoolID)).pipe(\n\t\t\t\t\tmap((calendarPdfs: { schoolID: number; calendar: ICalendarPdf }[]) => {\n\t\t\t\t\t\tconst schoolCalendarPdfs: { schoolID: number; schoolName: string; calendar: ICalendarPdf }[] = [];\n\n\t\t\t\t\t\tcalendarPdfs\n\t\t\t\t\t\t\t.filter((x) => x.calendar)\n\t\t\t\t\t\t\t.forEach((pdf) => {\n\t\t\t\t\t\t\t\tschoolCalendarPdfs.push({\n\t\t\t\t\t\t\t\t\tschoolID: pdf.schoolID,\n\t\t\t\t\t\t\t\t\tschoolName: uniqueSchools.find((school) => school.schoolID === pdf.schoolID)?.schoolName || '',\n\t\t\t\t\t\t\t\t\tcalendar: pdf.calendar\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn schoolCalendarPdfs;\n\t\t\t\t\t}),\n\t\t\t\t\tcatchError((error) => {\n\t\t\t\t\t\tconsole.error('Error getting calendar pdfs', error);\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t})\n\t\t)\n\t);\n}\n","@let calendarPdfLinks = calendarPdfs();\n@if (calendarPdfLinks && calendarPdfLinks.length === 1) {\n\t\n\t\t Download Calendar \n\t\tdownload\n\t\n}\n@if (calendarPdfLinks && calendarPdfLinks.length > 1) {\n\t\n\t\n\t\t@for (pdf of calendarPdfs(); track pdf.schoolID) {\n\t\t\t {{ pdf.schoolName }} Calendar \n\t\t}\n\t\n}","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\n\n@Component({\n\tselector: 'app-feedback-btn',\n\tstandalone: true,\n\timports: [CommonModule, MatButtonModule, MatIconModule, ContentBoxComponent, HeaderComponent],\n\ttemplateUrl: './feedback-btn.component.html',\n\tstyleUrl: './feedback-btn.component.scss'\n})\nexport class FeedbackBtnComponent {\n\tprivate _appSettings = inject(APP_CONFIG);\n\n\tpublic feedBackURL: string = this._appSettings.hotjarFeedbackURL;\n}\n","\n\tmood\n\tFeedback\n\n\tShare Feedback\n\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '@nha/api/http-service.class';\nimport { ScholarApiConfiguration } from './scholar-api.configuration';\nimport { Observable } from 'rxjs';\nimport { ITodoContext } from '../../types/itodo-context.interface';\nimport { ITodo } from '../../types/itodo.interface';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class TodoService extends HttpService {\n\tconstructor(config: ScholarApiConfiguration) {\n\t\tsuper(config, 'todo');\n\t}\n\n\tgetTodos(context: ITodoContext): Observable[]> {\n\t\tconst queryString = (Object.keys(context) as (keyof ITodoContext)[]).map((key) => `${key}=${context[key]}`).join('&');\n\t\treturn this.http.get[]>(`${this.serviceUrl}?${queryString}`);\n\t}\n\n\tgetTodosForMultipleContexts(contexts: ITodoContext[]): Observable[]> {\n\t\treturn this.http.post[]>(`${this.serviceUrl}`, contexts);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { ITodo } from '../../../../types/itodo.interface';\n\n@Component({\n\tselector: 'app-basic-todo',\n\tstandalone: true,\n\timports: [CommonModule, ContentBoxComponent],\n\ttemplateUrl: './basic-todo.component.html',\n\tstyleUrl: './basic-todo.component.scss'\n})\nexport class BasicTodoComponent {\n\tpublic todo: InputSignal> = input.required();\n}\n","\n\t
{{ todo().title }}
\n\t
{{ todo().description }}
\n
\n\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, InputSignal, Signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { UserIconComponent } from '../../../../../../../../../libs/components/user-icon/user-icon.component';\nimport { StudentStateService } from '../../../../state';\nimport { FormsStateService } from '../../../../state/forms-state.service';\nimport { ITodo } from '../../../../types/itodo.interface';\n\ninterface IFormCompletionTodoData {\n\tstudentInSchoolID: number;\n\tstudentID: number;\n\tstudentName: string;\n\tstudentImage: string;\n\tschoolID: number;\n\tschoolName: string;\n\tacademicYearID: number;\n\tacademicYearName: string;\n\tformsCompleted: number;\n\ttotalForms: number;\n}\n\n@Component({\n\tselector: 'app-form-completion-todo',\n\tstandalone: true,\n\timports: [CommonModule, RouterModule, ContentBoxComponent, MatButtonModule, MatChipsModule, MatIconModule, UserIconComponent],\n\ttemplateUrl: './form-completion-todo.component.html',\n\tstyleUrl: './form-completion-todo.component.scss'\n})\nexport class FormCompletionTodoComponent {\n\tpublic todo: InputSignal> = input.required();\n\n\tprivate _studentState = inject(StudentStateService);\n\tprivate _formState = inject(FormsStateService);\n\n\tgetStudentFormsLink: Signal = computed(() => {\n\t\tconst todoStudentInSchoolID = this.todo().data.studentInSchoolID;\n\t\tconst student = this._studentState.student(todoStudentInSchoolID)();\n\n\t\treturn `/student/${student?.studentID}/${todoStudentInSchoolID}/forms`;\n\t});\n}\n","\n\t\n\t
{{ todo().data.schoolName }}
\n\t
{{ todo().description }}
\n\n\t
\n\t\t
\n\t\t \n\t\t \n\t\t {{ todo().data.studentName }}\n\t\t
\n\t\t\n\t
\n\t
\n
","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { ITodo } from '../../../../types/itodo.interface';\n\ninterface IVopSurveyData {\n\tschoolID: number;\n\tschoolName: string;\n\tsurveyLink: string;\n}\n\n@Component({\n\tselector: 'app-vop-survey-todo',\n\tstandalone: true,\n\timports: [CommonModule, MatChipsModule, ContentBoxComponent, MatIconModule],\n\ttemplateUrl: './vop-survey-todo.component.html',\n\tstyleUrl: './vop-survey-todo.component.scss'\n})\nexport class VopSurveyTodoComponent {\n\tpublic todo: InputSignal> = input.required();\n}\n","\n\t\n\t
{{ todo().data.schoolName }}
\n\t
\n\t\tComplete the Voice of the Parent survey\n\t\topen_in_new\n\t
\n\t
\n
\n","import { CommonModule } from '@angular/common';\nimport { Component, HostBinding, inject, signal, Type, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { distinctUntilChanged, filter } from 'rxjs';\nimport { TodoService } from '../../services/api/todo.service';\nimport { StudentStateService } from '../../state/student-state.service';\nimport { IStudentInSchoolRecord } from '../../types/istudent.interface';\nimport { ITodoContext } from '../../types/itodo-context.interface';\nimport { ITodo } from '../../types/itodo.interface';\nimport { BasicTodoComponent } from './components/basic-todo/basic-todo.component';\nimport { FormCompletionTodoComponent } from './components/form-completion-todo/form-completion-todo.component';\nimport { VopSurveyTodoComponent } from './components/vop-survey-todo/vop-survey-todo.component';\n\n@Component({\n\tselector: 'app-todos',\n\tstandalone: true,\n\timports: [CommonModule, HeaderComponent],\n\ttemplateUrl: './todos.component.html',\n\tstyleUrl: './todos.component.scss'\n})\nexport class TodosComponent {\n\tprivate _studentStateService: StudentStateService = inject(StudentStateService);\n\tprivate _todoService: TodoService = inject(TodoService);\n\n\tpublic todos: WritableSignal[]> = signal([]);\n\n\tpublic basicTodoComponent: Type = BasicTodoComponent as Type;\n\n\tpublic todoComponentMap: Record> = {\n\t\tformCompletionTodo: FormCompletionTodoComponent as Type,\n\t\tvoiceOfTheParentTodo: VopSurveyTodoComponent as Type,\n\t\tbasicTodo: this.basicTodoComponent\n\t};\n\n\t@HostBinding('hidden') public get hidden(): boolean {\n\t\treturn this.todos().length === 0;\n\t}\n\n\tconstructor() {\n\t\ttoObservable(this._studentStateService.students)\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t\tfilter((students) => students.length > 0),\n\t\t\t\tdistinctUntilChanged((s1, s2) => {\n\t\t\t\t\tconst s1StudentInSchools = s1.flatMap((x) => x.studentInSchoolRecords);\n\t\t\t\t\tconst s2StudentInSchools = s2.flatMap((x) => x.studentInSchoolRecords);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\ts1StudentInSchools.length === s2StudentInSchools.length &&\n\t\t\t\t\t\ts1StudentInSchools.every((student, index) => student.studentInSchoolID === s2StudentInSchools[index].studentInSchoolID)\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t)\n\t\t\t.subscribe((students) => {\n\t\t\t\tconst contexts: ITodoContext[] = [];\n\t\t\t\tconst sisRecords: IStudentInSchoolRecord[] = [];\n\n\t\t\t\tstudents\n\t\t\t\t\t.flatMap((x) => x.studentInSchoolRecords)\n\t\t\t\t\t.filter((sis) => sis.formsAvailable && [2, 6, 9].includes(sis.masterStatusID))\n\t\t\t\t\t.forEach((studentInSchoolRecord) => {\n\t\t\t\t\t\tsisRecords.push(studentInSchoolRecord);\n\t\t\t\t\t\tcontexts.push({ studentInSchoolID: studentInSchoolRecord.studentInSchoolID, schoolID: studentInSchoolRecord.schoolID });\n\t\t\t\t\t});\n\n\t\t\t\tthis._todoService.getTodosForMultipleContexts(contexts).subscribe((data) => {\n\t\t\t\t\tconst updatedTodos = this.handleVOP(data, sisRecords);\n\t\t\t\t\tthis.todos.set(updatedTodos);\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tprivate handleVOP(data: any[], sisRecords: IStudentInSchoolRecord[]) {\n\t\tconst voiceOfTheParentTodos = data.filter((x) => x.componentKey === 'voiceOfTheParentTodo');\n\n\t\tconst remainingTodos = data.filter((x) => x.componentKey !== 'voiceOfTheParentTodo');\n\n\t\t//Only show schools with a Enrolled or Reenrolled student\n\t\tconst schoolIDsWithEnrolledStudents = sisRecords.filter((x) => [2, 9].includes(x.masterStatusID)).map((x) => x.schoolID);\n\t\tconst filteredVop = voiceOfTheParentTodos.filter((x) => schoolIDsWithEnrolledStudents.includes(x.data.schoolID));\n\n\t\tconst uniqueVoiceOfTheParentTodos = Array.from(new Map(filteredVop.map((todo: any) => [todo.data.schoolID, todo])).values());\n\t\treturn [...uniqueVoiceOfTheParentTodos, ...remainingTodos];\n\t}\n}\n","To Dos\n\n@for (todo of todos(); track $index) {\n\t\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { SafeUrlPipe } from '@nha/pipe/safe-url.pipe';\nimport { catchError, switchMap } from 'rxjs';\nimport { SchoolService } from '../../services/api/school.service';\nimport { StudentStateService } from '../../state';\n\n@Component({\n\tselector: 'app-training-dialog',\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tContentBoxComponent,\n\t\tMatIconModule,\n\t\tHeaderComponent,\n\t\tSafeUrlPipe,\n\t\tMatDialogModule,\n\t\tMatCheckboxModule,\n\t\tMatButtonModule,\n\t\tContentBoxComponent\n\t],\n\ttemplateUrl: './training-dialog.component.html',\n\tstyleUrl: './training-dialog.component.scss'\n})\nexport class TrainingDialogComponent {\n\tprivate _studentStateService = inject(StudentStateService);\n\tprivate _schoolService = inject(SchoolService);\n\tprivate _dialogRef = inject(MatDialogRef);\n\tprivate appSettings = inject(APP_CONFIG);\n\n\tpublic trainingVideo = this.appSettings.trainingVideoLink;\n\n\ttrainingLinkUrls = toSignal(\n\t\ttoObservable(this._studentStateService.studentSchoolIDs).pipe(\n\t\t\ttakeUntilDestroyed(),\n\t\t\tswitchMap((schoolIDs) => {\n\t\t\t\tif (schoolIDs.length > 0) {\n\t\t\t\t\treturn this._schoolService.getInPersonTrainingLinks(schoolIDs);\n\t\t\t\t} else {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tcatchError((error) => {\n\t\t\t\treturn [];\n\t\t\t})\n\t\t)\n\t);\n\n\tpublic trainingLinkData = computed<{ url: string; text: string }[] | null>(() => {\n\t\tconst students = this._studentStateService.students();\n\t\tconst urls = this.trainingLinkUrls();\n\n\t\tif (!urls || !Object.values(urls).some(Boolean)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst schools = Object.entries(urls)\n\t\t\t.map(([key, href]) => {\n\t\t\t\tconst schoolID = Number(key);\n\t\t\t\tconst student = students.flatMap((x) => x.studentInSchoolRecords).find((x) => x.schoolID === schoolID);\n\t\t\t\treturn student ? { name: student.schoolShortName, href } : null;\n\t\t\t})\n\t\t\t.filter(Boolean) as { name: string; href: string }[];\n\n\t\tif (!schools.length) return null;\n\n\t\tconst data = schools.map(({ name, href }) => ({\n\t\t\turl: href,\n\t\t\ttext: name\n\t\t}));\n\n\t\treturn data;\n\t});\n\n\tonClose() {\n\t\tthis._dialogRef.close(true);\n\t}\n}\n","\n\t
\n\t\t@if (trainingVideo) {\n\t\t\t\n\t\t}\n\t
\n\t
\n\t\tWelcome to Parent Portal\n\t\t@if (trainingLinkData() === null || trainingLinkData()?.length === 0) {\n\t\t\t

Please watch the training video above to learn more about the Parent Portal. You can also access this video later in your user profile.

\n\t\t} @else {\n\t\t\t

\n\t\t\t\tPlease watch the training video above to learn more about the Parent Portal. You can also access this video later in your user profile. Are you\n\t\t\t\tinterested in touring our school? Click the button below, we would love to show you around!\n\t\t\t

\n\t\t}\n\n\t\t
\n\t\t\t@if (trainingLinkData()) {\n\t\t\t\t
\n\t\t\t\t\t@for (link of trainingLinkData(); track $index) {\n\t\t\t\t\t\t Schedule a tour at {{ link.text }} \n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t}\n\n\t\t\t\n\t\t
\n\t
\n
\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, InputSignal, OnInit, Signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ChipComponent } from '@nha/components/chip/chip.component';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { AttendanceStateService } from '../../state';\nimport { IAttendanceSummary } from '../../types/iattendance-summary.interface';\nimport { IStudent, IStudentInSchoolRecord } from '../../types/istudent.interface';\nimport { NotificationsComponent } from '../notifications/notifications.component';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n\tselector: 'app-student-card',\n\tstandalone: true,\n\timports: [CommonModule, RouterModule, ContentBoxComponent, MatIconModule, HeaderComponent, ChipComponent, NotificationsComponent],\n\ttemplateUrl: './student-card.component.html',\n\tstyleUrl: './student-card.component.scss'\n})\nexport class StudentCardComponent implements OnInit {\n\tprivate _attendanceStateService: AttendanceStateService = inject(AttendanceStateService);\n\n\tpublic student: InputSignal = input.required();\n\tpublic studentInSchool = input.required();\n\n\tpublic attendance: Signal;\n\tpublic formattedAcademicYear: string;\n\n\tngOnInit(): void {\n\t\tthis.attendance = this._attendanceStateService.overallAttendanceSummaryForStudent(this.studentInSchool().studentInSchoolID);\n\n\t\tconst studentInSchoolID = this.studentInSchool()?.studentInSchoolID?.toString() || undefined;\n\n\t\tif (studentInSchoolID && !Object.keys(this._attendanceStateService.overallAttendance()).includes(studentInSchoolID)) {\n\t\t\tthis._attendanceStateService.loadOverallAttendance(this.studentInSchool().studentInSchoolID);\n\t\t}\n\n\t\tif (this.studentInSchool().academicYearID) {\n\t\t\tthis.formattedAcademicYear = this.formatNextAcademicYear(this.studentInSchool().academicYearID);\n\t\t}\n\t}\n\n\tformatNextAcademicYear(academicYearID: number): string {\n\t\tconst nextAcademicYearNum = academicYearID + 1;\n\t\treturn academicYearID + '-' + nextAcademicYearNum.toString().substring(2);\n\t}\n}\n","\n\t\n\t\t
\n\t\t\t\"student\"\n\t\t
\n\n\t\t
\n\t\t\t{{ student().firstName }}\n\n\t\t\t{{ studentInSchool().schoolShortName }}\n\n\t\t\t
\n\t\t\t\t{{ studentInSchool().gradeLevelName }}\n\t\t\t
\n\n\t\t\tID: {{ student().externalStudentID }}\n\t\t
\n\n\t\t \n\n\t\t
\n\t\t\t
\n\t\t\t\t{{ studentInSchool().masterStatusDescription }} • {{ formattedAcademicYear }}\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\t
    \n\t\t\t\t\t\tevent_busy\n\t\t\t\t\t
    \n\t\t\t\t\tAbsences: {{ attendance().absent }}\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\t
    \n\t\t\t\t\t\tav_timer\n\t\t\t\t\t
    \n\t\t\t\t\tTardies: {{ attendance().tardy }}\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\t
    \n\t\t\t\t\t\trestaurant_menu\n\t\t\t\t\t
    \n\t\t\t\t\tMeal Balance: {{ studentInSchool().mealBalance | currency }}\n\t\t\t\t
  • \n\t\t\t
\n\t\t
\n\t
\n
\n","import { AfterViewInit, Component, computed, ElementRef, inject, Signal, signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StudentCardComponent } from '../student-card/student-card.component';\nimport { IStudent, IStudentInSchoolRecord } from '../../types/istudent.interface';\nimport { StudentStateService } from '../../state/student-state.service';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { HeaderComponent } from '../../../../../../../libs/components/header/header.component';\nimport { LoaderComponent } from '../loader/loader.component';\n\n@Component({\n\tselector: 'app-student-list',\n\tstandalone: true,\n\timports: [CommonModule, StudentCardComponent, ContentBoxComponent, HeaderComponent, LoaderComponent],\n\ttemplateUrl: './student-list.component.html',\n\tstyleUrl: './student-list.component.scss'\n})\nexport class StudentListComponent implements AfterViewInit {\n\tprivate _studentState: StudentStateService = inject(StudentStateService);\n\tprivate _studentListEl: ElementRef = inject(ElementRef);\n\tprivate _studentList: HTMLElement;\n\tprivate _dotNav: HTMLElement;\n\tprivate _scrolling: boolean = false;\n\n\tpublic loading: Signal = this._studentState.loadingStudents;\n\tpublic students: Signal<{ student: IStudent; primaryStudentInSchool: IStudentInSchoolRecord | undefined }[]> = computed(() =>\n\t\tthis._studentState.students().map((s) => ({ student: s, primaryStudentInSchool: this._studentState.primaryStudentInSchool(s.studentID)() }))\n\t);\n\tpublic activeIndex: WritableSignal = signal(0);\n\n\tngAfterViewInit(): void {\n\t\tthis._studentList = this._studentListEl.nativeElement.querySelector('.student-list');\n\t\tthis._dotNav = this._studentListEl.nativeElement.querySelector('.dot-nav');\n\n\t\tthis.toggleDotNav();\n\t\twindow.onresize = () => {\n\t\t\tthis.toggleDotNav();\n\t\t\tthis.activateDotOnScroll();\n\t\t};\n\n\t\tthis._studentList.onscroll = () => this.activateDotOnScroll();\n\t}\n\n\ttoggleDotNav(): void {\n\t\tthis._dotNav.classList.remove('active');\n\t\tif (this._studentList.scrollWidth > this._studentList.offsetWidth) {\n\t\t\tthis._dotNav.classList.add('active');\n\t\t}\n\t}\n\n\tscrollIntoView(index: number): void {\n\t\tthis._scrolling = true;\n\t\tthis.activeIndex.set(index);\n\t\tdocument.querySelector(`#student_${index}`)?.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n\t\tsetTimeout(() => (this._scrolling = false), 500);\n\t}\n\n\tactivateStudentCard(index: number): void {\n\t\tif (this._scrolling) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activeIndex.set(index);\n\t}\n\n\tactivateDotOnScroll(): void {\n\t\tif (this._scrolling) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst maxScrollLeft = this._studentList.scrollWidth - this._studentList.clientWidth;\n\t\tconst scrollLeft = this._studentList.scrollLeft;\n\t\tconst split = maxScrollLeft / this.students().length;\n\t\tlet splitStart = 0;\n\t\tlet splitStop = split + 1;\n\n\t\tfor (let index = 0; index < this.students().length; index++) {\n\t\t\tif (scrollLeft >= splitStart && scrollLeft < splitStop) {\n\t\t\t\tthis.activeIndex.set(index);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tsplitStart += split;\n\t\t\tsplitStop += split;\n\t\t}\n\t}\n}\n","
\n\t@if (loading()) {\n\t\t\n\t} @else {\n\t\t@for (studentInfo of students(); track $index) {\n\t\t\t@if (studentInfo.primaryStudentInSchool) {\n\t\t\t\t\n\t\t\t}\n\t\t} @empty {\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\tNo Student Information\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Student information is no longer available on this account. This may be due to graduation, withdraw, or because the student was removed from the list.

\n\t\t\t\t\t\t\t

If you think there is a mistake, please contact us.

\n\t\t\t\t\t\t\t (877) 642-7471\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t}\n\t}\n
\n\n
\n\t@for (student of students(); track $index) {\n\t\t
\n\t}\n\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { StudentListComponent } from '../../../../shared/components/student-list/student-list.component';\nimport { ILoadableComponent } from 'nha-services';\n@Component({\n\tselector: 'app-home-header',\n\tstandalone: true,\n\timports: [CommonModule, HeaderComponent, StudentListComponent],\n\ttemplateUrl: './home-header.component.html',\n\tstyleUrl: './home-header.component.scss'\n})\nexport class HomeHeaderComponent implements ILoadableComponent {}\n","NHA Parent Portal\n\n\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnDestroy, OnInit, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { RouterLink, RouterModule } from '@angular/router';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { RightContentPageTemplateComponent } from '@nha/components/page-templates/right-content-page-template/right-content-page-template.component';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { ComponentLoaderService } from 'nha-services';\nimport { catchError, switchMap } from 'rxjs';\nimport { ContentBoxComponent } from '../../../../../../libs/components/content-box/content-box.component';\nimport { CalendarPdfButtonComponent } from '../../shared/components/calendar-pdf-button/calendar-pdf-button.component';\nimport { EventListComponent } from '../../shared/components/event-list/event-list.component';\nimport { FeedbackBtnComponent } from '../../shared/components/feedback-btn/feedback-btn.component';\nimport { QuickLink, QuickLinksComponent } from '../../shared/components/quick-links/quick-links.component';\nimport { TodosComponent } from '../../shared/components/todos/todos.component';\nimport { TrainingDialogComponent } from '../../shared/components/training-dialog/training-dialog.component';\nimport { StudentInSchoolMasterStatus } from '../../shared/enums/student-in-school-master-status.enum';\nimport { formsQuickLinkBuild } from '../../shared/functions/forms-quick-link-build.function';\nimport { SchoolService } from '../../shared/services/api/school.service';\nimport { StudentStateService } from '../../shared/state';\nimport { UserStateService } from '../../shared/state/user.state';\nimport { IStudent } from '../../shared/types/istudent.interface';\nimport { PageBaseComponent } from '../page-base.component';\nimport { HomeHeaderComponent } from './components/home-header/home-header.component';\n\n@Component({\n\tselector: 'app-home',\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule,\n\t\tRightContentPageTemplateComponent,\n\t\tHeaderComponent,\n\t\tQuickLinksComponent,\n\t\tTodosComponent,\n\t\tRouterLink,\n\t\tFeedbackBtnComponent,\n\t\tEventListComponent,\n\t\tCalendarPdfButtonComponent,\n\t\tContentBoxComponent,\n\t\tMatButtonModule,\n\t\tTrainingDialogComponent\n\t],\n\ttemplateUrl: './home.component.html',\n\tstyleUrls: ['./home.component.scss']\n})\nexport class HomeComponent extends PageBaseComponent implements OnInit, OnDestroy {\n\tprivate _appSettings = inject(APP_CONFIG);\n\tprivate _userStateService = inject(UserStateService);\n\tprivate _studentStateService = inject(StudentStateService);\n\tprivate _schoolService = inject(SchoolService);\n\tprivate _dialog = inject(MatDialog);\n\tprivate _componentLoaderService: ComponentLoaderService = inject(ComponentLoaderService);\n\n\tcrmWaitlistUrl = computed(() => {\n\t\tconst anyStudentsWaitlisted = this._studentStateService\n\t\t\t.students()\n\t\t\t.flatMap((x) => x.studentInSchoolRecords)\n\t\t\t.some((student) => student.masterStatusID === StudentInSchoolMasterStatus.WaitList);\n\t\tif (!anyStudentsWaitlisted) {\n\t\t\treturn '';\n\t\t}\n\t\tconst guardianGuid = this._userStateService.user()?.userGuid;\n\t\treturn `${this._appSettings.crmWaitlistUrl}${guardianGuid}`;\n\t});\n\n\tbeforeAndAfterSchoolCareDict = toSignal(\n\t\ttoObservable(this._studentStateService.studentSchoolIDs).pipe(\n\t\t\ttakeUntilDestroyed(),\n\t\t\tswitchMap((schoolIDs) => {\n\t\t\t\tif (schoolIDs.length > 0) {\n\t\t\t\t\treturn this._schoolService.getBeforeAndAfterSchoolCare(schoolIDs);\n\t\t\t\t} else {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tcatchError((error) => {\n\t\t\t\treturn [];\n\t\t\t})\n\t\t)\n\t);\n\n\tlunchMealURLsDict = toSignal(\n\t\ttoObservable(this._studentStateService.studentSchoolIDs).pipe(\n\t\t\ttakeUntilDestroyed(),\n\t\t\tswitchMap((schoolIDs) => {\n\t\t\t\tif (schoolIDs.length > 0) {\n\t\t\t\t\treturn this._schoolService.getSchoolMealsURLs(schoolIDs);\n\t\t\t\t} else {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tcatchError((error) => {\n\t\t\t\treturn [];\n\t\t\t})\n\t\t)\n\t);\n\n\tprivate lunchMenuQuickLinks = computed(() => {\n\t\tconst students = this._studentStateService.students();\n\t\tconst urls = this.lunchMealURLsDict();\n\n\t\tif (!urls || !Object.values(urls).some(Boolean)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst schools = Object.entries(urls)\n\t\t\t.map(([key, href]) => {\n\t\t\t\tconst schoolID = Number(key);\n\t\t\t\tconst student = students.flatMap((x) => x.studentInSchoolRecords).find((x) => x.schoolID === schoolID);\n\t\t\t\treturn student ? { name: student.schoolShortName, href } : null;\n\t\t\t})\n\t\t\t.filter(Boolean) as { name: string; href: string }[];\n\n\t\tif (!schools.length) return null;\n\n\t\tif (schools.length === 1) {\n\t\t\tconst { name, href } = schools[0];\n\t\t\treturn {\n\t\t\t\ttitle: 'School Meals',\n\t\t\t\ticon: 'restaurant_menu',\n\t\t\t\tcontent: name,\n\t\t\t\ttype: 'secondary',\n\t\t\t\thref: href,\n\t\t\t\ttarget: '_blank'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttitle: 'School Meals',\n\t\t\ticon: 'restaurant_menu',\n\t\t\tcontent: 'Select a school meal menu',\n\t\t\ttype: 'secondary',\n\t\t\tlinks: schools.map(({ name, href }) => ({\n\t\t\t\tcontent: name,\n\t\t\t\thref: href,\n\t\t\t\ttarget: '_blank'\n\t\t\t}))\n\t\t};\n\t});\n\n\tprivate getSchoolNameBySchoolID(schoolID: number): string {\n\t\tconst students = this._studentStateService.students();\n\n\t\treturn students.flatMap((x) => x.studentInSchoolRecords).find((x) => x.schoolID === schoolID)!.schoolName;\n\t}\n\n\tprivate beforeAndAfterSchoolLinks = computed(() => {\n\t\tconst afterSchoolCareStatus = this.beforeAndAfterSchoolCareDict();\n\t\tconst students = this._studentStateService.students().flatMap((x) => x.studentInSchoolRecords);\n\n\t\tif (!afterSchoolCareStatus || !Object.values(afterSchoolCareStatus).some(Boolean)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst link: QuickLink = {\n\t\t\ttitle: 'Before and After School Care',\n\t\t\ticon: 'launch',\n\t\t\tcontent: 'Check out our great options!',\n\t\t\ttype: 'secondary',\n\t\t\tlinks: []\n\t\t};\n\n\t\tconst trueKeys = Object.entries(afterSchoolCareStatus)\n\t\t\t.filter(([_, value]) => value)\n\t\t\t.map(([key]) => Number(key));\n\n\t\t//Only get Accepted or Enrolled students that go to a school that Before and After school care exists for\n\t\tconst filteredStudents = students.filter((student) => [2, 6].includes(student.masterStatusID) && trueKeys.includes(student.schoolID));\n\n\t\tconst today = new Date();\n\t\tconst data = filteredStudents.filter((student) => {\n\t\t\tconst firstDay = new Date(student.firstDayOfSchool);\n\t\t\tconst oneWeekBefore = new Date(firstDay.setDate(firstDay.getDate() - 7)); // 1 week before first day of school\n\t\t\tconst twoWeeksAfter = new Date(firstDay.setDate(firstDay.getDate() + 14)); // 2 weeks after first day of school\n\n\t\t\treturn (oneWeekBefore <= today && today <= twoWeeksAfter) || student.masterStatusID === 6; //between the dates or Accepted status\n\t\t});\n\n\t\tif (data.length > 1) {\n\t\t\tconst uniqueSchoolIDs = new Set(data.map((x) => x.schoolID));\n\t\t\tuniqueSchoolIDs.forEach((schoolID) => {\n\t\t\t\tconst schoolName = this.getSchoolNameBySchoolID(schoolID);\n\t\t\t\tlink.links!.push({\n\t\t\t\t\tcontent: schoolName,\n\t\t\t\t\thref: `${this._appSettings.cmsBaseUrl}/schools/${schoolName.toLowerCase().replace(/ /g, '-')}/en/before-and-after-school-care`,\n\t\t\t\t\ttarget: '_blank'\n\t\t\t\t});\n\t\t\t});\n\t\t} else if (data.length == 1) {\n\t\t\tlink.content = filteredStudents[0].schoolName;\n\t\t\tlink.href = `${this._appSettings.cmsBaseUrl}/schools/${filteredStudents[0].schoolName.toLowerCase().replace(/ /g, '-')}/en/before-and-after-school-care`;\n\t\t\tlink.target = '_blank';\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn link;\n\t});\n\n\tprivate formsQuickLink = computed(() => {\n\t\tconst students = this._studentStateService.students();\n\t\treturn formsQuickLinkBuild(students, 'green', () => this._userStateService.user()?.userType !== 'student');\n\t});\n\n\tpublic showReEnrollmentAlert: Signal = this._studentStateService.showReEnrollmentAlert;\n\tpublic students: Signal = this._studentStateService.students;\n\n\tpublic quickLinks: Signal = computed(() => {\n\t\tconst quicklinks: QuickLink[] = [];\n\n\t\tif (this.students().length > 0) {\n\t\t\tquicklinks.push({\n\t\t\t\ttitle: 'School Connect',\n\t\t\t\tcontent: 'Communicate with school',\n\t\t\t\ticon: 'forum',\n\t\t\t\ttype: 'blue',\n\t\t\t\thref: this._appSettings.schoolConnectURL,\n\t\t\t\ttarget: '_blank',\n\t\t\t\trouterLink: ''\n\t\t\t});\n\n\t\t\tconst lunchMenuQuickLinks = this.lunchMenuQuickLinks();\n\t\t\tif (lunchMenuQuickLinks) {\n\t\t\t\tquicklinks.push(lunchMenuQuickLinks);\n\t\t\t}\n\n\t\t\tconst formsQuickLink = this.formsQuickLink();\n\t\t\tif (formsQuickLink) {\n\t\t\t\tquicklinks.push(formsQuickLink);\n\t\t\t}\n\n\t\t\tconst beforeAndAfterSchoolLinks = this.beforeAndAfterSchoolLinks();\n\t\t\tif (beforeAndAfterSchoolLinks) {\n\t\t\t\tquicklinks.push(beforeAndAfterSchoolLinks);\n\t\t\t}\n\n\t\t\tquicklinks.push({\n\t\t\t\ttitle: 'Volunteer',\n\t\t\t\tcontent: 'Opportunities to help',\n\t\t\t\ticon: 'volunteer_activism',\n\t\t\t\ttype: 'orange',\n\t\t\t\trouterLink: '/volunteer'\n\t\t\t});\n\n\t\t\tquicklinks.push({\n\t\t\t\ttitle: 'Moving out of the area?',\n\t\t\t\tcontent: 'Check out our other NHA school locations.',\n\t\t\t\ticon: 'work',\n\t\t\t\ttype: 'green',\n\t\t\t\ttarget: '_blank',\n\t\t\t\thref: `${this._appSettings.cmsBaseUrl}/en/moving`\n\t\t\t});\n\t\t}\n\n\t\treturn quicklinks;\n\t});\n\n\topenTrainingDialog() {\n\t\tconst dialogRef = this._dialog.open(TrainingDialogComponent, {\n\t\t\twidth: '900px'\n\t\t});\n\n\t\tdialogRef.afterClosed().subscribe((dismissed: boolean) => {\n\t\t\tif (dismissed) {\n\t\t\t\tlocalStorage.setItem('trainingDialogDismissed', 'true');\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\t//Resets the current student when navigating back to the home page\n\t\tthis._studentStateService.currentStudentInSchoolID.set(0);\n\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(HomeHeaderComponent);\n\n\t\tlet trainingDialogDismissed = localStorage.getItem('trainingDialogDismissed');\n\n\t\tif (trainingDialogDismissed === null) {\n\t\t\tlocalStorage.setItem('trainingDialogDismissed', 'false');\n\t\t\ttrainingDialogDismissed = 'false';\n\t\t}\n\n\t\tif (trainingDialogDismissed === 'false') {\n\t\t\tthis.openTrainingDialog();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(null);\n\t}\n}\n","
\n\t@if (this.showReEnrollmentAlert()) {\n\t\t\n\t\t\tConfirm your family's return for next school year!\n\t\t\t

Click here to secure your spot and share your intent to return.

\n\t\t\t\n\t\t
\n\t}\n\n\t@if (this.crmWaitlistUrl()) {\n\t\t\n\t\t\tYour Student Is On A Waitlist\n\t\t\t

Click here to review your current waitlist status.

\n\t\t\t Check Status \n\t\t
\n\t}\n
\n\n\n\n\n\t
\n\t\t\n\t\t\n\t
\n\n\t
\n\t\tCalendar\n\n\t\t\n\t
\n\n\t\n
\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { HeaderComponent } from '@nha/components/header/header.component';\n\n@Component({\n\tselector: 'app-page-title',\n\tstandalone: true,\n\timports: [CommonModule, RouterModule, HeaderComponent, MatIconModule],\n\ttemplateUrl: './page-title.component.html',\n\tstyleUrls: ['./page-title.component.scss']\n})\nexport class PageTitleComponent {\n\tpublic title: InputSignal = input.required();\n\tpublic backRoute: InputSignal = input();\n}\n","\n\tarrow_circle_left\n\n{{ title() }}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnDestroy, OnInit, signal, WritableSignal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterModule } from '@angular/router';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { LeftContentPageTemplateComponent } from '@nha/components/page-templates/left-content-page-template/left-content-page-template.component';\nimport { ComponentLoaderService } from 'nha-services';\nimport { filter, take } from 'rxjs';\nimport { PageTitleComponent } from '../../shared/components/page-title/page-title.component';\nimport { FormsStateService } from '../../shared/state/forms-state.service';\nimport { IFormDefinition } from '../../shared/types/istudent-form.interface';\nimport { VolunteerTrainingComponent } from '../student/forms/form/types/volunteer/components/volunteer-training/volunteer-training.component';\nimport { VolunteerSchool } from '../student/forms/form/types/volunteer/volunteer-school.type';\nimport { VolunteerFormComponent } from '../student/forms/form/types/volunteer/volunteer.component';\n\n@Component({\n\tselector: 'app-volunteer',\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule,\n\t\tLeftContentPageTemplateComponent,\n\t\tHeaderComponent,\n\t\tContentBoxComponent,\n\t\tMatButtonModule,\n\t\tVolunteerFormComponent,\n\t\tVolunteerTrainingComponent\n\t],\n\ttemplateUrl: './volunteer.component.html',\n\tstyleUrls: ['./volunteer.component.scss']\n})\nexport class VolunteerComponent implements OnInit, OnDestroy {\n\tprivate _formStateService: FormsStateService = inject(FormsStateService);\n\tprivate _componentLoaderService: ComponentLoaderService = inject(ComponentLoaderService);\n\n\tpublic volunteerFormDefinitionID: WritableSignal = signal(0);\n\n\tpublic volunteerSchool: WritableSignal = signal(null);\n\n\tconstructor() {\n\t\ttoObservable(this._formStateService.studentFormDefinitions)\n\t\t\t.pipe(\n\t\t\t\tfilter((forms) => forms !== undefined && forms.length > 0),\n\t\t\t\ttake(1)\n\t\t\t)\n\t\t\t.subscribe((forms) => {\n\t\t\t\tconst volunteerForm = (forms as IFormDefinition[]).find((f) => f.formName === 'Volunteer Form');\n\t\t\t\tif (volunteerForm) {\n\t\t\t\t\tthis.volunteerFormDefinitionID.set(volunteerForm.formDefinitionID);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(PageTitleComponent);\n\t\tthis._componentLoaderService.getContainer('banner-main-content').inputs.set({ title: 'Volunteer', backRoute: '/' });\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(null);\n\t\tthis._componentLoaderService.getContainer('banner-main-content').inputs.set({});\n\t}\n\n\tschoolSelected(volunteerSchool: VolunteerSchool): void {\n\t\tthis.volunteerSchool.set(volunteerSchool);\n\t}\n}\n","\n\t\n\t\t
\n\t\t\t
\n\t\t\t\tInterested In Volunteering?\n\t\t\t\t
\n\t\t\t\t\t\"Volunteer\"\n\n\t\t\t\t\tOur schools and community are built on the partnership and involvement of amazing parents and guardians. We are stronger together. Whether\n\t\t\t\t\tyou're working side-by-side with your child, leading a field trip, or volunteering in our offices, we value your help and know your child\n\t\t\t\t\twill appreciate having you there.
\n\t\t\t\t\t
\n\t\t\t\t\tIf you’re interested in serving as a volunteer, please let us know as soon as possible. Paperwork and background checks can take time to\n\t\t\t\t\tprocess -- and we wouldn’t want you to miss out on your requested opportunity!
\n\t\t\t\t\t
\n\n\t\t\t\t\tSign Up To Volunteer\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\tVolunteer Requirements\n\t\t\t\t
\n\t\t\t\t\tSafety is our highest priority. We have established different levels of security based on the volunteer work you will be doing. Based on\n\t\t\t\t\twhat volunteer opportunities are of interest to you, review the levels below to understand the security requirements and the necessary forms\n\t\t\t\t\tyou will need to complete.\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
01
\n\t\t\t\t\tLevel 1\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tVolunteers can work in classrooms and the office, but cannot handle money. A school employee will always supervise the volunteer.\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tRequirements\n\t\t\t\t\t
    \n\t\t\t\t\t\t
  • Volunteer Authorization Release Form
  • \n\t\t\t\t\t\t
  • State-Issued Photo ID
  • \n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
02
\n\t\t\t\t\tLevel 2\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tField trip chaperones, drivers, recess monitors are Level 2. A school employee or Level 3 volunteer provides limited supervision to the\n\t\t\t\t\tvolunteer.\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tRequirements\n\t\t\t\t\t
    \n\t\t\t\t\t\t
  • Volunteer Authorization Release Form
  • \n\t\t\t\t\t\t
  • State-Issued Photo ID
  • \n\t\t\t\t\t\t
  • Background Check
  • \n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
03
\n\t\t\t\t\tLevel 3\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tVolunteers can work with students with no direct supervision. They can chaperone overnight field trips and tutor students.\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tRequirements\n\t\t\t\t\t
    \n\t\t\t\t\t\t
  • Volunteer Authorization Release Form
  • \n\t\t\t\t\t\t
  • State-Issued Photo ID
  • \n\t\t\t\t\t\t
  • Background Check
  • \n\t\t\t\t\t\t
  • Fingerprints
  • \n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\n\t\t\n\t
\n\n\t
\n\t\t
\n\t\t\tA Day In The Life...\n\t\t\t\n\t\t
\n\t\t\n\t\t@if (volunteerSchool(); as volunteerSchool) {\n\t\t\t\n\t\t}\n\t
\n
\n","import { Component, inject, Signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ILoadableComponent } from 'nha-services';\nimport { UserBannerInfoComponent } from '../../../../shared/components/user-banner-info/user-banner-info.component';\nimport { UserStateService } from '../../../../shared/state/user.state';\nimport { IStaffUser } from '../../../../shared/types/iuser.interface';\n\n@Component({\n\tselector: 'app-staff-header',\n\tstandalone: true,\n\timports: [CommonModule, UserBannerInfoComponent],\n\ttemplateUrl: './staff-header.component.html',\n\tstyleUrl: './staff-header.component.scss'\n})\nexport class StaffHeaderComponent implements ILoadableComponent {\n\tprivate _userStateService: UserStateService = inject(UserStateService);\n\n\tpublic user = this._userStateService.user as Signal;\n}\n","@let staffUser = user();\n\n@if (staffUser) {\n\t\n\t\t\n\t\n}\n","import * as i1 from '@angular/cdk/bidi';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _ViewRepeaterOperation, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]], \"*\"];\nconst _c1 = [\"caption\", \"colgroup, col\", \"*\"];\nfunction CdkTable_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0, 2);\n }\n}\nfunction CdkTable_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"thead\", 0);\n i0.ɵɵelementContainer(1, 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"tbody\", 0);\n i0.ɵɵelementContainer(3, 2)(4, 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"tfoot\", 0);\n i0.ɵɵelementContainer(6, 4);\n i0.ɵɵelementEnd();\n }\n}\nfunction CdkTable_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 1)(1, 2)(2, 3)(3, 4);\n }\n}\nfunction CdkTextColumn_th_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.headerText, \" \");\n }\n}\nfunction CdkTextColumn_td_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const data_r2 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.dataAccessor(data_r2, ctx_r0.name), \" \");\n }\n}\nexport { DataSource } from '@angular/cdk/collections';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, booleanAttribute, Inject, Optional, Input, ContentChild, inject, NgZone, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, EmbeddedViewRef, EventEmitter, Injector, afterNextRender, Attribute, SkipSelf, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';\nimport { Subject, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nconst CDK_TABLE = /*#__PURE__*/new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\nconst TEXT_COLUMN_OPTIONS = /*#__PURE__*/new InjectionToken('text-column-options');\n\n/**\n * Cell definition for a CDK table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nlet CdkCellDef = /*#__PURE__*/(() => {\n class CdkCellDef {\n constructor( /** @docs-private */template) {\n this.template = template;\n }\n static {\n this.ɵfac = function CdkCellDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkCellDef,\n selectors: [[\"\", \"cdkCellDef\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header cell definition for a CDK table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nlet CdkHeaderCellDef = /*#__PURE__*/(() => {\n class CdkHeaderCellDef {\n constructor( /** @docs-private */template) {\n this.template = template;\n }\n static {\n this.ɵfac = function CdkHeaderCellDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkHeaderCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkHeaderCellDef,\n selectors: [[\"\", \"cdkHeaderCellDef\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkHeaderCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer cell definition for a CDK table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nlet CdkFooterCellDef = /*#__PURE__*/(() => {\n class CdkFooterCellDef {\n constructor( /** @docs-private */template) {\n this.template = template;\n }\n static {\n this.ɵfac = function CdkFooterCellDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkFooterCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkFooterCellDef,\n selectors: [[\"\", \"cdkFooterCellDef\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkFooterCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nlet CdkColumnDef = /*#__PURE__*/(() => {\n class CdkColumnDef {\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /** Whether the cell is sticky. */\n get sticky() {\n return this._sticky;\n }\n set sticky(value) {\n if (value !== this._sticky) {\n this._sticky = value;\n this._hasStickyChanged = true;\n }\n }\n /**\n * Whether this column should be sticky positioned on the end of the row. Should make sure\n * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\n * has been changed.\n */\n get stickyEnd() {\n return this._stickyEnd;\n }\n set stickyEnd(value) {\n if (value !== this._stickyEnd) {\n this._stickyEnd = value;\n this._hasStickyChanged = true;\n }\n }\n constructor(_table) {\n this._table = _table;\n this._hasStickyChanged = false;\n this._sticky = false;\n this._stickyEnd = false;\n }\n /** Whether the sticky state has changed. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this.resetStickyChanged();\n return hasStickyChanged;\n }\n /** Resets the sticky changed state. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n /**\n * Overridable method that sets the css classes that will be added to every cell in this\n * column.\n * In the future, columnCssClassName will change from type string[] to string and this\n * will set a single string value.\n * @docs-private\n */\n _updateColumnCssClassName() {\n this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setNameInput(value) {\n // If the directive is set without a name (updated programmatically), then this setter will\n // trigger with an empty string and should not overwrite the programmatically set value.\n if (value) {\n this._name = value;\n this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n this._updateColumnCssClassName();\n }\n }\n static {\n this.ɵfac = function CdkColumnDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkColumnDef)(i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkColumnDef,\n selectors: [[\"\", \"cdkColumnDef\", \"\"]],\n contentQueries: function CdkColumnDef_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, CdkCellDef, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkHeaderCellDef, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkFooterCellDef, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cell = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerCell = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.footerCell = _t.first);\n }\n },\n inputs: {\n name: [0, \"cdkColumnDef\", \"name\"],\n sticky: [2, \"sticky\", \"sticky\", booleanAttribute],\n stickyEnd: [2, \"stickyEnd\", \"stickyEnd\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: 'MAT_SORT_HEADER_COLUMN_DEF',\n useExisting: CdkColumnDef\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkColumnDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n constructor(columnDef, elementRef) {\n elementRef.nativeElement.classList.add(...columnDef._columnCssClassName);\n }\n}\n/** Header cell template container that adds the right classes and role. */\nlet CdkHeaderCell = /*#__PURE__*/(() => {\n class CdkHeaderCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n }\n static {\n this.ɵfac = function CdkHeaderCell_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkHeaderCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkHeaderCell,\n selectors: [[\"cdk-header-cell\"], [\"th\", \"cdk-header-cell\", \"\"]],\n hostAttrs: [\"role\", \"columnheader\", 1, \"cdk-header-cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkHeaderCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer cell template container that adds the right classes and role. */\nlet CdkFooterCell = /*#__PURE__*/(() => {\n class CdkFooterCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n const role = columnDef._table?._getCellRole();\n if (role) {\n elementRef.nativeElement.setAttribute('role', role);\n }\n }\n static {\n this.ɵfac = function CdkFooterCell_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkFooterCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkFooterCell,\n selectors: [[\"cdk-footer-cell\"], [\"td\", \"cdk-footer-cell\", \"\"]],\n hostAttrs: [1, \"cdk-footer-cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkFooterCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Cell template container that adds the right classes and role. */\nlet CdkCell = /*#__PURE__*/(() => {\n class CdkCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n const role = columnDef._table?._getCellRole();\n if (role) {\n elementRef.nativeElement.setAttribute('role', role);\n }\n }\n static {\n this.ɵfac = function CdkCell_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkCell,\n selectors: [[\"cdk-cell\"], [\"td\", \"cdk-cell\", \"\"]],\n hostAttrs: [1, \"cdk-cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @docs-private\n */\nclass _Schedule {\n constructor() {\n this.tasks = [];\n this.endTasks = [];\n }\n}\n/** Injection token used to provide a coalesced style scheduler. */\nconst _COALESCED_STYLE_SCHEDULER = /*#__PURE__*/new InjectionToken('_COALESCED_STYLE_SCHEDULER');\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\nlet _CoalescedStyleScheduler = /*#__PURE__*/(() => {\n class _CoalescedStyleScheduler {\n constructor(_unusedNgZone) {\n this._currentSchedule = null;\n this._ngZone = inject(NgZone);\n }\n /**\n * Schedules the specified task to run at the end of the current VM turn.\n */\n schedule(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.tasks.push(task);\n }\n /**\n * Schedules the specified task to run after other scheduled tasks at the end of the current\n * VM turn.\n */\n scheduleEnd(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.endTasks.push(task);\n }\n _createScheduleIfNeeded() {\n if (this._currentSchedule) {\n return;\n }\n this._currentSchedule = new _Schedule();\n this._ngZone.runOutsideAngular(() =>\n // TODO(mmalerba): Scheduling this using something that runs less frequently\n // (e.g. requestAnimationFrame, setTimeout, etc.) causes noticeable jank with the column\n // resizer. We should audit the usages of schedule / scheduleEnd in that component and see\n // if we can refactor it so that we don't need to flush the tasks quite so frequently.\n queueMicrotask(() => {\n while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) {\n const schedule = this._currentSchedule;\n // Capture new tasks scheduled by the current set of tasks.\n this._currentSchedule = new _Schedule();\n for (const task of schedule.tasks) {\n task();\n }\n for (const task of schedule.endTasks) {\n task();\n }\n }\n this._currentSchedule = null;\n }));\n }\n static {\n this.ɵfac = function _CoalescedStyleScheduler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || _CoalescedStyleScheduler)(i0.ɵɵinject(i0.NgZone));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: _CoalescedStyleScheduler,\n factory: _CoalescedStyleScheduler.ɵfac\n });\n }\n }\n return _CoalescedStyleScheduler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * The row template that can be used by the mat-table. Should not be used outside of the\n * material library.\n */\nconst CDK_ROW_TEMPLATE = ``;\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\nlet BaseRowDef = /*#__PURE__*/(() => {\n class BaseRowDef {\n constructor( /** @docs-private */template, _differs) {\n this.template = template;\n this._differs = _differs;\n }\n ngOnChanges(changes) {\n // Create a new columns differ if one does not yet exist. Initialize it based on initial value\n // of the columns property or an empty array if none is provided.\n if (!this._columnsDiffer) {\n const columns = changes['columns'] && changes['columns'].currentValue || [];\n this._columnsDiffer = this._differs.find(columns).create();\n this._columnsDiffer.diff(columns);\n }\n }\n /**\n * Returns the difference between the current columns and the columns from the last diff, or null\n * if there is no difference.\n */\n getColumnsDiff() {\n return this._columnsDiffer.diff(this.columns);\n }\n /** Gets this row def's relevant cell template from the provided column def. */\n extractCellTemplate(column) {\n if (this instanceof CdkHeaderRowDef) {\n return column.headerCell.template;\n }\n if (this instanceof CdkFooterRowDef) {\n return column.footerCell.template;\n } else {\n return column.cell.template;\n }\n }\n static {\n this.ɵfac = function BaseRowDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseRowDef,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return BaseRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nlet CdkHeaderRowDef = /*#__PURE__*/(() => {\n class CdkHeaderRowDef extends BaseRowDef {\n /** Whether the row is sticky. */\n get sticky() {\n return this._sticky;\n }\n set sticky(value) {\n if (value !== this._sticky) {\n this._sticky = value;\n this._hasStickyChanged = true;\n }\n }\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n this._hasStickyChanged = false;\n this._sticky = false;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n /** Whether the sticky state has changed. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this.resetStickyChanged();\n return hasStickyChanged;\n }\n /** Resets the sticky changed state. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n static {\n this.ɵfac = function CdkHeaderRowDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkHeaderRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkHeaderRowDef,\n selectors: [[\"\", \"cdkHeaderRowDef\", \"\"]],\n inputs: {\n columns: [0, \"cdkHeaderRowDef\", \"columns\"],\n sticky: [2, \"cdkHeaderRowDefSticky\", \"sticky\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return CdkHeaderRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nlet CdkFooterRowDef = /*#__PURE__*/(() => {\n class CdkFooterRowDef extends BaseRowDef {\n /** Whether the row is sticky. */\n get sticky() {\n return this._sticky;\n }\n set sticky(value) {\n if (value !== this._sticky) {\n this._sticky = value;\n this._hasStickyChanged = true;\n }\n }\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n this._hasStickyChanged = false;\n this._sticky = false;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n /** Whether the sticky state has changed. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this.resetStickyChanged();\n return hasStickyChanged;\n }\n /** Resets the sticky changed state. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n static {\n this.ɵfac = function CdkFooterRowDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkFooterRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkFooterRowDef,\n selectors: [[\"\", \"cdkFooterRowDef\", \"\"]],\n inputs: {\n columns: [0, \"cdkFooterRowDef\", \"columns\"],\n sticky: [2, \"cdkFooterRowDefSticky\", \"sticky\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return CdkFooterRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Data row definition for the CDK table.\n * Captures the header row's template and other row properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nlet CdkRowDef = /*#__PURE__*/(() => {\n class CdkRowDef extends BaseRowDef {\n // TODO(andrewseguin): Add an input for providing a switch function to determine\n // if this template should be used.\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n static {\n this.ɵfac = function CdkRowDef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkRowDef,\n selectors: [[\"\", \"cdkRowDef\", \"\"]],\n inputs: {\n columns: [0, \"cdkRowDefColumns\", \"columns\"],\n when: [0, \"cdkRowDefWhen\", \"when\"]\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nlet CdkCellOutlet = /*#__PURE__*/(() => {\n class CdkCellOutlet {\n /**\n * Static property containing the latest constructed instance of this class.\n * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n * createEmbeddedView. After one of these components are created, this property will provide\n * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n * construct the cells with the provided context.\n */\n static {\n this.mostRecentCellOutlet = null;\n }\n constructor(_viewContainer) {\n this._viewContainer = _viewContainer;\n CdkCellOutlet.mostRecentCellOutlet = this;\n }\n ngOnDestroy() {\n // If this was the last outlet being rendered in the view, remove the reference\n // from the static property after it has been destroyed to avoid leaking memory.\n if (CdkCellOutlet.mostRecentCellOutlet === this) {\n CdkCellOutlet.mostRecentCellOutlet = null;\n }\n }\n static {\n this.ɵfac = function CdkCellOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkCellOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkCellOutlet,\n selectors: [[\"\", \"cdkCellOutlet\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkCellOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nlet CdkHeaderRow = /*#__PURE__*/(() => {\n class CdkHeaderRow {\n static {\n this.ɵfac = function CdkHeaderRow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkHeaderRow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkHeaderRow,\n selectors: [[\"cdk-header-row\"], [\"tr\", \"cdk-header-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"cdk-header-row\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function CdkHeaderRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return CdkHeaderRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nlet CdkFooterRow = /*#__PURE__*/(() => {\n class CdkFooterRow {\n static {\n this.ɵfac = function CdkFooterRow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkFooterRow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkFooterRow,\n selectors: [[\"cdk-footer-row\"], [\"tr\", \"cdk-footer-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"cdk-footer-row\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function CdkFooterRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return CdkFooterRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nlet CdkRow = /*#__PURE__*/(() => {\n class CdkRow {\n static {\n this.ɵfac = function CdkRow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkRow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkRow,\n selectors: [[\"cdk-row\"], [\"tr\", \"cdk-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"cdk-row\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function CdkRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return CdkRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Row that can be used to display a message when no data is shown in the table. */\nlet CdkNoDataRow = /*#__PURE__*/(() => {\n class CdkNoDataRow {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._contentClassName = 'cdk-no-data-row';\n }\n static {\n this.ɵfac = function CdkNoDataRow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkNoDataRow)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkNoDataRow,\n selectors: [[\"ng-template\", \"cdkNoDataRow\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkNoDataRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\nconst STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\nclass StickyStyler {\n /**\n * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\n * that uses the native `` element.\n * @param _stickCellCss The CSS class that will be applied to every row/cell that has\n * sticky positioning applied.\n * @param direction The directionality context of the table (ltr/rtl); affects column positioning\n * by reversing left/right positions.\n * @param _isBrowser Whether the table is currently being rendered on the server or the client.\n * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells\n * using inline styles. If false, it is assumed that position: sticky is included in\n * the component stylesheet for _stickCellCss.\n * @param _positionListener A listener that is notified of changes to sticky rows/columns\n * and their dimensions.\n */\n constructor(_isNativeHtmlTable, _stickCellCss, direction, _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true, _positionListener) {\n this._isNativeHtmlTable = _isNativeHtmlTable;\n this._stickCellCss = _stickCellCss;\n this.direction = direction;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._isBrowser = _isBrowser;\n this._needsPositionStickyOnElement = _needsPositionStickyOnElement;\n this._positionListener = _positionListener;\n this._elemSizeCache = new WeakMap();\n this._resizeObserver = globalThis?.ResizeObserver ? new globalThis.ResizeObserver(entries => this._updateCachedSizes(entries)) : null;\n this._updatedStickyColumnsParamsToReplay = [];\n this._stickyColumnsReplayTimeout = null;\n this._cachedCellWidths = [];\n this._borderCellCss = {\n 'top': `${_stickCellCss}-border-elem-top`,\n 'bottom': `${_stickCellCss}-border-elem-bottom`,\n 'left': `${_stickCellCss}-border-elem-left`,\n 'right': `${_stickCellCss}-border-elem-right`\n };\n }\n /**\n * Clears the sticky positioning styles from the row and its cells by resetting the `position`\n * style, setting the zIndex to 0, and unsetting each provided sticky direction.\n * @param rows The list of rows that should be cleared from sticking in the provided directions\n * @param stickyDirections The directions that should no longer be set as sticky on the rows.\n */\n clearStickyPositioning(rows, stickyDirections) {\n if (stickyDirections.includes('left') || stickyDirections.includes('right')) {\n this._removeFromStickyColumnReplayQueue(rows);\n }\n const elementsToClear = [];\n for (const row of rows) {\n // If the row isn't an element (e.g. if it's an `ng-container`),\n // it won't have inline styles or `children` so we skip it.\n if (row.nodeType !== row.ELEMENT_NODE) {\n continue;\n }\n elementsToClear.push(row);\n for (let i = 0; i < row.children.length; i++) {\n elementsToClear.push(row.children[i]);\n }\n }\n // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n for (const element of elementsToClear) {\n this._removeStickyStyle(element, stickyDirections);\n }\n });\n }\n /**\n * Applies sticky left and right positions to the cells of each row according to the sticky\n * states of the rendered column definitions.\n * @param rows The rows that should have its set of cells stuck according to the sticky states.\n * @param stickyStartStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the start of the row.\n * @param stickyEndStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the end of the row.\n * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each\n * column cell. If `false` cached widths will be used instead.\n * @param replay Whether to enqueue this call for replay after a ResizeObserver update.\n */\n updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true, replay = true) {\n if (replay) {\n this._updateStickyColumnReplayQueue({\n rows: [...rows],\n stickyStartStates: [...stickyStartStates],\n stickyEndStates: [...stickyEndStates]\n });\n }\n if (!rows.length || !this._isBrowser || !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) {\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({\n sizes: []\n });\n this._positionListener.stickyEndColumnsUpdated({\n sizes: []\n });\n }\n return;\n }\n // Coalesce with sticky row updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n const firstRow = rows[0];\n const numCells = firstRow.children.length;\n const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n const lastStickyStart = stickyStartStates.lastIndexOf(true);\n const firstStickyEnd = stickyEndStates.indexOf(true);\n const isRtl = this.direction === 'rtl';\n const start = isRtl ? 'right' : 'left';\n const end = isRtl ? 'left' : 'right';\n for (const row of rows) {\n for (let i = 0; i < numCells; i++) {\n const cell = row.children[i];\n if (stickyStartStates[i]) {\n this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);\n }\n if (stickyEndStates[i]) {\n this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);\n }\n }\n }\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({\n sizes: lastStickyStart === -1 ? [] : cellWidths.slice(0, lastStickyStart + 1).map((width, index) => stickyStartStates[index] ? width : null)\n });\n this._positionListener.stickyEndColumnsUpdated({\n sizes: firstStickyEnd === -1 ? [] : cellWidths.slice(firstStickyEnd).map((width, index) => stickyEndStates[index + firstStickyEnd] ? width : null).reverse()\n });\n }\n });\n }\n /**\n * Applies sticky positioning to the row's cells if using the native table layout, and to the\n * row itself otherwise.\n * @param rowsToStick The list of rows that should be stuck according to their corresponding\n * sticky state and to the provided top or bottom position.\n * @param stickyStates A list of boolean states where each state represents whether the row\n * should be stuck in the particular top or bottom position.\n * @param position The position direction in which the row should be stuck if that row should be\n * sticky.\n *\n */\n stickRows(rowsToStick, stickyStates, position) {\n // Since we can't measure the rows on the server, we can't stick the rows properly.\n if (!this._isBrowser) {\n return;\n }\n // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n // (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n // If positioning the rows to the bottom, reverse their order when evaluating the sticky\n // position such that the last row stuck will be \"bottom: 0px\" and so on. Note that the\n // sticky states need to be reversed as well.\n const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;\n const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates;\n // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n const stickyOffsets = [];\n const stickyCellHeights = [];\n const elementsToStick = [];\n for (let rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n stickyOffsets[rowIndex] = stickyOffset;\n const row = rows[rowIndex];\n elementsToStick[rowIndex] = this._isNativeHtmlTable ? Array.from(row.children) : [row];\n const height = this._retrieveElementSize(row).height;\n stickyOffset += height;\n stickyCellHeights[rowIndex] = height;\n }\n const borderedRowIndex = states.lastIndexOf(true);\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n const offset = stickyOffsets[rowIndex];\n const isBorderedRowIndex = rowIndex === borderedRowIndex;\n for (const element of elementsToStick[rowIndex]) {\n this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n }\n }\n if (position === 'top') {\n this._positionListener?.stickyHeaderRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick\n });\n } else {\n this._positionListener?.stickyFooterRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick\n });\n }\n });\n }\n /**\n * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n * the tfoot element.\n */\n updateStickyFooterContainer(tableElement, stickyStates) {\n if (!this._isNativeHtmlTable) {\n return;\n }\n // Coalesce with other sticky updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n const tfoot = tableElement.querySelector('tfoot');\n if (tfoot) {\n if (stickyStates.some(state => !state)) {\n this._removeStickyStyle(tfoot, ['bottom']);\n } else {\n this._addStickyStyle(tfoot, 'bottom', 0, false);\n }\n }\n });\n }\n /**\n * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating\n * the zIndex, removing each of the provided sticky directions, and removing the\n * sticky position if there are no more directions.\n */\n _removeStickyStyle(element, stickyDirections) {\n for (const dir of stickyDirections) {\n element.style[dir] = '';\n element.classList.remove(this._borderCellCss[dir]);\n }\n // If the element no longer has any more sticky directions, remove sticky positioning and\n // the sticky CSS class.\n // Short-circuit checking element.style[dir] for stickyDirections as they\n // were already removed above.\n const hasDirection = STICKY_DIRECTIONS.some(dir => stickyDirections.indexOf(dir) === -1 && element.style[dir]);\n if (hasDirection) {\n element.style.zIndex = this._getCalculatedZIndex(element);\n } else {\n // When not hasDirection, _getCalculatedZIndex will always return ''.\n element.style.zIndex = '';\n if (this._needsPositionStickyOnElement) {\n element.style.position = '';\n }\n element.classList.remove(this._stickCellCss);\n }\n }\n /**\n * Adds the sticky styling to the element by adding the sticky style class, changing position\n * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\n * direction and value.\n */\n _addStickyStyle(element, dir, dirValue, isBorderElement) {\n element.classList.add(this._stickCellCss);\n if (isBorderElement) {\n element.classList.add(this._borderCellCss[dir]);\n }\n element.style[dir] = `${dirValue}px`;\n element.style.zIndex = this._getCalculatedZIndex(element);\n if (this._needsPositionStickyOnElement) {\n element.style.cssText += 'position: -webkit-sticky; position: sticky; ';\n }\n }\n /**\n * Calculate what the z-index should be for the element, depending on what directions (top,\n * bottom, left, right) have been set. It should be true that elements with a top direction\n * should have the highest index since these are elements like a table header. If any of those\n * elements are also sticky in another direction, then they should appear above other elements\n * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\n * (e.g. footer rows) should then be next in the ordering such that they are below the header\n * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\n * should minimally increment so that they are above non-sticky elements but below top and bottom\n * elements.\n */\n _getCalculatedZIndex(element) {\n const zIndexIncrements = {\n top: 100,\n bottom: 10,\n left: 1,\n right: 1\n };\n let zIndex = 0;\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n for (const dir of STICKY_DIRECTIONS) {\n if (element.style[dir]) {\n zIndex += zIndexIncrements[dir];\n }\n }\n return zIndex ? `${zIndex}` : '';\n }\n /** Gets the widths for each cell in the provided row. */\n _getCellWidths(row, recalculateCellWidths = true) {\n if (!recalculateCellWidths && this._cachedCellWidths.length) {\n return this._cachedCellWidths;\n }\n const cellWidths = [];\n const firstRowCells = row.children;\n for (let i = 0; i < firstRowCells.length; i++) {\n const cell = firstRowCells[i];\n cellWidths.push(this._retrieveElementSize(cell).width);\n }\n this._cachedCellWidths = cellWidths;\n return cellWidths;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyStartColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = 0; i < widths.length; i++) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyEndColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = widths.length; i > 0; i--) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n /**\n * Retreives the most recently observed size of the specified element from the cache, or\n * meaures it directly if not yet cached.\n */\n _retrieveElementSize(element) {\n const cachedSize = this._elemSizeCache.get(element);\n if (cachedSize) {\n return cachedSize;\n }\n const clientRect = element.getBoundingClientRect();\n const size = {\n width: clientRect.width,\n height: clientRect.height\n };\n if (!this._resizeObserver) {\n return size;\n }\n this._elemSizeCache.set(element, size);\n this._resizeObserver.observe(element, {\n box: 'border-box'\n });\n return size;\n }\n /**\n * Conditionally enqueue the requested sticky update and clear previously queued updates\n * for the same rows.\n */\n _updateStickyColumnReplayQueue(params) {\n this._removeFromStickyColumnReplayQueue(params.rows);\n // No need to replay if a flush is pending.\n if (this._stickyColumnsReplayTimeout) {\n return;\n }\n this._updatedStickyColumnsParamsToReplay.push(params);\n }\n /** Remove updates for the specified rows from the queue. */\n _removeFromStickyColumnReplayQueue(rows) {\n const rowsSet = new Set(rows);\n for (const update of this._updatedStickyColumnsParamsToReplay) {\n update.rows = update.rows.filter(row => !rowsSet.has(row));\n }\n this._updatedStickyColumnsParamsToReplay = this._updatedStickyColumnsParamsToReplay.filter(update => !!update.rows.length);\n }\n /** Update _elemSizeCache with the observed sizes. */\n _updateCachedSizes(entries) {\n let needsColumnUpdate = false;\n for (const entry of entries) {\n const newEntry = entry.borderBoxSize?.length ? {\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n } : {\n width: entry.contentRect.width,\n height: entry.contentRect.height\n };\n if (newEntry.width !== this._elemSizeCache.get(entry.target)?.width && isCell(entry.target)) {\n needsColumnUpdate = true;\n }\n this._elemSizeCache.set(entry.target, newEntry);\n }\n if (needsColumnUpdate && this._updatedStickyColumnsParamsToReplay.length) {\n if (this._stickyColumnsReplayTimeout) {\n clearTimeout(this._stickyColumnsReplayTimeout);\n }\n this._stickyColumnsReplayTimeout = setTimeout(() => {\n for (const update of this._updatedStickyColumnsParamsToReplay) {\n this.updateStickyColumns(update.rows, update.stickyStartStates, update.stickyEndStates, true, false);\n }\n this._updatedStickyColumnsParamsToReplay = [];\n this._stickyColumnsReplayTimeout = null;\n }, 0);\n }\n }\n}\nfunction isCell(element) {\n return ['cdk-cell', 'cdk-header-cell', 'cdk-footer-cell'].some(klass => element.classList.contains(klass));\n}\n\n/**\n * Returns an error to be thrown when attempting to find an nonexistent column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n return Error(`Could not find a matching row definition for the` + `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nfunction getTableMissingRowDefsError() {\n return Error('Missing definitions for header, footer, and row; ' + 'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nfunction getTableUnknownDataSourceError() {\n return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nfunction getTableTextColumnMissingParentTableError() {\n return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nfunction getTableTextColumnMissingNameError() {\n return Error(`Table text column must have a name.`);\n}\n\n/** The injection token used to specify the StickyPositioningListener. */\nconst STICKY_POSITIONING_LISTENER = /*#__PURE__*/new InjectionToken('CDK_SPL');\n\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nlet CdkRecycleRows = /*#__PURE__*/(() => {\n class CdkRecycleRows {\n static {\n this.ɵfac = function CdkRecycleRows_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkRecycleRows)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkRecycleRows,\n selectors: [[\"cdk-table\", \"recycleRows\", \"\"], [\"table\", \"cdk-table\", \"\", \"recycleRows\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _RecycleViewRepeaterStrategy\n }])]\n });\n }\n }\n return CdkRecycleRows;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\nlet DataRowOutlet = /*#__PURE__*/(() => {\n class DataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n const table = inject(CDK_TABLE);\n table._rowOutlet = this;\n table._outletAssigned();\n }\n static {\n this.ɵfac = function DataRowOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DataRowOutlet,\n selectors: [[\"\", \"rowOutlet\", \"\"]],\n standalone: true\n });\n }\n }\n return DataRowOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\n * @docs-private\n */\nlet HeaderRowOutlet = /*#__PURE__*/(() => {\n class HeaderRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n const table = inject(CDK_TABLE);\n table._headerRowOutlet = this;\n table._outletAssigned();\n }\n static {\n this.ɵfac = function HeaderRowOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HeaderRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: HeaderRowOutlet,\n selectors: [[\"\", \"headerRowOutlet\", \"\"]],\n standalone: true\n });\n }\n }\n return HeaderRowOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\n * @docs-private\n */\nlet FooterRowOutlet = /*#__PURE__*/(() => {\n class FooterRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n const table = inject(CDK_TABLE);\n table._footerRowOutlet = this;\n table._outletAssigned();\n }\n static {\n this.ɵfac = function FooterRowOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FooterRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FooterRowOutlet,\n selectors: [[\"\", \"footerRowOutlet\", \"\"]],\n standalone: true\n });\n }\n }\n return FooterRowOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Provides a handle for the table to grab the view\n * container's ng-container to insert the no data row.\n * @docs-private\n */\nlet NoDataRowOutlet = /*#__PURE__*/(() => {\n class NoDataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n const table = inject(CDK_TABLE);\n table._noDataRowOutlet = this;\n table._outletAssigned();\n }\n static {\n this.ɵfac = function NoDataRowOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NoDataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NoDataRowOutlet,\n selectors: [[\"\", \"noDataRowOutlet\", \"\"]],\n standalone: true\n });\n }\n }\n return NoDataRowOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The table template that can be used by the mat-table. Should not be used outside of the\n * material library.\n * @docs-private\n */\nconst CDK_TABLE_TEMPLATE =\n// Note that according to MDN, the `caption` element has to be projected as the **first**\n// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption\n`\n \n \n\n \n @if (_isServer) {\n \n }\n\n @if (_isNativeHtmlTable) {\n \n \n \n \n \n \n \n \n \n \n } @else {\n \n \n \n \n }\n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {}\n/**\n * A data table that can render a header row, data rows, and a footer row.\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\n * connect function that will return an Observable stream that emits the data array to render.\n */\nlet CdkTable = /*#__PURE__*/(() => {\n class CdkTable {\n /** Aria role to apply to the table's cells based on the table's own role. */\n _getCellRole() {\n // Perform this lazily in case the table's role was updated by a directive after construction.\n if (this._cellRoleInternal === undefined) {\n // Note that we set `role=\"cell\"` even on native `td` elements,\n // because some browsers seem to require it. See #29784.\n const tableRole = this._elementRef.nativeElement.getAttribute('role');\n return tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n }\n return this._cellRoleInternal;\n }\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\n * relative to the function to know if a row should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n get trackBy() {\n return this._trackByFn;\n }\n set trackBy(fn) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._trackByFn = fn;\n }\n /**\n * The table's source of data, which can be provided in three ways (in order of complexity):\n * - Simple data array (each object represents one table row)\n * - Stream that emits a data array each time the array changes\n * - `DataSource` object that implements the connect/disconnect interface.\n *\n * If a data array is provided, the table must be notified when the array's objects are\n * added, removed, or moved. This can be done by calling the `renderRows()` function which will\n * render the diff since the last table render. If the data array reference is changed, the table\n * will automatically trigger an update to the rows.\n *\n * When providing an Observable stream, the table will trigger an update automatically when the\n * stream emits a new array of data.\n *\n * Finally, when providing a `DataSource` object, the table will use the Observable stream\n * provided by the connect function and trigger updates when that stream emits new data array\n * values. During the table's ngOnDestroy or when the data source is removed from the table, the\n * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\n * subscriptions registered during the connect process).\n */\n get dataSource() {\n return this._dataSource;\n }\n set dataSource(dataSource) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n /**\n * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\n * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\n * dataobject will render the first row that evaluates its when predicate to true, in the order\n * defined in the table, or otherwise the default row which does not have a when predicate.\n */\n get multiTemplateDataRows() {\n return this._multiTemplateDataRows;\n }\n set multiTemplateDataRows(value) {\n this._multiTemplateDataRows = value;\n // In Ivy if this value is set via a static attribute (e.g.
),\n // this setter will be invoked before the row outlet has been defined hence the null check.\n if (this._rowOutlet && this._rowOutlet.viewContainer.length) {\n this._forceRenderDataRows();\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths\n * and optimize rendering sticky styles for native tables. No-op for flex tables.\n */\n get fixedLayout() {\n return this._fixedLayout;\n }\n set fixedLayout(value) {\n this._fixedLayout = value;\n // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n this._forceRecalculateCellWidths = true;\n this._stickyColumnStylesNeedReset = true;\n }\n constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler,\n /**\n * @deprecated `_stickyPositioningListener` parameter to become required.\n * @breaking-change 13.0.0\n */\n _stickyPositioningListener,\n /**\n * @deprecated `_unusedNgZone` parameter to be removed.\n * @breaking-change 19.0.0\n */\n _unusedNgZone) {\n this._differs = _differs;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dir = _dir;\n this._platform = _platform;\n this._viewRepeater = _viewRepeater;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._viewportRuler = _viewportRuler;\n this._stickyPositioningListener = _stickyPositioningListener;\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n /**\n * Map of all the user's defined columns (header, data, and footer cell template) identified by\n * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n * any custom column definitions added to `_customColumnDefs`.\n */\n this._columnDefsByName = new Map();\n /**\n * Column definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * column definitions as *its* content child.\n */\n this._customColumnDefs = new Set();\n /**\n * Data row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in data rows as *its* content child.\n */\n this._customRowDefs = new Set();\n /**\n * Header row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in header rows as *its* content child.\n */\n this._customHeaderRowDefs = new Set();\n /**\n * Footer row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n * built-in footer row as *its* content child.\n */\n this._customFooterRowDefs = new Set();\n /**\n * Whether the header row definition has been changed. Triggers an update to the header row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._headerRowDefChanged = true;\n /**\n * Whether the footer row definition has been changed. Triggers an update to the footer row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._footerRowDefChanged = true;\n /**\n * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n * change.\n */\n this._stickyColumnStylesNeedReset = true;\n /**\n * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n * `false`, cached values will be used instead. This is only applicable to tables with\n * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n */\n this._forceRecalculateCellWidths = true;\n /**\n * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n * and row template matches, which allows the `IterableDiffer` to check rows by reference\n * and understand which rows are added/moved/removed.\n *\n * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n * `CdkRowDef` object. With the two keys, the cache points to a `RenderRow` object that\n * contains an array of created pairs. The array is necessary to handle cases where the data\n * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\n * stored.\n */\n this._cachedRenderRowsMap = new Map();\n /**\n * CSS class added to any row or cell that has sticky positioning applied. May be overridden by\n * table subclasses.\n */\n this.stickyCssClass = 'cdk-table-sticky';\n /**\n * Whether to manually add position: sticky to all sticky cell elements. Not needed if\n * the position is set in a selector associated with the value of stickyCssClass. May be\n * overridden by table subclasses\n */\n this.needsPositionStickyOnElement = true;\n /** Whether the no data row is currently showing anything. */\n this._isShowingNoDataRow = false;\n /** Whether the table has rendered out all the outlets for the first time. */\n this._hasAllOutlets = false;\n /** Whether the table is done initializing. */\n this._hasInitialized = false;\n this._cellRoleInternal = undefined;\n this._multiTemplateDataRows = false;\n this._fixedLayout = false;\n /**\n * Emits when the table completes rendering a set of data rows based on the latest data from the\n * data source, even if the set of rows is empty.\n */\n this.contentChanged = new EventEmitter();\n // TODO(andrewseguin): Remove max value as the end index\n // and instead calculate the view on init and scroll.\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n *\n * @docs-private\n */\n this.viewChange = new BehaviorSubject({\n start: 0,\n end: Number.MAX_VALUE\n });\n this._injector = inject(Injector);\n if (!role) {\n _elementRef.nativeElement.setAttribute('role', 'table');\n }\n this._document = _document;\n this._isServer = !_platform.isBrowser;\n this._isNativeHtmlTable = _elementRef.nativeElement.nodeName === 'TABLE';\n }\n ngOnInit() {\n this._setupStickyStyler();\n // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If\n // the user has provided a custom trackBy, return the result of that function as evaluated\n // with the values of the `RenderRow`'s data and index.\n this._dataDiffer = this._differs.find([]).create((_i, dataRow) => {\n return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n });\n this._viewportRuler.change().pipe(takeUntil(this._onDestroy)).subscribe(() => {\n this._forceRecalculateCellWidths = true;\n });\n }\n ngAfterContentInit() {\n this._hasInitialized = true;\n }\n ngAfterContentChecked() {\n // Only start re-rendering in `ngAfterContentChecked` after the first render.\n if (this._canRender()) {\n this._render();\n }\n }\n ngOnDestroy() {\n [this._rowOutlet?.viewContainer, this._headerRowOutlet?.viewContainer, this._footerRowOutlet?.viewContainer, this._cachedRenderRowsMap, this._customColumnDefs, this._customRowDefs, this._customHeaderRowDefs, this._customFooterRowDefs, this._columnDefsByName].forEach(def => {\n def?.clear();\n });\n this._headerRowDefs = [];\n this._footerRowDefs = [];\n this._defaultRowDef = null;\n this._onDestroy.next();\n this._onDestroy.complete();\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n }\n /**\n * Renders rows based on the table's latest set of data, which was either provided directly as an\n * input or retrieved through an Observable stream (directly or from a DataSource).\n * Checks for differences in the data since the last diff to perform only the necessary\n * changes (add/remove/move rows).\n *\n * If the table's data source is a DataSource or Observable, this will be invoked automatically\n * each time the provided Observable stream emits a new data array. Otherwise if your data is\n * an array, this function will need to be called to render any changes.\n */\n renderRows() {\n this._renderRows = this._getAllRenderRows();\n const changes = this._dataDiffer.diff(this._renderRows);\n if (!changes) {\n this._updateNoDataRow();\n this.contentChanged.next();\n return;\n }\n const viewContainer = this._rowOutlet.viewContainer;\n this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, change => {\n if (change.operation === _ViewRepeaterOperation.INSERTED && change.context) {\n this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n }\n });\n // Update the meta context of a row's context data (index, count, first, last, ...)\n this._updateRowIndexContext();\n // Update rows that did not get added/removed/moved but may have had their identity changed,\n // e.g. if trackBy matched data on some property but the actual data reference changed.\n changes.forEachIdentityChange(record => {\n const rowView = viewContainer.get(record.currentIndex);\n rowView.context.$implicit = record.item.data;\n });\n this._updateNoDataRow();\n afterNextRender(() => {\n this.updateStickyColumnStyles();\n }, {\n injector: this._injector\n });\n this.contentChanged.next();\n }\n /** Adds a column definition that was not included as part of the content children. */\n addColumnDef(columnDef) {\n this._customColumnDefs.add(columnDef);\n }\n /** Removes a column definition that was not included as part of the content children. */\n removeColumnDef(columnDef) {\n this._customColumnDefs.delete(columnDef);\n }\n /** Adds a row definition that was not included as part of the content children. */\n addRowDef(rowDef) {\n this._customRowDefs.add(rowDef);\n }\n /** Removes a row definition that was not included as part of the content children. */\n removeRowDef(rowDef) {\n this._customRowDefs.delete(rowDef);\n }\n /** Adds a header row definition that was not included as part of the content children. */\n addHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.add(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Removes a header row definition that was not included as part of the content children. */\n removeHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.delete(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Adds a footer row definition that was not included as part of the content children. */\n addFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.add(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Removes a footer row definition that was not included as part of the content children. */\n removeFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.delete(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Sets a no data row definition that was not included as a part of the content children. */\n setNoDataRow(noDataRow) {\n this._customNoDataRow = noDataRow;\n }\n /**\n * Updates the header sticky styles. First resets all applied styles with respect to the cells\n * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n * automatically called when the header row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyHeaderRowStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n // Hide the thead element if there are no header rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n if (this._isNativeHtmlTable) {\n const thead = closestTableSection(this._headerRowOutlet, 'thead');\n if (thead) {\n thead.style.display = headerRows.length ? '' : 'none';\n }\n }\n const stickyStates = this._headerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n this._stickyStyler.stickRows(headerRows, stickyStates, 'top');\n // Reset the dirty state of the sticky input change since it has been used.\n this._headerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the footer sticky styles. First resets all applied styles with respect to the cells\n * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\n * automatically called when the footer row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyFooterRowStyles() {\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n if (this._isNativeHtmlTable) {\n const tfoot = closestTableSection(this._footerRowOutlet, 'tfoot');\n if (tfoot) {\n tfoot.style.display = footerRows.length ? '' : 'none';\n }\n }\n const stickyStates = this._footerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);\n this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');\n this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates);\n // Reset the dirty state of the sticky input change since it has been used.\n this._footerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the column sticky styles. First resets all applied styles with respect to the cells\n * sticking to the left and right. Then sticky styles are added for the left and right according\n * to the column definitions for each cell in each row. This is automatically called when\n * the data source provides a new set of data or when a column definition changes its sticky\n * input. May be called manually for cases where the cell content changes outside of these events.\n */\n updateStickyColumnStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const dataRows = this._getRenderedRows(this._rowOutlet);\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n // For tables not using a fixed layout, the column widths may change when new rows are rendered.\n // In a table using a fixed layout, row content won't affect column width, so sticky styles\n // don't need to be cleared unless either the sticky column config changes or one of the row\n // defs change.\n if (this._isNativeHtmlTable && !this._fixedLayout || this._stickyColumnStylesNeedReset) {\n // Clear the left and right positioning from all columns in the table across all rows since\n // sticky columns span across all table sections (header, data, footer)\n this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']);\n this._stickyColumnStylesNeedReset = false;\n }\n // Update the sticky styles for each header row depending on the def's sticky state\n headerRows.forEach((headerRow, i) => {\n this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]);\n });\n // Update the sticky styles for each data row depending on its def's sticky state\n this._rowDefs.forEach(rowDef => {\n // Collect all the rows rendered with this row definition.\n const rows = [];\n for (let i = 0; i < dataRows.length; i++) {\n if (this._renderRows[i].rowDef === rowDef) {\n rows.push(dataRows[i]);\n }\n }\n this._addStickyColumnStyles(rows, rowDef);\n });\n // Update the sticky styles for each footer row depending on the def's sticky state\n footerRows.forEach((footerRow, i) => {\n this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]);\n });\n // Reset the dirty state of the sticky input change since it has been used.\n Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged());\n }\n /** Invoked whenever an outlet is created and has been assigned to the table. */\n _outletAssigned() {\n // Trigger the first render once all outlets have been assigned. We do it this way, as\n // opposed to waiting for the next `ngAfterContentChecked`, because we don't know when\n // the next change detection will happen.\n // Also we can't use queries to resolve the outlets, because they're wrapped in a\n // conditional, so we have to rely on them being assigned via DI.\n if (!this._hasAllOutlets && this._rowOutlet && this._headerRowOutlet && this._footerRowOutlet && this._noDataRowOutlet) {\n this._hasAllOutlets = true;\n // In some setups this may fire before `ngAfterContentInit`\n // so we need a check here. See #28538.\n if (this._canRender()) {\n this._render();\n }\n }\n }\n /** Whether the table has all the information to start rendering. */\n _canRender() {\n return this._hasAllOutlets && this._hasInitialized;\n }\n /** Renders the table if its state has changed. */\n _render() {\n // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n this._cacheRowDefs();\n this._cacheColumnDefs();\n // Make sure that the user has at least added header, footer, or data row def.\n if (!this._headerRowDefs.length && !this._footerRowDefs.length && !this._rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingRowDefsError();\n }\n // Render updates if the list of columns have been changed for the header, row, or footer defs.\n const columnsChanged = this._renderUpdatedColumns();\n const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged;\n // Ensure sticky column styles are reset if set to `true` elsewhere.\n this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;\n this._forceRecalculateCellWidths = rowDefsChanged;\n // If the header row definition has been changed, trigger a render to the header row.\n if (this._headerRowDefChanged) {\n this._forceRenderHeaderRows();\n this._headerRowDefChanged = false;\n }\n // If the footer row definition has been changed, trigger a render to the footer row.\n if (this._footerRowDefChanged) {\n this._forceRenderFooterRows();\n this._footerRowDefChanged = false;\n }\n // If there is a data source and row definitions, connect to the data source unless a\n // connection has already been made.\n if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {\n this._observeRenderChanges();\n } else if (this._stickyColumnStylesNeedReset) {\n // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being\n // called when it row data arrives. Otherwise, we need to call it proactively.\n this.updateStickyColumnStyles();\n }\n this._checkStickyStates();\n }\n /**\n * Get the list of RenderRow objects to render according to the current list of data and defined\n * row definitions. If the previous list already contained a particular pair, it should be reused\n * so that the differ equates their references.\n */\n _getAllRenderRows() {\n const renderRows = [];\n // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the\n // new cache while unused ones can be picked up by garbage collection.\n const prevCachedRenderRows = this._cachedRenderRowsMap;\n this._cachedRenderRowsMap = new Map();\n // For each data object, get the list of rows that should be rendered, represented by the\n // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`.\n for (let i = 0; i < this._data.length; i++) {\n let data = this._data[i];\n const renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data));\n if (!this._cachedRenderRowsMap.has(data)) {\n this._cachedRenderRowsMap.set(data, new WeakMap());\n }\n for (let j = 0; j < renderRowsForData.length; j++) {\n let renderRow = renderRowsForData[j];\n const cache = this._cachedRenderRowsMap.get(renderRow.data);\n if (cache.has(renderRow.rowDef)) {\n cache.get(renderRow.rowDef).push(renderRow);\n } else {\n cache.set(renderRow.rowDef, [renderRow]);\n }\n renderRows.push(renderRow);\n }\n }\n return renderRows;\n }\n /**\n * Gets a list of `RenderRow` for the provided data object and any `CdkRowDef` objects that\n * should be rendered for this data. Reuses the cached RenderRow objects if they match the same\n * `(T, CdkRowDef)` pair.\n */\n _getRenderRowsForData(data, dataIndex, cache) {\n const rowDefs = this._getRowDefs(data, dataIndex);\n return rowDefs.map(rowDef => {\n const cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : [];\n if (cachedRenderRows.length) {\n const dataRow = cachedRenderRows.shift();\n dataRow.dataIndex = dataIndex;\n return dataRow;\n } else {\n return {\n data,\n rowDef,\n dataIndex\n };\n }\n });\n }\n /** Update the map containing the content's column definitions. */\n _cacheColumnDefs() {\n this._columnDefsByName.clear();\n const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);\n columnDefs.forEach(columnDef => {\n if (this._columnDefsByName.has(columnDef.name) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableDuplicateColumnNameError(columnDef.name);\n }\n this._columnDefsByName.set(columnDef.name, columnDef);\n });\n }\n /** Update the list of all available row definitions that can be used. */\n _cacheRowDefs() {\n this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);\n this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);\n this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs);\n // After all row definitions are determined, find the row definition to be considered default.\n const defaultRowDefs = this._rowDefs.filter(def => !def.when);\n if (!this.multiTemplateDataRows && defaultRowDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMultipleDefaultRowDefsError();\n }\n this._defaultRowDef = defaultRowDefs[0];\n }\n /**\n * Check if the header, data, or footer rows have changed what columns they want to display or\n * whether the sticky states have changed for the header or footer. If there is a diff, then\n * re-render that section.\n */\n _renderUpdatedColumns() {\n const columnsDiffReducer = (acc, def) => {\n // The differ should be run for every column, even if `acc` is already\n // true (see #29922)\n const diff = !!def.getColumnsDiff();\n return acc || diff;\n };\n // Force re-render data rows if the list of column definitions have changed.\n const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\n if (dataColumnsChanged) {\n this._forceRenderDataRows();\n }\n // Force re-render header/footer rows if the list of column definitions have changed.\n const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\n if (headerColumnsChanged) {\n this._forceRenderHeaderRows();\n }\n const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n if (footerColumnsChanged) {\n this._forceRenderFooterRows();\n }\n return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n }\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the row outlet. Otherwise start listening for new data.\n */\n _switchDataSource(dataSource) {\n this._data = [];\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n // Stop listening for data from the previous data source.\n if (this._renderChangeSubscription) {\n this._renderChangeSubscription.unsubscribe();\n this._renderChangeSubscription = null;\n }\n if (!dataSource) {\n if (this._dataDiffer) {\n this._dataDiffer.diff([]);\n }\n if (this._rowOutlet) {\n this._rowOutlet.viewContainer.clear();\n }\n }\n this._dataSource = dataSource;\n }\n /** Set up a subscription for the data provided by the data source. */\n _observeRenderChanges() {\n // If no data source has been set, there is nothing to observe for changes.\n if (!this.dataSource) {\n return;\n }\n let dataStream;\n if (isDataSource(this.dataSource)) {\n dataStream = this.dataSource.connect(this);\n } else if (isObservable(this.dataSource)) {\n dataStream = this.dataSource;\n } else if (Array.isArray(this.dataSource)) {\n dataStream = of(this.dataSource);\n }\n if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownDataSourceError();\n }\n this._renderChangeSubscription = dataStream.pipe(takeUntil(this._onDestroy)).subscribe(data => {\n this._data = data || [];\n this.renderRows();\n });\n }\n /**\n * Clears any existing content in the header row outlet and creates a new embedded view\n * in the outlet using the header row definition.\n */\n _forceRenderHeaderRows() {\n // Clear the header row outlet if any content exists.\n if (this._headerRowOutlet.viewContainer.length > 0) {\n this._headerRowOutlet.viewContainer.clear();\n }\n this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n this.updateStickyHeaderRowStyles();\n }\n /**\n * Clears any existing content in the footer row outlet and creates a new embedded view\n * in the outlet using the footer row definition.\n */\n _forceRenderFooterRows() {\n // Clear the footer row outlet if any content exists.\n if (this._footerRowOutlet.viewContainer.length > 0) {\n this._footerRowOutlet.viewContainer.clear();\n }\n this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n this.updateStickyFooterRowStyles();\n }\n /** Adds the sticky column styles for the rows according to the columns' stick states. */\n _addStickyColumnStyles(rows, rowDef) {\n const columnDefs = Array.from(rowDef.columns || []).map(columnName => {\n const columnDef = this._columnDefsByName.get(columnName);\n if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnName);\n }\n return columnDef;\n });\n const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky);\n const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd);\n this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);\n }\n /** Gets the list of rows that have been rendered in the row outlet. */\n _getRenderedRows(rowOutlet) {\n const renderedRows = [];\n for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n const viewRef = rowOutlet.viewContainer.get(i);\n renderedRows.push(viewRef.rootNodes[0]);\n }\n return renderedRows;\n }\n /**\n * Get the matching row definitions that should be used for this row data. If there is only\n * one row definition, it is returned. Otherwise, find the row definitions that has a when\n * predicate that returns true with the data. If none return true, return the default row\n * definition.\n */\n _getRowDefs(data, dataIndex) {\n if (this._rowDefs.length == 1) {\n return [this._rowDefs[0]];\n }\n let rowDefs = [];\n if (this.multiTemplateDataRows) {\n rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n } else {\n let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n if (rowDef) {\n rowDefs.push(rowDef);\n }\n }\n if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingMatchingRowDefError(data);\n }\n return rowDefs;\n }\n _getEmbeddedViewArgs(renderRow, index) {\n const rowDef = renderRow.rowDef;\n const context = {\n $implicit: renderRow.data\n };\n return {\n templateRef: rowDef.template,\n context,\n index\n };\n }\n /**\n * Creates a new row template in the outlet and fills it with the set of cell templates.\n * Optionally takes a context to provide to the row and cells, as well as an optional index\n * of where to place the new row template in the outlet.\n */\n _renderRow(outlet, rowDef, index, context = {}) {\n // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView\n const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);\n this._renderCellTemplateForItem(rowDef, context);\n return view;\n }\n _renderCellTemplateForItem(rowDef, context) {\n for (let cellTemplate of this._getCellTemplates(rowDef)) {\n if (CdkCellOutlet.mostRecentCellOutlet) {\n CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Updates the index-related context for each row to reflect any changes in the index of the rows,\n * e.g. first/last/even/odd.\n */\n _updateRowIndexContext() {\n const viewContainer = this._rowOutlet.viewContainer;\n for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n const viewRef = viewContainer.get(renderIndex);\n const context = viewRef.context;\n context.count = count;\n context.first = renderIndex === 0;\n context.last = renderIndex === count - 1;\n context.even = renderIndex % 2 === 0;\n context.odd = !context.even;\n if (this.multiTemplateDataRows) {\n context.dataIndex = this._renderRows[renderIndex].dataIndex;\n context.renderIndex = renderIndex;\n } else {\n context.index = this._renderRows[renderIndex].dataIndex;\n }\n }\n }\n /** Gets the column definitions for the provided row def. */\n _getCellTemplates(rowDef) {\n if (!rowDef || !rowDef.columns) {\n return [];\n }\n return Array.from(rowDef.columns, columnId => {\n const column = this._columnDefsByName.get(columnId);\n if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnId);\n }\n return rowDef.extractCellTemplate(column);\n });\n }\n /**\n * Forces a re-render of the data rows. Should be called in cases where there has been an input\n * change that affects the evaluation of which rows should be rendered, e.g. toggling\n * `multiTemplateDataRows` or adding/removing row definitions.\n */\n _forceRenderDataRows() {\n this._dataDiffer.diff([]);\n this._rowOutlet.viewContainer.clear();\n this.renderRows();\n }\n /**\n * Checks if there has been a change in sticky states since last check and applies the correct\n * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n * during a change detection and after the inputs are settled (after content check).\n */\n _checkStickyStates() {\n const stickyCheckReducer = (acc, d) => {\n return acc || d.hasStickyChanged();\n };\n // Note that the check needs to occur for every definition since it notifies the definition\n // that it can reset its dirty state. Using another operator like `some` may short-circuit\n // remaining definitions and leave them in an unchecked state.\n if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyHeaderRowStyles();\n }\n if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyFooterRowStyles();\n }\n if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n this._stickyColumnStylesNeedReset = true;\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Creates the sticky styler that will be used for sticky rows and columns. Listens\n * for directionality changes and provides the latest direction to the styler. Re-applies column\n * stickiness when directionality changes.\n */\n _setupStickyStyler() {\n const direction = this._dir ? this._dir.value : 'ltr';\n this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);\n (this._dir ? this._dir.change : of()).pipe(takeUntil(this._onDestroy)).subscribe(value => {\n this._stickyStyler.direction = value;\n this.updateStickyColumnStyles();\n });\n }\n /** Filters definitions that belong to this table from a QueryList. */\n _getOwnDefs(items) {\n return items.filter(item => !item._table || item._table === this);\n }\n /** Creates or removes the no data row, depending on whether any data is being shown. */\n _updateNoDataRow() {\n const noDataRow = this._customNoDataRow || this._noDataRow;\n if (!noDataRow) {\n return;\n }\n const shouldShow = this._rowOutlet.viewContainer.length === 0;\n if (shouldShow === this._isShowingNoDataRow) {\n return;\n }\n const container = this._noDataRowOutlet.viewContainer;\n if (shouldShow) {\n const view = container.createEmbeddedView(noDataRow.templateRef);\n const rootNode = view.rootNodes[0];\n // Only add the attributes if we have a single root node since it's hard\n // to figure out which one to add it to when there are multiple.\n if (view.rootNodes.length === 1 && rootNode?.nodeType === this._document.ELEMENT_NODE) {\n rootNode.setAttribute('role', 'row');\n rootNode.classList.add(noDataRow._contentClassName);\n }\n } else {\n container.clear();\n }\n this._isShowingNoDataRow = shouldShow;\n this._changeDetectorRef.markForCheck();\n }\n static {\n this.ɵfac = function CdkTable_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkTable)(i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵinjectAttribute('role'), i0.ɵɵdirectiveInject(i1.Directionality, 8), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i2.Platform), i0.ɵɵdirectiveInject(_VIEW_REPEATER_STRATEGY), i0.ɵɵdirectiveInject(_COALESCED_STYLE_SCHEDULER), i0.ɵɵdirectiveInject(i3.ViewportRuler), i0.ɵɵdirectiveInject(STICKY_POSITIONING_LISTENER, 12), i0.ɵɵdirectiveInject(i0.NgZone, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkTable,\n selectors: [[\"cdk-table\"], [\"table\", \"cdk-table\", \"\"]],\n contentQueries: function CdkTable_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, CdkNoDataRow, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkColumnDef, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkRowDef, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkHeaderRowDef, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkFooterRowDef, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._noDataRow = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentColumnDefs = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentRowDefs = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentHeaderRowDefs = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentFooterRowDefs = _t);\n }\n },\n hostAttrs: [1, \"cdk-table\"],\n hostVars: 2,\n hostBindings: function CdkTable_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"cdk-table-fixed-layout\", ctx.fixedLayout);\n }\n },\n inputs: {\n trackBy: \"trackBy\",\n dataSource: \"dataSource\",\n multiTemplateDataRows: [2, \"multiTemplateDataRows\", \"multiTemplateDataRows\", booleanAttribute],\n fixedLayout: [2, \"fixedLayout\", \"fixedLayout\", booleanAttribute]\n },\n outputs: {\n contentChanged: \"contentChanged\"\n },\n exportAs: [\"cdkTable\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_TABLE,\n useExisting: CdkTable\n }, {\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _DisposeViewRepeaterStrategy\n }, {\n provide: _COALESCED_STYLE_SCHEDULER,\n useClass: _CoalescedStyleScheduler\n },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n {\n provide: STICKY_POSITIONING_LISTENER,\n useValue: null\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 5,\n vars: 2,\n consts: [[\"role\", \"rowgroup\"], [\"headerRowOutlet\", \"\"], [\"rowOutlet\", \"\"], [\"noDataRowOutlet\", \"\"], [\"footerRowOutlet\", \"\"]],\n template: function CdkTable_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c0);\n i0.ɵɵprojection(0);\n i0.ɵɵprojection(1, 1);\n i0.ɵɵtemplate(2, CdkTable_Conditional_2_Template, 1, 0)(3, CdkTable_Conditional_3_Template, 7, 0)(4, CdkTable_Conditional_4_Template, 4, 0);\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._isServer ? 2 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._isNativeHtmlTable ? 3 : 4);\n }\n },\n dependencies: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],\n styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"],\n encapsulation: 2\n });\n }\n }\n return CdkTable;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\nfunction mergeArrayAndSet(array, set) {\n return array.concat(Array.from(set));\n}\n/**\n * Finds the closest table section to an outlet. We can't use `HTMLElement.closest` for this,\n * because the node representing the outlet is a comment.\n */\nfunction closestTableSection(outlet, section) {\n const uppercaseSection = section.toUpperCase();\n let current = outlet.viewContainer.element.nativeElement;\n while (current) {\n // 1 is an element node.\n const nodeName = current.nodeType === 1 ? current.nodeName : null;\n if (nodeName === uppercaseSection) {\n return current;\n } else if (nodeName === 'TABLE') {\n // Stop traversing past the `table` node.\n break;\n }\n current = current.parentNode;\n }\n return null;\n}\n\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nlet CdkTextColumn = /*#__PURE__*/(() => {\n class CdkTextColumn {\n /** Column name that should be used to reference this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._name = name;\n // With Ivy, inputs can be initialized before static query results are\n // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n this._syncColumnDefName();\n }\n constructor(\n // `CdkTextColumn` is always requiring a table, but we just assert it manually\n // for better error reporting.\n // tslint:disable-next-line: lightweight-tokens\n _table, _options) {\n this._table = _table;\n this._options = _options;\n /** Alignment of the cell values. */\n this.justify = 'start';\n this._options = _options || {};\n }\n ngOnInit() {\n this._syncColumnDefName();\n if (this.headerText === undefined) {\n this.headerText = this._createDefaultHeaderText();\n }\n if (!this.dataAccessor) {\n this.dataAccessor = this._options.defaultDataAccessor || ((data, name) => data[name]);\n }\n if (this._table) {\n // Provide the cell and headerCell directly to the table with the static `ViewChild` query,\n // since the columnDef will not pick up its content by the time the table finishes checking\n // its content and initializing the rows.\n this.columnDef.cell = this.cell;\n this.columnDef.headerCell = this.headerCell;\n this._table.addColumnDef(this.columnDef);\n } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTableTextColumnMissingParentTableError();\n }\n }\n ngOnDestroy() {\n if (this._table) {\n this._table.removeColumnDef(this.columnDef);\n }\n }\n /**\n * Creates a default header text. Use the options' header text transformation function if one\n * has been provided. Otherwise simply capitalize the column name.\n */\n _createDefaultHeaderText() {\n const name = this.name;\n if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableTextColumnMissingNameError();\n }\n if (this._options && this._options.defaultHeaderTextTransform) {\n return this._options.defaultHeaderTextTransform(name);\n }\n return name[0].toUpperCase() + name.slice(1);\n }\n /** Synchronizes the column definition name with the text column name. */\n _syncColumnDefName() {\n if (this.columnDef) {\n this.columnDef.name = this.name;\n }\n }\n static {\n this.ɵfac = function CdkTextColumn_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkTextColumn)(i0.ɵɵdirectiveInject(CdkTable, 8), i0.ɵɵdirectiveInject(TEXT_COLUMN_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkTextColumn,\n selectors: [[\"cdk-text-column\"]],\n viewQuery: function CdkTextColumn_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(CdkColumnDef, 7);\n i0.ɵɵviewQuery(CdkCellDef, 7);\n i0.ɵɵviewQuery(CdkHeaderCellDef, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.columnDef = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cell = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerCell = _t.first);\n }\n },\n inputs: {\n name: \"name\",\n headerText: \"headerText\",\n dataAccessor: \"dataAccessor\",\n justify: \"justify\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 0,\n consts: [[\"cdkColumnDef\", \"\"], [\"cdk-header-cell\", \"\", 3, \"text-align\", 4, \"cdkHeaderCellDef\"], [\"cdk-cell\", \"\", 3, \"text-align\", 4, \"cdkCellDef\"], [\"cdk-header-cell\", \"\"], [\"cdk-cell\", \"\"]],\n template: function CdkTextColumn_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0, 0);\n i0.ɵɵtemplate(1, CdkTextColumn_th_1_Template, 2, 3, \"th\", 1)(2, CdkTextColumn_td_2_Template, 2, 3, \"td\", 2);\n i0.ɵɵelementContainerEnd();\n }\n },\n dependencies: [CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCellDef, CdkCell],\n encapsulation: 2\n });\n }\n }\n return CdkTextColumn;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EXPORTED_DECLARATIONS = [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, CdkRecycleRows, NoDataRowOutlet];\nlet CdkTableModule = /*#__PURE__*/(() => {\n class CdkTableModule {\n static {\n this.ɵfac = function CdkTableModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkTableModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CdkTableModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ScrollingModule]\n });\n }\n }\n return CdkTableModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Mixin to provide a directive with a function that checks if the sticky input has been\n * changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n * @deprecated Implement the `CanStick` interface instead.\n * @breaking-change 19.0.0\n */\nfunction mixinHasStickyInput(base) {\n return class extends base {\n /** Whether sticky positioning should be applied. */\n get sticky() {\n return this._sticky;\n }\n set sticky(v) {\n const prevValue = this._sticky;\n this._sticky = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._sticky;\n }\n /** Whether the sticky value has changed since this was last called. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this._hasStickyChanged = false;\n return hasStickyChanged;\n }\n /** Resets the dirty check for cases where the sticky state has been used without checking. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n constructor(...args) {\n super(...args);\n this._sticky = false;\n /** Whether the sticky input has changed since it was last checked. */\n this._hasStickyChanged = false;\n }\n };\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRecycleRows, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, STICKY_POSITIONING_LISTENER, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput };\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, booleanAttribute, NgModule } from '@angular/core';\nimport { CdkTable, CDK_TABLE, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, STICKY_POSITIONING_LISTENER, HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet, CdkCellDef, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkHeaderCell, CdkFooterCell, CdkCell, CdkHeaderRowDef, CdkFooterRowDef, CdkRowDef, CdkHeaderRow, CdkCellOutlet, CdkFooterRow, CdkRow, CdkNoDataRow, CdkTextColumn, CdkTableModule } from '@angular/cdk/table';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';\nimport { MatCommonModule } from '@angular/material/core';\nimport { BehaviorSubject, Subject, merge, of, combineLatest } from 'rxjs';\nimport { _isNumberValue } from '@angular/cdk/coercion';\nimport { map } from 'rxjs/operators';\n\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]], \"*\"];\nconst _c1 = [\"caption\", \"colgroup, col\", \"*\"];\nfunction MatTable_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0, 2);\n }\n}\nfunction MatTable_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"thead\", 0);\n i0.ɵɵelementContainer(1, 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"tbody\", 2);\n i0.ɵɵelementContainer(3, 3)(4, 4);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"tfoot\", 0);\n i0.ɵɵelementContainer(6, 5);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatTable_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 1)(1, 3)(2, 4)(3, 5);\n }\n}\nfunction MatTextColumn_th_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.headerText, \" \");\n }\n}\nfunction MatTextColumn_td_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const data_r2 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.dataAccessor(data_r2, ctx_r0.name), \" \");\n }\n}\nlet MatRecycleRows = /*#__PURE__*/(() => {\n class MatRecycleRows {\n static {\n this.ɵfac = function MatRecycleRows_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatRecycleRows)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatRecycleRows,\n selectors: [[\"mat-table\", \"recycleRows\", \"\"], [\"table\", \"mat-table\", \"\", \"recycleRows\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _RecycleViewRepeaterStrategy\n }])]\n });\n }\n }\n return MatRecycleRows;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatTable = /*#__PURE__*/(() => {\n class MatTable extends CdkTable {\n constructor() {\n super(...arguments);\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n this.stickyCssClass = 'mat-mdc-table-sticky';\n /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */\n this.needsPositionStickyOnElement = false;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatTable_BaseFactory;\n return function MatTable_Factory(__ngFactoryType__) {\n return (ɵMatTable_BaseFactory || (ɵMatTable_BaseFactory = i0.ɵɵgetInheritedFactory(MatTable)))(__ngFactoryType__ || MatTable);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatTable,\n selectors: [[\"mat-table\"], [\"table\", \"mat-table\", \"\"]],\n hostAttrs: [1, \"mat-mdc-table\", \"mdc-data-table__table\"],\n hostVars: 2,\n hostBindings: function MatTable_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-table-fixed-layout\", ctx.fixedLayout);\n }\n },\n exportAs: [\"matTable\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkTable,\n useExisting: MatTable\n }, {\n provide: CDK_TABLE,\n useExisting: MatTable\n }, {\n provide: _COALESCED_STYLE_SCHEDULER,\n useClass: _CoalescedStyleScheduler\n },\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n {\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _DisposeViewRepeaterStrategy\n },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n {\n provide: STICKY_POSITIONING_LISTENER,\n useValue: null\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 5,\n vars: 2,\n consts: [[\"role\", \"rowgroup\"], [\"headerRowOutlet\", \"\"], [\"role\", \"rowgroup\", 1, \"mdc-data-table__content\"], [\"rowOutlet\", \"\"], [\"noDataRowOutlet\", \"\"], [\"footerRowOutlet\", \"\"]],\n template: function MatTable_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c0);\n i0.ɵɵprojection(0);\n i0.ɵɵprojection(1, 1);\n i0.ɵɵtemplate(2, MatTable_Conditional_2_Template, 1, 0)(3, MatTable_Conditional_3_Template, 7, 0)(4, MatTable_Conditional_4_Template, 4, 0);\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._isServer ? 2 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._isNativeHtmlTable ? 3 : 4);\n }\n },\n dependencies: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],\n styles: [\".mat-mdc-table-sticky{position:sticky !important}mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{min-width:100%;border:0;border-spacing:0;table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color, var(--mat-app-surface))}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell{text-align:right}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, var(--mat-app-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-header-headline-font, var(--mat-app-title-small-font, Roboto, sans-serif));line-height:var(--mat-table-header-headline-line-height, var(--mat-app-title-small-line-height));font-size:var(--mat-table-header-headline-size, var(--mat-app-title-small-size, 14px));font-weight:var(--mat-table-header-headline-weight, var(--mat-app-title-small-weight, 500))}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-app-on-surface, rgba(0, 0, 0, 0.87)))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, var(--mat-app-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-row-item-label-text-line-height, var(--mat-app-body-medium-line-height));font-size:var(--mat-table-row-item-label-text-size, var(--mat-app-body-medium-size, 14px));font-weight:var(--mat-table-row-item-label-text-weight, var(--mat-app-body-medium-weight))}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-app-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-footer-supporting-text-font, var(--mat-app-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-footer-supporting-text-line-height, var(--mat-app-body-medium-line-height));font-size:var(--mat-table-footer-supporting-text-size, var(--mat-app-body-medium-size, 14px));font-weight:var(--mat-table-footer-supporting-text-weight, var(--mat-app-body-medium-weight));letter-spacing:var(--mat-table-footer-supporting-text-tracking, var(--mat-app-body-medium-tracking))}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-app-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking, var(--mat-app-title-small-tracking));font-weight:inherit;line-height:inherit;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mat-mdc-header-cell{text-align:right}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-app-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-app-body-medium-tracking));line-height:inherit}.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-app-body-medium-tracking))}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch}\"],\n encapsulation: 2\n });\n }\n }\n return MatTable;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Cell definition for the mat-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nlet MatCellDef = /*#__PURE__*/(() => {\n class MatCellDef extends CdkCellDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatCellDef_BaseFactory;\n return function MatCellDef_Factory(__ngFactoryType__) {\n return (ɵMatCellDef_BaseFactory || (ɵMatCellDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatCellDef)))(__ngFactoryType__ || MatCellDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCellDef,\n selectors: [[\"\", \"matCellDef\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkCellDef,\n useExisting: MatCellDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header cell definition for the mat-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nlet MatHeaderCellDef = /*#__PURE__*/(() => {\n class MatHeaderCellDef extends CdkHeaderCellDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderCellDef_BaseFactory;\n return function MatHeaderCellDef_Factory(__ngFactoryType__) {\n return (ɵMatHeaderCellDef_BaseFactory || (ɵMatHeaderCellDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderCellDef)))(__ngFactoryType__ || MatHeaderCellDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHeaderCellDef,\n selectors: [[\"\", \"matHeaderCellDef\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkHeaderCellDef,\n useExisting: MatHeaderCellDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatHeaderCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer cell definition for the mat-table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nlet MatFooterCellDef = /*#__PURE__*/(() => {\n class MatFooterCellDef extends CdkFooterCellDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterCellDef_BaseFactory;\n return function MatFooterCellDef_Factory(__ngFactoryType__) {\n return (ɵMatFooterCellDef_BaseFactory || (ɵMatFooterCellDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterCellDef)))(__ngFactoryType__ || MatFooterCellDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFooterCellDef,\n selectors: [[\"\", \"matFooterCellDef\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkFooterCellDef,\n useExisting: MatFooterCellDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatFooterCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Column definition for the mat-table.\n * Defines a set of cells available for a table column.\n */\nlet MatColumnDef = /*#__PURE__*/(() => {\n class MatColumnDef extends CdkColumnDef {\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /**\n * Add \"mat-column-\" prefix in addition to \"cdk-column-\" prefix.\n * In the future, this will only add \"mat-column-\" and columnCssClassName\n * will change from type string[] to string.\n * @docs-private\n */\n _updateColumnCssClassName() {\n super._updateColumnCssClassName();\n this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatColumnDef_BaseFactory;\n return function MatColumnDef_Factory(__ngFactoryType__) {\n return (ɵMatColumnDef_BaseFactory || (ɵMatColumnDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatColumnDef)))(__ngFactoryType__ || MatColumnDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatColumnDef,\n selectors: [[\"\", \"matColumnDef\", \"\"]],\n inputs: {\n name: [0, \"matColumnDef\", \"name\"]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkColumnDef,\n useExisting: MatColumnDef\n }, {\n provide: 'MAT_SORT_HEADER_COLUMN_DEF',\n useExisting: MatColumnDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatColumnDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Header cell template container that adds the right classes and role. */\nlet MatHeaderCell = /*#__PURE__*/(() => {\n class MatHeaderCell extends CdkHeaderCell {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderCell_BaseFactory;\n return function MatHeaderCell_Factory(__ngFactoryType__) {\n return (ɵMatHeaderCell_BaseFactory || (ɵMatHeaderCell_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderCell)))(__ngFactoryType__ || MatHeaderCell);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHeaderCell,\n selectors: [[\"mat-header-cell\"], [\"th\", \"mat-header-cell\", \"\"]],\n hostAttrs: [\"role\", \"columnheader\", 1, \"mat-mdc-header-cell\", \"mdc-data-table__header-cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatHeaderCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer cell template container that adds the right classes and role. */\nlet MatFooterCell = /*#__PURE__*/(() => {\n class MatFooterCell extends CdkFooterCell {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterCell_BaseFactory;\n return function MatFooterCell_Factory(__ngFactoryType__) {\n return (ɵMatFooterCell_BaseFactory || (ɵMatFooterCell_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterCell)))(__ngFactoryType__ || MatFooterCell);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFooterCell,\n selectors: [[\"mat-footer-cell\"], [\"td\", \"mat-footer-cell\", \"\"]],\n hostAttrs: [1, \"mat-mdc-footer-cell\", \"mdc-data-table__cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatFooterCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Cell template container that adds the right classes and role. */\nlet MatCell = /*#__PURE__*/(() => {\n class MatCell extends CdkCell {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatCell_BaseFactory;\n return function MatCell_Factory(__ngFactoryType__) {\n return (ɵMatCell_BaseFactory || (ɵMatCell_BaseFactory = i0.ɵɵgetInheritedFactory(MatCell)))(__ngFactoryType__ || MatCell);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCell,\n selectors: [[\"mat-cell\"], [\"td\", \"mat-cell\", \"\"]],\n hostAttrs: [1, \"mat-mdc-cell\", \"mdc-data-table__cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// We can't reuse `CDK_ROW_TEMPLATE` because it's incompatible with local compilation mode.\nconst ROW_TEMPLATE = ``;\n/**\n * Header row definition for the mat-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nlet MatHeaderRowDef = /*#__PURE__*/(() => {\n class MatHeaderRowDef extends CdkHeaderRowDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderRowDef_BaseFactory;\n return function MatHeaderRowDef_Factory(__ngFactoryType__) {\n return (ɵMatHeaderRowDef_BaseFactory || (ɵMatHeaderRowDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderRowDef)))(__ngFactoryType__ || MatHeaderRowDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHeaderRowDef,\n selectors: [[\"\", \"matHeaderRowDef\", \"\"]],\n inputs: {\n columns: [0, \"matHeaderRowDef\", \"columns\"],\n sticky: [2, \"matHeaderRowDefSticky\", \"sticky\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkHeaderRowDef,\n useExisting: MatHeaderRowDef\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatHeaderRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer row definition for the mat-table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nlet MatFooterRowDef = /*#__PURE__*/(() => {\n class MatFooterRowDef extends CdkFooterRowDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterRowDef_BaseFactory;\n return function MatFooterRowDef_Factory(__ngFactoryType__) {\n return (ɵMatFooterRowDef_BaseFactory || (ɵMatFooterRowDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterRowDef)))(__ngFactoryType__ || MatFooterRowDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFooterRowDef,\n selectors: [[\"\", \"matFooterRowDef\", \"\"]],\n inputs: {\n columns: [0, \"matFooterRowDef\", \"columns\"],\n sticky: [2, \"matFooterRowDefSticky\", \"sticky\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkFooterRowDef,\n useExisting: MatFooterRowDef\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatFooterRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Data row definition for the mat-table.\n * Captures the data row's template and other properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nlet MatRowDef = /*#__PURE__*/(() => {\n class MatRowDef extends CdkRowDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatRowDef_BaseFactory;\n return function MatRowDef_Factory(__ngFactoryType__) {\n return (ɵMatRowDef_BaseFactory || (ɵMatRowDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatRowDef)))(__ngFactoryType__ || MatRowDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatRowDef,\n selectors: [[\"\", \"matRowDef\", \"\"]],\n inputs: {\n columns: [0, \"matRowDefColumns\", \"columns\"],\n when: [0, \"matRowDefWhen\", \"when\"]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkRowDef,\n useExisting: MatRowDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nlet MatHeaderRow = /*#__PURE__*/(() => {\n class MatHeaderRow extends CdkHeaderRow {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderRow_BaseFactory;\n return function MatHeaderRow_Factory(__ngFactoryType__) {\n return (ɵMatHeaderRow_BaseFactory || (ɵMatHeaderRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderRow)))(__ngFactoryType__ || MatHeaderRow);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatHeaderRow,\n selectors: [[\"mat-header-row\"], [\"tr\", \"mat-header-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"mat-mdc-header-row\", \"mdc-data-table__header-row\"],\n exportAs: [\"matHeaderRow\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkHeaderRow,\n useExisting: MatHeaderRow\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function MatHeaderRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return MatHeaderRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nlet MatFooterRow = /*#__PURE__*/(() => {\n class MatFooterRow extends CdkFooterRow {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterRow_BaseFactory;\n return function MatFooterRow_Factory(__ngFactoryType__) {\n return (ɵMatFooterRow_BaseFactory || (ɵMatFooterRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterRow)))(__ngFactoryType__ || MatFooterRow);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatFooterRow,\n selectors: [[\"mat-footer-row\"], [\"tr\", \"mat-footer-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"mat-mdc-footer-row\", \"mdc-data-table__row\"],\n exportAs: [\"matFooterRow\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkFooterRow,\n useExisting: MatFooterRow\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function MatFooterRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return MatFooterRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nlet MatRow = /*#__PURE__*/(() => {\n class MatRow extends CdkRow {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatRow_BaseFactory;\n return function MatRow_Factory(__ngFactoryType__) {\n return (ɵMatRow_BaseFactory || (ɵMatRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatRow)))(__ngFactoryType__ || MatRow);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatRow,\n selectors: [[\"mat-row\"], [\"tr\", \"mat-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"mat-mdc-row\", \"mdc-data-table__row\"],\n exportAs: [\"matRow\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkRow,\n useExisting: MatRow\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function MatRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return MatRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Row that can be used to display a message when no data is shown in the table. */\nlet MatNoDataRow = /*#__PURE__*/(() => {\n class MatNoDataRow extends CdkNoDataRow {\n constructor() {\n super(...arguments);\n this._contentClassName = 'mat-mdc-no-data-row';\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatNoDataRow_BaseFactory;\n return function MatNoDataRow_Factory(__ngFactoryType__) {\n return (ɵMatNoDataRow_BaseFactory || (ɵMatNoDataRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatNoDataRow)))(__ngFactoryType__ || MatNoDataRow);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatNoDataRow,\n selectors: [[\"ng-template\", \"matNoDataRow\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkNoDataRow,\n useExisting: MatNoDataRow\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatNoDataRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nlet MatTextColumn = /*#__PURE__*/(() => {\n class MatTextColumn extends CdkTextColumn {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatTextColumn_BaseFactory;\n return function MatTextColumn_Factory(__ngFactoryType__) {\n return (ɵMatTextColumn_BaseFactory || (ɵMatTextColumn_BaseFactory = i0.ɵɵgetInheritedFactory(MatTextColumn)))(__ngFactoryType__ || MatTextColumn);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatTextColumn,\n selectors: [[\"mat-text-column\"]],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 0,\n consts: [[\"matColumnDef\", \"\"], [\"mat-header-cell\", \"\", 3, \"text-align\", 4, \"matHeaderCellDef\"], [\"mat-cell\", \"\", 3, \"text-align\", 4, \"matCellDef\"], [\"mat-header-cell\", \"\"], [\"mat-cell\", \"\"]],\n template: function MatTextColumn_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0, 0);\n i0.ɵɵtemplate(1, MatTextColumn_th_1_Template, 2, 3, \"th\", 1)(2, MatTextColumn_td_2_Template, 2, 3, \"td\", 2);\n i0.ɵɵelementContainerEnd();\n }\n },\n dependencies: [MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell],\n encapsulation: 2\n });\n }\n }\n return MatTextColumn;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EXPORTED_DECLARATIONS = [\n// Table\nMatTable, MatRecycleRows,\n// Template defs\nMatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef,\n// Cell directives\nMatHeaderCell, MatCell, MatFooterCell,\n// Row directives\nMatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn];\nlet MatTableModule = /*#__PURE__*/(() => {\n class MatTableModule {\n static {\n this.ɵfac = function MatTableModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatTableModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatTableModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CdkTableModule, MatCommonModule]\n });\n }\n }\n return MatTableModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to\n * flaky browser support and the value not being defined in Closure's typings.\n */\nconst MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Data source that accepts a client-side data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\n * properties are accessed. Also allows for filter customization by overriding filterPredicate,\n * which defines how row data is converted to a string for filter matching.\n *\n * **Note:** This class is meant to be a simple data source to help you get started. As such\n * it isn't equipped to handle some more advanced cases like robust i18n support or server-side\n * interactions. If your app needs to support more advanced use cases, consider implementing your\n * own `DataSource`.\n */\nclass MatTableDataSource extends DataSource {\n /** Array of data that should be rendered by the table, where each object represents one row. */\n get data() {\n return this._data.value;\n }\n set data(data) {\n data = Array.isArray(data) ? data : [];\n this._data.next(data);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(data);\n }\n }\n /**\n * Filter term that should be used to filter out objects from the data array. To override how\n * data objects match to this filter string, provide a custom function for filterPredicate.\n */\n get filter() {\n return this._filter.value;\n }\n set filter(filter) {\n this._filter.next(filter);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(this.data);\n }\n }\n /**\n * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n * emitted by the MatSort will trigger an update to the table's rendered data.\n */\n get sort() {\n return this._sort;\n }\n set sort(sort) {\n this._sort = sort;\n this._updateChangeSubscription();\n }\n /**\n * Instance of the paginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the paginator will trigger an update to the\n * table's rendered data.\n *\n * Note that the data source uses the paginator's properties to calculate which page of data\n * should be displayed. If the paginator receives its properties as template inputs,\n * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n * initialized before assigning it to this data source.\n */\n get paginator() {\n return this._paginator;\n }\n set paginator(paginator) {\n this._paginator = paginator;\n this._updateChangeSubscription();\n }\n constructor(initialData = []) {\n super();\n /** Stream emitting render data to the table (depends on ordered data changes). */\n this._renderData = new BehaviorSubject([]);\n /** Stream that emits when a new filter string is set on the data source. */\n this._filter = new BehaviorSubject('');\n /** Used to react to internal changes of the paginator that are made by the data source itself. */\n this._internalPageChanges = new Subject();\n /**\n * Subscription to the changes that should trigger an update to the table's rendered rows, such\n * as filtering, sorting, pagination, or base data changes.\n */\n this._renderChangesSubscription = null;\n /**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n this.sortingDataAccessor = (data, sortHeaderId) => {\n const value = data[sortHeaderId];\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we leave them as strings.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n return value;\n };\n /**\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n this.sortData = (data, sort) => {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction == '') {\n return data;\n }\n return data.sort((a, b) => {\n let valueA = this.sortingDataAccessor(a, active);\n let valueB = this.sortingDataAccessor(b, active);\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n return comparatorResult * (direction == 'asc' ? 1 : -1);\n });\n };\n /**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n this.filterPredicate = (data, filter) => {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data).reduce((currentTerm, key) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + data[key] + '◬';\n }, '').toLowerCase();\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n return dataStr.indexOf(transformedFilter) != -1;\n };\n this._data = new BehaviorSubject(initialData);\n this._updateChangeSubscription();\n }\n /**\n * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n * changes occur, process the current state of the filter, sort, and pagination along with\n * the provided base data and send it to the table for rendering.\n */\n _updateChangeSubscription() {\n // Sorting and/or pagination should be watched if sort and/or paginator are provided.\n // The events should emit whenever the component emits a change or initializes, or if no\n // component is provided, a stream with just a null event should be provided.\n // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the\n // pipeline can progress to the next step. Note that the value from these streams are not used,\n // they purely act as a signal to progress in the pipeline.\n const sortChange = this._sort ? merge(this._sort.sortChange, this._sort.initialized) : of(null);\n const pageChange = this._paginator ? merge(this._paginator.page, this._internalPageChanges, this._paginator.initialized) : of(null);\n const dataStream = this._data;\n // Watch for base data or filter changes to provide a filtered set of data.\n const filteredData = combineLatest([dataStream, this._filter]).pipe(map(([data]) => this._filterData(data)));\n // Watch for filtered data or sort changes to provide an ordered set of data.\n const orderedData = combineLatest([filteredData, sortChange]).pipe(map(([data]) => this._orderData(data)));\n // Watch for ordered data or page changes to provide a paged set of data.\n const paginatedData = combineLatest([orderedData, pageChange]).pipe(map(([data]) => this._pageData(data)));\n // Watched for paged data changes and send the result to the table to render.\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\n }\n /**\n * Returns a filtered data array where each filter object contains the filter string within\n * the result of the filterPredicate function. If no filter is set, returns the data array\n * as provided.\n */\n _filterData(data) {\n // If there is a filter string, filter out data that does not contain it.\n // Each data object is converted to a string using the function defined by filterPredicate.\n // May be overridden for customization.\n this.filteredData = this.filter == null || this.filter === '' ? data : data.filter(obj => this.filterPredicate(obj, this.filter));\n if (this.paginator) {\n this._updatePaginator(this.filteredData.length);\n }\n return this.filteredData;\n }\n /**\n * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\n * data array as provided. Uses the default data accessor for data lookup, unless a\n * sortDataAccessor function is defined.\n */\n _orderData(data) {\n // If there is no active sort or direction, return the data without trying to sort.\n if (!this.sort) {\n return data;\n }\n return this.sortData(data.slice(), this.sort);\n }\n /**\n * Returns a paged slice of the provided data array according to the provided paginator's page\n * index and length. If there is no paginator provided, returns the data array as provided.\n */\n _pageData(data) {\n if (!this.paginator) {\n return data;\n }\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\n return data.slice(startIndex, startIndex + this.paginator.pageSize);\n }\n /**\n * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n * index does not exceed the paginator's last page. Values are changed in a resolved promise to\n * guard against making property changes within a round of change detection.\n */\n _updatePaginator(filteredDataLength) {\n Promise.resolve().then(() => {\n const paginator = this.paginator;\n if (!paginator) {\n return;\n }\n paginator.length = filteredDataLength;\n // If the page index is set beyond the page, reduce it to the last page.\n if (paginator.pageIndex > 0) {\n const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n if (newPageIndex !== paginator.pageIndex) {\n paginator.pageIndex = newPageIndex;\n // Since the paginator only emits after user-generated changes,\n // we need our own stream so we know to should re-render the data.\n this._internalPageChanges.next();\n }\n }\n });\n }\n /**\n * Used by the MatTable. Called when it connects to the data source.\n * @docs-private\n */\n connect() {\n if (!this._renderChangesSubscription) {\n this._updateChangeSubscription();\n }\n return this._renderData;\n }\n /**\n * Used by the MatTable. Called when it disconnects from the data source.\n * @docs-private\n */\n disconnect() {\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = null;\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRecycleRows, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule, MatTextColumn };\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '@nha/api/http-service.class';\nimport { ScholarApiConfiguration } from './scholar-api.configuration';\nimport { Observable } from 'rxjs';\nimport { IImpersonationUserSearchResult } from '../../types/iimpersonation-user-search-result.interface';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ImpersonationService extends HttpService {\n\tconstructor(config: ScholarApiConfiguration) {\n\t\tsuper(config, 'impersonation');\n\t}\n\n\tsearchForUser(searchTerm: string, userType: 'Guardian' | 'Student'): Observable {\n\t\treturn this.get(`${this.serviceUrl}/search`, { params: { searchTerm, userType } });\n\t}\n}\n","import { Component, computed, inject, input, InputSignal, OnDestroy, OnInit, Signal, signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentLoaderService } from 'nha-services';\nimport { StaffHeaderComponent } from './components/staff-header/staff-header.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Cookies } from 'nha-services';\nimport { RightContentPageTemplateComponent } from '@nha/components/page-templates/right-content-page-template/right-content-page-template.component';\nimport { HeaderComponent } from '@nha/components/header/header.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\nimport { ImpersonationService } from '../../shared/services/api/impersonation.service';\nimport { take } from 'rxjs';\nimport { IImpersonationUserSearchResult } from '../../shared/types/iimpersonation-user-search-result.interface';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LoaderComponent } from '../../shared/components/loader/loader.component';\n\ninterface IImpersonationUserSearchResultExt extends IImpersonationUserSearchResult {\n\tname: string;\n}\n\n@Component({\n\tselector: 'app-staff',\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tMatButtonModule,\n\t\tRightContentPageTemplateComponent,\n\t\tHeaderComponent,\n\t\tMatSelectModule,\n\t\tMatFormFieldModule,\n\t\tMatIconModule,\n\t\tMatInputModule,\n\t\tMatTableModule,\n\t\tLoaderComponent\n\t],\n\ttemplateUrl: './staff.component.html',\n\tstyleUrl: './staff.component.scss'\n})\nexport class StaffComponent implements OnInit, OnDestroy {\n\tprivate _impersonationService: ImpersonationService = inject(ImpersonationService);\n\tprivate _componentLoaderService: ComponentLoaderService = inject(ComponentLoaderService);\n\n\tpublic userGuid: InputSignal = input();\n\tpublic userType: InputSignal = input();\n\n\tprivate _searchResults: WritableSignal = signal([]);\n\n\tpublic searching: WritableSignal = signal(false);\n\tpublic showImpersonationMessage: WritableSignal = signal(false);\n\tpublic sortColumn: WritableSignal = signal('lastName');\n\tpublic sortDirection: WritableSignal = signal('asc');\n\n\tpublic sortedResults: Signal = computed(() => {\n\t\tconst results = this._searchResults().map((result) => {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tname: `${result.firstName} ${result.lastName}`\n\t\t\t};\n\t\t});\n\n\t\tconst column = this.sortColumn();\n\t\tconst direction = this.sortDirection();\n\n\t\tif (results.length === 0) {\n\t\t\treturn results;\n\t\t}\n\n\t\treturn results.sort((a, b) => {\n\t\t\tconst aValue = a[column];\n\t\t\tconst bValue = b[column];\n\n\t\t\tif ((aValue ?? 0) < (bValue ?? 0)) {\n\t\t\t\treturn direction === 'asc' ? -1 : 1;\n\t\t\t}\n\n\t\t\tif ((aValue ?? 0) > (bValue ?? 0)) {\n\t\t\t\treturn direction === 'asc' ? 1 : -1;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\t});\n\n\tpublic searchForm: FormGroup = new FormGroup({\n\t\tsearchTerm: new FormControl(null, [Validators.required]),\n\t\tuserType: new FormControl('Guardian', [Validators.required])\n\t});\n\n\tsearch(): void {\n\t\tthis.searching.set(true);\n\t\tthis._searchResults.set([]);\n\n\t\tthis._impersonationService\n\t\t\t.searchForUser(this.searchForm.get('searchTerm')?.value, this.searchForm.get('userType')?.value)\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((searchResults) => {\n\t\t\t\tthis._searchResults.set(searchResults);\n\t\t\t\tthis.searching.set(false);\n\t\t\t});\n\t}\n\n\timpersonate(user: { userGuid: string; userType: string }): void {\n\t\tthis.showImpersonationMessage.set(true);\n\n\t\tCookies.set('impersonation-user', user.userGuid);\n\t\tCookies.set('impersonation-user-type', user.userType.toLowerCase());\n\t\tCookies.set('impersonation-timestamp', new Date().toLocaleTimeString());\n\n\t\twindow.location.href = '/';\n\t}\n\n\tgetSchoolNames(schools: { schoolID: number; schoolName: string }[]): string {\n\t\treturn schools.map((school) => school.schoolName).join(', ');\n\t}\n\n\tngOnInit(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(StaffHeaderComponent);\n\n\t\tif (this.userGuid() && this.userType()) {\n\t\t\tconst userGuid = this.userGuid();\n\t\t\tconst userType = this.userType();\n\t\t\tif (userGuid && userType) {\n\t\t\t\tthis.impersonate({ userGuid, userType });\n\t\t\t}\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(null);\n\t}\n\n\tsort(column: keyof IImpersonationUserSearchResultExt, direction: 'asc' | 'desc'): void {\n\t\tthis.sortColumn.set(column);\n\t\tthis.sortDirection.set(direction);\n\t}\n}\n","@if (showImpersonationMessage()) {\n\t
\n\t\t Starting impersonation session...\n\t
\n} @else {\n\t\n\t\t
\n\t\t\tImpersonation\n\n\t\t\t
Search for a user to impersonate.
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\tSearch Results\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tUser ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ result.userID }}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tUser Guid\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tFirst Name\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{{ result.firstName }}\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tLast Name\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{{ result.lastName }}\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tName\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{{ result.name }}\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tEmail\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ result.email }}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHas Account?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t@if (result.hasParentPortalAccount) {\n\t\t\t\t\t\t\tcheck\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tSchools\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_up\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tarrow_drop_down\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ getSchoolNames(result.schools) }}
\n\n\t\t\t@if (sortedResults().length === 0 && searching() === false) {\n\t\t\t\t
No results found.
\n\t\t\t}\n\n\t\t\t@if (searching() === true) {\n\t\t\t\t
Searching...
\n\t\t\t}\n\t\t\n\t\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UserStateService } from '../../shared/state/user.state';\nimport { IStudentUser, IUser } from '../../shared/types/iuser.interface';\nimport { filter, Observable } from 'rxjs';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { PageBaseComponent } from '../page-base.component';\n\n@Component({\n\tselector: 'app-landing',\n\tstandalone: true,\n\timports: [CommonModule],\n\ttemplate: ''\n})\nexport class LandingComponent extends PageBaseComponent implements OnInit {\n\tprivate _router: Router = inject(Router);\n\tprivate _userStateService: UserStateService = inject(UserStateService);\n\n\tprivate _user: Observable = toObservable(this._userStateService.user).pipe(\n\t\tfilter((user) => user !== undefined),\n\t\ttakeUntilDestroyed()\n\t);\n\n\tngOnInit(): void {\n\t\tthis._user.subscribe((user: IUser) => {\n\t\t\tconst studentUser = this._userStateService.to(user);\n\n\t\t\tconst userNav: { [key: string]: string } = {\n\t\t\t\tstudent: `/student/${studentUser.userID}/${studentUser.currentAcademicYearStudentInSchoolID}`,\n\t\t\t\tstaff: '/staff',\n\t\t\t\tguardian: '/home'\n\t\t\t};\n\n\t\t\tthis._router.navigate([userNav[user.userType]]);\n\t\t});\n\t}\n}\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, Input, Directive, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Injection token that can be used to provide the default options the card module. */\nconst _c0 = [\"*\"];\nconst _c1 = [[[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"], [\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"], [\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"], [\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"], [\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]], \"*\"];\nconst _c2 = [\"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"[mat-card-image], [matCardImage],\\n [mat-card-sm-image], [matCardImageSmall],\\n [mat-card-md-image], [matCardImageMedium],\\n [mat-card-lg-image], [matCardImageLarge],\\n [mat-card-xl-image], [matCardImageXLarge]\", \"*\"];\nconst _c3 = [[[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]], [[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], \"*\"];\nconst _c4 = [\"[mat-card-avatar], [matCardAvatar]\", \"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"*\"];\nconst MAT_CARD_CONFIG = /*#__PURE__*/new InjectionToken('MAT_CARD_CONFIG');\n/**\n * Material Design card component. Cards contain content and actions about a single subject.\n * See https://material.io/design/components/cards.html\n *\n * MatCard provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCard = /*#__PURE__*/(() => {\n class MatCard {\n constructor(config) {\n this.appearance = config?.appearance || 'raised';\n }\n static {\n this.ɵfac = function MatCard_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCard)(i0.ɵɵdirectiveInject(MAT_CARD_CONFIG, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCard,\n selectors: [[\"mat-card\"]],\n hostAttrs: [1, \"mat-mdc-card\", \"mdc-card\"],\n hostVars: 4,\n hostBindings: function MatCard_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-card-outlined\", ctx.appearance === \"outlined\")(\"mdc-card--outlined\", ctx.appearance === \"outlined\");\n }\n },\n inputs: {\n appearance: \"appearance\"\n },\n exportAs: [\"matCard\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatCard_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\".mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mdc-elevated-card-container-color, var(--mat-app-surface-container-low));border-color:var(--mdc-elevated-card-container-color, var(--mat-app-surface-container-low));border-radius:var(--mdc-elevated-card-container-shape, var(--mat-app-corner-medium));box-shadow:var(--mdc-elevated-card-container-elevation, var(--mat-app-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:\\\"\\\";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mdc-elevated-card-container-shape, var(--mat-app-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mdc-outlined-card-container-color, var(--mat-app-surface));border-radius:var(--mdc-outlined-card-container-shape, var(--mat-app-corner-medium));border-width:var(--mdc-outlined-card-outline-width);border-color:var(--mdc-outlined-card-outline-color, var(--mat-app-outline-variant));box-shadow:var(--mdc-outlined-card-container-elevation, var(--mat-app-level0))}.mat-mdc-card-outlined::after{border:none}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:\\\"\\\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-app-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-app-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-app-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-app-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-app-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-app-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-app-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-app-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-app-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-app-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-app-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCard;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(jelbourn): add `MatActionCard`, which is a card that acts like a button (and has a ripple).\n// Supported in MDC with `.mdc-card__primary-action`. Will require additional a11y docs for users.\n/**\n * Title of a card, intended for use within ``. This component is an optional\n * convenience for one variety of card title; any custom title element may be used in its place.\n *\n * MatCardTitle provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardTitle = /*#__PURE__*/(() => {\n class MatCardTitle {\n static {\n this.ɵfac = function MatCardTitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardTitle)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardTitle,\n selectors: [[\"mat-card-title\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"matCardTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-title\"],\n standalone: true\n });\n }\n }\n return MatCardTitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container intended to be used within the `` component. Can contain exactly one\n * ``, one `` and one content image of any size\n * (e.g. ``).\n */\nlet MatCardTitleGroup = /*#__PURE__*/(() => {\n class MatCardTitleGroup {\n static {\n this.ɵfac = function MatCardTitleGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardTitleGroup)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCardTitleGroup,\n selectors: [[\"mat-card-title-group\"]],\n hostAttrs: [1, \"mat-mdc-card-title-group\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c2,\n decls: 4,\n vars: 0,\n template: function MatCardTitleGroup_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c1);\n i0.ɵɵelementStart(0, \"div\");\n i0.ɵɵprojection(1);\n i0.ɵɵelementEnd();\n i0.ɵɵprojection(2, 1);\n i0.ɵɵprojection(3, 2);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCardTitleGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Content of a card, intended for use within ``. This component is an optional\n * convenience for use with other convenience elements, such as ``; any custom\n * content block element may be used in its place.\n *\n * MatCardContent provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardContent = /*#__PURE__*/(() => {\n class MatCardContent {\n static {\n this.ɵfac = function MatCardContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardContent)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardContent,\n selectors: [[\"mat-card-content\"]],\n hostAttrs: [1, \"mat-mdc-card-content\"],\n standalone: true\n });\n }\n }\n return MatCardContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Sub-title of a card, intended for use within `` beneath a ``. This\n * component is an optional convenience for use with other convenience elements, such as\n * ``.\n *\n * MatCardSubtitle provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardSubtitle = /*#__PURE__*/(() => {\n class MatCardSubtitle {\n static {\n this.ɵfac = function MatCardSubtitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardSubtitle)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardSubtitle,\n selectors: [[\"mat-card-subtitle\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-subtitle\"],\n standalone: true\n });\n }\n }\n return MatCardSubtitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Bottom area of a card that contains action buttons, intended for use within ``.\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom action block element may be used in its place.\n *\n * MatCardActions provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardActions = /*#__PURE__*/(() => {\n class MatCardActions {\n constructor() {\n // TODO(jelbourn): deprecate `align` in favor of `actionPosition` or `actionAlignment`\n // as to not conflict with the native `align` attribute.\n /** Position of the actions inside the card. */\n this.align = 'start';\n }\n static {\n this.ɵfac = function MatCardActions_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardActions)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardActions,\n selectors: [[\"mat-card-actions\"]],\n hostAttrs: [1, \"mat-mdc-card-actions\", \"mdc-card__actions\"],\n hostVars: 2,\n hostBindings: function MatCardActions_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-card-actions-align-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\"\n },\n exportAs: [\"matCardActions\"],\n standalone: true\n });\n }\n }\n return MatCardActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header region of a card, intended for use within ``. This header captures\n * a card title, subtitle, and avatar. This component is an optional convenience for use with\n * other convenience elements, such as ``; any custom header block element may be\n * used in its place.\n *\n * MatCardHeader provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardHeader = /*#__PURE__*/(() => {\n class MatCardHeader {\n static {\n this.ɵfac = function MatCardHeader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardHeader)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCardHeader,\n selectors: [[\"mat-card-header\"]],\n hostAttrs: [1, \"mat-mdc-card-header\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c4,\n decls: 4,\n vars: 0,\n consts: [[1, \"mat-mdc-card-header-text\"]],\n template: function MatCardHeader_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c3);\n i0.ɵɵprojection(0);\n i0.ɵɵelementStart(1, \"div\", 0);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵelementEnd();\n i0.ɵɵprojection(3, 2);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCardHeader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer area a card, intended for use within ``.\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom footer block element may be used in its place.\n *\n * MatCardFooter provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardFooter = /*#__PURE__*/(() => {\n class MatCardFooter {\n static {\n this.ɵfac = function MatCardFooter_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardFooter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardFooter,\n selectors: [[\"mat-card-footer\"]],\n hostAttrs: [1, \"mat-mdc-card-footer\"],\n standalone: true\n });\n }\n }\n return MatCardFooter;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(jelbourn): deprecate the \"image\" selectors to replace with \"media\".\n// TODO(jelbourn): support `.mdc-card__media-content`.\n/**\n * Primary image content for a card, intended for use within ``. Can be applied to\n * any media element, such as `` or ``.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom media element may be used in its place.\n *\n * MatCardImage provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardImage = /*#__PURE__*/(() => {\n class MatCardImage {\n static {\n this.ɵfac = function MatCardImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardImage,\n selectors: [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but small. */\nlet MatCardSmImage = /*#__PURE__*/(() => {\n class MatCardSmImage {\n static {\n this.ɵfac = function MatCardSmImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardSmImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardSmImage,\n selectors: [[\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-sm-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardSmImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but medium. */\nlet MatCardMdImage = /*#__PURE__*/(() => {\n class MatCardMdImage {\n static {\n this.ɵfac = function MatCardMdImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardMdImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardMdImage,\n selectors: [[\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-md-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardMdImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but large. */\nlet MatCardLgImage = /*#__PURE__*/(() => {\n class MatCardLgImage {\n static {\n this.ɵfac = function MatCardLgImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardLgImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardLgImage,\n selectors: [[\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-lg-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardLgImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but extra-large. */\nlet MatCardXlImage = /*#__PURE__*/(() => {\n class MatCardXlImage {\n static {\n this.ɵfac = function MatCardXlImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardXlImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardXlImage,\n selectors: [[\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-xl-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardXlImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Avatar image content for a card, intended for use within ``. Can be applied to\n * any media element, such as `` or ``.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom media element may be used in its place.\n *\n * MatCardAvatar provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardAvatar = /*#__PURE__*/(() => {\n class MatCardAvatar {\n static {\n this.ɵfac = function MatCardAvatar_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardAvatar)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardAvatar,\n selectors: [[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-avatar\"],\n standalone: true\n });\n }\n }\n return MatCardAvatar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CARD_DIRECTIVES = [MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage];\nlet MatCardModule = /*#__PURE__*/(() => {\n class MatCardModule {\n static {\n this.ɵfac = function MatCardModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatCardModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CommonModule, MatCommonModule]\n });\n }\n }\n return MatCardModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_CARD_CONFIG, MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n","\nimport { Injectable } from '@angular/core';\nimport { HttpService } from '@nha/api/http-service.class';\nimport { Observable } from 'rxjs';\nimport { ScholarApiConfiguration } from './scholar-api.configuration';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ReEnrollmentService extends HttpService {\n\tconstructor(config: ScholarApiConfiguration) {\n\t\tsuper(config, 'reenrollment');\n\t}\n\n\n\tsaveReEnrollmentDecision(decision: any): Observable {\n\t\treturn this.http.post(`${this.serviceUrl}/reEnrollingDecision/decisions`, decision);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnDestroy, OnInit, Signal, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { SnackbarService } from '@nha/components/snack-bar/snack-bar.service';\nimport { APP_CONFIG } from '@nha/config/interfaces/iapp-settings.interface';\nimport { ComponentLoaderService } from 'nha-services';\nimport { map, take } from 'rxjs';\nimport { ContentBoxComponent } from '../../../../../../libs/components/content-box/content-box.component';\nimport { HeaderComponent } from '../../../../../../libs/components/header/header.component';\nimport { LeftContentPageTemplateComponent } from '../../../../../../libs/components/page-templates/left-content-page-template/left-content-page-template.component';\nimport { LoaderComponent } from '../../shared/components/loader/loader.component';\nimport { PageTitleComponent } from '../../shared/components/page-title/page-title.component';\nimport { StudentWithdrawalDirective } from '../../shared/directives/student-withdrawal.directive';\nimport { StudentInSchoolMasterStatus } from '../../shared/enums/student-in-school-master-status.enum';\nimport { ReEnrollmentService } from '../../shared/services/api/reenrollment.service';\nimport { StudentStateService } from '../../shared/state';\nimport { IStudentInSchoolRecord } from '../../shared/types/istudent.interface';\n\ninterface IStudentForReEnrollment {\n\tstudentID: number;\n\tfirstName: string;\n\tlastName: string;\n\tschoolID: number;\n\tschoolName: string;\n\tacademicYear: number;\n\tgradeLevelID: number;\n\tstudentInSchoolID: number;\n\tshowReenrollmentAlert: boolean;\n\treenrollingDecisionOptionID: number;\n\treenrollingDecisionNotes: string;\n}\n\nexport enum ReEnrollmentDecisionOptionEnum {\n\tyes = 2,\n\tnoConfirmed = 3,\n\tundecided = 4,\n\tnoUnconfirmed = 5\n}\n\n@Component({\n\tselector: 'app-reenrollment',\n\ttemplateUrl: './reenrollment.component.html',\n\tstyleUrls: ['./reenrollment.component.scss'],\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tMatButtonModule,\n\t\tMatCardModule,\n\t\tMatRadioModule,\n\t\tMatFormFieldModule,\n\t\tMatIconModule,\n\t\tMatInputModule,\n\t\tMatProgressBar,\n\t\tLeftContentPageTemplateComponent,\n\t\tHeaderComponent,\n\t\tContentBoxComponent,\n\t\tReactiveFormsModule,\n\t\tLoaderComponent,\n\t\tStudentWithdrawalDirective\n\t]\n})\nexport class ReEnrollmentComponent implements OnInit, OnDestroy {\n\tprivate _fb: UntypedFormBuilder = inject(UntypedFormBuilder);\n\tprivate _reEnrollmentService: ReEnrollmentService = inject(ReEnrollmentService);\n\tprivate _componentLoaderService: ComponentLoaderService = inject(ComponentLoaderService);\n\tprivate _studentStateService: StudentStateService = inject(StudentStateService);\n\tprivate _snackbar: SnackbarService = inject(SnackbarService);\n\tprivate _appConfig = inject(APP_CONFIG);\n\n\tpublic studentWithdrawalLink: WritableSignal = signal('');\n\tpublic saving: WritableSignal = signal(false);\n\tpublic loading: WritableSignal = signal(true);\n\n\tpublic primaryStudentInSchool: Signal = computed(() => {\n\t\tconst students = this.students();\n\n\t\tif (students.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this._studentStateService.primaryStudentInSchool(students[0].studentID)();\n\t});\n\n\tpublic students: WritableSignal = signal([]);\n\n\tpublic reEnrollmentClosed = computed(() => {\n\t\t// check student reenrollment start/end dates\n\t\tconst primaryStudentInSchool = this.primaryStudentInSchool();\n\t\tif (primaryStudentInSchool) {\n\t\t\tconst reEnrollmentStart = primaryStudentInSchool.reEnrollmentStartDate;\n\t\t\tconst reEnrollmentEnd = primaryStudentInSchool.reEnrollmentEndDate;\n\t\t\tconst currentDate = new Date();\n\t\t\treturn currentDate <= new Date(reEnrollmentStart) || currentDate >= new Date(reEnrollmentEnd);\n\t\t}\n\n\t\treturn true;\n\t});\n\n\tpublic applyUrls = computed(() => {\n\t\tconst students = this.students();\n\t\tif (students.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\tconst uniqueSchools = new Set(students.map((x) => x.schoolName));\n\t\treturn Array.from(uniqueSchools).map((schoolName) => {\n\t\t\treturn {\n\t\t\t\tschoolName,\n\t\t\t\turl: this.constructoSchoolApplicationUrl(schoolName)\n\t\t\t};\n\t\t});\n\t});\n\n\tpublic constructoSchoolApplicationUrl(schoolName: string): string {\n\t\treturn `${this._appConfig.cmsBaseUrl}/schools/${schoolName.toLowerCase().replace(/ /g, '-')}/en/apply`;\n\t}\n\n\tpublic form: Signal = computed(() => {\n\t\tconst form: FormGroup = this._fb.group({});\n\n\t\tif (this.students().length === 0) {\n\t\t\treturn form;\n\t\t}\n\n\t\tthis.students().forEach((student) => {\n\t\t\tform.addControl(\n\t\t\t\t`${student.studentInSchoolID}`,\n\t\t\t\tthis._fb.group({\n\t\t\t\t\treenrollingDecisionOptionID: new FormControl(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: student.reenrollingDecisionOptionID,\n\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\tthis.reEnrollmentClosed() ||\n\t\t\t\t\t\t\t\tstudent.reenrollingDecisionOptionID === this.reEnrollingDecision.noUnconfirmed ||\n\t\t\t\t\t\t\t\tstudent.reenrollingDecisionOptionID === this.reEnrollingDecision.noConfirmed\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValidators.required\n\t\t\t\t\t),\n\t\t\t\t\treenrollingDecisionNotes: new FormControl({\n\t\t\t\t\t\tvalue: student.reenrollingDecisionNotes,\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tthis.reEnrollmentClosed() ||\n\t\t\t\t\t\t\tstudent.reenrollingDecisionOptionID === this.reEnrollingDecision.noUnconfirmed ||\n\t\t\t\t\t\t\tstudent.reenrollingDecisionOptionID === this.reEnrollingDecision.noConfirmed\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\n\t\treturn form;\n\t});\n\n\tpublic reEnrollingDecision: typeof ReEnrollmentDecisionOptionEnum = ReEnrollmentDecisionOptionEnum;\n\tpublic reEnrollingDecisionOptions: { id: number; name: string }[] = [\n\t\t{ id: ReEnrollmentDecisionOptionEnum.yes, name: 'Yes' },\n\t\t{ id: ReEnrollmentDecisionOptionEnum.noUnconfirmed, name: 'No' },\n\t\t{ id: ReEnrollmentDecisionOptionEnum.undecided, name: 'Undecided' }\n\t];\n\n\tconstructor() {\n\t\ttoObservable(this._studentStateService.students)\n\t\t\t.pipe(\n\t\t\t\tmap((students) =>\n\t\t\t\t\tstudents.map((student) => {\n\t\t\t\t\t\tconst studentInSchool = student.studentInSchoolRecords.find((sis) => sis.masterStatusID == StudentInSchoolMasterStatus.Enrolled);\n\n\t\t\t\t\t\t// 7 = 6th grade, 497 = Westfield Charter\n\t\t\t\t\t\tconst isSixthGradeAtWestfieldCharter = studentInSchool?.gradeLevelID === 7 && studentInSchool?.schoolID === 497;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstudentID: student.studentID,\n\t\t\t\t\t\t\tfirstName: student.firstName,\n\t\t\t\t\t\t\tlastName: student.lastName,\n\t\t\t\t\t\t\tschoolID: studentInSchool?.schoolID,\n\t\t\t\t\t\t\tschoolName: studentInSchool?.schoolName,\n\t\t\t\t\t\t\tschoolNameDisplay: isSixthGradeAtWestfieldCharter ? 'Westfield Preparatory High School' : studentInSchool?.schoolName,\n\t\t\t\t\t\t\tacademicYear: (studentInSchool?.academicYearID || 0) + 1,\n\t\t\t\t\t\t\tgradeLevelID: studentInSchool?.gradeLevelID,\n\t\t\t\t\t\t\tstudentInSchoolID: studentInSchool?.studentInSchoolID,\n\t\t\t\t\t\t\tshowReenrollmentAlert: student.showReenrollmentAlert,\n\t\t\t\t\t\t\treenrollingDecisionOptionID: studentInSchool?.reenrollingDecisionOptionID,\n\t\t\t\t\t\t\treenrollingDecisionNotes: studentInSchool?.reenrollingDecisionNotes\n\t\t\t\t\t\t} as IStudentForReEnrollment;\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\ttakeUntilDestroyed()\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (students) => {\n\t\t\t\t\tthis.loading.set(false);\n\t\t\t\t\tthis.students.set(students.filter((student) => student.showReenrollmentAlert));\n\t\t\t\t},\n\t\t\t\terror: (error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthis.students.set([]);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(PageTitleComponent);\n\t\tthis._componentLoaderService.getContainer('banner-main-content').inputs.set({ title: 'Re-Enrollment', backRoute: '/' });\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._componentLoaderService.getContainer('banner-main-content').component.set(null);\n\t\tthis._componentLoaderService.getContainer('banner-main-content').inputs.set({});\n\t}\n\n\tgetFormGroup(studentInSchoolID: number): UntypedFormGroup {\n\t\treturn this.form().get(`${studentInSchoolID}`) as UntypedFormGroup;\n\t}\n\n\tgetFormControl(formGroup: UntypedFormGroup, fieldName: string): FormControl {\n\t\treturn formGroup.get(fieldName) as FormControl;\n\t}\n\n\tonSubmit(): void {\n\t\tif (this.form().valid) {\n\t\t\tthis.saveReEnrollmentDecision();\n\t\t}\n\t}\n\n\tsaveReEnrollmentDecision(): void {\n\t\tconst decisions: any[] = [];\n\t\tObject.keys(this.form().value).forEach((sisID) => {\n\t\t\tconst decisionID: number = this.form().value[sisID].reenrollingDecisionOptionID;\n\t\t\tconst decisionNotes: string = this.form().value[sisID].reenrollingDecisionNotes;\n\n\t\t\tdecisions.push({\n\t\t\t\tdate: new Date().toISOString(),\n\t\t\t\tstudentInSchoolID: sisID,\n\t\t\t\treEnrollingDecisionOptionID: decisionID,\n\t\t\t\tisParentPortalDecision: true,\n\t\t\t\tnotes: decisionID === this.reEnrollingDecision.yes ? '' : decisionNotes\n\t\t\t});\n\t\t});\n\n\t\tthis.saving.set(true);\n\n\t\tthis._reEnrollmentService\n\t\t\t.saveReEnrollmentDecision(decisions)\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\tthis._studentStateService.loadStudents();\n\n\t\t\t\t\tthis._snackbar.success('Re-enrollment decisions submitted successfully!');\n\t\t\t\t\tthis.saving.set(false);\n\t\t\t\t\tthis.loading.set(true);\n\t\t\t\t},\n\t\t\t\terror: () => {\n\t\t\t\t\tthis._snackbar.error('Error submitting re-enrollment. Please try again later.');\n\t\t\t\t\tthis.saving.set(false);\n\t\t\t\t}\n\t\t\t});\n\t}\n}\n","@if (loading()) {\n\t\n} @else {\n\t\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tWhat are your plans for next year?\n\t\t\t\t\t

\n\t\t\t\t\t\tSharing your intent to re-enroll helps us plan for another great year of learning. You can change a \"yes\" or \"undecided\" response until\n\t\t\t\t\t\tonline re-enrollment closes on May 31st. However, a \"no\" response is final, and you'll need to submit a new application if you decide to\n\t\t\t\t\t\treturn.\n\t\t\t\t\t

\n\t\t\t\t\t@if (reEnrollmentClosed()) {\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Online Re-enrollment closed

\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tOnline re-enrollment is available from {{ primaryStudentInSchool()?.reEnrollmentStartDate | date }} until\n\t\t\t\t\t\t\t\t{{ primaryStudentInSchool()?.reEnrollmentEndDate | date }}. If you have questions regarding your child's enrollment, please\n\t\t\t\t\t\t\t\tcontact the school office.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t@for (student of students(); track student.studentID) {\n\t\t\t\t\t\t\t\t@let formGroup = getFormGroup(student.studentInSchoolID);\n\t\t\t\t\t\t\t\t@let decisionID = getFormControl(formGroup, 'reenrollingDecisionOptionID');\n\t\t\t\t\t\t\t\t@let decisionNotes = getFormControl(formGroup, 'reenrollingDecisionNotes');\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tWill {{ student.firstName }} {{ student.lastName }} return to {{ student.schoolName }} in the fall of 2025?\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t@for (option of reEnrollingDecisionOptions; track option.id) {\n\t\t\t\t\t\t\t\t\t\t\t\t{{ option.name }}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t@if (formGroup.invalid && formGroup.touched) {\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tPlease select an option.\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t@if (student.reenrollingDecisionOptionID === reEnrollingDecision.noUnconfirmed) {\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tIt looks like you've let us know that your child won't be returning in the fall. If you decide later\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat you'd like them to attend, please visit our website to complete a new application:\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tApply To {{ student.schoolName }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t@let decisionValue = decisionID?.value;\n\n\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\tdecisionValue &&\n\t\t\t\t\t\t\t\t\t\t\tdecisionValue !== reEnrollingDecision.yes &&\n\t\t\t\t\t\t\t\t\t\t\tstudent.reenrollingDecisionOptionID !== reEnrollingDecision.noUnconfirmed\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (decisionValue === reEnrollingDecision.undecided) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLet us know if we can help with your decision. We'll save a seat for\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ student.firstName }} for next fall just in case!\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (decisionValue === reEnrollingDecision.noUnconfirmed) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWe're sorry to hear {{ student.firstName }} won't be attending next fall. Please provide us a reason\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tso that we may improve.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tNotes\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ decisionNotes?.value?.length || 0 }}/750\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t@if (decisionValue === reEnrollingDecision.noUnconfirmed) {\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\tAre you leaving the school?\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tIf you do not plan to re-enroll your child, please complete the Withdrawal Form to indicate whether the\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twithdrawal is immediate or at the end of the school year. Once submitted and processed, your child will\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbe withdrawn on the specified date.
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tIf you decide to return after submitting the Withdrawal Form, you will need to complete a new\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tapplication and restart the enrollment process.\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWithdraw Form\n\t\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t@if (!reEnrollmentClosed()) {\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t@if (saving()) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tSubmit Re-Enrollment Decisions\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\tApplying for siblings?\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\tIf you have an incoming kindergartener or another child who does not currently attend an NHA school, you can apply for that child below.\n\t\t\t\t\t\t

\n\t\t\t\t\t\t@for (link of applyUrls(); track link.schoolName) {\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tApply to {{ link.schoolName }}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\tMoving out of the area?\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

Check out our other NHA school locations. Click here.

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\n\t\t\n\t\t\t
\n\t\t\t\tWhat makes an NHA school the best choice for your child's continued success?\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\tBetter Chance For Success\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
NHA students who stay enrolled are 2X more likely to achieve grade level in reading and math.
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tshow_chart\n\t\t\t\t\t\t\t\t\t2X\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\tMore Learning Time\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tStudents at NHA-Partner schools gain nearly +3.5 months of additional learning each year compared to their\n\t\t\t\t\t\t\t\ttraditional public school peers.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tmenu_book\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
+46 additional days in reading
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tcalculate\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
+69 additional days in math
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\tTop Performing Schools\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tbubble_chart\n\t\t\t\t\t\t\t\t\t4 out of 5\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
4 out of 5 NHA-partner schools outperform their local district
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tbar_chart\n\t\t\t\t\t\t\t\t\t82%\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
NHA outperforms 82% of charter school operators nationwide
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\tLearn More!\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n}\n","import { Component, inject, input, OnInit, signal } from '@angular/core';\nimport { LoaderComponent } from '../../shared/components/loader/loader.component';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { catchError, switchMap, take, tap } from 'rxjs';\nimport { OktaService } from '../../shared/services/api/okta.service';\nimport { ContentBoxComponent } from '@nha/components/content-box/content-box.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Router, RouterModule } from '@angular/router';\nimport { StorageService } from 'nha-services';\nimport { PageBaseComponent } from '../page-base.component';\n\n@Component({\n\tselector: 'app-activate',\n\ttemplateUrl: './activate.component.html',\n\tstyleUrls: ['./activate.component.scss'],\n\tstandalone: true,\n\timports: [RouterModule, LoaderComponent, ContentBoxComponent, MatButtonModule]\n})\nexport class ActivateComponent extends PageBaseComponent implements OnInit {\n\tguardianGuid = input();\n\tloading = signal(true);\n\temailHint = signal('');\n\taccountState = signal('NotFound');\n\tprivate _storageService: StorageService = new StorageService(true);\n\n\tprivate _accountService = inject(OktaService);\n\tprivate _router = inject(Router);\n\n\tconstructor() {\n\t\tsuper();\n\t\ttoObservable(this.guardianGuid)\n\t\t\t.pipe(\n\t\t\t\ttap(() => this.loading.set(true)),\n\t\t\t\tswitchMap((guid) => {\n\t\t\t\t\tif (guid) {\n\t\t\t\t\t\treturn this._accountService.getActivationStatus(guid);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tcatchError((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthis.loading.set(false);\n\t\t\t\t\tthis.accountState.set('NotFound');\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t)\n\t\t\t.subscribe((response) => {\n\t\t\t\tthis.loading.set(false);\n\t\t\t\tif (response.status === 'Active') {\n\t\t\t\t\tthis.redirectToLogin();\n\t\t\t\t} else {\n\t\t\t\t\tthis.accountState.set(response?.status || 'NotFound');\n\t\t\t\t\tthis.emailHint.set(response?.emailHint);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngOnInit() {\n\t\tif (this.isLoggedIn) {\n\t\t\tthis._router.navigate(['/']);\n\t\t}\n\t}\n\n\tresendEmail() {\n\t\tconst guid = this.guardianGuid();\n\t\tif (guid) {\n\t\t\tthis.loading.set(true);\n\t\t\tthis._accountService\n\t\t\t\t.resendActivation(guid)\n\t\t\t\t.pipe(\n\t\t\t\t\ttake(1),\n\t\t\t\t\tcatchError((error) => {\n\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\tthis.loading.set(false);\n\t\t\t\t\t\tthis.accountState.set('NotFound');\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.subscribe((response) => {\n\t\t\t\t\tthis.loading.set(false);\n\t\t\t\t\tthis.accountState.set(response?.status || 'NotFound');\n\t\t\t\t\tthis.emailHint.set(response?.emailHint);\n\t\t\t\t});\n\t\t}\n\t}\n\n\tredirectToLogin() {\n\t\tthis._storageService.remove('loginType');\n\t\tthis._storageService.remove('redirectOnLogin');\n\t\tthis._router.navigate(['/']);\n\t}\n}\n","@if (loading()) {\n \n} @else {\n
\n \n @switch (accountState()) {\n @case (\"SentEmail\") {\n

Email Sent

\n
\n Check your {{ emailHint() }} account for an email from Okta in order to activate your Parent Portal account.\n
\n
\n If you are having trouble activating your account, please contact us at (877) 642-7471.\n
\n }\n @case (\"ResendEmail\") {\n
\n

Email Sent

\n
\n You should have received an email from Okta at in your {{ emailHint() }} account. If you no longer have the email, click Resend below.\n
\n
\n
\n \n
\n
\n If you are having trouble activating your account, please contact us at (877) 642-7471.\n
\n }\n @case (\"NotFound\") {\n

Account Issue

\n
\n It looks like your Parent Portal account hasn't been set up yet. Give us a call at (877) 642-7471, and we’ll help you get started!\n
\n }\n }\n\n
\n
\n}\n","import { Route } from '@angular/router';\nimport { UnauthorizedComponent } from './pages/403/403.component';\nimport { HomeComponent } from './pages/home/home.component';\nimport { VolunteerComponent } from './pages/volunteer/volunteer.component';\nimport { ConfiguredRouteGuard } from './shared/authorization/configured-route.guard';\nimport { StaffComponent } from './pages/staff/staff.component';\nimport { LandingComponent } from './pages/landing/landing.component';\nimport { ReEnrollmentComponent } from './pages/reenrollment/reenrollment.component';\nimport { ActivateComponent } from './pages/activate/activate.component';\n\nexport const appRoutes: Route[] = [\n\t{\n\t\tpath: '',\n\t\tpathMatch: 'full',\n\t\tredirectTo: '/landing'\n\t},\n\t{\n\t\tpath: 'landing',\n\t\ttitle: 'NHA Parent Portal: Landing',\n\t\tcomponent: LandingComponent\n\t},\n\t{\n\t\tpath: 'home',\n\t\ttitle: 'NHA Parent Portal',\n\t\tcomponent: HomeComponent,\n\t\tcanActivate: [ConfiguredRouteGuard],\n\t\tdata: {\n\t\t\trouteGuardSettings: {\n\t\t\t\tentitlements: ['Application|Student:Access', 'Application|Guardian:Access'],\n\t\t\t\tredirect: '/staff'\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tpath: 'staff',\n\t\ttitle: 'NHA Parent Portal: Staff',\n\t\tcomponent: StaffComponent,\n\t\tcanActivate: [ConfiguredRouteGuard],\n\t\tdata: {\n\t\t\trouteGuardSettings: {\n\t\t\t\tentitlements: ['Scholar|Impersonate:Parent:Edit', 'Scholar|Impersonate:Parent:View', 'Scholar|Impersonate:Student:View'],\n\t\t\t\tredirect: '/403'\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tpath: 'staff/:userType/:userGuid',\n\t\ttitle: 'NHA Parent Portal: Staff',\n\t\tcomponent: StaffComponent,\n\t\tcanActivate: [ConfiguredRouteGuard],\n\t\tdata: {\n\t\t\trouteGuardSettings: {\n\t\t\t\tentitlements: ['Scholar|Impersonate:Parent:Edit', 'Scholar|Impersonate:Parent:View', 'Scholar|Impersonate:Student:View'],\n\t\t\t\tredirect: '/403'\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tpath: 'student',\n\t\tloadChildren: () => import('./pages/student/student.routes').then((r) => r.studentRoutes)\n\t},\n\t{\n\t\tpath: 'account',\n\t\tloadChildren: () => import('./pages/account/account.module').then((m) => m.AccountModule)\n\t},\n\t{\n\t\tpath: 'volunteer',\n\t\ttitle: 'NHA Parent Portal: Volunteer',\n\t\tcomponent: VolunteerComponent,\n\t\tcanActivate: [ConfiguredRouteGuard],\n\t\tdata: {\n\t\t\trouteGuardSettings: {\n\t\t\t\tentitlements: ['Application|Guardian:Access'],\n\t\t\t\tredirect: '/403'\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tpath: 'reenrollment',\n\t\tcomponent: ReEnrollmentComponent\n\t},\n\t{\n\t\tpath: 'activate',\n\t\tcomponent: ActivateComponent,\n\t\tdata: {\n\t\t\tallowAnonymous: true\n\t\t}\n\t},\n\t{\n\t\tpath: '403',\n\t\tcomponent: UnauthorizedComponent\n\t},\n\t{\n\t\tpath: '**',\n\t\tredirectTo: '/',\n\t\tpathMatch: 'full'\n\t}\n];\n","import { inject } from '@angular/core';\nimport { HttpRequest, HttpInterceptorFn } from '@angular/common/http';\nimport { Cookies } from 'nha-services';\nimport { AuthenticationService } from 'nha-login';\n\nexport const IMPERSONATION_USER_COOKIE: string = 'impersonation-user';\nexport const IMPERSONATION_USER_TYPE_COOKIE: string = 'impersonation-user-type';\n\nexport const impersonationInterceptor: HttpInterceptorFn = (req, next, authenticationService = inject(AuthenticationService)) => {\n\tconst request = req;\n\tconst interceptedUrls = authenticationService.getConfigurationValue('interceptedUrls') || [];\n\n\tif (interceptedUrls.length === 0) {\n\t\treturn next(request);\n\t}\n\n\tif (Cookies.get(IMPERSONATION_USER_COOKIE)) {\n\t\treturn next(addImpersonationHeader(request));\n\t}\n\n\treturn next(request);\n};\n\nconst addImpersonationHeader = (request: HttpRequest): HttpRequest => {\n\tconst headers = request.headers\n\t\t.append('impersonation-user', Cookies.get(IMPERSONATION_USER_COOKIE) as string)\n\t\t.append('impersonation-user-type', Cookies.get(IMPERSONATION_USER_TYPE_COOKIE) as string)\n\t\t.append('impersonation-application', 'scholar');\n\n\tconst impersonationRequest: HttpRequest = request.clone({\n\t\theaders: headers\n\t});\n\n\treturn impersonationRequest;\n};\n","import { inject, Injectable } from '@angular/core';\nimport { HttpService } from '@nha/api/http-service.class';\n\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { ScholarApiConfiguration } from './scholar-api.configuration';\n\nexport interface Setting {\n\tsettingKey: string;\n\tsettingValue: string;\n}\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class SettingService extends HttpService {\n\tappSettings = inject(APP_CONFIG);\n\n\tconstructor(config: ScholarApiConfiguration) {\n\t\tsuper(config, 'setting');\n\t}\n}\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { APP_INITIALIZER, ApplicationConfig } from '@angular/core';\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\nimport { provideRouter, withComponentInputBinding, withRouterConfig } from '@angular/router';\nimport { provideAnalytics } from '@nha/analytics/analytics.provider';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { provideCharts, withDefaultRegisterables } from 'ng2-charts';\nimport { AuthenticationConfigurationService, authInterceptor, INHAAuthConfiguration } from 'nha-login';\nimport { StorageService } from 'nha-services';\nimport { firstValueFrom } from 'rxjs';\nimport { appRoutes } from './app.routes';\nimport { impersonationInterceptor } from './shared/authorization/impersonation.interceptor';\nimport { SettingService } from './shared/services/api/setting.service';\n\nexport const appConfig: ApplicationConfig = {\n\tproviders: [\n\t\tprovideHttpClient(withInterceptors([impersonationInterceptor, authInterceptor])),\n\t\tprovideAnalytics(),\n\t\tprovideRouter(appRoutes, withComponentInputBinding(), withRouterConfig({ paramsInheritanceStrategy: 'always' }), withComponentInputBinding()),\n\t\tprovideAnimationsAsync(),\n\t\tprovideCharts(withDefaultRegisterables()),\n\t\t{\n\t\t\tprovide: APP_INITIALIZER,\n\t\t\tmulti: true,\n\t\t\tuseFactory: (config: IAppSettings, configurationService: AuthenticationConfigurationService, settingService: SettingService) => {\n\t\t\t\treturn async () => {\n\t\t\t\t\tif (!configurationService.hasConfiguration()) {\n\t\t\t\t\t\tconst storageService = new StorageService(true);\n\n\t\t\t\t\t\tconst loginType = storageService.get('loginType') || 'parent';\n\n\t\t\t\t\t\tconst loginTypes: { [key: string]: INHAAuthConfiguration } = {\n\t\t\t\t\t\t\tparent: config.parentOktaConfig,\n\t\t\t\t\t\t\tstaff: config.studentOktaConfig,\n\t\t\t\t\t\t\tstudent: config.studentOktaConfig\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconfigurationService.setConfiguration(loginTypes[loginType]);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst dBSettings = await firstValueFrom(settingService.getAll());\n\t\t\t\t\tconst settingsMapped = dBSettings.reduce(\n\t\t\t\t\t\t(acc: any, curr: any) => {\n\t\t\t\t\t\t\tacc[curr.settingKey] = curr.settingValue;\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t);\n\n\t\t\t\t\tObject.assign(config, settingsMapped);\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [APP_CONFIG, AuthenticationConfigurationService, SettingService]\n\t\t},\n\t\t{\n\t\t\tprovide: APP_CONFIG,\n\t\t\tuseFactory: (appSettings: IAppSettings) => {\n\t\t\t\treturn () => appSettings;\n\t\t\t},\n\t\t\tdeps: [APP_CONFIG, APP_INITIALIZER]\n\t\t}\n\t]\n};\n","export enum Environments {\n\tDEV = 'dev',\n\tCI = 'ci',\n\tQA = 'qa',\n\tAT = 'at',\n\tTR = 'tr',\n\tCOLD = 'cd',\n\tPROD = 'pd'\n}\n","import { enableProdMode } from '@angular/core';\nimport { bootstrapApplication } from '@angular/platform-browser';\nimport '@nha/extensions';\nimport { APP_CONFIG, IAppSettings } from '@nha/config/interfaces/iapp-settings.interface';\nimport { AppComponent } from './app/app.component';\nimport { appConfig } from './app/app.config';\nimport { Environments } from '@nha/enums/environment.enum';\n\nfetch('assets/app-settings.json')\n\t.then((response) => response.json())\n\t.then((config: IAppSettings) => {\n\t\tif (config.env === Environments.PROD) {\n\t\t\tenableProdMode();\n\t\t}\n\n\t\tappConfig.providers.push({ provide: APP_CONFIG, useValue: config });\n\t\tbootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));\n\t});\n"],"mappings":"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","names":["String","prototype","remove","str","includes","replace","stripHtml","tmp","document","createElement","innerHTML","textContent","innerText","Array","any","predicate","find","length","compare","items","missingValues","i","push","first","undefined","last","x","array","forEach","item","call","splice","indexOf","AppContainerComponent","selectors","standalone","features","ɵɵStandaloneFeature","ngContentSelectors","_c0","decls","vars","template","rf","ctx","ɵɵprojection","AccountTypeComponent","PageBaseComponent","constructor","loginTypeSelected","EventEmitter","passDataToParent","loginType","emit","__ngFactoryType__","selectors","outputs","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵlistener","CommonModule","MatButtonModule","MatFabButton","ContentBoxComponent","HeaderComponent","RouterModule","MatIconModule","MatIcon","styles","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵprojection","ɵɵtemplate","LoginComponent_Conditional_0_Conditional_2_Template","ɵɵadvance","ɵɵconditional","ctx_r0","isAuthenticated","isNative","ɵɵlistener","$event","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","handleLoginType","LoginComponent","PageBaseComponent","constructor","_appSettings","inject","APP_CONFIG","_renderer","Renderer2","_authConfigurationService","AuthenticationConfigurationService","_authService","AuthenticationService","_storageService","StorageService","_router","RouterService","Capacitor","isNativePlatform","loginType","signal","get","undefined","needHelpLink","cmsBaseUrl","allowAnonymous","computed","routeData","ngOnInit","isLoggedIn","setRedirectOnLogin","window","location","href","ngAfterViewChecked","customLink","document","querySelector","_unlisten","listen","event","preventDefault","remove","set","loginTypes","parent","parentOktaConfig","staff","studentOktaConfig","student","configuration","modifyConfiguration","setConfiguration","authWidget","features","showPasswordToggleOnSignInPage","charAt","toUpperCase","slice","helpLinks","help","custom","text","i18n","en","__ngFactoryType__","selectors","standalone","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","LoginComponent_Conditional_0_Template","LoginComponent_Conditional_1_Template","CommonModule","FormsModule","ReactiveFormsModule","AccountTypeComponent","NHALoginComponent","MatButtonModule","styles","encapsulation","IfHasEntitlementContext","constructor","entitlement","undefined","hasEntitlement","additionalCondition","conditionsMet","additionalConditionType","assertTemplate","property","templateRef","createEmbeddedView","Error","stringify","IfHasEntitlementDirective","ifHasEntitlement","entitlement","entitlementType","entitlementName","_user","subscribe","user","_context","hasEntitlement","_userStateService","_updateView","And","and","additionalCondition","additionalConditionType","Or","or","ifHasEntitlementThen","thenTemplateRef","assertTemplate","_thenTemplateRef","_thenViewRef","ifHasEntitlementElse","elseTemplateRef","_elseTemplateRef","_elseViewRef","constructor","_templateRef","inject","UserStateService","_viewContainer","ViewContainerRef","IfHasEntitlementContext","toObservable","pipe","filter","undefined","takeUntilDestroyed","conditionsMet","clear","createEmbeddedView","ɵɵdirectiveInject","TemplateRef","selectors","inputs","standalone","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","menu_r2","ɵɵlistener","ɵɵrestoreView","_r3","ctx_r3","ɵɵnextContext","ɵɵresetView","exitImpersonation","ɵɵadvance","ɵɵtextInterpolate2","tmp_4_0","user","firstName","lastName","UserMenuComponent","constructor","_authenticationService","inject","AuthenticationService","_userStateService","UserStateService","_storageService","StorageService","isImpersonating","Cookies","get","ngOnInit","__async","impersonationTimestamp","setInterval","currentDate","Date","timestamp","getFullYear","getMonth","getDate","setHours","getHours","remove","window","location","href","logout","clear","signOut","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵdeclareLet","ɵɵtemplate","UserMenuComponent_Conditional_2_Template","ɵɵelement","UserMenuComponent_a_7_Template","UserMenuComponent_Conditional_8_Template","i0","_r1","userInfo_r5","userImage","ɵɵconditional","imageUrl_r6","CommonModule","RouterModule","RouterLink","UserIconComponent","MatIconModule","MatIcon","MatMenuModule","MatMenu","MatMenuItem","MatMenuTrigger","IfHasEntitlementDirective","styles","GoogleTranslateToggleComponent","constructor","_elementRef","inject","ElementRef","_analyticsService","AnalyticsService","isGoogleTranslateVisible","signal","onDocumentClick","event","nativeElement","contains","target","set","showGoogleTranslate","logEvent","ngOnInit","setupGoogleTranslate","document","getElementById","console","error","window","google","translate","TranslateElement","pageLanguage","selectors","hostBindings","rf","ctx","ɵɵlistener","$event","ɵɵresolveDocument","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵstyleProp","MatButtonModule","MatIcon","styles","ɵɵelementContainer","PageBannerComponent","constructor","_scrollY","inject","WindowScrollService","scrollY","_pinned","isIOS","_componentLoaderService","ComponentLoaderService","lastScroll","addContainer","effect","dmPageBanner","document","querySelector","dmPageBannerHeight","clientHeight","spacingTop","dmPageBannerParent","parentElement","dmPageBannerParentRect","getBoundingClientRect","style","top","paddingTop","left","right","ngOnInit","Device","getInfo","then","info","platform","mainContentComponent","getContainer","menuContentComponent","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassProp","ɵɵelementStart","ɵɵtemplate","PageBannerComponent_ng_container_1_Template","ɵɵelementEnd","PageBannerComponent_ng_container_3_Template","ɵɵelement","ɵɵprojection","ɵɵadvance","ɵɵproperty","component","inputs","CommonModule","NgComponentOutlet","UserMenuComponent","GoogleTranslateToggleComponent","styles","AppUpdateAvailability","AppUpdate","registerPlugin","m","AppVersionStateService","constructor","currentAppVersion","signal","availableAppVersion","currentPlatform","Capacitor","getPlatform","getCurrentAppVersion","__async","result","AppUpdate","getAppUpdateInfo","set","currentVersionCode","currentVersionName","getAvailableAppVersion","availableVersionCode","availableVersionName","performUpdate","availableVersion","currentVersion","console","warn","updateAvailable","performImmediateUpdate","openAppStore","updateAvailability","AppUpdateAvailability","UPDATE_AVAILABLE","immediateUpdateAllowed","factory","ɵfac","providedIn","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","AppComponent","PageBaseComponent","constructor","_userStateService","inject","UserStateService","_studentStateService","StudentStateService","_appVersionStateService","AppVersionStateService","_router","Router","activeRoute","ActivatedRoute","_analyticsService","AnalyticsService","_appSettings","APP_CONFIG","_user$","toObservable","user","pipe","filter","undefined","catchError","err","takeUntilDestroyed","_currentStudent$","currentStudent","student","failedToLoad","ngOnInit","Device","getInfo","then","info","platform","forceUpdateEnabled","performUpdate","isLoggedIn","loadUser","subscribe","userType","setUserData","userGuid","doNotTrack","includes","loadStudents","sisRecord","primaryStudentInSchool","studentID","logActiveStudent","academicYear","academicYearID","schoolName","events","evt","NavigationEnd","activePageTitle","child","firstChild","snapshot","routeConfig","title","toString","logPageView","urlAfterRedirects","__ngFactoryType__","selectors","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵtemplate","AppComponent_Conditional_3_Template","ɵɵadvance","ɵɵstyleProp","ɵɵconditional","RouterModule","RouterOutlet","MatButtonModule","MatIconModule","MatIcon","AppContainerComponent","PageBannerComponent","LoginComponent","ContentBoxComponent","styles","ANIMATION_PREFIX","AsyncAnimationRendererFactory","doc","delegate","zone","animationType","moduleImpl","inject","ChangeDetectionScheduler","m","e","RuntimeError","ɵcreateEngine","ɵAnimationRendererFactory","rendererFactory","hostElement","rendererType","renderer","dynamicRenderer","DynamicDelegationRenderer","animationRendererFactory","animationRenderer","__ngFactoryType__","ɵɵinvalidFactory","ɵɵdefineInjectable","impl","fn","name","namespace","value","parent","newChild","refChild","isMove","oldChild","isHostElement","selectorOrNode","preserveContent","node","el","style","flags","target","eventName","callback","propOrEventName","provideAnimationsAsync","type","performanceMarkFeature","makeEnvironmentProviders","RendererFactory2","DOCUMENT","DomRendererFactory2","NgZone","ANIMATION_MODULE_TYPE","provideAnalytics","makeEnvironmentProviders","provide","APP_INITIALIZER","multi","useFactory","config","service","__async","initialize","analytics","streamID","enabled","deps","APP_CONFIG","AnalyticsService","UnauthorizedComponent","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","CommonModule","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","calendarPdfLinks_r1","calendar","currentYearPdfUrl","ɵɵsanitizeUrl","pdf_r2","ɵɵadvance","ɵɵtextInterpolate1","schoolName","ɵɵrepeaterCreate","CalendarPdfButtonComponent_Conditional_2_For_8_Template","_forTrack0","menu_r3","ɵɵrepeater","ctx_r3","calendarPdfs","CalendarPdfButtonComponent","constructor","_studentStateService","inject","StudentStateService","_calendarService","CalendarService","toSignal","toObservable","students","pipe","switchMap","uniqueSchools","flatMap","x","studentInSchoolRecords","forEach","sisRecord","schoolID","schoolShortName","find","school","push","length","getCalendarPdfForSchools","map","schoolCalendarPdfs","filter","pdf","catchError","error","console","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵdeclareLet","ɵɵtemplate","CalendarPdfButtonComponent_Conditional_1_Template","CalendarPdfButtonComponent_Conditional_2_Template","ɵɵstoreLet","ɵɵconditional","calendarPdfLinks_r5","CommonModule","MatButtonModule","MatAnchor","MatButton","MatIconModule","MatIcon","MatMenuModule","MatMenu","MatMenuItem","MatMenuTrigger","encapsulation","FeedbackBtnComponent","constructor","_appSettings","inject","APP_CONFIG","feedBackURL","hotjarFeedbackURL","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵsanitizeUrl","CommonModule","MatButtonModule","MatAnchor","MatIconModule","MatIcon","ContentBoxComponent","HeaderComponent","styles","TodoService","HttpService","constructor","config","getTodos","context","queryString","Object","keys","map","key","join","http","get","serviceUrl","getTodosForMultipleContexts","contexts","post","ɵɵinject","ScholarApiConfiguration","factory","ɵfac","providedIn","BasicTodoComponent","constructor","todo","input","required","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","title","description","CommonModule","ContentBoxComponent","styles","FormCompletionTodoComponent","constructor","todo","input","required","_studentState","inject","StudentStateService","_formState","FormsStateService","getStudentFormsLink","computed","todoStudentInSchoolID","data","studentInSchoolID","student","studentID","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵproperty","ɵɵadvance","ɵɵtextInterpolate","schoolName","description","studentImage","studentName","ɵɵtextInterpolate1","ɵɵtextInterpolate2","formsCompleted","totalForms","CommonModule","RouterModule","RouterLink","ContentBoxComponent","MatButtonModule","MatButton","MatChipsModule","MatIconModule","UserIconComponent","styles","VopSurveyTodoComponent","constructor","todo","input","required","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","data","surveyLink","ɵɵsanitizeUrl","ɵɵadvance","ɵɵtextInterpolate","schoolName","CommonModule","MatChipsModule","ContentBoxComponent","MatIconModule","MatIcon","styles","ɵɵelementContainer","ɵɵtemplate","TodosComponent_For_3_ng_container_0_Template","ɵɵproperty","ctx_r1","todoComponentMap","todo_r1","componentKey","basicTodoComponent","ɵɵpureFunction1","_c0","TodosComponent","hidden","todos","length","constructor","_studentStateService","inject","StudentStateService","_todoService","TodoService","signal","BasicTodoComponent","formCompletionTodo","FormCompletionTodoComponent","voiceOfTheParentTodo","VopSurveyTodoComponent","basicTodo","toObservable","students","pipe","takeUntilDestroyed","filter","distinctUntilChanged","s1","s2","s1StudentInSchools","flatMap","x","studentInSchoolRecords","s2StudentInSchools","every","student","index","studentInSchoolID","subscribe","contexts","sisRecords","sis","formsAvailable","includes","masterStatusID","forEach","studentInSchoolRecord","push","schoolID","getTodosForMultipleContexts","data","updatedTodos","handleVOP","set","voiceOfTheParentTodos","remainingTodos","schoolIDsWithEnrolledStudents","map","filteredVop","Array","from","Map","todo","values","selectors","hostVars","hostBindings","rf","ctx","ɵɵhostProperty","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵrepeaterCreate","TodosComponent_For_3_Template","ɵɵrepeaterTrackByIndex","ɵɵadvance","ɵɵrepeater","CommonModule","NgComponentOutlet","HeaderComponent","styles","ɵɵelement","ɵɵproperty","ɵɵpipeBind1","ctx_r0","trainingVideo","ɵɵsanitizeResourceUrl","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","link_r2","url","ɵɵsanitizeUrl","ɵɵadvance","ɵɵtextInterpolate1","text","ɵɵrepeaterCreate","TrainingDialogComponent_Conditional_9_For_2_Template","ɵɵrepeaterTrackByIndex","ɵɵrepeater","trainingLinkData","TrainingDialogComponent","constructor","_studentStateService","inject","StudentStateService","_schoolService","SchoolService","_dialogRef","MatDialogRef","appSettings","APP_CONFIG","trainingVideoLink","trainingLinkUrls","toSignal","toObservable","studentSchoolIDs","pipe","takeUntilDestroyed","switchMap","schoolIDs","length","getInPersonTrainingLinks","catchError","error","computed","students","urls","Object","values","some","Boolean","schools","entries","map","key","href","schoolID","Number","student","flatMap","x","studentInSchoolRecords","find","name","schoolShortName","filter","onClose","close","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","TrainingDialogComponent_Conditional_2_Template","TrainingDialogComponent_Conditional_6_Template","TrainingDialogComponent_Conditional_7_Template","TrainingDialogComponent_Conditional_9_Template","ɵɵlistener","ɵɵconditional","tmp_1_0","CommonModule","ContentBoxComponent","MatIconModule","HeaderComponent","SafeUrlPipe","MatDialogModule","MatCheckboxModule","MatButtonModule","MatAnchor","MatButton","styles","StudentCardComponent","constructor","_attendanceStateService","inject","AttendanceStateService","student","input","required","studentInSchool","ngOnInit","attendance","overallAttendanceSummaryForStudent","studentInSchoolID","toString","undefined","Object","keys","overallAttendance","includes","loadOverallAttendance","academicYearID","formattedAcademicYear","formatNextAcademicYear","nextAcademicYearNum","substring","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵtext","ɵɵproperty","ɵɵpureFunction2","_c0","studentID","ɵɵadvance","studentImage","ɵɵsanitizeUrl","ɵɵtextInterpolate","firstName","schoolShortName","ɵɵtextInterpolate1","gradeLevelName","externalStudentID","notifications","masterStatusDescription","absent","tardy","ɵɵpipeBind1","mealBalance","CommonModule","CurrencyPipe","RouterModule","RouterLink","ContentBoxComponent","MatIconModule","MatIcon","HeaderComponent","ChipComponent","NotificationsComponent","styles","ɵɵelement","ɵɵproperty","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","$index_r2","ɵɵnextContext","$index","ctx_r2","ɵɵresetView","activateStudentCard","ɵɵelementEnd","ɵɵpureFunction1","_c0","activeIndex","studentInfo_r5","student","primaryStudentInSchool","ɵɵtemplate","StudentListComponent_Conditional_2_For_1_Conditional_0_Template","ɵɵconditional","ɵɵtext","ɵɵrepeaterCreate","StudentListComponent_Conditional_2_For_1_Template","ɵɵrepeaterTrackByIndex","StudentListComponent_Conditional_2_ForEmpty_2_Template","ɵɵrepeater","students","$index_r7","_r6","scrollIntoView","ɵɵclassProp","StudentListComponent","constructor","_studentState","inject","StudentStateService","_studentListEl","ElementRef","_scrolling","loading","loadingStudents","computed","map","s","studentID","signal","ngAfterViewInit","_studentList","nativeElement","querySelector","_dotNav","toggleDotNav","window","onresize","activateDotOnScroll","onscroll","classList","remove","scrollWidth","offsetWidth","add","index","set","document","behavior","block","inline","setTimeout","maxScrollLeft","clientWidth","scrollLeft","split","length","splitStart","splitStop","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","StudentListComponent_Conditional_1_Template","StudentListComponent_Conditional_2_Template","StudentListComponent_For_5_Template","ɵɵadvance","CommonModule","NgClass","StudentCardComponent","ContentBoxComponent","HeaderComponent","LoaderComponent","styles","HomeHeaderComponent","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","CommonModule","HeaderComponent","StudentListComponent","styles","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ctx_r0","crmWaitlistUrl","ɵɵsanitizeUrl","HomeComponent","PageBaseComponent","constructor","_appSettings","inject","APP_CONFIG","_userStateService","UserStateService","_studentStateService","StudentStateService","_schoolService","SchoolService","_dialog","MatDialog","_componentLoaderService","ComponentLoaderService","computed","students","flatMap","x","studentInSchoolRecords","some","student","masterStatusID","StudentInSchoolMasterStatus","WaitList","guardianGuid","user","userGuid","beforeAndAfterSchoolCareDict","toSignal","toObservable","studentSchoolIDs","pipe","takeUntilDestroyed","switchMap","schoolIDs","length","getBeforeAndAfterSchoolCare","catchError","error","lunchMealURLsDict","getSchoolMealsURLs","lunchMenuQuickLinks","urls","Object","values","Boolean","schools","entries","map","key","href","schoolID","Number","find","name","schoolShortName","filter","title","icon","content","type","target","links","beforeAndAfterSchoolLinks","afterSchoolCareStatus","link","trueKeys","_","value","filteredStudents","includes","today","Date","data","firstDay","firstDayOfSchool","oneWeekBefore","setDate","getDate","twoWeeksAfter","Set","forEach","schoolName","getSchoolNameBySchoolID","push","cmsBaseUrl","toLowerCase","replace","formsQuickLink","formsQuickLinkBuild","userType","showReEnrollmentAlert","quickLinks","quicklinks","schoolConnectURL","routerLink","openTrainingDialog","open","TrainingDialogComponent","width","afterClosed","subscribe","dismissed","localStorage","setItem","ngOnInit","currentStudentInSchoolID","set","getContainer","component","HomeHeaderComponent","trainingDialogDismissed","getItem","ngOnDestroy","__ngFactoryType__","selectors","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","HomeComponent_Conditional_1_Template","HomeComponent_Conditional_2_Template","ɵɵelement","ɵɵconditional","CommonModule","RouterModule","RouterLink","RightContentPageTemplateComponent","HeaderComponent","QuickLinksComponent","TodosComponent","FeedbackBtnComponent","EventListComponent","CalendarPdfButtonComponent","ContentBoxComponent","MatButtonModule","MatAnchor","MatButton","styles","PageTitleComponent","constructor","title","input","required","backRoute","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ɵɵadvance","ɵɵtextInterpolate","CommonModule","RouterModule","RouterLink","HeaderComponent","MatIconModule","MatIcon","styles","ɵɵelement","ɵɵproperty","ctx","VolunteerComponent","constructor","_formStateService","inject","FormsStateService","_componentLoaderService","ComponentLoaderService","volunteerFormDefinitionID","signal","volunteerSchool","toObservable","studentFormDefinitions","pipe","filter","forms","undefined","length","take","subscribe","volunteerForm","find","f","formName","set","formDefinitionID","ngOnInit","getContainer","component","PageTitleComponent","inputs","title","backRoute","ngOnDestroy","schoolSelected","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","ɵɵtrustConstantResourceUrl","template","rf","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵlistener","$event","ɵɵtemplate","VolunteerComponent_Conditional_83_Template","ɵɵadvance","ɵɵconditional","tmp_2_0","CommonModule","RouterModule","LeftContentPageTemplateComponent","HeaderComponent","ContentBoxComponent","MatButtonModule","MatAnchor","VolunteerFormComponent","VolunteerTrainingComponent","styles","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","ɵɵproperty","staffUser_r1","fullName","userImage","StaffHeaderComponent","constructor","_userStateService","inject","UserStateService","user","selectors","standalone","features","ɵɵStandaloneFeature","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","ɵɵdeclareLet","ɵɵtemplate","StaffHeaderComponent_Conditional_1_Template","ɵɵstoreLet","ɵɵadvance","ɵɵconditional","staffUser_r2","CommonModule","UserBannerInfoComponent","styles","_c0","_c1","CdkTable_Conditional_2_Template","rf","ctx","ɵɵprojection","CdkTable_Conditional_3_Template","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","CdkTable_Conditional_4_Template","CDK_TABLE","InjectionToken","CdkCellDef","template","__ngFactoryType__","ɵɵdirectiveInject","TemplateRef","ɵɵdefineDirective","CdkHeaderCellDef","CdkFooterCellDef","CdkColumnDef","name","value","_table","hasStickyChanged","CDK_TABLE","rf","ctx","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","BaseCdkCell","columnDef","elementRef","CdkHeaderCell","ElementRef","ɵɵInheritDefinitionFeature","CdkCell","BaseCdkCell","columnDef","elementRef","role","__ngFactoryType__","ɵɵdirectiveInject","CdkColumnDef","ElementRef","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","_Schedule","_COALESCED_STYLE_SCHEDULER","InjectionToken","_CoalescedStyleScheduler","_unusedNgZone","inject","NgZone","task","schedule","ɵɵinject","ɵɵdefineInjectable","BaseRowDef","template","_differs","changes","columns","column","CdkHeaderRowDef","CdkFooterRowDef","__ngFactoryType__","ɵɵdirectiveInject","TemplateRef","IterableDiffers","ɵɵdefineDirective","ɵɵNgOnChangesFeature","value","_table","hasStickyChanged","CDK_TABLE","booleanAttribute","ɵɵInputTransformsFeature","ɵɵInheritDefinitionFeature","CdkRowDef","CdkCellOutlet","_viewContainer","ViewContainerRef","CdkHeaderRow","ɵɵdefineComponent","ɵɵStandaloneFeature","rf","ctx","ɵɵelementContainer","CdkRow","__ngFactoryType__","ɵɵdefineComponent","ɵɵStandaloneFeature","rf","ctx","ɵɵelementContainer","CdkCellOutlet","CdkNoDataRow","templateRef","ɵɵdirectiveInject","TemplateRef","ɵɵdefineDirective","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","direction","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","entries","rows","stickyDirections","elementsToClear","row","i","element","stickyStartStates","stickyEndStates","recalculateCellWidths","replay","state","firstRow","numCells","cellWidths","startPositions","endPositions","lastStickyStart","firstStickyEnd","isRtl","start","end","cell","width","index","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","height","borderedRowIndex","offset","isBorderedRowIndex","tableElement","tfoot","dir","dirValue","isBorderElement","zIndexIncrements","zIndex","firstRowCells","widths","positions","nextPosition","cachedSize","clientRect","size","params","rowsSet","update","needsColumnUpdate","entry","newEntry","isCell","klass","STICKY_POSITIONING_LISTENER","InjectionToken","DataRowOutlet","viewContainer","elementRef","table","inject","CDK_TABLE","__ngFactoryType__","ɵɵdirectiveInject","ViewContainerRef","ElementRef","ɵɵdefineDirective","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CdkTable","tableRole","fn","dataSource","value","_differs","_changeDetectorRef","_elementRef","role","_dir","_document","_platform","_viewRepeater","_coalescedStyleScheduler","_viewportRuler","_stickyPositioningListener","_unusedNgZone","Subject","EventEmitter","BehaviorSubject","inject","Injector","_i","dataRow","takeUntil","def","isDataSource","changes","viewContainer","record","_adjustedPreviousIndex","currentIndex","change","_ViewRepeaterOperation","rowView","afterNextRender","columnDef","rowDef","headerRowDef","footerRowDef","noDataRow","headerRows","thead","closestTableSection","stickyStates","footerRows","tfoot","dataRows","headerRow","i","rows","footerRow","rowDefsChanged","renderRows","prevCachedRenderRows","data","renderRowsForData","j","renderRow","cache","dataIndex","cachedRenderRows","mergeArrayAndSet","defaultRowDefs","columnsDiffReducer","acc","diff","dataColumnsChanged","headerColumnsChanged","footerColumnsChanged","dataStream","isObservable","of","columnDefs","columnName","stickyStartStates","stickyEndStates","rowOutlet","renderedRows","viewRef","rowDefs","index","context","outlet","view","cellTemplate","CdkCellOutlet","renderIndex","count","columnId","column","stickyCheckReducer","d","direction","StickyStyler","items","item","shouldShow","container","rootNode","__ngFactoryType__","ɵɵdirectiveInject","IterableDiffers","ChangeDetectorRef","ElementRef","ɵɵinjectAttribute","Directionality","DOCUMENT","Platform","_VIEW_REPEATER_STRATEGY","_COALESCED_STYLE_SCHEDULER","ViewportRuler","STICKY_POSITIONING_LISTENER","NgZone","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","CdkNoDataRow","CdkColumnDef","CdkRowDef","CdkHeaderRowDef","CdkFooterRowDef","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵclassProp","booleanAttribute","ɵɵProvidersFeature","CDK_TABLE","_DisposeViewRepeaterStrategy","_CoalescedStyleScheduler","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c1","ɵɵprojectionDef","_c0","ɵɵprojection","ɵɵtemplate","CdkTable_Conditional_2_Template","CdkTable_Conditional_3_Template","CdkTable_Conditional_4_Template","ɵɵadvance","ɵɵconditional","HeaderRowOutlet","DataRowOutlet","NoDataRowOutlet","FooterRowOutlet","array","set","section","uppercaseSection","current","nodeName","CdkTableModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ScrollingModule","_c0","_c1","MatTable_Conditional_2_Template","rf","ctx","ɵɵprojection","MatTable_Conditional_3_Template","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","MatTable_Conditional_4_Template","MatTable","CdkTable","ɵMatTable_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineComponent","rf","ctx","ɵɵclassProp","ɵɵProvidersFeature","CDK_TABLE","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_VIEW_REPEATER_STRATEGY","_DisposeViewRepeaterStrategy","STICKY_POSITIONING_LISTENER","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","_c1","ɵɵprojectionDef","_c0","ɵɵprojection","ɵɵtemplate","MatTable_Conditional_2_Template","MatTable_Conditional_3_Template","MatTable_Conditional_4_Template","ɵɵadvance","ɵɵconditional","HeaderRowOutlet","DataRowOutlet","NoDataRowOutlet","FooterRowOutlet","MatCellDef","CdkCellDef","ɵMatCellDef_BaseFactory","ɵɵdefineDirective","MatHeaderCellDef","CdkHeaderCellDef","ɵMatHeaderCellDef_BaseFactory","MatColumnDef","CdkColumnDef","name","ɵMatColumnDef_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","MatHeaderCell","CdkHeaderCell","ɵMatHeaderCell_BaseFactory","MatCell","CdkCell","ɵMatCell_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","MatHeaderRowDef","CdkHeaderRowDef","ɵMatHeaderRowDef_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","ɵɵInheritDefinitionFeature","MatRowDef","CdkRowDef","ɵMatRowDef_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","MatHeaderRow","CdkHeaderRow","ɵMatHeaderRow_BaseFactory","ɵɵdefineComponent","ɵɵStandaloneFeature","rf","ctx","ɵɵelementContainer","CdkCellOutlet","MatRow","CdkRow","ɵMatRow_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineComponent","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","rf","ctx","ɵɵelementContainer","CdkCellOutlet","MatTableModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CdkTableModule","ImpersonationService","HttpService","constructor","config","searchForUser","searchTerm","userType","get","serviceUrl","params","ɵɵinject","ScholarApiConfiguration","factory","ɵfac","providedIn","ɵɵelementStart","ɵɵelementContainerStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵlistener","ɵɵrestoreView","_r3","ctx_r1","ɵɵnextContext","ɵɵresetView","sort","ɵɵpureFunction1","_c1","sortColumn","sortDirection","ɵɵtextInterpolate","result_r4","userID","_r5","result_r7","_r6","$implicit","impersonate","ɵɵtextInterpolate1","userGuid","_r8","result_r9","firstName","_r10","result_r11","lastName","_r12","result_r14","_r13","name","_r15","result_r16","email","_r17","ɵɵtemplate","StaffComponent_Conditional_1_td_42_Conditional_1_Template","StaffComponent_Conditional_1_td_42_Conditional_2_Template","ɵɵconditional","result_r18","hasParentPortalAccount","_r19","getSchoolNames","result_r20","schools","ɵɵelement","_r1","search","StaffComponent_Conditional_1_th_23_Template","StaffComponent_Conditional_1_td_24_Template","StaffComponent_Conditional_1_th_26_Template","StaffComponent_Conditional_1_td_27_Template","StaffComponent_Conditional_1_th_29_Template","StaffComponent_Conditional_1_td_30_Template","StaffComponent_Conditional_1_th_32_Template","StaffComponent_Conditional_1_td_33_Template","StaffComponent_Conditional_1_th_35_Template","StaffComponent_Conditional_1_td_36_Template","StaffComponent_Conditional_1_th_38_Template","StaffComponent_Conditional_1_td_39_Template","StaffComponent_Conditional_1_th_41_Template","StaffComponent_Conditional_1_td_42_Template","StaffComponent_Conditional_1_th_44_Template","StaffComponent_Conditional_1_td_45_Template","StaffComponent_Conditional_1_tr_46_Template","StaffComponent_Conditional_1_tr_47_Template","StaffComponent_Conditional_1_Conditional_48_Template","StaffComponent_Conditional_1_Conditional_49_Template","searchForm","invalid","sortedResults","ɵɵpureFunction0","_c0","length","searching","StaffComponent","constructor","_impersonationService","inject","ImpersonationService","_componentLoaderService","ComponentLoaderService","input","userType","_searchResults","signal","showImpersonationMessage","computed","results","map","result","__spreadProps","__spreadValues","column","direction","a","b","aValue","bValue","FormGroup","searchTerm","FormControl","Validators","required","set","searchForUser","get","value","pipe","take","subscribe","searchResults","user","Cookies","toLowerCase","Date","toLocaleTimeString","window","location","href","school","schoolName","join","ngOnInit","getContainer","component","StaffHeaderComponent","ngOnDestroy","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","StaffComponent_Conditional_0_Template","StaffComponent_Conditional_1_Template","CommonModule","NgClass","FormsModule","ɵNgNoValidate","NgSelectOption","ɵNgSelectMultipleOption","DefaultValueAccessor","SelectControlValueAccessor","NgControlStatus","NgControlStatusGroup","RequiredValidator","ReactiveFormsModule","FormGroupDirective","FormControlName","MatButtonModule","MatButton","RightContentPageTemplateComponent","HeaderComponent","MatSelectModule","MatFormField","MatFormFieldModule","MatIconModule","MatIcon","MatInputModule","MatInput","MatTableModule","MatTable","MatHeaderCellDef","MatHeaderRowDef","MatColumnDef","MatCellDef","MatRowDef","MatHeaderCell","MatCell","MatHeaderRow","MatRow","LoaderComponent","styles","LandingComponent","PageBaseComponent","constructor","_router","inject","Router","_userStateService","UserStateService","_user","toObservable","user","pipe","filter","undefined","takeUntilDestroyed","ngOnInit","subscribe","studentUser","to","userNav","student","userID","currentAcademicYearStudentInSchoolID","staff","guardian","navigate","userType","__ngFactoryType__","selectors","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","template","rf","ctx","dependencies","CommonModule","encapsulation","MatCardModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CommonModule","ReEnrollmentService","HttpService","constructor","config","saveReEnrollmentDecision","decision","http","post","serviceUrl","ɵɵinject","ScholarApiConfiguration","factory","ɵfac","providedIn","ɵɵelement","ɵɵproperty","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate2","ɵɵpipeBind1","tmp_2_0","ctx_r0","primaryStudentInSchool","reEnrollmentStartDate","reEnrollmentEndDate","option_r2","id","ɵɵtextInterpolate","name","constructoSchoolApplicationUrl","student_r3","schoolName","ɵɵsanitizeUrl","ɵɵtextInterpolate1","firstName","ɵɵtemplate","ReEnrollmentComponent_Conditional_1_For_12_Conditional_16_Conditional_2_Template","ReEnrollmentComponent_Conditional_1_For_12_Conditional_16_Conditional_3_Template","ɵɵconditional","decisionValue_r5","reEnrollingDecision","undecided","noUnconfirmed","decisionNotes_r4","value","length","studentID","ɵɵdeclareLet","ɵɵrepeaterCreate","ReEnrollmentComponent_Conditional_1_For_12_For_11_Template","_forTrack2","ReEnrollmentComponent_Conditional_1_For_12_Conditional_13_Template","ReEnrollmentComponent_Conditional_1_For_12_Conditional_14_Template","ReEnrollmentComponent_Conditional_1_For_12_Conditional_16_Template","ReEnrollmentComponent_Conditional_1_For_12_Conditional_17_Template","getFormGroup","studentInSchoolID","getFormControl","formGroup_r6","ɵɵstoreLet","ɵɵtextInterpolate3","lastName","decisionID_r7","ɵɵrepeater","reEnrollingDecisionOptions","invalid","touched","reenrollingDecisionOptionID","decisionValue_r8","yes","ReEnrollmentComponent_Conditional_1_Conditional_13_Conditional_1_Template","ɵɵlistener","ɵɵrestoreView","_r9","ɵɵnextContext","ɵɵresetView","onSubmit","saving","form","pristine","disabled","loading","ɵɵpropertyInterpolate","link_r10","url","ReEnrollmentComponent_Conditional_1_Conditional_8_Template","ReEnrollmentComponent_Conditional_1_For_12_Template","_forTrack0","ReEnrollmentComponent_Conditional_1_Conditional_13_Template","ReEnrollmentComponent_Conditional_1_For_30_Template","_forTrack1","reEnrollmentClosed","students","applyUrls","ReEnrollmentDecisionOptionEnum","ReEnrollmentComponent","_appConfig","cmsBaseUrl","toLowerCase","replace","constructor","_fb","inject","UntypedFormBuilder","_reEnrollmentService","ReEnrollmentService","_componentLoaderService","ComponentLoaderService","_studentStateService","StudentStateService","_snackbar","SnackbarService","APP_CONFIG","studentWithdrawalLink","signal","computed","reEnrollmentStart","reEnrollmentEnd","currentDate","Date","uniqueSchools","Set","map","x","Array","from","group","forEach","student","addControl","FormControl","noConfirmed","Validators","required","reenrollingDecisionNotes","toObservable","pipe","studentInSchool","studentInSchoolRecords","find","sis","masterStatusID","StudentInSchoolMasterStatus","Enrolled","isSixthGradeAtWestfieldCharter","gradeLevelID","schoolID","schoolNameDisplay","academicYear","academicYearID","showReenrollmentAlert","takeUntilDestroyed","subscribe","next","set","filter","error","console","ngOnInit","getContainer","component","PageTitleComponent","inputs","title","backRoute","ngOnDestroy","get","formGroup","fieldName","valid","saveReEnrollmentDecision","decisions","Object","keys","sisID","decisionID","decisionNotes","push","date","toISOString","reEnrollingDecisionOptionID","isParentPortalDecision","notes","take","loadStudents","success","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ReEnrollmentComponent_Conditional_0_Template","ReEnrollmentComponent_Conditional_1_Template","CommonModule","DatePipe","MatButtonModule","MatAnchor","MatButton","MatCardModule","MatRadioModule","MatRadioGroup","MatRadioButton","MatFormFieldModule","MatFormField","MatLabel","MatHint","MatIconModule","MatIcon","MatInputModule","MatInput","MatProgressBar","LeftContentPageTemplateComponent","HeaderComponent","ContentBoxComponent","ReactiveFormsModule","ɵNgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","MaxLengthValidator","FormControlDirective","FormGroupDirective","LoaderComponent","StudentWithdrawalDirective","styles","ɵɵelement","ɵɵproperty","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ctx_r0","emailHint","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","resendEmail","ɵɵtemplate","ActivateComponent_Conditional_1_Case_2_Template","ActivateComponent_Conditional_1_Case_3_Template","ActivateComponent_Conditional_1_Case_4_Template","ɵɵconditional","tmp_1_0","accountState","ActivateComponent","PageBaseComponent","constructor","guardianGuid","input","loading","signal","_storageService","StorageService","_accountService","inject","OktaService","_router","Router","toObservable","pipe","tap","set","switchMap","guid","getActivationStatus","catchError","error","console","subscribe","response","status","redirectToLogin","ngOnInit","isLoggedIn","navigate","resendActivation","take","remove","selectors","inputs","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ActivateComponent_Conditional_0_Template","ActivateComponent_Conditional_1_Template","RouterModule","LoaderComponent","ContentBoxComponent","MatButtonModule","MatButton","styles","appRoutes","path","pathMatch","redirectTo","title","component","LandingComponent","HomeComponent","canActivate","ConfiguredRouteGuard","data","routeGuardSettings","entitlements","redirect","StaffComponent","loadChildren","then","r","studentRoutes","m","AccountModule","VolunteerComponent","ReEnrollmentComponent","ActivateComponent","allowAnonymous","UnauthorizedComponent","IMPERSONATION_USER_COOKIE","IMPERSONATION_USER_TYPE_COOKIE","impersonationInterceptor","req","next","authenticationService","inject","AuthenticationService","request","getConfigurationValue","length","Cookies","get","addImpersonationHeader","headers","append","clone","SettingService","HttpService","constructor","config","appSettings","inject","APP_CONFIG","ɵɵinject","ScholarApiConfiguration","factory","ɵfac","providedIn","appConfig","providers","provideHttpClient","withInterceptors","impersonationInterceptor","authInterceptor","provideAnalytics","provideRouter","appRoutes","withComponentInputBinding","withRouterConfig","paramsInheritanceStrategy","provideAnimationsAsync","provideCharts","withDefaultRegisterables","provide","APP_INITIALIZER","multi","useFactory","config","configurationService","settingService","__async","hasConfiguration","loginType","StorageService","get","loginTypes","parent","parentOktaConfig","staff","studentOktaConfig","student","setConfiguration","settingsMapped","firstValueFrom","getAll","reduce","acc","curr","settingKey","settingValue","Object","assign","deps","APP_CONFIG","AuthenticationConfigurationService","SettingService","appSettings","Environments","fetch","then","response","json","config","env","Environments","PROD","enableProdMode","appConfig","providers","push","provide","APP_CONFIG","useValue","bootstrapApplication","AppComponent","catch","err","console","error"],"x_google_ignoreList":[15,16,20,52,53,58]}