@byuhbll/components 6.2.0 → 7.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.
package/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as rxjs from 'rxjs';
2
2
  import { Subject } from 'rxjs';
3
3
  import * as i0 from '@angular/core';
4
- import { AfterViewInit, ElementRef, EventEmitter, PipeTransform, OnInit, OnDestroy, Signal, OnChanges, SimpleChanges, ApplicationRef, EnvironmentInjector, AfterContentInit, QueryList } from '@angular/core';
4
+ import { AfterViewInit, ElementRef, EventEmitter, PipeTransform, OnInit, OnDestroy, Signal, AfterViewChecked, OnChanges, SimpleChanges, AfterContentInit, QueryList } from '@angular/core';
5
5
  import * as _angular_forms from '@angular/forms';
6
+ import { ControlValueAccessor } from '@angular/forms';
6
7
  import { JwtPayload } from 'jwt-decode';
7
8
 
8
9
  interface LibraryHours {
@@ -45,8 +46,7 @@ declare class HbllHeaderComponent implements AfterViewInit {
45
46
  ngAfterViewInit(): void;
46
47
  protected openSidebarNav: () => void;
47
48
  protected closeSidebarNav: () => void;
48
- private onResize;
49
- private setMobileSidebarHeight;
49
+ setMobileSidebarHeight(): void;
50
50
  focusMainContent(): void;
51
51
  static ɵfac: i0.ɵɵFactoryDeclaration<HbllHeaderComponent, never>;
52
52
  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>;
@@ -485,7 +485,7 @@ interface Date$1 {
485
485
  to: string;
486
486
  }
487
487
 
488
- declare class SsSearchBarComponent {
488
+ declare class SsSearchBarComponent implements AfterViewChecked {
489
489
  readonly searchText: i0.ModelSignal<string>;
490
490
  private _config;
491
491
  set config(config: string);
@@ -500,13 +500,16 @@ declare class SsSearchBarComponent {
500
500
  tabChange: EventEmitter<SearchConfig>;
501
501
  suggest: EventEmitter<SearchConfig>;
502
502
  private barWrapperRef;
503
+ advSearchCloseBtn?: ElementRef<HTMLButtonElement>;
503
504
  protected heightOfContainer: number;
505
+ private shouldFocusAdvClose;
504
506
  protected emitClearSimpleSearch: () => void;
505
507
  protected emitSimpleSearch: (updatedProps: Partial<SearchConfig>) => void;
506
508
  protected emitAdvancedSearchClosed: () => void;
507
509
  protected emitAdvancedSearch: (config: SearchConfig) => void;
508
510
  protected emitAdvancedSearchOpen: () => void;
509
511
  protected emitTabChange: (newScope: SearchScope) => void;
512
+ ngAfterViewChecked(): void;
510
513
  static ɵfac: i0.ɵɵFactoryDeclaration<SsSearchBarComponent, never>;
511
514
  static ɵcmp: i0.ɵɵComponentDeclaration<SsSearchBarComponent, "lib-ss-search-bar", never, { "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": true; }; "supportedSuggestionScopes": { "alias": "supportedSuggestionScopes"; "required": false; }; "suggestions": { "alias": "suggestions"; "required": false; }; }, { "searchText": "searchTextChange"; "simpleSearch": "simpleSearch"; "clearSimpleSearch": "clearSimpleSearch"; "advancedSearch": "advancedSearch"; "advancedSearchClosed": "advancedSearchClosed"; "advancedSearchOpen": "advancedSearchOpen"; "tabChange": "tabChange"; "suggest": "suggest"; }, never, never, true, never>;
512
515
  }
@@ -626,7 +629,6 @@ declare class SnackbarComponent implements OnInit, OnChanges, OnDestroy {
626
629
  declare class SnackbarService {
627
630
  private appRef;
628
631
  private env;
629
- constructor(appRef: ApplicationRef, env: EnvironmentInjector);
630
632
  /**
631
633
  * This open method is what consuming code will use to create a snackbar
632
634
  * @param snackbarOptions interface
@@ -650,6 +652,7 @@ interface ButtonInputs {
650
652
  disabled?: boolean;
651
653
  isThin?: boolean;
652
654
  ariaLabel?: string;
655
+ pill?: boolean;
653
656
  }
654
657
  /**
655
658
  * A flexible, reusable button component that supports multiple button types
@@ -697,13 +700,19 @@ declare class ButtonComponent {
697
700
  disabled: boolean;
698
701
  isThin: boolean;
699
702
  ariaLabel?: string;
703
+ minWidth?: string;
704
+ pill?: boolean;
705
+ color?: string;
700
706
  buttonClick: EventEmitter<void>;
707
+ private readonly namedColors;
708
+ get computedBg(): string | null;
709
+ get computedBgHover(): string | null;
701
710
  /**
702
711
  * Handles button click events and emits the buttonClick event if the button is not disabled.
703
712
  */
704
713
  onButtonClick(): void;
705
714
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
706
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "lib-button", never, { "buttonType": { "alias": "buttonType"; "required": false; }; "title": { "alias": "title"; "required": false; }; "iconBefore": { "alias": "iconBefore"; "required": false; }; "iconAfter": { "alias": "iconAfter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isThin": { "alias": "isThin"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "buttonClick": "buttonClick"; }, never, never, true, never>;
715
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "lib-button", never, { "buttonType": { "alias": "buttonType"; "required": false; }; "title": { "alias": "title"; "required": false; }; "iconBefore": { "alias": "iconBefore"; "required": false; }; "iconAfter": { "alias": "iconAfter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isThin": { "alias": "isThin"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "pill": { "alias": "pill"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, { "buttonClick": "buttonClick"; }, never, never, true, never>;
707
716
  }
708
717
 
709
718
  declare class ButtonGroupItemComponent {
@@ -767,5 +776,592 @@ declare class ButtonGroupComponent implements AfterContentInit, OnDestroy {
767
776
  static ɵcmp: i0.ɵɵComponentDeclaration<ButtonGroupComponent, "lib-button-group", never, { "initialActiveId": { "alias": "initialActiveId"; "required": false; }; }, { "activeButtonChange": "activeButtonChange"; }, ["buttonItems"], ["*"], true, never>;
768
777
  }
769
778
 
770
- export { ADVANCED_SEARCH_FIELD_MAP, ADVANCED_SEARCH_OPTIONS, ADVANCED_SEARCH_QUALIFIER_MAP, ButtonComponent, ButtonGroupComponent, ButtonGroupItemComponent, HbllFooterComponent, HbllHeaderComponent, HbllItemTypeIconPipe, HeaderWithImpersonationComponent, ImpersonateModalComponent, ImpersonateUserPipe, ImpersonationBannerComponent, LIBRARY_HOURS_API_URL, SnackbarComponent, SnackbarService, SsSearchBarComponent, StatusButtonComponent, defaultOidcBaseUri, defaultOidcDefaultIdp, getUserStatusFromRoles, isAdvancedSearchExternalFieldOption, isAdvancedSearchFieldOption, isAdvancedSearchLocalFieldOption, isSearchScope };
771
- export type { AdvancedSearchBooleanOption, AdvancedSearchExternalFieldOption, AdvancedSearchFieldOption, AdvancedSearchLanguageOption, AdvancedSearchLocalFieldOption, AdvancedSearchQualifier, AdvancedSearchQualifierOption, AdvancedSearchQueryRow, AdvancedSearchResultsPerPageOption, ButtonInputs, ButtonType, ImpersonateSearchResult, SearchConfig, SearchScope, SnackbarInputs, SnackbarPurpose, Status, StatusButtonInputs };
779
+ interface CheckboxInputs {
780
+ isChecked: boolean;
781
+ isIndeterminate?: boolean;
782
+ isSmall?: boolean;
783
+ disabled?: boolean;
784
+ isError?: boolean;
785
+ }
786
+ /**
787
+ * A flexible, reusable checkbox component that supports multiple states (error, disabled, indeterminate, default, and checked)
788
+ *
789
+ * @example
790
+ * ```html
791
+ * <!-- Default checkbox with label (toggleable) -->
792
+ * <lib-label text="Normal Checkbox 1" [for]="'checkbox1'"></lib-label>
793
+ * <lib-checkbox
794
+ * inputId="checkbox1"
795
+ * [isChecked]="normalInfo()"
796
+ * (checkedChange)="normalInfo.set($event)"
797
+ * ></lib-checkbox>
798
+ *
799
+ * <!-- Disabled checkbox checked -->
800
+ * <lib-label text="Disabled Checked" [for]="'disabled-checkbox'"></lib-label>
801
+ * <lib-checkbox
802
+ * inputId="disabled-checkbox"
803
+ * [isChecked]="true"
804
+ * [disabled]="true"
805
+ * ></lib-checkbox>
806
+ *
807
+ * <!-- Small checkbox toggleable -->
808
+ * <lib-label text="Small Checkbox 1" [for]="'small-checkbox'"></lib-label>
809
+ * <lib-checkbox
810
+ * inputId="small-checkbox"
811
+ * [isChecked]="smallInfo()"
812
+ * (checkedChange)="smallInfo.set($event)"
813
+ * [isSmall]="true"
814
+ * ></lib-checkbox>
815
+ *
816
+ * <!-- Error checkbox toggleable -->
817
+ * <lib-label text="Error Checkbox 1" [for]="'error-checkbox'"></lib-label>
818
+ * <lib-checkbox
819
+ * inputId="error-checkbox"
820
+ * [isChecked]="errorInfo()"
821
+ * (checkedChange)="errorInfo.set($event)"
822
+ * [isError]="true"
823
+ * ></lib-checkbox>
824
+ *
825
+ * <!-- Indeterminate parent with children example -->
826
+ * <div style="display: flex; flex-direction: column; gap: 8px;">
827
+ * <!-- Parent -->
828
+ * <div style="display: flex; align-items: center; gap: 8px">
829
+ * <lib-label text="Select All" [for]="'parent-checkbox'"></lib-label>
830
+ * <lib-checkbox
831
+ * inputId="parent-checkbox"
832
+ * [isChecked]="parentChecked()"
833
+ * [isIndeterminate]="parentIndeterminate()"
834
+ * (checkedChange)="toggleParent($event)"
835
+ * ></lib-checkbox>
836
+ * </div>
837
+ * <!-- Children -->
838
+ * <div style="margin-left: 24px;">
839
+ * <lib-label text="Option 1" [for]="'child-1'"></lib-label>
840
+ * <lib-checkbox
841
+ * inputId="child-1"
842
+ * [isChecked]="child1()"
843
+ * (checkedChange)="child1.set($event)"
844
+ * ></lib-checkbox>
845
+ * </div>
846
+ * </div>
847
+ * ```
848
+ */
849
+ declare class CheckboxComponent {
850
+ isChecked: boolean;
851
+ isIndeterminate?: boolean;
852
+ isSmall?: boolean;
853
+ disabled?: boolean;
854
+ isError?: boolean;
855
+ inputId: string;
856
+ checkedChange: EventEmitter<boolean>;
857
+ onCheckBoxChange(event: Event): void;
858
+ static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
859
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "lib-checkbox", never, { "isChecked": { "alias": "isChecked"; "required": false; }; "isIndeterminate": { "alias": "isIndeterminate"; "required": false; }; "isSmall": { "alias": "isSmall"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isError": { "alias": "isError"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
860
+ }
861
+
862
+ declare class TabItemComponent {
863
+ id: string;
864
+ title?: string;
865
+ icon?: string;
866
+ ariaLabel?: string;
867
+ disabled: boolean;
868
+ routerLink?: string;
869
+ itemClick: EventEmitter<string>;
870
+ isActive: boolean;
871
+ /**
872
+ * Handles the tab item click event and emits the tab's ID to the parent component.
873
+ */
874
+ onClick(): void;
875
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabItemComponent, never>;
876
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabItemComponent, "lib-tab-item", never, { "id": { "alias": "id"; "required": true; }; "title": { "alias": "title"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "routerLink": { "alias": "routerLink"; "required": false; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
877
+ }
878
+
879
+ declare class TabBarComponent implements AfterContentInit, OnDestroy {
880
+ initialActiveId?: string;
881
+ activeTabChange: EventEmitter<string>;
882
+ tabItems: QueryList<TabItemComponent>;
883
+ private elementRef;
884
+ protected activeTabId: string;
885
+ private subscriptions;
886
+ /**
887
+ * Angular lifecycle hook called after content projection is initialized.
888
+ * Sets up the initial active tab and subscribes to tab click events from all tab items.
889
+ */
890
+ ngAfterContentInit(): void;
891
+ /**
892
+ * Initializes custom element children when used as web components.
893
+ */
894
+ private initializeCustomElements;
895
+ /**
896
+ * Sets the active state on a custom element by toggling the active class on its button.
897
+ */
898
+ private setActiveState;
899
+ /**
900
+ * Handles click events for custom element children.
901
+ */
902
+ private handleCustomElementClick;
903
+ /**
904
+ * Angular lifecycle hook called when the component is destroyed.
905
+ * Cleans up all subscriptions to prevent memory leaks.
906
+ */
907
+ ngOnDestroy(): void;
908
+ /**
909
+ * Initializes the active tab state based on the initialActiveId input.
910
+ * Sets the active state on the matching tab item if an initial ID is provided.
911
+ */
912
+ private initializeActiveTab;
913
+ /**
914
+ * Handles tab click events from child tab items.
915
+ * Updates the active tab state and emits the activeTabChange event.
916
+ * @param tabId - The ID of the clicked tab
917
+ */
918
+ onTabClick(tabId: string): void;
919
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabBarComponent, never>;
920
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabBarComponent, "lib-tab-bar", never, { "initialActiveId": { "alias": "initialActiveId"; "required": false; }; }, { "activeTabChange": "activeTabChange"; }, ["tabItems"], ["*"], true, never>;
921
+ }
922
+
923
+ type FieldState = 'default' | 'hover' | 'focused' | 'error' | 'success' | 'disabled';
924
+ type FieldStatus = 'filled' | 'not-filled';
925
+ type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url' | 'search';
926
+ interface FieldInputs {
927
+ inputType?: InputType;
928
+ inputId?: string;
929
+ placeholder: string;
930
+ state?: FieldState;
931
+ status?: FieldStatus;
932
+ iconBefore?: string;
933
+ iconAfter?: string;
934
+ disabled?: boolean;
935
+ ariaLabel?: string;
936
+ value?: string;
937
+ isFullText?: boolean;
938
+ rows?: number;
939
+ minWidth?: string;
940
+ maxWidth?: string;
941
+ minHeight?: string;
942
+ maxHeight?: string;
943
+ }
944
+ /**
945
+ * A flexible, reusable field (input) component that supports multiple states
946
+ * and optional icons on left and right.
947
+ *
948
+ * @example
949
+ * ```html
950
+ * <!-- Basic text input -->
951
+ * <lib-field
952
+ * placeholder="Enter your name"
953
+ * (valueChange)="onInputChange($event)">
954
+ * </lib-field>
955
+ *
956
+ * <!-- Password input with icons -->
957
+ * <lib-field
958
+ * [inputType]="'password'"
959
+ * placeholder="Enter password"
960
+ * iconBefore="lock"
961
+ * iconAfter="visibility"
962
+ * (iconAfterClick)="togglePasswordVisibility()">
963
+ * </lib-field>
964
+ *
965
+ * <!-- Error state with icon -->
966
+ * <lib-field
967
+ * placeholder="Email"
968
+ * state="error"
969
+ * iconBefore="person"
970
+ * (valueChange)="onEmailChange($event)">
971
+ * </lib-field>
972
+ *
973
+ * <!-- Full text (textarea) field -->
974
+ * <lib-field
975
+ * [isFullText]="true"
976
+ * [rows]="4"
977
+ * placeholder="Enter your message"
978
+ * (valueChange)="onMessageChange($event)">
979
+ * </lib-field>
980
+ *
981
+ * <!-- Field with custom dimensions -->
982
+ * <lib-field
983
+ * placeholder="Custom sized field"
984
+ * minWidth="200px"
985
+ * maxWidth="400px"
986
+ * minHeight="40px"
987
+ * maxHeight="60px">
988
+ * </lib-field>
989
+ * ```
990
+ */
991
+ declare class FieldComponent implements ControlValueAccessor {
992
+ inputType: InputType;
993
+ inputId?: string;
994
+ placeholder: string;
995
+ state: FieldState;
996
+ status: FieldStatus;
997
+ iconBefore?: string;
998
+ iconAfter?: string;
999
+ iconBeforeClickable: boolean;
1000
+ iconAfterClickable: boolean;
1001
+ iconBeforeAction?: () => void;
1002
+ iconAfterAction?: () => void;
1003
+ disabled: boolean;
1004
+ ariaLabel?: string;
1005
+ value: string;
1006
+ isFullText: boolean;
1007
+ rows: number;
1008
+ minWidth?: string;
1009
+ maxWidth?: string;
1010
+ minHeight?: string;
1011
+ maxHeight?: string;
1012
+ valueChange: EventEmitter<string>;
1013
+ iconBeforeClick: EventEmitter<void>;
1014
+ iconAfterClick: EventEmitter<void>;
1015
+ fieldFocus: EventEmitter<void>;
1016
+ fieldBlur: EventEmitter<void>;
1017
+ private onChange;
1018
+ private onTouched;
1019
+ isFocused: boolean;
1020
+ private isKeyboardFocus;
1021
+ onDocumentKeydown(event: KeyboardEvent): void;
1022
+ onDocumentMousedown(): void;
1023
+ onDocumentPointerdown(): void;
1024
+ /**
1025
+ * Handles input value changes and updates status based on content.
1026
+ */
1027
+ onValueChange(event: Event): void;
1028
+ /**
1029
+ * Handles focus event and updates state.
1030
+ */
1031
+ onFocus(): void;
1032
+ /**
1033
+ * Handles blur event and updates state.
1034
+ */
1035
+ onBlur(): void;
1036
+ /**
1037
+ * Handles left icon click.
1038
+ */
1039
+ onIconBeforeClick(): void;
1040
+ /**
1041
+ * Handles right icon click.
1042
+ */
1043
+ onIconAfterClick(): void;
1044
+ writeValue(value: string): void;
1045
+ registerOnChange(fn: (value: string) => void): void;
1046
+ registerOnTouched(fn: () => void): void;
1047
+ setDisabledState(isDisabled: boolean): void;
1048
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldComponent, never>;
1049
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldComponent, "lib-field", never, { "inputType": { "alias": "inputType"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "state": { "alias": "state"; "required": false; }; "status": { "alias": "status"; "required": false; }; "iconBefore": { "alias": "iconBefore"; "required": false; }; "iconAfter": { "alias": "iconAfter"; "required": false; }; "iconBeforeClickable": { "alias": "iconBeforeClickable"; "required": false; }; "iconAfterClickable": { "alias": "iconAfterClickable"; "required": false; }; "iconBeforeAction": { "alias": "iconBeforeAction"; "required": false; }; "iconAfterAction": { "alias": "iconAfterAction"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "value": { "alias": "value"; "required": false; }; "isFullText": { "alias": "isFullText"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "minHeight": { "alias": "minHeight"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; }, { "valueChange": "valueChange"; "iconBeforeClick": "iconBeforeClick"; "iconAfterClick": "iconAfterClick"; "fieldFocus": "fieldFocus"; "fieldBlur": "fieldBlur"; }, never, never, true, never>;
1050
+ }
1051
+
1052
+ type LabelType = 'none' | 'required' | 'optional';
1053
+ type LabelPosition = 'above' | 'left';
1054
+ interface LabelInputs {
1055
+ text: string;
1056
+ type?: LabelType;
1057
+ showHelpIcon?: boolean;
1058
+ ariaLabel?: string;
1059
+ position?: LabelPosition;
1060
+ isRequired?: boolean;
1061
+ for?: string;
1062
+ subtext?: string;
1063
+ }
1064
+ /**
1065
+ * A flexible label component that supports different label types
1066
+ * with optional help icon and required/optional indicators.
1067
+ *
1068
+ * @example
1069
+ * ```html
1070
+ * <!-- Basic label -->
1071
+ * <lib-label
1072
+ * text="Email"
1073
+ * type="none">
1074
+ * </lib-label>
1075
+ *
1076
+ * <!-- Required label with help icon -->
1077
+ * <lib-label
1078
+ * text="Password"
1079
+ * type="required"
1080
+ * [showHelpIcon]="true"
1081
+ * (helpIconClick)="showHelp()">
1082
+ * </lib-label>
1083
+ *
1084
+ * <!-- Optional label -->
1085
+ * <lib-label
1086
+ * text="Phone"
1087
+ * type="optional"
1088
+ * [showHelpIcon]="true">
1089
+ * </lib-label>
1090
+ *
1091
+ * <!-- Label positioned to the left of field -->
1092
+ * <lib-label
1093
+ * text="Email"
1094
+ * position="left">
1095
+ * </lib-label>
1096
+ * ```
1097
+ */
1098
+ declare class LabelComponent {
1099
+ text: string;
1100
+ type: LabelType;
1101
+ showHelpIcon: boolean;
1102
+ ariaLabel?: string;
1103
+ position: LabelPosition;
1104
+ isRequired: boolean;
1105
+ for?: string;
1106
+ subtext?: string;
1107
+ helpIconClick: EventEmitter<void>;
1108
+ /**
1109
+ * Handles help icon click event.
1110
+ */
1111
+ onHelpIconClick(): void;
1112
+ static ɵfac: i0.ɵɵFactoryDeclaration<LabelComponent, never>;
1113
+ static ɵcmp: i0.ɵɵComponentDeclaration<LabelComponent, "lib-label", never, { "text": { "alias": "text"; "required": false; }; "type": { "alias": "type"; "required": false; }; "showHelpIcon": { "alias": "showHelpIcon"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "position": { "alias": "position"; "required": false; }; "isRequired": { "alias": "isRequired"; "required": false; }; "for": { "alias": "for"; "required": false; }; "subtext": { "alias": "subtext"; "required": false; }; }, { "helpIconClick": "helpIconClick"; }, never, never, true, never>;
1114
+ }
1115
+
1116
+ type LinkType = 'basic' | 'inline';
1117
+ type LinkState = 'default' | 'hover' | 'focused' | 'disabled';
1118
+ type LinkIconPosition = 'left' | 'right';
1119
+ interface LinkInputs {
1120
+ text: string;
1121
+ textHtml?: string;
1122
+ imageSrc?: string;
1123
+ imageAlt?: string;
1124
+ imageTitle?: string;
1125
+ imageClass?: string;
1126
+ href?: string;
1127
+ target?: string;
1128
+ rel?: string;
1129
+ type?: LinkType;
1130
+ state?: LinkState;
1131
+ disabled?: boolean;
1132
+ leftIcon?: string;
1133
+ rightIcon?: string;
1134
+ ariaLabel?: string;
1135
+ }
1136
+ /**
1137
+ * A link component that supports basic and inline variants
1138
+ * with optional left and right icons.
1139
+ *
1140
+ * @example
1141
+ * ```html
1142
+ * <lib-link text="Link item" href="/details"></lib-link>
1143
+ *
1144
+ * <lib-link
1145
+ * text="Inline link"
1146
+ * type="inline"
1147
+ * href="/details">
1148
+ * </lib-link>
1149
+ *
1150
+ * <lib-link
1151
+ * text="Disabled link"
1152
+ * [disabled]="true">
1153
+ * </lib-link>
1154
+ * ```
1155
+ */
1156
+ declare class LinkComponent {
1157
+ text: string;
1158
+ textHtml?: string;
1159
+ imageSrc?: string;
1160
+ imageAlt?: string;
1161
+ imageTitle?: string;
1162
+ imageClass?: string;
1163
+ href?: string;
1164
+ target?: string;
1165
+ rel?: string;
1166
+ type: LinkType;
1167
+ state: LinkState;
1168
+ disabled: boolean;
1169
+ leftIcon?: string;
1170
+ rightIcon?: string;
1171
+ ariaLabel?: string;
1172
+ linkClick: EventEmitter<MouseEvent>;
1173
+ get computedState(): LinkState;
1174
+ get hasLeftIcon(): boolean;
1175
+ get hasRightIcon(): boolean;
1176
+ get computedLeftIcon(): string;
1177
+ get computedRightIcon(): string;
1178
+ get computedHref(): string | null;
1179
+ get computedRel(): string | null;
1180
+ get computedAriaLabel(): string;
1181
+ onClick(event: MouseEvent): void;
1182
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkComponent, never>;
1183
+ static ɵcmp: i0.ɵɵComponentDeclaration<LinkComponent, "lib-link", never, { "text": { "alias": "text"; "required": false; }; "textHtml": { "alias": "textHtml"; "required": false; }; "imageSrc": { "alias": "imageSrc"; "required": false; }; "imageAlt": { "alias": "imageAlt"; "required": false; }; "imageTitle": { "alias": "imageTitle"; "required": false; }; "imageClass": { "alias": "imageClass"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "rel": { "alias": "rel"; "required": false; }; "type": { "alias": "type"; "required": false; }; "state": { "alias": "state"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "leftIcon": { "alias": "leftIcon"; "required": false; }; "rightIcon": { "alias": "rightIcon"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "linkClick": "linkClick"; }, never, never, true, never>;
1184
+ static ngAcceptInputType_disabled: unknown;
1185
+ }
1186
+
1187
+ interface RadioButtonChange {
1188
+ checked: boolean;
1189
+ value: string;
1190
+ originalEvent: Event;
1191
+ }
1192
+ /**
1193
+ * Accessible replacement for a native `<input type="radio">` that can live
1194
+ * inside Angular forms or be used as a standalone control. The component
1195
+ * exposes color, name, disabled, and value inputs plus a `checkedChange`
1196
+ * output so parent views can respond to state transitions or drive a custom
1197
+ * radio group.
1198
+ *
1199
+ * Features:
1200
+ * - Standalone + OnPush component that keeps templates lean.
1201
+ * - Implements ControlValueAccessor so it works with `ngModel` and reactive forms.
1202
+ * - Emits the original DOM event, checked state, and configured value for analytics.
1203
+ * - Auto-generates a unique `inputId` so external `<lib-label>` elements can bind via `for`.
1204
+ *
1205
+ * @example
1206
+ * ```html
1207
+ * <lib-radio-button
1208
+ * #flighting
1209
+ * name="experiment"
1210
+ * value="flighting"
1211
+ * color="#7c3aed"
1212
+ * [(ngModel)]="selectedValue"
1213
+ * (checkedChange)="logRadio($event)">
1214
+ * </lib-radio-button>
1215
+ * <lib-label position="left" [for]="flighting.inputId" text="Flighting"></lib-label>
1216
+ * ```
1217
+ */
1218
+ declare class RadioButtonComponent implements ControlValueAccessor {
1219
+ private readonly cdr;
1220
+ private readonly inputUid;
1221
+ color?: string;
1222
+ disabled: boolean;
1223
+ name?: string;
1224
+ value: string;
1225
+ checked: boolean;
1226
+ checkedChange: EventEmitter<RadioButtonChange>;
1227
+ private onChange;
1228
+ private onTouched;
1229
+ writeValue(formValue: unknown): void;
1230
+ registerOnChange(fn: (value: string) => void): void;
1231
+ registerOnTouched(fn: () => void): void;
1232
+ setDisabledState(isDisabled: boolean): void;
1233
+ onInputChange(event: Event): void;
1234
+ onBlur(): void;
1235
+ get inputId(): string;
1236
+ static ɵfac: i0.ɵɵFactoryDeclaration<RadioButtonComponent, never>;
1237
+ static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonComponent, "lib-radio-button", never, { "color": { "alias": "color"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "name": { "alias": "name"; "required": false; }; "value": { "alias": "value"; "required": true; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
1238
+ static ngAcceptInputType_disabled: unknown;
1239
+ }
1240
+
1241
+ type DropdownState = 'default' | 'hover' | 'focused' | 'error' | 'success' | 'disabled';
1242
+ interface DropdownOption {
1243
+ value: string;
1244
+ label: string;
1245
+ disabled?: boolean;
1246
+ }
1247
+ interface DropdownInputs {
1248
+ label?: string;
1249
+ labelType?: 'none' | 'required' | 'optional';
1250
+ inputId?: string;
1251
+ showHelpIcon?: boolean;
1252
+ subtext?: string;
1253
+ placeholder?: string;
1254
+ options: DropdownOption[];
1255
+ state?: DropdownState;
1256
+ disabled?: boolean;
1257
+ ariaLabel?: string;
1258
+ value?: string;
1259
+ searchable?: boolean;
1260
+ }
1261
+ /**
1262
+ * A dropdown component that combines a label and a searchable select field.
1263
+ * Features include:
1264
+ * - Searchable input to filter options
1265
+ * - Keyboard navigation support
1266
+ * - Optional label with help icon
1267
+ * - Multiple states (default, focused, error, etc.)
1268
+ *
1269
+ * @example
1270
+ * ```html
1271
+ * <!-- Basic dropdown -->
1272
+ * <lib-dropdown
1273
+ * label="Select an option"
1274
+ * [options]="myOptions"
1275
+ * (valueChange)="onSelectionChange($event)">
1276
+ * </lib-dropdown>
1277
+ *
1278
+ * <!-- Required dropdown with help icon -->
1279
+ * <lib-dropdown
1280
+ * label="Category"
1281
+ * labelType="required"
1282
+ * [showHelpIcon]="true"
1283
+ * [options]="categories"
1284
+ * placeholder="Choose a category"
1285
+ * (valueChange)="onCategoryChange($event)">
1286
+ * </lib-dropdown>
1287
+ *
1288
+ * <!-- Dropdown with error state -->
1289
+ * <lib-dropdown
1290
+ * label="Status"
1291
+ * [options]="statuses"
1292
+ * state="error"
1293
+ * subtext="Please select a status"
1294
+ * (valueChange)="onStatusChange($event)">
1295
+ * </lib-dropdown>
1296
+ * ```
1297
+ */
1298
+ declare class DropdownComponent implements ControlValueAccessor, OnInit {
1299
+ label?: string;
1300
+ inputId?: string;
1301
+ labelType: 'none' | 'required' | 'optional';
1302
+ showHelpIcon: boolean;
1303
+ subtext?: string;
1304
+ placeholder: string;
1305
+ options: DropdownOption[];
1306
+ state: DropdownState;
1307
+ disabled: boolean;
1308
+ ariaLabel?: string;
1309
+ searchable: boolean;
1310
+ valueChange: EventEmitter<string>;
1311
+ helpIconClick: EventEmitter<void>;
1312
+ dropdownInput?: FieldComponent;
1313
+ value: string;
1314
+ searchText: string;
1315
+ isOpen: boolean;
1316
+ selectedIndex: number;
1317
+ filteredOptions: DropdownOption[];
1318
+ private elementRef;
1319
+ private onChange;
1320
+ private onTouched;
1321
+ ngOnInit(): void;
1322
+ /**
1323
+ * Gets the display text for the selected value
1324
+ */
1325
+ get displayText(): string;
1326
+ /**
1327
+ * Toggles dropdown open/closed state
1328
+ */
1329
+ toggleDropdown(): void;
1330
+ /**
1331
+ * Handles input changes for search functionality
1332
+ */
1333
+ onSearchInput(event: Event): void;
1334
+ /**
1335
+ * Filters options based on search text
1336
+ */
1337
+ filterOptions(): void;
1338
+ /**
1339
+ * Selects an option from the dropdown
1340
+ */
1341
+ selectOption(option: DropdownOption): void;
1342
+ /**
1343
+ * Handles keyboard navigation
1344
+ */
1345
+ onKeyDown(event: KeyboardEvent): void;
1346
+ /**
1347
+ * Handles blur event
1348
+ */
1349
+ onBlur(): void;
1350
+ /**
1351
+ * Handles help icon click event
1352
+ */
1353
+ onHelpIconClick(): void;
1354
+ /**
1355
+ * Closes dropdown when clicking outside
1356
+ */
1357
+ onDocumentClick(event: MouseEvent): void;
1358
+ writeValue(value: string): void;
1359
+ registerOnChange(fn: (value: string) => void): void;
1360
+ registerOnTouched(fn: () => void): void;
1361
+ setDisabledState(isDisabled: boolean): void;
1362
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
1363
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "lib-dropdown", never, { "label": { "alias": "label"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "labelType": { "alias": "labelType"; "required": false; }; "showHelpIcon": { "alias": "showHelpIcon"; "required": false; }; "subtext": { "alias": "subtext"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "state": { "alias": "state"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; }, { "valueChange": "valueChange"; "helpIconClick": "helpIconClick"; }, never, never, true, never>;
1364
+ }
1365
+
1366
+ export { ADVANCED_SEARCH_FIELD_MAP, ADVANCED_SEARCH_OPTIONS, ADVANCED_SEARCH_QUALIFIER_MAP, ButtonComponent, ButtonGroupComponent, ButtonGroupItemComponent, CheckboxComponent, DropdownComponent, FieldComponent, HbllFooterComponent, HbllHeaderComponent, HbllItemTypeIconPipe, HeaderWithImpersonationComponent, ImpersonateModalComponent, ImpersonateUserPipe, ImpersonationBannerComponent, LIBRARY_HOURS_API_URL, LabelComponent, LinkComponent, RadioButtonComponent, SnackbarComponent, SnackbarService, SsSearchBarComponent, StatusButtonComponent, TabBarComponent, TabItemComponent, defaultOidcBaseUri, defaultOidcDefaultIdp, getUserStatusFromRoles, isAdvancedSearchExternalFieldOption, isAdvancedSearchFieldOption, isAdvancedSearchLocalFieldOption, isSearchScope };
1367
+ export type { AdvancedSearchBooleanOption, AdvancedSearchExternalFieldOption, AdvancedSearchFieldOption, AdvancedSearchLanguageOption, AdvancedSearchLocalFieldOption, AdvancedSearchQualifier, AdvancedSearchQualifierOption, AdvancedSearchQueryRow, AdvancedSearchResultsPerPageOption, ButtonInputs, ButtonType, CheckboxInputs, DropdownInputs, DropdownOption, DropdownState, FieldInputs, FieldState, FieldStatus, ImpersonateSearchResult, InputType, LabelInputs, LabelPosition, LabelType, LinkIconPosition, LinkInputs, LinkState, LinkType, RadioButtonChange, SearchConfig, SearchScope, SnackbarInputs, SnackbarPurpose, Status, StatusButtonInputs };