{"version":3,"sources":["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/shared/_components/promoted-icon/promoted-icon.component.ts","src/app/shared/_components/promoted-icon/promoted-icon.component.html","src/app/shared/series-format/series-format.component.ts","src/app/shared/series-format/series-format.component.html","src/app/cards/card-item/card-item.component.ts","src/app/cards/card-item/card-item.component.html"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'dynamicList',\r\n pure: true,\r\n standalone: true\r\n})\r\nexport class DynamicListPipe implements PipeTransform {\r\n\r\n transform(value: any): Array<{title: string, data: any}> {\r\n if (value === undefined || value === null) return [];\r\n return value as {title: string, data: any}[];\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport {NgbDropdown, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle} from '@ng-bootstrap/ng-bootstrap';\r\nimport { AccountService } from 'src/app/_services/account.service';\r\nimport { Action, ActionItem } from 'src/app/_services/action-factory.service';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {DynamicListPipe} from \"./_pipes/dynamic-list.pipe\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\n\r\n@Component({\r\n selector: 'app-card-actionables',\r\n standalone: true,\r\n imports: [CommonModule, NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, DynamicListPipe, TranslocoDirective],\r\n templateUrl: './card-actionables.component.html',\r\n styleUrls: ['./card-actionables.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CardActionablesComponent implements OnInit {\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly accountService = inject(AccountService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n @Input() iconClass = 'fa-ellipsis-v';\r\n @Input() btnClass = '';\r\n @Input() actions: ActionItem[] = [];\r\n @Input() labelBy = 'card';\r\n @Input() disabled: boolean = false;\r\n @Output() actionHandler = new EventEmitter>();\r\n\r\n\r\n isAdmin: boolean = false;\r\n canDownload: boolean = false;\r\n canPromote: boolean = false;\r\n submenu: {[key: string]: NgbDropdown} = {};\r\n\r\n\r\n ngOnInit(): void {\r\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((user) => {\r\n if (!user) return;\r\n this.isAdmin = this.accountService.hasAdminRole(user);\r\n this.canDownload = this.accountService.hasDownloadRole(user);\r\n this.canPromote = this.accountService.hasPromoteRole(user);\r\n\r\n // We want to avoid an empty menu when user doesn't have access to anything\r\n if (!this.isAdmin && this.actions.filter(a => !a.requiresAdmin).length === 0) {\r\n this.actions = [];\r\n }\r\n\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n preventEvent(event: any) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n performAction(event: any, action: ActionItem) {\r\n this.preventEvent(event);\r\n\r\n if (typeof action.callback === 'function') {\r\n this.actionHandler.emit(action);\r\n }\r\n }\r\n\r\n willRenderAction(action: ActionItem) {\r\n return (action.requiresAdmin && this.isAdmin)\r\n || (action.action === Action.Download && (this.canDownload || this.isAdmin))\r\n || (!action.requiresAdmin && action.action !== Action.Download)\r\n || (action.action === Action.Promote && (this.canPromote || this.isAdmin))\r\n || (action.action === Action.UnPromote && (this.canPromote || this.isAdmin))\r\n ;\r\n }\r\n\r\n shouldRenderSubMenu(action: ActionItem, dynamicList: null | Array) {\r\n return (action.children[0].dynamicList === undefined || action.children[0].dynamicList === null) || (dynamicList !== null && dynamicList.length > 0);\r\n }\r\n\r\n openSubmenu(actionTitle: string, subMenu: NgbDropdown) {\r\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\r\n if (Object.keys(this.submenu).length > 0) {\r\n const keys = Object.keys(this.submenu).filter(k => k !== actionTitle);\r\n keys.forEach(key => {\r\n this.submenu[key].close();\r\n delete this.submenu[key];\r\n });\r\n }\r\n this.submenu[actionTitle] = subMenu;\r\n subMenu.open();\r\n }\r\n\r\n closeAllSubmenus() {\r\n Object.keys(this.submenu).forEach(key => {\r\n this.submenu[key].close();\r\n delete this.submenu[key];\r\n });\r\n }\r\n\r\n performDynamicClick(event: any, action: ActionItem, dynamicItem: any) {\r\n action._extra = dynamicItem;\r\n this.performAction(event, action);\r\n }\r\n}\r\n","\r\n 0\">\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n","import {Injectable} from '@angular/core';\r\nimport {NavigationStart, Router} from '@angular/router';\r\nimport {ReplaySubject} from 'rxjs';\r\nimport {filter} from 'rxjs/operators';\r\nimport {Action, ActionFactoryService, ActionItem} from '../_services/action-factory.service';\r\n\r\ntype DataSource = 'volume' | 'chapter' | 'special' | 'series' | 'bookmark' | 'sideNavStream' | 'collection' | 'readingList';\r\n\r\n/**\r\n * Responsible for handling selections on cards. Can handle multiple card sources next to each other in different loops.\r\n * This will clear selections between pages.\r\n *\r\n * Remarks: Page which renders cards is responsible for listening for shift keydown/keyup and updating our state variable.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BulkSelectionService {\r\n\r\n private debug: boolean = false;\r\n private prevIndex: number = 0;\r\n private prevDataSource!: DataSource;\r\n private selectedCards: { [key: string]: {[key: number]: boolean} } = {};\r\n private dataSourceMax: { [key: string]: number} = {};\r\n public isShiftDown: boolean = false;\r\n\r\n private actionsSource = new ReplaySubject[]>(1);\r\n public actions$ = this.actionsSource.asObservable();\r\n\r\n private selectionsSource = new ReplaySubject(1);\r\n /**\r\n * Number of active selections\r\n */\r\n public selections$ = this.selectionsSource.asObservable();\r\n\r\n constructor(router: Router, private actionFactory: ActionFactoryService) {\r\n router.events\r\n .pipe(filter(event => event instanceof NavigationStart))\r\n .subscribe(() => {\r\n this.deselectAll();\r\n this.dataSourceMax = {};\r\n this.prevIndex = 0;\r\n });\r\n }\r\n\r\n handleCardSelection(dataSource: DataSource, index: number, maxIndex: number, wasSelected: boolean) {\r\n if (this.isShiftDown) {\r\n\r\n if (dataSource === this.prevDataSource) {\r\n this.debugLog('Selecting ' + dataSource + ' cards from ' + this.prevIndex + ' to ' + index + ' as ' + !wasSelected);\r\n this.selectCards(dataSource, this.prevIndex, index, !wasSelected);\r\n } else {\r\n const isForwardSelection = index > this.prevIndex;\r\n\r\n if (isForwardSelection) {\r\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + this.prevIndex + ' to ' + this.dataSourceMax[this.prevDataSource]);\r\n this.selectCards(this.prevDataSource, this.prevIndex, this.dataSourceMax[this.prevDataSource], !wasSelected);\r\n this.debugLog('Selecting ' + dataSource + ' cards from ' + 0 + ' to ' + index);\r\n this.selectCards(dataSource, 0, index, !wasSelected);\r\n } else {\r\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + 0 + ' to ' + this.prevIndex);\r\n this.selectCards(this.prevDataSource, this.prevIndex, 0, !wasSelected);\r\n this.debugLog('Selecting ' + dataSource + ' cards from ' + index + ' to ' + maxIndex);\r\n this.selectCards(dataSource, index, maxIndex, !wasSelected);\r\n }\r\n }\r\n } else {\r\n this.debugLog('Selecting ' + dataSource + ' cards at ' + index);\r\n this.selectCards(dataSource, index, index, !wasSelected);\r\n }\r\n this.prevIndex = index;\r\n this.prevDataSource = dataSource;\r\n this.dataSourceMax[dataSource] = maxIndex;\r\n this.actionsSource.next(this.getActions(() => {}));\r\n }\r\n\r\n isCardSelected(dataSource: DataSource, index: number) {\r\n if (this.selectedCards.hasOwnProperty(dataSource) && this.selectedCards[dataSource].hasOwnProperty(index)) {\r\n return this.selectedCards[dataSource][index];\r\n }\r\n return false;\r\n }\r\n\r\n selectCards(dataSource: DataSource, from: number, to: number, value: boolean) {\r\n if (!this.selectedCards.hasOwnProperty(dataSource)) {\r\n this.selectedCards[dataSource] = {};\r\n }\r\n\r\n if (from === to) {\r\n this.selectedCards[dataSource][to] = value;\r\n this.selectionsSource.next(this.totalSelections());\r\n return;\r\n }\r\n\r\n if (from > to) {\r\n for (let i = to; i <= from; i++) {\r\n this.selectedCards[dataSource][i] = value;\r\n }\r\n }\r\n\r\n for (let i = from; i <= to; i++) {\r\n this.selectedCards[dataSource][i] = value;\r\n }\r\n this.selectionsSource.next(this.totalSelections());\r\n }\r\n\r\n deselectAll() {\r\n this.selectedCards = {};\r\n this.selectionsSource.next(0);\r\n }\r\n\r\n hasSelections() {\r\n const keys = Object.keys(this.selectedCards);\r\n return keys.filter(key => {\r\n return Object.values(this.selectedCards[key]).filter(item => item).length > 0;\r\n }).length > 0;\r\n }\r\n\r\n totalSelections() {\r\n let sum = 0;\r\n const keys = Object.keys(this.selectedCards);\r\n keys.forEach(key => {\r\n sum += Object.values(this.selectedCards[key]).filter(item => item).length;\r\n });\r\n return sum;\r\n }\r\n\r\n getSelectedCardsForSource(dataSource: DataSource) {\r\n if (!this.selectedCards.hasOwnProperty(dataSource)) return [];\r\n\r\n const ret = [];\r\n for(let k in this.selectedCards[dataSource]) {\r\n if (this.selectedCards[dataSource][k]) {\r\n ret.push(k);\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n getActions(callback: (action: ActionItem, data: any) => void) {\r\n // checks if series is present. If so, returns only series actions\r\n // else returns volume/chapter items\r\n const allowedActions = [Action.AddToReadingList, Action.MarkAsRead, Action.MarkAsUnread, Action.AddToCollection,\r\n Action.Delete, Action.AddToWantToReadList, Action.RemoveFromWantToReadList];\r\n if (Object.keys(this.selectedCards).filter(item => item === 'series').length > 0) {\r\n return this.applyFilterToList(this.actionFactory.getSeriesActions(callback), allowedActions);\r\n }\r\n\r\n if (Object.keys(this.selectedCards).filter(item => item === 'bookmark').length > 0) {\r\n return this.actionFactory.getBookmarkActions(callback);\r\n }\r\n\r\n if (Object.keys(this.selectedCards).filter(item => item === 'sideNavStream').length > 0) {\r\n return this.applyFilterToList(this.actionFactory.getSideNavStreamActions(callback), [Action.MarkAsInvisible, Action.MarkAsVisible]);\r\n }\r\n\r\n if (Object.keys(this.selectedCards).filter(item => item === 'collection').length > 0) {\r\n return this.applyFilterToList(this.actionFactory.getCollectionTagActions(callback), [Action.Promote, Action.UnPromote, Action.Delete]);\r\n }\r\n\r\n if (Object.keys(this.selectedCards).filter(item => item === 'readingList').length > 0) {\r\n return this.applyFilterToList(this.actionFactory.getReadingListActions(callback), [Action.Promote, Action.UnPromote, Action.Delete]);\r\n }\r\n\r\n return this.applyFilterToList(this.actionFactory.getVolumeActions(callback), allowedActions);\r\n }\r\n\r\n private debugLog(message: string, extraData?: any) {\r\n if (!this.debug) return;\r\n\r\n if (extraData !== undefined) {\r\n console.log(message, extraData);\r\n } else {\r\n console.log(message);\r\n }\r\n }\r\n\r\n private applyFilter(action: ActionItem, allowedActions: Array) {\r\n\r\n let ret = false;\r\n if (action.action === Action.Submenu || allowedActions.includes(action.action)) {\r\n // Do something\r\n ret = true;\r\n }\r\n\r\n if (action.children === null || action.children?.length === 0) return ret;\r\n\r\n action.children = action.children.filter((childAction) => this.applyFilter(childAction, allowedActions));\r\n\r\n return ret;\r\n }\r\n\r\n\tprivate applyFilterToList(list: Array>, allowedActions: Array): Array> {\r\n\t\tconst actions = list.map((a) => {\r\n\t\t\treturn { ...a };\r\n\t\t});\r\n return actions.filter(action => this.applyFilter(action, allowedActions));\r\n\t}\r\n}\r\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();\n i0.ɵɵattribute(\"stop-color\", ctx_r1.svg.outerLinearGradient.colorStop1)(\"stop-opacity\", 1);\n i0.ɵɵadvance();\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_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"id\", ctx_r1.svg.radialGradient.id);\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"stop-color\", ctx_r1.svg.radialGradient.colorStop1)(\"stop-opacity\", 1);\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"stop-color\", ctx_r1.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵattribute(\"cx\", ctx_r1.svg.backgroundCircle.cx)(\"cy\", ctx_r1.svg.backgroundCircle.cy)(\"r\", ctx_r1.svg.backgroundCircle.r)(\"fill\", ctx_r1.svg.backgroundCircle.fill)(\"fill-opacity\", ctx_r1.svg.backgroundCircle.fillOpacity)(\"stroke\", ctx_r1.svg.backgroundCircle.stroke)(\"stroke-width\", ctx_r1.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵattributeInterpolate2(\"fill\", \"url(\", ctx_r1.window.location.href, \"#\", ctx_r1.svg.radialGradient.id, \")\");\n i0.ɵɵattribute(\"cx\", ctx_r1.svg.backgroundCircle.cx)(\"cy\", ctx_r1.svg.backgroundCircle.cy)(\"r\", ctx_r1.svg.backgroundCircle.r)(\"fill-opacity\", ctx_r1.svg.backgroundCircle.fillOpacity)(\"stroke\", ctx_r1.svg.backgroundCircle.stroke)(\"stroke-width\", ctx_r1.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, 9, \"circle\", 2);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", !ctx_r1.options.backgroundGradient);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.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_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"cx\", ctx_r1.svg.circle.cx)(\"cy\", ctx_r1.svg.circle.cy)(\"r\", ctx_r1.svg.circle.r)(\"fill\", ctx_r1.svg.circle.fill)(\"stroke\", ctx_r1.svg.circle.stroke)(\"stroke-width\", ctx_r1.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵattribute(\"d\", ctx_r1.svg.path.d)(\"stroke\", ctx_r1.svg.path.stroke)(\"stroke-width\", ctx_r1.svg.path.strokeWidth)(\"stroke-linecap\", ctx_r1.svg.path.strokeLinecap)(\"fill\", ctx_r1.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵattributeInterpolate2(\"stroke\", \"url(\", ctx_r1.window.location.href, \"#\", ctx_r1.svg.outerLinearGradient.id, \")\");\n i0.ɵɵattribute(\"d\", ctx_r1.svg.path.d)(\"stroke-width\", ctx_r1.svg.path.strokeWidth)(\"stroke-linecap\", ctx_r1.svg.path.strokeLinecap)(\"fill\", ctx_r1.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, 7, \"path\", 2);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", !ctx_r1.options.outerStrokeGradient);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.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_r3 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext(4);\n i0.ɵɵattribute(\"x\", ctx_r1.svg.title.x)(\"y\", ctx_r1.svg.title.y)(\"dy\", tspan_r3.dy)(\"font-size\", ctx_r1.svg.title.fontSize)(\"font-weight\", ctx_r1.svg.title.fontWeight)(\"fill\", ctx_r1.svg.title.color);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(tspan_r3.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r1.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵattribute(\"font-size\", ctx_r1.svg.units.fontSize)(\"font-weight\", ctx_r1.svg.units.fontWeight)(\"fill\", ctx_r1.svg.units.color);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r1.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_r4 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext(4);\n i0.ɵɵattribute(\"x\", ctx_r1.svg.subtitle.x)(\"y\", ctx_r1.svg.subtitle.y)(\"dy\", tspan_r4.dy)(\"font-size\", ctx_r1.svg.subtitle.fontSize)(\"font-weight\", ctx_r1.svg.subtitle.fontWeight)(\"fill\", ctx_r1.svg.subtitle.color);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(tspan_r4.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_r1 = i0.ɵɵnextContext(3);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r1.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_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"x\", ctx_r1.svg.circle.cx)(\"y\", ctx_r1.svg.circle.cy)(\"text-anchor\", ctx_r1.svg.title.textAnchor);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.options.showTitle);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.options.showUnits);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.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_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵattribute(\"height\", ctx_r1.svg.image.height)(\"width\", ctx_r1.svg.image.width)(\"href\", ctx_r1.svg.image.src, null, \"xlink\")(\"x\", ctx_r1.svg.image.x)(\"y\", ctx_r1.svg.image.y);\n }\n}\nfunction CircleProgressComponent__svg_svg_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"svg\", 1);\n i0.ɵɵlistener(\"click\", function CircleProgressComponent__svg_svg_0_Template_svg_click_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.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_r1 = i0.ɵɵnextContext();\n i0.ɵɵattribute(\"viewBox\", ctx_r1.svg.viewBox)(\"height\", ctx_r1.svg.height)(\"width\", ctx_r1.svg.width)(\"class\", ctx_r1.options.class);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx_r1.options.outerStrokeGradient);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.options.backgroundGradient);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.options.showBackground);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.options.showInnerStroke);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", +ctx_r1.options.percent !== 0 || ctx_r1.options.showZeroOuterStroke);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", !ctx_r1.options.showImage && (ctx_r1.options.showTitle || ctx_r1.options.showUnits || ctx_r1.options.showSubtitle));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.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: [i0.ɵɵInputFlags.None, \"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';\r\nimport {CommonModule, NgClass, NgStyle} from \"@angular/common\";\r\nimport {NgCircleProgressModule } from \"ng-circle-progress\";\r\n\r\n@Component({\r\n selector: 'app-circular-loader',\r\n standalone: true,\r\n imports: [NgCircleProgressModule, NgStyle, NgClass],\r\n templateUrl: './circular-loader.component.html',\r\n styleUrls: ['./circular-loader.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CircularLoaderComponent {\r\n\r\n @Input() currentValue: number = 0;\r\n /**\r\n * If an animation should be used\r\n */\r\n @Input() animation: boolean = true;\r\n /**\r\n * Color of an inner bar\r\n */\r\n @Input() innerStrokeColor: string = 'transparent';\r\n /**\r\n * Color of the Downloader bar\r\n */\r\n @Input() outerStrokeColor: string = '#4ac694';\r\n @Input() backgroundColor: string = '#000';\r\n @Input() fontSize: string = '36px';\r\n /**\r\n * Show the icon inside the downloader\r\n */\r\n @Input() showIcon: boolean = true;\r\n /**\r\n * The width in pixels of the loader\r\n */\r\n @Input() width: string = '100px';\r\n /**\r\n * The height in pixels of the loader\r\n */\r\n @Input() height: string = '100px';\r\n /**\r\n * Centers the icon in the middle of the loader. Best for card use.\r\n */\r\n @Input() center: boolean = true;\r\n}\r\n","@if (currentValue > 0) {\r\n @if (showIcon) {\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n \r\n
\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Download } from 'src/app/shared/_models/download';\r\nimport { DownloadEvent } from 'src/app/shared/_services/download.service';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {CircularLoaderComponent} from \"../../shared/circular-loader/circular-loader.component\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-download-indicator',\r\n standalone: true,\r\n imports: [CommonModule, CircularLoaderComponent, TranslocoDirective],\r\n templateUrl: './download-indicator.component.html',\r\n styleUrls: ['./download-indicator.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DownloadIndicatorComponent {\r\n\r\n /**\r\n * Observable that represents when the download completes\r\n */\r\n @Input({required: true}) download$!: Observable | null;\r\n}\r\n","\r\n \r\n \r\n \r\n {{t('progress',{percentage: download.progress})}}\r\n \r\n \r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { MangaFormat } from '../_models/manga-format';\r\n\r\n/**\r\n * Returns the icon class representing the format\r\n */\r\n@Pipe({\r\n name: 'mangaFormatIcon',\r\n standalone: true\r\n})\r\nexport class MangaFormatIconPipe implements PipeTransform {\r\n\r\n transform(format: MangaFormat): string {\r\n switch (format) {\r\n case MangaFormat.EPUB:\r\n return 'fa fa-book';\r\n case MangaFormat.ARCHIVE:\r\n return 'fa-solid fa-file-zipper';\r\n case MangaFormat.IMAGE:\r\n return 'fa-solid fa-file-image';\r\n case MangaFormat.PDF:\r\n return 'fa-solid fa-file-pdf';\r\n case MangaFormat.UNKNOWN:\r\n return 'fa-solid fa-file-circle-question';\r\n case MangaFormat.TEXT:\r\n return 'fa-solid fa-file-text';\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-promoted-icon',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective\r\n ],\r\n templateUrl: './promoted-icon.component.html',\r\n styleUrl: './promoted-icon.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PromotedIconComponent {\r\n @Input({required: true}) promoted: boolean = false;\r\n}\r\n","\r\n @if(promoted) {\r\n \r\n \r\n {{t('promoted')}}\r\n \r\n }\r\n\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { MangaFormat } from 'src/app/_models/manga-format';\r\nimport {MangaFormatIconPipe} from \"../../_pipes/manga-format-icon.pipe\";\r\nimport {MangaFormatPipe} from \"../../_pipes/manga-format.pipe\";\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\n@Component({\r\n selector: 'app-series-format',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MangaFormatIconPipe,\r\n MangaFormatPipe\r\n ],\r\n templateUrl: './series-format.component.html',\r\n styleUrls: ['./series-format.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SeriesFormatComponent {\r\n\r\n protected readonly MangaFormat = MangaFormat;\r\n\r\n @Input() format: MangaFormat = MangaFormat.UNKNOWN;\r\n}\r\n","\r\n \r\n \r\n\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, ContentChild, DestroyRef,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output, TemplateRef\r\n} from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { DownloadEvent, DownloadService } from 'src/app/shared/_services/download.service';\r\nimport { UtilityService } from 'src/app/shared/_services/utility.service';\r\nimport { Chapter } from 'src/app/_models/chapter';\r\nimport { UserCollection } from 'src/app/_models/collection-tag';\r\nimport { UserProgressUpdateEvent } from 'src/app/_models/events/user-progress-update-event';\r\nimport { MangaFormat } from 'src/app/_models/manga-format';\r\nimport { PageBookmark } from 'src/app/_models/readers/page-bookmark';\r\nimport { RecentlyAddedItem } from 'src/app/_models/recently-added-item';\r\nimport { Series } from 'src/app/_models/series';\r\nimport { User } from 'src/app/_models/user';\r\nimport { Volume } from 'src/app/_models/volume';\r\nimport { AccountService } from 'src/app/_services/account.service';\r\nimport { Action, ActionFactoryService, ActionItem } from 'src/app/_services/action-factory.service';\r\nimport { ImageService } from 'src/app/_services/image.service';\r\nimport { LibraryService } from 'src/app/_services/library.service';\r\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\r\nimport { ScrollService } from 'src/app/_services/scroll.service';\r\nimport { BulkSelectionService } from '../bulk-selection.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {ImageComponent} from \"../../shared/image/image.component\";\r\nimport {NgbProgressbar, NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {DownloadIndicatorComponent} from \"../download-indicator/download-indicator.component\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {MangaFormatPipe} from \"../../_pipes/manga-format.pipe\";\r\nimport {MangaFormatIconPipe} from \"../../_pipes/manga-format-icon.pipe\";\r\nimport {SentenceCasePipe} from \"../../_pipes/sentence-case.pipe\";\r\nimport {DecimalPipe, NgTemplateOutlet} from \"@angular/common\";\r\nimport {RouterLink, RouterLinkActive} from \"@angular/router\";\r\nimport {TranslocoModule} from \"@ngneat/transloco\";\r\nimport {CardActionablesComponent} from \"../../_single-module/card-actionables/card-actionables.component\";\r\nimport {NextExpectedChapter} from \"../../_models/series-detail/next-expected-chapter\";\r\nimport {UtcToLocalTimePipe} from \"../../_pipes/utc-to-local-time.pipe\";\r\nimport {SafeHtmlPipe} from \"../../_pipes/safe-html.pipe\";\r\nimport {PromotedIconComponent} from \"../../shared/_components/promoted-icon/promoted-icon.component\";\r\nimport {SeriesFormatComponent} from \"../../shared/series-format/series-format.component\";\r\n\r\n@Component({\r\n selector: 'app-card-item',\r\n standalone: true,\r\n imports: [\r\n ImageComponent,\r\n NgbProgressbar,\r\n DownloadIndicatorComponent,\r\n FormsModule,\r\n NgbTooltip,\r\n MangaFormatPipe,\r\n MangaFormatIconPipe,\r\n CardActionablesComponent,\r\n SentenceCasePipe,\r\n RouterLink,\r\n TranslocoModule,\r\n SafeHtmlPipe,\r\n RouterLinkActive,\r\n PromotedIconComponent,\r\n SeriesFormatComponent,\r\n DecimalPipe,\r\n NgTemplateOutlet\r\n ],\r\n templateUrl: './card-item.component.html',\r\n styleUrls: ['./card-item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CardItemComponent implements OnInit {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n public readonly imageService = inject(ImageService);\r\n public readonly bulkSelectionService = inject(BulkSelectionService);\r\n private readonly libraryService = inject(LibraryService);\r\n private readonly downloadService = inject(DownloadService);\r\n private readonly utilityService = inject(UtilityService);\r\n private readonly messageHub = inject(MessageHubService);\r\n private readonly accountService = inject(AccountService);\r\n private readonly scrollService = inject(ScrollService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly actionFactoryService = inject(ActionFactoryService);\r\n\r\n protected readonly MangaFormat = MangaFormat;\r\n\r\n /**\r\n * Card item url. Will internally handle error and missing covers\r\n */\r\n @Input() imageUrl = '';\r\n /**\r\n * Name of the card\r\n */\r\n @Input() title = '';\r\n /**\r\n * Any actions to perform on the card\r\n */\r\n @Input() actions: ActionItem[] = [];\r\n /**\r\n * Pages Read\r\n */\r\n @Input() read = 0;\r\n /**\r\n * Total Pages\r\n */\r\n @Input() total = 0;\r\n /**\r\n * Suppress library link\r\n */\r\n @Input() suppressLibraryLink = false;\r\n /**\r\n * This is the entity we are representing. It will be returned if an action is executed.\r\n */\r\n @Input({required: true}) entity!: Series | Volume | Chapter | UserCollection | PageBookmark | RecentlyAddedItem | NextExpectedChapter;\r\n /**\r\n * If the entity is selected or not.\r\n */\r\n @Input() selected: boolean = false;\r\n /**\r\n * If the entity should show selection code\r\n */\r\n @Input() allowSelection: boolean = false;\r\n /**\r\n * This will suppress the \"cannot read archive warning\" when total pages is 0\r\n */\r\n @Input() suppressArchiveWarning: boolean = false;\r\n /**\r\n * The number of updates/items within the card. If less than 2, will not be shown.\r\n */\r\n @Input() count: number = 0;\r\n /**\r\n * Additional information to show on the overlay area. Will always render.\r\n */\r\n @Input() overlayInformation: string = '';\r\n /**\r\n * If overlay is enabled, should the text be centered or not\r\n */\r\n @Input() centerOverlay = false;\r\n /**\r\n * Event emitted when item is clicked\r\n */\r\n @Output() clicked = new EventEmitter();\r\n /**\r\n * When the card is selected.\r\n */\r\n @Output() selection = new EventEmitter();\r\n @ContentChild('subtitle') subtitleTemplate!: TemplateRef;\r\n /**\r\n * Library name item belongs to\r\n */\r\n libraryName: string | undefined = undefined;\r\n libraryId: number | undefined = undefined;\r\n /**\r\n * Format of the entity (only applies to Series)\r\n */\r\n format: MangaFormat = MangaFormat.UNKNOWN;\r\n tooltipTitle: string = this.title;\r\n\r\n /**\r\n * This is the download we get from download service.\r\n */\r\n download$: Observable | null = null;\r\n\r\n /**\r\n * Handles touch events for selection on mobile devices\r\n */\r\n prevTouchTime: number = 0;\r\n /**\r\n * Handles touch events for selection on mobile devices to ensure you aren't touch scrolling\r\n */\r\n prevOffset: number = 0;\r\n selectionInProgress: boolean = false;\r\n\r\n private user: User | undefined;\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.entity.hasOwnProperty('promoted') && this.entity.hasOwnProperty('title')) {\r\n this.suppressArchiveWarning = true;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (!this.suppressLibraryLink) {\r\n if (this.entity !== undefined && this.entity.hasOwnProperty('libraryId')) {\r\n this.libraryId = (this.entity as Series).libraryId;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.libraryId !== undefined && this.libraryId > 0) {\r\n this.libraryService.getLibraryName(this.libraryId).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(name => {\r\n this.libraryName = name;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n }\r\n this.format = (this.entity as Series).format;\r\n\r\n if (this.utilityService.isChapter(this.entity)) {\r\n const chapter = this.utilityService.asChapter(this.entity);\r\n const chapterTitle = chapter.titleName;\r\n if (chapterTitle === '' || chapterTitle === null || chapterTitle === undefined) {\r\n const volumeTitle = chapter.volumeTitle\r\n if (volumeTitle === '' || volumeTitle === null || volumeTitle === undefined) {\r\n this.tooltipTitle = (this.title).trim();\r\n } else {\r\n this.tooltipTitle = (volumeTitle + ' ' + this.title).trim();\r\n }\r\n } else {\r\n this.tooltipTitle = chapterTitle;\r\n }\r\n } else if (this.utilityService.isVolume(this.entity)) {\r\n const vol = this.utilityService.asVolume(this.entity);\r\n if (vol.chapters !== undefined && vol.chapters.length > 0) {\r\n this.tooltipTitle = vol.chapters[0].titleName;\r\n }\r\n if (this.tooltipTitle === '') {\r\n this.tooltipTitle = vol.name;\r\n }\r\n } else if (this.utilityService.isSeries(this.entity)) {\r\n this.tooltipTitle = this.title || (this.utilityService.asSeries(this.entity).name);\r\n } else if (this.entity.hasOwnProperty('expectedDate')) {\r\n this.suppressArchiveWarning = true;\r\n this.imageUrl = '';\r\n const nextDate = (this.entity as NextExpectedChapter);\r\n\r\n const tokens = nextDate.title.split(':');\r\n this.overlayInformation = `\r\n \r\n
${tokens[0]}
${tokens[1]}
`;\r\n this.centerOverlay = true;\r\n\r\n if (nextDate.expectedDate) {\r\n const utcPipe = new UtcToLocalTimePipe();\r\n this.title = '~ ' + utcPipe.transform(nextDate.expectedDate, 'shortDate');\r\n }\r\n\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n\r\n this.filterSendTo();\r\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\r\n this.user = user;\r\n });\r\n\r\n this.messageHub.messages$.pipe(filter(event => event.event === EVENTS.UserProgressUpdate),\r\n map(evt => evt.payload as UserProgressUpdateEvent), takeUntilDestroyed(this.destroyRef)).subscribe(updateEvent => {\r\n if (this.user === undefined || this.user.username !== updateEvent.username) return;\r\n if (this.utilityService.isChapter(this.entity) && updateEvent.chapterId !== this.entity.id) return;\r\n if (this.utilityService.isVolume(this.entity) && updateEvent.volumeId !== this.entity.id) return;\r\n if (this.utilityService.isSeries(this.entity) && updateEvent.seriesId !== this.entity.id) return;\r\n\r\n // For volume or Series, we can't just take the event\r\n if (this.utilityService.isChapter(this.entity)) {\r\n const c = this.utilityService.asChapter(this.entity);\r\n c.pagesRead = updateEvent.pagesRead;\r\n this.read = updateEvent.pagesRead;\r\n }\r\n if (this.utilityService.isVolume(this.entity) || this.utilityService.isSeries(this.entity)) {\r\n if (this.utilityService.isVolume(this.entity)) {\r\n const v = this.utilityService.asVolume(this.entity);\r\n let sum = 0;\r\n const chapters = v.chapters.filter(c => c.volumeId === updateEvent.volumeId);\r\n chapters.forEach(chapter => {\r\n chapter.pagesRead = updateEvent.pagesRead;\r\n sum += chapter.pagesRead;\r\n });\r\n v.pagesRead = sum;\r\n this.read = sum;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n this.cdRef.detectChanges();\r\n });\r\n\r\n this.download$ = this.downloadService.activeDownloads$.pipe(takeUntilDestroyed(this.destroyRef), map((events) => {\r\n return this.downloadService.mapToEntityType(events, this.entity);\r\n }));\r\n }\r\n\r\n\r\n @HostListener('touchmove', ['$event'])\r\n onTouchMove(event: TouchEvent) {\r\n if (!this.allowSelection) return;\r\n\r\n this.selectionInProgress = false;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n @HostListener('touchstart', ['$event'])\r\n onTouchStart(event: TouchEvent) {\r\n if (!this.allowSelection) return;\r\n\r\n this.prevTouchTime = event.timeStamp;\r\n this.prevOffset = this.scrollService.scrollPosition;\r\n this.selectionInProgress = true;\r\n }\r\n\r\n @HostListener('touchend', ['$event'])\r\n onTouchEnd(event: TouchEvent) {\r\n if (!this.allowSelection) return;\r\n const delta = event.timeStamp - this.prevTouchTime;\r\n const verticalOffset = this.scrollService.scrollPosition;\r\n\r\n if (delta >= 300 && delta <= 1000 && (verticalOffset === this.prevOffset) && this.selectionInProgress) {\r\n this.handleSelection();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n this.prevTouchTime = 0;\r\n this.selectionInProgress = false;\r\n }\r\n\r\n\r\n handleClick(event?: any) {\r\n if (this.bulkSelectionService.hasSelections()) {\r\n this.handleSelection();\r\n return;\r\n }\r\n this.clicked.emit(this.title);\r\n }\r\n\r\n preventClick(event: any) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n performAction(action: ActionItem) {\r\n if (action.action == Action.Download) {\r\n if (this.utilityService.isVolume(this.entity)) {\r\n const volume = this.utilityService.asVolume(this.entity);\r\n this.downloadService.download('volume', volume);\r\n } else if (this.utilityService.isChapter(this.entity)) {\r\n const chapter = this.utilityService.asChapter(this.entity);\r\n this.downloadService.download('chapter', chapter);\r\n } else if (this.utilityService.isSeries(this.entity)) {\r\n const series = this.utilityService.asSeries(this.entity);\r\n this.downloadService.download('series', series);\r\n }\r\n return; // Don't propagate the download from a card\r\n }\r\n\r\n if (typeof action.callback === 'function') {\r\n action.callback(action, this.entity);\r\n }\r\n }\r\n\r\n\r\n isPromoted() {\r\n const tag = this.entity as UserCollection;\r\n return tag.hasOwnProperty('promoted') && tag.promoted;\r\n }\r\n\r\n\r\n handleSelection(event?: any) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n this.selection.emit(this.selected);\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n filterSendTo() {\r\n if (!this.actions || this.actions.length === 0) return;\r\n\r\n if (this.utilityService.isChapter(this.entity)) {\r\n this.actions = this.actionFactoryService.filterSendToAction(this.actions, this.entity as Chapter);\r\n } else if (this.utilityService.isVolume(this.entity)) {\r\n const vol = this.utilityService.asVolume(this.entity);\r\n this.actions = this.actionFactoryService.filterSendToAction(this.actions, vol.chapters[0]);\r\n } else if (this.utilityService.isSeries(this.entity)) {\r\n const series = (this.entity as Series);\r\n // if (series.format === MangaFormat.EPUB || series.format === MangaFormat.PDF) {\r\n // this.actions = this.actions.filter(a => a.title !== 'Send To');\r\n // }\r\n }\r\n\r\n // this.actions = this.actions.filter(a => {\r\n // if (!a.isAllowed) return true;\r\n // return a.isAllowed(a, this.entity);\r\n // });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n @if (total > 0 || suppressArchiveWarning) {\r\n \r\n } @else if (total === 0 && !suppressArchiveWarning) {\r\n \r\n }\r\n\r\n
\r\n @if (read > 0 && read < total && total > 0 && read !== total) {\r\n

\r\n \r\n

\r\n }\r\n\r\n \r\n \r\n \r\n
\r\n\r\n @if(total === 0 && !suppressArchiveWarning) {\r\n
\r\n {{t('cannot-read')}}\r\n
\r\n }\r\n\r\n @if (read === 0 && total > 0) {\r\n
\r\n
\r\n
\r\n }\r\n\r\n @if (allowSelection) {\r\n
\r\n \r\n
\r\n }\r\n\r\n @if (count > 1) {\r\n
\r\n {{count}}\r\n
\r\n }\r\n\r\n
\r\n @if (overlayInformation | safeHtml; as info) {\r\n @if (info !== '' || info !== null) {\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n }\r\n
\r\n @if (title.length > 0 || actions.length > 0) {\r\n
\r\n
\r\n \r\n \r\n \r\n {{title}}\r\n \r\n @if (actions && actions.length > 0) {\r\n \r\n \r\n \r\n }\r\n
\r\n\r\n @if (subtitleTemplate) {\r\n
\r\n \r\n
\r\n }\r\n @if (!suppressLibraryLink && libraryName) {\r\n \r\n {{libraryName | sentenceCase}}\r\n \r\n }\r\n
\r\n }\r\n
\r\n\r\n
\r\n"],"mappings":"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","names":["DynamicListPipe","transform","value","pure","standalone","_DynamicListPipe","ɵɵelementContainer","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","$event","dynamicItem_r4","ɵɵrestoreView","_r3","$implicit","action_r5","ɵɵnextContext","ctx_r1","ɵɵresetView","performDynamicClick","ɵɵtext","ɵɵelementEnd","ɵɵ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_r6","_r7","performAction","closeAllSubmenus","t_r8","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_button_0_Template","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","justItem_r9","ɵɵelement","ɵɵpropertyInterpolate1","ɵɵtextInterpolate1","_r10","subMenuHover_r11","ɵɵreference","preventEvent","openSubmenu","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","ɵɵattributeInterpolate1","submenu_r12","ɵɵpureFunction1","_c0","children","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_Template","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","submenuDropdown_r13","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_Template","list_r14","_r1","CardActionablesComponent_ng_container_0_ng_container_1_ng_container_5_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_Template","ɵɵclassMapInterpolate1","btnClass","labelBy","disabled","iconClass","actions","CardActionablesComponent_ng_container_0_ng_container_1_Template","CardActionablesComponent","constructor","cdRef","inject","ChangeDetectorRef","accountService","AccountService","destroyRef","DestroyRef","actionHandler","EventEmitter","isAdmin","canDownload","canPromote","submenu","ngOnInit","currentUser$","pipe","takeUntilDestroyed","subscribe","user","hasAdminRole","hasDownloadRole","hasPromoteRole","filter","a","requiresAdmin","markForCheck","event","stopPropagation","preventDefault","action","callback","emit","Action","Download","Promote","UnPromote","actionTitle","subMenu","Object","keys","k","forEach","key","close","open","dynamicItem","_extra","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","getCollectionTagActions","Promote","UnPromote","getReadingListActions","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","CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_1_Template","CircleProgressComponent__svg_svg_0__svg_ng_container_4__svg_circle_2_Template","ɵɵattributeInterpolate2","CircleProgressComponent__svg_svg_0__svg_ng_container_4_Template","ɵɵelementContainerStart","ɵɵtemplate","ɵɵelementContainerEnd","ɵɵproperty","CircleProgressComponent__svg_svg_0__svg_circle_5_Template","CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_1_Template","CircleProgressComponent__svg_svg_0__svg_ng_container_6__svg_path_2_Template","CircleProgressComponent__svg_svg_0__svg_ng_container_6_Template","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1__svg_tspan_1_Template","ɵɵtext","tspan_r3","ɵɵtextInterpolate","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_1_Template","CircleProgressComponent__svg_svg_0__svg_text_7__svg_tspan_2_Template","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3__svg_tspan_1_Template","tspan_r4","CircleProgressComponent__svg_svg_0__svg_text_7__svg_ng_container_3_Template","CircleProgressComponent__svg_svg_0__svg_text_7_Template","CircleProgressComponent__svg_svg_0__svg_image_8_Template","CircleProgressComponent__svg_svg_0_Template","_r1","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","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","ɵɵdirectiveInject","NgZone","ElementRef","Injector","ɵɵdefineComponent","InputFlags","ɵɵNgOnChangesFeature","NgForOf","NgIf","NgCircleProgressModule","options","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction1","_c1","ctx_r0","center","ɵɵadvance","_c2","fontSize","ɵɵtemplate","CircularLoaderComponent_Conditional_0_Conditional_0_Template","ɵɵconditional","showIcon","ɵɵpureFunction2","_c0","width","height","currentValue","outerStrokeColor","innerStrokeColor","animation","backgroundColor","CircularLoaderComponent","constructor","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","CircularLoaderComponent_Conditional_0_Template","NgCircleProgressModule","CircleProgressComponent","NgStyle","NgClass","styles","changeDetection","_CircularLoaderComponent","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","download_r1","progress","ɵɵtextInterpolate1","t_r2","ɵɵpureFunction1","_c0","ɵɵelementContainerStart","ɵɵtemplate","DownloadIndicatorComponent_ng_container_0_span_1_Template","ɵɵpipeBind1","ctx_r2","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","TEXT","pure","standalone","_MangaFormatIconPipe","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","t_r1","ɵɵelementContainerStart","ɵɵtemplate","PromotedIconComponent_ng_container_0_Conditional_1_Template","ɵɵconditional","ctx_r1","promoted","PromotedIconComponent","constructor","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","PromotedIconComponent_ng_container_0_Template","ɵɵproperty","TranslocoDirective","changeDetection","_PromotedIconComponent","ɵɵelementContainerStart","ɵɵelement","ɵɵprojection","ɵɵadvance","ɵɵclassMapInterpolate1","ɵɵpipeBind1","ctx_r0","format","ɵɵpropertyInterpolate","SeriesFormatComponent","constructor","MangaFormat","UNKNOWN","selectors","inputs","standalone","features","ɵɵStandaloneFeature","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","ɵɵtemplate","SeriesFormatComponent_ng_container_0_Template","ɵɵproperty","CommonModule","NgIf","MangaFormatIconPipe","MangaFormatPipe","changeDetection","_SeriesFormatComponent","ɵɵelement","ɵɵproperty","ɵɵpureFunction0","_c1","ctx_r1","imageUrl","imageService","errorImage","ɵɵelementStart","ɵɵelementEnd","ɵɵpropertyInterpolate1","ɵɵpipeBind2","read","total","ɵɵadvance","ɵɵtext","ɵɵtextInterpolate1","t_r3","ɵɵlistener","$event","ɵɵrestoreView","_r4","ɵɵnextContext","ɵɵresetView","handleSelection","ɵɵclassMapInterpolate1","bulkSelectionService","hasSelections","ɵɵattributeInterpolate2","title","entity","id","selected","_c2","ɵɵtextInterpolate","count","centerOverlay","info_r5","ɵɵsanitizeHtml","ɵɵtemplate","CardItemComponent_ng_container_0_Conditional_14_Conditional_0_Template","ɵɵconditional","_r7","performAction","actions","ɵɵelementContainer","subtitleTemplate","ɵɵpureFunction1","_c3","_c4","libraryId","ɵɵpipeBind1","libraryName","_r6","handleClick","CardItemComponent_ng_container_0_Conditional_16_Conditional_6_Template","CardItemComponent_ng_container_0_Conditional_16_Conditional_7_Template","CardItemComponent_ng_container_0_Conditional_16_Conditional_8_Template","ɵɵpropertyInterpolate2","tooltipTitle","isPromoted","format","length","suppressLibraryLink","ɵɵelementContainerStart","_r1","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_Conditional_11_Template","CardItemComponent_ng_container_0_Conditional_12_Template","CardItemComponent_ng_container_0_Conditional_14_Template","CardItemComponent_ng_container_0_Conditional_16_Template","suppressArchiveWarning","download$","allowSelection","tmp_10_0","overlayInformation","CardItemComponent","constructor","destroyRef","inject","DestroyRef","ImageService","BulkSelectionService","libraryService","LibraryService","downloadService","DownloadService","utilityService","UtilityService","messageHub","MessageHubService","accountService","AccountService","scrollService","ScrollService","cdRef","ChangeDetectorRef","actionFactoryService","ActionFactoryService","MangaFormat","clicked","EventEmitter","selection","undefined","UNKNOWN","prevTouchTime","prevOffset","selectionInProgress","ngOnInit","hasOwnProperty","markForCheck","getLibraryName","pipe","takeUntilDestroyed","subscribe","name","isChapter","chapter","asChapter","chapterTitle","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","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","contentQueries","rf","ctx","dirIndex","CardItemComponent_ng_container_0_Template","ImageComponent","NgbProgressbar","DownloadIndicatorComponent","FormsModule","CheckboxControlValueAccessor","NgControlStatus","NgModel","NgbTooltip","CardActionablesComponent","SentenceCasePipe","RouterLink","TranslocoModule","TranslocoDirective","SafeHtmlPipe","RouterLinkActive","PromotedIconComponent","SeriesFormatComponent","DecimalPipe","NgTemplateOutlet","styles","changeDetection","_CardItemComponent"],"x_google_ignoreList":[4]}