@byuhbll/components 5.2.0-beta.0 → 5.2.0
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/button/button.component.mjs +81 -0
- package/esm2022/lib/button-group/button-group.component.mjs +155 -0
- package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +2 -2
- package/esm2022/lib/ss-search-bar/simple-search/simple-search.component.mjs +3 -31
- package/esm2022/lib/subatomic-components/button-group-item/button-group-item.component.mjs +39 -0
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/byuhbll-components.mjs +270 -33
- package/fesm2022/byuhbll-components.mjs.map +1 -1
- package/lib/button/button.component.d.ts +66 -0
- package/lib/button-group/button-group.component.d.ts +46 -0
- package/lib/impersonate-modal/impersonate-modal.component.d.ts +1 -1
- package/lib/ss-search-bar/simple-search/simple-search.component.d.ts +0 -2
- package/lib/subatomic-components/button-group-item/button-group-item.component.d.ts +18 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -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 {\n Component,\n computed,\n EventEmitter,\n input,\n Output,\n Signal,\n OnInit,\n OnDestroy,\n effect,\n runInInjectionContext,\n inject,\n Injector,\n} 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 implements OnInit, OnDestroy {\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\n protected showImpersonationModal = false;\n private isImpersonating = computed(() => !!this.parsedToken()?.['impersonator']);\n\n // Inactivity timeout for impersonation\n private activityEvents: Array<'keydown' | 'pointerdown' | 'wheel' | 'scroll'> = [\n 'keydown',\n 'pointerdown',\n 'wheel',\n 'scroll',\n ];\n private inactivityTimerId: number | null = null;\n private inactivityTimeoutMs = 5 * 60 * 1000; // 5 minutes\n private debounceTimerId: number | null = null;\n private debounceDelayMs = 250;\n\n private trackingActive = false;\n\n private injector = inject(Injector);\n\n ngOnInit() {\n // effect can only be used within an injection context (ex: constructor)\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const impersonating = this.isImpersonating();\n const token = this.parsedToken();\n\n // when token refreshes after 5 minutes, it leaves a small moment where there is no token\n // this prevents dropping inactivtiy timer during that blip\n if (!token) return;\n\n if (impersonating) {\n if (!this.trackingActive) this.startInactivityTracking();\n } else {\n if (this.trackingActive) this.stopInactivityTracking();\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.stopInactivityTracking();\n }\n\n /** Begin listening and start countdown */\n private startInactivityTracking() {\n this.activityEvents.forEach((event) => {\n // 'scroll' on document doesn't bubble; use window + capture to catch nested scrolls\n const target: Window | Document = event === 'scroll' ? window : document;\n const options =\n event === 'scroll'\n ? ({ passive: true, capture: true } as AddEventListenerOptions)\n : ({ passive: true } as AddEventListenerOptions);\n\n target.addEventListener(event, this.debouncedResetTimer, options);\n });\n\n this.trackingActive = true;\n this.resetInactivityTimer();\n }\n\n /** Remove listeners and clear timers */\n private stopInactivityTracking() {\n this.activityEvents.forEach((event) => {\n const target: Window | Document = event === 'scroll' ? window : document;\n // IMPORTANT: capture must match how it was added for scroll\n const options =\n event === 'scroll' ? ({ capture: true } as AddEventListenerOptions) : undefined;\n\n target.removeEventListener(event, this.debouncedResetTimer, options);\n });\n\n if (this.inactivityTimerId) {\n clearTimeout(this.inactivityTimerId);\n this.inactivityTimerId = null;\n }\n if (this.debounceTimerId) {\n clearTimeout(this.debounceTimerId);\n this.debounceTimerId = null;\n }\n\n this.trackingActive = false;\n }\n\n /** Reset the inactivity countdown (no-op if not impersonating) */\n private resetInactivityTimer = () => {\n if (!this.isImpersonating()) return;\n\n if (this.inactivityTimerId) clearTimeout(this.inactivityTimerId);\n\n this.inactivityTimerId = window.setTimeout(() => {\n this.endImpersonation.emit();\n this.stopInactivityTracking();\n }, this.inactivityTimeoutMs);\n };\n\n /** Debounce activity to avoid hammering resets during event storms */\n private debouncedResetTimer = () => {\n if (this.debounceTimerId) clearTimeout(this.debounceTimerId);\n\n this.debounceTimerId = window.setTimeout(() => {\n this.resetInactivityTimer();\n }, this.debounceDelayMs);\n };\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} from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { startWith, filter } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { SearchConfig } from '../models/search-config.model';\n\n@Component({\n selector: 'lib-ss-simple-search',\n standalone: true,\n imports: [MatTooltipModule, MatIconModule, ReactiveFormsModule, CommonModule],\n templateUrl: './simple-search.component.html',\n styleUrls: ['./simple-search.component.scss'],\n})\nexport class SimpleSearchComponent implements OnInit, OnDestroy {\n private readonly fb = inject(FormBuilder);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n private subscription = new Subscription();\n private _config!: SearchConfig;\n private draftQuery = '';\n private isPatching = false;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n protected isSubmitted = false;\n protected searchForm = this.fb.nonNullable.group({\n simpleQuery: ['', Validators.required],\n });\n\n get simpleQuery() {\n return this.searchForm.get('simpleQuery') as FormControl;\n }\n\n ngOnInit() {\n // Ensure validation tooltip closes when uses enters a query\n console.log('>>> Initializing');\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe((v) => {\n this.inputTooltip.disabled = true;\n if (this.isPatching) return;\n this.draftQuery = v ?? '';\n }),\n );\n }\n\n ngOnDestroy(): void {\n console.log('>>> Destroying');\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.isPatching = true;\n this.simpleQuery.setValue('');\n this.isPatching = false;\n\n this.draftQuery = '';\n this.clearSimpleSearch.emit();\n };\n\n private setupForm = () => {\n const incoming = this.config.q || this.config.advancedSearchQueryRows[0]?.query || '';\n const current = this.simpleQuery.value ?? '';\n\n // If we received a real query (submitted/synced), it should win.\n if (incoming) {\n if (incoming !== current) {\n this.isPatching = true;\n this.simpleQuery.setValue(incoming);\n this.isPatching = false;\n }\n this.draftQuery = incoming; // keep draft aligned\n return;\n }\n\n // No incoming query (tab switch before submit).\n // Preserve what the user already typed (current/draft). Do NOT clear.\n if (!current && this.draftQuery) {\n this.isPatching = true;\n this.simpleQuery.setValue(this.draftQuery);\n this.isPatching = false;\n }\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n}\n","<div class=\"ss-container\">\n <form [formGroup]=\"searchForm\" (submit)=\"emitSimpleSearch()\" data-testid=\"searchForm\">\n <input\n #searchInput\n data-testid=\"searchInput\"\n id=\"q\"\n name=\"q\"\n type=\"text\"\n required\n aria-required=\"true\"\n aria-label=\"search input\"\n autocapitalize=\"off\"\n formControlName=\"simpleQuery\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && simpleQuery.invalid\"\n />\n <label for=\"q\" data-testid=\"label\">{{\n config.scope === 'local'\n ? 'Books, media, special collections and more'\n : 'Ebooks, articles, journals, databases, streaming media and more'\n }}</label>\n <button\n type=\"submit\"\n aria-label=\"search\"\n data-testid=\"searchBtn\"\n [ngClass]=\"{ ensign: config.institution === 'ensign' }\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> search </span>\n </button>\n </form>\n\n @if (simpleQuery.value) {\n <button id=\"clear\" (click)=\"clearQuery()\" data-testid=\"clearBtn\">\n <span class=\"material-symbols-outlined ss-icon\"> cancel </span>\n </button>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ADVANCED_SEARCH_FIELD_MAP } from '../constants';\nimport {\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\n\n@Pipe({\n name: 'advancedFieldWarning',\n standalone: true,\n})\nexport class AdvancedFieldWarningPipe implements PipeTransform {\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n let warning = '';\n for (const row of queryRows) {\n if (\n row.field &&\n !isAdvancedSearchFieldOption(row.field as string) &&\n (scope === 'local'\n ? !isAdvancedSearchLocalFieldOption(row.field as string)\n : !isAdvancedSearchExternalFieldOption(row.field as string))\n ) {\n if (!warning)\n warning = `Searching by <b>${\n ADVANCED_SEARCH_FIELD_MAP[row.field]\n }</b> is not an option for this tab. <b>${\n ADVANCED_SEARCH_FIELD_MAP['any']\n }</b> has replaced it.`;\n else {\n warning += '<br />All other unavailable options have also been replaced.';\n return warning;\n }\n }\n }\n return warning;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SsAdvancedQueriesPipe } from './pipes/advanced-queries.pipe';\nimport { libHbllExpandCollapse } from '../animations/animations';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { SimpleSearchComponent } from './simple-search/simple-search.component';\nimport { SearchScope } from './models/search-scope.model';\nimport { AdvancedFieldWarningPipe } from './pipes/advanced-field-warning.pipe';\nimport { FieldByScopePipe } from './pipes/field-by-scope.pipe';\nimport { SearchConfig } from './models/search-config.model';\n\n@Component({\n selector: 'lib-ss-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n SsAdvancedQueriesPipe,\n AdvancedSearchComponent,\n SimpleSearchComponent,\n AdvancedFieldWarningPipe,\n ],\n providers: [FieldByScopePipe],\n animations: [libHbllExpandCollapse],\n templateUrl: './ss-search-bar.component.html',\n styleUrl: './ss-search-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SsSearchBarComponent {\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: string) {\n this._config = JSON.parse(config) as SearchConfig;\n }\n get config(): SearchConfig {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearchClosed = new EventEmitter<SearchConfig>();\n @Output() advancedSearchOpen = new EventEmitter<SearchConfig>();\n @Output() tabChange = new EventEmitter<SearchConfig>();\n @ViewChild('barWrapperRef') private barWrapperRef!: ElementRef;\n protected heightOfContainer = 0;\n\n protected emitClearSimpleSearch = () => {\n this.clearSimpleSearch.emit({\n ...this.config,\n q: '',\n advancedSearchQueryRows: [],\n });\n };\n\n protected emitSimpleSearch = (updatedProps: Partial<SearchConfig>) => {\n this.simpleSearch.emit({\n ...this.config,\n ...updatedProps,\n });\n };\n\n protected emitAdvancedSearchClosed = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchClosed.emit({\n ...this.config,\n showAdvancedSearch: false,\n showAdvancedSearchAsText: false,\n });\n };\n\n protected emitAdvancedSearch = (config: SearchConfig) => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...config,\n showAdvancedSearchAsText: true,\n showAdvancedSearch: true,\n });\n };\n\n protected emitAdvancedSearchOpen = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchOpen.emit({\n ...this.config,\n showAdvancedSearchAsText: false,\n showAdvancedSearch: true,\n });\n };\n\n protected emitTabChange = (newScope: SearchScope) => {\n this.tabChange.emit({ ...this.config, scope: newScope });\n };\n}\n","<div id=\"ssSearchBar\">\n <div class=\"tabs\">\n <button\n (click)=\"emitTabChange('local')\"\n class=\"ss-tab\"\n id=\"localTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'local',\n ensign: config.institution === 'ensign' && config.scope !== 'local',\n }\"\n data-testid=\"localTab\"\n [disabled]=\"config.scope === 'local'\"\n >\n In the Library\n </button>\n @if (config.institution !== 'law') {\n <div class=\"tab-spacer\"></div>\n <button\n (click)=\"emitTabChange('external')\"\n class=\"ss-tab\"\n id=\"externalTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'external',\n ensign: config.institution === 'ensign' && config.scope !== 'external',\n }\"\n data-testid=\"externalTab\"\n [disabled]=\"config.scope === 'external'\"\n >\n Available Online\n </button>\n }\n <div class=\"tab-spacer full\"></div>\n </div>\n <div\n class=\"ss-bar-wrapper\"\n #barWrapperRef\n [@libHbllExpandCollapse]=\"{\n value: config.showAdvancedSearch ? (!config.showAdvancedSearchAsText ? 1 : 2) : 3,\n params: { startHeight: heightOfContainer },\n }\"\n >\n <div class=\"ss-bar-content\" data-testid=\"searchForm\">\n @if (!config.showAdvancedSearch) {\n <div class=\"ss-search-bar\">\n <lib-ss-simple-search\n [config]=\"config\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n ></lib-ss-simple-search>\n </div>\n } @else {\n <button\n id=\"advSearchCloseBtn\"\n (click)=\"emitAdvancedSearchClosed()\"\n data-testid=\"advSearchCloseBtn\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> close </span>\n </button>\n <div id=\"advSearchWrapper\">\n @if (config.showAdvancedSearch && !config.showAdvancedSearchAsText) {\n <div>\n <lib-ss-advanced-search\n [config]=\"config\"\n (advancedSearch)=\"emitAdvancedSearch($event)\"\n ></lib-ss-advanced-search>\n </div>\n } @else {\n <div\n class=\"ss-adv-search-text\"\n data-testid=\"advancedSearchText\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | ssAdvancedQueries: config.scope\n \"\n ></div>\n <div\n [innerHTML]=\"\n config.advancedSearchQueryRows | advancedFieldWarning: config.scope\n \"\n ></div>\n }\n </div>\n }\n </div>\n @if (!config.showAdvancedSearch || config.showAdvancedSearchAsText) {\n <button\n data-testid=\"toggleAdvSearchButton\"\n class=\"ss-adv-search-btn\"\n id=\"advSearchBtn\"\n (click)=\"emitAdvancedSearchOpen()\"\n >\n Advanced\n <span class=\"material-symbols-outlined ss-icon\"> keyboard_arrow_down </span>\n </button>\n }\n </div>\n</div>\n","const searchScopeValues = ['local', 'external'] as const;\nexport type SearchScope = (typeof searchScopeValues)[number];\nexport const isSearchScope = (scope: string): scope is SearchScope =>\n searchScopeValues.includes(scope as SearchScope);\n","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/lib/button/button.component.ts","../../../projects/components/src/lib/button/button.component.html","../../../projects/components/src/lib/subatomic-components/button-group-item/button-group-item.component.ts","../../../projects/components/src/lib/subatomic-components/button-group-item/button-group-item.component.html","../../../projects/components/src/lib/button-group/button-group.component.ts","../../../projects/components/src/lib/button-group/button-group.component.html","../../../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 = 'ces';\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 {\n Component,\n computed,\n EventEmitter,\n input,\n Output,\n Signal,\n OnInit,\n OnDestroy,\n effect,\n runInInjectionContext,\n inject,\n Injector,\n} 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 implements OnInit, OnDestroy {\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\n protected showImpersonationModal = false;\n private isImpersonating = computed(() => !!this.parsedToken()?.['impersonator']);\n\n // Inactivity timeout for impersonation\n private activityEvents: Array<'keydown' | 'pointerdown' | 'wheel' | 'scroll'> = [\n 'keydown',\n 'pointerdown',\n 'wheel',\n 'scroll',\n ];\n private inactivityTimerId: number | null = null;\n private inactivityTimeoutMs = 5 * 60 * 1000; // 5 minutes\n private debounceTimerId: number | null = null;\n private debounceDelayMs = 250;\n\n private trackingActive = false;\n\n private injector = inject(Injector);\n\n ngOnInit() {\n // effect can only be used within an injection context (ex: constructor)\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const impersonating = this.isImpersonating();\n const token = this.parsedToken();\n\n // when token refreshes after 5 minutes, it leaves a small moment where there is no token\n // this prevents dropping inactivtiy timer during that blip\n if (!token) return;\n\n if (impersonating) {\n if (!this.trackingActive) this.startInactivityTracking();\n } else {\n if (this.trackingActive) this.stopInactivityTracking();\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.stopInactivityTracking();\n }\n\n /** Begin listening and start countdown */\n private startInactivityTracking() {\n this.activityEvents.forEach((event) => {\n // 'scroll' on document doesn't bubble; use window + capture to catch nested scrolls\n const target: Window | Document = event === 'scroll' ? window : document;\n const options =\n event === 'scroll'\n ? ({ passive: true, capture: true } as AddEventListenerOptions)\n : ({ passive: true } as AddEventListenerOptions);\n\n target.addEventListener(event, this.debouncedResetTimer, options);\n });\n\n this.trackingActive = true;\n this.resetInactivityTimer();\n }\n\n /** Remove listeners and clear timers */\n private stopInactivityTracking() {\n this.activityEvents.forEach((event) => {\n const target: Window | Document = event === 'scroll' ? window : document;\n // IMPORTANT: capture must match how it was added for scroll\n const options =\n event === 'scroll' ? ({ capture: true } as AddEventListenerOptions) : undefined;\n\n target.removeEventListener(event, this.debouncedResetTimer, options);\n });\n\n if (this.inactivityTimerId) {\n clearTimeout(this.inactivityTimerId);\n this.inactivityTimerId = null;\n }\n if (this.debounceTimerId) {\n clearTimeout(this.debounceTimerId);\n this.debounceTimerId = null;\n }\n\n this.trackingActive = false;\n }\n\n /** Reset the inactivity countdown (no-op if not impersonating) */\n private resetInactivityTimer = () => {\n if (!this.isImpersonating()) return;\n\n if (this.inactivityTimerId) clearTimeout(this.inactivityTimerId);\n\n this.inactivityTimerId = window.setTimeout(() => {\n this.endImpersonation.emit();\n this.stopInactivityTracking();\n }, this.inactivityTimeoutMs);\n };\n\n /** Debounce activity to avoid hammering resets during event storms */\n private debouncedResetTimer = () => {\n if (this.debounceTimerId) clearTimeout(this.debounceTimerId);\n\n this.debounceTimerId = window.setTimeout(() => {\n this.resetInactivityTimer();\n }, this.debounceDelayMs);\n };\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} from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { startWith, filter } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { SearchConfig } from '../models/search-config.model';\n\n@Component({\n selector: 'lib-ss-simple-search',\n standalone: true,\n imports: [MatTooltipModule, MatIconModule, ReactiveFormsModule, CommonModule],\n templateUrl: './simple-search.component.html',\n styleUrls: ['./simple-search.component.scss'],\n})\nexport class SimpleSearchComponent implements OnInit, OnDestroy {\n private readonly fb = inject(FormBuilder);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n private subscription = new Subscription();\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n protected isSubmitted = false;\n protected searchForm = this.fb.nonNullable.group({\n simpleQuery: ['', Validators.required],\n });\n\n get simpleQuery() {\n return this.searchForm.get('simpleQuery') as FormControl;\n }\n\n ngOnInit() {\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => {\n this.inputTooltip.disabled = true;\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n protected emitSimpleSearch = () => {\n this.isSubmitted = true;\n // Don't perform a search unless there is a query\n if (this.simpleQuery.invalid) {\n this.showSearchValidationToolTip();\n return;\n }\n this.simpleSearch.emit({ ...this.config, q: this.simpleQuery.value });\n this.isSubmitted = false;\n };\n\n protected clearQuery = () => {\n this.simpleQuery.setValue('');\n this.clearSimpleSearch.emit();\n };\n\n private setupForm = () => {\n this.simpleQuery.setValue(\n this.config.q || this.config.advancedSearchQueryRows[0]?.query || '',\n );\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n}\n","<div class=\"ss-container\">\n <form [formGroup]=\"searchForm\" (submit)=\"emitSimpleSearch()\" data-testid=\"searchForm\">\n <input\n #searchInput\n data-testid=\"searchInput\"\n id=\"q\"\n name=\"q\"\n type=\"text\"\n required\n aria-required=\"true\"\n aria-label=\"search input\"\n autocapitalize=\"off\"\n formControlName=\"simpleQuery\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && simpleQuery.invalid\"\n />\n <label for=\"q\" data-testid=\"label\">{{\n config.scope === 'local'\n ? 'Books, media, special collections and more'\n : 'Ebooks, articles, journals, databases, streaming media and more'\n }}</label>\n <button\n type=\"submit\"\n aria-label=\"search\"\n data-testid=\"searchBtn\"\n [ngClass]=\"{ ensign: config.institution === 'ensign' }\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> search </span>\n </button>\n </form>\n\n @if (simpleQuery.value) {\n <button id=\"clear\" (click)=\"clearQuery()\" data-testid=\"clearBtn\">\n <span class=\"material-symbols-outlined ss-icon\"> cancel </span>\n </button>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ADVANCED_SEARCH_FIELD_MAP } from '../constants';\nimport {\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\n\n@Pipe({\n name: 'advancedFieldWarning',\n standalone: true,\n})\nexport class AdvancedFieldWarningPipe implements PipeTransform {\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n let warning = '';\n for (const row of queryRows) {\n if (\n row.field &&\n !isAdvancedSearchFieldOption(row.field as string) &&\n (scope === 'local'\n ? !isAdvancedSearchLocalFieldOption(row.field as string)\n : !isAdvancedSearchExternalFieldOption(row.field as string))\n ) {\n if (!warning)\n warning = `Searching by <b>${\n ADVANCED_SEARCH_FIELD_MAP[row.field]\n }</b> is not an option for this tab. <b>${\n ADVANCED_SEARCH_FIELD_MAP['any']\n }</b> has replaced it.`;\n else {\n warning += '<br />All other unavailable options have also been replaced.';\n return warning;\n }\n }\n }\n return warning;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SsAdvancedQueriesPipe } from './pipes/advanced-queries.pipe';\nimport { libHbllExpandCollapse } from '../animations/animations';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { SimpleSearchComponent } from './simple-search/simple-search.component';\nimport { SearchScope } from './models/search-scope.model';\nimport { AdvancedFieldWarningPipe } from './pipes/advanced-field-warning.pipe';\nimport { FieldByScopePipe } from './pipes/field-by-scope.pipe';\nimport { SearchConfig } from './models/search-config.model';\n\n@Component({\n selector: 'lib-ss-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n SsAdvancedQueriesPipe,\n AdvancedSearchComponent,\n SimpleSearchComponent,\n AdvancedFieldWarningPipe,\n ],\n providers: [FieldByScopePipe],\n animations: [libHbllExpandCollapse],\n templateUrl: './ss-search-bar.component.html',\n styleUrl: './ss-search-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SsSearchBarComponent {\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: string) {\n this._config = JSON.parse(config) as SearchConfig;\n }\n get config(): SearchConfig {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearchClosed = new EventEmitter<SearchConfig>();\n @Output() advancedSearchOpen = new EventEmitter<SearchConfig>();\n @Output() tabChange = new EventEmitter<SearchConfig>();\n @ViewChild('barWrapperRef') private barWrapperRef!: ElementRef;\n protected heightOfContainer = 0;\n\n protected emitClearSimpleSearch = () => {\n this.clearSimpleSearch.emit({\n ...this.config,\n q: '',\n advancedSearchQueryRows: [],\n });\n };\n\n protected emitSimpleSearch = (updatedProps: Partial<SearchConfig>) => {\n this.simpleSearch.emit({\n ...this.config,\n ...updatedProps,\n });\n };\n\n protected emitAdvancedSearchClosed = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchClosed.emit({\n ...this.config,\n showAdvancedSearch: false,\n showAdvancedSearchAsText: false,\n });\n };\n\n protected emitAdvancedSearch = (config: SearchConfig) => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...config,\n showAdvancedSearchAsText: true,\n showAdvancedSearch: true,\n });\n };\n\n protected emitAdvancedSearchOpen = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchOpen.emit({\n ...this.config,\n showAdvancedSearchAsText: false,\n showAdvancedSearch: true,\n });\n };\n\n protected emitTabChange = (newScope: SearchScope) => {\n this.tabChange.emit({ ...this.config, scope: newScope });\n };\n}\n","<div id=\"ssSearchBar\">\n <div class=\"tabs\">\n <button\n (click)=\"emitTabChange('local')\"\n class=\"ss-tab\"\n id=\"localTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'local',\n ensign: config.institution === 'ensign' && config.scope !== 'local',\n }\"\n data-testid=\"localTab\"\n [disabled]=\"config.scope === 'local'\"\n >\n In the Library\n </button>\n @if (config.institution !== 'law') {\n <div class=\"tab-spacer\"></div>\n <button\n (click)=\"emitTabChange('external')\"\n class=\"ss-tab\"\n id=\"externalTab\"\n [ngClass]=\"{\n 'ss-active': config.scope === 'external',\n ensign: config.institution === 'ensign' && config.scope !== 'external',\n }\"\n data-testid=\"externalTab\"\n [disabled]=\"config.scope === 'external'\"\n >\n Available Online\n </button>\n }\n <div class=\"tab-spacer full\"></div>\n </div>\n <div\n class=\"ss-bar-wrapper\"\n #barWrapperRef\n [@libHbllExpandCollapse]=\"{\n value: config.showAdvancedSearch ? (!config.showAdvancedSearchAsText ? 1 : 2) : 3,\n params: { startHeight: heightOfContainer },\n }\"\n >\n <div class=\"ss-bar-content\" data-testid=\"searchForm\">\n @if (!config.showAdvancedSearch) {\n <div class=\"ss-search-bar\">\n <lib-ss-simple-search\n [config]=\"config\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n ></lib-ss-simple-search>\n </div>\n } @else {\n <button\n id=\"advSearchCloseBtn\"\n (click)=\"emitAdvancedSearchClosed()\"\n data-testid=\"advSearchCloseBtn\"\n >\n <span class=\"material-symbols-outlined ss-icon\"> close </span>\n </button>\n <div id=\"advSearchWrapper\">\n @if (config.showAdvancedSearch && !config.showAdvancedSearchAsText) {\n <div>\n <lib-ss-advanced-search\n [config]=\"config\"\n (advancedSearch)=\"emitAdvancedSearch($event)\"\n ></lib-ss-advanced-search>\n </div>\n } @else {\n <div\n class=\"ss-adv-search-text\"\n data-testid=\"advancedSearchText\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | ssAdvancedQueries: config.scope\n \"\n ></div>\n <div\n [innerHTML]=\"\n config.advancedSearchQueryRows | advancedFieldWarning: config.scope\n \"\n ></div>\n }\n </div>\n }\n </div>\n @if (!config.showAdvancedSearch || config.showAdvancedSearchAsText) {\n <button\n data-testid=\"toggleAdvSearchButton\"\n class=\"ss-adv-search-btn\"\n id=\"advSearchBtn\"\n (click)=\"emitAdvancedSearchOpen()\"\n >\n Advanced\n <span class=\"material-symbols-outlined ss-icon\"> keyboard_arrow_down </span>\n </button>\n }\n </div>\n</div>\n","const searchScopeValues = ['local', 'external'] as const;\nexport type SearchScope = (typeof searchScopeValues)[number];\nexport const isSearchScope = (scope: string): scope is SearchScope =>\n searchScopeValues.includes(scope as SearchScope);\n","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","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonType = 'primary' | 'secondary' | 'transparent';\n\nexport interface ButtonInputs {\n buttonType?: ButtonType;\n title?: string;\n iconBefore?: string;\n iconAfter?: string;\n disabled?: boolean;\n isThin?: boolean;\n ariaLabel?: string;\n}\n\n/**\n * A flexible, reusable button component that supports multiple button types\n * and various content combinations (icon before, title, icon after).\n *\n * @example\n * ```html\n * <!-- Primary button with icon and title -->\n * <lib-button\n * buttonType=\"primary\"\n * title=\"Copy Citation\"\n * iconBefore=\"content_copy\"\n * (buttonClick)=\"copyCitation()\">\n * </lib-button>\n *\n * <!-- Secondary button with title only -->\n * <lib-button\n * buttonType=\"secondary\"\n * title=\"Cancel\"\n * (buttonClick)=\"cancelAction()\">\n * </lib-button>\n *\n * <!-- Transparent button with icon after title -->\n * <lib-button\n * buttonType=\"transparent\"\n * title=\"Download\"\n * iconAfter=\"download\"\n * (buttonClick)=\"downloadFile()\">\n * </lib-button>\n *\n * <!-- Thin button -->\n * <lib-button\n * buttonType=\"primary\"\n * title=\"Submit\"\n * [isThin]=\"true\"\n * (buttonClick)=\"submitForm()\">\n * </lib-button>\n * ```\n */\n@Component({\n selector: 'lib-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent {\n @Input() buttonType: ButtonType = 'primary';\n @Input() title?: string;\n @Input() iconBefore?: string;\n @Input() iconAfter?: string;\n @Input() disabled: boolean = false;\n @Input() isThin: boolean = false;\n @Input() ariaLabel?: string;\n @Output() buttonClick = new EventEmitter<void>();\n\n /**\n * Handles button click events and emits the buttonClick event if the button is not disabled.\n */\n onButtonClick(): void {\n if (!this.disabled) {\n this.buttonClick.emit();\n }\n }\n}\n","<button\n type=\"button\"\n [class]=\"'btn btn-' + buttonType + (isThin ? ' btn-thin' : '') + (title ? '' : ' btn-icon-only')\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (click)=\"onButtonClick()\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n>\n @if (iconBefore) {\n <span class=\"icon material-symbols-outlined\" [ngClass]=\"{ 'icon-before': title }\">{{ iconBefore }}</span>\n }\n\n @if (title) {\n <span class=\"button-title\">{{ title }}</span>\n }\n\n @if (iconAfter) {\n <span class=\"icon icon-after material-symbols-outlined\">{{ iconAfter }}</span>\n }\n</button>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-button-group-item',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button-group-item.component.html',\n styleUrl: './button-group-item.component.scss',\n})\nexport class ButtonGroupItemComponent {\n @Input({ required: true }) id!: string;\n @Input() title?: string;\n @Input() icon?: string;\n @Input() ariaLabel?: string;\n @Input() disabled: boolean = false;\n @Input() position?: 'first' | 'last' | 'middle';\n @Output() buttonClick = new EventEmitter<string>();\n // Set by parent button group after content projection\n public isActive: boolean = false;\n\n /**\n * Handles the button click event and emits the button's ID to the parent component.\n */\n onClick(): void {\n this.buttonClick.emit(this.id);\n }\n}\n","<button\n type=\"button\"\n class=\"tab-btn\"\n [class.first]=\"position === 'first'\"\n [class.last]=\"position === 'last'\"\n [class.active]=\"isActive\"\n [disabled]=\"disabled\"\n (click)=\"onClick()\"\n role=\"tab\"\n [attr.aria-pressed]=\"isActive\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n>\n @if (icon) {\n <span class=\"icon material-symbols-outlined\">{{ icon }}</span>\n }\n\n @if (title) {\n <span class=\"button-title\">{{ title }}</span>\n }\n</button>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n signal,\n ContentChildren,\n QueryList,\n AfterContentInit,\n OnDestroy,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ButtonGroupItemComponent } from '../subatomic-components/button-group-item/button-group-item.component';\n\n@Component({\n selector: 'lib-button-group',\n standalone: true,\n imports: [ButtonGroupItemComponent],\n templateUrl: './button-group.component.html',\n styleUrl: './button-group.component.scss',\n})\nexport class ButtonGroupComponent implements AfterContentInit, OnDestroy {\n @Input() initialActiveId?: string;\n @Output() activeButtonChange = new EventEmitter<string>();\n // Content projection: button-group-item components defined in HTML\n @ContentChildren(ButtonGroupItemComponent) buttonItems!: QueryList<ButtonGroupItemComponent>;\n private elementRef: ElementRef = inject(ElementRef);\n protected activeButtonId = signal<string>('');\n private subscriptions: Subscription[] = [];\n\n /**\n * Angular lifecycle hook called after content projection is initialized.\n * Sets up the initial active button and subscribes to button click events from all button items.\n */\n ngAfterContentInit(): void {\n // Handle both Angular components (via ContentChildren) and custom elements (via DOM)\n if (this.buttonItems.length > 0) {\n // Angular component usage\n this.initializeActiveButton();\n\n this.buttonItems.forEach((item) => {\n const sub = item.buttonClick.subscribe((id: string) => this.onButtonClick(id));\n this.subscriptions.push(sub);\n });\n } else {\n // Custom element usage - delay slightly to ensure custom elements are fully initialized\n setTimeout(() => {\n this.initializeCustomElements();\n }, 0);\n }\n }\n\n /**\n * Initializes custom element children when used as web components.\n */\n private initializeCustomElements(): void {\n const hostElement = this.elementRef.nativeElement;\n const customElementChildren = Array.from(\n hostElement.querySelectorAll('hbll-button-group-item, lib-button-group-item'),\n ) as Element[];\n\n if (customElementChildren.length > 0) {\n // Set position attributes - first and last explicitly, rest are middle\n customElementChildren[0].setAttribute('position', 'first');\n if (customElementChildren.length > 1) {\n customElementChildren[customElementChildren.length - 1].setAttribute(\n 'position',\n 'last',\n );\n }\n for (let i = 1; i < customElementChildren.length - 1; i++) {\n customElementChildren[i].setAttribute('position', 'middle');\n }\n\n const initialId = this.initialActiveId;\n if (initialId) {\n this.activeButtonId.set(initialId);\n customElementChildren.forEach((item) => {\n const itemId = item.getAttribute('id');\n if (itemId === initialId) {\n this.setActiveState(item, true);\n } else {\n this.setActiveState(item, false);\n }\n });\n }\n\n // Listen to clicks on custom elements\n customElementChildren.forEach((item) => {\n item.addEventListener('click', () => {\n const itemId = item.getAttribute('id');\n if (itemId && !item.hasAttribute('disabled')) {\n this.handleCustomElementClick(itemId, customElementChildren);\n }\n });\n });\n }\n }\n\n /**\n * Sets the active state on a custom element by toggling the active class on its button.\n */\n private setActiveState(element: Element, isActive: boolean): void {\n const button = element.querySelector('.tab-btn');\n if (button) {\n if (isActive) {\n button.classList.add('active');\n } else {\n button.classList.remove('active');\n }\n }\n }\n\n /**\n * Handles click events for custom element children.\n */\n private handleCustomElementClick(buttonId: string, children: Element[]): void {\n this.activeButtonId.set(buttonId);\n this.activeButtonChange.emit(buttonId);\n\n children.forEach((item) => {\n const itemId = item.getAttribute('id');\n const isActive = itemId === buttonId;\n this.setActiveState(item, isActive);\n });\n }\n\n /**\n * Angular lifecycle hook called when the component is destroyed.\n * Cleans up all subscriptions to prevent memory leaks.\n */\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n /**\n * Initializes the active button state based on the initialActiveId input.\n * Sets the active state on the matching button item if an initial ID is provided.\n */\n private initializeActiveButton(): void {\n const items = this.buttonItems.toArray();\n const initialId = this.initialActiveId;\n\n // Set position - first and last explicitly, rest are middle\n if (items.length > 0) {\n items[0].position = 'first';\n if (items.length > 1) {\n items[items.length - 1].position = 'last';\n }\n for (let i = 1; i < items.length - 1; i++) {\n items[i].position = 'middle';\n }\n }\n\n // Set active state\n if (initialId) {\n items.forEach((item) => {\n item.isActive = item.id === initialId;\n });\n this.activeButtonId.set(initialId);\n }\n }\n\n /**\n * Handles button click events from child button items.\n * Updates the active button state and emits the activeButtonChange event.\n * @param buttonId - The ID of the clicked button\n */\n onButtonClick(buttonId: string): void {\n this.activeButtonId.set(buttonId);\n this.activeButtonChange.emit(buttonId);\n\n this.buttonItems.forEach((item) => {\n item.isActive = item.id === buttonId;\n });\n }\n}\n","<div class=\"button-group\" role=\"tablist\">\n <ng-content></ng-content>\n</div>\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';\nexport * from './lib/button/button.component';\nexport * from './lib/button-group/button-group.component';\nexport * from './lib/subatomic-components/button-group-item/button-group-item.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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"}
|