@libs-ui/services-notification 0.2.356-42 → 0.2.356-43

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 CHANGED
@@ -1,17 +1,30 @@
1
- # Notification Service
1
+ # @libs-ui/services-notification
2
2
 
3
- Service toast notification cho Angular — hỗ trợ 4 kiểu (success, error, info, warn), queue tối đa 5, tự động dịch qua ngx-translate, và bridge sang micro-frontend qua iFrame messaging.
3
+ > Service toast notification cho Angular — hiển thị 4 kiểu thông báo (success, error, info, warn), quản queue tự động, tích hợp ngx-translate, và hỗ trợ bridge sang micro-frontend qua iFrame messaging.
4
+
5
+ ## Giới thiệu
6
+
7
+ `LibsUiNotificationService` là service singleton (`providedIn: 'root'`) dùng để hiển thị toast notification động trực tiếp vào `document.body` thông qua `LibsUiDynamicComponentService`. Service tự quản lý queue tối đa 5 thông báo đồng thời theo cơ chế FIFO, tự động stack vị trí các toast, và có khả năng phát hiện môi trường iFrame để bridge thông báo lên parent shell trong kiến trúc micro-frontend.
4
8
 
5
9
  ## Tính năng
6
10
 
7
- - ✅ 4 kiểu toast: `success` (xanh), `error` (đỏ), `info` (xanh dương), `warn` (vàng)
11
+ - ✅ 4 kiểu toast: `success` (xanh), `error` (đỏ), `info` (xanh dương), `warn` (vàng)
8
12
  - ✅ Queue tối đa 5 — FIFO auto-remove khi overflow
9
- - ✅ Tích hợp ngx-translate — truyền key hoặc text đều được
10
- - ✅ interpolateParams với XSS-safe escaping tự động
11
- - ✅ Callback onClick / onMouseenter
12
- - ✅ Tùy chỉnh timeRemove, positionRight
13
- - ✅ iFrame bridge cho micro-frontend architecture
14
- - ✅ Browser native Notification API (systemSpawnNotification)
13
+ - ✅ Tích hợp ngx-translate — truyền translation key hoặc text thường đều được
14
+ - ✅ `interpolateParams` với XSS-safe escaping tự động qua `escapeHtml()`
15
+ - ✅ Callback `onClick` / `onMouseenter` trên từng toast
16
+ - ✅ Tùy chỉnh `timeRemove` (ms) và `positionRight` (px)
17
+ - ✅ Dynamic stacking tự tính lại vị trí top/right sau mỗi add/remove
18
+ - ✅ iFrame bridge cho micro-frontend — tự phát hiện `isEmbedFrame()` và gửi PostMessage lên parent
19
+ - ✅ Browser native Notification API (`systemSpawnNotification`) trả về `Observable`
20
+
21
+ ## Khi nào sử dụng
22
+
23
+ - Thông báo kết quả sau action: lưu, xóa, cập nhật — dùng `success` hoặc `error`
24
+ - Thông báo lỗi hệ thống hoặc lỗi network API — dùng `error` hoặc `warn`
25
+ - Thông báo thông tin cho user (tips, hướng dẫn ngắn) — dùng `info`
26
+ - Cần hiển thị notification từ micro-frontend (child iFrame) lên parent shell — dùng `init()` + iFrame bridge
27
+ - Cần push native OS/browser notification khi tab không active — dùng `systemSpawnNotification()`
15
28
 
16
29
  ## Cài đặt
17
30
 
@@ -25,111 +38,327 @@ npm install @libs-ui/services-notification
25
38
  import { LibsUiNotificationService } from '@libs-ui/services-notification';
26
39
  ```
27
40
 
28
- ## Quick Start
41
+ Service được đăng ký `providedIn: 'root'` — không cần thêm vào `providers[]` của module hay component.
42
+
43
+ ## Ví dụ sử dụng
44
+
45
+ ### 1. Cơ bản — 4 kiểu toast
29
46
 
30
47
  ```typescript
31
- @Component({ ... })
48
+ import { Component, inject } from '@angular/core';
49
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
50
+
51
+ @Component({
52
+ standalone: true,
53
+ selector: 'app-example',
54
+ template: `
55
+ <button (click)="handlerSave()">Lưu</button>
56
+ <button (click)="handlerDelete()">Xóa</button>
57
+ `,
58
+ })
32
59
  export class ExampleComponent {
33
- private notif = inject(LibsUiNotificationService);
60
+ private readonly notif = inject(LibsUiNotificationService);
61
+
62
+ handlerSave() {
63
+ this.notif.showCompTypeTextSuccess('Lưu thành công!');
64
+ }
65
+
66
+ handlerDelete() {
67
+ this.notif.showCompTypeTextError('Xóa thất bại. Vui lòng thử lại.');
68
+ }
69
+
70
+ handlerInfo() {
71
+ this.notif.showCompTypeTextInfo('Phiên làm việc sẽ hết hạn sau 5 phút.');
72
+ }
73
+
74
+ handlerWarning() {
75
+ this.notif.showCompTypeTextWarning('Dung lượng lưu trữ gần đầy.');
76
+ }
77
+ }
78
+ ```
79
+
80
+ ### 2. Đầy đủ config — title, timeRemove, positionRight, callback
81
+
82
+ ```typescript
83
+ import { Component, inject } from '@angular/core';
84
+ import { Router } from '@angular/router';
85
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
34
86
 
35
- onSave() { this.notif.showCompTypeTextSuccess('Lưu thành công!'); }
36
- onError() { this.notif.showCompTypeTextError('Có lỗi xảy ra.'); }
37
- onInfo() { this.notif.showCompTypeTextInfo('Phiên làm việc sắp hết hạn.'); }
38
- onWarn() { this.notif.showCompTypeTextWarning('Dung lượng gần đầy.'); }
87
+ @Component({
88
+ standalone: true,
89
+ selector: 'app-create-user',
90
+ template: `<button (click)="handlerCreate()">Tạo tài khoản</button>`,
91
+ })
92
+ export class CreateUserComponent {
93
+ private readonly notif = inject(LibsUiNotificationService);
94
+ private readonly router = inject(Router);
95
+
96
+ handlerCreate() {
97
+ this.notif.showCompTypeTextSuccess('Tạo tài khoản thành công!', {
98
+ title: 'Thành công', // tiêu đề (optional)
99
+ timeRemove: 5000, // ms — tự động đóng sau 5 giây (default: 3000)
100
+ positionRight: 24, // px từ phải màn hình (default: 12)
101
+ eventName: 'click', // 'click' | 'mouseenter' — trigger callback
102
+ callback: () => this.router.navigate(['/users']),
103
+ interpolateParams: { // params cho ngx-translate interpolation (tự động escaped)
104
+ name: 'Nguyễn Văn A',
105
+ },
106
+ });
107
+ }
39
108
  }
40
109
  ```
41
110
 
42
- ## Đầy đủ Config
111
+ ### 3. Dùng với ngx-translate key và interpolation
43
112
 
44
113
  ```typescript
45
- this.notif.showCompTypeTextSuccess('ACTION_SUCCESS', {
46
- title: 'Thành công',
47
- timeRemove: 5000, // ms (default: 3000)
48
- positionRight: 24, // px từ phải màn hình (default: 12)
49
- eventName: 'click', // 'click' | 'mouseenter'
50
- callback: () => this.router.navigate(['/home']),
51
- interpolateParams: {
52
- // ngx-translate params — tự động escape HTML
53
- name: 'Nguyễn Văn A',
54
- },
55
- });
114
+ import { Component, inject } from '@angular/core';
115
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
116
+
117
+ @Component({
118
+ standalone: true,
119
+ selector: 'app-report',
120
+ template: `<button (click)="handlerDelete()">Xóa báo cáo</button>`,
121
+ })
122
+ export class ReportComponent {
123
+ private readonly notif = inject(LibsUiNotificationService);
124
+
125
+ handlerDelete() {
126
+ // Truyền translation key — ngx-translate xử lý tự động
127
+ this.notif.showCompTypeTextSuccess('notifications.save_success');
128
+
129
+ // Với interpolation params (tự động escape HTML để ngăn XSS):
130
+ this.notif.showCompTypeTextError('notifications.delete_error', {
131
+ interpolateParams: { itemName: 'Báo cáo tháng 1' },
132
+ });
133
+ // JSON: { "notifications": { "delete_error": "Không thể xóa '{{itemName}}'. Vui lòng thử lại." } }
134
+ // Kết quả: "Không thể xóa 'Báo cáo tháng 1'. Vui lòng thử lại."
135
+ }
136
+ }
56
137
  ```
57
138
 
58
- ## ngx-translate Integration
139
+ ### 4. Callback khi user tương tác với toast
59
140
 
60
141
  ```typescript
61
- // Truyền translation key
62
- this.notif.showCompTypeTextSuccess('notifications.save_success');
63
-
64
- // Với interpolation:
65
- this.notif.showCompTypeTextError('notifications.delete_error', {
66
- interpolateParams: { itemName: 'Báo cáo tháng 1' },
67
- });
68
- // JSON: { "notifications": { "delete_error": "Không thể xóa '{{itemName}}'" } }
142
+ import { Component, inject } from '@angular/core';
143
+ import { Router } from '@angular/router';
144
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
145
+
146
+ @Component({
147
+ standalone: true,
148
+ selector: 'app-inbox',
149
+ template: `<button (click)="handlerNewMessage()">Kiểm tra tin nhắn</button>`,
150
+ })
151
+ export class InboxComponent {
152
+ private readonly notif = inject(LibsUiNotificationService);
153
+ private readonly router = inject(Router);
154
+
155
+ handlerNewMessage() {
156
+ // Callback khi user click vào toast
157
+ this.notif.showCompTypeTextInfo('Bạn có thông báo mới. Click để xem.', {
158
+ eventName: 'click',
159
+ timeRemove: 8000,
160
+ callback: () => {
161
+ this.router.navigate(['/notifications']);
162
+ },
163
+ });
164
+ }
165
+
166
+ handlerStorageWarning() {
167
+ // Callback khi user hover vào toast
168
+ this.notif.showCompTypeTextWarning('Dung lượng gần đầy. Hover để xem chi tiết.', {
169
+ eventName: 'mouseenter',
170
+ timeRemove: 6000,
171
+ callback: () => this.showStorageDetail(),
172
+ });
173
+ }
174
+
175
+ private showStorageDetail() {
176
+ // xử lý hiển thị chi tiết
177
+ }
178
+ }
69
179
  ```
70
180
 
71
- ## iFrame Bridge — Micro-frontend
181
+ ### 5. iFrame Bridge — Micro-frontend
72
182
 
73
183
  ```typescript
74
- // AppComponent của Shell (parent):
184
+ // === AppComponent của Shell (parent) ===
185
+ import { Component, inject } from '@angular/core';
186
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
187
+
188
+ @Component({
189
+ standalone: true,
190
+ selector: 'app-root',
191
+ template: `<router-outlet />`,
192
+ })
75
193
  export class AppComponent {
76
- private notif = inject(LibsUiNotificationService);
194
+ private readonly notif = inject(LibsUiNotificationService);
195
+
77
196
  constructor() {
78
- this.notif.init(['MICRO_SITE_PUSH_MESSAGE_FROM_CHILD']);
197
+ // Gọi 1 lần duy nhất — service có guard isInit để tránh duplicate listener
198
+ this.notif.init(
199
+ ['MICRO_SITE_PUSH_MESSAGE_FROM_CHILD'], // message names để lắng nghe từ child
200
+ 'MICRO_SITE_PUSH_MESSAGE_FROM_CHILD', // tên PostMessage gửi lên parent (optional)
201
+ );
79
202
  }
80
203
  }
81
204
 
82
- // Trong micro-frontend (child iFrame):
83
- // Gọi notification bình thường — service tự detect isEmbedFrame()
205
+ // === Micro-frontend child (embedded trong iFrame) ===
206
+ // Gọi notification bình thường — service tự phát hiện isEmbedFrame()
84
207
  // và gửi PostMessage lên parent thay vì render tại chỗ
85
- this.notif.showCompTypeTextSuccess('Upload hoàn tất!');
208
+ @Component({
209
+ standalone: true,
210
+ selector: 'app-upload',
211
+ template: `<button (click)="handlerUpload()">Upload</button>`,
212
+ })
213
+ export class UploadComponent {
214
+ private readonly notif = inject(LibsUiNotificationService);
215
+
216
+ handlerUpload() {
217
+ this.notif.showCompTypeTextSuccess('Upload hoàn tất!');
218
+ // → parent shell nhận PostMessage và render notification thay vì child
219
+ }
220
+ }
221
+ ```
222
+
223
+ ### 6. Browser Native Notification
224
+
225
+ ```typescript
226
+ import { Component, inject } from '@angular/core';
227
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
228
+
229
+ @Component({
230
+ standalone: true,
231
+ selector: 'app-push-setup',
232
+ template: `
233
+ <button (click)="handlerRequestPermission()">Bật thông báo</button>
234
+ <button (click)="handlerSpawnNotification()">Gửi thông báo</button>
235
+ `,
236
+ })
237
+ export class PushSetupComponent {
238
+ private readonly notif = inject(LibsUiNotificationService);
239
+
240
+ handlerRequestPermission() {
241
+ // Xin quyền browser native notification
242
+ this.notif.systemRequestPermission();
243
+ }
244
+
245
+ handlerSpawnNotification() {
246
+ // Hiển thị native notification (chỉ khi đã granted)
247
+ this.notif
248
+ .systemSpawnNotification('Thông báo mới', {
249
+ body: 'Bạn có 3 tin nhắn chưa đọc từ Team',
250
+ icon: '/assets/icons/icon-192x192.png',
251
+ tag: 'inbox-notification',
252
+ })
253
+ .subscribe({
254
+ next: (event) => {
255
+ // Trả về { notification, event } khi show hoặc click
256
+ },
257
+ error: (err) => {
258
+ // Notification lỗi
259
+ },
260
+ complete: () => {
261
+ // Notification đã đóng
262
+ },
263
+ });
264
+ }
265
+ }
266
+ ```
267
+
268
+ ## Methods (Service)
269
+
270
+ | Method | Signature | Mô tả |
271
+ |---|---|---|
272
+ | `showCompTypeTextSuccess` | `(message: string, config?: INotificationTextPublicConfig): void` | Hiển thị toast màu xanh lá — thành công |
273
+ | `showCompTypeTextError` | `(message: string, config?: INotificationTextPublicConfig): void` | Hiển thị toast màu đỏ — lỗi |
274
+ | `showCompTypeTextInfo` | `(message: string, config?: INotificationTextPublicConfig): void` | Hiển thị toast màu xanh dương — thông tin |
275
+ | `showCompTypeTextWarning` | `(message: string, config?: INotificationTextPublicConfig): void` | Hiển thị toast màu vàng — cảnh báo |
276
+ | `init` | `(messageNameHandler: string[], messageNamePostToParent?: string): void` | Khởi tạo iFrame bridge listener — gọi 1 lần trong AppComponent của shell |
277
+ | `systemRequestPermission` | `(): void` | Xin quyền browser native notification |
278
+ | `systemSpawnNotification` | `(title: string, options?: NotificationOptions): Observable<unknown>` | Hiển thị browser native notification, trả về Observable theo vòng đời notification |
279
+ | `get TranslateService` | `TranslateService` | Getter trả về instance của TranslateService đang inject |
280
+
281
+ ## Types & Interfaces
282
+
283
+ ```typescript
284
+ import {
285
+ INotificationTextPublicConfig,
286
+ INotificationTextConfig,
287
+ INotificationQueue,
288
+ INotificationPushFromIFrame,
289
+ } from '@libs-ui/services-notification';
290
+ ```
291
+
292
+ ### INotificationTextPublicConfig
293
+
294
+ Config truyền vào các method `showCompTypeText*()`:
295
+
296
+ ```typescript
297
+ interface INotificationTextPublicConfig {
298
+ title?: string; // Tiêu đề hiển thị trên toast
299
+ timeRemove?: number; // ms — tự động đóng (default: 3000)
300
+ positionRight?: number; // px từ phải màn hình (default: 12)
301
+ eventName?: 'click' | 'mouseenter'; // Event trigger callback
302
+ callback?: () => void; // Hàm gọi khi user tương tác
303
+ interpolateParams?: Record<string, any>; // Params ngx-translate (tự động escaped)
304
+ }
86
305
  ```
87
306
 
88
- ## Browser Native Notification
307
+ | Field | Type | Default | Mô tả | Ví dụ |
308
+ |---|---|---|---|---|
309
+ | `title` | `string` | `undefined` | Tiêu đề hiển thị phía trên message trong toast | `title: 'Thành công'` |
310
+ | `timeRemove` | `number` (ms) | `3000` | Thời gian tự động đóng tính bằng milliseconds | `timeRemove: 5000` |
311
+ | `positionRight` | `number` (px) | `12` | Khoảng cách từ phải màn hình tính bằng pixel | `positionRight: 24` |
312
+ | `eventName` | `'click' \| 'mouseenter'` | `undefined` | Event DOM sẽ trigger `callback` | `eventName: 'click'` |
313
+ | `callback` | `() => void` | `undefined` | Hàm gọi khi user thực hiện event tương ứng | `callback: () => router.navigate(['/'])` |
314
+ | `interpolateParams` | `Record<string, any>` | `undefined` | Params truyền vào ngx-translate interpolation, tự động escape HTML | `interpolateParams: { name: 'An' }` |
315
+
316
+ ### INotificationTextConfig (Internal)
317
+
318
+ Config nội bộ dùng khi tạo component động — thường không dùng trực tiếp:
89
319
 
90
320
  ```typescript
91
- // Xin quyền trước
92
- this.notif.systemRequestPermission();
93
-
94
- // Hiển thị native notification (sau khi granted)
95
- this.notif
96
- .systemSpawnNotification('New message', {
97
- body: 'Bạn tin nhắn mới từ Team',
98
- icon: '/assets/icon.png',
99
- })
100
- .subscribe({
101
- next: (e) => console.log('event:', e),
102
- complete: () => console.log('closed'),
103
- });
321
+ interface INotificationTextConfig {
322
+ type: 'success' | 'info' | 'error' | 'warn'; // Kiểu toast
323
+ timeRemove: number; // ms
324
+ positionRight?: number; // px
325
+ zIndex?: number; // CSS z-index (default: 2000)
326
+ eventName?: 'click' | 'mouseenter';
327
+ callback?: () => void;
328
+ }
329
+ ```
330
+
331
+ ### INotificationPushFromIFrame (Internal)
332
+
333
+ Payload nhận từ child iFrame qua PostMessage:
334
+
335
+ ```typescript
336
+ interface INotificationPushFromIFrame {
337
+ functionName: 'success' | 'info' | 'error' | 'warn';
338
+ message: string;
339
+ title?: string;
340
+ timeRemove?: number;
341
+ }
342
+ ```
343
+
344
+ ## Lưu ý quan trọng
345
+
346
+ ⚠️ **Queue MAX 5 — FIFO**: Nếu đang có đủ 5 toast trên màn hình, toast cũ nhất sẽ tự bị remove (kèm hủy timeout của nó) khi toast mới xuất hiện. Hành vi này không thể tắt.
347
+
348
+ ⚠️ **interpolateParams XSS-safe**: Mỗi value trong `interpolateParams` tự động qua `escapeHtml()` trước khi truyền vào ngx-translate. Đây là bảo vệ XSS cho user-generated content. Message string gốc không bị escape — phải là translation key hoặc text an toàn.
349
+
350
+ ⚠️ **init() chỉ gọi 1 lần**: Service có guard `isInit` signal — gọi `init()` nhiều lần an toàn, chỉ listener đầu tiên được đăng ký. Nên gọi trong `AppComponent` constructor của shell.
351
+
352
+ ⚠️ **iFrame auto-detection**: Service tự gọi `isEmbedFrame()` — không cần config thêm trong child app. Khi chạy trong iFrame, payload được `encrypt()` trước khi gửi lên parent qua PostMessage.
353
+
354
+ ⚠️ **systemSpawnNotification yêu cầu granted**: Observable sẽ `complete()` ngay lập tức nếu browser không hỗ trợ Notification API hoặc quyền chưa được cấp (`'granted'`). Luôn gọi `systemRequestPermission()` trước.
355
+
356
+ ⚠️ **Dynamic stacking dùng getBoundingClientRect()**: Vị trí top/right của các toast được tính lại sau mỗi add/remove thông qua `setTimeout` để đảm bảo DOM đã render. Tránh can thiệp vào style inline `top`/`right` của các element toast từ bên ngoài.
357
+
358
+ ## Demo
359
+
360
+ ```bash
361
+ npx nx serve core-ui
104
362
  ```
105
363
 
106
- ## API — Public Methods
107
-
108
- | Method | Mô tả |
109
- | ------------------------------------------- | ---------------------------------------------------- |
110
- | `showCompTypeTextSuccess(message, config?)` | Toast màu xanh lá — thành công |
111
- | `showCompTypeTextError(message, config?)` | Toast màu đỏ — lỗi |
112
- | `showCompTypeTextInfo(message, config?)` | Toast màu xanh dương — thông tin |
113
- | `showCompTypeTextWarning(message, config?)` | Toast màu vàng — cảnh báo |
114
- | `init(messageNames, parentName?)` | Khởi tạo iFrame bridge; gọi 1 lần trong AppComponent |
115
- | `systemRequestPermission()` | Xin quyền browser native notification |
116
- | `systemSpawnNotification(title, opts?)` | Hiển thị native notification → `Observable` |
117
- | `get TranslateService` | Getter cho TranslateService instance |
118
-
119
- ## INotificationTextPublicConfig
120
-
121
- | Field | Type | Default | Mô tả |
122
- | ------------------- | ------------------------- | ----------- | ------------------------------------- |
123
- | `title` | `string` | `undefined` | Tiêu đề trên toast |
124
- | `timeRemove` | `number (ms)` | `3000` | Thời gian tự động đóng |
125
- | `positionRight` | `number (px)` | `12` | Khoảng cách từ phải |
126
- | `eventName` | `'click' \| 'mouseenter'` | `undefined` | Event trigger callback |
127
- | `callback` | `() => void` | `undefined` | Hàm gọi khi interact |
128
- | `interpolateParams` | `Record<string, any>` | `undefined` | Params cho translate (tự escape HTML) |
129
-
130
- ## Lưu ý
131
-
132
- - **Queue MAX 5**: Nếu đang có đủ 5 toast, toast cũ nhất tự bị remove khi toast mới xuất hiện.
133
- - **interpolateParams escaping**: Mỗi value trong `interpolateParams` tự động qua `escapeHtml()` — safe với user input.
134
- - **iFrame detection**: Service tự phát hiện `isEmbedFrame()`. Không cần config thêm trong child app.
135
- - **init() chỉ gọi 1 lần**: Service có guard `isInit` signal — gọi nhiều lần không bị duplicate listener.
364
+ Truy cập: http://localhost:4500/services/notification
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, Directive, signal, inject, ElementRef, ChangeDetectionStrategy, Component, Injectable } from '@angular/core';
2
+ import { input, Directive, signal, inject, ElementRef, Component, ChangeDetectionStrategy, Injectable } from '@angular/core';
3
3
  import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
4
4
  import { UtilsCommunicateMicro, isEmbedFrame, escapeHtml, get, encrypt } from '@libs-ui/utils';
5
5
  import * as i1 from '@ngx-translate/core';
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-services-notification.mjs","sources":["../../../../../libs-ui/services/notification/src/components/base.component.ts","../../../../../libs-ui/services/notification/src/components/text/text.component.ts","../../../../../libs-ui/services/notification/src/components/text/text.component.html","../../../../../libs-ui/services/notification/src/notification.service.ts","../../../../../libs-ui/services/notification/src/libs-ui-services-notification.ts"],"sourcesContent":["import { Directive, OnDestroy, input } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { INotificationTextConfig } from '../interfaces/notification';\n@Directive()\nexport class LibUiServiceNotificationBaseComponent implements OnDestroy {\n // #region PROPERTY\n protected onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly message = input<string>('');\n readonly interpolateParams = input<Record<string, unknown>>();\n readonly title = input<string>('');\n readonly config = input<INotificationTextConfig>({ type: 'success', timeRemove: 2000 });\n readonly removeComponent = input.required<(component: unknown) => Promise<void>>();\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, inject, signal } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { LibUiServiceNotificationBaseComponent } from '../base.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-services-notification-components-text',\n templateUrl: './text.component.html',\n styleUrls: ['./text.component.scss'],\n standalone: true,\n imports: [TranslateModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected containerClass = signal<string>('');\n protected icon = signal<string>('');\n\n // #region INJECT\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n switch (this.config().type) {\n case 'success':\n this.containerClass.set('libs-ui-toast_success');\n this.icon.set('libs-ui-icon-check-circle-solid');\n break;\n\n case 'info':\n this.containerClass.set('libs-ui-toast_info');\n this.icon.set('libs-ui-icon-tooltip-solid');\n break;\n\n case 'error':\n this.containerClass.set('libs-ui-toast_error');\n this.icon.set('libs-ui-icon-close-circle-solid');\n break;\n\n case 'warn':\n this.containerClass.set('libs-ui-toast_warning');\n this.icon.set('libs-ui-icon-alert-triangle-solid');\n break;\n\n default:\n this.containerClass.set('bg-[#6fd100] libs-ui-toast_success');\n this.icon.set('mo-icn-toast_success');\n }\n const { eventName, callback } = this.config();\n\n if (!eventName || !callback) {\n return;\n }\n if (eventName === 'click') {\n this.containerClass.update((value) => `${value} cursor-pointer`);\n }\n fromEvent(this.elementRef.nativeElement, eventName).pipe(takeUntil(this.onDestroy), take(1)).subscribe(callback);\n }\n\n /* FUNCTIONS */\n\n protected handlerClickClose(e: Event) {\n e.stopPropagation();\n this.removeComponent()(e);\n }\n}\n","<div\n class=\"libs-ui-toast\"\n [class]=\"containerClass()\"\n [style.zIndex]=\"config().zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{ icon() }}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title()) {\n <div\n class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title() | translate\"></div>\n }\n @if (message()) {\n <div\n class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title()\"\n [class.libs-ui-font-h7r]=\"title()\"\n [class.mt-[4ppx]]=\"title()\"\n [innerHtml]=\"message() | translate: interpolateParams() || {}\"></div>\n }\n </div>\n <div class=\"flex items-center\">\n <i\n class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\"\n (keydown.enter)=\"handlerClickClose($event)\"></i>\n </div>\n</div>\n","import { ComponentRef, Injectable, inject, signal } from '@angular/core';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { UtilsCommunicateMicro, encrypt, escapeHtml, get, isEmbedFrame } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { LibUiServicesComponentsTextComponent } from './components';\nimport { INotificationPushFromIFrame, INotificationQueue, INotificationTextConfig, INotificationTextPublicConfig } from './interfaces/notification';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LibsUiNotificationService {\n // #region PROPERTY\n private readonly notificationPermission = signal<NotificationPermission>('default');\n private readonly queueMessage = signal<Array<INotificationQueue>>(new Array<INotificationQueue>());\n private readonly timeoutUpdatePosition = signal<number>(0);\n private readonly MAX_QUEUE_MESSAGE: number = 5;\n private readonly isInit = signal<boolean>(false);\n private readonly messageNamePostToParent = signal<string>('MICRO_SITE_PUSH_MESSAGE_FROM_CHILD');\n\n // #region INJECT\n private readonly dynamicService = inject(LibsUiDynamicComponentService);\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n this.notificationPermission.set(this.systemSupportNotification() ? 'default' : 'denied');\n }\n\n /* FUNCTIONS */\n public init(messageNameHandler: Array<string>, messageNamePostToParent?: string) {\n if (this.isInit()) {\n return;\n }\n this.isInit.set(true);\n if (messageNamePostToParent) {\n this.messageNamePostToParent.set(messageNamePostToParent);\n }\n UtilsCommunicateMicro.GetMessage(messageNameHandler).subscribe((e) => {\n if (!isEmbedFrame()) {\n const dataMessage = e.data.response as INotificationPushFromIFrame;\n\n this.showCompTypeText(dataMessage.message, undefined, dataMessage.title, { type: dataMessage.functionName, timeRemove: dataMessage.timeRemove || 2000 });\n\n return;\n }\n UtilsCommunicateMicro.PostMessageToParent(e.data);\n });\n }\n\n public get TranslateService() {\n return this.translateService;\n }\n\n private systemSupportNotification(): boolean {\n return 'Notification' in window;\n }\n\n public systemRequestPermission() {\n if (!this.systemSupportNotification()) {\n return;\n }\n Notification.requestPermission()\n .then((permission: NotificationPermission) => (this.Permission = permission))\n .catch((error: unknown) => {\n if (error instanceof TypeError) {\n Notification.requestPermission((permission: NotificationPermission) => (this.Permission = permission));\n }\n });\n }\n\n private set Permission(permission: NotificationPermission) {\n this.notificationPermission.set(permission);\n }\n\n public systemSpawnNotification(title: string, options?: NotificationOptions): Observable<unknown> {\n return new Observable((obs) => {\n if (!this.systemSupportNotification()) {\n obs.complete();\n }\n if (this.notificationPermission() !== 'granted') {\n obs.complete();\n }\n const notify = new Notification(title, options);\n\n notify.onshow = (e) => {\n return obs.next({\n notification: notify,\n event: e,\n });\n };\n notify.onclick = (e) => {\n notify.close();\n window.focus();\n\n return obs.next({\n notification: notify,\n event: e,\n });\n };\n notify.onerror = (e) => {\n return obs.error({\n notification: notify,\n event: e,\n });\n };\n notify.onclose = () => {\n return obs.complete();\n };\n });\n }\n\n public showCompTypeTextSuccess(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'success', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextError(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'error', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextInfo(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'info', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextWarning(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'warn', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n private showCompTypeText(message: string, interpolateParams?: Record<string, unknown>, title?: string, config: INotificationTextConfig = { type: 'success', timeRemove: 2000 }): void {\n if (!message) {\n return;\n }\n\n this.checkQueueMessage();\n if (interpolateParams && typeof interpolateParams === 'object') {\n Object.keys(interpolateParams).forEach((key) => {\n interpolateParams[key] = escapeHtml(get(interpolateParams, key));\n });\n }\n\n if (isEmbedFrame()) {\n const messageTranslate = this.translateService.instant(message, interpolateParams) as string;\n const titleTranslate = title ? this.translateService.instant(title, interpolateParams) : title;\n\n return UtilsCommunicateMicro.PostMessageToParent({ type: this.messageNamePostToParent(), response: encrypt(JSON.stringify({ functionName: config.type, message: messageTranslate, titleTranslate, timeRemove: config.timeRemove || 2000 })) });\n }\n const component = this.dynamicService.resolveComponentFactory(LibUiServicesComponentsTextComponent);\n\n component.setInput('title', title);\n component.setInput('message', message);\n component.setInput('interpolateParams', interpolateParams);\n component.setInput('config', config);\n component.setInput('removeComponent', this.removeComponent.bind(this, component));\n const timeout = setTimeout(() => {\n this.removeComponent(component);\n }, config?.timeRemove);\n\n this.queueMessage.update((queue) => {\n queue.push({\n component,\n config,\n timeout,\n });\n\n return [...queue];\n });\n this.dynamicService.addToBody(component);\n this.updatePositionMessage();\n }\n\n private removeComponent(component: ComponentRef<unknown>) {\n this.dynamicService.remove(component);\n const indexRemove = this.queueMessage().findIndex((config) => config.component === component);\n\n if (indexRemove !== -1) {\n this.queueMessage.update((queue) => {\n queue.splice(indexRemove, 1);\n return [...queue];\n });\n }\n }\n\n private checkQueueMessage(): void {\n if (this.queueMessage.length < this.MAX_QUEUE_MESSAGE) {\n return;\n }\n const firstQueue = this.queueMessage().shift() as INotificationQueue;\n\n clearTimeout(firstQueue.timeout);\n this.dynamicService.remove(firstQueue.component);\n this.updatePositionMessage();\n }\n\n private updatePositionMessage(): void {\n if (!this.queueMessage().length) {\n return;\n }\n clearTimeout(this.timeoutUpdatePosition());\n this.timeoutUpdatePosition.set(\n setTimeout(() => {\n let topMessage = 12;\n\n this.queueMessage().forEach((message: INotificationQueue) => {\n const firstEl = message.component.instance.elementRef.nativeElement.firstElementChild;\n const rect = firstEl.getBoundingClientRect();\n\n firstEl.style.top = `${topMessage}px`;\n topMessage += rect.height + 12;\n let right = message.config.positionRight ?? 12;\n\n if (isEmbedFrame()) {\n right = 40;\n }\n firstEl.style.right = `${right}px`;\n });\n })\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;MAIa,qCAAqC,CAAA;;AAEtC,IAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;;AAGhC,IAAA,OAAO,GAAG,KAAK,CAAS,EAAE,CAAC;IAC3B,iBAAiB,GAAG,KAAK,EAA2B;AACpD,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;AACzB,IAAA,MAAM,GAAG,KAAK,CAA0B,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9E,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAyC;IAElF,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;wGAdW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArC,qCAAqC,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD;;;ACYK,MAAO,oCAAqC,SAAQ,qCAAqC,CAAA;;AAEnF,IAAA,cAAc,GAAG,MAAM,CAAS,EAAE,CAAC;AACnC,IAAA,IAAI,GAAG,MAAM,CAAS,EAAE,CAAC;;AAGlB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;IACT;IAEA,QAAQ,GAAA;AACN,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI;AACxB,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC;gBAChD;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;gBAC3C;AAEF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC9C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC;gBAChD;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC;gBAClD;AAEF,YAAA;AACE,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oCAAoC,CAAC;AAC7D,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC;;QAEzC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAE7C,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;YAC3B;QACF;AACA,QAAA,IAAI,SAAS,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAA,EAAG,KAAK,CAAA,eAAA,CAAiB,CAAC;QAClE;AACA,QAAA,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;IAClH;;AAIU,IAAA,iBAAiB,CAAC,CAAQ,EAAA;QAClC,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC3B;wGAtDW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfjD,s4BA6BA,EAAA,MAAA,EAAA,CAAA,+9BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjBY,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGd,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAThD,SAAS;+BAEE,+CAA+C,EAAA,UAAA,EAG7C,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,CAAC,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s4BAAA,EAAA,MAAA,EAAA,CAAA,+9BAAA,CAAA,EAAA;;;MEFpC,yBAAyB,CAAA;;AAEnB,IAAA,sBAAsB,GAAG,MAAM,CAAyB,SAAS,CAAC;AAClE,IAAA,YAAY,GAAG,MAAM,CAA4B,IAAI,KAAK,EAAsB,CAAC;AACjF,IAAA,qBAAqB,GAAG,MAAM,CAAS,CAAC,CAAC;IACzC,iBAAiB,GAAW,CAAC;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAU,KAAK,CAAC;AAC/B,IAAA,uBAAuB,GAAG,MAAM,CAAS,oCAAoC,CAAC;;AAG9E,IAAA,cAAc,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACtD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5D,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1F;;IAGO,IAAI,CAAC,kBAAiC,EAAE,uBAAgC,EAAA;AAC7E,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,uBAAuB,EAAE;AAC3B,YAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3D;QACA,qBAAqB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACnE,YAAA,IAAI,CAAC,YAAY,EAAE,EAAE;AACnB,gBAAA,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,QAAuC;AAElE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAExJ;YACF;AACA,YAAA,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAW,gBAAgB,GAAA;QACzB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IAEQ,yBAAyB,GAAA;QAC/B,OAAO,cAAc,IAAI,MAAM;IACjC;IAEO,uBAAuB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE;YACrC;QACF;QACA,YAAY,CAAC,iBAAiB;AAC3B,aAAA,IAAI,CAAC,CAAC,UAAkC,MAAM,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC3E,aAAA,KAAK,CAAC,CAAC,KAAc,KAAI;AACxB,YAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,gBAAA,YAAY,CAAC,iBAAiB,CAAC,CAAC,UAAkC,MAAM,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;YACxG;AACF,QAAA,CAAC,CAAC;IACN;IAEA,IAAY,UAAU,CAAC,UAAkC,EAAA;AACvD,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC;IAC7C;IAEO,uBAAuB,CAAC,KAAa,EAAE,OAA6B,EAAA;AACzE,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE;gBACrC,GAAG,CAAC,QAAQ,EAAE;YAChB;AACA,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE,KAAK,SAAS,EAAE;gBAC/C,GAAG,CAAC,QAAQ,EAAE;YAChB;YACA,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;AAE/C,YAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAI;gBACpB,OAAO,GAAG,CAAC,IAAI,CAAC;AACd,oBAAA,YAAY,EAAE,MAAM;AACpB,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA,CAAC;AACJ,YAAA,CAAC;AACD,YAAA,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,KAAI;gBACrB,MAAM,CAAC,KAAK,EAAE;gBACd,MAAM,CAAC,KAAK,EAAE;gBAEd,OAAO,GAAG,CAAC,IAAI,CAAC;AACd,oBAAA,YAAY,EAAE,MAAM;AACpB,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA,CAAC;AACJ,YAAA,CAAC;AACD,YAAA,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,KAAI;gBACrB,OAAO,GAAG,CAAC,KAAK,CAAC;AACf,oBAAA,YAAY,EAAE,MAAM;AACpB,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA,CAAC;AACJ,YAAA,CAAC;AACD,YAAA,MAAM,CAAC,OAAO,GAAG,MAAK;AACpB,gBAAA,OAAO,GAAG,CAAC,QAAQ,EAAE;AACvB,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEO,uBAAuB,CAAC,OAAe,EAAE,MAAsC,EAAA;QACpF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACvO;IAEO,qBAAqB,CAAC,OAAe,EAAE,MAAsC,EAAA;QAClF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrO;IAEO,oBAAoB,CAAC,OAAe,EAAE,MAAsC,EAAA;QACjF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpO;IAEO,uBAAuB,CAAC,OAAe,EAAE,MAAsC,EAAA;QACpF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpO;AAEQ,IAAA,gBAAgB,CAAC,OAAe,EAAE,iBAA2C,EAAE,KAAc,EAAE,MAAA,GAAkC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAA;QAC5K,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QAEA,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,iBAAiB,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;YAC9D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC7C,gBAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAClE,YAAA,CAAC,CAAC;QACJ;QAEA,IAAI,YAAY,EAAE,EAAE;AAClB,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAW;YAC5F,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,KAAK;YAE9F,OAAO,qBAAqB,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChP;QACA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,oCAAoC,CAAC;AAEnG,QAAA,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;AAClC,QAAA,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;AACtC,QAAA,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAC1D,QAAA,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AACpC,QAAA,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACjF,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACjC,QAAA,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC;QAEtB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YACjC,KAAK,CAAC,IAAI,CAAC;gBACT,SAAS;gBACT,MAAM;gBACN,OAAO;AACR,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AACnB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEQ,IAAA,eAAe,CAAC,SAAgC,EAAA;AACtD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC;AAE7F,QAAA,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AACjC,gBAAA,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5B,gBAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AACnB,YAAA,CAAC,CAAC;QACJ;IACF;IAEQ,iBAAiB,GAAA;QACvB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;YACrD;QACF;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,EAAwB;AAEpE,QAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAChD,IAAI,CAAC,qBAAqB,EAAE;IAC9B;IAEQ,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE;YAC/B;QACF;AACA,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC1C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,UAAU,CAAC,MAAK;YACd,IAAI,UAAU,GAAG,EAAE;YAEnB,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,OAA2B,KAAI;AAC1D,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB;AACrF,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;gBAE5C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,UAAU,IAAI;AACrC,gBAAA,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;gBAC9B,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE;gBAE9C,IAAI,YAAY,EAAE,EAAE;oBAClB,KAAK,GAAG,EAAE;gBACZ;gBACA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,IAAI;AACpC,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;IACH;wGA7MW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACVD;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-services-notification.mjs","sources":["../../../../../libs-ui/services/notification/src/components/base.component.ts","../../../../../libs-ui/services/notification/src/components/text/text.component.ts","../../../../../libs-ui/services/notification/src/components/text/text.component.html","../../../../../libs-ui/services/notification/src/notification.service.ts","../../../../../libs-ui/services/notification/src/libs-ui-services-notification.ts"],"sourcesContent":["import { Directive, OnDestroy, input } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { INotificationTextConfig } from '../interfaces/notification';\n@Directive()\nexport class LibUiServiceNotificationBaseComponent implements OnDestroy {\n // #region PROPERTY\n protected onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly message = input<string>('');\n readonly interpolateParams = input<Record<string, unknown>>();\n readonly title = input<string>('');\n readonly config = input<INotificationTextConfig>({ type: 'success', timeRemove: 2000 });\n readonly removeComponent = input.required<(component: unknown) => Promise<void>>();\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, inject, signal } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { LibUiServiceNotificationBaseComponent } from '../base.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-services-notification-components-text',\n templateUrl: './text.component.html',\n styleUrls: ['./text.component.scss'],\n standalone: true,\n imports: [TranslateModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected containerClass = signal<string>('');\n protected icon = signal<string>('');\n\n // #region INJECT\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n switch (this.config().type) {\n case 'success':\n this.containerClass.set('libs-ui-toast_success');\n this.icon.set('libs-ui-icon-check-circle-solid');\n break;\n\n case 'info':\n this.containerClass.set('libs-ui-toast_info');\n this.icon.set('libs-ui-icon-tooltip-solid');\n break;\n\n case 'error':\n this.containerClass.set('libs-ui-toast_error');\n this.icon.set('libs-ui-icon-close-circle-solid');\n break;\n\n case 'warn':\n this.containerClass.set('libs-ui-toast_warning');\n this.icon.set('libs-ui-icon-alert-triangle-solid');\n break;\n\n default:\n this.containerClass.set('bg-[#6fd100] libs-ui-toast_success');\n this.icon.set('mo-icn-toast_success');\n }\n const { eventName, callback } = this.config();\n\n if (!eventName || !callback) {\n return;\n }\n if (eventName === 'click') {\n this.containerClass.update((value) => `${value} cursor-pointer`);\n }\n fromEvent(this.elementRef.nativeElement, eventName).pipe(takeUntil(this.onDestroy), take(1)).subscribe(callback);\n }\n\n /* FUNCTIONS */\n\n protected handlerClickClose(e: Event) {\n e.stopPropagation();\n this.removeComponent()(e);\n }\n}\n","<div\n class=\"libs-ui-toast\"\n [class]=\"containerClass()\"\n [style.zIndex]=\"config().zIndex || 2000\">\n <div class=\"flex items-center\">\n <i class=\"{{ icon() }}\"></i>\n </div>\n <div class=\"flex flex-col w-full\">\n @if (title()) {\n <div\n class=\"libs-ui-font-h5m text-break\"\n [innerHtml]=\"title() | translate\"></div>\n }\n @if (message()) {\n <div\n class=\"text-break\"\n [class.libs-ui-font-h5r]=\"!title()\"\n [class.libs-ui-font-h7r]=\"title()\"\n [class.mt-[4ppx]]=\"title()\"\n [innerHtml]=\"message() | translate: interpolateParams() || {}\"></div>\n }\n </div>\n <div class=\"flex items-center\">\n <i\n class=\"libs-ui-icon-close mr-0 ml-[8px] cursor-pointer\"\n (click)=\"handlerClickClose($event)\"\n (keydown.enter)=\"handlerClickClose($event)\"></i>\n </div>\n</div>\n","import { ComponentRef, Injectable, inject, signal } from '@angular/core';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { UtilsCommunicateMicro, encrypt, escapeHtml, get, isEmbedFrame } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { LibUiServicesComponentsTextComponent } from './components';\nimport { INotificationPushFromIFrame, INotificationQueue, INotificationTextConfig, INotificationTextPublicConfig } from './interfaces/notification';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LibsUiNotificationService {\n // #region PROPERTY\n private readonly notificationPermission = signal<NotificationPermission>('default');\n private readonly queueMessage = signal<Array<INotificationQueue>>(new Array<INotificationQueue>());\n private readonly timeoutUpdatePosition = signal<number>(0);\n private readonly MAX_QUEUE_MESSAGE: number = 5;\n private readonly isInit = signal<boolean>(false);\n private readonly messageNamePostToParent = signal<string>('MICRO_SITE_PUSH_MESSAGE_FROM_CHILD');\n\n // #region INJECT\n private readonly dynamicService = inject(LibsUiDynamicComponentService);\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n this.notificationPermission.set(this.systemSupportNotification() ? 'default' : 'denied');\n }\n\n /* FUNCTIONS */\n public init(messageNameHandler: Array<string>, messageNamePostToParent?: string) {\n if (this.isInit()) {\n return;\n }\n this.isInit.set(true);\n if (messageNamePostToParent) {\n this.messageNamePostToParent.set(messageNamePostToParent);\n }\n UtilsCommunicateMicro.GetMessage(messageNameHandler).subscribe((e) => {\n if (!isEmbedFrame()) {\n const dataMessage = e.data.response as INotificationPushFromIFrame;\n\n this.showCompTypeText(dataMessage.message, undefined, dataMessage.title, { type: dataMessage.functionName, timeRemove: dataMessage.timeRemove || 2000 });\n\n return;\n }\n UtilsCommunicateMicro.PostMessageToParent(e.data);\n });\n }\n\n public get TranslateService() {\n return this.translateService;\n }\n\n private systemSupportNotification(): boolean {\n return 'Notification' in window;\n }\n\n public systemRequestPermission() {\n if (!this.systemSupportNotification()) {\n return;\n }\n Notification.requestPermission()\n .then((permission: NotificationPermission) => (this.Permission = permission))\n .catch((error: unknown) => {\n if (error instanceof TypeError) {\n Notification.requestPermission((permission: NotificationPermission) => (this.Permission = permission));\n }\n });\n }\n\n private set Permission(permission: NotificationPermission) {\n this.notificationPermission.set(permission);\n }\n\n public systemSpawnNotification(title: string, options?: NotificationOptions): Observable<unknown> {\n return new Observable((obs) => {\n if (!this.systemSupportNotification()) {\n obs.complete();\n }\n if (this.notificationPermission() !== 'granted') {\n obs.complete();\n }\n const notify = new Notification(title, options);\n\n notify.onshow = (e) => {\n return obs.next({\n notification: notify,\n event: e,\n });\n };\n notify.onclick = (e) => {\n notify.close();\n window.focus();\n\n return obs.next({\n notification: notify,\n event: e,\n });\n };\n notify.onerror = (e) => {\n return obs.error({\n notification: notify,\n event: e,\n });\n };\n notify.onclose = () => {\n return obs.complete();\n };\n });\n }\n\n public showCompTypeTextSuccess(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'success', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextError(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'error', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextInfo(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'info', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n public showCompTypeTextWarning(message: string, config?: INotificationTextPublicConfig) {\n this.showCompTypeText(message, config?.interpolateParams, config?.title, { type: 'warn', timeRemove: config?.timeRemove || 3000, positionRight: config?.positionRight, eventName: config?.eventName, callback: config?.callback });\n }\n\n private showCompTypeText(message: string, interpolateParams?: Record<string, unknown>, title?: string, config: INotificationTextConfig = { type: 'success', timeRemove: 2000 }): void {\n if (!message) {\n return;\n }\n\n this.checkQueueMessage();\n if (interpolateParams && typeof interpolateParams === 'object') {\n Object.keys(interpolateParams).forEach((key) => {\n interpolateParams[key] = escapeHtml(get(interpolateParams, key));\n });\n }\n\n if (isEmbedFrame()) {\n const messageTranslate = this.translateService.instant(message, interpolateParams) as string;\n const titleTranslate = title ? this.translateService.instant(title, interpolateParams) : title;\n\n return UtilsCommunicateMicro.PostMessageToParent({ type: this.messageNamePostToParent(), response: encrypt(JSON.stringify({ functionName: config.type, message: messageTranslate, titleTranslate, timeRemove: config.timeRemove || 2000 })) });\n }\n const component = this.dynamicService.resolveComponentFactory(LibUiServicesComponentsTextComponent);\n\n component.setInput('title', title);\n component.setInput('message', message);\n component.setInput('interpolateParams', interpolateParams);\n component.setInput('config', config);\n component.setInput('removeComponent', this.removeComponent.bind(this, component));\n const timeout = setTimeout(() => {\n this.removeComponent(component);\n }, config?.timeRemove);\n\n this.queueMessage.update((queue) => {\n queue.push({\n component,\n config,\n timeout,\n });\n\n return [...queue];\n });\n this.dynamicService.addToBody(component);\n this.updatePositionMessage();\n }\n\n private removeComponent(component: ComponentRef<unknown>) {\n this.dynamicService.remove(component);\n const indexRemove = this.queueMessage().findIndex((config) => config.component === component);\n\n if (indexRemove !== -1) {\n this.queueMessage.update((queue) => {\n queue.splice(indexRemove, 1);\n return [...queue];\n });\n }\n }\n\n private checkQueueMessage(): void {\n if (this.queueMessage.length < this.MAX_QUEUE_MESSAGE) {\n return;\n }\n const firstQueue = this.queueMessage().shift() as INotificationQueue;\n\n clearTimeout(firstQueue.timeout);\n this.dynamicService.remove(firstQueue.component);\n this.updatePositionMessage();\n }\n\n private updatePositionMessage(): void {\n if (!this.queueMessage().length) {\n return;\n }\n clearTimeout(this.timeoutUpdatePosition());\n this.timeoutUpdatePosition.set(\n setTimeout(() => {\n let topMessage = 12;\n\n this.queueMessage().forEach((message: INotificationQueue) => {\n const firstEl = message.component.instance.elementRef.nativeElement.firstElementChild;\n const rect = firstEl.getBoundingClientRect();\n\n firstEl.style.top = `${topMessage}px`;\n topMessage += rect.height + 12;\n let right = message.config.positionRight ?? 12;\n\n if (isEmbedFrame()) {\n right = 40;\n }\n firstEl.style.right = `${right}px`;\n });\n })\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@libs-ui/services-notification",
3
- "version": "0.2.356-42",
3
+ "version": "0.2.356-43",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
6
  "rxjs": "~7.8.0",
7
7
  "@ngx-translate/core": "^15.0.0",
8
- "@libs-ui/services-dynamic-component": "0.2.356-42",
9
- "@libs-ui/utils": "0.2.356-42"
8
+ "@libs-ui/services-dynamic-component": "0.2.356-43",
9
+ "@libs-ui/utils": "0.2.356-43"
10
10
  },
11
11
  "sideEffects": false,
12
12
  "module": "fesm2022/libs-ui-services-notification.mjs",