@cineverse/infrastructure-common 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.
@@ -0,0 +1,399 @@
1
+ import { ErrorLink } from '@apollo/client/link/error';
2
+ import * as i0 from '@angular/core';
3
+ import { signal, Injectable, inject, computed, Component, Input, HostListener } from '@angular/core';
4
+ import { ApolloLink, Observable } from '@apollo/client/core';
5
+ import { definePreset } from '@primeuix/themes';
6
+ import Aura from '@primeuix/themes/aura';
7
+ import { finalize } from 'rxjs/operators';
8
+ import { catchError, throwError } from 'rxjs';
9
+ import { NgClass, CommonModule } from '@angular/common';
10
+ import { Router } from '@angular/router';
11
+
12
+ class ToastService {
13
+ _queue = [];
14
+ _toasts = signal([], ...(ngDevMode ? [{ debugName: "_toasts" }] : []));
15
+ toasts$ = this._toasts;
16
+ show(message, type = 'info') {
17
+ const id = Date.now();
18
+ const toast = {
19
+ id,
20
+ message,
21
+ type
22
+ };
23
+ this._queue.push(toast);
24
+ if (this._toasts().length === 0) {
25
+ this.displayNext();
26
+ }
27
+ }
28
+ displayNext() {
29
+ if (this._queue.length === 0)
30
+ return;
31
+ const toast = this._queue.shift();
32
+ this._toasts.set([toast]);
33
+ setTimeout(() => this.remove(toast.id), 3000);
34
+ }
35
+ success(message) {
36
+ this.show(message, 'success');
37
+ }
38
+ error(message) {
39
+ this.show(message, 'error');
40
+ }
41
+ info(message) {
42
+ this.show(message, 'info');
43
+ }
44
+ warning(message) {
45
+ this.show(message, 'warning');
46
+ }
47
+ remove(id) {
48
+ this._toasts.update(list => list.map(t => t.id === id ? { ...t, hiding: true } : t));
49
+ setTimeout(() => {
50
+ this._toasts.set([]);
51
+ this.displayNext();
52
+ }, 300);
53
+ }
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
55
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastService, providedIn: 'root' });
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastService, decorators: [{
58
+ type: Injectable,
59
+ args: [{ providedIn: 'root' }]
60
+ }] });
61
+
62
+ // TODO: fix
63
+ function createErrorLink() {
64
+ const toastService = inject(ToastService);
65
+ return new ErrorLink(({ error }) => {
66
+ if (error.message) {
67
+ toastService.error(error.message);
68
+ console.error('GraphQL Error', error.message, error);
69
+ }
70
+ });
71
+ }
72
+
73
+ class LoadingService {
74
+ _activeRequests = 0;
75
+ isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
76
+ show() {
77
+ this._activeRequests++;
78
+ this.isLoading.set(true);
79
+ }
80
+ hide() {
81
+ if (this._activeRequests <= 1) {
82
+ this.reset();
83
+ }
84
+ this._activeRequests--;
85
+ }
86
+ reset() {
87
+ this._activeRequests = 0;
88
+ this.isLoading.set(false);
89
+ }
90
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
91
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoadingService, providedIn: 'root' });
92
+ }
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoadingService, decorators: [{
94
+ type: Injectable,
95
+ args: [{ providedIn: 'root' }]
96
+ }] });
97
+
98
+ class BlockActionsService {
99
+ _blocked = signal(false, ...(ngDevMode ? [{ debugName: "_blocked" }] : []));
100
+ isBlocked = computed(() => this._blocked(), ...(ngDevMode ? [{ debugName: "isBlocked" }] : []));
101
+ block() {
102
+ this._blocked.set(true);
103
+ }
104
+ unblock() {
105
+ this._blocked.set(false);
106
+ }
107
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BlockActionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
108
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BlockActionsService, providedIn: 'root' });
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BlockActionsService, decorators: [{
111
+ type: Injectable,
112
+ args: [{ providedIn: 'root' }]
113
+ }] });
114
+
115
+ function createLoadingLink() {
116
+ const loadingService = inject(LoadingService);
117
+ const blockActionsService = inject(BlockActionsService);
118
+ return new ApolloLink((operation, forward) => {
119
+ const isQuery = operation.query.definitions.some((def) => def.kind === 'OperationDefinition' && def.operation === 'query');
120
+ if (isQuery)
121
+ loadingService.show();
122
+ else
123
+ blockActionsService.block();
124
+ const finish = () => {
125
+ if (isQuery)
126
+ loadingService.hide();
127
+ else
128
+ blockActionsService.unblock();
129
+ };
130
+ return new Observable(observer => {
131
+ const sub = forward(operation).subscribe({
132
+ next: result => observer.next(result),
133
+ error: error => {
134
+ finish();
135
+ observer.error(error);
136
+ },
137
+ complete: () => {
138
+ finish();
139
+ observer.complete();
140
+ },
141
+ });
142
+ return () => {
143
+ sub.unsubscribe();
144
+ finish();
145
+ };
146
+ });
147
+ });
148
+ }
149
+
150
+ const PrimeNgPreset = definePreset(Aura, {
151
+ semantic: {
152
+ primary: {
153
+ 50: '{slate.100}',
154
+ 100: '{slate.100}',
155
+ 200: '{slate.200}',
156
+ 300: '{slate.300}',
157
+ 400: '{slate.400}',
158
+ 500: '{slate.700}',
159
+ 600: '{slate.900}',
160
+ 700: '{slate.1000}',
161
+ 800: '{slate.800}',
162
+ 900: '{slate.900}',
163
+ 950: '{slate.950}',
164
+ },
165
+ },
166
+ });
167
+
168
+ const loadingInterceptor = (req, next) => {
169
+ const loadingService = inject(LoadingService);
170
+ const blockActionsService = inject(BlockActionsService);
171
+ const isGetRequest = req.method === 'GET';
172
+ if (isGetRequest) {
173
+ loadingService.show();
174
+ }
175
+ else {
176
+ blockActionsService.block();
177
+ }
178
+ return next(req).pipe(finalize(() => {
179
+ if (isGetRequest) {
180
+ loadingService.hide();
181
+ }
182
+ else {
183
+ blockActionsService.unblock();
184
+ }
185
+ }));
186
+ };
187
+
188
+ const errorInterceptor = (req, next) => {
189
+ const toastService = inject(ToastService);
190
+ return next(req).pipe(catchError((error) => {
191
+ let errorMessage = 'An error occurred';
192
+ if (error.error instanceof ErrorEvent) {
193
+ errorMessage = error.error.message;
194
+ }
195
+ else {
196
+ if (error.error?.message) {
197
+ errorMessage = error.error.message;
198
+ }
199
+ else if (error.message) {
200
+ errorMessage = error.message;
201
+ }
202
+ else {
203
+ errorMessage = `Error: ${error.status} - ${error.status}`;
204
+ }
205
+ }
206
+ toastService.error(errorMessage);
207
+ console.error('HTTP Error:', errorMessage, error);
208
+ return throwError(() => error);
209
+ }));
210
+ };
211
+
212
+ class BlockingOverlay {
213
+ service = inject(BlockActionsService);
214
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BlockingOverlay, deps: [], target: i0.ɵɵFactoryTarget.Component });
215
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: BlockingOverlay, isStandalone: true, selector: "cineverse-blocking-overlay", ngImport: i0, template: "<div\n class=\"overlay\"\n [class.hide]=\"!service.isBlocked()\">\n <div class=\"flex flex-col items-center gap-3\">\n <div class=\"h-10 w-10 border-4 border-white/30 border-t-white rounded-full animate-spin\"></div>\n </div>\n</div>\n", styles: [".overlay{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn .2s ease-out forwards}.overlay.hide{animation:fadeOut .2s ease-in forwards;pointer-events:none}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}\n"] });
216
+ }
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BlockingOverlay, decorators: [{
218
+ type: Component,
219
+ args: [{ selector: 'cineverse-blocking-overlay', imports: [], standalone: true, template: "<div\n class=\"overlay\"\n [class.hide]=\"!service.isBlocked()\">\n <div class=\"flex flex-col items-center gap-3\">\n <div class=\"h-10 w-10 border-4 border-white/30 border-t-white rounded-full animate-spin\"></div>\n </div>\n</div>\n", styles: [".overlay{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn .2s ease-out forwards}.overlay.hide{animation:fadeOut .2s ease-in forwards;pointer-events:none}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}\n"] }]
220
+ }] });
221
+
222
+ class LoadingOverlay {
223
+ loadingService = inject(LoadingService);
224
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoadingOverlay, deps: [], target: i0.ɵɵFactoryTarget.Component });
225
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: LoadingOverlay, isStandalone: true, selector: "cineverse-loading-overlay", ngImport: i0, template: "<div class=\"overlay\" [class.hide]=\"!(loadingService.isLoading())\">\n <div class=\"loading-logo\">\n <span class=\"loading-text\">CINEVERSE</span>\n </div>\n</div>\n", styles: [".overlay{position:fixed;inset:0;background:#000;display:flex;align-items:center;justify-content:center;z-index:9999;opacity:1}.overlay.hide{opacity:0;pointer-events:none;transition:opacity .8s ease}.loading-logo{width:270px;height:80px;background-color:#fff;display:flex;align-items:center;justify-content:center}.loading-text{font-family:Segoe UI,sans-serif;font-size:40px;color:#000;font-weight:700;letter-spacing:2px}@media(max-width:768px){.loading-logo{transform:scale(.8)}}\n"] });
226
+ }
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoadingOverlay, decorators: [{
228
+ type: Component,
229
+ args: [{ selector: 'cineverse-loading-overlay', template: "<div class=\"overlay\" [class.hide]=\"!(loadingService.isLoading())\">\n <div class=\"loading-logo\">\n <span class=\"loading-text\">CINEVERSE</span>\n </div>\n</div>\n", styles: [".overlay{position:fixed;inset:0;background:#000;display:flex;align-items:center;justify-content:center;z-index:9999;opacity:1}.overlay.hide{opacity:0;pointer-events:none;transition:opacity .8s ease}.loading-logo{width:270px;height:80px;background-color:#fff;display:flex;align-items:center;justify-content:center}.loading-text{font-family:Segoe UI,sans-serif;font-size:40px;color:#000;font-weight:700;letter-spacing:2px}@media(max-width:768px){.loading-logo{transform:scale(.8)}}\n"] }]
230
+ }] });
231
+
232
+ class ToastItem {
233
+ toast;
234
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
235
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ToastItem, isStandalone: true, selector: "cineverse-toast", inputs: { toast: "toast" }, ngImport: i0, template: "<div class=\"toast\" [ngClass]=\"[toast.type, toast.hiding ? 'hide' : '']\">\n <div class=\"toast-icon\" style=\"margin-right: 8px; display: inline-flex; align-items: center;\">\n @switch (toast.type) {\n @case ('error') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#E53935\"/>\n <path d=\"M14 14L34 34M34 14L14 34\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('info') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#1E88E5\"/>\n <circle cx=\"24\" cy=\"14\" r=\"3\" fill=\"white\"/>\n <rect x=\"21\" y=\"20\" width=\"6\" height=\"16\" rx=\"2\" fill=\"white\"/>\n </svg>\n }\n @case ('success') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#43A047\"/>\n <path d=\"M14 24L20 30L34 16\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n }\n @case ('warning') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#FB8C00\"/>\n <path d=\"M24 12V28\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\"/>\n <circle cx=\"24\" cy=\"35\" r=\"2.5\" fill=\"white\"/>\n </svg>\n }\n }\n </div>\n\n <span>{{ toast.message }}</span>\n</div>\n", styles: [".toast{background-color:#fbffff;color:#262626;padding:12px;border-radius:10px;box-shadow:0 2px 6px #00000026;display:flex;align-items:center;font-size:14px;font-weight:400;animation:fadeIn .3s ease;z-index:9999;margin-bottom:8px}.toast.hide{animation:fadeOut .2s ease forwards}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-10px)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
236
+ }
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastItem, decorators: [{
238
+ type: Component,
239
+ args: [{ selector: 'cineverse-toast', imports: [
240
+ NgClass
241
+ ], template: "<div class=\"toast\" [ngClass]=\"[toast.type, toast.hiding ? 'hide' : '']\">\n <div class=\"toast-icon\" style=\"margin-right: 8px; display: inline-flex; align-items: center;\">\n @switch (toast.type) {\n @case ('error') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#E53935\"/>\n <path d=\"M14 14L34 34M34 14L14 34\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('info') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#1E88E5\"/>\n <circle cx=\"24\" cy=\"14\" r=\"3\" fill=\"white\"/>\n <rect x=\"21\" y=\"20\" width=\"6\" height=\"16\" rx=\"2\" fill=\"white\"/>\n </svg>\n }\n @case ('success') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#43A047\"/>\n <path d=\"M14 24L20 30L34 16\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n }\n @case ('warning') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#FB8C00\"/>\n <path d=\"M24 12V28\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\"/>\n <circle cx=\"24\" cy=\"35\" r=\"2.5\" fill=\"white\"/>\n </svg>\n }\n }\n </div>\n\n <span>{{ toast.message }}</span>\n</div>\n", styles: [".toast{background-color:#fbffff;color:#262626;padding:12px;border-radius:10px;box-shadow:0 2px 6px #00000026;display:flex;align-items:center;font-size:14px;font-weight:400;animation:fadeIn .3s ease;z-index:9999;margin-bottom:8px}.toast.hide{animation:fadeOut .2s ease forwards}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-10px)}}\n"] }]
242
+ }], propDecorators: { toast: [{
243
+ type: Input
244
+ }] } });
245
+
246
+ class ToastContainer {
247
+ toastService = inject(ToastService);
248
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
249
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ToastContainer, isStandalone: true, selector: "cineverse-toast-container", ngImport: i0, template: "<div class=\"toast-container\">\n @for (toast of toastService.toasts$(); track toast.id) {\n <cineverse-toast [toast]=\"toast\"></cineverse-toast>\n }\n</div>\n", styles: [".toast-container{position:fixed;left:50%;top:25px;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;z-index:9999}@media(max-width:768px){.toast-container{width:80%}}\n"], dependencies: [{ kind: "component", type: ToastItem, selector: "cineverse-toast", inputs: ["toast"] }, { kind: "ngmodule", type: CommonModule }] });
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ToastContainer, decorators: [{
252
+ type: Component,
253
+ args: [{ selector: 'cineverse-toast-container', imports: [
254
+ ToastItem,
255
+ CommonModule
256
+ ], standalone: true, template: "<div class=\"toast-container\">\n @for (toast of toastService.toasts$(); track toast.id) {\n <cineverse-toast [toast]=\"toast\"></cineverse-toast>\n }\n</div>\n", styles: [".toast-container{position:fixed;left:50%;top:25px;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;z-index:9999}@media(max-width:768px){.toast-container{width:80%}}\n"] }]
257
+ }] });
258
+
259
+ const identityBasePath = '/identity';
260
+ function isOnIdentityService() {
261
+ return window.location.pathname.startsWith(identityBasePath);
262
+ }
263
+ function isIdentityRoute(path) {
264
+ return path.startsWith(identityBasePath);
265
+ }
266
+ function needsFullPageReload(targetPath) {
267
+ const currentIsIdentity = isOnIdentityService();
268
+ const targetIsIdentity = isIdentityRoute(targetPath);
269
+ return currentIsIdentity !== targetIsIdentity;
270
+ }
271
+
272
+ class RouterHelper {
273
+ router = inject(Router);
274
+ navigate(path, extras) {
275
+ if (needsFullPageReload(path)) {
276
+ window.location.href = this.buildUrlWithParams(path, extras?.queryParams);
277
+ }
278
+ else {
279
+ this.router.navigate([path], extras).then();
280
+ }
281
+ }
282
+ navigateToIdentity(path, extras) {
283
+ window.location.href = this.buildUrlWithParams(`/${identityBasePath}${path}`, extras?.queryParams);
284
+ }
285
+ navigateToCineverse(path, extras) {
286
+ if (needsFullPageReload(path)) {
287
+ window.location.href = this.buildUrlWithParams(path, extras?.queryParams);
288
+ }
289
+ else {
290
+ this.router.navigate([path], extras).then();
291
+ }
292
+ }
293
+ buildUrlWithParams(path, queryParams) {
294
+ if (!queryParams || Object.keys(queryParams).length === 0) {
295
+ return path;
296
+ }
297
+ const params = new URLSearchParams();
298
+ Object.entries(queryParams).forEach(([key, value]) => {
299
+ if (value != null) {
300
+ params.append(key, String(value));
301
+ }
302
+ });
303
+ const queryString = params.toString();
304
+ return queryString ? `${path}?${queryString}` : path;
305
+ }
306
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RouterHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
307
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RouterHelper, providedIn: 'root' });
308
+ }
309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RouterHelper, decorators: [{
310
+ type: Injectable,
311
+ args: [{ providedIn: 'root' }]
312
+ }] });
313
+
314
+ class Header {
315
+ routerHelper = inject(RouterHelper);
316
+ isMenuOpen = false;
317
+ toggleMenu(event) {
318
+ event.stopPropagation();
319
+ this.isMenuOpen = !this.isMenuOpen;
320
+ }
321
+ closeMenu() {
322
+ this.isMenuOpen = false;
323
+ }
324
+ onClick(event) {
325
+ if (!event.target.closest('.menu') &&
326
+ !event.target.closest('.menu-icon')) {
327
+ this.isMenuOpen = false;
328
+ }
329
+ }
330
+ navigate(path) {
331
+ this.routerHelper.navigate(path);
332
+ this.closeMenu();
333
+ }
334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Header, deps: [], target: i0.ɵɵFactoryTarget.Component });
335
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: Header, isStandalone: true, selector: "cineverse-header", host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"wrapper\">\n <header>\n <nav>\n <div class=\"logo-wrapper\">\n <a (click)=\"navigate('/')\" class=\"logo\">\n CINEVERSE\n </a>\n </div>\n <div class=\"menu-icon\" (click)=\"toggleMenu($event)\">\n <i class=\"pi pi-bars fa-2x\"></i>\n </div>\n <ul [class.showing]=\"isMenuOpen\">\n <li><a (click)=\"navigate('/')\">Home</a></li>\n <li><a (click)=\"navigate('/movies')\">Movies</a></li>\n <li><a (click)=\"navigate('/contact')\">Contact</a></li>\n <li><a (click)=\"navigate('/about')\">About</a></li>\n <li><a (click)=\"navigate('/identity/profile')\">Profile</a></li>\n </ul>\n </nav>\n </header>\n</div>\n", styles: ["html,body{margin:0;padding:0;width:100%}header{width:100%}.logo{background:#000;line-height:60px;float:left;margin:16px 46px;color:var(--cv-light);font-weight:700;font-size:20px;letter-spacing:2px;font-family:Segoe UI,sans-serif;z-index:11;cursor:pointer}nav{position:fixed;width:100%;line-height:60px;z-index:9;background:var(--cv-primary-dark)}nav ul{line-height:60px;list-style:none;background:#0000;overflow:hidden;color:var(--cv-light);text-align:right;margin:0;padding:0 40px 0 0;transition:background .5s}nav ul li{display:inline-block;padding:16px 40px}nav ul li a{text-decoration:none;color:var(--cv-light);font-size:16px;cursor:pointer}.menu-icon{line-height:60px;width:100%;background:var(--cv-primary-dark);text-align:right;box-sizing:border-box;padding:15px 24px;cursor:pointer;color:var(--cv-light);display:none;z-index:10}i{font-size:1.5rem}@media(max-width:768px){nav ul{max-height:0;width:100%;position:absolute;top:60px;left:0;right:0;padding-right:0;transform:scaleY(0);transform-origin:top;transition:transform .2s ease-in-out;background:var(--cv-primary-dark);overflow:hidden}nav ul.showing{max-height:500px;padding:0;transform:scaleY(1)}nav ul li{display:block;width:100%;padding:15px 0;text-align:center;margin:0}.menu-icon{display:block;top:0;right:0}.logo{margin-left:20px}.logo-wrapper{width:100%;height:100%;background-color:#000}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
336
+ }
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Header, decorators: [{
338
+ type: Component,
339
+ args: [{ selector: 'cineverse-header', standalone: true, imports: [CommonModule], template: "<div class=\"wrapper\">\n <header>\n <nav>\n <div class=\"logo-wrapper\">\n <a (click)=\"navigate('/')\" class=\"logo\">\n CINEVERSE\n </a>\n </div>\n <div class=\"menu-icon\" (click)=\"toggleMenu($event)\">\n <i class=\"pi pi-bars fa-2x\"></i>\n </div>\n <ul [class.showing]=\"isMenuOpen\">\n <li><a (click)=\"navigate('/')\">Home</a></li>\n <li><a (click)=\"navigate('/movies')\">Movies</a></li>\n <li><a (click)=\"navigate('/contact')\">Contact</a></li>\n <li><a (click)=\"navigate('/about')\">About</a></li>\n <li><a (click)=\"navigate('/identity/profile')\">Profile</a></li>\n </ul>\n </nav>\n </header>\n</div>\n", styles: ["html,body{margin:0;padding:0;width:100%}header{width:100%}.logo{background:#000;line-height:60px;float:left;margin:16px 46px;color:var(--cv-light);font-weight:700;font-size:20px;letter-spacing:2px;font-family:Segoe UI,sans-serif;z-index:11;cursor:pointer}nav{position:fixed;width:100%;line-height:60px;z-index:9;background:var(--cv-primary-dark)}nav ul{line-height:60px;list-style:none;background:#0000;overflow:hidden;color:var(--cv-light);text-align:right;margin:0;padding:0 40px 0 0;transition:background .5s}nav ul li{display:inline-block;padding:16px 40px}nav ul li a{text-decoration:none;color:var(--cv-light);font-size:16px;cursor:pointer}.menu-icon{line-height:60px;width:100%;background:var(--cv-primary-dark);text-align:right;box-sizing:border-box;padding:15px 24px;cursor:pointer;color:var(--cv-light);display:none;z-index:10}i{font-size:1.5rem}@media(max-width:768px){nav ul{max-height:0;width:100%;position:absolute;top:60px;left:0;right:0;padding-right:0;transform:scaleY(0);transform-origin:top;transition:transform .2s ease-in-out;background:var(--cv-primary-dark);overflow:hidden}nav ul.showing{max-height:500px;padding:0;transform:scaleY(1)}nav ul li{display:block;width:100%;padding:15px 0;text-align:center;margin:0}.menu-icon{display:block;top:0;right:0}.logo{margin-left:20px}.logo-wrapper{width:100%;height:100%;background-color:#000}}\n"] }]
340
+ }], propDecorators: { onClick: [{
341
+ type: HostListener,
342
+ args: ['document:click', ['$event']]
343
+ }] } });
344
+
345
+ class Footer {
346
+ routerHelper = inject(RouterHelper);
347
+ navigate(path) {
348
+ this.routerHelper.navigate(path);
349
+ }
350
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Footer, deps: [], target: i0.ɵɵFactoryTarget.Component });
351
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: Footer, isStandalone: true, selector: "cineverse-footer", ngImport: i0, template: "<footer class=\"site-footer\">\n <div class=\"container\">\n <div class=\"footer-content\">\n\n <div class=\"footer-column\">\n <h3 class=\"footer-title\">Quick Links</h3>\n <ul class=\"footer-links\">\n <li><a (click)=\"navigate('/')\"><i class=\"pi pi-chevron-right\"></i> Home</a></li>\n <li><a (click)=\"navigate('/movies')\"><i class=\"pi pi-chevron-right\"></i> Movies</a></li>\n <li><a (click)=\"navigate('/contact')\"><i class=\"pi pi-chevron-right\"></i> Contact Us</a></li>\n <li><a (click)=\"navigate('/about')\"><i class=\"pi pi-chevron-right\"></i> About</a></li>\n <li><a (click)=\"navigate('/profile')\"><i class=\"pi pi-chevron-right\"></i> Profile</a></li>\n </ul>\n </div>\n\n <div id=\"contact-us\" class=\"footer-column\">\n <h3 class=\"footer-title\">Contact Us</h3>\n <ul class=\"footer-contacts\">\n <li><i class=\"pi pi-map-marker\"></i> Chisinau str. Vasile Alecsandri 32</li>\n <li><i class=\"pi pi-phone\"></i> +373 69-077-251</li>\n <li><i class=\"pi pi-envelope\"></i> info&#64;cineverse.com</li>\n <li><i class=\"pi pi-clock\"></i> Mon-Mon: 9AM - 10PM</li>\n </ul>\n </div>\n\n <div class=\"footer-column\">\n <h3 class=\"footer-title\">Stay Connected</h3>\n <p class=\"footer-text\">Subscribe to our newsletter for the latest updates</p>\n <form class=\"newsletter-form\">\n <input type=\"email\" placeholder=\"Your Email\" required>\n <button type=\"submit\"><i class=\"pi pi-bell\"></i></button>\n </form>\n <div class=\"social-links\">\n <a href=\"https://www.instagram.com/darkf_nn?igsh=MXBwNGplYm85aHcxeA==\"><i class=\"pi pi-instagram\"></i></a>\n <a href=\"https://www.linkedin.com/in/vlad-timbal-511769296/\"><i class=\"pi pi-linkedin\"></i></a>\n <a href=\"https://github.com/DARK6870\"><i class=\"pi pi-github\"></i></a>\n </div>\n </div>\n </div>\n\n <div class=\"footer-bottom\">\n <p>&copy; 2025 Cineverse. All Rights Reserved.</p>\n <div class=\"legal-links\">\n <a href=\"#\">Privacy Policy</a>\n <a href=\"#\">Terms of Service</a>\n <a href=\"#\">Cookies</a>\n </div>\n </div>\n </div>\n</footer>\n", styles: [".site-footer{background-color:var(--cv-primary-dark);color:var(--cv-light);padding:60px 0 20px}.container{max-width:1200px;margin:0 auto;padding:0 20px}.footer-content{display:flex;flex-wrap:wrap;justify-content:space-between;gap:40px;margin-bottom:40px}.footer-column{flex:1;min-width:250px}.footer-column ul{padding-left:0;margin-left:0;list-style:none}.footer-title{color:var(--cv-accent);font-size:1.4rem;margin-bottom:25px;position:relative;padding-bottom:10px}.footer-title:after{content:\"\";position:absolute;left:0;bottom:0;width:50px;height:2px;background:var(--cv-light)}.footer-links li,.footer-contacts li{margin-bottom:12px;list-style:none}.footer-links a,.footer-contacts li{color:var(--cv-gray);text-decoration:none;transition:all .3s ease;display:flex;align-items:center;gap:10px}.footer-links a:hover{color:var(--cv-accent);padding-left:5px}.footer-contacts i{width:20px;text-align:center;color:var(--cv-gray)}.footer-text{margin-bottom:20px;line-height:1.6;color:var(--cv-gray)}.newsletter-form{display:flex;margin-bottom:25px}.newsletter-form input{flex:1;padding:12px;border:none;border-radius:4px 0 0 4px;font-size:14px}.newsletter-form button{background:var(--cv-accent);color:var(--cv-light);border:none;padding:0 15px;border-radius:0 4px 4px 0;cursor:pointer;transition:background .3s}.social-links{display:flex;gap:15px}.social-links a{display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:#ffffff1a;border-radius:50%;color:var(--cv-light);transition:all .3s ease}.social-links a:hover{background:var(--cv-accent);transform:translateY(-3px)}.footer-bottom{border-top:1px solid rgba(255,255,255,.1);padding-top:20px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;color:var(--cv-gray);font-size:14px}.legal-links{display:flex;gap:20px}.legal-links a{color:var(--cv-gray);text-decoration:none;transition:color .3s}a{cursor:pointer}@media(max-width:768px){.footer-content{flex-direction:column;gap:30px}.footer-bottom{flex-direction:column;text-align:center;gap:15px}}\n"] });
352
+ }
353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Footer, decorators: [{
354
+ type: Component,
355
+ args: [{ selector: 'cineverse-footer', imports: [], template: "<footer class=\"site-footer\">\n <div class=\"container\">\n <div class=\"footer-content\">\n\n <div class=\"footer-column\">\n <h3 class=\"footer-title\">Quick Links</h3>\n <ul class=\"footer-links\">\n <li><a (click)=\"navigate('/')\"><i class=\"pi pi-chevron-right\"></i> Home</a></li>\n <li><a (click)=\"navigate('/movies')\"><i class=\"pi pi-chevron-right\"></i> Movies</a></li>\n <li><a (click)=\"navigate('/contact')\"><i class=\"pi pi-chevron-right\"></i> Contact Us</a></li>\n <li><a (click)=\"navigate('/about')\"><i class=\"pi pi-chevron-right\"></i> About</a></li>\n <li><a (click)=\"navigate('/profile')\"><i class=\"pi pi-chevron-right\"></i> Profile</a></li>\n </ul>\n </div>\n\n <div id=\"contact-us\" class=\"footer-column\">\n <h3 class=\"footer-title\">Contact Us</h3>\n <ul class=\"footer-contacts\">\n <li><i class=\"pi pi-map-marker\"></i> Chisinau str. Vasile Alecsandri 32</li>\n <li><i class=\"pi pi-phone\"></i> +373 69-077-251</li>\n <li><i class=\"pi pi-envelope\"></i> info&#64;cineverse.com</li>\n <li><i class=\"pi pi-clock\"></i> Mon-Mon: 9AM - 10PM</li>\n </ul>\n </div>\n\n <div class=\"footer-column\">\n <h3 class=\"footer-title\">Stay Connected</h3>\n <p class=\"footer-text\">Subscribe to our newsletter for the latest updates</p>\n <form class=\"newsletter-form\">\n <input type=\"email\" placeholder=\"Your Email\" required>\n <button type=\"submit\"><i class=\"pi pi-bell\"></i></button>\n </form>\n <div class=\"social-links\">\n <a href=\"https://www.instagram.com/darkf_nn?igsh=MXBwNGplYm85aHcxeA==\"><i class=\"pi pi-instagram\"></i></a>\n <a href=\"https://www.linkedin.com/in/vlad-timbal-511769296/\"><i class=\"pi pi-linkedin\"></i></a>\n <a href=\"https://github.com/DARK6870\"><i class=\"pi pi-github\"></i></a>\n </div>\n </div>\n </div>\n\n <div class=\"footer-bottom\">\n <p>&copy; 2025 Cineverse. All Rights Reserved.</p>\n <div class=\"legal-links\">\n <a href=\"#\">Privacy Policy</a>\n <a href=\"#\">Terms of Service</a>\n <a href=\"#\">Cookies</a>\n </div>\n </div>\n </div>\n</footer>\n", styles: [".site-footer{background-color:var(--cv-primary-dark);color:var(--cv-light);padding:60px 0 20px}.container{max-width:1200px;margin:0 auto;padding:0 20px}.footer-content{display:flex;flex-wrap:wrap;justify-content:space-between;gap:40px;margin-bottom:40px}.footer-column{flex:1;min-width:250px}.footer-column ul{padding-left:0;margin-left:0;list-style:none}.footer-title{color:var(--cv-accent);font-size:1.4rem;margin-bottom:25px;position:relative;padding-bottom:10px}.footer-title:after{content:\"\";position:absolute;left:0;bottom:0;width:50px;height:2px;background:var(--cv-light)}.footer-links li,.footer-contacts li{margin-bottom:12px;list-style:none}.footer-links a,.footer-contacts li{color:var(--cv-gray);text-decoration:none;transition:all .3s ease;display:flex;align-items:center;gap:10px}.footer-links a:hover{color:var(--cv-accent);padding-left:5px}.footer-contacts i{width:20px;text-align:center;color:var(--cv-gray)}.footer-text{margin-bottom:20px;line-height:1.6;color:var(--cv-gray)}.newsletter-form{display:flex;margin-bottom:25px}.newsletter-form input{flex:1;padding:12px;border:none;border-radius:4px 0 0 4px;font-size:14px}.newsletter-form button{background:var(--cv-accent);color:var(--cv-light);border:none;padding:0 15px;border-radius:0 4px 4px 0;cursor:pointer;transition:background .3s}.social-links{display:flex;gap:15px}.social-links a{display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:#ffffff1a;border-radius:50%;color:var(--cv-light);transition:all .3s ease}.social-links a:hover{background:var(--cv-accent);transform:translateY(-3px)}.footer-bottom{border-top:1px solid rgba(255,255,255,.1);padding-top:20px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;color:var(--cv-gray);font-size:14px}.legal-links{display:flex;gap:20px}.legal-links a{color:var(--cv-gray);text-decoration:none;transition:color .3s}a{cursor:pointer}@media(max-width:768px){.footer-content{flex-direction:column;gap:30px}.footer-bottom{flex-direction:column;text-align:center;gap:15px}}\n"] }]
356
+ }] });
357
+
358
+ function formatDate(stringDate) {
359
+ if (!stringDate)
360
+ return '';
361
+ const date = new Date(stringDate);
362
+ return date.toLocaleDateString('en-US', {
363
+ day: 'numeric',
364
+ month: 'long',
365
+ });
366
+ }
367
+
368
+ function getValidationError(control) {
369
+ if (!control || !control.errors)
370
+ return null;
371
+ if (!(control.touched || control.dirty))
372
+ return null;
373
+ const errorMessages = {
374
+ required: () => `This field is required`,
375
+ email: () => `Please enter a valid email`,
376
+ minlength: (err) => `Minimum length is ${err.requiredLength} characters`,
377
+ maxlength: (err) => `Maximum length is ${err.requiredLength} characters`,
378
+ pattern: () => `Invalid format`,
379
+ passwordMismatch: () => `Passwords do not match`
380
+ };
381
+ for (const errorName in control.errors) {
382
+ if (errorMessages[errorName]) {
383
+ return errorMessages[errorName](control.errors[errorName]);
384
+ }
385
+ }
386
+ return null;
387
+ }
388
+
389
+ /*
390
+ * Public API Surface of infrastructure-common
391
+ */
392
+ // integrations
393
+
394
+ /**
395
+ * Generated bundle index. Do not edit.
396
+ */
397
+
398
+ export { BlockActionsService, BlockingOverlay, Footer, Header, LoadingOverlay, LoadingService, PrimeNgPreset, RouterHelper, ToastContainer, ToastItem, ToastService, createErrorLink, createLoadingLink, errorInterceptor, formatDate, getValidationError, identityBasePath, isIdentityRoute, isOnIdentityService, loadingInterceptor, needsFullPageReload };
399
+ //# sourceMappingURL=cineverse-infrastructure-common.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cineverse-infrastructure-common.mjs","sources":["../../../projects/infrastructure-common/src/lib/feedback/toast/services/toast.service.ts","../../../projects/infrastructure-common/src/lib/integrations/apollo/links/error.link.ts","../../../projects/infrastructure-common/src/lib/feedback/loading/services/loading.service.ts","../../../projects/infrastructure-common/src/lib/feedback/blocking/services/block-actions.service.ts","../../../projects/infrastructure-common/src/lib/integrations/apollo/links/loading.link.ts","../../../projects/infrastructure-common/src/lib/integrations/primeNG/PrimeNgPreset.ts","../../../projects/infrastructure-common/src/lib/integrations/http/interceptors/loading.interceptor.ts","../../../projects/infrastructure-common/src/lib/integrations/http/interceptors/error.interceptor.ts","../../../projects/infrastructure-common/src/lib/feedback/blocking/components/blocking-overlay/blocking-overlay.ts","../../../projects/infrastructure-common/src/lib/feedback/blocking/components/blocking-overlay/blocking-overlay.html","../../../projects/infrastructure-common/src/lib/feedback/loading/components/loading-overlay/loading-overlay.ts","../../../projects/infrastructure-common/src/lib/feedback/loading/components/loading-overlay/loading-overlay.html","../../../projects/infrastructure-common/src/lib/feedback/toast/components/toast-item/toast-item.ts","../../../projects/infrastructure-common/src/lib/feedback/toast/components/toast-item/toast-item.html","../../../projects/infrastructure-common/src/lib/feedback/toast/components/toast-container/toast-container.ts","../../../projects/infrastructure-common/src/lib/feedback/toast/components/toast-container/toast-container.html","../../../projects/infrastructure-common/src/lib/shared/utils/router.utils.ts","../../../projects/infrastructure-common/src/lib/shared/helpers/router.helper.ts","../../../projects/infrastructure-common/src/lib/layout/header/header.ts","../../../projects/infrastructure-common/src/lib/layout/header/header.html","../../../projects/infrastructure-common/src/lib/layout/footer/footer.ts","../../../projects/infrastructure-common/src/lib/layout/footer/footer.html","../../../projects/infrastructure-common/src/lib/shared/utils/date.utils.ts","../../../projects/infrastructure-common/src/lib/shared/helpers/validation.helper.ts","../../../projects/infrastructure-common/src/public-api.ts","../../../projects/infrastructure-common/src/cineverse-infrastructure-common.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { Toast, ToastType } from '../models/toast.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private _queue : Toast[] = [];\n private _toasts = signal<Toast[]>([]);\n public toasts$ = this._toasts;\n\n private show(message: string, type: ToastType = 'info'){\n const id = Date.now();\n const toast: Toast = {\n id,\n message,\n type\n };\n\n this._queue.push(toast);\n if (this._toasts().length === 0) {\n this.displayNext();\n }\n }\n\n private displayNext() {\n if (this._queue.length === 0) return;\n\n const toast = this._queue.shift()!;\n this._toasts.set([toast]);\n\n setTimeout(() => this.remove(toast.id), 3000);\n }\n\n success(message: string) {\n this.show(message, 'success');\n }\n\n error(message: string) {\n this.show(message, 'error');\n }\n\n info(message: string) {\n this.show(message, 'info');\n }\n\n warning(message: string) {\n this.show(message, 'warning');\n }\n\n remove(id: number) {\n this._toasts.update(list =>\n list.map(t => t.id === id ? { ...t, hiding: true } : t)\n );\n\n setTimeout(() => {\n this._toasts.set([]);\n this.displayNext();\n }, 300);\n }\n}\n","import { ErrorLink } from '@apollo/client/link/error';\nimport { inject } from '@angular/core';\nimport { ToastService } from '../../../feedback/toast/services/toast.service';\n\n// TODO: fix\nexport function createErrorLink() {\n const toastService = inject(ToastService);\n\n return new ErrorLink(({ error }) => {\n if (error.message) {\n toastService.error(error.message);\n console.error('GraphQL Error', error.message, error);\n }\n });\n}\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LoadingService {\n private _activeRequests = 0;\n readonly isLoading = signal(false);\n\n public show(): void {\n this._activeRequests++;\n this.isLoading.set(true);\n }\n\n public hide(): void {\n if (this._activeRequests <= 1) {\n this.reset();\n }\n\n this._activeRequests--;\n }\n\n public reset(){\n this._activeRequests = 0;\n this.isLoading.set(false);\n }\n}\n","import { computed, Injectable, signal } from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class BlockActionsService{\n private _blocked = signal(false);\n\n readonly isBlocked = computed(() => this._blocked());\n\n public block(): void {\n this._blocked.set(true);\n }\n\n public unblock(): void {\n this._blocked.set(false);\n }\n}\n","import { ApolloLink, Observable } from '@apollo/client/core';\nimport { inject } from '@angular/core';\nimport { LoadingService } from '../../../feedback/loading/services/loading.service';\nimport { BlockActionsService } from '../../../feedback/blocking/services/block-actions.service';\n\nexport function createLoadingLink(): ApolloLink {\n const loadingService = inject(LoadingService);\n const blockActionsService = inject(BlockActionsService);\n\n return new ApolloLink((operation, forward) => {\n const isQuery = operation.query.definitions.some(\n (def: any) =>\n def.kind === 'OperationDefinition' && def.operation === 'query'\n );\n\n if (isQuery) loadingService.show();\n else blockActionsService.block();\n\n const finish = () => {\n if (isQuery) loadingService.hide();\n else blockActionsService.unblock();\n };\n\n return new Observable(observer => {\n const sub = forward(operation).subscribe({\n next: result => observer.next(result),\n error: error => {\n finish();\n observer.error(error);\n },\n complete: () => {\n finish();\n observer.complete();\n },\n });\n\n return () => {\n sub.unsubscribe();\n finish();\n };\n });\n });\n}\n","import { definePreset } from '@primeuix/themes';\nimport Aura from '@primeuix/themes/aura';\n\nexport const PrimeNgPreset = definePreset(Aura, {\n semantic: {\n primary: {\n 50: '{slate.100}',\n 100: '{slate.100}',\n 200: '{slate.200}',\n 300: '{slate.300}',\n 400: '{slate.400}',\n 500: '{slate.700}',\n 600: '{slate.900}',\n 700: '{slate.1000}',\n 800: '{slate.800}',\n 900: '{slate.900}',\n 950: '{slate.950}',\n },\n },\n});\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { LoadingService } from '../../../feedback/loading/services/loading.service';\nimport { BlockActionsService } from '../../../feedback/blocking/services/block-actions.service';\n\nexport const loadingInterceptor: HttpInterceptorFn = (req, next) => {\n const loadingService = inject(LoadingService);\n const blockActionsService = inject(BlockActionsService);\n\n const isGetRequest = req.method === 'GET';\n\n if (isGetRequest) {\n loadingService.show();\n } else {\n blockActionsService.block();\n }\n\n return next(req).pipe(\n finalize(() => {\n if (isGetRequest) {\n loadingService.hide();\n } else {\n blockActionsService.unblock();\n }\n })\n );\n};\n","import { HttpInterceptorFn, HttpErrorResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, throwError } from 'rxjs';\nimport { ToastService } from '../../../feedback/toast/services/toast.service';\n\nexport const errorInterceptor: HttpInterceptorFn = (req, next) => {\n const toastService = inject(ToastService);\n\n return next(req).pipe(\n catchError((error: HttpErrorResponse) => {\n let errorMessage = 'An error occurred';\n\n if (error.error instanceof ErrorEvent) {\n errorMessage = error.error.message;\n } else {\n if (error.error?.message) {\n errorMessage = error.error.message;\n } else if (error.message) {\n errorMessage = error.message;\n } else {\n errorMessage = `Error: ${error.status} - ${error.status}`;\n }\n }\n\n toastService.error(errorMessage);\n console.error('HTTP Error:', errorMessage, error);\n\n return throwError(() => error);\n })\n );\n};\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { BlockActionsService } from '../../services/block-actions.service';\n\n@Component({\n selector: 'cineverse-blocking-overlay',\n imports: [],\n templateUrl: 'blocking-overlay.html',\n styleUrl: 'blocking-overlay.css',\n standalone: true\n})\nexport class BlockingOverlay {\n protected service = inject(BlockActionsService);\n}\n","<div\n class=\"overlay\"\n [class.hide]=\"!service.isBlocked()\">\n <div class=\"flex flex-col items-center gap-3\">\n <div class=\"h-10 w-10 border-4 border-white/30 border-t-white rounded-full animate-spin\"></div>\n </div>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { LoadingService } from '../../services/loading.service';\n\n@Component({\n selector: 'cineverse-loading-overlay',\n templateUrl: 'loading-overlay.html',\n styleUrl: 'loading-overlay.css'\n})\nexport class LoadingOverlay {\n public loadingService = inject(LoadingService);\n}\n","<div class=\"overlay\" [class.hide]=\"!(loadingService.isLoading())\">\n <div class=\"loading-logo\">\n <span class=\"loading-text\">CINEVERSE</span>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Toast } from '../../models/toast.model';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'cineverse-toast',\n imports: [\n NgClass\n ],\n templateUrl: 'toast-item.html',\n styleUrl: 'toast-item.css'\n})\nexport class ToastItem {\n @Input() toast!: Toast;\n}\n","<div class=\"toast\" [ngClass]=\"[toast.type, toast.hiding ? 'hide' : '']\">\n <div class=\"toast-icon\" style=\"margin-right: 8px; display: inline-flex; align-items: center;\">\n @switch (toast.type) {\n @case ('error') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#E53935\"/>\n <path d=\"M14 14L34 34M34 14L14 34\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('info') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#1E88E5\"/>\n <circle cx=\"24\" cy=\"14\" r=\"3\" fill=\"white\"/>\n <rect x=\"21\" y=\"20\" width=\"6\" height=\"16\" rx=\"2\" fill=\"white\"/>\n </svg>\n }\n @case ('success') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#43A047\"/>\n <path d=\"M14 24L20 30L34 16\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n }\n @case ('warning') {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#FB8C00\"/>\n <path d=\"M24 12V28\" stroke=\"white\" stroke-width=\"4\" stroke-linecap=\"round\"/>\n <circle cx=\"24\" cy=\"35\" r=\"2.5\" fill=\"white\"/>\n </svg>\n }\n }\n </div>\n\n <span>{{ toast.message }}</span>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToastService } from '../../services/toast.service';\nimport { ToastItem } from '../toast-item/toast-item';\n\n@Component({\n selector: 'cineverse-toast-container',\n imports: [\n ToastItem,\n CommonModule\n ],\n templateUrl: 'toast-container.html',\n styleUrl: 'toast-container.css',\n standalone: true\n})\nexport class ToastContainer {\n public toastService = inject(ToastService);\n}\n","<div class=\"toast-container\">\n @for (toast of toastService.toasts$(); track toast.id) {\n <cineverse-toast [toast]=\"toast\"></cineverse-toast>\n }\n</div>\n","export const identityBasePath = '/identity';\n\nexport function isOnIdentityService(): boolean {\n return window.location.pathname.startsWith(identityBasePath);\n}\n\nexport function isIdentityRoute(path: string): boolean {\n return path.startsWith(identityBasePath);\n}\n\nexport function needsFullPageReload(targetPath: string): boolean {\n const currentIsIdentity = isOnIdentityService();\n const targetIsIdentity = isIdentityRoute(targetPath);\n\n return currentIsIdentity !== targetIsIdentity;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NavigationExtras, Params, Router } from '@angular/router';\nimport { identityBasePath, needsFullPageReload } from '../utils/router.utils';\n\n@Injectable({ providedIn: 'root' })\nexport class RouterHelper {\n private router = inject(Router);\n\n navigate(path: string, extras?: NavigationExtras): void {\n if (needsFullPageReload(path)) {\n window.location.href = this.buildUrlWithParams(path, extras?.queryParams);\n } else {\n this.router.navigate([path], extras).then();\n }\n }\n\n navigateToIdentity(path: string, extras?: NavigationExtras): void {\n window.location.href = this.buildUrlWithParams(`/${identityBasePath}${path}`, extras?.queryParams);\n }\n\n navigateToCineverse(path: string, extras?: NavigationExtras): void {\n if (needsFullPageReload(path)) {\n window.location.href = this.buildUrlWithParams(path, extras?.queryParams);\n } else {\n this.router.navigate([path], extras).then();\n }\n }\n\n private buildUrlWithParams(path: string, queryParams?: Params | null): string {\n if (!queryParams || Object.keys(queryParams).length === 0) {\n return path;\n }\n\n const params = new URLSearchParams();\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value != null) {\n params.append(key, String(value));\n }\n });\n\n const queryString = params.toString();\n return queryString ? `${path}?${queryString}` : path;\n }\n}\n","import { Component, HostListener, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterHelper } from '../../shared/helpers/router.helper';\n\n@Component({\n selector: 'cineverse-header',\n standalone: true,\n imports: [CommonModule],\n templateUrl: 'header.html',\n styleUrls: ['header.css']\n})\n\nexport class Header {\n private routerHelper = inject(RouterHelper);\n isMenuOpen = false;\n\n toggleMenu(event: Event) {\n event.stopPropagation();\n this.isMenuOpen = !this.isMenuOpen;\n }\n\n closeMenu() {\n this.isMenuOpen = false;\n }\n\n @HostListener('document:click', ['$event'])\n onClick(event: Event) {\n if (!(event.target as Element).closest('.menu') &&\n !(event.target as Element).closest('.menu-icon')) {\n this.isMenuOpen = false;\n }\n }\n\n protected navigate(path: string) {\n this.routerHelper.navigate(path);\n this.closeMenu();\n }\n}\n","<div class=\"wrapper\">\n <header>\n <nav>\n <div class=\"logo-wrapper\">\n <a (click)=\"navigate('/')\" class=\"logo\">\n CINEVERSE\n </a>\n </div>\n <div class=\"menu-icon\" (click)=\"toggleMenu($event)\">\n <i class=\"pi pi-bars fa-2x\"></i>\n </div>\n <ul [class.showing]=\"isMenuOpen\">\n <li><a (click)=\"navigate('/')\">Home</a></li>\n <li><a (click)=\"navigate('/movies')\">Movies</a></li>\n <li><a (click)=\"navigate('/contact')\">Contact</a></li>\n <li><a (click)=\"navigate('/about')\">About</a></li>\n <li><a (click)=\"navigate('/identity/profile')\">Profile</a></li>\n </ul>\n </nav>\n </header>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { RouterHelper } from '../../shared/helpers/router.helper';\n\n@Component({\n selector: 'cineverse-footer',\n imports: [],\n templateUrl: './footer.html',\n styleUrl: './footer.css',\n})\nexport class Footer {\n private routerHelper = inject(RouterHelper);\n\n protected navigate(path: string) {\n this.routerHelper.navigate(path);\n }\n}\n","<footer class=\"site-footer\">\n <div class=\"container\">\n <div class=\"footer-content\">\n\n <div class=\"footer-column\">\n <h3 class=\"footer-title\">Quick Links</h3>\n <ul class=\"footer-links\">\n <li><a (click)=\"navigate('/')\"><i class=\"pi pi-chevron-right\"></i> Home</a></li>\n <li><a (click)=\"navigate('/movies')\"><i class=\"pi pi-chevron-right\"></i> Movies</a></li>\n <li><a (click)=\"navigate('/contact')\"><i class=\"pi pi-chevron-right\"></i> Contact Us</a></li>\n <li><a (click)=\"navigate('/about')\"><i class=\"pi pi-chevron-right\"></i> About</a></li>\n <li><a (click)=\"navigate('/profile')\"><i class=\"pi pi-chevron-right\"></i> Profile</a></li>\n </ul>\n </div>\n\n <div id=\"contact-us\" class=\"footer-column\">\n <h3 class=\"footer-title\">Contact Us</h3>\n <ul class=\"footer-contacts\">\n <li><i class=\"pi pi-map-marker\"></i> Chisinau str. Vasile Alecsandri 32</li>\n <li><i class=\"pi pi-phone\"></i> +373 69-077-251</li>\n <li><i class=\"pi pi-envelope\"></i> info&#64;cineverse.com</li>\n <li><i class=\"pi pi-clock\"></i> Mon-Mon: 9AM - 10PM</li>\n </ul>\n </div>\n\n <div class=\"footer-column\">\n <h3 class=\"footer-title\">Stay Connected</h3>\n <p class=\"footer-text\">Subscribe to our newsletter for the latest updates</p>\n <form class=\"newsletter-form\">\n <input type=\"email\" placeholder=\"Your Email\" required>\n <button type=\"submit\"><i class=\"pi pi-bell\"></i></button>\n </form>\n <div class=\"social-links\">\n <a href=\"https://www.instagram.com/darkf_nn?igsh=MXBwNGplYm85aHcxeA==\"><i class=\"pi pi-instagram\"></i></a>\n <a href=\"https://www.linkedin.com/in/vlad-timbal-511769296/\"><i class=\"pi pi-linkedin\"></i></a>\n <a href=\"https://github.com/DARK6870\"><i class=\"pi pi-github\"></i></a>\n </div>\n </div>\n </div>\n\n <div class=\"footer-bottom\">\n <p>&copy; 2025 Cineverse. All Rights Reserved.</p>\n <div class=\"legal-links\">\n <a href=\"#\">Privacy Policy</a>\n <a href=\"#\">Terms of Service</a>\n <a href=\"#\">Cookies</a>\n </div>\n </div>\n </div>\n</footer>\n","export function formatDate(stringDate: string): string {\n if (!stringDate) return '';\n const date = new Date(stringDate);\n return date.toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n });\n}\n","import { AbstractControl } from '@angular/forms';\n\nexport function getValidationError(control: AbstractControl | null): string | null {\n if (!control || !control.errors) return null;\n\n if (!(control.touched || control.dirty)) return null;\n\n const errorMessages: Record<string, (error: any) => string> = {\n required: () => `This field is required`,\n email: () => `Please enter a valid email`,\n minlength: (err) => `Minimum length is ${err.requiredLength} characters`,\n maxlength: (err) => `Maximum length is ${err.requiredLength} characters`,\n pattern: () => `Invalid format`,\n passwordMismatch: () => `Passwords do not match`\n };\n\n for (const errorName in control.errors) {\n if (errorMessages[errorName]) {\n return errorMessages[errorName](control.errors[errorName]);\n }\n }\n\n return null;\n}\n","/*\n * Public API Surface of infrastructure-common\n */\n\n// integrations\nexport * from './lib/integrations/apollo/links/error.link';\nexport * from './lib/integrations/apollo/links/loading.link';\n\nexport * from './lib/integrations/primeNG/PrimeNgPreset';\n\nexport * from './lib/integrations/http/interceptors/loading.interceptor';\nexport * from './lib/integrations/http/interceptors/error.interceptor';\n\n// feedback\nexport * from './lib/feedback/blocking/components/blocking-overlay/blocking-overlay';\nexport * from './lib/feedback/blocking/services/block-actions.service';\n\nexport * from './lib/feedback/loading/components/loading-overlay/loading-overlay';\nexport * from './lib/feedback/loading/services/loading.service';\n\nexport * from './lib/feedback/toast/components/toast-container/toast-container';\nexport * from './lib/feedback/toast/components/toast-item/toast-item';\nexport * from './lib/feedback/toast/services/toast.service';\n\n// layout\nexport * from './lib/layout/header/header';\nexport * from './lib/layout/footer/footer';\n\n// shared\nexport * from './lib/shared/utils/date.utils';\nexport * from './lib/shared/utils/router.utils';\nexport * from './lib/shared/helpers/validation.helper';\nexport * from './lib/shared/helpers/router.helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@cineverse/infrastructure-common",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^21.0.6",
6
+ "@angular/core": "^21.0.6",
7
+ "apollo-angular": "^13.0.0",
8
+ "graphql": "^16.12.0"
9
+ },
10
+ "dependencies": {
11
+ "tslib": "^2.3.0"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./types/cineverse-infrastructure-common.d.ts",
16
+ "esm2022": "./esm2022/cineverse-infrastructure-common.mjs",
17
+ "esm": "./esm2022/cineverse-infrastructure-common.mjs",
18
+ "default": "./fesm2022/cineverse-infrastructure-common.mjs"
19
+ },
20
+ "./styles/cineverse-styles.css": "./styles/cineverse-styles.css",
21
+ "./package.json": {
22
+ "default": "./package.json"
23
+ }
24
+ },
25
+ "sideEffects": false,
26
+ "module": "fesm2022/cineverse-infrastructure-common.mjs",
27
+ "typings": "types/cineverse-infrastructure-common.d.ts"
28
+ }
@@ -0,0 +1,30 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Nunito+Sans:wght@400;500;600;700&display=swap');
2
+
3
+ :root {
4
+ color-scheme: light!important;
5
+
6
+ --cv-primary-dark: #000000;
7
+ --cv-light: #e6e6e6;
8
+ --cv-gray: #c7c7c7;
9
+ --cv-accent: #677C77;
10
+
11
+ --font-title: 'Oswald', sans-serif;
12
+ --font-text: 'Nunito Sans', sans-serif;
13
+ }
14
+
15
+ html {
16
+ scroll-behavior: smooth;
17
+ }
18
+
19
+ body{
20
+ margin: 0;
21
+ background-color: #f2f2f2;
22
+ }
23
+
24
+ *{
25
+ font-family: var(--font-text), serif;
26
+ }
27
+
28
+ h1, h2, .title {
29
+ font-family: var(--font-title), serif;
30
+ }
@@ -0,0 +1,122 @@
1
+ import { ErrorLink } from '@apollo/client/link/error';
2
+ import { ApolloLink } from '@apollo/client/core';
3
+ import * as _primeuix_themes_types from '@primeuix/themes/types';
4
+ import { HttpInterceptorFn } from '@angular/common/http';
5
+ import * as i0 from '@angular/core';
6
+ import { AbstractControl } from '@angular/forms';
7
+ import { NavigationExtras } from '@angular/router';
8
+
9
+ declare function createErrorLink(): ErrorLink;
10
+
11
+ declare function createLoadingLink(): ApolloLink;
12
+
13
+ declare const PrimeNgPreset: _primeuix_themes_types.Preset;
14
+
15
+ declare const loadingInterceptor: HttpInterceptorFn;
16
+
17
+ declare const errorInterceptor: HttpInterceptorFn;
18
+
19
+ declare class BlockActionsService {
20
+ private _blocked;
21
+ readonly isBlocked: i0.Signal<boolean>;
22
+ block(): void;
23
+ unblock(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<BlockActionsService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<BlockActionsService>;
26
+ }
27
+
28
+ declare class BlockingOverlay {
29
+ protected service: BlockActionsService;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<BlockingOverlay, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<BlockingOverlay, "cineverse-blocking-overlay", never, {}, {}, never, never, true, never>;
32
+ }
33
+
34
+ declare class LoadingService {
35
+ private _activeRequests;
36
+ readonly isLoading: i0.WritableSignal<boolean>;
37
+ show(): void;
38
+ hide(): void;
39
+ reset(): void;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoadingService, never>;
41
+ static ɵprov: i0.ɵɵInjectableDeclaration<LoadingService>;
42
+ }
43
+
44
+ declare class LoadingOverlay {
45
+ loadingService: LoadingService;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoadingOverlay, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<LoadingOverlay, "cineverse-loading-overlay", never, {}, {}, never, never, true, never>;
48
+ }
49
+
50
+ type ToastType = 'success' | 'error' | 'info' | 'warning';
51
+ interface Toast {
52
+ id: number;
53
+ message: string;
54
+ type: ToastType;
55
+ hiding?: boolean | null;
56
+ }
57
+
58
+ declare class ToastService {
59
+ private _queue;
60
+ private _toasts;
61
+ toasts$: i0.WritableSignal<Toast[]>;
62
+ private show;
63
+ private displayNext;
64
+ success(message: string): void;
65
+ error(message: string): void;
66
+ info(message: string): void;
67
+ warning(message: string): void;
68
+ remove(id: number): void;
69
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
70
+ static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
71
+ }
72
+
73
+ declare class ToastContainer {
74
+ toastService: ToastService;
75
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastContainer, never>;
76
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToastContainer, "cineverse-toast-container", never, {}, {}, never, never, true, never>;
77
+ }
78
+
79
+ declare class ToastItem {
80
+ toast: Toast;
81
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastItem, never>;
82
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToastItem, "cineverse-toast", never, { "toast": { "alias": "toast"; "required": false; }; }, {}, never, never, true, never>;
83
+ }
84
+
85
+ declare class Header {
86
+ private routerHelper;
87
+ isMenuOpen: boolean;
88
+ toggleMenu(event: Event): void;
89
+ closeMenu(): void;
90
+ onClick(event: Event): void;
91
+ protected navigate(path: string): void;
92
+ static ɵfac: i0.ɵɵFactoryDeclaration<Header, never>;
93
+ static ɵcmp: i0.ɵɵComponentDeclaration<Header, "cineverse-header", never, {}, {}, never, never, true, never>;
94
+ }
95
+
96
+ declare class Footer {
97
+ private routerHelper;
98
+ protected navigate(path: string): void;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<Footer, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<Footer, "cineverse-footer", never, {}, {}, never, never, true, never>;
101
+ }
102
+
103
+ declare function formatDate(stringDate: string): string;
104
+
105
+ declare const identityBasePath = "/identity";
106
+ declare function isOnIdentityService(): boolean;
107
+ declare function isIdentityRoute(path: string): boolean;
108
+ declare function needsFullPageReload(targetPath: string): boolean;
109
+
110
+ declare function getValidationError(control: AbstractControl | null): string | null;
111
+
112
+ declare class RouterHelper {
113
+ private router;
114
+ navigate(path: string, extras?: NavigationExtras): void;
115
+ navigateToIdentity(path: string, extras?: NavigationExtras): void;
116
+ navigateToCineverse(path: string, extras?: NavigationExtras): void;
117
+ private buildUrlWithParams;
118
+ static ɵfac: i0.ɵɵFactoryDeclaration<RouterHelper, never>;
119
+ static ɵprov: i0.ɵɵInjectableDeclaration<RouterHelper>;
120
+ }
121
+
122
+ export { BlockActionsService, BlockingOverlay, Footer, Header, LoadingOverlay, LoadingService, PrimeNgPreset, RouterHelper, ToastContainer, ToastItem, ToastService, createErrorLink, createLoadingLink, errorInterceptor, formatDate, getValidationError, identityBasePath, isIdentityRoute, isOnIdentityService, loadingInterceptor, needsFullPageReload };