@byuhbll/components 4.0.0-alpha.9 → 4.0.1

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 (52) hide show
  1. package/esm2022/lib/animations/animations.mjs +5 -5
  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 +3 -3
  5. package/esm2022/lib/expand-collapse/expand-collapse.component.mjs +3 -3
  6. package/esm2022/lib/hbll-footer/hbll-footer.component.mjs +98 -0
  7. package/esm2022/lib/hbll-header/hbll-header.component.mjs +30 -25
  8. package/esm2022/lib/hbll-header/nav-bar/nav-bar.component.mjs +252 -218
  9. package/esm2022/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.mjs +3 -3
  10. package/esm2022/lib/header-with-impersonation/header-with-impersonation.component.mjs +39 -0
  11. package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +190 -0
  12. package/esm2022/lib/impersonation-banner/impersonation-banner.component.mjs +149 -0
  13. package/esm2022/lib/impersonation-banner/models/application-access.mjs +7 -0
  14. package/esm2022/lib/impersonation-banner/models/person-summary.mjs +15 -0
  15. package/esm2022/lib/models/token-payload.mjs +2 -0
  16. package/esm2022/lib/multi-select/multi-select.component.mjs +115 -0
  17. package/esm2022/lib/pipes/hbll-item-type-icon.pipe.mjs +128 -0
  18. package/esm2022/lib/ss-search-bar/advanced-search/advanced-search.component.mjs +5 -5
  19. package/esm2022/lib/ss-search-bar/date-range/date-range.component.mjs +3 -3
  20. package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +3 -3
  21. package/esm2022/lib/utils.mjs +2 -3
  22. package/esm2022/public-api.mjs +7 -2
  23. package/fesm2022/byuhbll-components.mjs +809 -457
  24. package/fesm2022/byuhbll-components.mjs.map +1 -1
  25. package/lib/{hbll-checkbox/hbll-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +1 -1
  26. package/lib/contact-utils.d.ts +19 -0
  27. package/lib/hbll-footer/hbll-footer.component.d.ts +30 -0
  28. package/lib/hbll-header/hbll-header.component.d.ts +12 -16
  29. package/lib/hbll-header/nav-bar/nav-bar.component.d.ts +5 -3
  30. package/lib/header-with-impersonation/header-with-impersonation.component.d.ts +20 -0
  31. package/lib/{hbll-header/impersonate-modal → impersonate-modal}/impersonate-modal.component.d.ts +3 -1
  32. package/lib/impersonation-banner/impersonation-banner.component.d.ts +52 -0
  33. package/lib/{hbll-multi-select/hbll-multi-select.component.d.ts → multi-select/multi-select.component.d.ts} +1 -1
  34. package/lib/pipes/hbll-item-type-icon.pipe.d.ts +17 -0
  35. package/lib/ss-search-bar/advanced-search/advanced-search.component.d.ts +4 -1
  36. package/package.json +1 -1
  37. package/public-api.d.ts +6 -1
  38. package/styles/scss/_mixins.scss +1 -1
  39. package/styles/scss/_vars.scss +1 -0
  40. package/styles/scss/base.scss +1 -2
  41. package/styles/scss/shared.scss +8 -0
  42. package/esm2022/lib/hbll-checkbox/hbll-checkbox.component.mjs +0 -15
  43. package/esm2022/lib/hbll-header/impersonate-modal/impersonate-modal.component.mjs +0 -188
  44. package/esm2022/lib/hbll-header/models/application-access.mjs +0 -7
  45. package/esm2022/lib/hbll-header/models/person-summary.mjs +0 -15
  46. package/esm2022/lib/hbll-header/models/token-payload.mjs +0 -2
  47. package/esm2022/lib/hbll-impersonation-banner/hbll-impersonation-banner.component.mjs +0 -129
  48. package/esm2022/lib/hbll-multi-select/hbll-multi-select.component.mjs +0 -115
  49. package/lib/hbll-impersonation-banner/hbll-impersonation-banner.component.d.ts +0 -30
  50. /package/lib/{hbll-header → impersonation-banner}/models/application-access.d.ts +0 -0
  51. /package/lib/{hbll-header → impersonation-banner}/models/person-summary.d.ts +0 -0
  52. /package/lib/{hbll-header/models → models}/token-payload.d.ts +0 -0
@@ -2,5 +2,5 @@ import * as i0 from "@angular/core";
2
2
  export declare class HbllCheckboxComponent {
3
3
  isChecked: import("@angular/core").InputSignal<boolean>;
4
4
  static ɵfac: i0.ɵɵFactoryDeclaration<HbllCheckboxComponent, never>;
5
- static ɵcmp: i0.ɵɵComponentDeclaration<HbllCheckboxComponent, "lib-hbll-checkbox", never, { "isChecked": { "alias": "isChecked"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<HbllCheckboxComponent, "lib-checkbox", never, { "isChecked": { "alias": "isChecked"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6
6
  }
@@ -0,0 +1,19 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { FormBuilder } from '@angular/forms';
3
+ export declare const USER_STATUSES: readonly ["", "Undergraduate", "Graduate", "Faculty", "Staff", "Library Employee", "Other"];
4
+ export type UserStatus = (typeof USER_STATUSES)[number];
5
+ export interface ContactPayload {
6
+ email?: string;
7
+ message: string;
8
+ name?: string;
9
+ status?: UserStatus;
10
+ }
11
+ export declare const createContactForm: (fb: FormBuilder) => import("@angular/forms").FormGroup<{
12
+ name: import("@angular/forms").FormControl<string>;
13
+ email: import("@angular/forms").FormControl<string>;
14
+ message: import("@angular/forms").FormControl<string>;
15
+ status: import("@angular/forms").FormControl<"" | "Other" | "Undergraduate" | "Graduate" | "Faculty" | "Staff" | "Library Employee" | undefined>;
16
+ }>;
17
+ export declare const submitEmail: (payload: ContactPayload, http: HttpClient, apiBaseUrl: string) => import("rxjs").Observable<unknown>;
18
+ export declare const submitFeedback: (payload: ContactPayload, http: HttpClient, apiBaseUrl: string) => import("rxjs").Observable<unknown>;
19
+ export declare const getUserStatusFromRoles: (roles: string[]) => UserStatus;
@@ -0,0 +1,30 @@
1
+ import { ContactPayload } from '../contact-utils';
2
+ import * as i0 from "@angular/core";
3
+ export declare class HbllFooterComponent {
4
+ private readonly fb;
5
+ private readonly http;
6
+ private emailDialog;
7
+ mainsitebaseurl: string;
8
+ libraryapibaseuri: string;
9
+ set emailname(name: string);
10
+ set emailemail(email: string);
11
+ set emailmessage(message: string);
12
+ set emailstatus(status: ContactPayload['status']);
13
+ protected date: Date;
14
+ protected isSubmitted: boolean;
15
+ protected isLoading: boolean;
16
+ protected hasConnectionError: boolean;
17
+ protected isEmailSent: boolean;
18
+ protected emailForm: import("@angular/forms").FormGroup<{
19
+ name: import("@angular/forms").FormControl<string>;
20
+ email: import("@angular/forms").FormControl<string>;
21
+ message: import("@angular/forms").FormControl<string>;
22
+ status: import("@angular/forms").FormControl<"" | "Other" | "Undergraduate" | "Graduate" | "Faculty" | "Staff" | "Library Employee" | undefined>;
23
+ }>;
24
+ protected userStatuses: readonly ["", "Undergraduate", "Graduate", "Faculty", "Staff", "Library Employee", "Other"];
25
+ protected sendEmail: () => void;
26
+ protected handleClose: () => void;
27
+ openEmailForm: (formValues?: typeof this.emailForm.value) => void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<HbllFooterComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<HbllFooterComponent, "lib-hbll-footer", never, { "mainsitebaseurl": { "alias": "mainsitebaseurl"; "required": false; }; "libraryapibaseuri": { "alias": "libraryapibaseuri"; "required": false; }; "emailname": { "alias": "emailname"; "required": false; }; "emailemail": { "alias": "emailemail"; "required": false; }; "emailmessage": { "alias": "emailmessage"; "required": false; }; "emailstatus": { "alias": "emailstatus"; "required": false; }; }, {}, never, never, true, never>;
30
+ }
@@ -1,6 +1,4 @@
1
- import { AfterViewInit, ElementRef, EventEmitter, Signal } from '@angular/core';
2
- import { JwtPayload } from 'jwt-decode';
3
- import { TokenPayload } from './models/token-payload';
1
+ import { AfterViewInit, ElementRef, EventEmitter } from '@angular/core';
4
2
  import { LibraryHours } from './models/library-hours';
5
3
  import * as i0 from "@angular/core";
6
4
  export declare const LIBRARY_HOURS_API_URL = "https://apps.lib.byu.edu/libraryhours/api/hours";
@@ -8,32 +6,30 @@ export declare class HbllHeaderComponent implements AfterViewInit {
8
6
  private readonly r2;
9
7
  private readonly http;
10
8
  private readonly bo;
9
+ private doc;
11
10
  header: ElementRef;
12
- accessTokenPayload: import("@angular/core").InputSignal<TokenPayload>;
13
- oidcBaseUri: import("@angular/core").InputSignal<string>;
14
- oidcDefaultIdp: import("@angular/core").InputSignal<string>;
11
+ name: string;
12
+ mainsitebaseurl: string;
13
+ showImpersonateButton: import("@angular/core").InputSignal<boolean>;
14
+ openImpersonationModal: EventEmitter<void>;
15
15
  login: EventEmitter<void>;
16
16
  logout: EventEmitter<void>;
17
- endImpersonation: EventEmitter<void>;
18
17
  private formatDateForHours;
19
18
  private accountInfoEl;
20
19
  private hoursEl;
21
- protected parsedToken: Signal<JwtPayload & Record<string, any>>;
22
- protected isLoggedIn: Signal<boolean>;
23
- protected isImpersonating: Signal<boolean>;
24
- protected showImpersonateButton: Signal<any>;
25
- protected name: Signal<any>;
26
- protected libraryHours: Signal<LibraryHours | undefined>;
20
+ protected get isLoggedIn(): boolean;
21
+ protected libraryHours: import("@angular/core").Signal<LibraryHours | undefined>;
27
22
  protected hoursExceptions$: import("rxjs").Observable<LibraryHours[]>;
28
23
  protected showAccountDropdown: boolean;
29
24
  protected showLibraryHours: boolean;
30
25
  protected mobileSidebarHeight: number;
31
26
  protected showNavBar: boolean;
32
- protected showImpersonationModal: boolean;
33
- protected isScreenSmall: Signal<boolean | undefined>;
27
+ protected isScreenSmall: import("@angular/core").Signal<boolean | undefined>;
34
28
  ngAfterViewInit(): void;
29
+ protected openSidebarNav: () => void;
30
+ protected closeSidebarNav: () => void;
35
31
  private onResize;
36
32
  private setMobileSidebarHeight;
37
33
  static ɵfac: i0.ɵɵFactoryDeclaration<HbllHeaderComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<HbllHeaderComponent, "lib-hbll-header", never, { "accessTokenPayload": { "alias": "accessTokenPayload"; "required": false; "isSignal": true; }; "oidcBaseUri": { "alias": "oidcBaseUri"; "required": false; "isSignal": true; }; "oidcDefaultIdp": { "alias": "oidcDefaultIdp"; "required": false; "isSignal": true; }; }, { "login": "login"; "logout": "logout"; "endImpersonation": "endImpersonation"; }, never, never, true, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<HbllHeaderComponent, "lib-hbll-header", never, { "name": { "alias": "name"; "required": false; }; "mainsitebaseurl": { "alias": "mainsitebaseurl"; "required": false; }; "showImpersonateButton": { "alias": "showImpersonateButton"; "required": false; "isSignal": true; }; }, { "openImpersonationModal": "openImpersonationModal"; "login": "login"; "logout": "logout"; }, never, never, true, never>;
39
35
  }
@@ -1,3 +1,4 @@
1
+ import { Signal } from '@angular/core';
1
2
  import { NavBarDropdownComponent } from '../nav-bar-dropdown/nav-bar-dropdown.component';
2
3
  import * as i0 from "@angular/core";
3
4
  type NavInfo = {
@@ -17,12 +18,13 @@ type Link = {
17
18
  };
18
19
  export declare class NavBarComponent {
19
20
  private bo;
21
+ mainSiteBaseUrl: import("@angular/core").InputSignal<string>;
20
22
  height: import("@angular/core").InputSignal<number | null>;
21
23
  dropdownComps: NavBarDropdownComponent[];
22
24
  protected handleDropdownOpenEvent: (title: string) => void;
23
- protected isScreenSmall: import("@angular/core").Signal<boolean | undefined>;
24
- protected navInfos: NavInfo[];
25
+ protected isScreenSmall: Signal<boolean | undefined>;
26
+ protected navInfos: Signal<NavInfo[]>;
25
27
  static ɵfac: i0.ɵɵFactoryDeclaration<NavBarComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<NavBarComponent, "lib-nav-bar", never, { "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavBarComponent, "lib-nav-bar", never, { "mainSiteBaseUrl": { "alias": "mainSiteBaseUrl"; "required": true; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
27
29
  }
28
30
  export {};
@@ -0,0 +1,20 @@
1
+ import { EventEmitter, Signal } from '@angular/core';
2
+ import { TokenPayload } from '../models/token-payload';
3
+ import { JwtPayload } from 'jwt-decode';
4
+ import * as i0 from "@angular/core";
5
+ export declare class HeaderWithImpersonationComponent {
6
+ accessTokenPayload: import("@angular/core").InputSignal<TokenPayload>;
7
+ oidcBaseUri: import("@angular/core").InputSignal<string>;
8
+ oidcDefaultIdp: import("@angular/core").InputSignal<string>;
9
+ mainSiteBaseUrl: import("@angular/core").InputSignal<string>;
10
+ login: EventEmitter<void>;
11
+ logout: EventEmitter<void>;
12
+ endImpersonation: EventEmitter<void>;
13
+ protected parsedToken: Signal<(JwtPayload & Record<string, any>) | null>;
14
+ protected name: Signal<any>;
15
+ protected showImpersonateButton: Signal<boolean>;
16
+ protected showImpersonationModal: boolean;
17
+ private isImpersonating;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<HeaderWithImpersonationComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<HeaderWithImpersonationComponent, "lib-header-with-impersonation", never, { "accessTokenPayload": { "alias": "accessTokenPayload"; "required": true; "isSignal": true; }; "oidcBaseUri": { "alias": "oidcBaseUri"; "required": false; "isSignal": true; }; "oidcDefaultIdp": { "alias": "oidcDefaultIdp"; "required": false; "isSignal": true; }; "mainSiteBaseUrl": { "alias": "mainSiteBaseUrl"; "required": false; "isSignal": true; }; }, { "login": "login"; "logout": "logout"; "endImpersonation": "endImpersonation"; }, never, never, true, never>;
20
+ }
@@ -2,6 +2,8 @@ import { EventEmitter, OnDestroy, PipeTransform } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import { TokenPayload } from '../models/token-payload';
4
4
  import * as i0 from "@angular/core";
5
+ export declare const defaultOidcBaseUri = "https://keycloak.lib.byu.edu/";
6
+ export declare const defaultOidcDefaultIdp = "byu-realm";
5
7
  export declare class ImpersonateUserPipe implements PipeTransform {
6
8
  transform(user: ImpersonateSearchResult): string;
7
9
  static ɵfac: i0.ɵɵFactoryDeclaration<ImpersonateUserPipe, never>;
@@ -54,5 +56,5 @@ export declare class ImpersonateModalComponent implements OnDestroy {
54
56
  private searchUsers;
55
57
  private replaceUrl;
56
58
  static ɵfac: i0.ɵɵFactoryDeclaration<ImpersonateModalComponent, never>;
57
- static ɵcmp: i0.ɵɵComponentDeclaration<ImpersonateModalComponent, "lib-impersonate-modal", never, { "showModal": { "alias": "showModal"; "required": false; }; "oidcBaseUri": { "alias": "oidcBaseUri"; "required": true; "isSignal": true; }; "oidcDefaultIdp": { "alias": "oidcDefaultIdp"; "required": true; "isSignal": true; }; "accessTokenPayload": { "alias": "accessTokenPayload"; "required": true; "isSignal": true; }; }, { "dismiss": "dismiss"; "init": "init"; }, never, never, true, never>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImpersonateModalComponent, "lib-impersonate-modal", never, { "showModal": { "alias": "showModal"; "required": false; }; "oidcBaseUri": { "alias": "oidcBaseUri"; "required": false; "isSignal": true; }; "oidcDefaultIdp": { "alias": "oidcDefaultIdp"; "required": false; "isSignal": true; }; "accessTokenPayload": { "alias": "accessTokenPayload"; "required": true; "isSignal": true; }; }, { "dismiss": "dismiss"; "init": "init"; }, never, never, true, never>;
58
60
  }
@@ -0,0 +1,52 @@
1
+ import { EventEmitter, Signal } from '@angular/core';
2
+ import { type ApplicationAccess } from './models/application-access';
3
+ import { TokenPayload } from '../models/token-payload';
4
+ import { JwtPayload } from 'jwt-decode';
5
+ import { PersonSummary } from './models/person-summary';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * @todo: Refactor: my recommendation would be to allow a user to be passed into this component via an input instead of the users coming from an API call based on the JWT passed in. This might look something like:
9
+ * ```
10
+ * @Input() user: {
11
+ * primary_position_type_display?: string
12
+ * undergrad_graduate_status?: string
13
+ * restricted?: boolean
14
+ * is_retired?: boolean
15
+ * is_employee?: boolean
16
+ * primary_position_type?: string
17
+ * }
18
+ * ```
19
+ * Accepting all properties that are used in this component without needing to bring in the user type explicitly. Or the properties on this user object could be made even more general as to not be tied at all to any specific type.
20
+ *
21
+ * Something similar could be done with `accountStatuses`. I'd recommend the consuming application prepare arrays of strings to be passed into inputs of `accountsOk`, `accountsBlocked`, and `accountsNone`, that are then passed into and displayed in the template.
22
+ *
23
+ * The idea behind these revisions is that there is less business logic baked into this component, as it's role is just one of presentation. It will also avoid multiple API calls for the same data in our big Angular apps.
24
+ *
25
+ * Best of luck,
26
+ * Paul
27
+ */
28
+ export declare class ImpersonationBannerComponent {
29
+ private http;
30
+ accessTokenPayload: import("@angular/core").InputSignal<TokenPayload>;
31
+ personBaseUri: import("@angular/core").InputSignal<string>;
32
+ libraryApiBaseUri: import("@angular/core").InputSignal<string>;
33
+ endImpersonation: EventEmitter<void>;
34
+ protected parsedToken: Signal<JwtPayload & Record<string, any>>;
35
+ protected isImpersonating: Signal<boolean>;
36
+ protected libraryId: Signal<any>;
37
+ protected user: Signal<PersonSummary | null | undefined>;
38
+ protected userFullName: Signal<string>;
39
+ protected isRestricted: Signal<boolean | undefined>;
40
+ protected userInfoTabs: Signal<Map<string, any>>;
41
+ protected userPhotoUrl: Signal<string>;
42
+ protected activityStatus: Signal<"retired" | "active" | "inactive" | null>;
43
+ protected employeeStatusDescription: Signal<string | null>;
44
+ protected independentStudyStatus: Signal<boolean | null | undefined>;
45
+ protected accountStatuses: Signal<{
46
+ ok: ApplicationAccess[];
47
+ blocked: ApplicationAccess[];
48
+ none: ApplicationAccess[];
49
+ } | null | undefined>;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImpersonationBannerComponent, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImpersonationBannerComponent, "lib-impersonation-banner", never, { "accessTokenPayload": { "alias": "accessTokenPayload"; "required": true; "isSignal": true; }; "personBaseUri": { "alias": "personBaseUri"; "required": false; "isSignal": true; }; "libraryApiBaseUri": { "alias": "libraryApiBaseUri"; "required": false; "isSignal": true; }; }, { "endImpersonation": "endImpersonation"; }, never, never, true, never>;
52
+ }
@@ -48,5 +48,5 @@ export declare class HbllMultiSelectComponent {
48
48
  */
49
49
  private addOptionToSelectedOptions;
50
50
  static ɵfac: i0.ɵɵFactoryDeclaration<HbllMultiSelectComponent, never>;
51
- static ɵcmp: i0.ɵɵComponentDeclaration<HbllMultiSelectComponent, "lib-hbll-multi-select", never, { "allOptions": { "alias": "allOptions"; "required": false; }; "label": { "alias": "label"; "required": false; }; "selectedKeys": { "alias": "selectedKeys"; "required": false; }; }, { "selectedKeysChange": "selectedKeysChange"; }, never, never, true, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<HbllMultiSelectComponent, "lib-multi-select", never, { "allOptions": { "alias": "allOptions"; "required": false; }; "label": { "alias": "label"; "required": false; }; "selectedKeys": { "alias": "selectedKeys"; "required": false; }; }, { "selectedKeysChange": "selectedKeysChange"; }, never, never, true, never>;
52
52
  }
@@ -0,0 +1,17 @@
1
+ import { type PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Converts an item type to an icon type to be used with Google Material Icons
5
+ *
6
+ * Intended to be used with an imported font, such as: `<link
7
+ rel="stylesheet"
8
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,1,0"
9
+ />`
10
+ *
11
+ * 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
12
+ */
13
+ export declare class HbllItemTypeIconPipe implements PipeTransform {
14
+ transform(itemType: string): string;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<HbllItemTypeIconPipe, never>;
16
+ static ɵpipe: i0.ɵɵPipeDeclaration<HbllItemTypeIconPipe, "libByuItemTypeIcon", true>;
17
+ }
@@ -105,7 +105,10 @@ export declare class AdvancedSearchComponent implements OnDestroy {
105
105
  readonly 'law -- iclrs': "Law & Religion Studies";
106
106
  readonly 'law -- main': "Main Collection";
107
107
  readonly 'law -- media': "Media";
108
- readonly 'law -- reserve': "Reserve";
108
+ readonly 'law -- reserve': "Reserve"; /**
109
+ * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.
110
+ * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.
111
+ */
109
112
  readonly 'law -- self_help': "Self Help";
110
113
  readonly 'law -- study_guides': "Study Guides";
111
114
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@byuhbll/components",
3
- "version": "4.0.0-alpha.9",
3
+ "version": "4.0.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.0",
6
6
  "@angular/core": "^18.0.0"
package/public-api.d.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  export * from './lib/hbll-header/hbll-header.component';
2
- export * from './lib/hbll-impersonation-banner/hbll-impersonation-banner.component';
2
+ export * from './lib/pipes/hbll-item-type-icon.pipe';
3
+ export * from './lib/hbll-footer/hbll-footer.component';
4
+ export * from './lib/header-with-impersonation/header-with-impersonation.component';
5
+ export * from './lib/impersonate-modal/impersonate-modal.component';
6
+ export * from './lib/impersonation-banner/impersonation-banner.component';
3
7
  export * from './lib/ss-search-bar/ss-search-bar.component';
4
8
  export * from './lib/ss-search-bar/models/advanced-search.model';
5
9
  export * from './lib/ss-search-bar/models/search-scope.model';
6
10
  export * from './lib/ss-search-bar/models/search-config.model';
11
+ export { getUserStatusFromRoles } from './lib/contact-utils';
7
12
  export { ADVANCED_SEARCH_QUALIFIER_MAP, ADVANCED_SEARCH_FIELD_MAP, ADVANCED_SEARCH_OPTIONS, } from './lib/ss-search-bar/constants';
@@ -9,7 +9,7 @@
9
9
  font-size: 1em;
10
10
  background-color: white;
11
11
  &:focus {
12
- border-color: vars.$primary-blue;
12
+ outline-color: vars.$primary-blue;
13
13
  }
14
14
  }
15
15
 
@@ -1,5 +1,6 @@
1
1
  $navy-blue: #002e5d;
2
2
  $royal-blue: #0047ba;
3
+ $royal-blue--hover: #1967e5;
3
4
 
4
5
  $primary-blue: #3a6093;
5
6
 
@@ -137,7 +137,6 @@ th,
137
137
  td,
138
138
  article,
139
139
  aside,
140
- dialog,
141
140
  figure,
142
141
  footer,
143
142
  header,
@@ -157,7 +156,6 @@ aside,
157
156
  details,
158
157
  figcaption,
159
158
  figure,
160
- dialog,
161
159
  footer,
162
160
  header,
163
161
  hgroup,
@@ -177,6 +175,7 @@ body {
177
175
  Helvetica,
178
176
  Arial,
179
177
  sans-serif;
178
+ color: #404040;
180
179
  }
181
180
 
182
181
  html {
@@ -0,0 +1,8 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ text-decoration: none;
4
+ font-size: 1em;
5
+ &:not(.material-symbols-outlined) {
6
+ font-family: inherit;
7
+ }
8
+ }
@@ -1,15 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, input } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class HbllCheckboxComponent {
5
- constructor() {
6
- this.isChecked = input(false);
7
- }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HbllCheckboxComponent, isStandalone: true, selector: "lib-hbll-checkbox", inputs: { isChecked: { classPropertyName: "isChecked", publicName: "isChecked", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span class=\"components-checkbox-container\" [class.components-checked]=\"isChecked()\">\n @if (isChecked()) {\n <span class=\"material-symbols-outlined components-icon\"> check </span>\n }\n</span>\n", styles: [".components-checkbox-container{transition:.15s;height:1.13em;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;border-radius:4px;border:solid 1px #707070;color:#fff;box-sizing:border-box;position:relative}.components-checkbox-container.components-checked{border-color:#3a6093;background-color:#3a6093}.components-checkbox-container.components-checked .components-icon{position:absolute;font-size:1.1em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
10
- }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllCheckboxComponent, decorators: [{
12
- type: Component,
13
- args: [{ selector: 'lib-hbll-checkbox', standalone: true, imports: [CommonModule], template: "<span class=\"components-checkbox-container\" [class.components-checked]=\"isChecked()\">\n @if (isChecked()) {\n <span class=\"material-symbols-outlined components-icon\"> check </span>\n }\n</span>\n", styles: [".components-checkbox-container{transition:.15s;height:1.13em;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;border-radius:4px;border:solid 1px #707070;color:#fff;box-sizing:border-box;position:relative}.components-checkbox-container.components-checked{border-color:#3a6093;background-color:#3a6093}.components-checkbox-container.components-checked .components-icon{position:absolute;font-size:1.1em}\n"] }]
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1jaGVja2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGJsbC1jaGVja2JveC9oYmxsLWNoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWNoZWNrYm94L2hibGwtY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVNqRCxNQUFNLE9BQU8scUJBQXFCO0lBUGxDO1FBUUksY0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1Qjs4R0FGWSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw2TkNWbEMsd05BS0EsbWVER2MsWUFBWTs7MkZBRWIscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLG1CQUFtQixjQUdqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1oYmxsLWNoZWNrYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGJsbC1jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaGJsbC1jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEhibGxDaGVja2JveENvbXBvbmVudCB7XG4gICAgaXNDaGVja2VkID0gaW5wdXQoZmFsc2UpO1xufVxuIiwiPHNwYW4gY2xhc3M9XCJjb21wb25lbnRzLWNoZWNrYm94LWNvbnRhaW5lclwiIFtjbGFzcy5jb21wb25lbnRzLWNoZWNrZWRdPVwiaXNDaGVja2VkKClcIj5cbiAgICBAaWYgKGlzQ2hlY2tlZCgpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjb21wb25lbnRzLWljb25cIj4gY2hlY2sgPC9zcGFuPlxuICAgIH1cbjwvc3Bhbj5cbiJdfQ==