@byuhbll/components 7.3.2 → 7.4.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.
@@ -3,12 +3,12 @@ import { CommonModule, DatePipe, NgIf, NgClass } from '@angular/common';
3
3
  import { toSignal, toObservable } from '@angular/core/rxjs-interop';
4
4
  import { HttpClient } from '@angular/common/http';
5
5
  import * as i0 from '@angular/core';
6
- import { Input, ViewChild, ChangeDetectionStrategy, Component, input, EventEmitter, Output, inject, computed, ViewChildren, Pipe, Renderer2, DOCUMENT, viewChild, HostListener, booleanAttribute, ElementRef, forwardRef, Injector, runInInjectionContext, effect, ViewEncapsulation, model, ApplicationRef, EnvironmentInjector, createComponent, Injectable, signal, ContentChildren, ChangeDetectorRef } from '@angular/core';
6
+ import { Input, ViewChild, ChangeDetectionStrategy, Component, input, EventEmitter, Output, inject, computed, ViewChildren, Pipe, Renderer2, DOCUMENT, viewChild, HostListener, booleanAttribute, ElementRef, forwardRef, Injector, runInInjectionContext, effect, ChangeDetectorRef, model, ViewEncapsulation, ApplicationRef, EnvironmentInjector, createComponent, Injectable, signal, ContentChildren } from '@angular/core';
7
7
  import { trigger, transition, group, style, query, animate, animateChild } from '@angular/animations';
8
8
  import { map, of, switchMap, shareReplay, combineLatest, Subject, Subscription } from 'rxjs';
9
9
  import { BreakpointObserver } from '@angular/cdk/layout';
10
10
  import * as i1$1 from '@angular/forms';
11
- import { Validators, FormBuilder, ReactiveFormsModule, NG_VALUE_ACCESSOR, FormControl, NonNullableFormBuilder } from '@angular/forms';
11
+ import { Validators, FormBuilder, ReactiveFormsModule, NG_VALUE_ACCESSOR, NonNullableFormBuilder } from '@angular/forms';
12
12
  import { switchMap as switchMap$1, map as map$1, catchError, startWith, tap, filter, debounceTime, distinctUntilChanged } from 'rxjs/operators';
13
13
  import { jwtDecode } from 'jwt-decode';
14
14
  import urlcat from 'urlcat';
@@ -17,13 +17,6 @@ import { MatTooltipModule, MatTooltip } from '@angular/material/tooltip';
17
17
  import * as i2 from '@angular/cdk/a11y';
18
18
  import { A11yModule } from '@angular/cdk/a11y';
19
19
  import { MatIconModule } from '@angular/material/icon';
20
- import * as i3 from '@angular/material/autocomplete';
21
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
22
- import * as i2$1 from '@angular/material/form-field';
23
- import { MatFormFieldModule } from '@angular/material/form-field';
24
- import * as i1$3 from '@angular/material/chips';
25
- import { MatChipsModule } from '@angular/material/chips';
26
- import { ENTER, COMMA } from '@angular/cdk/keycodes';
27
20
  import { RouterLink, RouterLinkActive } from '@angular/router';
28
21
 
29
22
  const libHbllExpandCollapse = trigger('libHbllExpandCollapse', [
@@ -1492,6 +1485,7 @@ class FieldComponent {
1492
1485
  this.value = '';
1493
1486
  this.isFullText = false;
1494
1487
  this.rows = 4;
1488
+ this.wrapContent = false;
1495
1489
  this.valueChange = new EventEmitter();
1496
1490
  this.iconBeforeClick = new EventEmitter();
1497
1491
  this.iconAfterClick = new EventEmitter();
@@ -1606,13 +1600,13 @@ class FieldComponent {
1606
1600
  }
1607
1601
  }
1608
1602
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1609
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FieldComponent, isStandalone: true, selector: "lib-field", inputs: { inputType: "inputType", inputId: "inputId", placeholder: "placeholder", state: "state", status: "status", iconBefore: "iconBefore", iconAfter: "iconAfter", iconBeforeClickable: "iconBeforeClickable", iconAfterClickable: "iconAfterClickable", iconBeforeAction: "iconBeforeAction", iconAfterAction: "iconAfterAction", disabled: "disabled", ariaLabel: "ariaLabel", value: "value", isFullText: "isFullText", rows: "rows", minWidth: "minWidth", maxWidth: "maxWidth", minHeight: "minHeight", maxHeight: "maxHeight" }, outputs: { valueChange: "valueChange", iconBeforeClick: "iconBeforeClick", iconAfterClick: "iconAfterClick", fieldFocus: "fieldFocus", fieldBlur: "fieldBlur" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)", "document:mousedown": "onDocumentMousedown()", "document:pointerdown": "onDocumentPointerdown()" } }, providers: [
1603
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FieldComponent, isStandalone: true, selector: "lib-field", inputs: { inputType: "inputType", inputId: "inputId", placeholder: "placeholder", state: "state", status: "status", iconBefore: "iconBefore", iconAfter: "iconAfter", iconBeforeClickable: "iconBeforeClickable", iconAfterClickable: "iconAfterClickable", iconBeforeAction: "iconBeforeAction", iconAfterAction: "iconAfterAction", disabled: "disabled", ariaLabel: "ariaLabel", value: "value", isFullText: "isFullText", rows: "rows", minWidth: "minWidth", maxWidth: "maxWidth", minHeight: "minHeight", maxHeight: "maxHeight", wrapContent: "wrapContent" }, outputs: { valueChange: "valueChange", iconBeforeClick: "iconBeforeClick", iconAfterClick: "iconAfterClick", fieldFocus: "fieldFocus", fieldBlur: "fieldBlur" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)", "document:mousedown": "onDocumentMousedown()", "document:pointerdown": "onDocumentPointerdown()" } }, providers: [
1610
1604
  {
1611
1605
  provide: NG_VALUE_ACCESSOR,
1612
1606
  useExisting: forwardRef(() => FieldComponent),
1613
1607
  multi: true,
1614
1608
  },
1615
- ], ngImport: i0, template: "<div\n class=\"field-wrapper\"\n [ngClass]=\"'field-' + state + ' field-' + status + (isFocused ? ' is-focused' : '')\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n>\n <!-- Content projection for pre-tab -->\n <ng-content select=\"lib-pre-tab\"></ng-content>\n\n @if (iconBefore) {\n <span\n class=\"icon icon-before material-symbols-outlined\"\n (click)=\"onIconBeforeClick()\"\n [ngClass]=\"{ clickable: iconBeforeClickable, disabled: disabled }\"\n >\n {{ iconBefore }}\n </span>\n }\n\n @if (isFullText) {\n <textarea\n class=\"field-input field-textarea\"\n [id]=\"inputId\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n ></textarea>\n } @else {\n <input\n [type]=\"inputType\"\n [id]=\"inputId\"\n class=\"field-input\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n }\n\n @if (iconAfter) {\n <span\n class=\"icon icon-after material-symbols-outlined\"\n (click)=\"onIconAfterClick()\"\n (keydown)=\"onIconAfterKeydown($event)\"\n [ngClass]=\"{ clickable: iconAfterClickable, disabled: disabled }\"\n [attr.tabindex]=\"iconAfterClickable && !disabled ? 0 : null\"\n [attr.role]=\"iconAfterClickable ? 'button' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n >\n {{ iconAfter }}\n </span>\n }\n\n <!-- Content projection for post-tab -->\n <ng-content select=\"lib-post-tab\"></ng-content>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.field-wrapper{display:flex;flex-direction:row;align-items:center;padding:.25rem .75rem;gap:.5rem;box-sizing:border-box;border-radius:.25rem;width:100%;min-height:2rem;transition:all .2s ease}.field-wrapper .field-input{flex:1;flex-grow:1;min-width:0;border:none;outline:none;padding:0;resize:none;font-family:Source Sans Pro,sans-serif;font-size:1rem;background:inherit}.field-wrapper .field-input:disabled{cursor:not-allowed}.field-wrapper .field-input.field-textarea{align-self:flex-start;padding:.5rem 0}.field-wrapper .icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0;font-size:1.5rem;color:inherit}.field-wrapper .icon.clickable{cursor:pointer;transition:color .2s ease}.field-wrapper .icon.clickable:hover:not(.disabled){color:#0047ba}.field-wrapper .icon.icon-before{order:0}.field-wrapper .icon.icon-after{order:2}.field-wrapper.field-default{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.field-hover{background:#fff;border:1px solid #0047ba;color:#141414}.field-wrapper.field-focused{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.is-focused{outline:.125rem solid #b967c7;outline-offset:.125rem}.field-wrapper.field-error.field-not-filled{background:#fff;border:1px solid #c73e3d;color:#676767}.field-wrapper.field-error.field-not-filled .icon{color:#b33837}.field-wrapper.field-error.field-filled{background:#f9ecec;border:1px solid #c73e3d;color:#141414}.field-wrapper.field-error.field-filled .icon{color:#b33837}.field-wrapper.field-success.field-not-filled{background:#fff;border:1px solid #3ba35a;color:#676767}.field-wrapper.field-success.field-not-filled .icon{color:#2e8545}.field-wrapper.field-success.field-filled{background:#ebf6ee;border:1px solid #3ba35a;color:#141414}.field-wrapper.field-success.field-filled .icon{color:#2e8545}.field-wrapper.field-disabled{background:#f9f9f9;border:1px solid #676767;color:#676767;cursor:not-allowed}.field-wrapper.field-disabled .icon{color:#8f8f8f}.field-wrapper.field-disabled .icon.clickable{cursor:not-allowed}.field-wrapper.field-disabled .icon.clickable:hover{color:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
1609
+ ], ngImport: i0, template: "<div\n class=\"field-wrapper\"\n [ngClass]=\"\n 'field-' +\n state +\n ' field-' +\n status +\n (isFocused ? ' is-focused' : '') +\n (wrapContent ? ' field-wrap-content' : '')\n \"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n>\n <!-- Content projection for pre-tab -->\n <ng-content select=\"lib-pre-tab\"></ng-content>\n\n <!-- Content projection for field prefix, currently only used for chips in multi-select dropdown -->\n <ng-content select=\"[fieldPrefix]\"></ng-content>\n\n @if (iconBefore) {\n <span\n class=\"icon icon-before material-symbols-outlined\"\n (click)=\"onIconBeforeClick()\"\n [ngClass]=\"{ clickable: iconBeforeClickable, disabled: disabled }\"\n >\n {{ iconBefore }}\n </span>\n }\n\n @if (isFullText) {\n <textarea\n class=\"field-input field-textarea\"\n [id]=\"inputId\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n ></textarea>\n } @else {\n <input\n [type]=\"inputType\"\n [id]=\"inputId\"\n class=\"field-input\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n }\n\n @if (iconAfter) {\n <span\n class=\"icon icon-after material-symbols-outlined\"\n (click)=\"onIconAfterClick()\"\n (keydown)=\"onIconAfterKeydown($event)\"\n [ngClass]=\"{ clickable: iconAfterClickable, disabled: disabled }\"\n [attr.tabindex]=\"iconAfterClickable && !disabled ? 0 : null\"\n [attr.role]=\"iconAfterClickable ? 'button' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n >\n {{ iconAfter }}\n </span>\n }\n\n <!-- Content projection for post-tab -->\n <ng-content select=\"lib-post-tab\"></ng-content>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.field-wrapper{display:flex;flex-direction:row;align-items:center;padding:.25rem .75rem;gap:.5rem;box-sizing:border-box;border-radius:.25rem;width:100%;min-height:2rem;transition:all .2s ease}.field-wrapper .field-input{flex:1;flex-grow:1;min-width:0;border:none;outline:none;padding:0;resize:none;font-family:Source Sans Pro,sans-serif;font-size:1rem;background:inherit}.field-wrapper .field-input:disabled{cursor:not-allowed}.field-wrapper .field-input.field-textarea{align-self:flex-start;padding:.5rem 0}.field-wrapper .icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0;font-size:1.5rem;color:inherit}.field-wrapper .icon.clickable{cursor:pointer;transition:color .2s ease}.field-wrapper .icon.clickable:hover:not(.disabled){color:#0047ba}.field-wrapper .icon.icon-before{order:0}.field-wrapper .icon.icon-after{order:2}.field-wrapper.field-wrap-content{flex-wrap:wrap;max-width:100%}.field-wrapper.field-wrap-content .field-input{flex:1 1 0;min-width:0}.field-wrapper.field-default{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.field-hover{background:#fff;border:1px solid #0047ba;color:#141414}.field-wrapper.field-focused{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.is-focused{outline:.125rem solid #b967c7;outline-offset:.125rem}.field-wrapper.field-error.field-not-filled{background:#fff;border:1px solid #c73e3d;color:#676767}.field-wrapper.field-error.field-not-filled .icon{color:#b33837}.field-wrapper.field-error.field-filled{background:#f9ecec;border:1px solid #c73e3d;color:#141414}.field-wrapper.field-error.field-filled .icon{color:#b33837}.field-wrapper.field-success.field-not-filled{background:#fff;border:1px solid #3ba35a;color:#676767}.field-wrapper.field-success.field-not-filled .icon{color:#2e8545}.field-wrapper.field-success.field-filled{background:#ebf6ee;border:1px solid #3ba35a;color:#141414}.field-wrapper.field-success.field-filled .icon{color:#2e8545}.field-wrapper.field-disabled{background:#f9f9f9;border:1px solid #676767;color:#676767;cursor:not-allowed}.field-wrapper.field-disabled .icon{color:#8f8f8f}.field-wrapper.field-disabled .icon.clickable{cursor:not-allowed}.field-wrapper.field-disabled .icon.clickable:hover{color:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
1616
1610
  }
1617
1611
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FieldComponent, decorators: [{
1618
1612
  type: Component,
@@ -1622,7 +1616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1622
1616
  useExisting: forwardRef(() => FieldComponent),
1623
1617
  multi: true,
1624
1618
  },
1625
- ], template: "<div\n class=\"field-wrapper\"\n [ngClass]=\"'field-' + state + ' field-' + status + (isFocused ? ' is-focused' : '')\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n>\n <!-- Content projection for pre-tab -->\n <ng-content select=\"lib-pre-tab\"></ng-content>\n\n @if (iconBefore) {\n <span\n class=\"icon icon-before material-symbols-outlined\"\n (click)=\"onIconBeforeClick()\"\n [ngClass]=\"{ clickable: iconBeforeClickable, disabled: disabled }\"\n >\n {{ iconBefore }}\n </span>\n }\n\n @if (isFullText) {\n <textarea\n class=\"field-input field-textarea\"\n [id]=\"inputId\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n ></textarea>\n } @else {\n <input\n [type]=\"inputType\"\n [id]=\"inputId\"\n class=\"field-input\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n }\n\n @if (iconAfter) {\n <span\n class=\"icon icon-after material-symbols-outlined\"\n (click)=\"onIconAfterClick()\"\n (keydown)=\"onIconAfterKeydown($event)\"\n [ngClass]=\"{ clickable: iconAfterClickable, disabled: disabled }\"\n [attr.tabindex]=\"iconAfterClickable && !disabled ? 0 : null\"\n [attr.role]=\"iconAfterClickable ? 'button' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n >\n {{ iconAfter }}\n </span>\n }\n\n <!-- Content projection for post-tab -->\n <ng-content select=\"lib-post-tab\"></ng-content>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.field-wrapper{display:flex;flex-direction:row;align-items:center;padding:.25rem .75rem;gap:.5rem;box-sizing:border-box;border-radius:.25rem;width:100%;min-height:2rem;transition:all .2s ease}.field-wrapper .field-input{flex:1;flex-grow:1;min-width:0;border:none;outline:none;padding:0;resize:none;font-family:Source Sans Pro,sans-serif;font-size:1rem;background:inherit}.field-wrapper .field-input:disabled{cursor:not-allowed}.field-wrapper .field-input.field-textarea{align-self:flex-start;padding:.5rem 0}.field-wrapper .icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0;font-size:1.5rem;color:inherit}.field-wrapper .icon.clickable{cursor:pointer;transition:color .2s ease}.field-wrapper .icon.clickable:hover:not(.disabled){color:#0047ba}.field-wrapper .icon.icon-before{order:0}.field-wrapper .icon.icon-after{order:2}.field-wrapper.field-default{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.field-hover{background:#fff;border:1px solid #0047ba;color:#141414}.field-wrapper.field-focused{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.is-focused{outline:.125rem solid #b967c7;outline-offset:.125rem}.field-wrapper.field-error.field-not-filled{background:#fff;border:1px solid #c73e3d;color:#676767}.field-wrapper.field-error.field-not-filled .icon{color:#b33837}.field-wrapper.field-error.field-filled{background:#f9ecec;border:1px solid #c73e3d;color:#141414}.field-wrapper.field-error.field-filled .icon{color:#b33837}.field-wrapper.field-success.field-not-filled{background:#fff;border:1px solid #3ba35a;color:#676767}.field-wrapper.field-success.field-not-filled .icon{color:#2e8545}.field-wrapper.field-success.field-filled{background:#ebf6ee;border:1px solid #3ba35a;color:#141414}.field-wrapper.field-success.field-filled .icon{color:#2e8545}.field-wrapper.field-disabled{background:#f9f9f9;border:1px solid #676767;color:#676767;cursor:not-allowed}.field-wrapper.field-disabled .icon{color:#8f8f8f}.field-wrapper.field-disabled .icon.clickable{cursor:not-allowed}.field-wrapper.field-disabled .icon.clickable:hover{color:inherit}\n"] }]
1619
+ ], template: "<div\n class=\"field-wrapper\"\n [ngClass]=\"\n 'field-' +\n state +\n ' field-' +\n status +\n (isFocused ? ' is-focused' : '') +\n (wrapContent ? ' field-wrap-content' : '')\n \"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n>\n <!-- Content projection for pre-tab -->\n <ng-content select=\"lib-pre-tab\"></ng-content>\n\n <!-- Content projection for field prefix, currently only used for chips in multi-select dropdown -->\n <ng-content select=\"[fieldPrefix]\"></ng-content>\n\n @if (iconBefore) {\n <span\n class=\"icon icon-before material-symbols-outlined\"\n (click)=\"onIconBeforeClick()\"\n [ngClass]=\"{ clickable: iconBeforeClickable, disabled: disabled }\"\n >\n {{ iconBefore }}\n </span>\n }\n\n @if (isFullText) {\n <textarea\n class=\"field-input field-textarea\"\n [id]=\"inputId\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [rows]=\"rows\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n ></textarea>\n } @else {\n <input\n [type]=\"inputType\"\n [id]=\"inputId\"\n class=\"field-input\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n (input)=\"onValueChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n }\n\n @if (iconAfter) {\n <span\n class=\"icon icon-after material-symbols-outlined\"\n (click)=\"onIconAfterClick()\"\n (keydown)=\"onIconAfterKeydown($event)\"\n [ngClass]=\"{ clickable: iconAfterClickable, disabled: disabled }\"\n [attr.tabindex]=\"iconAfterClickable && !disabled ? 0 : null\"\n [attr.role]=\"iconAfterClickable ? 'button' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n >\n {{ iconAfter }}\n </span>\n }\n\n <!-- Content projection for post-tab -->\n <ng-content select=\"lib-post-tab\"></ng-content>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.field-wrapper{display:flex;flex-direction:row;align-items:center;padding:.25rem .75rem;gap:.5rem;box-sizing:border-box;border-radius:.25rem;width:100%;min-height:2rem;transition:all .2s ease}.field-wrapper .field-input{flex:1;flex-grow:1;min-width:0;border:none;outline:none;padding:0;resize:none;font-family:Source Sans Pro,sans-serif;font-size:1rem;background:inherit}.field-wrapper .field-input:disabled{cursor:not-allowed}.field-wrapper .field-input.field-textarea{align-self:flex-start;padding:.5rem 0}.field-wrapper .icon{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;flex-shrink:0;font-size:1.5rem;color:inherit}.field-wrapper .icon.clickable{cursor:pointer;transition:color .2s ease}.field-wrapper .icon.clickable:hover:not(.disabled){color:#0047ba}.field-wrapper .icon.icon-before{order:0}.field-wrapper .icon.icon-after{order:2}.field-wrapper.field-wrap-content{flex-wrap:wrap;max-width:100%}.field-wrapper.field-wrap-content .field-input{flex:1 1 0;min-width:0}.field-wrapper.field-default{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.field-hover{background:#fff;border:1px solid #0047ba;color:#141414}.field-wrapper.field-focused{background:#fff;border:1px solid #d0d0d0;color:#141414}.field-wrapper.is-focused{outline:.125rem solid #b967c7;outline-offset:.125rem}.field-wrapper.field-error.field-not-filled{background:#fff;border:1px solid #c73e3d;color:#676767}.field-wrapper.field-error.field-not-filled .icon{color:#b33837}.field-wrapper.field-error.field-filled{background:#f9ecec;border:1px solid #c73e3d;color:#141414}.field-wrapper.field-error.field-filled .icon{color:#b33837}.field-wrapper.field-success.field-not-filled{background:#fff;border:1px solid #3ba35a;color:#676767}.field-wrapper.field-success.field-not-filled .icon{color:#2e8545}.field-wrapper.field-success.field-filled{background:#ebf6ee;border:1px solid #3ba35a;color:#141414}.field-wrapper.field-success.field-filled .icon{color:#2e8545}.field-wrapper.field-disabled{background:#f9f9f9;border:1px solid #676767;color:#676767;cursor:not-allowed}.field-wrapper.field-disabled .icon{color:#8f8f8f}.field-wrapper.field-disabled .icon.clickable{cursor:not-allowed}.field-wrapper.field-disabled .icon.clickable:hover{color:inherit}\n"] }]
1626
1620
  }], propDecorators: { inputType: [{
1627
1621
  type: Input
1628
1622
  }], inputId: [{
@@ -1663,6 +1657,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1663
1657
  type: Input
1664
1658
  }], maxHeight: [{
1665
1659
  type: Input
1660
+ }], wrapContent: [{
1661
+ type: Input
1666
1662
  }], valueChange: [{
1667
1663
  type: Output
1668
1664
  }], iconBeforeClick: [{
@@ -1875,7 +1871,7 @@ class ImpersonateModalComponent {
1875
1871
  this.subs.unsubscribe();
1876
1872
  }
1877
1873
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ImpersonateModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1878
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ImpersonateModalComponent, isStandalone: true, selector: "lib-impersonate-modal", inputs: { showModal: { classPropertyName: "showModal", publicName: "showModal", isSignal: false, isRequired: false, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: false, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: false, transformFunction: null }, accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismiss: "dismiss", init: "init" }, host: { listeners: { "document:mousedown": "outsideClick($event)", "document:keydown": "handleKeyDown($event)" } }, ngImport: i0, template: "@if (isOpen) {\n <div @libHbllFadeInOut class=\"modal-wrapper\" id=\"modalBackdrop\" data-testid=\"backdrop\">\n <div class=\"modal-container\" data-testid=\"modal\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\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 <div class=\"search-field-wrapper\">\n <lib-label\n text=\"Search patrons\"\n [for]=\"'searchInput'\"\n type=\"none\"\n class=\"sr-only\"\n ></lib-label>\n <lib-field\n inputId=\"searchInput\"\n placeholder=\"Search patrons...\"\n formControlName=\"search\"\n iconBefore=\"search\"\n [iconAfter]=\"searchIconAfter\"\n [iconAfterClickable]=\"isIconAfterClickable\"\n (iconAfterClick)=\"handleIconAfterClick()\"\n (keydown)=\"handleSearchKeyPress($event)\"\n [state]=\"fieldState\"\n data-testid=\"searchInput\"\n ></lib-field>\n </div>\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 &nbsp; &nbsp;\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 tabindex=\"-1\"\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", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #457fa6;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box}h2{font-size:1.2em;font-weight:600;margin:0;color:#404040}.warning{color:#b33837}.modal-wrapper{position:fixed;inset:0;background-color:#0000007f;z-index:10000;display:grid;place-items:center}.modal-container{color:#404040;padding:1.2em 1.4em;width:90%;max-width:30em;border-radius:4px;border:1px solid #d0d0d0;box-shadow:0 3px 6px #00245d20;background-color:#fff;display:grid;grid-template-columns:1fr;gap:1em}.modal-container .modal-header{display:flex;justify-content:space-between;border-bottom:1px solid #e7e7e7;padding-bottom:.8em}.modal-container .modal-header>button{background:transparent;border:none;padding:.25rem;height:2rem;width:2rem;display:inline-flex;align-items:center;justify-content:center;border-radius:4px}.modal-container .modal-header>button:focus{outline:2px solid #7040aa;outline-offset:2px}.modal-container .modal-header .icon-close{transition:opacity .15s;color:#676767;opacity:1;cursor:pointer}.modal-container .modal-header .icon-close:hover{opacity:.8}.modal-container .hidden{opacity:0;width:0;height:0}.modal-container .search-header{display:flex;align-items:center;justify-content:flex-end;margin-bottom:.8em}.modal-container .search-header .secondary{color:#676767}.modal-container .search-header .keyboard-key{padding:.1em .4em;border:1px solid #676767;border-radius:4px}.modal-container .search-field-wrapper{display:flex;flex-direction:column;gap:.5rem}.modal-container .search-field-wrapper .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.modal-container .search-results-wrapper{border:none;margin:0;padding:0;max-height:25em;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;display:flex;flex-direction:column;align-items:stretch;min-width:0}.modal-container .search-results-wrapper::-webkit-scrollbar{width:6px}.modal-container .search-results-wrapper::-webkit-scrollbar-track{background:#e6e6e6}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb{background-color:#b3b3b3;border-radius:5px}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb:hover{background-color:#888}.modal-container .search-results-wrapper .result-field{font-style:italic;display:flex;align-items:center;justify-content:space-between;padding:.8em}.modal-container .search-results-wrapper .result-field .lib-spinner{margin:auto;display:grid;place-items:center}.modal-container .search-results-wrapper .result-field.result{font-style:normal;padding:0}.modal-container .search-results-wrapper .result-field.result label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1;padding:.8em;display:flex;align-items:center}.modal-container .search-results-wrapper .result-field.result label .icon{font-size:1.2em;margin-right:.4em}.modal-container .search-results-wrapper .result-field.result .impersonate-button{cursor:pointer;display:inline-flex;color:#7040aa;padding:.1em .6em;border:1px solid #8f8f8f;border-radius:4px;background-color:#fff;flex-shrink:0;margin-block:.6em;margin-right:.8em}.modal-container .search-results-wrapper .result-field.result .impersonate-button:hover{color:#b967c7;background-color:#fff8}.modal-container .search-results-wrapper .result-field.result:active,.modal-container .search-results-wrapper .result-field.result.focus{background:#f2f2f2}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: LabelComponent, selector: "lib-label", inputs: ["text", "type", "showHelpIcon", "ariaLabel", "position", "isRequired", "for", "subtext"], outputs: ["helpIconClick"] }, { kind: "component", type: FieldComponent, selector: "lib-field", inputs: ["inputType", "inputId", "placeholder", "state", "status", "iconBefore", "iconAfter", "iconBeforeClickable", "iconAfterClickable", "iconBeforeAction", "iconAfterAction", "disabled", "ariaLabel", "value", "isFullText", "rows", "minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["valueChange", "iconBeforeClick", "iconAfterClick", "fieldFocus", "fieldBlur"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: ImpersonateUserPipe, name: "impersonateUser" }], animations: [libHbllFadeInOut] }); }
1874
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ImpersonateModalComponent, isStandalone: true, selector: "lib-impersonate-modal", inputs: { showModal: { classPropertyName: "showModal", publicName: "showModal", isSignal: false, isRequired: false, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: false, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: false, transformFunction: null }, accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismiss: "dismiss", init: "init" }, host: { listeners: { "document:mousedown": "outsideClick($event)", "document:keydown": "handleKeyDown($event)" } }, ngImport: i0, template: "@if (isOpen) {\n <div @libHbllFadeInOut class=\"modal-wrapper\" id=\"modalBackdrop\" data-testid=\"backdrop\">\n <div class=\"modal-container\" data-testid=\"modal\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\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 <div class=\"search-field-wrapper\">\n <lib-label\n text=\"Search patrons\"\n [for]=\"'searchInput'\"\n type=\"none\"\n class=\"sr-only\"\n ></lib-label>\n <lib-field\n inputId=\"searchInput\"\n placeholder=\"Search patrons...\"\n formControlName=\"search\"\n iconBefore=\"search\"\n [iconAfter]=\"searchIconAfter\"\n [iconAfterClickable]=\"isIconAfterClickable\"\n (iconAfterClick)=\"handleIconAfterClick()\"\n (keydown)=\"handleSearchKeyPress($event)\"\n [state]=\"fieldState\"\n data-testid=\"searchInput\"\n ></lib-field>\n </div>\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 &nbsp; &nbsp;\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 tabindex=\"-1\"\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", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #457fa6;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box}h2{font-size:1.2em;font-weight:600;margin:0;color:#404040}.warning{color:#b33837}.modal-wrapper{position:fixed;inset:0;background-color:#0000007f;z-index:10000;display:grid;place-items:center}.modal-container{color:#404040;padding:1.2em 1.4em;width:90%;max-width:30em;border-radius:4px;border:1px solid #d0d0d0;box-shadow:0 3px 6px #00245d20;background-color:#fff;display:grid;grid-template-columns:1fr;gap:1em}.modal-container .modal-header{display:flex;justify-content:space-between;border-bottom:1px solid #e7e7e7;padding-bottom:.8em}.modal-container .modal-header>button{background:transparent;border:none;padding:.25rem;height:2rem;width:2rem;display:inline-flex;align-items:center;justify-content:center;border-radius:4px}.modal-container .modal-header>button:focus{outline:2px solid #7040aa;outline-offset:2px}.modal-container .modal-header .icon-close{transition:opacity .15s;color:#676767;opacity:1;cursor:pointer}.modal-container .modal-header .icon-close:hover{opacity:.8}.modal-container .hidden{opacity:0;width:0;height:0}.modal-container .search-header{display:flex;align-items:center;justify-content:flex-end;margin-bottom:.8em}.modal-container .search-header .secondary{color:#676767}.modal-container .search-header .keyboard-key{padding:.1em .4em;border:1px solid #676767;border-radius:4px}.modal-container .search-field-wrapper{display:flex;flex-direction:column;gap:.5rem}.modal-container .search-field-wrapper .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.modal-container .search-results-wrapper{border:none;margin:0;padding:0;max-height:25em;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;display:flex;flex-direction:column;align-items:stretch;min-width:0}.modal-container .search-results-wrapper::-webkit-scrollbar{width:6px}.modal-container .search-results-wrapper::-webkit-scrollbar-track{background:#e6e6e6}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb{background-color:#b3b3b3;border-radius:5px}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb:hover{background-color:#888}.modal-container .search-results-wrapper .result-field{font-style:italic;display:flex;align-items:center;justify-content:space-between;padding:.8em}.modal-container .search-results-wrapper .result-field .lib-spinner{margin:auto;display:grid;place-items:center}.modal-container .search-results-wrapper .result-field.result{font-style:normal;padding:0}.modal-container .search-results-wrapper .result-field.result label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1;padding:.8em;display:flex;align-items:center}.modal-container .search-results-wrapper .result-field.result label .icon{font-size:1.2em;margin-right:.4em}.modal-container .search-results-wrapper .result-field.result .impersonate-button{cursor:pointer;display:inline-flex;color:#7040aa;padding:.1em .6em;border:1px solid #8f8f8f;border-radius:4px;background-color:#fff;flex-shrink:0;margin-block:.6em;margin-right:.8em}.modal-container .search-results-wrapper .result-field.result .impersonate-button:hover{color:#b967c7;background-color:#fff8}.modal-container .search-results-wrapper .result-field.result:active,.modal-container .search-results-wrapper .result-field.result.focus{background:#f2f2f2}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: LabelComponent, selector: "lib-label", inputs: ["text", "type", "showHelpIcon", "ariaLabel", "position", "isRequired", "for", "subtext"], outputs: ["helpIconClick"] }, { kind: "component", type: FieldComponent, selector: "lib-field", inputs: ["inputType", "inputId", "placeholder", "state", "status", "iconBefore", "iconAfter", "iconBeforeClickable", "iconAfterClickable", "iconBeforeAction", "iconAfterAction", "disabled", "ariaLabel", "value", "isFullText", "rows", "minWidth", "maxWidth", "minHeight", "maxHeight", "wrapContent"], outputs: ["valueChange", "iconBeforeClick", "iconAfterClick", "fieldFocus", "fieldBlur"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: ImpersonateUserPipe, name: "impersonateUser" }], animations: [libHbllFadeInOut] }); }
1879
1875
  }
1880
1876
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ImpersonateModalComponent, decorators: [{
1881
1877
  type: Component,
@@ -2127,7 +2123,7 @@ const ADVANCED_SEARCH_OPTIONS = {
2127
2123
  'ldsbc -- reserve': 'Reserve',
2128
2124
  },
2129
2125
  },
2130
- // This could be refactored to be a list, but currently the multi-select component expects an object
2126
+ // This could be refactored to be a list, but currently the multi-select dropdown component expects an object
2131
2127
  languages: {
2132
2128
  English: 'English',
2133
2129
  Arabic: 'Arabic',
@@ -2248,107 +2244,6 @@ const validateDateRangeFields = () => {
2248
2244
  };
2249
2245
  };
2250
2246
 
2251
- class HbllMultiSelectComponent {
2252
- constructor() {
2253
- this.allOptions = {};
2254
- this.label = '';
2255
- /**
2256
- * An array that indicates which keys are selected.
2257
- */
2258
- this.selectedKeys = [];
2259
- /**
2260
- * An EventEmitter that emits an array of keys indicating which options are currently selected.
2261
- */
2262
- this.selectedKeysChange = new EventEmitter();
2263
- this.inputControl = new FormControl('');
2264
- this.filteredOptions$ = combineLatest([
2265
- this.inputControl.valueChanges.pipe(startWith('')),
2266
- this.selectedKeysChange.asObservable().pipe(startWith([])),
2267
- ]).pipe(map$1(([key]) =>
2268
- // Display filtered options if there is a value, else display all options currently not selected.
2269
- key
2270
- ? this.filterOptions(key)
2271
- : Object.keys(this.allOptions).filter((key) => !this.selectedKeys.find((selectedOption) => key === selectedOption))));
2272
- this.separatorKeysCodes = [ENTER, COMMA];
2273
- /**
2274
- * Adds an option to the array of selected keys when a user selects from the autocomplete.
2275
- * @param {MatAutocompleteSelectedEvent} event MatAutocompleteSelectedEvent
2276
- */
2277
- this.selectOption = (event) => {
2278
- this.addOptionToSelectedOptions(event.option.value);
2279
- };
2280
- /**
2281
- * Filters the options by the supplied value as well as the currently selected values.
2282
- * @param {string} value value to filter by.
2283
- * @returns {string[]} the filtered keys
2284
- */
2285
- this.filterOptions = (value) => {
2286
- return Object.keys(this.allOptions).filter((key) => this.allOptions[key].toLowerCase().includes(value.toLowerCase()) &&
2287
- !this.selectedKeys.includes(key));
2288
- };
2289
- /**
2290
- * Adds a key to the selected keys array if the option is truthy and not already in the array.
2291
- * The input is also cleared (if available), and the new selected keys are emitted.
2292
- * @param {key} option key to add
2293
- */
2294
- this.addOptionToSelectedOptions = (key) => {
2295
- if (key && !this.selectedKeys.includes(key) && this.allOptions[key]) {
2296
- this.selectedKeys.push(key);
2297
- this.inputControl.setValue('');
2298
- this.selectedKeysChange.emit(this.selectedKeys);
2299
- if (this.inputRef)
2300
- this.inputRef.nativeElement.value = '';
2301
- }
2302
- };
2303
- }
2304
- /**
2305
- * Adds a key from the input to the array of selected key.
2306
- * The value from the input must match a key from the record of all options.
2307
- * @param {MatChipInputEvent} event MatChipInputEvent
2308
- */
2309
- addOption(event) {
2310
- this.addOptionToSelectedOptions(event.value);
2311
- }
2312
- /**
2313
- * Removes a key from the array of selected options and emits the new selected keys.
2314
- * @param {MultiSelectKeyValPair} key key to remove
2315
- */
2316
- removeOption(key) {
2317
- const index = this.selectedKeys.indexOf(key);
2318
- if (index >= 0) {
2319
- this.selectedKeys.splice(index, 1);
2320
- this.selectedKeysChange.emit(this.selectedKeys);
2321
- }
2322
- }
2323
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: HbllMultiSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2324
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: HbllMultiSelectComponent, isStandalone: true, selector: "lib-multi-select", inputs: { elementId: "elementId", allOptions: "allOptions", label: "label", selectedKeys: "selectedKeys" }, outputs: { selectedKeysChange: "selectedKeysChange" }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<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=\"sr-only\" for=\"{{elementId}}\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"{{elementId}}\"\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", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.components-multi-select{font:inherit}.components-multi-select mat-form-field{font:inherit;background-color:#fff;width:100%}.components-multi-select mat-form-field .mat-mdc-form-field-infix{padding:.35em 0;min-height:0}.components-multi-select mat-form-field .mat-mdc-chip-input{font:inherit;margin-left:0}.components-multi-select mat-form-field .mat-mdc-chip-input::placeholder{opacity:.75}.components-multi-select mat-form-field .mat-mdc-text-field-wrapper{padding:0 .5em}.components-multi-select mat-form-field .mdc-evolution-chip-set__chips{margin-bottom:.25rem}.components-multi-select mat-form-field .mat-mdc-chip-action:focus,.components-multi-select mat-form-field input:focus{outline:none;box-shadow:none;border:none}.components-multi-select mat-form-field .mat-mdc-chip-action:focus-visible,.components-multi-select mat-form-field input:focus-visible{outline:.18rem solid #b967c7}.components-multi-select .components-icon{font-size:1em}.components-multi-select .mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{font:inherit}.mat-mdc-option.mdc-list-item{background-color:#fff;font:inherit}.mat-mdc-autocomplete-panel{background-color:#fff!important}.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item:hover:not(.mdc-list-item--disabled),.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active,.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active.mdc-list-item,.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item.mdc-list-item--selected{background-color:#e7e7e7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$3.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i1$3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i1$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i1$3.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2325
- }
2326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: HbllMultiSelectComponent, decorators: [{
2327
- type: Component,
2328
- args: [{ selector: 'lib-multi-select', imports: [
2329
- CommonModule,
2330
- MatChipsModule,
2331
- MatFormFieldModule,
2332
- MatAutocompleteModule,
2333
- ReactiveFormsModule,
2334
- MatIconModule,
2335
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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=\"sr-only\" for=\"{{elementId}}\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"{{elementId}}\"\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", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.components-multi-select{font:inherit}.components-multi-select mat-form-field{font:inherit;background-color:#fff;width:100%}.components-multi-select mat-form-field .mat-mdc-form-field-infix{padding:.35em 0;min-height:0}.components-multi-select mat-form-field .mat-mdc-chip-input{font:inherit;margin-left:0}.components-multi-select mat-form-field .mat-mdc-chip-input::placeholder{opacity:.75}.components-multi-select mat-form-field .mat-mdc-text-field-wrapper{padding:0 .5em}.components-multi-select mat-form-field .mdc-evolution-chip-set__chips{margin-bottom:.25rem}.components-multi-select mat-form-field .mat-mdc-chip-action:focus,.components-multi-select mat-form-field input:focus{outline:none;box-shadow:none;border:none}.components-multi-select mat-form-field .mat-mdc-chip-action:focus-visible,.components-multi-select mat-form-field input:focus-visible{outline:.18rem solid #b967c7}.components-multi-select .components-icon{font-size:1em}.components-multi-select .mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{font:inherit}.mat-mdc-option.mdc-list-item{background-color:#fff;font:inherit}.mat-mdc-autocomplete-panel{background-color:#fff!important}.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item:hover:not(.mdc-list-item--disabled),.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active,.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active.mdc-list-item,.mat-mdc-autocomplete-panel .mat-mdc-option.mdc-list-item.mdc-list-item--selected{background-color:#e7e7e7}\n"] }]
2336
- }], propDecorators: { inputRef: [{
2337
- type: ViewChild,
2338
- args: ['input']
2339
- }], elementId: [{
2340
- type: Input,
2341
- args: [{ required: true }]
2342
- }], allOptions: [{
2343
- type: Input
2344
- }], label: [{
2345
- type: Input
2346
- }], selectedKeys: [{
2347
- type: Input
2348
- }], selectedKeysChange: [{
2349
- type: Output
2350
- }] } });
2351
-
2352
2247
  /**
2353
2248
  * A flexible, reusable checkbox component that supports multiple states (error, disabled, indeterminate, default, and checked)
2354
2249
  *
@@ -2451,6 +2346,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
2451
2346
  class DateRangeComponent {
2452
2347
  constructor() {
2453
2348
  this.fb = inject(NonNullableFormBuilder);
2349
+ this.isKeyboardFocus = false;
2454
2350
  /**
2455
2351
  * Emits `{ from: string, to: string }` object if both values are set to a valid or empty state by the user.
2456
2352
  */
@@ -2494,12 +2390,20 @@ class DateRangeComponent {
2494
2390
  if (to !== this.dateForm.controls.to.value)
2495
2391
  this.dateForm.controls.to.setValue(to);
2496
2392
  }
2393
+ onDocumentKeydown(event) {
2394
+ if (event.key === 'Tab') {
2395
+ this.isKeyboardFocus = true;
2396
+ }
2397
+ }
2398
+ onDocumentPointerdown() {
2399
+ this.isKeyboardFocus = false;
2400
+ }
2497
2401
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2498
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DateRangeComponent, isStandalone: true, selector: "lib-date-range", inputs: { from: "from", to: "to" }, outputs: { validDateChange: "validDateChange", fromChange: "fromChange", toChange: "toChange" }, ngImport: i0, template: "<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", styles: ["input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}#fromTo{margin-top:.375rem;margin-bottom:.5rem}#fromTo label{margin-right:.7em}#fromTo label:not(:first-of-type){margin-left:.7em}#fromTo input{font-size:inherit;width:3.5em}#fromTo input.error{border-color:#b33837}@media screen and (min-width: 690px){#fromTo{margin-bottom:.875rem}#fromTo label{margin-right:.65em}#fromTo label:not(:first-of-type){margin-left:.65em}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], animations: [libHbllFadeInOut], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2402
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DateRangeComponent, isStandalone: true, selector: "lib-date-range", inputs: { from: "from", to: "to" }, outputs: { validDateChange: "validDateChange", fromChange: "fromChange", toChange: "toChange" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)", "document:mousedown": "onDocumentPointerdown()", "document:pointerdown": "onDocumentPointerdown()" } }, ngImport: i0, template: "<form\n id=\"fromTo\"\n data-testid=\"fromTo\"\n [formGroup]=\"dateForm\"\n [class.ss-keyboard-focus]=\"isKeyboardFocus\"\n>\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", styles: ["input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}#fromTo{margin-top:.375rem;margin-bottom:.5rem}#fromTo label{margin-right:.7em}#fromTo label:not(:first-of-type){margin-left:.7em}#fromTo input{font-size:inherit;width:3.5em}#fromTo input.error{border-color:#b33837}input:focus{outline:none}.ss-keyboard-focus input:focus{outline:.125rem solid #b967c7;outline-offset:.125rem}@media screen and (min-width: 690px){#fromTo{margin-bottom:.875rem}#fromTo label{margin-right:.65em}#fromTo label:not(:first-of-type){margin-left:.65em}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], animations: [libHbllFadeInOut], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2499
2403
  }
2500
2404
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DateRangeComponent, decorators: [{
2501
2405
  type: Component,
2502
- args: [{ selector: 'lib-date-range', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, ReactiveFormsModule], animations: [libHbllFadeInOut], template: "<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", styles: ["input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}#fromTo{margin-top:.375rem;margin-bottom:.5rem}#fromTo label{margin-right:.7em}#fromTo label:not(:first-of-type){margin-left:.7em}#fromTo input{font-size:inherit;width:3.5em}#fromTo input.error{border-color:#b33837}@media screen and (min-width: 690px){#fromTo{margin-bottom:.875rem}#fromTo label{margin-right:.65em}#fromTo label:not(:first-of-type){margin-left:.65em}}\n"] }]
2406
+ args: [{ selector: 'lib-date-range', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, ReactiveFormsModule], animations: [libHbllFadeInOut], template: "<form\n id=\"fromTo\"\n data-testid=\"fromTo\"\n [formGroup]=\"dateForm\"\n [class.ss-keyboard-focus]=\"isKeyboardFocus\"\n>\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", styles: ["input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}#fromTo{margin-top:.375rem;margin-bottom:.5rem}#fromTo label{margin-right:.7em}#fromTo label:not(:first-of-type){margin-left:.7em}#fromTo input{font-size:inherit;width:3.5em}#fromTo input.error{border-color:#b33837}input:focus{outline:none}.ss-keyboard-focus input:focus{outline:.125rem solid #b967c7;outline-offset:.125rem}@media screen and (min-width: 690px){#fromTo{margin-bottom:.875rem}#fromTo label{margin-right:.65em}#fromTo label:not(:first-of-type){margin-left:.65em}}\n"] }]
2503
2407
  }], propDecorators: { validDateChange: [{
2504
2408
  type: Output
2505
2409
  }], fromChange: [{
@@ -2510,92 +2414,495 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
2510
2414
  type: Input
2511
2415
  }], to: [{
2512
2416
  type: Input
2417
+ }], onDocumentKeydown: [{
2418
+ type: HostListener,
2419
+ args: ['document:keydown', ['$event']]
2420
+ }], onDocumentPointerdown: [{
2421
+ type: HostListener,
2422
+ args: ['document:mousedown']
2423
+ }, {
2424
+ type: HostListener,
2425
+ args: ['document:pointerdown']
2513
2426
  }] } });
2514
2427
 
2515
- const DATE_VALIDATOR_REGEX = '^[0-9]{4}$';
2516
- class AdvancedSearchComponent {
2428
+ /**
2429
+ * A dropdown component that combines a label and a searchable select field.
2430
+ * Features include:
2431
+ * - Searchable input to filter options
2432
+ * - Keyboard navigation support
2433
+ * - Optional label with help icon
2434
+ * - Optional multiple selection with removable chips
2435
+ * - Multiple states (default, focused, error, etc.)
2436
+ *
2437
+ * @example
2438
+ * ```html
2439
+ * <!-- Basic dropdown -->
2440
+ * <lib-dropdown
2441
+ * label="Select an option"
2442
+ * [options]="myOptions"
2443
+ * (valueChange)="onSelectionChange($event)">
2444
+ * </lib-dropdown>
2445
+ *
2446
+ * <!-- Required dropdown with help icon -->
2447
+ * <lib-dropdown
2448
+ * label="Category"
2449
+ * labelType="required"
2450
+ * [showHelpIcon]="true"
2451
+ * [options]="categories"
2452
+ * placeholder="Choose a category"
2453
+ * (valueChange)="onCategoryChange($event)">
2454
+ * </lib-dropdown>
2455
+ *
2456
+ * <!-- Dropdown with error state -->
2457
+ * <lib-dropdown
2458
+ * label="Status"
2459
+ * [options]="statuses"
2460
+ * state="error"
2461
+ * subtext="Please select a status"
2462
+ * (valueChange)="onStatusChange($event)">
2463
+ * </lib-dropdown>
2464
+ * ```
2465
+ */
2466
+ class DropdownComponent {
2517
2467
  constructor() {
2518
- this.fb = inject(NonNullableFormBuilder);
2519
- this.advancedSearch = new EventEmitter();
2520
- this.subscription = new Subscription();
2521
- /**
2522
- * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.
2523
- * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.
2524
- */
2525
- this.syncUpFieldAndQualifier = (fg, scope) => {
2526
- this.subscription.add(fg.controls.field.valueChanges
2527
- .pipe(filter(() => scope === 'local'), tap((val) => fg.controls.qualifier.setValue(ADVANCED_SEARCH_OPTIONS.qualifiers[val][0])))
2528
- .subscribe());
2529
- };
2530
- this.advancedSearchForm = this.fb.group({
2531
- queries: this.fb.array([], [Validators.maxLength(ADVANCED_SEARCH_QUERIES_LIMIT)]),
2532
- types: [[]],
2533
- collections: [[]],
2534
- languages: [[]],
2535
- date: this.fb.group({
2536
- from: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],
2537
- to: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],
2538
- }, { validators: validateDateRangeFields() }),
2539
- limitResults: this.fb.group({
2540
- peerReviewed: [false],
2541
- }),
2542
- expandResults: this.fb.group({
2543
- applyEquivalentSubjects: [false],
2544
- fullText: [false],
2545
- }),
2468
+ this.labelType = 'none';
2469
+ this.showHelpIcon = false;
2470
+ this.placeholder = 'Select an option';
2471
+ this.options = [];
2472
+ this.state = 'default';
2473
+ this.disabled = false;
2474
+ this.searchable = true;
2475
+ this.multiple = false;
2476
+ this.selectedValues = [];
2477
+ this.valueChange = new EventEmitter();
2478
+ this.selectedValuesChange = new EventEmitter();
2479
+ this.helpIconClick = new EventEmitter();
2480
+ this.value = '';
2481
+ this.searchText = '';
2482
+ this.isOpen = false;
2483
+ this.selectedIndex = -1;
2484
+ this.filteredOptions = [];
2485
+ this.elementRef = inject(ElementRef);
2486
+ this.cdr = inject(ChangeDetectorRef);
2487
+ this.onChange = () => { };
2488
+ this.onTouched = () => { };
2489
+ }
2490
+ ngOnInit() {
2491
+ this.updateFilteredOptions();
2492
+ }
2493
+ ngOnChanges(changes) {
2494
+ if (changes['options'] || changes['selectedValues'] || changes['multiple']) {
2495
+ this.updateFilteredOptions();
2496
+ }
2497
+ }
2498
+ /**
2499
+ * Gets the display text for the selected value
2500
+ */
2501
+ get displayText() {
2502
+ if (this.multiple) {
2503
+ return this.searchText;
2504
+ }
2505
+ if (!this.value && !this.searchText) {
2506
+ return '';
2507
+ }
2508
+ if (this.searchText) {
2509
+ return this.searchText;
2510
+ }
2511
+ const selectedOption = this.options.find((opt) => opt.value === this.value);
2512
+ return selectedOption ? selectedOption.label : '';
2513
+ }
2514
+ /**
2515
+ * Gets options currently selected in multiple mode, preserving selectedValues order.
2516
+ */
2517
+ get selectedOptions() {
2518
+ return (this.selectedValues ?? [])
2519
+ .map((selectedValue) => this.options.find((option) => option.value === selectedValue))
2520
+ .filter((option) => !!option);
2521
+ }
2522
+ /**
2523
+ * Checks whether an option is currently selected.
2524
+ * @param {DropdownOption} option option to check
2525
+ * @returns {boolean} whether the option is selected
2526
+ */
2527
+ isOptionSelected(option) {
2528
+ return this.multiple
2529
+ ? (this.selectedValues ?? []).includes(option.value)
2530
+ : option.value === this.value;
2531
+ }
2532
+ /**
2533
+ * Toggles dropdown open/closed state
2534
+ */
2535
+ toggleDropdown() {
2536
+ if (this.disabled)
2537
+ return;
2538
+ this.isOpen = !this.isOpen;
2539
+ if (this.isOpen) {
2540
+ this.updateFilteredOptions();
2541
+ this.selectedIndex = this.multiple
2542
+ ? this.selectedIndex
2543
+ : this.filteredOptions.findIndex((opt) => opt.value === this.value);
2544
+ // Scroll to the currently selected item
2545
+ this.scrollHighlightedIntoView();
2546
+ }
2547
+ }
2548
+ /**
2549
+ * Focuses the inner input before toggling so keyboard navigation works after mouse opens.
2550
+ */
2551
+ onFieldClick() {
2552
+ if (this.disabled)
2553
+ return;
2554
+ const input = this.elementRef.nativeElement.querySelector('.field-input');
2555
+ input?.focus();
2556
+ this.toggleDropdown();
2557
+ }
2558
+ /**
2559
+ * Handles input changes for search functionality
2560
+ */
2561
+ onSearchInput(event) {
2562
+ const input = event.target;
2563
+ this.searchText = input.value;
2564
+ this.filterOptions();
2565
+ if (!this.isOpen) {
2566
+ this.isOpen = true;
2567
+ }
2568
+ }
2569
+ /**
2570
+ * Filters options based on search text
2571
+ */
2572
+ filterOptions() {
2573
+ this.updateFilteredOptions();
2574
+ this.scrollHighlightedIntoView();
2575
+ }
2576
+ /**
2577
+ * Updates filtered options based on search text and current multiple selection.
2578
+ */
2579
+ updateFilteredOptions() {
2580
+ const searchText = this.searchText.toLowerCase();
2581
+ const selectedValues = new Set(this.selectedValues ?? []);
2582
+ this.filteredOptions = this.options.filter((option) => {
2583
+ const matchesSearch = !searchText || option.label.toLowerCase().includes(searchText);
2584
+ const isAvailable = !this.multiple || !selectedValues.has(option.value);
2585
+ return matchesSearch && isAvailable;
2546
2586
  });
2547
- this.isSubmitted = false;
2548
- this.advancedSearchOptions = ADVANCED_SEARCH_OPTIONS;
2549
- this.advancedSearchFieldMap = ADVANCED_SEARCH_FIELD_MAP;
2550
- this.advancedSearchQualifierMap = ADVANCED_SEARCH_QUALIFIER_MAP;
2551
- /**
2552
- * Add a query to `queries` `FormArray`. This FormGroup has an additional `boolean` control.
2553
- */
2554
- this.addQuery = () => {
2555
- this.queries.push(this.fb.group({
2556
- boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0]],
2557
- field: [
2558
- ADVANCED_SEARCH_OPTIONS.fields[0],
2559
- ],
2560
- qualifier: [
2561
- ADVANCED_SEARCH_OPTIONS.qualifiers[ADVANCED_SEARCH_OPTIONS.localFields[0]][0],
2562
- ],
2563
- query: ['', Validators.required],
2564
- }));
2565
- this.syncUpFieldAndQualifier(this.queries.at(-1), this.config.scope);
2566
- };
2567
- this.removeQuery = (i) => {
2568
- this.queries.removeAt(i);
2569
- };
2570
- /**
2571
- * Prepares appropriate query params before performing a local advanced search.
2572
- */
2573
- this.doLocalAdvancedSearch = () => {
2574
- this.doAdvancedSearch({
2575
- localAdvancedSearch: {
2576
- ...this.config.localAdvancedSearch,
2577
- creationDate: this.gatherToAndFromValues(),
2578
- selectedLanguages: this.languages.value,
2579
- selectedResourceTypes: this.types.value,
2580
- selectedCollections: this.collections.value,
2581
- },
2582
- });
2583
- };
2584
- /**
2585
- * Prepares appropriate query params before performing an external advanced search.
2586
- */
2587
- this.doExternalAdvancedSearch = () => {
2588
- this.doAdvancedSearch({
2589
- externalAdvancedSearch: {
2590
- ...this.config.externalAdvancedSearch,
2591
- datePublished: this.gatherToAndFromValues(),
2592
- selectedLanguages: this.languages.value,
2593
- limitResults: {
2594
- peerReviewed: this.peerReviewed.value,
2595
- },
2596
- expandResults: {
2597
- applyEquivalentSubjects: this.applyEquivalentSubjects.value,
2598
- fullText: this.fullText.value,
2587
+ this.selectedIndex = this.filteredOptions.length ? 0 : -1;
2588
+ }
2589
+ /**
2590
+ * Clears search text and resets the filtered options.
2591
+ */
2592
+ resetSearch() {
2593
+ this.searchText = '';
2594
+ this.updateFilteredOptions();
2595
+ }
2596
+ /**
2597
+ * Scrolls the highlighted item into view
2598
+ */
2599
+ scrollHighlightedIntoView() {
2600
+ this.cdr.detectChanges();
2601
+ setTimeout(() => {
2602
+ if (!this.dropdownMenuItems)
2603
+ return;
2604
+ const menuContainer = this.dropdownMenuItems.nativeElement;
2605
+ const highlightedItem = menuContainer.querySelector('.dropdown-menu-item.highlighted');
2606
+ if (highlightedItem) {
2607
+ highlightedItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
2608
+ }
2609
+ }, 0);
2610
+ }
2611
+ /**
2612
+ * Selects an option from the dropdown
2613
+ */
2614
+ selectOption(option) {
2615
+ if (option.disabled)
2616
+ return;
2617
+ if (this.multiple) {
2618
+ if (!(this.selectedValues ?? []).includes(option.value)) {
2619
+ this.selectedValues = [...(this.selectedValues ?? []), option.value];
2620
+ this.emitSelectedValues();
2621
+ }
2622
+ this.resetSearch();
2623
+ this.isOpen = true;
2624
+ this.scrollHighlightedIntoView();
2625
+ return;
2626
+ }
2627
+ this.value = option.value;
2628
+ this.resetSearch();
2629
+ this.isOpen = false;
2630
+ this.onChange(this.value);
2631
+ this.valueChange.emit(this.value);
2632
+ }
2633
+ /**
2634
+ * Removes a selected value in multiple mode.
2635
+ */
2636
+ removeSelectedOption(value, event) {
2637
+ event?.stopPropagation();
2638
+ if (this.disabled || !this.multiple)
2639
+ return;
2640
+ this.selectedValues = (this.selectedValues ?? []).filter((selectedValue) => selectedValue !== value);
2641
+ this.emitSelectedValues();
2642
+ this.updateFilteredOptions();
2643
+ }
2644
+ /**
2645
+ * Emits the current multiple selection through Angular forms and component output.
2646
+ */
2647
+ emitSelectedValues() {
2648
+ const selectedValues = [...(this.selectedValues ?? [])];
2649
+ this.onChange(selectedValues);
2650
+ this.selectedValuesChange.emit(selectedValues);
2651
+ }
2652
+ /**
2653
+ * Handles keyboard navigation
2654
+ */
2655
+ onKeyDown(event) {
2656
+ if (this.disabled)
2657
+ return;
2658
+ switch (event.key) {
2659
+ case 'ArrowDown':
2660
+ event.preventDefault();
2661
+ if (!this.isOpen) {
2662
+ this.isOpen = true;
2663
+ }
2664
+ else {
2665
+ this.selectedIndex = Math.min(this.selectedIndex + 1, this.filteredOptions.length - 1);
2666
+ this.scrollHighlightedIntoView();
2667
+ }
2668
+ break;
2669
+ case 'ArrowUp':
2670
+ event.preventDefault();
2671
+ if (this.isOpen) {
2672
+ this.selectedIndex = Math.max(this.selectedIndex - 1, 0);
2673
+ this.scrollHighlightedIntoView();
2674
+ }
2675
+ break;
2676
+ case 'Enter':
2677
+ event.preventDefault();
2678
+ if (this.isOpen &&
2679
+ this.selectedIndex >= 0 &&
2680
+ this.selectedIndex < this.filteredOptions.length) {
2681
+ this.selectOption(this.filteredOptions[this.selectedIndex]);
2682
+ }
2683
+ else {
2684
+ this.toggleDropdown();
2685
+ }
2686
+ break;
2687
+ case 'Escape':
2688
+ event.preventDefault();
2689
+ this.isOpen = false;
2690
+ this.resetSearch();
2691
+ break;
2692
+ case 'Tab':
2693
+ if (this.isOpen) {
2694
+ this.isOpen = false;
2695
+ this.resetSearch();
2696
+ }
2697
+ break;
2698
+ }
2699
+ }
2700
+ /**
2701
+ * Handles blur event
2702
+ */
2703
+ onBlur() {
2704
+ setTimeout(() => {
2705
+ if (!this.elementRef.nativeElement.contains(document.activeElement)) {
2706
+ this.isOpen = false;
2707
+ this.resetSearch();
2708
+ }
2709
+ }, 200);
2710
+ }
2711
+ /**
2712
+ * Handles help icon click event
2713
+ */
2714
+ onHelpIconClick() {
2715
+ this.helpIconClick.emit();
2716
+ }
2717
+ /**
2718
+ * Closes dropdown when clicking outside
2719
+ */
2720
+ onDocumentClick(event) {
2721
+ if (!this.elementRef.nativeElement.contains(event.target)) {
2722
+ this.isOpen = false;
2723
+ this.resetSearch();
2724
+ }
2725
+ }
2726
+ // ControlValueAccessor implementation
2727
+ writeValue(value) {
2728
+ if (Array.isArray(value)) {
2729
+ this.selectedValues = [...value];
2730
+ this.value = '';
2731
+ }
2732
+ else {
2733
+ this.value = value || '';
2734
+ this.selectedValues = [];
2735
+ }
2736
+ this.updateFilteredOptions();
2737
+ }
2738
+ registerOnChange(fn) {
2739
+ this.onChange = fn;
2740
+ }
2741
+ registerOnTouched(fn) {
2742
+ this.onTouched = fn;
2743
+ }
2744
+ setDisabledState(isDisabled) {
2745
+ this.disabled = isDisabled;
2746
+ }
2747
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2748
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DropdownComponent, isStandalone: true, selector: "lib-dropdown", inputs: { label: "label", inputId: "inputId", labelType: "labelType", showHelpIcon: "showHelpIcon", subtext: "subtext", placeholder: "placeholder", options: "options", state: "state", disabled: "disabled", ariaLabel: "ariaLabel", searchable: "searchable", multiple: "multiple", selectedValues: "selectedValues" }, outputs: { valueChange: "valueChange", selectedValuesChange: "selectedValuesChange", helpIconClick: "helpIconClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
2749
+ {
2750
+ provide: NG_VALUE_ACCESSOR,
2751
+ useExisting: forwardRef(() => DropdownComponent),
2752
+ multi: true,
2753
+ },
2754
+ ], viewQueries: [{ propertyName: "dropdownInput", first: true, predicate: ["dropdownInput"], descendants: true }, { propertyName: "dropdownMenuItems", first: true, predicate: ["dropdownMenuItems"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dropdown-wrapper\">\n @if (label) {\n <lib-label\n [for]=\"inputId\"\n [text]=\"label\"\n [type]=\"labelType\"\n [showHelpIcon]=\"showHelpIcon\"\n [subtext]=\"subtext\"\n (helpIconClick)=\"onHelpIconClick()\"\n ></lib-label>\n }\n\n <div\n class=\"dropdown-field-container\"\n [ngClass]=\"'dropdown-' + state\"\n >\n <div\n class=\"dropdown-field-wrapper\"\n [class.dropdown-field-wrapper-multiple]=\"multiple\"\n (click)=\"onFieldClick()\"\n >\n <lib-field\n #dropdownInput\n [class.dropdown-multi-field]=\"multiple\"\n [inputId]=\"inputId\"\n [placeholder]=\"multiple && selectedOptions.length ? '' : placeholder\"\n [value]=\"displayText\"\n [disabled]=\"disabled\"\n [state]=\"state\"\n [wrapContent]=\"multiple\"\n [ariaLabel]=\"ariaLabel ? ariaLabel : label\"\n [iconAfter]=\"isOpen ? 'expand_less' : 'expand_more'\"\n [attr.readonly]=\"!searchable\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n >\n @if (multiple && selectedOptions.length) {\n <div fieldPrefix class=\"dropdown-selected-chips\">\n @for (option of selectedOptions; track option.value) {\n <span class=\"dropdown-selected-chip\" data-testid=\"dropdownChip\">\n <span class=\"dropdown-selected-chip-label\">{{ option.label }}</span>\n <button\n type=\"button\"\n class=\"dropdown-selected-chip-remove\"\n [attr.aria-label]=\"'remove ' + option.label\"\n (click)=\"removeSelectedOption(option.value, $event)\"\n data-testid=\"removeDropdownChip\"\n >\n <span class=\"material-symbols-outlined\">cancel</span>\n </button>\n </span>\n }\n </div>\n }\n </lib-field>\n </div>\n\n @if (isOpen) {\n <div class=\"dropdown-menu\">\n <div class=\"dropdown-menu-items\" #dropdownMenuItems>\n @if (filteredOptions.length === 0) {\n <div class=\"dropdown-menu-item no-results\">No results found</div>\n }\n @for (option of filteredOptions; track option.value; let i = $index) {\n <div\n class=\"dropdown-menu-item\"\n [ngClass]=\"{\n selected: isOptionSelected(option),\n highlighted: i === selectedIndex,\n disabled: option.disabled\n }\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.dropdown-wrapper{display:flex;flex-direction:column;align-items:flex-start;padding:0;gap:.5rem;min-width:0;width:100%}.dropdown-field-container{min-width:0;position:relative;width:100%}.dropdown-field-container .dropdown-field-wrapper{cursor:pointer;min-width:0;width:100%}.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper{min-height:2.5rem}.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper.is-focused,.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper:focus-within{outline:none}.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper.is-focused .field-input{border-radius:.125rem;outline:.125rem solid #b967c7;outline-offset:.125rem}.dropdown-field-container .dropdown-field-wrapper lib-field{cursor:pointer;display:block;min-width:0;pointer-events:none;width:100%}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper{cursor:pointer}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input{cursor:pointer;pointer-events:auto}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input:not([readonly]){cursor:text}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .icon-after{pointer-events:none}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chips{display:flex;flex:0 0 100%;flex-wrap:wrap;gap:.25rem;min-width:0;max-width:100%;pointer-events:auto;width:100%}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip{display:inline-flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;padding:.125rem .25rem .125rem .5rem;border-radius:1rem;background:#e5edf8;color:#141414;font-size:.875rem;line-height:1.25rem}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip-label{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-left:.25rem;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;pointer-events:auto}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip-remove .material-symbols-outlined{font-size:1.5rem}.dropdown-field-container .dropdown-menu{position:absolute;top:100%;left:0;width:100%;max-height:15rem;background:#fff;border:1px solid #d0d0d0;border-radius:0 0 .25rem .25rem;z-index:1000;overflow:hidden;box-shadow:0 2px 8px #0000001a}.dropdown-field-container .dropdown-menu .dropdown-menu-items{max-height:15rem;overflow-y:auto;overflow-x:hidden}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar{width:.5625rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-track{background:#fff}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb{background:#8f8f8f;border-radius:16rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb:hover{background:#676767}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item{display:flex;flex-direction:row;align-items:flex-end;padding:.5rem 1rem;gap:.5rem;color:#141414;cursor:pointer;transition:background-color .2s ease}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item:hover:not(.disabled):not(.no-results){background:#f9f9f9}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.selected{background:#ccdaf1;font-weight:600}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted.selected:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.disabled{color:#676767;cursor:not-allowed;opacity:.6}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.no-results{color:#676767;cursor:default;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LabelComponent, selector: "lib-label", inputs: ["text", "type", "showHelpIcon", "ariaLabel", "position", "isRequired", "for", "subtext"], outputs: ["helpIconClick"] }, { kind: "component", type: FieldComponent, selector: "lib-field", inputs: ["inputType", "inputId", "placeholder", "state", "status", "iconBefore", "iconAfter", "iconBeforeClickable", "iconAfterClickable", "iconBeforeAction", "iconAfterAction", "disabled", "ariaLabel", "value", "isFullText", "rows", "minWidth", "maxWidth", "minHeight", "maxHeight", "wrapContent"], outputs: ["valueChange", "iconBeforeClick", "iconAfterClick", "fieldFocus", "fieldBlur"] }] }); }
2755
+ }
2756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownComponent, decorators: [{
2757
+ type: Component,
2758
+ args: [{ selector: 'lib-dropdown', standalone: true, imports: [CommonModule, LabelComponent, FieldComponent], providers: [
2759
+ {
2760
+ provide: NG_VALUE_ACCESSOR,
2761
+ useExisting: forwardRef(() => DropdownComponent),
2762
+ multi: true,
2763
+ },
2764
+ ], template: "<div class=\"dropdown-wrapper\">\n @if (label) {\n <lib-label\n [for]=\"inputId\"\n [text]=\"label\"\n [type]=\"labelType\"\n [showHelpIcon]=\"showHelpIcon\"\n [subtext]=\"subtext\"\n (helpIconClick)=\"onHelpIconClick()\"\n ></lib-label>\n }\n\n <div\n class=\"dropdown-field-container\"\n [ngClass]=\"'dropdown-' + state\"\n >\n <div\n class=\"dropdown-field-wrapper\"\n [class.dropdown-field-wrapper-multiple]=\"multiple\"\n (click)=\"onFieldClick()\"\n >\n <lib-field\n #dropdownInput\n [class.dropdown-multi-field]=\"multiple\"\n [inputId]=\"inputId\"\n [placeholder]=\"multiple && selectedOptions.length ? '' : placeholder\"\n [value]=\"displayText\"\n [disabled]=\"disabled\"\n [state]=\"state\"\n [wrapContent]=\"multiple\"\n [ariaLabel]=\"ariaLabel ? ariaLabel : label\"\n [iconAfter]=\"isOpen ? 'expand_less' : 'expand_more'\"\n [attr.readonly]=\"!searchable\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n >\n @if (multiple && selectedOptions.length) {\n <div fieldPrefix class=\"dropdown-selected-chips\">\n @for (option of selectedOptions; track option.value) {\n <span class=\"dropdown-selected-chip\" data-testid=\"dropdownChip\">\n <span class=\"dropdown-selected-chip-label\">{{ option.label }}</span>\n <button\n type=\"button\"\n class=\"dropdown-selected-chip-remove\"\n [attr.aria-label]=\"'remove ' + option.label\"\n (click)=\"removeSelectedOption(option.value, $event)\"\n data-testid=\"removeDropdownChip\"\n >\n <span class=\"material-symbols-outlined\">cancel</span>\n </button>\n </span>\n }\n </div>\n }\n </lib-field>\n </div>\n\n @if (isOpen) {\n <div class=\"dropdown-menu\">\n <div class=\"dropdown-menu-items\" #dropdownMenuItems>\n @if (filteredOptions.length === 0) {\n <div class=\"dropdown-menu-item no-results\">No results found</div>\n }\n @for (option of filteredOptions; track option.value; let i = $index) {\n <div\n class=\"dropdown-menu-item\"\n [ngClass]=\"{\n selected: isOptionSelected(option),\n highlighted: i === selectedIndex,\n disabled: option.disabled\n }\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.dropdown-wrapper{display:flex;flex-direction:column;align-items:flex-start;padding:0;gap:.5rem;min-width:0;width:100%}.dropdown-field-container{min-width:0;position:relative;width:100%}.dropdown-field-container .dropdown-field-wrapper{cursor:pointer;min-width:0;width:100%}.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper{min-height:2.5rem}.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper.is-focused,.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper:focus-within{outline:none}.dropdown-field-container .dropdown-field-wrapper.dropdown-field-wrapper-multiple lib-field.dropdown-multi-field ::ng-deep .field-wrapper.is-focused .field-input{border-radius:.125rem;outline:.125rem solid #b967c7;outline-offset:.125rem}.dropdown-field-container .dropdown-field-wrapper lib-field{cursor:pointer;display:block;min-width:0;pointer-events:none;width:100%}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper{cursor:pointer}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input{cursor:pointer;pointer-events:auto}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input:not([readonly]){cursor:text}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .icon-after{pointer-events:none}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chips{display:flex;flex:0 0 100%;flex-wrap:wrap;gap:.25rem;min-width:0;max-width:100%;pointer-events:auto;width:100%}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip{display:inline-flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;padding:.125rem .25rem .125rem .5rem;border-radius:1rem;background:#e5edf8;color:#141414;font-size:.875rem;line-height:1.25rem}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip-label{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-left:.25rem;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;pointer-events:auto}.dropdown-field-container .dropdown-field-wrapper .dropdown-selected-chip-remove .material-symbols-outlined{font-size:1.5rem}.dropdown-field-container .dropdown-menu{position:absolute;top:100%;left:0;width:100%;max-height:15rem;background:#fff;border:1px solid #d0d0d0;border-radius:0 0 .25rem .25rem;z-index:1000;overflow:hidden;box-shadow:0 2px 8px #0000001a}.dropdown-field-container .dropdown-menu .dropdown-menu-items{max-height:15rem;overflow-y:auto;overflow-x:hidden}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar{width:.5625rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-track{background:#fff}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb{background:#8f8f8f;border-radius:16rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb:hover{background:#676767}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item{display:flex;flex-direction:row;align-items:flex-end;padding:.5rem 1rem;gap:.5rem;color:#141414;cursor:pointer;transition:background-color .2s ease}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item:hover:not(.disabled):not(.no-results){background:#f9f9f9}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.selected{background:#ccdaf1;font-weight:600}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted.selected:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.disabled{color:#676767;cursor:not-allowed;opacity:.6}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.no-results{color:#676767;cursor:default;font-style:italic}\n"] }]
2765
+ }], propDecorators: { label: [{
2766
+ type: Input
2767
+ }], inputId: [{
2768
+ type: Input
2769
+ }], labelType: [{
2770
+ type: Input
2771
+ }], showHelpIcon: [{
2772
+ type: Input
2773
+ }], subtext: [{
2774
+ type: Input
2775
+ }], placeholder: [{
2776
+ type: Input
2777
+ }], options: [{
2778
+ type: Input
2779
+ }], state: [{
2780
+ type: Input
2781
+ }], disabled: [{
2782
+ type: Input
2783
+ }], ariaLabel: [{
2784
+ type: Input
2785
+ }], searchable: [{
2786
+ type: Input
2787
+ }], multiple: [{
2788
+ type: Input
2789
+ }], selectedValues: [{
2790
+ type: Input
2791
+ }], valueChange: [{
2792
+ type: Output
2793
+ }], selectedValuesChange: [{
2794
+ type: Output
2795
+ }], helpIconClick: [{
2796
+ type: Output
2797
+ }], dropdownInput: [{
2798
+ type: ViewChild,
2799
+ args: ['dropdownInput']
2800
+ }], dropdownMenuItems: [{
2801
+ type: ViewChild,
2802
+ args: ['dropdownMenuItems']
2803
+ }], onDocumentClick: [{
2804
+ type: HostListener,
2805
+ args: ['document:click', ['$event']]
2806
+ }] } });
2807
+
2808
+ const DATE_VALIDATOR_REGEX = '^[0-9]{4}$';
2809
+ const toDropdownOptions = (options) => {
2810
+ return Object.entries(options).map(([value, label]) => ({ value, label }));
2811
+ };
2812
+ const toInstitutionDropdownOptions = (options) => {
2813
+ return {
2814
+ byu: toDropdownOptions(options.byu),
2815
+ law: toDropdownOptions(options.law),
2816
+ ensign: toDropdownOptions(options.ensign),
2817
+ };
2818
+ };
2819
+ class AdvancedSearchComponent {
2820
+ constructor() {
2821
+ this.fb = inject(NonNullableFormBuilder);
2822
+ this.advancedSearch = new EventEmitter();
2823
+ this.subscription = new Subscription();
2824
+ /**
2825
+ * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.
2826
+ * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.
2827
+ */
2828
+ this.syncUpFieldAndQualifier = (fg, scope) => {
2829
+ this.subscription.add(fg.controls.field.valueChanges
2830
+ .pipe(filter(() => scope === 'local'), tap((val) => fg.controls.qualifier.setValue(ADVANCED_SEARCH_OPTIONS.qualifiers[val][0])))
2831
+ .subscribe());
2832
+ };
2833
+ this.advancedSearchForm = this.fb.group({
2834
+ queries: this.fb.array([], [Validators.maxLength(ADVANCED_SEARCH_QUERIES_LIMIT)]),
2835
+ types: [[]],
2836
+ collections: [[]],
2837
+ languages: [[]],
2838
+ date: this.fb.group({
2839
+ from: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],
2840
+ to: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],
2841
+ }, { validators: validateDateRangeFields() }),
2842
+ limitResults: this.fb.group({
2843
+ peerReviewed: [false],
2844
+ }),
2845
+ expandResults: this.fb.group({
2846
+ applyEquivalentSubjects: [false],
2847
+ fullText: [false],
2848
+ }),
2849
+ });
2850
+ this.isSubmitted = false;
2851
+ this.advancedSearchOptions = ADVANCED_SEARCH_OPTIONS;
2852
+ this.advancedSearchFieldMap = ADVANCED_SEARCH_FIELD_MAP;
2853
+ this.advancedSearchQualifierMap = ADVANCED_SEARCH_QUALIFIER_MAP;
2854
+ this.typeDropdownOptions = toInstitutionDropdownOptions(ADVANCED_SEARCH_OPTIONS.types);
2855
+ this.collectionDropdownOptions = toInstitutionDropdownOptions(ADVANCED_SEARCH_OPTIONS.collections);
2856
+ this.languageDropdownOptions = toDropdownOptions(ADVANCED_SEARCH_OPTIONS.languages);
2857
+ this.isKeyboardFocus = false;
2858
+ /**
2859
+ * Add a query to `queries` `FormArray`. This FormGroup has an additional `boolean` control.
2860
+ */
2861
+ this.addQuery = () => {
2862
+ this.queries.push(this.fb.group({
2863
+ boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0]],
2864
+ field: [
2865
+ ADVANCED_SEARCH_OPTIONS.fields[0],
2866
+ ],
2867
+ qualifier: [
2868
+ ADVANCED_SEARCH_OPTIONS.qualifiers[ADVANCED_SEARCH_OPTIONS.localFields[0]][0],
2869
+ ],
2870
+ query: ['', Validators.required],
2871
+ }));
2872
+ this.syncUpFieldAndQualifier(this.queries.at(-1), this.config.scope);
2873
+ };
2874
+ this.removeQuery = (i) => {
2875
+ this.queries.removeAt(i);
2876
+ };
2877
+ /**
2878
+ * Prepares appropriate query params before performing a local advanced search.
2879
+ */
2880
+ this.doLocalAdvancedSearch = () => {
2881
+ this.doAdvancedSearch({
2882
+ localAdvancedSearch: {
2883
+ ...this.config.localAdvancedSearch,
2884
+ creationDate: this.gatherToAndFromValues(),
2885
+ selectedLanguages: this.languages.value,
2886
+ selectedResourceTypes: this.types.value,
2887
+ selectedCollections: this.collections.value,
2888
+ },
2889
+ });
2890
+ };
2891
+ /**
2892
+ * Prepares appropriate query params before performing an external advanced search.
2893
+ */
2894
+ this.doExternalAdvancedSearch = () => {
2895
+ this.doAdvancedSearch({
2896
+ externalAdvancedSearch: {
2897
+ ...this.config.externalAdvancedSearch,
2898
+ datePublished: this.gatherToAndFromValues(),
2899
+ selectedLanguages: this.languages.value,
2900
+ limitResults: {
2901
+ peerReviewed: this.peerReviewed.value,
2902
+ },
2903
+ expandResults: {
2904
+ applyEquivalentSubjects: this.applyEquivalentSubjects.value,
2905
+ fullText: this.fullText.value,
2599
2906
  },
2600
2907
  },
2601
2908
  });
@@ -2714,6 +3021,14 @@ class AdvancedSearchComponent {
2714
3021
  ngOnDestroy() {
2715
3022
  this.subscription.unsubscribe();
2716
3023
  }
3024
+ onDocumentKeydown(event) {
3025
+ if (event.key === 'Tab') {
3026
+ this.isKeyboardFocus = true;
3027
+ }
3028
+ }
3029
+ onDocumentPointerdown() {
3030
+ this.isKeyboardFocus = false;
3031
+ }
2717
3032
  get queries() {
2718
3033
  return this.advancedSearchForm.controls.queries;
2719
3034
  }
@@ -2758,7 +3073,7 @@ class AdvancedSearchComponent {
2758
3073
  return `Search terms for ${fieldLabel}`;
2759
3074
  }
2760
3075
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2761
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AdvancedSearchComponent, isStandalone: true, selector: "lib-ss-advanced-search", inputs: { config: "config" }, outputs: { advancedSearch: "advancedSearch" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "inputTooltip", first: true, predicate: MatTooltip, descendants: true }], ngImport: i0, template: "<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=\"sr-only\">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=\"sr-only\"\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=\"sr-only\">\n {{ getQueryLabel(queryIndex) }}\n </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 && query.controls.query.invalid\"\n [attr.aria-describedby]=\"isSubmitted && query.controls.query.invalid ? ('invalidInputDesc' + queryIndex) : null\"\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 elementId=\"resourceType\"\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 elementId=\"collection\"\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\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox inputId=\"peerReviewed\" [isChecked]=\"peerReviewed.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox inputId=\"applyEquivalentSubjects\" [isChecked]=\"applyEquivalentSubjects.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox inputId=\"fullText\" [isChecked]=\"fullText.value\" aria-hidden=\"true\"></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 elementId=\"language\"\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", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}.pill-btn--components{background-color:#457fa6;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#676767;background-color:#e7e7e7;pointer-events:none}.pill-btn--components:hover{background-color:#a2bfd3;color:#fff}.destructive.pill-btn--components{background-color:#b33837}.destructive.pill-btn--components:hover{background-color:#c73e3d}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#0047ba;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#003995}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{font:inherit;margin-bottom:.75em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.25rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:.625rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}#advSearchFooter .pill-btn--components{background-color:#003995;color:#fff}#advSearchFooter .pill-btn--components:hover{background-color:#0047ba}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: HbllMultiSelectComponent, selector: "lib-multi-select", inputs: ["elementId", "allOptions", "label", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["isChecked", "isIndeterminate", "isSmall", "disabled", "isError", "inputId"], outputs: ["checkedChange"] }, { kind: "component", type: DateRangeComponent, selector: "lib-date-range", inputs: ["from", "to"], outputs: ["validDateChange", "fromChange", "toChange"] }] }); }
3076
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AdvancedSearchComponent, isStandalone: true, selector: "lib-ss-advanced-search", inputs: { config: "config" }, outputs: { advancedSearch: "advancedSearch" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)", "document:mousedown": "onDocumentPointerdown()", "document:pointerdown": "onDocumentPointerdown()" } }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "inputTooltip", first: true, predicate: MatTooltip, descendants: true }], ngImport: i0, template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"ss-adv-search-wrapper\"\n [class.ss-keyboard-focus]=\"isKeyboardFocus\"\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=\"sr-only\">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=\"sr-only\"\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=\"sr-only\">\n {{ getQueryLabel(queryIndex) }}\n </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 && query.controls.query.invalid\"\n [attr.aria-describedby]=\"isSubmitted && query.controls.query.invalid ? ('invalidInputDesc' + queryIndex) : null\"\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-dropdown-wrapper\">\n <lib-dropdown\n inputId=\"resourceType\"\n placeholder=\"Resource Type\"\n ariaLabel=\"Resource Type\"\n [options]=\"typeDropdownOptions[config.institution]\"\n [multiple]=\"true\"\n [selectedValues]=\"types.value\"\n (selectedValuesChange)=\"types.setValue($event)\"\n ></lib-dropdown>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"ss-dropdown-wrapper\">\n <lib-dropdown\n inputId=\"collection\"\n placeholder=\"Collection\"\n ariaLabel=\"Collection\"\n [options]=\"collectionDropdownOptions[config.institution]\"\n [multiple]=\"true\"\n [selectedValues]=\"collections.value\"\n (selectedValuesChange)=\"collections.setValue($event)\"\n ></lib-dropdown>\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\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox inputId=\"peerReviewed\" [isChecked]=\"peerReviewed.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox inputId=\"applyEquivalentSubjects\" [isChecked]=\"applyEquivalentSubjects.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox inputId=\"fullText\" [isChecked]=\"fullText.value\" aria-hidden=\"true\"></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-dropdown\n inputId=\"language\"\n placeholder=\"Language\"\n ariaLabel=\"Language\"\n [options]=\"languageDropdownOptions\"\n [multiple]=\"true\"\n [selectedValues]=\"languages.value\"\n (selectedValuesChange)=\"languages.setValue($any($event))\"\n ></lib-dropdown>\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", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}.pill-btn--components{background-color:#457fa6;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#676767;background-color:#e7e7e7;pointer-events:none}.pill-btn--components:hover{background-color:#a2bfd3;color:#fff}.destructive.pill-btn--components{background-color:#b33837}.destructive.pill-btn--components:hover{background-color:#c73e3d}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#0047ba;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#003995}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}select:focus,textarea:focus,input:focus{outline:none}.ss-keyboard-focus select:focus,.ss-keyboard-focus textarea:focus,.ss-keyboard-focus input:focus{outline:.125rem solid #b967c7;outline-offset:.125rem}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{font:inherit;margin-bottom:.75em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.25rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:.625rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}#advSearchFooter .pill-btn--components{background-color:#003995;color:#fff}#advSearchFooter .pill-btn--components:hover{background-color:#0047ba}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: DropdownComponent, selector: "lib-dropdown", inputs: ["label", "inputId", "labelType", "showHelpIcon", "subtext", "placeholder", "options", "state", "disabled", "ariaLabel", "searchable", "multiple", "selectedValues"], outputs: ["valueChange", "selectedValuesChange", "helpIconClick"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["isChecked", "isIndeterminate", "isSmall", "disabled", "isError", "inputId"], outputs: ["checkedChange"] }, { kind: "component", type: DateRangeComponent, selector: "lib-date-range", inputs: ["from", "to"], outputs: ["validDateChange", "fromChange", "toChange"] }] }); }
2762
3077
  }
2763
3078
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
2764
3079
  type: Component,
@@ -2767,10 +3082,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
2767
3082
  ReactiveFormsModule,
2768
3083
  MatTooltipModule,
2769
3084
  MatIconModule,
2770
- HbllMultiSelectComponent,
3085
+ DropdownComponent,
2771
3086
  CheckboxComponent,
2772
3087
  DateRangeComponent,
2773
- ], template: "<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=\"sr-only\">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=\"sr-only\"\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=\"sr-only\">\n {{ getQueryLabel(queryIndex) }}\n </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 && query.controls.query.invalid\"\n [attr.aria-describedby]=\"isSubmitted && query.controls.query.invalid ? ('invalidInputDesc' + queryIndex) : null\"\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 elementId=\"resourceType\"\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 elementId=\"collection\"\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\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox inputId=\"peerReviewed\" [isChecked]=\"peerReviewed.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox inputId=\"applyEquivalentSubjects\" [isChecked]=\"applyEquivalentSubjects.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox inputId=\"fullText\" [isChecked]=\"fullText.value\" aria-hidden=\"true\"></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 elementId=\"language\"\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", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}.pill-btn--components{background-color:#457fa6;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#676767;background-color:#e7e7e7;pointer-events:none}.pill-btn--components:hover{background-color:#a2bfd3;color:#fff}.destructive.pill-btn--components{background-color:#b33837}.destructive.pill-btn--components:hover{background-color:#c73e3d}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#0047ba;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#003995}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{font:inherit;margin-bottom:.75em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.25rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:.625rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}#advSearchFooter .pill-btn--components{background-color:#003995;color:#fff}#advSearchFooter .pill-btn--components:hover{background-color:#0047ba}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"] }]
3088
+ ], template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"ss-adv-search-wrapper\"\n [class.ss-keyboard-focus]=\"isKeyboardFocus\"\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=\"sr-only\">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=\"sr-only\"\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=\"sr-only\">\n {{ getQueryLabel(queryIndex) }}\n </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 && query.controls.query.invalid\"\n [attr.aria-describedby]=\"isSubmitted && query.controls.query.invalid ? ('invalidInputDesc' + queryIndex) : null\"\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-dropdown-wrapper\">\n <lib-dropdown\n inputId=\"resourceType\"\n placeholder=\"Resource Type\"\n ariaLabel=\"Resource Type\"\n [options]=\"typeDropdownOptions[config.institution]\"\n [multiple]=\"true\"\n [selectedValues]=\"types.value\"\n (selectedValuesChange)=\"types.setValue($event)\"\n ></lib-dropdown>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"ss-dropdown-wrapper\">\n <lib-dropdown\n inputId=\"collection\"\n placeholder=\"Collection\"\n ariaLabel=\"Collection\"\n [options]=\"collectionDropdownOptions[config.institution]\"\n [multiple]=\"true\"\n [selectedValues]=\"collections.value\"\n (selectedValuesChange)=\"collections.setValue($event)\"\n ></lib-dropdown>\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\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox inputId=\"peerReviewed\" [isChecked]=\"peerReviewed.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox inputId=\"applyEquivalentSubjects\" [isChecked]=\"applyEquivalentSubjects.value\" aria-hidden=\"true\"></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\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox inputId=\"fullText\" [isChecked]=\"fullText.value\" aria-hidden=\"true\"></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-dropdown\n inputId=\"language\"\n placeholder=\"Language\"\n ariaLabel=\"Language\"\n [options]=\"languageDropdownOptions\"\n [multiple]=\"true\"\n [selectedValues]=\"languages.value\"\n (selectedValuesChange)=\"languages.setValue($any($event))\"\n ></lib-dropdown>\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", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}.pill-btn--components{background-color:#457fa6;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#676767;background-color:#e7e7e7;pointer-events:none}.pill-btn--components:hover{background-color:#a2bfd3;color:#fff}.destructive.pill-btn--components{background-color:#b33837}.destructive.pill-btn--components:hover{background-color:#c73e3d}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#0047ba;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#003995}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}select:focus,textarea:focus,input:focus{outline:none}.ss-keyboard-focus select:focus,.ss-keyboard-focus textarea:focus,.ss-keyboard-focus input:focus{outline:.125rem solid #b967c7;outline-offset:.125rem}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{font:inherit;margin-bottom:.75em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.25rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:.625rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}#advSearchFooter .pill-btn--components{background-color:#003995;color:#fff}#advSearchFooter .pill-btn--components:hover{background-color:#0047ba}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"] }]
2774
3089
  }], propDecorators: { config: [{
2775
3090
  type: Input,
2776
3091
  args: [{ required: true }]
@@ -2782,6 +3097,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
2782
3097
  }], inputTooltip: [{
2783
3098
  type: ViewChild,
2784
3099
  args: [MatTooltip]
3100
+ }], onDocumentKeydown: [{
3101
+ type: HostListener,
3102
+ args: ['document:keydown', ['$event']]
3103
+ }], onDocumentPointerdown: [{
3104
+ type: HostListener,
3105
+ args: ['document:mousedown']
3106
+ }, {
3107
+ type: HostListener,
3108
+ args: ['document:pointerdown']
2785
3109
  }] } });
2786
3110
 
2787
3111
  class SimpleSearchComponent {
@@ -3974,445 +4298,162 @@ class PreTabComponent {
3974
4298
  email: { icon: 'mail', text: 'Email' },
3975
4299
  phone: { icon: 'phone', text: 'Tel' },
3976
4300
  fax: { icon: 'print', text: 'Fax' },
3977
- address: { icon: 'location_on', text: 'Addr' },
3978
- social: { icon: 'share', text: 'Social' },
3979
- custom: { icon: '', text: '' },
3980
- };
3981
- }
3982
- /**
3983
- * Gets the icon to display based on type or custom input
3984
- */
3985
- get displayIcon() {
3986
- if (this.icon) {
3987
- return this.icon;
3988
- }
3989
- return this.presets[this.type]?.icon || '';
3990
- }
3991
- /**
3992
- * Gets the text to display based on type or custom input
3993
- */
3994
- get displayText() {
3995
- if (this.text) {
3996
- return this.text;
3997
- }
3998
- return this.presets[this.type]?.text || '';
3999
- }
4000
- /**
4001
- * Gets the computed aria-label for accessibility
4002
- */
4003
- get computedAriaLabel() {
4004
- if (this.ariaLabel) {
4005
- return this.ariaLabel;
4006
- }
4007
- return `${this.displayText} prefix`;
4008
- }
4009
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4010
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PreTabComponent, isStandalone: true, selector: "lib-pre-tab", inputs: { type: "type", icon: "icon", text: "text", action: "action", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: "<div \n class=\"pre-tab\" \n [ngClass]=\"{\n 'pre-tab--disabled': disabled,\n 'pre-tab--active': action && !disabled,\n 'pre-tab--inactive': !action && !disabled\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"pre-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText) {\n <span class=\"pre-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.pre-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:.25rem 0 0 .25rem;transition:background-color .2s ease;margin-left:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.pre-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.pre-tab--disabled .pre-tab__icon{color:#676767}.pre-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.pre-tab--inactive .pre-tab__icon{color:#00245d}.pre-tab--active{background:#0047ba;color:#fff;cursor:pointer}.pre-tab--active:hover{background:#003995}.pre-tab--active .pre-tab__icon{color:#fff}.pre-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.pre-tab__text{flex:none;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
4011
- }
4012
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreTabComponent, decorators: [{
4013
- type: Component,
4014
- args: [{ selector: 'lib-pre-tab', standalone: true, imports: [CommonModule], template: "<div \n class=\"pre-tab\" \n [ngClass]=\"{\n 'pre-tab--disabled': disabled,\n 'pre-tab--active': action && !disabled,\n 'pre-tab--inactive': !action && !disabled\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"pre-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText) {\n <span class=\"pre-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.pre-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:.25rem 0 0 .25rem;transition:background-color .2s ease;margin-left:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.pre-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.pre-tab--disabled .pre-tab__icon{color:#676767}.pre-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.pre-tab--inactive .pre-tab__icon{color:#00245d}.pre-tab--active{background:#0047ba;color:#fff;cursor:pointer}.pre-tab--active:hover{background:#003995}.pre-tab--active .pre-tab__icon{color:#fff}.pre-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.pre-tab__text{flex:none;white-space:nowrap}\n"] }]
4015
- }], propDecorators: { type: [{
4016
- type: Input
4017
- }], icon: [{
4018
- type: Input
4019
- }], text: [{
4020
- type: Input
4021
- }], action: [{
4022
- type: Input
4023
- }], disabled: [{
4024
- type: Input
4025
- }], ariaLabel: [{
4026
- type: Input
4027
- }] } });
4028
-
4029
- /**
4030
- * A suffix tab component that displays an icon (and optionally text) after an input field.
4031
- * Provides default presets for common types (website, email, phone) or custom configuration.
4032
- *
4033
- * @example
4034
- * ```html
4035
- * <!-- Website preset (icon only) -->
4036
- * <lib-post-tab type="website"></lib-post-tab>
4037
- *
4038
- * <!-- Email preset (icon only) -->
4039
- * <lib-post-tab type="email"></lib-post-tab>
4040
- *
4041
- * <!-- Phone preset with text -->
4042
- * <lib-post-tab type="phone" [showText]="true"></lib-post-tab>
4043
- *
4044
- * <!-- Fax preset -->
4045
- * <lib-post-tab type="fax"></lib-post-tab>
4046
- *
4047
- * <!-- Address preset -->
4048
- * <lib-post-tab type="address"></lib-post-tab>
4049
- *
4050
- * <!-- Social media preset -->
4051
- * <lib-post-tab type="social"></lib-post-tab>
4052
- *
4053
- * <!-- Custom configuration -->
4054
- * <lib-post-tab
4055
- * type="custom"
4056
- * icon="location_on"
4057
- * text="Address"
4058
- * [showText]="true">
4059
- * </lib-post-tab>
4060
- *
4061
- * <!-- Actionable state -->
4062
- * <lib-post-tab type="phone" [action]="onPostTabAction"></lib-post-tab>
4063
- *
4064
- * <!-- Disabled state -->
4065
- * <lib-post-tab type="website" [disabled]="true"></lib-post-tab>
4066
- * ```
4067
- */
4068
- class PostTabComponent {
4069
- constructor() {
4070
- this.type = 'website';
4071
- this.showText = false;
4072
- this.disabled = false;
4073
- /**
4074
- * Default preset configurations
4075
- */
4076
- this.presets = {
4077
- website: { icon: 'language', text: 'WWW.' },
4078
- email: { icon: 'mail', text: 'Email' },
4079
- phone: { icon: 'phone', text: 'Tel' },
4080
- fax: { icon: 'print', text: 'Fax' },
4081
- address: { icon: 'location_on', text: 'Addr' },
4082
- social: { icon: 'share', text: 'Social' },
4083
- custom: { icon: '', text: '' },
4084
- };
4085
- }
4086
- /**
4087
- * Gets the icon to display based on type or custom input
4088
- */
4089
- get displayIcon() {
4090
- if (this.icon) {
4091
- return this.icon;
4092
- }
4093
- return this.presets[this.type]?.icon || '';
4094
- }
4095
- /**
4096
- * Gets the text to display based on type or custom input
4097
- */
4098
- get displayText() {
4099
- if (this.text) {
4100
- return this.text;
4101
- }
4102
- return this.presets[this.type]?.text || '';
4103
- }
4104
- /**
4105
- * Gets the computed aria-label for accessibility
4106
- */
4107
- get computedAriaLabel() {
4108
- if (this.ariaLabel) {
4109
- return this.ariaLabel;
4110
- }
4111
- return `${this.displayText} suffix`;
4112
- }
4113
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PostTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PostTabComponent, isStandalone: true, selector: "lib-post-tab", inputs: { type: "type", icon: "icon", text: "text", showText: "showText", action: "action", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: "<div \n class=\"post-tab\" \n [ngClass]=\"{\n 'post-tab--disabled': disabled,\n 'post-tab--active': action && !disabled,\n 'post-tab--inactive': !action && !disabled,\n 'post-tab--icon-only': !showText\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"post-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText && showText) {\n <span class=\"post-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.post-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:0 .25rem .25rem 0;transition:background-color .2s ease;margin-right:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.post-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.post-tab--disabled .post-tab__icon{color:#676767}.post-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.post-tab--inactive .post-tab__icon{color:#00245d}.post-tab--active{background:#0047ba;color:#fff;cursor:pointer}.post-tab--active:hover{background:#003995}.post-tab--active .post-tab__icon{color:#fff}.post-tab--icon-only{padding:.25rem .5rem}.post-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.post-tab__text{flex:none;white-space:nowrap;display:none}.post-tab:not(.post-tab--icon-only) .post-tab__text{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
4115
- }
4116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PostTabComponent, decorators: [{
4117
- type: Component,
4118
- args: [{ selector: 'lib-post-tab', standalone: true, imports: [CommonModule], template: "<div \n class=\"post-tab\" \n [ngClass]=\"{\n 'post-tab--disabled': disabled,\n 'post-tab--active': action && !disabled,\n 'post-tab--inactive': !action && !disabled,\n 'post-tab--icon-only': !showText\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"post-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText && showText) {\n <span class=\"post-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.post-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:0 .25rem .25rem 0;transition:background-color .2s ease;margin-right:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.post-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.post-tab--disabled .post-tab__icon{color:#676767}.post-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.post-tab--inactive .post-tab__icon{color:#00245d}.post-tab--active{background:#0047ba;color:#fff;cursor:pointer}.post-tab--active:hover{background:#003995}.post-tab--active .post-tab__icon{color:#fff}.post-tab--icon-only{padding:.25rem .5rem}.post-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.post-tab__text{flex:none;white-space:nowrap;display:none}.post-tab:not(.post-tab--icon-only) .post-tab__text{display:block}\n"] }]
4119
- }], propDecorators: { type: [{
4120
- type: Input
4121
- }], icon: [{
4122
- type: Input
4123
- }], text: [{
4124
- type: Input
4125
- }], showText: [{
4126
- type: Input
4127
- }], action: [{
4128
- type: Input
4129
- }], disabled: [{
4130
- type: Input
4131
- }], ariaLabel: [{
4132
- type: Input
4133
- }] } });
4134
-
4135
- /**
4136
- * A dropdown component that combines a label and a searchable select field.
4137
- * Features include:
4138
- * - Searchable input to filter options
4139
- * - Keyboard navigation support
4140
- * - Optional label with help icon
4141
- * - Multiple states (default, focused, error, etc.)
4142
- *
4143
- * @example
4144
- * ```html
4145
- * <!-- Basic dropdown -->
4146
- * <lib-dropdown
4147
- * label="Select an option"
4148
- * [options]="myOptions"
4149
- * (valueChange)="onSelectionChange($event)">
4150
- * </lib-dropdown>
4151
- *
4152
- * <!-- Required dropdown with help icon -->
4153
- * <lib-dropdown
4154
- * label="Category"
4155
- * labelType="required"
4156
- * [showHelpIcon]="true"
4157
- * [options]="categories"
4158
- * placeholder="Choose a category"
4159
- * (valueChange)="onCategoryChange($event)">
4160
- * </lib-dropdown>
4161
- *
4162
- * <!-- Dropdown with error state -->
4163
- * <lib-dropdown
4164
- * label="Status"
4165
- * [options]="statuses"
4166
- * state="error"
4167
- * subtext="Please select a status"
4168
- * (valueChange)="onStatusChange($event)">
4169
- * </lib-dropdown>
4170
- * ```
4171
- */
4172
- class DropdownComponent {
4173
- constructor() {
4174
- this.labelType = 'none';
4175
- this.showHelpIcon = false;
4176
- this.placeholder = 'Select an option';
4177
- this.options = [];
4178
- this.state = 'default';
4179
- this.disabled = false;
4180
- this.searchable = true;
4181
- this.valueChange = new EventEmitter();
4182
- this.helpIconClick = new EventEmitter();
4183
- this.value = '';
4184
- this.searchText = '';
4185
- this.isOpen = false;
4186
- this.selectedIndex = -1;
4187
- this.filteredOptions = [];
4188
- this.elementRef = inject(ElementRef);
4189
- this.cdr = inject(ChangeDetectorRef);
4190
- this.onChange = () => { };
4191
- this.onTouched = () => { };
4192
- }
4193
- ngOnInit() {
4194
- this.filteredOptions = this.options;
4195
- }
4196
- /**
4197
- * Gets the display text for the selected value
4198
- */
4199
- get displayText() {
4200
- if (!this.value && !this.searchText) {
4201
- return '';
4202
- }
4203
- if (this.searchText) {
4204
- return this.searchText;
4205
- }
4206
- const selectedOption = this.options.find((opt) => opt.value === this.value);
4207
- return selectedOption ? selectedOption.label : '';
4208
- }
4209
- /**
4210
- * Toggles dropdown open/closed state
4211
- */
4212
- toggleDropdown() {
4213
- if (this.disabled)
4214
- return;
4215
- this.isOpen = !this.isOpen;
4216
- if (this.isOpen) {
4217
- this.filteredOptions = this.options;
4218
- this.selectedIndex = this.options.findIndex((opt) => opt.value === this.value);
4219
- // Scroll to the currently selected item
4220
- this.scrollHighlightedIntoView();
4221
- }
4222
- }
4223
- /**
4224
- * Handles input changes for search functionality
4225
- */
4226
- onSearchInput(event) {
4227
- const input = event.target;
4228
- this.searchText = input.value;
4229
- this.filterOptions();
4230
- if (!this.isOpen) {
4231
- this.isOpen = true;
4232
- }
4301
+ address: { icon: 'location_on', text: 'Addr' },
4302
+ social: { icon: 'share', text: 'Social' },
4303
+ custom: { icon: '', text: '' },
4304
+ };
4233
4305
  }
4234
4306
  /**
4235
- * Filters options based on search text
4307
+ * Gets the icon to display based on type or custom input
4236
4308
  */
4237
- filterOptions() {
4238
- if (!this.searchText) {
4239
- this.filteredOptions = this.options;
4240
- }
4241
- else {
4242
- this.filteredOptions = this.options.filter((option) => option.label.toLowerCase().includes(this.searchText.toLowerCase()));
4309
+ get displayIcon() {
4310
+ if (this.icon) {
4311
+ return this.icon;
4243
4312
  }
4244
- this.selectedIndex = 0;
4245
- this.scrollHighlightedIntoView();
4246
- }
4247
- /**
4248
- * Scrolls the highlighted item into view
4249
- */
4250
- scrollHighlightedIntoView() {
4251
- this.cdr.detectChanges();
4252
- setTimeout(() => {
4253
- if (!this.dropdownMenuItems)
4254
- return;
4255
- const menuContainer = this.dropdownMenuItems.nativeElement;
4256
- const highlightedItem = menuContainer.querySelector('.dropdown-menu-item.highlighted');
4257
- if (highlightedItem) {
4258
- highlightedItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
4259
- }
4260
- }, 0);
4313
+ return this.presets[this.type]?.icon || '';
4261
4314
  }
4262
4315
  /**
4263
- * Selects an option from the dropdown
4316
+ * Gets the text to display based on type or custom input
4264
4317
  */
4265
- selectOption(option) {
4266
- if (option.disabled)
4267
- return;
4268
- this.value = option.value;
4269
- this.searchText = '';
4270
- this.isOpen = false;
4271
- this.onChange(this.value);
4272
- this.valueChange.emit(this.value);
4318
+ get displayText() {
4319
+ if (this.text) {
4320
+ return this.text;
4321
+ }
4322
+ return this.presets[this.type]?.text || '';
4273
4323
  }
4274
4324
  /**
4275
- * Handles keyboard navigation
4325
+ * Gets the computed aria-label for accessibility
4276
4326
  */
4277
- onKeyDown(event) {
4278
- if (this.disabled)
4279
- return;
4280
- switch (event.key) {
4281
- case 'ArrowDown':
4282
- event.preventDefault();
4283
- if (!this.isOpen) {
4284
- this.isOpen = true;
4285
- }
4286
- else {
4287
- this.selectedIndex = Math.min(this.selectedIndex + 1, this.filteredOptions.length - 1);
4288
- this.scrollHighlightedIntoView();
4289
- }
4290
- break;
4291
- case 'ArrowUp':
4292
- event.preventDefault();
4293
- if (this.isOpen) {
4294
- this.selectedIndex = Math.max(this.selectedIndex - 1, 0);
4295
- this.scrollHighlightedIntoView();
4296
- }
4297
- break;
4298
- case 'Enter':
4299
- event.preventDefault();
4300
- if (this.isOpen && this.selectedIndex >= 0) {
4301
- this.selectOption(this.filteredOptions[this.selectedIndex]);
4302
- }
4303
- else {
4304
- this.toggleDropdown();
4305
- }
4306
- break;
4307
- case 'Escape':
4308
- event.preventDefault();
4309
- this.isOpen = false;
4310
- this.searchText = '';
4311
- this.filteredOptions = this.options;
4312
- break;
4313
- case 'Tab':
4314
- if (this.isOpen) {
4315
- this.isOpen = false;
4316
- this.searchText = '';
4317
- this.filteredOptions = this.options;
4318
- }
4319
- break;
4327
+ get computedAriaLabel() {
4328
+ if (this.ariaLabel) {
4329
+ return this.ariaLabel;
4320
4330
  }
4331
+ return `${this.displayText} prefix`;
4332
+ }
4333
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4334
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PreTabComponent, isStandalone: true, selector: "lib-pre-tab", inputs: { type: "type", icon: "icon", text: "text", action: "action", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: "<div \n class=\"pre-tab\" \n [ngClass]=\"{\n 'pre-tab--disabled': disabled,\n 'pre-tab--active': action && !disabled,\n 'pre-tab--inactive': !action && !disabled\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"pre-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText) {\n <span class=\"pre-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.pre-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:.25rem 0 0 .25rem;transition:background-color .2s ease;margin-left:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.pre-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.pre-tab--disabled .pre-tab__icon{color:#676767}.pre-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.pre-tab--inactive .pre-tab__icon{color:#00245d}.pre-tab--active{background:#0047ba;color:#fff;cursor:pointer}.pre-tab--active:hover{background:#003995}.pre-tab--active .pre-tab__icon{color:#fff}.pre-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.pre-tab__text{flex:none;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
4335
+ }
4336
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreTabComponent, decorators: [{
4337
+ type: Component,
4338
+ args: [{ selector: 'lib-pre-tab', standalone: true, imports: [CommonModule], template: "<div \n class=\"pre-tab\" \n [ngClass]=\"{\n 'pre-tab--disabled': disabled,\n 'pre-tab--active': action && !disabled,\n 'pre-tab--inactive': !action && !disabled\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"pre-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText) {\n <span class=\"pre-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.pre-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:.25rem 0 0 .25rem;transition:background-color .2s ease;margin-left:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.pre-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.pre-tab--disabled .pre-tab__icon{color:#676767}.pre-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.pre-tab--inactive .pre-tab__icon{color:#00245d}.pre-tab--active{background:#0047ba;color:#fff;cursor:pointer}.pre-tab--active:hover{background:#003995}.pre-tab--active .pre-tab__icon{color:#fff}.pre-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.pre-tab__text{flex:none;white-space:nowrap}\n"] }]
4339
+ }], propDecorators: { type: [{
4340
+ type: Input
4341
+ }], icon: [{
4342
+ type: Input
4343
+ }], text: [{
4344
+ type: Input
4345
+ }], action: [{
4346
+ type: Input
4347
+ }], disabled: [{
4348
+ type: Input
4349
+ }], ariaLabel: [{
4350
+ type: Input
4351
+ }] } });
4352
+
4353
+ /**
4354
+ * A suffix tab component that displays an icon (and optionally text) after an input field.
4355
+ * Provides default presets for common types (website, email, phone) or custom configuration.
4356
+ *
4357
+ * @example
4358
+ * ```html
4359
+ * <!-- Website preset (icon only) -->
4360
+ * <lib-post-tab type="website"></lib-post-tab>
4361
+ *
4362
+ * <!-- Email preset (icon only) -->
4363
+ * <lib-post-tab type="email"></lib-post-tab>
4364
+ *
4365
+ * <!-- Phone preset with text -->
4366
+ * <lib-post-tab type="phone" [showText]="true"></lib-post-tab>
4367
+ *
4368
+ * <!-- Fax preset -->
4369
+ * <lib-post-tab type="fax"></lib-post-tab>
4370
+ *
4371
+ * <!-- Address preset -->
4372
+ * <lib-post-tab type="address"></lib-post-tab>
4373
+ *
4374
+ * <!-- Social media preset -->
4375
+ * <lib-post-tab type="social"></lib-post-tab>
4376
+ *
4377
+ * <!-- Custom configuration -->
4378
+ * <lib-post-tab
4379
+ * type="custom"
4380
+ * icon="location_on"
4381
+ * text="Address"
4382
+ * [showText]="true">
4383
+ * </lib-post-tab>
4384
+ *
4385
+ * <!-- Actionable state -->
4386
+ * <lib-post-tab type="phone" [action]="onPostTabAction"></lib-post-tab>
4387
+ *
4388
+ * <!-- Disabled state -->
4389
+ * <lib-post-tab type="website" [disabled]="true"></lib-post-tab>
4390
+ * ```
4391
+ */
4392
+ class PostTabComponent {
4393
+ constructor() {
4394
+ this.type = 'website';
4395
+ this.showText = false;
4396
+ this.disabled = false;
4397
+ /**
4398
+ * Default preset configurations
4399
+ */
4400
+ this.presets = {
4401
+ website: { icon: 'language', text: 'WWW.' },
4402
+ email: { icon: 'mail', text: 'Email' },
4403
+ phone: { icon: 'phone', text: 'Tel' },
4404
+ fax: { icon: 'print', text: 'Fax' },
4405
+ address: { icon: 'location_on', text: 'Addr' },
4406
+ social: { icon: 'share', text: 'Social' },
4407
+ custom: { icon: '', text: '' },
4408
+ };
4321
4409
  }
4322
4410
  /**
4323
- * Handles blur event
4411
+ * Gets the icon to display based on type or custom input
4324
4412
  */
4325
- onBlur() {
4326
- setTimeout(() => {
4327
- if (!this.elementRef.nativeElement.contains(document.activeElement)) {
4328
- this.isOpen = false;
4329
- this.searchText = '';
4330
- this.filteredOptions = this.options;
4331
- }
4332
- }, 200);
4413
+ get displayIcon() {
4414
+ if (this.icon) {
4415
+ return this.icon;
4416
+ }
4417
+ return this.presets[this.type]?.icon || '';
4333
4418
  }
4334
4419
  /**
4335
- * Handles help icon click event
4420
+ * Gets the text to display based on type or custom input
4336
4421
  */
4337
- onHelpIconClick() {
4338
- this.helpIconClick.emit();
4422
+ get displayText() {
4423
+ if (this.text) {
4424
+ return this.text;
4425
+ }
4426
+ return this.presets[this.type]?.text || '';
4339
4427
  }
4340
4428
  /**
4341
- * Closes dropdown when clicking outside
4429
+ * Gets the computed aria-label for accessibility
4342
4430
  */
4343
- onDocumentClick(event) {
4344
- if (!this.elementRef.nativeElement.contains(event.target)) {
4345
- this.isOpen = false;
4346
- this.searchText = '';
4347
- this.filteredOptions = this.options;
4431
+ get computedAriaLabel() {
4432
+ if (this.ariaLabel) {
4433
+ return this.ariaLabel;
4348
4434
  }
4435
+ return `${this.displayText} suffix`;
4349
4436
  }
4350
- // ControlValueAccessor implementation
4351
- writeValue(value) {
4352
- this.value = value || '';
4353
- }
4354
- registerOnChange(fn) {
4355
- this.onChange = fn;
4356
- }
4357
- registerOnTouched(fn) {
4358
- this.onTouched = fn;
4359
- }
4360
- setDisabledState(isDisabled) {
4361
- this.disabled = isDisabled;
4362
- }
4363
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4364
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DropdownComponent, isStandalone: true, selector: "lib-dropdown", inputs: { label: "label", inputId: "inputId", labelType: "labelType", showHelpIcon: "showHelpIcon", subtext: "subtext", placeholder: "placeholder", options: "options", state: "state", disabled: "disabled", ariaLabel: "ariaLabel", searchable: "searchable" }, outputs: { valueChange: "valueChange", helpIconClick: "helpIconClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
4365
- {
4366
- provide: NG_VALUE_ACCESSOR,
4367
- useExisting: forwardRef(() => DropdownComponent),
4368
- multi: true,
4369
- },
4370
- ], viewQueries: [{ propertyName: "dropdownInput", first: true, predicate: ["dropdownInput"], descendants: true }, { propertyName: "dropdownMenuItems", first: true, predicate: ["dropdownMenuItems"], descendants: true }], ngImport: i0, template: "<div class=\"dropdown-wrapper\">\n @if (label) {\n <lib-label\n [for]=\"inputId\"\n [text]=\"label\"\n [type]=\"labelType\"\n [showHelpIcon]=\"showHelpIcon\"\n [subtext]=\"subtext\"\n (helpIconClick)=\"onHelpIconClick()\"\n ></lib-label>\n }\n\n <div\n class=\"dropdown-field-container\"\n [ngClass]=\"'dropdown-' + state\"\n >\n <div class=\"dropdown-field-wrapper\" (click)=\"toggleDropdown()\">\n <lib-field\n #dropdownInput\n [inputId]=\"inputId\"\n [placeholder]=\"placeholder\"\n [value]=\"displayText\"\n [disabled]=\"disabled\"\n [state]=\"state\"\n [ariaLabel]=\"ariaLabel ? ariaLabel : label\"\n [iconAfter]=\"isOpen ? 'expand_less' : 'expand_more'\"\n [attr.readonly]=\"!searchable\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n >\n </lib-field>\n </div>\n\n @if (isOpen) {\n <div class=\"dropdown-menu\">\n <div class=\"dropdown-menu-items\" #dropdownMenuItems>\n @if (filteredOptions.length === 0) {\n <div class=\"dropdown-menu-item no-results\">No results found</div>\n }\n @for (option of filteredOptions; track option.value; let i = $index) {\n <div\n class=\"dropdown-menu-item\"\n [ngClass]=\"{\n selected: option.value === value,\n highlighted: i === selectedIndex,\n disabled: option.disabled\n }\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.dropdown-wrapper{display:flex;flex-direction:column;align-items:flex-start;padding:0;gap:.5rem;width:100%}.dropdown-field-container{position:relative;width:100%}.dropdown-field-container .dropdown-field-wrapper{cursor:pointer}.dropdown-field-container .dropdown-field-wrapper lib-field{cursor:pointer;pointer-events:none}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper{cursor:pointer}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input{cursor:pointer;pointer-events:auto}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input:not([readonly]){cursor:text}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .icon-after{pointer-events:none}.dropdown-field-container .dropdown-menu{position:absolute;top:100%;left:0;width:100%;max-height:15rem;background:#fff;border:1px solid #d0d0d0;border-radius:0 0 .25rem .25rem;z-index:1000;overflow:hidden;box-shadow:0 2px 8px #0000001a}.dropdown-field-container .dropdown-menu .dropdown-menu-items{max-height:15rem;overflow-y:auto;overflow-x:hidden}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar{width:.5625rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-track{background:#fff}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb{background:#8f8f8f;border-radius:16rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb:hover{background:#676767}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item{display:flex;flex-direction:row;align-items:flex-end;padding:.5rem 1rem;gap:.5rem;color:#141414;cursor:pointer;transition:background-color .2s ease}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item:hover:not(.disabled):not(.no-results){background:#f9f9f9}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.selected{background:#ccdaf1;font-weight:600}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted.selected:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.disabled{color:#676767;cursor:not-allowed;opacity:.6}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.no-results{color:#676767;cursor:default;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LabelComponent, selector: "lib-label", inputs: ["text", "type", "showHelpIcon", "ariaLabel", "position", "isRequired", "for", "subtext"], outputs: ["helpIconClick"] }, { kind: "component", type: FieldComponent, selector: "lib-field", inputs: ["inputType", "inputId", "placeholder", "state", "status", "iconBefore", "iconAfter", "iconBeforeClickable", "iconAfterClickable", "iconBeforeAction", "iconAfterAction", "disabled", "ariaLabel", "value", "isFullText", "rows", "minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["valueChange", "iconBeforeClick", "iconAfterClick", "fieldFocus", "fieldBlur"] }] }); }
4437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PostTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4438
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PostTabComponent, isStandalone: true, selector: "lib-post-tab", inputs: { type: "type", icon: "icon", text: "text", showText: "showText", action: "action", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: "<div \n class=\"post-tab\" \n [ngClass]=\"{\n 'post-tab--disabled': disabled,\n 'post-tab--active': action && !disabled,\n 'post-tab--inactive': !action && !disabled,\n 'post-tab--icon-only': !showText\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"post-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText && showText) {\n <span class=\"post-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.post-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:0 .25rem .25rem 0;transition:background-color .2s ease;margin-right:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.post-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.post-tab--disabled .post-tab__icon{color:#676767}.post-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.post-tab--inactive .post-tab__icon{color:#00245d}.post-tab--active{background:#0047ba;color:#fff;cursor:pointer}.post-tab--active:hover{background:#003995}.post-tab--active .post-tab__icon{color:#fff}.post-tab--icon-only{padding:.25rem .5rem}.post-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.post-tab__text{flex:none;white-space:nowrap;display:none}.post-tab:not(.post-tab--icon-only) .post-tab__text{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
4371
4439
  }
4372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownComponent, decorators: [{
4440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PostTabComponent, decorators: [{
4373
4441
  type: Component,
4374
- args: [{ selector: 'lib-dropdown', standalone: true, imports: [CommonModule, LabelComponent, FieldComponent], providers: [
4375
- {
4376
- provide: NG_VALUE_ACCESSOR,
4377
- useExisting: forwardRef(() => DropdownComponent),
4378
- multi: true,
4379
- },
4380
- ], template: "<div class=\"dropdown-wrapper\">\n @if (label) {\n <lib-label\n [for]=\"inputId\"\n [text]=\"label\"\n [type]=\"labelType\"\n [showHelpIcon]=\"showHelpIcon\"\n [subtext]=\"subtext\"\n (helpIconClick)=\"onHelpIconClick()\"\n ></lib-label>\n }\n\n <div\n class=\"dropdown-field-container\"\n [ngClass]=\"'dropdown-' + state\"\n >\n <div class=\"dropdown-field-wrapper\" (click)=\"toggleDropdown()\">\n <lib-field\n #dropdownInput\n [inputId]=\"inputId\"\n [placeholder]=\"placeholder\"\n [value]=\"displayText\"\n [disabled]=\"disabled\"\n [state]=\"state\"\n [ariaLabel]=\"ariaLabel ? ariaLabel : label\"\n [iconAfter]=\"isOpen ? 'expand_less' : 'expand_more'\"\n [attr.readonly]=\"!searchable\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n >\n </lib-field>\n </div>\n\n @if (isOpen) {\n <div class=\"dropdown-menu\">\n <div class=\"dropdown-menu-items\" #dropdownMenuItems>\n @if (filteredOptions.length === 0) {\n <div class=\"dropdown-menu-item no-results\">No results found</div>\n }\n @for (option of filteredOptions; track option.value; let i = $index) {\n <div\n class=\"dropdown-menu-item\"\n [ngClass]=\"{\n selected: option.value === value,\n highlighted: i === selectedIndex,\n disabled: option.disabled\n }\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.dropdown-wrapper{display:flex;flex-direction:column;align-items:flex-start;padding:0;gap:.5rem;width:100%}.dropdown-field-container{position:relative;width:100%}.dropdown-field-container .dropdown-field-wrapper{cursor:pointer}.dropdown-field-container .dropdown-field-wrapper lib-field{cursor:pointer;pointer-events:none}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper{cursor:pointer}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input{cursor:pointer;pointer-events:auto}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .field-input:not([readonly]){cursor:text}.dropdown-field-container .dropdown-field-wrapper lib-field ::ng-deep .field-wrapper .icon-after{pointer-events:none}.dropdown-field-container .dropdown-menu{position:absolute;top:100%;left:0;width:100%;max-height:15rem;background:#fff;border:1px solid #d0d0d0;border-radius:0 0 .25rem .25rem;z-index:1000;overflow:hidden;box-shadow:0 2px 8px #0000001a}.dropdown-field-container .dropdown-menu .dropdown-menu-items{max-height:15rem;overflow-y:auto;overflow-x:hidden}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar{width:.5625rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-track{background:#fff}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb{background:#8f8f8f;border-radius:16rem}.dropdown-field-container .dropdown-menu .dropdown-menu-items::-webkit-scrollbar-thumb:hover{background:#676767}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item{display:flex;flex-direction:row;align-items:flex-end;padding:.5rem 1rem;gap:.5rem;color:#141414;cursor:pointer;transition:background-color .2s ease}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item:hover:not(.disabled):not(.no-results){background:#f9f9f9}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.selected{background:#ccdaf1;font-weight:600}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.highlighted.selected:not(.disabled):not(.no-results){background:#e5edf8}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.disabled{color:#676767;cursor:not-allowed;opacity:.6}.dropdown-field-container .dropdown-menu .dropdown-menu-items .dropdown-menu-item.no-results{color:#676767;cursor:default;font-style:italic}\n"] }]
4381
- }], propDecorators: { label: [{
4382
- type: Input
4383
- }], inputId: [{
4384
- type: Input
4385
- }], labelType: [{
4386
- type: Input
4387
- }], showHelpIcon: [{
4442
+ args: [{ selector: 'lib-post-tab', standalone: true, imports: [CommonModule], template: "<div \n class=\"post-tab\" \n [ngClass]=\"{\n 'post-tab--disabled': disabled,\n 'post-tab--active': action && !disabled,\n 'post-tab--inactive': !action && !disabled,\n 'post-tab--icon-only': !showText\n }\"\n [attr.aria-label]=\"computedAriaLabel\"\n role=\"presentation\"\n>\n @if (displayIcon) {\n <span class=\"post-tab__icon material-symbols-outlined\" aria-hidden=\"true\">\n {{ displayIcon }}\n </span>\n }\n @if (displayText && showText) {\n <span class=\"post-tab__text\">{{ displayText }}</span>\n }\n</div>\n", styles: ["html{border:0;margin:0;padding:0;-webkit-text-size-adjust:100%}body{margin:0;padding:0}*,*:before,*:after{box-sizing:border-box}:root{--color-navy: #00245d;--color-royal: #0047ba;--color-white: #ffffff;--color-blue-500: #00245d;--color-blue-400: #003995;--color-blue-300: #0047ba;--color-blue-200: #336cc8;--color-blue-150: #ccdaf1;--color-blue-100: #e5edf8;--color-gray-500: #141414;--color-gray-400: #676767;--color-gray-300: #8f8f8f;--color-gray-200: #d0d0d0;--color-gray-100: #e7e7e7;--color-gray-50: #f9f9f9;--color-gray-brand-400: #676767;--color-green-500: #1d562e;--color-green-400: #2e8545;--color-green-300: #3ba35a;--color-green-200: #9dd1ac;--color-green-100: #ebf6ee;--color-teal-500: #26485f;--color-teal-400: #3e7295;--color-teal-300: #457fa6;--color-teal-200: #a2bfd3;--color-teal-100: #ecf2f6;--color-red-500: #702121;--color-red-400: #b33837;--color-red-300: #c73e3d;--color-red-200: #e39e9e;--color-red-100: #f9ecec;--color-yellow-500: #635f04;--color-yellow-400: #928c30;--color-yellow-300: #d1c844;--color-yellow-200: #e8e3a1;--color-yellow-100: #faf9ec;--color-purple-focus: #b967c7;--text-heading: #002e5d;--text-secondary-heading: #737373;--text-body: #141414;--text-disabled: #676767;--text-link: #336cc8;--text-on-action: #ffffff;--text-success: #1d562e;--text-info: #26485f;--text-error: #702121;--text-warning: #635f04;--surface-success: #ebf6ee;--surface-info: #ecf2f6;--surface-error: #f9ecec;--surface-warning: #faf9ec;--focus-ring-color: #b967c7}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Light.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Regular.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Semibold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Bold.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-LightItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-Italic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-SemiboldItalic.ttf) format(\"truetype\");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(https://media.lib.byu.edu/web-assets/fonts/sourcesanspro/1.0.0/SourceSansPro-BoldItalic.ttf) format(\"truetype\");font-display:swap}h1,h2,h3,h4,h5,h6,span:not(.material-symbols-outlined),a,p{font-family:Source Sans Pro}h1{font-weight:300;font-style:normal;color:var(--text-heading)}h2{font-weight:400;font-style:normal;color:var(--text-heading)}h3{font-weight:700;font-style:normal;color:var(--text-heading)}h4,h5,h6{font-weight:600;font-style:normal;color:var(--text-secondary-heading)}.hbll-default-body{font-weight:400;font-style:normal;max-width:35rem;min-width:22.25rem;color:var(--text-body)}.hbll-caption{font-weight:400;font-style:normal;max-width:25.25rem;min-width:17.5rem;color:var(--text-body)}.hbll-large{font-weight:400;font-style:normal;max-width:41.25rem;min-width:26.5rem;color:var(--text-body)}a{color:var(--text-link);text-decoration:underline}.hbll-emphasis{font-weight:600}h1{font-size:2rem;line-height:2.5rem}h2{font-size:1.75rem;line-height:2.25rem}h3,h4{font-size:1.5rem;line-height:2rem}h5,h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:.875rem;line-height:1.25rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1rem;line-height:1.5rem}@media screen and (min-width: 52.125em){h1{font-size:3rem;line-height:3.5rem}h2{font-size:2.5rem;line-height:3rem}h3{font-size:2rem;line-height:3rem}h4{font-size:1.75rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}@media screen and (min-width: 90em){h1{font-size:3.75rem;line-height:4.25rem}h2{font-size:3rem;line-height:3.5rem}h3{font-size:2.5rem;line-height:3rem}h4{font-size:2rem;line-height:2.5rem}h5{font-size:1.5rem;line-height:2rem}h6{font-size:1.25rem;line-height:1.75rem}.hbll-default-body{font-size:1rem;line-height:1.5rem}.hbll-caption{font-size:.75rem;line-height:1rem}.hbll-large{font-size:1.25rem;line-height:1.75rem}}:focus-visible{outline:.125rem solid var(--focus-ring-color);outline-offset:.125rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only.sr-only-focusable:focus,.sr-only.sr-only-focusable:focus-within,.sr-only.sr-only-focusable:active{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.post-tab{display:flex;flex-direction:row;align-items:center;gap:.5rem;border-radius:0 .25rem .25rem 0;transition:background-color .2s ease;margin-right:-.75rem;margin-top:-.25rem;margin-bottom:-.25rem;padding:.25rem .5rem}.post-tab--disabled{background:#e7e7e7;color:#676767;cursor:not-allowed}.post-tab--disabled .post-tab__icon{color:#676767}.post-tab--inactive{background:#e7e7e7;color:#00245d;cursor:default}.post-tab--inactive .post-tab__icon{color:#00245d}.post-tab--active{background:#0047ba;color:#fff;cursor:pointer}.post-tab--active:hover{background:#003995}.post-tab--active .post-tab__icon{color:#fff}.post-tab--icon-only{padding:.25rem .5rem}.post-tab__icon{width:1.5rem;height:1.5rem;flex:none;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.post-tab__text{flex:none;white-space:nowrap;display:none}.post-tab:not(.post-tab--icon-only) .post-tab__text{display:block}\n"] }]
4443
+ }], propDecorators: { type: [{
4388
4444
  type: Input
4389
- }], subtext: [{
4445
+ }], icon: [{
4390
4446
  type: Input
4391
- }], placeholder: [{
4447
+ }], text: [{
4392
4448
  type: Input
4393
- }], options: [{
4449
+ }], showText: [{
4394
4450
  type: Input
4395
- }], state: [{
4451
+ }], action: [{
4396
4452
  type: Input
4397
4453
  }], disabled: [{
4398
4454
  type: Input
4399
4455
  }], ariaLabel: [{
4400
4456
  type: Input
4401
- }], searchable: [{
4402
- type: Input
4403
- }], valueChange: [{
4404
- type: Output
4405
- }], helpIconClick: [{
4406
- type: Output
4407
- }], dropdownInput: [{
4408
- type: ViewChild,
4409
- args: ['dropdownInput']
4410
- }], dropdownMenuItems: [{
4411
- type: ViewChild,
4412
- args: ['dropdownMenuItems']
4413
- }], onDocumentClick: [{
4414
- type: HostListener,
4415
- args: ['document:click', ['$event']]
4416
4457
  }] } });
4417
4458
 
4418
4459
  /*