angular-perfect-select 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as angular_perfect_select from 'angular-perfect-select';
2
2
  import * as _angular_core from '@angular/core';
3
- import { OnInit, OnChanges, OnDestroy, EventEmitter, ElementRef, TemplateRef, SimpleChanges } from '@angular/core';
3
+ import { OnInit, OnChanges, OnDestroy, EventEmitter, ElementRef, TemplateRef, SimpleChanges, EnvironmentProviders } from '@angular/core';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
5
  import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
6
6
  import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
@@ -85,8 +85,69 @@ interface SelectPinEvent {
85
85
  pinned: boolean;
86
86
  }
87
87
 
88
+ /**
89
+ * Utility functions for sorting select options
90
+ */
91
+
92
+ type SortMode = 'none' | 'alphabetical-asc' | 'alphabetical-desc' | 'recently-used' | 'custom';
93
+ interface SortConfig {
94
+ mode: SortMode;
95
+ customComparator?: (a: SelectOption, b: SelectOption) => number;
96
+ getLabel?: (option: SelectOption) => string;
97
+ recentlyUsedIds?: Set<any>;
98
+ }
99
+ /**
100
+ * Sorts options based on the specified mode
101
+ */
102
+ declare function sortOptions(options: SelectOption[], config: SortConfig): SelectOption[];
103
+
104
+ type ColorScheme = 'light' | 'dark' | 'auto';
105
+ declare class DarkModeProvider {
106
+ private platformId;
107
+ private isBrowser;
108
+ private preferredScheme;
109
+ private systemPrefersDark;
110
+ isDarkMode: _angular_core.Signal<boolean>;
111
+ constructor();
112
+ /**
113
+ * Initialize system dark mode detection
114
+ */
115
+ private initDarkModeDetection;
116
+ /**
117
+ * Set user's color scheme preference
118
+ */
119
+ setColorScheme(scheme: ColorScheme): void;
120
+ /**
121
+ * Get current color scheme preference
122
+ */
123
+ getColorScheme(): ColorScheme;
124
+ /**
125
+ * Toggle between light and dark mode
126
+ */
127
+ toggleDarkMode(): void;
128
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DarkModeProvider, never>;
129
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DarkModeProvider>;
130
+ }
131
+
132
+ /**
133
+ * Bulk actions for multi-select mode
134
+ */
135
+
136
+ interface BulkAction {
137
+ id: string;
138
+ label: string;
139
+ icon?: string;
140
+ disabled?: boolean;
141
+ action: (selectedOptions: SelectOption[]) => void;
142
+ }
143
+ interface SelectBulkActionEvent {
144
+ action: BulkAction;
145
+ selectedOptions: SelectOption[];
146
+ }
147
+
88
148
  declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, OnChanges, OnDestroy {
89
149
  private sanitizer;
150
+ private darkModeProvider;
90
151
  options: SelectOption[];
91
152
  placeholder: string;
92
153
  isMulti: boolean;
@@ -172,6 +233,36 @@ declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, On
172
233
  maxPinnedOptions: number | null;
173
234
  pinnedOptionsLabel: string;
174
235
  persistPinnedOptions: boolean;
236
+ enableSearchHighlight: boolean;
237
+ searchHighlightColor: string;
238
+ searchHighlightTextColor: string;
239
+ maxVisibleTags: number | null;
240
+ showMoreTagsText: string;
241
+ collapsibleTags: boolean;
242
+ showAllTagsText: string;
243
+ showLessTagsText: string;
244
+ enableFuzzySearch: boolean;
245
+ fuzzySearchThreshold: number;
246
+ fuzzySearchCaseSensitive: boolean;
247
+ enableAutoThemeDetection: boolean;
248
+ colorScheme: ColorScheme;
249
+ darkModeTheme: ThemeName;
250
+ lightModeTheme: ThemeName;
251
+ enableLoadingSkeleton: boolean;
252
+ skeletonItemCount: number;
253
+ skeletonItemHeight: number;
254
+ skeletonAnimationDelay: number;
255
+ compactMode: boolean;
256
+ showOptionCheckboxes: boolean;
257
+ checkboxPosition: 'left' | 'right';
258
+ checkboxStyle: 'default' | 'filled' | 'outlined';
259
+ bulkActions: BulkAction[];
260
+ enableBulkActions: boolean;
261
+ bulkActionsPosition: 'above' | 'below' | 'float';
262
+ bulkActionsLabel: string;
263
+ sortMode: SortMode;
264
+ customSortComparator: ((a: SelectOption, b: SelectOption) => number) | null;
265
+ recentlyUsedLimit: number;
175
266
  name: string;
176
267
  id: string;
177
268
  autoFocus: boolean;
@@ -197,12 +288,14 @@ declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, On
197
288
  scrollEnd: EventEmitter<SelectScrollEndEvent>;
198
289
  reorder: EventEmitter<SelectReorderEvent>;
199
290
  pin: EventEmitter<SelectPinEvent>;
291
+ bulkActionSelected: EventEmitter<SelectBulkActionEvent>;
200
292
  selectContainerRef: ElementRef;
201
293
  searchInputRef: ElementRef;
202
294
  menuElementRef: ElementRef;
203
295
  virtualScrollViewport?: CdkVirtualScrollViewport;
204
296
  optionTemplate?: TemplateRef<any>;
205
297
  selectedOptionTemplate?: TemplateRef<any>;
298
+ tagTemplate?: TemplateRef<any>;
206
299
  isOpen: _angular_core.WritableSignal<boolean>;
207
300
  searchTerm: _angular_core.WritableSignal<string>;
208
301
  highlightedIndex: _angular_core.WritableSignal<number>;
@@ -222,6 +315,9 @@ declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, On
222
315
  pinnedOptions: _angular_core.WritableSignal<SelectOption[]>;
223
316
  isDragging: _angular_core.WritableSignal<boolean>;
224
317
  private pinnedOptionsStorageKey;
318
+ tagsExpanded: _angular_core.WritableSignal<boolean>;
319
+ isDarkMode: _angular_core.WritableSignal<boolean>;
320
+ recentlyUsedIds: _angular_core.WritableSignal<Set<any>>;
225
321
  currentTheme: _angular_core.Signal<angular_perfect_select.ThemeColors>;
226
322
  filteredOptions: _angular_core.Signal<SelectOption[]>;
227
323
  selectedOptions: _angular_core.Signal<(SelectOption | {
@@ -230,6 +326,14 @@ declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, On
230
326
  value: any;
231
327
  })[]>;
232
328
  displayText: _angular_core.Signal<string>;
329
+ visibleTags: _angular_core.Signal<(SelectOption | {
330
+ id: any;
331
+ label: string;
332
+ value: any;
333
+ })[]>;
334
+ hiddenTagsCount: _angular_core.Signal<number>;
335
+ resolvedTheme: _angular_core.Signal<ThemeName>;
336
+ hasBulkActions: _angular_core.Signal<boolean>;
233
337
  groupedOptions: _angular_core.Signal<Record<string, SelectOption[]> | null>;
234
338
  displayOptions: _angular_core.Signal<SelectOption[]>;
235
339
  allOptionsSelected: _angular_core.Signal<boolean>;
@@ -237,11 +341,11 @@ declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, On
237
341
  isMaxSelectionReached: _angular_core.Signal<boolean>;
238
342
  showMinSearchMessage: _angular_core.Signal<boolean>;
239
343
  displayOptionsWithRecent: _angular_core.Signal<SelectOption[]>;
240
- validationIconName: _angular_core.Signal<"error" | "warning" | "info" | "" | "check_circle">;
344
+ validationIconName: _angular_core.Signal<"" | "error" | "warning" | "check_circle" | "info">;
241
345
  getEnabledOptionsCount(): number;
242
346
  private onChange;
243
347
  private onTouched;
244
- constructor(sanitizer: DomSanitizer);
348
+ constructor(sanitizer: DomSanitizer, darkModeProvider: DarkModeProvider);
245
349
  ngOnChanges(changes: SimpleChanges): void;
246
350
  writeValue(value: any): void;
247
351
  registerOnChange(fn: any): void;
@@ -281,14 +385,21 @@ declare class PerfectSelectComponent implements ControlValueAccessor, OnInit, On
281
385
  isPinned(option: SelectOption): boolean;
282
386
  loadPinnedOptions(): void;
283
387
  savePinnedOptions(): void;
388
+ highlightSearchTerm(text: string): SafeHtml;
389
+ toggleTagsExpanded(): void;
390
+ getMoreTagsText(): string;
284
391
  onOptionsScroll(event: Event): void;
285
392
  onVirtualScrollIndexChange(index: number): void;
286
393
  showTooltip(option: SelectOption, index: number): void;
287
394
  hideTooltip(): void;
288
395
  getTooltipContent(option: SelectOption): string;
289
396
  getValidationClass(): string;
397
+ trackRecentlyUsed(option: SelectOption): void;
398
+ isOptionSelected(option: SelectOption): boolean;
399
+ executeBulkAction(action: BulkAction): void;
400
+ getSkeletonItems(): number[];
290
401
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PerfectSelectComponent, never>;
291
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PerfectSelectComponent, "ng-perfect-select", never, { "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "isMulti": { "alias": "isMulti"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "isSearchable": { "alias": "isSearchable"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "isClearable": { "alias": "isClearable"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "isRtl": { "alias": "isRtl"; "required": false; }; "closeMenuOnSelect": { "alias": "closeMenuOnSelect"; "required": false; }; "hideSelectedOptions": { "alias": "hideSelectedOptions"; "required": false; }; "isCreatable": { "alias": "isCreatable"; "required": false; }; "allowCreateWhileLoading": { "alias": "allowCreateWhileLoading"; "required": false; }; "createOptionPosition": { "alias": "createOptionPosition"; "required": false; }; "formatCreateLabel": { "alias": "formatCreateLabel"; "required": false; }; "loadOptions": { "alias": "loadOptions"; "required": false; }; "cacheOptions": { "alias": "cacheOptions"; "required": false; }; "defaultOptions": { "alias": "defaultOptions"; "required": false; }; "selectSize": { "alias": "selectSize"; "required": false; }; "containerSize": { "alias": "containerSize"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "customStyles": { "alias": "customStyles"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "menuPlacement": { "alias": "menuPlacement"; "required": false; }; "menuPosition": { "alias": "menuPosition"; "required": false; }; "getOptionLabel": { "alias": "getOptionLabel"; "required": false; }; "getOptionValue": { "alias": "getOptionValue"; "required": false; }; "isOptionDisabled": { "alias": "isOptionDisabled"; "required": false; }; "filterOption": { "alias": "filterOption"; "required": false; }; "isGrouped": { "alias": "isGrouped"; "required": false; }; "groupBy": { "alias": "groupBy"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "selectAllText": { "alias": "selectAllText"; "required": false; }; "deselectAllText": { "alias": "deselectAllText"; "required": false; }; "showOptionIcons": { "alias": "showOptionIcons"; "required": false; }; "showOptionBadges": { "alias": "showOptionBadges"; "required": false; }; "maxOptionsDisplay": { "alias": "maxOptionsDisplay"; "required": false; }; "optionHeight": { "alias": "optionHeight"; "required": false; }; "emptyStateText": { "alias": "emptyStateText"; "required": false; }; "emptySearchText": { "alias": "emptySearchText"; "required": false; }; "maxSelectedOptions": { "alias": "maxSelectedOptions"; "required": false; }; "maxSelectedMessage": { "alias": "maxSelectedMessage"; "required": false; }; "debounceTime": { "alias": "debounceTime"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "minSearchMessage": { "alias": "minSearchMessage"; "required": false; }; "enableVirtualScroll": { "alias": "enableVirtualScroll"; "required": false; }; "virtualScrollItemSize": { "alias": "virtualScrollItemSize"; "required": false; }; "virtualScrollMinBufferPx": { "alias": "virtualScrollMinBufferPx"; "required": false; }; "virtualScrollMaxBufferPx": { "alias": "virtualScrollMaxBufferPx"; "required": false; }; "validationState": { "alias": "validationState"; "required": false; }; "validationMessage": { "alias": "validationMessage"; "required": false; }; "showValidationIcon": { "alias": "showValidationIcon"; "required": false; }; "showTooltips": { "alias": "showTooltips"; "required": false; }; "tooltipDelay": { "alias": "tooltipDelay"; "required": false; }; "getOptionTooltip": { "alias": "getOptionTooltip"; "required": false; }; "showRecentSelections": { "alias": "showRecentSelections"; "required": false; }; "recentSelectionsLimit": { "alias": "recentSelectionsLimit"; "required": false; }; "recentSelectionsLabel": { "alias": "recentSelectionsLabel"; "required": false; }; "enableRecentSelectionsPersistence": { "alias": "enableRecentSelectionsPersistence"; "required": false; }; "enableInfiniteScroll": { "alias": "enableInfiniteScroll"; "required": false; }; "infiniteScrollThreshold": { "alias": "infiniteScrollThreshold"; "required": false; }; "totalOptionsCount": { "alias": "totalOptionsCount"; "required": false; }; "enableAdvancedKeyboard": { "alias": "enableAdvancedKeyboard"; "required": false; }; "typeAheadDelay": { "alias": "typeAheadDelay"; "required": false; }; "enableCopyPaste": { "alias": "enableCopyPaste"; "required": false; }; "copyDelimiter": { "alias": "copyDelimiter"; "required": false; }; "pasteDelimiter": { "alias": "pasteDelimiter"; "required": false; }; "enableDragDrop": { "alias": "enableDragDrop"; "required": false; }; "dragDropPlaceholder": { "alias": "dragDropPlaceholder"; "required": false; }; "dragDropAnimation": { "alias": "dragDropAnimation"; "required": false; }; "enablePinning": { "alias": "enablePinning"; "required": false; }; "maxPinnedOptions": { "alias": "maxPinnedOptions"; "required": false; }; "pinnedOptionsLabel": { "alias": "pinnedOptionsLabel"; "required": false; }; "persistPinnedOptions": { "alias": "persistPinnedOptions"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "openMenuOnFocus": { "alias": "openMenuOnFocus"; "required": false; }; "openMenuOnClick": { "alias": "openMenuOnClick"; "required": false; }; "tabSelectsValue": { "alias": "tabSelectsValue"; "required": false; }; "backspaceRemovesValue": { "alias": "backspaceRemovesValue"; "required": false; }; "escapeClearsValue": { "alias": "escapeClearsValue"; "required": false; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; }; "loadingMessage": { "alias": "loadingMessage"; "required": false; }; }, { "change": "change"; "clear": "clear"; "focus": "focus"; "blur": "blur"; "menuOpen": "menuOpen"; "menuClose": "menuClose"; "inputChange": "inputChange"; "createOption": "createOption"; "optionsLoaded": "optionsLoaded"; "loadError": "loadError"; "copy": "copy"; "paste": "paste"; "scrollEnd": "scrollEnd"; "reorder": "reorder"; "pin": "pin"; }, ["optionTemplate", "selectedOptionTemplate"], never, true, never>;
402
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PerfectSelectComponent, "ng-perfect-select", never, { "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "isMulti": { "alias": "isMulti"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "isSearchable": { "alias": "isSearchable"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "isClearable": { "alias": "isClearable"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "isRtl": { "alias": "isRtl"; "required": false; }; "closeMenuOnSelect": { "alias": "closeMenuOnSelect"; "required": false; }; "hideSelectedOptions": { "alias": "hideSelectedOptions"; "required": false; }; "isCreatable": { "alias": "isCreatable"; "required": false; }; "allowCreateWhileLoading": { "alias": "allowCreateWhileLoading"; "required": false; }; "createOptionPosition": { "alias": "createOptionPosition"; "required": false; }; "formatCreateLabel": { "alias": "formatCreateLabel"; "required": false; }; "loadOptions": { "alias": "loadOptions"; "required": false; }; "cacheOptions": { "alias": "cacheOptions"; "required": false; }; "defaultOptions": { "alias": "defaultOptions"; "required": false; }; "selectSize": { "alias": "selectSize"; "required": false; }; "containerSize": { "alias": "containerSize"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "customStyles": { "alias": "customStyles"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "menuPlacement": { "alias": "menuPlacement"; "required": false; }; "menuPosition": { "alias": "menuPosition"; "required": false; }; "getOptionLabel": { "alias": "getOptionLabel"; "required": false; }; "getOptionValue": { "alias": "getOptionValue"; "required": false; }; "isOptionDisabled": { "alias": "isOptionDisabled"; "required": false; }; "filterOption": { "alias": "filterOption"; "required": false; }; "isGrouped": { "alias": "isGrouped"; "required": false; }; "groupBy": { "alias": "groupBy"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "selectAllText": { "alias": "selectAllText"; "required": false; }; "deselectAllText": { "alias": "deselectAllText"; "required": false; }; "showOptionIcons": { "alias": "showOptionIcons"; "required": false; }; "showOptionBadges": { "alias": "showOptionBadges"; "required": false; }; "maxOptionsDisplay": { "alias": "maxOptionsDisplay"; "required": false; }; "optionHeight": { "alias": "optionHeight"; "required": false; }; "emptyStateText": { "alias": "emptyStateText"; "required": false; }; "emptySearchText": { "alias": "emptySearchText"; "required": false; }; "maxSelectedOptions": { "alias": "maxSelectedOptions"; "required": false; }; "maxSelectedMessage": { "alias": "maxSelectedMessage"; "required": false; }; "debounceTime": { "alias": "debounceTime"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "minSearchMessage": { "alias": "minSearchMessage"; "required": false; }; "enableVirtualScroll": { "alias": "enableVirtualScroll"; "required": false; }; "virtualScrollItemSize": { "alias": "virtualScrollItemSize"; "required": false; }; "virtualScrollMinBufferPx": { "alias": "virtualScrollMinBufferPx"; "required": false; }; "virtualScrollMaxBufferPx": { "alias": "virtualScrollMaxBufferPx"; "required": false; }; "validationState": { "alias": "validationState"; "required": false; }; "validationMessage": { "alias": "validationMessage"; "required": false; }; "showValidationIcon": { "alias": "showValidationIcon"; "required": false; }; "showTooltips": { "alias": "showTooltips"; "required": false; }; "tooltipDelay": { "alias": "tooltipDelay"; "required": false; }; "getOptionTooltip": { "alias": "getOptionTooltip"; "required": false; }; "showRecentSelections": { "alias": "showRecentSelections"; "required": false; }; "recentSelectionsLimit": { "alias": "recentSelectionsLimit"; "required": false; }; "recentSelectionsLabel": { "alias": "recentSelectionsLabel"; "required": false; }; "enableRecentSelectionsPersistence": { "alias": "enableRecentSelectionsPersistence"; "required": false; }; "enableInfiniteScroll": { "alias": "enableInfiniteScroll"; "required": false; }; "infiniteScrollThreshold": { "alias": "infiniteScrollThreshold"; "required": false; }; "totalOptionsCount": { "alias": "totalOptionsCount"; "required": false; }; "enableAdvancedKeyboard": { "alias": "enableAdvancedKeyboard"; "required": false; }; "typeAheadDelay": { "alias": "typeAheadDelay"; "required": false; }; "enableCopyPaste": { "alias": "enableCopyPaste"; "required": false; }; "copyDelimiter": { "alias": "copyDelimiter"; "required": false; }; "pasteDelimiter": { "alias": "pasteDelimiter"; "required": false; }; "enableDragDrop": { "alias": "enableDragDrop"; "required": false; }; "dragDropPlaceholder": { "alias": "dragDropPlaceholder"; "required": false; }; "dragDropAnimation": { "alias": "dragDropAnimation"; "required": false; }; "enablePinning": { "alias": "enablePinning"; "required": false; }; "maxPinnedOptions": { "alias": "maxPinnedOptions"; "required": false; }; "pinnedOptionsLabel": { "alias": "pinnedOptionsLabel"; "required": false; }; "persistPinnedOptions": { "alias": "persistPinnedOptions"; "required": false; }; "enableSearchHighlight": { "alias": "enableSearchHighlight"; "required": false; }; "searchHighlightColor": { "alias": "searchHighlightColor"; "required": false; }; "searchHighlightTextColor": { "alias": "searchHighlightTextColor"; "required": false; }; "maxVisibleTags": { "alias": "maxVisibleTags"; "required": false; }; "showMoreTagsText": { "alias": "showMoreTagsText"; "required": false; }; "collapsibleTags": { "alias": "collapsibleTags"; "required": false; }; "showAllTagsText": { "alias": "showAllTagsText"; "required": false; }; "showLessTagsText": { "alias": "showLessTagsText"; "required": false; }; "enableFuzzySearch": { "alias": "enableFuzzySearch"; "required": false; }; "fuzzySearchThreshold": { "alias": "fuzzySearchThreshold"; "required": false; }; "fuzzySearchCaseSensitive": { "alias": "fuzzySearchCaseSensitive"; "required": false; }; "enableAutoThemeDetection": { "alias": "enableAutoThemeDetection"; "required": false; }; "colorScheme": { "alias": "colorScheme"; "required": false; }; "darkModeTheme": { "alias": "darkModeTheme"; "required": false; }; "lightModeTheme": { "alias": "lightModeTheme"; "required": false; }; "enableLoadingSkeleton": { "alias": "enableLoadingSkeleton"; "required": false; }; "skeletonItemCount": { "alias": "skeletonItemCount"; "required": false; }; "skeletonItemHeight": { "alias": "skeletonItemHeight"; "required": false; }; "skeletonAnimationDelay": { "alias": "skeletonAnimationDelay"; "required": false; }; "compactMode": { "alias": "compactMode"; "required": false; }; "showOptionCheckboxes": { "alias": "showOptionCheckboxes"; "required": false; }; "checkboxPosition": { "alias": "checkboxPosition"; "required": false; }; "checkboxStyle": { "alias": "checkboxStyle"; "required": false; }; "bulkActions": { "alias": "bulkActions"; "required": false; }; "enableBulkActions": { "alias": "enableBulkActions"; "required": false; }; "bulkActionsPosition": { "alias": "bulkActionsPosition"; "required": false; }; "bulkActionsLabel": { "alias": "bulkActionsLabel"; "required": false; }; "sortMode": { "alias": "sortMode"; "required": false; }; "customSortComparator": { "alias": "customSortComparator"; "required": false; }; "recentlyUsedLimit": { "alias": "recentlyUsedLimit"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "openMenuOnFocus": { "alias": "openMenuOnFocus"; "required": false; }; "openMenuOnClick": { "alias": "openMenuOnClick"; "required": false; }; "tabSelectsValue": { "alias": "tabSelectsValue"; "required": false; }; "backspaceRemovesValue": { "alias": "backspaceRemovesValue"; "required": false; }; "escapeClearsValue": { "alias": "escapeClearsValue"; "required": false; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; }; "loadingMessage": { "alias": "loadingMessage"; "required": false; }; }, { "change": "change"; "clear": "clear"; "focus": "focus"; "blur": "blur"; "menuOpen": "menuOpen"; "menuClose": "menuClose"; "inputChange": "inputChange"; "createOption": "createOption"; "optionsLoaded": "optionsLoaded"; "loadError": "loadError"; "copy": "copy"; "paste": "paste"; "scrollEnd": "scrollEnd"; "reorder": "reorder"; "pin": "pin"; "bulkActionSelected": "bulkActionSelected"; }, ["optionTemplate", "selectedOptionTemplate", "tagTemplate"], never, true, never>;
292
403
  }
293
404
 
294
405
  declare const dropdownAnimation: AnimationTriggerMetadata;
@@ -305,5 +416,52 @@ declare class ClickOutsideDirective {
305
416
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ClickOutsideDirective, "[clickOutside]", never, {}, { "clickOutside": "clickOutside"; }, never, never, true, never>;
306
417
  }
307
418
 
308
- export { ClickOutsideDirective, PerfectSelectComponent, THEMES, dropdownAnimation, optionListAnimation, selectAnimations, tagAnimation };
309
- export type { InputChangeAction, SelectChangeAction, SelectChangeEvent, SelectCopyEvent, SelectCreateOptionEvent, SelectInputChangeEvent, SelectLoadErrorEvent, SelectOption, SelectOptionsLoadedEvent, SelectPasteEvent, SelectPinEvent, SelectReorderEvent, SelectScrollEndEvent, ThemeColors, ThemeName, ValidationConfig, ValidationState };
419
+ /**
420
+ * Provides necessary CDK modules for PerfectSelectComponent.
421
+ * Import this in your app configuration if you encounter production build issues.
422
+ *
423
+ * @example
424
+ * ```typescript
425
+ * import { providePerfectSelect } from 'angular-perfect-select';
426
+ *
427
+ * bootstrapApplication(AppComponent, {
428
+ * providers: [
429
+ * // ... other providers
430
+ * providePerfectSelect()
431
+ * ]
432
+ * });
433
+ * ```
434
+ */
435
+ declare function providePerfectSelect(): EnvironmentProviders;
436
+
437
+ /**
438
+ * Fuzzy search utility for flexible string matching
439
+ * Supports acronym-style matching (e.g., 'fb' matches 'Facebook')
440
+ * and partial substring matching with scoring
441
+ */
442
+ interface FuzzyMatchResult {
443
+ matches: boolean;
444
+ score: number;
445
+ matchedIndices: number[];
446
+ }
447
+ /**
448
+ * Performs fuzzy search matching
449
+ * @param searchTerm The search query
450
+ * @param targetString The string to search in
451
+ * @param options Configuration options
452
+ * @returns Match result with score and matched character indices
453
+ */
454
+ declare function fuzzyMatch(searchTerm: string, targetString: string, options?: {
455
+ caseSensitive?: boolean;
456
+ threshold?: number;
457
+ }): FuzzyMatchResult;
458
+ /**
459
+ * Sorts options by fuzzy match score
460
+ */
461
+ declare function sortByFuzzyScore<T>(items: T[], searchTerm: string, getLabel: (item: T) => string, options?: {
462
+ caseSensitive?: boolean;
463
+ threshold?: number;
464
+ }): T[];
465
+
466
+ export { ClickOutsideDirective, DarkModeProvider, PerfectSelectComponent, THEMES, dropdownAnimation, fuzzyMatch, optionListAnimation, providePerfectSelect, selectAnimations, sortByFuzzyScore, sortOptions, tagAnimation };
467
+ export type { BulkAction, ColorScheme, FuzzyMatchResult, InputChangeAction, SelectBulkActionEvent, SelectChangeAction, SelectChangeEvent, SelectCopyEvent, SelectCreateOptionEvent, SelectInputChangeEvent, SelectLoadErrorEvent, SelectOption, SelectOptionsLoadedEvent, SelectPasteEvent, SelectPinEvent, SelectReorderEvent, SelectScrollEndEvent, SortConfig, SortMode, ThemeColors, ThemeName, ValidationConfig, ValidationState };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-perfect-select",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "A modern, feature-rich select component for Angular with react-select API compatibility",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",