@libs-ui/services-notification 0.2.356-9 → 0.2.357-0
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 +317 -88
- package/components/text/text.component.d.ts +1 -1
- package/esm2022/components/text/text.component.mjs +3 -3
- package/esm2022/notification.service.mjs +5 -6
- package/fesm2022/libs-ui-services-notification.mjs +7 -8
- package/fesm2022/libs-ui-services-notification.mjs.map +1 -1
- package/notification.service.d.ts +7 -7
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,17 +1,30 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @libs-ui/services-notification
|
|
2
2
|
|
|
3
|
-
Service toast notification cho Angular —
|
|
3
|
+
> Service toast notification cho Angular — hiển thị 4 kiểu thông báo (success, error, info, warn), quản lý 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 lá), `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
|
|
13
|
-
- ✅
|
|
14
|
-
- ✅
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
111
|
+
### 3. Dùng với ngx-translate key và interpolation
|
|
43
112
|
|
|
44
113
|
```typescript
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
139
|
+
### 4. Callback khi user tương tác với toast
|
|
59
140
|
|
|
60
141
|
```typescript
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
83
|
-
// Gọi notification bình thường — service tự
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
//
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
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
|
|
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseComponent implements OnInit, OnDestroy {
|
|
5
5
|
protected containerClass: import("@angular/core").WritableSignal<string>;
|
|
6
6
|
protected icon: import("@angular/core").WritableSignal<string>;
|
|
7
|
-
private elementRef;
|
|
7
|
+
private readonly elementRef;
|
|
8
8
|
constructor();
|
|
9
9
|
ngOnInit(): void;
|
|
10
10
|
protected handlerClickClose(e: Event): void;
|
|
@@ -51,10 +51,10 @@ export class LibUiServicesComponentsTextComponent extends LibUiServiceNotificati
|
|
|
51
51
|
this.removeComponent()(e);
|
|
52
52
|
}
|
|
53
53
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibUiServicesComponentsTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
54
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibUiServicesComponentsTextComponent, isStandalone: true, selector: "libs_ui-services-notification-components-text", usesInheritance: true, ngImport: i0, template: "<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)\"></i>\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
54
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibUiServicesComponentsTextComponent, isStandalone: true, selector: "libs_ui-services-notification-components-text", usesInheritance: true, ngImport: i0, template: "<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", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
55
55
|
}
|
|
56
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibUiServicesComponentsTextComponent, decorators: [{
|
|
57
57
|
type: Component,
|
|
58
|
-
args: [{ selector: 'libs_ui-services-notification-components-text', standalone: true, imports: [TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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)\"></i>\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"] }]
|
|
58
|
+
args: [{ selector: 'libs_ui-services-notification-components-text', standalone: true, imports: [TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"] }]
|
|
59
59
|
}], ctorParameters: () => [] });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ub3RpZmljYXRpb24vc3JjL2NvbXBvbmVudHMvdGV4dC90ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVcxRSxNQUFNLE9BQU8sb0NBQXFDLFNBQVEscUNBQXFDO0lBQzdGLG1CQUFtQjtJQUNULGNBQWMsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUVwQyxpQkFBaUI7SUFDQSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWpEO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsUUFBUTtRQUNOLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFFUixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztnQkFDakQsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNO1lBRVI7Z0JBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxlQUFlO0lBRUwsaUJBQWlCLENBQUMsQ0FBUTtRQUNsQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7d0dBdERVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLGdJQ2ZqRCxzNEJBNkJBLHNoQ0RqQlksZUFBZTs7NEZBR2Qsb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLCtDQUErQyxjQUc3QyxJQUFJLFdBQ1AsQ0FBQyxlQUFlLENBQUMsbUJBQ1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExpYlVpU2VydmljZU5vdGlmaWNhdGlvbkJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktc2VydmljZXMtbm90aWZpY2F0aW9uLWNvbXBvbmVudHMtdGV4dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpYlVpU2VydmljZXNDb21wb25lbnRzVGV4dENvbXBvbmVudCBleHRlbmRzIExpYlVpU2VydmljZU5vdGlmaWNhdGlvbkJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGNvbnRhaW5lckNsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgaWNvbiA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5jb25maWcoKS50eXBlKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgdGhpcy5jb250YWluZXJDbGFzcy5zZXQoJ2xpYnMtdWktdG9hc3Rfc3VjY2VzcycpO1xuICAgICAgICB0aGlzLmljb24uc2V0KCdsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLXNvbGlkJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdpbmZvJzpcbiAgICAgICAgdGhpcy5jb250YWluZXJDbGFzcy5zZXQoJ2xpYnMtdWktdG9hc3RfaW5mbycpO1xuICAgICAgICB0aGlzLmljb24uc2V0KCdsaWJzLXVpLWljb24tdG9vbHRpcC1zb2xpZCcpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB0aGlzLmNvbnRhaW5lckNsYXNzLnNldCgnbGlicy11aS10b2FzdF9lcnJvcicpO1xuICAgICAgICB0aGlzLmljb24uc2V0KCdsaWJzLXVpLWljb24tY2xvc2UtY2lyY2xlLXNvbGlkJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgdGhpcy5jb250YWluZXJDbGFzcy5zZXQoJ2xpYnMtdWktdG9hc3Rfd2FybmluZycpO1xuICAgICAgICB0aGlzLmljb24uc2V0KCdsaWJzLXVpLWljb24tYWxlcnQtdHJpYW5nbGUtc29saWQnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY29udGFpbmVyQ2xhc3Muc2V0KCdiZy1bIzZmZDEwMF0gbGlicy11aS10b2FzdF9zdWNjZXNzJyk7XG4gICAgICAgIHRoaXMuaWNvbi5zZXQoJ21vLWljbi10b2FzdF9zdWNjZXNzJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgZXZlbnROYW1lLCBjYWxsYmFjayB9ID0gdGhpcy5jb25maWcoKTtcblxuICAgIGlmICghZXZlbnROYW1lIHx8ICFjYWxsYmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckNsYXNzLnVwZGF0ZSgodmFsdWUpID0+IGAke3ZhbHVlfSBjdXJzb3ItcG9pbnRlcmApO1xuICAgIH1cbiAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSkucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpLCB0YWtlKDEpKS5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0Nsb3NlKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlbW92ZUNvbXBvbmVudCgpKGUpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibGlicy11aS10b2FzdFwiXG4gIFtjbGFzc109XCJjb250YWluZXJDbGFzcygpXCJcbiAgW3N0eWxlLnpJbmRleF09XCJjb25maWcoKS56SW5kZXggfHwgMjAwMFwiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICA8aSBjbGFzcz1cInt7IGljb24oKSB9fVwiPjwvaT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICAgIEBpZiAodGl0bGUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNW0gdGV4dC1icmVha1wiXG4gICAgICAgIFtpbm5lckh0bWxdPVwidGl0bGUoKSB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxuICAgIH1cbiAgICBAaWYgKG1lc3NhZ2UoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRleHQtYnJlYWtcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1mb250LWg1cl09XCIhdGl0bGUoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWZvbnQtaDdyXT1cInRpdGxlKClcIlxuICAgICAgICBbY2xhc3MubXQtWzRwcHhdXT1cInRpdGxlKClcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIm1lc3NhZ2UoKSB8IHRyYW5zbGF0ZTogaW50ZXJwb2xhdGVQYXJhbXMoKSB8fCB7fVwiPjwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgIDxpXG4gICAgICBjbGFzcz1cImxpYnMtdWktaWNvbi1jbG9zZSBtci0wIG1sLVs4cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tDbG9zZSgkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cImhhbmRsZXJDbGlja0Nsb3NlKCRldmVudClcIj48L2k+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -47,14 +47,13 @@ export class LibsUiNotificationService {
|
|
|
47
47
|
if (!this.systemSupportNotification()) {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
catch (error) {
|
|
50
|
+
Notification.requestPermission()
|
|
51
|
+
.then((permission) => (this.Permission = permission))
|
|
52
|
+
.catch((error) => {
|
|
54
53
|
if (error instanceof TypeError) {
|
|
55
54
|
Notification.requestPermission((permission) => (this.Permission = permission));
|
|
56
55
|
}
|
|
57
|
-
}
|
|
56
|
+
});
|
|
58
57
|
}
|
|
59
58
|
set Permission(permission) {
|
|
60
59
|
this.notificationPermission.set(permission);
|
|
@@ -188,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
188
187
|
providedIn: 'root',
|
|
189
188
|
}]
|
|
190
189
|
}], ctorParameters: () => [] });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTXBFLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsbUJBQW1CO0lBQ1gsc0JBQXNCLEdBQUcsTUFBTSxDQUF5QixTQUFTLENBQUMsQ0FBQztJQUNuRSxZQUFZLEdBQUcsTUFBTSxDQUE0QixJQUFJLEtBQUssRUFBc0IsQ0FBQyxDQUFDO0lBQ2xGLHFCQUFxQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqQyxpQkFBaUIsR0FBVyxDQUFDLENBQUM7SUFDdkMsTUFBTSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoQyx1QkFBdUIsR0FBRyxNQUFNLENBQVMsb0NBQW9DLENBQUMsQ0FBQztJQUV2RixpQkFBaUI7SUFDVCxjQUFjLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDdkQsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFcEQ7UUFDRSxJQUFJLENB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QUMsaUJBQWlCLENBQUM7Z0JBQ3RGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUU3QyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDO2dCQUN0QyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQy9CLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFFL0MsSUFBSSxZQUFZLEVBQUUsRUFBRSxDQUFDO29CQUNuQixLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNiLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3dHQTdNVSx5QkFBeUI7NEdBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzs0RkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlsc0NvbW11bmljYXRlTWljcm8sIGVuY3J5cHQsIGVzY2FwZUh0bWwsIGdldCwgaXNFbWJlZEZyYW1lIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGliVWlTZXJ2aWNlc0NvbXBvbmVudHNUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IElOb3RpZmljYXRpb25QdXNoRnJvbUlGcmFtZSwgSU5vdGlmaWNhdGlvblF1ZXVlLCBJTm90aWZpY2F0aW9uVGV4dENvbmZpZywgSU5vdGlmaWNhdGlvblRleHRQdWJsaWNDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvbm90aWZpY2F0aW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2Uge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgbm90aWZpY2F0aW9uUGVybWlzc2lvbiA9IHNpZ25hbDxOb3RpZmljYXRpb25QZXJtaXNzaW9uPignZGVmYXVsdCcpO1xuICBwcml2YXRlIHF1ZXVlTWVzc2FnZSA9IHNpZ25hbDxBcnJheTxJTm90aWZpY2F0aW9uUXVldWU+PihuZXcgQXJyYXk8SU5vdGlmaWNhdGlvblF1ZXVlPigpKTtcbiAgcHJpdmF0ZSB0aW1lb3V0VXBkYXRlUG9zaXRpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUVVFVUVfTUVTU0FHRTogbnVtYmVyID0gNTtcbiAgcHJpdmF0ZSBpc0luaXQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIG1lc3NhZ2VOYW1lUG9zdFRvUGFyZW50ID0gc2lnbmFsPHN0cmluZz4oJ01JQ1JPX1NJVEVfUFVTSF9NRVNTQUdFX0ZST01fQ0hJTEQnKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGR5bmFtaWNTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUGVybWlzc2lvbi5zZXQodGhpcy5zeXN0ZW1TdXBwb3J0Tm90aWZpY2F0aW9uKCkgPyAnZGVmYXVsdCcgOiAnZGVuaWVkJyk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHVibGljIGluaXQobWVzc2FnZU5hbWVIYW5kbGVyOiBBcnJheTxzdHJpbmc+LCBtZXNzYWdlTmFtZVBvc3RUb1BhcmVudD86IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzSW5pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNJbml0LnNldCh0cnVlKTtcbiAgICBpZiAobWVzc2FnZU5hbWVQb3N0VG9QYXJlbnQpIHtcbiAgICAgIHRoaXMubWVzc2FnZU5hbWVQb3N0VG9QYXJlbnQuc2V0KG1lc3NhZ2VOYW1lUG9zdFRvUGFyZW50KTtcbiAgICB9XG4gICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLkdldE1lc3NhZ2UobWVzc2FnZU5hbWVIYW5kbGVyKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgIGlmICghaXNFbWJlZEZyYW1lKCkpIHtcbiAgICAgICAgY29uc3QgZGF0YU1lc3NhZ2UgPSBlLmRhdGEucmVzcG9uc2UgYXMgSU5vdGlmaWNhdGlvblB1c2hGcm9tSUZyYW1lO1xuXG4gICAgICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChkYXRhTWVzc2FnZS5tZXNzYWdlLCB1bmRlZmluZWQsIGRhdGFNZXNzYWdlLnRpdGxlLCB7IHR5cGU6IGRhdGFNZXNzYWdlLmZ1bmN0aW9uTmFtZSwgdGltZVJlbW92ZTogZGF0YU1lc3NhZ2UudGltZVJlbW92ZSB8fCAyMDAwIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGUuZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0ZVNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZTtcbiAgfVxuXG4gIHByaXZhdGUgc3lzdGVtU3VwcG9ydE5vdGlmaWNhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ05vdGlmaWNhdGlvbicgaW4gd2luZG93O1xuICB9XG5cbiAgcHVibGljIHN5c3RlbVJlcXVlc3RQZXJtaXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5zeXN0ZW1TdXBwb3J0Tm90aWZpY2F0aW9uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oKHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb24pID0+ICh0aGlzLlBlcm1pc3Npb24gPSBwZXJtaXNzaW9uKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb24pID0+ICh0aGlzLlBlcm1pc3Npb24gPSBwZXJtaXNzaW9uKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXQgUGVybWlzc2lvbihwZXJtaXNzaW9uOiBOb3RpZmljYXRpb25QZXJtaXNzaW9uKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25QZXJtaXNzaW9uLnNldChwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzeXN0ZW1TcGF3bk5vdGlmaWNhdGlvbih0aXRsZTogc3RyaW5nLCBvcHRpb25zPzogTm90aWZpY2F0aW9uT3B0aW9ucyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc3lzdGVtU3VwcG9ydE5vdGlmaWNhdGlvbigpKSB7XG4gICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm90aWZpY2F0aW9uUGVybWlzc2lvbigpICE9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBub3RpZnkgPSBuZXcgTm90aWZpY2F0aW9uKHRpdGxlLCBvcHRpb25zKTtcblxuICAgICAgbm90aWZ5Lm9uc2hvdyA9IChlKSA9PiB7XG4gICAgICAgIHJldHVybiBvYnMubmV4dCh7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgbm90aWZ5LmNsb3NlKCk7XG4gICAgICAgIHdpbmRvdy5mb2N1cygpO1xuXG4gICAgICAgIHJldHVybiBvYnMubmV4dCh7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgICAgcmV0dXJuIG9icy5lcnJvcih7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDb21wVHlwZVRleHRTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgY29uZmlnPzogSU5vdGlmaWNhdGlvblRleHRQdWJsaWNDb25maWcpIHtcbiAgICB0aGlzLnNob3dDb21wVHlwZVRleHQobWVzc2FnZSwgY29uZmlnPy5pbnRlcnBvbGF0ZVBhcmFtcywgY29uZmlnPy50aXRsZSwgeyB0eXBlOiAnc3VjY2VzcycsIHRpbWVSZW1vdmU6IGNvbmZpZz8udGltZVJlbW92ZSB8fCAzMDAwLCBwb3NpdGlvblJpZ2h0OiBjb25maWc/LnBvc2l0aW9uUmlnaHQsIGV2ZW50TmFtZTogY29uZmlnPy5ldmVudE5hbWUsIGNhbGxiYWNrOiBjb25maWc/LmNhbGxiYWNrIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDb21wVHlwZVRleHRFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZz86IElOb3RpZmljYXRpb25UZXh0UHVibGljQ29uZmlnKSB7XG4gICAgdGhpcy5zaG93Q29tcFR5cGVUZXh0KG1lc3NhZ2UsIGNvbmZpZz8uaW50ZXJwb2xhdGVQYXJhbXMsIGNvbmZpZz8udGl0bGUsIHsgdHlwZTogJ2Vycm9yJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvbXBUeXBlVGV4dEluZm8obWVzc2FnZTogc3RyaW5nLCBjb25maWc/OiBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZykge1xuICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChtZXNzYWdlLCBjb25maWc/LmludGVycG9sYXRlUGFyYW1zLCBjb25maWc/LnRpdGxlLCB7IHR5cGU6ICdpbmZvJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvbXBUeXBlVGV4dFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBjb25maWc/OiBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZykge1xuICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChtZXNzYWdlLCBjb25maWc/LmludGVycG9sYXRlUGFyYW1zLCBjb25maWc/LnRpdGxlLCB7IHR5cGU6ICd3YXJuJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dDb21wVHlwZVRleHQobWVzc2FnZTogc3RyaW5nLCBpbnRlcnBvbGF0ZVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB0aXRsZT86IHN0cmluZywgY29uZmlnOiBJTm90aWZpY2F0aW9uVGV4dENvbmZpZyA9IHsgdHlwZTogJ3N1Y2Nlc3MnLCB0aW1lUmVtb3ZlOiAyMDAwIH0pOiB2b2lkIHtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrUXVldWVNZXNzYWdlKCk7XG4gICAgaWYgKGludGVycG9sYXRlUGFyYW1zICYmIHR5cGVvZiBpbnRlcnBvbGF0ZVBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGludGVycG9sYXRlUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaW50ZXJwb2xhdGVQYXJhbXNba2V5XSA9IGVzY2FwZUh0bWwoZ2V0KGludGVycG9sYXRlUGFyYW1zLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0VtYmVkRnJhbWUoKSkge1xuICAgICAgY29uc3QgbWVzc2FnZVRyYW5zbGF0ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UsIGludGVycG9sYXRlUGFyYW1zKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB0aXRsZVRyYW5zbGF0ZSA9IHRpdGxlPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aXRsZSwgaW50ZXJwb2xhdGVQYXJhbXMpIDogdGl0bGU7XG5cbiAgICAgIHJldHVybiBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudCh7IHR5cGU6IHRoaXMubWVzc2FnZU5hbWVQb3N0VG9QYXJlbnQoKSwgcmVzcG9uc2U6IGVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoeyBmdW5jdGlvbk5hbWU6IGNvbmZpZy50eXBlLCBtZXNzYWdlOiBtZXNzYWdlVHJhbnNsYXRlLCB0aXRsZVRyYW5zbGF0ZSwgdGltZVJlbW92ZTogY29uZmlnLnRpbWVSZW1vdmUgfHwgMjAwMCB9KSkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZHluYW1pY1NlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGliVWlTZXJ2aWNlc0NvbXBvbmVudHNUZXh0Q29tcG9uZW50KTtcblxuICAgIGNvbXBvbmVudC5zZXRJbnB1dCgndGl0bGUnLCB0aXRsZSk7XG4gICAgY29tcG9uZW50LnNldElucHV0KCdtZXNzYWdlJywgbWVzc2FnZSk7XG4gICAgY29tcG9uZW50LnNldElucHV0KCdpbnRlcnBvbGF0ZVBhcmFtcycsIGludGVycG9sYXRlUGFyYW1zKTtcbiAgICBjb21wb25lbnQuc2V0SW5wdXQoJ2NvbmZpZycsIGNvbmZpZyk7XG4gICAgY29tcG9uZW50LnNldElucHV0KCdyZW1vdmVDb21wb25lbnQnLCB0aGlzLnJlbW92ZUNvbXBvbmVudC5iaW5kKHRoaXMsIGNvbXBvbmVudCkpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlQ29tcG9uZW50KGNvbXBvbmVudCk7XG4gICAgfSwgY29uZmlnPy50aW1lUmVtb3ZlKTtcblxuICAgIHRoaXMucXVldWVNZXNzYWdlLnVwZGF0ZSgocXVldWUpID0+IHtcbiAgICAgIHF1ZXVlLnB1c2goe1xuICAgICAgICBjb21wb25lbnQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdGltZW91dCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gWy4uLnF1ZXVlXTtcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtaWNTZXJ2aWNlLmFkZFRvQm9keShjb21wb25lbnQpO1xuICAgIHRoaXMudXBkYXRlUG9zaXRpb25NZXNzYWdlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFJlZjx1bmtub3duPikge1xuICAgIHRoaXMuZHluYW1pY1NlcnZpY2UucmVtb3ZlKGNvbXBvbmVudCk7XG4gICAgY29uc3QgaW5kZXhSZW1vdmUgPSB0aGlzLnF1ZXVlTWVzc2FnZSgpLmZpbmRJbmRleCgoY29uZmlnKSA9PiBjb25maWcuY29tcG9uZW50ID09PSBjb21wb25lbnQpO1xuXG4gICAgaWYgKGluZGV4UmVtb3ZlICE9PSAtMSkge1xuICAgICAgdGhpcy5xdWV1ZU1lc3NhZ2UudXBkYXRlKChxdWV1ZSkgPT4ge1xuICAgICAgICBxdWV1ZS5zcGxpY2UoaW5kZXhSZW1vdmUsIDEpO1xuICAgICAgICByZXR1cm4gWy4uLnF1ZXVlXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tRdWV1ZU1lc3NhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVldWVNZXNzYWdlLmxlbmd0aCA8IHRoaXMuTUFYX1FVRVVFX01FU1NBR0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RRdWV1ZSA9IHRoaXMucXVldWVNZXNzYWdlKCkuc2hpZnQoKSBhcyBJTm90aWZpY2F0aW9uUXVldWU7XG5cbiAgICBjbGVhclRpbWVvdXQoZmlyc3RRdWV1ZS50aW1lb3V0KTtcbiAgICB0aGlzLmR5bmFtaWNTZXJ2aWNlLnJlbW92ZShmaXJzdFF1ZXVlLmNvbXBvbmVudCk7XG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbk1lc3NhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25NZXNzYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5xdWV1ZU1lc3NhZ2UoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFVwZGF0ZVBvc2l0aW9uKCkpO1xuICAgIHRoaXMudGltZW91dFVwZGF0ZVBvc2l0aW9uLnNldChcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsZXQgdG9wTWVzc2FnZSA9IDEyO1xuXG4gICAgICAgIHRoaXMucXVldWVNZXNzYWdlKCkuZm9yRWFjaCgobWVzc2FnZTogSU5vdGlmaWNhdGlvblF1ZXVlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlyc3RFbCA9IG1lc3NhZ2UuY29tcG9uZW50Lmluc3RhbmNlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICBjb25zdCByZWN0ID0gZmlyc3RFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgIGZpcnN0RWwuc3R5bGUudG9wID0gYCR7dG9wTWVzc2FnZX1weGA7XG4gICAgICAgICAgdG9wTWVzc2FnZSArPSByZWN0LmhlaWdodCArIDEyO1xuICAgICAgICAgIGxldCByaWdodCA9IG1lc3NhZ2UuY29uZmlnLnBvc2l0aW9uUmlnaHQgPz8gMTI7XG5cbiAgICAgICAgICBpZiAoaXNFbWJlZEZyYW1lKCkpIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gNDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpcnN0RWwuc3R5bGUucmlnaHQgPSBgJHtyaWdodH1weGA7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9zcmMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTXBFLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsbUJBQW1CO0lBQ0Ysc0JBQXNCLEdBQUcsTUFBTSxDQUF5QixTQUFTLENBQUMsQ0FBQztJQUNuRSxZQUFZLEdBQUcsTUFBTSxDQUE0QixJQUFJLEtBQUssRUFBc0IsQ0FBQyxDQUFDO0lBQ2xGLHFCQUFxQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMxQyxpQkFBaUIsR0FBVyxDQUFDLENBQUM7SUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoQyx1QkFBdUIsR0FBRyxNQUFNLENBQVMsb0NBQW9DLENBQUMsQ0FBQztJQUVoRyxpQkFBaUI7SUFDQSxjQUFjLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDdkQsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFN0Q7UUFDRSxJQUFJLENB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QixDQUFDO2dCQUN0RixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFFN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxVQUFVLElBQUksQ0FBQztnQkFDdEMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7Z0JBRS9DLElBQUksWUFBWSxFQUFFLEVBQUUsQ0FBQztvQkFDbkIsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDYixDQUFDO2dCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt3R0E3TVUseUJBQXlCOzRHQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs7NEZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLCBlbmNyeXB0LCBlc2NhcGVIdG1sLCBnZXQsIGlzRW1iZWRGcmFtZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExpYlVpU2VydmljZXNDb21wb25lbnRzVGV4dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJTm90aWZpY2F0aW9uUHVzaEZyb21JRnJhbWUsIElOb3RpZmljYXRpb25RdWV1ZSwgSU5vdGlmaWNhdGlvblRleHRDb25maWcsIElOb3RpZmljYXRpb25UZXh0UHVibGljQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL25vdGlmaWNhdGlvbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlIHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvblBlcm1pc3Npb24gPSBzaWduYWw8Tm90aWZpY2F0aW9uUGVybWlzc2lvbj4oJ2RlZmF1bHQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBxdWV1ZU1lc3NhZ2UgPSBzaWduYWw8QXJyYXk8SU5vdGlmaWNhdGlvblF1ZXVlPj4obmV3IEFycmF5PElOb3RpZmljYXRpb25RdWV1ZT4oKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dFVwZGF0ZVBvc2l0aW9uID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1FVRVVFX01FU1NBR0U6IG51bWJlciA9IDU7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNJbml0ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlTmFtZVBvc3RUb1BhcmVudCA9IHNpZ25hbDxzdHJpbmc+KCdNSUNST19TSVRFX1BVU0hfTUVTU0FHRV9GUk9NX0NISUxEJyk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljU2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblBlcm1pc3Npb24uc2V0KHRoaXMuc3lzdGVtU3VwcG9ydE5vdGlmaWNhdGlvbigpID8gJ2RlZmF1bHQnIDogJ2RlbmllZCcpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHB1YmxpYyBpbml0KG1lc3NhZ2VOYW1lSGFuZGxlcjogQXJyYXk8c3RyaW5nPiwgbWVzc2FnZU5hbWVQb3N0VG9QYXJlbnQ/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0luaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzSW5pdC5zZXQodHJ1ZSk7XG4gICAgaWYgKG1lc3NhZ2VOYW1lUG9zdFRvUGFyZW50KSB7XG4gICAgICB0aGlzLm1lc3NhZ2VOYW1lUG9zdFRvUGFyZW50LnNldChtZXNzYWdlTmFtZVBvc3RUb1BhcmVudCk7XG4gICAgfVxuICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5HZXRNZXNzYWdlKG1lc3NhZ2VOYW1lSGFuZGxlcikuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICBpZiAoIWlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICAgIGNvbnN0IGRhdGFNZXNzYWdlID0gZS5kYXRhLnJlc3BvbnNlIGFzIElOb3RpZmljYXRpb25QdXNoRnJvbUlGcmFtZTtcblxuICAgICAgICB0aGlzLnNob3dDb21wVHlwZVRleHQoZGF0YU1lc3NhZ2UubWVzc2FnZSwgdW5kZWZpbmVkLCBkYXRhTWVzc2FnZS50aXRsZSwgeyB0eXBlOiBkYXRhTWVzc2FnZS5mdW5jdGlvbk5hbWUsIHRpbWVSZW1vdmU6IGRhdGFNZXNzYWdlLnRpbWVSZW1vdmUgfHwgMjAwMCB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChlLmRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBUcmFuc2xhdGVTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XG4gIH1cblxuICBwcml2YXRlIHN5c3RlbVN1cHBvcnROb3RpZmljYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICdOb3RpZmljYXRpb24nIGluIHdpbmRvdztcbiAgfVxuXG4gIHB1YmxpYyBzeXN0ZW1SZXF1ZXN0UGVybWlzc2lvbigpIHtcbiAgICBpZiAoIXRoaXMuc3lzdGVtU3VwcG9ydE5vdGlmaWNhdGlvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpXG4gICAgICAudGhlbigocGVybWlzc2lvbjogTm90aWZpY2F0aW9uUGVybWlzc2lvbikgPT4gKHRoaXMuUGVybWlzc2lvbiA9IHBlcm1pc3Npb24pKVxuICAgICAgLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgICBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb24pID0+ICh0aGlzLlBlcm1pc3Npb24gPSBwZXJtaXNzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgUGVybWlzc2lvbihwZXJtaXNzaW9uOiBOb3RpZmljYXRpb25QZXJtaXNzaW9uKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25QZXJtaXNzaW9uLnNldChwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzeXN0ZW1TcGF3bk5vdGlmaWNhdGlvbih0aXRsZTogc3RyaW5nLCBvcHRpb25zPzogTm90aWZpY2F0aW9uT3B0aW9ucyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc3lzdGVtU3VwcG9ydE5vdGlmaWNhdGlvbigpKSB7XG4gICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm90aWZpY2F0aW9uUGVybWlzc2lvbigpICE9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBub3RpZnkgPSBuZXcgTm90aWZpY2F0aW9uKHRpdGxlLCBvcHRpb25zKTtcblxuICAgICAgbm90aWZ5Lm9uc2hvdyA9IChlKSA9PiB7XG4gICAgICAgIHJldHVybiBvYnMubmV4dCh7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgbm90aWZ5LmNsb3NlKCk7XG4gICAgICAgIHdpbmRvdy5mb2N1cygpO1xuXG4gICAgICAgIHJldHVybiBvYnMubmV4dCh7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgICAgcmV0dXJuIG9icy5lcnJvcih7XG4gICAgICAgICAgbm90aWZpY2F0aW9uOiBub3RpZnksXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIG5vdGlmeS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDb21wVHlwZVRleHRTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgY29uZmlnPzogSU5vdGlmaWNhdGlvblRleHRQdWJsaWNDb25maWcpIHtcbiAgICB0aGlzLnNob3dDb21wVHlwZVRleHQobWVzc2FnZSwgY29uZmlnPy5pbnRlcnBvbGF0ZVBhcmFtcywgY29uZmlnPy50aXRsZSwgeyB0eXBlOiAnc3VjY2VzcycsIHRpbWVSZW1vdmU6IGNvbmZpZz8udGltZVJlbW92ZSB8fCAzMDAwLCBwb3NpdGlvblJpZ2h0OiBjb25maWc/LnBvc2l0aW9uUmlnaHQsIGV2ZW50TmFtZTogY29uZmlnPy5ldmVudE5hbWUsIGNhbGxiYWNrOiBjb25maWc/LmNhbGxiYWNrIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDb21wVHlwZVRleHRFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZz86IElOb3RpZmljYXRpb25UZXh0UHVibGljQ29uZmlnKSB7XG4gICAgdGhpcy5zaG93Q29tcFR5cGVUZXh0KG1lc3NhZ2UsIGNvbmZpZz8uaW50ZXJwb2xhdGVQYXJhbXMsIGNvbmZpZz8udGl0bGUsIHsgdHlwZTogJ2Vycm9yJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvbXBUeXBlVGV4dEluZm8obWVzc2FnZTogc3RyaW5nLCBjb25maWc/OiBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZykge1xuICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChtZXNzYWdlLCBjb25maWc/LmludGVycG9sYXRlUGFyYW1zLCBjb25maWc/LnRpdGxlLCB7IHR5cGU6ICdpbmZvJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvbXBUeXBlVGV4dFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBjb25maWc/OiBJTm90aWZpY2F0aW9uVGV4dFB1YmxpY0NvbmZpZykge1xuICAgIHRoaXMuc2hvd0NvbXBUeXBlVGV4dChtZXNzYWdlLCBjb25maWc/LmludGVycG9sYXRlUGFyYW1zLCBjb25maWc/LnRpdGxlLCB7IHR5cGU6ICd3YXJuJywgdGltZVJlbW92ZTogY29uZmlnPy50aW1lUmVtb3ZlIHx8IDMwMDAsIHBvc2l0aW9uUmlnaHQ6IGNvbmZpZz8ucG9zaXRpb25SaWdodCwgZXZlbnROYW1lOiBjb25maWc/LmV2ZW50TmFtZSwgY2FsbGJhY2s6IGNvbmZpZz8uY2FsbGJhY2sgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dDb21wVHlwZVRleHQobWVzc2FnZTogc3RyaW5nLCBpbnRlcnBvbGF0ZVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB0aXRsZT86IHN0cmluZywgY29uZmlnOiBJTm90aWZpY2F0aW9uVGV4dENvbmZpZyA9IHsgdHlwZTogJ3N1Y2Nlc3MnLCB0aW1lUmVtb3ZlOiAyMDAwIH0pOiB2b2lkIHtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrUXVldWVNZXNzYWdlKCk7XG4gICAgaWYgKGludGVycG9sYXRlUGFyYW1zICYmIHR5cGVvZiBpbnRlcnBvbGF0ZVBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGludGVycG9sYXRlUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaW50ZXJwb2xhdGVQYXJhbXNba2V5XSA9IGVzY2FwZUh0bWwoZ2V0KGludGVycG9sYXRlUGFyYW1zLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0VtYmVkRnJhbWUoKSkge1xuICAgICAgY29uc3QgbWVzc2FnZVRyYW5zbGF0ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UsIGludGVycG9sYXRlUGFyYW1zKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB0aXRsZVRyYW5zbGF0ZSA9IHRpdGxlID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGl0bGUsIGludGVycG9sYXRlUGFyYW1zKSA6IHRpdGxlO1xuXG4gICAgICByZXR1cm4gVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoeyB0eXBlOiB0aGlzLm1lc3NhZ2VOYW1lUG9zdFRvUGFyZW50KCksIHJlc3BvbnNlOiBlbmNyeXB0KEpTT04uc3RyaW5naWZ5KHsgZnVuY3Rpb25OYW1lOiBjb25maWcudHlwZSwgbWVzc2FnZTogbWVzc2FnZVRyYW5zbGF0ZSwgdGl0bGVUcmFuc2xhdGUsIHRpbWVSZW1vdmU6IGNvbmZpZy50aW1lUmVtb3ZlIHx8IDIwMDAgfSkpIH0pO1xuICAgIH1cbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmR5bmFtaWNTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYlVpU2VydmljZXNDb21wb25lbnRzVGV4dENvbXBvbmVudCk7XG5cbiAgICBjb21wb25lbnQuc2V0SW5wdXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgIGNvbXBvbmVudC5zZXRJbnB1dCgnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGNvbXBvbmVudC5zZXRJbnB1dCgnaW50ZXJwb2xhdGVQYXJhbXMnLCBpbnRlcnBvbGF0ZVBhcmFtcyk7XG4gICAgY29tcG9uZW50LnNldElucHV0KCdjb25maWcnLCBjb25maWcpO1xuICAgIGNvbXBvbmVudC5zZXRJbnB1dCgncmVtb3ZlQ29tcG9uZW50JywgdGhpcy5yZW1vdmVDb21wb25lbnQuYmluZCh0aGlzLCBjb21wb25lbnQpKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgIH0sIGNvbmZpZz8udGltZVJlbW92ZSk7XG5cbiAgICB0aGlzLnF1ZXVlTWVzc2FnZS51cGRhdGUoKHF1ZXVlKSA9PiB7XG4gICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRpbWVvdXQsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFsuLi5xdWV1ZV07XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljU2VydmljZS5hZGRUb0JvZHkoY29tcG9uZW50KTtcbiAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uTWVzc2FnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4pIHtcbiAgICB0aGlzLmR5bmFtaWNTZXJ2aWNlLnJlbW92ZShjb21wb25lbnQpO1xuICAgIGNvbnN0IGluZGV4UmVtb3ZlID0gdGhpcy5xdWV1ZU1lc3NhZ2UoKS5maW5kSW5kZXgoKGNvbmZpZykgPT4gY29uZmlnLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KTtcblxuICAgIGlmIChpbmRleFJlbW92ZSAhPT0gLTEpIHtcbiAgICAgIHRoaXMucXVldWVNZXNzYWdlLnVwZGF0ZSgocXVldWUpID0+IHtcbiAgICAgICAgcXVldWUuc3BsaWNlKGluZGV4UmVtb3ZlLCAxKTtcbiAgICAgICAgcmV0dXJuIFsuLi5xdWV1ZV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUXVldWVNZXNzYWdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXVlTWVzc2FnZS5sZW5ndGggPCB0aGlzLk1BWF9RVUVVRV9NRVNTQUdFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0UXVldWUgPSB0aGlzLnF1ZXVlTWVzc2FnZSgpLnNoaWZ0KCkgYXMgSU5vdGlmaWNhdGlvblF1ZXVlO1xuXG4gICAgY2xlYXJUaW1lb3V0KGZpcnN0UXVldWUudGltZW91dCk7XG4gICAgdGhpcy5keW5hbWljU2VydmljZS5yZW1vdmUoZmlyc3RRdWV1ZS5jb21wb25lbnQpO1xuICAgIHRoaXMudXBkYXRlUG9zaXRpb25NZXNzYWdlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uTWVzc2FnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucXVldWVNZXNzYWdlKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRVcGRhdGVQb3NpdGlvbigpKTtcbiAgICB0aGlzLnRpbWVvdXRVcGRhdGVQb3NpdGlvbi5zZXQoXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbGV0IHRvcE1lc3NhZ2UgPSAxMjtcblxuICAgICAgICB0aGlzLnF1ZXVlTWVzc2FnZSgpLmZvckVhY2goKG1lc3NhZ2U6IElOb3RpZmljYXRpb25RdWV1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSBtZXNzYWdlLmNvbXBvbmVudC5pbnN0YW5jZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgY29uc3QgcmVjdCA9IGZpcnN0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICBmaXJzdEVsLnN0eWxlLnRvcCA9IGAke3RvcE1lc3NhZ2V9cHhgO1xuICAgICAgICAgIHRvcE1lc3NhZ2UgKz0gcmVjdC5oZWlnaHQgKyAxMjtcbiAgICAgICAgICBsZXQgcmlnaHQgPSBtZXNzYWdlLmNvbmZpZy5wb3NpdGlvblJpZ2h0ID8/IDEyO1xuXG4gICAgICAgICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICAgICAgICByaWdodCA9IDQwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJzdEVsLnN0eWxlLnJpZ2h0ID0gYCR7cmlnaHR9cHhgO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, Directive, signal, inject, ElementRef,
|
|
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';
|
|
@@ -73,11 +73,11 @@ class LibUiServicesComponentsTextComponent extends LibUiServiceNotificationBaseC
|
|
|
73
73
|
this.removeComponent()(e);
|
|
74
74
|
}
|
|
75
75
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibUiServicesComponentsTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibUiServicesComponentsTextComponent, isStandalone: true, selector: "libs_ui-services-notification-components-text", usesInheritance: true, ngImport: i0, template: "<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)\"></i>\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
76
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibUiServicesComponentsTextComponent, isStandalone: true, selector: "libs_ui-services-notification-components-text", usesInheritance: true, ngImport: i0, template: "<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", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
77
77
|
}
|
|
78
78
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibUiServicesComponentsTextComponent, decorators: [{
|
|
79
79
|
type: Component,
|
|
80
|
-
args: [{ selector: 'libs_ui-services-notification-components-text', standalone: true, imports: [TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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)\"></i>\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"] }]
|
|
80
|
+
args: [{ selector: 'libs_ui-services-notification-components-text', standalone: true, imports: [TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["@-webkit-keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-move{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}.libs-ui-toast{position:fixed;padding:12px 16px;display:flex;width:300px;flex-shrink:0;border-radius:8px;animation:animation-move .3s linear}.libs-ui-toast [class*=libs-ui-icon]{font-size:16px;margin-right:16px}.libs-ui-toast.libs-ui-toast_success{background-color:#e6faf0;color:#00bc62}.libs-ui-toast.libs-ui-toast_success [class*=libs-ui-icon]:before{color:#00bc62}.libs-ui-toast.libs-ui-toast_warning{background-color:#feeee6;color:#f05800}.libs-ui-toast.libs-ui-toast_warning [class*=libs-ui-icon]:before{color:#f05800}.libs-ui-toast.libs-ui-toast_error{background-color:#fdeaec;color:#ee2d41}.libs-ui-toast.libs-ui-toast_error [class*=libs-ui-icon]:before{color:#ee2d41}.libs-ui-toast.libs-ui-toast_info{background-color:#e9f1fe;color:#226ff5}.libs-ui-toast.libs-ui-toast_info [class*=libs-ui-icon]:before{color:#226ff5}\n"] }]
|
|
81
81
|
}], ctorParameters: () => [] });
|
|
82
82
|
|
|
83
83
|
class LibsUiNotificationService {
|
|
@@ -122,14 +122,13 @@ class LibsUiNotificationService {
|
|
|
122
122
|
if (!this.systemSupportNotification()) {
|
|
123
123
|
return;
|
|
124
124
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
catch (error) {
|
|
125
|
+
Notification.requestPermission()
|
|
126
|
+
.then((permission) => (this.Permission = permission))
|
|
127
|
+
.catch((error) => {
|
|
129
128
|
if (error instanceof TypeError) {
|
|
130
129
|
Notification.requestPermission((permission) => (this.Permission = permission));
|
|
131
130
|
}
|
|
132
|
-
}
|
|
131
|
+
});
|
|
133
132
|
}
|
|
134
133
|
set Permission(permission) {
|
|
135
134
|
this.notificationPermission.set(permission);
|
|
@@ -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 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)\"></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 notificationPermission = signal<NotificationPermission>('default');\n private queueMessage = signal<Array<INotificationQueue>>(new Array<INotificationQueue>());\n private timeoutUpdatePosition = signal<number>(0);\n private readonly MAX_QUEUE_MESSAGE: number = 5;\n private isInit = signal<boolean>(false);\n private messageNamePostToParent = signal<string>('MICRO_SITE_PUSH_MESSAGE_FROM_CHILD');\n\n // #region INJECT\n private dynamicService = inject(LibsUiDynamicComponentService);\n private 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 try {\n Notification.requestPermission().then((permission: NotificationPermission) => (this.Permission = permission));\n } catch (error) {\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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"}
|
|
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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"}
|
|
@@ -3,14 +3,14 @@ import { Observable } from 'rxjs';
|
|
|
3
3
|
import { INotificationTextPublicConfig } from './interfaces/notification';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class LibsUiNotificationService {
|
|
6
|
-
private notificationPermission;
|
|
7
|
-
private queueMessage;
|
|
8
|
-
private timeoutUpdatePosition;
|
|
6
|
+
private readonly notificationPermission;
|
|
7
|
+
private readonly queueMessage;
|
|
8
|
+
private readonly timeoutUpdatePosition;
|
|
9
9
|
private readonly MAX_QUEUE_MESSAGE;
|
|
10
|
-
private isInit;
|
|
11
|
-
private messageNamePostToParent;
|
|
12
|
-
private dynamicService;
|
|
13
|
-
private translateService;
|
|
10
|
+
private readonly isInit;
|
|
11
|
+
private readonly messageNamePostToParent;
|
|
12
|
+
private readonly dynamicService;
|
|
13
|
+
private readonly translateService;
|
|
14
14
|
constructor();
|
|
15
15
|
init(messageNameHandler: Array<string>, messageNamePostToParent?: string): void;
|
|
16
16
|
get TranslateService(): TranslateService;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/services-notification",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.357-0",
|
|
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.
|
|
9
|
-
"@libs-ui/utils": "0.2.
|
|
8
|
+
"@libs-ui/services-dynamic-component": "0.2.357-0",
|
|
9
|
+
"@libs-ui/utils": "0.2.357-0"
|
|
10
10
|
},
|
|
11
11
|
"sideEffects": false,
|
|
12
12
|
"module": "fesm2022/libs-ui-services-notification.mjs",
|