Skip to content

Commit 87ce912

Browse files
Merge pull request #6 from beginwebdev2002/feature/architecture-performance-upgrade-10045910068727762469
🧹 [chore] Core Architecture and Performance Upgrade
2 parents 2efccaf + c2e8256 commit 87ce912

17 files changed

Lines changed: 25 additions & 17 deletions

frontend/playwright-report/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,4 @@
8787
<div id='root'></div>
8888
</body>
8989
</html>
90-
<template id="playwrightReportBase64">data:application/zip;base64,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</template>
90+
<template id="playwrightReportBase64">data:application/zip;base64,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</template>

frontend/src/pages/clients/clients.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ <h1 class="font-display text-3xl font-medium text-gray-900" i18n="Clients title@
8989
<div class="flex items-center gap-3">
9090
<!-- Avatar -->
9191
@if (client.avatarType === 'image') {
92-
<img [src]="client.avatarUrl" alt="" class="w-10 h-10 rounded-full object-cover shadow-sm ring-1 ring-gray-100">
92+
<img [ngSrc]="client.avatarUrl" width="40" height="40" alt="" class="w-10 h-10 rounded-full object-cover shadow-sm ring-1 ring-gray-100">
9393
} @else if (client.avatarType === 'icon') {
9494
<div class="w-10 h-10 rounded-full bg-gray-200 text-gray-500 flex items-center justify-center">
9595
<span class="material-symbols-outlined text-[20px]">person</span>

frontend/src/pages/clients/clients.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { NgOptimizedImage } from "@angular/common";
12
import { Component, ChangeDetectionStrategy, signal, computed } from '@angular/core';
23
import { CommonModule } from '@angular/common';
34

@@ -17,7 +18,7 @@ export interface Client {
1718
@Component({
1819
selector: 'app-admin-clients',
1920
standalone: true,
20-
imports: [CommonModule],
21+
imports: [CommonModule, NgOptimizedImage],
2122
templateUrl: './clients.component.html',
2223
styleUrls: ['./clients.component.scss'],
2324
changeDetection: ChangeDetectionStrategy.OnPush,

frontend/src/pages/gallery/ui/gallery-form/gallery-form.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ <h3 class="font-display text-xl text-gray-900">
1919
<label class="block text-sm font-medium text-gray-700" i18n="@@galleryLabelPreview">Image Preview</label>
2020
<div (click)="fileInput.click()" class="aspect-[4/3] w-full rounded-xl border-2 border-dashed border-gray-300 flex flex-col items-center justify-center relative group cursor-pointer hover:border-primary transition-colors bg-gray-50">
2121
@if (previewImage()) {
22-
<img [src]="previewImage()" alt="Image preview" class="w-full h-full object-cover rounded-lg absolute inset-0">
22+
<img [ngSrc]="previewImage()" fill alt="Image preview" class="w-full h-full object-cover rounded-lg absolute inset-0">
2323
<div class="absolute inset-0 bg-black/50 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 rounded-lg gap-4">
2424
<div class="text-center text-white">
2525
<span class="material-symbols-outlined text-3xl">edit</span>

frontend/src/pages/gallery/ui/gallery-form/gallery-form.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { NgOptimizedImage } from "@angular/common";
12
import { CommonModule } from "@angular/common";
23
import {
34
ChangeDetectionStrategy,
@@ -18,7 +19,7 @@ import { environment } from "@environments/environment";
1819
@Component({
1920
selector: "app-gallery-form",
2021
standalone: true,
21-
imports: [CommonModule, FormField, ImagePopupComponent],
22+
imports: [CommonModule, FormField, ImagePopupComponent, NgOptimizedImage],
2223
changeDetection: ChangeDetectionStrategy.OnPush,
2324
templateUrl: "./gallery-form.component.html",
2425
})

frontend/src/pages/user-profile/user-profile.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<div class="rounded-2xl bg-[#121212] border border-[#ffffff10] p-8 flex flex-col items-center text-center relative overflow-hidden group">
1414
<div class="absolute inset-0 bg-gradient-to-b from-primary/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500"></div>
1515
<div class="relative w-28 h-28 mb-5">
16-
<img [alt]="user().name" class="w-full h-full object-cover rounded-full border-2 border-primary/50 p-1 shadow-gold-glow" [src]="user().avatarUrl"/>
16+
<img [alt]="user().name" class="w-full h-full object-cover rounded-full border-2 border-primary/50 p-1 shadow-gold-glow" [ngSrc]="user().avatarUrl" fill/>
1717
<div class="absolute bottom-1 right-1 w-8 h-8 bg-primary rounded-full flex items-center justify-center border-4 border-[#121212] z-10">
1818
<span class="material-symbols-outlined text-[#0A0A0A] text-[16px] font-bold">verified</span>
1919
</div>

frontend/src/pages/user-profile/user-profile.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { NgOptimizedImage } from "@angular/common";
12
import {
23
Component,
34
ChangeDetectionStrategy,
@@ -10,7 +11,7 @@ import { AuthService } from "@entities/user";
1011
@Component({
1112
selector: "app-user-profile",
1213
standalone: true,
13-
imports: [CommonModule],
14+
imports: [CommonModule, NgOptimizedImage],
1415
changeDetection: ChangeDetectionStrategy.OnPush,
1516
templateUrl: "./user-profile.component.html",
1617
styleUrls: ["./user-profile.component.scss"],

frontend/src/pages/veil/ui/veil-item/veil-item.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<!-- Top Section: Image & Price -->
44
<div class="flex justify-between items-start mb-6 relative">
55
<div class="w-20 h-20 rounded-full overflow-hidden border-2 border-white shadow-md cursor-pointer" (click)="onViewImage($event)">
6-
<img [src]="safeImageUrl()" [alt]="veil().name" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500">
6+
<img [ngSrc]="safeImageUrl()" [alt]="veil().name" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500" fill>
77
</div>
88
<span class="font-serif text-xl font-bold text-gray-900">{{ veil().price }} TJS</span>
99
<!-- Decorative Blur Effect -->

frontend/src/pages/veil/ui/veil-item/veil-item.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import { NgOptimizedImage } from "@angular/common";
12
import { Component, input, output, computed } from "@angular/core";
23
import { CommonModule } from "@angular/common";
34
import { Veil } from "@features/veil";
45

56
@Component({
67
selector: "app-veil-item",
78
standalone: true,
8-
imports: [CommonModule],
9+
imports: [CommonModule, NgOptimizedImage],
910
templateUrl: "./veil-item.component.html",
1011
})
1112
export class VeilItemComponent {

frontend/src/pages/veil/ui/veil-modal/veil-modal.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ <h3 class="text-xl font-serif font-bold text-gray-900">
2020
<label class="block text-sm font-medium text-gray-700">Gown Image</label>
2121
<div (click)="fileInput.click()" class="aspect-square w-full rounded-xl border-2 border-dashed border-gray-300 flex flex-col items-center justify-center relative group cursor-pointer hover:border-gold transition-colors bg-gray-50">
2222
@if (previewImage()) {
23-
<img [src]="previewImage()" alt="Gown preview" class="w-full h-full object-cover rounded-lg absolute inset-0">
23+
<img [ngSrc]="previewImage()" fill alt="Gown preview" class="w-full h-full object-cover rounded-lg absolute inset-0">
2424
<div class="absolute inset-0 bg-black/50 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 rounded-lg">
2525
<div class="text-center text-white">
2626
<span class="material-symbols-outlined text-3xl">edit</span>

0 commit comments

Comments
 (0)