{ "version": 3, "sources": ["src/app/_services/action-factory.service.ts", "src/app/shared/tag-badge/tag-badge.component.ts", "src/app/shared/tag-badge/tag-badge.component.html", "src/app/_services/collection-tag.service.ts", "src/app/_services/filter.service.ts", "src/app/_models/metadata/person.ts", "src/app/typeahead/_components/typeahead.component.ts", "src/app/typeahead/_components/typeahead.component.html", "src/app/shared/_services/filter-utilities.service.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { map, Observable, shareReplay } from 'rxjs';\nimport { Chapter } from '../_models/chapter';\nimport {UserCollection} from '../_models/collection-tag';\nimport { Device } from '../_models/device/device';\nimport { Library } from '../_models/library/library';\nimport { ReadingList } from '../_models/reading-list';\nimport { Series } from '../_models/series';\nimport { Volume } from '../_models/volume';\nimport { AccountService } from './account.service';\nimport { DeviceService } from './device.service';\nimport {SideNavStream} from \"../_models/sidenav/sidenav-stream\";\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\n\nexport enum Action {\n Submenu = -1,\n /**\n * Mark entity as read\n */\n MarkAsRead = 0,\n /**\n * Mark entity as unread\n */\n MarkAsUnread = 1,\n /**\n * Invoke a Scan on Series/Library\n */\n Scan = 2,\n /**\n * Delete the entity\n */\n Delete = 3,\n /**\n * Open edit modal\n */\n Edit = 4,\n /**\n * Open details modal\n */\n Info = 5,\n /**\n * Invoke a refresh covers\n */\n RefreshMetadata = 6,\n /**\n * Download the entity\n */\n Download = 7,\n /**\n * Invoke an Analyze Files which calculates word count\n */\n AnalyzeFiles = 8,\n /**\n * Read in incognito mode aka no progress tracking\n */\n IncognitoRead = 9,\n /**\n * Add to reading list\n */\n AddToReadingList = 10,\n /**\n * Add to collection\n */\n AddToCollection = 11,\n /**\n * Essentially a download, but handled differently. Needed so card bubbles it up for handling\n */\n DownloadBookmark = 12,\n /**\n * Open Series detail page for said series\n */\n ViewSeries = 13,\n /**\n * Open the reader for entity\n */\n Read = 14,\n /**\n * Add to user's Want to Read List\n */\n AddToWantToReadList = 15,\n /**\n * Remove from user's Want to Read List\n */\n RemoveFromWantToReadList = 16,\n /**\n * Send to a device\n */\n SendTo = 17,\n /**\n * Import some data into Kavita\n */\n Import = 18,\n /**\n * Removes the Series from On Deck inclusion\n */\n RemoveFromOnDeck = 19,\n AddRuleGroup = 20,\n RemoveRuleGroup = 21,\n MarkAsVisible = 22,\n MarkAsInvisible = 23,\n /**\n * Promotes the underlying item (Reading List, Collection)\n */\n Promote = 24,\n UnPromote = 25\n}\n\n/**\n * Callback for an action\n */\nexport type ActionCallback = (action: ActionItem, data: T) => void;\nexport type ActionAllowedCallback = (action: ActionItem) => boolean;\n\nexport interface ActionItem {\n title: string;\n action: Action;\n callback: ActionCallback;\n requiresAdmin: boolean;\n children: Array>;\n /**\n * An optional class which applies to an item. ie) danger on a delete action\n */\n class?: string;\n /**\n * Indicates that there exists a separate list will be loaded from an API.\n * Rule: If using this, only one child should exist in children with the Action for dynamicList.\n */\n dynamicList?: Observable<{title: string, data: any}[]> | undefined;\n /**\n * Extra data that needs to be sent back from the card item. Used mainly for dynamicList. This will be the item from dyanamicList return\n */\n _extra?: {title: string, data: any};\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ActionFactoryService {\n libraryActions: Array> = [];\n\n seriesActions: Array> = [];\n\n volumeActions: Array> = [];\n\n chapterActions: Array> = [];\n\n collectionTagActions: Array> = [];\n\n readingListActions: Array> = [];\n\n bookmarkActions: Array> = [];\n\n sideNavStreamActions: Array> = [];\n smartFilterActions: Array> = [];\n\n isAdmin = false;\n\n constructor(private accountService: AccountService, private deviceService: DeviceService) {\n this.accountService.currentUser$.subscribe((user) => {\n if (user) {\n this.isAdmin = this.accountService.hasAdminRole(user);\n } else {\n this._resetActions();\n return; // If user is logged out, we don't need to do anything\n }\n\n this._resetActions();\n });\n }\n\n getLibraryActions(callback: ActionCallback) {\n\t\treturn this.applyCallbackToList(this.libraryActions, callback);\n }\n\n getSeriesActions(callback: ActionCallback) {\n\t\treturn this.applyCallbackToList(this.seriesActions, callback);\n }\n\n getSideNavStreamActions(callback: ActionCallback) {\n return this.applyCallbackToList(this.sideNavStreamActions, callback);\n }\n\n getSmartFilterActions(callback: ActionCallback) {\n return this.applyCallbackToList(this.smartFilterActions, callback);\n }\n\n getVolumeActions(callback: ActionCallback) {\n\t\treturn this.applyCallbackToList(this.volumeActions, callback);\n }\n\n getChapterActions(callback: ActionCallback) {\n return this.applyCallbackToList(this.chapterActions, callback);\n }\n\n getCollectionTagActions(callback: ActionCallback) {\n\t\treturn this.applyCallbackToList(this.collectionTagActions, callback);\n }\n\n getReadingListActions(callback: ActionCallback) {\n return this.applyCallbackToList(this.readingListActions, callback);\n }\n\n getBookmarkActions(callback: ActionCallback) {\n return this.applyCallbackToList(this.bookmarkActions, callback);\n }\n\n getMetadataFilterActions(callback: ActionCallback) {\n const actions = [\n {title: 'add-rule-group-and', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\n {title: 'add-rule-group-or', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\n {title: 'remove-rule-group', action: Action.RemoveRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\n ];\n return this.applyCallbackToList(actions, callback);\n }\n\n dummyCallback(action: ActionItem, data: any) {}\n\n filterSendToAction(actions: Array>, chapter: Chapter) {\n // if (chapter.files.filter(f => f.format === MangaFormat.EPUB || f.format === MangaFormat.PDF).length !== chapter.files.length) {\n // // Remove Send To as it doesn't apply\n // return actions.filter(item => item.title !== 'Send To');\n // }\n return actions;\n }\n\n private _resetActions() {\n this.libraryActions = [\n {\n action: Action.Scan,\n title: 'scan-library',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Submenu,\n title: 'others',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [\n {\n action: Action.RefreshMetadata,\n title: 'refresh-covers',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.AnalyzeFiles,\n title: 'analyze-files',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ],\n },\n {\n action: Action.Edit,\n title: 'settings',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ];\n\n this.collectionTagActions = [\n {\n action: Action.Edit,\n title: 'edit',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: false,\n class: 'danger',\n children: [],\n },\n {\n action: Action.Promote,\n title: 'promote',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.UnPromote,\n title: 'unpromote',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.seriesActions = [\n {\n action: Action.MarkAsRead,\n title: 'mark-as-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsUnread,\n title: 'mark-as-unread',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Scan,\n title: 'scan-series',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Submenu,\n title: 'add-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n \t{\n action: Action.AddToWantToReadList,\n title: 'add-to-want-to-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.RemoveFromWantToReadList,\n title: 'remove-from-want-to-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.AddToReadingList,\n title: 'add-to-reading-list',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.AddToCollection,\n title: 'add-to-collection',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ],\n },\n {\n action: Action.Submenu,\n title: 'send-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n {\n action: Action.SendTo,\n title: '',\n callback: this.dummyCallback,\n requiresAdmin: false,\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\n return {'title': d.name, 'data': d};\n }), shareReplay())),\n children: []\n }\n ],\n },\n {\n action: Action.Submenu,\n title: 'others',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [\n {\n action: Action.RefreshMetadata,\n title: 'refresh-covers',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.AnalyzeFiles,\n title: 'analyze-files',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: true,\n class: 'danger',\n children: [],\n },\n ],\n },\n {\n action: Action.Download,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Edit,\n title: 'edit',\n callback: this.dummyCallback,\n requiresAdmin: true,\n children: [],\n },\n ];\n\n this.volumeActions = [\n {\n action: Action.IncognitoRead,\n title: 'read-incognito',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsRead,\n title: 'mark-as-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsUnread,\n title: 'mark-as-unread',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n\t\t\t{\n\t\t\t\taction: Action.Submenu,\n\t\t\t\ttitle: 'add-to',\n\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\trequiresAdmin: false,\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\taction: Action.AddToReadingList,\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\n\t\t\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\t\t\trequiresAdmin: false,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n {\n action: Action.Submenu,\n title: 'send-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n {\n action: Action.SendTo,\n title: '',\n callback: this.dummyCallback,\n requiresAdmin: false,\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\n return {'title': d.name, 'data': d};\n }), shareReplay())),\n children: []\n }\n ],\n },\n {\n action: Action.Download,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Edit,\n title: 'details',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.chapterActions = [\n {\n action: Action.IncognitoRead,\n title: 'read-incognito',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsRead,\n title: 'mark-as-read',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsUnread,\n title: 'mark-as-unread',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n\t\t\t{\n\t\t\t\taction: Action.Submenu,\n\t\t\t\ttitle: 'add-to',\n\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\trequiresAdmin: false,\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\taction: Action.AddToReadingList,\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\n\t\t\t\t\t\tcallback: this.dummyCallback,\n\t\t\t\t\t\trequiresAdmin: false,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n {\n action: Action.Submenu,\n title: 'send-to',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [\n {\n action: Action.SendTo,\n title: '',\n callback: this.dummyCallback,\n requiresAdmin: false,\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\n return {'title': d.name, 'data': d};\n }), shareReplay())),\n children: []\n }\n ],\n },\n // RBS will handle rendering this, so non-admins with download are applicable\n {\n action: Action.Download,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Edit,\n title: 'details',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.readingListActions = [\n {\n action: Action.Edit,\n title: 'edit',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: false,\n class: 'danger',\n children: [],\n },\n {\n action: Action.Promote,\n title: 'promote',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.UnPromote,\n title: 'unpromote',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.bookmarkActions = [\n {\n action: Action.ViewSeries,\n title: 'view-series',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.DownloadBookmark,\n title: 'download',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.Delete,\n title: 'clear',\n callback: this.dummyCallback,\n class: 'danger',\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.sideNavStreamActions = [\n {\n action: Action.MarkAsVisible,\n title: 'mark-visible',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n {\n action: Action.MarkAsInvisible,\n title: 'mark-invisible',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n\n this.smartFilterActions = [\n {\n action: Action.Delete,\n title: 'delete',\n callback: this.dummyCallback,\n requiresAdmin: false,\n children: [],\n },\n ];\n }\n\n private applyCallback(action: ActionItem, callback: (action: ActionItem, data: any) => void) {\n action.callback = callback;\n\n if (action.children === null || action.children?.length === 0) return;\n\n action.children?.forEach((childAction) => {\n this.applyCallback(childAction, callback);\n });\n }\n\n\tpublic applyCallbackToList(list: Array>, callback: (action: ActionItem, data: any) => void): Array> {\n\t\tconst actions = list.map((a) => {\n\t\t\treturn { ...a };\n\t\t});\n\t\tactions.forEach((action) => this.applyCallback(action, callback));\n\t\treturn actions;\n\t}\n\n // Checks the whole tree for the action and returns true if it exists\n public hasAction(actions: Array>, action: Action) {\n if (actions.length === 0) return false;\n\n for (let i = 0; i < actions.length; i++)\n {\n if (actions[i].action === action) return true;\n if (this.hasAction(actions[i].children, action)) return true;\n }\n\n return false;\n }\n\n}\n", "import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\n\n/**\n * What type of cursor to apply to the tag badge\n */\nexport enum TagBadgeCursor {\n /**\n * Allows the user to select text\n * cursor: default\n */\n Selectable,\n /**\n * Informs the user they can click and interact with badge\n * cursor: pointer\n */\n Clickable,\n /**\n * Informs the user they cannot click or interact with badge\n * cursor: not-allowed\n */\n NotAllowed,\n}\n\n@Component({\n selector: 'app-tag-badge',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tag-badge.component.html',\n styleUrls: ['./tag-badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TagBadgeComponent {\n\n @Input() selectionMode: TagBadgeCursor = TagBadgeCursor.Selectable;\n @Input() fillStyle: 'filled' | 'outline' = 'outline';\n\n get TagBadgeCursor() {\n return TagBadgeCursor;\n }\n}\n", "
\n \n
", "import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {environment} from 'src/environments/environment';\nimport {UserCollection} from '../_models/collection-tag';\nimport {TextResonse} from '../_types/text-response';\nimport {MalStack} from \"../_models/collection/mal-stack\";\nimport {Action, ActionItem} from \"./action-factory.service\";\nimport {User} from \"../_models/user\";\nimport {AccountService} from \"./account.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CollectionTagService {\n\n baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient, private accountService: AccountService) { }\n\n allCollections(ownedOnly = false) {\n return this.httpClient.get(this.baseUrl + 'collection?ownedOnly=' + ownedOnly);\n }\n\n allCollectionsForSeries(seriesId: number, ownedOnly = false) {\n return this.httpClient.get(this.baseUrl + 'collection/all-series?ownedOnly=' + ownedOnly + '&seriesId=' + seriesId);\n }\n\n updateTag(tag: UserCollection) {\n return this.httpClient.post(this.baseUrl + 'collection/update', tag, TextResonse);\n }\n\n promoteMultipleCollections(tags: Array, promoted: boolean) {\n return this.httpClient.post(this.baseUrl + 'collection/promote-multiple', {collectionIds: tags, promoted}, TextResonse);\n }\n\n updateSeriesForTag(tag: UserCollection, seriesIdsToRemove: Array) {\n return this.httpClient.post(this.baseUrl + 'collection/update-series', {tag, seriesIdsToRemove}, TextResonse);\n }\n\n addByMultiple(tagId: number, seriesIds: Array, tagTitle: string = '') {\n return this.httpClient.post(this.baseUrl + 'collection/update-for-series', {collectionTagId: tagId, collectionTagTitle: tagTitle, seriesIds}, TextResonse);\n }\n\n tagNameExists(name: string) {\n return this.httpClient.get(this.baseUrl + 'collection/name-exists?name=' + name);\n }\n\n deleteTag(tagId: number) {\n return this.httpClient.delete(this.baseUrl + 'collection?tagId=' + tagId, TextResonse);\n }\n\n deleteMultipleCollections(tags: Array) {\n return this.httpClient.post(this.baseUrl + 'collection/delete-multiple', {collectionIds: tags}, TextResonse);\n }\n\n getMalStacks() {\n return this.httpClient.get>(this.baseUrl + 'collection/mal-stacks');\n }\n\n actionListFilter(action: ActionItem, user: User) {\n const canPromote = this.accountService.hasAdminRole(user) || this.accountService.hasPromoteRole(user);\n const isPromotionAction = action.action == Action.Promote || action.action == Action.UnPromote;\n\n if (isPromotionAction) return canPromote;\n return true;\n }\n\n importStack(stack: MalStack) {\n return this.httpClient.post(this.baseUrl + 'collection/import-stack', stack, TextResonse);\n }\n}\n", "import { Injectable } from '@angular/core';\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\nimport {environment} from \"../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {JumpKey} from \"../_models/jumpbar/jump-key\";\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterService {\n\n baseUrl = environment.apiUrl;\n constructor(private httpClient: HttpClient) { }\n\n saveFilter(filter: SeriesFilterV2) {\n return this.httpClient.post(this.baseUrl + 'filter/update', filter);\n }\n getAllFilters() {\n return this.httpClient.get>(this.baseUrl + 'filter');\n }\n deleteFilter(filterId: number) {\n return this.httpClient.delete(this.baseUrl + 'filter?filterId=' + filterId);\n }\n\n}\n", "export enum PersonRole {\n Other = 1,\n Artist = 2,\n Writer = 3,\n Penciller = 4,\n Inker = 5,\n Colorist = 6,\n Letterer = 7,\n CoverArtist = 8,\n Editor = 9,\n Publisher = 10,\n Character = 11,\n Translator = 12,\n Imprint = 13,\n Team = 14,\n Location = 15\n}\n\nexport interface Person {\n id: number;\n name: string;\n role: PersonRole;\n}\n", "import { trigger, state, style, transition, animate } from '@angular/animations';\nimport {CommonModule, DOCUMENT} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild, DestroyRef,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Inject,\n Input,\n OnInit,\n Output,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { auditTime, filter, map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\nimport { KEY_CODES } from 'src/app/shared/_services/utility.service';\nimport { SelectionCompareFn, TypeaheadSettings } from '../_models/typeahead-settings';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {TagBadgeComponent} from \"../../shared/tag-badge/tag-badge.component\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n\n/**\n * SelectionModel is used for keeping track of multiple selections. Simple interface with ability to toggle.\n * @param selectedState Optional state to set selectedOptions to. If not passed, defaults to false.\n * @param selectedOptions Optional data elements to inform the SelectionModel of. If not passed, as toggle() occur, items are tracked.\n * @param propAccessor Optional string that points to a unique field within the T type. Used for quickly looking up.\n */\nexport class SelectionModel {\n _data!: Array<{value: T, selected: boolean}>;\n _propAccessor: string = '';\n\n constructor(selectedState: boolean = false, selectedOptions: Array = [], propAccessor: string = '') {\n this._data = [];\n\n if (propAccessor != undefined || propAccessor !== '') {\n this._propAccessor = propAccessor;\n }\n\n selectedOptions.forEach(d => {\n this._data.push({value: d, selected: selectedState});\n });\n }\n\n /**\n * Will toggle if the data item is selected or not. If data option is not tracked, will add it and set state to true.\n * @param data Item to toggle\n * @param selectedState Force the state\n * @param compareFn An optional function to use for the lookup, else will use shallowEqual implementation\n */\n toggle(data: T, selectedState?: boolean, compareFn?: SelectionCompareFn) {\n let lookupMethod = this.shallowEqual;\n if (compareFn != undefined || compareFn != null) {\n lookupMethod = compareFn;\n }\n\n const dataItem = this._data.filter(d => lookupMethod(d.value, data));\n if (dataItem.length > 0) {\n if (selectedState != undefined) {\n dataItem[0].selected = selectedState;\n } else {\n dataItem[0].selected = !dataItem[0].selected;\n }\n } else {\n this._data.push({value: data, selected: (selectedState === undefined ? true : selectedState)});\n }\n }\n\n\n /**\n * Is the passed item selected\n * @param data item to check against\n * @param compareFn optional method to use to perform comparisons\n * @returns boolean\n */\n isSelected(data: T, compareFn?: SelectionCompareFn): boolean {\n let lookupMethod = this.shallowEqual;\n if (compareFn != undefined || compareFn != null) {\n lookupMethod = compareFn;\n }\n\n const dataItem = this._data.filter(d => lookupMethod(d.value, data));\n\n if (dataItem.length > 0) {\n return dataItem[0].selected;\n }\n return false;\n }\n\n /**\n *\n * @returns If some of the items are selected, but not all\n */\n hasSomeSelected(): boolean {\n const selectedCount = this._data.filter(d => d.selected).length;\n return (selectedCount !== this._data.length && selectedCount !== 0)\n }\n\n /**\n *\n * @returns All Selected items\n */\n selected(): Array {\n return this._data.filter(d => d.selected).map(d => d.value);\n }\n\n /**\n *\n * @returns All Non-Selected items\n */\n unselected(): Array {\n return this._data.filter(d => !d.selected).map(d => d.value);\n }\n\n /**\n *\n * @returns Last element added/tracked or undefined if nothing is tracked\n */\n peek(): T | undefined {\n if (this._data.length > 0) {\n return this._data[this._data.length - 1].value;\n }\n\n return undefined;\n }\n\n shallowEqual(a: T, b: T) {\n\n for (let key in a) {\n if (!(key in b) || a[key] !== b[key]) {\n return false;\n }\n }\n for (let key in b) {\n if (!(key in a)) {\n return false;\n }\n }\n return true;\n }\n}\n\nconst ANIMATION_SPEED = 200;\n\n@Component({\n selector: 'app-typeahead',\n standalone: true,\n imports: [CommonModule, TagBadgeComponent, ReactiveFormsModule, TranslocoDirective],\n templateUrl: './typeahead.component.html',\n styleUrls: ['./typeahead.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideFromTop', [\n state('in', style({ height: '0px'})),\n transition('void => *', [\n style({ height: '100%', overflow: 'auto' }),\n animate(ANIMATION_SPEED)\n ]),\n transition('* => void', [\n animate(ANIMATION_SPEED, style({ height: '0px' })),\n ])\n ])\n ]\n})\nexport class TypeaheadComponent implements OnInit {\n /**\n * Settings for the typeahead\n */\n @Input({required: true}) settings!: TypeaheadSettings;\n /**\n * When true, will reset field to no selections. When false, will reset to saved data\n */\n @Input() reset: ReplaySubject = new ReplaySubject(1);\n /**\n * When a field is locked, we render custom css to indicate to the user. Does not affect functionality.\n */\n @Input() locked: boolean = false;\n /**\n * If disabled, a user will not be able to interact with the typeahead\n */\n @Input() disabled: boolean = false;\n /**\n * When triggered, will focus the input if the passed string matches the id\n */\n @Input() focus: EventEmitter | undefined;\n @Output() selectedData = new EventEmitter();\n @Output() newItemAdded = new EventEmitter();\n @Output() onUnlock = new EventEmitter();\n @Output() lockedChange = new EventEmitter();\n private readonly destroyRef = inject(DestroyRef);\n\n\n @ViewChild('input') inputElem!: ElementRef;\n @ContentChild('optionItem') optionTemplate!: TemplateRef;\n @ContentChild('badgeItem') badgeTemplate!: TemplateRef;\n\n optionSelection!: SelectionModel;\n\n hasFocus = false; // Whether input has active focus\n focusedIndex: number = 0;\n showAddItem: boolean = false;\n filteredOptions!: Observable;\n isLoadingOptions: boolean = false;\n typeaheadControl!: FormControl;\n typeaheadForm!: FormGroup;\n\n constructor(private renderer2: Renderer2, @Inject(DOCUMENT) private document: Document, private readonly cdRef: ChangeDetectorRef) { }\n\n ngOnInit() {\n this.reset.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((resetToEmpty: boolean) => {\n this.clearSelections(resetToEmpty);\n this.init();\n });\n\n if (this.focus) {\n this.focus.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((id: string) => {\n if (this.settings.id !== id) return;\n this.onInputFocus();\n });\n }\n\n this.init();\n }\n\n init() {\n if (this.settings.compareFn === undefined && this.settings.multiple) {\n console.error('A compare function must be defined');\n return;\n }\n\n if (this.settings.trackByIdentityFn === undefined) {\n this.settings.trackByIdentityFn = (index, value) => value;\n }\n\n if (this.settings.hasOwnProperty('formControl') && this.settings.formControl) {\n this.typeaheadControl = this.settings.formControl;\n } else {\n this.typeaheadControl = new FormControl('');\n }\n this.typeaheadForm = new FormGroup({\n 'typeahead': this.typeaheadControl\n });\n\n this.filteredOptions = this.typeaheadForm.get('typeahead')!.valueChanges\n .pipe(\n // Adjust input box to grow\n tap((val: string) => {\n if (this.inputElem != null && this.inputElem.nativeElement != null) {\n this.renderer2.setStyle(this.inputElem.nativeElement, 'width', 15 * (val.trim().length + 1) + 'px');\n this.focusedIndex = 0;\n }\n }),\n map((val: string) => val.trim()),\n auditTime(this.settings.debounce),\n //distinctUntilChanged(), // ?!: BUG Doesn't trigger the search to run when filtered array changes\n filter((val: string) => {\n // If minimum filter characters not met, do not filter\n if (this.settings.minCharacters === 0) return true;\n\n if (!val || val.length < this.settings.minCharacters) {\n return false;\n }\n\n return true;\n }),\n\n switchMap((val: string) => {\n this.isLoadingOptions = true;\n return this.settings.fetchFn(val.trim()).pipe(takeUntilDestroyed(this.destroyRef), map((items: any[]) => items.filter(item => this.filterSelected(item))));\n }),\n tap((filteredOptions: any[]) => {\n this.isLoadingOptions = false;\n this.focusedIndex = 0;\n this.cdRef.markForCheck();\n setTimeout(() => {\n this.updateShowAddItem(filteredOptions);\n this.updateHighlight();\n }, 10);\n setTimeout(() => this.updateHighlight(), 20);\n\n }),\n shareReplay(),\n takeUntilDestroyed(this.destroyRef)\n );\n\n\n if (this.settings.savedData) {\n if (this.settings.multiple) {\n this.optionSelection = new SelectionModel(true, this.settings.savedData);\n }\n else {\n const isArray = this.settings.savedData.hasOwnProperty('length');\n if (isArray) {\n this.optionSelection = new SelectionModel(true, this.settings.savedData);\n } else {\n this.optionSelection = new SelectionModel(true, [this.settings.savedData]);\n }\n }\n } else {\n this.optionSelection = new SelectionModel();\n }\n }\n\n\n @HostListener('body:click', ['$event'])\n handleDocumentClick(event: any) {\n // Don't close the typeahead when we select an item from it\n if (event.target && (event.target as HTMLElement).classList.contains('list-group-item')) {\n return;\n }\n this.hasFocus = false;\n }\n\n @HostListener('window:keydown', ['$event'])\n handleKeyPress(event: KeyboardEvent) {\n if (!this.hasFocus) { return; }\n if (this.disabled) return;\n\n switch(event.key) {\n case KEY_CODES.DOWN_ARROW:\n case KEY_CODES.RIGHT_ARROW:\n {\n this.focusedIndex = Math.min(this.focusedIndex + 1, this.document.querySelectorAll('.list-group-item').length - 1);\n this.updateHighlight();\n break;\n }\n case KEY_CODES.UP_ARROW:\n case KEY_CODES.LEFT_ARROW:\n {\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\n this.updateHighlight();\n break;\n }\n case KEY_CODES.ENTER:\n {\n this.document.querySelectorAll('.list-group-item').forEach((item, index) => {\n if (item.classList.contains('active')) {\n this.filteredOptions.pipe(take(1)).subscribe((opts: any[]) => {\n // This isn't giving back the filtered array, but everything\n event.preventDefault();\n event.stopPropagation();\n\n (item as HTMLElement).click();\n this.focusedIndex = 0;\n });\n }\n });\n break;\n }\n case KEY_CODES.BACKSPACE:\n case KEY_CODES.DELETE:\n {\n if (this.typeaheadControl.value !== null && this.typeaheadControl.value !== undefined && this.typeaheadControl.value.trim() !== '') {\n break;\n }\n const selected = this.optionSelection.selected();\n if (selected.length > 0) {\n this.removeSelectedOption(selected.pop());\n }\n break;\n }\n case KEY_CODES.ESC_KEY:\n this.hasFocus = false;\n event.stopPropagation();\n break;\n default:\n break;\n }\n }\n\n toggleSelection(opt: any): void {\n this.optionSelection.toggle(opt, undefined, this.settings.selectionCompareFn);\n this.selectedData.emit(this.optionSelection.selected());\n }\n\n removeSelectedOption(opt: any) {\n this.optionSelection.toggle(opt, undefined, this.settings.selectionCompareFn);\n this.selectedData.emit(this.optionSelection.selected());\n this.resetField();\n }\n\n clearSelections(untoggleAll: boolean = false) {\n if (this.optionSelection) {\n if (!untoggleAll && this.settings.savedData) {\n const isArray = this.settings.savedData.hasOwnProperty('length');\n if (isArray) {\n this.optionSelection = new SelectionModel(true, this.settings.savedData); // NOTE: Library-detail will break the 'x' button due to how savedData is being set to avoid state reset\n } else {\n this.optionSelection = new SelectionModel(true, [this.settings.savedData]);\n }\n this.cdRef.markForCheck();\n } else {\n this.optionSelection.selected().forEach(item => this.optionSelection.toggle(item, false));\n this.cdRef.markForCheck();\n }\n\n this.selectedData.emit(this.optionSelection.selected());\n this.resetField();\n }\n }\n\n handleOptionClick(opt: any) {\n if (this.disabled) return;\n if (!this.settings.multiple && this.optionSelection.selected().length > 0) {\n return;\n }\n\n this.toggleSelection(opt);\n\n this.resetField();\n this.onInputFocus();\n }\n\n addNewItem(title: string) {\n if (this.settings.addTransformFn == undefined || !this.settings.addIfNonExisting) {\n return;\n }\n const newItem = this.settings.addTransformFn(title);\n this.newItemAdded.emit(newItem);\n this.toggleSelection(newItem);\n\n this.resetField();\n this.onInputFocus();\n }\n\n /**\n *\n * @param item\n * @returns True if the item is NOT selected already\n */\n filterSelected(item: any) {\n if (this.settings.unique && this.settings.multiple) {\n return !this.optionSelection.isSelected(item, this.settings.selectionCompareFn);\n }\n\n return true;\n }\n\n openDropdown() {\n setTimeout(() => {\n this.typeaheadControl.setValue(this.typeaheadControl.value);\n this.hasFocus = true;\n });\n }\n\n onInputFocus(event?: any) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (this.disabled) return;\n\n if (!this.settings.multiple && this.optionSelection.selected().length > 0) {\n return;\n }\n\n if (this.inputElem) {\n // hack: To prevent multiple typeaheads from being open at once, click document then trigger the focus\n this.document.body.click();\n\n this.inputElem.nativeElement.focus();\n this.hasFocus = true;\n }\n\n\n this.openDropdown();\n }\n\n\n resetField() {\n if (this.inputElem && this.inputElem.nativeElement) {\n this.renderer2.setStyle(this.inputElem.nativeElement, 'width', 4, RendererStyleFlags2.Important);\n }\n this.typeaheadControl.setValue('');\n this.focusedIndex = 0;\n }\n\n // Updates the highlight to focus on the selected item\n updateHighlight() {\n this.document.querySelectorAll('.list-group-item').forEach((item, index) => {\n if (index === this.focusedIndex && !item.classList.contains('no-hover')) {\n // apply active class\n this.renderer2.addClass(item, 'active');\n } else {\n // remove active class\n this.renderer2.removeClass(item, 'active');\n }\n });\n }\n\n updateShowAddItem(options: any[]) {\n // ?! BUG This will still technicially allow you to add the same thing as a previously added item. (Code will just toggle it though)\n this.showAddItem = false;\n this.cdRef.markForCheck();\n if (!this.settings.addIfNonExisting) return;\n\n const inputText = this.typeaheadControl.value.trim();\n if (inputText.length < Math.max(this.settings.minCharacters, 1)) return;\n if (!this.typeaheadControl.dirty) return; // Do we need this?\n\n // Check if this new option will interfere with any existing ones not shown\n\n if (typeof this.settings.compareFnForAdd == 'function') {\n const willDuplicateExist = this.settings.compareFnForAdd(this.optionSelection.selected(), inputText);\n if (willDuplicateExist.length > 0) {\n return;\n }\n }\n\n if (typeof this.settings.compareFn == 'function') {\n // The problem here is that compareFn can report that duplicate will exist as it does contains not match\n const matches = this.settings.compareFn(options, inputText);\n if (matches.length > 0 && matches.includes(this.settings.addTransformFn(inputText))) {\n return;\n }\n }\n\n this.showAddItem = true;\n\n if (this.showAddItem) {\n this.hasFocus = true;\n }\n this.cdRef.markForCheck();\n }\n\n toggleLock(event: any) {\n if (this.disabled) return;\n this.locked = !this.locked;\n this.lockedChange.emit(this.locked);\n\n if (!this.locked) {\n this.onUnlock.emit();\n }\n }\n\n}\n", "\n
\n
\n \n \n {{t('locked-field')}}\n \n \n
\n \n \n \n \n \n
\n {{t('loading')}}\n
\n \n \n \n
\n
\n\n \n
\n
    \n
  • \n {{t('add-item', {item: typeaheadControl.value})}}\n
  • \n
  • \n \n
  • \n
  • \n {{t('no-data')}}{{this.settings.addIfNonExisting ? t('add-custom-item') : ''}}\n
  • \n
\n
\n
\n
\n\n
\n", "import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Params, Router} from '@angular/router';\nimport {SortField, SortOptions} from 'src/app/_models/metadata/series-filter';\nimport {MetadataService} from \"../../_services/metadata.service\";\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\nimport {FilterStatement} from \"../../_models/metadata/v2/filter-statement\";\nimport {FilterCombination} from \"../../_models/metadata/v2/filter-combination\";\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {TextResonse} from \"../../_types/text-response\";\nimport {environment} from \"../../../environments/environment\";\nimport {map, tap} from \"rxjs/operators\";\nimport {of, switchMap} from \"rxjs\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterUtilitiesService {\n\n private apiUrl = environment.apiUrl;\n\n constructor(private metadataService: MetadataService, private router: Router, private http: HttpClient) {}\n\n encodeFilter(filter: SeriesFilterV2 | undefined) {\n return this.http.post(this.apiUrl + 'filter/encode', filter, TextResonse);\n }\n\n decodeFilter(encodedFilter: string) {\n return this.http.post(this.apiUrl + 'filter/decode', {encodedFilter}).pipe(map(filter => {\n if (filter == null) {\n filter = this.metadataService.createDefaultFilterDto();\n filter.statements.push(this.createSeriesV2DefaultStatement());\n }\n\n return filter;\n }))\n }\n\n updateUrlFromFilter(filter: SeriesFilterV2 | undefined) {\n return this.encodeFilter(filter).pipe(tap(encodedFilter => {\n window.history.replaceState(window.location.href, '', window.location.href.split('?')[0]+ '?' + encodedFilter);\n }));\n }\n\n filterPresetsFromUrl(snapshot: ActivatedRouteSnapshot) {\n const filter = this.metadataService.createDefaultFilterDto();\n filter.statements.push(this.createSeriesV2DefaultStatement());\n if (!window.location.href.includes('?')) return of(filter);\n\n return this.decodeFilter(window.location.href.split('?')[1]);\n }\n\n /**\n * Applies and redirects to the passed page with the filter encoded\n * @param page\n * @param filter\n * @param comparison\n * @param value\n */\n applyFilter(page: Array, filter: FilterField, comparison: FilterComparison, value: string) {\n const dto = this.createSeriesV2Filter();\n dto.statements.push(this.metadataService.createDefaultFilterStatement(filter, comparison, value + ''));\n\n return this.encodeFilter(dto).pipe(switchMap(encodedFilter => {\n return this.router.navigateByUrl(page.join('/') + '?' + encodedFilter);\n }));\n }\n\n applyFilterWithParams(page: Array, filter: SeriesFilterV2, extraParams: Params) {\n return this.encodeFilter(filter).pipe(switchMap(encodedFilter => {\n let url = page.join('/') + '?' + encodedFilter;\n url += Object.keys(extraParams).map(k => `&${k}=${extraParams[k]}`).join('');\n\n return this.router.navigateByUrl(url, extraParams);\n }));\n }\n\n createSeriesV2Filter(): SeriesFilterV2 {\n return {\n combination: FilterCombination.And,\n statements: [],\n limitTo: 0,\n sortOptions: {\n isAscending: true,\n sortField: SortField.SortName\n },\n };\n }\n\n createSeriesV2DefaultStatement(): FilterStatement {\n return {\n comparison: FilterComparison.Equal,\n value: '',\n field: FilterField.SeriesName\n }\n }\n}\n"], "mappings": "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", "names": ["Action", "ActionFactoryService", "constructor", "accountService", "deviceService", "libraryActions", "seriesActions", "volumeActions", "chapterActions", "collectionTagActions", "readingListActions", "bookmarkActions", "sideNavStreamActions", "smartFilterActions", "isAdmin", "currentUser$", "subscribe", "user", "hasAdminRole", "_resetActions", "getLibraryActions", "callback", "applyCallbackToList", "getSeriesActions", "getSideNavStreamActions", "getSmartFilterActions", "getVolumeActions", "getChapterActions", "getCollectionTagActions", "getReadingListActions", "getBookmarkActions", "getMetadataFilterActions", "actions", "title", "action", "AddRuleGroup", "requiresAdmin", "children", "dummyCallback", "RemoveRuleGroup", "data", "filterSendToAction", "chapter", "Scan", "Submenu", "RefreshMetadata", "AnalyzeFiles", "Delete", "Edit", "class", "Promote", "UnPromote", "MarkAsRead", "MarkAsUnread", "AddToWantToReadList", "RemoveFromWantToReadList", "AddToReadingList", "AddToCollection", "SendTo", "dynamicList", "devices$", "pipe", "map", "devices", "d", "name", "shareReplay", "Download", "IncognitoRead", "ViewSeries", "DownloadBookmark", "MarkAsVisible", "MarkAsInvisible", "applyCallback", "length", "forEach", "childAction", "list", "a", "__spreadValues", "hasAction", "i", "\u0275\u0275inject", "AccountService", "DeviceService", "factory", "\u0275fac", "providedIn", "_ActionFactoryService", "TagBadgeCursor", "TagBadgeComponent", "constructor", "selectionMode", "Selectable", "fillStyle", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "ngContentSelectors", "_c0", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275projection", "\u0275\u0275elementEnd", "\u0275\u0275classMapInterpolate1", "\u0275\u0275property", "\u0275\u0275pureFunction3", "_c1", "NotAllowed", "Clickable", "CommonModule", "NgClass", "styles", "changeDetection", "_TagBadgeComponent", "CollectionTagService", "constructor", "httpClient", "accountService", "baseUrl", "environment", "apiUrl", "allCollections", "ownedOnly", "get", "allCollectionsForSeries", "seriesId", "updateTag", "tag", "post", "TextResonse", "promoteMultipleCollections", "tags", "promoted", "collectionIds", "updateSeriesForTag", "seriesIdsToRemove", "addByMultiple", "tagId", "seriesIds", "tagTitle", "collectionTagId", "collectionTagTitle", "tagNameExists", "name", "deleteTag", "delete", "deleteMultipleCollections", "getMalStacks", "actionListFilter", "action", "user", "canPromote", "hasAdminRole", "hasPromoteRole", "Action", "Promote", "UnPromote", "importStack", "stack", "\u0275\u0275inject", "HttpClient", "AccountService", "factory", "\u0275fac", "providedIn", "_CollectionTagService", "FilterService", "constructor", "httpClient", "baseUrl", "environment", "apiUrl", "saveFilter", "filter", "post", "getAllFilters", "get", "deleteFilter", "filterId", "delete", "\u0275\u0275inject", "HttpClient", "factory", "\u0275fac", "providedIn", "_FilterService", "PersonRole", "\u0275\u0275elementContainerStart", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "toggleLock", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "t_r4", "_r5", "option_r6", "$implicit", "toggleSelection", "\u0275\u0275elementContainer", "\u0275\u0275template", "TypeaheadComponent_ng_container_0_app_tag_badge_5_i_2_Template", "\u0275\u0275property", "badgeTemplate", "\u0275\u0275pureFunction2", "_c4", "i_r7", "disabled", "settings", "id", "\u0275\u0275classMapInterpolate1", "multiple", "i0", "_r8", "clearSelections", "stopPropagation", "TypeaheadComponent_ng_container_0_ng_container_8_button_1_Template", "selected_r9", "length", "_r10", "focusedIndex", "updateHighlight", "addNewItem", "typeaheadControl", "value", "\u0275\u0275textInterpolate1", "\u0275\u0275pureFunction1", "_c5", "option_r12", "_r11", "handleOptionClick", "index_r13", "index", "showAddItem", "optionTemplate", "\u0275\u0275textInterpolate2", "addIfNonExisting", "TypeaheadComponent_ng_container_0_ng_container_10_div_1_li_3_Template", "TypeaheadComponent_ng_container_0_ng_container_10_div_1_li_4_Template", "TypeaheadComponent_ng_container_0_ng_container_10_div_1_li_5_Template", "hasFocus", "options_r14", "trackByIdentityFn", "TypeaheadComponent_ng_container_0_ng_container_10_div_1_Template", "TypeaheadComponent_ng_container_0_ng_container_3_Template", "_r1", "onInputFocus", "TypeaheadComponent_ng_container_0_app_tag_badge_5_Template", "TypeaheadComponent_ng_container_0_input_6_Template", "TypeaheadComponent_ng_container_0_div_7_Template", "TypeaheadComponent_ng_container_0_ng_container_8_Template", "TypeaheadComponent_ng_container_0_ng_container_10_Template", "typeaheadForm", "\u0275\u0275classMapInterpolate2", "locked", "showLocked", "_c3", "optionSelection", "selected", "isLoadingOptions", "\u0275\u0275pipeBind1", "selectedData", "filteredOptions", "SelectionModel", "constructor", "selectedState", "selectedOptions", "propAccessor", "_propAccessor", "_data", "undefined", "forEach", "d", "push", "toggle", "data", "compareFn", "lookupMethod", "shallowEqual", "dataItem", "filter", "isSelected", "hasSomeSelected", "selectedCount", "map", "unselected", "peek", "a", "b", "key", "ANIMATION_SPEED", "TypeaheadComponent", "renderer2", "document", "cdRef", "reset", "ReplaySubject", "EventEmitter", "newItemAdded", "onUnlock", "lockedChange", "destroyRef", "inject", "DestroyRef", "ngOnInit", "pipe", "takeUntilDestroyed", "subscribe", "resetToEmpty", "init", "focus", "console", "error", "hasOwnProperty", "formControl", "FormControl", "FormGroup", "get", "valueChanges", "tap", "val", "inputElem", "nativeElement", "setStyle", "trim", "auditTime", "debounce", "minCharacters", "switchMap", "fetchFn", "items", "item", "filterSelected", "markForCheck", "setTimeout", "updateShowAddItem", "shareReplay", "savedData", "handleDocumentClick", "event", "target", "classList", "contains", "handleKeyPress", "KEY_CODES", "DOWN_ARROW", "RIGHT_ARROW", "Math", "min", "querySelectorAll", "UP_ARROW", "LEFT_ARROW", "max", "ENTER", "take", "opts", "preventDefault", "click", "BACKSPACE", "DELETE", "removeSelectedOption", "pop", "ESC_KEY", "opt", "selectionCompareFn", "emit", "resetField", "untoggleAll", "title", "addTransformFn", "newItem", "unique", "openDropdown", "setValue", "body", "RendererStyleFlags2", "Important", "addClass", "removeClass", "options", "inputText", "dirty", "compareFnForAdd", "matches", "includes", "\u0275\u0275directiveInject", "Renderer2", "DOCUMENT", "ChangeDetectorRef", "selectors", "contentQueries", "rf", "ctx", "dirIndex", "\u0275\u0275resolveBody", "\u0275\u0275resolveWindow", "TypeaheadComponent_ng_container_0_Template", "CommonModule", "NgClass", "NgForOf", "NgIf", "NgTemplateOutlet", "AsyncPipe", "TagBadgeComponent", "ReactiveFormsModule", "\u0275NgNoValidate", "DefaultValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "TranslocoDirective", "styles", "animation", "trigger", "state", "style", "height", "transition", "overflow", "animate", "changeDetection", "_TypeaheadComponent", "FilterUtilitiesService", "constructor", "metadataService", "router", "http", "apiUrl", "environment", "encodeFilter", "filter", "post", "TextResonse", "decodeFilter", "encodedFilter", "pipe", "map", "createDefaultFilterDto", "statements", "push", "createSeriesV2DefaultStatement", "updateUrlFromFilter", "tap", "window", "history", "replaceState", "location", "href", "split", "filterPresetsFromUrl", "snapshot", "includes", "of", "applyFilter", "page", "comparison", "value", "dto", "createSeriesV2Filter", "createDefaultFilterStatement", "switchMap", "navigateByUrl", "join", "applyFilterWithParams", "extraParams", "url", "Object", "keys", "k", "combination", "FilterCombination", "And", "limitTo", "sortOptions", "isAscending", "sortField", "SortField", "SortName", "FilterComparison", "Equal", "field", "FilterField", "SeriesName", "\u0275\u0275inject", "MetadataService", "Router", "HttpClient", "factory", "\u0275fac", "providedIn", "_FilterUtilitiesService"] }