@byuhbll/components 4.0.0-alpha.3 → 4.0.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/animations/animations.mjs +19 -1
- package/esm2022/lib/checkbox/checkbox.component.mjs +15 -0
- package/esm2022/lib/contact-utils.mjs +41 -0
- package/esm2022/lib/copy-tooltip/copy-tooltip.component.mjs +49 -0
- package/esm2022/lib/expand-collapse/expand-collapse.component.mjs +31 -0
- package/esm2022/lib/hbll-footer/hbll-footer.component.mjs +81 -0
- package/esm2022/lib/hbll-header/hbll-header.component.mjs +81 -31
- package/esm2022/lib/hbll-header/models/library-hours.mjs +2 -0
- package/esm2022/lib/hbll-header/nav-bar/nav-bar.component.mjs +333 -0
- package/esm2022/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.mjs +29 -0
- package/esm2022/lib/hbll-header/pipes/library-hours.pipe.mjs +31 -0
- package/esm2022/lib/header-with-impersonation/header-with-impersonation.component.mjs +38 -0
- package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +190 -0
- package/esm2022/lib/impersonation-banner/impersonation-banner.component.mjs +128 -0
- package/esm2022/lib/impersonation-banner/models/application-access.mjs +7 -0
- package/esm2022/lib/impersonation-banner/models/person-summary.mjs +15 -0
- package/esm2022/lib/models/token-payload.mjs +2 -0
- package/esm2022/lib/multi-select/multi-select.component.mjs +115 -0
- package/esm2022/lib/pipes/hbll-item-type-icon.pipe.mjs +128 -0
- package/esm2022/lib/ss-search-bar/advanced-search/advanced-search.component.mjs +5 -5
- package/esm2022/lib/ss-search-bar/date-range/date-range.component.mjs +3 -3
- package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +3 -3
- package/esm2022/lib/utils.mjs +7 -0
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/byuhbll-components.mjs +1153 -66
- package/fesm2022/byuhbll-components.mjs.map +1 -1
- package/lib/animations/animations.d.ts +1 -0
- package/lib/{hbll-checkbox/hbll-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +2 -2
- package/lib/contact-utils.d.ts +19 -0
- package/lib/copy-tooltip/copy-tooltip.component.d.ts +12 -0
- package/lib/expand-collapse/expand-collapse.component.d.ts +10 -0
- package/lib/hbll-footer/hbll-footer.component.d.ts +28 -0
- package/lib/hbll-header/hbll-header.component.d.ts +23 -28
- package/lib/hbll-header/models/library-hours.d.ts +10 -0
- package/lib/hbll-header/nav-bar/nav-bar.component.d.ts +30 -0
- package/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.d.ts +12 -0
- package/lib/hbll-header/pipes/library-hours.pipe.d.ts +7 -0
- package/lib/header-with-impersonation/header-with-impersonation.component.d.ts +19 -0
- package/lib/impersonate-modal/impersonate-modal.component.d.ts +60 -0
- package/lib/impersonation-banner/impersonation-banner.component.d.ts +31 -0
- package/lib/impersonation-banner/models/application-access.d.ts +15 -0
- package/lib/impersonation-banner/models/person-summary.d.ts +33 -0
- package/lib/models/token-payload.d.ts +3 -0
- package/lib/{hbll-multi-select/hbll-multi-select.component.d.ts → multi-select/multi-select.component.d.ts} +1 -1
- package/lib/pipes/hbll-item-type-icon.pipe.d.ts +17 -0
- package/lib/ss-search-bar/advanced-search/advanced-search.component.d.ts +4 -1
- package/lib/utils.d.ts +5 -0
- package/package.json +4 -1
- package/public-api.d.ts +6 -0
- package/styles/scss/_mixins.scss +2 -2
- package/styles/scss/_vars.scss +7 -0
- package/styles/scss/base.scss +39 -7
- package/styles/scss/cta-btn.scss +2 -2
- package/styles/scss/pill-btn.scss +2 -2
- package/styles/scss/shared.scss +8 -0
- package/styles/scss/spinner.scss +20 -0
- package/esm2022/lib/hbll-checkbox/hbll-checkbox.component.mjs +0 -17
- 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
|