@byuhbll/components 4.0.0-alpha.35 → 4.0.0-alpha.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"byuhbll-components.mjs","sources":["../../../projects/components/src/lib/animations/animations.ts","../../../projects/components/src/lib/expand-collapse/expand-collapse.component.ts","../../../projects/components/src/lib/expand-collapse/expand-collapse.component.html","../../../projects/components/src/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.ts","../../../projects/components/src/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.html","../../../projects/components/src/lib/utils.ts","../../../projects/components/src/lib/hbll-header/nav-bar/nav-bar.component.ts","../../../projects/components/src/lib/hbll-header/nav-bar/nav-bar.component.html","../../../projects/components/src/lib/hbll-header/pipes/library-hours.pipe.ts","../../../projects/components/src/lib/hbll-header/hbll-header.component.ts","../../../projects/components/src/lib/hbll-header/hbll-header.component.html","../../../projects/components/src/lib/pipes/hbll-item-type-icon.pipe.ts","../../../projects/components/src/lib/contact-utils.ts","../../../projects/components/src/lib/hbll-footer/hbll-footer.component.ts","../../../projects/components/src/lib/hbll-footer/hbll-footer.component.html","../../../projects/components/src/lib/impersonation-banner/models/application-access.ts","../../../projects/components/src/lib/copy-tooltip/copy-tooltip.component.ts","../../../projects/components/src/lib/copy-tooltip/copy-tooltip.component.html","../../../projects/components/src/lib/impersonation-banner/impersonation-banner.component.ts","../../../projects/components/src/lib/impersonation-banner/impersonation-banner.component.html","../../../projects/components/src/lib/impersonate-modal/impersonate-modal.component.ts","../../../projects/components/src/lib/impersonate-modal/impersonate-modal.component.html","../../../projects/components/src/lib/header-with-impersonation/header-with-impersonation.component.ts","../../../projects/components/src/lib/header-with-impersonation/header-with-impersonation.component.html","../../../projects/components/src/lib/ss-search-bar/constants.ts","../../../projects/components/src/lib/ss-search-bar/models/advanced-search.model.ts","../../../projects/components/src/lib/ss-search-bar/pipes/field-by-scope.pipe.ts","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-queries.pipe.ts","../../../projects/components/src/lib/ss-search-bar/utils.ts","../../../projects/components/src/lib/multi-select/multi-select.component.ts","../../../projects/components/src/lib/multi-select/multi-select.component.html","../../../projects/components/src/lib/checkbox/checkbox.component.ts","../../../projects/components/src/lib/checkbox/checkbox.component.html","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.ts","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.html","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.ts","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.html","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.ts","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.html","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-field-warning.pipe.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.html","../../../projects/components/src/lib/ss-search-bar/models/search-scope.model.ts","../../../projects/components/src/public-api.ts","../../../projects/components/src/byuhbll-components.ts"],"sourcesContent":["import {\n trigger,\n transition,\n animate,\n style,\n group,\n query,\n animateChild,\n} from '@angular/animations';\n\nexport const libHbllExpandCollapse = trigger('libHbllExpandCollapse', [\n transition('void <=> *', []),\n transition(\n '* <=> *',\n [\n group([\n style({ height: '{{startHeight}}px' }),\n query('@*', [animateChild()], { optional: true }),\n animate('.15s ease-in-out'),\n ]),\n ],\n { params: { startHeight: '0px' } },\n ),\n]);\n\nexport const libHbllFadeInOut = trigger('libHbllFadeInOut', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n\nexport const libHbllFadeIn = trigger('libHbllFadeIn', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n]);\n\nexport const libHbllFadeOut = trigger('libHbllFadeOut', [\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n\nexport const libHbllSlideInOutRightLeft = trigger('libHbllSlideInOutRightLeft', [\n transition(\n ':enter',\n [\n style({\n transform: 'translateX({{xOffset}})',\n }),\n animate(\n '200ms ease-in-out',\n style({\n transform: 'translateX(0)',\n }),\n ),\n ],\n { params: { xOffset: '100%' } },\n ),\n transition(\n ':leave',\n [\n style({\n transform: 'translateX(0)',\n }),\n animate(\n '200ms ease-in-out',\n style({\n transform: 'translateX({{xOffset}})',\n }),\n ),\n ],\n { params: { xOffset: '100%' } },\n ),\n]);\n","import { Component, ElementRef, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { libHbllExpandCollapse, libHbllFadeInOut } from '../animations/animations';\n\n@Component({\n selector: 'lib-expand-collapse',\n templateUrl: './expand-collapse.component.html',\n styleUrls: ['./expand-collapse.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [libHbllExpandCollapse, libHbllFadeInOut],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ExpandCollapseComponent {\n @ViewChild('contentRef') private contentRef!: ElementRef;\n\n private _isExpanded = false;\n @Input({ required: true }) set isExpanded(isExpanded: boolean) {\n this.heightOfContent = this.contentRef?.nativeElement.clientHeight;\n this._isExpanded = isExpanded;\n }\n get isExpanded() {\n return this._isExpanded;\n }\n\n protected heightOfContent = 0;\n}\n","<div\n #contentRef\n [@libHbllExpandCollapse]=\"{\n value: isExpanded,\n params: { startHeight: heightOfContent },\n }\"\n class=\"hbll-expand-collapse-content-wrapper\"\n [ngClass]=\"{ 'hbll-expand-collapse-collapsed': !isExpanded }\"\n>\n <div *ngIf=\"isExpanded\" @libHbllFadeInOut data-testid=\"content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, EventEmitter, input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExpandCollapseComponent } from '../../expand-collapse/expand-collapse.component';\n\n@Component({\n selector: 'lib-nav-bar-dropdown',\n standalone: true,\n imports: [ExpandCollapseComponent, CommonModule],\n templateUrl: './nav-bar-dropdown.component.html',\n styleUrl: './nav-bar-dropdown.component.scss',\n})\nexport class NavBarDropdownComponent {\n title = input.required<string>();\n isSmallScreen = input(true);\n @Output() openEvent = new EventEmitter<string>();\n\n // Public to be called by parent comp.\n closeDropdown = () => (this.isOpen = false);\n\n protected isOpen = false;\n protected handleClick = () => {\n if (!this.isOpen) this.openEvent.emit(this.title());\n this.isOpen = !this.isOpen;\n };\n}\n","<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\n\n/**\n * Signal that represents if the screen is small.\n */\nexport const isScreenSmallSignal = (bo: BreakpointObserver) =>\n toSignal(bo.observe(['(min-width: 1000px)']).pipe(map((r) => !r.matches)));\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, Signal, ViewChildren } from '@angular/core';\nimport { NavBarDropdownComponent } from '../nav-bar-dropdown/nav-bar-dropdown.component';\nimport { isScreenSmallSignal } from '../../utils';\nimport { BreakpointObserver } from '@angular/cdk/layout';\n\ntype NavInfo = {\n title: string;\n mainSection?: Section;\n otherSections: Section[];\n};\n\ntype Section = {\n title: string;\n links: Link[];\n auxiliaryLink?: Link;\n};\n\ntype Link = {\n label: string;\n url: string;\n icon?: string;\n};\n\n@Component({\n selector: 'lib-nav-bar',\n standalone: true,\n imports: [CommonModule, NavBarDropdownComponent],\n templateUrl: './nav-bar.component.html',\n styleUrl: './nav-bar.component.scss',\n})\nexport class NavBarComponent {\n private bo = inject(BreakpointObserver);\n mainSiteBaseUrl = input.required<string>();\n height = input<number | null>(null);\n\n @ViewChildren(NavBarDropdownComponent) dropdownComps!: NavBarDropdownComponent[];\n\n // If any section opens up, close all others. Only one section open at a time.\n protected handleDropdownOpenEvent = (title: string) => {\n this.dropdownComps\n .filter((comp) => comp.title() !== title)\n .forEach((comp) => {\n comp.closeDropdown();\n });\n };\n\n protected isScreenSmall = isScreenSmallSignal(this.bo);\n\n protected navInfos: Signal<NavInfo[]> = computed(() => {\n return [\n {\n title: 'Materials',\n mainSection: {\n title: 'Formats',\n links: [\n { label: 'Articles', url: `${this.mainSiteBaseUrl()}/articles` },\n { label: 'Audio', url: `${this.mainSiteBaseUrl()}/audio` },\n { label: 'Books', url: `${this.mainSiteBaseUrl()}/books` },\n { label: 'Video', url: `${this.mainSiteBaseUrl()}/video` },\n ],\n auxiliaryLink: {\n label: 'See all formats',\n url: `${this.mainSiteBaseUrl()}/formats`,\n },\n },\n otherSections: [\n {\n title: 'Resource Collections',\n links: [\n {\n label: 'Subject Area Collections',\n url: `${this.mainSiteBaseUrl()}/collections`,\n },\n { label: 'Databases', url: `${this.mainSiteBaseUrl()}/databases` },\n { label: 'Journals', url: `${this.mainSiteBaseUrl()}/journals` },\n {\n label: 'Theses & Dissertations',\n url: `${this.mainSiteBaseUrl()}/theses-and-dissertations`,\n },\n ],\n },\n {\n title: 'Equipment',\n links: [\n {\n label: 'Available for Checkout',\n url: `${this.mainSiteBaseUrl()}/services?categories=available-for-checkout`,\n },\n {\n label: 'Available with Reservation',\n url: `${this.mainSiteBaseUrl()}/services?categories=available-via-reservation`,\n },\n {\n label: 'Public Computers',\n url: `${this.mainSiteBaseUrl()}/services/public-computers`,\n },\n {\n label: 'Printers and Copying',\n url: `${this.mainSiteBaseUrl()}/services?categories=printing-and-copying`,\n },\n ],\n },\n ],\n },\n {\n title: 'Places',\n mainSection: {\n title: 'Popular Places',\n links: [\n {\n label: 'Help Desks',\n url: `${this.mainSiteBaseUrl()}/services/help-desks`,\n },\n {\n label: 'Family History',\n url: `${this.mainSiteBaseUrl()}/religion-family-history`,\n },\n {\n label: 'Research and Writing Center',\n url: `${this.mainSiteBaseUrl()}/services/research-and-writing-center`,\n },\n {\n label: 'Special Collections',\n url: `${this.mainSiteBaseUrl()}/special-collections`,\n },\n ],\n auxiliaryLink: {\n label: 'View Floor Maps',\n url: `${this.mainSiteBaseUrl()}/floormaps`,\n },\n },\n otherSections: [\n {\n title: 'Spaces',\n links: [\n {\n label: 'Collections & Archives',\n url: `${this.mainSiteBaseUrl()}/services?categories=collections-and-archives`,\n },\n {\n label: 'Group Study Spaces',\n url: `${this.mainSiteBaseUrl()}/services/group-study-rooms`,\n },\n {\n label: 'Individual Study Spaces',\n url: `${this.mainSiteBaseUrl()}/services?categories=individual-study-spaces`,\n },\n {\n label: 'Multimedia Creation Spaces',\n url: `${this.mainSiteBaseUrl()}/services?categories=multimedia-creation`,\n },\n {\n label: 'Video View Spaces',\n url: `${this.mainSiteBaseUrl()}/services?categories=video-viewing`,\n },\n ],\n },\n {\n title: 'Rooms',\n links: [\n {\n label: 'Classrooms',\n url: `${this.mainSiteBaseUrl()}/services?categories=classrooms`,\n },\n {\n label: 'Conference Rooms',\n url: `${this.mainSiteBaseUrl()}/services?categories=conference-rooms`,\n },\n {\n label: 'Labs & Centers',\n url: `${this.mainSiteBaseUrl()}/services?categories=labs-and-centers`,\n },\n {\n label: 'Research Rooms',\n url: `${this.mainSiteBaseUrl()}/services?categories=research-rooms`,\n },\n ],\n },\n ],\n },\n {\n title: 'Experiences',\n mainSection: {\n title: 'Events',\n links: [\n {\n label: 'Concerts & Film Showings',\n url: `${this.mainSiteBaseUrl()}/services/motion-picture-archive-series`,\n },\n {\n label: 'Lectures',\n url: `${this.mainSiteBaseUrl()}/services?categories=lectures`,\n },\n { label: 'News', url: `${this.mainSiteBaseUrl()}/about/news` },\n ],\n auxiliaryLink: {\n label: 'See calendar of events',\n url: `${this.mainSiteBaseUrl()}/events`,\n },\n },\n otherSections: [\n {\n title: 'Learning Opportunities',\n links: [\n {\n label: 'Library Instruction Classes',\n url: `${this.mainSiteBaseUrl()}/library-instruction`,\n },\n {\n label: 'Software Training',\n url: `${this.mainSiteBaseUrl()}/services/software-training`,\n },\n {\n label: 'Family History Classes & Webinars',\n url: `${this.mainSiteBaseUrl()}/services/family-history-classes`,\n },\n ],\n },\n {\n title: 'Displays',\n links: [\n { label: 'Exhibits', url: `${this.mainSiteBaseUrl()}/exhibits` },\n {\n label: 'Galleries',\n url: `${this.mainSiteBaseUrl()}/services?categories=galleries-and-exhibits`,\n },\n ],\n },\n ],\n },\n {\n title: 'Services',\n mainSection: {\n title: 'Services For',\n links: [\n {\n label: 'Current Students',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-students`,\n },\n {\n label: 'Faculty and Staff',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-faculty`,\n },\n {\n label: 'Retirees',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-retirees`,\n },\n {\n label: 'Visitors and Alumni',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-visitors`,\n },\n ],\n auxiliaryLink: {\n label: 'See all Services',\n url: `${this.mainSiteBaseUrl()}/services`,\n },\n },\n otherSections: [\n {\n title: 'Getting Materials',\n links: [\n {\n label: 'Checkout out Materials',\n url: `${this.mainSiteBaseUrl()}/about/checkout-privileges`,\n },\n {\n label: 'Holds & Renewals',\n url: `${this.mainSiteBaseUrl()}/services/holds`,\n },\n {\n label: 'Borrow from another Library (ILL)',\n url: `${this.mainSiteBaseUrl()}/services/interlibrary-loan`,\n },\n ],\n },\n {\n title: 'Other',\n links: [\n {\n label: 'Internships, Fellowships and Grants',\n url: `${this.mainSiteBaseUrl()}/services?categories=internships-fellowships-grants`,\n },\n {\n label: 'Programs',\n url: `${this.mainSiteBaseUrl()}/services?categories=programs`,\n },\n {\n label: 'Scholarly Publishing',\n url: `${this.mainSiteBaseUrl()}/services?categories=creating-and-publishing-materials`,\n },\n ],\n },\n ],\n },\n {\n title: 'Ask Us',\n\n otherSections: [\n {\n title: 'Get Help',\n links: [\n {\n label: 'Ask a Librarian',\n url: `${this.mainSiteBaseUrl()}/chat?url=${window.location.href}`,\n icon: 'chat_bubble',\n },\n {\n label: 'Library Instruction',\n url: `${this.mainSiteBaseUrl()}/library-instruction`,\n },\n { label: 'Research Guides', url: `${this.mainSiteBaseUrl()}/guides` },\n {\n label: 'Help & Guidance',\n url: `${this.mainSiteBaseUrl()}/services?categories=help-and-guidance`,\n },\n ],\n },\n {\n title: 'Find a...',\n links: [\n { label: 'Department', url: `${this.mainSiteBaseUrl()}/directory` },\n {\n label: 'Help Desk',\n url: `${this.mainSiteBaseUrl()}/services/help-desks`,\n },\n {\n label: 'Library Employee by Name',\n url: `${this.mainSiteBaseUrl()}/directory`,\n },\n {\n label: 'Subject Librarian',\n url: `${this.mainSiteBaseUrl()}/directory#browse-by-subject`,\n },\n ],\n },\n {\n title: 'About the Library',\n links: [\n {\n label: 'General Information',\n url: `${this.mainSiteBaseUrl()}/about`,\n },\n { label: 'FAQs', url: `${this.mainSiteBaseUrl()}/faq` },\n ],\n },\n ],\n },\n ];\n });\n}\n","<nav\n [style]=\"{ height: height() ? height() + 'px' : 'auto' }\"\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n data-testid=\"nav\"\n>\n <ul class=\"hbll-header-nav-bar\">\n <li id=\"navHome\">\n <a [href]=\"mainSiteBaseUrl()\">\n @if (isScreenSmall()) {\n <span class=\"material-symbols-outlined hbll-header-icon\"> home </span>\n }\n Home\n </a>\n </li>\n @for (navInfo of navInfos(); track navInfo.title) {\n <li>\n <lib-nav-bar-dropdown\n [title]=\"navInfo.title\"\n [isSmallScreen]=\"isScreenSmall() ?? true\"\n (openEvent)=\"handleDropdownOpenEvent($event)\"\n >\n <div\n class=\"hbll-header-content\"\n [ngStyle]=\"{\n 'background-color': isScreenSmall() ? '#336cc8' : 'inherit',\n }\"\n >\n @if (navInfo.mainSection) {\n <section>\n <h2>{{ navInfo.mainSection.title }}</h2>\n <ul class=\"hbll-header-main hbll-header-links\">\n @for (link of navInfo.mainSection.links; track link.label) {\n <li>\n <a [href]=\"link.url\">\n {{ link.label }}\n </a>\n </li>\n }\n </ul>\n @if (navInfo.mainSection.auxiliaryLink) {\n <a\n class=\"hbll-header-see-all\"\n [href]=\"navInfo.mainSection.auxiliaryLink.url\"\n >\n {{ navInfo.mainSection.auxiliaryLink.label }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n chevron_right\n </span>\n </a>\n }\n </section>\n }\n @for (section of navInfo.otherSections; track section.title) {\n <section>\n <h3>{{ section.title }}</h3>\n <ul class=\"hbll-header-links\">\n @for (link of section.links; track link.label) {\n <li>\n <a [href]=\"link.url\">\n {{ link.label }}\n @if (link.icon) {\n <span\n class=\"material-symbols-outlined hbll-header-icon-right\"\n >\n {{ link.icon }}\n </span>\n }\n </a>\n </li>\n }\n </ul>\n </section>\n }\n </div>\n </lib-nav-bar-dropdown>\n </li>\n }\n <li>\n <a id=\"navSearch\" [href]=\"mainSiteBaseUrl() + '/search'\">\n @if (isScreenSmall()) {\n Search\n }\n <span\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'hbll-header-icon': isScreenSmall() }\"\n >\n search\n </span>\n </a>\n </li>\n </ul>\n</nav>\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'libraryHours',\n standalone: true,\n})\nexport class LibraryHoursPipe implements PipeTransform {\n transform(date: string, time: string): string | null {\n let newTime = null;\n try {\n newTime = new DatePipe('en-US').transform(new Date(date + 'T' + time), 'ha');\n } catch (e) {\n return newTime;\n }\n if (newTime === '12AM') newTime = 'Midnight';\n else if (newTime) {\n newTime = newTime.replace('AM', ' a.m.');\n newTime = newTime.replace('PM', ' p.m.');\n }\n return newTime;\n }\n}\n","import { CommonModule, DatePipe, DOCUMENT, LowerCasePipe } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n Renderer2,\n ViewChild,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { NavBarComponent } from './nav-bar/nav-bar.component';\nimport { libHbllFadeInOut, libHbllSlideInOutRightLeft } from '../animations/animations';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { isScreenSmallSignal } from '../utils';\nimport { LibraryHoursPipe } from './pipes/library-hours.pipe';\nimport { map, of, shareReplay, switchMap } from 'rxjs';\nimport { ExpandCollapseComponent } from '../expand-collapse/expand-collapse.component';\nimport { LibraryHours } from './models/library-hours';\n\nexport const LIBRARY_HOURS_API_URL = 'https://apps.lib.byu.edu/libraryhours/api/hours';\n\n@Component({\n selector: 'lib-hbll-header',\n standalone: true,\n imports: [\n DatePipe,\n LowerCasePipe,\n LibraryHoursPipe,\n CommonModule,\n NavBarComponent,\n ExpandCollapseComponent,\n ],\n templateUrl: './hbll-header.component.html',\n styleUrl: './hbll-header.component.scss',\n animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut],\n})\nexport class HbllHeaderComponent implements AfterViewInit {\n private readonly r2 = inject(Renderer2);\n // TODO: does this increase bundle size more than it's worth? vs fetch?\n private readonly http = inject(HttpClient);\n private readonly bo = inject(BreakpointObserver);\n private doc = inject(DOCUMENT);\n\n @ViewChild('header') header!: ElementRef;\n\n // --- API ---\n // TODO: Convert these to signal inputs: https://github.com/angular/angular/issues/57755\n @Input() name = '';\n @Input() mainsitebaseurl = 'https://lib.byu.edu';\n // TODO: this is a singal input currently because it won't be used by any other applications than Angular ones.\n showImpersonateButton = input(false);\n @Output() openImpersonationModal = new EventEmitter<void>();\n @Output() login = new EventEmitter<void>();\n @Output() logout = new EventEmitter<void>();\n // -----------\n private formatDateForHours = (date: Date) =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n private accountInfoEl = viewChild<ElementRef>('accountInfo');\n private hoursEl = viewChild<ElementRef>('hours');\n\n protected get isLoggedIn() {\n return !!this.name;\n }\n\n // Hours\n protected libraryHours = toSignal(this.http.get<LibraryHours>(LIBRARY_HOURS_API_URL));\n protected hoursExceptions$ = of(null).pipe(\n map(() => {\n // Get exceptions from today to two months out\n const today = new Date();\n const start = this.formatDateForHours(today);\n const newDate = new Date();\n newDate.setMonth(today.getMonth() + 2);\n const stop = this.formatDateForHours(newDate);\n return [start, stop];\n }),\n switchMap(([start, stop]: string[]) =>\n this.http\n .get<LibraryHours[]>(`${LIBRARY_HOURS_API_URL}?start=${start}&stop=${stop}`)\n .pipe(map((res) => res.filter((day) => day.has_exception).slice(0, 5))),\n ),\n shareReplay(1),\n );\n\n protected showAccountDropdown = false;\n protected showLibraryHours = false;\n protected mobileSidebarHeight = 0;\n protected showNavBar = false;\n protected isScreenSmall = isScreenSmallSignal(this.bo);\n\n ngAfterViewInit(): void {\n this.r2.listen('window', 'click', (e: Event) => {\n if (!this.accountInfoEl()?.nativeElement.contains(e.target))\n this.showAccountDropdown = false;\n if (!this.hoursEl()?.nativeElement.contains(e.target)) this.showLibraryHours = false;\n });\n this.setMobileSidebarHeight();\n }\n\n protected openSidebarNav = () => {\n this.showNavBar = true;\n window.scrollTo(0, 0);\n this.r2.setStyle(this.doc.body, 'overflow', 'hidden');\n };\n\n protected closeSidebarNav = () => {\n this.showNavBar = false;\n this.r2.removeStyle(this.doc.body, 'overflow');\n };\n\n @HostListener('window:resize', ['$event'])\n private onResize() {\n this.setMobileSidebarHeight();\n }\n\n private setMobileSidebarHeight = () =>\n (this.mobileSidebarHeight =\n window.innerHeight - this.header.nativeElement.getBoundingClientRect().height);\n}\n","<header\n role=\"banner\"\n class=\"hbll-header-wrapper\"\n #header\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n>\n <a [href]=\"mainsitebaseurl\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <div id=\"libraryInfo\" class=\"hbll-header-wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"hbll-header-wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Regular Hours</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Monday - Friday</h3>\n <h3 class=\"hbll-header-item\">Saturday</h3>\n <h3 class=\"hbll-header-item\">Sunday</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - midnight</div>\n <div class=\"hbll-header-item\">8 a.m - midnight</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"hbll-header-detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"hbll-header-item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hbll-header-hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"hbll-header-item\">\n {{ exception.exception_title }}\n </div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Library Cafe</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Bagel Bubble</h3>\n <h3 class=\"hbll-header-item\">Provecho</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - 11 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a [href]=\"mainsitebaseurl + '/about/hours'\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"hbll-header-wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"hbll-header-name\" data-testid=\"name\">{{\n isLoggedIn ? ' ' + name : 'Login'\n }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a [href]=\"mainsitebaseurl + '/account'\">My Account</a>\n <a [href]=\"mainsitebaseurl + '/account'\">My Items</a>\n <a [href]=\"mainsitebaseurl + '/account/request'\">Request an item</a>\n <a [href]=\"mainsitebaseurl + '/account/saved'\">Saved</a>\n <a [href]=\"mainsitebaseurl + '/account/course'\">Courses</a>\n <a [href]=\"mainsitebaseurl + '/account/rooms'\">Rooms</a>\n <a [href]=\"mainsitebaseurl + '/account/preferences'\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n (click)=\"openImpersonationModal.emit(); showAccountDropdown = false\"\n class=\"hbll-header-impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileNavBtn\"\n (click)=\"openSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [@libHbllSlideInOutRightLeft]=\"{\n value: '',\n params: { xOffset: '400px' },\n }\"\n >\n <button\n id=\"closeMobileNavBtn\"\n class=\"hbll-header-wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"closeSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> close </span>\n </button>\n <lib-nav-bar\n [mainSiteBaseUrl]=\"mainsitebaseurl\"\n [height]=\"mobileSidebarHeight\"\n />\n </div>\n <div\n @libHbllFadeInOut\n (click)=\"showNavBar = false\"\n class=\"hbll-nav-backdrop\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar [mainSiteBaseUrl]=\"mainsitebaseurl\" />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n [href]=\"mainsitebaseurl + '/about/hours'\"\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n","import { Pipe, type PipeTransform } from '@angular/core';\n\nconst typeToIconMap = {\n archive: 'inventory_2',\n article: 'article',\n audio: 'mic',\n audiobook: 'mic',\n 'blu-ray': 'album',\n book: 'book_4',\n 'book-chapter': 'book_6',\n 'book-review': 'reviews',\n broadside: 'image',\n calculator: 'calculate',\n cassette: 'album',\n cd: 'album',\n 'cd-rom': 'album',\n clothing: 'album',\n 'clothing-pattern': 'album',\n collection: 'library_books',\n conference: 'podium',\n 'conference-proceeding': 'podium',\n cuneiform: 'aod_tablet',\n curricula: 'aod_tablet',\n database: 'database',\n dataset: 'dataset',\n diary: 'book_2',\n dissertation: 'school',\n dvd: 'album',\n ebook: 'two_pager',\n ebookreader: 'chrome_reader_mode',\n ejournal: 'two_pager',\n 'electronic-resource': 'description',\n equipment: 'service_toolbox',\n filmstrip: 'theaters',\n 'finding-aid': 'travel_explore',\n 'government-document': 'travel_explore',\n 'government-novel': 'book_4',\n guide: 'travel_explore',\n image: 'image',\n index: 'list',\n journal: 'book_2',\n 'juv-book': 'book_4',\n kit: 'home_repair_service',\n laserdisc: 'album',\n 'legal-document': 'gavel',\n letter: 'mail',\n magazine: 'newsmode',\n manuscript: 'article',\n 'manuscript-archive': 'inventory_2',\n map: 'map',\n media: 'play_circle',\n microfiche: 'theaters',\n microfilm: 'theaters',\n microform: 'theaters',\n model: 'modeling',\n movie: 'movie',\n multimedia: 'play_circle',\n 'music-recording': 'album',\n 'musical-recording': 'play_circle',\n newsletter: 'article',\n newspaper: 'newspaper',\n 'newspaper-article': 'newspaper',\n ostracon: 'description',\n other: 'description',\n painting: 'palette',\n palmleaf: 'eco',\n pamphlet: 'article',\n papyrus: 'article',\n performance: 'music_note',\n periodical: 'article',\n photograph: 'image',\n picture: 'image',\n poem: 'article',\n poster: 'image',\n presentation: 'slideshow',\n 'primary-source': 'inventory_2',\n 'primary-source-document': 'article',\n record: 'album',\n 'reel-to-reel': 'video_camera_back',\n 'reference-entry': 'article',\n report: 'summarize',\n 'research-data-set': 'dataset',\n review: 'summarize',\n score: 'music_note',\n script: 'article',\n serial: 'article',\n slide: 'slideshow',\n software: 'terminal',\n 'sound-recording': 'mic',\n standards: 'article',\n 'statistical-data-set': 'dataset',\n 'streaming-audio': 'play_circle',\n 'streaming-media': 'play_circle',\n 'streaming-video': 'play_circle',\n 'student-project': 'article',\n 'technical-report': 'summarize',\n 'text-resource': 'summarize',\n unknown: 'article',\n vhs: 'theaters',\n video: 'movie',\n website: 'globe',\n} as const;\n\n/**\n * Converts an item type to an icon type to be used with Google Material Icons\n *\n * Intended to be used with an imported font, such as: `<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,1,0\"\n />`\n *\n * Reference: https://fonts.google.com/icons?selected=Material+Symbols+Outlined:inventory_2:FILL@0;wght@400;GRAD@0;opsz@24&icon.query=invent&icon.size=24&icon.color=%235f6368\n */\n@Pipe({\n name: 'libByuItemTypeIcon',\n standalone: true,\n})\nexport class HbllItemTypeIconPipe implements PipeTransform {\n transform(itemType: string): string {\n const type = itemType.replace(/_/g, '-').toLowerCase();\n return typeToIconMap[type as keyof typeof typeToIconMap] ?? 'article';\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { FormBuilder, Validators } from '@angular/forms';\n\nconst EMAIL_PATH = 'email';\nconst FEEDBACK_PATH = 'feedback';\n\nexport const USER_STATUSES = [\n '',\n 'Undergraduate',\n 'Graduate',\n 'Faculty',\n 'Staff',\n 'Library Employee',\n 'Other',\n] as const;\n\nexport type UserStatus = (typeof USER_STATUSES)[number];\n\nexport interface ContactPayload {\n email?: string;\n message: string;\n name?: string;\n status?: UserStatus;\n}\n\nexport const createContactForm = (fb: FormBuilder) =>\n fb.nonNullable.group({\n name: [''],\n email: [''],\n message: ['', Validators.required],\n status: ['' as ContactPayload['status']],\n });\n\nexport const submitEmail = (payload: ContactPayload, http: HttpClient, apiBaseUrl: string) =>\n submitContactForm(payload, http, EMAIL_PATH, apiBaseUrl);\n\nexport const submitFeedback = (payload: ContactPayload, http: HttpClient, apiBaseUrl: string) =>\n submitContactForm({ ...payload, origin: location.href }, http, FEEDBACK_PATH, apiBaseUrl);\n\nconst submitContactForm = (\n payload: ContactPayload & { origin?: string },\n http: HttpClient,\n path: typeof EMAIL_PATH | typeof FEEDBACK_PATH,\n apiBaseUrl: string,\n) => http.post<unknown>(`${apiBaseUrl}/${path}`, payload);\n\nexport const getUserStatusFromRoles = (roles: string[]): UserStatus => {\n let userStatus: UserStatus = '';\n if (roles.includes('undergraduateStudent')) {\n userStatus = 'Undergraduate';\n }\n if (roles.includes('graduateStudent')) {\n userStatus = 'Graduate';\n }\n if (roles.includes('staffEmployee')) {\n userStatus = 'Staff';\n }\n if (roles.includes('facultyEmployee')) {\n userStatus = 'Faculty';\n }\n if (roles.includes('libraryEmployee')) {\n userStatus = 'Library Employee';\n }\n return userStatus;\n};\n","import { Component, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClient } from '@angular/common/http';\nimport { ContactPayload, createContactForm, submitEmail, USER_STATUSES } from '../contact-utils';\n\n@Component({\n selector: 'lib-hbll-footer',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './hbll-footer.component.html',\n styleUrl: './hbll-footer.component.scss',\n})\nexport class HbllFooterComponent {\n private readonly fb = inject(FormBuilder);\n private readonly http = inject(HttpClient);\n // TODO: Convert these to signal inputs: https://github.com/angular/angular/issues/57755\n @Input() mainsitebaseurl = 'https://lib.byu.edu';\n @Input() libraryapibaseuri = 'https://apps.lib.byu.edu/v1';\n @Input() set emailname(name: string) {\n this.emailForm.controls.name.setValue(name);\n }\n @Input() set emailemail(email: string) {\n this.emailForm.controls.email.setValue(email);\n }\n @Input() set emailmessage(message: string) {\n this.emailForm.controls.message.setValue(message);\n }\n @Input() set emailstatus(status: ContactPayload['status']) {\n this.emailForm.controls.status.setValue(status);\n }\n protected date = new Date();\n protected isSubmitted = false;\n protected isLoading = false;\n protected hasConnectionError = false;\n protected isEmailSent = false;\n protected emailForm = createContactForm(this.fb);\n protected userStatuses = USER_STATUSES;\n\n protected sendEmail = () => {\n this.isSubmitted = true;\n if (this.emailForm.invalid) return;\n this.isLoading = true;\n submitEmail(\n this.emailForm.value as ContactPayload,\n this.http,\n this.libraryapibaseuri,\n ).subscribe({\n error: () => {\n this.hasConnectionError = true;\n this.isLoading = false;\n },\n complete: () => {\n this.hasConnectionError = false;\n this.isLoading = false;\n this.isEmailSent = true;\n this.emailForm.reset();\n },\n });\n };\n\n protected handleClose = () => {\n if (this.isEmailSent) {\n this.isEmailSent = false;\n this.hasConnectionError = false;\n this.isLoading = false;\n }\n this.isSubmitted = false;\n };\n}\n","<footer>\n <div class=\"hbll-footer-wrapper\">\n <div class=\"hbll-footer-links\">\n <section>\n <h3>Contact</h3>\n <ul>\n <li>\n <address>\n P.O. Box 26800<br />\n Provo, UT 84602-6800\n </address>\n </li>\n <li>\n <span class=\"material-symbols-outlined hbll-footer-icon\">\n phone_in_talk </span\n > \n <a href=\"tel:801-422-6061\"><strong>Call</strong> (801) 422-6061</a>\n </li>\n <li>\n <span class=\"material-symbols-outlined hbll-footer-icon\"> sms </span> \n <a href=\"sms:801-623-6838\"><strong>Text</strong> (801) 623-6838</a>\n </li>\n <li>\n <span class=\"material-symbols-outlined hbll-footer-icon\"> mail </span\n > <button (click)=\"emailDialog.showModal()\" data-testid=\"emailUsBtn\">\n <strong>Email us</strong>\n </button>\n </li>\n </ul>\n </section>\n <section>\n <h3>Resources</h3>\n <ul>\n <li>\n <a target=\"_blank\" href=\"{{ mainsitebaseurl }}/site-index/\"\n >A-Z Site Index</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"{{ mainsitebaseurl }}/about/policies/\">Policies</a>\n </li>\n <li>\n <a target=\"_blank\" href=\"{{ mainsitebaseurl }}/about/location/\"\n >Parking & Directions</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://uac.byu.edu/accessibility-lab\"\n >Accessibility Resources</a\n >\n </li>\n </ul>\n </section>\n <section>\n <h3>Friends in the Library</h3>\n <ul>\n <li>\n <a target=\"_blank\" href=\"https://ctl.byu.edu\"\n >Center for Teaching and Learning</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://copyright.byu.edu\"\n >Copyright Licensing Office</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://facultycenter.byu.edu/aboutus\"\n >Faculty Center</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://dining.byu.edu/library-cafe\"\n >Library Cafe</a\n >\n </li>\n </ul>\n </section>\n <section>\n <h3>Connect</h3>\n <ul class=\"hbll-footer-social-list\">\n <li>\n <a target=\"_blank\" href=\"https://www.facebook.com/byuhbll\">\n <img\n class=\"hbll-footer-social\"\n src=\"https://media.lib.byu.edu/web-assets/images/1.0.0/facebook-color-round.svg\"\n alt=\"Facebook\"\n title=\"Facebook\"\n />\n </a>\n </li>\n <li>\n <a target=\"_blank\" href=\"https://www.instagram.com/byu_hbll/\">\n <img\n class=\"hbll-footer-social\"\n src=\"https://media.lib.byu.edu/web-assets/images/1.0.0/instagram-color.svg\"\n alt=\"Instagram\"\n title=\"Instagram\"\n />\n </a>\n </li>\n </ul>\n </section>\n </div>\n <section class=\"hbll-footer-bottom\">\n <div class=\"hbll-footer-title\">\n <a href=\"https://byu.edu\" target=\"_blank\">BRIGHAM YOUNG UNIVERSITY</a>\n </div>\n <br />\n PROVO, UT 84602, USA | <a href=\"sms:801-422-6061\">(801) 422-6061</a>\n <br />© {{ date | date: 'yyyy' }}\n ALL RIGHTS RESERVED\n <div class=\"hbll-footer-privacy\">\n <a href=\"https://privacy.byu.edu/\" target=\"_blank\">Privacy Notice</a>\n |\n <a href=\"https://infosec.byu.edu/cookie-prefs\" target=\"_blank\"\n >Cookie Preferences</a\n >\n </div>\n </section>\n </div>\n</footer>\n\n<dialog\n #emailDialog\n onmousedown=\"event.target === this && this.close()\"\n (close)=\"handleClose()\"\n data-testid=\"dialog\"\n>\n @if (!isEmailSent) {\n <form [formGroup]=\"emailForm\" (submit)=\"sendEmail()\" data-testid=\"form\">\n <div class=\"hbll-footer-email-top\">\n <h1>Email Us</h1>\n <button (click)=\"emailDialog.close()\" type=\"button\" data-testid=\"closeBtn\">\n <span class=\"material-symbols-outlined\"> close </span>\n </button>\n </div>\n <label for=\"hbllFooterEmailName\">Name</label>\n <input\n id=\"hbllFooterEmailName\"\n type=\"text\"\n formControlName=\"name\"\n data-testid=\"emailNameInput\"\n />\n <label for=\"hbllFooterEmailEmail\">\n Email (please provide if you would like a response)</label\n >\n <input\n id=\"hbllFooterEmailEmail\"\n type=\"text\"\n formControlName=\"email\"\n data-testid=\"emailEmailInput\"\n />\n <label for=\"hbllFooterEmailEmail\">\n Question or comment <span class=\"hbll-footer-email-required\">*</span>\n </label>\n <textarea\n id=\"hbllFooterEmailEmail\"\n type=\"text\"\n formControlName=\"message\"\n data-testid=\"emailMessageInput\"\n ></textarea>\n @if (isSubmitted && emailForm.controls.message.invalid) {\n <div\n class=\"hbll-footer-email-required hbll-footer-email-error\"\n data-testid=\"commentError\"\n >\n <span class=\"material-symbols-outlined hbll-footer-email-error-icon\">\n warning\n </span>\n <strong>Please fill out this field</strong>\n </div>\n }\n <label for=\"hbllFooterEmailStatus\">Role</label>\n <span class=\"hbll-footer-select-wrapper\">\n <select\n id=\"hbllFooterEmailStatus\"\n formControlName=\"status\"\n data-testid=\"emailStatusInput\"\n >\n <option selected value=\"\"></option>\n @for (status of userStatuses | slice: 1; track status) {\n <option [value]=\"status\">{{ status }}</option>\n }\n </select>\n </span>\n <div class=\"hbll-footer-email-bottom-bar\">\n @if (hasConnectionError) {\n <p class=\"hbll-footer-connection-error\" data-testid=\"connectionError\">\n <i>There was an error sending your email. Please try again later.</i>\n </p>\n }\n <button\n class=\"pill-btn--components\"\n type=\"submit\"\n [disabled]=\"isLoading\"\n data-testid=\"sendEmailBtn\"\n >\n Send\n </button>\n </div>\n </form>\n } @else {\n <div class=\"hbll-footer-email-success\" data-testid=\"successMessage\">\n <p>\n Your email was sent successfully. If you supplied your email address, we will get\n back to you shortly.<br />Thank you!\n </p>\n <button class=\"pill-btn--components\" (click)=\"emailDialog.close()\" type=\"button\">\n Close\n </button>\n </div>\n }\n</dialog>\n","export enum AccessStatus {\n OK = 'ok',\n BLOCKED = 'blocked',\n NONE = 'none',\n}\n\nexport interface ApplicationAccess {\n label: string;\n access: AccessStatus;\n code?: string;\n detail?: string;\n}\n\nexport interface AccountsResponse {\n netId: string;\n applications: Record<string, ApplicationAccess>;\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltip, MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\n\n@Component({\n selector: 'lib-copy-tooltip',\n standalone: true,\n imports: [CommonModule, MatTooltipModule],\n templateUrl: './copy-tooltip.component.html',\n styleUrls: ['./copy-tooltip.component.scss'],\n})\nexport class CopyTooltipComponent {\n @Input() position: TooltipPosition = 'below';\n @Input() copyText?: string;\n @ViewChild(MatTooltip) tooltip!: MatTooltip;\n\n public clipboardCopyMessage = 'Copy';\n\n public copyToClipboard = async (text?: string) => {\n // Ensure the tooltip doesn't disappear when button is clicked\n this.tooltip.show();\n if (text) {\n try {\n await navigator.clipboard.writeText(text).then(() => {\n this.clipboardCopyMessage = 'Copied!';\n });\n } catch {\n this.clipboardCopyMessage = 'Failed to copy';\n }\n } else this.clipboardCopyMessage = 'Nothing to copy!';\n };\n\n public handleMouseLeave = () => {\n // Manually hide in case the user hovers over the tooltip\n this.tooltip.hide();\n // Delay to account for tooltip animation\n setTimeout(() => {\n this.clipboardCopyMessage = 'Copy';\n }, 100);\n };\n}\n","<div\n (click)=\"copyToClipboard(copyText)\"\n [matTooltip]=\"clipboardCopyMessage\"\n [matTooltipPosition]=\"position\"\n (mouseleave)=\"handleMouseLeave()\"\n data-testid=\"tooltip\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component, computed, EventEmitter, inject, input, Output, Signal } from '@angular/core';\nimport { map, switchMap } from 'rxjs/operators';\nimport {\n AccessStatus,\n AccountsResponse,\n type ApplicationAccess,\n} from './models/application-access';\nimport { CommonModule } from '@angular/common';\nimport { TokenPayload } from '../models/token-payload';\nimport { jwtDecode, JwtPayload } from 'jwt-decode';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { HttpClient } from '@angular/common/http';\nimport { IndependentStudyResponse, PersonSummary } from './models/person-summary';\nimport urlcat from 'urlcat';\nimport { combineLatest, of } from 'rxjs';\nimport { CopyTooltipComponent } from '../copy-tooltip/copy-tooltip.component';\n\nconst USER_PHOTO_URL = 'https://y.byu.edu/ry/ae/prod/person/cgi/personPhoto.cgi?n=';\nconst PERSON_SUMMARY_PATH = '/summary/:libraryId/';\nconst INDEPENDENT_STUDY_RESPONSE_PATH = '/independent-study/:libraryId/';\nconst PATRON_ACCOUNTS_PATH = '/patron/accounts';\n\n@Component({\n standalone: true,\n imports: [CommonModule, CopyTooltipComponent],\n selector: 'lib-impersonation-banner',\n templateUrl: './impersonation-banner.component.html',\n styleUrls: ['./impersonation-banner.component.scss'],\n})\nexport class ImpersonationBannerComponent {\n private http = inject(HttpClient);\n accessTokenPayload = input.required<TokenPayload>();\n personBaseUri = input('https://apps.lib.byu.edu/person/v2/');\n libraryApiBaseUri = input('https://apps.lib.byu.edu/v1');\n @Output() endImpersonation = new EventEmitter<void>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected parsedToken: Signal<JwtPayload & Record<string, any>> = computed(() =>\n this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : {},\n );\n protected isImpersonating = computed(() => !!this.parsedToken()['impersonator']);\n protected libraryId = computed(() => this.parsedToken()['library_id']);\n protected user = toSignal(\n combineLatest([toObservable(this.libraryId), toObservable(this.isImpersonating)]).pipe(\n switchMap(([libraryId, isImpersonating]) =>\n libraryId && isImpersonating\n ? this.http.get<PersonSummary>(\n urlcat(this.personBaseUri(), PERSON_SUMMARY_PATH, {\n libraryId,\n }),\n {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n },\n )\n : of(null),\n ),\n ),\n );\n protected userFullName = computed(() =>\n this.parsedToken()['given_name']\n ? `${this.parsedToken()['given_name']} ${this.parsedToken()['family_name']}`\n : 'Unknown',\n );\n protected isRestricted = computed(() => this.user()?.restricted);\n protected userInfoTabs = computed(\n () =>\n new Map([\n ['Net ID', this.parsedToken()['net_id'] ?? ''],\n ['BYU ID', this.parsedToken()['byu_id'] ?? ''],\n ['Email', this.parsedToken()['email'] ?? ''],\n ]),\n );\n protected userPhotoUrl = computed(() =>\n this.parsedToken()['net_id'] ? USER_PHOTO_URL + this.parsedToken()['net_id'] : '',\n );\n\n protected activityStatus = computed(() => {\n if (this.user()?.is_retired) return 'retired';\n else if (this.user()?.is_employee) return 'active';\n else if (this.user()?.primary_position_type) return 'inactive';\n return null;\n });\n\n protected employeeStatusDescription = computed(() => {\n if (!this.user()) {\n return null;\n }\n\n let description = '';\n if (this.user()!.is_retired) {\n description = 'Retired';\n } else if (this.user()!.is_employee) {\n description = 'Active';\n } else if (this.user()!.primary_position_type) {\n description = 'Inactive';\n }\n\n if (this.user()!.primary_position_type_display) {\n description += ` ${this.user()!.primary_position_type_display} Employee`;\n }\n\n return description ?? null;\n });\n\n protected independentStudyStatus = toSignal(\n combineLatest([toObservable(this.libraryId), toObservable(this.isImpersonating)]).pipe(\n switchMap(([libraryId, isImpersonating]) =>\n libraryId && isImpersonating\n ? this.http\n .get<IndependentStudyResponse>(\n urlcat(this.personBaseUri(), INDEPENDENT_STUDY_RESPONSE_PATH, {\n libraryId,\n }),\n {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n },\n )\n .pipe(map((response) => response?.is_enrolled))\n : of(null),\n ),\n ),\n );\n protected accountStatuses = toSignal(\n toObservable(this.isImpersonating).pipe(\n switchMap((isImpersonating) => {\n if (!isImpersonating) {\n return of(null);\n }\n return this.http\n .get<AccountsResponse>(urlcat(this.libraryApiBaseUri(), PATRON_ACCOUNTS_PATH), {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n })\n .pipe(\n map((accounts) => {\n const accountStatuses = {\n ok: [] as ApplicationAccess[],\n blocked: [] as ApplicationAccess[],\n none: [] as ApplicationAccess[],\n };\n\n Object.values(accounts.applications).forEach((app) => {\n switch (app.access) {\n case AccessStatus.OK:\n accountStatuses.ok.push(app);\n break;\n case AccessStatus.BLOCKED:\n accountStatuses.blocked.push(app);\n break;\n case AccessStatus.NONE:\n accountStatuses.none.push(app);\n break;\n }\n });\n\n return accountStatuses;\n }),\n );\n }),\n ),\n );\n}\n","@if (isImpersonating()) {\n <div class=\"banner-padding\"></div>\n <div class=\"top-banner\" data-testid=\"banner\">\n <div class=\"banner-group profile-name-container\">\n <div class=\"profile-avatar\">\n <div class=\"profile-image\">\n <img\n [src]=\"userPhotoUrl()\"\n [alt]=\"userFullName()\"\n alt=\"user photo\"\n onerror=\"this.remove()\"\n />\n </div>\n <span class=\"material-symbols-outlined profile-icon\"> person </span>\n </div>\n <div class=\"profile-name-group\">\n <span class=\"soft\">Impersonating</span>\n <div class=\"profile-name-wrapper\">\n <span class=\"profile-name\">{{ userFullName() }}</span>\n @if (accountStatuses()) {\n <div class=\"application-status-bar\">\n @if (accountStatuses()!.ok.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-ok application-status\">\n <span class=\"material-symbols-outlined icon-checkmark\">\n check\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.ok.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n OK Applications\n <hr />\n @for (\n application of accountStatuses()!.ok;\n track application.label\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-checkmark\"\n >\n check\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (accountStatuses()!.blocked.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-blocked application-status\">\n <span class=\"material-symbols-outlined icon-warning\">\n warning\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.blocked.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n Blocked Applications\n <hr />\n @for (\n application of accountStatuses()!.blocked;\n track application.code\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-warning\"\n >\n warning\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (accountStatuses()!.none.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-none application-status\">\n <span class=\"material-symbols-outlined icon-lock\">\n lock\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.none.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n No Account\n <hr />\n @for (\n application of accountStatuses()!.none;\n track application.label\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-lock\"\n >\n lock\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"profile-details-container banner-group\">\n @for (detail of userInfoTabs() | keyvalue; track detail.key) {\n <div class=\"profile-detail\">\n <span class=\"soft label\">{{ detail.key }}</span>\n <lib-copy-tooltip [copyText]=\"detail.value\">\n <div class=\"profile-detail-tag white-tag clickable\">\n {{ detail.value || 'Unknown' }}\n </div>\n </lib-copy-tooltip>\n </div>\n }\n </div>\n <div class=\"profile-details-container banner-group\">\n <div class=\"profile-detail\">\n <span class=\"soft label\">Status</span>\n <div class=\"multiple-detail-tags\">\n <div\n class=\"profile-detail-tag color-tag\"\n title=\"{{ employeeStatusDescription() }}\"\n >\n {{ user()?.primary_position_type_display ?? 'Non-employee' }}\n @if (activityStatus()) {\n <span\n class=\"profile-status-circle\"\n [class.status-active]=\"activityStatus() === 'active'\"\n [class.status-inactive]=\"activityStatus() === 'inactive'\"\n [class.status-retired]=\"activityStatus() === 'retired'\"\n ></span>\n }\n </div>\n <div class=\"profile-detail-tag color-tag\">\n {{ (user()?.undergrad_graduate_status | titlecase) || 'Non-student' }}\n </div>\n <div class=\"profile-detail-tag color-tag\">\n {{ independentStudyStatus() ? 'Independent Study' : 'No Ind. Study' }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"spacer\"></div>\n <button class=\"end-impersonation-button shadow\" (click)=\"this.endImpersonation.emit()\">\n <span class=\"material-symbols-outlined icon\"> close </span>\n <span class=\"exit-text\">Exit</span>\n </button>\n </div>\n @if (isRestricted()) {\n <div class=\"restricted-bar-padding\"></div>\n <div class=\"restricted-bar\">\n <span class=\"title\">restricted person</span>\n <span class=\"text\">\n If anyone asks about this person, you are instructed to respond,\n <span class=\"emphasize\">\"We have no records for this person.\"</span>\n </span>\n </div>\n }\n <div class=\"right-border\"></div>\n <div class=\"bottom-border\"></div>\n <div class=\"left-border\"></div>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n Pipe,\n PipeTransform,\n inject,\n input,\n} from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Subject, Subscription, of } from 'rxjs';\nimport { catchError, startWith, switchMap, tap } from 'rxjs/operators';\nimport { libHbllFadeInOut } from '../animations/animations';\nimport urlcat from 'urlcat';\nimport { HttpClient } from '@angular/common/http';\nimport { CommonModule } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TokenPayload } from '../models/token-payload';\n\nexport const defaultOidcBaseUri = 'https://keycloak.lib.byu.edu/';\nexport const defaultOidcDefaultIdp = 'byu-realm';\n\n@Pipe({\n name: 'impersonateUser',\n standalone: true,\n})\nexport class ImpersonateUserPipe implements PipeTransform {\n transform(user: ImpersonateSearchResult): string {\n return `${user.name} (${user.netId || 'Unknown'})${user.restricted ? ' — Restricted' : ''}`;\n }\n}\nexport interface ImpersonateSearchResult {\n netId: string;\n institution: string;\n username: string;\n name: string;\n preferredName: string;\n givenName: string;\n surname: string;\n restricted: boolean;\n}\n\nconst SEARCH_USERS_PATH = '/impersonate/api/search/';\nconst START_IMPERSONATE_PATH = '/impersonate/:username';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ImpersonateUserPipe],\n selector: 'lib-impersonate-modal',\n templateUrl: './impersonate-modal.component.html',\n styleUrls: ['./impersonate-modal.component.scss'],\n animations: [libHbllFadeInOut],\n})\nexport class ImpersonateModalComponent implements OnDestroy {\n private readonly http = inject(HttpClient);\n private readonly fb = inject(FormBuilder);\n private readonly eref = inject(ElementRef);\n\n @Input() set showModal(open: boolean) {\n this.isOpen = open;\n if (open) {\n // Set focus on search input shortly after opening modal so user notices\n // the input receiving focus.\n setTimeout(() => this.eref.nativeElement.querySelector('#searchInput')?.focus(), 250);\n }\n }\n oidcBaseUri = input(defaultOidcBaseUri);\n oidcDefaultIdp = input(defaultOidcDefaultIdp);\n // Require an object here so that access tokens are not visible/extractable from the DOM in consuming applications. Instead they are only stored in memory.\n accessTokenPayload = input.required<TokenPayload>();\n @Output() dismiss = new EventEmitter<void>();\n @Output() init = new EventEmitter<void>();\n\n protected isOpen = false;\n protected hasError = false;\n protected form = this.fb.nonNullable.group({\n search: this.fb.control('', { validators: Validators.minLength(3) }),\n });\n protected selectedUsername?: string;\n\n protected loading = false;\n protected handleSearchSubject = new Subject<boolean>();\n protected results = toSignal(\n this.form.controls.search.valueChanges.pipe(\n switchMap((search) =>\n this.handleSearchSubject.pipe(\n startWith(false),\n switchMap((handleSearch) => {\n this.selectedUsername = undefined;\n this.hasError = false;\n\n if (!search || !handleSearch) {\n return of(null);\n }\n\n this.loading = true;\n const results = this.searchUsers(search);\n\n return results.pipe(\n catchError((e) => {\n this.hasError = true;\n console.error(e);\n return of(null);\n }),\n );\n }),\n ),\n ),\n tap(() => {\n this.loading = false;\n }),\n ),\n );\n\n private subs = new Subscription();\n\n @HostListener('document:mousedown', ['$event']) outsideClick(event: MouseEvent) {\n if ((event.target as HTMLElement)?.id === 'modalBackdrop') {\n this.close();\n }\n }\n\n @HostListener('document:keydown', ['$event']) handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Esc':\n case 'Escape': {\n this.close();\n break;\n }\n case 'I':\n case 'i': {\n if (event.ctrlKey || event.metaKey) {\n if (this.isOpen) {\n this.close();\n } else {\n this.init.emit();\n }\n event.preventDefault();\n }\n break;\n }\n default:\n break;\n }\n };\n\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n\n /** Redirect to Keycloak impersonate page, which will redirect back\n * after impersonation begins.\n */\n protected startImpersonation = (username?: string) => {\n const _username = username ?? this.selectedUsername;\n if (!_username) {\n return;\n }\n const url = urlcat(this.oidcBaseUri(), START_IMPERSONATE_PATH, {\n username,\n returnUri: window.location.href,\n defaultIdp: this.oidcDefaultIdp(),\n });\n this.replaceUrl(url);\n };\n\n protected handleSelectUser = (event: Event) => {\n this.selectedUsername = (event.target as HTMLInputElement).value;\n };\n\n protected clearSearch = () => {\n this.form.reset();\n };\n\n protected close = () => {\n this.dismiss.emit();\n this.clearSearch();\n };\n\n protected handleFormSubmit = (event: SubmitEvent) => {\n event.preventDefault();\n if (this.form.valid) {\n this.handleSearchSubject.next(true);\n }\n };\n\n protected handleSearchKeyPress = (event: KeyboardEvent) => {\n if (!['ArrowDown', 'Down'].includes(event.key)) {\n return;\n }\n event.preventDefault();\n if (this.results()?.length) {\n const firstResult = this.eref.nativeElement.querySelector(`#result_0`);\n firstResult?.click();\n firstResult?.focus();\n }\n };\n\n protected handleResultKeyPress = (event: KeyboardEvent) => {\n if (\n ['ArrowUp', 'Up'].includes(event.key) &&\n (event.target as HTMLInputElement)?.id === 'result_0'\n ) {\n event.preventDefault();\n this.eref.nativeElement.querySelector('#searchInput')?.focus();\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.startImpersonation();\n }\n };\n\n /** Search Keycloak users using a generic search query. */\n private searchUsers = (query: string) => {\n const uri = urlcat(this.oidcBaseUri(), SEARCH_USERS_PATH, {\n query,\n });\n\n return this.http.get<ImpersonateSearchResult[]>(uri, {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n });\n };\n\n private replaceUrl = (url: string) => window.location.replace(url);\n}\n","@if (isOpen) {\n <div @libHbllFadeInOut class=\"modal-wrapper\" id=\"modalBackdrop\" data-testid=\"backdrop\">\n <div class=\"modal-container\" data-testid=\"modal\">\n <div class=\"modal-header\">\n <h2>Impersonate</h2>\n <button type=\"button\" (click)=\"close()\" aria-label=\"Close\" data-testid=\"close\">\n <span class=\"material-symbols-outlined icon-close\"> close </span>\n </button>\n </div>\n <form [formGroup]=\"form\" (submit)=\"handleFormSubmit($event)\" data-testid=\"searchForm\">\n <div class=\"search-header\">\n <div class=\"secondary\" [class.disabled]=\"!form.valid\">\n <span class=\"keyboard-key\">Enter</span> to search\n </div>\n </div>\n <label\n for=\"searchInput\"\n class=\"search-wrapper\"\n [class.invalid]=\"form.invalid && form.dirty\"\n >\n <span class=\"material-symbols-outlined icon-search\"> search </span>\n <input\n id=\"searchInput\"\n type=\"text\"\n autocomplete=\"off\"\n formControlName=\"search\"\n placeholder=\"Search patrons...\"\n (keydown)=\"handleSearchKeyPress($event)\"\n #searchBox\n data-testid=\"searchInput\"\n />\n @if (!!searchBox.value && form.valid) {\n <span class=\"material-symbols-outlined icon-checkmark\"> check </span>\n }\n @if (searchBox.value.length) {\n <span\n (click)=\"clearSearch()\"\n @libHbllFadeInOut\n class=\"material-symbols-outlined icon-close\"\n >\n close\n </span>\n }\n </label>\n </form>\n <fieldset\n class=\"search-results-wrapper\"\n id=\"resultsScrollContainer\"\n (change)=\"handleSelectUser($event)\"\n >\n @if (!loading && results()) {\n @for (user of results(); track user.netId; let idx = $index) {\n <div\n class=\"result-field result\"\n [class.focus]=\"user.username === selectedUsername\"\n data-testid=\"result\"\n >\n <label\n [for]=\"'result_' + idx\"\n [class.warning]=\"user.restricted\"\n (mouseover)=\"selectedUsername = user.username\"\n >\n @if (user.restricted) {\n <span class=\"material-symbols-outlined icon\"> warning </span>\n } @else {\n <span class=\"material-symbols-outlined icon\"> person </span>\n }\n \n <span [title]=\"user\" data-testid=\"resultText\">{{\n user | impersonateUser\n }}</span>\n <input\n type=\"radio\"\n [value]=\"user.username\"\n class=\"hidden\"\n [id]=\"'result_' + idx\"\n name=\"resultSelect\"\n (keydown)=\"handleResultKeyPress($event)\"\n />\n </label>\n <button\n class=\"impersonate-button\"\n data-testid=\"impersonateBtn\"\n (click)=\"startImpersonation(user.username)\"\n >\n Impersonate\n </button>\n </div>\n } @empty {\n <div class=\"result-field\">\n No results. Try searching by Net ID or BYU ID.\n </div>\n }\n }\n @if (loading) {\n <div class=\"result-field\">\n <div class=\"lib-spinner\"></div>\n </div>\n }\n @if (hasError) {\n <div class=\"result-field\">Something went wrong. We'll keep trying.</div>\n }\n </fieldset>\n </div>\n </div>\n}\n","import { Component, computed, EventEmitter, input, Output, Signal } from '@angular/core';\nimport { HbllHeaderComponent } from '../hbll-header/hbll-header.component';\nimport { ImpersonationBannerComponent } from '../impersonation-banner/impersonation-banner.component';\nimport {\n defaultOidcBaseUri,\n defaultOidcDefaultIdp,\n ImpersonateModalComponent,\n} from '../impersonate-modal/impersonate-modal.component';\nimport { TokenPayload } from '../models/token-payload';\nimport { jwtDecode, JwtPayload } from 'jwt-decode';\n\n@Component({\n selector: 'lib-header-with-impersonation',\n standalone: true,\n imports: [HbllHeaderComponent, ImpersonationBannerComponent, ImpersonateModalComponent],\n templateUrl: './header-with-impersonation.component.html',\n styleUrl: './header-with-impersonation.component.scss',\n})\nexport class HeaderWithImpersonationComponent {\n accessTokenPayload = input.required<TokenPayload>();\n oidcBaseUri = input(defaultOidcBaseUri);\n oidcDefaultIdp = input(defaultOidcDefaultIdp);\n @Output() login = new EventEmitter<void>();\n @Output() logout = new EventEmitter<void>();\n @Output() endImpersonation = new EventEmitter<void>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected parsedToken: Signal<(JwtPayload & Record<string, any>) | null> = computed(() =>\n this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : null,\n );\n protected name = computed(() => (this.parsedToken() ? this.parsedToken()!['given_name'] : ''));\n protected showImpersonateButton = computed(() =>\n this.parsedToken()\n ? !!(\n !this.isImpersonating() &&\n this.parsedToken()!['resource_access']['realm-management']?.['roles']?.includes(\n 'impersonation',\n )\n )\n : false,\n );\n protected showImpersonationModal = false;\n private isImpersonating = computed(() => !!this.parsedToken()?.['impersonator']);\n}\n","<lib-impersonation-banner\n [accessTokenPayload]=\"accessTokenPayload()\"\n (endImpersonation)=\"endImpersonation.emit()\"\n></lib-impersonation-banner>\n<lib-hbll-header\n [name]=\"name()\"\n [showImpersonateButton]=\"showImpersonateButton()\"\n (openImpersonationModal)=\"showImpersonationModal = true\"\n (login)=\"login.emit()\"\n (logout)=\"logout.emit()\"\n/>\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n","export const ADVANCED_SEARCH_QUALIFIER_MAP = {\n contains: 'contains',\n begins_with: 'begins with',\n exact: 'is (exact)',\n index: 'browse value',\n subject_lc: 'LC browse',\n subject_expanded: 'expanded browse',\n} as const;\n\nexport const ADVANCED_SEARCH_FIELD_MAP = {\n abstract: 'Abstract',\n any: 'Any Field',\n callNumber: 'Call Number',\n contributor: 'Contributor',\n creator: 'Author/Creator',\n genre: 'Genre',\n isbn: 'ISBN',\n issn: 'ISSN',\n series: 'Series',\n source: 'Source',\n subject: 'Subject',\n title: 'Title',\n} as const;\n\nexport const ADVANCED_SEARCH_QUERIES_LIMIT = 12;\n\nexport const ADVANCED_SEARCH_OPTIONS = {\n boolean: ['AND', 'OR', 'NOT'],\n // In SS-api, the EDS key for all fields is `allText`, however this is the default and is never used in the URL, so we omit it here.\n fields: ['any', 'title', 'creator', 'subject', 'issn', 'isbn'],\n localFields: ['callNumber', 'contributor', 'genre', 'series'],\n externalFields: ['source', 'abstract'],\n qualifiers: {\n any: ['contains'],\n title: ['contains', 'exact', 'begins_with', 'index'],\n callNumber: ['contains', 'exact', 'begins_with', 'index'],\n creator: ['contains', 'exact', 'begins_with', 'index'],\n contributor: ['contains', 'exact'],\n isbn: ['contains', 'exact'],\n issn: ['contains', 'exact'],\n genre: ['contains', 'exact'],\n subject: ['contains', 'exact', 'subject_lc', 'subject_expanded'],\n series: ['contains', 'exact'],\n },\n resultsPerPage: ['10', '20', '50', '100'],\n types: {\n byu: {\n book: 'Books',\n sound_recording: 'Sound Recordings',\n image: 'Images',\n periodical: 'Periodicals',\n map: 'Maps',\n score: 'Music Scores',\n newspaper: 'Newspapers',\n dissertation: 'Theses & Dissertations',\n video: 'Videos',\n },\n law: { book: 'Books' },\n ensign: {\n book: 'Books',\n sound_recording: 'Sound Recordings',\n journal: 'Periodicals',\n magazine: 'Magazines',\n video: 'Videos',\n },\n },\n collections: {\n byu: {\n lee: 'BYU Library',\n 'lee -- asian': 'Asian',\n 'lee -- general': 'General Collection',\n 'lee -- govdocs': 'Government Documents',\n 'lee -- humanities': 'Humanities',\n 'lee -- juvenile': 'Juvenile',\n 'lee -- maps': 'Maps',\n 'lee -- media_center': 'Media Center',\n 'lee -- music': 'Music & Dance',\n 'lee -- periodicals': 'Periodicals',\n 'lee -- popular': 'Popular Reading',\n 'lee -- religion_famhist': 'Religion & Family History',\n 'lee -- science_engineering': 'Science & Engineering',\n 'lee -- social_science': 'Social Science',\n 'lee -- special_collections': 'Special Collections',\n },\n law: {\n 'law -- iclrs': 'Law & Religion Studies',\n 'law -- main': 'Main Collection',\n 'law -- media': 'Media',\n 'law -- reserve': 'Reserve',\n 'law -- self_help': 'Self Help',\n 'law -- study_guides': 'Study Guides',\n },\n ensign: {\n 'ldsbc -- audio_books': 'Audio Books',\n 'ldsbc -- display': 'Display Shelves',\n 'ldsbc -- fiction': 'Fiction',\n 'ldsbc -- films': 'Feature Films',\n 'ldsbc -- stacks': 'General Collection',\n 'ldsbc -- news_magazines': 'News Magazines',\n 'ldsbc -- non_feature_films': 'Non Feature Films',\n 'ldsbc -- oversize': 'Oversize',\n 'ldsbc -- paralegal': 'Paralegal',\n 'ldsbc -- periodicals': 'Periodicals',\n 'ldsbc -- reference': 'Reference',\n 'ldsbc -- reserve': 'Reserve',\n },\n },\n languages: {\n eng: 'English',\n ara: 'Arabic',\n chi: 'Chinese',\n ces: 'Czech',\n dan: 'Danish',\n dut: 'Dutch',\n fin: 'Finnish',\n fre: 'French',\n ger: 'German',\n gre: 'Greek, Modern',\n heb: 'Hebrew',\n hin: 'Hindi',\n hun: 'Hungarian',\n ice: 'Icelandic',\n ita: 'Italian',\n jpn: 'Japanese',\n kor: 'Korean',\n lat: 'Latin',\n nor: 'Norwegian',\n pol: 'Polish',\n por: 'Portuguese',\n pan: 'Punjabi',\n rum: 'Romanian',\n rus: 'Russian',\n spa: 'Spanish',\n swe: 'Swedish',\n wel: 'Welsh',\n yid: 'Yiddish',\n },\n} as const;\n\nexport const PRIMARY_BLUE = 'rgba(63, 112, 176, 1)';\nexport const PRIMARY_BLUE_HOVER = 'hsl(214, 48%, 60%, 1)';\nexport const PRIMARY_LIGHT_BLUE = 'rgba(223, 233, 247, 1)';\nexport const PRIMARY_PURPLE = '#8772A6';\nexport const PRIMARY_PURPLE_HOVER = '#7C659F';\nexport const DESTRUCTIVE_RED = 'hsl(5, 47%, 47%, 1)';\nexport const DESTRUCTIVE_RED_HOVER = 'hsl(5, 47%, 50%, 1)';\nexport const SECONDARY_TEXT_GRAY = 'rgba(112, 112, 112, 1)';\nexport const LIGHT_GRAY = 'rgba(230, 230, 230, 1)';\nexport const DROP_SHADOW_DARK_BLUE = 'rgba(51, 62, 77, 0.16)';\nexport const TEXT_SEMIBOLD = '600';\nexport const TEXT_BOLD = '700';\nexport const ANIMATION_LENGTH_STD = '0.15s';\nexport const LINE_HEIGHT_STD = '1.4';\nexport const CONTEXTUAL_SELECTOR_HEIGHT = '4.5rem';\nexport const CONTENT_MAX_WIDTH = '75rem';\nexport const CONTENT_PADDING = '5.4rem';\n","import { ADVANCED_SEARCH_OPTIONS } from '../constants';\n\nexport type AdvancedSearchBooleanOption = (typeof ADVANCED_SEARCH_OPTIONS.boolean)[number];\n\nexport type AdvancedSearchFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.fields)[number];\n\nexport const isAdvancedSearchFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n [...ADVANCED_SEARCH_OPTIONS.fields].includes(field as AdvancedSearchFieldOption);\n\nexport type AdvancedSearchLocalFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.localFields)[number];\n\nexport const isAdvancedSearchLocalFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.localFields.includes(field as AdvancedSearchLocalFieldOption);\n\nexport type AdvancedSearchExternalFieldOption =\n (typeof ADVANCED_SEARCH_OPTIONS.externalFields)[number];\n\nexport const isAdvancedSearchExternalFieldOption = (\n field: string,\n): field is AdvancedSearchExternalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.externalFields.includes(field as AdvancedSearchExternalFieldOption);\n\nexport type AdvancedSearchQualifierOption =\n (typeof ADVANCED_SEARCH_OPTIONS.qualifiers)[keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers][number];\n\nexport type AdvancedSearchResultsPerPageOption =\n (typeof ADVANCED_SEARCH_OPTIONS.resultsPerPage)[number];\n\nexport type AdvancedSearchLanguageOption = (keyof typeof ADVANCED_SEARCH_OPTIONS.languages)[number];\n\nexport type AdvancedSearchQualifier = keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers;\n\nexport interface AdvancedSearchQueryRow {\n boolean?: AdvancedSearchBooleanOption;\n field?:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption;\n qualifier?: AdvancedSearchQualifierOption;\n query: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { ADVANCED_SEARCH_OPTIONS } from '../constants';\nimport { SearchScope } from '../models/search-scope.model';\n\n/**\n * Returns the field value based on the scope. If a field value does not exist in a specific scope, the default is returned.\n */\n@Pipe({\n name: 'fieldByScope',\n standalone: true,\n})\nexport class FieldByScopePipe implements PipeTransform {\n transform(\n fieldValue:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n scope: SearchScope,\n ):\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption {\n if (\n isAdvancedSearchFieldOption(fieldValue) ||\n (scope === 'local'\n ? isAdvancedSearchLocalFieldOption(fieldValue)\n : isAdvancedSearchExternalFieldOption(fieldValue))\n )\n return fieldValue;\n return ADVANCED_SEARCH_OPTIONS.fields[0];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n} from '../constants';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\nimport { FieldByScopePipe } from './field-by-scope.pipe';\n\n@Pipe({\n name: 'ssAdvancedQueries',\n standalone: true,\n})\nexport class SsAdvancedQueriesPipe implements PipeTransform {\n constructor(private fieldByScopePipe: FieldByScopePipe) {}\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n return queryRows\n .map((row, i) => {\n const b = i !== 0 ? row.boolean || ADVANCED_SEARCH_OPTIONS.boolean[0] : '';\n const f:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption = this.fieldByScopePipe.transform(\n row.field ?? ADVANCED_SEARCH_OPTIONS.fields[0],\n scope,\n );\n const o = isAdvancedSearchExternalFieldOption(f)\n ? 'contains'\n : row.qualifier ??\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n f as AdvancedSearchFieldOption | AdvancedSearchLocalFieldOption\n ][0];\n return `${b ? b + ' ' : ''}${\n ADVANCED_SEARCH_FIELD_MAP[f]\n } ${ADVANCED_SEARCH_QUALIFIER_MAP[o as keyof typeof ADVANCED_SEARCH_QUALIFIER_MAP]} <b>${row.query}</b>`;\n })\n .join(' ');\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator method to check if a `FormGroup<{ from: FormControl<string>; to: FormControl<string> }>` is valid.\n * The FormGroup is considered valid if either both `from` and `to` are set, or both are empty strings.\n * @returns {ValidationErrors | null} validation errors, if any\n */\nexport const validateDateRangeFields = (): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n const from: string = control.get('from')?.value;\n const to: string = control.get('to')?.value;\n // Valid if both fields are set or both are empty.\n if ((!from && !to) || (from && to)) return null;\n return from ? { toInvalid: true } : { fromInvalid: true };\n };\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n} from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'lib-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n MatChipsModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatIconModule,\n ],\n // Necessary to override material design styles.\n // IMPORTANT: Tightly scope classes and ids to this component if they are necessary.\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n})\nexport class HbllMultiSelectComponent {\n @ViewChild('input') private inputRef!: ElementRef<HTMLInputElement>;\n @Input() allOptions: Record<string, string> = {};\n @Input() label = '';\n /**\n * An array that indicates which keys are selected.\n */\n @Input() selectedKeys: string[] = [];\n /**\n * An EventEmitter that emits an array of keys indicating which options are currently selected.\n */\n @Output() selectedKeysChange = new EventEmitter<string[]>();\n\n protected inputControl = new FormControl('');\n protected filteredOptions$: Observable<string[]> = combineLatest([\n this.inputControl.valueChanges.pipe(startWith('')),\n this.selectedKeysChange.asObservable().pipe(startWith([])),\n ]).pipe(\n map(([key]: [string | null, unknown]) =>\n // Display filtered options if there is a value, else display all options currently not selected.\n key\n ? this.filterOptions(key)\n : Object.keys(this.allOptions).filter(\n (key) => !this.selectedKeys.find((selectedOption) => key === selectedOption),\n ),\n ),\n );\n protected separatorKeysCodes: number[] = [ENTER, COMMA];\n\n /**\n * Adds a key from the input to the array of selected key.\n * The value from the input must match a key from the record of all options.\n * @param {MatChipInputEvent} event MatChipInputEvent\n */\n protected addOption(event: MatChipInputEvent): void {\n this.addOptionToSelectedOptions(event.value);\n }\n\n /**\n * Removes a key from the array of selected options and emits the new selected keys.\n * @param {MultiSelectKeyValPair} key key to remove\n */\n protected removeOption(key: string): void {\n const index = this.selectedKeys.indexOf(key);\n if (index >= 0) {\n this.selectedKeys.splice(index, 1);\n this.selectedKeysChange.emit(this.selectedKeys);\n }\n }\n\n /**\n * Adds an option to the array of selected keys when a user selects from the autocomplete.\n * @param {MatAutocompleteSelectedEvent} event MatAutocompleteSelectedEvent\n */\n protected selectOption = (event: MatAutocompleteSelectedEvent): void => {\n this.addOptionToSelectedOptions(event.option.value);\n };\n\n /**\n * Filters the options by the supplied value as well as the currently selected values.\n * @param {string} value value to filter by.\n * @returns {string[]} the filtered keys\n */\n private filterOptions = (value: string): string[] => {\n return Object.keys(this.allOptions).filter(\n (key: string) =>\n this.allOptions[key].toLowerCase().includes(value.toLowerCase()) &&\n !this.selectedKeys.includes(key),\n );\n };\n\n /**\n * Adds a key to the selected keys array if the option is truthy and not already in the array.\n * The input is also cleared (if available), and the new selected keys are emitted.\n * @param {key} option key to add\n */\n private addOptionToSelectedOptions = (key: string): void => {\n if (key && !this.selectedKeys.includes(key) && this.allOptions[key]) {\n this.selectedKeys.push(key);\n this.inputControl.setValue('');\n this.selectedKeysChange.emit(this.selectedKeys);\n if (this.inputRef) this.inputRef.nativeElement.value = '';\n }\n };\n}\n","<div class=\"components-multi-select\">\n <mat-form-field appearance=\"outline\">\n <mat-chip-grid #chipGrid [attr.aria-label]=\"label + ' selection'\">\n @for (key of selectedKeys; track key) {\n @if (allOptions[key]) {\n <mat-chip-row (removed)=\"removeOption(key)\" data-testid=\"matChipRow\">\n {{ allOptions[key] }}\n <button\n matChipRemove\n [attr.aria-label]=\"'remove ' + allOptions[key]\"\n [attr.data-testid]=\"'remove' + key\"\n >\n <span class=\"material-symbols-outlined components-icon\"> cancel </span>\n </button>\n </mat-chip-row>\n }\n }\n </mat-chip-grid>\n <label class=\"components-hidden\" for=\"input\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"input\"\n [formControl]=\"inputControl\"\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"addOption($event)\"\n data-testid=\"input\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selectOption($event)\"\n data-testid=\"autocomplete\"\n >\n @for (key of filteredOptions$ | async; track key) {\n <mat-option [value]=\"key\" data-testid=\"autocompleteOption\">\n {{ allOptions[key] }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'lib-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class HbllCheckboxComponent {\n isChecked = input(false);\n}\n","<span class=\"components-checkbox-container\" [class.components-checked]=\"isChecked()\">\n @if (isChecked()) {\n <span class=\"material-symbols-outlined components-icon\"> check </span>\n }\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n} from '@angular/core';\nimport { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { libHbllFadeInOut } from '../../animations/animations';\nimport { validateDateRangeFields } from '../utils';\n\n@Component({\n selector: 'lib-date-range',\n templateUrl: './date-range.component.html',\n styleUrls: ['./date-range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n animations: [libHbllFadeInOut],\n})\nexport class DateRangeComponent {\n private readonly fb = inject(NonNullableFormBuilder);\n /**\n * Emits `{ from: string, to: string }` object if both values are set to a valid or empty state by the user.\n */\n @Output() validDateChange = new EventEmitter<{ from: string; to: string }>();\n @Output() fromChange = new EventEmitter<string>();\n @Output() toChange = new EventEmitter<string>();\n protected dateForm = this.fb.group(\n {\n from: ['', [Validators.pattern('^[0-9]{4}$')]],\n to: ['', [Validators.pattern('^[0-9]{4}$')]],\n },\n { validators: validateDateRangeFields() },\n );\n @Input() set from(from: string) {\n if (from !== this.dateForm.controls.from.value) this.dateForm.controls.from.setValue(from);\n }\n @Input() set to(to: string) {\n if (to !== this.dateForm.controls.to.value) this.dateForm.controls.to.setValue(to);\n }\n protected onFromChange = () => {\n this.onInputChange();\n this.fromChange.emit(this.dateForm.controls.from.value);\n };\n protected onToChange = () => {\n this.onInputChange();\n this.toChange.emit(this.dateForm.controls.to.value);\n };\n\n private onInputChange = () => {\n let from = this.dateForm.controls.from.value;\n let to = this.dateForm.controls.to.value;\n if (from && to && this.dateForm.controls.from.valid && this.dateForm.controls.to.valid) {\n // Ensure 'to' contains the larger year. Swap if necessary.\n if (parseInt(from) > parseInt(to)) {\n const swap = from;\n from = to;\n to = swap;\n }\n this.validDateChange.emit({ from, to });\n } else if (!from && !to) {\n this.validDateChange.emit({ from, to });\n }\n };\n}\n","<form id=\"fromTo\" data-testid=\"fromTo\" [formGroup]=\"dateForm\">\n <label for=\"fromFacet\">Between</label>\n <input\n formControlName=\"from\"\n id=\"fromFacet\"\n name=\"fromFacet\"\n data-testid=\"from\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onFromChange()\"\n [class.error]=\"\n dateForm.errors?.['fromInvalid'] || dateForm.controls.from.errors?.['pattern']\n \"\n />\n <label for=\"toFacet\">and</label>\n <input\n formControlName=\"to\"\n id=\"toFacet\"\n name=\"toFacet\"\n data-testid=\"to\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onToChange()\"\n [class.error]=\"dateForm.errors?.['toInvalid'] || dateForm.controls.to.errors?.['pattern']\"\n />\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { filter, startWith, tap } from 'rxjs/operators';\nimport {\n AdvancedSearchBooleanOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchLanguageOption,\n AdvancedSearchQualifierOption,\n AdvancedSearchQualifier,\n AdvancedSearchExternalFieldOption,\n AdvancedSearchQueryRow,\n AdvancedSearchFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n} from '../models/advanced-search.model';\nimport { Subscription } from 'rxjs';\nimport { validateDateRangeFields } from '../utils';\nimport { CommonModule } from '@angular/common';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n ADVANCED_SEARCH_QUERIES_LIMIT,\n} from '../constants';\nimport { MatIconModule } from '@angular/material/icon';\nimport { HbllMultiSelectComponent } from '../../multi-select/multi-select.component';\nimport { HbllCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { DateRangeComponent } from '../date-range/date-range.component';\nimport { SearchConfig } from '../models/search-config.model';\n\ntype QueryRow = {\n boolean: FormControl<AdvancedSearchBooleanOption>;\n field: FormControl<\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption\n >;\n qualifier: FormControl<AdvancedSearchQualifierOption>;\n query: FormControl<string>;\n};\n\nconst DATE_VALIDATOR_REGEX = '^[0-9]{4}$';\n\n@Component({\n selector: 'lib-ss-advanced-search',\n standalone: true,\n templateUrl: './advanced-search.component.html',\n styleUrls: ['./advanced-search.component.scss'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatIconModule,\n HbllMultiSelectComponent,\n HbllCheckboxComponent,\n DateRangeComponent,\n ],\n})\nexport class AdvancedSearchComponent implements OnDestroy {\n private readonly fb = inject(NonNullableFormBuilder);\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n\n // Though multiple instances exists, this represent query 1.\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n\n private subscription = new Subscription();\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n /**\n * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.\n * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.\n */\n private syncUpFieldAndQualifier = (\n fg: FormGroup<{\n boolean: FormControl;\n field: FormControl;\n qualifier: FormControl;\n query: FormControl;\n }>,\n scope: SearchConfig['scope'],\n ) => {\n this.subscription.add(\n fg.controls.field.valueChanges\n .pipe(\n filter(() => scope === 'local'),\n tap((val: AdvancedSearchQualifier) =>\n fg.controls.qualifier.setValue(ADVANCED_SEARCH_OPTIONS.qualifiers[val][0]),\n ),\n )\n .subscribe(),\n );\n };\n\n protected advancedSearchForm = this.fb.group({\n queries: this.fb.array<FormGroup<QueryRow>>(\n [],\n [Validators.maxLength(ADVANCED_SEARCH_QUERIES_LIMIT)],\n ),\n types: [[] as string[]],\n collections: [[] as string[]],\n languages: [[] as AdvancedSearchLanguageOption[]],\n date: this.fb.group(\n {\n from: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n to: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n },\n { validators: validateDateRangeFields() },\n ),\n limitResults: this.fb.group({\n peerReviewed: [false],\n }),\n expandResults: this.fb.group({\n applyEquivalentSubjects: [false],\n fullText: [false],\n }),\n });\n\n protected isSubmitted = false;\n protected advancedSearchOptions = ADVANCED_SEARCH_OPTIONS;\n protected advancedSearchFieldMap = ADVANCED_SEARCH_FIELD_MAP;\n protected advancedSearchQualifierMap = ADVANCED_SEARCH_QUALIFIER_MAP;\n\n get queries() {\n return this.advancedSearchForm.controls.queries;\n }\n get types() {\n return this.advancedSearchForm.controls.types;\n }\n get collections() {\n return this.advancedSearchForm.controls.collections;\n }\n get languages() {\n return this.advancedSearchForm.controls.languages;\n }\n get from() {\n return this.advancedSearchForm.controls.date.controls.from;\n }\n get to() {\n return this.advancedSearchForm.controls.date.controls.to;\n }\n get peerReviewed() {\n return this.advancedSearchForm.controls.limitResults.controls.peerReviewed;\n }\n get fullText() {\n return this.advancedSearchForm.controls.expandResults.controls.fullText;\n }\n get applyEquivalentSubjects() {\n return this.advancedSearchForm.controls.expandResults.controls.applyEquivalentSubjects;\n }\n\n /**\n * Add a query to `queries` `FormArray`. This FormGroup has an additional `boolean` control.\n */\n protected addQuery = () => {\n this.queries.push(\n this.fb.group({\n boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0] as AdvancedSearchBooleanOption],\n field: [\n ADVANCED_SEARCH_OPTIONS.fields[0] as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n ],\n qualifier: [\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n ADVANCED_SEARCH_OPTIONS.localFields[0]\n ][0] as AdvancedSearchQualifierOption,\n ],\n query: ['', Validators.required],\n }),\n );\n this.syncUpFieldAndQualifier(this.queries.at(-1), this.config.scope);\n };\n\n protected removeQuery = (i: number) => {\n this.queries.removeAt(i);\n };\n\n /**\n * Prepares appropriate query params before performing a local advanced search.\n */\n protected doLocalAdvancedSearch = () => {\n this.doAdvancedSearch({\n localAdvancedSearch: {\n ...this.config.localAdvancedSearch,\n creationDate: this.gatherToAndFromValues(),\n selectedLanguages: this.languages.value,\n selectedResourceTypes: this.types.value,\n selectedCollections: this.collections.value,\n },\n });\n };\n\n /**\n * Prepares appropriate query params before performing an external advanced search.\n */\n protected doExternalAdvancedSearch = () => {\n this.doAdvancedSearch({\n externalAdvancedSearch: {\n ...this.config.externalAdvancedSearch,\n datePublished: this.gatherToAndFromValues(),\n selectedLanguages: this.languages.value,\n limitResults: {\n peerReviewed: this.peerReviewed.value,\n },\n expandResults: {\n applyEquivalentSubjects: this.applyEquivalentSubjects.value,\n fullText: this.fullText.value,\n },\n },\n });\n };\n\n /**\n * Compares 'from' and 'to' to ensure 'to' is >= to 'from', else swaps them.\n */\n private gatherToAndFromValues = () => {\n const from = this.from.value\n ? parseInt(this.from.value) <= parseInt(this.to.value)\n ? this.from.value\n : this.to.value\n : '';\n const to = this.to.value\n ? parseInt(this.to.value) >= parseInt(this.from.value)\n ? this.to.value\n : this.from.value\n : '';\n return { from, to };\n };\n\n /**\n * Verifies that there is a query to use, gathers all other query parameters needed, then performs an advanced search via `router.navigate()`.\n * @param {Record<string, string>} queryParams base set of query params to navigate with\n */\n private doAdvancedSearch = (updatedProps: Partial<SearchConfig>): void => {\n this.isSubmitted = true;\n // Don't perform a search unless there is at least one query\n if (\n this.queries.at(0).controls.query.invalid &&\n !this.queries.value.some((v) => !!v.query)\n ) {\n this.showSearchValidationToolTip();\n return;\n }\n // Don't perform a search unless the date form is valid\n if (this.advancedSearchForm.controls.date.invalid) return;\n\n this.advancedSearch.emit({\n ...this.config,\n ...updatedProps,\n advancedSearchQueryRows: this.queries.value as AdvancedSearchQueryRow[],\n });\n this.isSubmitted = false;\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n\n private setupForm = () => {\n this.queries.clear();\n // Always keep at least two queries available\n this.addQuery();\n this.addQuery();\n\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.queries\n .at(0)\n .controls.query.valueChanges.pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => (this.inputTooltip.disabled = true)),\n );\n\n // If no `q{NUM}` use `q` for first query\n if (!this.config.advancedSearchQueryRows.length)\n this.queries.at(0).controls.query.setValue(this.config.q);\n\n this.config.advancedSearchQueryRows.forEach((queryRow, i) => {\n // Add a query form control for every q{num} key after the first.\n let queryControl = null;\n if (i === 0 || i === 1) {\n queryControl = this.queries.at(i);\n } else {\n this.addQuery();\n queryControl = this.queries.at(-1);\n }\n\n // Add the query value.\n queryControl.controls.query.setValue(queryRow.query);\n\n // Add the field value, if available.\n if (\n queryRow.field && // Only set the field if the value belongs to the current scope\n (isAdvancedSearchFieldOption(queryRow.field) ||\n (this.config.scope === 'local'\n ? isAdvancedSearchLocalFieldOption(queryRow.field)\n : isAdvancedSearchExternalFieldOption(queryRow.field)))\n )\n queryControl.controls.field.setValue(queryRow.field);\n else queryControl.controls.field.setValue(this.advancedSearchOptions.fields[0]);\n\n // Add the qualifier value, if available and a local search.\n if (this.config.scope === 'local' && queryRow.qualifier)\n queryControl.controls.qualifier.setValue(\n queryRow.qualifier ||\n this.advancedSearchOptions.qualifiers[\n queryControl.controls.field.value as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n ],\n );\n\n // Add the boolean, if available and not the first query.\n if (i !== 0 && queryRow.boolean)\n queryControl.controls.boolean.setValue(queryRow.boolean);\n });\n if (this.config.scope === 'local') {\n this.types.setValue(this.config.localAdvancedSearch.selectedResourceTypes);\n this.collections.setValue(this.config.localAdvancedSearch.selectedCollections);\n this.languages.setValue(\n this.config.localAdvancedSearch.selectedLanguages as AdvancedSearchLanguageOption[],\n );\n this.from.setValue(this.config.localAdvancedSearch.creationDate.from);\n this.to.setValue(this.config.localAdvancedSearch.creationDate.to);\n } else {\n this.languages.setValue(\n this.config.externalAdvancedSearch\n .selectedLanguages as AdvancedSearchLanguageOption[],\n );\n this.from.setValue(this.config.externalAdvancedSearch.datePublished.from);\n this.to.setValue(this.config.externalAdvancedSearch.datePublished.to);\n this.peerReviewed.setValue(\n this.config.externalAdvancedSearch.limitResults.peerReviewed,\n );\n this.applyEquivalentSubjects.setValue(\n this.config.externalAdvancedSearch.expandResults.applyEquivalentSubjects,\n );\n this.fullText.setValue(this.config.externalAdvancedSearch.expandResults.fullText);\n }\n };\n}\n","<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"ss-adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"ss-adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"ss-select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"ss-hidden\">Field {{ queryIndex }}</label>\n <div class=\"ss-select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (field of advancedSearchOptions.fields; track field) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n <optgroup\n [label]=\"(config.scope === 'external' ? 'Online' : 'Library') + ' Specific'\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </optgroup>\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"ss-hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"ss-select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"ss-hidden\">Query {{ queryIndex }}</label>\n <div class=\"ss-query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"ss-row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"ss-other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"advancedSearchOptions.types[config.institution]\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"advancedSearchOptions.collections[config.institution]\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Creation Date' }\"\n ></ng-container>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"ss-checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"ss-checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox [isChecked]=\"peerReviewed.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"ss-checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply equivalent subjects -->\n <label class=\"ss-checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox [isChecked]=\"applyEquivalentSubjects.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"ss-checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox [isChecked]=\"fullText.value\"></lib-checkbox>\n <span class=\"ss-label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Date Published' }\"\n ></ng-container>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n }\n </div>\n <div id=\"advSearchFooter\">\n <a [href]=\"'https://lib.byu.edu/browse/' + config.institution\">Alphabetic Browse</a>\n <button\n class=\"pill-btn--components\"\n [ngClass]=\"{\n ensign: config.institution === 'ensign',\n }\"\n type=\"submit\"\n data-testid=\"advSearchSubmitButton\"\n >\n Search\n </button>\n </div>\n</form>\n\n<ng-template #languageBlock>\n <div>\n <h4>Language</h4>\n <lib-multi-select\n [label]=\"'language'\"\n [allOptions]=\"advancedSearchOptions.languages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-multi-select>\n </div>\n</ng-template>\n<ng-template #dateBlock let-header=\"header\">\n <div id=\"dateOptions\" class=\"external\">\n <h4>{{ header }}</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n</ng-template>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { startWith, filter } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { SearchConfig } from '../models/search-config.model';\n\n@Component({\n selector: 'lib-ss-simple-search',\n standalone: true,\n imports: [MatTooltipModule, MatIconModule, ReactiveFormsModule, CommonModule],\n templateUrl: './simple-search.component.html',\n styleUrls: ['./simple-search.component.scss'],\n})\nexport class SimpleSearchComponent implements OnInit, OnDestroy {\n private readonly fb = inject(FormBuilder);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n private subscription = new Subscription();\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n protected isSubmitted = false;\n protected searchForm = this.fb.nonNullable.group({\n simpleQuery: ['', Validators.required],\n });\n\n get simpleQuery() {\n return this.searchForm.get('simpleQuery') as FormControl;\n }\n\n ngOnInit() {\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => {\n this.inputTooltip.disabled = true;\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n protected emitSimpleSearch = () => {\n this.isSubmitted = true;\n // Don't perform a search unless there is a query\n if (this.simpleQuery.invalid) {\n this.showSearchValidationToolTip();\n return;\n }\n this.simpleSearch.emit({ ...this.config, q: this.simpleQuery.value });\n this.isSubmitted = false;\n };\n\n protected clearQuery = () => {\n this.simpleQuery.setValue('');\n this.clearSimpleSearch.emit();\n };\n\n private setupForm = () => {\n this.simpleQuery.setValue(\n this.config.q || this.config.advancedSearchQueryRows[0]?.query || '',\n );\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n}\n","<div class=\"ss-container\">\n <form [formGroup]=\"searchForm\" (submit)=\"emitSimpleSearch()\" data-testid=\"searchForm\">\n <input\n #searchInput\n data-testid=\"searchInput\"\n id=\"q\"\n name=\"q\"\n type=\"text\"\n required\n aria-required=\"true\"\n aria-label=\"search input\"\n autocapitalize=\"off\"\n formControlName=\"simpleQuery\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && simpleQuery.invalid\"\n />\n <label for=\"q\" data-testid=\"label\">{{\n config.scope === 'local'\n ? 'Books, media, special collections and more'\n : 'Ebooks, articles, journals, databases, streaming media and more'\n }}</label>\n <button\n type=\"submit\"\n aria-label=\"search\"\n data-testid=\"searchBtn\"\n [ngClass]=\"{ ensign: config.institution === 'ensign' }\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> search </span>\n </button>\n </form>\n\n @if (simpleQuery.value) {\n <button id=\"clear\" (click)=\"clearQuery()\" data-testid=\"clearBtn\">\n <span class=\"material-symbols-outlined ss-icon\"> cancel </span>\n </button>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ADVANCED_SEARCH_FIELD_MAP } from '../constants';\nimport {\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\n\n@Pipe({\n name: 'advancedFieldWarning',\n standalone: true,\n})\nexport class AdvancedFieldWarningPipe implements PipeTransform {\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n let warning = '';\n for (const row of queryRows) {\n if (\n row.field &&\n !isAdvancedSearchFieldOption(row.field as string) &&\n (scope === 'local'\n ? !isAdvancedSearchLocalFieldOption(row.field as string)\n : !isAdvancedSearchExternalFieldOption(row.field as string))\n ) {\n if (!warning)\n warning = `Searching by <b>${\n ADVANCED_SEARCH_FIELD_MAP[row.field]\n }</b> is not an option for this tab. <b>${\n ADVANCED_SEARCH_FIELD_MAP['any']\n }</b> has replaced it.`;\n else {\n warning += '<br />All other unavailable options have also been replaced.';\n return warning;\n }\n }\n }\n return warning;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SsAdvancedQueriesPipe } from './pipes/advanced-queries.pipe';\nimport { libHbllExpandCollapse } from '../animations/animations';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { SimpleSearchComponent } from './simple-search/simple-search.component';\nimport { SearchScope } from './models/search-scope.model';\nimport { AdvancedFieldWarningPipe } from './pipes/advanced-field-warning.pipe';\nimport { FieldByScopePipe } from './pipes/field-by-scope.pipe';\nimport { SearchConfig } from './models/search-config.model';\n\n@Component({\n selector: 'lib-ss-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n SsAdvancedQueriesPipe,\n AdvancedSearchComponent,\n SimpleSearchComponent,\n AdvancedFieldWarningPipe,\n ],\n providers: [FieldByScopePipe],\n animations: [libHbllExpandCollapse],\n templateUrl: './ss-search-bar.component.html',\n styleUrl: './ss-search-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SsSearchBarComponent {\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: string) {\n this._config = JSON.parse(config) as SearchConfig;\n }\n get config(): SearchConfig {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearchClosed = new EventEmitter<SearchConfig>();\n @Output() advancedSearchOpen = new EventEmitter<SearchConfig>();\n @Output() tabChange = new EventEmitter<SearchConfig>();\n @ViewChild('barWrapperRef') private barWrapperRef!: ElementRef;\n protected heightOfContainer = 0;\n\n protected emitClearSimpleSearch = () => {\n this.clearSimpleSearch.emit({\n ...this.config,\n q: '',\n advancedSearchQueryRows: [],\n });\n };\n\n protected emitSimpleSearch = (updatedProps: Partial<SearchConfig>) => {\n this.simpleSearch.emit({\n ...this.config,\n ...updatedProps,\n });\n };\n\n protected emitAdvancedSearchClosed = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchClosed.emit({\n ...this.config,\n showAdvancedSearch: false,\n showAdvancedSearchAsText: false,\n });\n };\n\n protected emitAdvancedSearch = (config: SearchConfig) => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...config,\n showAdvancedSearchAsText: true,\n showAdvancedSearch: true,\n });\n };\n\n protected emitAdvancedSearchOpen = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchOpen.emit({\n ...this.config,\n showAdvancedSearchAsText: false,\n showAdvancedSearch: true,\n });\n };\n\n protected emitTabChange = (newScope: SearchScope) => {\n this.tabChange.emit({ ...this.config, scope: newScope });\n };\n}\n","<div id=\"ssSearchBar\">\n <div class=\"tabs\">\n <button\n (click)=\"emitTabChange('local')\"\n class=\"ss-tab\"\n id=\"localTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'local',\n ensign: config.institution === 'ensign' && config.scope !== 'local',\n }\"\n data-testid=\"localTab\"\n [disabled]=\"config.scope === 'local'\"\n >\n In the Library\n </button>\n @if (config.institution !== 'law') {\n <div class=\"tab-spacer\"></div>\n <button\n (click)=\"emitTabChange('external')\"\n class=\"ss-tab\"\n id=\"externalTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'external',\n ensign: config.institution === 'ensign' && config.scope !== 'external',\n }\"\n data-testid=\"externalTab\"\n [disabled]=\"config.scope === 'external'\"\n >\n Available Online\n </button>\n }\n <div class=\"tab-spacer full\"></div>\n </div>\n <div\n class=\"ss-bar-wrapper\"\n #barWrapperRef\n [@libHbllExpandCollapse]=\"{\n value: config.showAdvancedSearch ? (!config.showAdvancedSearchAsText ? 1 : 2) : 3,\n params: { startHeight: heightOfContainer },\n }\"\n >\n <div class=\"ss-bar-content\" data-testid=\"searchForm\">\n @if (!config.showAdvancedSearch) {\n <div class=\"ss-search-bar\">\n <lib-ss-simple-search\n [config]=\"config\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n ></lib-ss-simple-search>\n </div>\n } @else {\n <button\n id=\"advSearchCloseBtn\"\n (click)=\"emitAdvancedSearchClosed()\"\n data-testid=\"advSearchCloseBtn\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> close </span>\n </button>\n <div id=\"advSearchWrapper\">\n @if (config.showAdvancedSearch && !config.showAdvancedSearchAsText) {\n <div>\n <lib-ss-advanced-search\n [config]=\"config\"\n (advancedSearch)=\"emitAdvancedSearch($event)\"\n ></lib-ss-advanced-search>\n </div>\n } @else {\n <div\n class=\"ss-adv-search-text\"\n data-testid=\"advancedSearchText\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | ssAdvancedQueries: config.scope\n \"\n ></div>\n <div\n [innerHTML]=\"\n config.advancedSearchQueryRows | advancedFieldWarning: config.scope\n \"\n ></div>\n }\n </div>\n }\n </div>\n @if (!config.showAdvancedSearch || config.showAdvancedSearchAsText) {\n <button\n data-testid=\"toggleAdvSearchButton\"\n class=\"ss-adv-search-btn\"\n id=\"advSearchBtn\"\n (click)=\"emitAdvancedSearchOpen()\"\n >\n Advanced\n <span class=\"material-symbols-outlined ss-icon\"> keyboard_arrow_down </span>\n </button>\n }\n </div>\n</div>\n","const searchScopeValues = ['local', 'external'] as const;\nexport type SearchScope = (typeof searchScopeValues)[number];\nexport const isSearchScope = (scope: string): scope is SearchScope =>\n searchScopeValues.includes(scope as SearchScope);\n","/*\n * Public API Surface of components\n */\n\nexport * from './lib/hbll-header/hbll-header.component';\nexport * from './lib/pipes/hbll-item-type-icon.pipe';\nexport * from './lib/hbll-footer/hbll-footer.component';\nexport * from './lib/header-with-impersonation/header-with-impersonation.component';\nexport * from './lib/impersonate-modal/impersonate-modal.component';\nexport * from './lib/impersonation-banner/impersonation-banner.component';\nexport * from './lib/ss-search-bar/ss-search-bar.component';\nexport * from './lib/ss-search-bar/models/advanced-search.model';\nexport * from './lib/ss-search-bar/models/search-scope.model';\nexport * from './lib/ss-search-bar/models/search-config.model';\nexport { getUserStatusFromRoles } from './lib/contact-utils';\nexport {\n ADVANCED_SEARCH_QUALIFIER_MAP,\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n} from './lib/ss-search-bar/constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","switchMap","map","i1.FieldByScopePipe","i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"byuhbll-components.mjs","sources":["../../../projects/components/src/lib/animations/animations.ts","../../../projects/components/src/lib/expand-collapse/expand-collapse.component.ts","../../../projects/components/src/lib/expand-collapse/expand-collapse.component.html","../../../projects/components/src/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.ts","../../../projects/components/src/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.html","../../../projects/components/src/lib/utils.ts","../../../projects/components/src/lib/hbll-header/nav-bar/nav-bar.component.ts","../../../projects/components/src/lib/hbll-header/nav-bar/nav-bar.component.html","../../../projects/components/src/lib/hbll-header/pipes/library-hours.pipe.ts","../../../projects/components/src/lib/hbll-header/hbll-header.component.ts","../../../projects/components/src/lib/hbll-header/hbll-header.component.html","../../../projects/components/src/lib/pipes/hbll-item-type-icon.pipe.ts","../../../projects/components/src/lib/contact-utils.ts","../../../projects/components/src/lib/hbll-footer/hbll-footer.component.ts","../../../projects/components/src/lib/hbll-footer/hbll-footer.component.html","../../../projects/components/src/lib/impersonation-banner/models/application-access.ts","../../../projects/components/src/lib/copy-tooltip/copy-tooltip.component.ts","../../../projects/components/src/lib/copy-tooltip/copy-tooltip.component.html","../../../projects/components/src/lib/impersonation-banner/impersonation-banner.component.ts","../../../projects/components/src/lib/impersonation-banner/impersonation-banner.component.html","../../../projects/components/src/lib/impersonate-modal/impersonate-modal.component.ts","../../../projects/components/src/lib/impersonate-modal/impersonate-modal.component.html","../../../projects/components/src/lib/header-with-impersonation/header-with-impersonation.component.ts","../../../projects/components/src/lib/header-with-impersonation/header-with-impersonation.component.html","../../../projects/components/src/lib/ss-search-bar/constants.ts","../../../projects/components/src/lib/ss-search-bar/models/advanced-search.model.ts","../../../projects/components/src/lib/ss-search-bar/pipes/field-by-scope.pipe.ts","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-queries.pipe.ts","../../../projects/components/src/lib/ss-search-bar/utils.ts","../../../projects/components/src/lib/multi-select/multi-select.component.ts","../../../projects/components/src/lib/multi-select/multi-select.component.html","../../../projects/components/src/lib/checkbox/checkbox.component.ts","../../../projects/components/src/lib/checkbox/checkbox.component.html","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.ts","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.html","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.ts","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.html","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.ts","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.html","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-field-warning.pipe.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.html","../../../projects/components/src/lib/ss-search-bar/models/search-scope.model.ts","../../../projects/components/src/public-api.ts","../../../projects/components/src/byuhbll-components.ts"],"sourcesContent":["import {\n trigger,\n transition,\n animate,\n style,\n group,\n query,\n animateChild,\n} from '@angular/animations';\n\nexport const libHbllExpandCollapse = trigger('libHbllExpandCollapse', [\n transition('void <=> *', []),\n transition(\n '* <=> *',\n [\n group([\n style({ height: '{{startHeight}}px' }),\n query('@*', [animateChild()], { optional: true }),\n animate('.15s ease-in-out'),\n ]),\n ],\n { params: { startHeight: '0px' } },\n ),\n]);\n\nexport const libHbllFadeInOut = trigger('libHbllFadeInOut', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n\nexport const libHbllFadeIn = trigger('libHbllFadeIn', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n]);\n\nexport const libHbllFadeOut = trigger('libHbllFadeOut', [\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n\nexport const libHbllSlideInOutRightLeft = trigger('libHbllSlideInOutRightLeft', [\n transition(\n ':enter',\n [\n style({\n transform: 'translateX({{xOffset}})',\n }),\n animate(\n '200ms ease-in-out',\n style({\n transform: 'translateX(0)',\n }),\n ),\n ],\n { params: { xOffset: '100%' } },\n ),\n transition(\n ':leave',\n [\n style({\n transform: 'translateX(0)',\n }),\n animate(\n '200ms ease-in-out',\n style({\n transform: 'translateX({{xOffset}})',\n }),\n ),\n ],\n { params: { xOffset: '100%' } },\n ),\n]);\n","import { Component, ElementRef, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { libHbllExpandCollapse, libHbllFadeInOut } from '../animations/animations';\n\n@Component({\n selector: 'lib-expand-collapse',\n templateUrl: './expand-collapse.component.html',\n styleUrls: ['./expand-collapse.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [libHbllExpandCollapse, libHbllFadeInOut],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ExpandCollapseComponent {\n @ViewChild('contentRef') private contentRef!: ElementRef;\n\n private _isExpanded = false;\n @Input({ required: true }) set isExpanded(isExpanded: boolean) {\n this.heightOfContent = this.contentRef?.nativeElement.clientHeight;\n this._isExpanded = isExpanded;\n }\n get isExpanded() {\n return this._isExpanded;\n }\n\n protected heightOfContent = 0;\n}\n","<div\n #contentRef\n [@libHbllExpandCollapse]=\"{\n value: isExpanded,\n params: { startHeight: heightOfContent },\n }\"\n class=\"hbll-expand-collapse-content-wrapper\"\n [ngClass]=\"{ 'hbll-expand-collapse-collapsed': !isExpanded }\"\n>\n <div *ngIf=\"isExpanded\" @libHbllFadeInOut data-testid=\"content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, EventEmitter, input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExpandCollapseComponent } from '../../expand-collapse/expand-collapse.component';\n\n@Component({\n selector: 'lib-nav-bar-dropdown',\n standalone: true,\n imports: [ExpandCollapseComponent, CommonModule],\n templateUrl: './nav-bar-dropdown.component.html',\n styleUrl: './nav-bar-dropdown.component.scss',\n})\nexport class NavBarDropdownComponent {\n title = input.required<string>();\n isSmallScreen = input(true);\n @Output() openEvent = new EventEmitter<string>();\n\n // Public to be called by parent comp.\n closeDropdown = () => (this.isOpen = false);\n\n protected isOpen = false;\n protected handleClick = () => {\n if (!this.isOpen) this.openEvent.emit(this.title());\n this.isOpen = !this.isOpen;\n };\n}\n","<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\n\n/**\n * Signal that represents if the screen is small.\n */\nexport const isScreenSmallSignal = (bo: BreakpointObserver) =>\n toSignal(bo.observe(['(min-width: 1000px)']).pipe(map((r) => !r.matches)));\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, Signal, ViewChildren } from '@angular/core';\nimport { NavBarDropdownComponent } from '../nav-bar-dropdown/nav-bar-dropdown.component';\nimport { isScreenSmallSignal } from '../../utils';\nimport { BreakpointObserver } from '@angular/cdk/layout';\n\ntype NavInfo = {\n title: string;\n mainSection?: Section;\n otherSections: Section[];\n};\n\ntype Section = {\n title: string;\n links: Link[];\n auxiliaryLink?: Link;\n};\n\ntype Link = {\n label: string;\n url: string;\n icon?: string;\n};\n\n@Component({\n selector: 'lib-nav-bar',\n standalone: true,\n imports: [CommonModule, NavBarDropdownComponent],\n templateUrl: './nav-bar.component.html',\n styleUrl: './nav-bar.component.scss',\n})\nexport class NavBarComponent {\n private bo = inject(BreakpointObserver);\n mainSiteBaseUrl = input.required<string>();\n height = input<number | null>(null);\n\n @ViewChildren(NavBarDropdownComponent) dropdownComps!: NavBarDropdownComponent[];\n\n // If any section opens up, close all others. Only one section open at a time.\n protected handleDropdownOpenEvent = (title: string) => {\n this.dropdownComps\n .filter((comp) => comp.title() !== title)\n .forEach((comp) => {\n comp.closeDropdown();\n });\n };\n\n protected isScreenSmall = isScreenSmallSignal(this.bo);\n\n protected navInfos: Signal<NavInfo[]> = computed(() => {\n return [\n {\n title: 'Materials',\n mainSection: {\n title: 'Formats',\n links: [\n { label: 'Articles', url: `${this.mainSiteBaseUrl()}/articles` },\n { label: 'Audio', url: `${this.mainSiteBaseUrl()}/audio` },\n { label: 'Books', url: `${this.mainSiteBaseUrl()}/books` },\n { label: 'Video', url: `${this.mainSiteBaseUrl()}/video` },\n ],\n auxiliaryLink: {\n label: 'See all formats',\n url: `${this.mainSiteBaseUrl()}/formats`,\n },\n },\n otherSections: [\n {\n title: 'Resource Collections',\n links: [\n {\n label: 'Subject Area Collections',\n url: `${this.mainSiteBaseUrl()}/collections`,\n },\n { label: 'Databases', url: `${this.mainSiteBaseUrl()}/databases` },\n { label: 'Journals', url: `${this.mainSiteBaseUrl()}/journals` },\n {\n label: 'Theses & Dissertations',\n url: `${this.mainSiteBaseUrl()}/theses-and-dissertations`,\n },\n ],\n },\n {\n title: 'Equipment',\n links: [\n {\n label: 'Available for Checkout',\n url: `${this.mainSiteBaseUrl()}/services?categories=available-for-checkout`,\n },\n {\n label: 'Available with Reservation',\n url: `${this.mainSiteBaseUrl()}/services?categories=available-via-reservation`,\n },\n {\n label: 'Public Computers',\n url: `${this.mainSiteBaseUrl()}/services/public-computers`,\n },\n {\n label: 'Printers and Copying',\n url: `${this.mainSiteBaseUrl()}/services?categories=printing-and-copying`,\n },\n ],\n },\n ],\n },\n {\n title: 'Places',\n mainSection: {\n title: 'Popular Places',\n links: [\n {\n label: 'Help Desks',\n url: `${this.mainSiteBaseUrl()}/services/help-desks`,\n },\n {\n label: 'Family History',\n url: `${this.mainSiteBaseUrl()}/religion-family-history`,\n },\n {\n label: 'Research and Writing Center',\n url: `${this.mainSiteBaseUrl()}/services/research-and-writing-center`,\n },\n {\n label: 'Special Collections',\n url: `${this.mainSiteBaseUrl()}/special-collections`,\n },\n ],\n auxiliaryLink: {\n label: 'View Floor Maps',\n url: `${this.mainSiteBaseUrl()}/floormaps`,\n },\n },\n otherSections: [\n {\n title: 'Spaces',\n links: [\n {\n label: 'Collections & Archives',\n url: `${this.mainSiteBaseUrl()}/services?categories=collections-and-archives`,\n },\n {\n label: 'Group Study Spaces',\n url: `${this.mainSiteBaseUrl()}/services/group-study-rooms`,\n },\n {\n label: 'Individual Study Spaces',\n url: `${this.mainSiteBaseUrl()}/services?categories=individual-study-spaces`,\n },\n {\n label: 'Multimedia Creation Spaces',\n url: `${this.mainSiteBaseUrl()}/services?categories=multimedia-creation`,\n },\n {\n label: 'Video View Spaces',\n url: `${this.mainSiteBaseUrl()}/services?categories=video-viewing`,\n },\n ],\n },\n {\n title: 'Rooms',\n links: [\n {\n label: 'Classrooms',\n url: `${this.mainSiteBaseUrl()}/services?categories=classrooms`,\n },\n {\n label: 'Conference Rooms',\n url: `${this.mainSiteBaseUrl()}/services?categories=conference-rooms`,\n },\n {\n label: 'Labs & Centers',\n url: `${this.mainSiteBaseUrl()}/services?categories=labs-and-centers`,\n },\n {\n label: 'Research Rooms',\n url: `${this.mainSiteBaseUrl()}/services?categories=research-rooms`,\n },\n ],\n },\n ],\n },\n {\n title: 'Experiences',\n mainSection: {\n title: 'Events',\n links: [\n {\n label: 'Concerts & Film Showings',\n url: `${this.mainSiteBaseUrl()}/services/motion-picture-archive-series`,\n },\n {\n label: 'Lectures',\n url: `${this.mainSiteBaseUrl()}/services?categories=lectures`,\n },\n { label: 'News', url: `${this.mainSiteBaseUrl()}/about/news` },\n ],\n auxiliaryLink: {\n label: 'See calendar of events',\n url: `${this.mainSiteBaseUrl()}/events`,\n },\n },\n otherSections: [\n {\n title: 'Learning Opportunities',\n links: [\n {\n label: 'Library Instruction Classes',\n url: `${this.mainSiteBaseUrl()}/library-instruction`,\n },\n {\n label: 'Software Training',\n url: `${this.mainSiteBaseUrl()}/services/software-training`,\n },\n {\n label: 'Family History Classes & Webinars',\n url: `${this.mainSiteBaseUrl()}/services/family-history-classes`,\n },\n ],\n },\n {\n title: 'Displays',\n links: [\n { label: 'Exhibits', url: `${this.mainSiteBaseUrl()}/exhibits` },\n {\n label: 'Galleries',\n url: `${this.mainSiteBaseUrl()}/services?categories=galleries-and-exhibits`,\n },\n ],\n },\n ],\n },\n {\n title: 'Services',\n mainSection: {\n title: 'Services For',\n links: [\n {\n label: 'Current Students',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-students`,\n },\n {\n label: 'Faculty and Staff',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-faculty`,\n },\n {\n label: 'Retirees',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-retirees`,\n },\n {\n label: 'Visitors and Alumni',\n url: `${this.mainSiteBaseUrl()}/services?categories=for-visitors`,\n },\n ],\n auxiliaryLink: {\n label: 'See all Services',\n url: `${this.mainSiteBaseUrl()}/services`,\n },\n },\n otherSections: [\n {\n title: 'Getting Materials',\n links: [\n {\n label: 'Checkout out Materials',\n url: `${this.mainSiteBaseUrl()}/about/checkout-privileges`,\n },\n {\n label: 'Holds & Renewals',\n url: `${this.mainSiteBaseUrl()}/services/holds`,\n },\n {\n label: 'Borrow from another Library (ILL)',\n url: `${this.mainSiteBaseUrl()}/services/interlibrary-loan`,\n },\n ],\n },\n {\n title: 'Other',\n links: [\n {\n label: 'Internships, Fellowships and Grants',\n url: `${this.mainSiteBaseUrl()}/services?categories=internships-fellowships-grants`,\n },\n {\n label: 'Programs',\n url: `${this.mainSiteBaseUrl()}/services?categories=programs`,\n },\n {\n label: 'Scholarly Publishing',\n url: `${this.mainSiteBaseUrl()}/services?categories=creating-and-publishing-materials`,\n },\n ],\n },\n ],\n },\n {\n title: 'Ask Us',\n\n otherSections: [\n {\n title: 'Get Help',\n links: [\n {\n label: 'Ask a Librarian',\n url: `${this.mainSiteBaseUrl()}/chat?url=${window.location.href}`,\n icon: 'chat_bubble',\n },\n {\n label: 'Library Instruction',\n url: `${this.mainSiteBaseUrl()}/library-instruction`,\n },\n { label: 'Research Guides', url: `${this.mainSiteBaseUrl()}/guides` },\n {\n label: 'Help & Guidance',\n url: `${this.mainSiteBaseUrl()}/services?categories=help-and-guidance`,\n },\n ],\n },\n {\n title: 'Find a...',\n links: [\n { label: 'Department', url: `${this.mainSiteBaseUrl()}/directory` },\n {\n label: 'Help Desk',\n url: `${this.mainSiteBaseUrl()}/services/help-desks`,\n },\n {\n label: 'Library Employee by Name',\n url: `${this.mainSiteBaseUrl()}/directory`,\n },\n {\n label: 'Subject Librarian',\n url: `${this.mainSiteBaseUrl()}/directory#browse-by-subject`,\n },\n ],\n },\n {\n title: 'About the Library',\n links: [\n {\n label: 'General Information',\n url: `${this.mainSiteBaseUrl()}/about`,\n },\n { label: 'FAQs', url: `${this.mainSiteBaseUrl()}/faq` },\n ],\n },\n ],\n },\n ];\n });\n}\n","<nav\n [style]=\"{ height: height() ? height() + 'px' : 'auto' }\"\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n data-testid=\"nav\"\n>\n <ul class=\"hbll-header-nav-bar\">\n <li id=\"navHome\">\n <a [href]=\"mainSiteBaseUrl()\">\n @if (isScreenSmall()) {\n <span class=\"material-symbols-outlined hbll-header-icon\"> home </span>\n }\n Home\n </a>\n </li>\n @for (navInfo of navInfos(); track navInfo.title) {\n <li>\n <lib-nav-bar-dropdown\n [title]=\"navInfo.title\"\n [isSmallScreen]=\"isScreenSmall() ?? true\"\n (openEvent)=\"handleDropdownOpenEvent($event)\"\n >\n <div\n class=\"hbll-header-content\"\n [ngStyle]=\"{\n 'background-color': isScreenSmall() ? '#336cc8' : 'inherit',\n }\"\n >\n @if (navInfo.mainSection) {\n <section>\n <h2>{{ navInfo.mainSection.title }}</h2>\n <ul class=\"hbll-header-main hbll-header-links\">\n @for (link of navInfo.mainSection.links; track link.label) {\n <li>\n <a [href]=\"link.url\">\n {{ link.label }}\n </a>\n </li>\n }\n </ul>\n @if (navInfo.mainSection.auxiliaryLink) {\n <a\n class=\"hbll-header-see-all\"\n [href]=\"navInfo.mainSection.auxiliaryLink.url\"\n >\n {{ navInfo.mainSection.auxiliaryLink.label }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n chevron_right\n </span>\n </a>\n }\n </section>\n }\n @for (section of navInfo.otherSections; track section.title) {\n <section>\n <h3>{{ section.title }}</h3>\n <ul class=\"hbll-header-links\">\n @for (link of section.links; track link.label) {\n <li>\n <a [href]=\"link.url\">\n {{ link.label }}\n @if (link.icon) {\n <span\n class=\"material-symbols-outlined hbll-header-icon-right\"\n >\n {{ link.icon }}\n </span>\n }\n </a>\n </li>\n }\n </ul>\n </section>\n }\n </div>\n </lib-nav-bar-dropdown>\n </li>\n }\n <li>\n <a id=\"navSearch\" [href]=\"mainSiteBaseUrl() + '/search'\">\n @if (isScreenSmall()) {\n Search\n }\n <span\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'hbll-header-icon': isScreenSmall() }\"\n >\n search\n </span>\n </a>\n </li>\n </ul>\n</nav>\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'libraryHours',\n standalone: true,\n})\nexport class LibraryHoursPipe implements PipeTransform {\n transform(date: string, time: string): string | null {\n let newTime = null;\n try {\n newTime = new DatePipe('en-US').transform(new Date(date + 'T' + time), 'ha');\n } catch (e) {\n return newTime;\n }\n if (newTime === '12AM') newTime = 'Midnight';\n else if (newTime) {\n newTime = newTime.replace('AM', ' a.m.');\n newTime = newTime.replace('PM', ' p.m.');\n }\n return newTime;\n }\n}\n","import { CommonModule, DatePipe, DOCUMENT, LowerCasePipe } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n Renderer2,\n ViewChild,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { NavBarComponent } from './nav-bar/nav-bar.component';\nimport { libHbllFadeInOut, libHbllSlideInOutRightLeft } from '../animations/animations';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { isScreenSmallSignal } from '../utils';\nimport { LibraryHoursPipe } from './pipes/library-hours.pipe';\nimport { map, of, shareReplay, switchMap } from 'rxjs';\nimport { ExpandCollapseComponent } from '../expand-collapse/expand-collapse.component';\nimport { LibraryHours } from './models/library-hours';\n\nexport const LIBRARY_HOURS_API_URL = 'https://apps.lib.byu.edu/libraryhours/api/hours';\n\n@Component({\n selector: 'lib-hbll-header',\n standalone: true,\n imports: [\n DatePipe,\n LowerCasePipe,\n LibraryHoursPipe,\n CommonModule,\n NavBarComponent,\n ExpandCollapseComponent,\n ],\n templateUrl: './hbll-header.component.html',\n styleUrl: './hbll-header.component.scss',\n animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut],\n})\nexport class HbllHeaderComponent implements AfterViewInit {\n private readonly r2 = inject(Renderer2);\n // TODO: does this increase bundle size more than it's worth? vs fetch?\n private readonly http = inject(HttpClient);\n private readonly bo = inject(BreakpointObserver);\n private doc = inject(DOCUMENT);\n\n @ViewChild('header') header!: ElementRef;\n\n // --- API ---\n // TODO: Convert these to signal inputs: https://github.com/angular/angular/issues/57755\n @Input() name = '';\n @Input() mainsitebaseurl = 'https://lib.byu.edu';\n // TODO: this is a singal input currently because it won't be used by any other applications than Angular ones.\n showImpersonateButton = input(false);\n @Output() openImpersonationModal = new EventEmitter<void>();\n @Output() login = new EventEmitter<void>();\n @Output() logout = new EventEmitter<void>();\n // -----------\n private formatDateForHours = (date: Date) =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n private accountInfoEl = viewChild<ElementRef>('accountInfo');\n private hoursEl = viewChild<ElementRef>('hours');\n\n protected get isLoggedIn() {\n return !!this.name;\n }\n\n // Hours\n protected libraryHours = toSignal(this.http.get<LibraryHours>(LIBRARY_HOURS_API_URL));\n protected hoursExceptions$ = of(null).pipe(\n map(() => {\n // Get exceptions from today to two months out\n const today = new Date();\n const start = this.formatDateForHours(today);\n const newDate = new Date();\n newDate.setMonth(today.getMonth() + 2);\n const stop = this.formatDateForHours(newDate);\n return [start, stop];\n }),\n switchMap(([start, stop]: string[]) =>\n this.http\n .get<LibraryHours[]>(`${LIBRARY_HOURS_API_URL}?start=${start}&stop=${stop}`)\n .pipe(map((res) => res.filter((day) => day.has_exception).slice(0, 5))),\n ),\n shareReplay(1),\n );\n\n protected showAccountDropdown = false;\n protected showLibraryHours = false;\n protected mobileSidebarHeight = 0;\n protected showNavBar = false;\n protected isScreenSmall = isScreenSmallSignal(this.bo);\n\n ngAfterViewInit(): void {\n this.r2.listen('window', 'click', (e: Event) => {\n if (!this.accountInfoEl()?.nativeElement.contains(e.target))\n this.showAccountDropdown = false;\n if (!this.hoursEl()?.nativeElement.contains(e.target)) this.showLibraryHours = false;\n });\n this.setMobileSidebarHeight();\n }\n\n protected openSidebarNav = () => {\n this.showNavBar = true;\n window.scrollTo(0, 0);\n this.r2.setStyle(this.doc.body, 'overflow', 'hidden');\n };\n\n protected closeSidebarNav = () => {\n this.showNavBar = false;\n this.r2.removeStyle(this.doc.body, 'overflow');\n };\n\n @HostListener('window:resize', ['$event'])\n private onResize() {\n this.setMobileSidebarHeight();\n }\n\n private setMobileSidebarHeight = () =>\n (this.mobileSidebarHeight =\n window.innerHeight - this.header.nativeElement.getBoundingClientRect().height);\n}\n","<header\n role=\"banner\"\n class=\"hbll-header-wrapper\"\n #header\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n>\n <a [href]=\"mainsitebaseurl\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <div id=\"libraryInfo\" class=\"hbll-header-wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"hbll-header-wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Regular Hours</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Monday - Friday</h3>\n <h3 class=\"hbll-header-item\">Saturday</h3>\n <h3 class=\"hbll-header-item\">Sunday</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - midnight</div>\n <div class=\"hbll-header-item\">8 a.m - midnight</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"hbll-header-detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"hbll-header-item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hbll-header-hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"hbll-header-item\">\n {{ exception.exception_title }}\n </div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Library Cafe</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Bagel Bubble</h3>\n <h3 class=\"hbll-header-item\">Provecho</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - 11 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a [href]=\"mainsitebaseurl + '/about/hours'\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"hbll-header-wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"hbll-header-name\" data-testid=\"name\">{{\n isLoggedIn ? ' ' + name : 'Login'\n }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a [href]=\"mainsitebaseurl + '/account'\">My Account</a>\n <a [href]=\"mainsitebaseurl + '/account'\">My Items</a>\n <a [href]=\"mainsitebaseurl + '/account/request'\">Request an item</a>\n <a [href]=\"mainsitebaseurl + '/account/saved'\">Saved</a>\n <a [href]=\"mainsitebaseurl + '/account/course'\">Courses</a>\n <a [href]=\"mainsitebaseurl + '/account/rooms'\">Rooms</a>\n <a [href]=\"mainsitebaseurl + '/account/preferences'\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n (click)=\"openImpersonationModal.emit(); showAccountDropdown = false\"\n class=\"hbll-header-impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileNavBtn\"\n (click)=\"openSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [@libHbllSlideInOutRightLeft]=\"{\n value: '',\n params: { xOffset: '400px' },\n }\"\n >\n <button\n id=\"closeMobileNavBtn\"\n class=\"hbll-header-wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"closeSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> close </span>\n </button>\n <lib-nav-bar\n [mainSiteBaseUrl]=\"mainsitebaseurl\"\n [height]=\"mobileSidebarHeight\"\n />\n </div>\n <div\n @libHbllFadeInOut\n (click)=\"showNavBar = false\"\n class=\"hbll-nav-backdrop\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar [mainSiteBaseUrl]=\"mainsitebaseurl\" />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n [href]=\"mainsitebaseurl + '/about/hours'\"\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n","import { Pipe, type PipeTransform } from '@angular/core';\n\nconst typeToIconMap = {\n archive: 'inventory_2',\n article: 'article',\n audio: 'mic',\n audiobook: 'mic',\n 'blu-ray': 'album',\n book: 'book_4',\n 'book-chapter': 'book_6',\n 'book-review': 'reviews',\n broadside: 'image',\n calculator: 'calculate',\n cassette: 'album',\n cd: 'album',\n 'cd-rom': 'album',\n clothing: 'album',\n 'clothing-pattern': 'album',\n collection: 'library_books',\n conference: 'podium',\n 'conference-proceeding': 'podium',\n cuneiform: 'aod_tablet',\n curricula: 'aod_tablet',\n database: 'database',\n dataset: 'dataset',\n diary: 'book_2',\n dissertation: 'school',\n dvd: 'album',\n ebook: 'two_pager',\n ebookreader: 'chrome_reader_mode',\n ejournal: 'two_pager',\n 'electronic-resource': 'description',\n equipment: 'service_toolbox',\n filmstrip: 'theaters',\n 'finding-aid': 'travel_explore',\n 'government-document': 'travel_explore',\n 'government-novel': 'book_4',\n guide: 'travel_explore',\n image: 'image',\n index: 'list',\n journal: 'book_2',\n 'juv-book': 'book_4',\n kit: 'home_repair_service',\n laserdisc: 'album',\n 'legal-document': 'gavel',\n letter: 'mail',\n magazine: 'newsmode',\n manuscript: 'article',\n 'manuscript-archive': 'inventory_2',\n map: 'map',\n media: 'play_circle',\n microfiche: 'theaters',\n microfilm: 'theaters',\n microform: 'theaters',\n model: 'modeling',\n movie: 'movie',\n multimedia: 'play_circle',\n 'music-recording': 'album',\n 'musical-recording': 'play_circle',\n newsletter: 'article',\n newspaper: 'newspaper',\n 'newspaper-article': 'newspaper',\n ostracon: 'description',\n other: 'description',\n painting: 'palette',\n palmleaf: 'eco',\n pamphlet: 'article',\n papyrus: 'article',\n performance: 'music_note',\n periodical: 'article',\n photograph: 'image',\n picture: 'image',\n poem: 'article',\n poster: 'image',\n presentation: 'slideshow',\n 'primary-source': 'inventory_2',\n 'primary-source-document': 'article',\n record: 'album',\n 'reel-to-reel': 'video_camera_back',\n 'reference-entry': 'article',\n report: 'summarize',\n 'research-data-set': 'dataset',\n review: 'summarize',\n score: 'music_note',\n script: 'article',\n serial: 'article',\n slide: 'slideshow',\n software: 'terminal',\n 'sound-recording': 'mic',\n standards: 'article',\n 'statistical-data-set': 'dataset',\n 'streaming-audio': 'play_circle',\n 'streaming-media': 'play_circle',\n 'streaming-video': 'play_circle',\n 'student-project': 'article',\n 'technical-report': 'summarize',\n 'text-resource': 'summarize',\n unknown: 'article',\n vhs: 'theaters',\n video: 'movie',\n website: 'globe',\n} as const;\n\n/**\n * Converts an item type to an icon type to be used with Google Material Icons\n *\n * Intended to be used with an imported font, such as: `<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,1,0\"\n />`\n *\n * Reference: https://fonts.google.com/icons?selected=Material+Symbols+Outlined:inventory_2:FILL@0;wght@400;GRAD@0;opsz@24&icon.query=invent&icon.size=24&icon.color=%235f6368\n */\n@Pipe({\n name: 'libByuItemTypeIcon',\n standalone: true,\n})\nexport class HbllItemTypeIconPipe implements PipeTransform {\n transform(itemType: string): string {\n const type = itemType.replace(/_/g, '-').toLowerCase();\n return typeToIconMap[type as keyof typeof typeToIconMap] ?? 'article';\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { FormBuilder, Validators } from '@angular/forms';\n\nconst EMAIL_PATH = 'email';\nconst FEEDBACK_PATH = 'feedback';\n\nexport const USER_STATUSES = [\n '',\n 'Undergraduate',\n 'Graduate',\n 'Faculty',\n 'Staff',\n 'Library Employee',\n 'Other',\n] as const;\n\nexport type UserStatus = (typeof USER_STATUSES)[number];\n\nexport interface ContactPayload {\n email?: string;\n message: string;\n name?: string;\n status?: UserStatus;\n}\n\nexport const createContactForm = (fb: FormBuilder) =>\n fb.nonNullable.group({\n name: [''],\n email: [''],\n message: ['', Validators.required],\n status: ['' as ContactPayload['status']],\n });\n\nexport const submitEmail = (payload: ContactPayload, http: HttpClient, apiBaseUrl: string) =>\n submitContactForm(payload, http, EMAIL_PATH, apiBaseUrl);\n\nexport const submitFeedback = (payload: ContactPayload, http: HttpClient, apiBaseUrl: string) =>\n submitContactForm({ ...payload, origin: location.href }, http, FEEDBACK_PATH, apiBaseUrl);\n\nconst submitContactForm = (\n payload: ContactPayload & { origin?: string },\n http: HttpClient,\n path: typeof EMAIL_PATH | typeof FEEDBACK_PATH,\n apiBaseUrl: string,\n) => http.post<unknown>(`${apiBaseUrl}/${path}`, payload);\n\nexport const getUserStatusFromRoles = (roles: string[]): UserStatus => {\n let userStatus: UserStatus = '';\n if (roles.includes('undergraduateStudent')) {\n userStatus = 'Undergraduate';\n }\n if (roles.includes('graduateStudent')) {\n userStatus = 'Graduate';\n }\n if (roles.includes('staffEmployee')) {\n userStatus = 'Staff';\n }\n if (roles.includes('facultyEmployee')) {\n userStatus = 'Faculty';\n }\n if (roles.includes('libraryEmployee')) {\n userStatus = 'Library Employee';\n }\n return userStatus;\n};\n","import { Component, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClient } from '@angular/common/http';\nimport { ContactPayload, createContactForm, submitEmail, USER_STATUSES } from '../contact-utils';\n\n@Component({\n selector: 'lib-hbll-footer',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './hbll-footer.component.html',\n styleUrl: './hbll-footer.component.scss',\n})\nexport class HbllFooterComponent {\n private readonly fb = inject(FormBuilder);\n private readonly http = inject(HttpClient);\n // TODO: Convert these to signal inputs: https://github.com/angular/angular/issues/57755\n @Input() mainsitebaseurl = 'https://lib.byu.edu';\n @Input() libraryapibaseuri = 'https://apps.lib.byu.edu/v1';\n @Input() set emailname(name: string) {\n this.emailForm.controls.name.setValue(name);\n }\n @Input() set emailemail(email: string) {\n this.emailForm.controls.email.setValue(email);\n }\n @Input() set emailmessage(message: string) {\n this.emailForm.controls.message.setValue(message);\n }\n @Input() set emailstatus(status: ContactPayload['status']) {\n this.emailForm.controls.status.setValue(status);\n }\n protected date = new Date();\n protected isSubmitted = false;\n protected isLoading = false;\n protected hasConnectionError = false;\n protected isEmailSent = false;\n protected emailForm = createContactForm(this.fb);\n protected userStatuses = USER_STATUSES;\n\n protected sendEmail = () => {\n this.isSubmitted = true;\n if (this.emailForm.invalid) return;\n this.isLoading = true;\n submitEmail(\n this.emailForm.value as ContactPayload,\n this.http,\n this.libraryapibaseuri,\n ).subscribe({\n error: () => {\n this.hasConnectionError = true;\n this.isLoading = false;\n },\n complete: () => {\n this.hasConnectionError = false;\n this.isLoading = false;\n this.isEmailSent = true;\n this.emailForm.reset();\n },\n });\n };\n\n protected handleClose = () => {\n if (this.isEmailSent) {\n this.isEmailSent = false;\n this.hasConnectionError = false;\n this.isLoading = false;\n }\n this.isSubmitted = false;\n };\n}\n","<footer>\n <div class=\"hbll-footer-wrapper\">\n <div class=\"hbll-footer-links\">\n <section>\n <h3>Contact</h3>\n <ul>\n <li>\n <address>\n P.O. Box 26800<br />\n Provo, UT 84602-6800\n </address>\n </li>\n <li>\n <span class=\"material-symbols-outlined hbll-footer-icon\">\n phone_in_talk </span\n > \n <a href=\"tel:801-422-6061\"><strong>Call</strong> (801) 422-6061</a>\n </li>\n <li>\n <span class=\"material-symbols-outlined hbll-footer-icon\"> sms </span> \n <a href=\"sms:801-623-6838\"><strong>Text</strong> (801) 623-6838</a>\n </li>\n <li>\n <span class=\"material-symbols-outlined hbll-footer-icon\"> mail </span\n > <button (click)=\"emailDialog.showModal()\" data-testid=\"emailUsBtn\">\n <strong>Email us</strong>\n </button>\n </li>\n </ul>\n </section>\n <section>\n <h3>Resources</h3>\n <ul>\n <li>\n <a target=\"_blank\" href=\"{{ mainsitebaseurl }}/site-index/\"\n >A-Z Site Index</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"{{ mainsitebaseurl }}/about/policies/\">Policies</a>\n </li>\n <li>\n <a target=\"_blank\" href=\"{{ mainsitebaseurl }}/about/location/\"\n >Parking & Directions</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://uac.byu.edu/accessibility-lab\"\n >Accessibility Resources</a\n >\n </li>\n </ul>\n </section>\n <section>\n <h3>Friends in the Library</h3>\n <ul>\n <li>\n <a target=\"_blank\" href=\"https://ctl.byu.edu\"\n >Center for Teaching and Learning</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://copyright.byu.edu\"\n >Copyright Licensing Office</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://facultycenter.byu.edu/aboutus\"\n >Faculty Center</a\n >\n </li>\n <li>\n <a target=\"_blank\" href=\"https://dining.byu.edu/library-cafe\"\n >Library Cafe</a\n >\n </li>\n </ul>\n </section>\n <section>\n <h3>Connect</h3>\n <ul class=\"hbll-footer-social-list\">\n <li>\n <a target=\"_blank\" href=\"https://www.facebook.com/byuhbll\">\n <img\n class=\"hbll-footer-social\"\n src=\"https://media.lib.byu.edu/web-assets/images/1.0.0/facebook-color-round.svg\"\n alt=\"Facebook\"\n title=\"Facebook\"\n />\n </a>\n </li>\n <li>\n <a target=\"_blank\" href=\"https://www.instagram.com/byu_hbll/\">\n <img\n class=\"hbll-footer-social\"\n src=\"https://media.lib.byu.edu/web-assets/images/1.0.0/instagram-color.svg\"\n alt=\"Instagram\"\n title=\"Instagram\"\n />\n </a>\n </li>\n </ul>\n </section>\n </div>\n <section class=\"hbll-footer-bottom\">\n <div class=\"hbll-footer-title\">\n <a href=\"https://byu.edu\" target=\"_blank\">BRIGHAM YOUNG UNIVERSITY</a>\n </div>\n <br />\n PROVO, UT 84602, USA | <a href=\"sms:801-422-6061\">(801) 422-6061</a>\n <br />© {{ date | date: 'yyyy' }}\n ALL RIGHTS RESERVED\n <div class=\"hbll-footer-privacy\">\n <a href=\"https://privacy.byu.edu/\" target=\"_blank\">Privacy Notice</a>\n |\n <a href=\"https://infosec.byu.edu/cookie-prefs\" target=\"_blank\"\n >Cookie Preferences</a\n >\n </div>\n </section>\n </div>\n</footer>\n\n<dialog\n #emailDialog\n onmousedown=\"event.target === this && this.close()\"\n (close)=\"handleClose()\"\n data-testid=\"dialog\"\n>\n @if (!isEmailSent) {\n <form [formGroup]=\"emailForm\" (submit)=\"sendEmail()\" data-testid=\"form\">\n <div class=\"hbll-footer-email-top\">\n <h1>Email Us</h1>\n <button (click)=\"emailDialog.close()\" type=\"button\" data-testid=\"closeBtn\">\n <span class=\"material-symbols-outlined\"> close </span>\n </button>\n </div>\n <label for=\"hbllFooterEmailName\">Name</label>\n <input\n id=\"hbllFooterEmailName\"\n type=\"text\"\n formControlName=\"name\"\n data-testid=\"emailNameInput\"\n />\n <label for=\"hbllFooterEmailEmail\">\n Email (please provide if you would like a response)</label\n >\n <input\n id=\"hbllFooterEmailEmail\"\n type=\"text\"\n formControlName=\"email\"\n data-testid=\"emailEmailInput\"\n />\n <label for=\"hbllFooterEmailEmail\">\n Question or comment <span class=\"hbll-footer-email-required\">*</span>\n </label>\n <textarea\n id=\"hbllFooterEmailEmail\"\n type=\"text\"\n formControlName=\"message\"\n data-testid=\"emailMessageInput\"\n ></textarea>\n @if (isSubmitted && emailForm.controls.message.invalid) {\n <div\n class=\"hbll-footer-email-required hbll-footer-email-error\"\n data-testid=\"commentError\"\n >\n <span class=\"material-symbols-outlined hbll-footer-email-error-icon\">\n warning\n </span>\n <strong>Please fill out this field</strong>\n </div>\n }\n <label for=\"hbllFooterEmailStatus\">Role</label>\n <span class=\"hbll-footer-select-wrapper\">\n <select\n id=\"hbllFooterEmailStatus\"\n formControlName=\"status\"\n data-testid=\"emailStatusInput\"\n >\n <option selected value=\"\"></option>\n @for (status of userStatuses | slice: 1; track status) {\n <option [value]=\"status\">{{ status }}</option>\n }\n </select>\n </span>\n <div class=\"hbll-footer-email-bottom-bar\">\n @if (hasConnectionError) {\n <p class=\"hbll-footer-connection-error\" data-testid=\"connectionError\">\n <i>There was an error sending your email. Please try again later.</i>\n </p>\n }\n <button\n class=\"pill-btn--components\"\n type=\"submit\"\n [disabled]=\"isLoading\"\n data-testid=\"sendEmailBtn\"\n >\n Send\n </button>\n </div>\n </form>\n } @else {\n <div class=\"hbll-footer-email-success\" data-testid=\"successMessage\">\n <p>\n Your email was sent successfully. If you supplied your email address, we will get\n back to you shortly.<br />Thank you!\n </p>\n <button class=\"pill-btn--components\" (click)=\"emailDialog.close()\" type=\"button\">\n Close\n </button>\n </div>\n }\n</dialog>\n","export enum AccessStatus {\n OK = 'ok',\n BLOCKED = 'blocked',\n NONE = 'none',\n}\n\nexport interface ApplicationAccess {\n label: string;\n access: AccessStatus;\n code?: string;\n detail?: string;\n}\n\nexport interface AccountsResponse {\n netId: string;\n applications: Record<string, ApplicationAccess>;\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltip, MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\n\n@Component({\n selector: 'lib-copy-tooltip',\n standalone: true,\n imports: [CommonModule, MatTooltipModule],\n templateUrl: './copy-tooltip.component.html',\n styleUrls: ['./copy-tooltip.component.scss'],\n})\nexport class CopyTooltipComponent {\n @Input() position: TooltipPosition = 'below';\n @Input() copyText?: string;\n @ViewChild(MatTooltip) tooltip!: MatTooltip;\n\n public clipboardCopyMessage = 'Copy';\n\n public copyToClipboard = async (text?: string) => {\n // Ensure the tooltip doesn't disappear when button is clicked\n this.tooltip.show();\n if (text) {\n try {\n await navigator.clipboard.writeText(text).then(() => {\n this.clipboardCopyMessage = 'Copied!';\n });\n } catch {\n this.clipboardCopyMessage = 'Failed to copy';\n }\n } else this.clipboardCopyMessage = 'Nothing to copy!';\n };\n\n public handleMouseLeave = () => {\n // Manually hide in case the user hovers over the tooltip\n this.tooltip.hide();\n // Delay to account for tooltip animation\n setTimeout(() => {\n this.clipboardCopyMessage = 'Copy';\n }, 100);\n };\n}\n","<div\n (click)=\"copyToClipboard(copyText)\"\n [matTooltip]=\"clipboardCopyMessage\"\n [matTooltipPosition]=\"position\"\n (mouseleave)=\"handleMouseLeave()\"\n data-testid=\"tooltip\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component, computed, EventEmitter, inject, input, Output, Signal } from '@angular/core';\nimport { map, switchMap } from 'rxjs/operators';\nimport {\n AccessStatus,\n AccountsResponse,\n type ApplicationAccess,\n} from './models/application-access';\nimport { CommonModule } from '@angular/common';\nimport { TokenPayload } from '../models/token-payload';\nimport { jwtDecode, JwtPayload } from 'jwt-decode';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { HttpClient } from '@angular/common/http';\nimport { IndependentStudyResponse, PersonSummary } from './models/person-summary';\nimport urlcat from 'urlcat';\nimport { combineLatest, of } from 'rxjs';\nimport { CopyTooltipComponent } from '../copy-tooltip/copy-tooltip.component';\n\nconst USER_PHOTO_URL = 'https://y.byu.edu/ry/ae/prod/person/cgi/personPhoto.cgi?n=';\nconst PERSON_SUMMARY_PATH = '/summary/:libraryId/';\nconst INDEPENDENT_STUDY_RESPONSE_PATH = '/independent-study/:libraryId/';\nconst PATRON_ACCOUNTS_PATH = '/patron/accounts';\n\n@Component({\n standalone: true,\n imports: [CommonModule, CopyTooltipComponent],\n selector: 'lib-impersonation-banner',\n templateUrl: './impersonation-banner.component.html',\n styleUrls: ['./impersonation-banner.component.scss'],\n})\nexport class ImpersonationBannerComponent {\n private http = inject(HttpClient);\n accessTokenPayload = input.required<TokenPayload>();\n personBaseUri = input('https://apps.lib.byu.edu/person/v2/');\n libraryApiBaseUri = input('https://apps.lib.byu.edu/v1');\n @Output() endImpersonation = new EventEmitter<void>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected parsedToken: Signal<JwtPayload & Record<string, any>> = computed(() =>\n this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : {},\n );\n protected isImpersonating = computed(() => !!this.parsedToken()['impersonator']);\n protected libraryId = computed(() => this.parsedToken()['library_id']);\n protected user = toSignal(\n combineLatest([toObservable(this.libraryId), toObservable(this.isImpersonating)]).pipe(\n switchMap(([libraryId, isImpersonating]) =>\n libraryId && isImpersonating\n ? this.http.get<PersonSummary>(\n urlcat(this.personBaseUri(), PERSON_SUMMARY_PATH, {\n libraryId,\n }),\n {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n },\n )\n : of(null),\n ),\n ),\n );\n protected userFullName = computed(() =>\n this.parsedToken()['given_name']\n ? `${this.parsedToken()['given_name']} ${this.parsedToken()['family_name']}`\n : 'Unknown',\n );\n protected isRestricted = computed(() => this.user()?.restricted);\n protected userInfoTabs = computed(\n () =>\n new Map([\n ['Net ID', this.parsedToken()['net_id'] ?? ''],\n ['BYU ID', this.parsedToken()['byu_id'] ?? ''],\n ['Email', this.parsedToken()['email'] ?? ''],\n ]),\n );\n protected userPhotoUrl = computed(() =>\n this.parsedToken()['net_id'] ? USER_PHOTO_URL + this.parsedToken()['net_id'] : '',\n );\n\n protected activityStatus = computed(() => {\n if (this.user()?.is_retired) return 'retired';\n else if (this.user()?.is_employee) return 'active';\n else if (this.user()?.primary_position_type) return 'inactive';\n return null;\n });\n\n protected employeeStatusDescription = computed(() => {\n if (!this.user()) {\n return null;\n }\n\n let description = '';\n if (this.user()!.is_retired) {\n description = 'Retired';\n } else if (this.user()!.is_employee) {\n description = 'Active';\n } else if (this.user()!.primary_position_type) {\n description = 'Inactive';\n }\n\n if (this.user()!.primary_position_type_display) {\n description += ` ${this.user()!.primary_position_type_display} Employee`;\n }\n\n return description ?? null;\n });\n\n protected independentStudyStatus = toSignal(\n combineLatest([toObservable(this.libraryId), toObservable(this.isImpersonating)]).pipe(\n switchMap(([libraryId, isImpersonating]) =>\n libraryId && isImpersonating\n ? this.http\n .get<IndependentStudyResponse>(\n urlcat(this.personBaseUri(), INDEPENDENT_STUDY_RESPONSE_PATH, {\n libraryId,\n }),\n {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n },\n )\n .pipe(map((response) => response?.is_enrolled))\n : of(null),\n ),\n ),\n );\n protected accountStatuses = toSignal(\n toObservable(this.isImpersonating).pipe(\n switchMap((isImpersonating) => {\n if (!isImpersonating) {\n return of(null);\n }\n return this.http\n .get<AccountsResponse>(urlcat(this.libraryApiBaseUri(), PATRON_ACCOUNTS_PATH), {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n })\n .pipe(\n map((accounts) => {\n const accountStatuses = {\n ok: [] as ApplicationAccess[],\n blocked: [] as ApplicationAccess[],\n none: [] as ApplicationAccess[],\n };\n\n Object.values(accounts.applications).forEach((app) => {\n switch (app.access) {\n case AccessStatus.OK:\n accountStatuses.ok.push(app);\n break;\n case AccessStatus.BLOCKED:\n accountStatuses.blocked.push(app);\n break;\n case AccessStatus.NONE:\n accountStatuses.none.push(app);\n break;\n }\n });\n\n return accountStatuses;\n }),\n );\n }),\n ),\n );\n}\n","@if (isImpersonating()) {\n <div class=\"banner-padding\"></div>\n <div class=\"top-banner\" data-testid=\"banner\">\n <div class=\"banner-group profile-name-container\">\n <div class=\"profile-avatar\">\n <div class=\"profile-image\">\n <img\n [src]=\"userPhotoUrl()\"\n [alt]=\"userFullName()\"\n alt=\"user photo\"\n onerror=\"this.remove()\"\n />\n </div>\n <span class=\"material-symbols-outlined profile-icon\"> person </span>\n </div>\n <div class=\"profile-name-group\">\n <span class=\"soft\">Impersonating</span>\n <div class=\"profile-name-wrapper\">\n <span class=\"profile-name\">{{ userFullName() }}</span>\n @if (accountStatuses()) {\n <div class=\"application-status-bar\">\n @if (accountStatuses()!.ok.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-ok application-status\">\n <span class=\"material-symbols-outlined icon-checkmark\">\n check\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.ok.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n OK Applications\n <hr />\n @for (\n application of accountStatuses()!.ok;\n track application.label\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-checkmark\"\n >\n check\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (accountStatuses()!.blocked.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-blocked application-status\">\n <span class=\"material-symbols-outlined icon-warning\">\n warning\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.blocked.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n Blocked Applications\n <hr />\n @for (\n application of accountStatuses()!.blocked;\n track application.code\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-warning\"\n >\n warning\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (accountStatuses()!.none.length) {\n <div class=\"application-status-indicator\">\n <span class=\"application-status-none application-status\">\n <span class=\"material-symbols-outlined icon-lock\">\n lock\n </span>\n <span class=\"application-count\">{{\n accountStatuses()!.none.length\n }}</span>\n </span>\n <div class=\"status-tooltip-container\">\n <div class=\"status-tooltip\">\n No Account\n <hr />\n @for (\n application of accountStatuses()!.none;\n track application.label\n ) {\n <div class=\"application-status\">\n <span\n class=\"material-symbols-outlined icon-lock\"\n >\n lock\n </span>\n <span>{{ application.label }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"profile-details-container banner-group\">\n @for (detail of userInfoTabs() | keyvalue; track detail.key) {\n <div class=\"profile-detail\">\n <span class=\"soft label\">{{ detail.key }}</span>\n <lib-copy-tooltip [copyText]=\"detail.value\">\n <div class=\"profile-detail-tag white-tag clickable\">\n {{ detail.value || 'Unknown' }}\n </div>\n </lib-copy-tooltip>\n </div>\n }\n </div>\n <div class=\"profile-details-container banner-group\">\n <div class=\"profile-detail\">\n <span class=\"soft label\">Status</span>\n <div class=\"multiple-detail-tags\">\n <div\n class=\"profile-detail-tag color-tag\"\n title=\"{{ employeeStatusDescription() }}\"\n >\n {{ user()?.primary_position_type_display ?? 'Non-employee' }}\n @if (activityStatus()) {\n <span\n class=\"profile-status-circle\"\n [class.status-active]=\"activityStatus() === 'active'\"\n [class.status-inactive]=\"activityStatus() === 'inactive'\"\n [class.status-retired]=\"activityStatus() === 'retired'\"\n ></span>\n }\n </div>\n <div class=\"profile-detail-tag color-tag\">\n {{ (user()?.undergrad_graduate_status | titlecase) || 'Non-student' }}\n </div>\n <div class=\"profile-detail-tag color-tag\">\n {{ independentStudyStatus() ? 'Independent Study' : 'No Ind. Study' }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"spacer\"></div>\n <button class=\"end-impersonation-button shadow\" (click)=\"this.endImpersonation.emit()\">\n <span class=\"material-symbols-outlined icon\"> close </span>\n <span class=\"exit-text\">Exit</span>\n </button>\n </div>\n @if (isRestricted()) {\n <div class=\"restricted-bar-padding\"></div>\n <div class=\"restricted-bar\">\n <span class=\"title\">restricted person</span>\n <span class=\"text\">\n If anyone asks about this person, you are instructed to respond,\n <span class=\"emphasize\">\"We have no records for this person.\"</span>\n </span>\n </div>\n }\n <div class=\"right-border\"></div>\n <div class=\"bottom-border\"></div>\n <div class=\"left-border\"></div>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n Pipe,\n PipeTransform,\n inject,\n input,\n} from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Subject, Subscription, of } from 'rxjs';\nimport { catchError, startWith, switchMap, tap } from 'rxjs/operators';\nimport { libHbllFadeInOut } from '../animations/animations';\nimport urlcat from 'urlcat';\nimport { HttpClient } from '@angular/common/http';\nimport { CommonModule } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TokenPayload } from '../models/token-payload';\n\nexport const defaultOidcBaseUri = 'https://keycloak.lib.byu.edu/';\nexport const defaultOidcDefaultIdp = 'byu-realm';\n\n@Pipe({\n name: 'impersonateUser',\n standalone: true,\n})\nexport class ImpersonateUserPipe implements PipeTransform {\n transform(user: ImpersonateSearchResult): string {\n return `${user.name} (${user.netId || 'Unknown'})${user.restricted ? ' — Restricted' : ''}`;\n }\n}\nexport interface ImpersonateSearchResult {\n netId: string;\n institution: string;\n username: string;\n name: string;\n preferredName: string;\n givenName: string;\n surname: string;\n restricted: boolean;\n}\n\nconst SEARCH_USERS_PATH = '/impersonate/api/search/';\nconst START_IMPERSONATE_PATH = '/impersonate/:username';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ImpersonateUserPipe],\n selector: 'lib-impersonate-modal',\n templateUrl: './impersonate-modal.component.html',\n styleUrls: ['./impersonate-modal.component.scss'],\n animations: [libHbllFadeInOut],\n})\nexport class ImpersonateModalComponent implements OnDestroy {\n private readonly http = inject(HttpClient);\n private readonly fb = inject(FormBuilder);\n private readonly eref = inject(ElementRef);\n\n @Input() set showModal(open: boolean) {\n this.isOpen = open;\n if (open) {\n // Set focus on search input shortly after opening modal so user notices\n // the input receiving focus.\n setTimeout(() => this.eref.nativeElement.querySelector('#searchInput')?.focus(), 250);\n }\n }\n oidcBaseUri = input(defaultOidcBaseUri);\n oidcDefaultIdp = input(defaultOidcDefaultIdp);\n // Require an object here so that access tokens are not visible/extractable from the DOM in consuming applications. Instead they are only stored in memory.\n accessTokenPayload = input.required<TokenPayload>();\n @Output() dismiss = new EventEmitter<void>();\n @Output() init = new EventEmitter<void>();\n\n protected isOpen = false;\n protected hasError = false;\n protected form = this.fb.nonNullable.group({\n search: this.fb.control('', { validators: Validators.minLength(3) }),\n });\n protected selectedUsername?: string;\n\n protected loading = false;\n protected handleSearchSubject = new Subject<boolean>();\n protected results = toSignal(\n this.form.controls.search.valueChanges.pipe(\n switchMap((search) =>\n this.handleSearchSubject.pipe(\n startWith(false),\n switchMap((handleSearch) => {\n this.selectedUsername = undefined;\n this.hasError = false;\n\n if (!search || !handleSearch) {\n return of(null);\n }\n\n this.loading = true;\n const results = this.searchUsers(search);\n\n return results.pipe(\n catchError((e) => {\n this.hasError = true;\n console.error(e);\n return of(null);\n }),\n );\n }),\n ),\n ),\n tap(() => {\n this.loading = false;\n }),\n ),\n );\n\n private subs = new Subscription();\n\n @HostListener('document:mousedown', ['$event']) outsideClick(event: MouseEvent) {\n if ((event.target as HTMLElement)?.id === 'modalBackdrop') {\n this.close();\n }\n }\n\n @HostListener('document:keydown', ['$event']) handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Esc':\n case 'Escape': {\n this.close();\n break;\n }\n case 'I':\n case 'i': {\n if (event.ctrlKey || event.metaKey) {\n if (this.isOpen) {\n this.close();\n } else {\n this.init.emit();\n }\n event.preventDefault();\n }\n break;\n }\n default:\n break;\n }\n };\n\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n\n /** Redirect to Keycloak impersonate page, which will redirect back\n * after impersonation begins.\n */\n protected startImpersonation = (username?: string) => {\n const _username = username ?? this.selectedUsername;\n if (!_username) {\n return;\n }\n const url = urlcat(this.oidcBaseUri(), START_IMPERSONATE_PATH, {\n username,\n returnUri: window.location.href,\n defaultIdp: this.oidcDefaultIdp(),\n });\n this.replaceUrl(url);\n };\n\n protected handleSelectUser = (event: Event) => {\n this.selectedUsername = (event.target as HTMLInputElement).value;\n };\n\n protected clearSearch = () => {\n this.form.reset();\n };\n\n protected close = () => {\n this.dismiss.emit();\n this.clearSearch();\n };\n\n protected handleFormSubmit = (event: SubmitEvent) => {\n event.preventDefault();\n if (this.form.valid) {\n this.handleSearchSubject.next(true);\n }\n };\n\n protected handleSearchKeyPress = (event: KeyboardEvent) => {\n if (!['ArrowDown', 'Down'].includes(event.key)) {\n return;\n }\n event.preventDefault();\n if (this.results()?.length) {\n const firstResult = this.eref.nativeElement.querySelector(`#result_0`);\n firstResult?.click();\n firstResult?.focus();\n }\n };\n\n protected handleResultKeyPress = (event: KeyboardEvent) => {\n if (\n ['ArrowUp', 'Up'].includes(event.key) &&\n (event.target as HTMLInputElement)?.id === 'result_0'\n ) {\n event.preventDefault();\n this.eref.nativeElement.querySelector('#searchInput')?.focus();\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.startImpersonation();\n }\n };\n\n /** Search Keycloak users using a generic search query. */\n private searchUsers = (query: string) => {\n const uri = urlcat(this.oidcBaseUri(), SEARCH_USERS_PATH, {\n query,\n });\n\n return this.http.get<ImpersonateSearchResult[]>(uri, {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\n });\n };\n\n private replaceUrl = (url: string) => window.location.replace(url);\n}\n","@if (isOpen) {\n <div @libHbllFadeInOut class=\"modal-wrapper\" id=\"modalBackdrop\" data-testid=\"backdrop\">\n <div class=\"modal-container\" data-testid=\"modal\">\n <div class=\"modal-header\">\n <h2>Impersonate</h2>\n <button type=\"button\" (click)=\"close()\" aria-label=\"Close\" data-testid=\"close\">\n <span class=\"material-symbols-outlined icon-close\"> close </span>\n </button>\n </div>\n <form [formGroup]=\"form\" (submit)=\"handleFormSubmit($event)\" data-testid=\"searchForm\">\n <div class=\"search-header\">\n <div class=\"secondary\" [class.disabled]=\"!form.valid\">\n <span class=\"keyboard-key\">Enter</span> to search\n </div>\n </div>\n <label\n for=\"searchInput\"\n class=\"search-wrapper\"\n [class.invalid]=\"form.invalid && form.dirty\"\n >\n <span class=\"material-symbols-outlined icon-search\"> search </span>\n <input\n id=\"searchInput\"\n type=\"text\"\n autocomplete=\"off\"\n formControlName=\"search\"\n placeholder=\"Search patrons...\"\n (keydown)=\"handleSearchKeyPress($event)\"\n #searchBox\n data-testid=\"searchInput\"\n />\n @if (!!searchBox.value && form.valid) {\n <span class=\"material-symbols-outlined icon-checkmark\"> check </span>\n }\n @if (searchBox.value.length) {\n <span\n (click)=\"clearSearch()\"\n @libHbllFadeInOut\n class=\"material-symbols-outlined icon-close\"\n >\n close\n </span>\n }\n </label>\n </form>\n <fieldset\n class=\"search-results-wrapper\"\n id=\"resultsScrollContainer\"\n (change)=\"handleSelectUser($event)\"\n >\n @if (!loading && results()) {\n @for (user of results(); track user.netId; let idx = $index) {\n <div\n class=\"result-field result\"\n [class.focus]=\"user.username === selectedUsername\"\n data-testid=\"result\"\n >\n <label\n [for]=\"'result_' + idx\"\n [class.warning]=\"user.restricted\"\n (mouseover)=\"selectedUsername = user.username\"\n >\n @if (user.restricted) {\n <span class=\"material-symbols-outlined icon\"> warning </span>\n } @else {\n <span class=\"material-symbols-outlined icon\"> person </span>\n }\n \n <span [title]=\"user\" data-testid=\"resultText\">{{\n user | impersonateUser\n }}</span>\n <input\n type=\"radio\"\n [value]=\"user.username\"\n class=\"hidden\"\n [id]=\"'result_' + idx\"\n name=\"resultSelect\"\n (keydown)=\"handleResultKeyPress($event)\"\n />\n </label>\n <button\n class=\"impersonate-button\"\n data-testid=\"impersonateBtn\"\n (click)=\"startImpersonation(user.username)\"\n >\n Impersonate\n </button>\n </div>\n } @empty {\n <div class=\"result-field\">\n No results. Try searching by Net ID or BYU ID.\n </div>\n }\n }\n @if (loading) {\n <div class=\"result-field\">\n <div class=\"lib-spinner\"></div>\n </div>\n }\n @if (hasError) {\n <div class=\"result-field\">Something went wrong. We'll keep trying.</div>\n }\n </fieldset>\n </div>\n </div>\n}\n","import { Component, computed, EventEmitter, input, Output, Signal } from '@angular/core';\nimport { HbllHeaderComponent } from '../hbll-header/hbll-header.component';\nimport { ImpersonationBannerComponent } from '../impersonation-banner/impersonation-banner.component';\nimport {\n defaultOidcBaseUri,\n defaultOidcDefaultIdp,\n ImpersonateModalComponent,\n} from '../impersonate-modal/impersonate-modal.component';\nimport { TokenPayload } from '../models/token-payload';\nimport { jwtDecode, JwtPayload } from 'jwt-decode';\n\n@Component({\n selector: 'lib-header-with-impersonation',\n standalone: true,\n imports: [HbllHeaderComponent, ImpersonationBannerComponent, ImpersonateModalComponent],\n templateUrl: './header-with-impersonation.component.html',\n styleUrl: './header-with-impersonation.component.scss',\n})\nexport class HeaderWithImpersonationComponent {\n accessTokenPayload = input.required<TokenPayload>();\n oidcBaseUri = input(defaultOidcBaseUri);\n oidcDefaultIdp = input(defaultOidcDefaultIdp);\n mainSiteBaseUrl = input('https://lib.byu.edu');\n\n @Output() login = new EventEmitter<void>();\n @Output() logout = new EventEmitter<void>();\n @Output() endImpersonation = new EventEmitter<void>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected parsedToken: Signal<(JwtPayload & Record<string, any>) | null> = computed(() =>\n this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : null,\n );\n protected name = computed(() => (this.parsedToken() ? this.parsedToken()!['given_name'] : ''));\n protected showImpersonateButton = computed(() =>\n this.parsedToken()\n ? !!(\n !this.isImpersonating() &&\n this.parsedToken()!['resource_access']['realm-management']?.['roles']?.includes(\n 'impersonation',\n )\n )\n : false,\n );\n protected showImpersonationModal = false;\n private isImpersonating = computed(() => !!this.parsedToken()?.['impersonator']);\n}\n","<lib-impersonation-banner\n [accessTokenPayload]=\"accessTokenPayload()\"\n (endImpersonation)=\"endImpersonation.emit()\"\n></lib-impersonation-banner>\n<lib-hbll-header\n [name]=\"name()\"\n [showImpersonateButton]=\"showImpersonateButton()\"\n (openImpersonationModal)=\"showImpersonationModal = true\"\n (login)=\"login.emit()\"\n (logout)=\"logout.emit()\"\n [mainsitebaseurl]=\"mainSiteBaseUrl()\"\n/>\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n","export const ADVANCED_SEARCH_QUALIFIER_MAP = {\n contains: 'contains',\n begins_with: 'begins with',\n exact: 'is (exact)',\n index: 'browse value',\n subject_lc: 'LC browse',\n subject_expanded: 'expanded browse',\n} as const;\n\nexport const ADVANCED_SEARCH_FIELD_MAP = {\n abstract: 'Abstract',\n any: 'Any Field',\n callNumber: 'Call Number',\n contributor: 'Contributor',\n creator: 'Author/Creator',\n genre: 'Genre',\n isbn: 'ISBN',\n issn: 'ISSN',\n series: 'Series',\n source: 'Source',\n subject: 'Subject',\n title: 'Title',\n} as const;\n\nexport const ADVANCED_SEARCH_QUERIES_LIMIT = 12;\n\nexport const ADVANCED_SEARCH_OPTIONS = {\n boolean: ['AND', 'OR', 'NOT'],\n // In SS-api, the EDS key for all fields is `allText`, however this is the default and is never used in the URL, so we omit it here.\n fields: ['any', 'title', 'creator', 'subject', 'issn', 'isbn'],\n localFields: ['callNumber', 'contributor', 'genre', 'series'],\n externalFields: ['source', 'abstract'],\n qualifiers: {\n any: ['contains'],\n title: ['contains', 'exact', 'begins_with', 'index'],\n callNumber: ['contains', 'exact', 'begins_with', 'index'],\n creator: ['contains', 'exact', 'begins_with', 'index'],\n contributor: ['contains', 'exact'],\n isbn: ['contains', 'exact'],\n issn: ['contains', 'exact'],\n genre: ['contains', 'exact'],\n subject: ['contains', 'exact', 'subject_lc', 'subject_expanded'],\n series: ['contains', 'exact'],\n },\n resultsPerPage: ['10', '20', '50', '100'],\n types: {\n byu: {\n book: 'Books',\n sound_recording: 'Sound Recordings',\n image: 'Images',\n periodical: 'Periodicals',\n map: 'Maps',\n score: 'Music Scores',\n newspaper: 'Newspapers',\n dissertation: 'Theses & Dissertations',\n video: 'Videos',\n },\n law: { book: 'Books' },\n ensign: {\n book: 'Books',\n sound_recording: 'Sound Recordings',\n journal: 'Periodicals',\n magazine: 'Magazines',\n video: 'Videos',\n },\n },\n collections: {\n byu: {\n lee: 'BYU Library',\n 'lee -- asian': 'Asian',\n 'lee -- general': 'General Collection',\n 'lee -- govdocs': 'Government Documents',\n 'lee -- humanities': 'Humanities',\n 'lee -- juvenile': 'Juvenile',\n 'lee -- maps': 'Maps',\n 'lee -- media_center': 'Media Center',\n 'lee -- music': 'Music & Dance',\n 'lee -- periodicals': 'Periodicals',\n 'lee -- popular': 'Popular Reading',\n 'lee -- religion_famhist': 'Religion & Family History',\n 'lee -- science_engineering': 'Science & Engineering',\n 'lee -- social_science': 'Social Science',\n 'lee -- special_collections': 'Special Collections',\n },\n law: {\n 'law -- iclrs': 'Law & Religion Studies',\n 'law -- main': 'Main Collection',\n 'law -- media': 'Media',\n 'law -- reserve': 'Reserve',\n 'law -- self_help': 'Self Help',\n 'law -- study_guides': 'Study Guides',\n },\n ensign: {\n 'ldsbc -- audio_books': 'Audio Books',\n 'ldsbc -- display': 'Display Shelves',\n 'ldsbc -- fiction': 'Fiction',\n 'ldsbc -- films': 'Feature Films',\n 'ldsbc -- stacks': 'General Collection',\n 'ldsbc -- news_magazines': 'News Magazines',\n 'ldsbc -- non_feature_films': 'Non Feature Films',\n 'ldsbc -- oversize': 'Oversize',\n 'ldsbc -- paralegal': 'Paralegal',\n 'ldsbc -- periodicals': 'Periodicals',\n 'ldsbc -- reference': 'Reference',\n 'ldsbc -- reserve': 'Reserve',\n },\n },\n languages: {\n eng: 'English',\n ara: 'Arabic',\n chi: 'Chinese',\n ces: 'Czech',\n dan: 'Danish',\n dut: 'Dutch',\n fin: 'Finnish',\n fre: 'French',\n ger: 'German',\n gre: 'Greek, Modern',\n heb: 'Hebrew',\n hin: 'Hindi',\n hun: 'Hungarian',\n ice: 'Icelandic',\n ita: 'Italian',\n jpn: 'Japanese',\n kor: 'Korean',\n lat: 'Latin',\n nor: 'Norwegian',\n pol: 'Polish',\n por: 'Portuguese',\n pan: 'Punjabi',\n rum: 'Romanian',\n rus: 'Russian',\n spa: 'Spanish',\n swe: 'Swedish',\n wel: 'Welsh',\n yid: 'Yiddish',\n },\n} as const;\n\nexport const PRIMARY_BLUE = 'rgba(63, 112, 176, 1)';\nexport const PRIMARY_BLUE_HOVER = 'hsl(214, 48%, 60%, 1)';\nexport const PRIMARY_LIGHT_BLUE = 'rgba(223, 233, 247, 1)';\nexport const PRIMARY_PURPLE = '#8772A6';\nexport const PRIMARY_PURPLE_HOVER = '#7C659F';\nexport const DESTRUCTIVE_RED = 'hsl(5, 47%, 47%, 1)';\nexport const DESTRUCTIVE_RED_HOVER = 'hsl(5, 47%, 50%, 1)';\nexport const SECONDARY_TEXT_GRAY = 'rgba(112, 112, 112, 1)';\nexport const LIGHT_GRAY = 'rgba(230, 230, 230, 1)';\nexport const DROP_SHADOW_DARK_BLUE = 'rgba(51, 62, 77, 0.16)';\nexport const TEXT_SEMIBOLD = '600';\nexport const TEXT_BOLD = '700';\nexport const ANIMATION_LENGTH_STD = '0.15s';\nexport const LINE_HEIGHT_STD = '1.4';\nexport const CONTEXTUAL_SELECTOR_HEIGHT = '4.5rem';\nexport const CONTENT_MAX_WIDTH = '75rem';\nexport const CONTENT_PADDING = '5.4rem';\n","import { ADVANCED_SEARCH_OPTIONS } from '../constants';\n\nexport type AdvancedSearchBooleanOption = (typeof ADVANCED_SEARCH_OPTIONS.boolean)[number];\n\nexport type AdvancedSearchFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.fields)[number];\n\nexport const isAdvancedSearchFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n [...ADVANCED_SEARCH_OPTIONS.fields].includes(field as AdvancedSearchFieldOption);\n\nexport type AdvancedSearchLocalFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.localFields)[number];\n\nexport const isAdvancedSearchLocalFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.localFields.includes(field as AdvancedSearchLocalFieldOption);\n\nexport type AdvancedSearchExternalFieldOption =\n (typeof ADVANCED_SEARCH_OPTIONS.externalFields)[number];\n\nexport const isAdvancedSearchExternalFieldOption = (\n field: string,\n): field is AdvancedSearchExternalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.externalFields.includes(field as AdvancedSearchExternalFieldOption);\n\nexport type AdvancedSearchQualifierOption =\n (typeof ADVANCED_SEARCH_OPTIONS.qualifiers)[keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers][number];\n\nexport type AdvancedSearchResultsPerPageOption =\n (typeof ADVANCED_SEARCH_OPTIONS.resultsPerPage)[number];\n\nexport type AdvancedSearchLanguageOption = (keyof typeof ADVANCED_SEARCH_OPTIONS.languages)[number];\n\nexport type AdvancedSearchQualifier = keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers;\n\nexport interface AdvancedSearchQueryRow {\n boolean?: AdvancedSearchBooleanOption;\n field?:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption;\n qualifier?: AdvancedSearchQualifierOption;\n query: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { ADVANCED_SEARCH_OPTIONS } from '../constants';\nimport { SearchScope } from '../models/search-scope.model';\n\n/**\n * Returns the field value based on the scope. If a field value does not exist in a specific scope, the default is returned.\n */\n@Pipe({\n name: 'fieldByScope',\n standalone: true,\n})\nexport class FieldByScopePipe implements PipeTransform {\n transform(\n fieldValue:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n scope: SearchScope,\n ):\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption {\n if (\n isAdvancedSearchFieldOption(fieldValue) ||\n (scope === 'local'\n ? isAdvancedSearchLocalFieldOption(fieldValue)\n : isAdvancedSearchExternalFieldOption(fieldValue))\n )\n return fieldValue;\n return ADVANCED_SEARCH_OPTIONS.fields[0];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n} from '../constants';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\nimport { FieldByScopePipe } from './field-by-scope.pipe';\n\n@Pipe({\n name: 'ssAdvancedQueries',\n standalone: true,\n})\nexport class SsAdvancedQueriesPipe implements PipeTransform {\n constructor(private fieldByScopePipe: FieldByScopePipe) {}\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n return queryRows\n .map((row, i) => {\n const b = i !== 0 ? row.boolean || ADVANCED_SEARCH_OPTIONS.boolean[0] : '';\n const f:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption = this.fieldByScopePipe.transform(\n row.field ?? ADVANCED_SEARCH_OPTIONS.fields[0],\n scope,\n );\n const o = isAdvancedSearchExternalFieldOption(f)\n ? 'contains'\n : row.qualifier ??\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n f as AdvancedSearchFieldOption | AdvancedSearchLocalFieldOption\n ][0];\n return `${b ? b + ' ' : ''}${\n ADVANCED_SEARCH_FIELD_MAP[f]\n } ${ADVANCED_SEARCH_QUALIFIER_MAP[o as keyof typeof ADVANCED_SEARCH_QUALIFIER_MAP]} <b>${row.query}</b>`;\n })\n .join(' ');\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator method to check if a `FormGroup<{ from: FormControl<string>; to: FormControl<string> }>` is valid.\n * The FormGroup is considered valid if either both `from` and `to` are set, or both are empty strings.\n * @returns {ValidationErrors | null} validation errors, if any\n */\nexport const validateDateRangeFields = (): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n const from: string = control.get('from')?.value;\n const to: string = control.get('to')?.value;\n // Valid if both fields are set or both are empty.\n if ((!from && !to) || (from && to)) return null;\n return from ? { toInvalid: true } : { fromInvalid: true };\n };\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n} from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'lib-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n MatChipsModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatIconModule,\n ],\n // Necessary to override material design styles.\n // IMPORTANT: Tightly scope classes and ids to this component if they are necessary.\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n})\nexport class HbllMultiSelectComponent {\n @ViewChild('input') private inputRef!: ElementRef<HTMLInputElement>;\n @Input() allOptions: Record<string, string> = {};\n @Input() label = '';\n /**\n * An array that indicates which keys are selected.\n */\n @Input() selectedKeys: string[] = [];\n /**\n * An EventEmitter that emits an array of keys indicating which options are currently selected.\n */\n @Output() selectedKeysChange = new EventEmitter<string[]>();\n\n protected inputControl = new FormControl('');\n protected filteredOptions$: Observable<string[]> = combineLatest([\n this.inputControl.valueChanges.pipe(startWith('')),\n this.selectedKeysChange.asObservable().pipe(startWith([])),\n ]).pipe(\n map(([key]: [string | null, unknown]) =>\n // Display filtered options if there is a value, else display all options currently not selected.\n key\n ? this.filterOptions(key)\n : Object.keys(this.allOptions).filter(\n (key) => !this.selectedKeys.find((selectedOption) => key === selectedOption),\n ),\n ),\n );\n protected separatorKeysCodes: number[] = [ENTER, COMMA];\n\n /**\n * Adds a key from the input to the array of selected key.\n * The value from the input must match a key from the record of all options.\n * @param {MatChipInputEvent} event MatChipInputEvent\n */\n protected addOption(event: MatChipInputEvent): void {\n this.addOptionToSelectedOptions(event.value);\n }\n\n /**\n * Removes a key from the array of selected options and emits the new selected keys.\n * @param {MultiSelectKeyValPair} key key to remove\n */\n protected removeOption(key: string): void {\n const index = this.selectedKeys.indexOf(key);\n if (index >= 0) {\n this.selectedKeys.splice(index, 1);\n this.selectedKeysChange.emit(this.selectedKeys);\n }\n }\n\n /**\n * Adds an option to the array of selected keys when a user selects from the autocomplete.\n * @param {MatAutocompleteSelectedEvent} event MatAutocompleteSelectedEvent\n */\n protected selectOption = (event: MatAutocompleteSelectedEvent): void => {\n this.addOptionToSelectedOptions(event.option.value);\n };\n\n /**\n * Filters the options by the supplied value as well as the currently selected values.\n * @param {string} value value to filter by.\n * @returns {string[]} the filtered keys\n */\n private filterOptions = (value: string): string[] => {\n return Object.keys(this.allOptions).filter(\n (key: string) =>\n this.allOptions[key].toLowerCase().includes(value.toLowerCase()) &&\n !this.selectedKeys.includes(key),\n );\n };\n\n /**\n * Adds a key to the selected keys array if the option is truthy and not already in the array.\n * The input is also cleared (if available), and the new selected keys are emitted.\n * @param {key} option key to add\n */\n private addOptionToSelectedOptions = (key: string): void => {\n if (key && !this.selectedKeys.includes(key) && this.allOptions[key]) {\n this.selectedKeys.push(key);\n this.inputControl.setValue('');\n this.selectedKeysChange.emit(this.selectedKeys);\n if (this.inputRef) this.inputRef.nativeElement.value = '';\n }\n };\n}\n","<div class=\"components-multi-select\">\n <mat-form-field appearance=\"outline\">\n <mat-chip-grid #chipGrid [attr.aria-label]=\"label + ' selection'\">\n @for (key of selectedKeys; track key) {\n @if (allOptions[key]) {\n <mat-chip-row (removed)=\"removeOption(key)\" data-testid=\"matChipRow\">\n {{ allOptions[key] }}\n <button\n matChipRemove\n [attr.aria-label]=\"'remove ' + allOptions[key]\"\n [attr.data-testid]=\"'remove' + key\"\n >\n <span class=\"material-symbols-outlined components-icon\"> cancel </span>\n </button>\n </mat-chip-row>\n }\n }\n </mat-chip-grid>\n <label class=\"components-hidden\" for=\"input\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"input\"\n [formControl]=\"inputControl\"\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"addOption($event)\"\n data-testid=\"input\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selectOption($event)\"\n data-testid=\"autocomplete\"\n >\n @for (key of filteredOptions$ | async; track key) {\n <mat-option [value]=\"key\" data-testid=\"autocompleteOption\">\n {{ allOptions[key] }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'lib-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class HbllCheckboxComponent {\n isChecked = input(false);\n}\n","<span class=\"components-checkbox-container\" [class.components-checked]=\"isChecked()\">\n @if (isChecked()) {\n <span class=\"material-symbols-outlined components-icon\"> check </span>\n }\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n} from '@angular/core';\nimport { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { libHbllFadeInOut } from '../../animations/animations';\nimport { validateDateRangeFields } from '../utils';\n\n@Component({\n selector: 'lib-date-range',\n templateUrl: './date-range.component.html',\n styleUrls: ['./date-range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n animations: [libHbllFadeInOut],\n})\nexport class DateRangeComponent {\n private readonly fb = inject(NonNullableFormBuilder);\n /**\n * Emits `{ from: string, to: string }` object if both values are set to a valid or empty state by the user.\n */\n @Output() validDateChange = new EventEmitter<{ from: string; to: string }>();\n @Output() fromChange = new EventEmitter<string>();\n @Output() toChange = new EventEmitter<string>();\n protected dateForm = this.fb.group(\n {\n from: ['', [Validators.pattern('^[0-9]{4}$')]],\n to: ['', [Validators.pattern('^[0-9]{4}$')]],\n },\n { validators: validateDateRangeFields() },\n );\n @Input() set from(from: string) {\n if (from !== this.dateForm.controls.from.value) this.dateForm.controls.from.setValue(from);\n }\n @Input() set to(to: string) {\n if (to !== this.dateForm.controls.to.value) this.dateForm.controls.to.setValue(to);\n }\n protected onFromChange = () => {\n this.onInputChange();\n this.fromChange.emit(this.dateForm.controls.from.value);\n };\n protected onToChange = () => {\n this.onInputChange();\n this.toChange.emit(this.dateForm.controls.to.value);\n };\n\n private onInputChange = () => {\n let from = this.dateForm.controls.from.value;\n let to = this.dateForm.controls.to.value;\n if (from && to && this.dateForm.controls.from.valid && this.dateForm.controls.to.valid) {\n // Ensure 'to' contains the larger year. Swap if necessary.\n if (parseInt(from) > parseInt(to)) {\n const swap = from;\n from = to;\n to = swap;\n }\n this.validDateChange.emit({ from, to });\n } else if (!from && !to) {\n this.validDateChange.emit({ from, to });\n }\n };\n}\n","<form id=\"fromTo\" data-testid=\"fromTo\" [formGroup]=\"dateForm\">\n <label for=\"fromFacet\">Between</label>\n <input\n formControlName=\"from\"\n id=\"fromFacet\"\n name=\"fromFacet\"\n data-testid=\"from\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onFromChange()\"\n [class.error]=\"\n dateForm.errors?.['fromInvalid'] || dateForm.controls.from.errors?.['pattern']\n \"\n />\n <label for=\"toFacet\">and</label>\n <input\n formControlName=\"to\"\n id=\"toFacet\"\n name=\"toFacet\"\n data-testid=\"to\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onToChange()\"\n [class.error]=\"dateForm.errors?.['toInvalid'] || dateForm.controls.to.errors?.['pattern']\"\n />\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { filter, startWith, tap } from 'rxjs/operators';\nimport {\n AdvancedSearchBooleanOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchLanguageOption,\n AdvancedSearchQualifierOption,\n AdvancedSearchQualifier,\n AdvancedSearchExternalFieldOption,\n AdvancedSearchQueryRow,\n AdvancedSearchFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n} from '../models/advanced-search.model';\nimport { Subscription } from 'rxjs';\nimport { validateDateRangeFields } from '../utils';\nimport { CommonModule } from '@angular/common';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n ADVANCED_SEARCH_QUERIES_LIMIT,\n} from '../constants';\nimport { MatIconModule } from '@angular/material/icon';\nimport { HbllMultiSelectComponent } from '../../multi-select/multi-select.component';\nimport { HbllCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { DateRangeComponent } from '../date-range/date-range.component';\nimport { SearchConfig } from '../models/search-config.model';\n\ntype QueryRow = {\n boolean: FormControl<AdvancedSearchBooleanOption>;\n field: FormControl<\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption\n >;\n qualifier: FormControl<AdvancedSearchQualifierOption>;\n query: FormControl<string>;\n};\n\nconst DATE_VALIDATOR_REGEX = '^[0-9]{4}$';\n\n@Component({\n selector: 'lib-ss-advanced-search',\n standalone: true,\n templateUrl: './advanced-search.component.html',\n styleUrls: ['./advanced-search.component.scss'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatIconModule,\n HbllMultiSelectComponent,\n HbllCheckboxComponent,\n DateRangeComponent,\n ],\n})\nexport class AdvancedSearchComponent implements OnDestroy {\n private readonly fb = inject(NonNullableFormBuilder);\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n\n // Though multiple instances exists, this represent query 1.\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n\n private subscription = new Subscription();\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n /**\n * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.\n * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.\n */\n private syncUpFieldAndQualifier = (\n fg: FormGroup<{\n boolean: FormControl;\n field: FormControl;\n qualifier: FormControl;\n query: FormControl;\n }>,\n scope: SearchConfig['scope'],\n ) => {\n this.subscription.add(\n fg.controls.field.valueChanges\n .pipe(\n filter(() => scope === 'local'),\n tap((val: AdvancedSearchQualifier) =>\n fg.controls.qualifier.setValue(ADVANCED_SEARCH_OPTIONS.qualifiers[val][0]),\n ),\n )\n .subscribe(),\n );\n };\n\n protected advancedSearchForm = this.fb.group({\n queries: this.fb.array<FormGroup<QueryRow>>(\n [],\n [Validators.maxLength(ADVANCED_SEARCH_QUERIES_LIMIT)],\n ),\n types: [[] as string[]],\n collections: [[] as string[]],\n languages: [[] as AdvancedSearchLanguageOption[]],\n date: this.fb.group(\n {\n from: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n to: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n },\n { validators: validateDateRangeFields() },\n ),\n limitResults: this.fb.group({\n peerReviewed: [false],\n }),\n expandResults: this.fb.group({\n applyEquivalentSubjects: [false],\n fullText: [false],\n }),\n });\n\n protected isSubmitted = false;\n protected advancedSearchOptions = ADVANCED_SEARCH_OPTIONS;\n protected advancedSearchFieldMap = ADVANCED_SEARCH_FIELD_MAP;\n protected advancedSearchQualifierMap = ADVANCED_SEARCH_QUALIFIER_MAP;\n\n get queries() {\n return this.advancedSearchForm.controls.queries;\n }\n get types() {\n return this.advancedSearchForm.controls.types;\n }\n get collections() {\n return this.advancedSearchForm.controls.collections;\n }\n get languages() {\n return this.advancedSearchForm.controls.languages;\n }\n get from() {\n return this.advancedSearchForm.controls.date.controls.from;\n }\n get to() {\n return this.advancedSearchForm.controls.date.controls.to;\n }\n get peerReviewed() {\n return this.advancedSearchForm.controls.limitResults.controls.peerReviewed;\n }\n get fullText() {\n return this.advancedSearchForm.controls.expandResults.controls.fullText;\n }\n get applyEquivalentSubjects() {\n return this.advancedSearchForm.controls.expandResults.controls.applyEquivalentSubjects;\n }\n\n /**\n * Add a query to `queries` `FormArray`. This FormGroup has an additional `boolean` control.\n */\n protected addQuery = () => {\n this.queries.push(\n this.fb.group({\n boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0] as AdvancedSearchBooleanOption],\n field: [\n ADVANCED_SEARCH_OPTIONS.fields[0] as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n ],\n qualifier: [\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n ADVANCED_SEARCH_OPTIONS.localFields[0]\n ][0] as AdvancedSearchQualifierOption,\n ],\n query: ['', Validators.required],\n }),\n );\n this.syncUpFieldAndQualifier(this.queries.at(-1), this.config.scope);\n };\n\n protected removeQuery = (i: number) => {\n this.queries.removeAt(i);\n };\n\n /**\n * Prepares appropriate query params before performing a local advanced search.\n */\n protected doLocalAdvancedSearch = () => {\n this.doAdvancedSearch({\n localAdvancedSearch: {\n ...this.config.localAdvancedSearch,\n creationDate: this.gatherToAndFromValues(),\n selectedLanguages: this.languages.value,\n selectedResourceTypes: this.types.value,\n selectedCollections: this.collections.value,\n },\n });\n };\n\n /**\n * Prepares appropriate query params before performing an external advanced search.\n */\n protected doExternalAdvancedSearch = () => {\n this.doAdvancedSearch({\n externalAdvancedSearch: {\n ...this.config.externalAdvancedSearch,\n datePublished: this.gatherToAndFromValues(),\n selectedLanguages: this.languages.value,\n limitResults: {\n peerReviewed: this.peerReviewed.value,\n },\n expandResults: {\n applyEquivalentSubjects: this.applyEquivalentSubjects.value,\n fullText: this.fullText.value,\n },\n },\n });\n };\n\n /**\n * Compares 'from' and 'to' to ensure 'to' is >= to 'from', else swaps them.\n */\n private gatherToAndFromValues = () => {\n const from = this.from.value\n ? parseInt(this.from.value) <= parseInt(this.to.value)\n ? this.from.value\n : this.to.value\n : '';\n const to = this.to.value\n ? parseInt(this.to.value) >= parseInt(this.from.value)\n ? this.to.value\n : this.from.value\n : '';\n return { from, to };\n };\n\n /**\n * Verifies that there is a query to use, gathers all other query parameters needed, then performs an advanced search via `router.navigate()`.\n * @param {Record<string, string>} queryParams base set of query params to navigate with\n */\n private doAdvancedSearch = (updatedProps: Partial<SearchConfig>): void => {\n this.isSubmitted = true;\n // Don't perform a search unless there is at least one query\n if (\n this.queries.at(0).controls.query.invalid &&\n !this.queries.value.some((v) => !!v.query)\n ) {\n this.showSearchValidationToolTip();\n return;\n }\n // Don't perform a search unless the date form is valid\n if (this.advancedSearchForm.controls.date.invalid) return;\n\n this.advancedSearch.emit({\n ...this.config,\n ...updatedProps,\n advancedSearchQueryRows: this.queries.value as AdvancedSearchQueryRow[],\n });\n this.isSubmitted = false;\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n\n private setupForm = () => {\n this.queries.clear();\n // Always keep at least two queries available\n this.addQuery();\n this.addQuery();\n\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.queries\n .at(0)\n .controls.query.valueChanges.pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => (this.inputTooltip.disabled = true)),\n );\n\n // If no `q{NUM}` use `q` for first query\n if (!this.config.advancedSearchQueryRows.length)\n this.queries.at(0).controls.query.setValue(this.config.q);\n\n this.config.advancedSearchQueryRows.forEach((queryRow, i) => {\n // Add a query form control for every q{num} key after the first.\n let queryControl = null;\n if (i === 0 || i === 1) {\n queryControl = this.queries.at(i);\n } else {\n this.addQuery();\n queryControl = this.queries.at(-1);\n }\n\n // Add the query value.\n queryControl.controls.query.setValue(queryRow.query);\n\n // Add the field value, if available.\n if (\n queryRow.field && // Only set the field if the value belongs to the current scope\n (isAdvancedSearchFieldOption(queryRow.field) ||\n (this.config.scope === 'local'\n ? isAdvancedSearchLocalFieldOption(queryRow.field)\n : isAdvancedSearchExternalFieldOption(queryRow.field)))\n )\n queryControl.controls.field.setValue(queryRow.field);\n else queryControl.controls.field.setValue(this.advancedSearchOptions.fields[0]);\n\n // Add the qualifier value, if available and a local search.\n if (this.config.scope === 'local' && queryRow.qualifier)\n queryControl.controls.qualifier.setValue(\n queryRow.qualifier ||\n this.advancedSearchOptions.qualifiers[\n queryControl.controls.field.value as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n ],\n );\n\n // Add the boolean, if available and not the first query.\n if (i !== 0 && queryRow.boolean)\n queryControl.controls.boolean.setValue(queryRow.boolean);\n });\n if (this.config.scope === 'local') {\n this.types.setValue(this.config.localAdvancedSearch.selectedResourceTypes);\n this.collections.setValue(this.config.localAdvancedSearch.selectedCollections);\n this.languages.setValue(\n this.config.localAdvancedSearch.selectedLanguages as AdvancedSearchLanguageOption[],\n );\n this.from.setValue(this.config.localAdvancedSearch.creationDate.from);\n this.to.setValue(this.config.localAdvancedSearch.creationDate.to);\n } else {\n this.languages.setValue(\n this.config.externalAdvancedSearch\n .selectedLanguages as AdvancedSearchLanguageOption[],\n );\n this.from.setValue(this.config.externalAdvancedSearch.datePublished.from);\n this.to.setValue(this.config.externalAdvancedSearch.datePublished.to);\n this.peerReviewed.setValue(\n this.config.externalAdvancedSearch.limitResults.peerReviewed,\n );\n this.applyEquivalentSubjects.setValue(\n this.config.externalAdvancedSearch.expandResults.applyEquivalentSubjects,\n );\n this.fullText.setValue(this.config.externalAdvancedSearch.expandResults.fullText);\n }\n };\n}\n","<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"ss-adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"ss-adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"ss-select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"ss-hidden\">Field {{ queryIndex }}</label>\n <div class=\"ss-select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (field of advancedSearchOptions.fields; track field) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n <optgroup\n [label]=\"(config.scope === 'external' ? 'Online' : 'Library') + ' Specific'\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </optgroup>\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"ss-hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"ss-select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"ss-hidden\">Query {{ queryIndex }}</label>\n <div class=\"ss-query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"ss-row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"ss-other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"advancedSearchOptions.types[config.institution]\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"advancedSearchOptions.collections[config.institution]\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Creation Date' }\"\n ></ng-container>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"ss-checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"ss-checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox [isChecked]=\"peerReviewed.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"ss-checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply equivalent subjects -->\n <label class=\"ss-checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox [isChecked]=\"applyEquivalentSubjects.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"ss-checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox [isChecked]=\"fullText.value\"></lib-checkbox>\n <span class=\"ss-label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Date Published' }\"\n ></ng-container>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n }\n </div>\n <div id=\"advSearchFooter\">\n <a [href]=\"'https://lib.byu.edu/browse/' + config.institution\">Alphabetic Browse</a>\n <button\n class=\"pill-btn--components\"\n [ngClass]=\"{\n ensign: config.institution === 'ensign',\n }\"\n type=\"submit\"\n data-testid=\"advSearchSubmitButton\"\n >\n Search\n </button>\n </div>\n</form>\n\n<ng-template #languageBlock>\n <div>\n <h4>Language</h4>\n <lib-multi-select\n [label]=\"'language'\"\n [allOptions]=\"advancedSearchOptions.languages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-multi-select>\n </div>\n</ng-template>\n<ng-template #dateBlock let-header=\"header\">\n <div id=\"dateOptions\" class=\"external\">\n <h4>{{ header }}</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n</ng-template>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { startWith, filter } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { SearchConfig } from '../models/search-config.model';\n\n@Component({\n selector: 'lib-ss-simple-search',\n standalone: true,\n imports: [MatTooltipModule, MatIconModule, ReactiveFormsModule, CommonModule],\n templateUrl: './simple-search.component.html',\n styleUrls: ['./simple-search.component.scss'],\n})\nexport class SimpleSearchComponent implements OnInit, OnDestroy {\n private readonly fb = inject(FormBuilder);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n private subscription = new Subscription();\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n protected isSubmitted = false;\n protected searchForm = this.fb.nonNullable.group({\n simpleQuery: ['', Validators.required],\n });\n\n get simpleQuery() {\n return this.searchForm.get('simpleQuery') as FormControl;\n }\n\n ngOnInit() {\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => {\n this.inputTooltip.disabled = true;\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n protected emitSimpleSearch = () => {\n this.isSubmitted = true;\n // Don't perform a search unless there is a query\n if (this.simpleQuery.invalid) {\n this.showSearchValidationToolTip();\n return;\n }\n this.simpleSearch.emit({ ...this.config, q: this.simpleQuery.value });\n this.isSubmitted = false;\n };\n\n protected clearQuery = () => {\n this.simpleQuery.setValue('');\n this.clearSimpleSearch.emit();\n };\n\n private setupForm = () => {\n this.simpleQuery.setValue(\n this.config.q || this.config.advancedSearchQueryRows[0]?.query || '',\n );\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n}\n","<div class=\"ss-container\">\n <form [formGroup]=\"searchForm\" (submit)=\"emitSimpleSearch()\" data-testid=\"searchForm\">\n <input\n #searchInput\n data-testid=\"searchInput\"\n id=\"q\"\n name=\"q\"\n type=\"text\"\n required\n aria-required=\"true\"\n aria-label=\"search input\"\n autocapitalize=\"off\"\n formControlName=\"simpleQuery\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && simpleQuery.invalid\"\n />\n <label for=\"q\" data-testid=\"label\">{{\n config.scope === 'local'\n ? 'Books, media, special collections and more'\n : 'Ebooks, articles, journals, databases, streaming media and more'\n }}</label>\n <button\n type=\"submit\"\n aria-label=\"search\"\n data-testid=\"searchBtn\"\n [ngClass]=\"{ ensign: config.institution === 'ensign' }\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> search </span>\n </button>\n </form>\n\n @if (simpleQuery.value) {\n <button id=\"clear\" (click)=\"clearQuery()\" data-testid=\"clearBtn\">\n <span class=\"material-symbols-outlined ss-icon\"> cancel </span>\n </button>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ADVANCED_SEARCH_FIELD_MAP } from '../constants';\nimport {\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\n\n@Pipe({\n name: 'advancedFieldWarning',\n standalone: true,\n})\nexport class AdvancedFieldWarningPipe implements PipeTransform {\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n let warning = '';\n for (const row of queryRows) {\n if (\n row.field &&\n !isAdvancedSearchFieldOption(row.field as string) &&\n (scope === 'local'\n ? !isAdvancedSearchLocalFieldOption(row.field as string)\n : !isAdvancedSearchExternalFieldOption(row.field as string))\n ) {\n if (!warning)\n warning = `Searching by <b>${\n ADVANCED_SEARCH_FIELD_MAP[row.field]\n }</b> is not an option for this tab. <b>${\n ADVANCED_SEARCH_FIELD_MAP['any']\n }</b> has replaced it.`;\n else {\n warning += '<br />All other unavailable options have also been replaced.';\n return warning;\n }\n }\n }\n return warning;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SsAdvancedQueriesPipe } from './pipes/advanced-queries.pipe';\nimport { libHbllExpandCollapse } from '../animations/animations';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { SimpleSearchComponent } from './simple-search/simple-search.component';\nimport { SearchScope } from './models/search-scope.model';\nimport { AdvancedFieldWarningPipe } from './pipes/advanced-field-warning.pipe';\nimport { FieldByScopePipe } from './pipes/field-by-scope.pipe';\nimport { SearchConfig } from './models/search-config.model';\n\n@Component({\n selector: 'lib-ss-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n SsAdvancedQueriesPipe,\n AdvancedSearchComponent,\n SimpleSearchComponent,\n AdvancedFieldWarningPipe,\n ],\n providers: [FieldByScopePipe],\n animations: [libHbllExpandCollapse],\n templateUrl: './ss-search-bar.component.html',\n styleUrl: './ss-search-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SsSearchBarComponent {\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: string) {\n this._config = JSON.parse(config) as SearchConfig;\n }\n get config(): SearchConfig {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearchClosed = new EventEmitter<SearchConfig>();\n @Output() advancedSearchOpen = new EventEmitter<SearchConfig>();\n @Output() tabChange = new EventEmitter<SearchConfig>();\n @ViewChild('barWrapperRef') private barWrapperRef!: ElementRef;\n protected heightOfContainer = 0;\n\n protected emitClearSimpleSearch = () => {\n this.clearSimpleSearch.emit({\n ...this.config,\n q: '',\n advancedSearchQueryRows: [],\n });\n };\n\n protected emitSimpleSearch = (updatedProps: Partial<SearchConfig>) => {\n this.simpleSearch.emit({\n ...this.config,\n ...updatedProps,\n });\n };\n\n protected emitAdvancedSearchClosed = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchClosed.emit({\n ...this.config,\n showAdvancedSearch: false,\n showAdvancedSearchAsText: false,\n });\n };\n\n protected emitAdvancedSearch = (config: SearchConfig) => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...config,\n showAdvancedSearchAsText: true,\n showAdvancedSearch: true,\n });\n };\n\n protected emitAdvancedSearchOpen = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchOpen.emit({\n ...this.config,\n showAdvancedSearchAsText: false,\n showAdvancedSearch: true,\n });\n };\n\n protected emitTabChange = (newScope: SearchScope) => {\n this.tabChange.emit({ ...this.config, scope: newScope });\n };\n}\n","<div id=\"ssSearchBar\">\n <div class=\"tabs\">\n <button\n (click)=\"emitTabChange('local')\"\n class=\"ss-tab\"\n id=\"localTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'local',\n ensign: config.institution === 'ensign' && config.scope !== 'local',\n }\"\n data-testid=\"localTab\"\n [disabled]=\"config.scope === 'local'\"\n >\n In the Library\n </button>\n @if (config.institution !== 'law') {\n <div class=\"tab-spacer\"></div>\n <button\n (click)=\"emitTabChange('external')\"\n class=\"ss-tab\"\n id=\"externalTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'external',\n ensign: config.institution === 'ensign' && config.scope !== 'external',\n }\"\n data-testid=\"externalTab\"\n [disabled]=\"config.scope === 'external'\"\n >\n Available Online\n </button>\n }\n <div class=\"tab-spacer full\"></div>\n </div>\n <div\n class=\"ss-bar-wrapper\"\n #barWrapperRef\n [@libHbllExpandCollapse]=\"{\n value: config.showAdvancedSearch ? (!config.showAdvancedSearchAsText ? 1 : 2) : 3,\n params: { startHeight: heightOfContainer },\n }\"\n >\n <div class=\"ss-bar-content\" data-testid=\"searchForm\">\n @if (!config.showAdvancedSearch) {\n <div class=\"ss-search-bar\">\n <lib-ss-simple-search\n [config]=\"config\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n ></lib-ss-simple-search>\n </div>\n } @else {\n <button\n id=\"advSearchCloseBtn\"\n (click)=\"emitAdvancedSearchClosed()\"\n data-testid=\"advSearchCloseBtn\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> close </span>\n </button>\n <div id=\"advSearchWrapper\">\n @if (config.showAdvancedSearch && !config.showAdvancedSearchAsText) {\n <div>\n <lib-ss-advanced-search\n [config]=\"config\"\n (advancedSearch)=\"emitAdvancedSearch($event)\"\n ></lib-ss-advanced-search>\n </div>\n } @else {\n <div\n class=\"ss-adv-search-text\"\n data-testid=\"advancedSearchText\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | ssAdvancedQueries: config.scope\n \"\n ></div>\n <div\n [innerHTML]=\"\n config.advancedSearchQueryRows | advancedFieldWarning: config.scope\n \"\n ></div>\n }\n </div>\n }\n </div>\n @if (!config.showAdvancedSearch || config.showAdvancedSearchAsText) {\n <button\n data-testid=\"toggleAdvSearchButton\"\n class=\"ss-adv-search-btn\"\n id=\"advSearchBtn\"\n (click)=\"emitAdvancedSearchOpen()\"\n >\n Advanced\n <span class=\"material-symbols-outlined ss-icon\"> keyboard_arrow_down </span>\n </button>\n }\n </div>\n</div>\n","const searchScopeValues = ['local', 'external'] as const;\nexport type SearchScope = (typeof searchScopeValues)[number];\nexport const isSearchScope = (scope: string): scope is SearchScope =>\n searchScopeValues.includes(scope as SearchScope);\n","/*\n * Public API Surface of components\n */\n\nexport * from './lib/hbll-header/hbll-header.component';\nexport * from './lib/pipes/hbll-item-type-icon.pipe';\nexport * from './lib/hbll-footer/hbll-footer.component';\nexport * from './lib/header-with-impersonation/header-with-impersonation.component';\nexport * from './lib/impersonate-modal/impersonate-modal.component';\nexport * from './lib/impersonation-banner/impersonation-banner.component';\nexport * from './lib/ss-search-bar/ss-search-bar.component';\nexport * from './lib/ss-search-bar/models/advanced-search.model';\nexport * from './lib/ss-search-bar/models/search-scope.model';\nexport * from './lib/ss-search-bar/models/search-config.model';\nexport { getUserStatusFromRoles } from './lib/contact-utils';\nexport {\n ADVANCED_SEARCH_QUALIFIER_MAP,\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n} from './lib/ss-search-bar/constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","switchMap","map","i1.FieldByScopePipe","i2","i3"],"mappings":"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"}
|