@libs-ui/components-avatar 0.2.306 → 0.2.307-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 +40 -39
- package/esm2022/avatar.component.mjs +9 -7
- package/esm2022/index.mjs +1 -1
- package/esm2022/interfaces/avatar.interface.mjs +1 -1
- package/esm2022/interfaces/index.mjs +1 -1
- package/fesm2022/libs-ui-components-avatar.mjs +8 -6
- package/fesm2022/libs-ui-components-avatar.mjs.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -53,9 +53,8 @@ import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
|
53
53
|
[linkAvatar]="'https://example.com/avatar.jpg'"
|
|
54
54
|
[textAvatar]="'Nguyễn Văn A'"
|
|
55
55
|
[idGenColor]="'user-123'"
|
|
56
|
-
[size]="40">
|
|
57
|
-
|
|
58
|
-
`
|
|
56
|
+
[size]="40"></libs_ui-components-avatar>
|
|
57
|
+
`,
|
|
59
58
|
})
|
|
60
59
|
export class ExampleComponent {
|
|
61
60
|
// Component logic
|
|
@@ -73,7 +72,7 @@ import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
|
73
72
|
selector: 'app-example',
|
|
74
73
|
standalone: true,
|
|
75
74
|
imports: [LibsUiComponentsAvatarComponent],
|
|
76
|
-
templateUrl: './example.component.html'
|
|
75
|
+
templateUrl: './example.component.html',
|
|
77
76
|
})
|
|
78
77
|
export class ExampleComponent {
|
|
79
78
|
// Component logic
|
|
@@ -88,8 +87,7 @@ export class ExampleComponent {
|
|
|
88
87
|
[textAvatar]="'Nguyễn Văn A'"
|
|
89
88
|
[idGenColor]="'user-123'"
|
|
90
89
|
[size]="40"
|
|
91
|
-
[typeShape]="'circle'">
|
|
92
|
-
</libs_ui-components-avatar>
|
|
90
|
+
[typeShape]="'circle'"></libs_ui-components-avatar>
|
|
93
91
|
```
|
|
94
92
|
|
|
95
93
|
## Công nghệ sử dụng
|
|
@@ -101,28 +99,29 @@ export class ExampleComponent {
|
|
|
101
99
|
|
|
102
100
|
### Inputs
|
|
103
101
|
|
|
104
|
-
| Tên
|
|
105
|
-
|
|
106
|
-
| linkAvatar
|
|
107
|
-
| linkAvatarError
|
|
108
|
-
| textAvatar
|
|
109
|
-
| idGenColor
|
|
110
|
-
| size
|
|
111
|
-
| typeShape
|
|
112
|
-
| classInclude
|
|
113
|
-
| classImageInclude
|
|
114
|
-
| getLastTextAfterSpace | `boolean`
|
|
115
|
-
| clickPreviewImage
|
|
102
|
+
| Tên | Kiểu dữ liệu | Mặc định | Mô tả |
|
|
103
|
+
| --------------------- | ---------------------------------- | ------------ | ---------------------------------------------------------------------- |
|
|
104
|
+
| linkAvatar | `string` | - | Đường dẫn của hình ảnh avatar |
|
|
105
|
+
| linkAvatarError | `string` | - | Đường dẫn của hình ảnh thay thế khi avatar chính bị lỗi |
|
|
106
|
+
| textAvatar | `string` | - | Văn bản hiển thị khi không có hình ảnh (thường là chữ cái đầu của tên) |
|
|
107
|
+
| idGenColor | `string` | - | ID dùng để tạo màu nền tự động khi sử dụng văn bản |
|
|
108
|
+
| size | `16 \| 24 \| 32 \| 40 \| 48 \| 64` | `32` | Kích thước của avatar (tính bằng pixel) |
|
|
109
|
+
| typeShape | `'circle' \| 'rectangle'` | `'circle'` | Hình dạng của avatar (tròn hoặc vuông) |
|
|
110
|
+
| classInclude | `string` | `'mr-[8px]'` | CSS class bổ sung cho container chính |
|
|
111
|
+
| classImageInclude | `string` | `''` | CSS class bổ sung cho thẻ img |
|
|
112
|
+
| getLastTextAfterSpace | `boolean` | `false` | Nếu true, chỉ lấy chữ cái đầu tiên của từ cuối cùng trong textAvatar |
|
|
113
|
+
| clickPreviewImage | `boolean` | `false` | Cho phép click vào avatar để mở xem ảnh preview |
|
|
116
114
|
|
|
117
115
|
### Outputs
|
|
118
116
|
|
|
119
|
-
| Tên
|
|
120
|
-
|
|
121
|
-
| outAvatarError | `void`
|
|
117
|
+
| Tên | Kiểu dữ liệu | Mô tả |
|
|
118
|
+
| -------------- | ------------ | ------------------------------------------------------------------------ |
|
|
119
|
+
| outAvatarError | `void` | Sự kiện được kích hoạt khi linkAvatar bị lỗi và không có linkAvatarError |
|
|
122
120
|
|
|
123
121
|
### Interfaces
|
|
124
122
|
|
|
125
123
|
#### IAvatarConfig
|
|
124
|
+
|
|
126
125
|
```typescript
|
|
127
126
|
export interface IAvatarConfig {
|
|
128
127
|
classImageInclude?: string;
|
|
@@ -145,6 +144,7 @@ export type TYPE_SHAPE_AVATAR = 'circle' | 'rectangle';
|
|
|
145
144
|
### Avatar với ảnh và fallback
|
|
146
145
|
|
|
147
146
|
**TypeScript (user-avatar.component.ts):**
|
|
147
|
+
|
|
148
148
|
```typescript
|
|
149
149
|
import { Component } from '@angular/core';
|
|
150
150
|
import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
@@ -153,13 +153,13 @@ import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
|
153
153
|
selector: 'app-user-avatar',
|
|
154
154
|
standalone: true,
|
|
155
155
|
imports: [LibsUiComponentsAvatarComponent],
|
|
156
|
-
templateUrl: './user-avatar.component.html'
|
|
156
|
+
templateUrl: './user-avatar.component.html',
|
|
157
157
|
})
|
|
158
158
|
export class UserAvatarComponent {
|
|
159
159
|
user = {
|
|
160
160
|
id: 'user-123',
|
|
161
161
|
name: 'Nguyễn Văn A',
|
|
162
|
-
avatar: 'https://example.com/avatar.jpg'
|
|
162
|
+
avatar: 'https://example.com/avatar.jpg',
|
|
163
163
|
};
|
|
164
164
|
|
|
165
165
|
handleAvatarError() {
|
|
@@ -169,19 +169,20 @@ export class UserAvatarComponent {
|
|
|
169
169
|
```
|
|
170
170
|
|
|
171
171
|
**HTML (user-avatar.component.html):**
|
|
172
|
+
|
|
172
173
|
```html
|
|
173
174
|
<libs_ui-components-avatar
|
|
174
175
|
[linkAvatar]="user.avatar"
|
|
175
176
|
[textAvatar]="user.name"
|
|
176
177
|
[idGenColor]="user.id"
|
|
177
178
|
[size]="40"
|
|
178
|
-
(outAvatarError)="handleAvatarError()">
|
|
179
|
-
</libs_ui-components-avatar>
|
|
179
|
+
(outAvatarError)="handleAvatarError()"></libs_ui-components-avatar>
|
|
180
180
|
```
|
|
181
181
|
|
|
182
182
|
### Nhóm Avatars với kích thước và hình dạng khác nhau
|
|
183
183
|
|
|
184
184
|
**TypeScript (avatar-group.component.ts):**
|
|
185
|
+
|
|
185
186
|
```typescript
|
|
186
187
|
import { Component } from '@angular/core';
|
|
187
188
|
import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
@@ -190,7 +191,7 @@ import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
|
190
191
|
selector: 'app-avatar-group',
|
|
191
192
|
standalone: true,
|
|
192
193
|
imports: [LibsUiComponentsAvatarComponent],
|
|
193
|
-
templateUrl: './avatar-group.component.html'
|
|
194
|
+
templateUrl: './avatar-group.component.html',
|
|
194
195
|
})
|
|
195
196
|
export class AvatarGroupComponent {
|
|
196
197
|
users = [
|
|
@@ -198,41 +199,41 @@ export class AvatarGroupComponent {
|
|
|
198
199
|
id: 'user-1',
|
|
199
200
|
name: 'Nguyễn Văn A',
|
|
200
201
|
avatar: 'https://example.com/avatar1.jpg',
|
|
201
|
-
size: 64
|
|
202
|
+
size: 64,
|
|
202
203
|
},
|
|
203
204
|
{
|
|
204
205
|
id: 'user-2',
|
|
205
206
|
name: 'Trần Thị B',
|
|
206
207
|
avatar: 'https://example.com/avatar2.jpg',
|
|
207
|
-
size: 48
|
|
208
|
+
size: 48,
|
|
208
209
|
},
|
|
209
210
|
{
|
|
210
211
|
id: 'user-3',
|
|
211
212
|
name: 'Lê Văn C',
|
|
212
213
|
avatar: 'https://example.com/avatar3.jpg',
|
|
213
|
-
size: 32
|
|
214
|
+
size: 32,
|
|
214
215
|
},
|
|
215
216
|
{
|
|
216
217
|
id: 'user-4',
|
|
217
218
|
name: 'Phạm Thị D',
|
|
218
219
|
avatar: null,
|
|
219
|
-
size: 24
|
|
220
|
-
}
|
|
220
|
+
size: 24,
|
|
221
|
+
},
|
|
221
222
|
];
|
|
222
223
|
}
|
|
223
224
|
```
|
|
224
225
|
|
|
225
226
|
**HTML (avatar-group.component.html):**
|
|
227
|
+
|
|
226
228
|
```html
|
|
227
229
|
<div class="flex items-center space-x-2">
|
|
228
230
|
@for (user of users; track user.id) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
</libs_ui-components-avatar>
|
|
231
|
+
<libs_ui-components-avatar
|
|
232
|
+
[linkAvatar]="user.avatar"
|
|
233
|
+
[textAvatar]="user.name"
|
|
234
|
+
[idGenColor]="user.id"
|
|
235
|
+
[size]="user.size"
|
|
236
|
+
[typeShape]="user.id === 'user-4' ? 'rectangle' : 'circle'"></libs_ui-components-avatar>
|
|
236
237
|
}
|
|
237
238
|
</div>
|
|
238
239
|
```
|
|
@@ -251,7 +252,7 @@ import { LibsUiComponentsAvatarDemoComponent } from '@libs-ui/components-avatar'
|
|
|
251
252
|
imports: [LibsUiComponentsAvatarDemoComponent],
|
|
252
253
|
template: `
|
|
253
254
|
<lib-avatar-demo></lib-avatar-demo>
|
|
254
|
-
|
|
255
|
+
`,
|
|
255
256
|
})
|
|
256
257
|
export class AvatarDemoComponent {}
|
|
257
258
|
```
|
|
@@ -12,9 +12,9 @@ export class LibsUiComponentsAvatarComponent {
|
|
|
12
12
|
fontSize = computed(this.fontSizeComputed.bind(this));
|
|
13
13
|
galleryViewerComponent;
|
|
14
14
|
// #region INPUT
|
|
15
|
-
typeShape = input('circle', { transform: value => value ?? 'circle' });
|
|
15
|
+
typeShape = input('circle', { transform: (value) => value ?? 'circle' });
|
|
16
16
|
classInclude = input('mr-[8px]', { transform: (value) => value ?? 'mr-[8px]' });
|
|
17
|
-
size = input(32, { transform: value => value ?? 32 });
|
|
17
|
+
size = input(32, { transform: (value) => value ?? 32 });
|
|
18
18
|
linkAvatar = input();
|
|
19
19
|
linkAvatarError = input();
|
|
20
20
|
classImageInclude = input('', { transform: (value) => value ?? '' });
|
|
@@ -24,12 +24,14 @@ export class LibsUiComponentsAvatarComponent {
|
|
|
24
24
|
getLastTextAfterSpace = input(); // Lấy text cuối cùng sau khi cắt khoảng trắng. Lưu ý truyền biến này trước khi truyền biến textAvatar
|
|
25
25
|
textAvatar = input('', {
|
|
26
26
|
transform: (value) => {
|
|
27
|
-
value = deleteUnicode(value || '')
|
|
27
|
+
value = deleteUnicode(value || '')
|
|
28
|
+
.replace(/[^a-zA-Z0-9\s]/g, '')
|
|
29
|
+
.trim();
|
|
28
30
|
if (this.getLastTextAfterSpace()) {
|
|
29
31
|
value = value.split(' ').pop() || '';
|
|
30
32
|
}
|
|
31
33
|
return value[0] || '—';
|
|
32
|
-
}
|
|
34
|
+
},
|
|
33
35
|
});
|
|
34
36
|
textAvatarClassInclude = input('', { transform: (value) => value ?? '' });
|
|
35
37
|
containertextAvatarClassInclude = input('', { transform: (value) => value ?? '' });
|
|
@@ -109,10 +111,10 @@ export class LibsUiComponentsAvatarComponent {
|
|
|
109
111
|
this.galleryViewerComponent = undefined;
|
|
110
112
|
}
|
|
111
113
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
112
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsAvatarComponent, isStandalone: true, selector: "libs_ui-components-avatar", inputs: { typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, linkAvatar: { classPropertyName: "linkAvatar", publicName: "linkAvatar", isSignal: true, isRequired: false, transformFunction: null }, linkAvatarError: { classPropertyName: "linkAvatarError", publicName: "linkAvatarError", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, zIndexPreviewImage: { classPropertyName: "zIndexPreviewImage", publicName: "zIndexPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, clickPreviewImage: { classPropertyName: "clickPreviewImage", publicName: "clickPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, idGenColor: { classPropertyName: "idGenColor", publicName: "idGenColor", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, textAvatar: { classPropertyName: "textAvatar", publicName: "textAvatar", isSignal: true, isRequired: false, transformFunction: null }, textAvatarClassInclude: { classPropertyName: "textAvatarClassInclude", publicName: "textAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null }, containertextAvatarClassInclude: { classPropertyName: "containertextAvatarClassInclude", publicName: "containertextAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outAvatarError: "outAvatarError", outEventPreviewImage: "outEventPreviewImage" }, ngImport: i0, template: "<div
|
|
114
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsAvatarComponent, isStandalone: true, selector: "libs_ui-components-avatar", inputs: { typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, linkAvatar: { classPropertyName: "linkAvatar", publicName: "linkAvatar", isSignal: true, isRequired: false, transformFunction: null }, linkAvatarError: { classPropertyName: "linkAvatarError", publicName: "linkAvatarError", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, zIndexPreviewImage: { classPropertyName: "zIndexPreviewImage", publicName: "zIndexPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, clickPreviewImage: { classPropertyName: "clickPreviewImage", publicName: "clickPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, idGenColor: { classPropertyName: "idGenColor", publicName: "idGenColor", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, textAvatar: { classPropertyName: "textAvatar", publicName: "textAvatar", isSignal: true, isRequired: false, transformFunction: null }, textAvatarClassInclude: { classPropertyName: "textAvatarClassInclude", publicName: "textAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null }, containertextAvatarClassInclude: { classPropertyName: "containertextAvatarClassInclude", publicName: "containertextAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outAvatarError: "outAvatarError", outEventPreviewImage: "outEventPreviewImage" }, ngImport: i0, template: "<div\n class=\"libs_ui-component-avatar {{ classInclude() }}\"\n [class.libs_ui-component-avatar-rectangle]=\"typeShape() === 'rectangle'\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\">\n @if (!isShowIcon()) {\n <img\n [class]=\"classImageInclude() + (clickPreviewImage() ? ' cursor-pointer' : 'cursor-default')\"\n [src]=\"linkAvatar()\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerClickImage()\" />\n } @else {\n <div\n class=\"libs_ui-component-avatar-icon {{ containertextAvatarClassInclude() }}\"\n [style.background]=\"color()\">\n <div\n class=\"uppercase text-[#ffffff] libs-ui-font-h{{ fontSize() }}s {{ textAvatarClassInclude() }}\"\n [innerHTML]=\"textAvatar()\"></div>\n </div>\n }\n</div>\n", styles: [".libs_ui-component-avatar{position:relative;border-radius:50%;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#fff;transition:width .4s,height .4s}.libs_ui-component-avatar-icon,.libs_ui-component-avatar img{border:1px solid #f8f9fa;display:flex;align-items:center;justify-content:center;border-radius:50%;width:100%;height:100%}.libs_ui-component-avatar-icon{width:100%;height:100%}.libs_ui-component-avatar-rectangle{border-radius:4px}.libs_ui-component-avatar-rectangle-icon,.libs_ui-component-avatar-rectangle img{border:none;border-radius:4px;margin:auto}\n"] });
|
|
113
115
|
}
|
|
114
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsAvatarComponent, decorators: [{
|
|
115
117
|
type: Component,
|
|
116
|
-
args: [{ selector: 'libs_ui-components-avatar', standalone: true, template: "<div
|
|
118
|
+
args: [{ selector: 'libs_ui-components-avatar', standalone: true, template: "<div\n class=\"libs_ui-component-avatar {{ classInclude() }}\"\n [class.libs_ui-component-avatar-rectangle]=\"typeShape() === 'rectangle'\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\">\n @if (!isShowIcon()) {\n <img\n [class]=\"classImageInclude() + (clickPreviewImage() ? ' cursor-pointer' : 'cursor-default')\"\n [src]=\"linkAvatar()\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerClickImage()\" />\n } @else {\n <div\n class=\"libs_ui-component-avatar-icon {{ containertextAvatarClassInclude() }}\"\n [style.background]=\"color()\">\n <div\n class=\"uppercase text-[#ffffff] libs-ui-font-h{{ fontSize() }}s {{ textAvatarClassInclude() }}\"\n [innerHTML]=\"textAvatar()\"></div>\n </div>\n }\n</div>\n", styles: [".libs_ui-component-avatar{position:relative;border-radius:50%;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#fff;transition:width .4s,height .4s}.libs_ui-component-avatar-icon,.libs_ui-component-avatar img{border:1px solid #f8f9fa;display:flex;align-items:center;justify-content:center;border-radius:50%;width:100%;height:100%}.libs_ui-component-avatar-icon{width:100%;height:100%}.libs_ui-component-avatar-rectangle{border-radius:4px}.libs_ui-component-avatar-rectangle-icon,.libs_ui-component-avatar-rectangle img{border:none;border-radius:4px;margin:auto}\n"] }]
|
|
117
119
|
}], ctorParameters: () => [] });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9hdmF0YXIvc3JjL2F2YXRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYXZhdGFyL3NyYy9hdmF0YXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ILE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBU3BGLE1BQU0sT0FBTywrQkFBK0I7SUFDMUMsbUJBQW1CO0lBQ1QsaUJBQWlCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzNDLHNCQUFzQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoRCxVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXhELHNCQUFzQixDQUF3RDtJQUV0RixnQkFBZ0I7SUFDUCxTQUFTLEdBQUcsS0FBSyxDQUErRCxRQUFRLEVBQUUsRUFBRSxTQUFTLEVB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SUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQztJQUMxQyxDQUFDO3dHQTVIVSwrQkFBK0I7NEZBQS9CLCtCQUErQiwrbEVDZDVDLHF3QkFrQkE7OzRGREphLCtCQUErQjtrQkFQM0MsU0FBUzsrQkFFRSwyQkFBMkIsY0FFekIsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgZGVsZXRlVW5pY29kZSwgZ2V0Q29sb3JCeUlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVFlQRV9TSEFQRV9BVkFUQVIsIFRZUEVfU0laRV9BVkFUQVJfQ09ORklHIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2F2YXRhci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWdhbGxlcnknXG5pbXBvcnQgeyBMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWR5bmFtaWMtY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWF2YXRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzdHlsZVVybHM6IFsnLi9hdmF0YXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgaXNFcnJvckxpbmtBdmF0YXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNFcnJvckxpbmtBdmF0YXJFcnJvciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1Nob3dJY29uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbG9yID0gY29tcHV0ZWQoKCkgPT4gZ2V0Q29sb3JCeUlkKHRoaXMuaWRHZW5Db2xvcigpIHx8ICcnKSk7XG4gIHByb3RlY3RlZCBmb250U2l6ZSA9IGNvbXB1dGVkKHRoaXMuZm9udFNpemVDb21wdXRlZC5iaW5kKHRoaXMpKTtcblxuICBwcml2YXRlIGdhbGxlcnlWaWV3ZXJDb21wb25lbnQ/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQ+O1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgdHlwZVNoYXBlID0gaW5wdXQ8VFlQRV9TSEFQRV9BVkFUQVIgfCB1bmRlZmluZWQsIFRZUEVfU0hBUEVfQVZBVEFSIHwgdW5kZWZpbmVkPignY2lyY2xlJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/ICdjaXJjbGUnIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ21yLVs4cHhdJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ21yLVs4cHhdJyB9KTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PFRZUEVfU0laRV9BVkFUQVJfQ09ORklHIHwgdW5kZWZpbmVkLCBUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRyB8IHVuZGVmaW5lZD4oMzIsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAzMiB9KTtcbiAgcmVhZG9ubHkgbGlua0F2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlua0F2YXRhckVycm9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0ltYWdlSW5jbHVkZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJycgfSk7XG4gIHJlYWRvbmx5IHpJbmRleFByZXZpZXdJbWFnZSA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY2xpY2tQcmV2aWV3SW1hZ2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZEdlbkNvbG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBnZXRMYXN0VGV4dEFmdGVyU3BhY2UgPSBpbnB1dDxib29sZWFuPigpOyAvLyBM4bqleSB0ZXh0IGN14buRaSBjw7luZyBzYXUga2hpIGPhuq90IGtob+G6o25nIHRy4bqvbmcuIEzGsHUgw70gdHJ1eeG7gW4gYmnhur9uIG7DoHkgdHLGsOG7m2Mga2hpIHRydXnhu4FuIGJp4bq/biB0ZXh0QXZhdGFyXG4gIHJlYWRvbmx5IHRleHRBdmF0YXIgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSBkZWxldGVVbmljb2RlKHZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXmEtekEtWjAtOVxcc10vZywgJycpLnRyaW0oKTtcblxuICAgICAgaWYgKHRoaXMuZ2V0TGFzdFRleHRBZnRlclNwYWNlKCkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpLnBvcCgpIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVbMF0gfHwgJyZtZGFzaDsnO1xuICAgIH1cbiAgfSk7XG4gIHJlYWRvbmx5IHRleHRBdmF0YXJDbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBjb250YWluZXJ0ZXh0QXZhdGFyQ2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRBdmF0YXJFcnJvciA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRFdmVudFByZXZpZXdJbWFnZSA9IG91dHB1dDwnb3BlbicgfCAncmVtb3ZlJz4oKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5saW5rQXZhdGFyKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2hvd0ljb24uc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5pc0Vycm9yTGlua0F2YXRhci5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmlzRXJyb3JMaW5rQXZhdGFyRXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJJbWFnZUVycm9yKGU6IEVycm9yRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubGlua0F2YXRhckVycm9yKCk/LnRyaW0oKSAmJiB0aGlzLmlkR2VuQ29sb3IoKSAmJiB0aGlzLnRleHRBdmF0YXIoKSkge1xuICAgICAgdGhpcy5vdXRBdmF0YXJFcnJvci5lbWl0KCk7XG4gICAgICB0aGlzLmlzU2hvd0ljb24uc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRXJyb3JMaW5rQXZhdGFyKCkpIHtcbiAgICAgIHRoaXMuaXNFcnJvckxpbmtBdmF0YXJFcnJvci5zZXQodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yTGlua0F2YXRhci5zZXQodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0Vycm9yTGlua0F2YXRhckVycm9yKCkgJiYgdGhpcy5pZEdlbkNvbG9yKCkgJiYgdGhpcy50ZXh0QXZhdGFyKCkpIHtcbiAgICAgIHRoaXMuaXNTaG93SWNvbi5zZXQodHJ1ZSlcbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmlzRXJyb3JMaW5rQXZhdGFyRXJyb3IoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubGlua0F2YXRhckVycm9yKCkpIHtcbiAgICAgIHRoaXMub3V0QXZhdGFyRXJyb3IuZW1pdCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIChlIGFzIElFdmVudCkudGFyZ2V0LnNyYyA9IHRoaXMubGlua0F2YXRhckVycm9yKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrSW1hZ2UoKSB7XG4gICAgaWYgKHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudCB8fCAhdGhpcy5jbGlja1ByZXZpZXdJbWFnZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0RXZlbnRQcmV2aWV3SW1hZ2UuZW1pdCgnb3BlbicpO1xuICAgIHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudCA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuICAgIHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudC5zZXRJbnB1dCgnaW1hZ2VzJywgW3sgaW1hZ2VTcmM6IHRoaXMubGlua0F2YXRhcigpIH1dKTtcbiAgICB0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQuc2V0SW5wdXQoJ2ZpZWxkRGlzcGxheVNyY0ltYWdlJywgJ2ltYWdlU3JjJyk7XG4gICAgdGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50LnNldElucHV0KCdzaW5nbGVJbWFnZScsIHRydWUpO1xuICAgIHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudC5zZXRJbnB1dCgnekluZGV4JywgdGhpcy56SW5kZXhQcmV2aWV3SW1hZ2UoKSk7XG4gICAgdGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50Lmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuICAgICAgdGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vdXRFdmVudFByZXZpZXdJbWFnZS5lbWl0KCdyZW1vdmUnKTtcbiAgICB9KVxuXG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qIENPTVBVVEVEIFBST1BFUlRJRVMgRlVOQ1RJT04gKi9cbiAgcHJpdmF0ZSBmb250U2l6ZUNvbXB1dGVkKCkge1xuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMTYgfHwgdGhpcy5zaXplKCkgPT09IDI0KSB7XG4gICAgICByZXR1cm4gNjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDMyKSB7XG4gICAgICByZXR1cm4gNDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDQwKSB7XG4gICAgICByZXR1cm4gMztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDY0KSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuICAgIHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJsaWJzX3VpLWNvbXBvbmVudC1hdmF0YXIge3sgY2xhc3NJbmNsdWRlKCkgfX1cIlxuICBbY2xhc3MubGlic191aS1jb21wb25lbnQtYXZhdGFyLXJlY3RhbmdsZV09XCJ0eXBlU2hhcGUoKSA9PT0gJ3JlY3RhbmdsZSdcIlxuICBbc3R5bGUud2lkdGgucHhdPSdzaXplKCknXG4gIFtzdHlsZS5oZWlnaHQucHhdPSdzaXplKCknPlxuICBAaWYgKCFpc1Nob3dJY29uKCkpIHtcbiAgICA8aW1nIFtjbGFzc109XCJjbGFzc0ltYWdlSW5jbHVkZSgpICsgKGNsaWNrUHJldmlld0ltYWdlKCkgPyAnIGN1cnNvci1wb2ludGVyJyA6ICdjdXJzb3ItZGVmYXVsdCcpXCJcbiAgICAgIFtzcmNdPSdsaW5rQXZhdGFyKCknXG4gICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrSW1hZ2UoKVwiIC8+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXYgY2xhc3M9J2xpYnNfdWktY29tcG9uZW50LWF2YXRhci1pY29uIHt7IGNvbnRhaW5lcnRleHRBdmF0YXJDbGFzc0luY2x1ZGUoKSB9fSdcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT0nY29sb3IoKSc+XG4gICAgICA8ZGl2IGNsYXNzPVwidXBwZXJjYXNlIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktZm9udC1oe3sgZm9udFNpemUoKSB9fXMge3sgdGV4dEF2YXRhckNsYXNzSW5jbHVkZSgpIH19XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJ0ZXh0QXZhdGFyKClcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9hdmF0YXIvc3JjL2F2YXRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYXZhdGFyL3NyYy9hdmF0YXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ILE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBU3BGLE1BQU0sT0FBTywrQkFBK0I7SUFDMUMsbUJBQW1CO0lBQ1QsaUJBQWlCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzNDLHNCQUFzQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoRCxVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXhELHNCQUFzQixDQUF3RDtJQUV0RixnQkFBZ0I7SUFDUCxTQUFTLEdBQUcsS0FBSyxDQUErRCxRQUFRLEVBQUUsRUFBRSxTQUFTLEVB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Q1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7SUFDMUMsQ0FBQzt3R0E3SFUsK0JBQStCOzRGQUEvQiwrQkFBK0IsK2xFQ2Q1QyxpeUJBcUJBOzs0RkRQYSwrQkFBK0I7a0JBUDNDLFNBQVM7K0JBRUUsMkJBQTJCLGNBRXpCLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IGRlbGV0ZVVuaWNvZGUsIGdldENvbG9yQnlJZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRZUEVfU0hBUEVfQVZBVEFSLCBUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRyB9IGZyb20gJy4vaW50ZXJmYWNlcy9hdmF0YXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNHYWxsZXJ5Vmlld2VyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1nYWxsZXJ5JztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YXRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHN0eWxlVXJsczogWycuL2F2YXRhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgaXNFcnJvckxpbmtBdmF0YXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNFcnJvckxpbmtBdmF0YXJFcnJvciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1Nob3dJY29uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbG9yID0gY29tcHV0ZWQoKCkgPT4gZ2V0Q29sb3JCeUlkKHRoaXMuaWRHZW5Db2xvcigpIHx8ICcnKSk7XG4gIHByb3RlY3RlZCBmb250U2l6ZSA9IGNvbXB1dGVkKHRoaXMuZm9udFNpemVDb21wdXRlZC5iaW5kKHRoaXMpKTtcblxuICBwcml2YXRlIGdhbGxlcnlWaWV3ZXJDb21wb25lbnQ/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQ+O1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgdHlwZVNoYXBlID0gaW5wdXQ8VFlQRV9TSEFQRV9BVkFUQVIgfCB1bmRlZmluZWQsIFRZUEVfU0hBUEVfQVZBVEFSIHwgdW5kZWZpbmVkPignY2lyY2xlJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ2NpcmNsZScgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignbXItWzhweF0nLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnbXItWzhweF0nIH0pO1xuICByZWFkb25seSBzaXplID0gaW5wdXQ8VFlQRV9TSVpFX0FWQVRBUl9DT05GSUcgfCB1bmRlZmluZWQsIFRZUEVfU0laRV9BVkFUQVJfQ09ORklHIHwgdW5kZWZpbmVkPigzMiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMzIgfSk7XG4gIHJlYWRvbmx5IGxpbmtBdmF0YXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpbmtBdmF0YXJFcnJvciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbWFnZUluY2x1ZGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSB6SW5kZXhQcmV2aWV3SW1hZ2UgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNsaWNrUHJldmlld0ltYWdlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWRHZW5Db2xvciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZ2V0TGFzdFRleHRBZnRlclNwYWNlID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8gTOG6pXkgdGV4dCBjdeG7kWkgY8O5bmcgc2F1IGtoaSBj4bqvdCBraG/huqNuZyB0cuG6r25nLiBMxrB1IMO9IHRydXnhu4FuIGJp4bq/biBuw6B5IHRyxrDhu5tjIGtoaSB0cnV54buBbiBiaeG6v24gdGV4dEF2YXRhclxuICByZWFkb25seSB0ZXh0QXZhdGFyID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWUpID0+IHtcbiAgICAgIHZhbHVlID0gZGVsZXRlVW5pY29kZSh2YWx1ZSB8fCAnJylcbiAgICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAgICAgLnRyaW0oKTtcblxuICAgICAgaWYgKHRoaXMuZ2V0TGFzdFRleHRBZnRlclNwYWNlKCkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpLnBvcCgpIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVbMF0gfHwgJyZtZGFzaDsnO1xuICAgIH0sXG4gIH0pO1xuICByZWFkb25seSB0ZXh0QXZhdGFyQ2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgY29udGFpbmVydGV4dEF2YXRhckNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJycgfSk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0QXZhdGFyRXJyb3IgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0RXZlbnRQcmV2aWV3SW1hZ2UgPSBvdXRwdXQ8J29wZW4nIHwgJ3JlbW92ZSc+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMubGlua0F2YXRhcigpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1Nob3dJY29uLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuaXNFcnJvckxpbmtBdmF0YXIuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5pc0Vycm9yTGlua0F2YXRhckVycm9yLnNldChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCkge1xuICAgIGlmICghdGhpcy5saW5rQXZhdGFyRXJyb3IoKT8udHJpbSgpICYmIHRoaXMuaWRHZW5Db2xvcigpICYmIHRoaXMudGV4dEF2YXRhcigpKSB7XG4gICAgICB0aGlzLm91dEF2YXRhckVycm9yLmVtaXQoKTtcbiAgICAgIHRoaXMuaXNTaG93SWNvbi5zZXQodHJ1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFcnJvckxpbmtBdmF0YXIoKSkge1xuICAgICAgdGhpcy5pc0Vycm9yTGlua0F2YXRhckVycm9yLnNldCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yTGlua0F2YXRhci5zZXQodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0Vycm9yTGlua0F2YXRhckVycm9yKCkgJiYgdGhpcy5pZEdlbkNvbG9yKCkgJiYgdGhpcy50ZXh0QXZhdGFyKCkpIHtcbiAgICAgIHRoaXMuaXNTaG93SWNvbi5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFcnJvckxpbmtBdmF0YXJFcnJvcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5saW5rQXZhdGFyRXJyb3IoKSkge1xuICAgICAgdGhpcy5vdXRBdmF0YXJFcnJvci5lbWl0KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKGUgYXMgSUV2ZW50KS50YXJnZXQuc3JjID0gdGhpcy5saW5rQXZhdGFyRXJyb3IoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tJbWFnZSgpIHtcbiAgICBpZiAodGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50IHx8ICF0aGlzLmNsaWNrUHJldmlld0ltYWdlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRFdmVudFByZXZpZXdJbWFnZS5lbWl0KCdvcGVuJyk7XG4gICAgdGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50ID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCk7XG4gICAgdGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50LnNldElucHV0KCdpbWFnZXMnLCBbeyBpbWFnZVNyYzogdGhpcy5saW5rQXZhdGFyKCkgfV0pO1xuICAgIHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudC5zZXRJbnB1dCgnZmllbGREaXNwbGF5U3JjSW1hZ2UnLCAnaW1hZ2VTcmMnKTtcbiAgICB0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQuc2V0SW5wdXQoJ3NpbmdsZUltYWdlJywgdHJ1ZSk7XG4gICAgdGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50LnNldElucHV0KCd6SW5kZXgnLCB0aGlzLnpJbmRleFByZXZpZXdJbWFnZSgpKTtcbiAgICB0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudCk7XG4gICAgICB0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm91dEV2ZW50UHJldmlld0ltYWdlLmVtaXQoJ3JlbW92ZScpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5nYWxsZXJ5Vmlld2VyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qIENPTVBVVEVEIFBST1BFUlRJRVMgRlVOQ1RJT04gKi9cbiAgcHJpdmF0ZSBmb250U2l6ZUNvbXB1dGVkKCkge1xuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMTYgfHwgdGhpcy5zaXplKCkgPT09IDI0KSB7XG4gICAgICByZXR1cm4gNjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDMyKSB7XG4gICAgICByZXR1cm4gNDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDQwKSB7XG4gICAgICByZXR1cm4gMztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDY0KSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmdhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuICAgIHRoaXMuZ2FsbGVyeVZpZXdlckNvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnNfdWktY29tcG9uZW50LWF2YXRhciB7eyBjbGFzc0luY2x1ZGUoKSB9fVwiXG4gIFtjbGFzcy5saWJzX3VpLWNvbXBvbmVudC1hdmF0YXItcmVjdGFuZ2xlXT1cInR5cGVTaGFwZSgpID09PSAncmVjdGFuZ2xlJ1wiXG4gIFtzdHlsZS53aWR0aC5weF09XCJzaXplKClcIlxuICBbc3R5bGUuaGVpZ2h0LnB4XT1cInNpemUoKVwiPlxuICBAaWYgKCFpc1Nob3dJY29uKCkpIHtcbiAgICA8aW1nXG4gICAgICBbY2xhc3NdPVwiY2xhc3NJbWFnZUluY2x1ZGUoKSArIChjbGlja1ByZXZpZXdJbWFnZSgpID8gJyBjdXJzb3ItcG9pbnRlcicgOiAnY3Vyc29yLWRlZmF1bHQnKVwiXG4gICAgICBbc3JjXT1cImxpbmtBdmF0YXIoKVwiXG4gICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrSW1hZ2UoKVwiIC8+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlic191aS1jb21wb25lbnQtYXZhdGFyLWljb24ge3sgY29udGFpbmVydGV4dEF2YXRhckNsYXNzSW5jbHVkZSgpIH19XCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImNvbG9yKClcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ1cHBlcmNhc2UgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1mb250LWh7eyBmb250U2l6ZSgpIH19cyB7eyB0ZXh0QXZhdGFyQ2xhc3NJbmNsdWRlKCkgfX1cIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInRleHRBdmF0YXIoKVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './avatar.component';
|
|
2
2
|
export * from './interfaces';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYXZhdGFyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9hdmF0YXIvc3JjL2ludGVyZmFjZXMvYXZhdGFyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJQXZhdGFyQ29uZmlnIHtcbiAgY2xhc3NJbWFnZUluY2x1ZGU/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgc2l6ZT86IFRZUEVfU0laRV9BVkFUQVJfQ09ORklHO1xuICBsaW5rQXZhdGFyPzogc3RyaW5nO1xuICBsaW5rQXZhdGFyRXJyb3I/OiBzdHJpbmc7XG4gIGlkR2VuQ29sb3I/OiBzdHJpbmc7XG4gIHRleHRBdmF0YXI/OiBzdHJpbmc7XG4gIHR5cGVTaGFwZT86IFRZUEVfU0hBUEVfQVZBVEFSO1xuICBnZXRMYXN0VGV4dEFmdGVyU3BhY2U/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9hdmF0YXIvc3JjL2ludGVyZmFjZXMvYXZhdGFyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJQXZhdGFyQ29uZmlnIHtcbiAgY2xhc3NJbWFnZUluY2x1ZGU/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgc2l6ZT86IFRZUEVfU0laRV9BVkFUQVJfQ09ORklHO1xuICBsaW5rQXZhdGFyPzogc3RyaW5nO1xuICBsaW5rQXZhdGFyRXJyb3I/OiBzdHJpbmc7XG4gIGlkR2VuQ29sb3I/OiBzdHJpbmc7XG4gIHRleHRBdmF0YXI/OiBzdHJpbmc7XG4gIHR5cGVTaGFwZT86IFRZUEVfU0hBUEVfQVZBVEFSO1xuICBnZXRMYXN0VGV4dEFmdGVyU3BhY2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRyA9IDE2IHwgMjQgfCAzMiB8IDQwIHwgNDggfCA2NDtcbmV4cG9ydCB0eXBlIFRZUEVfU0hBUEVfQVZBVEFSID0gJ2NpcmNsZScgfCAncmVjdGFuZ2xlJztcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './avatar.interface';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYXZhdGFyL3NyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F2YXRhci5pbnRlcmZhY2UnO1xuIl19
|
|
@@ -13,9 +13,9 @@ class LibsUiComponentsAvatarComponent {
|
|
|
13
13
|
fontSize = computed(this.fontSizeComputed.bind(this));
|
|
14
14
|
galleryViewerComponent;
|
|
15
15
|
// #region INPUT
|
|
16
|
-
typeShape = input('circle', { transform: value => value ?? 'circle' });
|
|
16
|
+
typeShape = input('circle', { transform: (value) => value ?? 'circle' });
|
|
17
17
|
classInclude = input('mr-[8px]', { transform: (value) => value ?? 'mr-[8px]' });
|
|
18
|
-
size = input(32, { transform: value => value ?? 32 });
|
|
18
|
+
size = input(32, { transform: (value) => value ?? 32 });
|
|
19
19
|
linkAvatar = input();
|
|
20
20
|
linkAvatarError = input();
|
|
21
21
|
classImageInclude = input('', { transform: (value) => value ?? '' });
|
|
@@ -25,12 +25,14 @@ class LibsUiComponentsAvatarComponent {
|
|
|
25
25
|
getLastTextAfterSpace = input(); // Lấy text cuối cùng sau khi cắt khoảng trắng. Lưu ý truyền biến này trước khi truyền biến textAvatar
|
|
26
26
|
textAvatar = input('', {
|
|
27
27
|
transform: (value) => {
|
|
28
|
-
value = deleteUnicode(value || '')
|
|
28
|
+
value = deleteUnicode(value || '')
|
|
29
|
+
.replace(/[^a-zA-Z0-9\s]/g, '')
|
|
30
|
+
.trim();
|
|
29
31
|
if (this.getLastTextAfterSpace()) {
|
|
30
32
|
value = value.split(' ').pop() || '';
|
|
31
33
|
}
|
|
32
34
|
return value[0] || '—';
|
|
33
|
-
}
|
|
35
|
+
},
|
|
34
36
|
});
|
|
35
37
|
textAvatarClassInclude = input('', { transform: (value) => value ?? '' });
|
|
36
38
|
containertextAvatarClassInclude = input('', { transform: (value) => value ?? '' });
|
|
@@ -110,11 +112,11 @@ class LibsUiComponentsAvatarComponent {
|
|
|
110
112
|
this.galleryViewerComponent = undefined;
|
|
111
113
|
}
|
|
112
114
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
113
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsAvatarComponent, isStandalone: true, selector: "libs_ui-components-avatar", inputs: { typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, linkAvatar: { classPropertyName: "linkAvatar", publicName: "linkAvatar", isSignal: true, isRequired: false, transformFunction: null }, linkAvatarError: { classPropertyName: "linkAvatarError", publicName: "linkAvatarError", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, zIndexPreviewImage: { classPropertyName: "zIndexPreviewImage", publicName: "zIndexPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, clickPreviewImage: { classPropertyName: "clickPreviewImage", publicName: "clickPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, idGenColor: { classPropertyName: "idGenColor", publicName: "idGenColor", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, textAvatar: { classPropertyName: "textAvatar", publicName: "textAvatar", isSignal: true, isRequired: false, transformFunction: null }, textAvatarClassInclude: { classPropertyName: "textAvatarClassInclude", publicName: "textAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null }, containertextAvatarClassInclude: { classPropertyName: "containertextAvatarClassInclude", publicName: "containertextAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outAvatarError: "outAvatarError", outEventPreviewImage: "outEventPreviewImage" }, ngImport: i0, template: "<div
|
|
115
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsAvatarComponent, isStandalone: true, selector: "libs_ui-components-avatar", inputs: { typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, linkAvatar: { classPropertyName: "linkAvatar", publicName: "linkAvatar", isSignal: true, isRequired: false, transformFunction: null }, linkAvatarError: { classPropertyName: "linkAvatarError", publicName: "linkAvatarError", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, zIndexPreviewImage: { classPropertyName: "zIndexPreviewImage", publicName: "zIndexPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, clickPreviewImage: { classPropertyName: "clickPreviewImage", publicName: "clickPreviewImage", isSignal: true, isRequired: false, transformFunction: null }, idGenColor: { classPropertyName: "idGenColor", publicName: "idGenColor", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, textAvatar: { classPropertyName: "textAvatar", publicName: "textAvatar", isSignal: true, isRequired: false, transformFunction: null }, textAvatarClassInclude: { classPropertyName: "textAvatarClassInclude", publicName: "textAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null }, containertextAvatarClassInclude: { classPropertyName: "containertextAvatarClassInclude", publicName: "containertextAvatarClassInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outAvatarError: "outAvatarError", outEventPreviewImage: "outEventPreviewImage" }, ngImport: i0, template: "<div\n class=\"libs_ui-component-avatar {{ classInclude() }}\"\n [class.libs_ui-component-avatar-rectangle]=\"typeShape() === 'rectangle'\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\">\n @if (!isShowIcon()) {\n <img\n [class]=\"classImageInclude() + (clickPreviewImage() ? ' cursor-pointer' : 'cursor-default')\"\n [src]=\"linkAvatar()\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerClickImage()\" />\n } @else {\n <div\n class=\"libs_ui-component-avatar-icon {{ containertextAvatarClassInclude() }}\"\n [style.background]=\"color()\">\n <div\n class=\"uppercase text-[#ffffff] libs-ui-font-h{{ fontSize() }}s {{ textAvatarClassInclude() }}\"\n [innerHTML]=\"textAvatar()\"></div>\n </div>\n }\n</div>\n", styles: [".libs_ui-component-avatar{position:relative;border-radius:50%;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#fff;transition:width .4s,height .4s}.libs_ui-component-avatar-icon,.libs_ui-component-avatar img{border:1px solid #f8f9fa;display:flex;align-items:center;justify-content:center;border-radius:50%;width:100%;height:100%}.libs_ui-component-avatar-icon{width:100%;height:100%}.libs_ui-component-avatar-rectangle{border-radius:4px}.libs_ui-component-avatar-rectangle-icon,.libs_ui-component-avatar-rectangle img{border:none;border-radius:4px;margin:auto}\n"] });
|
|
114
116
|
}
|
|
115
117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsAvatarComponent, decorators: [{
|
|
116
118
|
type: Component,
|
|
117
|
-
args: [{ selector: 'libs_ui-components-avatar', standalone: true, template: "<div
|
|
119
|
+
args: [{ selector: 'libs_ui-components-avatar', standalone: true, template: "<div\n class=\"libs_ui-component-avatar {{ classInclude() }}\"\n [class.libs_ui-component-avatar-rectangle]=\"typeShape() === 'rectangle'\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\">\n @if (!isShowIcon()) {\n <img\n [class]=\"classImageInclude() + (clickPreviewImage() ? ' cursor-pointer' : 'cursor-default')\"\n [src]=\"linkAvatar()\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerClickImage()\" />\n } @else {\n <div\n class=\"libs_ui-component-avatar-icon {{ containertextAvatarClassInclude() }}\"\n [style.background]=\"color()\">\n <div\n class=\"uppercase text-[#ffffff] libs-ui-font-h{{ fontSize() }}s {{ textAvatarClassInclude() }}\"\n [innerHTML]=\"textAvatar()\"></div>\n </div>\n }\n</div>\n", styles: [".libs_ui-component-avatar{position:relative;border-radius:50%;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#fff;transition:width .4s,height .4s}.libs_ui-component-avatar-icon,.libs_ui-component-avatar img{border:1px solid #f8f9fa;display:flex;align-items:center;justify-content:center;border-radius:50%;width:100%;height:100%}.libs_ui-component-avatar-icon{width:100%;height:100%}.libs_ui-component-avatar-rectangle{border-radius:4px}.libs_ui-component-avatar-rectangle-icon,.libs_ui-component-avatar-rectangle img{border:none;border-radius:4px;margin:auto}\n"] }]
|
|
118
120
|
}], ctorParameters: () => [] });
|
|
119
121
|
|
|
120
122
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-avatar.mjs","sources":["../../../../../libs-ui/components/avatar/src/avatar.component.ts","../../../../../libs-ui/components/avatar/src/avatar.component.html","../../../../../libs-ui/components/avatar/src/libs-ui-components-avatar.ts"],"sourcesContent":["import { Component, ComponentRef, computed, effect, inject, input, OnDestroy, output, signal, untracked } from '@angular/core';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { deleteUnicode, getColorById } from '@libs-ui/utils';\nimport { TYPE_SHAPE_AVATAR, TYPE_SIZE_AVATAR_CONFIG } from './interfaces/avatar.interface';\nimport { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery'\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-avatar',\n templateUrl: './avatar.component.html',\n standalone: true,\n styleUrls: ['./avatar.component.scss']\n})\nexport class LibsUiComponentsAvatarComponent implements OnDestroy {\n // #region PROPERTY\n protected isErrorLinkAvatar = signal<boolean>(false);\n protected isErrorLinkAvatarError = signal<boolean>(false);\n protected isShowIcon = signal<boolean>(false);\n protected color = computed(() => getColorById(this.idGenColor() || ''));\n protected fontSize = computed(this.fontSizeComputed.bind(this));\n\n private galleryViewerComponent?: ComponentRef<LibsUiComponentsGalleryViewerComponent>;\n\n // #region INPUT\n readonly typeShape = input<TYPE_SHAPE_AVATAR | undefined, TYPE_SHAPE_AVATAR | undefined>('circle', { transform: value => value ?? 'circle' });\n readonly classInclude = input<string | undefined, string | undefined>('mr-[8px]', { transform: (value) => value ?? 'mr-[8px]' });\n readonly size = input<TYPE_SIZE_AVATAR_CONFIG | undefined, TYPE_SIZE_AVATAR_CONFIG | undefined>(32, { transform: value => value ?? 32 });\n readonly linkAvatar = input<string>();\n readonly linkAvatarError = input<string>();\n readonly classImageInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n readonly zIndexPreviewImage = input<number>();\n readonly clickPreviewImage = input<boolean>();\n readonly idGenColor = input<string>();\n readonly getLastTextAfterSpace = input<boolean>(); // Lấy text cuối cùng sau khi cắt khoảng trắng. Lưu ý truyền biến này trước khi truyền biến textAvatar\n readonly textAvatar = input<string | undefined, string | undefined>('', {\n transform: (value) => {\n value = deleteUnicode(value || '').replace(/[^a-zA-Z0-9\\s]/g, '').trim();\n\n if (this.getLastTextAfterSpace()) {\n value = value.split(' ').pop() || '';\n }\n\n return value[0] || '—';\n }\n });\n readonly textAvatarClassInclude = input<string, string | undefined>('', { transform: (value) => value ?? '' });\n readonly containertextAvatarClassInclude = input<string, string | undefined>('', { transform: (value) => value ?? '' });\n\n // #region OUTPUT\n readonly outAvatarError = output<void>();\n readonly outEventPreviewImage = output<'open' | 'remove'>();\n\n // #region INJECT\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n\n constructor() {\n effect(() => {\n this.linkAvatar();\n untracked(() => {\n this.isShowIcon.set(false);\n this.isErrorLinkAvatar.set(false);\n this.isErrorLinkAvatarError.set(false);\n })\n });\n }\n\n /* FUNCTIONS */\n protected async handlerImageError(e: ErrorEvent) {\n if (!this.linkAvatarError()?.trim() && this.idGenColor() && this.textAvatar()) {\n this.outAvatarError.emit();\n this.isShowIcon.set(true);\n\n return;\n }\n if (this.isErrorLinkAvatar()) {\n this.isErrorLinkAvatarError.set(true)\n }\n this.isErrorLinkAvatar.set(true);\n\n if (this.isErrorLinkAvatarError() && this.idGenColor() && this.textAvatar()) {\n this.isShowIcon.set(true)\n }\n\n\n if (this.isErrorLinkAvatarError()) {\n return;\n }\n if (!this.linkAvatarError()) {\n this.outAvatarError.emit();\n\n return;\n }\n (e as IEvent).target.src = this.linkAvatarError();\n }\n\n protected handlerClickImage() {\n if (this.galleryViewerComponent || !this.clickPreviewImage()) {\n return;\n }\n this.outEventPreviewImage.emit('open');\n this.galleryViewerComponent = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsGalleryViewerComponent);\n this.galleryViewerComponent.setInput('images', [{ imageSrc: this.linkAvatar() }]);\n this.galleryViewerComponent.setInput('fieldDisplaySrcImage', 'imageSrc');\n this.galleryViewerComponent.setInput('singleImage', true);\n this.galleryViewerComponent.setInput('zIndex', this.zIndexPreviewImage());\n this.galleryViewerComponent.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.galleryViewerComponent);\n this.galleryViewerComponent = undefined;\n this.outEventPreviewImage.emit('remove');\n })\n\n this.dynamicComponentService.addToBody(this.galleryViewerComponent);\n }\n\n /* COMPUTED PROPERTIES FUNCTION */\n private fontSizeComputed() {\n if (this.size() === 16 || this.size() === 24) {\n return 6;\n }\n\n if (this.size() === 32) {\n return 4;\n }\n\n if (this.size() === 40) {\n return 3;\n }\n\n if (this.size() === 64) {\n return 1;\n }\n return 4;\n }\n\n ngOnDestroy(): void {\n this.dynamicComponentService.remove(this.galleryViewerComponent);\n this.galleryViewerComponent = undefined;\n }\n}","<div class=\"libs_ui-component-avatar {{ classInclude() }}\"\n [class.libs_ui-component-avatar-rectangle]=\"typeShape() === 'rectangle'\"\n [style.width.px]='size()'\n [style.height.px]='size()'>\n @if (!isShowIcon()) {\n <img [class]=\"classImageInclude() + (clickPreviewImage() ? ' cursor-pointer' : 'cursor-default')\"\n [src]='linkAvatar()'\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerClickImage()\" />\n } @else {\n <div class='libs_ui-component-avatar-icon {{ containertextAvatarClassInclude() }}'\n [style.background]='color()'>\n <div class=\"uppercase text-[#ffffff] libs-ui-font-h{{ fontSize() }}s {{ textAvatarClassInclude() }}\"\n [innerHTML]=\"textAvatar()\">\n </div>\n </div>\n }\n</div>\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-components-avatar.mjs","sources":["../../../../../libs-ui/components/avatar/src/avatar.component.ts","../../../../../libs-ui/components/avatar/src/avatar.component.html","../../../../../libs-ui/components/avatar/src/libs-ui-components-avatar.ts"],"sourcesContent":["import { Component, ComponentRef, computed, effect, inject, input, OnDestroy, output, signal, untracked } from '@angular/core';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { deleteUnicode, getColorById } from '@libs-ui/utils';\nimport { TYPE_SHAPE_AVATAR, TYPE_SIZE_AVATAR_CONFIG } from './interfaces/avatar.interface';\nimport { LibsUiComponentsGalleryViewerComponent } from '@libs-ui/components-gallery';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-avatar',\n templateUrl: './avatar.component.html',\n standalone: true,\n styleUrls: ['./avatar.component.scss'],\n})\nexport class LibsUiComponentsAvatarComponent implements OnDestroy {\n // #region PROPERTY\n protected isErrorLinkAvatar = signal<boolean>(false);\n protected isErrorLinkAvatarError = signal<boolean>(false);\n protected isShowIcon = signal<boolean>(false);\n protected color = computed(() => getColorById(this.idGenColor() || ''));\n protected fontSize = computed(this.fontSizeComputed.bind(this));\n\n private galleryViewerComponent?: ComponentRef<LibsUiComponentsGalleryViewerComponent>;\n\n // #region INPUT\n readonly typeShape = input<TYPE_SHAPE_AVATAR | undefined, TYPE_SHAPE_AVATAR | undefined>('circle', { transform: (value) => value ?? 'circle' });\n readonly classInclude = input<string | undefined, string | undefined>('mr-[8px]', { transform: (value) => value ?? 'mr-[8px]' });\n readonly size = input<TYPE_SIZE_AVATAR_CONFIG | undefined, TYPE_SIZE_AVATAR_CONFIG | undefined>(32, { transform: (value) => value ?? 32 });\n readonly linkAvatar = input<string>();\n readonly linkAvatarError = input<string>();\n readonly classImageInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n readonly zIndexPreviewImage = input<number>();\n readonly clickPreviewImage = input<boolean>();\n readonly idGenColor = input<string>();\n readonly getLastTextAfterSpace = input<boolean>(); // Lấy text cuối cùng sau khi cắt khoảng trắng. Lưu ý truyền biến này trước khi truyền biến textAvatar\n readonly textAvatar = input<string | undefined, string | undefined>('', {\n transform: (value) => {\n value = deleteUnicode(value || '')\n .replace(/[^a-zA-Z0-9\\s]/g, '')\n .trim();\n\n if (this.getLastTextAfterSpace()) {\n value = value.split(' ').pop() || '';\n }\n\n return value[0] || '—';\n },\n });\n readonly textAvatarClassInclude = input<string, string | undefined>('', { transform: (value) => value ?? '' });\n readonly containertextAvatarClassInclude = input<string, string | undefined>('', { transform: (value) => value ?? '' });\n\n // #region OUTPUT\n readonly outAvatarError = output<void>();\n readonly outEventPreviewImage = output<'open' | 'remove'>();\n\n // #region INJECT\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n\n constructor() {\n effect(() => {\n this.linkAvatar();\n untracked(() => {\n this.isShowIcon.set(false);\n this.isErrorLinkAvatar.set(false);\n this.isErrorLinkAvatarError.set(false);\n });\n });\n }\n\n /* FUNCTIONS */\n protected async handlerImageError(e: ErrorEvent) {\n if (!this.linkAvatarError()?.trim() && this.idGenColor() && this.textAvatar()) {\n this.outAvatarError.emit();\n this.isShowIcon.set(true);\n\n return;\n }\n if (this.isErrorLinkAvatar()) {\n this.isErrorLinkAvatarError.set(true);\n }\n this.isErrorLinkAvatar.set(true);\n\n if (this.isErrorLinkAvatarError() && this.idGenColor() && this.textAvatar()) {\n this.isShowIcon.set(true);\n }\n\n if (this.isErrorLinkAvatarError()) {\n return;\n }\n if (!this.linkAvatarError()) {\n this.outAvatarError.emit();\n\n return;\n }\n (e as IEvent).target.src = this.linkAvatarError();\n }\n\n protected handlerClickImage() {\n if (this.galleryViewerComponent || !this.clickPreviewImage()) {\n return;\n }\n this.outEventPreviewImage.emit('open');\n this.galleryViewerComponent = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsGalleryViewerComponent);\n this.galleryViewerComponent.setInput('images', [{ imageSrc: this.linkAvatar() }]);\n this.galleryViewerComponent.setInput('fieldDisplaySrcImage', 'imageSrc');\n this.galleryViewerComponent.setInput('singleImage', true);\n this.galleryViewerComponent.setInput('zIndex', this.zIndexPreviewImage());\n this.galleryViewerComponent.instance.outClose.subscribe(() => {\n this.dynamicComponentService.remove(this.galleryViewerComponent);\n this.galleryViewerComponent = undefined;\n this.outEventPreviewImage.emit('remove');\n });\n\n this.dynamicComponentService.addToBody(this.galleryViewerComponent);\n }\n\n /* COMPUTED PROPERTIES FUNCTION */\n private fontSizeComputed() {\n if (this.size() === 16 || this.size() === 24) {\n return 6;\n }\n\n if (this.size() === 32) {\n return 4;\n }\n\n if (this.size() === 40) {\n return 3;\n }\n\n if (this.size() === 64) {\n return 1;\n }\n return 4;\n }\n\n ngOnDestroy(): void {\n this.dynamicComponentService.remove(this.galleryViewerComponent);\n this.galleryViewerComponent = undefined;\n }\n}\n","<div\n class=\"libs_ui-component-avatar {{ classInclude() }}\"\n [class.libs_ui-component-avatar-rectangle]=\"typeShape() === 'rectangle'\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\">\n @if (!isShowIcon()) {\n <img\n [class]=\"classImageInclude() + (clickPreviewImage() ? ' cursor-pointer' : 'cursor-default')\"\n [src]=\"linkAvatar()\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerClickImage()\" />\n } @else {\n <div\n class=\"libs_ui-component-avatar-icon {{ containertextAvatarClassInclude() }}\"\n [style.background]=\"color()\">\n <div\n class=\"uppercase text-[#ffffff] libs-ui-font-h{{ fontSize() }}s {{ textAvatarClassInclude() }}\"\n [innerHTML]=\"textAvatar()\"></div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-avatar",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.307-0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/interfaces-types": "0.2.
|
|
7
|
-
"@libs-ui/utils": "0.2.
|
|
6
|
+
"@libs-ui/interfaces-types": "0.2.307-0",
|
|
7
|
+
"@libs-ui/utils": "0.2.307-0"
|
|
8
8
|
},
|
|
9
9
|
"sideEffects": false,
|
|
10
10
|
"module": "fesm2022/libs-ui-components-avatar.mjs",
|