{ "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';\r\nimport { map, Observable, shareReplay } from 'rxjs';\r\nimport { Chapter } from '../_models/chapter';\r\nimport {UserCollection} from '../_models/collection-tag';\r\nimport { Device } from '../_models/device/device';\r\nimport { Library } from '../_models/library/library';\r\nimport { ReadingList } from '../_models/reading-list';\r\nimport { Series } from '../_models/series';\r\nimport { Volume } from '../_models/volume';\r\nimport { AccountService } from './account.service';\r\nimport { DeviceService } from './device.service';\r\nimport {SideNavStream} from \"../_models/sidenav/sidenav-stream\";\r\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\r\n\r\nexport enum Action {\r\n Submenu = -1,\r\n /**\r\n * Mark entity as read\r\n */\r\n MarkAsRead = 0,\r\n /**\r\n * Mark entity as unread\r\n */\r\n MarkAsUnread = 1,\r\n /**\r\n * Invoke a Scan on Series/Library\r\n */\r\n Scan = 2,\r\n /**\r\n * Delete the entity\r\n */\r\n Delete = 3,\r\n /**\r\n * Open edit modal\r\n */\r\n Edit = 4,\r\n /**\r\n * Open details modal\r\n */\r\n Info = 5,\r\n /**\r\n * Invoke a refresh covers\r\n */\r\n RefreshMetadata = 6,\r\n /**\r\n * Download the entity\r\n */\r\n Download = 7,\r\n /**\r\n * Invoke an Analyze Files which calculates word count\r\n */\r\n AnalyzeFiles = 8,\r\n /**\r\n * Read in incognito mode aka no progress tracking\r\n */\r\n IncognitoRead = 9,\r\n /**\r\n * Add to reading list\r\n */\r\n AddToReadingList = 10,\r\n /**\r\n * Add to collection\r\n */\r\n AddToCollection = 11,\r\n /**\r\n * Essentially a download, but handled differently. Needed so card bubbles it up for handling\r\n */\r\n DownloadBookmark = 12,\r\n /**\r\n * Open Series detail page for said series\r\n */\r\n ViewSeries = 13,\r\n /**\r\n * Open the reader for entity\r\n */\r\n Read = 14,\r\n /**\r\n * Add to user's Want to Read List\r\n */\r\n AddToWantToReadList = 15,\r\n /**\r\n * Remove from user's Want to Read List\r\n */\r\n RemoveFromWantToReadList = 16,\r\n /**\r\n * Send to a device\r\n */\r\n SendTo = 17,\r\n /**\r\n * Import some data into Kavita\r\n */\r\n Import = 18,\r\n /**\r\n * Removes the Series from On Deck inclusion\r\n */\r\n RemoveFromOnDeck = 19,\r\n AddRuleGroup = 20,\r\n RemoveRuleGroup = 21,\r\n MarkAsVisible = 22,\r\n MarkAsInvisible = 23,\r\n /**\r\n * Promotes the underlying item (Reading List, Collection)\r\n */\r\n Promote = 24,\r\n UnPromote = 25\r\n}\r\n\r\n/**\r\n * Callback for an action\r\n */\r\nexport type ActionCallback = (action: ActionItem, data: T) => void;\r\nexport type ActionAllowedCallback = (action: ActionItem) => boolean;\r\n\r\nexport interface ActionItem {\r\n title: string;\r\n action: Action;\r\n callback: ActionCallback;\r\n requiresAdmin: boolean;\r\n children: Array>;\r\n /**\r\n * An optional class which applies to an item. ie) danger on a delete action\r\n */\r\n class?: string;\r\n /**\r\n * Indicates that there exists a separate list will be loaded from an API.\r\n * Rule: If using this, only one child should exist in children with the Action for dynamicList.\r\n */\r\n dynamicList?: Observable<{title: string, data: any}[]> | undefined;\r\n /**\r\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\r\n */\r\n _extra?: {title: string, data: any};\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ActionFactoryService {\r\n libraryActions: Array> = [];\r\n\r\n seriesActions: Array> = [];\r\n\r\n volumeActions: Array> = [];\r\n\r\n chapterActions: Array> = [];\r\n\r\n collectionTagActions: Array> = [];\r\n\r\n readingListActions: Array> = [];\r\n\r\n bookmarkActions: Array> = [];\r\n\r\n sideNavStreamActions: Array> = [];\r\n smartFilterActions: Array> = [];\r\n\r\n isAdmin = false;\r\n\r\n constructor(private accountService: AccountService, private deviceService: DeviceService) {\r\n this.accountService.currentUser$.subscribe((user) => {\r\n if (user) {\r\n this.isAdmin = this.accountService.hasAdminRole(user);\r\n } else {\r\n this._resetActions();\r\n return; // If user is logged out, we don't need to do anything\r\n }\r\n\r\n this._resetActions();\r\n });\r\n }\r\n\r\n getLibraryActions(callback: ActionCallback) {\r\n\t\treturn this.applyCallbackToList(this.libraryActions, callback);\r\n }\r\n\r\n getSeriesActions(callback: ActionCallback) {\r\n\t\treturn this.applyCallbackToList(this.seriesActions, callback);\r\n }\r\n\r\n getSideNavStreamActions(callback: ActionCallback) {\r\n return this.applyCallbackToList(this.sideNavStreamActions, callback);\r\n }\r\n\r\n getSmartFilterActions(callback: ActionCallback) {\r\n return this.applyCallbackToList(this.smartFilterActions, callback);\r\n }\r\n\r\n getVolumeActions(callback: ActionCallback) {\r\n\t\treturn this.applyCallbackToList(this.volumeActions, callback);\r\n }\r\n\r\n getChapterActions(callback: ActionCallback) {\r\n return this.applyCallbackToList(this.chapterActions, callback);\r\n }\r\n\r\n getCollectionTagActions(callback: ActionCallback) {\r\n\t\treturn this.applyCallbackToList(this.collectionTagActions, callback);\r\n }\r\n\r\n getReadingListActions(callback: ActionCallback) {\r\n return this.applyCallbackToList(this.readingListActions, callback);\r\n }\r\n\r\n getBookmarkActions(callback: ActionCallback) {\r\n return this.applyCallbackToList(this.bookmarkActions, callback);\r\n }\r\n\r\n getMetadataFilterActions(callback: ActionCallback) {\r\n const actions = [\r\n {title: 'add-rule-group-and', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\r\n {title: 'add-rule-group-or', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\r\n {title: 'remove-rule-group', action: Action.RemoveRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\r\n ];\r\n return this.applyCallbackToList(actions, callback);\r\n }\r\n\r\n dummyCallback(action: ActionItem, data: any) {}\r\n\r\n filterSendToAction(actions: Array>, chapter: Chapter) {\r\n // if (chapter.files.filter(f => f.format === MangaFormat.EPUB || f.format === MangaFormat.PDF).length !== chapter.files.length) {\r\n // // Remove Send To as it doesn't apply\r\n // return actions.filter(item => item.title !== 'Send To');\r\n // }\r\n return actions;\r\n }\r\n\r\n private _resetActions() {\r\n this.libraryActions = [\r\n {\r\n action: Action.Scan,\r\n title: 'scan-library',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'others',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [\r\n {\r\n action: Action.RefreshMetadata,\r\n title: 'refresh-covers',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.AnalyzeFiles,\r\n title: 'analyze-files',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'settings',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.collectionTagActions = [\r\n {\r\n action: Action.Edit,\r\n title: 'edit',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n class: 'danger',\r\n children: [],\r\n },\r\n {\r\n action: Action.Promote,\r\n title: 'promote',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.UnPromote,\r\n title: 'unpromote',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.seriesActions = [\r\n {\r\n action: Action.MarkAsRead,\r\n title: 'mark-as-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsUnread,\r\n title: 'mark-as-unread',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Scan,\r\n title: 'scan-series',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'add-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n \t{\r\n action: Action.AddToWantToReadList,\r\n title: 'add-to-want-to-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.RemoveFromWantToReadList,\r\n title: 'remove-from-want-to-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.AddToReadingList,\r\n title: 'add-to-reading-list',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.AddToCollection,\r\n title: 'add-to-collection',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'send-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n {\r\n action: Action.SendTo,\r\n title: '',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\r\n return {'title': d.name, 'data': d};\r\n }), shareReplay())),\r\n children: []\r\n }\r\n ],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'others',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [\r\n {\r\n action: Action.RefreshMetadata,\r\n title: 'refresh-covers',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.AnalyzeFiles,\r\n title: 'analyze-files',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n class: 'danger',\r\n children: [],\r\n },\r\n ],\r\n },\r\n {\r\n action: Action.Download,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'edit',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.volumeActions = [\r\n {\r\n action: Action.IncognitoRead,\r\n title: 'read-incognito',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsRead,\r\n title: 'mark-as-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsUnread,\r\n title: 'mark-as-unread',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n\t\t\t{\r\n\t\t\t\taction: Action.Submenu,\r\n\t\t\t\ttitle: 'add-to',\r\n\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\trequiresAdmin: false,\r\n\t\t\t\tchildren: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taction: Action.AddToReadingList,\r\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\r\n\t\t\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\t\t\trequiresAdmin: false,\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n {\r\n action: Action.Submenu,\r\n title: 'send-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n {\r\n action: Action.SendTo,\r\n title: '',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\r\n return {'title': d.name, 'data': d};\r\n }), shareReplay())),\r\n children: []\r\n }\r\n ],\r\n },\r\n {\r\n action: Action.Download,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'details',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.chapterActions = [\r\n {\r\n action: Action.IncognitoRead,\r\n title: 'read-incognito',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsRead,\r\n title: 'mark-as-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsUnread,\r\n title: 'mark-as-unread',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n\t\t\t{\r\n\t\t\t\taction: Action.Submenu,\r\n\t\t\t\ttitle: 'add-to',\r\n\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\trequiresAdmin: false,\r\n\t\t\t\tchildren: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taction: Action.AddToReadingList,\r\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\r\n\t\t\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\t\t\trequiresAdmin: false,\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n {\r\n action: Action.Submenu,\r\n title: 'send-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n {\r\n action: Action.SendTo,\r\n title: '',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\r\n return {'title': d.name, 'data': d};\r\n }), shareReplay())),\r\n children: []\r\n }\r\n ],\r\n },\r\n // RBS will handle rendering this, so non-admins with download are applicable\r\n {\r\n action: Action.Download,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'details',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.readingListActions = [\r\n {\r\n action: Action.Edit,\r\n title: 'edit',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n class: 'danger',\r\n children: [],\r\n },\r\n {\r\n action: Action.Promote,\r\n title: 'promote',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.UnPromote,\r\n title: 'unpromote',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.bookmarkActions = [\r\n {\r\n action: Action.ViewSeries,\r\n title: 'view-series',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.DownloadBookmark,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'clear',\r\n callback: this.dummyCallback,\r\n class: 'danger',\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.sideNavStreamActions = [\r\n {\r\n action: Action.MarkAsVisible,\r\n title: 'mark-visible',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsInvisible,\r\n title: 'mark-invisible',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.smartFilterActions = [\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n }\r\n\r\n private applyCallback(action: ActionItem, callback: (action: ActionItem, data: any) => void) {\r\n action.callback = callback;\r\n\r\n if (action.children === null || action.children?.length === 0) return;\r\n\r\n action.children?.forEach((childAction) => {\r\n this.applyCallback(childAction, callback);\r\n });\r\n }\r\n\r\n\tpublic applyCallbackToList(list: Array>, callback: (action: ActionItem, data: any) => void): Array> {\r\n\t\tconst actions = list.map((a) => {\r\n\t\t\treturn { ...a };\r\n\t\t});\r\n\t\tactions.forEach((action) => this.applyCallback(action, callback));\r\n\t\treturn actions;\r\n\t}\r\n\r\n // Checks the whole tree for the action and returns true if it exists\r\n public hasAction(actions: Array>, action: Action) {\r\n if (actions.length === 0) return false;\r\n\r\n for (let i = 0; i < actions.length; i++)\r\n {\r\n if (actions[i].action === action) return true;\r\n if (this.hasAction(actions[i].children, action)) return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n", "import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\n/**\r\n * What type of cursor to apply to the tag badge\r\n */\r\nexport enum TagBadgeCursor {\r\n /**\r\n * Allows the user to select text\r\n * cursor: default\r\n */\r\n Selectable,\r\n /**\r\n * Informs the user they can click and interact with badge\r\n * cursor: pointer\r\n */\r\n Clickable,\r\n /**\r\n * Informs the user they cannot click or interact with badge\r\n * cursor: not-allowed\r\n */\r\n NotAllowed,\r\n}\r\n\r\n@Component({\r\n selector: 'app-tag-badge',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tag-badge.component.html',\r\n styleUrls: ['./tag-badge.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TagBadgeComponent {\r\n\r\n @Input() selectionMode: TagBadgeCursor = TagBadgeCursor.Selectable;\r\n @Input() fillStyle: 'filled' | 'outline' = 'outline';\r\n\r\n get TagBadgeCursor() {\r\n return TagBadgeCursor;\r\n }\r\n}\r\n", "
\r\n \r\n
", "import {HttpClient} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {environment} from 'src/environments/environment';\r\nimport {UserCollection} from '../_models/collection-tag';\r\nimport {TextResonse} from '../_types/text-response';\r\nimport {MalStack} from \"../_models/collection/mal-stack\";\r\nimport {Action, ActionItem} from \"./action-factory.service\";\r\nimport {User} from \"../_models/user\";\r\nimport {AccountService} from \"./account.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CollectionTagService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient, private accountService: AccountService) { }\r\n\r\n allCollections(ownedOnly = false) {\r\n return this.httpClient.get(this.baseUrl + 'collection?ownedOnly=' + ownedOnly);\r\n }\r\n\r\n allCollectionsForSeries(seriesId: number, ownedOnly = false) {\r\n return this.httpClient.get(this.baseUrl + 'collection/all-series?ownedOnly=' + ownedOnly + '&seriesId=' + seriesId);\r\n }\r\n\r\n updateTag(tag: UserCollection) {\r\n return this.httpClient.post(this.baseUrl + 'collection/update', tag, TextResonse);\r\n }\r\n\r\n promoteMultipleCollections(tags: Array, promoted: boolean) {\r\n return this.httpClient.post(this.baseUrl + 'collection/promote-multiple', {collectionIds: tags, promoted}, TextResonse);\r\n }\r\n\r\n updateSeriesForTag(tag: UserCollection, seriesIdsToRemove: Array) {\r\n return this.httpClient.post(this.baseUrl + 'collection/update-series', {tag, seriesIdsToRemove}, TextResonse);\r\n }\r\n\r\n addByMultiple(tagId: number, seriesIds: Array, tagTitle: string = '') {\r\n return this.httpClient.post(this.baseUrl + 'collection/update-for-series', {collectionTagId: tagId, collectionTagTitle: tagTitle, seriesIds}, TextResonse);\r\n }\r\n\r\n tagNameExists(name: string) {\r\n return this.httpClient.get(this.baseUrl + 'collection/name-exists?name=' + name);\r\n }\r\n\r\n deleteTag(tagId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'collection?tagId=' + tagId, TextResonse);\r\n }\r\n\r\n deleteMultipleCollections(tags: Array) {\r\n return this.httpClient.post(this.baseUrl + 'collection/delete-multiple', {collectionIds: tags}, TextResonse);\r\n }\r\n\r\n getMalStacks() {\r\n return this.httpClient.get>(this.baseUrl + 'collection/mal-stacks');\r\n }\r\n\r\n actionListFilter(action: ActionItem, user: User) {\r\n const canPromote = this.accountService.hasAdminRole(user) || this.accountService.hasPromoteRole(user);\r\n const isPromotionAction = action.action == Action.Promote || action.action == Action.UnPromote;\r\n\r\n if (isPromotionAction) return canPromote;\r\n return true;\r\n }\r\n\r\n importStack(stack: MalStack) {\r\n return this.httpClient.post(this.baseUrl + 'collection/import-stack', stack, TextResonse);\r\n }\r\n}\r\n", "import { Injectable } from '@angular/core';\r\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\r\nimport {environment} from \"../../environments/environment\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {JumpKey} from \"../_models/jumpbar/jump-key\";\r\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FilterService {\r\n\r\n baseUrl = environment.apiUrl;\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n saveFilter(filter: SeriesFilterV2) {\r\n return this.httpClient.post(this.baseUrl + 'filter/update', filter);\r\n }\r\n getAllFilters() {\r\n return this.httpClient.get>(this.baseUrl + 'filter');\r\n }\r\n deleteFilter(filterId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'filter?filterId=' + filterId);\r\n }\r\n\r\n}\r\n", "export enum PersonRole {\r\n Other = 1,\r\n Artist = 2,\r\n Writer = 3,\r\n Penciller = 4,\r\n Inker = 5,\r\n Colorist = 6,\r\n Letterer = 7,\r\n CoverArtist = 8,\r\n Editor = 9,\r\n Publisher = 10,\r\n Character = 11,\r\n Translator = 12,\r\n Imprint = 13,\r\n Team = 14,\r\n Location = 15\r\n}\r\n\r\nexport interface Person {\r\n id: number;\r\n name: string;\r\n role: PersonRole;\r\n}\r\n", "import { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport {CommonModule, DOCUMENT} from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild, DestroyRef,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n RendererStyleFlags2,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport { Observable, ReplaySubject } from 'rxjs';\r\nimport { auditTime, filter, map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { KEY_CODES } from 'src/app/shared/_services/utility.service';\r\nimport { SelectionCompareFn, TypeaheadSettings } from '../_models/typeahead-settings';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {TagBadgeComponent} from \"../../shared/tag-badge/tag-badge.component\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n\r\n/**\r\n * SelectionModel is used for keeping track of multiple selections. Simple interface with ability to toggle.\r\n * @param selectedState Optional state to set selectedOptions to. If not passed, defaults to false.\r\n * @param selectedOptions Optional data elements to inform the SelectionModel of. If not passed, as toggle() occur, items are tracked.\r\n * @param propAccessor Optional string that points to a unique field within the T type. Used for quickly looking up.\r\n */\r\nexport class SelectionModel {\r\n _data!: Array<{value: T, selected: boolean}>;\r\n _propAccessor: string = '';\r\n\r\n constructor(selectedState: boolean = false, selectedOptions: Array = [], propAccessor: string = '') {\r\n this._data = [];\r\n\r\n if (propAccessor != undefined || propAccessor !== '') {\r\n this._propAccessor = propAccessor;\r\n }\r\n\r\n selectedOptions.forEach(d => {\r\n this._data.push({value: d, selected: selectedState});\r\n });\r\n }\r\n\r\n /**\r\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.\r\n * @param data Item to toggle\r\n * @param selectedState Force the state\r\n * @param compareFn An optional function to use for the lookup, else will use shallowEqual implementation\r\n */\r\n toggle(data: T, selectedState?: boolean, compareFn?: SelectionCompareFn) {\r\n let lookupMethod = this.shallowEqual;\r\n if (compareFn != undefined || compareFn != null) {\r\n lookupMethod = compareFn;\r\n }\r\n\r\n const dataItem = this._data.filter(d => lookupMethod(d.value, data));\r\n if (dataItem.length > 0) {\r\n if (selectedState != undefined) {\r\n dataItem[0].selected = selectedState;\r\n } else {\r\n dataItem[0].selected = !dataItem[0].selected;\r\n }\r\n } else {\r\n this._data.push({value: data, selected: (selectedState === undefined ? true : selectedState)});\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Is the passed item selected\r\n * @param data item to check against\r\n * @param compareFn optional method to use to perform comparisons\r\n * @returns boolean\r\n */\r\n isSelected(data: T, compareFn?: SelectionCompareFn): boolean {\r\n let lookupMethod = this.shallowEqual;\r\n if (compareFn != undefined || compareFn != null) {\r\n lookupMethod = compareFn;\r\n }\r\n\r\n const dataItem = this._data.filter(d => lookupMethod(d.value, data));\r\n\r\n if (dataItem.length > 0) {\r\n return dataItem[0].selected;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n *\r\n * @returns If some of the items are selected, but not all\r\n */\r\n hasSomeSelected(): boolean {\r\n const selectedCount = this._data.filter(d => d.selected).length;\r\n return (selectedCount !== this._data.length && selectedCount !== 0)\r\n }\r\n\r\n /**\r\n *\r\n * @returns All Selected items\r\n */\r\n selected(): Array {\r\n return this._data.filter(d => d.selected).map(d => d.value);\r\n }\r\n\r\n /**\r\n *\r\n * @returns All Non-Selected items\r\n */\r\n unselected(): Array {\r\n return this._data.filter(d => !d.selected).map(d => d.value);\r\n }\r\n\r\n /**\r\n *\r\n * @returns Last element added/tracked or undefined if nothing is tracked\r\n */\r\n peek(): T | undefined {\r\n if (this._data.length > 0) {\r\n return this._data[this._data.length - 1].value;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n shallowEqual(a: T, b: T) {\r\n\r\n for (let key in a) {\r\n if (!(key in b) || a[key] !== b[key]) {\r\n return false;\r\n }\r\n }\r\n for (let key in b) {\r\n if (!(key in a)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nconst ANIMATION_SPEED = 200;\r\n\r\n@Component({\r\n selector: 'app-typeahead',\r\n standalone: true,\r\n imports: [CommonModule, TagBadgeComponent, ReactiveFormsModule, TranslocoDirective],\r\n templateUrl: './typeahead.component.html',\r\n styleUrls: ['./typeahead.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('slideFromTop', [\r\n state('in', style({ height: '0px'})),\r\n transition('void => *', [\r\n style({ height: '100%', overflow: 'auto' }),\r\n animate(ANIMATION_SPEED)\r\n ]),\r\n transition('* => void', [\r\n animate(ANIMATION_SPEED, style({ height: '0px' })),\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class TypeaheadComponent implements OnInit {\r\n /**\r\n * Settings for the typeahead\r\n */\r\n @Input({required: true}) settings!: TypeaheadSettings;\r\n /**\r\n * When true, will reset field to no selections. When false, will reset to saved data\r\n */\r\n @Input() reset: ReplaySubject = new ReplaySubject(1);\r\n /**\r\n * When a field is locked, we render custom css to indicate to the user. Does not affect functionality.\r\n */\r\n @Input() locked: boolean = false;\r\n /**\r\n * If disabled, a user will not be able to interact with the typeahead\r\n */\r\n @Input() disabled: boolean = false;\r\n /**\r\n * When triggered, will focus the input if the passed string matches the id\r\n */\r\n @Input() focus: EventEmitter | undefined;\r\n @Output() selectedData = new EventEmitter();\r\n @Output() newItemAdded = new EventEmitter();\r\n @Output() onUnlock = new EventEmitter();\r\n @Output() lockedChange = new EventEmitter();\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n\r\n @ViewChild('input') inputElem!: ElementRef;\r\n @ContentChild('optionItem') optionTemplate!: TemplateRef;\r\n @ContentChild('badgeItem') badgeTemplate!: TemplateRef;\r\n\r\n optionSelection!: SelectionModel;\r\n\r\n hasFocus = false; // Whether input has active focus\r\n focusedIndex: number = 0;\r\n showAddItem: boolean = false;\r\n filteredOptions!: Observable;\r\n isLoadingOptions: boolean = false;\r\n typeaheadControl!: FormControl;\r\n typeaheadForm!: FormGroup;\r\n\r\n constructor(private renderer2: Renderer2, @Inject(DOCUMENT) private document: Document, private readonly cdRef: ChangeDetectorRef) { }\r\n\r\n ngOnInit() {\r\n this.reset.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((resetToEmpty: boolean) => {\r\n this.clearSelections(resetToEmpty);\r\n this.init();\r\n });\r\n\r\n if (this.focus) {\r\n this.focus.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((id: string) => {\r\n if (this.settings.id !== id) return;\r\n this.onInputFocus();\r\n });\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.settings.compareFn === undefined && this.settings.multiple) {\r\n console.error('A compare function must be defined');\r\n return;\r\n }\r\n\r\n if (this.settings.trackByIdentityFn === undefined) {\r\n this.settings.trackByIdentityFn = (index, value) => value;\r\n }\r\n\r\n if (this.settings.hasOwnProperty('formControl') && this.settings.formControl) {\r\n this.typeaheadControl = this.settings.formControl;\r\n } else {\r\n this.typeaheadControl = new FormControl('');\r\n }\r\n this.typeaheadForm = new FormGroup({\r\n 'typeahead': this.typeaheadControl\r\n });\r\n\r\n this.filteredOptions = this.typeaheadForm.get('typeahead')!.valueChanges\r\n .pipe(\r\n // Adjust input box to grow\r\n tap((val: string) => {\r\n if (this.inputElem != null && this.inputElem.nativeElement != null) {\r\n this.renderer2.setStyle(this.inputElem.nativeElement, 'width', 15 * (val.trim().length + 1) + 'px');\r\n this.focusedIndex = 0;\r\n }\r\n }),\r\n map((val: string) => val.trim()),\r\n auditTime(this.settings.debounce),\r\n //distinctUntilChanged(), // ?!: BUG Doesn't trigger the search to run when filtered array changes\r\n filter((val: string) => {\r\n // If minimum filter characters not met, do not filter\r\n if (this.settings.minCharacters === 0) return true;\r\n\r\n if (!val || val.length < this.settings.minCharacters) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }),\r\n\r\n switchMap((val: string) => {\r\n this.isLoadingOptions = true;\r\n return this.settings.fetchFn(val.trim()).pipe(takeUntilDestroyed(this.destroyRef), map((items: any[]) => items.filter(item => this.filterSelected(item))));\r\n }),\r\n tap((filteredOptions: any[]) => {\r\n this.isLoadingOptions = false;\r\n this.focusedIndex = 0;\r\n this.cdRef.markForCheck();\r\n setTimeout(() => {\r\n this.updateShowAddItem(filteredOptions);\r\n this.updateHighlight();\r\n }, 10);\r\n setTimeout(() => this.updateHighlight(), 20);\r\n\r\n }),\r\n shareReplay(),\r\n takeUntilDestroyed(this.destroyRef)\r\n );\r\n\r\n\r\n if (this.settings.savedData) {\r\n if (this.settings.multiple) {\r\n this.optionSelection = new SelectionModel(true, this.settings.savedData);\r\n }\r\n else {\r\n const isArray = this.settings.savedData.hasOwnProperty('length');\r\n if (isArray) {\r\n this.optionSelection = new SelectionModel(true, this.settings.savedData);\r\n } else {\r\n this.optionSelection = new SelectionModel(true, [this.settings.savedData]);\r\n }\r\n }\r\n } else {\r\n this.optionSelection = new SelectionModel();\r\n }\r\n }\r\n\r\n\r\n @HostListener('body:click', ['$event'])\r\n handleDocumentClick(event: any) {\r\n // Don't close the typeahead when we select an item from it\r\n if (event.target && (event.target as HTMLElement).classList.contains('list-group-item')) {\r\n return;\r\n }\r\n this.hasFocus = false;\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n handleKeyPress(event: KeyboardEvent) {\r\n if (!this.hasFocus) { return; }\r\n if (this.disabled) return;\r\n\r\n switch(event.key) {\r\n case KEY_CODES.DOWN_ARROW:\r\n case KEY_CODES.RIGHT_ARROW:\r\n {\r\n this.focusedIndex = Math.min(this.focusedIndex + 1, this.document.querySelectorAll('.list-group-item').length - 1);\r\n this.updateHighlight();\r\n break;\r\n }\r\n case KEY_CODES.UP_ARROW:\r\n case KEY_CODES.LEFT_ARROW:\r\n {\r\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\r\n this.updateHighlight();\r\n break;\r\n }\r\n case KEY_CODES.ENTER:\r\n {\r\n this.document.querySelectorAll('.list-group-item').forEach((item, index) => {\r\n if (item.classList.contains('active')) {\r\n this.filteredOptions.pipe(take(1)).subscribe((opts: any[]) => {\r\n // This isn't giving back the filtered array, but everything\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n (item as HTMLElement).click();\r\n this.focusedIndex = 0;\r\n });\r\n }\r\n });\r\n break;\r\n }\r\n case KEY_CODES.BACKSPACE:\r\n case KEY_CODES.DELETE:\r\n {\r\n if (this.typeaheadControl.value !== null && this.typeaheadControl.value !== undefined && this.typeaheadControl.value.trim() !== '') {\r\n break;\r\n }\r\n const selected = this.optionSelection.selected();\r\n if (selected.length > 0) {\r\n this.removeSelectedOption(selected.pop());\r\n }\r\n break;\r\n }\r\n case KEY_CODES.ESC_KEY:\r\n this.hasFocus = false;\r\n event.stopPropagation();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n toggleSelection(opt: any): void {\r\n this.optionSelection.toggle(opt, undefined, this.settings.selectionCompareFn);\r\n this.selectedData.emit(this.optionSelection.selected());\r\n }\r\n\r\n removeSelectedOption(opt: any) {\r\n this.optionSelection.toggle(opt, undefined, this.settings.selectionCompareFn);\r\n this.selectedData.emit(this.optionSelection.selected());\r\n this.resetField();\r\n }\r\n\r\n clearSelections(untoggleAll: boolean = false) {\r\n if (this.optionSelection) {\r\n if (!untoggleAll && this.settings.savedData) {\r\n const isArray = this.settings.savedData.hasOwnProperty('length');\r\n if (isArray) {\r\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\r\n } else {\r\n this.optionSelection = new SelectionModel(true, [this.settings.savedData]);\r\n }\r\n this.cdRef.markForCheck();\r\n } else {\r\n this.optionSelection.selected().forEach(item => this.optionSelection.toggle(item, false));\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n this.selectedData.emit(this.optionSelection.selected());\r\n this.resetField();\r\n }\r\n }\r\n\r\n handleOptionClick(opt: any) {\r\n if (this.disabled) return;\r\n if (!this.settings.multiple && this.optionSelection.selected().length > 0) {\r\n return;\r\n }\r\n\r\n this.toggleSelection(opt);\r\n\r\n this.resetField();\r\n this.onInputFocus();\r\n }\r\n\r\n addNewItem(title: string) {\r\n if (this.settings.addTransformFn == undefined || !this.settings.addIfNonExisting) {\r\n return;\r\n }\r\n const newItem = this.settings.addTransformFn(title);\r\n this.newItemAdded.emit(newItem);\r\n this.toggleSelection(newItem);\r\n\r\n this.resetField();\r\n this.onInputFocus();\r\n }\r\n\r\n /**\r\n *\r\n * @param item\r\n * @returns True if the item is NOT selected already\r\n */\r\n filterSelected(item: any) {\r\n if (this.settings.unique && this.settings.multiple) {\r\n return !this.optionSelection.isSelected(item, this.settings.selectionCompareFn);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n openDropdown() {\r\n setTimeout(() => {\r\n this.typeaheadControl.setValue(this.typeaheadControl.value);\r\n this.hasFocus = true;\r\n });\r\n }\r\n\r\n onInputFocus(event?: any) {\r\n if (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n if (this.disabled) return;\r\n\r\n if (!this.settings.multiple && this.optionSelection.selected().length > 0) {\r\n return;\r\n }\r\n\r\n if (this.inputElem) {\r\n // hack: To prevent multiple typeaheads from being open at once, click document then trigger the focus\r\n this.document.body.click();\r\n\r\n this.inputElem.nativeElement.focus();\r\n this.hasFocus = true;\r\n }\r\n\r\n\r\n this.openDropdown();\r\n }\r\n\r\n\r\n resetField() {\r\n if (this.inputElem && this.inputElem.nativeElement) {\r\n this.renderer2.setStyle(this.inputElem.nativeElement, 'width', 4, RendererStyleFlags2.Important);\r\n }\r\n this.typeaheadControl.setValue('');\r\n this.focusedIndex = 0;\r\n }\r\n\r\n // Updates the highlight to focus on the selected item\r\n updateHighlight() {\r\n this.document.querySelectorAll('.list-group-item').forEach((item, index) => {\r\n if (index === this.focusedIndex && !item.classList.contains('no-hover')) {\r\n // apply active class\r\n this.renderer2.addClass(item, 'active');\r\n } else {\r\n // remove active class\r\n this.renderer2.removeClass(item, 'active');\r\n }\r\n });\r\n }\r\n\r\n updateShowAddItem(options: any[]) {\r\n // ?! BUG This will still technicially allow you to add the same thing as a previously added item. (Code will just toggle it though)\r\n this.showAddItem = false;\r\n this.cdRef.markForCheck();\r\n if (!this.settings.addIfNonExisting) return;\r\n\r\n const inputText = this.typeaheadControl.value.trim();\r\n if (inputText.length < Math.max(this.settings.minCharacters, 1)) return;\r\n if (!this.typeaheadControl.dirty) return; // Do we need this?\r\n\r\n // Check if this new option will interfere with any existing ones not shown\r\n\r\n if (typeof this.settings.compareFnForAdd == 'function') {\r\n const willDuplicateExist = this.settings.compareFnForAdd(this.optionSelection.selected(), inputText);\r\n if (willDuplicateExist.length > 0) {\r\n return;\r\n }\r\n }\r\n\r\n if (typeof this.settings.compareFn == 'function') {\r\n // The problem here is that compareFn can report that duplicate will exist as it does contains not match\r\n const matches = this.settings.compareFn(options, inputText);\r\n if (matches.length > 0 && matches.includes(this.settings.addTransformFn(inputText))) {\r\n return;\r\n }\r\n }\r\n\r\n this.showAddItem = true;\r\n\r\n if (this.showAddItem) {\r\n this.hasFocus = true;\r\n }\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n toggleLock(event: any) {\r\n if (this.disabled) return;\r\n this.locked = !this.locked;\r\n this.lockedChange.emit(this.locked);\r\n\r\n if (!this.locked) {\r\n this.onUnlock.emit();\r\n }\r\n }\r\n\r\n}\r\n", "\r\n
\r\n
\r\n \r\n \r\n {{t('locked-field')}}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{t('loading')}}\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
    \r\n
  • \r\n {{t('add-item', {item: typeaheadControl.value})}}\r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n {{t('no-data')}}{{this.settings.addIfNonExisting ? t('add-custom-item') : ''}}\r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n", "import {Injectable} from '@angular/core';\r\nimport {ActivatedRouteSnapshot, Params, Router} from '@angular/router';\r\nimport {SortField, SortOptions} from 'src/app/_models/metadata/series-filter';\r\nimport {MetadataService} from \"../../_services/metadata.service\";\r\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\r\nimport {FilterStatement} from \"../../_models/metadata/v2/filter-statement\";\r\nimport {FilterCombination} from \"../../_models/metadata/v2/filter-combination\";\r\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\r\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {TextResonse} from \"../../_types/text-response\";\r\nimport {environment} from \"../../../environments/environment\";\r\nimport {map, tap} from \"rxjs/operators\";\r\nimport {of, switchMap} from \"rxjs\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FilterUtilitiesService {\r\n\r\n private apiUrl = environment.apiUrl;\r\n\r\n constructor(private metadataService: MetadataService, private router: Router, private http: HttpClient) {}\r\n\r\n encodeFilter(filter: SeriesFilterV2 | undefined) {\r\n return this.http.post(this.apiUrl + 'filter/encode', filter, TextResonse);\r\n }\r\n\r\n decodeFilter(encodedFilter: string) {\r\n return this.http.post(this.apiUrl + 'filter/decode', {encodedFilter}).pipe(map(filter => {\r\n if (filter == null) {\r\n filter = this.metadataService.createDefaultFilterDto();\r\n filter.statements.push(this.createSeriesV2DefaultStatement());\r\n }\r\n\r\n return filter;\r\n }))\r\n }\r\n\r\n updateUrlFromFilter(filter: SeriesFilterV2 | undefined) {\r\n return this.encodeFilter(filter).pipe(tap(encodedFilter => {\r\n window.history.replaceState(window.location.href, '', window.location.href.split('?')[0]+ '?' + encodedFilter);\r\n }));\r\n }\r\n\r\n filterPresetsFromUrl(snapshot: ActivatedRouteSnapshot) {\r\n const filter = this.metadataService.createDefaultFilterDto();\r\n filter.statements.push(this.createSeriesV2DefaultStatement());\r\n if (!window.location.href.includes('?')) return of(filter);\r\n\r\n return this.decodeFilter(window.location.href.split('?')[1]);\r\n }\r\n\r\n /**\r\n * Applies and redirects to the passed page with the filter encoded\r\n * @param page\r\n * @param filter\r\n * @param comparison\r\n * @param value\r\n */\r\n applyFilter(page: Array, filter: FilterField, comparison: FilterComparison, value: string) {\r\n const dto = this.createSeriesV2Filter();\r\n dto.statements.push(this.metadataService.createDefaultFilterStatement(filter, comparison, value + ''));\r\n\r\n return this.encodeFilter(dto).pipe(switchMap(encodedFilter => {\r\n return this.router.navigateByUrl(page.join('/') + '?' + encodedFilter);\r\n }));\r\n }\r\n\r\n applyFilterWithParams(page: Array, filter: SeriesFilterV2, extraParams: Params) {\r\n return this.encodeFilter(filter).pipe(switchMap(encodedFilter => {\r\n let url = page.join('/') + '?' + encodedFilter;\r\n url += Object.keys(extraParams).map(k => `&${k}=${extraParams[k]}`).join('');\r\n\r\n return this.router.navigateByUrl(url, extraParams);\r\n }));\r\n }\r\n\r\n createSeriesV2Filter(): SeriesFilterV2 {\r\n return {\r\n combination: FilterCombination.And,\r\n statements: [],\r\n limitTo: 0,\r\n sortOptions: {\r\n isAscending: true,\r\n sortField: SortField.SortName\r\n },\r\n };\r\n }\r\n\r\n createSeriesV2DefaultStatement(): FilterStatement {\r\n return {\r\n comparison: FilterComparison.Equal,\r\n value: '',\r\n field: FilterField.SeriesName\r\n }\r\n }\r\n}\r\n"], "mappings": "g7BAcA,IAAYA,EAAZ,SAAYA,EAAM,CAChBA,OAAAA,EAAAA,EAAA,QAAA,EAAA,EAAA,UAIAA,EAAAA,EAAA,WAAA,CAAA,EAAA,aAIAA,EAAAA,EAAA,aAAA,CAAA,EAAA,eAIAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OAIAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SAIAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OAIAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OAIAA,EAAAA,EAAA,gBAAA,CAAA,EAAA,kBAIAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WAIAA,EAAAA,EAAA,aAAA,CAAA,EAAA,eAIAA,EAAAA,EAAA,cAAA,CAAA,EAAA,gBAIAA,EAAAA,EAAA,iBAAA,EAAA,EAAA,mBAIAA,EAAAA,EAAA,gBAAA,EAAA,EAAA,kBAIAA,EAAAA,EAAA,iBAAA,EAAA,EAAA,mBAIAA,EAAAA,EAAA,WAAA,EAAA,EAAA,aAIAA,EAAAA,EAAA,KAAA,EAAA,EAAA,OAIAA,EAAAA,EAAA,oBAAA,EAAA,EAAA,sBAIAA,EAAAA,EAAA,yBAAA,EAAA,EAAA,2BAIAA,EAAAA,EAAA,OAAA,EAAA,EAAA,SAIAA,EAAAA,EAAA,OAAA,EAAA,EAAA,SAIAA,EAAAA,EAAA,iBAAA,EAAA,EAAA,mBACAA,EAAAA,EAAA,aAAA,EAAA,EAAA,eACAA,EAAAA,EAAA,gBAAA,EAAA,EAAA,kBACAA,EAAAA,EAAA,cAAA,EAAA,EAAA,gBACAA,EAAAA,EAAA,gBAAA,EAAA,EAAA,kBAIAA,EAAAA,EAAA,QAAA,EAAA,EAAA,UACAA,EAAAA,EAAA,UAAA,EAAA,EAAA,YA1FUA,CA2FZ,EA3FYA,GAAM,CAAA,CAAA,EA2HLC,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,CAoB/BC,YAAoBC,EAAwCC,EAA4B,CAApE,KAAAD,eAAAA,EAAwC,KAAAC,cAAAA,EAnB5D,KAAAC,eAA6C,CAAA,EAE7C,KAAAC,cAA2C,CAAA,EAE3C,KAAAC,cAA2C,CAAA,EAE3C,KAAAC,eAA6C,CAAA,EAE7C,KAAAC,qBAA0D,CAAA,EAE1D,KAAAC,mBAAqD,CAAA,EAErD,KAAAC,gBAA6C,CAAA,EAE7C,KAAAC,qBAAyD,CAAA,EACzD,KAAAC,mBAAqD,CAAA,EAErD,KAAAC,QAAU,GAGR,KAAKX,eAAeY,aAAaC,UAAWC,GAAQ,CAClD,GAAIA,EACF,KAAKH,QAAU,KAAKX,eAAee,aAAaD,CAAI,MAC/C,CACL,KAAKE,cAAa,EAClB,MACF,CAEA,KAAKA,cAAa,CACpB,CAAC,CACH,CAEAC,kBAAkBC,EAAiC,CACnD,OAAO,KAAKC,oBAAoB,KAAKjB,eAAgBgB,CAAQ,CAC7D,CAEAE,iBAAiBF,EAAgC,CACjD,OAAO,KAAKC,oBAAoB,KAAKhB,cAAee,CAAQ,CAC5D,CAEAG,wBAAwBH,EAAuC,CAC7D,OAAO,KAAKC,oBAAoB,KAAKV,qBAAsBS,CAAQ,CACrE,CAEAI,sBAAsBJ,EAAqC,CACzD,OAAO,KAAKC,oBAAoB,KAAKT,mBAAoBQ,CAAQ,CACnE,CAEAK,iBAAiBL,EAAgC,CACjD,OAAO,KAAKC,oBAAoB,KAAKf,cAAec,CAAQ,CAC5D,CAEAM,kBAAkBN,EAAiC,CACjD,OAAO,KAAKC,oBAAoB,KAAKd,eAAgBa,CAAQ,CAC/D,CAEAO,wBAAwBP,EAAwC,CAChE,OAAQ,KAAKC,oBAAoB,KAAKb,qBAAsBY,CAAQ,CACpE,CAEAQ,sBAAsBR,EAAqC,CACzD,OAAO,KAAKC,oBAAoB,KAAKZ,mBAAoBW,CAAQ,CACnE,CAEAS,mBAAmBT,EAAgC,CACjD,OAAO,KAAKC,oBAAoB,KAAKX,gBAAiBU,CAAQ,CAChE,CAEAU,yBAAyBV,EAA6B,CACpD,IAAMW,EAAU,CACd,CAACC,MAAO,qBAAsBC,OAAQlC,EAAOmC,aAAcC,cAAe,GAAOC,SAAU,CAAA,EAAIhB,SAAU,KAAKiB,aAAa,EAC3H,CAACL,MAAO,oBAAqBC,OAAQlC,EAAOmC,aAAcC,cAAe,GAAOC,SAAU,CAAA,EAAIhB,SAAU,KAAKiB,aAAa,EAC1H,CAACL,MAAO,oBAAqBC,OAAQlC,EAAOuC,gBAAiBH,cAAe,GAAOC,SAAU,CAAA,EAAIhB,SAAU,KAAKiB,aAAa,CAAC,EAEhI,OAAO,KAAKhB,oBAAoBU,EAASX,CAAQ,CACnD,CAEAiB,cAAcJ,EAAyBM,EAAS,CAAG,CAEnDC,mBAAmBT,EAAqCU,EAAgB,CAKtE,OAAOV,CACT,CAEQb,eAAa,CACnB,KAAKd,eAAiB,CACpB,CACE6B,OAAQlC,EAAO2C,KACfV,MAAO,eACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO4C,QACfX,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACR,CACEH,OAAQlC,EAAO6C,gBACfZ,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO8C,aACfb,MAAO,gBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO+C,OACfd,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,GAGL,CACEH,OAAQlC,EAAOgD,KACff,MAAO,WACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAK5B,qBAAuB,CAC1B,CACEyB,OAAQlC,EAAOgD,KACff,MAAO,OACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO+C,OACfd,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfa,MAAO,SACPZ,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOkD,QACfjB,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOmD,UACflB,MAAO,YACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAK/B,cAAgB,CACnB,CACE4B,OAAQlC,EAAOoD,WACfnB,MAAO,eACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOqD,aACfpB,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO2C,KACfV,MAAO,cACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO4C,QACfX,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACT,CACGH,OAAQlC,EAAOsD,oBACfrB,MAAO,sBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOuD,yBACftB,MAAO,2BACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOwD,iBACfvB,MAAO,sBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOyD,gBACfxB,MAAO,oBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,GAGL,CACEH,OAAQlC,EAAO4C,QACfX,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACR,CACEH,OAAQlC,EAAO0D,OACfzB,MAAO,GACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfuB,YAAa,KAAKvD,cAAcwD,SAASC,KAAKC,EAAKC,GAA2BA,EAAQD,IAAIE,IACjF,CAAC,MAASA,EAAEC,KAAM,KAAQD,CAAC,EACnC,EAAGE,EAAW,CAAE,CAAC,EAClB7B,SAAU,CAAA,EACX,GAGL,CACEH,OAAQlC,EAAO4C,QACfX,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACR,CACEH,OAAQlC,EAAO6C,gBACfZ,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO8C,aACfb,MAAO,gBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO+C,OACfd,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfa,MAAO,SACPZ,SAAU,CAAA,EACX,GAGL,CACEH,OAAQlC,EAAOmE,SACflC,MAAO,WACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOgD,KACff,MAAO,OACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAK9B,cAAgB,CACnB,CACE2B,OAAQlC,EAAOoE,cACfnC,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOoD,WACfnB,MAAO,eACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOqD,aACfpB,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEf,CACCH,OAAQlC,EAAO4C,QACfX,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACT,CACCH,OAAQlC,EAAOwD,iBACfvB,MAAO,sBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACV,GAGA,CACEH,OAAQlC,EAAO4C,QACfX,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACR,CACEH,OAAQlC,EAAO0D,OACfzB,MAAO,GACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfuB,YAAa,KAAKvD,cAAcwD,SAASC,KAAKC,EAAKC,GAA2BA,EAAQD,IAAIE,IACjF,CAAC,MAASA,EAAEC,KAAM,KAAQD,CAAC,EACnC,EAAGE,EAAW,CAAE,CAAC,EAClB7B,SAAU,CAAA,EACX,GAGL,CACEH,OAAQlC,EAAOmE,SACflC,MAAO,WACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOgD,KACff,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAK7B,eAAiB,CACpB,CACE0B,OAAQlC,EAAOoE,cACfnC,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOoD,WACfnB,MAAO,eACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOqD,aACfpB,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEf,CACCH,OAAQlC,EAAO4C,QACfX,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACT,CACCH,OAAQlC,EAAOwD,iBACfvB,MAAO,sBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACV,GAGA,CACEH,OAAQlC,EAAO4C,QACfX,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CACR,CACEH,OAAQlC,EAAO0D,OACfzB,MAAO,GACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfuB,YAAa,KAAKvD,cAAcwD,SAASC,KAAKC,EAAKC,GAA2BA,EAAQD,IAAIE,IACjF,CAAC,MAASA,EAAEC,KAAM,KAAQD,CAAC,EACnC,EAAGE,EAAW,CAAE,CAAC,EAClB7B,SAAU,CAAA,EACX,GAIL,CACEH,OAAQlC,EAAOmE,SACflC,MAAO,WACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOgD,KACff,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAK3B,mBAAqB,CACxB,CACEwB,OAAQlC,EAAOgD,KACff,MAAO,OACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO+C,OACfd,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfa,MAAO,SACPZ,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOkD,QACfjB,MAAO,UACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOmD,UACflB,MAAO,YACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAK1B,gBAAkB,CACrB,CACEuB,OAAQlC,EAAOqE,WACfpC,MAAO,cACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOsE,iBACfrC,MAAO,WACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAO+C,OACfd,MAAO,QACPZ,SAAU,KAAKiB,cACfW,MAAO,SACPb,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAKzB,qBAAuB,CAC1B,CACEsB,OAAQlC,EAAOuE,cACftC,MAAO,eACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,GAEZ,CACEH,OAAQlC,EAAOwE,gBACfvC,MAAO,iBACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,EAGH,KAAKxB,mBAAqB,CACxB,CACEqB,OAAQlC,EAAO+C,OACfd,MAAO,SACPZ,SAAU,KAAKiB,cACfF,cAAe,GACfC,SAAU,CAAA,EACX,CAEL,CAEQoC,cAAcvC,EAAyBb,EAAsD,CACnGa,EAAOb,SAAWA,EAEda,EAAAA,EAAOG,WAAa,MAAQH,EAAOG,UAAUqC,SAAW,IAE5DxC,EAAOG,UAAUsC,QAASC,GAAe,CACvC,KAAKH,cAAcG,EAAavD,CAAQ,CAC1C,CAAC,CACH,CAEMC,oBAAoBuD,EAA8BxD,EAAsD,CAC9G,IAAMW,EAAU6C,EAAKf,IAAKgB,GAClBC,GAAA,GAAKD,EACZ,EACD9C,OAAAA,EAAQ2C,QAASzC,GAAW,KAAKuC,cAAcvC,EAAQb,CAAQ,CAAC,EACzDW,CACR,CAGQgD,UAAUhD,EAAiCE,EAAc,CAC9D,GAAIF,EAAQ0C,SAAW,EAAG,MAAO,GAEjC,QAASO,EAAI,EAAGA,EAAIjD,EAAQ0C,OAAQO,IAGlC,GADIjD,EAAQiD,CAAC,EAAE/C,SAAWA,GACtB,KAAK8C,UAAUhD,EAAQiD,CAAC,EAAE5C,SAAUH,CAAM,EAAG,MAAO,GAG1D,MAAO,EACT,yCAliBWjC,GAAoBiF,EAAAC,CAAA,EAAAD,EAAAE,EAAA,CAAA,CAAA,wBAApBnF,EAAoBoF,QAApBpF,EAAoBqF,UAAAC,WAFnB,MAAM,CAAA,EAEd,IAAOtF,EAAPuF,SAAOvF,CAAoB,GAAA,iGCnIrBwF,GAAZ,SAAYA,EAAc,CAKxBA,OAAAA,EAAAA,EAAA,WAAA,CAAA,EAAA,aAKAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YAKAA,EAAAA,EAAA,WAAA,CAAA,EAAA,aAfUA,CAgBZ,EAhBYA,IAAc,CAAA,CAAA,EA0BbC,IAAiB,IAAA,CAAxB,IAAOA,EAAP,MAAOA,CAAiB,CAR9BC,aAAA,CAUW,KAAAC,cAAgCH,GAAeI,WAC/C,KAAAC,UAAkC,UAE3C,IAAIL,gBAAc,CAChB,OAAOA,EACT,yCAPWC,EAAiB,sBAAjBA,EAAiBK,UAAA,CAAA,CAAA,eAAA,CAAA,EAAAC,OAAA,CAAAJ,cAAA,gBAAAE,UAAA,WAAA,EAAAG,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,mBAAAC,GAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,SAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,SChC9BE,EAAA,EAAA,MAAA,CAAA,EAEIC,GAAA,CAAA,EACJC,EAAA,SAHKC,EAAA,YAAAJ,EAAAb,UAAA,EAAA,EAA+BkB,EAAA,UAAAC,GAAA,EAAAC,GAAAP,EAAAf,gBAAAe,EAAAlB,eAAAI,WAAAc,EAAAf,gBAAAe,EAAAlB,eAAA0B,WAAAR,EAAAf,gBAAAe,EAAAlB,eAAA2B,SAAA,CAAA,kBD2BxBC,EAAYC,CAAA,EAAAC,OAAA,CAAA;6DAAA,EAAAC,gBAAA,CAAA,CAAA,EAKlB,IAAO9B,EAAP+B,SAAO/B,CAAiB,GAAA,EEnB9B,IAAagC,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,CAI/BC,YAAoBC,EAAgCC,EAA8B,CAA9D,KAAAD,WAAAA,EAAgC,KAAAC,eAAAA,EAFpD,KAAAC,QAAUC,EAAYC,MAEgE,CAEtFC,eAAeC,EAAY,GAAK,CAC9B,OAAO,KAAKN,WAAWO,IAAsB,KAAKL,QAAU,wBAA0BI,CAAS,CACjG,CAEAE,wBAAwBC,EAAkBH,EAAY,GAAK,CACzD,OAAO,KAAKN,WAAWO,IAAsB,KAAKL,QAAU,mCAAqCI,EAAY,aAAeG,CAAQ,CACtI,CAEAC,UAAUC,EAAmB,CAC3B,OAAO,KAAKX,WAAWY,KAAK,KAAKV,QAAU,oBAAqBS,EAAKE,CAAW,CAClF,CAEAC,2BAA2BC,EAAqBC,EAAiB,CAC/D,OAAO,KAAKhB,WAAWY,KAAK,KAAKV,QAAU,8BAA+B,CAACe,cAAeF,EAAMC,SAAAA,CAAQ,EAAGH,CAAW,CACxH,CAEAK,mBAAmBP,EAAqBQ,EAAgC,CACtE,OAAO,KAAKnB,WAAWY,KAAK,KAAKV,QAAU,2BAA4B,CAACS,IAAAA,EAAKQ,kBAAAA,CAAiB,EAAGN,CAAW,CAC9G,CAEAO,cAAcC,EAAeC,EAA0BC,EAAmB,GAAE,CAC1E,OAAO,KAAKvB,WAAWY,KAAK,KAAKV,QAAU,+BAAgC,CAACsB,gBAAiBH,EAAOI,mBAAoBF,EAAUD,UAAAA,CAAS,EAAGT,CAAW,CAC3J,CAEAa,cAAcC,EAAY,CACxB,OAAO,KAAK3B,WAAWO,IAAa,KAAKL,QAAU,+BAAiCyB,CAAI,CAC1F,CAEAC,UAAUP,EAAa,CACrB,OAAO,KAAKrB,WAAW6B,OAAe,KAAK3B,QAAU,oBAAsBmB,EAAOR,CAAW,CAC/F,CAEAiB,0BAA0Bf,EAAmB,CAC3C,OAAO,KAAKf,WAAWY,KAAK,KAAKV,QAAU,6BAA8B,CAACe,cAAeF,CAAI,EAAGF,CAAW,CAC7G,CAEAkB,cAAY,CACV,OAAO,KAAK/B,WAAWO,IAAqB,KAAKL,QAAU,uBAAuB,CACpF,CAEA8B,iBAAiBC,EAAoCC,EAAU,CAC7D,IAAMC,EAAa,KAAKlC,eAAemC,aAAaF,CAAI,GAAK,KAAKjC,eAAeoC,eAAeH,CAAI,EAGpG,OAF0BD,EAAOA,QAAUK,EAAOC,SAAWN,EAAOA,QAAUK,EAAOE,UAEvDL,EACvB,EACT,CAEAM,YAAYC,EAAe,CACzB,OAAO,KAAK1C,WAAWY,KAAK,KAAKV,QAAU,0BAA2BwC,EAAO7B,CAAW,CAC1F,yCAxDWf,GAAoB6C,EAAAC,CAAA,EAAAD,EAAAE,CAAA,CAAA,CAAA,wBAApB/C,EAAoBgD,QAApBhD,EAAoBiD,UAAAC,WAFnB,MAAM,CAAA,EAEd,IAAOlD,EAAPmD,SAAOnD,CAAoB,GAAA,ECHjC,IAAaoD,IAAa,IAAA,CAApB,IAAOA,EAAP,MAAOA,CAAa,CAGxBC,YAAoBC,EAAsB,CAAtB,KAAAA,WAAAA,EADpB,KAAAC,QAAUC,EAAYC,MACwB,CAE9CC,WAAWC,EAAsB,CAC/B,OAAO,KAAKL,WAAWM,KAAK,KAAKL,QAAU,gBAAiBI,CAAM,CACpE,CACAE,eAAa,CACX,OAAO,KAAKP,WAAWQ,IAAwB,KAAKP,QAAU,QAAQ,CACxE,CACAQ,aAAaC,EAAgB,CAC3B,OAAO,KAAKV,WAAWW,OAAO,KAAKV,QAAU,mBAAqBS,CAAQ,CAC5E,yCAbWZ,GAAac,EAAAC,CAAA,CAAA,CAAA,wBAAbf,EAAagB,QAAbhB,EAAaiB,UAAAC,WAFZ,MAAM,CAAA,EAEd,IAAOlB,EAAPmB,SAAOnB,CAAa,GAAA,ECV1B,IAAYoB,GAAZ,SAAYA,EAAU,CACpBA,OAAAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,YAAA,CAAA,EAAA,cACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,UAAA,EAAA,EAAA,YACAA,EAAAA,EAAA,UAAA,EAAA,EAAA,YACAA,EAAAA,EAAA,WAAA,EAAA,EAAA,aACAA,EAAAA,EAAA,QAAA,EAAA,EAAA,UACAA,EAAAA,EAAA,KAAA,EAAA,EAAA,OACAA,EAAAA,EAAA,SAAA,EAAA,EAAA,WAfUA,CAgBZ,EAhBYA,IAAU,CAAA,CAAA,+JEGhBC,EAAA,CAAA,EACAC,EAAA,EAAA,OAAA,CAAA,EAAyCC,EAAA,QAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAG,WAAAN,CAAA,CAAkB,CAAA,CAAA,EAAEO,EAAA,EAAA,IAAA,EAAA,EACpET,EAAA,EAAA,OAAA,EAAA,EAA8BU,EAAA,CAAA,EAAqBC,EAAA,EAAO,kCAA5BC,EAAA,CAAA,EAAAC,EAAAC,EAAA,cAAA,CAAA,sCAM5Bd,EAAA,EAAA,IAAA,EAAA,EAAyCC,EAAA,QAAA,UAAA,CAAAE,EAAAY,CAAA,EAAA,IAAAC,EAAAV,EAAA,EAAAW,UAAAZ,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAa,gBAAAF,CAAA,CAAuB,CAAA,CAAA,EAA8CL,EAAA,qFAFzHX,EAAA,EAAA,gBAAA,EAAA,EACEmB,EAAA,EAAA,EAAA,EACAC,EAAA,EAAAC,GAAA,EAAA,EAAA,IAAA,EAAA,EACFV,EAAA,2CAFgBC,EAAA,EAAAU,EAAA,mBAAAjB,EAAAkB,aAAA,EAAkC,0BAAAC,EAAA,EAAAC,GAAAT,EAAAU,CAAA,CAAA,EACxBd,EAAA,EAAAU,EAAA,OAAA,CAAAjB,EAAAsB,QAAA,4BAE1BlB,EAAA,EAAA,QAAA,GAAA,CAAA,kBAAca,EAAA,KAAAjB,EAAAuB,SAAAC,EAAA,6BACd7B,EAAA,EAAA,MAAA,EAAA,EAAiI,EAAA,OAAA,EAAA,EACjGU,EAAA,CAAA,EAAgBC,EAAA,EAAO,kCADlDmB,EAAA,oCAAAzB,EAAAuB,SAAAG,SAAA,eAAA,GAAA,EAAA,EAC2BnB,EAAA,CAAA,EAAAC,EAAAC,EAAA,SAAA,CAAA,sCAG9Bd,EAAA,EAAA,SAAA,EAAA,EAAoGC,EAAA,QAAA,SAAAC,EAAA,CAAA8B,OAAA7B,EAAA8B,CAAA,EAAA3B,EAAA,CAAA,EAAS4B,gBAAgB,EAAI,EAAC3B,EAACL,EAAAiC,gBAAA,CAAwB,CAAA,CAAA,EAAExB,EAAA,6BAD/JZ,EAAA,CAAA,EACEqB,EAAA,EAAAgB,GAAA,EAAA,EAAA,SAAA,EAAA,yBAA8CxB,EAAA,EAAAU,EAAA,OAAAe,EAAAC,OAAA,CAAA,sCAQ9CtC,EAAA,EAAA,KAAA,EAAA,EACmDC,EAAA,aAAA,UAAA,CAAAE,EAAAoC,CAAA,EAAA,IAAAlC,EAAAC,EAAA,CAAA,EAAAD,OAAAA,EAAAmC,aAA6B,EAACjC,EAAEF,EAAAoC,gBAAA,CAAiB,CAAA,CAAA,EAAE,QAAA,UAAA,CAAAtC,EAAAoC,CAAA,EAAA,IAAAlC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAUF,EAAAqC,WAAArC,EAAAsC,iBAAAC,KAAA,CAAkC,CAAA,CAAA,EAChJlC,EAAA,CAAA,EACFC,EAAA,qCADEC,EAAA,EAAAiC,GAAA,IAAA/B,EAAA,WAAAgC,EAAA,EAAAC,GAAA1C,EAAAsC,iBAAAC,KAAA,CAAA,EAAA,GAAA,sCAEF5C,EAAA,EAAA,KAAA,EAAA,EAA2FC,EAAA,QAAA,UAAA,CAAA,IAAA+C,EAAA7C,EAAA8C,CAAA,EAAAhC,UAAAZ,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAA6C,kBAAAF,CAAA,CAAyB,CAAA,CAAA,EAAC,aAAA,UAAA,CAAA,IAAAG,EAAAhD,EAAA8C,CAAA,EAAAG,MAAA/C,EAAAC,EAAA,CAAA,EAAAD,OAAAA,EAAAmC,aAAAW,GAAA9C,EAAAgD,YAEtE,EAAI,GAAC9C,EAAGF,EAAAoC,gBAAA,CAAiB,CAAA,CAAA,EAC/EtB,EAAA,EAAA,EAAA,EACFR,EAAA,+DADgBC,EAAA,EAAAU,EAAA,mBAAAjB,EAAAiD,cAAA,EAAmC,0BAAA9B,EAAA,EAAAC,GAAAuB,EAAAG,CAAA,CAAA,6BAEnDnD,EAAA,EAAA,KAAA,EAAA,EACEU,EAAA,CAAA,EACFC,EAAA,mCADEC,EAAA,EAAA2C,GAAA,IAAAzC,EAAA,SAAA,EAAA,GAAAT,EAAAuB,SAAA4B,iBAAA1C,EAAA,iBAAA,EAAA,GAAA,GAAA,6BAZNd,EAAA,EAAA,MAAA,EAAA,EAAkE,EAAA,KAAA,GAAA,CAAA,EAE9DoB,EAAA,EAAAqC,GAAA,EAAA,EAAA,KAAA,EAAA,EACoJ,EAAAC,GAAA,EAAA,EAAA,KAAA,EAAA,EAKhE,EAAAC,GAAA,EAAA,EAAA,KAAA,EAAA,EAMtFhD,EAAA,EAAK,8BAdgCW,EAAA,gBAAAjB,EAAAuD,QAAA,EAE9BhD,EAAA,CAAA,EAAAU,EAAA,OAAAjB,EAAAgD,WAAA,EAIkBzC,EAAA,EAAAU,EAAA,UAAAuC,CAAA,EAAY,eAAAxD,EAAAuB,SAAAkC,iBAAA,EAK9BlD,EAAA,EAAAU,EAAA,OAAAuC,EAAAvB,SAAA,GAAA,CAAAjC,EAAAgD,WAAA,6BAZXtD,EAAA,CAAA,EACEqB,EAAA,EAAA2C,GAAA,EAAA,EAAA,MAAA,EAAA,uBAAuBnD,EAAA,EAAAU,EAAA,OAAAjB,EAAAuD,QAAA,sCAxB7B7D,EAAA,CAAA,EACEC,EAAA,EAAA,OAAA,CAAA,EAAkC,EAAA,KAAA,EAE9BoB,EAAA,EAAA4C,GAAA,EAAA,EAAA,eAAA,CAAA,EAKAhE,EAAA,EAAA,MAAA,CAAA,EAAgEC,EAAA,QAAA,SAAAC,EAAA,CAAAC,EAAA8D,CAAA,EAAA,IAAA5D,EAAAC,EAAA,EAAA,OAAAC,EAASF,EAAA6D,aAAAhE,CAAA,CAAoB,CAAA,CAAA,EAC3FkB,EAAA,EAAA+C,GAAA,EAAA,EAAA,gBAAA,CAAA,EAAmG,EAAAC,GAAA,EAAA,EAAA,QAAA,CAAA,EAIW,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EACmB,EAAAC,GAAA,EAAA,EAAA,eAAA,CAAA,gBAMnI3D,EAAA,EAAM,EAGRS,EAAA,GAAAmD,GAAA,EAAA,EAAA,eAAA,CAAA,iBAkBF5D,EAAA,wBAxCMC,EAAA,EAAAU,EAAA,YAAAjB,EAAAmE,aAAA,EACC5D,EAAA,EAAA6D,GAAA,eAAApE,EAAAuD,SAAA,OAAA,GAAA,IAAAvD,EAAAqE,OAAA,cAAA,GAAA,EAAA,EACY9D,EAAA,EAAAU,EAAA,OAAAjB,EAAAuB,SAAA+C,UAAA,EAKc/D,EAAA,EAAAU,EAAA,UAAAwB,EAAA,GAAA8B,GAAAvE,EAAAsB,QAAA,CAAA,EACOf,EAAA,EAAAU,EAAA,UAAAjB,EAAAwE,gBAAAC,SAAA,CAAA,EAI2DlE,EAAA,EAAAU,EAAA,OAAA,CAAAjB,EAAAsB,QAAA,EACYf,EAAA,EAAAU,EAAA,OAAAjB,EAAA0E,gBAAA,EAG1FnE,EAAA,EAAAU,EAAA,OAAA,CAAAjB,EAAAsB,UAAAtB,EAAAuB,SAAAG,UAAAiD,GAAA,EAAA,GAAA3E,EAAA4E,YAAA,CAAA,EAMJrE,EAAA,CAAA,EAAAU,EAAA,OAAA0D,GAAA,GAAA,GAAA3E,EAAA6E,eAAA,CAAA,GDab,IAAOC,EAAP,KAAqB,CAIzBC,YAAYC,EAAyB,GAAOC,EAA4B,CAAA,EAAIC,EAAuB,GAAE,CAFrG,KAAAC,cAAwB,GAGtB,KAAKC,MAAQ,CAAA,GAETF,GAAgBG,MAAaH,IAAiB,MAChD,KAAKC,cAAgBD,GAGvBD,EAAgBK,QAAQC,GAAI,CAC1B,KAAKH,MAAMI,KAAK,CAACjD,MAAOgD,EAAGd,SAAUO,CAAa,CAAC,CACrD,CAAC,CACH,CAQAS,OAAOC,EAASV,EAAyBW,EAAiC,CACxE,IAAIC,EAAe,KAAKC,cACpBF,GAAaN,MAAaM,GAAa,QACzCC,EAAeD,GAGjB,IAAMG,EAAW,KAAKV,MAAMW,OAAOR,GAAKK,EAAaL,EAAEhD,MAAOmD,CAAI,CAAC,EAC/DI,EAAS7D,OAAS,EAChB+C,GAAiBK,KACnBS,EAAS,CAAC,EAAErB,SAAWO,EAEvBc,EAAS,CAAC,EAAErB,SAAW,CAACqB,EAAS,CAAC,EAAErB,SAGtC,KAAKW,MAAMI,KAAK,CAACjD,MAAOmD,EAAMjB,SAAWO,IAAkBK,OAAY,GAAOL,CAAc,CAAC,CAEjG,CASAgB,WAAWN,EAASC,EAAiC,CACnD,IAAIC,EAAe,KAAKC,cACpBF,GAAaN,MAAaM,GAAa,QACzCC,EAAeD,GAGjB,IAAMG,EAAW,KAAKV,MAAMW,OAAOR,GAAKK,EAAaL,EAAEhD,MAAOmD,CAAI,CAAC,EAEnE,OAAII,EAAS7D,OAAS,EACb6D,EAAS,CAAC,EAAErB,SAEd,EACT,CAMAwB,iBAAe,CACb,IAAMC,EAAgB,KAAKd,MAAMW,OAAOR,GAAKA,EAAEd,QAAQ,EAAExC,OACzD,OAAQiE,IAAkB,KAAKd,MAAMnD,QAAUiE,IAAkB,CACnE,CAMAzB,UAAQ,CACN,OAAO,KAAKW,MAAMW,OAAOR,GAAKA,EAAEd,QAAQ,EAAE0B,IAAIZ,GAAKA,EAAEhD,KAAK,CAC5D,CAMC6D,YAAU,CACT,OAAO,KAAKhB,MAAMW,OAAOR,GAAK,CAACA,EAAEd,QAAQ,EAAE0B,IAAIZ,GAAKA,EAAEhD,KAAK,CAC7D,CAMA8D,MAAI,CACF,GAAI,KAAKjB,MAAMnD,OAAS,EACtB,OAAO,KAAKmD,MAAM,KAAKA,MAAMnD,OAAS,CAAC,EAAEM,KAI7C,CAEAsD,aAAaS,EAAMC,EAAI,CAErB,QAASC,KAAOF,EACd,GAAI,EAAEE,KAAOD,IAAMD,EAAEE,CAAG,IAAMD,EAAEC,CAAG,EACjC,MAAO,GAGX,QAASA,KAAOD,EACd,GAAI,EAAEC,KAAOF,GACX,MAAO,GAGX,MAAO,EACT,GAGIG,GAAkB,IAsBXC,IAAkB,IAAA,CAAzB,IAAOA,EAAP,MAAOA,CAAkB,CA0C7B3B,YAAoB4B,EAAgDC,EAAqCC,EAAwB,CAA7G,KAAAF,UAAAA,EAAgD,KAAAC,SAAAA,EAAqC,KAAAC,MAAAA,EAlChG,KAAAC,MAAgC,IAAIC,GAAc,CAAC,EAInD,KAAA1C,OAAkB,GAIlB,KAAA/C,SAAoB,GAKnB,KAAAsD,aAAe,IAAIoC,EACnB,KAAAC,aAAe,IAAID,EACnB,KAAAE,SAAW,IAAIF,EACf,KAAAG,aAAe,IAAIH,EACZ,KAAAI,WAAaC,GAAOC,EAAU,EAS/C,KAAA/D,SAAW,GACX,KAAApB,aAAuB,EACvB,KAAAa,YAAuB,GAEvB,KAAA0B,iBAA4B,EAIyG,CAErI6C,UAAQ,CACN,KAAKT,MAAMU,KAAKC,EAAmB,KAAKL,UAAU,CAAC,EAAEM,UAAWC,GAAyB,CACvF,KAAK9F,gBAAgB8F,CAAY,EACjC,KAAKC,KAAI,CACX,CAAC,EAEG,KAAKC,OACP,KAAKA,MAAML,KAAKC,EAAmB,KAAKL,UAAU,CAAC,EAAEM,UAAWlG,GAAc,CACxE,KAAKD,SAASC,KAAOA,GACzB,KAAKqC,aAAY,CACnB,CAAC,EAGH,KAAK+D,KAAI,CACX,CAEAA,MAAI,CACF,GAAI,KAAKrG,SAASoE,YAAcN,QAAa,KAAK9D,SAASG,SAAU,CACnEoG,QAAQC,MAAM,oCAAoC,EAClD,MACF,CAEI,KAAKxG,SAASkC,oBAAsB4B,SACtC,KAAK9D,SAASkC,kBAAoB,CAACV,EAAOR,IAAUA,GAGlD,KAAKhB,SAASyG,eAAe,aAAa,GAAK,KAAKzG,SAAS0G,YAC/D,KAAK3F,iBAAmB,KAAKf,SAAS0G,YAEtC,KAAK3F,iBAAmB,IAAI4F,GAAY,EAAE,EAE5C,KAAK/D,cAAgB,IAAIgE,GAAU,CACjC,UAAa,KAAK7F,iBACnB,EAED,KAAKuC,gBAAkB,KAAKV,cAAciE,IAAI,WAAW,EAAGC,aACzDb,KAECc,EAAKC,GAAe,CACd,KAAKC,WAAa,MAAQ,KAAKA,UAAUC,eAAiB,OAC5D,KAAK9B,UAAU+B,SAAS,KAAKF,UAAUC,cAAe,QAAS,IAAMF,EAAII,KAAI,EAAG1G,OAAS,GAAK,IAAI,EAClG,KAAKE,aAAe,EAExB,CAAC,EACDgE,EAAKoC,GAAgBA,EAAII,KAAI,CAAE,EAC/BC,GAAU,KAAKrH,SAASsH,QAAQ,EAEhC9C,GAAQwC,GAEF,KAAKhH,SAASuH,gBAAkB,EAAU,GAE1C,GAACP,GAAOA,EAAItG,OAAS,KAAKV,SAASuH,cAKxC,EAEDC,EAAWR,IACT,KAAK7D,iBAAmB,GACjB,KAAKnD,SAASyH,QAAQT,EAAII,KAAI,CAAE,EAAEnB,KAAKC,EAAmB,KAAKL,UAAU,EAAGjB,EAAK8C,GAAiBA,EAAMlD,OAAOmD,GAAQ,KAAKC,eAAeD,CAAI,CAAC,CAAC,CAAC,EAC1J,EACDZ,EAAKzD,GAA0B,CAC7B,KAAKH,iBAAmB,GACxB,KAAKvC,aAAe,EACpB,KAAK0E,MAAMuC,aAAY,EACvBC,WAAW,IAAK,CACd,KAAKC,kBAAkBzE,CAAe,EACtC,KAAKzC,gBAAe,CACtB,EAAG,EAAE,EACLiH,WAAW,IAAM,KAAKjH,gBAAe,EAAI,EAAE,CAE7C,CAAC,EACDmH,EAAW,EACX9B,EAAmB,KAAKL,UAAU,CAAC,EAInC,KAAK7F,SAASiI,UACZ,KAAKjI,SAASG,SAChB,KAAK8C,gBAAkB,IAAIM,EAAoB,GAAM,KAAKvD,SAASiI,SAAS,EAG3D,KAAKjI,SAASiI,UAAUxB,eAAe,QAAQ,EAE9D,KAAKxD,gBAAkB,IAAIM,EAAoB,GAAM,KAAKvD,SAASiI,SAAS,EAE5E,KAAKhF,gBAAkB,IAAIM,EAAoB,GAAM,CAAC,KAAKvD,SAASiI,SAAS,CAAC,EAIlF,KAAKhF,gBAAkB,IAAIM,CAE/B,CAIA2E,oBAAoBC,EAAU,CAExBA,EAAMC,QAAWD,EAAMC,OAAuBC,UAAUC,SAAS,iBAAiB,IAGtF,KAAKtG,SAAW,GAClB,CAGAuG,eAAeJ,EAAoB,CACjC,GAAK,KAAKnG,UACN,MAAKjC,SAET,OAAOoI,EAAMlD,IAAG,CACd,KAAKuD,EAAUC,WACf,KAAKD,EAAUE,YACf,CACE,KAAK9H,aAAe+H,KAAKC,IAAI,KAAKhI,aAAe,EAAG,KAAKyE,SAASwD,iBAAiB,kBAAkB,EAAEnI,OAAS,CAAC,EACjH,KAAKG,gBAAe,EACpB,KACF,CACA,KAAK2H,EAAUM,SACf,KAAKN,EAAUO,WACf,CACE,KAAKnI,aAAe+H,KAAKK,IAAI,KAAKpI,aAAe,EAAG,CAAC,EACrD,KAAKC,gBAAe,EACpB,KACF,CACA,KAAK2H,EAAUS,MACf,CACE,KAAK5D,SAASwD,iBAAiB,kBAAkB,EAAE9E,QAAQ,CAAC4D,EAAMnG,IAAS,CACrEmG,EAAKU,UAAUC,SAAS,QAAQ,GAClC,KAAKhF,gBAAgB2C,KAAKiD,GAAK,CAAC,CAAC,EAAE/C,UAAWgD,GAAe,CAE3DhB,EAAMiB,eAAc,EACpBjB,EAAM5H,gBAAe,EAEpBoH,EAAqB0B,MAAK,EAC3B,KAAKzI,aAAe,CACtB,CAAC,CAEL,CAAC,EACD,KACF,CACA,KAAK4H,EAAUc,UACf,KAAKd,EAAUe,OACf,CACE,GAAI,KAAKxI,iBAAiBC,QAAU,MAAQ,KAAKD,iBAAiBC,QAAU8C,QAAa,KAAK/C,iBAAiBC,MAAMoG,KAAI,IAAO,GAC9H,MAEF,IAAMlE,EAAW,KAAKD,gBAAgBC,SAAQ,EAC1CA,EAASxC,OAAS,GACpB,KAAK8I,qBAAqBtG,EAASuG,IAAG,CAAE,EAE1C,KACF,CACA,KAAKjB,EAAUkB,QACb,KAAK1H,SAAW,GAChBmG,EAAM5H,gBAAe,EACrB,MACF,QACE,KACJ,CACF,CAEAjB,gBAAgBqK,EAAQ,CACtB,KAAK1G,gBAAgBiB,OAAOyF,EAAK7F,OAAW,KAAK9D,SAAS4J,kBAAkB,EAC5E,KAAKvG,aAAawG,KAAK,KAAK5G,gBAAgBC,SAAQ,CAAE,CACxD,CAEAsG,qBAAqBG,EAAQ,CAC3B,KAAK1G,gBAAgBiB,OAAOyF,EAAK7F,OAAW,KAAK9D,SAAS4J,kBAAkB,EAC5E,KAAKvG,aAAawG,KAAK,KAAK5G,gBAAgBC,SAAQ,CAAE,EACtD,KAAK4G,WAAU,CACjB,CAEAxJ,gBAAgByJ,EAAuB,GAAK,CACtC,KAAK9G,kBACH,CAAC8G,GAAe,KAAK/J,SAASiI,WAChB,KAAKjI,SAASiI,UAAUxB,eAAe,QAAQ,EAE7D,KAAKxD,gBAAkB,IAAIM,EAAoB,GAAM,KAAKvD,SAASiI,SAAS,EAE5E,KAAKhF,gBAAkB,IAAIM,EAAoB,GAAM,CAAC,KAAKvD,SAASiI,SAAS,CAAC,EAE/E,KAAK3C,MAAMuC,aAAY,IAExB,KAAK5E,gBAAgBC,SAAQ,EAAGa,QAAQ4D,GAAQ,KAAK1E,gBAAgBiB,OAAOyD,EAAM,EAAK,CAAC,EACxF,KAAKrC,MAAMuC,aAAY,GAGzB,KAAKxE,aAAawG,KAAK,KAAK5G,gBAAgBC,SAAQ,CAAE,EACtD,KAAK4G,WAAU,EAEnB,CAEAxI,kBAAkBqI,EAAQ,CACpB,KAAK5J,UACL,CAAC,KAAKC,SAASG,UAAY,KAAK8C,gBAAgBC,SAAQ,EAAGxC,OAAS,IAIxE,KAAKpB,gBAAgBqK,CAAG,EAExB,KAAKG,WAAU,EACf,KAAKxH,aAAY,EACnB,CAEAxB,WAAWkJ,EAAa,CACtB,GAAI,KAAKhK,SAASiK,gBAAkBnG,MAAa,CAAC,KAAK9D,SAAS4B,iBAC9D,OAEF,IAAMsI,EAAU,KAAKlK,SAASiK,eAAeD,CAAK,EAClD,KAAKtE,aAAamE,KAAKK,CAAO,EAC9B,KAAK5K,gBAAgB4K,CAAO,EAE5B,KAAKJ,WAAU,EACf,KAAKxH,aAAY,CACnB,CAOAsF,eAAeD,EAAS,CACtB,OAAI,KAAK3H,SAASmK,QAAU,KAAKnK,SAASG,SACjC,CAAC,KAAK8C,gBAAgBwB,WAAWkD,EAAM,KAAK3H,SAAS4J,kBAAkB,EAGzE,EACT,CAEAQ,cAAY,CACVtC,WAAW,IAAK,CACd,KAAK/G,iBAAiBsJ,SAAS,KAAKtJ,iBAAiBC,KAAK,EAC1D,KAAKgB,SAAW,EAClB,CAAC,CACH,CAEAM,aAAa6F,EAAW,CAClBA,IACFA,EAAM5H,gBAAe,EACrB4H,EAAMiB,eAAc,GAElB,MAAKrJ,WAEL,CAAC,KAAKC,SAASG,UAAY,KAAK8C,gBAAgBC,SAAQ,EAAGxC,OAAS,IAIpE,KAAKuG,YAEP,KAAK5B,SAASiF,KAAKjB,MAAK,EAExB,KAAKpC,UAAUC,cAAcZ,MAAK,EAClC,KAAKtE,SAAW,IAIlB,KAAKoI,aAAY,GACnB,CAGAN,YAAU,CACJ,KAAK7C,WAAa,KAAKA,UAAUC,eACnC,KAAK9B,UAAU+B,SAAS,KAAKF,UAAUC,cAAe,QAAS,EAAGqD,GAAoBC,SAAS,EAEjG,KAAKzJ,iBAAiBsJ,SAAS,EAAE,EACjC,KAAKzJ,aAAe,CACtB,CAGAC,iBAAe,CACb,KAAKwE,SAASwD,iBAAiB,kBAAkB,EAAE9E,QAAQ,CAAC4D,EAAMnG,IAAS,CACrEA,IAAU,KAAKZ,cAAgB,CAAC+G,EAAKU,UAAUC,SAAS,UAAU,EAEpE,KAAKlD,UAAUqF,SAAS9C,EAAM,QAAQ,EAGtC,KAAKvC,UAAUsF,YAAY/C,EAAM,QAAQ,CAE7C,CAAC,CACH,CAEAI,kBAAkB4C,EAAc,CAI9B,GAFA,KAAKlJ,YAAc,GACnB,KAAK6D,MAAMuC,aAAY,EACnB,CAAC,KAAK7H,SAAS4B,iBAAkB,OAErC,IAAMgJ,EAAY,KAAK7J,iBAAiBC,MAAMoG,KAAI,EAClD,GAAIwD,EAAAA,EAAUlK,OAASiI,KAAKK,IAAI,KAAKhJ,SAASuH,cAAe,CAAC,IACzD,KAAKxG,iBAAiB8J,OAIvB,SAAO,KAAK7K,SAAS8K,iBAAmB,YACf,KAAK9K,SAAS8K,gBAAgB,KAAK7H,gBAAgBC,SAAQ,EAAI0H,CAAS,EAC5ElK,OAAS,GAKlC,IAAI,OAAO,KAAKV,SAASoE,WAAa,WAAY,CAEhD,IAAM2G,EAAU,KAAK/K,SAASoE,UAAUuG,EAASC,CAAS,EAC1D,GAAIG,EAAQrK,OAAS,GAAKqK,EAAQC,SAAS,KAAKhL,SAASiK,eAAeW,CAAS,CAAC,EAChF,MAEJ,CAEA,KAAKnJ,YAAc,GAEf,KAAKA,cACP,KAAKO,SAAW,IAElB,KAAKsD,MAAMuC,aAAY,EACzB,CAEAjJ,WAAWuJ,EAAU,CACf,KAAKpI,WACT,KAAK+C,OAAS,CAAC,KAAKA,OACpB,KAAK8C,aAAaiE,KAAK,KAAK/G,MAAM,EAE7B,KAAKA,QACR,KAAK6C,SAASkE,KAAI,EAEtB,yCAjXW1E,GAAkB8F,EAAAC,EAAA,EAAAD,EA0CqBE,EAAQ,EAAAF,EAAAG,EAAA,CAAA,CAAA,sBA1C/CjG,EAAkBkG,UAAA,CAAA,CAAA,eAAA,CAAA,EAAAC,eAAA,SAAAC,EAAAC,EAAAC,EAAA,IAAAF,EAAA,qOAAlBlN,EAAA,QAAA,SAAAC,EAAA,CAAA,OAAAkN,EAAAtD,oBAAA5J,CAAA,CAA2B,EAAA,GAAAoN,EAAA,EAAT,UAAA,SAAApN,EAAA,CAAA,OAAlBkN,EAAAjD,eAAAjK,CAAA,CAAsB,EAAA,GAAAqN,EAAA,qlDC5KnCnM,EAAA,EAAAoM,GAAA,GAAA,GAAA,eAAA,CAAA,OAAiClM,EAAA,gBAAA,WAAA,iBD2JrBmM,EAAYC,EAAAC,GAAAC,GAAAC,GAAAC,GAAEC,GAAmBC,GAAmBC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAEC,EAAkB,EAAAC,OAAA,CAAA;6DAAA,EAAAzI,KAAA,CAAA0I,UAItE,CACVC,GAAQ,eAAgB,CACtBC,GAAM,KAAMC,EAAM,CAAEC,OAAQ,KAAK,CAAC,CAAC,EACnCC,GAAW,YAAa,CACtBF,EAAM,CAAEC,OAAQ,OAAQE,SAAU,MAAM,CAAE,EAC1CC,GAAQlI,EAAe,CAAC,CACzB,EACDgI,GAAW,YAAa,CACtBE,GAAQlI,GAAiB8H,EAAM,CAAEC,OAAQ,KAAK,CAAE,CAAC,CAAC,CACnD,CAAC,CACH,CAAC,CACH,EAAAI,gBAAA,CAAA,CAAA,EAEG,IAAOlI,EAAPmI,SAAOnI,CAAkB,GAAA,EEzJ/B,IAAaoI,IAAsB,IAAA,CAA7B,IAAOA,EAAP,MAAOA,CAAsB,CAIjCC,YAAoBC,EAA0CC,EAAwBC,EAAgB,CAAlF,KAAAF,gBAAAA,EAA0C,KAAAC,OAAAA,EAAwB,KAAAC,KAAAA,EAF9E,KAAAC,OAASC,EAAYD,MAE4E,CAEzGE,aAAaC,EAAkC,CAC7C,OAAO,KAAKJ,KAAKK,KAAa,KAAKJ,OAAS,gBAAiBG,EAAQE,CAAW,CAClF,CAEAC,aAAaC,EAAqB,CAChC,OAAO,KAAKR,KAAKK,KAAqB,KAAKJ,OAAS,gBAAiB,CAACO,cAAAA,CAAa,CAAC,EAAEC,KAAKC,EAAIN,IACzFA,GAAU,OACZA,EAAS,KAAKN,gBAAgBa,uBAAsB,EACpDP,EAAOQ,WAAWC,KAAK,KAAKC,+BAA8B,CAAE,GAGvDV,EACR,CAAC,CACJ,CAEAW,oBAAoBX,EAAkC,CACpD,OAAO,KAAKD,aAAaC,CAAM,EAAEK,KAAKO,EAAIR,GAAgB,CACxDS,OAAOC,QAAQC,aAAaF,OAAOG,SAASC,KAAM,GAAIJ,OAAOG,SAASC,KAAKC,MAAM,GAAG,EAAE,CAAC,EAAG,IAAMd,CAAa,CAC/G,CAAC,CAAC,CACJ,CAEAe,qBAAqBC,EAAgC,CACnD,IAAMpB,EAAS,KAAKN,gBAAgBa,uBAAsB,EAE1D,OADAP,EAAOQ,WAAWC,KAAK,KAAKC,+BAA8B,CAAE,EACvDG,OAAOG,SAASC,KAAKI,SAAS,GAAG,EAE/B,KAAKlB,aAAaU,OAAOG,SAASC,KAAKC,MAAM,GAAG,EAAE,CAAC,CAAC,EAFXI,GAAGtB,CAAM,CAG3D,CASAuB,YAAYC,EAAkBxB,EAAqByB,EAA8BC,EAAa,CAC5F,IAAMC,EAAM,KAAKC,qBAAoB,EACrCD,OAAAA,EAAInB,WAAWC,KAAK,KAAKf,gBAAgBmC,6BAA6B7B,EAAQyB,EAAYC,EAAQ,EAAE,CAAC,EAE9F,KAAK3B,aAAa4B,CAAG,EAAEtB,KAAKyB,EAAU1B,GACpC,KAAKT,OAAOoC,cAAcP,EAAKQ,KAAK,GAAG,EAAI,IAAM5B,CAAa,CACtE,CAAC,CACJ,CAEA6B,sBAAsBT,EAAkBxB,EAAwBkC,EAAmB,CACjF,OAAO,KAAKnC,aAAaC,CAAM,EAAEK,KAAKyB,EAAU1B,GAAgB,CAC9D,IAAI+B,EAAMX,EAAKQ,KAAK,GAAG,EAAI,IAAM5B,EACjC+B,OAAAA,GAAOC,OAAOC,KAAKH,CAAW,EAAE5B,IAAIgC,GAAK,IAAIA,CAAC,IAAIJ,EAAYI,CAAC,CAAC,EAAE,EAAEN,KAAK,EAAE,EAEpE,KAAKrC,OAAOoC,cAAcI,EAAKD,CAAW,CACnD,CAAC,CAAC,CACJ,CAEAN,sBAAoB,CAChB,MAAO,CACHW,YAAaC,GAAkBC,IAC/BjC,WAAY,CAAA,EACZkC,QAAS,EACTC,YAAa,CACTC,YAAa,GACbC,UAAWC,GAAUC,UAGjC,CAEArC,gCAA8B,CAC1B,MAAO,CACHe,WAAYuB,GAAiBC,MAC7BvB,MAAO,GACPwB,MAAOC,GAAYC,WAE3B,yCA9EW5D,GAAsB6D,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAAAF,EAAAG,CAAA,CAAA,CAAA,wBAAtBhE,EAAsBiE,QAAtBjE,EAAsBkE,UAAAC,WAFnB,MAAM,CAAA,EAEhB,IAAOnE,EAAPoE,SAAOpE,CAAsB,GAAA", "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"] }