@byuhbll/components 5.1.0-beta.0 → 5.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/ss-search-bar/models/search-config.model.mjs +1 -1
- package/esm2022/lib/ss-search-bar/simple-search/simple-search.component.mjs +58 -12
- package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +6 -3
- package/fesm2022/byuhbll-components.mjs +61 -12
- package/fesm2022/byuhbll-components.mjs.map +1 -1
- package/lib/ss-search-bar/models/search-config.model.d.ts +1 -0
- package/lib/ss-search-bar/simple-search/simple-search.component.d.ts +11 -3
- package/lib/ss-search-bar/ss-search-bar.component.d.ts +3 -2
- package/package.json +1 -1
|
@@ -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/pipes/truncate.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/lib/status-button/status-button.component.ts","../../../projects/components/src/lib/status-button/status-button.component.html","../../../projects/components/src/lib/snackbar/snackbar.component.ts","../../../projects/components/src/lib/snackbar/snackbar.component.html","../../../projects/components/src/lib/snackbar/snackbar.service.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","import { Component, ElementRef, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { libHbllExpandCollapse } 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],\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 data-testid=\"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 data-testid=\"content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, EventEmitter, input, Output, Input } 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 @Output() hoverStarted = new EventEmitter<void>();\n\n // Public to be called by parent comp.\n closeDropdown = () => (this.isOpen = false);\n\n @Input() isInteracting: boolean = false;\n protected isOpen = false;\n private hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly DROPDOWN_OPEN_DELAY_MS = 300;\n\n protected handleClick = () => {\n if (!this.isOpen) this.openEvent.emit(this.title());\n this.isOpen = !this.isOpen;\n };\n\n handleMouseEnter(): void {\n if (this.isSmallScreen()) return;\n\n if (this.isInteracting) {\n this.isOpen = true;\n } else {\n this.hoverTimeout = setTimeout(() => {\n this.isOpen = true;\n this.hoverStarted.emit();\n }, this.DROPDOWN_OPEN_DELAY_MS);\n }\n }\n\n handleMouseLeave(): void {\n if (this.hoverTimeout !== null) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n\n this.isOpen = false;\n }\n}\n","<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\" aria-haspopup=\"true\">\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 <div [class.collapsed]=\"!isOpen\" [attr.inert]=\"!isOpen ? true : null\" class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\" [attr.inert]=\"!isOpen ? true : null\">\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 isInteractingWithNavbar: boolean = false;\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 handleHoverStarted(): void {\n this.isInteractingWithNavbar = true;\n }\n\n handleNavbarMouseLeave(): void {\n this.isInteractingWithNavbar = false;\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: '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 label: 'Special Collections',\n url: `${this.mainSiteBaseUrl()}/special-collections`,\n },\n {\n label: 'Digital Collections',\n url: `${this.mainSiteBaseUrl()}/collections/digital`,\n },\n ],\n },\n otherSections: [\n {\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 {\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: 'https://lib.byu.edu/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 Viewing 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: 'Check out and Renew',\n url: `${this.mainSiteBaseUrl()}/about/checkout-privileges`,\n },\n {\n label: 'Holds',\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 auxiliaryLink: {\n label: 'See all Material Services',\n url: `${this.mainSiteBaseUrl()}/services/?categories=obtaining-and-reserving-materials`,\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: 'Chat',\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 (mouseleave)=\"handleNavbarMouseLeave()\"\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 [isInteracting]=\"isInteractingWithNavbar\"\n (openEvent)=\"handleDropdownOpenEvent($event)\"\n (hoverStarted)=\"handleHoverStarted()\"\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 tabindex=\"0\">{{ navInfo.mainSection.title }}</h2>\n <div class=\"hbll-header-main hbll-header-links\">\n @for (link of navInfo.mainSection.links; track link.label) {\n <a [href]=\"link.url\">\n {{ link.label }}\n </a>\n }\n </div>\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 tabindex=\"0\">{{ section.title }}</h3>\n <div class=\"hbll-header-links\">\n @for (link of section.links; track link.label) {\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 }\n </div>\n @if (section.auxiliaryLink) {\n <a\n class=\"hbll-header-see-all\"\n [href]=\"section.auxiliaryLink.url\"\n >\n {{ section.auxiliaryLink.label }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n chevron_right\n </span>\n </a>\n }\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), 'h:mm a');\n } catch (e) {\n return newTime;\n }\n if (newTime === '12:00 AM') 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 { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'truncate', standalone: true })\nexport class TruncatePipe implements PipeTransform {\n transform(value: string | null | undefined, max = 32, suffix = '…'): string {\n if (!value) return '';\n const s = String(value).trim();\n return s.length > max ? s.slice(0, max) + suffix : s;\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 } 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';\nimport { TruncatePipe } from './pipes/truncate.pipe';\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 TruncatePipe,\n ],\n templateUrl: './hbll-header.component.html',\n styleUrl: './hbll-header.component.scss',\n animations: [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 @ViewChild('navWrapper') navWrapper!: ElementRef<HTMLElement>;\n @ViewChild('backdrop') backdrop!: ElementRef<HTMLElement>;\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 Promise.resolve().then(() => 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 const navWrapper = this.navWrapper?.nativeElement;\n const backdrop = this.backdrop?.nativeElement;\n if (navWrapper) {\n this.r2.addClass(navWrapper, 'is-closing');\n this.r2.addClass(backdrop, 'is-closing');\n navWrapper.addEventListener(\n 'animationend',\n () => {\n this.showNavBar = false;\n this.r2.removeClass(navWrapper, 'is-closing');\n this.r2.removeClass(backdrop, 'is-closing');\n this.r2.removeStyle(this.doc.body, 'overflow');\n },\n { once: true },\n );\n }\n };\n\n @HostListener('window:resize', ['$event'])\n private onResize() {\n this.setMobileSidebarHeight();\n }\n\n private setMobileSidebarHeight = () => {\n const headerHeight = this.header.nativeElement.getBoundingClientRect().height;\n this.mobileSidebarHeight = window.innerHeight - headerHeight;\n };\n\n focusMainContent(): void {\n const mainContent = document.querySelector('.main-content') as HTMLElement;\n\n if (mainContent) {\n mainContent.focus();\n } else {\n const mainContentAria = document.querySelector(\n '[aria-label=\"Main content area\"]',\n ) as HTMLElement;\n\n if (mainContentAria) {\n mainContentAria.focus();\n }\n }\n }\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 <button (click)=\"focusMainContent()\" class=\"skip-link\">Skip to main content</button>\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:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">8:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4:00 p.m. - 8:00 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 [attr.title]=\"exception.exception_title\"\n [attr.aria-label]=\"exception.exception_title\">\n {{ exception.exception_title | truncate:32:'...' }}\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:00 a.m. - 11:00 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m. - 2:00 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-left-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\" [class.collapsed]=\"!showNavBar\">\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 <div\n #navWrapper\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [class.open]=\"showNavBar\"\n [attr.inert]=\"!showNavBar ? true : null\"\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 #backdrop\n (click)=\"closeSidebarNav()\"\n class=\"hbll-nav-backdrop\"\n [class.open]=\"showNavBar\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\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: 'description',\n audio: 'headphones',\n audiobook: 'headphones',\n 'blu-ray': 'album',\n book: 'book_2',\n 'book-chapter': 'book_6',\n 'book-review': 'reviews',\n broadside: 'image',\n calculator: 'calculate',\n cassette: 'voicemail_2',\n cd: 'adjust',\n 'cd-rom': 'adjust',\n clothing: 'apparel',\n 'clothing-pattern': 'content_cut',\n collection: 'home_storage',\n conference: 'podium',\n 'conference-proceeding': 'podium',\n cuneiform: 'aod_tablet',\n curricula: 'aod_tablet',\n database: 'stacks',\n dataset: 'dataset',\n diary: 'book_3',\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': 'account_balance',\n 'government-novel': 'book_4',\n guide: 'travel_explore',\n image: 'image',\n index: 'list',\n journal: 'book_3',\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: 'file_map',\n media: 'play_circle',\n microfiche: 'theaters',\n microfilm: 'theaters',\n microform: 'theaters',\n model: 'bid_landscape',\n movie: 'movie',\n multimedia: 'play_circle',\n 'music-recording': 'album',\n 'musical-recording': 'album',\n newsletter: 'article',\n newspaper: 'newspaper',\n 'newspaper-article': 'full_coverage',\n ostracon: 'description',\n other: 'description',\n painting: 'palette',\n palmleaf: 'eco',\n pamphlet: 'map',\n papyrus: 'article',\n performance: 'music_note',\n periodical: 'two_pager',\n photograph: 'photo_camera_back',\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: 'queue_music',\n script: 'article',\n serial: 'article',\n slide: 'slideshow',\n software: 'code',\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: 'videocam',\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 = (\n payload: ContactPayload,\n byuid: string,\n http: HttpClient,\n apiBaseUrl: string,\n) => submitContactForm({ ...payload, byuId: byuid }, 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 } & { byuId?: 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, ElementRef, inject, Input, ViewChild } 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 private readonly footerSkipTargetId = 'hbllChatBtn';\n @ViewChild('emailDialog') private emailDialog!: ElementRef;\n // TODO: Convert these to signal inputs: https://github.com/angular/angular/issues/57755\n @Input() mainsitebaseurl = 'https://lib.byu.edu';\n @Input() myaccountapibaseuri = 'https://api.lib.byu.edu/v1';\n @Input() byuid: string = '';\n\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\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\n submitEmail(\n this.emailForm.value as ContactPayload,\n this.byuid,\n this.http,\n this.myaccountapibaseuri,\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 // Expose this to be called from consuming applications.\n openEmailForm = (formValues?: typeof this.emailForm.value) => {\n if (formValues) {\n if (formValues.name) this.emailForm.controls.name.setValue(formValues.name);\n if (formValues.email) this.emailForm.controls.email.setValue(formValues.email);\n if (formValues.message) this.emailForm.controls.message.setValue(formValues.message);\n if (formValues.status) this.emailForm.controls.status.setValue(formValues.status);\n }\n this.emailDialog.nativeElement.showModal();\n };\n\n skipFooter(): void {\n const skipTarget = document.getElementById(this.footerSkipTargetId) as HTMLElement;\n if (skipTarget) {\n skipTarget.focus();\n } else {\n console.warn('Skip footer target not found on the page.');\n }\n }\n}\n","<footer>\n <div class=\"hbll-footer-wrapper\">\n <button class=\"skip-link-footer\" (click)=\"skipFooter()\">Skip footer</button>\n <div class=\"hbll-footer-links\">\n <section aria-labelledby=\"footerContactHeading\">\n <h3 id=\"footerContactHeading\">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 <a href=\"tel:801-422-6061\">\n <span class=\"material-symbols-outlined hbll-footer-icon\">\n phone_in_talk </span\n > <strong>Call</strong> (801) 422-6061\n </a>\n </li>\n <li>\n <a href=\"sms:801-623-6838\">\n <span class=\"material-symbols-outlined hbll-footer-icon\"> sms </span\n > <strong>Text</strong> (801) 623-6838\n </a>\n </li>\n <li>\n <button\n (click)=\"emailDialog.showModal()\"\n data-testid=\"emailUsBtn\"\n style=\"padding: 4px\"\n >\n <span class=\"material-symbols-outlined hbll-footer-icon\"> mail </span\n > \n <strong>Email us</strong>\n </button>\n </li>\n </ul>\n </section>\n <section aria-labelledby=\"footerResourcesHeading\">\n <h3 id=\"footerResourcesHeading\">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 <li>\n <a target=\"_blank\" href=\"https://hr.lib.byu.edu/byu-library-jobs\"\n >Employment Opportunities</a\n >\n </li>\n </ul>\n </section>\n <section aria-labelledby=\"footerFriendsHeading\">\n <h3 id=\"footerFriendsHeading\">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 aria-labelledby=\"footerConnectHeading\">\n <h3 id=\"footerConnectHeading\">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 <ul>\n <li>\n <a href=\"https://lib.byu.edu/announcements\"\n ><span class=\"material-symbols-outlined social-icon\"> featured_seasonal_and_gifts</span\n > Explore what’s new\n </a>\n </li>\n </ul>\n </section>\n </div>\n <section class=\"hbll-footer-bottom\" aria-label=\"Bottom-most part of the footer\">\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 <span id=\"teconsent\"></span>\n </div>\n </section>\n </div>\n <div id=\"consent-banner\"></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=\"hbllFooterEmailQuestionComment\">\n Question or comment <span class=\"hbll-footer-email-required\">*</span>\n </label>\n <textarea\n id=\"hbllFooterEmailQuestionComment\"\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 { catchError, 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/**\n * @todo: Refactor: my recommendation would be to allow a user to be passed into this component via an input instead of the users coming from an API call based on the JWT passed in. This might look something like:\n * ```\n * @Input() user: {\n * primary_position_type_display?: string\n * undergrad_graduate_status?: string\n * restricted?: boolean\n * is_retired?: boolean\n * is_employee?: boolean\n * primary_position_type?: string\n * }\n * ```\n * Accepting all properties that are used in this component without needing to bring in the user type explicitly. Or the properties on this user object could be made even more general as to not be tied at all to any specific type.\n *\n * Something similar could be done with `accountStatuses`. I'd recommend the consuming application prepare arrays of strings to be passed into inputs of `accountsOk`, `accountsBlocked`, and `accountsNone`, that are then passed into and displayed in the template.\n *\n * The idea behind these revisions is that there is less business logic baked into this component, as it's role is just one of presentation. It will also avoid multiple API calls for the same data in our big Angular apps.\n *\n * Best of luck,\n * Paul\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 myAccountApiBaseUri = input('https://api.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.user()?.email_address ?? ''],\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>(\n urlcat(this.myAccountApiBaseUri(), PATRON_ACCOUNTS_PATH),\n {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\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 catchError(() => {\n return of(null);\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 personBaseUri = input('https://apps.lib.byu.edu/person/v2/');\n myAccountApiBaseUri = input('https://api.lib.byu.edu/v1');\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 [personBaseUri]=\"personBaseUri()\"\n [myAccountApiBaseUri]=\"myAccountApiBaseUri()\"\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 HostListener,\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, debounceTime, distinctUntilChanged } 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 @Input() suggestions: string[] = [];\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n @Output() suggest = new EventEmitter<string>();\n protected isSubmitted = false;\n protected showSuggestions = false;\n protected selectedSuggestionIndex = -1;\n private skipNextSuggest = 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 // Emit suggestion requests with debounce\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n filter((value) => value.trim().length > 0),\n )\n .subscribe((value) => {\n if (this.skipNextSuggest) {\n this.skipNextSuggest = false;\n return;\n }\n this.suggest.emit(value);\n this.showSuggestions = true;\n this.selectedSuggestionIndex = -1;\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 this.hideSuggestions();\n };\n\n protected selectSuggestion = (suggestion: string) => {\n this.skipNextSuggest = true;\n this.simpleQuery.setValue(suggestion);\n this.hideSuggestions();\n this.emitSimpleSearch();\n };\n\n protected onInputKeydown = (event: KeyboardEvent) => {\n if (!this.showSuggestions || this.suggestions.length === 0) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.min(\n this.selectedSuggestionIndex + 1,\n this.suggestions.length - 1,\n );\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, -1);\n break;\n case 'Enter':\n if (this.selectedSuggestionIndex >= 0) {\n event.preventDefault();\n this.selectSuggestion(this.suggestions[this.selectedSuggestionIndex]);\n }\n break;\n case 'Escape':\n this.hideSuggestions();\n break;\n }\n };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (!target.closest('.ss-container')) {\n this.hideSuggestions();\n }\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 private hideSuggestions = () => {\n this.showSuggestions = false;\n this.selectedSuggestionIndex = -1;\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 (keydown)=\"onInputKeydown($event)\"\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\n @if (showSuggestions && suggestions.length > 0) {\n <ul class=\"suggestions-list\" role=\"listbox\" data-testid=\"suggestionsList\">\n @for (suggestion of suggestions; track suggestion; let i = $index) {\n <li\n class=\"suggestion-item\"\n [class.selected]=\"i === selectedSuggestionIndex\"\n (click)=\"selectSuggestion(suggestion)\"\n (keydown.enter)=\"selectSuggestion(suggestion)\"\n (keydown.space)=\"selectSuggestion(suggestion); $event.preventDefault()\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"i === selectedSuggestionIndex\"\n data-testid=\"suggestionItem\"\n >\n {{ suggestion }}\n </li>\n }\n </ul>\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 @Input() suggestions: string[] = [];\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 @Output() suggest = new EventEmitter<string>();\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 [suggestions]=\"suggestions\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n (suggest)=\"suggest.emit($event)\"\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","import { booleanAttribute, Component, Input } from '@angular/core';\nimport { CommonModule, NgIf } from '@angular/common';\nexport type Status = 'success' | 'info' | 'warning' | 'error' | 'disabled';\n\nexport interface StatusButtonInputs {\n label: string;\n status?: Status;\n leftIcon?: string;\n rightIcon?: string;\n hideLeftIcon?: boolean;\n hideRightIcon?: boolean;\n clearVariant?: boolean;\n}\n\n/**\n * A button that indicates status with color and icon.\n * Status can be one of: 'success', 'info', 'warning', 'error', or 'disabled'.\n * Each status has a default left icon, but a custom left icon can be provided.\n * A right icon can also be provided, defaulting to 'chevron_right'.\n * The left and right icons can be hidden with the `hideLeftIcon` and `hideRightIcon` boolean inputs.\n * A label input is required.\n */\n@Component({\n selector: 'lib-status-button',\n standalone: true,\n imports: [CommonModule, NgIf],\n templateUrl: './status-button.component.html',\n styleUrl: './status-button.component.scss',\n})\nexport class StatusButtonComponent {\n private _status: Status = 'info';\n private _leftIcon = '';\n private _rightIcon = '';\n private _hideLeftIcon = false;\n private _hideRightIcon = false;\n private _clearVariant = false;\n\n @Input({ required: true }) label!: string;\n\n @Input()\n set status(value: 'success' | 'info' | 'warning' | 'error' | 'disabled') {\n this._status = value || 'info';\n }\n get status() {\n return this._status;\n }\n\n @Input()\n set leftIcon(value: string) {\n this._leftIcon = value;\n }\n get leftIcon() {\n if (this._hideLeftIcon) return '';\n return this._leftIcon || this.getDefaultLeftIcon(this._status);\n }\n\n @Input()\n set rightIcon(value: string) {\n this._rightIcon = value;\n }\n get rightIcon() {\n if (this._hideRightIcon) return '';\n return this._rightIcon || 'chevron_right';\n }\n\n @Input({ transform: booleanAttribute })\n set hideLeftIcon(value: boolean) {\n this._hideLeftIcon = value;\n }\n get hideLeftIcon() {\n return this._hideLeftIcon;\n }\n\n @Input({ transform: booleanAttribute })\n set hideRightIcon(value: boolean) {\n this._hideRightIcon = value;\n }\n get hideRightIcon() {\n return this._hideRightIcon;\n }\n\n @Input({ transform: booleanAttribute })\n set clearVariant(value: boolean) {\n this._clearVariant = value;\n }\n get clearVariant() {\n return this._clearVariant;\n }\n\n /** helper for default left icons */\n private getDefaultLeftIcon(status: typeof this._status): string {\n switch (status) {\n case 'success':\n return 'check';\n case 'info':\n return 'info';\n case 'warning':\n return 'warning';\n case 'error':\n return 'error';\n case 'disabled':\n return 'block';\n default:\n return '';\n }\n }\n}\n","<button\n type=\"button\"\n [ngClass]=\"[\n status,\n clearVariant ? 'strokeless transparent-bg' : ''\n ]\"\n>\n <span *ngIf=\"leftIcon\" class=\"icon material-symbols-outlined\">{{ leftIcon }}</span>\n {{ label }}\n <span *ngIf=\"rightIcon\" class=\"icon material-symbols-outlined\">{{ rightIcon }}</span>\n</button>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n SimpleChanges,\n OnInit,\n OnChanges,\n OnDestroy,\n booleanAttribute,\n} from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {\n StatusButtonComponent,\n Status,\n StatusButtonInputs,\n} from '../status-button/status-button.component';\n\nexport type SnackbarPurpose = 'default' | 'info' | 'success' | 'error' | 'warning';\n\nexport interface SnackbarInputs {\n purpose?: SnackbarPurpose;\n title?: string;\n description?: string;\n titleIcon?: string;\n fieldPlaceholder?: string;\n showTitle?: boolean;\n showTitleIcon?: boolean;\n titleIconFilled?: boolean;\n showClose?: boolean;\n showProgressBar?: boolean;\n showField?: boolean;\n showButton?: boolean;\n progressMs?: number;\n autoDismiss?: boolean;\n y?: number;\n right?: number;\n zIndex?: number;\n statusButtonInputs?: StatusButtonInputs;\n}\n\nconst purposeToStatusMap: Record<SnackbarPurpose, Status> = {\n default: 'info',\n info: 'info',\n success: 'success',\n error: 'error',\n warning: 'warning',\n};\n\n@Component({\n selector: 'lib-snackbar',\n standalone: true,\n imports: [NgClass, StatusButtonComponent],\n templateUrl: './snackbar.component.html',\n styleUrl: './snackbar.component.scss',\n})\nexport class SnackbarComponent implements OnInit, OnChanges, OnDestroy {\n @Input() purpose: SnackbarPurpose = 'default';\n @Input() title = 'Snackbar Title';\n @Input() description = 'Lorem ipsum';\n @Input() fieldPlaceholder = 'Placeholder';\n @Input() titleIcon: string = 'info';\n @Input({ transform: booleanAttribute }) showTitle = true;\n @Input({ transform: booleanAttribute }) showTitleIcon = true;\n @Input({ transform: booleanAttribute }) titleIconFilled = false;\n @Input({ transform: booleanAttribute }) showClose = true;\n @Input({ transform: booleanAttribute }) showProgressBar = true;\n @Input({ transform: booleanAttribute }) showField = true;\n @Input({ transform: booleanAttribute }) showButton = true;\n @Input({ transform: booleanAttribute }) autoDismiss = true;\n @Input({ transform: booleanAttribute }) visible = true;\n @Input() progressMs = 5000;\n @Input() y = 24;\n @Input() statusButtonInputs?: StatusButtonInputs;\n\n @Output() closed = new EventEmitter<void>();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() buttonClicked = new EventEmitter<void>();\n\n isOpen = false;\n\n private dismissTimer?: number;\n private readonly EXIT_MS = 300;\n\n ngOnInit(): void {\n if (this.visible) {\n // enter on next tick\n setTimeout(() => (this.isOpen = true), 0);\n this.startDismissTimer();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('visible' in changes) {\n // when parent toggles visible\n if (this.visible) {\n // becoming visible -> open + (re)start timer\n this.isOpen = false;\n setTimeout(() => (this.isOpen = true), 0);\n this.startDismissTimer();\n } else {\n // becoming hidden -> stop timers and ensure closed state\n this.clearDismissTimer();\n this.isOpen = false;\n }\n }\n }\n\n ngOnDestroy(): void {\n this.clearDismissTimer();\n }\n\n // used by the × button, done button, and auto-dismiss\n close(emitButtonClicked: boolean = false): void {\n if (!this.isOpen && !this.visible) return;\n this.clearDismissTimer();\n this.isOpen = false; // triggers exit transition\n\n // after exit animation, hide + notify\n window.setTimeout(() => {\n if (this.visible) {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n if (emitButtonClicked) {\n this.buttonClicked.emit();\n }\n this.closed.emit();\n }, this.EXIT_MS);\n }\n\n get status(): Status {\n return purposeToStatusMap[this.purpose];\n }\n\n private startDismissTimer(): void {\n if (!this.autoDismiss) return;\n this.clearDismissTimer();\n this.dismissTimer = window.setTimeout(() => this.close(), this.progressMs);\n }\n\n private clearDismissTimer(): void {\n if (this.dismissTimer) {\n clearTimeout(this.dismissTimer);\n this.dismissTimer = undefined;\n }\n }\n}\n","@if (visible) {\n <section\n class=\"snackbar\"\n [ngClass]=\"{\n 'is-default': purpose === 'default',\n 'is-info': purpose === 'info',\n 'is-success': purpose === 'success',\n 'is-error': purpose === 'error',\n 'is-warning': purpose === 'warning',\n 'is-open': isOpen,\n }\"\n role=\"status\"\n aria-live=\"polite\"\n [style.--snackbar-progress-duration]=\"progressMs + 'ms'\"\n [style.top.px]=\"y\"\n >\n <div class=\"snackbar__left\">\n @if(showTitle) {\n <div class=\"snackbar__title-row\">\n <span \n [ngClass]=\"{\n 'snackbar__title-icon': true,\n 'has-icon': showTitle && showTitleIcon\n }\"\n aria-hidden=\"true\"\n >\n @if (showTitle && showTitleIcon) {\n <i [ngClass]=\"titleIconFilled ? 'material-icons' : 'material-icons-outlined'\"\n id=\"snackbar-title-icon\"\n aria-hidden=\"true\"\n >\n {{ titleIcon }}\n </i>\n }\n </span>\n @if (showTitle) {\n <h3 class=\"snackbar__title\">{{ title }}</h3>\n }\n </div>\n }\n <p class=\"snackbar__desc\">\n {{ description }}\n </p>\n @if (showField) {\n <input class=\"snackbar__input\" type=\"text\" [placeholder]=\"fieldPlaceholder\" />\n }\n @if (showButton) {\n <lib-status-button\n label={{statusButtonInputs?.label}}\n [status]=\"status\"\n leftIcon={{statusButtonInputs?.leftIcon}}\n rightIcon={{statusButtonInputs?.rightIcon}}\n [hideLeftIcon]=\"statusButtonInputs?.hideLeftIcon\"\n [hideRightIcon]=\"statusButtonInputs?.hideRightIcon\"\n [clearVariant]=\"statusButtonInputs?.clearVariant\"\n (click)=\"close(true)\"\n ></lib-status-button>\n\n }\n </div>\n <button \n type=\"button\"\n (click)=\"close()\"\n class=\"snackbar__close\"\n aria-label=\"Dismiss\"\n [style.visibility]=\"showClose ? 'visible' : 'hidden'\"\n >\n ×\n </button>\n @if (showProgressBar) {\n <div class=\"snackbar__progress\">\n <div class=\"snackbar__progress-fill\"></div>\n </div>\n }\n </section>\n}\n","import { Injectable, ApplicationRef, EnvironmentInjector, createComponent } from '@angular/core';\nimport { SnackbarComponent, SnackbarInputs } from './snackbar.component';\nimport { StatusButtonInputs } from '../status-button/status-button.component';\n\n@Injectable({ providedIn: 'root' })\nexport class SnackbarService {\n constructor(\n private appRef: ApplicationRef,\n private env: EnvironmentInjector,\n ) {}\n\n /**\n * This open method is what consuming code will use to create a snackbar\n * @param snackbarOptions interface\n * @param anchor HTML Element, optional. The snackbar's entrance and exit animations will happen on this element's Y axis (px)\n * @returns void.\n */\n open(snackbarOptions: SnackbarInputs = {}, anchor?: HTMLElement) {\n const statusButtonInputs: StatusButtonInputs = {\n label: 'Done',\n hideLeftIcon: true,\n clearVariant: true,\n };\n const compRef = createComponent(SnackbarComponent, {\n environmentInjector: this.env,\n });\n\n const desiredY = anchor // could be clamped if above or below viewport\n ? anchor.getBoundingClientRect().top\n : snackbarOptions.y ?? 24;\n\n Object.assign(compRef.instance, {\n purpose: 'warning',\n title: 'Snackbar Title',\n description: 'Lorem ipsum is the standard dummy text in the design industry',\n titleIcon: 'info',\n fieldPlaceholder: 'Placeholder',\n showTitle: true,\n showTitleIcon: true,\n titleIconFilled: false,\n showClose: true,\n showProgressBar: true,\n showField: true,\n showButton: true,\n progressMs: 5000,\n autoDismiss: true,\n y: desiredY,\n right: 24,\n zIndex: 10000,\n visible: true,\n statusButtonInputs,\n ...snackbarOptions,\n });\n\n this.appRef.attachView(compRef.hostView);\n document.body.appendChild(compRef.location.nativeElement);\n compRef.changeDetectorRef.detectChanges();\n\n // Clamp Y after it’s in the DOM\n const margin = 8;\n const adjustY = () => {\n const host: HTMLElement =\n (compRef.location.nativeElement as HTMLElement).querySelector('section.snackbar') ??\n (compRef.location.nativeElement as HTMLElement);\n\n const h = host.offsetHeight || 0;\n const maxTop = Math.max(margin, window.innerHeight - h - margin);\n const clamped = Math.min(Math.max(desiredY, margin), maxTop);\n\n if (compRef.instance.y !== clamped) {\n compRef.instance.y = clamped;\n compRef.changeDetectorRef.detectChanges();\n }\n };\n\n // Measure on next frame (styles applied)\n const rafId = requestAnimationFrame(adjustY);\n\n // re-clamp on resize (in case viewport changes while visible)\n const onResize = () => adjustY();\n window.addEventListener('resize', onResize);\n\n // Cleanup when closed\n const sub = compRef.instance.closed.subscribe(() => {\n sub.unsubscribe();\n cancelAnimationFrame(rafId);\n window.removeEventListener('resize', onResize);\n this.appRef.detachView(compRef.hostView);\n compRef.destroy();\n });\n\n return {\n close: () => compRef.instance.close(),\n buttonClicked: compRef.instance.buttonClicked,\n };\n }\n}\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 * from './lib/snackbar/snackbar.service';\nexport * from './lib/snackbar/snackbar.component';\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';\nexport * from './lib/status-button/status-button.component';\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/pipes/truncate.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/lib/status-button/status-button.component.ts","../../../projects/components/src/lib/status-button/status-button.component.html","../../../projects/components/src/lib/snackbar/snackbar.component.ts","../../../projects/components/src/lib/snackbar/snackbar.component.html","../../../projects/components/src/lib/snackbar/snackbar.service.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","import { Component, ElementRef, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { libHbllExpandCollapse } 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],\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 data-testid=\"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 data-testid=\"content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, EventEmitter, input, Output, Input } 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 @Output() hoverStarted = new EventEmitter<void>();\n\n // Public to be called by parent comp.\n closeDropdown = () => (this.isOpen = false);\n\n @Input() isInteracting: boolean = false;\n protected isOpen = false;\n private hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly DROPDOWN_OPEN_DELAY_MS = 300;\n\n protected handleClick = () => {\n if (!this.isOpen) this.openEvent.emit(this.title());\n this.isOpen = !this.isOpen;\n };\n\n handleMouseEnter(): void {\n if (this.isSmallScreen()) return;\n\n if (this.isInteracting) {\n this.isOpen = true;\n } else {\n this.hoverTimeout = setTimeout(() => {\n this.isOpen = true;\n this.hoverStarted.emit();\n }, this.DROPDOWN_OPEN_DELAY_MS);\n }\n }\n\n handleMouseLeave(): void {\n if (this.hoverTimeout !== null) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n\n this.isOpen = false;\n }\n}\n","<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\" aria-haspopup=\"true\">\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 <div [class.collapsed]=\"!isOpen\" [attr.inert]=\"!isOpen ? true : null\" class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\" [attr.inert]=\"!isOpen ? true : null\">\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 isInteractingWithNavbar: boolean = false;\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 handleHoverStarted(): void {\n this.isInteractingWithNavbar = true;\n }\n\n handleNavbarMouseLeave(): void {\n this.isInteractingWithNavbar = false;\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: '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 label: 'Special Collections',\n url: `${this.mainSiteBaseUrl()}/special-collections`,\n },\n {\n label: 'Digital Collections',\n url: `${this.mainSiteBaseUrl()}/collections/digital`,\n },\n ],\n },\n otherSections: [\n {\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 {\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: 'https://lib.byu.edu/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 Viewing 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: 'Check out and Renew',\n url: `${this.mainSiteBaseUrl()}/about/checkout-privileges`,\n },\n {\n label: 'Holds',\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 auxiliaryLink: {\n label: 'See all Material Services',\n url: `${this.mainSiteBaseUrl()}/services/?categories=obtaining-and-reserving-materials`,\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: 'Chat',\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 (mouseleave)=\"handleNavbarMouseLeave()\"\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 [isInteracting]=\"isInteractingWithNavbar\"\n (openEvent)=\"handleDropdownOpenEvent($event)\"\n (hoverStarted)=\"handleHoverStarted()\"\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 tabindex=\"0\">{{ navInfo.mainSection.title }}</h2>\n <div class=\"hbll-header-main hbll-header-links\">\n @for (link of navInfo.mainSection.links; track link.label) {\n <a [href]=\"link.url\">\n {{ link.label }}\n </a>\n }\n </div>\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 tabindex=\"0\">{{ section.title }}</h3>\n <div class=\"hbll-header-links\">\n @for (link of section.links; track link.label) {\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 }\n </div>\n @if (section.auxiliaryLink) {\n <a\n class=\"hbll-header-see-all\"\n [href]=\"section.auxiliaryLink.url\"\n >\n {{ section.auxiliaryLink.label }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n chevron_right\n </span>\n </a>\n }\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), 'h:mm a');\n } catch (e) {\n return newTime;\n }\n if (newTime === '12:00 AM') 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 { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'truncate', standalone: true })\nexport class TruncatePipe implements PipeTransform {\n transform(value: string | null | undefined, max = 32, suffix = '…'): string {\n if (!value) return '';\n const s = String(value).trim();\n return s.length > max ? s.slice(0, max) + suffix : s;\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 } 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';\nimport { TruncatePipe } from './pipes/truncate.pipe';\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 TruncatePipe,\n ],\n templateUrl: './hbll-header.component.html',\n styleUrl: './hbll-header.component.scss',\n animations: [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 @ViewChild('navWrapper') navWrapper!: ElementRef<HTMLElement>;\n @ViewChild('backdrop') backdrop!: ElementRef<HTMLElement>;\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 Promise.resolve().then(() => 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 const navWrapper = this.navWrapper?.nativeElement;\n const backdrop = this.backdrop?.nativeElement;\n if (navWrapper) {\n this.r2.addClass(navWrapper, 'is-closing');\n this.r2.addClass(backdrop, 'is-closing');\n navWrapper.addEventListener(\n 'animationend',\n () => {\n this.showNavBar = false;\n this.r2.removeClass(navWrapper, 'is-closing');\n this.r2.removeClass(backdrop, 'is-closing');\n this.r2.removeStyle(this.doc.body, 'overflow');\n },\n { once: true },\n );\n }\n };\n\n @HostListener('window:resize', ['$event'])\n private onResize() {\n this.setMobileSidebarHeight();\n }\n\n private setMobileSidebarHeight = () => {\n const headerHeight = this.header.nativeElement.getBoundingClientRect().height;\n this.mobileSidebarHeight = window.innerHeight - headerHeight;\n };\n\n focusMainContent(): void {\n const mainContent = document.querySelector('.main-content') as HTMLElement;\n\n if (mainContent) {\n mainContent.focus();\n } else {\n const mainContentAria = document.querySelector(\n '[aria-label=\"Main content area\"]',\n ) as HTMLElement;\n\n if (mainContentAria) {\n mainContentAria.focus();\n }\n }\n }\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 <button (click)=\"focusMainContent()\" class=\"skip-link\">Skip to main content</button>\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:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">8:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4:00 p.m. - 8:00 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 [attr.title]=\"exception.exception_title\"\n [attr.aria-label]=\"exception.exception_title\">\n {{ exception.exception_title | truncate:32:'...' }}\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:00 a.m. - 11:00 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m. - 2:00 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-left-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\" [class.collapsed]=\"!showNavBar\">\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 <div\n #navWrapper\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [class.open]=\"showNavBar\"\n [attr.inert]=\"!showNavBar ? true : null\"\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 #backdrop\n (click)=\"closeSidebarNav()\"\n class=\"hbll-nav-backdrop\"\n [class.open]=\"showNavBar\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\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: 'description',\n audio: 'headphones',\n audiobook: 'headphones',\n 'blu-ray': 'album',\n book: 'book_2',\n 'book-chapter': 'book_6',\n 'book-review': 'reviews',\n broadside: 'image',\n calculator: 'calculate',\n cassette: 'voicemail_2',\n cd: 'adjust',\n 'cd-rom': 'adjust',\n clothing: 'apparel',\n 'clothing-pattern': 'content_cut',\n collection: 'home_storage',\n conference: 'podium',\n 'conference-proceeding': 'podium',\n cuneiform: 'aod_tablet',\n curricula: 'aod_tablet',\n database: 'stacks',\n dataset: 'dataset',\n diary: 'book_3',\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': 'account_balance',\n 'government-novel': 'book_4',\n guide: 'travel_explore',\n image: 'image',\n index: 'list',\n journal: 'book_3',\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: 'file_map',\n media: 'play_circle',\n microfiche: 'theaters',\n microfilm: 'theaters',\n microform: 'theaters',\n model: 'bid_landscape',\n movie: 'movie',\n multimedia: 'play_circle',\n 'music-recording': 'album',\n 'musical-recording': 'album',\n newsletter: 'article',\n newspaper: 'newspaper',\n 'newspaper-article': 'full_coverage',\n ostracon: 'description',\n other: 'description',\n painting: 'palette',\n palmleaf: 'eco',\n pamphlet: 'map',\n papyrus: 'article',\n performance: 'music_note',\n periodical: 'two_pager',\n photograph: 'photo_camera_back',\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: 'queue_music',\n script: 'article',\n serial: 'article',\n slide: 'slideshow',\n software: 'code',\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: 'videocam',\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 = (\n payload: ContactPayload,\n byuid: string,\n http: HttpClient,\n apiBaseUrl: string,\n) => submitContactForm({ ...payload, byuId: byuid }, 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 } & { byuId?: 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, ElementRef, inject, Input, ViewChild } 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 private readonly footerSkipTargetId = 'hbllChatBtn';\n @ViewChild('emailDialog') private emailDialog!: ElementRef;\n // TODO: Convert these to signal inputs: https://github.com/angular/angular/issues/57755\n @Input() mainsitebaseurl = 'https://lib.byu.edu';\n @Input() myaccountapibaseuri = 'https://api.lib.byu.edu/v1';\n @Input() byuid: string = '';\n\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\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\n submitEmail(\n this.emailForm.value as ContactPayload,\n this.byuid,\n this.http,\n this.myaccountapibaseuri,\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 // Expose this to be called from consuming applications.\n openEmailForm = (formValues?: typeof this.emailForm.value) => {\n if (formValues) {\n if (formValues.name) this.emailForm.controls.name.setValue(formValues.name);\n if (formValues.email) this.emailForm.controls.email.setValue(formValues.email);\n if (formValues.message) this.emailForm.controls.message.setValue(formValues.message);\n if (formValues.status) this.emailForm.controls.status.setValue(formValues.status);\n }\n this.emailDialog.nativeElement.showModal();\n };\n\n skipFooter(): void {\n const skipTarget = document.getElementById(this.footerSkipTargetId) as HTMLElement;\n if (skipTarget) {\n skipTarget.focus();\n } else {\n console.warn('Skip footer target not found on the page.');\n }\n }\n}\n","<footer>\n <div class=\"hbll-footer-wrapper\">\n <button class=\"skip-link-footer\" (click)=\"skipFooter()\">Skip footer</button>\n <div class=\"hbll-footer-links\">\n <section aria-labelledby=\"footerContactHeading\">\n <h3 id=\"footerContactHeading\">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 <a href=\"tel:801-422-6061\">\n <span class=\"material-symbols-outlined hbll-footer-icon\">\n phone_in_talk </span\n > <strong>Call</strong> (801) 422-6061\n </a>\n </li>\n <li>\n <a href=\"sms:801-623-6838\">\n <span class=\"material-symbols-outlined hbll-footer-icon\"> sms </span\n > <strong>Text</strong> (801) 623-6838\n </a>\n </li>\n <li>\n <button\n (click)=\"emailDialog.showModal()\"\n data-testid=\"emailUsBtn\"\n style=\"padding: 4px\"\n >\n <span class=\"material-symbols-outlined hbll-footer-icon\"> mail </span\n > \n <strong>Email us</strong>\n </button>\n </li>\n </ul>\n </section>\n <section aria-labelledby=\"footerResourcesHeading\">\n <h3 id=\"footerResourcesHeading\">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 <li>\n <a target=\"_blank\" href=\"https://hr.lib.byu.edu/byu-library-jobs\"\n >Employment Opportunities</a\n >\n </li>\n </ul>\n </section>\n <section aria-labelledby=\"footerFriendsHeading\">\n <h3 id=\"footerFriendsHeading\">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 aria-labelledby=\"footerConnectHeading\">\n <h3 id=\"footerConnectHeading\">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 <ul>\n <li>\n <a href=\"https://lib.byu.edu/announcements\"\n ><span class=\"material-symbols-outlined social-icon\"> featured_seasonal_and_gifts</span\n > Explore what’s new\n </a>\n </li>\n </ul>\n </section>\n </div>\n <section class=\"hbll-footer-bottom\" aria-label=\"Bottom-most part of the footer\">\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 <span id=\"teconsent\"></span>\n </div>\n </section>\n </div>\n <div id=\"consent-banner\"></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=\"hbllFooterEmailQuestionComment\">\n Question or comment <span class=\"hbll-footer-email-required\">*</span>\n </label>\n <textarea\n id=\"hbllFooterEmailQuestionComment\"\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 { catchError, 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/**\n * @todo: Refactor: my recommendation would be to allow a user to be passed into this component via an input instead of the users coming from an API call based on the JWT passed in. This might look something like:\n * ```\n * @Input() user: {\n * primary_position_type_display?: string\n * undergrad_graduate_status?: string\n * restricted?: boolean\n * is_retired?: boolean\n * is_employee?: boolean\n * primary_position_type?: string\n * }\n * ```\n * Accepting all properties that are used in this component without needing to bring in the user type explicitly. Or the properties on this user object could be made even more general as to not be tied at all to any specific type.\n *\n * Something similar could be done with `accountStatuses`. I'd recommend the consuming application prepare arrays of strings to be passed into inputs of `accountsOk`, `accountsBlocked`, and `accountsNone`, that are then passed into and displayed in the template.\n *\n * The idea behind these revisions is that there is less business logic baked into this component, as it's role is just one of presentation. It will also avoid multiple API calls for the same data in our big Angular apps.\n *\n * Best of luck,\n * Paul\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 myAccountApiBaseUri = input('https://api.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.user()?.email_address ?? ''],\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>(\n urlcat(this.myAccountApiBaseUri(), PATRON_ACCOUNTS_PATH),\n {\n headers: {\n Authorization: `Bearer ${this.accessTokenPayload().token}`,\n },\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 catchError(() => {\n return of(null);\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 personBaseUri = input('https://apps.lib.byu.edu/person/v2/');\n myAccountApiBaseUri = input('https://api.lib.byu.edu/v1');\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 [personBaseUri]=\"personBaseUri()\"\n [myAccountApiBaseUri]=\"myAccountApiBaseUri()\"\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 ViewChildren,\n QueryList,\n inject,\n HostListener,\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, debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { SearchConfig } from '../models/search-config.model';\nimport { SearchScope } from '../models/search-scope.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 private readonly el = inject(ElementRef);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n @ViewChildren('suggestionItem') private suggestionItems!: QueryList<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 @Input() supportedSuggestionScopes: SearchScope[] = [];\n @Input() suggestions: string[] = [];\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n @Output() suggest = new EventEmitter<SearchConfig>();\n protected isSubmitted = false;\n protected showSuggestions = false;\n protected selectedSuggestionIndex = -1;\n protected expandedSuggestions = new Set<number>();\n private skipNextSuggest = 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 this.inputTooltip.hide();\n }),\n );\n\n // Emit suggestion requests with debounce\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(debounceTime(200), distinctUntilChanged())\n .subscribe((value) => {\n // Only suggest for supported scopes\n if (!this.supportedSuggestionScopes.includes(this.config.scope)) {\n return;\n }\n if (this.skipNextSuggest) {\n this.skipNextSuggest = false;\n return;\n }\n if (value.trim().length === 0) {\n this.hideSuggestions();\n return;\n }\n this.suggest.emit({ ...this.config, q: value });\n this.showSuggestions = true;\n this.selectedSuggestionIndex = -1;\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n protected emitSimpleSearch = (isSuggestion: boolean = false) => {\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.hideSuggestions();\n this.simpleSearch.emit({\n ...this.config,\n q: this.simpleQuery.value,\n isSuggestion: isSuggestion,\n });\n this.isSubmitted = false;\n };\n\n protected clearQuery = () => {\n this.simpleQuery.setValue('');\n this.clearSimpleSearch.emit();\n this.hideSuggestions();\n };\n\n protected selectSuggestion = (suggestion: string) => {\n this.skipNextSuggest = true;\n this.simpleQuery.setValue(suggestion);\n this.hideSuggestions();\n this.emitSimpleSearch(true);\n };\n\n protected toggleExpand = (index: number, event: Event) => {\n event.stopPropagation();\n if (this.expandedSuggestions.has(index)) {\n this.expandedSuggestions.delete(index);\n } else {\n this.expandedSuggestions.add(index);\n }\n };\n\n protected onInputKeydown = (event: KeyboardEvent) => {\n if (!this.showSuggestions || this.suggestions.length === 0) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.min(\n this.selectedSuggestionIndex + 1,\n this.suggestions.length - 1,\n );\n this.scrollToSelected();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, -1);\n this.scrollToSelected();\n break;\n case 'Enter':\n if (this.selectedSuggestionIndex >= 0) {\n event.preventDefault();\n this.selectSuggestion(this.suggestions[this.selectedSuggestionIndex]);\n }\n break;\n }\n };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (!target.closest('.ss-container')) {\n this.hideSuggestions();\n }\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n if (!this.el.nativeElement.contains(event.relatedTarget)) {\n this.hideSuggestions();\n this.inputTooltip?.hide();\n }\n }\n\n private setupForm = () => {\n this.simpleQuery.setValue(\n this.config.q || this.config.advancedSearchQueryRows[0]?.query || '',\n );\n };\n\n private scrollToSelected = () => {\n const item = this.suggestionItems.toArray()[this.selectedSuggestionIndex];\n if (item) {\n item.nativeElement.scrollIntoView({ block: 'nearest' });\n }\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n\n private hideSuggestions = () => {\n this.showSuggestions = false;\n this.selectedSuggestionIndex = -1;\n this.expandedSuggestions.clear();\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 autocomplete=\"off\"\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 (keydown)=\"onInputKeydown($event)\"\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\n @if (showSuggestions && suggestions.length > 0) {\n <ul class=\"suggestions-list\" role=\"listbox\" data-testid=\"suggestionsList\">\n @for (suggestion of suggestions; track $index; let i = $index) {\n <li\n #suggestionItem\n class=\"suggestion-item\"\n [class.selected]=\"i === selectedSuggestionIndex\"\n (click)=\"selectSuggestion(suggestion)\"\n (keydown.enter)=\"selectSuggestion(suggestion)\"\n (keydown.space)=\"selectSuggestion(suggestion); $event.preventDefault()\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"i === selectedSuggestionIndex\"\n data-testid=\"suggestionItem\"\n >\n <span class=\"suggestion-text\" [title]=\"suggestion\">\n {{\n expandedSuggestions.has(i) || suggestion.length <= 500\n ? suggestion\n : (suggestion | slice: 0 : 500) + '...'\n }}\n </span>\n @if (suggestion.length > 500) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(i, $event)\"\n [attr.aria-label]=\"\n expandedSuggestions.has(i) ? 'Collapse' : 'Expand suggestion'\n \"\n >\n <span class=\"material-symbols-outlined\">\n {{ expandedSuggestions.has(i) ? 'expand_less' : 'expand_more' }}\n </span>\n </button>\n }\n </li>\n }\n </ul>\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 @Input() supportedSuggestionScopes: SearchScope[] = [];\n @Input() suggestions: string[] = [];\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 @Output() suggest = 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 [supportedSuggestionScopes]=\"supportedSuggestionScopes\"\n [suggestions]=\"suggestions\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n (suggest)=\"suggest.emit($event)\"\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","import { booleanAttribute, Component, Input } from '@angular/core';\nimport { CommonModule, NgIf } from '@angular/common';\nexport type Status = 'success' | 'info' | 'warning' | 'error' | 'disabled';\n\nexport interface StatusButtonInputs {\n label: string;\n status?: Status;\n leftIcon?: string;\n rightIcon?: string;\n hideLeftIcon?: boolean;\n hideRightIcon?: boolean;\n clearVariant?: boolean;\n}\n\n/**\n * A button that indicates status with color and icon.\n * Status can be one of: 'success', 'info', 'warning', 'error', or 'disabled'.\n * Each status has a default left icon, but a custom left icon can be provided.\n * A right icon can also be provided, defaulting to 'chevron_right'.\n * The left and right icons can be hidden with the `hideLeftIcon` and `hideRightIcon` boolean inputs.\n * A label input is required.\n */\n@Component({\n selector: 'lib-status-button',\n standalone: true,\n imports: [CommonModule, NgIf],\n templateUrl: './status-button.component.html',\n styleUrl: './status-button.component.scss',\n})\nexport class StatusButtonComponent {\n private _status: Status = 'info';\n private _leftIcon = '';\n private _rightIcon = '';\n private _hideLeftIcon = false;\n private _hideRightIcon = false;\n private _clearVariant = false;\n\n @Input({ required: true }) label!: string;\n\n @Input()\n set status(value: 'success' | 'info' | 'warning' | 'error' | 'disabled') {\n this._status = value || 'info';\n }\n get status() {\n return this._status;\n }\n\n @Input()\n set leftIcon(value: string) {\n this._leftIcon = value;\n }\n get leftIcon() {\n if (this._hideLeftIcon) return '';\n return this._leftIcon || this.getDefaultLeftIcon(this._status);\n }\n\n @Input()\n set rightIcon(value: string) {\n this._rightIcon = value;\n }\n get rightIcon() {\n if (this._hideRightIcon) return '';\n return this._rightIcon || 'chevron_right';\n }\n\n @Input({ transform: booleanAttribute })\n set hideLeftIcon(value: boolean) {\n this._hideLeftIcon = value;\n }\n get hideLeftIcon() {\n return this._hideLeftIcon;\n }\n\n @Input({ transform: booleanAttribute })\n set hideRightIcon(value: boolean) {\n this._hideRightIcon = value;\n }\n get hideRightIcon() {\n return this._hideRightIcon;\n }\n\n @Input({ transform: booleanAttribute })\n set clearVariant(value: boolean) {\n this._clearVariant = value;\n }\n get clearVariant() {\n return this._clearVariant;\n }\n\n /** helper for default left icons */\n private getDefaultLeftIcon(status: typeof this._status): string {\n switch (status) {\n case 'success':\n return 'check';\n case 'info':\n return 'info';\n case 'warning':\n return 'warning';\n case 'error':\n return 'error';\n case 'disabled':\n return 'block';\n default:\n return '';\n }\n }\n}\n","<button\n type=\"button\"\n [ngClass]=\"[\n status,\n clearVariant ? 'strokeless transparent-bg' : ''\n ]\"\n>\n <span *ngIf=\"leftIcon\" class=\"icon material-symbols-outlined\">{{ leftIcon }}</span>\n {{ label }}\n <span *ngIf=\"rightIcon\" class=\"icon material-symbols-outlined\">{{ rightIcon }}</span>\n</button>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n SimpleChanges,\n OnInit,\n OnChanges,\n OnDestroy,\n booleanAttribute,\n} from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport {\n StatusButtonComponent,\n Status,\n StatusButtonInputs,\n} from '../status-button/status-button.component';\n\nexport type SnackbarPurpose = 'default' | 'info' | 'success' | 'error' | 'warning';\n\nexport interface SnackbarInputs {\n purpose?: SnackbarPurpose;\n title?: string;\n description?: string;\n titleIcon?: string;\n fieldPlaceholder?: string;\n showTitle?: boolean;\n showTitleIcon?: boolean;\n titleIconFilled?: boolean;\n showClose?: boolean;\n showProgressBar?: boolean;\n showField?: boolean;\n showButton?: boolean;\n progressMs?: number;\n autoDismiss?: boolean;\n y?: number;\n right?: number;\n zIndex?: number;\n statusButtonInputs?: StatusButtonInputs;\n}\n\nconst purposeToStatusMap: Record<SnackbarPurpose, Status> = {\n default: 'info',\n info: 'info',\n success: 'success',\n error: 'error',\n warning: 'warning',\n};\n\n@Component({\n selector: 'lib-snackbar',\n standalone: true,\n imports: [NgClass, StatusButtonComponent],\n templateUrl: './snackbar.component.html',\n styleUrl: './snackbar.component.scss',\n})\nexport class SnackbarComponent implements OnInit, OnChanges, OnDestroy {\n @Input() purpose: SnackbarPurpose = 'default';\n @Input() title = 'Snackbar Title';\n @Input() description = 'Lorem ipsum';\n @Input() fieldPlaceholder = 'Placeholder';\n @Input() titleIcon: string = 'info';\n @Input({ transform: booleanAttribute }) showTitle = true;\n @Input({ transform: booleanAttribute }) showTitleIcon = true;\n @Input({ transform: booleanAttribute }) titleIconFilled = false;\n @Input({ transform: booleanAttribute }) showClose = true;\n @Input({ transform: booleanAttribute }) showProgressBar = true;\n @Input({ transform: booleanAttribute }) showField = true;\n @Input({ transform: booleanAttribute }) showButton = true;\n @Input({ transform: booleanAttribute }) autoDismiss = true;\n @Input({ transform: booleanAttribute }) visible = true;\n @Input() progressMs = 5000;\n @Input() y = 24;\n @Input() statusButtonInputs?: StatusButtonInputs;\n\n @Output() closed = new EventEmitter<void>();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() buttonClicked = new EventEmitter<void>();\n\n isOpen = false;\n\n private dismissTimer?: number;\n private readonly EXIT_MS = 300;\n\n ngOnInit(): void {\n if (this.visible) {\n // enter on next tick\n setTimeout(() => (this.isOpen = true), 0);\n this.startDismissTimer();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('visible' in changes) {\n // when parent toggles visible\n if (this.visible) {\n // becoming visible -> open + (re)start timer\n this.isOpen = false;\n setTimeout(() => (this.isOpen = true), 0);\n this.startDismissTimer();\n } else {\n // becoming hidden -> stop timers and ensure closed state\n this.clearDismissTimer();\n this.isOpen = false;\n }\n }\n }\n\n ngOnDestroy(): void {\n this.clearDismissTimer();\n }\n\n // used by the × button, done button, and auto-dismiss\n close(emitButtonClicked: boolean = false): void {\n if (!this.isOpen && !this.visible) return;\n this.clearDismissTimer();\n this.isOpen = false; // triggers exit transition\n\n // after exit animation, hide + notify\n window.setTimeout(() => {\n if (this.visible) {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n if (emitButtonClicked) {\n this.buttonClicked.emit();\n }\n this.closed.emit();\n }, this.EXIT_MS);\n }\n\n get status(): Status {\n return purposeToStatusMap[this.purpose];\n }\n\n private startDismissTimer(): void {\n if (!this.autoDismiss) return;\n this.clearDismissTimer();\n this.dismissTimer = window.setTimeout(() => this.close(), this.progressMs);\n }\n\n private clearDismissTimer(): void {\n if (this.dismissTimer) {\n clearTimeout(this.dismissTimer);\n this.dismissTimer = undefined;\n }\n }\n}\n","@if (visible) {\n <section\n class=\"snackbar\"\n [ngClass]=\"{\n 'is-default': purpose === 'default',\n 'is-info': purpose === 'info',\n 'is-success': purpose === 'success',\n 'is-error': purpose === 'error',\n 'is-warning': purpose === 'warning',\n 'is-open': isOpen,\n }\"\n role=\"status\"\n aria-live=\"polite\"\n [style.--snackbar-progress-duration]=\"progressMs + 'ms'\"\n [style.top.px]=\"y\"\n >\n <div class=\"snackbar__left\">\n @if(showTitle) {\n <div class=\"snackbar__title-row\">\n <span \n [ngClass]=\"{\n 'snackbar__title-icon': true,\n 'has-icon': showTitle && showTitleIcon\n }\"\n aria-hidden=\"true\"\n >\n @if (showTitle && showTitleIcon) {\n <i [ngClass]=\"titleIconFilled ? 'material-icons' : 'material-icons-outlined'\"\n id=\"snackbar-title-icon\"\n aria-hidden=\"true\"\n >\n {{ titleIcon }}\n </i>\n }\n </span>\n @if (showTitle) {\n <h3 class=\"snackbar__title\">{{ title }}</h3>\n }\n </div>\n }\n <p class=\"snackbar__desc\">\n {{ description }}\n </p>\n @if (showField) {\n <input class=\"snackbar__input\" type=\"text\" [placeholder]=\"fieldPlaceholder\" />\n }\n @if (showButton) {\n <lib-status-button\n label={{statusButtonInputs?.label}}\n [status]=\"status\"\n leftIcon={{statusButtonInputs?.leftIcon}}\n rightIcon={{statusButtonInputs?.rightIcon}}\n [hideLeftIcon]=\"statusButtonInputs?.hideLeftIcon\"\n [hideRightIcon]=\"statusButtonInputs?.hideRightIcon\"\n [clearVariant]=\"statusButtonInputs?.clearVariant\"\n (click)=\"close(true)\"\n ></lib-status-button>\n\n }\n </div>\n <button \n type=\"button\"\n (click)=\"close()\"\n class=\"snackbar__close\"\n aria-label=\"Dismiss\"\n [style.visibility]=\"showClose ? 'visible' : 'hidden'\"\n >\n ×\n </button>\n @if (showProgressBar) {\n <div class=\"snackbar__progress\">\n <div class=\"snackbar__progress-fill\"></div>\n </div>\n }\n </section>\n}\n","import { Injectable, ApplicationRef, EnvironmentInjector, createComponent } from '@angular/core';\nimport { SnackbarComponent, SnackbarInputs } from './snackbar.component';\nimport { StatusButtonInputs } from '../status-button/status-button.component';\n\n@Injectable({ providedIn: 'root' })\nexport class SnackbarService {\n constructor(\n private appRef: ApplicationRef,\n private env: EnvironmentInjector,\n ) {}\n\n /**\n * This open method is what consuming code will use to create a snackbar\n * @param snackbarOptions interface\n * @param anchor HTML Element, optional. The snackbar's entrance and exit animations will happen on this element's Y axis (px)\n * @returns void.\n */\n open(snackbarOptions: SnackbarInputs = {}, anchor?: HTMLElement) {\n const statusButtonInputs: StatusButtonInputs = {\n label: 'Done',\n hideLeftIcon: true,\n clearVariant: true,\n };\n const compRef = createComponent(SnackbarComponent, {\n environmentInjector: this.env,\n });\n\n const desiredY = anchor // could be clamped if above or below viewport\n ? anchor.getBoundingClientRect().top\n : snackbarOptions.y ?? 24;\n\n Object.assign(compRef.instance, {\n purpose: 'warning',\n title: 'Snackbar Title',\n description: 'Lorem ipsum is the standard dummy text in the design industry',\n titleIcon: 'info',\n fieldPlaceholder: 'Placeholder',\n showTitle: true,\n showTitleIcon: true,\n titleIconFilled: false,\n showClose: true,\n showProgressBar: true,\n showField: true,\n showButton: true,\n progressMs: 5000,\n autoDismiss: true,\n y: desiredY,\n right: 24,\n zIndex: 10000,\n visible: true,\n statusButtonInputs,\n ...snackbarOptions,\n });\n\n this.appRef.attachView(compRef.hostView);\n document.body.appendChild(compRef.location.nativeElement);\n compRef.changeDetectorRef.detectChanges();\n\n // Clamp Y after it’s in the DOM\n const margin = 8;\n const adjustY = () => {\n const host: HTMLElement =\n (compRef.location.nativeElement as HTMLElement).querySelector('section.snackbar') ??\n (compRef.location.nativeElement as HTMLElement);\n\n const h = host.offsetHeight || 0;\n const maxTop = Math.max(margin, window.innerHeight - h - margin);\n const clamped = Math.min(Math.max(desiredY, margin), maxTop);\n\n if (compRef.instance.y !== clamped) {\n compRef.instance.y = clamped;\n compRef.changeDetectorRef.detectChanges();\n }\n };\n\n // Measure on next frame (styles applied)\n const rafId = requestAnimationFrame(adjustY);\n\n // re-clamp on resize (in case viewport changes while visible)\n const onResize = () => adjustY();\n window.addEventListener('resize', onResize);\n\n // Cleanup when closed\n const sub = compRef.instance.closed.subscribe(() => {\n sub.unsubscribe();\n cancelAnimationFrame(rafId);\n window.removeEventListener('resize', onResize);\n this.appRef.detachView(compRef.hostView);\n compRef.destroy();\n });\n\n return {\n close: () => compRef.instance.close(),\n buttonClicked: compRef.instance.buttonClicked,\n };\n }\n}\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 * from './lib/snackbar/snackbar.service';\nexport * from './lib/snackbar/snackbar.component';\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';\nexport * from './lib/status-button/status-button.component';\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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"}
|