{"version":3,"sources":["src/app/_services/action-factory.service.ts","src/app/_single-module/card-actionables/_pipes/dynamic-list.pipe.ts","src/app/_single-module/card-actionables/card-actionables.component.ts","src/app/_single-module/card-actionables/card-actionables.component.html","src/app/cards/bulk-selection.service.ts","node_modules/ng-circle-progress/fesm2020/ng-circle-progress.mjs","src/app/shared/circular-loader/circular-loader.component.ts","src/app/shared/circular-loader/circular-loader.component.html","src/app/cards/download-indicator/download-indicator.component.ts","src/app/cards/download-indicator/download-indicator.component.html","src/app/_pipes/manga-format-icon.pipe.ts","src/app/cards/card-item/card-item.component.ts","src/app/cards/card-item/card-item.component.html"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { map, Observable, shareReplay } from 'rxjs';\nimport { Chapter } from '../_models/chapter';\nimport { CollectionTag } 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\";\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\nexport interface ActionItem {\n title: string;\n action: Action;\n callback: (action: ActionItem, data: T) => void;\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\n isAdmin = false;\n hasDownloadRole = 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 this.hasDownloadRole = this.accountService.hasDownloadRole(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: (action: ActionItem, library: Library) => void) {\n\t\treturn this.applyCallbackToList(this.libraryActions, callback);\n }\n\n getSeriesActions(callback: (action: ActionItem, series: Series) => void) {\n\t\treturn this.applyCallbackToList(this.seriesActions, callback);\n }\n\n getSideNavStreamActions(callback: (action: ActionItem, series: SideNavStream) => void) {\n return this.applyCallbackToList(this.sideNavStreamActions, callback);\n }\n\n getVolumeActions(callback: (action: ActionItem, volume: Volume) => void) {\n\t\treturn this.applyCallbackToList(this.volumeActions, callback);\n }\n\n getChapterActions(callback: (action: ActionItem, chapter: Chapter) => void) {\n return this.applyCallbackToList(this.chapterActions, callback);\n }\n\n getCollectionTagActions(callback: (action: ActionItem, collectionTag: CollectionTag) => void) {\n\t\treturn this.applyCallbackToList(this.collectionTagActions, callback);\n }\n\n getReadingListActions(callback: (action: ActionItem, readingList: ReadingList) => void) {\n return this.applyCallbackToList(this.readingListActions, callback);\n }\n\n getBookmarkActions(callback: (action: ActionItem, series: Series) => void) {\n return this.applyCallbackToList(this.bookmarkActions, callback);\n }\n\n getMetadataFilterActions(callback: (action: ActionItem, data: any) => void) {\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: true,\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\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: true,\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 appicable\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\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\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 { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'dynamicList',\n pure: true,\n standalone: true\n})\nexport class DynamicListPipe implements PipeTransform {\n\n transform(value: any): Array<{title: string, data: any}> {\n if (value === undefined || value === null) return [];\n return value as {title: string, data: any}[];\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {NgbDropdown, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle} from '@ng-bootstrap/ng-bootstrap';\nimport { take } from 'rxjs';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { Action, ActionItem } from 'src/app/_services/action-factory.service';\nimport {CommonModule} from \"@angular/common\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\nimport {DynamicListPipe} from \"./_pipes/dynamic-list.pipe\";\n\n@Component({\n selector: 'app-card-actionables',\n standalone: true,\n imports: [CommonModule, NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, DynamicListPipe, TranslocoDirective],\n templateUrl: './card-actionables.component.html',\n styleUrls: ['./card-actionables.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardActionablesComponent implements OnInit {\n\n @Input() iconClass = 'fa-ellipsis-v';\n @Input() btnClass = '';\n @Input() actions: ActionItem[] = [];\n @Input() labelBy = 'card';\n @Input() disabled: boolean = false;\n @Output() actionHandler = new EventEmitter>();\n\n\n isAdmin: boolean = false;\n canDownload: boolean = false;\n submenu: {[key: string]: NgbDropdown} = {};\n\n constructor(private readonly cdRef: ChangeDetectorRef, private accountService: AccountService) { }\n\n ngOnInit(): void {\n this.accountService.currentUser$.pipe(take(1)).subscribe((user) => {\n if (!user) return;\n this.isAdmin = this.accountService.hasAdminRole(user);\n this.canDownload = this.accountService.hasDownloadRole(user);\n\n // We want to avoid an empty menu when user doesn't have access to anything\n if (!this.isAdmin && this.actions.filter(a => !a.requiresAdmin).length === 0) {\n this.actions = [];\n }\n this.cdRef.markForCheck();\n });\n }\n\n preventEvent(event: any) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n performAction(event: any, action: ActionItem) {\n this.preventEvent(event);\n\n if (typeof action.callback === 'function') {\n this.actionHandler.emit(action);\n }\n }\n\n willRenderAction(action: ActionItem) {\n return (action.requiresAdmin && this.isAdmin)\n || (action.action === Action.Download && (this.canDownload || this.isAdmin))\n || (!action.requiresAdmin && action.action !== Action.Download);\n }\n\n shouldRenderSubMenu(action: ActionItem, dynamicList: null | Array) {\n return (action.children[0].dynamicList === undefined || action.children[0].dynamicList === null) || (dynamicList !== null && dynamicList.length > 0);\n }\n\n openSubmenu(actionTitle: string, subMenu: NgbDropdown) {\n // We keep track when we open and when we get a request to open, if we have other keys, we close them and clear their keys\n if (Object.keys(this.submenu).length > 0) {\n const keys = Object.keys(this.submenu).filter(k => k !== actionTitle);\n keys.forEach(key => {\n this.submenu[key].close();\n delete this.submenu[key];\n });\n }\n this.submenu[actionTitle] = subMenu;\n subMenu.open();\n }\n\n closeAllSubmenus() {\n Object.keys(this.submenu).forEach(key => {\n this.submenu[key].close();\n delete this.submenu[key];\n });\n }\n\n performDynamicClick(event: any, action: ActionItem, dynamicItem: any) {\n action._extra = dynamicItem;\n this.performAction(event, action);\n }\n}\n","\n 0\">\n
\n \n
\n \n
\n
\n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n\n
\n","import {Injectable} from '@angular/core';\nimport {NavigationStart, Router} from '@angular/router';\nimport {ReplaySubject} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport {Action, ActionFactoryService, ActionItem} from '../_services/action-factory.service';\n\ntype DataSource = 'volume' | 'chapter' | 'special' | 'series' | 'bookmark' | 'sideNavStream';\n\n/**\n * Responsible for handling selections on cards. Can handle multiple card sources next to each other in different loops.\n * This will clear selections between pages.\n *\n * Remarks: Page which renders cards is responsible for listening for shift keydown/keyup and updating our state variable.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BulkSelectionService {\n\n private debug: boolean = false;\n private prevIndex: number = 0;\n private prevDataSource!: DataSource;\n private selectedCards: { [key: string]: {[key: number]: boolean} } = {};\n private dataSourceMax: { [key: string]: number} = {};\n public isShiftDown: boolean = false;\n\n private actionsSource = new ReplaySubject[]>(1);\n public actions$ = this.actionsSource.asObservable();\n\n private selectionsSource = new ReplaySubject(1);\n /**\n * Number of active selections\n */\n public selections$ = this.selectionsSource.asObservable();\n\n constructor(router: Router, private actionFactory: ActionFactoryService) {\n router.events\n .pipe(filter(event => event instanceof NavigationStart))\n .subscribe(() => {\n this.deselectAll();\n this.dataSourceMax = {};\n this.prevIndex = 0;\n });\n }\n\n handleCardSelection(dataSource: DataSource, index: number, maxIndex: number, wasSelected: boolean) {\n if (this.isShiftDown) {\n\n if (dataSource === this.prevDataSource) {\n this.debugLog('Selecting ' + dataSource + ' cards from ' + this.prevIndex + ' to ' + index + ' as ' + !wasSelected);\n this.selectCards(dataSource, this.prevIndex, index, !wasSelected);\n } else {\n const isForwardSelection = index > this.prevIndex;\n\n if (isForwardSelection) {\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + this.prevIndex + ' to ' + this.dataSourceMax[this.prevDataSource]);\n this.selectCards(this.prevDataSource, this.prevIndex, this.dataSourceMax[this.prevDataSource], !wasSelected);\n this.debugLog('Selecting ' + dataSource + ' cards from ' + 0 + ' to ' + index);\n this.selectCards(dataSource, 0, index, !wasSelected);\n } else {\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + 0 + ' to ' + this.prevIndex);\n this.selectCards(this.prevDataSource, this.prevIndex, 0, !wasSelected);\n this.debugLog('Selecting ' + dataSource + ' cards from ' + index + ' to ' + maxIndex);\n this.selectCards(dataSource, index, maxIndex, !wasSelected);\n }\n }\n } else {\n this.debugLog('Selecting ' + dataSource + ' cards at ' + index);\n this.selectCards(dataSource, index, index, !wasSelected);\n }\n this.prevIndex = index;\n this.prevDataSource = dataSource;\n this.dataSourceMax[dataSource] = maxIndex;\n this.actionsSource.next(this.getActions(() => {}));\n }\n\n isCardSelected(dataSource: DataSource, index: number) {\n if (this.selectedCards.hasOwnProperty(dataSource) && this.selectedCards[dataSource].hasOwnProperty(index)) {\n return this.selectedCards[dataSource][index];\n }\n return false;\n }\n\n selectCards(dataSource: DataSource, from: number, to: number, value: boolean) {\n if (!this.selectedCards.hasOwnProperty(dataSource)) {\n this.selectedCards[dataSource] = {};\n }\n\n if (from === to) {\n this.selectedCards[dataSource][to] = value;\n this.selectionsSource.next(this.totalSelections());\n return;\n }\n\n if (from > to) {\n for (let i = to; i <= from; i++) {\n this.selectedCards[dataSource][i] = value;\n }\n }\n\n for (let i = from; i <= to; i++) {\n this.selectedCards[dataSource][i] = value;\n }\n this.selectionsSource.next(this.totalSelections());\n }\n\n deselectAll() {\n this.selectedCards = {};\n this.selectionsSource.next(0);\n }\n\n hasSelections() {\n const keys = Object.keys(this.selectedCards);\n return keys.filter(key => {\n return Object.values(this.selectedCards[key]).filter(item => item).length > 0;\n }).length > 0;\n }\n\n totalSelections() {\n let sum = 0;\n const keys = Object.keys(this.selectedCards);\n keys.forEach(key => {\n sum += Object.values(this.selectedCards[key]).filter(item => item).length;\n });\n return sum;\n }\n\n getSelectedCardsForSource(dataSource: DataSource) {\n if (!this.selectedCards.hasOwnProperty(dataSource)) return [];\n\n const ret = [];\n for(let k in this.selectedCards[dataSource]) {\n if (this.selectedCards[dataSource][k]) {\n ret.push(k);\n }\n }\n\n return ret;\n }\n\n getActions(callback: (action: ActionItem, data: any) => void) {\n // checks if series is present. If so, returns only series actions\n // else returns volume/chapter items\n const allowedActions = [Action.AddToReadingList, Action.MarkAsRead, Action.MarkAsUnread, Action.AddToCollection,\n Action.Delete, Action.AddToWantToReadList, Action.RemoveFromWantToReadList];\n if (Object.keys(this.selectedCards).filter(item => item === 'series').length > 0) {\n return this.applyFilterToList(this.actionFactory.getSeriesActions(callback), allowedActions);\n }\n\n if (Object.keys(this.selectedCards).filter(item => item === 'bookmark').length > 0) {\n return this.actionFactory.getBookmarkActions(callback);\n }\n\n if (Object.keys(this.selectedCards).filter(item => item === 'sideNavStream').length > 0) {\n return this.applyFilterToList(this.actionFactory.getSideNavStreamActions(callback), [Action.MarkAsInvisible, Action.MarkAsVisible]);\n }\n\n return this.applyFilterToList(this.actionFactory.getVolumeActions(callback), allowedActions);\n }\n\n private debugLog(message: string, extraData?: any) {\n if (!this.debug) return;\n\n if (extraData !== undefined) {\n console.log(message, extraData);\n } else {\n console.log(message);\n }\n }\n\n private applyFilter(action: ActionItem, allowedActions: Array) {\n\n let ret = false;\n if (action.action === Action.Submenu || allowedActions.includes(action.action)) {\n // Do something\n ret = true;\n }\n\n if (action.children === null || action.children?.length === 0) return ret;\n\n action.children = action.children.filter((childAction) => this.applyFilter(childAction, allowedActions));\n\n return ret;\n }\n\n\tprivate applyFilterToList(list: Array>, allowedActions: Array): Array> {\n\t\tconst actions = list.map((a) => {\n\t\t\treturn { ...a };\n\t\t});\n return actions.filter(action => this.applyFilter(action, allowedActions));\n\t}\n}\n","import * as i0 from '@angular/core';\nimport { EventEmitter, Component, Output, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { timer } from 'rxjs';\nfunction CircleProgressComponent__svg_svg_0__svg_linearGradient_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"linearGradient\");\n i0.ɵɵelement(1, \"stop\", 5)(2, \"stop\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"id\", ctx_r1.svg.outerLinearGradient.id);\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"stop-color\", ctx_r1.svg.outerLinearGradient.colorStop1)(\"stop-opacity\", 1);\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"stop-color\", ctx_r1.svg.outerLinearGradient.colorStop2)(\"stop-opacity\", 1);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_radialGradient_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"radialGradient\");\n i0.ɵɵelement(1, \"stop\", 5)(2, \"stop\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"id\", ctx_r2.svg.radialGradient.id);\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"stop-color\", ctx_r2.svg.radialGradient.colorStop1)(\"stop-opacity\", 1);\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"stop-color\", ctx_r2.svg.radialGradient.colorStop2)(\"stop-opacity\", 1);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelement(0, \"circle\");\n }\n if (rf & 2) {\n const ctx_r8 = i0.ɵɵnextContext(3);\n i0.ɵɵattribute(\"cx\", ctx_r8.svg.backgroundCircle.cx)(\"cy\", ctx_r8.svg.backgroundCircle.cy)(\"r\", ctx_r8.svg.backgroundCircle.r)(\"fill\", ctx_r8.svg.backgroundCircle.fill)(\"fill-opacity\", ctx_r8.svg.backgroundCircle.fillOpacity)(\"stroke\", ctx_r8.svg.backgroundCircle.stroke)(\"stroke-width\", ctx_r8.svg.backgroundCircle.strokeWidth);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelement(0, \"circle\");\n }\n if (rf & 2) {\n const ctx_r9 = i0.ɵɵnextContext(3);\n i0.ɵɵattributeInterpolate2(\"fill\", \"url(\", ctx_r9.window.location.href, \"#\", ctx_r9.svg.radialGradient.id, \")\");\n i0.ɵɵattribute(\"cx\", ctx_r9.svg.backgroundCircle.cx)(\"cy\", ctx_r9.svg.backgroundCircle.cy)(\"r\", ctx_r9.svg.backgroundCircle.r)(\"fill-opacity\", ctx_r9.svg.backgroundCircle.fillOpacity)(\"stroke\", ctx_r9.svg.backgroundCircle.stroke)(\"stroke-width\", ctx_r9.svg.backgroundCircle.strokeWidth);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_ng_container_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_1_Template, 1, 7, \"circle\", 2)(2, CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_2_Template, 1, 8, \"circle\", 2);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r3 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !ctx_r3.options.backgroundGradient);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r3.options.backgroundGradient);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_circle_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelement(0, \"circle\");\n }\n if (rf & 2) {\n const ctx_r4 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"cx\", ctx_r4.svg.circle.cx)(\"cy\", ctx_r4.svg.circle.cy)(\"r\", ctx_r4.svg.circle.r)(\"fill\", ctx_r4.svg.circle.fill)(\"stroke\", ctx_r4.svg.circle.stroke)(\"stroke-width\", ctx_r4.svg.circle.strokeWidth);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelement(0, \"path\");\n }\n if (rf & 2) {\n const ctx_r10 = i0.ɵɵnextContext(3);\n i0.ɵɵattribute(\"d\", ctx_r10.svg.path.d)(\"stroke\", ctx_r10.svg.path.stroke)(\"stroke-width\", ctx_r10.svg.path.strokeWidth)(\"stroke-linecap\", ctx_r10.svg.path.strokeLinecap)(\"fill\", ctx_r10.svg.path.fill);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelement(0, \"path\");\n }\n if (rf & 2) {\n const ctx_r11 = i0.ɵɵnextContext(3);\n i0.ɵɵattributeInterpolate2(\"stroke\", \"url(\", ctx_r11.window.location.href, \"#\", ctx_r11.svg.outerLinearGradient.id, \")\");\n i0.ɵɵattribute(\"d\", ctx_r11.svg.path.d)(\"stroke-width\", ctx_r11.svg.path.strokeWidth)(\"stroke-linecap\", ctx_r11.svg.path.strokeLinecap)(\"fill\", ctx_r11.svg.path.fill);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_ng_container_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_1_Template, 1, 5, \"path\", 2)(2, CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_2_Template, 1, 6, \"path\", 2);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !ctx_r5.options.outerStrokeGradient);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r5.options.outerStrokeGradient);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1__svg_tspan_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"tspan\");\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const tspan_r16 = ctx.$implicit;\n const ctx_r15 = i0.ɵɵnextContext(4);\n i0.ɵɵattribute(\"x\", ctx_r15.svg.title.x)(\"y\", ctx_r15.svg.title.y)(\"dy\", tspan_r16.dy)(\"font-size\", ctx_r15.svg.title.fontSize)(\"font-weight\", ctx_r15.svg.title.fontWeight)(\"fill\", ctx_r15.svg.title.color);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(tspan_r16.span);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1__svg_tspan_1_Template, 2, 7, \"tspan\", 8);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r12 = i0.ɵɵnextContext(3);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngForOf\", ctx_r12.svg.title.tspans);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_text_7__svg_tspan_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"tspan\");\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r13 = i0.ɵɵnextContext(3);\n i0.ɵɵattribute(\"font-size\", ctx_r13.svg.units.fontSize)(\"font-weight\", ctx_r13.svg.units.fontWeight)(\"fill\", ctx_r13.svg.units.color);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(ctx_r13.svg.units.text);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3__svg_tspan_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"tspan\");\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const tspan_r18 = ctx.$implicit;\n const ctx_r17 = i0.ɵɵnextContext(4);\n i0.ɵɵattribute(\"x\", ctx_r17.svg.subtitle.x)(\"y\", ctx_r17.svg.subtitle.y)(\"dy\", tspan_r18.dy)(\"font-size\", ctx_r17.svg.subtitle.fontSize)(\"font-weight\", ctx_r17.svg.subtitle.fontWeight)(\"fill\", ctx_r17.svg.subtitle.color);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(tspan_r18.span);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3__svg_tspan_1_Template, 2, 7, \"tspan\", 8);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r14 = i0.ɵɵnextContext(3);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngForOf\", ctx_r14.svg.subtitle.tspans);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_text_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"text\", 7);\n i0.ɵɵtemplate(1, CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1_Template, 2, 1, \"ng-container\", 2)(2, CircleProgressComponent__svg_svg_0__svg_text_7__svg_tspan_2_Template, 2, 4, \"tspan\", 2)(3, CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3_Template, 2, 1, \"ng-container\", 2);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r6 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"x\", ctx_r6.svg.circle.cx)(\"y\", ctx_r6.svg.circle.cy)(\"text-anchor\", ctx_r6.svg.title.textAnchor);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r6.options.showTitle);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r6.options.showUnits);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r6.options.showSubtitle);\n }\n}\nfunction CircleProgressComponent__svg_svg_0__svg_image_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelement(0, \"image\", 9);\n }\n if (rf & 2) {\n const ctx_r7 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"height\", ctx_r7.svg.image.height)(\"width\", ctx_r7.svg.image.width)(\"href\", ctx_r7.svg.image.src, null, \"xlink\")(\"x\", ctx_r7.svg.image.x)(\"y\", ctx_r7.svg.image.y);\n }\n}\nfunction CircleProgressComponent__svg_svg_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r20 = i0.ɵɵgetCurrentView();\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"svg\", 1);\n i0.ɵɵlistener(\"click\", function CircleProgressComponent__svg_svg_0_Template__svg_svg_click_0_listener($event) {\n i0.ɵɵrestoreView(_r20);\n const ctx_r19 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r19.emitClickEvent($event));\n });\n i0.ɵɵelementStart(1, \"defs\");\n i0.ɵɵtemplate(2, CircleProgressComponent__svg_svg_0__svg_linearGradient_2_Template, 3, 5, \"linearGradient\", 2)(3, CircleProgressComponent__svg_svg_0__svg_radialGradient_3_Template, 3, 5, \"radialGradient\", 2);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(4, CircleProgressComponent__svg_svg_0__svg_ng_container_4_Template, 3, 2, \"ng-container\", 2)(5, CircleProgressComponent__svg_svg_0__svg_circle_5_Template, 1, 6, \"circle\", 2)(6, CircleProgressComponent__svg_svg_0__svg_ng_container_6_Template, 3, 2, \"ng-container\", 2)(7, CircleProgressComponent__svg_svg_0__svg_text_7_Template, 4, 6, \"text\", 3)(8, CircleProgressComponent__svg_svg_0__svg_image_8_Template, 1, 5, \"image\", 4);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵattribute(\"viewBox\", ctx_r0.svg.viewBox)(\"height\", ctx_r0.svg.height)(\"width\", ctx_r0.svg.width)(\"class\", ctx_r0.options.class);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx_r0.options.outerStrokeGradient);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r0.options.backgroundGradient);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r0.options.showBackground);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r0.options.showInnerStroke);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", +ctx_r0.options.percent !== 0 || ctx_r0.options.showZeroOuterStroke);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !ctx_r0.options.showImage && (ctx_r0.options.showTitle || ctx_r0.options.showUnits || ctx_r0.options.showSubtitle));\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r0.options.showImage);\n }\n}\nclass CircleProgressOptions {\n constructor() {\n this.class = '';\n this.backgroundGradient = false;\n this.backgroundColor = 'transparent';\n this.backgroundGradientStopColor = 'transparent';\n this.backgroundOpacity = 1;\n this.backgroundStroke = 'transparent';\n this.backgroundStrokeWidth = 0;\n this.backgroundPadding = 5;\n this.percent = 0;\n this.radius = 90;\n this.space = 4;\n this.toFixed = 0;\n this.maxPercent = 1000;\n this.renderOnClick = true;\n this.units = '%';\n this.unitsFontSize = '10';\n this.unitsFontWeight = 'normal';\n this.unitsColor = '#444444';\n this.outerStrokeGradient = false;\n this.outerStrokeWidth = 8;\n this.outerStrokeColor = '#78C000';\n this.outerStrokeGradientStopColor = 'transparent';\n this.outerStrokeLinecap = 'round';\n this.innerStrokeColor = '#C7E596';\n this.innerStrokeWidth = 4;\n this.titleFormat = undefined;\n this.title = 'auto';\n this.titleColor = '#444444';\n this.titleFontSize = '20';\n this.titleFontWeight = 'normal';\n this.subtitleFormat = undefined;\n this.subtitle = 'progress';\n this.subtitleColor = '#A9A9A9';\n this.subtitleFontSize = '10';\n this.subtitleFontWeight = 'normal';\n this.imageSrc = undefined;\n this.imageHeight = 0;\n this.imageWidth = 0;\n this.animation = true;\n this.animateTitle = true;\n this.animateSubtitle = false;\n this.animationDuration = 500;\n this.showTitle = true;\n this.showSubtitle = true;\n this.showUnits = true;\n this.showImage = false;\n this.showBackground = true;\n this.showInnerStroke = true;\n this.clockwise = true;\n this.responsive = false;\n this.startFromZero = true;\n this.showZeroOuterStroke = true;\n this.lazy = false;\n }\n}\nlet CircleProgressComponent = /*#__PURE__*/(() => {\n class CircleProgressComponent {\n constructor(defaultOptions, ngZone, elRef, injector) {\n this.ngZone = ngZone;\n this.elRef = elRef;\n this.onClick = new EventEmitter();\n // of component\n this.svgElement = null;\n // whether is in viewport\n this.isInViewport = false;\n // event for notifying viewport change caused by scrolling or resizing\n this.onViewportChanged = new EventEmitter();\n this._viewportChangedSubscriber = null;\n this.options = new CircleProgressOptions();\n this.defaultOptions = new CircleProgressOptions();\n this._lastPercent = 0;\n this._gradientUUID = null;\n this.render = () => {\n this.applyOptions();\n if (this.options.lazy) {\n // Draw svg if it doesn't exist\n this.svgElement === null && this.draw(this._lastPercent);\n // Draw it only when it's in the viewport\n if (this.isInViewport) {\n // Draw it at the latest position when I am in.\n if (this.options.animation && this.options.animationDuration > 0) {\n this.animate(this._lastPercent, this.options.percent);\n } else {\n this.draw(this.options.percent);\n }\n this._lastPercent = this.options.percent;\n }\n } else {\n if (this.options.animation && this.options.animationDuration > 0) {\n this.animate(this._lastPercent, this.options.percent);\n } else {\n this.draw(this.options.percent);\n }\n this._lastPercent = this.options.percent;\n }\n };\n this.polarToCartesian = (centerX, centerY, radius, angleInDegrees) => {\n let angleInRadius = angleInDegrees * Math.PI / 180;\n let x = centerX + Math.sin(angleInRadius) * radius;\n let y = centerY - Math.cos(angleInRadius) * radius;\n return {\n x: x,\n y: y\n };\n };\n this.draw = percent => {\n // make percent reasonable\n percent = percent === undefined ? this.options.percent : Math.abs(percent);\n // circle percent shouldn't be greater than 100%.\n let circlePercent = percent > 100 ? 100 : percent;\n // determine box size\n let boxSize = this.options.radius * 2 + this.options.outerStrokeWidth * 2;\n if (this.options.showBackground) {\n boxSize += this.options.backgroundStrokeWidth * 2 + this.max(0, this.options.backgroundPadding * 2);\n }\n // the centre of the circle\n let centre = {\n x: boxSize / 2,\n y: boxSize / 2\n };\n // the start point of the arc\n let startPoint = {\n x: centre.x,\n y: centre.y - this.options.radius\n };\n // get the end point of the arc\n let endPoint = this.polarToCartesian(centre.x, centre.y, this.options.radius, 360 * (this.options.clockwise ? circlePercent : 100 - circlePercent) / 100); // ####################\n // We'll get an end point with the same [x, y] as the start point when percent is 100%, so move x a little bit.\n if (circlePercent === 100) {\n endPoint.x = endPoint.x + (this.options.clockwise ? -0.01 : +0.01);\n }\n // largeArcFlag and sweepFlag\n let largeArcFlag, sweepFlag;\n if (circlePercent > 50) {\n [largeArcFlag, sweepFlag] = this.options.clockwise ? [1, 1] : [1, 0];\n } else {\n [largeArcFlag, sweepFlag] = this.options.clockwise ? [0, 1] : [0, 0];\n }\n // percent may not equal the actual percent\n let titlePercent = this.options.animateTitle ? percent : this.options.percent;\n let titleTextPercent = titlePercent > this.options.maxPercent ? `${this.options.maxPercent.toFixed(this.options.toFixed)}+` : titlePercent.toFixed(this.options.toFixed);\n let subtitlePercent = this.options.animateSubtitle ? percent : this.options.percent;\n // get title object\n let title = {\n x: centre.x,\n y: centre.y,\n textAnchor: 'middle',\n color: this.options.titleColor,\n fontSize: this.options.titleFontSize,\n fontWeight: this.options.titleFontWeight,\n texts: [],\n tspans: []\n };\n // from v0.9.9, both title and titleFormat(...) may be an array of string.\n if (this.options.titleFormat !== undefined && this.options.titleFormat.constructor.name === 'Function') {\n let formatted = this.options.titleFormat(titlePercent);\n if (formatted instanceof Array) {\n title.texts = [...formatted];\n } else {\n title.texts.push(formatted.toString());\n }\n } else {\n if (this.options.title === 'auto') {\n title.texts.push(titleTextPercent);\n } else {\n if (this.options.title instanceof Array) {\n title.texts = [...this.options.title];\n } else {\n title.texts.push(this.options.title.toString());\n }\n }\n }\n // get subtitle object\n let subtitle = {\n x: centre.x,\n y: centre.y,\n textAnchor: 'middle',\n color: this.options.subtitleColor,\n fontSize: this.options.subtitleFontSize,\n fontWeight: this.options.subtitleFontWeight,\n texts: [],\n tspans: []\n };\n // from v0.9.9, both subtitle and subtitleFormat(...) may be an array of string.\n if (this.options.subtitleFormat !== undefined && this.options.subtitleFormat.constructor.name === 'Function') {\n let formatted = this.options.subtitleFormat(subtitlePercent);\n if (formatted instanceof Array) {\n subtitle.texts = [...formatted];\n } else {\n subtitle.texts.push(formatted.toString());\n }\n } else {\n if (this.options.subtitle instanceof Array) {\n subtitle.texts = [...this.options.subtitle];\n } else {\n subtitle.texts.push(this.options.subtitle.toString());\n }\n }\n // get units object\n let units = {\n text: `${this.options.units}`,\n fontSize: this.options.unitsFontSize,\n fontWeight: this.options.unitsFontWeight,\n color: this.options.unitsColor\n };\n // get total count of text lines to be shown\n let rowCount = 0,\n rowNum = 1;\n this.options.showTitle && (rowCount += title.texts.length);\n this.options.showSubtitle && (rowCount += subtitle.texts.length);\n // calc dy for each tspan for title\n if (this.options.showTitle) {\n for (let span of title.texts) {\n title.tspans.push({\n span: span,\n dy: this.getRelativeY(rowNum, rowCount)\n });\n rowNum++;\n }\n }\n // calc dy for each tspan for subtitle\n if (this.options.showSubtitle) {\n for (let span of subtitle.texts) {\n subtitle.tspans.push({\n span: span,\n dy: this.getRelativeY(rowNum, rowCount)\n });\n rowNum++;\n }\n }\n // create ID for gradient element\n if (null === this._gradientUUID) {\n this._gradientUUID = this.uuid();\n }\n // Bring it all together\n this.svg = {\n viewBox: `0 0 ${boxSize} ${boxSize}`,\n // Set both width and height to '100%' if it's responsive\n width: this.options.responsive ? '100%' : boxSize,\n height: this.options.responsive ? '100%' : boxSize,\n backgroundCircle: {\n cx: centre.x,\n cy: centre.y,\n r: this.options.radius + this.options.outerStrokeWidth / 2 + this.options.backgroundPadding,\n fill: this.options.backgroundColor,\n fillOpacity: this.options.backgroundOpacity,\n stroke: this.options.backgroundStroke,\n strokeWidth: this.options.backgroundStrokeWidth\n },\n path: {\n // A rx ry x-axis-rotation large-arc-flag sweep-flag x y (https://developer.mozilla.org/en/docs/Web/SVG/Tutorial/Paths#Arcs)\n d: `M ${startPoint.x} ${startPoint.y}\n A ${this.options.radius} ${this.options.radius} 0 ${largeArcFlag} ${sweepFlag} ${endPoint.x} ${endPoint.y}`,\n stroke: this.options.outerStrokeColor,\n strokeWidth: this.options.outerStrokeWidth,\n strokeLinecap: this.options.outerStrokeLinecap,\n fill: 'none'\n },\n circle: {\n cx: centre.x,\n cy: centre.y,\n r: this.options.radius - this.options.space - this.options.outerStrokeWidth / 2 - this.options.innerStrokeWidth / 2,\n fill: 'none',\n stroke: this.options.innerStrokeColor,\n strokeWidth: this.options.innerStrokeWidth\n },\n title: title,\n units: units,\n subtitle: subtitle,\n image: {\n x: centre.x - this.options.imageWidth / 2,\n y: centre.y - this.options.imageHeight / 2,\n src: this.options.imageSrc,\n width: this.options.imageWidth,\n height: this.options.imageHeight\n },\n outerLinearGradient: {\n id: 'outer-linear-' + this._gradientUUID,\n colorStop1: this.options.outerStrokeColor,\n colorStop2: this.options.outerStrokeGradientStopColor === 'transparent' ? '#FFF' : this.options.outerStrokeGradientStopColor\n },\n radialGradient: {\n id: 'radial-' + this._gradientUUID,\n colorStop1: this.options.backgroundColor,\n colorStop2: this.options.backgroundGradientStopColor === 'transparent' ? '#FFF' : this.options.backgroundGradientStopColor\n }\n };\n };\n this.getAnimationParameters = (previousPercent, currentPercent) => {\n const MIN_INTERVAL = 10;\n let times, step, interval;\n let fromPercent = this.options.startFromZero ? 0 : previousPercent < 0 ? 0 : previousPercent;\n let toPercent = currentPercent < 0 ? 0 : this.min(currentPercent, this.options.maxPercent);\n let delta = Math.abs(Math.round(toPercent - fromPercent));\n if (delta >= 100) {\n // we will finish animation in 100 times\n times = 100;\n if (!this.options.animateTitle && !this.options.animateSubtitle) {\n step = 1;\n } else {\n // show title or subtitle animation even if the arc is full, we also need to finish it in 100 times.\n step = Math.round(delta / times);\n }\n } else {\n // we will finish in as many times as the number of percent.\n times = delta;\n step = 1;\n }\n // Get the interval of timer\n interval = Math.round(this.options.animationDuration / times);\n // Readjust all values if the interval of timer is extremely small.\n if (interval < MIN_INTERVAL) {\n interval = MIN_INTERVAL;\n times = this.options.animationDuration / interval;\n if (!this.options.animateTitle && !this.options.animateSubtitle && delta > 100) {\n step = Math.round(100 / times);\n } else {\n step = Math.round(delta / times);\n }\n }\n // step must be greater than 0.\n if (step < 1) {\n step = 1;\n }\n return {\n times: times,\n step: step,\n interval: interval\n };\n };\n this.animate = (previousPercent, currentPercent) => {\n if (this._timerSubscription && !this._timerSubscription.closed) {\n this._timerSubscription.unsubscribe();\n }\n let fromPercent = this.options.startFromZero ? 0 : previousPercent;\n let toPercent = currentPercent;\n let {\n step: step,\n interval: interval\n } = this.getAnimationParameters(fromPercent, toPercent);\n let count = fromPercent;\n if (fromPercent < toPercent) {\n this._timerSubscription = timer(0, interval).subscribe(() => {\n count += step;\n if (count <= toPercent) {\n if (!this.options.animateTitle && !this.options.animateSubtitle && count >= 100) {\n this.draw(toPercent);\n this._timerSubscription.unsubscribe();\n } else {\n this.draw(count);\n }\n } else {\n this.draw(toPercent);\n this._timerSubscription.unsubscribe();\n }\n });\n } else {\n this._timerSubscription = timer(0, interval).subscribe(() => {\n count -= step;\n if (count >= toPercent) {\n if (!this.options.animateTitle && !this.options.animateSubtitle && toPercent >= 100) {\n this.draw(toPercent);\n this._timerSubscription.unsubscribe();\n } else {\n this.draw(count);\n }\n } else {\n this.draw(toPercent);\n this._timerSubscription.unsubscribe();\n }\n });\n }\n };\n this.applyOptions = () => {\n // the options of may change already\n for (let name of Object.keys(this.options)) {\n if (this.hasOwnProperty(name) && this[name] !== undefined) {\n this.options[name] = this[name];\n } else if (this.templateOptions && this.templateOptions[name] !== undefined) {\n this.options[name] = this.templateOptions[name];\n }\n }\n // make sure key options valid\n this.options.radius = Math.abs(+this.options.radius);\n this.options.space = +this.options.space;\n this.options.percent = +this.options.percent > 0 ? +this.options.percent : 0;\n this.options.maxPercent = Math.abs(+this.options.maxPercent);\n this.options.animationDuration = Math.abs(this.options.animationDuration);\n this.options.outerStrokeWidth = Math.abs(+this.options.outerStrokeWidth);\n this.options.innerStrokeWidth = Math.abs(+this.options.innerStrokeWidth);\n this.options.backgroundPadding = +this.options.backgroundPadding;\n };\n this.getRelativeY = (rowNum, rowCount) => {\n // why '-0.18em'? It's a magic number when property 'alignment-baseline' equals 'baseline'. :)\n let initialOffset = -0.18,\n offset = 1;\n return (initialOffset + offset * (rowNum - rowCount / 2)).toFixed(2) + 'em';\n };\n this.min = (a, b) => {\n return a < b ? a : b;\n };\n this.max = (a, b) => {\n return a > b ? a : b;\n };\n this.uuid = () => {\n // https://www.w3resource.com/javascript-exercises/javascript-math-exercise-23.php\n var dt = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n });\n return uuid;\n };\n this.checkViewport = () => {\n this.findSvgElement();\n let previousValue = this.isInViewport;\n this.isInViewport = this.isElementInViewport(this.svgElement);\n if (previousValue !== this.isInViewport && this.onViewportChanged.observers.length > 0) {\n this.ngZone.run(() => {\n this.onViewportChanged.emit({\n oldValue: previousValue,\n newValue: this.isInViewport\n });\n });\n }\n };\n this.onScroll = event => {\n this.checkViewport();\n };\n this.loadEventsForLazyMode = () => {\n if (this.options.lazy) {\n this.ngZone.runOutsideAngular(() => {\n this.document.addEventListener('scroll', this.onScroll, true);\n this.window.addEventListener('resize', this.onScroll, true);\n });\n if (this._viewportChangedSubscriber === null) {\n this._viewportChangedSubscriber = this.onViewportChanged.subscribe(({\n oldValue,\n newValue\n }) => {\n newValue ? this.render() : null;\n });\n }\n // svgElement must be created in DOM before being checked.\n // Is there a better way to check the existence of svgElemnt?\n let _timer = timer(0, 50).subscribe(() => {\n this.svgElement === null ? this.checkViewport() : _timer.unsubscribe();\n });\n }\n };\n this.unloadEventsForLazyMode = () => {\n // Remove event listeners\n this.document.removeEventListener('scroll', this.onScroll, true);\n this.window.removeEventListener('resize', this.onScroll, true);\n // Unsubscribe onViewportChanged\n if (this._viewportChangedSubscriber !== null) {\n this._viewportChangedSubscriber.unsubscribe();\n this._viewportChangedSubscriber = null;\n }\n };\n this.document = injector.get(DOCUMENT);\n this.window = this.document.defaultView;\n Object.assign(this.options, defaultOptions);\n Object.assign(this.defaultOptions, defaultOptions);\n }\n emitClickEvent(event) {\n if (this.options.renderOnClick) {\n this.animate(0, this.options.percent);\n }\n if (this.onClick.observers.length > 0) {\n this.onClick.emit(event);\n }\n }\n isDrawing() {\n return this._timerSubscription && !this._timerSubscription.closed;\n }\n findSvgElement() {\n if (this.svgElement === null) {\n let tags = this.elRef.nativeElement.getElementsByTagName('svg');\n if (tags.length > 0) {\n this.svgElement = tags[0];\n }\n }\n }\n isElementInViewport(el) {\n // Return false if el has not been created in page.\n if (el === null || el === undefined) return false;\n // Check if the element is out of view due to a container scrolling\n let rect = el.getBoundingClientRect(),\n parent = el.parentNode,\n parentRect;\n do {\n parentRect = parent.getBoundingClientRect();\n if (rect.top >= parentRect.bottom) return false;\n if (rect.bottom <= parentRect.top) return false;\n if (rect.left >= parentRect.right) return false;\n if (rect.right <= parentRect.left) return false;\n parent = parent.parentNode;\n } while (parent != this.document.body);\n // Check its within the document viewport\n if (rect.top >= (this.window.innerHeight || this.document.documentElement.clientHeight)) return false;\n if (rect.bottom <= 0) return false;\n if (rect.left >= (this.window.innerWidth || this.document.documentElement.clientWidth)) return false;\n if (rect.right <= 0) return false;\n return true;\n }\n ngOnInit() {\n this.loadEventsForLazyMode();\n }\n ngOnDestroy() {\n this.unloadEventsForLazyMode();\n }\n ngOnChanges(changes) {\n this.render();\n if ('lazy' in changes) {\n changes.lazy.currentValue ? this.loadEventsForLazyMode() : this.unloadEventsForLazyMode();\n }\n }\n }\n CircleProgressComponent.ɵfac = function CircleProgressComponent_Factory(t) {\n return new (t || CircleProgressComponent)(i0.ɵɵdirectiveInject(CircleProgressOptions), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Injector));\n };\n CircleProgressComponent.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CircleProgressComponent,\n selectors: [[\"circle-progress\"]],\n inputs: {\n name: \"name\",\n class: \"class\",\n backgroundGradient: \"backgroundGradient\",\n backgroundColor: \"backgroundColor\",\n backgroundGradientStopColor: \"backgroundGradientStopColor\",\n backgroundOpacity: \"backgroundOpacity\",\n backgroundStroke: \"backgroundStroke\",\n backgroundStrokeWidth: \"backgroundStrokeWidth\",\n backgroundPadding: \"backgroundPadding\",\n radius: \"radius\",\n space: \"space\",\n percent: \"percent\",\n toFixed: \"toFixed\",\n maxPercent: \"maxPercent\",\n renderOnClick: \"renderOnClick\",\n units: \"units\",\n unitsFontSize: \"unitsFontSize\",\n unitsFontWeight: \"unitsFontWeight\",\n unitsColor: \"unitsColor\",\n outerStrokeGradient: \"outerStrokeGradient\",\n outerStrokeWidth: \"outerStrokeWidth\",\n outerStrokeColor: \"outerStrokeColor\",\n outerStrokeGradientStopColor: \"outerStrokeGradientStopColor\",\n outerStrokeLinecap: \"outerStrokeLinecap\",\n innerStrokeColor: \"innerStrokeColor\",\n innerStrokeWidth: \"innerStrokeWidth\",\n titleFormat: \"titleFormat\",\n title: \"title\",\n titleColor: \"titleColor\",\n titleFontSize: \"titleFontSize\",\n titleFontWeight: \"titleFontWeight\",\n subtitleFormat: \"subtitleFormat\",\n subtitle: \"subtitle\",\n subtitleColor: \"subtitleColor\",\n subtitleFontSize: \"subtitleFontSize\",\n subtitleFontWeight: \"subtitleFontWeight\",\n imageSrc: \"imageSrc\",\n imageHeight: \"imageHeight\",\n imageWidth: \"imageWidth\",\n animation: \"animation\",\n animateTitle: \"animateTitle\",\n animateSubtitle: \"animateSubtitle\",\n animationDuration: \"animationDuration\",\n showTitle: \"showTitle\",\n showSubtitle: \"showSubtitle\",\n showUnits: \"showUnits\",\n showImage: \"showImage\",\n showBackground: \"showBackground\",\n showInnerStroke: \"showInnerStroke\",\n clockwise: \"clockwise\",\n responsive: \"responsive\",\n startFromZero: \"startFromZero\",\n showZeroOuterStroke: \"showZeroOuterStroke\",\n lazy: \"lazy\",\n templateOptions: [\"options\", \"templateOptions\"]\n },\n outputs: {\n onClick: \"onClick\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 1,\n vars: 1,\n consts: [[\"xmlns\", \"http://www.w3.org/2000/svg\", \"preserveAspectRatio\", \"xMidYMid meet\", 3, \"click\", 4, \"ngIf\"], [\"xmlns\", \"http://www.w3.org/2000/svg\", \"preserveAspectRatio\", \"xMidYMid meet\", 3, \"click\"], [4, \"ngIf\"], [\"alignment-baseline\", \"baseline\", 4, \"ngIf\"], [\"preserveAspectRatio\", \"none\", 4, \"ngIf\"], [\"offset\", \"5%\"], [\"offset\", \"95%\"], [\"alignment-baseline\", \"baseline\"], [4, \"ngFor\", \"ngForOf\"], [\"preserveAspectRatio\", \"none\"]],\n template: function CircleProgressComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, CircleProgressComponent__svg_svg_0_Template, 9, 11, \"svg\", 0);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.svg);\n }\n },\n dependencies: [i1.NgForOf, i1.NgIf],\n encapsulation: 2\n });\n return CircleProgressComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgCircleProgressModule = /*#__PURE__*/(() => {\n class NgCircleProgressModule {\n static forRoot(options = {}) {\n return {\n ngModule: NgCircleProgressModule,\n providers: [{\n provide: CircleProgressOptions,\n useValue: options\n }]\n };\n }\n }\n NgCircleProgressModule.ɵfac = function NgCircleProgressModule_Factory(t) {\n return new (t || NgCircleProgressModule)();\n };\n NgCircleProgressModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgCircleProgressModule\n });\n NgCircleProgressModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule]\n });\n return NgCircleProgressModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of ng-circle-progress\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CircleProgressComponent, CircleProgressOptions, NgCircleProgressModule };\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\nimport {NgCircleProgressModule } from \"ng-circle-progress\";\n\n@Component({\n selector: 'app-circular-loader',\n standalone: true,\n imports: [CommonModule, NgCircleProgressModule],\n // providers: [\n // importProvidersFrom(NgCircleProgressModule),\n // ],\n templateUrl: './circular-loader.component.html',\n styleUrls: ['./circular-loader.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CircularLoaderComponent {\n\n @Input() currentValue: number = 0;\n /**\n * If an animation should be used\n */\n @Input() animation: boolean = true;\n /**\n * Color of an inner bar\n */\n @Input() innerStrokeColor: string = 'transparent';\n /**\n * Color of the Downloader bar\n */\n @Input() outerStrokeColor: string = '#4ac694';\n @Input() backgroundColor: string = '#000';\n @Input() fontSize: string = '36px';\n /**\n * Show the icon inside the downloader\n */\n @Input() showIcon: boolean = true;\n /**\n * The width in pixels of the loader\n */\n @Input() width: string = '100px';\n /**\n * The height in pixels of the loader\n */\n @Input() height: string = '100px';\n /**\n * Centers the icon in the middle of the loader. Best for card use.\n */\n @Input() center: boolean = true;\n}\n"," 0\">\n
\n \n
\n
\n \n
\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Download } from 'src/app/shared/_models/download';\nimport { DownloadEvent } from 'src/app/shared/_services/download.service';\nimport {CommonModule} from \"@angular/common\";\nimport {CircularLoaderComponent} from \"../../shared/circular-loader/circular-loader.component\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-download-indicator',\n standalone: true,\n imports: [CommonModule, CircularLoaderComponent, TranslocoDirective],\n templateUrl: './download-indicator.component.html',\n styleUrls: ['./download-indicator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DownloadIndicatorComponent {\n\n /**\n * Observable that represents when the download completes\n */\n @Input({required: true}) download$!: Observable | null;\n}\n","\n \n \n \n {{t('progress',{percentage: download.progress})}}\n \n \n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MangaFormat } from '../_models/manga-format';\n\n/**\n * Returns the icon class representing the format\n */\n@Pipe({\n name: 'mangaFormatIcon',\n standalone: true\n})\nexport class MangaFormatIconPipe implements PipeTransform {\n\n transform(format: MangaFormat): string {\n switch (format) {\n case MangaFormat.EPUB:\n return 'fa-book';\n case MangaFormat.ARCHIVE:\n return 'fa-file-archive';\n case MangaFormat.IMAGE:\n return 'fa-image';\n case MangaFormat.PDF:\n return 'fa-file-pdf';\n case MangaFormat.UNKNOWN:\n return 'fa-question';\n }\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, DestroyRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { DownloadEvent, DownloadService } from 'src/app/shared/_services/download.service';\nimport { UtilityService } from 'src/app/shared/_services/utility.service';\nimport { Chapter } from 'src/app/_models/chapter';\nimport { CollectionTag } from 'src/app/_models/collection-tag';\nimport { UserProgressUpdateEvent } from 'src/app/_models/events/user-progress-update-event';\nimport { MangaFormat } from 'src/app/_models/manga-format';\nimport { PageBookmark } from 'src/app/_models/readers/page-bookmark';\nimport { RecentlyAddedItem } from 'src/app/_models/recently-added-item';\nimport { Series } from 'src/app/_models/series';\nimport { User } from 'src/app/_models/user';\nimport { Volume } from 'src/app/_models/volume';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { Action, ActionFactoryService, ActionItem } from 'src/app/_services/action-factory.service';\nimport { ImageService } from 'src/app/_services/image.service';\nimport { LibraryService } from 'src/app/_services/library.service';\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\nimport { ScrollService } from 'src/app/_services/scroll.service';\nimport { BulkSelectionService } from '../bulk-selection.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {ImageComponent} from \"../../shared/image/image.component\";\nimport {NgbProgressbar, NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\nimport {DownloadIndicatorComponent} from \"../download-indicator/download-indicator.component\";\nimport {FormsModule} from \"@angular/forms\";\nimport {MangaFormatPipe} from \"../../_pipes/manga-format.pipe\";\nimport {MangaFormatIconPipe} from \"../../_pipes/manga-format-icon.pipe\";\nimport {SentenceCasePipe} from \"../../_pipes/sentence-case.pipe\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterLink, RouterLinkActive} from \"@angular/router\";\nimport {TranslocoModule} from \"@ngneat/transloco\";\nimport {CardActionablesComponent} from \"../../_single-module/card-actionables/card-actionables.component\";\nimport {NextExpectedChapter} from \"../../_models/series-detail/next-expected-chapter\";\nimport {UtcToLocalTimePipe} from \"../../_pipes/utc-to-local-time.pipe\";\nimport {SafeHtmlPipe} from \"../../_pipes/safe-html.pipe\";\n\n@Component({\n selector: 'app-card-item',\n standalone: true,\n imports: [\n CommonModule,\n ImageComponent,\n NgbProgressbar,\n DownloadIndicatorComponent,\n FormsModule,\n NgbTooltip,\n MangaFormatPipe,\n MangaFormatIconPipe,\n CardActionablesComponent,\n SentenceCasePipe,\n RouterLink,\n TranslocoModule,\n SafeHtmlPipe,\n RouterLinkActive\n ],\n templateUrl: './card-item.component.html',\n styleUrls: ['./card-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardItemComponent implements OnInit {\n\n private readonly destroyRef = inject(DestroyRef);\n public readonly imageService = inject(ImageService);\n public readonly bulkSelectionService = inject(BulkSelectionService);\n private readonly libraryService = inject(LibraryService);\n private readonly downloadService = inject(DownloadService);\n private readonly utilityService = inject(UtilityService);\n private readonly messageHub = inject(MessageHubService);\n private readonly accountService = inject(AccountService);\n private readonly scrollService = inject(ScrollService);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly actionFactoryService = inject(ActionFactoryService);\n protected readonly MangaFormat = MangaFormat;\n\n /**\n * Card item url. Will internally handle error and missing covers\n */\n @Input() imageUrl = '';\n /**\n * Name of the card\n */\n @Input() title = '';\n /**\n * Shows below the title. Defaults to not visible\n */\n @Input() subtitle = '';\n /**\n * Any actions to perform on the card\n */\n @Input() actions: ActionItem[] = [];\n /**\n * Pages Read\n */\n @Input() read = 0;\n /**\n * Total Pages\n */\n @Input() total = 0;\n /**\n * Suppress library link\n */\n @Input() suppressLibraryLink = false;\n /**\n * This is the entity we are representing. It will be returned if an action is executed.\n */\n @Input({required: true}) entity!: Series | Volume | Chapter | CollectionTag | PageBookmark | RecentlyAddedItem | NextExpectedChapter;\n /**\n * If the entity is selected or not.\n */\n @Input() selected: boolean = false;\n /**\n * If the entity should show selection code\n */\n @Input() allowSelection: boolean = false;\n /**\n * This will suppress the \"cannot read archive warning\" when total pages is 0\n */\n @Input() suppressArchiveWarning: boolean = false;\n /**\n * The number of updates/items within the card. If less than 2, will not be shown.\n */\n @Input() count: number = 0;\n /**\n * Additional information to show on the overlay area. Will always render.\n */\n @Input() overlayInformation: string = '';\n /**\n * If overlay is enabled, should the text be centered or not\n */\n @Input() centerOverlay = false;\n /**\n * Event emitted when item is clicked\n */\n @Output() clicked = new EventEmitter();\n /**\n * When the card is selected.\n */\n @Output() selection = new EventEmitter();\n /**\n * Library name item belongs to\n */\n libraryName: string | undefined = undefined;\n libraryId: number | undefined = undefined;\n /**\n * Format of the entity (only applies to Series)\n */\n format: MangaFormat = MangaFormat.UNKNOWN;\n tooltipTitle: string = this.title;\n\n /**\n * This is the download we get from download service.\n */\n download$: Observable | null = null;\n\n /**\n * Handles touch events for selection on mobile devices\n */\n prevTouchTime: number = 0;\n /**\n * Handles touch events for selection on mobile devices to ensure you aren't touch scrolling\n */\n prevOffset: number = 0;\n selectionInProgress: boolean = false;\n\n private user: User | undefined;\n\n ngOnInit(): void {\n\n if (this.entity.hasOwnProperty('promoted') && this.entity.hasOwnProperty('title')) {\n this.suppressArchiveWarning = true;\n this.cdRef.markForCheck();\n }\n\n if (!this.suppressLibraryLink) {\n if (this.entity !== undefined && this.entity.hasOwnProperty('libraryId')) {\n this.libraryId = (this.entity as Series).libraryId;\n this.cdRef.markForCheck();\n }\n\n if (this.libraryId !== undefined && this.libraryId > 0) {\n this.libraryService.getLibraryName(this.libraryId).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(name => {\n this.libraryName = name;\n this.cdRef.markForCheck();\n });\n }\n }\n this.format = (this.entity as Series).format;\n\n if (this.utilityService.isChapter(this.entity)) {\n const chapterTitle = this.utilityService.asChapter(this.entity).titleName;\n if (chapterTitle === '' || chapterTitle === null || chapterTitle === undefined) {\n const volumeTitle = this.utilityService.asChapter(this.entity).volumeTitle\n if (volumeTitle === '' || volumeTitle === null || volumeTitle === undefined) {\n this.tooltipTitle = (this.title).trim();\n } else {\n this.tooltipTitle = (this.utilityService.asChapter(this.entity).volumeTitle + ' ' + this.title).trim();\n }\n } else {\n this.tooltipTitle = chapterTitle;\n }\n } else if (this.utilityService.isVolume(this.entity)) {\n const vol = this.utilityService.asVolume(this.entity);\n if (vol.chapters !== undefined && vol.chapters.length > 0) {\n this.tooltipTitle = vol.chapters[0].titleName;\n }\n if (this.tooltipTitle === '') {\n this.tooltipTitle = vol.name;\n }\n } else if (this.utilityService.isSeries(this.entity)) {\n this.tooltipTitle = this.title || (this.utilityService.asSeries(this.entity).name);\n } else if (this.entity.hasOwnProperty('expectedDate')) {\n this.suppressArchiveWarning = true;\n this.imageUrl = '';\n const nextDate = (this.entity as NextExpectedChapter);\n\n const tokens = nextDate.title.split(':');\n this.overlayInformation = `\n \n
${tokens[0]}
${tokens[1]}
`;\n this.centerOverlay = true;\n\n if (nextDate.expectedDate) {\n const utcPipe = new UtcToLocalTimePipe();\n this.title = '~ ' + utcPipe.transform(nextDate.expectedDate, 'shortDate');\n }\n\n this.cdRef.markForCheck();\n }\n\n\n this.filterSendTo();\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\n this.user = user;\n });\n\n this.messageHub.messages$.pipe(filter(event => event.event === EVENTS.UserProgressUpdate),\n map(evt => evt.payload as UserProgressUpdateEvent), takeUntilDestroyed(this.destroyRef)).subscribe(updateEvent => {\n if (this.user === undefined || this.user.username !== updateEvent.username) return;\n if (this.utilityService.isChapter(this.entity) && updateEvent.chapterId !== this.entity.id) return;\n if (this.utilityService.isVolume(this.entity) && updateEvent.volumeId !== this.entity.id) return;\n if (this.utilityService.isSeries(this.entity) && updateEvent.seriesId !== this.entity.id) return;\n\n // For volume or Series, we can't just take the event\n if (this.utilityService.isChapter(this.entity)) {\n const c = this.utilityService.asChapter(this.entity);\n c.pagesRead = updateEvent.pagesRead;\n this.read = updateEvent.pagesRead;\n }\n if (this.utilityService.isVolume(this.entity) || this.utilityService.isSeries(this.entity)) {\n if (this.utilityService.isVolume(this.entity)) {\n const v = this.utilityService.asVolume(this.entity);\n let sum = 0;\n const chapters = v.chapters.filter(c => c.volumeId === updateEvent.volumeId);\n chapters.forEach(chapter => {\n chapter.pagesRead = updateEvent.pagesRead;\n sum += chapter.pagesRead;\n });\n v.pagesRead = sum;\n this.read = sum;\n } else {\n return;\n }\n }\n\n this.cdRef.detectChanges();\n });\n\n this.download$ = this.downloadService.activeDownloads$.pipe(takeUntilDestroyed(this.destroyRef), map((events) => {\n return this.downloadService.mapToEntityType(events, this.entity);\n }));\n }\n\n\n @HostListener('touchmove', ['$event'])\n onTouchMove(event: TouchEvent) {\n if (!this.allowSelection) return;\n\n this.selectionInProgress = false;\n this.cdRef.markForCheck();\n }\n\n @HostListener('touchstart', ['$event'])\n onTouchStart(event: TouchEvent) {\n if (!this.allowSelection) return;\n\n this.prevTouchTime = event.timeStamp;\n this.prevOffset = this.scrollService.scrollPosition;\n this.selectionInProgress = true;\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: TouchEvent) {\n if (!this.allowSelection) return;\n const delta = event.timeStamp - this.prevTouchTime;\n const verticalOffset = this.scrollService.scrollPosition;\n\n if (delta >= 300 && delta <= 1000 && (verticalOffset === this.prevOffset) && this.selectionInProgress) {\n this.handleSelection();\n event.stopPropagation();\n event.preventDefault();\n }\n this.prevTouchTime = 0;\n this.selectionInProgress = false;\n }\n\n\n handleClick(event?: any) {\n if (this.bulkSelectionService.hasSelections()) {\n this.handleSelection();\n return;\n }\n this.clicked.emit(this.title);\n }\n\n preventClick(event: any) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n performAction(action: ActionItem) {\n if (action.action == Action.Download) {\n if (this.utilityService.isVolume(this.entity)) {\n const volume = this.utilityService.asVolume(this.entity);\n this.downloadService.download('volume', volume);\n } else if (this.utilityService.isChapter(this.entity)) {\n const chapter = this.utilityService.asChapter(this.entity);\n this.downloadService.download('chapter', chapter);\n } else if (this.utilityService.isSeries(this.entity)) {\n const series = this.utilityService.asSeries(this.entity);\n this.downloadService.download('series', series);\n }\n return; // Don't propagate the download from a card\n }\n\n if (typeof action.callback === 'function') {\n action.callback(action, this.entity);\n }\n }\n\n\n isPromoted() {\n const tag = this.entity as CollectionTag;\n return tag.hasOwnProperty('promoted') && tag.promoted;\n }\n\n\n handleSelection(event?: any) {\n if (event) {\n event.stopPropagation();\n }\n this.selection.emit(this.selected);\n this.cdRef.detectChanges();\n }\n\n filterSendTo() {\n if (!this.actions || this.actions.length === 0) return;\n\n if (this.utilityService.isChapter(this.entity)) {\n this.actions = this.actionFactoryService.filterSendToAction(this.actions, this.entity as Chapter);\n } else if (this.utilityService.isVolume(this.entity)) {\n const vol = this.utilityService.asVolume(this.entity);\n this.actions = this.actionFactoryService.filterSendToAction(this.actions, vol.chapters[0]);\n } else if (this.utilityService.isSeries(this.entity)) {\n const series = (this.entity as Series);\n // if (series.format === MangaFormat.EPUB || series.format === MangaFormat.PDF) {\n // this.actions = this.actions.filter(a => a.title !== 'Send To');\n // }\n }\n }\n}\n","\n
\n
\n @if (total > 0 || suppressArchiveWarning) {\n \n } @else if (total === 0 && !suppressArchiveWarning) {\n \n }\n\n
\n @if (read > 0 && read < total && total > 0 && read !== total) {\n

\n \n

\n }\n\n \n \n \n
\n\n @if(total === 0 && !suppressArchiveWarning) {\n
\n {{t('cannot-read')}}\n
\n }\n\n @if (read === 0 && total > 0) {\n
\n
\n
\n }\n\n
\n \n
\n\n
1\">\n {{count}}\n
\n
\n @if (overlayInformation | safeHtml; as info) {\n
\n
\n \n
\n
\n }\n
\n\n
0 || actions.length > 0\">\n
\n \n \n \n (promoted)\n \n \n \n {{formatString}}\n \n {{title}}\n \n 0\">\n \n \n
\n 0\">{{subtitle}}\n \n {{libraryName | sentenceCase}}\n \n
\n
\n\n
\n"],"mappings":"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","names":["Action","ActionFactoryService","constructor","accountService","deviceService","libraryActions","seriesActions","volumeActions","chapterActions","collectionTagActions","readingListActions","bookmarkActions","sideNavStreamActions","isAdmin","hasDownloadRole","currentUser$","subscribe","user","hasAdminRole","_resetActions","getLibraryActions","callback","applyCallbackToList","getSeriesActions","getSideNavStreamActions","getVolumeActions","getChapterActions","getCollectionTagActions","getReadingListActions","getBookmarkActions","getMetadataFilterActions","actions","title","action","AddRuleGroup","requiresAdmin","children","dummyCallback","RemoveRuleGroup","data","filterSendToAction","chapter","Scan","Submenu","RefreshMetadata","AnalyzeFiles","Delete","Edit","class","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","ɵɵinject","AccountService","DeviceService","factory","ɵfac","providedIn","_ActionFactoryService","DynamicListPipe","transform","value","pure","standalone","_DynamicListPipe","ɵɵelementContainer","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","$event","dynamicItem_r17","ɵɵrestoreView","_r20","$implicit","action_r8","ɵɵnextContext","ctx_r18","ɵɵresetView","performDynamicClick","ɵɵtext","ɵɵelementEnd","ɵɵelementContainerEnd","ɵɵadvance","ɵɵtextInterpolate","title","ɵɵtemplate","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_container_1_ng_container_1_Template","ɵɵproperty","dList_r15","_r24","ctx_r22","performAction","ctx_r25","closeAllSubmenus","t_r1","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_button_0_Template","ctx_r13","willRenderAction","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_container_1_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_Template","ɵɵtemplateRefExtractor","dynamicList","undefined","ɵɵpipeBind1","_r14","ɵɵelement","ɵɵpropertyInterpolate1","ɵɵtextInterpolate1","_r37","_r31","ɵɵreference","ctx_r36","preventEvent","openSubmenu","ctx_r39","ctx_r41","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_button_3_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_ng_container_5_Template","ctx_r30","ɵɵattributeInterpolate1","_r5","ɵɵpureFunction1","_c0","children","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_Template","ctx_r10","shouldRenderSubMenu","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_Template","length","_r11","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_Template","list_r6","_r45","ctx_r44","CardActionablesComponent_ng_container_0_ng_container_1_ng_container_5_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_Template","ɵɵclassMapInterpolate1","ctx_r2","btnClass","labelBy","disabled","iconClass","actions","CardActionablesComponent_ng_container_0_ng_container_1_Template","ctx_r0","CardActionablesComponent","constructor","cdRef","accountService","actionHandler","EventEmitter","isAdmin","canDownload","submenu","ngOnInit","currentUser$","pipe","take","subscribe","user","hasAdminRole","hasDownloadRole","filter","a","requiresAdmin","markForCheck","event","stopPropagation","preventDefault","action","callback","emit","Action","Download","actionTitle","subMenu","Object","keys","k","forEach","key","close","open","dynamicItem","_extra","ɵɵdirectiveInject","ChangeDetectorRef","AccountService","selectors","inputs","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","CardActionablesComponent_ng_container_0_Template","CommonModule","NgForOf","NgIf","NgTemplateOutlet","AsyncPipe","NgbDropdown","NgbDropdownToggle","NgbDropdownMenu","NgbDropdownItem","DynamicListPipe","TranslocoDirective","styles","changeDetection","_CardActionablesComponent","BulkSelectionService","constructor","router","actionFactory","debug","prevIndex","selectedCards","dataSourceMax","isShiftDown","actionsSource","ReplaySubject","actions$","asObservable","selectionsSource","selections$","events","pipe","filter","event","NavigationStart","subscribe","deselectAll","handleCardSelection","dataSource","index","maxIndex","wasSelected","prevDataSource","debugLog","selectCards","next","getActions","isCardSelected","hasOwnProperty","from","to","value","totalSelections","i","hasSelections","Object","keys","key","values","item","length","sum","forEach","getSelectedCardsForSource","ret","k","push","callback","allowedActions","Action","AddToReadingList","MarkAsRead","MarkAsUnread","AddToCollection","Delete","AddToWantToReadList","RemoveFromWantToReadList","applyFilterToList","getSeriesActions","getBookmarkActions","getSideNavStreamActions","MarkAsInvisible","MarkAsVisible","getVolumeActions","message","extraData","undefined","console","log","applyFilter","action","Submenu","includes","children","childAction","list","map","a","__spreadValues","ɵɵinject","Router","ActionFactoryService","factory","ɵfac","providedIn","_BulkSelectionService","CircleProgressComponent__svg_svg_0__svg_linearGradient_2_Template","rf","ctx","ɵɵnamespaceSVG","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ctx_r1","ɵɵnextContext","ɵɵattribute","ɵɵadvance","CircleProgressComponent__svg_svg_0__svg_radialGradient_3_Template","ctx_r2","CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_1_Template","ctx_r8","CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_2_Template","ctx_r9","ɵɵattributeInterpolate2","CircleProgressComponent__svg_svg_0__svg_ng_container_4_Template","ɵɵelementContainerStart","ɵɵtemplate","ɵɵelementContainerEnd","ctx_r3","ɵɵproperty","CircleProgressComponent__svg_svg_0__svg_circle_5_Template","ctx_r4","CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_1_Template","ctx_r10","CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_2_Template","ctx_r11","CircleProgressComponent__svg_svg_0__svg_ng_container_6_Template","ctx_r5","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1__svg_tspan_1_Template","ɵɵtext","tspan_r16","ctx_r15","ɵɵtextInterpolate","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1_Template","ctx_r12","CircleProgressComponent__svg_svg_0__svg_text_7__svg_tspan_2_Template","ctx_r13","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3__svg_tspan_1_Template","tspan_r18","ctx_r17","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3_Template","ctx_r14","CircleProgressComponent__svg_svg_0__svg_text_7_Template","ctx_r6","CircleProgressComponent__svg_svg_0__svg_image_8_Template","ctx_r7","CircleProgressComponent__svg_svg_0_Template","_r20","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ctx_r19","ɵɵresetView","ctx_r0","CircleProgressOptions","CircleProgressComponent","defaultOptions","ngZone","elRef","injector","EventEmitter","centerX","centerY","radius","angleInDegrees","angleInRadius","x","y","percent","circlePercent","boxSize","centre","startPoint","endPoint","largeArcFlag","sweepFlag","titlePercent","titleTextPercent","subtitlePercent","title","formatted","subtitle","units","rowCount","rowNum","span","previousPercent","currentPercent","times","step","interval","fromPercent","toPercent","delta","count","timer","name","a","b","dt","uuid","c","r","previousValue","event","oldValue","newValue","_timer","DOCUMENT","tags","el","rect","parent","parentRect","changes","t","ɵɵdirectiveInject","NgZone","ElementRef","Injector","ɵɵdefineComponent","ɵɵNgOnChangesFeature","NgForOf","NgIf","NgCircleProgressModule","options","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction1","_c0","ctx_r1","center","ɵɵadvance","_c1","fontSize","ɵɵelementContainerStart","ɵɵtemplate","CircularLoaderComponent_ng_container_0_div_1_Template","ɵɵelementContainerEnd","ctx_r0","showIcon","ɵɵpureFunction2","_c2","width","height","currentValue","outerStrokeColor","innerStrokeColor","animation","backgroundColor","CircularLoaderComponent","constructor","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","CircularLoaderComponent_ng_container_0_Template","CommonModule","NgClass","NgIf","NgStyle","NgCircleProgressModule","CircleProgressComponent","styles","changeDetection","_CircularLoaderComponent","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","download_r3","progress","ɵɵtextInterpolate1","t_r1","ɵɵpureFunction1","_c0","ɵɵelementContainerStart","ɵɵtemplate","DownloadIndicatorComponent_ng_container_0_span_1_Template","ɵɵelementContainerEnd","ɵɵpipeBind1","ctx_r0","download$","DownloadIndicatorComponent","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","DownloadIndicatorComponent_ng_container_0_Template","CommonModule","NgIf","AsyncPipe","CircularLoaderComponent","TranslocoDirective","styles","changeDetection","_DownloadIndicatorComponent","MangaFormatIconPipe","transform","format","MangaFormat","EPUB","ARCHIVE","IMAGE","PDF","UNKNOWN","pure","standalone","_MangaFormatIconPipe","ɵɵelement","ɵɵproperty","ctx_r2","imageUrl","ctx_r3","imageService","errorImage","ɵɵelementStart","ɵɵelementEnd","ɵɵpropertyInterpolate1","ɵɵpipeBind2","ctx_r4","read","total","ɵɵadvance","ɵɵtext","ɵɵtextInterpolate1","t_r1","ɵɵlistener","$event","ɵɵrestoreView","_r13","ctx_r12","ɵɵnextContext","ɵɵresetView","handleSelection","ɵɵclassMapInterpolate1","ctx_r7","bulkSelectionService","hasSelections","ɵɵattributeInterpolate2","title","entity","id","selected","ɵɵpureFunction0","_c0","ɵɵtextInterpolate","ctx_r8","count","ctx_r15","centerOverlay","info_r14","ɵɵsanitizeHtml","ɵɵtemplate","CardItemComponent_ng_container_0_Conditional_14_div_0_Template","ctx","undefined","ɵɵpipeBind1","ctx_r23","format","ɵɵpropertyInterpolate","formatString_r22","ɵɵelementContainerStart","CardItemComponent_ng_container_0_div_16_ng_container_4_i_1_Template","ɵɵelementContainerEnd","ctx_r18","MangaFormat","UNKNOWN","_r26","ctx_r25","performAction","ctx_r19","actions","ctx_r20","subtitle","ɵɵpureFunction1","_c1","ctx_r21","libraryId","libraryName","_r28","ctx_r27","handleClick","CardItemComponent_ng_container_0_div_16_span_3_Template","CardItemComponent_ng_container_0_div_16_ng_container_4_Template","CardItemComponent_ng_container_0_div_16_span_7_Template","CardItemComponent_ng_container_0_div_16_span_8_Template","CardItemComponent_ng_container_0_div_16_a_9_Template","ɵɵpropertyInterpolate2","ctx_r10","tooltipTitle","isPromoted","length","suppressLibraryLink","_r30","ctx_r29","CardItemComponent_ng_container_0_Conditional_3_Template","CardItemComponent_ng_container_0_Conditional_4_Template","CardItemComponent_ng_container_0_Conditional_6_Template","CardItemComponent_ng_container_0_Conditional_9_Template","CardItemComponent_ng_container_0_Conditional_10_Template","CardItemComponent_ng_container_0_div_11_Template","CardItemComponent_ng_container_0_div_12_Template","CardItemComponent_ng_container_0_Conditional_14_Template","CardItemComponent_ng_container_0_div_16_Template","ctx_r0","ɵɵconditional","suppressArchiveWarning","download$","allowSelection","CardItemComponent_ng_container_0_contFlowTmp","overlayInformation","CardItemComponent","constructor","destroyRef","inject","DestroyRef","ImageService","BulkSelectionService","libraryService","LibraryService","downloadService","DownloadService","utilityService","UtilityService","messageHub","MessageHubService","accountService","AccountService","scrollService","ScrollService","cdRef","ChangeDetectorRef","actionFactoryService","ActionFactoryService","clicked","EventEmitter","selection","prevTouchTime","prevOffset","selectionInProgress","ngOnInit","hasOwnProperty","markForCheck","getLibraryName","pipe","takeUntilDestroyed","subscribe","name","isChapter","chapterTitle","asChapter","titleName","volumeTitle","trim","isVolume","vol","asVolume","chapters","isSeries","asSeries","nextDate","tokens","split","expectedDate","utcPipe","UtcToLocalTimePipe","transform","filterSendTo","currentUser$","user","messages$","filter","event","EVENTS","UserProgressUpdate","map","evt","payload","updateEvent","username","chapterId","volumeId","seriesId","c","pagesRead","v","sum","forEach","chapter","detectChanges","activeDownloads$","events","mapToEntityType","onTouchMove","onTouchStart","timeStamp","scrollPosition","onTouchEnd","delta","verticalOffset","stopPropagation","preventDefault","emit","preventClick","action","Action","Download","volume","download","series","callback","tag","promoted","filterSendToAction","selectors","hostBindings","rf","CardItemComponent_ng_container_0_Template","CommonModule","NgIf","DecimalPipe","ImageComponent","NgbProgressbar","DownloadIndicatorComponent","FormsModule","CheckboxControlValueAccessor","NgControlStatus","NgModel","NgbTooltip","MangaFormatPipe","MangaFormatIconPipe","CardActionablesComponent","SentenceCasePipe","RouterLink","TranslocoModule","TranslocoDirective","SafeHtmlPipe","RouterLinkActive","styles","changeDetection","_CardItemComponent"],"x_google_ignoreList":[5]}