epub-flow 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -0
- package/epub-flow-0.0.1.tgz +0 -0
- package/fesm2022/epub-flow.mjs +2249 -0
- package/fesm2022/epub-flow.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/add-notes/add-notes.component.d.ts +47 -0
- package/lib/chapterlist/chapterlist.component.d.ts +14 -0
- package/lib/custom-dialog.service.d.ts +24 -0
- package/lib/epub-common-popup/epub-common-popup.component.d.ts +84 -0
- package/lib/epub-loader/epub-loader.component.d.ts +6 -0
- package/lib/epub-reader.module.d.ts +22 -0
- package/lib/epub-reader.service.d.ts +20 -0
- package/lib/reader-main/reader-main.component.d.ts +136 -0
- package/lib/shared-mocks/confirm-popup.component.d.ts +10 -0
- package/lib/shared-mocks/models-mocks.d.ts +4 -0
- package/lib/shared-mocks/no-data-found.component.d.ts +6 -0
- package/lib/shared-mocks/services-mocks.d.ts +24 -0
- package/lib/shared-mocks/skeleton-loader.component.d.ts +10 -0
- package/package.json +28 -0
- package/public-api.d.ts +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epub-flow.mjs","sources":["../../../projects/epub-reader/src/lib/epub-reader.service.ts","../../../projects/epub-reader/src/lib/custom-dialog.service.ts","../../../projects/epub-reader/src/lib/shared-mocks/services-mocks.ts","../../../projects/epub-reader/src/lib/add-notes/add-notes.component.ts","../../../projects/epub-reader/src/lib/add-notes/add-notes.component.html","../../../projects/epub-reader/src/lib/shared-mocks/no-data-found.component.ts","../../../projects/epub-reader/src/lib/shared-mocks/skeleton-loader.component.ts","../../../projects/epub-reader/src/lib/shared-mocks/skeleton-loader.component.html","../../../projects/epub-reader/src/lib/epub-common-popup/epub-common-popup.component.ts","../../../projects/epub-reader/src/lib/epub-common-popup/epub-common-popup.component.html","../../../projects/epub-reader/src/lib/shared-mocks/confirm-popup.component.ts","../../../projects/epub-reader/src/lib/chapterlist/chapterlist.component.ts","../../../projects/epub-reader/src/lib/chapterlist/chapterlist.component.html","../../../projects/epub-reader/src/lib/reader-main/reader-main.component.ts","../../../projects/epub-reader/src/lib/reader-main/reader-main.component.html","../../../projects/epub-reader/src/lib/epub-loader/epub-loader.component.ts","../../../projects/epub-reader/src/lib/epub-loader/epub-loader.component.html","../../../projects/epub-reader/src/lib/epub-reader.module.ts","../../../projects/epub-reader/src/public-api.ts","../../../projects/epub-reader/src/epub-flow.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport {\n EpubChapter,\n SearchResponseModel,\n} from './shared-mocks/models-mocks';\nimport { map, Observable } from 'rxjs';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\n@Injectable()\nexport class EpubReaderService {\n ePubChapters = signal<EpubChapter | null>(null);\n noteToEdit = signal<any>(null);\n searchKey = signal<string>('');\n searchResponseData = signal<SearchResponseModel[] | null>(null);\n\n\n constructor(private http: HttpClient) { }\n\n /*\n *@Desc : To update Epub chapters\n *@Author: Jaisankar\n */\n updateChapters(data: EpubChapter): void {\n this.ePubChapters.set(data);\n }\n\n /*\n *@Desc : To update Search key\n *@Author: Jaisankar\n */\n toUpdateSearchKey(data: string): void {\n this.searchKey.set(data);\n }\n\n /*\n *@Desc : To update Search key\n *@Author: Jaisankar\n */\n updateSearchData(data: SearchResponseModel[] | null): void {\n this.searchResponseData.set(data);\n }\n\n /*\n *@Desc : TO STORE SELECTED NOTES\n *@Author: ABOOBACKER\n */\n setNote(data: any) {\n this.noteToEdit.set(data);\n }\n\n /*\n *@Desc : TO GET SELECTED NOTES\n *@Author: ABOOBACKER\n */\n getNote() {\n return this.noteToEdit();\n }\n\n getDefinition(payload: any): Observable<any> {\n const headers = new HttpHeaders({\n skip: 'true', // Add the custom header\n });\n\n return this.http\n .get(`https://api.dictionaryapi.dev/api/v2/entries/en/${payload}`, {\n headers,\n })\n .pipe(map((x: any) => x?.[0] ?? []));\n }\n}\n","import { Injectable, Type, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Subject } from 'rxjs';\n\nexport interface DialogOptions {\n data?: any;\n windowClass?: string;\n closeButton?: boolean;\n enableClose?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CustomDialogService {\n constructor(private overlay: Overlay, private injector: Injector) { }\n\n open(component: Type<any>, options: DialogOptions = {}) {\n // 1. Position Strategy\n const positionStrategy = this.overlay.position()\n .global()\n .centerHorizontally()\n .centerVertically();\n\n // 2. Overlay Config\n const overlayConfig = new OverlayConfig({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n // You can map options.windowClass to panelClass if needed, or pass width/height\n panelClass: options.windowClass\n });\n\n // 3. Create Overlay\n const overlayRef = this.overlay.create(overlayConfig);\n\n // 4. Create DialogRef\n const ref = new CustomDialogRef();\n ref.data = options.data;\n\n // 5. Create Injector\n const injector = Injector.create({\n providers: [\n { provide: CustomDialogRef, useValue: ref },\n { provide: CustomDialogService, useValue: this }\n ],\n parent: this.injector\n });\n\n // 6. Attach Component\n const portal = new ComponentPortal(component, null, injector);\n overlayRef.attach(portal);\n\n // 7. Handle Close\n ref.afterClosed$.subscribe(() => {\n overlayRef.dispose();\n });\n\n overlayRef.backdropClick().subscribe(() => {\n if (options.enableClose !== false && !options.closeButton) {\n // If closeButton is true, usually that handles closing. \n // But for backdrop click, we check enableClose. Default is usually true.\n ref.close();\n } else if (options.enableClose === undefined) {\n ref.close();\n }\n });\n\n return ref;\n }\n\n closeAll() {\n // This is a simplified version. To properly close all, we'd need to track active refs.\n // For now, individual dialogs manage their own closure via ref.\n }\n}\n\nexport class CustomDialogRef {\n private afterClosed = new Subject<any>();\n afterClosed$ = this.afterClosed.asObservable();\n data: any;\n\n close(result?: any) {\n this.afterClosed.next(result);\n this.afterClosed.complete();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class SharedService {\n showHide(val: boolean) { }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class HttpApiService {\n\n\n getAnnotations(params: any): Observable<any> { return of({}); }\n getReadProgress(params: any): Observable<any> { return of({}); }\n getFreeSample(id: any): Observable<any> { return of(new Blob()); }\n getBook(id: any): Observable<any> { return of(new Blob()); }\n saveAnnotations(params: any): Observable<any> { return of({}); }\n saveReadProgress(params: any): Observable<any> { return of({}); }\n deleteNotes(id: any): Observable<any> { return of({}); }\n updateSearchData(data: any) { }\n addorEditeNote(payload: any): Observable<any> { return of({}); }\n\n\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n // methods\n}\n","import { Component, HostListener } from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { CustomDialogRef, CustomDialogService } from '../custom-dialog.service';\nimport { Editor, Toolbar } from 'ngx-editor';\nimport { SharedService, HttpApiService } from '../shared-mocks/services-mocks';\nimport { EpubReaderService } from '../epub-reader.service';\n\nimport { Subject, takeUntil } from 'rxjs';\nimport { MessageService } from 'primeng/api';\n\n@Component({\n selector: 'app-add-notes',\n standalone: false,\n templateUrl: './add-notes.component.html',\n styleUrl: './add-notes.component.scss',\n})\nexport class AddNotesComponent {\n editor!: Editor; // Editor instance\n textToAddorEdit!: string;\n toolbar: Toolbar = [\n ['bold', 'italic'],\n ['underline', 'strike'],\n ['code', 'blockquote'],\n ['ordered_list', 'bullet_list'],\n [\n {\n heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n },\n ],\n ['text_color', 'background_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ];\n isSubmitting = false;\n\n\n // FormGroup for handling editor content\n form = new FormGroup({\n editorContent: new FormControl(this.textToAddorEdit),\n });\n data: any;\n // Getter for editor content\n get editorContent(): AbstractControl {\n return this.form.get('editorContent')!;\n }\n private onDestroy$: Subject<void> = new Subject<void>();\n constructor(\n public dialog: CustomDialogService,\n private sharedService: SharedService,\n private epubReader: EpubReaderService,\n private userApi: HttpApiService,\n public dialogRef: CustomDialogRef,\n private messageService: MessageService\n ) { }\n ngOnInit(): void {\n // Initialize the editor\n this.editor = new Editor();\n this.textToAddorEdit = this.dialogRef.data.notetoAddorEdit; // Access THE SELECTED NOTE\n this.form.patchValue({ editorContent: this.textToAddorEdit });\n }\n\n onSubmit(): void {\n if (this.form.valid) {\n const content = this.editorContent.value; // Retrieve content as HTML\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n\n @HostListener('document:dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n console.log('Drag over blocked');\n }\n\n // Prevent drop\n @HostListener('document:drop', ['$event'])\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n console.log('Drop blocked');\n }\n\n // Optional: Prevent drag start\n @HostListener('document:dragstart', ['$event'])\n onDragStart(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n console.log('Drag start blocked');\n }\n\n\n @HostListener('document:contextmenu', ['$event'])\n onRightClick(event: MouseEvent) {\n event.preventDefault(); // Disable the right-click menu\n }\n\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (event.ctrlKey && event.key === 'c') {\n event.preventDefault(); // Prevent the default copy action\n }\n }\n\n @HostListener('document:copy', ['$event'])\n onCopy(event: ClipboardEvent) {\n event.preventDefault(); // Prevent the copy event\n }\n ngOnDestroy(): void {\n // Destroy the editor instance to prevent memory leaks\n this.editor.destroy();\n }\n updateNote() {\n this.isSubmitting = true;\n\n const content = this.editorContent.value; // Retrieve content as HTML\n const payload = {\n typeId: 1,\n id: this.dialogRef.data.notedetails.id,\n bookId: this.dialogRef.data.notedetails.bookId,\n cfiLocation: this.dialogRef.data.notedetails.cfiLocation,\n annotatedNotes: this.dialogRef.data.notedetails.annotatedNotes,\n customNotes: content,\n colorCode: '',\n };\n\n this.userApi\n .addorEditeNote(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => {\n this.messageService.add({\n key: 'notifyToast',\n severity: 'success', // Use 'warn' for orange color\n summary: 'Success',\n detail: res.message,\n });\n this.dialog.closeAll();\n },\n error: (err) => {\n this.isSubmitting = false; // re-enable button\n\n console.error('Error fetching eBook details:', err);\n },\n complete: () => {\n this.isSubmitting = false; // re-enable button\n },\n });\n }\n\n /**\n * @Desc : Checks if the provided content has valid, non-empty, and non-whitespace-only text.\n * @Author : Aboobacker\n * @Param : content (string) - The content to validate\n * @Returns: boolean - true if valid content exists, false otherwise\n */\n hasValidContent(content: string): boolean {\n if (!content) return false;\n const textOnly = content.replace(/<[^>]*>/g, '').trim(); // Remove HTML tags\n return textOnly.length > 0;\n }\n\n addNote() {\n this.isSubmitting = true; // re-enable button\n\n const content = this.editorContent.value; // Retrieve content as HTML\n const payload = {\n typeId: 1,\n id: 0,\n bookId: this.dialogRef.data.notedetails.bookId,\n cfiLocation: this.dialogRef.data.notedetails.cfiLocation,\n annotatedNotes: this.dialogRef.data.notetoAddorEdit,\n customNotes: content,\n colorCode: '',\n };\n this.userApi\n .addorEditeNote(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => {\n this.messageService.add({\n key: 'notifyToast',\n severity: 'success', // Use 'warn' for orange color\n summary: 'Success',\n detail: res.message,\n });\n this.dialog.closeAll();\n },\n error: (err) => {\n this.isSubmitting = false; // re-enable button\n\n console.error('Error fetching eBook details:', err);\n },\n complete: () => {\n this.isSubmitting = false; // re-enable button\n\n },\n });\n }\n}\n","<div class=\"note-container\">\n <div class=\"popup-header\">\n <h2 class=\"popup-title\">{{ dialogRef.data.addNote ? 'Add Note' : 'Edit Note' }}</h2>\n <button class=\"close-btn\" (click)=\"close()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n <form class=\"note-form\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <!-- Editor Section -->\n <section class=\"editor-section\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"toolbar\">\n </ngx-editor-menu>\n\n <ngx-editor class=\"editor-body\" [editor]=\"editor\" formControlName=\"editorContent\">\n </ngx-editor>\n </section>\n\n <!-- Validation -->\n <p class=\"error\" *ngIf=\"editorContent.invalid && editorContent.touched\">\n Content is required.\n </p>\n\n <!-- Footer / Actions -->\n <footer class=\"action-bar\">\n @if (dialogRef.data.addNote) {\n <button type=\"submit\" class=\"btn btn-primary\" (click)=\"addNote()\"\n [disabled]=\"!hasValidContent(editorContent.value) || isSubmitting\">\n Add Note\n </button>\n } @else {\n <button type=\"submit\" class=\"btn btn-primary\" (click)=\"updateNote()\"\n [disabled]=\"!hasValidContent(editorContent.value) || isSubmitting\">\n Update Note\n </button>\n }\n </footer>\n </form>\n</div>","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-no-data-found',\n standalone: true,\n imports: [CommonModule],\n template: `<div class=\"no-data-found\">{{ message }}</div>`\n})\nexport class NoDataFoundComponent {\n @Input() message: string = 'No Data Found';\n}\n","import { Component, Input, OnChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-skeleton-loader',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss']\n})\nexport class SkeletonLoaderComponent implements OnChanges {\n @Input() count: number = 3;\n @Input() type: 'list' | 'text' = 'list';\n\n items: any[] = [];\n\n ngOnChanges() {\n this.items = Array(this.count).fill(0);\n }\n}\n","<div class=\"skeleton-container\">\n <div *ngFor=\"let item of items\" class=\"skeleton-item\" [ngClass]=\"type\">\n <ng-container *ngIf=\"type === 'list'\">\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line title\"></div>\n <div class=\"skeleton-line meta\"></div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'text'\">\n <div class=\"skeleton-line text-long\"></div>\n <div class=\"skeleton-line text-medium\"></div>\n <div class=\"skeleton-line text-short\"></div>\n </ng-container>\n </div>\n</div>","import { Component, effect, OnDestroy, OnInit } from '@angular/core';\n\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { finalize, Subject, takeUntil } from 'rxjs';\nimport { HttpApiService } from '../shared-mocks/services-mocks';\nimport { MessageService } from 'primeng/api';\nimport { CustomDialogRef, CustomDialogService } from '../custom-dialog.service';\nimport { EpubReaderService } from '../epub-reader.service';\nimport { SharedService } from '../shared-mocks/services-mocks';\nimport { notModel, SearchResponseModel } from '../shared-mocks/models-mocks';\nimport { AddNotesComponent } from '../add-notes/add-notes.component';\n\n\n@Component({\n selector: 'app-epub-common-popup',\n standalone: false,\n templateUrl: './epub-common-popup.component.html',\n styleUrl: './epub-common-popup.component.scss',\n})\nexport class EpubCommonPopupComponent implements OnInit {\n staticText = {\n validationText: { atleastThreeChara: 'Enter at least 3 characters to begin searching' },\n btnText: { cancel: 'Cancel', edit: 'Edit', remove: 'Remove' },\n htmlText: { nohighlightsavailable: 'No highlights' }\n };\n notesandHighlights!: any;\n bookMarkList!: any;\n singlenoteDetails!: any;\n notes!: any;\n isNotEndOfList: boolean = true;\n template = 2;\n htmlString!: SafeHtml;\n htmlStaticText = {\n validationText: { atleastThreeChara: 'Min 3 chars' },\n btnText: { cancel: 'Cancel', edit: 'Edit', remove: 'Remove' },\n htmlText: { nohighlightsavailable: 'No highlights' }\n };\n paginationData = {\n totalCount: 0,\n pageSize: 1000,\n currentPage: 1,\n };\n searchKey: string = '';\n searchData: SearchResponseModel[] | null = null;\n searchCharaSmall: boolean = false;\n private onDestroy$: Subject<void> = new Subject<void>();\n tabviewIndex: any = 1;\n Definition: any = [];\n isLoading: boolean = false;\n isSearchDataAvailable: boolean = false;\n\n constructor(\n private sanitizer: DomSanitizer,\n private userApi: HttpApiService,\n private messageService: MessageService,\n public dialog: CustomDialogService,\n public dialogRef: CustomDialogRef,\n private loaderService: SharedService,\n private epubService: EpubReaderService,\n private sharedService: SharedService\n ) {\n\n\n effect(() => {\n this.searchData = this.epubService.searchResponseData();\n this.isSearchDataAvailable = false; // Reset loading when data arrives\n });\n }\n ngOnInit(): void {\n this.template = this.dialogRef.data.template;\n\n if (this.dialogRef.data.template === 1) {\n this.singlenoteDetails = this.dialogRef.data.notedetails;\n const rawHtml = this.singlenoteDetails.customNotes;\n\n this.htmlString = this.sanitizer.bypassSecurityTrustHtml(rawHtml);\n }\n if (this.dialogRef.data.template === 2) {\n this.getHighlightNotes();\n }\n if (this.dialogRef.data.template === 4) {\n this.getBookmark();\n }\n if (this.dialogRef.data.template === 5) {\n this.getDefinition();\n }\n }\n\n /*\n *@Desc : Handles tab view changes\n *@Author: Aboobacker\n */\n onTabChange(data: any) {\n this.paginationData = {\n totalCount: 0,\n pageSize: 10,\n currentPage: 1,\n };\n\n if (data.index === 1) {\n //noteas\n this.tabviewIndex = data.index;\n this.getNotes();\n } else {\n //highlights\n this.getHighlightNotes();\n }\n }\n /*\n *@Desc : get highlightNotes\n *@Author: Aboobacker\n */\n getHighlightNotes() {\n this.isLoading = true;\n const payload = {\n keyword: '',\n pageSize: this.paginationData.pageSize,\n currentPage: this.paginationData.currentPage,\n id: '',\n type: 2,\n bookId: this.dialogRef.data.bookId,\n };\n\n this.userApi\n .getAnnotations(payload)\n .pipe(\n takeUntil(this.onDestroy$),\n finalize(() => this.isLoading = false)\n )\n .subscribe({\n next: (res: any) => {\n this.notesandHighlights = res.highlightedNotes?.items;\n },\n error: (err) => {\n console.error('Error fetching highlightedNotes details:', err);\n }\n });\n }\n /*\n *@Desc : get bookMarks\n *@Author: Aboobacker\n */\n getBookmark() {\n this.isLoading = true;\n const payload = {\n keyword: '',\n pageSize: 1000,\n currentPage: 1,\n id: '',\n type: 4, // type 4 is bookmark\n bookId: this.dialogRef.data.bookId,\n };\n this.userApi\n .getAnnotations(payload)\n .pipe(\n takeUntil(this.onDestroy$),\n finalize(() => this.isLoading = false)\n )\n .subscribe({\n next: (res: any) => {\n this.bookMarkList = res?.bookmarks?.items;\n }\n });\n }\n /*\n *@Desc : to get Definition\n *@Author: Aboobacker\n */\n getDefinition() {\n this.isLoading = true;\n this.epubService\n .getDefinition(this.dialogRef.data.selectedText)\n .pipe(\n takeUntil(this.onDestroy$),\n finalize(() => this.isLoading = false)\n )\n .subscribe({\n next: (res: any) => {\n // Ensure Definition is always an array to avoid template errors\n this.Definition = Array.isArray(res?.meanings) ? res.meanings : [];\n },\n error: () => {\n this.Definition = [];\n }\n });\n }\n\n /*\n *@Desc : get Notes\n *@Author: Aboobacker\n */\n getNotes() {\n this.isLoading = true;\n const payload = {\n keyword: '',\n pageSize: this.paginationData.pageSize,\n currentPage: this.paginationData.currentPage,\n id: '',\n type: 1,\n bookId: this.dialogRef.data.bookId,\n };\n\n this.userApi\n .getAnnotations(payload)\n .pipe(\n takeUntil(this.onDestroy$),\n finalize(() => this.isLoading = false)\n )\n .subscribe({\n next: (res: notModel) => {\n if (!res.notes.items.length) {\n this.isNotEndOfList = false;\n }\n\n if (this.paginationData.currentPage === 1) {\n this.notes = res.notes?.items;\n } else {\n this.notes = [...this.notes, ...res.notes.items];\n }\n },\n error: (err) => {\n console.error('Error fetching eBook details:', err);\n }\n });\n }\n\n /*\n *@Desc : delete all type of annotations\n *@Author: Aboobacker\n */\n deleteAnnotations(typeId: number, id: number) {\n this.loaderService.showHide(true);\n const payload = {\n typeId: typeId,\n id: id,\n };\n\n this.userApi\n .deleteNotes(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => {\n this.loaderService.showHide(false);\n this.messageService.add({\n key: 'notifyToast',\n severity: 'success',\n summary: 'Success',\n detail: res.message,\n });\n if (this.template == 1) {\n this.dialog.closeAll();\n }\n if (this.template == 2) {\n this.getNotes();\n this.getHighlightNotes();\n }\n if (this.template == 4) {\n this.getBookmark();\n }\n },\n error: (err) => {\n console.error('Error dlt Annotations:', err);\n },\n complete: () => { },\n });\n }\n\n /*\n *@Desc : open the added note\n *@Author: Aboobacker\n */\n openNote(data: any) {\n this.dialogRef.close(data.cfiLocation);\n const dialog = this.dialog.open(EpubCommonPopupComponent, {\n closeButton: true,\n enableClose: false,\n windowClass: 'highlightandNotes',\n data: {\n template: 1,\n notedetails: data,\n },\n });\n }\n\n editNote() {\n this.epubService.setNote(this.singlenoteDetails.customNotes);\n\n const dialog = this.dialog.open(AddNotesComponent, {\n closeButton: false,\n windowClass: 'addandeditNotepopup',\n data: {\n notedetails: this.singlenoteDetails,\n notetoAddorEdit: this.singlenoteDetails.customNotes,\n addNote: false,\n },\n });\n }\n\n updateSearchKey() {\n this.epubService.toUpdateSearchKey(this.searchKey);\n if (this.searchKey.length >= 3) {\n this.searchCharaSmall = false;\n this.isLoading = true; // start local loader \n } else {\n this.searchCharaSmall = true;\n }\n }\n\n clickSearchItem(cfi: string) {\n this.searchKey = '';\n this.epubService.toUpdateSearchKey('');\n this.epubService.updateSearchData(null);\n this.dialogRef.close(cfi);\n }\n\n gotoLocation(data: string) {\n this.dialogRef.close(data);\n }\n\n clearSearch() {\n this.searchKey = '';\n this.epubService.toUpdateSearchKey('');\n this.epubService.updateSearchData(null);\n this.searchCharaSmall = false;\n }\n\n close() {\n this.epubService.updateSearchData(null);\n this.dialogRef.close();\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n closePopup(cfi: string) {\n this.dialogRef.close(cfi);\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n}\n","<!-- Template 1: Single Note View -->\n@if (dialogRef.data.template == 1) {\n<div class=\"popup-container\">\n <div class=\"popup-header\">\n <h2 class=\"popup-title\">Note Details</h2>\n <div class=\"header-actions\">\n <button class=\"close-btn\" (click)=\"close()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <div class=\"popup-content content-padded\">\n <div class=\"inner-html-class text-lg text-primary mb-6\" [innerHTML]=\"htmlString\"></div>\n </div>\n\n <div class=\"dialog-footer\">\n <button class=\"btn btn-secondary\" (click)=\"close()\">\n {{ htmlStaticText.btnText.cancel }}\n </button>\n <button class=\"btn btn-primary\" (click)=\"editNote()\">\n {{ htmlStaticText.btnText.edit }}\n </button>\n <button class=\"btn btn-danger\" (click)=\"deleteAnnotations(1, this.singlenoteDetails.id)\">\n {{ htmlStaticText.btnText.remove }}\n </button>\n </div>\n</div>\n}\n\n<!-- Template 2: Highlights & Notes Tabs -->\n@if (dialogRef.data.template == 2) {\n<div class=\"popup-container\">\n <div class=\"popup-header\">\n <h2 class=\"popup-title\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M16.035 2.977l4.988 4.989-12.022 12.021H4v-4.988L16.035 2.977z\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n Highlights & Notes\n </h2>\n <button class=\"close-btn\" (click)=\"close()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"popup-content\">\n <p-tabView (onChange)=\"onTabChange($event)\">\n\n <!-- Highlights Tab -->\n <p-tabPanel header=\"Highlights\">\n <div *ngIf=\"isLoading; else highlightsContent\">\n <app-skeleton-loader [count]=\"4\" type=\"list\"></app-skeleton-loader>\n </div>\n <ng-template #highlightsContent>\n <div *ngIf=\"!notesandHighlights?.length; else noteList\" class=\"empty-state\">\n {{ htmlStaticText.htmlText.nohighlightsavailable }}\n </div>\n\n <ng-template #noteList>\n <div *ngFor=\"let note of notesandHighlights\" class=\"popup-row\">\n <div class=\"row-icon-container\">\n <div class=\"w-2 h-8 rounded-full\" [style.background-color]=\"note.colorCode\"\n style=\"width: 4px; height: 32px; border-radius: 4px;\"></div>\n </div>\n\n <div class=\"row-content\" (click)=\"gotoLocation(note.cfiLocation)\">\n <div class=\"row-title line-clamp\">{{ note.annotatedNotes }}</div>\n <div class=\"row-meta\">\n <span>Page {{ note.pageNumber || 'N/A' }}</span>\n </div>\n </div>\n\n <div class=\"row-actions\">\n <button class=\"action-btn\" (click)=\"deleteAnnotations(2, note.id)\" title=\"Remove\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </ng-template>\n </ng-template>\n </p-tabPanel>\n\n <!-- Notes Tab -->\n <p-tabPanel header=\"Notes\">\n <div *ngIf=\"isLoading; else notesContent\">\n <app-skeleton-loader [count]=\"4\" type=\"list\"></app-skeleton-loader>\n </div>\n <ng-template #notesContent>\n <div *ngIf=\"!notes?.length; else notesList\" class=\"empty-state\">\n No notes available.\n </div>\n\n <ng-template #notesList>\n <div *ngFor=\"let item of notes\" class=\"popup-row\">\n <div class=\"row-icon-container\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"row-content\" (click)=\"openNote(item)\">\n <div class=\"row-title line-clamp\"\n [innerHTML]=\"item.annotatedNotes ? item.annotatedNotes : item.customNotes\"></div>\n </div>\n <div class=\"row-actions\">\n <button class=\"action-btn\" (click)=\"deleteAnnotations(1, item.id)\" title=\"Remove\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </ng-template>\n </ng-template>\n </p-tabPanel>\n\n </p-tabView>\n </div>\n</div>\n}\n\n<!-- Template 3: Search -->\n@if (dialogRef.data.template == 3) {\n<div class=\"popup-container\">\n <div class=\"popup-header\">\n <h2 class=\"popup-title\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n Search\n </h2>\n <button class=\"close-btn\" (click)=\"close()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <svg class=\"search-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\">\n <path d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input [(ngModel)]=\"searchKey\" (keyup.enter)=\"updateSearchKey()\" type=\"text\" placeholder=\"Search in book...\"\n class=\"search-input\" autofocus />\n <div class=\"input-actions-wrapper\">\n <button *ngIf=\"searchKey\" class=\"icon-btn-clear\" (click)=\"clearSearch()\" title=\"Clear search\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <button class=\"btn btn-primary btn-sm\" (click)=\"updateSearchKey()\">\n Search\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"popup-content\">\n <div *ngIf=\"searchCharaSmall\" class=\"info-banner\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n <span>{{ staticText.validationText.atleastThreeChara }}</span>\n </div>\n\n <div *ngIf=\"isSearchDataAvailable; else searchResults\">\n <app-skeleton-loader [count]=\"4\" type=\"list\"></app-skeleton-loader>\n </div>\n\n <ng-template #searchResults>\n <div *ngIf=\"searchKey?.length && searchData && !searchData?.length\" class=\"empty-state\">\n <app-no-data-found></app-no-data-found>\n </div>\n\n <div class=\"search-results\">\n <div *ngFor=\"let item of searchData\" class=\"popup-row\" (click)=\"clickSearchItem(item.cfi)\">\n <div class=\"row-content\">\n <div class=\"row-title\" [innerHTML]=\"item.highlightedSentence\"></div>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n</div>\n}\n\n<!-- Template 4: Bookmarks -->\n@if (dialogRef.data.template == 4) {\n<div class=\"popup-container\">\n <div class=\"popup-header\">\n <h2 class=\"popup-title\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n Bookmarks\n </h2>\n <button class=\"close-btn\" (click)=\"close()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"popup-content\">\n <div *ngIf=\"isLoading; else bookmarkContent\">\n <app-skeleton-loader [count]=\"4\" type=\"list\"></app-skeleton-loader>\n </div>\n\n <ng-template #bookmarkContent>\n <div *ngIf=\"!bookMarkList || bookMarkList.length === 0\" class=\"empty-state\">\n No bookmarks yet.\n </div>\n\n <div *ngIf=\"bookMarkList && bookMarkList.length > 0\">\n <div *ngFor=\"let bookmark of bookMarkList\" class=\"popup-row\">\n <div class=\"row-icon-container\">\n <!-- Filled Bookmark Icon for list -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n [style.color]=\"bookmark.colorCode || '#3b82f6'\">\n <path d=\"M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z\" />\n </svg>\n </div>\n\n <div class=\"row-content\" (click)=\"closePopup(bookmark.cfiLocation)\">\n <div class=\"row-title line-clamp\">{{ bookmark.annotatedNotes || 'Bookmark' }}</div>\n <div class=\"row-meta mt-2\">\n <div class=\"progress-container\">\n <div class=\"progress-fill\" [style.width.%]=\"bookmark.customNotes\"></div>\n </div>\n <span>{{ bookmark.customNotes }}%</span>\n </div>\n </div>\n\n <div class=\"row-actions\">\n <button class=\"action-btn\" (click)=\"deleteAnnotations(4, bookmark.id)\" title=\"Remove\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n</div>\n}\n\n<!-- Template 5: Definitions -->\n@if (dialogRef.data.template == 5) {\n<div class=\"popup-container\">\n <div class=\"popup-header\">\n <h2 class=\"popup-title\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 19.5A2.5 2.5 0 016.5 17H20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n Definition\n </h2>\n <button class=\"close-btn\" (click)=\"close()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"popup-content content-padded\">\n <h3 class=\"text-xl font-bold text-primary mb-4 select-text\">\n \"{{ dialogRef.data.selectedText }}\"\n </h3>\n\n <div *ngIf=\"isLoading; else defsContent\">\n <app-skeleton-loader [count]=\"3\" type=\"text\"></app-skeleton-loader>\n </div>\n\n <ng-template #defsContent>\n <div *ngIf=\"Definition?.length > 0; else noDefs\">\n <div *ngFor=\"let entry of Definition\" class=\"definition-group\">\n <span class=\"pos-tag\">{{ entry.partOfSpeech }}</span>\n\n <div *ngFor=\"let def of entry.definitions\" class=\"def-item\">\n <p class=\"def-text\">{{ def.definition }}</p>\n <p *ngIf=\"def.example\" class=\"def-example\">\"{{ def.example }}\"</p>\n </div>\n </div>\n </div>\n\n <ng-template #noDefs>\n <div class=\"empty-state\">No definitions found.</div>\n </ng-template>\n </ng-template>\n </div>\n</div>\n}","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CustomDialogRef } from '../custom-dialog.service';\n\n@Component({\n selector: 'app-confirm-popup',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"confirm-popup-container\">\n <h3 class=\"title\">{{ data.heading }}</h3>\n <p class=\"message\">{{ data.message }}</p>\n <div class=\"actions\">\n <button class=\"btn-cancel\" (click)=\"close(false)\">{{ data.btnOneTxt }}</button>\n <button class=\"btn-confirm\" (click)=\"close(true)\">{{ data.btnTwoTxt }}</button>\n </div>\n </div>\n `,\n styles: [`\n .confirm-popup-container {\n padding: 24px;\n background: white;\n border-radius: 8px;\n min-width: 300px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n }\n .title { margin: 0 0 12px; font-size: 1.125rem; font-weight: 600; color: #111827; }\n .message { margin: 0 0 24px; color: #4b5563; font-size: 0.95rem; }\n .actions { display: flex; justify-content: flex-end; gap: 12px; }\n button {\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n border: none;\n }\n .btn-cancel { background: #f3f4f6; color: #374151; }\n .btn-cancel:hover { background: #e5e7eb; }\n .btn-confirm { background: #dc2626; color: white; }\n .btn-confirm:hover { background: #b91c1c; }\n `]\n})\nexport class ConfirmPopupComponent {\n data: any;\n\n constructor(private ref: CustomDialogRef) {\n this.data = this.ref.data;\n }\n\n close(result: boolean) {\n this.ref.close(result);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-chapterlist',\n standalone: false,\n templateUrl: './chapterlist.component.html',\n styleUrl: './chapterlist.component.scss',\n})\nexport class ChapterlistComponent implements OnInit {\n @Input() chapterData: any[] = [];\n @Output() chapterClick = new EventEmitter<string>();\n @Output() closeDialog = new EventEmitter<void>();\n\n isExpanded: boolean[] = [];\n\n ngOnInit(): void {\n if (this.chapterData) {\n this.isExpanded = new Array(this.chapterData.length).fill(false);\n }\n }\n\n toggleAccordion(index: number): void {\n this.isExpanded[index] = !this.isExpanded[index];\n }\n\n onChapterClick(href: any) {\n this.chapterClick.emit(href);\n }\n\n onClose() {\n this.closeDialog.emit();\n }\n}\n\n","<div id=\"reader-content\" class=\"chapter-list-container bg-white\">\n <!-- Header -->\n <div class=\"chapter-header\">\n\n <h2 class=\"chapter-title\">\n Contents\n </h2>\n\n <button class=\"close-btn\" aria-label=\"Close\" (click)=\"onClose()\">\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n </div>\n\n\n\n <!-- Chapter List -->\n <div class=\"flex-1 overflow-y-auto custom-scrollbar\">\n <!-- No chapters -->\n <div *ngIf=\"!chapterData || chapterData.length === 0\" class=\"text-sm text-gray-500 p-8 text-center italic\">\n No chapters available in this book.\n </div>\n\n <ng-container *ngFor=\"let chapter of chapterData\">\n\n <!-- Main Chapter -->\n <div class=\"chapter-row main-chapter\" (click)=\"onChapterClick(chapter.href)\">\n <div class=\"title-container\">\n <span class=\"title\">{{ chapter.title }}</span>\n <span *ngIf=\"chapter.page\" class=\"dots\"></span>\n </div>\n <span *ngIf=\"chapter.page\" class=\"page\">\n {{ chapter.page }}\n </span>\n </div>\n\n <!-- Subchapters -->\n <ng-container *ngIf=\"chapter.subchapters?.length\">\n <div *ngFor=\"let subchapter of chapter.subchapters\" class=\"chapter-row sub-chapter\"\n (click)=\"onChapterClick(subchapter.href)\">\n <div class=\"title-container\">\n <span class=\"title\">{{ subchapter.title }}</span>\n <span *ngIf=\"subchapter.page\" class=\"dots\"></span>\n </div>\n <span *ngIf=\"subchapter.page\" class=\"page\">\n {{ subchapter.page }}\n </span>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</div>","import { HttpEventType } from '@angular/common/http';\nimport {\n ChangeDetectorRef,\n Component,\n effect,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n OnChanges,\n SimpleChanges,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { SharedService, HttpApiService } from '../shared-mocks/services-mocks';\nimport {\n forkJoin,\n from,\n map,\n mergeMap,\n Observable,\n Subject,\n Subscription,\n takeUntil,\n toArray,\n} from 'rxjs';\nimport { EpubReaderService } from '../epub-reader.service';\nimport { CustomDialogService } from '../custom-dialog.service';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ChapterlistComponent } from '../chapterlist/chapterlist.component';\nimport { EpubChapter, AnnotationModel } from '../shared-mocks/models-mocks';\nimport { AddNotesComponent } from '../add-notes/add-notes.component';\nimport { EpubCommonPopupComponent } from '../epub-common-popup/epub-common-popup.component';\nimport ePub from 'epubjs';\nimport { MessageService } from 'primeng/api';\nimport { ConfirmPopupComponent } from '../shared-mocks/confirm-popup.component';\nimport { isPlatformBrowser, Location } from '@angular/common';\nimport {\n ElementRef,\n HostListener,\n Renderer2,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n@Component({\n selector: 'epub-flow',\n standalone: false,\n templateUrl: './reader-main.component.html',\n styleUrl: './reader-main.component.scss',\n})\nexport class ReaderMainComponent implements OnInit, OnDestroy, OnChanges {\n @Input() epubUrl: string | null = null;\n @Input() epubBlob: Blob | null = null;\n @Input() coverPage: string | null = null;\n\n // Feature flags\n @Input() enableDarkMode: boolean = true;\n @Input() enableSearch: boolean = true;\n @Input() enableHighlights: boolean = true;\n @Input() enableBookmarks: boolean = true;\n @Input() enableChapterList: boolean = true;\n @Input() enableTextSelection: boolean = true;\n @Input() enableFontSize: boolean = true;\n @Input() enableNotes: boolean = true;\n\n @Output() underlineRemoveRequest = new EventEmitter<{\n cfi: string;\n annotationId?: string;\n }>();\n\n book: any;\n bookId: string | number = 0;\n rendition: any;\n readPercentage = {\n roudedOff: 0,\n numberFormat: 0,\n };\n bookDwnldPerctge = 0;\n showDwndLoader: boolean = true;\n mainOvelay: boolean = false;\n showHighlightOverlay: boolean = false;\n showhightLightColor: boolean = false;\n audioNarrations: boolean = false;\n toggleDarkMode: boolean = false;\n curentPageEndCfi!: string;\n chaptersData!: EpubChapter;\n selectedData = {\n selectedCfiRange: '',\n selectedText: '',\n };\n fontSize = 100; //default font size is 100\n highlightList: AnnotationModel[] = [];\n underlineList: AnnotationModel[] = [];\n searchData: any = [];\n searchKeyword = '';\n newSentence = '';\n colourCodeList: Array<string> = ['#F44336', '#FFEB3B', '#4CAF50']; //When adding or removing new colour to the colour list it should be updated here\n readCfi: string = '';\n annotedList: any;\n readPercentagegetbyApi: any;\n freeSample: string = 'false';\n showOverlay = false;\n showBookPageLoader: boolean = true;\n showPreviewModal = false;\n hasShownPreviewMessage = false;\n maxPreviewClicks = 5;\n coverImg: string | null = null;\n isMenuOpen: boolean = false;\n selectionPosition = { top: 0, left: 0 };\n private onDestroy$: Subject<void> = new Subject<void>();\n private readProgressSub!: Subscription;\n private overlayRef?: OverlayRef;\n\n @HostListener('document:keyup', ['$event'])\n handleKeyUp(event: KeyboardEvent) {\n if (event.key === 'PrintScreen') {\n navigator.clipboard.writeText('');\n this.showOverlay = true;\n setTimeout(() => {\n this.showOverlay = false;\n }, 1500);\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n const blockedKeys = ['c', 'v', 'p', 's', 'u', 'i', 'j'];\n if ((event.ctrlKey || event.metaKey) && blockedKeys.includes(event.key.toLowerCase())) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (event.key === 'F12') {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n constructor(\n private ngZone: NgZone,\n private httpService: HttpApiService,\n private sharedService: SharedService,\n private epubService: EpubReaderService,\n private cdr: ChangeDetectorRef,\n private route: ActivatedRoute,\n public dialog: CustomDialogService,\n private messageService: MessageService,\n private location: Location,\n @Inject(PLATFORM_ID) private platformId: Object,\n private router: Router,\n private overlay: Overlay\n ) {\n effect(() => {\n this.searchKeyword = this.epubService.searchKey();\n if (this.searchKeyword && this.searchKeyword.length >= 3) {\n this.searchBook();\n }\n });\n\n const queryParams = this.route.snapshot.queryParams;\n this.bookId = queryParams['bookID'];\n this.freeSample = queryParams['freeSample'] || 'false';\n }\n\n ngOnInit(): void {\n this.coverImg = this.coverPage || this.route.snapshot.queryParams['coverImg'];\n // Load DotLottie dynamically if needed\n this.loadDotLottieIfNeeded();\n\n if (this.bookId) {\n this.initialization();\n } else if (this.epubUrl || this.epubBlob) {\n this.getBookData();\n }\n window.print = () => { };\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['coverPage'] && changes['coverPage'].currentValue) {\n this.coverImg = changes['coverPage'].currentValue;\n }\n if (\n (changes['epubUrl'] && changes['epubUrl'].currentValue) ||\n (changes['epubBlob'] && changes['epubBlob'].currentValue)\n ) {\n this.getBookData();\n }\n }\n\n loadDotLottieIfNeeded(): void {\n if (typeof (window as any).loadDotLottie === 'function') {\n (window as any).loadDotLottie();\n }\n }\n\n /*--------------------------------------------------------- Initialization -----------------------------------------------------------------------------------------*/\n /*\n *@Desc : To get the initial data to load the book, highlights, underline\n *@Author: Jaisankar\n */\n initialization() {\n const allApis: any = [\n this.httpService.getAnnotations({\n keyword: '',\n pageSize: 10,\n currentPage: 1,\n\n type: 3, // type 3 is underline\n bookId: this.bookId,\n }),\n this.httpService.getReadProgress({\n bookId: this.bookId,\n }),\n this.httpService.getAnnotations({\n keyword: '',\n pageSize: 10,\n currentPage: 1,\n\n type: 2, // type 2 is highlight\n bookId: this.bookId,\n }),\n ];\n\n forkJoin(allApis)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (value: any) => {\n this.annotedList = value;\n this.readCfi = this.annotedList[1].cfiLocation;\n this.readPercentagegetbyApi = this.annotedList[1].readProgress;\n this.highlightList = this.annotedList[2].highlightedNotes.items;\n this.underlineList = this.annotedList[0].underlinedNotes.items;\n // this.bookdetails();\n this.getBookData();\n },\n error: () => {\n // If annotations fail, we might still want to load the book if inputs are present\n this.sharedService.showHide(false);\n this.getBookData();\n },\n complete: () => { },\n });\n }\n\n goBack() {\n this.location.back();\n }\n\n audioNarration() {\n console.log('Audio Narration clicked');\n }\n\n /*\n *@Desc : To get the book data from api, initialize all event for the rendition and display the epub\n *@Author: Jaisankar\n */\n getBookData() {\n this.ngZone.run(() => {\n this.sharedService.showHide(false);\n });\n\n if (this.epubBlob) {\n this.loadBookFromBlob(this.epubBlob);\n } else if (this.epubUrl) {\n if (typeof this.epubUrl === 'string' && this.epubUrl.trim() !== '') {\n this.loadBookFromUrl(this.epubUrl);\n } else {\n this.handleBookLoadError('Invalid EPUB URL.');\n }\n } else {\n console.error('No EPUB source provided (epubUrl or epubBlob).');\n // Do not show error to user immediately if waiting for input, unless we want to enforce it.\n // But if this is called, it usually expects data.\n this.handleBookLoadError('No book source found.');\n }\n }\n\n loadBookFromUrl(url: string) {\n try {\n this.book = ePub(url);\n this.renderBook();\n } catch (err) {\n console.error('Error initializing EPUB from URL:', err);\n this.handleBookLoadError('Failed to load book from URL.');\n }\n }\n\n loadBookFromBlob(blob: Blob) {\n if (blob.size === 0) {\n this.handleBookLoadError('The provided EPUB file is empty.');\n return;\n }\n\n const reader = new FileReader();\n reader.readAsArrayBuffer(blob);\n reader.onload = async () => {\n try {\n const arrayBuffer = reader.result as ArrayBuffer;\n if (!arrayBuffer || arrayBuffer.byteLength === 0) {\n throw new Error('Empty array buffer');\n }\n this.book = ePub(arrayBuffer);\n this.renderBook();\n } catch (error) {\n console.error('Error reading blob:', error);\n this.handleBookLoadError('Failed to load the EPUB file.');\n }\n };\n reader.onerror = () => {\n this.handleBookLoadError('Error reading the file.');\n };\n }\n\n handleBookLoadError(message: string) {\n this.showBookPageLoader = false;\n this.showDwndLoader = false;\n this.messageService.add({\n key: 'notifyToast',\n severity: 'error',\n summary: 'Error',\n detail: message,\n });\n this.ngZone.run(() => {\n this.sharedService.showHide(false);\n });\n }\n\n renderBook() {\n const area = document.getElementById('reader');\n if (area) {\n area.innerHTML = ''; // Clear previous content\n }\n\n this.rendition = this.book.renderTo('reader', {\n //To render the Epub and pass the config to the library\n width: '100%', // or \"100%\", depending on your layout\n height: '100%', // optional, adjust based on your container\n allowScriptedContent: true, // Important\n spread: 'auto'\n });\n this.book.ready.then(() => {\n if (this.book.navigation.toc.length) {\n // Map through chapters and extract subchapter information\n const chapters = this.book.navigation.toc.map(\n (spineItem: any) => ({\n title:\n spineItem.label || `Chapter ${spineItem.index + 1}`,\n href:\n this.book?.spine && spineItem?.href\n ? this.book.spine.get(spineItem.href)?.href\n : '',\n subchapters: (spineItem.subitems || []).map(\n (subItem: any) => {\n const spineEntry = this.book.spine.get(subItem.href);\n return {\n title: subItem.label || `Subchapter`,\n href: spineEntry?.href || '', // fallback to empty string or some default\n };\n }\n ),\n })\n );\n this.chaptersData = chapters;\n }\n\n this.book.locations.generate(1000).then(() => {\n // Calculate page numbers for chapters\n if (this.chaptersData) {\n const updateChapterPage = (chapter: any) => {\n const spineItem = this.book.spine.get(chapter.href);\n if (spineItem) {\n const cfi = spineItem.cfiFromElement(undefined);\n chapter.page = this.book.locations.locationFromCfi(cfi);\n }\n if (chapter.subchapters) {\n chapter.subchapters.forEach((sub: any) => {\n const subSpine = this.book.spine.get(sub.href);\n if (subSpine) {\n const subCfi = subSpine.cfiFromElement(undefined);\n sub.page = this.book.locations.locationFromCfi(subCfi);\n }\n });\n }\n };\n\n this.chaptersData.forEach(updateChapterPage);\n }\n\n this.rendition.on('locationChanged', (location: any) => {\n if (this.freeSample == 'false') {\n this.applyHighlights();\n this.applyUnderline();\n }\n this.rendition.themes.default({\n '::selection': {\n background: '#cceeff', // Soft green\n color: '#1b5e20', // Dark text\n },\n '*': {\n '-webkit-tap-highlight-color': 'transparent', // removes green tap\n '-webkit-user-select': 'text',\n 'user-select': 'text',\n '-webkit-touch-callout': 'none', // removes iOS popup menu\n },\n });\n\n this.curentPageEndCfi = location.start;\n\n //To get the location changed event for calculating read percentage and saving current read percentage\n const percentage = this.book.locations.percentageFromCfi(\n location.end\n );\n this.readPercentage.roudedOff =\n Math.floor(percentage * 100) || 0;\n this.readPercentage.numberFormat = percentage;\n });\n this.showDwndLoader = false;\n\n if (\n this.showBookPageLoader === true ||\n this.showBookPageLoader === undefined\n ) {\n this.showBookPageLoader = true;\n }\n\n if (this.readCfi && this.readCfi?.length) {\n setTimeout(() => {\n this.showBookPageLoader = false;\n this.rendition.display(this.readCfi);\n }, 1500);\n\n this.ngZone.run(() => {\n this.sharedService.showHide(false);\n });\n } else {\n setTimeout(() => {\n this.showBookPageLoader = false;\n this.rendition.display();\n }, 1500);\n\n this.ngZone.run(() => {\n this.sharedService.showHide(false);\n });\n }\n });\n });\n\n //Event when new section is rendered\n this.rendition.on('rendered', (section: any) => {\n this.darkMode();\n });\n\n this.rendition.on('rendered', () => {\n this.rendition.views().forEach((view: any) => {\n let iframe = view.iframe;\n if (iframe) {\n const doc = iframe.contentDocument;\n\n // 🔒 Disable copy, drag, and right-click inside EPUB iframe\n ['copy', 'contextmenu', 'dragstart'].forEach((event) =>\n doc.addEventListener(event, (e: Event) =>\n e.preventDefault()\n )\n );\n\n // 🔒 Block all Ctrl/Cmd-based keyboard shortcuts (e.g., Ctrl+P, Ctrl+C, Cmd+S)\n doc.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n // 🎨 Inject CSS to disable dragging and prevent printing from Chrome menu\n const style = doc.createElement('style');\n style.innerHTML = `\n /* Disable element dragging */\n * {\n -webkit-user-drag: none;\n user-drag: none;\n }\n\n /* Block printing via @media print */\n @media print {\n body, html {\n display: none !important;\n background: white !important;\n }\n\n body::before {\n content: \"🚫 Printing is disabled.\";\n display: block;\n font-size: 24px;\n text-align: center;\n color: red;\n margin-top: 100px;\n }\n }\n `;\n doc.head.appendChild(style);\n }\n });\n const iframe = document.querySelector('iframe');\n if (iframe) {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow?.document;\n\n if (iframeDoc) {\n if (this.freeSample === 'true') {\n // Disable all <a> tags inside iframe\n const links = iframeDoc.querySelectorAll('a');\n links.forEach((link) => {\n link.style.pointerEvents = 'none'; // Disable clicking\n link.style.color = 'gray'; // Optional: gray out links\n // Also prevent default on click as a fallback\n link.addEventListener('click', (e) =>\n e.preventDefault()\n );\n });\n }\n\n let scrollTimeout: any = null;\n\n iframeDoc.addEventListener(\n 'wheel',\n (event: WheelEvent) => {\n event.preventDefault(); // Prevent default scroll\n\n if (scrollTimeout) {\n clearTimeout(scrollTimeout);\n }\n\n scrollTimeout = setTimeout(() => {\n if (event.deltaY > 0) {\n this.nextClick();\n } else {\n this.prevClick();\n }\n }, 150);\n },\n { passive: false }\n ); // Important!\n }\n }\n });\n\n //Event when selection is made the function will be called and the cfi and selected content will be saved\n this.rendition.on(\n 'selected',\n (cfiRange: string, contents: any) => {\n if (!this.enableTextSelection) {\n contents.window.getSelection().removeAllRanges();\n return;\n }\n\n const selection = contents.window.getSelection();\n const range = selection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n\n // Get iframe position\n const frameRect = contents.document.defaultView.frameElement.getBoundingClientRect();\n\n this.ngZone.run(() => {\n this.selectionPosition = {\n top: frameRect.top + rect.top - 60, // Position above selection\n left: frameRect.left + rect.left + (rect.width / 2)\n };\n this.handleSelection(cfiRange, selection.toString().trim());\n });\n }\n );\n }\n\n onProgressChange(event: Event): void {\n if (this.freeSample === 'true' && this.hasShownPreviewMessage) {\n return;\n }\n const input = event.target as HTMLInputElement;\n const percent = +input.value;\n\n if (this.freeSample === 'true') {\n if (percent > this.maxPreviewClicks) {\n this.hasShownPreviewMessage = true;\n this.showPreviewModal = true;\n return;\n }\n }\n // Update progress bar in real-time\n this.readPercentage.roudedOff = percent;\n\n // Also update EPUB location in real-time\n if (this.book && this.book.locations) {\n const cfi = this.book.locations.cfiFromPercentage(percent / 100);\n this.rendition.display(cfi); // this gets called during drag\n }\n }\n\n /*--------------------------------------------- End of Initialization ---------------------------------------------------------*/\n mainOverlay() {\n this.mainOvelay = !this.mainOvelay;\n }\n\n showHighlightOverlaymethod() {\n this.showHighlightOverlay = !this.showHighlightOverlay;\n }\n\n showhightLightColormethod() {\n this.showHighlightOverlay = !this.showHighlightOverlay;\n }\n\n handleCloseButtonClick(): void {\n if (this.mainOvelay) {\n this.mainOverlay();\n } else if (this.showHighlightOverlay) {\n this.showHighlightOverlaymethod();\n } else if (this.showhightLightColor) {\n this.showhightLightColormethod();\n }\n }\n\n /*\n *@Desc : To paginate to next page and apply hightlight and underline again\n *@Author: Jaisankar\n */\n nextClick() {\n if (this.freeSample === 'true' && this.hasShownPreviewMessage) {\n return;\n }\n this.rendition\n ?.next()\n .then(() => {\n this.applyHighlights();\n this.applyUnderline();\n })\n .catch((err: any) => console.error(err));\n if (this.freeSample === 'true') {\n if (this.readPercentage.roudedOff > this.maxPreviewClicks) {\n this.hasShownPreviewMessage = true;\n this.showPreviewModal = true;\n return;\n }\n }\n }\n\n /*\n *@Desc : To paginate to previous page and apply hightlight and underline again\n *@Author: Jaisankar\n */\n prevClick() {\n this.rendition\n .prev()\n .then(() => {\n this.applyHighlights();\n this.applyUnderline();\n })\n .catch((err: any) => console.error(err));\n }\n\n /*\n *@Desc : To toggle between dark and light modes, native toggle feature of epub.js has bugs so custom method implemented\n *@Author: Jaisankar\n */\n darkMode() {\n const iframe = document.querySelector('iframe');\n const body = iframe?.contentDocument?.body;\n\n // Reset styles first\n body?.style?.removeProperty('background-color');\n body?.style?.removeProperty('color');\n\n if (this.toggleDarkMode) {\n document.body.classList.add('dark-mode');\n\n // Content colors for dark mode\n const darkBg = '#121212';\n const darkText = '#e0e0e0';\n const accentLink = '#32d74b';\n\n if (body) {\n body.style.setProperty('background-color', darkBg, 'important');\n body.style.setProperty('color', darkText, 'important');\n\n const allElements = body.querySelectorAll('div, section, article, p, li, h1, h2, h3, h4, h5, h6, span');\n allElements.forEach((el) => {\n (el as HTMLElement).style.setProperty('color', darkText, 'important');\n (el as HTMLElement).style.setProperty('background-color', 'transparent', 'important');\n });\n\n const links = body.querySelectorAll('a');\n links.forEach((a) => {\n a.style.setProperty('color', accentLink, 'important');\n });\n }\n } else {\n document.body.classList.remove('dark-mode');\n\n // Reset to light mode defaults\n if (body) {\n body.style.setProperty('background-color', '#ffffff', 'important');\n body.style.setProperty('color', '#1a1a1a', 'important');\n\n const allElements = body.querySelectorAll('div, section, article, p, li, h1, h2, h3, h4, h5, h6, span');\n allElements.forEach((el) => {\n (el as HTMLElement).style.removeProperty('color');\n (el as HTMLElement).style.removeProperty('background-color');\n });\n }\n }\n if (this.freeSample == 'false') {\n if (this.highlightList.length) {\n this.applyHighlights();\n }\n if (this.underlineList.length) {\n this.applyUnderline();\n }\n }\n }\n\n /*\n *@Desc : To toggle fontsizes, and reapply highlights\n *@Author: Jaisankar\n */\n changeFontSize(check: string) {\n if (check === '+') {\n if (this.fontSize < 200) {\n // Check if we can increase the font size\n this.fontSize = Math.min(this.fontSize + 10, 200); // Limit max size (200%)\n }\n this.rendition.themes.fontSize(this.fontSize.toString() + '%');\n\n if (this.highlightList.length) {\n this.applyHighlights();\n }\n if (this.underlineList.length) {\n this.applyUnderline();\n }\n } else {\n if (this.fontSize > 50) {\n // Check if we can decrease the font size\n this.fontSize = Math.max(this.fontSize - 10, 50); // Limit min size (50%)\n }\n this.rendition.themes.fontSize(this.fontSize.toString() + '%');\n if (this.highlightList.length) {\n this.applyHighlights();\n }\n if (this.underlineList.length) {\n this.applyUnderline();\n }\n }\n }\n\n /*\n *@Desc : To save the cfi of the selected text for highlight and underline\n *@Author: Jaisankar\n */\n handleSelection(cfiRange: any, selectedText: string) {\n this.selectedData.selectedCfiRange = cfiRange;\n this.selectedData.selectedText = selectedText;\n this.showHighlightOverlay = true;\n this.isMenuOpen = false; // Hide main menu if selection happens\n if (this.mainOvelay) {\n this.mainOvelay = !this.mainOvelay;\n }\n this.cdr.detectChanges();\n }\n\n /*\n *@Desc : To show chapter popup using custom implementation\n *@Author: Jaisankar\n */\n showChapterList: boolean = false;\n showChapterPopup() {\n this.showChapterList = true;\n }\n\n onChapterSelect(href: string) {\n this.showChapterList = false;\n if (href) {\n this.rendition.display(href);\n }\n }\n\n\n /*\n *@Desc : To open add notes popup\n *@Author: Jaisankar\n */\n addNotes() {\n this.epubService.setNote(this.selectedData.selectedText);\n const notedetails = {\n bookId: this.bookId,\n cfiLocation: this.selectedData.selectedCfiRange,\n };\n const dialog = this.dialog.open(AddNotesComponent, {\n closeButton: true,\n windowClass: 'addandeditNotepopup',\n data: {\n notedetails: notedetails,\n addNote: true,\n notetoAddorEdit: this.selectedData.selectedText,\n },\n });\n }\n\n /*\n *@Desc : To first get all items in spine that is sections of epub (not chapters)\n then load that section and find the matching keywords,\n then create a span with highlight class replace this span to the sentence where the keyword is found\n return the new sentence, cfi and old sentance as an object\n *@Author: Jaisankar\n */\n searchBook() {\n from(this.book.spine.spineItems)\n .pipe(\n mergeMap((item: any) =>\n from(item.load(this.book.load.bind(this.book))).pipe(\n mergeMap(() => from(item.find(this.searchKeyword))), // Find after loading text\n map((result: any) => {\n // Create a case-insensitive regular expression for the keyword\n const regex = new RegExp(this.searchKeyword, 'gi');\n\n // Replace occurrences of the keyword with the highlighted version\n this.newSentence = result.excerpt.replace(regex, (match: any) => {\n // Wrap each match dynamically, preserving the original case\n return `<span class=\"highlight-key\">${match}</span>`;\n });\n\n // Unload after processing\n item.unload();\n\n // Create the result object\n const newReturnObj = {\n cfi: result.cfi,\n highlightedSentence: this.newSentence,\n originalSentence: result.excerpt,\n };\n\n return newReturnObj; // Return the processed result\n })\n )\n ),\n toArray() // Collect all results into a single array\n )\n .subscribe({\n next: (results: any) => {\n this.epubService.updateSearchData(results.flat()); //flat to flatten the array ex [a, [b,c] ,d ] output is [a,b,c,d]\n this.sharedService.showHide(false); //stop loader after the search result is saved\n },\n error: (err) => {\n console.error('Error:', err);\n },\n });\n }\n\n /*--------------------------------------------------------- Annotations Start -----------------------------------------------------------------------------------------*/\n /*--------------------------------------------------------- Underline Section -----------------------------------------------------------------------------------------*/\n\n /*\n *@Desc : Add underline to underline and apply underline\n *@Author: Jaisankar\n */\n addUnderline() {\n this.underlineList.push({\n typeId: 3,\n id: 0,\n userId: 0,\n libraryId: 0,\n bookId: 0,\n studentId: 0,\n cfiLocation: this.selectedData.selectedCfiRange,\n annotatedNotes: this.selectedData.selectedText,\n customNotes: null,\n colorCode: '',\n notesCapturedDate: '',\n createdBy: 0,\n });\n\n const payload = {\n typeId: 3, // type 4 is bookmark\n id: 0, // 0 for new highlight\n bookId: this.bookId,\n cfiLocation: this.selectedData.selectedCfiRange,\n annotatedNotes: this.selectedData.selectedText,\n customNotes: '',\n colorCode: '',\n };\n\n if (this.underlineList.length) {\n this.applyUnderline();\n }\n\n if (this.bookId) {\n this.httpService\n .saveAnnotations(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => { },\n error: () => {\n this.sharedService.showHide(false);\n },\n complete: () => {\n this.getunderlineList();\n\n this.sharedService.showHide(false);\n },\n });\n }\n }\n\n /*\n *@Desc : To remove all underlines first and add underline class and then apply style to the class\n *@Author: Jaisankar\n */\n async applyUnderline() {\n for (const underline of this.underlineList) {\n await this.removeUnderline(underline.cfiLocation);\n }\n\n for (const underline of this.underlineList) {\n await this.addUnderlineClass(underline.cfiLocation);\n }\n\n await this.addStyleToUnderline();\n }\n\n /*\n *@Desc : To add the highlight class\n *@Author: Jaisankar\n */\n addUnderlineClass(cfi: string | null = null) {\n if (cfi?.length) {\n this.rendition?.annotations?.underline(\n cfi || this.selectedData.selectedCfiRange,\n { class: 'custom-underline' },\n (e: any) => {\n const target = e.target as HTMLElement;\n const cfiLocation = target.getAttribute('data-epubcfi') || target.closest('[data-epubcfi]')?.getAttribute('data-epubcfi');\n\n if (cfiLocation) {\n const dialog = this.dialog.open(ConfirmPopupComponent, {\n closeButton: false,\n data: {\n heading: 'Remove Underline?',\n message: 'Are you sure you want to remove this underline?',\n btnOneTxt: 'Cancel',\n btnTwoTxt: 'Remove',\n },\n });\n\n dialog.afterClosed$.subscribe((res: boolean) => {\n if (res) {\n if (res === true) {\n const annotation = this.underlineList.find(\n (annotation) =>\n annotation.cfiLocation === cfiLocation\n );\n\n if (annotation) {\n this.removeUnderline(cfiLocation);\n this.deleteAnnotations(3, annotation.id);\n }\n }\n }\n });\n } else {\n console.log('CFI Location not found', target); // Log target to help debug if needed\n }\n },\n 'underline'\n );\n }\n }\n\n /*\n *@Desc : To remove the highlight class\n *@Author: Jaisankar\n */\n removeUnderline(cfi: string): void {\n try {\n this.rendition?.annotations?.remove(cfi, 'underline');\n } catch (error) {\n console.error('Error removing underline:', error);\n }\n }\n\n /*\n *@Desc : To add colour to the highlights\n *@Author: Jaisankar\n */\n addStyleToUnderline() {\n // Collect all documents (main + iframes)\n const docs: Document[] = [document];\n this.rendition?.views().forEach((view: any) => {\n if (view.iframe?.contentDocument) {\n docs.push(view.iframe.contentDocument);\n }\n });\n\n const isDark = this.toggleDarkMode;\n const strokeColor = isDark ? '#FFFFFF' : '#000000';\n\n docs.forEach(doc => {\n // Target elements with standard and custom underline classes\n const underlineGroups = doc.querySelectorAll('.epubjs-underline, .underline, .custom-underline');\n\n underlineGroups.forEach((group: any) => {\n // SVG rects are often used as hit areas\n const rects = group.querySelectorAll('rect');\n rects.forEach((rect: any) => {\n rect.style.fill = 'transparent';\n rect.style.stroke = 'none';\n rect.style.pointerEvents = 'auto'; // Ensure it's clickable\n });\n\n // SVG lines are the actual underline\n const lines = group.querySelectorAll('line');\n lines.forEach((line: any) => {\n line.style.stroke = strokeColor;\n line.style.strokeWidth = '2';\n line.style.pointerEvents = 'auto';\n });\n });\n });\n }\n\n /*\n *@Desc : To get underline list\n *@Author: Jaisankar\n */\n getunderlineList() {\n const payload = {\n keyword: '',\n pageSize: 1000,\n currentPage: 1,\n id: '',\n type: 3, // type 3 is bookmark\n bookId: this.bookId,\n };\n this.httpService\n .getAnnotations(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => {\n this.underlineList = res.underlinedNotes.items;\n if (this.underlineList.length) {\n this.applyUnderline();\n }\n },\n error: () => {\n this.sharedService.showHide(false);\n },\n complete: () => {\n this.sharedService.showHide(false);\n },\n });\n }\n\n /*--------------------------------------------------------- Highlight Section -----------------------------------------------------------------------------------------*/\n\n /*\n *@Desc : To add highlight and save to db, to add a new colour code it needs to be added to color code array \n \"colorCode\": \"#F44336\" - Red\n \"colorCode\": \"#FFEB3B\" - Yellow\n \"colorCode\": \"#4CAF50\" - Green\n *@Author: Jaisankar\n */\n addHighlight(colourCode: string) {\n //push the highlight to the array in FE\n this.highlightList.push({\n typeId: 2,\n id: 0,\n userId: 0,\n libraryId: 0,\n bookId: 0,\n studentId: 0,\n cfiLocation: this.selectedData.selectedCfiRange,\n annotatedNotes: this.selectedData.selectedText,\n customNotes: null,\n colorCode: colourCode,\n notesCapturedDate: '',\n createdBy: 0,\n });\n const payload = {\n typeId: 2, // type 4 is bookmark\n id: 0, // 0 for new highlight\n bookId: this.bookId,\n cfiLocation: this.selectedData.selectedCfiRange,\n annotatedNotes: this.selectedData.selectedText,\n customNotes: '',\n colorCode: colourCode,\n };\n\n if (this.highlightList.length) {\n this.applyHighlights();\n }\n\n if (this.bookId) {\n this.httpService\n .saveAnnotations(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => { },\n error: () => {\n this.sharedService.showHide(false);\n },\n complete: () => {\n this.getHighlightlist();\n this.sharedService.showHide(false);\n },\n });\n }\n }\n\n /*\n *@Desc : To Remove all highlight first the add the class for highlight and then style based on class\n *@Author: Jaisankar\n */\n async applyHighlights() {\n for (const highlight of this.highlightList) {\n await this.removeHighlight(highlight.cfiLocation);\n }\n\n for (const highlight of this.highlightList) {\n await this.addHighlightClass(highlight.cfiLocation, highlight.colorCode);\n }\n\n await this.colourCodeList.forEach((colourCode) => {\n this.addColorToHighLights(colourCode);\n });\n }\n\n /*\n *@Desc : To Remove all highlights\n *@Author: Jaisankar\n */\n removeHighlight(cfi: string): void {\n try {\n this.rendition?.annotations?.remove(cfi, 'highlight');\n } catch (error) {\n console.error('Error removing highlight:', error);\n }\n }\n\n /*\n *@Desc : To add the highlight class\n *@Author: Jaisankar\n */\n addHighlightClass(\n cfi: string | null = null,\n colourCode: string | null = null\n ) {\n if (cfi?.length) {\n this.rendition?.annotations?.highlight(\n cfi || this.selectedData.selectedCfiRange,\n { class: `highlight-${colourCode}` },\n (e: any) => {\n const cfiLocation = e.target?.getAttribute('data-epubcfi');\n if (cfiLocation) {\n const targetCfiLocation = e.target?.getAttribute('data-epubcfi');\n if (targetCfiLocation) {\n const dialog = this.dialog.open(ConfirmPopupComponent, {\n closeButton: false,\n data: {\n heading: 'Remove Highlight?',\n message: 'Are you sure you want to remove this highlight?',\n btnOneTxt: 'Cancel',\n btnTwoTxt: 'Remove',\n },\n });\n\n dialog.afterClosed$.subscribe((res: boolean) => {\n if (res) {\n if (res === true) {\n const annotation = this.highlightList.find(\n (annotation) =>\n annotation.cfiLocation === targetCfiLocation\n );\n\n if (annotation) {\n this.removeHighlight(targetCfiLocation);\n this.deleteAnnotations(2, annotation.id);\n }\n }\n }\n });\n }\n } else {\n console.log('CFI Location not found');\n }\n },\n 'highlight'\n );\n }\n }\n\n /*\n *@Desc : To add colour to the highlights\n *@Author: Jaisankar\n */\n addColorToHighLights(colourCode: string) {\n const docs: Document[] = [document];\n this.rendition?.views().forEach((view: any) => {\n if (view.iframe?.contentDocument) {\n docs.push(view.iframe.contentDocument);\n }\n });\n\n docs.forEach(doc => {\n const rectElements = doc.querySelectorAll(\n `[data-class=\"highlight-${colourCode}\"] rect`\n );\n rectElements.forEach((rect: any) => {\n rect.style.fill = colourCode;\n rect.style.opacity = '0.5';\n });\n });\n }\n\n /*\n *@Desc : To get highlight list\n *@Author: Jaisankar\n */\n getHighlightlist() {\n const payload = {\n keyword: '',\n pageSize: 100,\n currentPage: 1,\n id: '',\n type: 2, // type 2 is bookmark\n bookId: this.bookId,\n };\n this.httpService\n .getAnnotations(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => {\n this.highlightList = res.highlightedNotes.items;\n\n if (this.bookId) {\n if (this.highlightList.length) {\n this.applyHighlights();\n }\n }\n },\n error: () => {\n this.sharedService.showHide(false);\n },\n complete: () => {\n this.sharedService.showHide(false);\n },\n });\n }\n\n /*--------------------------------------------------------- Bookmark Section -----------------------------------------------------------------------------------------*/\n /*\n *@Desc : To add bookmark and update in db\n *@Author: Jaisankar\n */\n addBookMark() {\n this.sharedService.showHide(true);\n let percentage = this.book.locations.percentageFromCfi(\n this.curentPageEndCfi\n );\n percentage = Math.floor(percentage * 100) || 0;\n\n this.book\n .getRange(this.curentPageEndCfi)\n .then((range: any) => {\n if (range) {\n const payload = {\n typeId: 4, // type 4 is bookmark\n id: 0, // 0 for new bookmark\n bookId: this.bookId,\n cfiLocation: this.curentPageEndCfi,\n annotatedNotes: range.startContainer?.textContent\n ?.trim()\n .substring(0, 100),\n customNotes: percentage,\n colorCode: this.getRandomHexColor,\n };\n this.httpService\n .saveAnnotations(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => {\n this.messageService.add({\n key: 'notifyToast',\n severity: 'success', // Use 'warn' for orange color\n summary: 'Success',\n detail: res.message,\n });\n },\n error: () => {\n this.sharedService.showHide(false);\n },\n complete: () => {\n this.sharedService.showHide(false);\n },\n });\n }\n })\n .catch((error: any) => {\n console.error('Error');\n });\n }\n\n /*\n *@Desc : To get Bookmark list\n *@Author: Jaisankar\n */\n getBookMarkList() {\n const payload = {\n keyword: '',\n pageSize: 1000,\n currentPage: 1,\n id: '',\n type: 4, // type 4 is bookmark\n bookId: this.bookId,\n };\n\n const dialog = this.dialog.open(EpubCommonPopupComponent, {\n closeButton: true,\n windowClass: 'highlightandNotes',\n data: {\n template: 4,\n bookId: this.bookId,\n },\n });\n\n dialog.afterClosed$.subscribe((res: any) => {\n if (res?.length) {\n this.rendition.display(res);\n }\n });\n }\n\n /*--------------------------------------------------------- Annotations End -----------------------------------------------------------------------------------------*/\n /*\n *@Desc : To save read progress\n *@Author: Jaisankar\n */\n saveReadProgreess() {\n const payload = {\n bookId: +this.bookId,\n pageNumber: 0,\n cfiLocation: this.curentPageEndCfi,\n readProgress: this.readPercentage.numberFormat,\n };\n\n if (this.bookId) {\n this.readProgressSub = this.httpService\n .saveReadProgress(payload)\n .subscribe({\n next: () => { },\n error: () => {\n this.sharedService.showHide(false);\n },\n complete: () => {\n this.sharedService.showHide(false);\n },\n });\n }\n }\n\n /*\n *@Desc : To open All common popup based on template\n *@Author: Aboobacker\n */\n openCommonPopup(data: any) {\n if (data == 1) {\n const dialog = this.dialog.open(EpubCommonPopupComponent, {\n closeButton: true,\n windowClass: 'highlightandNotes',\n data: {\n template: 2,\n bookId: this.bookId,\n selectedWord: this.selectedData.selectedText,\n },\n });\n\n dialog.afterClosed$.subscribe((res: any) => {\n if (res) {\n this.rendition.display(res);\n }\n this.highlightList.forEach((highlight) => {\n this.removeHighlight(highlight.cfiLocation);\n });\n this.getHighlightlist();\n });\n }\n\n if (data == 2) {\n const dialog = this.dialog.open(EpubCommonPopupComponent, {\n closeButton: true,\n windowClass: 'highlightandNotes',\n data: {\n template: 3,\n bookId: this.bookId,\n },\n });\n\n dialog.afterClosed$.subscribe((res: any) => {\n if (res) {\n this.rendition.display(res);\n }\n });\n }\n if (data == 3) {\n const dialog = this.dialog.open(EpubCommonPopupComponent, {\n closeButton: true,\n windowClass: 'highlightandNotes',\n data: {\n template: 4,\n bookId: this.bookId,\n },\n });\n }\n\n if (data == 4) {\n const dialog = this.dialog.open(EpubCommonPopupComponent, {\n closeButton: true,\n windowClass: 'highlightandNotes',\n data: {\n template: 5,\n bookId: this.bookId,\n selectedText: this.selectedData.selectedText,\n },\n });\n }\n }\n\n /*\n *@Desc : To delete Annotations\n *@Author: Aboobacker\n */\n\n deleteAnnotations(typeId: number, id: number) {\n const payload = {\n typeId: typeId,\n id: id,\n };\n\n if (this.bookId) {\n this.httpService\n .deleteNotes(payload)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe({\n next: (res: any) => { },\n error: (err: any) => {\n console.error('Error dlt Annotations:', err);\n },\n complete: () => {\n if (typeId === 2) {\n this.getHighlightlist();\n } else {\n this.getunderlineList();\n }\n },\n });\n }\n }\n\n /*\n *@Desc : To add note in a page\n *@Author: Aboobacker\n */\n addNoteToPage() {\n const notedetails = {\n bookId: this.bookId,\n cfiLocation: this.curentPageEndCfi,\n };\n const dialog = this.dialog.open(AddNotesComponent, {\n closeButton: true,\n windowClass: 'addandeditNotepopup',\n data: {\n notedetails: notedetails,\n addNote: true,\n notetoAddorEdit: '',\n },\n });\n }\n\n /*\n *@Desc : To generate random hexcode for bookmark\n *@Author: Jaisankar\n */\n get getRandomHexColor() {\n const randomColor = Math.floor(Math.random() * 16777215).toString(16);\n return `#${randomColor.padStart(6, '0')}`;\n }\n\n toggleAllMenus() {\n if (this.isMenuOpen || this.showHighlightOverlay || this.showhightLightColor) {\n this.isMenuOpen = false;\n this.showHighlightOverlay = false;\n this.showhightLightColor = false;\n } else {\n this.isMenuOpen = !this.isMenuOpen;\n }\n }\n\n ngOnDestroy(): void {\n if (this.rendition) {\n this.rendition.destroy();\n }\n if (isPlatformBrowser(this.platformId)) {\n document.body.classList.remove('dark-mode');\n }\n if (this.freeSample === 'false') {\n this.saveReadProgreess();\n }\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n}\n","<div id=\"reader-container\" [hidden]=\"showBookPageLoader || showDwndLoader\">\n <div id=\"reader-content\" style=\"overflow: hidden;\">\n <div id=\"reader\"></div>\n </div>\n\n <div id=\"reader-footer\">\n <div class=\"footer-container\">\n <!-- Left: Previous Button -->\n <button class=\"nav-btn prev-btn\" (click)=\"prevClick()\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Center: Progress Bar -->\n <div class=\"progress-section\">\n <div class=\"progress-label\">Read Progress</div>\n <div class=\"progress-bar-container\">\n <div class=\"progress-track\">\n <div class=\"progress-fill\" [style.width.%]=\"readPercentage.roudedOff\"></div>\n </div>\n <input type=\"range\" class=\"progress-slider\" min=\"0\" max=\"100\" [value]=\"readPercentage.roudedOff\"\n (input)=\"onProgressChange($event)\" />\n <span class=\"progress-text\">{{ readPercentage.roudedOff }}%</span>\n </div>\n </div>\n\n <!-- Right: Menu Toggle & Next Button -->\n <div class=\"right-controls\">\n <!-- Menu Toggle Button (Green) -->\n <div class=\"menu-container relative\">\n <!-- The Menu Popup -->\n @if (isMenuOpen) {\n <div class=\"menu-popup fade-in\">\n <ul class=\"menu-list\">\n <!-- Dark Mode -->\n <!-- Dark Mode -->\n @if (enableDarkMode) {\n <li (click)=\"toggleDarkMode = !toggleDarkMode; darkMode()\">\n <div class=\"menu-item\">\n <span class=\"icon moon-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13.5 10C12.7 10.3 11.9 10.5 11 10.5C7.4 10.5 4.5 7.6 4.5 4C4.5 3.1 4.7 2.3 5 1.5C2.7 2.5 1 4.8 1 7.5C1 11.1 3.9 14 7.5 14C10.2 14 12.5 12.3 13.5 10Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>{{ toggleDarkMode ? 'Light Mode' : 'Dark Mode' }}</span>\n </div>\n </li>\n }\n\n <!-- Highlights & Notes -->\n <!-- Highlights & Notes -->\n @if (enableHighlights || enableNotes) {\n <li (click)=\"openCommonPopup(1); isMenuOpen = false\">\n <div class=\"menu-item\">\n <span class=\"icon notes-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4H14M2 8H14M2 12H8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>Highlights & Notes</span>\n </div>\n </li>\n }\n\n <!-- Search Book -->\n <!-- Search Book -->\n @if (enableSearch) {\n <li (click)=\"openCommonPopup(2); isMenuOpen = false\">\n <div class=\"menu-item\">\n <span class=\"icon search-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 14L10.5 10.5M10.5 10.5C11.4 9.6 12 8.4 12 7C12 4.2 9.8 2 7 2C4.2 2 2 4.2 2 7C2 9.8 4.2 12 7 12C8.4 12 9.6 11.4 10.5 10.5Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>Search Book</span>\n </div>\n </li>\n }\n\n <!-- Bookmark List -->\n <!-- Bookmark List -->\n @if (enableBookmarks) {\n <li (click)=\"getBookMarkList(); isMenuOpen = false\">\n <div class=\"menu-item\">\n <span class=\"icon bookmark-list-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 1.33H4C3.26 1.33 2.66 1.93 2.66 2.66V13.33C2.66 14.06 3.26 14.66 4 14.66H12C12.73 14.66 13.33 14.06 13.33 13.33V2.66C13.33 1.93 12.73 1.33 12 1.33ZM6 2.66H7.33V6L6.66 5.5L6 6V2.66ZM12 13.33H4V2.66H4.66V8.66L6.66 7.16L8.66 8.66V2.66H12V13.33Z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <span>Bookmark List</span>\n </div>\n </li>\n }\n\n <!-- Chapters List -->\n <!-- Chapters List -->\n @if (enableChapterList) {\n <li (click)=\"showChapterPopup(); isMenuOpen = false\">\n <div class=\"menu-item\">\n <span class=\"icon chapter-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 15.33H2.66C1.93 15.33 1.33 14.73 1.33 14V4.66H2.66V14H12V15.33ZM11 8.66H7V10H11V8.66ZM10 0.66H5.33C4.6 0.66 4 1.26 4 2L4 11.33C4 12.06 4.6 12.66 5.33 12.66H12.66C13.4 12.66 14 12.06 14 11.33V4.66L10 0.66ZM12.66 11.33H5.33V2H9.44L12.66 5.22V11.33Z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <span>Chapters List</span>\n </div>\n </li>\n }\n\n <!-- Divider Row for Quick Actions -->\n <!-- Divider Row for Quick Actions -->\n <li class=\"quick-actions-row\">\n @if (enableFontSize) {\n <div class=\"quick-action-btn\" (click)=\"changeFontSize('+')\">\n <span class=\"text-sm font-bold\">A+</span>\n </div>\n <div class=\"quick-action-btn\" (click)=\"changeFontSize('-')\">\n <span class=\"text-sm font-bold\">A-</span>\n </div>\n }\n @if (enableNotes) {\n <div class=\"quick-action-btn\" (click)=\"addNoteToPage(); isMenuOpen = false\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3 17.25V21H6.75L17.81 9.94L14.06 6.19L3 17.25ZM20.71 7.04C21.1 6.65 21.1 6.02 20.71 5.63L18.37 3.29C17.98 2.9 17.35 2.9 16.96 3.29L15.13 5.12L18.88 8.87L20.71 7.04Z\"\n fill=\"currentColor\" />\n </svg>\n </div>\n }\n @if (enableBookmarks) {\n <div class=\"quick-action-btn\" (click)=\"addBookMark(); isMenuOpen = false\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 3H7C5.9 3 5 3.9 5 5V21L12 18L19 21V5C19 3.9 18.1 3 17 3Z\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n }\n </li>\n </ul>\n </div>\n }\n\n <!-- Selection Menu Inside Footer Hub -->\n @if (freeSample === 'false') {\n @if (showHighlightOverlay) {\n <div class=\"custom-selection-toolbar selection-menu fade-in\">\n @if (enableNotes) {\n <div class=\"menu-item\" (click)=\"addNotes(); showHighlightOverlay = false\">\n <span class=\"menu-text\">Add Notes</span>\n </div>\n }\n @if (enableHighlights) {\n <div class=\"menu-item\" (click)=\"showhightLightColor = true; showHighlightOverlay = false\" title=\"Highlight\">\n <span class=\"menu-text\">Highlights</span>\n </div>\n }\n @if (enableHighlights) {\n <div class=\"menu-item\" (click)=\"addUnderline(); showHighlightOverlay = false\">\n <span class=\"menu-text\">Underline</span>\n </div>\n }\n @if (enableNotes || enableHighlights) {\n <!-- Definition often goes with these tools -->\n <div class=\"menu-item border-none\" (click)=\"openCommonPopup(4); showHighlightOverlay = false\">\n <span class=\"menu-text\">Definition</span>\n </div>\n }\n </div>\n }\n\n @if (showhightLightColor) {\n <div class=\"custom-selection-toolbar color-picker fade-in\">\n @for (color of colourCodeList; track color) {\n <div class=\"color-circle\" [style.background]=\"color\"\n (click)=\"addHighlight(color); showhightLightColor = false\"></div>\n }\n <button class=\"toolbar-btn close-colors\" (click)=\"showhightLightColor = false; showHighlightOverlay = true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M19 12H5\"></path>\n </svg>\n </button>\n </div>\n }\n }\n\n <!-- The Green Toggle Button -->\n <button class=\"menu-toggle-btn\" (click)=\"toggleAllMenus()\"\n [class.open]=\"isMenuOpen || showHighlightOverlay || showhightLightColor\">\n <!-- X Icon when open, Burger/Menu when closed -->\n @if (isMenuOpen || showHighlightOverlay || showhightLightColor) {\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n } @else {\n <!-- Menu Grid Icon -->\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6H20M4 12H20M4 18H20\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n </button>\n </div>\n\n <!-- Next Button -->\n <button class=\"nav-btn next-btn\" (click)=\"nextClick()\" [class.ml-4]=\"true\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 18L15 12L9 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n\n@if (showBookPageLoader) {\n<div class=\"fixed inset-0 z-[45] flex items-center justify-center bg-premium-loader fade-in\">\n <div class=\"text-center\">\n <div class=\"mb-8 relative inline-block\">\n <!-- Decorative Backdrop for Book -->\n <div class=\"absolute inset-0 bg-black/5 blur-2xl rounded-full transform scale-110\"></div>\n\n <!-- Larger, Premium Book Image -->\n <img [src]=\"coverImg ?? ''\" alt=\"Loading\"\n class=\"w-56 h-80 object-cover rounded-xl shadow-premium border-[6px] border-white relative z-10 animate-pulse\" />\n </div>\n\n <!-- Enhanced Loading Text Container -->\n <div class=\"flex flex-col items-center space-y-3\">\n <div class=\"flex items-center space-x-2 text-gray-400\">\n <span class=\"text-base font-medium\">Please wait a moment</span>\n <div class=\"flex space-x-1.5\">\n <div class=\"w-1.5 h-1.5 bg-accent-color rounded-full animate-bounce\"></div>\n <div class=\"w-1.5 h-1.5 bg-accent-color rounded-full animate-bounce [animation-delay:-0.15s]\"></div>\n <div class=\"w-1.5 h-1.5 bg-accent-color rounded-full animate-bounce [animation-delay:-0.3s]\"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n}\n@if (showOverlay) {\n<div class=\"screenshot-overlay\"></div>\n}\n\n<!-- Full-screen Preview End Modal -->\n@if (showPreviewModal) {\n<div class=\"fixed inset-0 z-40 bg-white dark:bg-gray-900 flex flex-col items-center justify-center text-center px-4\">\n <h2\n class=\"text-[1.375rem] sm:text-2xl font-medium leading-snug text-center text-gray-800 dark:text-white mb-6 max-w-xs sm:max-w-sm mx-auto\">\n You’ve reached the end of the sample for\n </h2>\n\n <img [src]=\"coverImg ?? ''\" alt=\"Book Cover\" class=\"w-40 h-auto rounded-lg shadow-lg mb-6\" />\n</div>\n}\n\n\n<!-- Custom Chapter List Modal -->\n@if (showChapterList) {\n<div class=\"custom-modal-overlay fade-in\">\n <div class=\"custom-modal-content\">\n <app-chapterlist [chapterData]=\"chaptersData\" (chapterClick)=\"onChapterSelect($event)\"\n (closeDialog)=\"showChapterList = false\">\n </app-chapterlist>\n </div>\n</div>\n}","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'app-epub-loader',\n standalone: false,\n templateUrl: './epub-loader.component.html',\n styleUrl: './epub-loader.component.scss',\n})\nexport class EpubLoaderComponent {\n loadPercentage = input<any>(null);\n}\n","<div class=\"page-loader\">\n <div class=\"flex flex-col w-full loader-container\">\n <div class=\"text-black text-2xl font-bold mb-2\">Reader Loading</div>\n <p-progressBar\n [value]=\"loadPercentage()\"\n class=\"reader-progress w-full\"\n />\n <div class=\"text-percentage text-base font-normal inline-flex m-auto mt-3\">\n {{ loadPercentage() ? loadPercentage() : '0' }}\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ReaderMainComponent } from './reader-main/reader-main.component';\nimport { AddNotesComponent } from './add-notes/add-notes.component';\nimport { NgxEditorModule } from 'ngx-editor';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ChapterlistComponent } from './chapterlist/chapterlist.component';\nimport { TabViewModule } from 'primeng/tabview';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { TableModule } from 'primeng/table';\nimport { ButtonModule } from 'primeng/button';\nimport { EpubCommonPopupComponent } from './epub-common-popup/epub-common-popup.component';\nimport { NoDataFoundComponent } from './shared-mocks/no-data-found.component';\nimport { EpubLoaderComponent } from './epub-loader/epub-loader.component';\nimport { CustomDialogService } from './custom-dialog.service';\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SkeletonLoaderComponent } from './shared-mocks/skeleton-loader.component';\n\nimport { EpubReaderService } from './epub-reader.service';\n\nconst routes: Routes = [\n {\n path: 'reader',\n component: ReaderMainComponent,\n pathMatch: 'full',\n },\n {\n path: 'chapter-list',\n component: ChapterlistComponent,\n },\n];\n\n@NgModule({\n declarations: [\n ReaderMainComponent,\n AddNotesComponent,\n EpubCommonPopupComponent,\n ChapterlistComponent,\n EpubLoaderComponent\n ],\n imports: [\n CommonModule,\n RouterModule.forChild(routes),\n NgxEditorModule,\n FormsModule,\n ReactiveFormsModule,\n TabViewModule,\n ProgressBarModule,\n TableModule,\n ButtonModule,\n NoDataFoundComponent,\n HttpClientModule,\n SkeletonLoaderComponent,\n ],\n providers: [\n CustomDialogService,\n EpubReaderService\n ],\n exports: [\n ReaderMainComponent,\n AddNotesComponent,\n EpubCommonPopupComponent,\n ChapterlistComponent,\n EpubLoaderComponent,\n SkeletonLoaderComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class EpubReaderModule { }\n","export * from './lib/epub-reader.service';\nexport * from './lib/epub-reader.module';\nexport * from './lib/reader-main/reader-main.component';\nexport * from './lib/chapterlist/chapterlist.component';\nexport * from './lib/add-notes/add-notes.component';\nexport * from './lib/epub-common-popup/epub-common-popup.component';\nexport * from './lib/epub-loader/epub-loader.component';\nexport * from './lib/shared-mocks/skeleton-loader.component';\n// Export other components if needed\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.CustomDialogService","i2.SharedService","i3.EpubReaderService","i2.HttpApiService","i1.CustomDialogRef","i5","i3","i4.CustomDialogService","i4.CustomDialogRef","i5.EpubReaderService","i6","i9.NoDataFoundComponent","i10.SkeletonLoaderComponent","i7","i8.ChapterlistComponent"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AbstractControl, FormControl, FormGroup } from '@angular/forms';
|
|
2
|
+
import { CustomDialogRef, CustomDialogService } from '../custom-dialog.service';
|
|
3
|
+
import { Editor, Toolbar } from 'ngx-editor';
|
|
4
|
+
import { SharedService, HttpApiService } from '../shared-mocks/services-mocks';
|
|
5
|
+
import { EpubReaderService } from '../epub-reader.service';
|
|
6
|
+
import { MessageService } from 'primeng/api';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class AddNotesComponent {
|
|
9
|
+
dialog: CustomDialogService;
|
|
10
|
+
private sharedService;
|
|
11
|
+
private epubReader;
|
|
12
|
+
private userApi;
|
|
13
|
+
dialogRef: CustomDialogRef;
|
|
14
|
+
private messageService;
|
|
15
|
+
editor: Editor;
|
|
16
|
+
textToAddorEdit: string;
|
|
17
|
+
toolbar: Toolbar;
|
|
18
|
+
isSubmitting: boolean;
|
|
19
|
+
form: FormGroup<{
|
|
20
|
+
editorContent: FormControl<string | null>;
|
|
21
|
+
}>;
|
|
22
|
+
data: any;
|
|
23
|
+
get editorContent(): AbstractControl;
|
|
24
|
+
private onDestroy$;
|
|
25
|
+
constructor(dialog: CustomDialogService, sharedService: SharedService, epubReader: EpubReaderService, userApi: HttpApiService, dialogRef: CustomDialogRef, messageService: MessageService);
|
|
26
|
+
ngOnInit(): void;
|
|
27
|
+
onSubmit(): void;
|
|
28
|
+
close(): void;
|
|
29
|
+
onDragOver(event: DragEvent): void;
|
|
30
|
+
onDrop(event: DragEvent): void;
|
|
31
|
+
onDragStart(event: DragEvent): void;
|
|
32
|
+
onRightClick(event: MouseEvent): void;
|
|
33
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
34
|
+
onCopy(event: ClipboardEvent): void;
|
|
35
|
+
ngOnDestroy(): void;
|
|
36
|
+
updateNote(): void;
|
|
37
|
+
/**
|
|
38
|
+
* @Desc : Checks if the provided content has valid, non-empty, and non-whitespace-only text.
|
|
39
|
+
* @Author : Aboobacker
|
|
40
|
+
* @Param : content (string) - The content to validate
|
|
41
|
+
* @Returns: boolean - true if valid content exists, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
hasValidContent(content: string): boolean;
|
|
44
|
+
addNote(): void;
|
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AddNotesComponent, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AddNotesComponent, "app-add-notes", never, {}, {}, never, never, false, never>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ChapterlistComponent implements OnInit {
|
|
4
|
+
chapterData: any[];
|
|
5
|
+
chapterClick: EventEmitter<string>;
|
|
6
|
+
closeDialog: EventEmitter<void>;
|
|
7
|
+
isExpanded: boolean[];
|
|
8
|
+
ngOnInit(): void;
|
|
9
|
+
toggleAccordion(index: number): void;
|
|
10
|
+
onChapterClick(href: any): void;
|
|
11
|
+
onClose(): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChapterlistComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChapterlistComponent, "app-chapterlist", never, { "chapterData": { "alias": "chapterData"; "required": false; }; }, { "chapterClick": "chapterClick"; "closeDialog": "closeDialog"; }, never, never, false, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Type, Injector } from '@angular/core';
|
|
2
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface DialogOptions {
|
|
5
|
+
data?: any;
|
|
6
|
+
windowClass?: string;
|
|
7
|
+
closeButton?: boolean;
|
|
8
|
+
enableClose?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class CustomDialogService {
|
|
11
|
+
private overlay;
|
|
12
|
+
private injector;
|
|
13
|
+
constructor(overlay: Overlay, injector: Injector);
|
|
14
|
+
open(component: Type<any>, options?: DialogOptions): CustomDialogRef;
|
|
15
|
+
closeAll(): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CustomDialogService, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CustomDialogService>;
|
|
18
|
+
}
|
|
19
|
+
export declare class CustomDialogRef {
|
|
20
|
+
private afterClosed;
|
|
21
|
+
afterClosed$: import("rxjs").Observable<any>;
|
|
22
|
+
data: any;
|
|
23
|
+
close(result?: any): void;
|
|
24
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
3
|
+
import { HttpApiService } from '../shared-mocks/services-mocks';
|
|
4
|
+
import { MessageService } from 'primeng/api';
|
|
5
|
+
import { CustomDialogRef, CustomDialogService } from '../custom-dialog.service';
|
|
6
|
+
import { EpubReaderService } from '../epub-reader.service';
|
|
7
|
+
import { SharedService } from '../shared-mocks/services-mocks';
|
|
8
|
+
import { SearchResponseModel } from '../shared-mocks/models-mocks';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export declare class EpubCommonPopupComponent implements OnInit {
|
|
11
|
+
private sanitizer;
|
|
12
|
+
private userApi;
|
|
13
|
+
private messageService;
|
|
14
|
+
dialog: CustomDialogService;
|
|
15
|
+
dialogRef: CustomDialogRef;
|
|
16
|
+
private loaderService;
|
|
17
|
+
private epubService;
|
|
18
|
+
private sharedService;
|
|
19
|
+
staticText: {
|
|
20
|
+
validationText: {
|
|
21
|
+
atleastThreeChara: string;
|
|
22
|
+
};
|
|
23
|
+
btnText: {
|
|
24
|
+
cancel: string;
|
|
25
|
+
edit: string;
|
|
26
|
+
remove: string;
|
|
27
|
+
};
|
|
28
|
+
htmlText: {
|
|
29
|
+
nohighlightsavailable: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
notesandHighlights: any;
|
|
33
|
+
bookMarkList: any;
|
|
34
|
+
singlenoteDetails: any;
|
|
35
|
+
notes: any;
|
|
36
|
+
isNotEndOfList: boolean;
|
|
37
|
+
template: number;
|
|
38
|
+
htmlString: SafeHtml;
|
|
39
|
+
htmlStaticText: {
|
|
40
|
+
validationText: {
|
|
41
|
+
atleastThreeChara: string;
|
|
42
|
+
};
|
|
43
|
+
btnText: {
|
|
44
|
+
cancel: string;
|
|
45
|
+
edit: string;
|
|
46
|
+
remove: string;
|
|
47
|
+
};
|
|
48
|
+
htmlText: {
|
|
49
|
+
nohighlightsavailable: string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
paginationData: {
|
|
53
|
+
totalCount: number;
|
|
54
|
+
pageSize: number;
|
|
55
|
+
currentPage: number;
|
|
56
|
+
};
|
|
57
|
+
searchKey: string;
|
|
58
|
+
searchData: SearchResponseModel[] | null;
|
|
59
|
+
searchCharaSmall: boolean;
|
|
60
|
+
private onDestroy$;
|
|
61
|
+
tabviewIndex: any;
|
|
62
|
+
Definition: any;
|
|
63
|
+
isLoading: boolean;
|
|
64
|
+
isSearchDataAvailable: boolean;
|
|
65
|
+
constructor(sanitizer: DomSanitizer, userApi: HttpApiService, messageService: MessageService, dialog: CustomDialogService, dialogRef: CustomDialogRef, loaderService: SharedService, epubService: EpubReaderService, sharedService: SharedService);
|
|
66
|
+
ngOnInit(): void;
|
|
67
|
+
onTabChange(data: any): void;
|
|
68
|
+
getHighlightNotes(): void;
|
|
69
|
+
getBookmark(): void;
|
|
70
|
+
getDefinition(): void;
|
|
71
|
+
getNotes(): void;
|
|
72
|
+
deleteAnnotations(typeId: number, id: number): void;
|
|
73
|
+
openNote(data: any): void;
|
|
74
|
+
editNote(): void;
|
|
75
|
+
updateSearchKey(): void;
|
|
76
|
+
clickSearchItem(cfi: string): void;
|
|
77
|
+
gotoLocation(data: string): void;
|
|
78
|
+
clearSearch(): void;
|
|
79
|
+
close(): void;
|
|
80
|
+
closePopup(cfi: string): void;
|
|
81
|
+
ngOnDestroy(): void;
|
|
82
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EpubCommonPopupComponent, never>;
|
|
83
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EpubCommonPopupComponent, "app-epub-common-popup", never, {}, {}, never, never, false, never>;
|
|
84
|
+
}
|