@byuhbll/components 4.0.0-alpha.3 → 4.0.0-alpha.31

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.
Files changed (58) hide show
  1. package/esm2022/lib/animations/animations.mjs +19 -1
  2. package/esm2022/lib/checkbox/checkbox.component.mjs +15 -0
  3. package/esm2022/lib/contact-utils.mjs +41 -0
  4. package/esm2022/lib/copy-tooltip/copy-tooltip.component.mjs +49 -0
  5. package/esm2022/lib/expand-collapse/expand-collapse.component.mjs +31 -0
  6. package/esm2022/lib/hbll-footer/hbll-footer.component.mjs +81 -0
  7. package/esm2022/lib/hbll-header/hbll-header.component.mjs +81 -31
  8. package/esm2022/lib/hbll-header/models/library-hours.mjs +2 -0
  9. package/esm2022/lib/hbll-header/nav-bar/nav-bar.component.mjs +333 -0
  10. package/esm2022/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.mjs +29 -0
  11. package/esm2022/lib/hbll-header/pipes/library-hours.pipe.mjs +31 -0
  12. package/esm2022/lib/header-with-impersonation/header-with-impersonation.component.mjs +38 -0
  13. package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +190 -0
  14. package/esm2022/lib/impersonation-banner/impersonation-banner.component.mjs +128 -0
  15. package/esm2022/lib/impersonation-banner/models/application-access.mjs +7 -0
  16. package/esm2022/lib/impersonation-banner/models/person-summary.mjs +15 -0
  17. package/esm2022/lib/models/token-payload.mjs +2 -0
  18. package/esm2022/lib/multi-select/multi-select.component.mjs +115 -0
  19. package/esm2022/lib/pipes/hbll-item-type-icon.pipe.mjs +128 -0
  20. package/esm2022/lib/ss-search-bar/advanced-search/advanced-search.component.mjs +5 -5
  21. package/esm2022/lib/ss-search-bar/date-range/date-range.component.mjs +3 -3
  22. package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +3 -3
  23. package/esm2022/lib/utils.mjs +7 -0
  24. package/esm2022/public-api.mjs +7 -1
  25. package/fesm2022/byuhbll-components.mjs +1153 -66
  26. package/fesm2022/byuhbll-components.mjs.map +1 -1
  27. package/lib/animations/animations.d.ts +1 -0
  28. package/lib/{hbll-checkbox/hbll-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +2 -2
  29. package/lib/contact-utils.d.ts +19 -0
  30. package/lib/copy-tooltip/copy-tooltip.component.d.ts +12 -0
  31. package/lib/expand-collapse/expand-collapse.component.d.ts +10 -0
  32. package/lib/hbll-footer/hbll-footer.component.d.ts +28 -0
  33. package/lib/hbll-header/hbll-header.component.d.ts +23 -28
  34. package/lib/hbll-header/models/library-hours.d.ts +10 -0
  35. package/lib/hbll-header/nav-bar/nav-bar.component.d.ts +30 -0
  36. package/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.d.ts +12 -0
  37. package/lib/hbll-header/pipes/library-hours.pipe.d.ts +7 -0
  38. package/lib/header-with-impersonation/header-with-impersonation.component.d.ts +19 -0
  39. package/lib/impersonate-modal/impersonate-modal.component.d.ts +60 -0
  40. package/lib/impersonation-banner/impersonation-banner.component.d.ts +31 -0
  41. package/lib/impersonation-banner/models/application-access.d.ts +15 -0
  42. package/lib/impersonation-banner/models/person-summary.d.ts +33 -0
  43. package/lib/models/token-payload.d.ts +3 -0
  44. package/lib/{hbll-multi-select/hbll-multi-select.component.d.ts → multi-select/multi-select.component.d.ts} +1 -1
  45. package/lib/pipes/hbll-item-type-icon.pipe.d.ts +17 -0
  46. package/lib/ss-search-bar/advanced-search/advanced-search.component.d.ts +4 -1
  47. package/lib/utils.d.ts +5 -0
  48. package/package.json +4 -1
  49. package/public-api.d.ts +6 -0
  50. package/styles/scss/_mixins.scss +2 -2
  51. package/styles/scss/_vars.scss +7 -0
  52. package/styles/scss/base.scss +39 -7
  53. package/styles/scss/cta-btn.scss +2 -2
  54. package/styles/scss/pill-btn.scss +2 -2
  55. package/styles/scss/shared.scss +8 -0
  56. package/styles/scss/spinner.scss +20 -0
  57. package/esm2022/lib/hbll-checkbox/hbll-checkbox.component.mjs +0 -17
  58. package/esm2022/lib/hbll-multi-select/hbll-multi-select.component.mjs +0 -115
@@ -0,0 +1,115 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatAutocompleteModule, } from '@angular/material/autocomplete';
4
+ import { MatFormFieldModule } from '@angular/material/form-field';
5
+ import { MatChipsModule } from '@angular/material/chips';
6
+ import { COMMA, ENTER } from '@angular/cdk/keycodes';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
9
+ import { combineLatest } from 'rxjs';
10
+ import { map, startWith } from 'rxjs/operators';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common";
13
+ import * as i2 from "@angular/material/chips";
14
+ import * as i3 from "@angular/material/form-field";
15
+ import * as i4 from "@angular/material/autocomplete";
16
+ import * as i5 from "@angular/material/core";
17
+ import * as i6 from "@angular/forms";
18
+ export class HbllMultiSelectComponent {
19
+ constructor() {
20
+ this.allOptions = {};
21
+ this.label = '';
22
+ /**
23
+ * An array that indicates which keys are selected.
24
+ */
25
+ this.selectedKeys = [];
26
+ /**
27
+ * An EventEmitter that emits an array of keys indicating which options are currently selected.
28
+ */
29
+ this.selectedKeysChange = new EventEmitter();
30
+ this.inputControl = new FormControl('');
31
+ this.filteredOptions$ = combineLatest([
32
+ this.inputControl.valueChanges.pipe(startWith('')),
33
+ this.selectedKeysChange.asObservable().pipe(startWith([])),
34
+ ]).pipe(map(([key]) =>
35
+ // Display filtered options if there is a value, else display all options currently not selected.
36
+ key
37
+ ? this.filterOptions(key)
38
+ : Object.keys(this.allOptions).filter((key) => !this.selectedKeys.find((selectedOption) => key === selectedOption))));
39
+ this.separatorKeysCodes = [ENTER, COMMA];
40
+ /**
41
+ * Adds an option to the array of selected keys when a user selects from the autocomplete.
42
+ * @param {MatAutocompleteSelectedEvent} event MatAutocompleteSelectedEvent
43
+ */
44
+ this.selectOption = (event) => {
45
+ this.addOptionToSelectedOptions(event.option.value);
46
+ };
47
+ /**
48
+ * Filters the options by the supplied value as well as the currently selected values.
49
+ * @param {string} value value to filter by.
50
+ * @returns {string[]} the filtered keys
51
+ */
52
+ this.filterOptions = (value) => {
53
+ return Object.keys(this.allOptions).filter((key) => this.allOptions[key].toLowerCase().includes(value.toLowerCase()) &&
54
+ !this.selectedKeys.includes(key));
55
+ };
56
+ /**
57
+ * Adds a key to the selected keys array if the option is truthy and not already in the array.
58
+ * The input is also cleared (if available), and the new selected keys are emitted.
59
+ * @param {key} option key to add
60
+ */
61
+ this.addOptionToSelectedOptions = (key) => {
62
+ if (key && !this.selectedKeys.includes(key) && this.allOptions[key]) {
63
+ this.selectedKeys.push(key);
64
+ this.inputControl.setValue('');
65
+ this.selectedKeysChange.emit(this.selectedKeys);
66
+ if (this.inputRef)
67
+ this.inputRef.nativeElement.value = '';
68
+ }
69
+ };
70
+ }
71
+ /**
72
+ * Adds a key from the input to the array of selected key.
73
+ * The value from the input must match a key from the record of all options.
74
+ * @param {MatChipInputEvent} event MatChipInputEvent
75
+ */
76
+ addOption(event) {
77
+ this.addOptionToSelectedOptions(event.value);
78
+ }
79
+ /**
80
+ * Removes a key from the array of selected options and emits the new selected keys.
81
+ * @param {MultiSelectKeyValPair} key key to remove
82
+ */
83
+ removeOption(key) {
84
+ const index = this.selectedKeys.indexOf(key);
85
+ if (index >= 0) {
86
+ this.selectedKeys.splice(index, 1);
87
+ this.selectedKeysChange.emit(this.selectedKeys);
88
+ }
89
+ }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllMultiSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HbllMultiSelectComponent, isStandalone: true, selector: "lib-multi-select", inputs: { 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=\"components-hidden\" for=\"input\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"input\"\n [formControl]=\"inputControl\"\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"addOption($event)\"\n data-testid=\"input\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selectOption($event)\"\n data-testid=\"autocomplete\"\n >\n @for (key of filteredOptions$ | async; track key) {\n <mat-option [value]=\"key\" data-testid=\"autocompleteOption\">\n {{ allOptions[key] }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n", styles: [".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 .components-icon{font-size:1em}.components-multi-select .mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{font:inherit}.components-multi-select .components-hidden{display:none}.mat-mdc-option.mdc-list-item{background-color:#fff;font:inherit}.mat-mdc-autocomplete-panel{background-color:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.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: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.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: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
92
+ }
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllMultiSelectComponent, decorators: [{
94
+ type: Component,
95
+ args: [{ selector: 'lib-multi-select', standalone: true, imports: [
96
+ CommonModule,
97
+ MatChipsModule,
98
+ MatFormFieldModule,
99
+ MatAutocompleteModule,
100
+ ReactiveFormsModule,
101
+ MatIconModule,
102
+ ], 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=\"components-hidden\" for=\"input\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"input\"\n [formControl]=\"inputControl\"\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"addOption($event)\"\n data-testid=\"input\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selectOption($event)\"\n data-testid=\"autocomplete\"\n >\n @for (key of filteredOptions$ | async; track key) {\n <mat-option [value]=\"key\" data-testid=\"autocompleteOption\">\n {{ allOptions[key] }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n", styles: [".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 .components-icon{font-size:1em}.components-multi-select .mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{font:inherit}.components-multi-select .components-hidden{display:none}.mat-mdc-option.mdc-list-item{background-color:#fff;font:inherit}.mat-mdc-autocomplete-panel{background-color:#fff!important}\n"] }]
103
+ }], propDecorators: { inputRef: [{
104
+ type: ViewChild,
105
+ args: ['input']
106
+ }], allOptions: [{
107
+ type: Input
108
+ }], label: [{
109
+ type: Input
110
+ }], selectedKeys: [{
111
+ type: Input
112
+ }], selectedKeysChange: [{
113
+ type: Output
114
+ }] } });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxxQkFBcUIsR0FFeEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBb0JoRCxNQUFNLE9BQU8sd0JBQXdCO0lBbEJyQztRQW9CYSxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUN4QyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3BCOztXQUVH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SSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDOzhHQWhEUSx3QkFBd0I7a0dBQXhCLHdCQUF3QiwwVEN6Q3JDLHF6REEyQ0EsMjNCRGhCUSxZQUFZLGdKQUNaLGNBQWMsNHVCQUNkLGtCQUFrQix5T0FDbEIscUJBQXFCLHcxQkFDckIsbUJBQW1CLHlrQkFDbkIsYUFBYTs7MkZBU1Isd0JBQXdCO2tCQWxCcEMsU0FBUzsrQkFDSSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixhQUFhO3FCQUNoQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUtuQixRQUFRO3NCQUFuQyxTQUFTO3VCQUFDLE9BQU87Z0JBQ1QsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCwgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItbXVsdGktc2VsZWN0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgXSxcbiAgICAvLyBOZWNlc3NhcnkgdG8gb3ZlcnJpZGUgbWF0ZXJpYWwgZGVzaWduIHN0eWxlcy5cbiAgICAvLyBJTVBPUlRBTlQ6IFRpZ2h0bHkgc2NvcGUgY2xhc3NlcyBhbmQgaWRzIHRvIHRoaXMgY29tcG9uZW50IGlmIHRoZXkgYXJlIG5lY2Vzc2FyeS5cbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBIYmxsTXVsdGlTZWxlY3RDb21wb25lbnQge1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgcHJpdmF0ZSBpbnB1dFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQElucHV0KCkgYWxsT3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgdGhhdCBpbmRpY2F0ZXMgd2hpY2gga2V5cyBhcmUgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEFuIEV2ZW50RW1pdHRlciB0aGF0IGVtaXRzIGFuIGFycmF5IG9mIGtleXMgaW5kaWNhdGluZyB3aGljaCBvcHRpb25zIGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkS2V5c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgICBwcm90ZWN0ZWQgaW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgICBwcm90ZWN0ZWQgZmlsdGVyZWRPcHRpb25zJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5pbnB1dENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKCcnKSksXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc3RhcnRXaXRoKFtdKSksXG4gICAgXSkucGlwZShcbiAgICAgICAgbWFwKChba2V5XTogW3N0cmluZyB8IG51bGwsIHVua25vd25dKSA9PlxuICAgICAgICAgICAgLy8gRGlzcGxheSBmaWx0ZXJlZCBvcHRpb25zIGlmIHRoZXJlIGlzIGEgdmFsdWUsIGVsc2UgZGlzcGxheSBhbGwgb3B0aW9ucyBjdXJyZW50bHkgbm90IHNlbGVjdGVkLlxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICAgPyB0aGlzLmZpbHRlck9wdGlvbnMoa2V5KVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmtleXModGhpcy5hbGxPcHRpb25zKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgKGtleSkgPT4gIXRoaXMuc2VsZWN0ZWRLZXlzLmZpbmQoKHNlbGVjdGVkT3B0aW9uKSA9PiBrZXkgPT09IHNlbGVjdGVkT3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGtleSBmcm9tIHRoZSBpbnB1dCB0byB0aGUgYXJyYXkgb2Ygc2VsZWN0ZWQga2V5LlxuICAgICAqIFRoZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBtdXN0IG1hdGNoIGEga2V5IGZyb20gdGhlIHJlY29yZCBvZiBhbGwgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge01hdENoaXBJbnB1dEV2ZW50fSBldmVudCBNYXRDaGlwSW5wdXRFdmVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGRPcHRpb24oZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkT3B0aW9uVG9TZWxlY3RlZE9wdGlvbnMoZXZlbnQudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBrZXkgZnJvbSB0aGUgYXJyYXkgb2Ygc2VsZWN0ZWQgb3B0aW9ucyBhbmQgZW1pdHMgdGhlIG5ldyBzZWxlY3RlZCBrZXlzLlxuICAgICAqIEBwYXJhbSB7TXVsdGlTZWxlY3RLZXlWYWxQYWlyfSBrZXkga2V5IHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVPcHRpb24oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkS2V5cy5pbmRleE9mKGtleSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkS2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIG9wdGlvbiB0byB0aGUgYXJyYXkgb2Ygc2VsZWN0ZWQga2V5cyB3aGVuIGEgdXNlciBzZWxlY3RzIGZyb20gdGhlIGF1dG9jb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0ge01hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnR9IGV2ZW50IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2VsZWN0T3B0aW9uID0gKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYWRkT3B0aW9uVG9TZWxlY3RlZE9wdGlvbnMoZXZlbnQub3B0aW9uLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVycyB0aGUgb3B0aW9ucyBieSB0aGUgc3VwcGxpZWQgdmFsdWUgYXMgd2VsbCBhcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgdmFsdWUgdG8gZmlsdGVyIGJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gdGhlIGZpbHRlcmVkIGtleXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbHRlck9wdGlvbnMgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWxsT3B0aW9ucykuZmlsdGVyKFxuICAgICAgICAgICAgKGtleTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuYWxsT3B0aW9uc1trZXldLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSkgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zZWxlY3RlZEtleXMuaW5jbHVkZXMoa2V5KSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGtleSB0byB0aGUgc2VsZWN0ZWQga2V5cyBhcnJheSBpZiB0aGUgb3B0aW9uIGlzIHRydXRoeSBhbmQgbm90IGFscmVhZHkgaW4gdGhlIGFycmF5LlxuICAgICAqIFRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyZWQgKGlmIGF2YWlsYWJsZSksIGFuZCB0aGUgbmV3IHNlbGVjdGVkIGtleXMgYXJlIGVtaXR0ZWQuXG4gICAgICogQHBhcmFtIHtrZXl9IG9wdGlvbiBrZXkgdG8gYWRkXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRPcHRpb25Ub1NlbGVjdGVkT3B0aW9ucyA9IChrZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmICF0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyhrZXkpICYmIHRoaXMuYWxsT3B0aW9uc1trZXldKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRLZXlzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UmVmKSB0aGlzLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29tcG9uZW50cy1tdWx0aS1zZWxlY3RcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBHcmlkIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWwgKyAnIHNlbGVjdGlvbidcIj5cbiAgICAgICAgICAgIEBmb3IgKGtleSBvZiBzZWxlY3RlZEtleXM7IHRyYWNrIGtleSkge1xuICAgICAgICAgICAgICAgIEBpZiAoYWxsT3B0aW9uc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgKHJlbW92ZWQpPVwicmVtb3ZlT3B0aW9uKGtleSlcIiBkYXRhLXRlc3RpZD1cIm1hdENoaXBSb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFsbE9wdGlvbnNba2V5XSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdENoaXBSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidyZW1vdmUgJyArIGFsbE9wdGlvbnNba2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3JlbW92ZScgKyBrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjb21wb25lbnRzLWljb25cIj4gY2FuY2VsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29tcG9uZW50cy1oaWRkZW5cIiBmb3I9XCJpbnB1dFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWwgfCB0aXRsZWNhc2VcIlxuICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICBpZD1cImlucHV0XCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dENvbnRyb2xcIlxuICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiXG4gICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXG4gICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkT3B0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0T3B0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdXRvY29tcGxldGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChrZXkgb2YgZmlsdGVyZWRPcHRpb25zJCB8IGFzeW5jOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwia2V5XCIgZGF0YS10ZXN0aWQ9XCJhdXRvY29tcGxldGVPcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYWxsT3B0aW9uc1trZXldIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuIl19
@@ -0,0 +1,128 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const typeToIconMap = {
4
+ archive: 'inventory_2',
5
+ article: 'article',
6
+ audio: 'mic',
7
+ audiobook: 'mic',
8
+ 'blu-ray': 'album',
9
+ book: 'book_4',
10
+ 'book-chapter': 'book_6',
11
+ 'book-review': 'reviews',
12
+ broadside: 'image',
13
+ calculator: 'calculate',
14
+ cassette: 'album',
15
+ cd: 'album',
16
+ 'cd-rom': 'album',
17
+ clothing: 'album',
18
+ 'clothing-pattern': 'album',
19
+ collection: 'library_books',
20
+ conference: 'podium',
21
+ 'conference-proceeding': 'podium',
22
+ cuneiform: 'aod_tablet',
23
+ curricula: 'aod_tablet',
24
+ database: 'database',
25
+ dataset: 'dataset',
26
+ diary: 'book_2',
27
+ dissertation: 'school',
28
+ dvd: 'album',
29
+ ebook: 'two_pager',
30
+ ebookreader: 'chrome_reader_mode',
31
+ ejournal: 'two_pager',
32
+ 'electronic-resource': 'description',
33
+ equipment: 'service_toolbox',
34
+ filmstrip: 'theaters',
35
+ 'finding-aid': 'travel_explore',
36
+ 'government-document': 'travel_explore',
37
+ 'government-novel': 'book_4',
38
+ guide: 'travel_explore',
39
+ image: 'image',
40
+ index: 'list',
41
+ journal: 'book_2',
42
+ 'juv-book': 'book_4',
43
+ kit: 'home_repair_service',
44
+ laserdisc: 'album',
45
+ 'legal-document': 'gavel',
46
+ letter: 'mail',
47
+ magazine: 'newsmode',
48
+ manuscript: 'article',
49
+ 'manuscript-archive': 'inventory_2',
50
+ map: 'map',
51
+ media: 'play_circle',
52
+ microfiche: 'theaters',
53
+ microfilm: 'theaters',
54
+ microform: 'theaters',
55
+ model: 'modeling',
56
+ movie: 'movie',
57
+ multimedia: 'play_circle',
58
+ 'music-recording': 'album',
59
+ 'musical-recording': 'play_circle',
60
+ newsletter: 'article',
61
+ newspaper: 'newspaper',
62
+ 'newspaper-article': 'newspaper',
63
+ ostracon: 'description',
64
+ other: 'description',
65
+ painting: 'palette',
66
+ palmleaf: 'eco',
67
+ pamphlet: 'article',
68
+ papyrus: 'article',
69
+ performance: 'music_note',
70
+ periodical: 'article',
71
+ photograph: 'image',
72
+ picture: 'image',
73
+ poem: 'article',
74
+ poster: 'image',
75
+ presentation: 'slideshow',
76
+ 'primary-source': 'inventory_2',
77
+ 'primary-source-document': 'article',
78
+ record: 'album',
79
+ 'reel-to-reel': 'video_camera_back',
80
+ 'reference-entry': 'article',
81
+ report: 'summarize',
82
+ 'research-data-set': 'dataset',
83
+ review: 'summarize',
84
+ score: 'music_note',
85
+ script: 'article',
86
+ serial: 'article',
87
+ slide: 'slideshow',
88
+ software: 'terminal',
89
+ 'sound-recording': 'mic',
90
+ standards: 'article',
91
+ 'statistical-data-set': 'dataset',
92
+ 'streaming-audio': 'play_circle',
93
+ 'streaming-media': 'play_circle',
94
+ 'streaming-video': 'play_circle',
95
+ 'student-project': 'article',
96
+ 'technical-report': 'summarize',
97
+ 'text-resource': 'summarize',
98
+ unknown: 'article',
99
+ vhs: 'theaters',
100
+ video: 'movie',
101
+ website: 'globe',
102
+ };
103
+ /**
104
+ * Converts an item type to an icon type to be used with Google Material Icons
105
+ *
106
+ * Intended to be used with an imported font, such as: `<link
107
+ rel="stylesheet"
108
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,1,0"
109
+ />`
110
+ *
111
+ * Reference: https://fonts.google.com/icons?selected=Material+Symbols+Outlined:inventory_2:FILL@0;wght@400;GRAD@0;opsz@24&icon.query=invent&icon.size=24&icon.color=%235f6368
112
+ */
113
+ export class HbllItemTypeIconPipe {
114
+ transform(itemType) {
115
+ const type = itemType.replace(/_/g, '-').toLowerCase();
116
+ return typeToIconMap[type] ?? 'article';
117
+ }
118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllItemTypeIconPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
119
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: HbllItemTypeIconPipe, isStandalone: true, name: "libByuItemTypeIcon" }); }
120
+ }
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllItemTypeIconPipe, decorators: [{
122
+ type: Pipe,
123
+ args: [{
124
+ name: 'libByuItemTypeIcon',
125
+ standalone: true,
126
+ }]
127
+ }] });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1pdGVtLXR5cGUtaWNvbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3BpcGVzL2hibGwtaXRlbS10eXBlLWljb24ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFzQixNQUFNLGVBQWUsQ0FBQzs7QUFFekQsTUFBTSxhQUFhLEdBQUc7SUFDbEIsT0FBTyxFQUFFLGFBQWE7SUFDdEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsS0FBSyxFQUFFLEtBQUs7SUFDWixTQUFTLEVBQUUsS0FBSztJQUNoQixTQUFTLEVBQUUsT0FBTztJQUNsQixJQUFJLEVBQUUsUUFBUTtJQUNkLGNBQWMsRUFBRSxRQUFRO0lBQ3hCLGFBQWEsRUFBRSxTQUFTO0lBQ3hCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLEVBQUUsRUFBRSxPQUFPO0lBQ1gsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLE9BQU87SUFDakIsa0JBQWtCLEVBQUUsT0FBTztJQUMzQixVQUFVLEVBQUUsZUFBZTtJQUMzQixVQUFVLEVBQUUsUUFBUTtJQUNwQix1QkFBdUIsRUFBRSxRQUFRO0lBQ2pDLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEtBQUssRUFBRSxRQUFRO0lBQ2YsWUFBWSxFQUFFLFFBQVE7SUFDdEIsR0FBRyxFQUFFLE9BQU87SUFDWixLQUFLLEVBQUUsV0FBVztJQUNsQixXQUFXLEVBQUUsb0JBQW9CO0lBQ2pDLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLHFCQUFxQixFQUFFLGFBQWE7SUFDcEMsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixTQUFTLEVBQUUsVUFBVTtJ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eXBlIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgdHlwZVRvSWNvbk1hcCA9IHtcbiAgICBhcmNoaXZlOiAnaW52ZW50b3J5XzInLFxuICAgIGFydGljbGU6ICdhcnRpY2xlJyxcbiAgICBhdWRpbzogJ21pYycsXG4gICAgYXVkaW9ib29rOiAnbWljJyxcbiAgICAnYmx1LXJheSc6ICdhbGJ1bScsXG4gICAgYm9vazogJ2Jvb2tfNCcsXG4gICAgJ2Jvb2stY2hhcHRlcic6ICdib29rXzYnLFxuICAgICdib29rLXJldmlldyc6ICdyZXZpZXdzJyxcbiAgICBicm9hZHNpZGU6ICdpbWFnZScsXG4gICAgY2FsY3VsYXRvcjogJ2NhbGN1bGF0ZScsXG4gICAgY2Fzc2V0dGU6ICdhbGJ1bScsXG4gICAgY2Q6ICdhbGJ1bScsXG4gICAgJ2NkLXJvbSc6ICdhbGJ1bScsXG4gICAgY2xvdGhpbmc6ICdhbGJ1bScsXG4gICAgJ2Nsb3RoaW5nLXBhdHRlcm4nOiAnYWxidW0nLFxuICAgIGNvbGxlY3Rpb246ICdsaWJyYXJ5X2Jvb2tzJyxcbiAgICBjb25mZXJlbmNlOiAncG9kaXVtJyxcbiAgICAnY29uZmVyZW5jZS1wcm9jZWVkaW5nJzogJ3BvZGl1bScsXG4gICAgY3VuZWlmb3JtOiAnYW9kX3RhYmxldCcsXG4gICAgY3VycmljdWxhOiAnYW9kX3RhYmxldCcsXG4gICAgZGF0YWJhc2U6ICdkYXRhYmFzZScsXG4gICAgZGF0YXNldDogJ2RhdGFzZXQnLFxuICAgIGRpYXJ5OiAnYm9va18yJyxcbiAgICBkaXNzZXJ0YXRpb246ICdzY2hvb2wnLFxuICAgIGR2ZDogJ2FsYnVtJyxcbiAgICBlYm9vazogJ3R3b19wYWdlcicsXG4gICAgZWJvb2tyZWFkZXI6ICdjaHJvbWVfcmVhZGVyX21vZGUnLFxuICAgIGVqb3VybmFsOiAndHdvX3BhZ2VyJyxcbiAgICAnZWxlY3Ryb25pYy1yZXNvdXJjZSc6ICdkZXNjcmlwdGlvbicsXG4gICAgZXF1aXBtZW50OiAnc2VydmljZV90b29sYm94JyxcbiAgICBmaWxtc3RyaXA6ICd0aGVhdGVycycsXG4gICAgJ2ZpbmRpbmctYWlkJzogJ3RyYXZlbF9leHBsb3JlJyxcbiAgICAnZ292ZXJubWVudC1kb2N1bWVudCc6ICd0cmF2ZWxfZXhwbG9yZScsXG4gICAgJ2dvdmVybm1lbnQtbm92ZWwnOiAnYm9va180JyxcbiAgICBndWlkZTogJ3RyYXZlbF9leHBsb3JlJyxcbiAgICBpbWFnZTogJ2ltYWdlJyxcbiAgICBpbmRleDogJ2xpc3QnLFxuICAgIGpvdXJuYWw6ICdib29rXzInLFxuICAgICdqdXYtYm9vayc6ICdib29rXzQnLFxuICAgIGtpdDogJ2hvbWVfcmVwYWlyX3NlcnZpY2UnLFxuICAgIGxhc2VyZGlzYzogJ2FsYnVtJyxcbiAgICAnbGVnYWwtZG9jdW1lbnQnOiAnZ2F2ZWwnLFxuICAgIGxldHRlcjogJ21haWwnLFxuICAgIG1hZ2F6aW5lOiAnbmV3c21vZGUnLFxuICAgIG1hbnVzY3JpcHQ6ICdhcnRpY2xlJyxcbiAgICAnbWFudXNjcmlwdC1hcmNoaXZlJzogJ2ludmVudG9yeV8yJyxcbiAgICBtYXA6ICdtYXAnLFxuICAgIG1lZGlhOiAncGxheV9jaXJjbGUnLFxuICAgIG1pY3JvZmljaGU6ICd0aGVhdGVycycsXG4gICAgbWljcm9maWxtOiAndGhlYXRlcnMnLFxuICAgIG1pY3JvZm9ybTogJ3RoZWF0ZXJzJyxcbiAgICBtb2RlbDogJ21vZGVsaW5nJyxcbiAgICBtb3ZpZTogJ21vdmllJyxcbiAgICBtdWx0aW1lZGlhOiAncGxheV9jaXJjbGUnLFxuICAgICdtdXNpYy1yZWNvcmRpbmcnOiAnYWxidW0nLFxuICAgICdtdXNpY2FsLXJlY29yZGluZyc6ICdwbGF5X2NpcmNsZScsXG4gICAgbmV3c2xldHRlcjogJ2FydGljbGUnLFxuICAgIG5ld3NwYXBlcjogJ25ld3NwYXBlcicsXG4gICAgJ25ld3NwYXBlci1hcnRpY2xlJzogJ25ld3NwYXBlcicsXG4gICAgb3N0cmFjb246ICdkZXNjcmlwdGlvbicsXG4gICAgb3RoZXI6ICdkZXNjcmlwdGlvbicsXG4gICAgcGFpbnRpbmc6ICdwYWxldHRlJyxcbiAgICBwYWxtbGVhZjogJ2VjbycsXG4gICAgcGFtcGhsZXQ6ICdhcnRpY2xlJyxcbiAgICBwYXB5cnVzOiAnYXJ0aWNsZScsXG4gICAgcGVyZm9ybWFuY2U6ICdtdXNpY19ub3RlJyxcbiAgICBwZXJpb2RpY2FsOiAnYXJ0aWNsZScsXG4gICAgcGhvdG9ncmFwaDogJ2ltYWdlJyxcbiAgICBwaWN0dXJlOiAnaW1hZ2UnLFxuICAgIHBvZW06ICdhcnRpY2xlJyxcbiAgICBwb3N0ZXI6ICdpbWFnZScsXG4gICAgcHJlc2VudGF0aW9uOiAnc2xpZGVzaG93JyxcbiAgICAncHJpbWFyeS1zb3VyY2UnOiAnaW52ZW50b3J5XzInLFxuICAgICdwcmltYXJ5LXNvdXJjZS1kb2N1bWVudCc6ICdhcnRpY2xlJyxcbiAgICByZWNvcmQ6ICdhbGJ1bScsXG4gICAgJ3JlZWwtdG8tcmVlbCc6ICd2aWRlb19jYW1lcmFfYmFjaycsXG4gICAgJ3JlZmVyZW5jZS1lbnRyeSc6ICdhcnRpY2xlJyxcbiAgICByZXBvcnQ6ICdzdW1tYXJpemUnLFxuICAgICdyZXNlYXJjaC1kYXRhLXNldCc6ICdkYXRhc2V0JyxcbiAgICByZXZpZXc6ICdzdW1tYXJpemUnLFxuICAgIHNjb3JlOiAnbXVzaWNfbm90ZScsXG4gICAgc2NyaXB0OiAnYXJ0aWNsZScsXG4gICAgc2VyaWFsOiAnYXJ0aWNsZScsXG4gICAgc2xpZGU6ICdzbGlkZXNob3cnLFxuICAgIHNvZnR3YXJlOiAndGVybWluYWwnLFxuICAgICdzb3VuZC1yZWNvcmRpbmcnOiAnbWljJyxcbiAgICBzdGFuZGFyZHM6ICdhcnRpY2xlJyxcbiAgICAnc3RhdGlzdGljYWwtZGF0YS1zZXQnOiAnZGF0YXNldCcsXG4gICAgJ3N0cmVhbWluZy1hdWRpbyc6ICdwbGF5X2NpcmNsZScsXG4gICAgJ3N0cmVhbWluZy1tZWRpYSc6ICdwbGF5X2NpcmNsZScsXG4gICAgJ3N0cmVhbWluZy12aWRlbyc6ICdwbGF5X2NpcmNsZScsXG4gICAgJ3N0dWRlbnQtcHJvamVjdCc6ICdhcnRpY2xlJyxcbiAgICAndGVjaG5pY2FsLXJlcG9ydCc6ICdzdW1tYXJpemUnLFxuICAgICd0ZXh0LXJlc291cmNlJzogJ3N1bW1hcml6ZScsXG4gICAgdW5rbm93bjogJ2FydGljbGUnLFxuICAgIHZoczogJ3RoZWF0ZXJzJyxcbiAgICB2aWRlbzogJ21vdmllJyxcbiAgICB3ZWJzaXRlOiAnZ2xvYmUnLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBpdGVtIHR5cGUgdG8gYW4gaWNvbiB0eXBlIHRvIGJlIHVzZWQgd2l0aCBHb29nbGUgTWF0ZXJpYWwgSWNvbnNcbiAqXG4gKiBJbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggYW4gaW1wb3J0ZWQgZm9udCwgc3VjaCBhczogYDxsaW5rXG4gICAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREAyNCw0MDAsMSwwXCJcbiAgICAgICAgLz5gXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL2ZvbnRzLmdvb2dsZS5jb20vaWNvbnM/c2VsZWN0ZWQ9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDppbnZlbnRvcnlfMjpGSUxMQDA7d2dodEA0MDA7R1JBREAwO29wc3pAMjQmaWNvbi5xdWVyeT1pbnZlbnQmaWNvbi5zaXplPTI0Jmljb24uY29sb3I9JTIzNWY2MzY4XG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnbGliQnl1SXRlbVR5cGVJY29uJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIYmxsSXRlbVR5cGVJY29uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShpdGVtVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGl0ZW1UeXBlLnJlcGxhY2UoL18vZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdHlwZVRvSWNvbk1hcFt0eXBlIGFzIGtleW9mIHR5cGVvZiB0eXBlVG9JY29uTWFwXSA/PyAnYXJ0aWNsZSc7XG4gICAgfVxufVxuIl19