From 0c26e55c570e023b5e3bc2b3635c829d0f6914db Mon Sep 17 00:00:00 2001 From: Andrii Rodzyk Date: Tue, 24 Mar 2026 11:34:36 +0200 Subject: [PATCH 1/3] fix: ensure manifest-uk.webmanifest is included in asset files --- ngsw-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/ngsw-config.json b/ngsw-config.json index 78e64d2..617ce16 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -11,6 +11,7 @@ "/index.html", "/index.csr.html", "/manifest.webmanifest", + "/manifest-uk.webmanifest", "/*.css", "/*.js" ] From 063524d7c2adb583397787b25f3fdfb677e02e01 Mon Sep 17 00:00:00 2001 From: Andrii Rodzyk Date: Tue, 24 Mar 2026 17:03:05 +0200 Subject: [PATCH 2/3] refactor: update component inputs to use new input() syntax and improve async handling --- .../ui/common-read/common-read.component.html | 13 +++--- .../ui/common-read/common-read.component.ts | 26 +++++------ .../directives/vibrate-haptic.directive.ts | 18 ++++---- .../shared/ui/dialog/dialog.component.html | 6 +-- src/app/shared/ui/dialog/dialog.component.ts | 10 ++--- .../nsfw-warning/nsfw-warning.component.html | 8 ++-- .../ui/nsfw-warning/nsfw-warning.component.ts | 24 +++++------ .../pages-indicator.component.ts | 16 +++---- .../ui/separator/separator.component.ts | 14 +++--- .../text-embracer/text-embracer.component.ts | 20 ++++----- .../view-mode-bar.component.html | 12 +++--- .../view-mode-bar/view-mode-bar.component.ts | 20 ++++----- .../hint-page/hint-page.component.html | 2 +- .../hint-page/hint-page.component.ts | 13 +++--- .../thanks-page/thanks-page.component.html | 4 +- .../thanks-page/thanks-page.component.ts | 14 +++--- .../viewer-footer.component.html | 6 +-- .../viewer-footer/viewer-footer.component.ts | 28 ++++++------ .../shared/ui/viewer/viewer.component.html | 24 +++++------ src/app/shared/ui/viewer/viewer.component.ts | 43 ++++++++++++------- .../warm-control/warm-control.component.html | 2 +- .../ui/warm-control/warm-control.component.ts | 23 +++++----- 22 files changed, 178 insertions(+), 168 deletions(-) diff --git a/src/app/@site-modules/@common-read/ui/common-read/common-read.component.html b/src/app/@site-modules/@common-read/ui/common-read/common-read.component.html index c1a776a..4dcaff7 100644 --- a/src/app/@site-modules/@common-read/ui/common-read/common-read.component.html +++ b/src/app/@site-modules/@common-read/ui/common-read/common-read.component.html @@ -1,7 +1,7 @@ -@if(episode$ | async; as episode){ +@if(episode$() | async; as episode){ -@if (!(loading$ | async)) { -
@@ -10,20 +10,21 @@ } -@if(error$ | async; as error){ +@if(error$() | async; as error){

🀨

{{ error }}

🏠 - +
} -@if(loading$ | async; as loading){ +@if(loading$() | async; as loading){ } @else { diff --git a/src/app/@site-modules/@common-read/ui/common-read/common-read.component.ts b/src/app/@site-modules/@common-read/ui/common-read/common-read.component.ts index ccd0a75..e91602f 100644 --- a/src/app/@site-modules/@common-read/ui/common-read/common-read.component.ts +++ b/src/app/@site-modules/@common-read/ui/common-read/common-read.component.ts @@ -1,27 +1,27 @@ -import { Component, EventEmitter, Input, Output, inject, input } from '@angular/core'; +import { Component, output, inject, input } from '@angular/core'; import { LangService } from '../../../../shared/data-access/lang.service'; import { BehaviorSubject, Observable, of } from 'rxjs'; import { CompositionEpisode } from '../../utils'; -import { Playlist, PlaylistItem, PlaylistService } from '../../../../playlist/data-access/playlist.service'; +import { Playlist, PlaylistItem } from '../../../../playlist/data-access/playlist.service'; @Component({ - selector: 'app-common-read', - templateUrl: './common-read.component.html', - styleUrl: './common-read.component.scss', - standalone: false + selector: 'app-common-read', + templateUrl: './common-read.component.html', + styleUrl: './common-read.component.scss', + standalone: false }) export class CommonReadComponent { public lang: LangService = inject(LangService); - @Input({ required: true }) error$!: BehaviorSubject; - @Input({ required: true }) loading$!: BehaviorSubject; - @Input({ required: true }) episode$!: Observable; + error$ = input.required>(); + loading$ = input.required>(); + episode$ = input.required>(); - @Input() playlist: Playlist = []; - @Input() playlistLink: string = ""; - @Input() currentPlaylistItem: PlaylistItem | undefined; + playlist = input([]); + playlistLink = input(""); + currentPlaylistItem = input(); - @Output() refreshData: EventEmitter = new EventEmitter(); + refreshData = output(); onRefreshData() { this.refreshData.emit(); diff --git a/src/app/shared/directives/vibrate-haptic.directive.ts b/src/app/shared/directives/vibrate-haptic.directive.ts index 57eaf74..bd57ce2 100644 --- a/src/app/shared/directives/vibrate-haptic.directive.ts +++ b/src/app/shared/directives/vibrate-haptic.directive.ts @@ -1,4 +1,4 @@ -import { Directive, HostListener, inject, Input } from '@angular/core'; +import { Directive, HostListener, inject, input } from '@angular/core'; import { VibrationService } from '../data-access/vibration.service'; @Directive({ @@ -8,11 +8,11 @@ import { VibrationService } from '../data-access/vibration.service'; export class VibrateHapticDirective { vibration = inject(VibrationService); - @Input() vibrateHaptic: number | number[] = 10; + vibrateHaptic = input(10); - @Input() vibrateTouch: boolean = false; - @Input() vibrateClick: boolean = true; - @Input() vibrateInput: boolean = false; + vibrateTouch = input(false); + vibrateClick = input(true); + vibrateInput = input(false); constructor() { } @@ -20,28 +20,28 @@ export class VibrateHapticDirective { onPointerDown() { if (!this.vibrateTouch) return; - this.vibration.vibrate(this.vibrateHaptic); + this.vibration.vibrate(this.vibrateHaptic()); } @HostListener('touchstart') onTouchStart() { if (!this.vibrateTouch) return; - this.vibration.vibrate(this.vibrateHaptic); + this.vibration.vibrate(this.vibrateHaptic()); } @HostListener('click') onClick() { if (!this.vibrateClick) return; - this.vibration.vibrate(this.vibrateHaptic); + this.vibration.vibrate(this.vibrateHaptic()); } @HostListener('input') onInput() { if (!this.vibrateInput) return; - this.vibration.vibrate(this.vibrateHaptic); + this.vibration.vibrate(this.vibrateHaptic()); } } diff --git a/src/app/shared/ui/dialog/dialog.component.html b/src/app/shared/ui/dialog/dialog.component.html index e14f85f..4e5f8f0 100644 --- a/src/app/shared/ui/dialog/dialog.component.html +++ b/src/app/shared/ui/dialog/dialog.component.html @@ -3,8 +3,8 @@
-

{{title}}

- @if (closeHeaderButton) { +

{{title()}}

+ @if (closeHeaderButton()) {
diff --git a/src/app/shared/ui/viewer/components/viewer-footer/viewer-footer.component.ts b/src/app/shared/ui/viewer/components/viewer-footer/viewer-footer.component.ts index a1b3058..d2d3512 100644 --- a/src/app/shared/ui/viewer/components/viewer-footer/viewer-footer.component.ts +++ b/src/app/shared/ui/viewer/components/viewer-footer/viewer-footer.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, HostListener, inject, input, InputSignal, output, signal, ViewChild } from '@angular/core'; -import { DomManipulationService, ViewerService } from '../../../../data-access'; +import { BrowserService, DomManipulationService, ViewerService } from '../../../../data-access'; import { LangService } from '../../../../data-access/lang.service'; import { DialogComponent } from '../../../dialog/dialog.component'; import { Playlist, PlaylistItem } from '../../../../../playlist/data-access/playlist.service'; @@ -15,7 +15,7 @@ export class ViewerFooterComponent { viewer: ViewerService = inject(ViewerService) lang: LangService = inject(LangService) domMan = inject(DomManipulationService) - + browser = inject(BrowserService); show = input(false); activeIndexs = input([])