@libs-ui/components-radio-single 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 CHANGED
@@ -1,32 +1,33 @@
1
1
  # @libs-ui/components-radio-single
2
2
 
3
- > Component hiển thị một radio button đơn lẻ, cho phép người dùng chọn hoặc bỏ chọn (tùy thuộc vào logic xử lý bên ngoài).
3
+ > Component hiển thị một radio button đơn lẻ, hỗ trợ label, avatar, hình ảnh, popover custom styling linh hoạt.
4
4
 
5
5
  ## Giới thiệu
6
6
 
7
- `LibsUiComponentsRadioSingleComponent` là một standalone Angular component dùng để hiển thị một radio button. hoạt động như một "dumb component" (uncontrolled), nghĩa trạng thái active thường được kiểm soát bởi parent hoặc một logic group bên ngoài. Component hỗ trợ nhiều tùy chỉnh về giao diện như label, icon, avatar, và tooltip.
7
+ `LibsUiComponentsRadioSingleComponent` là một standalone Angular component dùng để hiển thị một radio button đơn. Component hoạt động theo hình two-way binding qua `model<boolean>`, cho phép parent kiểm soát trạng thái active xử group logic bên ngoài. Component hỗ trợ đa dạng tùy chỉnh giao diện bao gồm label có i18n, avatar, bullet, icon tùy chỉnh, popover tooltip, và component outlet động.
8
8
 
9
- ### Tính năng
9
+ ## Tính năng
10
10
 
11
- - ✅ **Uncontrolled State**: Trạng thái `active` được điều khiển qua input two-way binding (`model<boolean>`).
12
- - ✅ **Rich Content**: Hỗ trợ Label, Avatar, Custom Icon, Popover Tooltip.
13
- - ✅ **Interaction Control**: `clickExactly` cho phép kiểm soát vùng click (chỉ icon/label hoặc toàn bộ container).
14
- - ✅ **Custom Styling**: Cung cấp nhiều input class để tùy biến giao diện dễ dàng.
11
+ - ✅ **Two-way binding** Trạng thái `active` dùng `model<boolean>`, hỗ trợ cả controlled uncontrolled pattern.
12
+ - ✅ **Rich content** Hỗ trợ label (có i18n interpolation), avatar, hình ảnh, bullet, popover tooltip.
13
+ - ✅ **Click behavior linh hoạt** — `clickExactly` điều khiển vùng click: chỉ icon/label hoặc toàn bộ container.
14
+ - ✅ **Disable state** Hỗ trợ disable hoàn toàn hoặc chỉ disable label riêng biệt.
15
+ - ✅ **Image fallback** — Tự động dùng `linkImageError` khi `linkImage` bị lỗi tải.
16
+ - ✅ **Component outlet** — Có thể inject component động vào bên trong radio qua `componentOutlet`.
17
+ - ✅ **Custom styling** — Cung cấp nhiều input class cho container, label, icon.
18
+ - ✅ **OnPush + Signals** — Hiệu năng cao với Angular change detection tối ưu.
15
19
 
16
20
  ## Khi nào sử dụng
17
21
 
18
- - Khi cần một radio button hoạt động độc lập (không cần group logic phức tạp).
19
- - Custom radio button layout (kết hợp với avatar, icon, popover).
20
- - Dùng để xây dựng các component phức tạp hơn như Radio Group style custom.
22
+ - Khi cần một radio button hoạt động độc lập không cần group logic phức tạp.
23
+ - Khi muốn tùy chỉnh layout radio button kết hợp với avatar, hình ảnh, hoặc popover.
24
+ - Khi xây dựng các component phức tạp hơn như Radio Group, Select List, hay option list custom.
25
+ - Khi cần radio button hỗ trợ i18n translate cho label.
21
26
 
22
27
  ## Cài đặt
23
28
 
24
29
  ```bash
25
- # npm
26
30
  npm install @libs-ui/components-radio-single
27
-
28
- # yarn
29
- yarn add @libs-ui/components-radio-single
30
31
  ```
31
32
 
32
33
  ## Import
@@ -39,86 +40,341 @@ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-
39
40
  imports: [LibsUiComponentsRadioSingleComponent],
40
41
  // ...
41
42
  })
42
- export class YourComponent {}
43
+ export class MyComponent {}
44
+ ```
45
+
46
+ ## Ví dụ sử dụng
47
+
48
+ ### 1. Radio button cơ bản
49
+
50
+ ```typescript
51
+ // my.component.ts
52
+ import { Component, signal } from '@angular/core';
53
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
54
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
55
+
56
+ @Component({
57
+ standalone: true,
58
+ imports: [LibsUiComponentsRadioSingleComponent],
59
+ templateUrl: './my.component.html',
60
+ })
61
+ export class MyComponent {
62
+ protected isActive = signal(false);
63
+
64
+ protected handlerChange(event: IRadioEvent): void {
65
+ event; // IRadioEvent: { active: boolean; key: unknown }
66
+ this.isActive.set(event.active);
67
+ }
68
+ }
69
+ ```
70
+
71
+ ```html
72
+ <!-- my.component.html -->
73
+ <libs_ui-components-radio-single
74
+ [active]="isActive()"
75
+ (outChange)="handlerChange($event)"
76
+ [key]="'option-1'"
77
+ label="Tùy chọn 1"
78
+ />
79
+ ```
80
+
81
+ ### 2. Radio button với disabled state
82
+
83
+ ```typescript
84
+ // my.component.ts
85
+ import { Component, signal } from '@angular/core';
86
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
87
+
88
+ @Component({
89
+ standalone: true,
90
+ imports: [LibsUiComponentsRadioSingleComponent],
91
+ templateUrl: './my.component.html',
92
+ })
93
+ export class MyComponent {
94
+ protected activeOption = signal(true);
95
+ protected inactiveOption = signal(false);
96
+ }
97
+ ```
98
+
99
+ ```html
100
+ <!-- my.component.html -->
101
+ <!-- Disabled và đang active -->
102
+ <libs_ui-components-radio-single
103
+ [active]="activeOption()"
104
+ [disable]="true"
105
+ label="Đã chọn (vô hiệu hóa)"
106
+ />
107
+
108
+ <!-- Disabled và không active -->
109
+ <libs_ui-components-radio-single
110
+ [active]="inactiveOption()"
111
+ [disable]="true"
112
+ label="Chưa chọn (vô hiệu hóa)"
113
+ />
114
+ ```
115
+
116
+ ### 3. Điều khiển vùng click bằng clickExactly
117
+
118
+ ```typescript
119
+ // my.component.ts
120
+ import { Component, signal } from '@angular/core';
121
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
122
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
123
+
124
+ @Component({
125
+ standalone: true,
126
+ imports: [LibsUiComponentsRadioSingleComponent],
127
+ templateUrl: './my.component.html',
128
+ })
129
+ export class MyComponent {
130
+ protected clickAnywhereActive = signal(false);
131
+ protected clickExactActive = signal(false);
132
+
133
+ protected handlerClickAnywhere(event: IRadioEvent): void {
134
+ event.active;
135
+ this.clickAnywhereActive.set(event.active);
136
+ }
137
+
138
+ protected handlerClickExact(event: IRadioEvent): void {
139
+ event.active;
140
+ this.clickExactActive.set(event.active);
141
+ }
142
+ }
143
+ ```
144
+
145
+ ```html
146
+ <!-- my.component.html -->
147
+
148
+ <!-- clickExactly=false: click vào bất kỳ đâu trong container đều toggle -->
149
+ <libs_ui-components-radio-single
150
+ [active]="clickAnywhereActive()"
151
+ (outChange)="handlerClickAnywhere($event)"
152
+ [clickExactly]="false"
153
+ classInclude="flex items-center w-full"
154
+ label="Click vào container sẽ toggle"
155
+ />
156
+
157
+ <!-- clickExactly=true (mặc định): chỉ click đúng icon hoặc label mới toggle -->
158
+ <libs_ui-components-radio-single
159
+ [active]="clickExactActive()"
160
+ (outChange)="handlerClickExact($event)"
161
+ [clickExactly]="true"
162
+ classInclude="flex items-center w-full"
163
+ label="Phải click đúng icon hoặc label"
164
+ />
43
165
  ```
44
166
 
45
- ## dụ
167
+ ### 4. Radio button với Avatar
168
+
169
+ ```typescript
170
+ // my.component.ts
171
+ import { Component, signal } from '@angular/core';
172
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
173
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
174
+ import { IAvatarConfig } from '@libs-ui/components-avatar';
46
175
 
47
- ### Basic Usage
176
+ @Component({
177
+ standalone: true,
178
+ imports: [LibsUiComponentsRadioSingleComponent],
179
+ templateUrl: './my.component.html',
180
+ })
181
+ export class MyComponent {
182
+ protected userActive = signal(false);
183
+
184
+ protected readonly userAvatarConfig: IAvatarConfig = {
185
+ linkAvatar: 'https://example.com/user-avatar.jpg',
186
+ linkAvatarError: 'https://example.com/default-avatar.jpg',
187
+ size: 32,
188
+ typeShape: 'circle',
189
+ textAvatar: 'ND',
190
+ idGenColor: 'user-001',
191
+ };
192
+
193
+ protected handlerUserChange(event: IRadioEvent): void {
194
+ event.key; // 'user-001'
195
+ this.userActive.set(event.active);
196
+ }
197
+ }
198
+ ```
48
199
 
49
200
  ```html
201
+ <!-- my.component.html -->
50
202
  <libs_ui-components-radio-single
51
- [active]="isActive"
52
- (outChange)="isActive = $event.active"
53
- label="Option 1" />
203
+ [active]="userActive()"
204
+ (outChange)="handlerUserChange($event)"
205
+ [key]="'user-001'"
206
+ [avatarConfig]="userAvatarConfig"
207
+ label="Nguyễn Dũng"
208
+ classLabelInclude="libs-ui-font-h4r ml-2"
209
+ />
54
210
  ```
55
211
 
56
- ### With Avatar
212
+ ### 5. Radio button với i18n interpolation
213
+
214
+ ```typescript
215
+ // my.component.ts
216
+ import { Component, signal } from '@angular/core';
217
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
218
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
219
+
220
+ @Component({
221
+ standalone: true,
222
+ imports: [LibsUiComponentsRadioSingleComponent],
223
+ templateUrl: './my.component.html',
224
+ })
225
+ export class MyComponent {
226
+ protected planActive = signal(false);
227
+
228
+ protected readonly labelParams: Record<string, unknown> = {
229
+ price: '99,000',
230
+ currency: 'VND',
231
+ };
232
+
233
+ protected handlerPlanChange(event: IRadioEvent): void {
234
+ event.active;
235
+ this.planActive.set(event.active);
236
+ }
237
+ }
238
+ ```
57
239
 
58
240
  ```html
241
+ <!-- my.component.html -->
242
+ <!-- label là i18n key, labelInterpolateParams truyền tham số vào translate pipe -->
59
243
  <libs_ui-components-radio-single
60
- [active]="isActive"
61
- [avatarConfig]="{ linkAvatar: '...', size: 32 }"
62
- label="User Option" />
63
- ```
64
-
65
- ## API
66
-
67
- ### libs_ui-components-radio-single
68
-
69
- #### Inputs
70
-
71
- | Property | Type | Default | Description |
72
- | -------------------------- | ---------------------------- | -------------------- | ------------------------------------------------------------------------ |
73
- | `[active]` | `model<boolean>` | `false` | Trạng thái active (checked) của radio. |
74
- | `[key]` | `unknown` | `undefined` | Key định danh cho radio button. |
75
- | `[label]` | `string` | `''` | Label hiển thị bên cạnh radio. |
76
- | `[labelInterpolateParams]` | `Record<string, unknown>` | `{}` | Params cho translate pipe của label. |
77
- | `[disable]` | `boolean` | `false` | Vô hiệu hóa tương tác. |
78
- | `[disableLabel]` | `boolean` | `false` | Vô hiệu hóa màu của label, vẫn cho phép chọn radio. |
79
- | `[clickExactly]` | `boolean` | `true` | `true`: chỉ click icon mới active. `false`: click container cũng active. |
80
- | `[typeRadio]` | `'normal' \| 'medium'` | `'normal'` | Kích thước/kiểu dáng radio. |
81
- | `[ignoreRadio]` | `boolean` | `false` | Ẩn icon radio (chĩa hiển thị label/avatar). |
82
- | `[linkImage]` | `string` | `''` | URL hình ảnh hiển thị cạnh label. |
83
- | `[linkImageError]` | `string` | `''` | URL hình ảnh dự phòng nếu linkImage lỗi. |
84
- | `[avatarConfig]` | `IAvatarConfig` | `undefined` | Cấu hình hiển thị avatar. |
85
- | `[classImageInclude]` | `string` | `''` | Custom class cho hình ảnh. |
86
- | `[imgTypeIcon]` | `boolean` | `false` | Nếu true, hình ảnh sẽ được cố định size 18x18px. |
87
- | `[bullet]` | `Record<string, string>` | `undefined` | Cấu hình style (CSS) cho bullet point cạnh radio. |
88
- | `[popover]` | `IPopover` | `undefined` | Cấu hình popover tooltip cho label. |
89
- | `[ignorePopoverLabel]` | `boolean` | `false` | Không hiển thị popover của label dù có cấu hình. |
90
- | `[zIndexLabel]` | `number` | `1200` | z-index cho label. |
91
- | `[classInclude]` | `string` | `''` | Custom class cho container. |
92
- | `[classLabelInclude]` | `string` | `'libs-ui-font-h4r'` | Custom class cho label. |
93
- | `[classIncludeIcon]` | `string` | `''` | Custom class cho icon radio. |
94
- | `[dataComponentOutlet]` | `TYPE_COMPONENT_OUTLET_DATA` | `undefined` | Data truyền vào component outlet. |
95
- | `[componentOutlet]` | `any` | `undefined` | Component truyền vào để hiển thị qua outlet. |
96
-
97
- #### Outputs
98
-
99
- | Property | Type | Description |
100
- | --------------------------------- | ------------- | -------------------------------------------------------- |
101
- | `(outChange)` | `IRadioEvent` | Emit khi trạng thái thay đổi (`{ active, key }`). |
102
- | `(outClickLabel)` | `void` | Emit khi click vào label. |
103
- | `(outChangStageFlagMousePopover)` | `IFlagMouse` | Emit trạng thái con trỏ chuột khi tương tác với tooltip. |
104
-
105
- #### Interfaces
106
-
107
- **IRadioEvent**
108
-
109
- | Property | Type | Description |
110
- | -------- | --------- | ------------------------------ |
111
- | `active` | `boolean` | Trạng thái mới sau khi change. |
112
- | `key` | `any` | Key của radio button. |
113
- | `item` | `any` | (Optional) Item data đi kèm. |
114
-
115
- ## Công nghệ
116
-
117
- | Technology | Version | Purpose |
118
- | --------------- | ------- | ---------------- |
119
- | Angular | 18+ | Framework |
120
- | Angular Signals | - | State management |
121
- | OnPush | - | Change Detection |
244
+ [active]="planActive()"
245
+ (outChange)="handlerPlanChange($event)"
246
+ [key]="'plan-basic'"
247
+ label="i18n_plan_price_label"
248
+ [labelInterpolateParams]="labelParams"
249
+ />
250
+ ```
251
+
252
+ ### 6. Radio button trong group (pattern thường dùng)
253
+
254
+ ```typescript
255
+ // my.component.ts
256
+ import { Component, signal, computed } from '@angular/core';
257
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
258
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
259
+
260
+ @Component({
261
+ standalone: true,
262
+ imports: [LibsUiComponentsRadioSingleComponent],
263
+ templateUrl: './my.component.html',
264
+ })
265
+ export class MyComponent {
266
+ protected selectedKey = signal<string>('option-a');
267
+
268
+ protected readonly options = [
269
+ { key: 'option-a', label: 'Tùy chọn A' },
270
+ { key: 'option-b', label: 'Tùy chọn B' },
271
+ { key: 'option-c', label: 'Tùy chọn C' },
272
+ ];
273
+
274
+ protected isActive = computed(() => (key: string) => this.selectedKey() === key);
275
+
276
+ protected handlerChange(event: IRadioEvent): void {
277
+ event.stopPropagation?.();
278
+ this.selectedKey.set(event.key as string);
279
+ }
280
+ }
281
+ ```
282
+
283
+ ```html
284
+ <!-- my.component.html -->
285
+ @for (option of options; track option.key) {
286
+ <libs_ui-components-radio-single
287
+ [active]="selectedKey() === option.key"
288
+ (outChange)="handlerChange($event)"
289
+ [key]="option.key"
290
+ [label]="option.label"
291
+ />
292
+ }
293
+ ```
294
+
295
+ ## @Input()
296
+
297
+ | Input | Type | Default | tả | Ví dụ |
298
+ |---|---|---|---|---|
299
+ | `[active]` | `model<boolean>` | `false` | Trạng thái active (checked) của radio. Hỗ trợ two-way binding. | `[active]="isActive()"` hoặc `[(active)]="isActive"` |
300
+ | `[key]` | `unknown` | `undefined` | Key định danh cho radio button, được emit kèm trong `outChange`. | `[key]="'option-1'"` |
301
+ | `[label]` | `string` | `''` | Label hiển thị bên cạnh radio. Hỗ trợ i18n key (qua TranslateModule). | `label="Tùy chọn 1"` |
302
+ | `[labelInterpolateParams]` | `Record<string, unknown>` | `{}` | Tham số truyền vào translate pipe cho label i18n. | `[labelInterpolateParams]="{ name: 'Admin' }"` |
303
+ | `[disable]` | `boolean` | `false` | Vô hiệu hóa hoàn toàn radio, không cho phép click hay toggle. | `[disable]="true"` |
304
+ | `[disableLabel]` | `boolean` | `false` | Chỉ hiệu hóa visual của label (mờ), vẫn cho phép click icon. | `[disableLabel]="true"` |
305
+ | `[clickExactly]` | `boolean` | `true` | `true`: chỉ click đúng icon/label mới toggle. `false`: click vào container cũng toggle. | `[clickExactly]="false"` |
306
+ | `[typeRadio]` | `'normal' \| 'medium'` | `'normal'` | Kích thước/kiểu dáng của icon radio. | `[typeRadio]="'medium'"` |
307
+ | `[ignoreRadio]` | `boolean` | `undefined` | Ẩn icon radio, chỉ hiển thị label/avatar/image. | `[ignoreRadio]="true"` |
308
+ | `[ignorePopoverLabel]` | `boolean` | `undefined` | Không hiển thị popover của label dù đã cấu hình. | `[ignorePopoverLabel]="true"` |
309
+ | `[linkImage]` | `string` | `''` | URL hình ảnh hiển thị cạnh radio. | `[linkImage]="'https://example.com/img.png'"` |
310
+ | `[linkImageError]` | `string` | `''` | URL hình ảnh dự phòng khi `linkImage` tải thất bại. | `[linkImageError]="'https://example.com/default.png'"` |
311
+ | `[imgTypeIcon]` | `boolean` | `undefined` | Nếu `true`, hình ảnh được cố định kích thước 18x18px (dùng cho icon nhỏ). | `[imgTypeIcon]="true"` |
312
+ | `[avatarConfig]` | `IAvatarConfig` | `undefined` | Cấu hình hiển thị avatar bên cạnh radio. | `[avatarConfig]="{ linkAvatar: '...', size: 32, typeShape: 'circle' }"` |
313
+ | `[bullet]` | `Record<string, string>` | `undefined` | Cấu hình bullet point (chấm màu) cạnh radio. Key `backgroundColor` là màu nền. | `[bullet]="{ backgroundColor: '#22c55e' }"` |
314
+ | `[popover]` | `IPopover` | `undefined` | Cấu hình popover tooltip hiển thị kèm icon thông tin. | `[popover]="{ config: { content: 'Mô tả thêm' } }"` |
315
+ | `[zIndexLabel]` | `number` | `1200` | z-index của label (dùng khi label nằm trong modal/dropdown). | `[zIndexLabel]="1300"` |
316
+ | `[classInclude]` | `string` | `''` | Custom CSS class thêm vào container ngoài cùng. | `classInclude="flex items-center gap-2"` |
317
+ | `[classLabelInclude]` | `string` | `'libs-ui-font-h4r '` | Custom CSS class cho label. Ghi đè default font class. | `classLabelInclude="libs-ui-font-h5r text-gray-600"` |
318
+ | `[classIncludeIcon]` | `string` | `''` | Custom CSS class cho icon radio. | `classIncludeIcon="text-blue-600"` |
319
+ | `[classImageInclude]` | `string` | `''` | Custom CSS class cho thẻ `<img>`. | `classImageInclude="rounded-full"` |
320
+ | `[dataComponentOutlet]` | `TYPE_COMPONENT_OUTLET_DATA` | `undefined` | Data truyền vào component được inject qua `componentOutlet`. | `[dataComponentOutlet]="{ name: 'value' }"` |
321
+ | `[componentOutlet]` | `any` | `undefined` | Component động được inject vào bên trong radio qua `ngComponentOutlet`. | `[componentOutlet]="MyBadgeComponent"` |
322
+
323
+ ## @Output()
324
+
325
+ | Output | Type | Mô tả | Handler TS | Binding HTML |
326
+ |---|---|---|---|---|
327
+ | `(outChange)` | `IRadioEvent` | Emit khi trạng thái radio thay đổi (toggle active). Chỉ emit khi chưa active và không bị disable. | `handlerChange(event: IRadioEvent): void { event.stopPropagation?.(); this.active.set(event.active); }` | `(outChange)="handlerChange($event)"` |
328
+ | `(outClickLabel)` | `void` | Emit khi người dùng click vào label. | `handlerClickLabel(): void { /* xử lý click label */ }` | `(outClickLabel)="handlerClickLabel()"` |
329
+ | `(outChangStageFlagMousePopover)` | `IFlagMouse` | Emit trạng thái chuột khi hover/leave popover (dùng để đồng bộ trạng thái popover với parent). | `handlerFlagMouse(flag: IFlagMouse): void { flag.stopPropagation?.(); this.flagMouse.set(flag); }` | `(outChangStageFlagMousePopover)="handlerFlagMouse($event)"` |
330
+
331
+ ## Types & Interfaces
332
+
333
+ ```typescript
334
+ import { IRadioEvent, IRadioItem } from '@libs-ui/components-radio-single';
335
+ import { IAvatarConfig } from '@libs-ui/components-avatar';
336
+ import { IPopover } from '@libs-ui/components-popover';
337
+ ```
338
+
339
+ ```typescript
340
+ // Event emit khi radio thay đổi trạng thái
341
+ export interface IRadioEvent {
342
+ active: boolean; // Trạng thái active mới sau khi thay đổi
343
+ key: any; // Key của radio button (từ input [key])
344
+ item?: any; // Data item đi kèm (tùy chọn, dùng khi integrate với list)
345
+ }
346
+
347
+ // Cấu hình cho từng item trong radio group (dùng khi xây Radio Group)
348
+ export interface IRadioItem {
349
+ key: any; // Key định danh bắt buộc
350
+ active: boolean; // Trạng thái active
351
+ classInclude?: string; // Custom class container
352
+ label?: string; // Label hiển thị (hỗ trợ i18n key)
353
+ labelInterpolateParams?: Record<string, unknown>; // Params cho translate
354
+ ignorePopoverLabel?: boolean; // Ẩn popover của label
355
+ classLabelInclude?: string; // Custom class label
356
+ popover?: IPopover; // Cấu hình popover
357
+ disable?: boolean; // Vô hiệu hóa
358
+ disableLabel?: boolean; // Vô hiệu hóa label
359
+ clickExactly?: boolean; // Điều khiển vùng click
360
+ zIndexLabel?: number; // z-index label
361
+ avatarConfig?: IAvatarConfig; // Cấu hình avatar
362
+ data?: any; // Data tùy ý đính kèm
363
+ [key: string]: any; // Mở rộng thêm fields
364
+ }
365
+ ```
366
+
367
+ ## Lưu ý quan trọng
368
+
369
+ ⚠️ **Logic nhóm radio phải xử lý ở parent**: Component này là một radio button đơn lẻ, không tự tắt các radio khác. Parent component phải tự xử lý logic "chỉ một radio được active" bằng cách theo dõi `selectedKey` và truyền `[active]="selectedKey() === item.key"` cho từng radio.
370
+
371
+ ⚠️ **clickExactly mặc định là true**: Mặc định người dùng phải click chính xác vào icon radio hoặc text label mới trigger toggle. Để click vào vùng container cũng trigger, cần truyền `[clickExactly]="false"` vào component.
372
+
373
+ ⚠️ **Radio không tự toggle lại về false**: Một khi radio đã `active = true`, `handlerClick` và `changeActive` sẽ không làm gì (guard `if (this.active())` trả về sớm). Đây là hành vi chuẩn của radio button — không cho phép bỏ chọn khi đã chọn. Nếu muốn toggle, cần xử lý bên ngoài.
374
+
375
+ ⚠️ **classLabelInclude ghi đè hoàn toàn**: Khi truyền `classLabelInclude`, giá trị mặc định `'libs-ui-font-h4r '` sẽ bị thay thế hoàn toàn. Nếu muốn giữ typography mặc định và thêm class khác, cần include lại: `classLabelInclude="libs-ui-font-h4r text-gray-600"`.
376
+
377
+ ⚠️ **Image fallback dùng AfterViewInit**: Cơ chế fallback cho `linkImageError` chỉ hoạt động sau khi view khởi tạo. Nếu `linkImage` thay đổi dynamically, `linkImageDisplay` signal sẽ reset về `linkImage` mới nhờ `effect()`, nhưng listener lỗi chỉ được đăng ký một lần trong `ngAfterViewInit`.
122
378
 
123
379
  ## Demo
124
380
 
@@ -126,4 +382,4 @@ export class YourComponent {}
126
382
  npx nx serve core-ui
127
383
  ```
128
384
 
129
- Truy cập path: `/components/radio/single`
385
+ Truy cập: http://localhost:4500/components/radio/single
@@ -1,11 +1,12 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { ChangeDetectionStrategy, Component, computed, effect, input, model, output, signal, untracked, viewChild } from '@angular/core';
2
+ import { NgComponentOutlet } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
5
  import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
4
6
  import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
5
7
  import { TranslateModule } from '@ngx-translate/core';
6
- import { Subject, fromEvent } from 'rxjs';
7
- import { take, takeUntil } from 'rxjs/operators';
8
- import { NgComponentOutlet } from '@angular/common';
8
+ import { fromEvent } from 'rxjs';
9
+ import { take } from 'rxjs/operators';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@ngx-translate/core";
11
12
  export class LibsUiComponentsRadioSingleComponent {
@@ -20,7 +21,6 @@ export class LibsUiComponentsRadioSingleComponent {
20
21
  inputs: this.dataComponentOutlet() || {},
21
22
  };
22
23
  });
23
- onDestroy = new Subject();
24
24
  // #region INPUT
25
25
  key = input();
26
26
  active = model(false);
@@ -51,6 +51,7 @@ export class LibsUiComponentsRadioSingleComponent {
51
51
  outChangStageFlagMousePopover = output();
52
52
  /* VIEW CHILD */
53
53
  imageEl = viewChild('imageEl');
54
+ destroyRef = inject(DestroyRef);
54
55
  constructor() {
55
56
  effect(() => {
56
57
  this.linkImage();
@@ -60,7 +61,7 @@ export class LibsUiComponentsRadioSingleComponent {
60
61
  ngAfterViewInit() {
61
62
  if (this.imageEl()) {
62
63
  fromEvent(this.imageEl()?.nativeElement, 'error')
63
- .pipe(take(1), takeUntil(this.onDestroy))
64
+ .pipe(take(1), takeUntilDestroyed(this.destroyRef))
64
65
  .subscribe(() => {
65
66
  this.linkImageDisplay.set(this.linkImageError());
66
67
  });
@@ -90,15 +91,11 @@ export class LibsUiComponentsRadioSingleComponent {
90
91
  async handlerChangStageFlagMouse(flag) {
91
92
  this.outChangStageFlagMousePopover.emit(flag);
92
93
  }
93
- ngOnDestroy() {
94
- this.onDestroy.next();
95
- this.onDestroy.complete();
96
- }
97
94
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsRadioSingleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
98
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsRadioSingleComponent, isStandalone: true, selector: "libs_ui-components-radio-single", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelInterpolateParams: { classPropertyName: "labelInterpolateParams", publicName: "labelInterpolateParams", isSignal: true, isRequired: false, transformFunction: null }, ignorePopoverLabel: { classPropertyName: "ignorePopoverLabel", publicName: "ignorePopoverLabel", isSignal: true, isRequired: false, transformFunction: null }, classLabelInclude: { classPropertyName: "classLabelInclude", publicName: "classLabelInclude", isSignal: true, isRequired: false, transformFunction: null }, linkImage: { classPropertyName: "linkImage", publicName: "linkImage", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, avatarConfig: { classPropertyName: "avatarConfig", publicName: "avatarConfig", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, imgTypeIcon: { classPropertyName: "imgTypeIcon", publicName: "imgTypeIcon", isSignal: true, isRequired: false, transformFunction: null }, bullet: { classPropertyName: "bullet", publicName: "bullet", isSignal: true, isRequired: false, transformFunction: null }, popover: { classPropertyName: "popover", publicName: "popover", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, clickExactly: { classPropertyName: "clickExactly", publicName: "clickExactly", isSignal: true, isRequired: false, transformFunction: null }, typeRadio: { classPropertyName: "typeRadio", publicName: "typeRadio", isSignal: true, isRequired: false, transformFunction: null }, ignoreRadio: { classPropertyName: "ignoreRadio", publicName: "ignoreRadio", isSignal: true, isRequired: false, transformFunction: null }, zIndexLabel: { classPropertyName: "zIndexLabel", publicName: "zIndexLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, dataComponentOutlet: { classPropertyName: "dataComponentOutlet", publicName: "dataComponentOutlet", isSignal: true, isRequired: false, transformFunction: null }, componentOutlet: { classPropertyName: "componentOutlet", publicName: "componentOutlet", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", outClickLabel: "outClickLabel", outChange: "outChange", outChangStageFlagMousePopover: "outChangStageFlagMousePopover" }, viewQueries: [{ propertyName: "imageEl", first: true, predicate: ["imageEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containerTextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsRadioSingleComponent, isStandalone: true, selector: "libs_ui-components-radio-single", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelInterpolateParams: { classPropertyName: "labelInterpolateParams", publicName: "labelInterpolateParams", isSignal: true, isRequired: false, transformFunction: null }, ignorePopoverLabel: { classPropertyName: "ignorePopoverLabel", publicName: "ignorePopoverLabel", isSignal: true, isRequired: false, transformFunction: null }, classLabelInclude: { classPropertyName: "classLabelInclude", publicName: "classLabelInclude", isSignal: true, isRequired: false, transformFunction: null }, linkImage: { classPropertyName: "linkImage", publicName: "linkImage", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, avatarConfig: { classPropertyName: "avatarConfig", publicName: "avatarConfig", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, imgTypeIcon: { classPropertyName: "imgTypeIcon", publicName: "imgTypeIcon", isSignal: true, isRequired: false, transformFunction: null }, bullet: { classPropertyName: "bullet", publicName: "bullet", isSignal: true, isRequired: false, transformFunction: null }, popover: { classPropertyName: "popover", publicName: "popover", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, clickExactly: { classPropertyName: "clickExactly", publicName: "clickExactly", isSignal: true, isRequired: false, transformFunction: null }, typeRadio: { classPropertyName: "typeRadio", publicName: "typeRadio", isSignal: true, isRequired: false, transformFunction: null }, ignoreRadio: { classPropertyName: "ignoreRadio", publicName: "ignoreRadio", isSignal: true, isRequired: false, transformFunction: null }, zIndexLabel: { classPropertyName: "zIndexLabel", publicName: "zIndexLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, dataComponentOutlet: { classPropertyName: "dataComponentOutlet", publicName: "dataComponentOutlet", isSignal: true, isRequired: false, transformFunction: null }, componentOutlet: { classPropertyName: "componentOutlet", publicName: "componentOutlet", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", outClickLabel: "outClickLabel", outChange: "outChange", outChangStageFlagMousePopover: "outChangStageFlagMousePopover" }, viewQueries: [{ propertyName: "imageEl", first: true, predicate: ["imageEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\"\n (keydown.enter)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n alt=\"\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containerTextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
99
96
  }
100
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsRadioSingleComponent, decorators: [{
101
98
  type: Component,
102
- args: [{ selector: 'libs_ui-components-radio-single', standalone: true, imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"] }]
99
+ args: [{ selector: 'libs_ui-components-radio-single', standalone: true, imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\"\n (keydown.enter)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n alt=\"\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"] }]
103
100
  }], ctorParameters: () => [] });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL3NpbmdsZS9zcmMvcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL3NpbmdsZS9zcmMvcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUF5QixRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBaUIsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RixPQUFPLEVBQXdCLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVdwRCxNQUFNLE9BQU8sb0NBQW9DO0lBQy9DLG1CQUFtQjtJQUNULGdCQUFnQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUN0QywyQkFBMkIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUM1QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTztZQUNMLFNBQVMsRUFBRSxJQUFJ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LENBQUM7SUFDbEUsQ0FBQztJQUVTLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxJQUFnQjtRQUN6RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBaEdVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLG9oSENwQmpELDhrR0E0RUEsMjdCRDNEWSxlQUFlLDRGQUFFLGlCQUFpQixvUEFBRSwrQkFBK0IsNlhBQUUsZ0NBQWdDOzs0RkFHcEcsb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsK0JBQStCLEVBQUUsZ0NBQWdDLENBQUMsbUJBQy9GLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXZhdGFyQ29uZmlnLCBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXIsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJUmFkaW9FdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50LCBUWVBFX0NPTVBPTkVOVF9PVVRMRVRfREFUQSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtY29tcG9uZW50LW91dGxldCc7XG5pbXBvcnQgeyBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1yYWRpby1zaW5nbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYWRpby5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBOZ0NvbXBvbmVudE91dGxldCwgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgbGlua0ltYWdlRGlzcGxheSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGRhdGFDb21wb25lbnRPdXRsZXRDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50T3V0bGV0KCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb21wb25lbnQ6IHRoaXMuY29tcG9uZW50T3V0bGV0KCksXG4gICAgICBpbnB1dHM6IHRoaXMuZGF0YUNvbXBvbmVudE91dGxldCgpIHx8IHt9LFxuICAgIH07XG4gIH0pO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBrZXkgPSBpbnB1dDx1bmtub3duPigpO1xuICByZWFkb25seSBhY3RpdmUgPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBsYWJlbCA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBsYWJlbEludGVycG9sYXRlUGFyYW1zID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPih7fSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwge30gfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVBvcG92ZXJMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTGFiZWxJbmNsdWRlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdsaWJzLXVpLWZvbnQtaDRyICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSBsaW5rSW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgbGlua0ltYWdlRXJyb3IgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgYXZhdGFyQ29uZmlnID0gaW5wdXQ8SUF2YXRhckNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbWFnZUluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaW1nVHlwZUljb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBidWxsZXQgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpO1xuICByZWFkb25seSBwb3BvdmVyID0gaW5wdXQ8SVBvcG92ZXI+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSB0eXBlUmFkaW8gPSBpbnB1dDwnbm9ybWFsJyB8ICdtZWRpdW0nIHwgdW5kZWZpbmVkLCAnbm9ybWFsJyB8ICdtZWRpdW0nIHwgdW5kZWZpbmVkPignbm9ybWFsJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ25vcm1hbCcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVJhZGlvID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4TGFiZWwgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQsIG51bWJlciB8IHVuZGVmaW5lZD4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlSWNvbiA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YUNvbXBvbmVudE91dGxldCA9IGlucHV0PFRZUEVfQ09NUE9ORU5UX09VVExFVF9EQVRBPigpO1xuICByZWFkb25seSBjb21wb25lbnRPdXRsZXQgPSBpbnB1dDxMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IHwgYW55PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dENsaWNrTGFiZWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PElSYWRpb0V2ZW50PigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3ZlciA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSBpbWFnZUVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdpbWFnZUVsJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMubGlua0ltYWdlKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5saW5rSW1hZ2VEaXNwbGF5LnNldCh0aGlzLmxpbmtJbWFnZSgpKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VFbCgpKSB7XG4gICAgICBmcm9tRXZlbnQodGhpcy5pbWFnZUVsKCk/Lm5hdGl2ZUVsZW1lbnQsICdlcnJvcicpXG4gICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlua0ltYWdlRGlzcGxheS5zZXQodGhpcy5saW5rSW1hZ2VFcnJvcigpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2soZTogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2hhbmdlQWN0aXZlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckV2ZW50TGFiZWwodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgIHRoaXMub3V0Q2xpY2tMYWJlbC5lbWl0KCk7XG4gICAgICB0aGlzLmNoYW5nZUFjdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZSgpIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlLnVwZGF0ZSgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7IGFjdGl2ZTogdGhpcy5hY3RpdmUoKSwga2V5OiB0aGlzLmtleSgpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKGZsYWc6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyLmVtaXQoZmxhZyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBbY2xhc3NdPVwiJ2xpYnMtdWktcmFkaW8gJyArIGNsYXNzSW5jbHVkZSgpXCJcbiAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFjbGlja0V4YWN0bHkoKVwiXG4gIChjbGljayk9XCJoYW5kbGVyQ2xpY2soJGV2ZW50KVwiPlxuICBAaWYgKCFpZ25vcmVSYWRpbygpKSB7XG4gICAgPGRpdlxuICAgICAgW2NsYXNzLmxpYnMtdWktaWNvbi1yYWRpby11bnNlbGVjdGVkXT1cIiFhY3RpdmUoKVwiXG4gICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWFjdGl2ZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tcmFkaW8tc2VsZWN0ZWRdPVwiYWN0aXZlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1hY3RpdmVdPVwiZGlzYWJsZSgpICYmIGFjdGl2ZSgpXCJcbiAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlSWNvbigpICsgJyBsaWJzLXVpLXJhZGlvLXR5cGUtJyArIHR5cGVSYWRpbygpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRMYWJlbCgnY2xpY2snKVwiPjwvZGl2PlxuICB9XG4gIEBpZiAobGlua0ltYWdlRGlzcGxheSgpKSB7XG4gICAgPGltZ1xuICAgICAgI2ltYWdlRWxcbiAgICAgIFtzcmNdPVwibGlua0ltYWdlRGlzcGxheSgpXCJcbiAgICAgIFtjbGFzc109XCInbGlicy11aS1yYWRpby1pbWFnZSAnICsgY2xhc3NJbWFnZUluY2x1ZGUoKVwiXG4gICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtjbGFzcy53LVsxOHB4XV09XCJpbWdUeXBlSWNvbigpXCJcbiAgICAgIFtjbGFzcy5oLVsxOHB4XV09XCJpbWdUeXBlSWNvbigpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRMYWJlbCgnY2xpY2snKVwiIC8+XG4gIH1cbiAgQGlmIChhdmF0YXJDb25maWcoKTsgYXMgYXZhdGFyQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1hdmF0YXJcbiAgICAgIFt0eXBlU2hhcGVdPVwiYXZhdGFyQ29uZmlnLnR5cGVTaGFwZSB8fCAnY2lyY2xlJ1wiXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cImF2YXRhckNvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgW3NpemVdPVwiYXZhdGFyQ29uZmlnLnNpemUgfHwgMjRcIlxuICAgICAgW2xpbmtBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJcIlxuICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgIFtpZEdlbkNvbG9yXT1cImF2YXRhckNvbmZpZy5pZEdlbkNvbG9yXCJcbiAgICAgIFt0ZXh0QXZhdGFyXT1cImF2YXRhckNvbmZpZy50ZXh0QXZhdGFyXCIgLz5cbiAgfVxuICBAaWYgKGJ1bGxldCgpOyBhcyBidWxsZXRDb25maWcpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpYnMtdWktcmFkaW8tYnVsbGV0XCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ1bGxldENvbmZpZ1snYmFja2dyb3VuZENvbG9yJ11cIlxuICAgICAgW2NsYXNzLmN1cnNvci1kZWZhdWx0XT1cImRpc2FibGUoKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckV2ZW50TGFiZWwoJ2NsaWNrJylcIj48L2Rpdj5cbiAgfVxuICBAaWYgKGxhYmVsKCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFthdHRyLmlzTGFiZWxdPVwidHJ1ZVwiXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzTGFiZWxJbmNsdWRlKCkgKyAoZGlzYWJsZSgpID8gJyBjdXJzb3ItZGVmYXVsdCcgOiAnIGN1cnNvci1wb2ludGVyJylcIlxuICAgICAgW2lnbm9yZUN1cnNvclBvaW50ZXJNb2RlTGlrZUNsaWNrXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGVMYWJlbCgpXCJcbiAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJpZ25vcmVQb3BvdmVyTGFiZWwoKVwiXG4gICAgICBbY29uZmlnXT1cInsgY29udGVudDogbGFiZWwoKSwgdGltZXJEZXN0cm95OiA1MCwgekluZGV4OiB6SW5kZXhMYWJlbCgpIH1cIlxuICAgICAgW2lubmVySFRNTF09XCJsYWJlbCgpIHwgdHJhbnNsYXRlOiBsYWJlbEludGVycG9sYXRlUGFyYW1zKClcIlxuICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAob3V0RXZlbnQpPVwiaGFuZGxlckV2ZW50TGFiZWwoJGV2ZW50KVwiIC8+XG4gIH1cbiAgQGlmIChwb3BvdmVyKCk7IGFzIHBvcG92ZXIpIHtcbiAgICBAaWYgKCFwb3BvdmVyLmRhdGFWaWV3KSB7XG4gICAgICA8aVxuICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cInBvcG92ZXIuY29uZmlnXCJcbiAgICAgICAgW2NsYXNzXT1cInBvcG92ZXIuY2xhc3NJbmNsdWRlID8/ICdsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lJ1wiXG4gICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIj48L2k+XG4gICAgfVxuICAgIEBpZiAocG9wb3Zlci5kYXRhVmlldykge1xuICAgICAgQGxldCBjb25zdEh0bWxEYXRhVmlldyA9IHBvcG92ZXIuZGF0YVZpZXcgfHwgJyAnO1xuICAgICAgPGRpdlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cInBvcG92ZXIuY29uZmlnXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJjb25zdEh0bWxEYXRhVmlldyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIj48L2Rpdj5cbiAgICB9XG4gIH1cbiAgQGlmIChkYXRhQ29tcG9uZW50T3V0bGV0Q29tcHV0ZWQoKTsgYXMgZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJkYXRhQ29tcG9uZW50T3V0bGV0Q29tcHV0ZWQuY29tcG9uZW50OyBpbnB1dHM6IGRhdGFDb21wb25lbnRPdXRsZXRDb21wdXRlZC5pbnB1dHNcIiAvPlxuICB9XG48L2Rpdj5cbiJdfQ==
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL3NpbmdsZS9zcmMvcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL3NpbmdsZS9zcmMvcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBYyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQWlCLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUYsT0FBTyxFQUF3QixnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBWXRDLE1BQU0sT0FBTyxvQ0FBb0M7SUFDL0MsbUJBQW1CO0lBQ1QsZ0JBQWdCLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLDJCQUEyQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxD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TSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVTLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxJQUFnQjtRQUN6RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7d0dBM0ZVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLG9oSENyQmpELDR5R0FpRkEsMjdCRC9EWSxlQUFlLDRGQUFFLGlCQUFpQixvUEFBRSwrQkFBK0IsNlhBQUUsZ0NBQWdDOzs0RkFHcEcsb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsK0JBQStCLEVBQUUsZ0NBQWdDLENBQUMsbUJBQy9GLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBJQXZhdGFyQ29uZmlnLCBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NvbXBvbmVudE91dGxldENvbXBvbmVudCwgVFlQRV9DT01QT05FTlRfT1VUTEVUX0RBVEEgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNvbXBvbmVudC1vdXRsZXQnO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXIsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSVJhZGlvRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTmdDb21wb25lbnRPdXRsZXQsIExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBsaW5rSW1hZ2VEaXNwbGF5ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRPdXRsZXQoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBvbmVudDogdGhpcy5jb21wb25lbnRPdXRsZXQoKSxcbiAgICAgIGlucHV0czogdGhpcy5kYXRhQ29tcG9uZW50T3V0bGV0KCkgfHwge30sXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBrZXkgPSBpbnB1dDx1bmtub3duPigpO1xuICByZWFkb25seSBhY3RpdmUgPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBsYWJlbCA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBsYWJlbEludGVycG9sYXRlUGFyYW1zID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPih7fSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwge30gfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVBvcG92ZXJMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTGFiZWxJbmNsdWRlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdsaWJzLXVpLWZvbnQtaDRyICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSBsaW5rSW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgbGlua0ltYWdlRXJyb3IgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgYXZhdGFyQ29uZmlnID0gaW5wdXQ8SUF2YXRhckNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbWFnZUluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaW1nVHlwZUljb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBidWxsZXQgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpO1xuICByZWFkb25seSBwb3BvdmVyID0gaW5wdXQ8SVBvcG92ZXI+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSB0eXBlUmFkaW8gPSBpbnB1dDwnbm9ybWFsJyB8ICdtZWRpdW0nIHwgdW5kZWZpbmVkLCAnbm9ybWFsJyB8ICdtZWRpdW0nIHwgdW5kZWZpbmVkPignbm9ybWFsJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ25vcm1hbCcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVJhZGlvID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4TGFiZWwgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQsIG51bWJlciB8IHVuZGVmaW5lZD4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlSWNvbiA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YUNvbXBvbmVudE91dGxldCA9IGlucHV0PFRZUEVfQ09NUE9ORU5UX09VVExFVF9EQVRBPigpO1xuICByZWFkb25seSBjb21wb25lbnRPdXRsZXQgPSBpbnB1dDxMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IHwgYW55PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dENsaWNrTGFiZWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PElSYWRpb0V2ZW50PigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3ZlciA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbWFnZUVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdpbWFnZUVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5saW5rSW1hZ2UoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmxpbmtJbWFnZURpc3BsYXkuc2V0KHRoaXMubGlua0ltYWdlKCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbWFnZUVsKCkpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmltYWdlRWwoKT8ubmF0aXZlRWxlbWVudCwgJ2Vycm9yJylcbiAgICAgICAgLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlua0ltYWdlRGlzcGxheS5zZXQodGhpcy5saW5rSW1hZ2VFcnJvcigpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2soZTogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2hhbmdlQWN0aXZlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckV2ZW50TGFiZWwodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgIHRoaXMub3V0Q2xpY2tMYWJlbC5lbWl0KCk7XG4gICAgICB0aGlzLmNoYW5nZUFjdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZSgpIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlLnVwZGF0ZSgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7IGFjdGl2ZTogdGhpcy5hY3RpdmUoKSwga2V5OiB0aGlzLmtleSgpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKGZsYWc6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyLmVtaXQoZmxhZyk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW2NsYXNzXT1cIidsaWJzLXVpLXJhZGlvICcgKyBjbGFzc0luY2x1ZGUoKVwiXG4gIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCIhY2xpY2tFeGFjdGx5KClcIlxuICAoY2xpY2spPVwiaGFuZGxlckNsaWNrKCRldmVudClcIlxuICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVyQ2xpY2soJGV2ZW50KVwiPlxuICBAaWYgKCFpZ25vcmVSYWRpbygpKSB7XG4gICAgPGRpdlxuICAgICAgW2NsYXNzLmxpYnMtdWktaWNvbi1yYWRpby11bnNlbGVjdGVkXT1cIiFhY3RpdmUoKVwiXG4gICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWFjdGl2ZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tcmFkaW8tc2VsZWN0ZWRdPVwiYWN0aXZlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1hY3RpdmVdPVwiZGlzYWJsZSgpICYmIGFjdGl2ZSgpXCJcbiAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlSWNvbigpICsgJyBsaWJzLXVpLXJhZGlvLXR5cGUtJyArIHR5cGVSYWRpbygpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRMYWJlbCgnY2xpY2snKVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVyRXZlbnRMYWJlbCgnY2xpY2snKVwiPjwvZGl2PlxuICB9XG4gIEBpZiAobGlua0ltYWdlRGlzcGxheSgpKSB7XG4gICAgPGltZ1xuICAgICAgI2ltYWdlRWxcbiAgICAgIFtzcmNdPVwibGlua0ltYWdlRGlzcGxheSgpXCJcbiAgICAgIFtjbGFzc109XCInbGlicy11aS1yYWRpby1pbWFnZSAnICsgY2xhc3NJbWFnZUluY2x1ZGUoKVwiXG4gICAgICBhbHQ9XCJcIlxuICAgICAgW2NsYXNzLmN1cnNvci1kZWZhdWx0XT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3Mudy1bMThweF1dPVwiaW1nVHlwZUljb24oKVwiXG4gICAgICBbY2xhc3MuaC1bMThweF1dPVwiaW1nVHlwZUljb24oKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckV2ZW50TGFiZWwoJ2NsaWNrJylcIlxuICAgICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlckV2ZW50TGFiZWwoJ2NsaWNrJylcIiAvPlxuICB9XG4gIEBpZiAoYXZhdGFyQ29uZmlnKCk7IGFzIGF2YXRhckNvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyXG4gICAgICBbdHlwZVNoYXBlXT1cImF2YXRhckNvbmZpZy50eXBlU2hhcGUgfHwgJ2NpcmNsZSdcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJhdmF0YXJDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtzaXplXT1cImF2YXRhckNvbmZpZy5zaXplIHx8IDI0XCJcbiAgICAgIFtsaW5rQXZhdGFyXT1cImF2YXRhckNvbmZpZy5saW5rQXZhdGFyXCJcbiAgICAgIFtsaW5rQXZhdGFyRXJyb3JdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJFcnJvclwiXG4gICAgICBbaWRHZW5Db2xvcl09XCJhdmF0YXJDb25maWcuaWRHZW5Db2xvclwiXG4gICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiIC8+XG4gIH1cbiAgQGlmIChidWxsZXQoKTsgYXMgYnVsbGV0Q29uZmlnKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXJhZGlvLWJ1bGxldFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJidWxsZXRDb25maWdbJ2JhY2tncm91bmRDb2xvciddXCJcbiAgICAgIFtjbGFzcy5jdXJzb3ItZGVmYXVsdF09XCJkaXNhYmxlKClcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZXJFdmVudExhYmVsKCdjbGljaycpXCJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cImhhbmRsZXJFdmVudExhYmVsKCdjbGljaycpXCI+PC9kaXY+XG4gIH1cbiAgQGlmIChsYWJlbCgpKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbYXR0ci5pc0xhYmVsXT1cInRydWVcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0xhYmVsSW5jbHVkZSgpICsgKGRpc2FibGUoKSA/ICcgY3Vyc29yLWRlZmF1bHQnIDogJyBjdXJzb3ItcG9pbnRlcicpXCJcbiAgICAgIFtpZ25vcmVDdXJzb3JQb2ludGVyTW9kZUxpa2VDbGlja109XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiaWdub3JlUG9wb3ZlckxhYmVsKClcIlxuICAgICAgW2NvbmZpZ109XCJ7IGNvbnRlbnQ6IGxhYmVsKCksIHRpbWVyRGVzdHJveTogNTAsIHpJbmRleDogekluZGV4TGFiZWwoKSB9XCJcbiAgICAgIFtpbm5lckhUTUxdPVwibGFiZWwoKSB8IHRyYW5zbGF0ZTogbGFiZWxJbnRlcnBvbGF0ZVBhcmFtcygpXCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudExhYmVsKCRldmVudClcIiAvPlxuICB9XG4gIEBpZiAocG9wb3ZlcigpOyBhcyBwb3BvdmVyKSB7XG4gICAgQGlmICghcG9wb3Zlci5kYXRhVmlldykge1xuICAgICAgPGlcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJwb3BvdmVyLmNvbmZpZ1wiXG4gICAgICAgIFtjbGFzc109XCJwb3BvdmVyLmNsYXNzSW5jbHVkZSA/PyAnbGlicy11aS1pY29uLXRvb2x0aXAtb3V0bGluZSdcIlxuICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCI+PC9pPlxuICAgIH1cbiAgICBAaWYgKHBvcG92ZXIuZGF0YVZpZXcpIHtcbiAgICAgIEBsZXQgY29uc3RIdG1sRGF0YVZpZXcgPSBwb3BvdmVyLmRhdGFWaWV3IHx8ICcgJztcbiAgICAgIDxkaXZcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJwb3BvdmVyLmNvbmZpZ1wiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiY29uc3RIdG1sRGF0YVZpZXcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCI+PC9kaXY+XG4gICAgfVxuICB9XG4gIEBpZiAoZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkKCk7IGFzIGRhdGFDb21wb25lbnRPdXRsZXRDb21wdXRlZCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkLmNvbXBvbmVudDsgaW5wdXRzOiBkYXRhQ29tcG9uZW50T3V0bGV0Q29tcHV0ZWQuaW5wdXRzXCIgLz5cbiAgfVxuPC9kaXY+XG4iXX0=
@@ -1,12 +1,13 @@
1
+ import { NgComponentOutlet } from '@angular/common';
1
2
  import * as i0 from '@angular/core';
2
- import { signal, computed, input, model, output, viewChild, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { signal, computed, input, model, output, viewChild, inject, DestroyRef, effect, untracked, Component, ChangeDetectionStrategy } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
5
  import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
4
6
  import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
5
7
  import * as i1 from '@ngx-translate/core';
6
8
  import { TranslateModule } from '@ngx-translate/core';
7
- import { Subject, fromEvent } from 'rxjs';
8
- import { take, takeUntil } from 'rxjs/operators';
9
- import { NgComponentOutlet } from '@angular/common';
9
+ import { fromEvent } from 'rxjs';
10
+ import { take } from 'rxjs/operators';
10
11
 
11
12
  /* eslint-disable @typescript-eslint/no-explicit-any */
12
13
  class LibsUiComponentsRadioSingleComponent {
@@ -21,7 +22,6 @@ class LibsUiComponentsRadioSingleComponent {
21
22
  inputs: this.dataComponentOutlet() || {},
22
23
  };
23
24
  });
24
- onDestroy = new Subject();
25
25
  // #region INPUT
26
26
  key = input();
27
27
  active = model(false);
@@ -52,6 +52,7 @@ class LibsUiComponentsRadioSingleComponent {
52
52
  outChangStageFlagMousePopover = output();
53
53
  /* VIEW CHILD */
54
54
  imageEl = viewChild('imageEl');
55
+ destroyRef = inject(DestroyRef);
55
56
  constructor() {
56
57
  effect(() => {
57
58
  this.linkImage();
@@ -61,7 +62,7 @@ class LibsUiComponentsRadioSingleComponent {
61
62
  ngAfterViewInit() {
62
63
  if (this.imageEl()) {
63
64
  fromEvent(this.imageEl()?.nativeElement, 'error')
64
- .pipe(take(1), takeUntil(this.onDestroy))
65
+ .pipe(take(1), takeUntilDestroyed(this.destroyRef))
65
66
  .subscribe(() => {
66
67
  this.linkImageDisplay.set(this.linkImageError());
67
68
  });
@@ -91,16 +92,12 @@ class LibsUiComponentsRadioSingleComponent {
91
92
  async handlerChangStageFlagMouse(flag) {
92
93
  this.outChangStageFlagMousePopover.emit(flag);
93
94
  }
94
- ngOnDestroy() {
95
- this.onDestroy.next();
96
- this.onDestroy.complete();
97
- }
98
95
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsRadioSingleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
99
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsRadioSingleComponent, isStandalone: true, selector: "libs_ui-components-radio-single", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelInterpolateParams: { classPropertyName: "labelInterpolateParams", publicName: "labelInterpolateParams", isSignal: true, isRequired: false, transformFunction: null }, ignorePopoverLabel: { classPropertyName: "ignorePopoverLabel", publicName: "ignorePopoverLabel", isSignal: true, isRequired: false, transformFunction: null }, classLabelInclude: { classPropertyName: "classLabelInclude", publicName: "classLabelInclude", isSignal: true, isRequired: false, transformFunction: null }, linkImage: { classPropertyName: "linkImage", publicName: "linkImage", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, avatarConfig: { classPropertyName: "avatarConfig", publicName: "avatarConfig", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, imgTypeIcon: { classPropertyName: "imgTypeIcon", publicName: "imgTypeIcon", isSignal: true, isRequired: false, transformFunction: null }, bullet: { classPropertyName: "bullet", publicName: "bullet", isSignal: true, isRequired: false, transformFunction: null }, popover: { classPropertyName: "popover", publicName: "popover", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, clickExactly: { classPropertyName: "clickExactly", publicName: "clickExactly", isSignal: true, isRequired: false, transformFunction: null }, typeRadio: { classPropertyName: "typeRadio", publicName: "typeRadio", isSignal: true, isRequired: false, transformFunction: null }, ignoreRadio: { classPropertyName: "ignoreRadio", publicName: "ignoreRadio", isSignal: true, isRequired: false, transformFunction: null }, zIndexLabel: { classPropertyName: "zIndexLabel", publicName: "zIndexLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, dataComponentOutlet: { classPropertyName: "dataComponentOutlet", publicName: "dataComponentOutlet", isSignal: true, isRequired: false, transformFunction: null }, componentOutlet: { classPropertyName: "componentOutlet", publicName: "componentOutlet", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", outClickLabel: "outClickLabel", outChange: "outChange", outChangStageFlagMousePopover: "outChangStageFlagMousePopover" }, viewQueries: [{ propertyName: "imageEl", first: true, predicate: ["imageEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containerTextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
96
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsRadioSingleComponent, isStandalone: true, selector: "libs_ui-components-radio-single", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelInterpolateParams: { classPropertyName: "labelInterpolateParams", publicName: "labelInterpolateParams", isSignal: true, isRequired: false, transformFunction: null }, ignorePopoverLabel: { classPropertyName: "ignorePopoverLabel", publicName: "ignorePopoverLabel", isSignal: true, isRequired: false, transformFunction: null }, classLabelInclude: { classPropertyName: "classLabelInclude", publicName: "classLabelInclude", isSignal: true, isRequired: false, transformFunction: null }, linkImage: { classPropertyName: "linkImage", publicName: "linkImage", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, avatarConfig: { classPropertyName: "avatarConfig", publicName: "avatarConfig", isSignal: true, isRequired: false, transformFunction: null }, classImageInclude: { classPropertyName: "classImageInclude", publicName: "classImageInclude", isSignal: true, isRequired: false, transformFunction: null }, imgTypeIcon: { classPropertyName: "imgTypeIcon", publicName: "imgTypeIcon", isSignal: true, isRequired: false, transformFunction: null }, bullet: { classPropertyName: "bullet", publicName: "bullet", isSignal: true, isRequired: false, transformFunction: null }, popover: { classPropertyName: "popover", publicName: "popover", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, clickExactly: { classPropertyName: "clickExactly", publicName: "clickExactly", isSignal: true, isRequired: false, transformFunction: null }, typeRadio: { classPropertyName: "typeRadio", publicName: "typeRadio", isSignal: true, isRequired: false, transformFunction: null }, ignoreRadio: { classPropertyName: "ignoreRadio", publicName: "ignoreRadio", isSignal: true, isRequired: false, transformFunction: null }, zIndexLabel: { classPropertyName: "zIndexLabel", publicName: "zIndexLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, dataComponentOutlet: { classPropertyName: "dataComponentOutlet", publicName: "dataComponentOutlet", isSignal: true, isRequired: false, transformFunction: null }, componentOutlet: { classPropertyName: "componentOutlet", publicName: "componentOutlet", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", outClickLabel: "outClickLabel", outChange: "outChange", outChangStageFlagMousePopover: "outChangStageFlagMousePopover" }, viewQueries: [{ propertyName: "imageEl", first: true, predicate: ["imageEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\"\n (keydown.enter)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n alt=\"\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containerTextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
97
  }
101
98
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsRadioSingleComponent, decorators: [{
102
99
  type: Component,
103
- args: [{ selector: 'libs_ui-components-radio-single', standalone: true, imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"] }]
100
+ args: [{ selector: 'libs_ui-components-radio-single', standalone: true, imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\"\n (keydown.enter)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n alt=\"\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n", styles: [":host .libs-ui-radio{display:flex;align-items:center}:host .libs-ui-radio .libs-ui-icon-radio-unselected,:host .libs-ui-radio .libs-ui-icon-radio-selected{margin-right:8px;font-size:16px;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-type-medium:before{font-size:20px!important}:host .libs-ui-radio .libs-ui-radio-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer}:host .libs-ui-radio .libs-ui-radio-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-radio libs_ui-components-popover[isLabel=true]{max-width:100%;margin-right:8px}:host .libs-ui-radio .libs-ui-icon-radio-selected:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-radio .libs-ui-radio-tooltip-icon{font-size:16px}:host .libs-ui-radio>[class*=libs-ui-icon]{font-size:16px;cursor:pointer;margin-right:8px}\n"] }]
104
101
  }], ctorParameters: () => [] });
105
102
 
106
103
  /* eslint-disable @typescript-eslint/no-explicit-any */
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-radio-single.mjs","sources":["../../../../../../libs-ui/components/radio/single/src/radio.component.ts","../../../../../../libs-ui/components/radio/single/src/radio.component.html","../../../../../../libs-ui/components/radio/single/src/interfaces/radio.interface.ts","../../../../../../libs-ui/components/radio/single/src/libs-ui-components-radio-single.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestroy, computed, effect, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { IAvatarConfig, LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { IFlagMouse, IPopover, LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { IRadioEvent } from './interfaces';\nimport { LibsUiComponentsComponentOutletComponent, TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';\nimport { NgComponentOutlet } from '@angular/common';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-radio-single',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n standalone: true,\n imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsRadioSingleComponent implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected linkImageDisplay = signal<string>('');\n protected dataComponentOutletComputed = computed(() => {\n if (!this.componentOutlet()) {\n return undefined;\n }\n return {\n component: this.componentOutlet(),\n inputs: this.dataComponentOutlet() || {},\n };\n });\n private onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly key = input<unknown>();\n readonly active = model<boolean>(false);\n readonly classInclude = input<string>('');\n readonly label = input<string>('');\n readonly labelInterpolateParams = input<Record<string, unknown> | undefined, Record<string, unknown> | undefined>({}, { transform: (value) => value || {} });\n readonly ignorePopoverLabel = input<boolean>();\n readonly classLabelInclude = input<string | undefined, string | undefined>('libs-ui-font-h4r ', { transform: (value) => value || '' });\n readonly linkImage = input<string>('');\n readonly linkImageError = input<string>('');\n readonly avatarConfig = input<IAvatarConfig>();\n readonly classImageInclude = input<string>('');\n readonly imgTypeIcon = input<boolean>();\n readonly bullet = input<Record<string, string>>();\n readonly popover = input<IPopover>();\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly clickExactly = input<boolean | undefined, boolean | undefined>(true, { transform: (value) => value ?? true });\n readonly typeRadio = input<'normal' | 'medium' | undefined, 'normal' | 'medium' | undefined>('normal', { transform: (value) => value || 'normal' });\n readonly ignoreRadio = input<boolean>();\n readonly zIndexLabel = input<number | undefined, number | undefined>(1200, { transform: (value) => value ?? 1200 });\n readonly classIncludeIcon = input<string | undefined, string | undefined>('', { transform: (value) => value || '' });\n\n readonly dataComponentOutlet = input<TYPE_COMPONENT_OUTLET_DATA>();\n readonly componentOutlet = input<LibsUiComponentsComponentOutletComponent | any>();\n\n // #region OUTPUT\n readonly outClickLabel = output<void>();\n readonly outChange = output<IRadioEvent>();\n readonly outChangStageFlagMousePopover = output<IFlagMouse>();\n\n /* VIEW CHILD */\n private imageEl = viewChild<ElementRef>('imageEl');\n\n constructor() {\n effect(() => {\n this.linkImage();\n untracked(() => this.linkImageDisplay.set(this.linkImage()));\n });\n }\n\n ngAfterViewInit() {\n if (this.imageEl()) {\n fromEvent(this.imageEl()?.nativeElement, 'error')\n .pipe(take(1), takeUntil(this.onDestroy))\n .subscribe(() => {\n this.linkImageDisplay.set(this.linkImageError());\n });\n }\n }\n\n /* FUNCTIONS */\n protected async handlerClick(e: Event) {\n if (this.clickExactly()) {\n return;\n }\n e.stopPropagation();\n this.changeActive();\n }\n\n protected async handlerEventLabel(type: string) {\n if (type === 'click') {\n this.outClickLabel.emit();\n this.changeActive();\n }\n }\n\n private async changeActive() {\n if (this.active() || this.disable()) {\n return;\n }\n this.active.update((value) => !value);\n this.outChange.emit({ active: this.active(), key: this.key() });\n }\n\n protected async handlerChangStageFlagMouse(flag: IFlagMouse) {\n this.outChangStageFlagMousePopover.emit(flag);\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IAvatarConfig } from '@libs-ui/components-avatar';\nimport { IPopover } from '@libs-ui/components-popover';\n\nexport interface IRadioItem {\n key: any;\n active: boolean;\n classInclude?: string;\n label?: string;\n labelInterpolateParams?: Record<string, unknown>;\n ignorePopoverLabel?: boolean;\n classLabelInclude?: string;\n popover?: IPopover;\n disable?: boolean;\n disableLabel?: boolean;\n clickExactly?: boolean;\n zIndexLabel?: number;\n avatarConfig?: IAvatarConfig;\n data?: any;\n [key: string]: any;\n}\n\nexport interface IRadioEvent {\n active: boolean;\n key: any;\n item?: any;\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-components-radio-single.mjs","sources":["../../../../../../libs-ui/components/radio/single/src/radio.component.ts","../../../../../../libs-ui/components/radio/single/src/radio.component.html","../../../../../../libs-ui/components/radio/single/src/interfaces/radio.interface.ts","../../../../../../libs-ui/components/radio/single/src/libs-ui-components-radio-single.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgComponentOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, ElementRef, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IAvatarConfig, LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { LibsUiComponentsComponentOutletComponent, TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';\nimport { IFlagMouse, IPopover, LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { IRadioEvent } from './interfaces';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-radio-single',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n standalone: true,\n imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsRadioSingleComponent implements AfterViewInit {\n // #region PROPERTY\n protected linkImageDisplay = signal<string>('');\n protected dataComponentOutletComputed = computed(() => {\n if (!this.componentOutlet()) {\n return undefined;\n }\n return {\n component: this.componentOutlet(),\n inputs: this.dataComponentOutlet() || {},\n };\n });\n\n // #region INPUT\n readonly key = input<unknown>();\n readonly active = model<boolean>(false);\n readonly classInclude = input<string>('');\n readonly label = input<string>('');\n readonly labelInterpolateParams = input<Record<string, unknown> | undefined, Record<string, unknown> | undefined>({}, { transform: (value) => value || {} });\n readonly ignorePopoverLabel = input<boolean>();\n readonly classLabelInclude = input<string | undefined, string | undefined>('libs-ui-font-h4r ', { transform: (value) => value || '' });\n readonly linkImage = input<string>('');\n readonly linkImageError = input<string>('');\n readonly avatarConfig = input<IAvatarConfig>();\n readonly classImageInclude = input<string>('');\n readonly imgTypeIcon = input<boolean>();\n readonly bullet = input<Record<string, string>>();\n readonly popover = input<IPopover>();\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly clickExactly = input<boolean | undefined, boolean | undefined>(true, { transform: (value) => value ?? true });\n readonly typeRadio = input<'normal' | 'medium' | undefined, 'normal' | 'medium' | undefined>('normal', { transform: (value) => value || 'normal' });\n readonly ignoreRadio = input<boolean>();\n readonly zIndexLabel = input<number | undefined, number | undefined>(1200, { transform: (value) => value ?? 1200 });\n readonly classIncludeIcon = input<string | undefined, string | undefined>('', { transform: (value) => value || '' });\n\n readonly dataComponentOutlet = input<TYPE_COMPONENT_OUTLET_DATA>();\n readonly componentOutlet = input<LibsUiComponentsComponentOutletComponent | any>();\n\n // #region OUTPUT\n readonly outClickLabel = output<void>();\n readonly outChange = output<IRadioEvent>();\n readonly outChangStageFlagMousePopover = output<IFlagMouse>();\n\n /* VIEW CHILD */\n private readonly imageEl = viewChild<ElementRef>('imageEl');\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n effect(() => {\n this.linkImage();\n untracked(() => this.linkImageDisplay.set(this.linkImage()));\n });\n }\n\n ngAfterViewInit() {\n if (this.imageEl()) {\n fromEvent(this.imageEl()?.nativeElement, 'error')\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.linkImageDisplay.set(this.linkImageError());\n });\n }\n }\n\n /* FUNCTIONS */\n protected async handlerClick(e: Event) {\n if (this.clickExactly()) {\n return;\n }\n e.stopPropagation();\n this.changeActive();\n }\n\n protected async handlerEventLabel(type: string) {\n if (type === 'click') {\n this.outClickLabel.emit();\n this.changeActive();\n }\n }\n\n private async changeActive() {\n if (this.active() || this.disable()) {\n return;\n }\n this.active.update((value) => !value);\n this.outChange.emit({ active: this.active(), key: this.key() });\n }\n\n protected async handlerChangStageFlagMouse(flag: IFlagMouse) {\n this.outChangStageFlagMousePopover.emit(flag);\n }\n}\n","<div\n [class]=\"'libs-ui-radio ' + classInclude()\"\n [class.cursor-pointer]=\"!clickExactly()\"\n (click)=\"handlerClick($event)\"\n (keydown.enter)=\"handlerClick($event)\">\n @if (!ignoreRadio()) {\n <div\n [class.libs-ui-icon-radio-unselected]=\"!active()\"\n [class.text-[#6a7383]]=\"!active()\"\n [class.libs-ui-icon-radio-selected]=\"active()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && active()\"\n [class.pointer-events-none]=\"disable()\"\n [class]=\"classIncludeIcon() + ' libs-ui-radio-type-' + typeRadio()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (linkImageDisplay()) {\n <img\n #imageEl\n [src]=\"linkImageDisplay()\"\n [class]=\"'libs-ui-radio-image ' + classImageInclude()\"\n alt=\"\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]=\"avatarConfig.size || 24\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (bullet(); as bulletConfig) {\n <div\n class=\"libs-ui-radio-bullet\"\n [style.background-color]=\"bulletConfig['backgroundColor']\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerEventLabel('click')\"\n (keydown.enter)=\"handlerEventLabel('click')\"></div>\n }\n @if (label()) {\n <libs_ui-components-popover\n type=\"text\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : ' cursor-pointer')\"\n [ignoreCursorPointerModeLikeClick]=\"disable()\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignorePopoverLabel()\"\n [config]=\"{ content: label(), timerDestroy: 50, zIndex: zIndexLabel() }\"\n [innerHTML]=\"label() | translate: labelInterpolateParams()\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerEventLabel($event)\" />\n }\n @if (popover(); as popover) {\n @if (!popover.dataView) {\n <i\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></i>\n }\n @if (popover.dataView) {\n @let constHtmlDataView = popover.dataView || ' ';\n <div\n LibsUiComponentsPopoverDirective\n [config]=\"popover.config\"\n [innerHtml]=\"constHtmlDataView | translate\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IAvatarConfig } from '@libs-ui/components-avatar';\nimport { IPopover } from '@libs-ui/components-popover';\n\nexport interface IRadioItem {\n key: any;\n active: boolean;\n classInclude?: string;\n label?: string;\n labelInterpolateParams?: Record<string, unknown>;\n ignorePopoverLabel?: boolean;\n classLabelInclude?: string;\n popover?: IPopover;\n disable?: boolean;\n disableLabel?: boolean;\n clickExactly?: boolean;\n zIndexLabel?: number;\n avatarConfig?: IAvatarConfig;\n data?: any;\n [key: string]: any;\n}\n\nexport interface IRadioEvent {\n active: boolean;\n key: any;\n item?: any;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@libs-ui/components-radio-single",
3
- "version": "0.2.356-9",
3
+ "version": "0.2.357-0",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/components-avatar": "0.2.356-9",
7
- "@libs-ui/components-popover": "0.2.356-9",
6
+ "@libs-ui/components-avatar": "0.2.357-0",
7
+ "@libs-ui/components-popover": "0.2.357-0",
8
8
  "@ngx-translate/core": "^15.0.0",
9
- "rxjs": "~7.8.0"
9
+ "rxjs": "~7.8.0",
10
+ "@libs-ui/components-component-outlet": "0.2.357-0",
11
+ "@angular/common": "~18.2.0"
10
12
  },
11
13
  "sideEffects": false,
12
14
  "module": "fesm2022/libs-ui-components-radio-single.mjs",
@@ -1,16 +1,15 @@
1
- import { AfterViewInit, OnDestroy } from '@angular/core';
1
+ import { AfterViewInit } from '@angular/core';
2
2
  import { IAvatarConfig } from '@libs-ui/components-avatar';
3
+ import { TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';
3
4
  import { IFlagMouse, IPopover } from '@libs-ui/components-popover';
4
5
  import { IRadioEvent } from './interfaces';
5
- import { TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';
6
6
  import * as i0 from "@angular/core";
7
- export declare class LibsUiComponentsRadioSingleComponent implements AfterViewInit, OnDestroy {
7
+ export declare class LibsUiComponentsRadioSingleComponent implements AfterViewInit {
8
8
  protected linkImageDisplay: import("@angular/core").WritableSignal<string>;
9
9
  protected dataComponentOutletComputed: import("@angular/core").Signal<{
10
10
  component: any;
11
11
  inputs: {};
12
12
  } | undefined>;
13
- private onDestroy;
14
13
  readonly key: import("@angular/core").InputSignal<unknown>;
15
14
  readonly active: import("@angular/core").ModelSignal<boolean>;
16
15
  readonly classInclude: import("@angular/core").InputSignal<string>;
@@ -37,14 +36,14 @@ export declare class LibsUiComponentsRadioSingleComponent implements AfterViewIn
37
36
  readonly outClickLabel: import("@angular/core").OutputEmitterRef<void>;
38
37
  readonly outChange: import("@angular/core").OutputEmitterRef<IRadioEvent>;
39
38
  readonly outChangStageFlagMousePopover: import("@angular/core").OutputEmitterRef<IFlagMouse>;
40
- private imageEl;
39
+ private readonly imageEl;
40
+ private readonly destroyRef;
41
41
  constructor();
42
42
  ngAfterViewInit(): void;
43
43
  protected handlerClick(e: Event): Promise<void>;
44
44
  protected handlerEventLabel(type: string): Promise<void>;
45
45
  private changeActive;
46
46
  protected handlerChangStageFlagMouse(flag: IFlagMouse): Promise<void>;
47
- ngOnDestroy(): void;
48
47
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsRadioSingleComponent, never>;
49
48
  static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsRadioSingleComponent, "libs_ui-components-radio-single", never, { "key": { "alias": "key"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "classInclude": { "alias": "classInclude"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelInterpolateParams": { "alias": "labelInterpolateParams"; "required": false; "isSignal": true; }; "ignorePopoverLabel": { "alias": "ignorePopoverLabel"; "required": false; "isSignal": true; }; "classLabelInclude": { "alias": "classLabelInclude"; "required": false; "isSignal": true; }; "linkImage": { "alias": "linkImage"; "required": false; "isSignal": true; }; "linkImageError": { "alias": "linkImageError"; "required": false; "isSignal": true; }; "avatarConfig": { "alias": "avatarConfig"; "required": false; "isSignal": true; }; "classImageInclude": { "alias": "classImageInclude"; "required": false; "isSignal": true; }; "imgTypeIcon": { "alias": "imgTypeIcon"; "required": false; "isSignal": true; }; "bullet": { "alias": "bullet"; "required": false; "isSignal": true; }; "popover": { "alias": "popover"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "disableLabel": { "alias": "disableLabel"; "required": false; "isSignal": true; }; "clickExactly": { "alias": "clickExactly"; "required": false; "isSignal": true; }; "typeRadio": { "alias": "typeRadio"; "required": false; "isSignal": true; }; "ignoreRadio": { "alias": "ignoreRadio"; "required": false; "isSignal": true; }; "zIndexLabel": { "alias": "zIndexLabel"; "required": false; "isSignal": true; }; "classIncludeIcon": { "alias": "classIncludeIcon"; "required": false; "isSignal": true; }; "dataComponentOutlet": { "alias": "dataComponentOutlet"; "required": false; "isSignal": true; }; "componentOutlet": { "alias": "componentOutlet"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "outClickLabel": "outClickLabel"; "outChange": "outChange"; "outChangStageFlagMousePopover": "outChangStageFlagMousePopover"; }, never, never, true, never>;
50
49
  }