@libs-ui/components-checkbox-single 0.2.355-13 → 0.2.355-15

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,3 +1,165 @@
1
- # checkbox-single
1
+ # @libs-ui/components-checkbox-single
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ > Component checkbox đơn lẻ với nhiều tùy chọn hiển thị và tích hợp nâng cao cho Angular.
4
+
5
+ ## Giới thiệu
6
+
7
+ `LibsUiComponentsCheckboxSingleComponent` là một standalone Angular component cung cấp giải pháp checkbox linh hoạt, không chỉ đơn thuần là một ô chọn mà còn tích hợp nhiều yếu tố UI phổ biến như:
8
+
9
+ - ✅ Hiển thị nhãn (label) với định dạng linh hoạt
10
+ - ✅ Tích hợp Popover (tooltip) khi di chuột vào nhãn
11
+ - ✅ Hiển thị hình ảnh hoặc Avatar cạnh checkbox
12
+ - ✅ Hỗ trợ Bullet (chấm tròn màu) để phân loại
13
+ - ✅ Hiển thị Description (mô tả chi tiết dưới nhãn)
14
+ - ✅ Hỗ trợ Component Outlet để render nội dung tùy chỉnh
15
+ - ✅ Trạng thái Error và Disable toàn diện
16
+ - ✅ Sử dụng Angular Signals & Model cho reactivity tối ưu
17
+
18
+ ## Cài đặt
19
+
20
+ ```bash
21
+ # npm
22
+ npm install @libs-ui/components-checkbox-single
23
+
24
+ # yarn
25
+ yarn add @libs-ui/components-checkbox-single
26
+ ```
27
+
28
+ ## Sử dụng
29
+
30
+ ### Import Component
31
+
32
+ ```typescript
33
+ import { Component, signal } from '@angular/core';
34
+ import { LibsUiComponentsCheckboxSingleComponent, ICheckboxEvent } from '@libs-ui/components-checkbox-single';
35
+
36
+ @Component({
37
+ selector: 'app-example',
38
+ standalone: true,
39
+ imports: [LibsUiComponentsCheckboxSingleComponent],
40
+ template: `
41
+ <libs_ui-components-checkbox-single
42
+ [(checked)]="isSelected"
43
+ label="Chấp nhận điều khoản"
44
+ (outChange)="onStatusChange($event)"></libs_ui-components-checkbox-single>
45
+ `,
46
+ })
47
+ export class ExampleComponent {
48
+ isSelected = signal(false);
49
+
50
+ onStatusChange(event: ICheckboxEvent) {
51
+ console.log('Trạng thái checkbox:', event.checked);
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## API Reference
57
+
58
+ ### Inputs
59
+
60
+ | Tên | Kiểu | Mặc định | Mô tả |
61
+ | ------------------------ | ---------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ |
62
+ | `avatarConfig` | `IAvatarConfig` | `undefined` | Cấu hình cho component Avatar hiển thị cạnh checkbox. |
63
+ | `bullet` | `ICheckboxBullet` | `undefined` | Cấu hình cho dấu chấm tròn màu (bullet) hiển thị cạnh checkbox. |
64
+ | `checked` | `model<boolean>` | `false` | Trạng thái chọn của checkbox (hỗ trợ two-way binding). |
65
+ | `classIconInclude` | `string` | `undefined` | Class CSS bổ sung cho thẻ chứa icon. |
66
+ | `classImageInclude` | `string` | `undefined` | Class CSS bổ sung cho phần hình ảnh. |
67
+ | `classInclude` | `string` | `''` | Class CSS bổ sung cho container chính của component. |
68
+ | `classLabelInclude` | `string` | `'libs-ui-font-h5r'` | Class CSS cho phần nhãn văn bản. |
69
+ | `clickExactly` | `boolean` | `true` | Nếu `true`, chỉ click vào checkbox/label mới đổi trạng thái. Nếu `false`, click vào toàn bộ area sẽ trigger. |
70
+ | `componentOutlet` | `any` | `undefined` | Component tùy chỉnh để render thông qua `ngComponentOutlet`. |
71
+ | `dataComponentOutlet` | `TYPE_COMPONENT_OUTLET_DATA` | `undefined` | Dữ liệu truyền vào cho `componentOutlet`. |
72
+ | `description` | `ICheckboxItemDescription` | `undefined` | Nội dung mô tả chi tiết hiển thị bên dưới nhãn. |
73
+ | `disable` | `boolean` | `false` | Vô hiệu hóa toàn bộ tương tác với checkbox. |
74
+ | `disableLabel` | `boolean` | `false` | Vô hiệu hóa tương tác click trên nhãn văn bản. |
75
+ | `error` | `boolean` | `false` | Đánh dấu checkbox đang ở trạng thái lỗi. |
76
+ | `iconImageClass` | `string` | `undefined` | Class icon (ví dụ: `fa fa-user`) hiển thị cạnh checkbox. |
77
+ | `ignoreCheckbox` | `boolean` | `false` | Ẩn ô chọn checkbox, chỉ hiển thị nhãn và các thành phần khác. |
78
+ | `ignoreShowPopoverLabel` | `boolean` | `false` | Nếu `true`, sẽ không hiển thị popover khi di chuột vào nhãn. |
79
+ | `imgTypeIcon` | `boolean` | `false` | Xác định hình ảnh truyền vào là dạng icon. |
80
+ | `key` | `string` | `undefined` | Khóa định danh duy nhất cho checkbox. |
81
+ | `label` | `string` | `undefined` | Văn bản hiển thị cho nhãn checkbox. |
82
+ | `linkImage` | `model<string>` | `undefined` | URL hình ảnh hiển thị cạnh checkbox. |
83
+ | `linkImageError` | `string` | `undefined` | URL hình ảnh hiển thị khi `linkImage` bị lỗi load. |
84
+ | `modeBorder` | `boolean` | `false` | Hiển thị viền bao quanh toàn bộ component. |
85
+ | `popover` | `IPopover` | `undefined` | Cấu hình Popover hiển thị khi di chuột vào nhãn. |
86
+ | `showBorderError` | `boolean` | `false` | Hiển thị viền đỏ bao quanh khi `error` là `true`. |
87
+ | `stillOtherOptions` | `boolean` | `false` | Hiển thị trạng thái "còn các lựa chọn khác" (dạng mờ/indicator). |
88
+ | `typeLabelPopover` | `'text' \| 'component'` | `'text'` | Loại nội dung của popover trên nhãn. |
89
+ | `zIndexLabel` | `number` | `1200` | Giá trị z-index cho phần nhãn và popover. |
90
+
91
+ ### Outputs
92
+
93
+ | Tên | Kiểu | Mô tả |
94
+ | ------------------------------- | -------------------- | ------------------------------------------------------------------------------------- |
95
+ | `outChange` | `ICheckboxEvent` | Phát ra khi trạng thái `checked` thay đổi. Gửi kèm key, trạng thái mới và hàm revert. |
96
+ | `outChangStageFlagMousePopover` | `IFlagMouse` | Phát ra khi trạng thái chuột thay đổi trên vùng nhãn (để điều khiển popover). |
97
+ | `outClickLabel` | `void` | Phát ra khi người dùng click trực tiếp vào nhãn văn bản. |
98
+ | `outEventPopover` | `TYPE_POPOVER_EVENT` | Phát ra các sự kiện tương tác từ Popover. |
99
+
100
+ ## Interfaces & Types
101
+
102
+ ### ICheckboxEvent
103
+
104
+ ```typescript
105
+ interface ICheckboxEvent {
106
+ key: any;
107
+ checked: boolean;
108
+ allCheckboxChecked?: Array<ICheckboxChecked>;
109
+ revert: () => void;
110
+ }
111
+ ```
112
+
113
+ ### ICheckboxItemDescription
114
+
115
+ ```typescript
116
+ interface ICheckboxItemDescription {
117
+ content: string; // Nội dung mô tả (Hỗ trợ HTML)
118
+ classInclude: string; // Class CSS bổ sung
119
+ }
120
+ ```
121
+
122
+ ### ICheckboxBullet
123
+
124
+ ```typescript
125
+ interface ICheckboxBullet {
126
+ classInclude?: string;
127
+ backgroundColor: string;
128
+ width: number;
129
+ height: number;
130
+ }
131
+ ```
132
+
133
+ ## Công nghệ sử dụng
134
+
135
+ - **Angular 18+** - Standalone Components
136
+ - **Angular Signals & Model** - Modern reactive state management
137
+ - **NG-Zorro Style Integration** - Tuân thủ phong cách thiết kế chuyên nghiệp
138
+
139
+ ## Demo
140
+
141
+ Demo có sẵn trong ứng dụng `core-ui`:
142
+
143
+ ```bash
144
+ npx nx serve core-ui
145
+ ```
146
+
147
+ **File demo:** `apps/core-ui/src/app/components/checkbox-single/checkbox-single.component.ts`
148
+
149
+ ### Tính năng Demo
150
+
151
+ - 🎮 **Basic Usage**: Sử dụng cơ bản với nhãn và trạng thái.
152
+ - 🖼️ **Image & Avatar**: Kết hợp checkbox với hình ảnh minh họa.
153
+ - 💡 **Popover & Description**: Hiển thị thông tin chi tiết khi tương tác.
154
+ - 🛠️ **Interactive Demo**: Thử nghiệm các flag `disable`, `error`, `ignoreCheckbox`.
155
+
156
+ ## Unit Tests
157
+
158
+ ```bash
159
+ # Chạy tests
160
+ npx nx test components-checkbox-single
161
+ ```
162
+
163
+ ## License
164
+
165
+ MIT
@@ -1,45 +1,95 @@
1
1
  import { IAvatarConfig } from '@libs-ui/components-avatar';
2
+ import { TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';
2
3
  import { IFlagMouse, IPopover, TYPE_POPOVER_EVENT, TYPE_POPOVER_TYPE } from '@libs-ui/components-popover';
3
4
  import { ICheckboxBullet, ICheckboxEvent, ICheckboxItemDescription } from './interfaces';
4
- import { TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * Checkbox Single Component - Một checkbox đơn lẻ với nhiều tùy chọn hiển thị (nhãn, ảnh, avatar, popover, description).
8
+ *
9
+ * @description
10
+ * Hỗ trợ nhiều tính năng nâng cao như hiển thị hình ảnh/avatar cạnh checkbox,
11
+ * tích hợp popover khi di chuột vào nhãn, và hiển thị phần mô tả chi tiết.
12
+ *
13
+ * @example
14
+ * ```html
15
+ * <libs_ui-components-checkbox-single
16
+ * [(checked)]="isSelected"
17
+ * label="Đồng ý điều khoản"
18
+ * (outChange)="onStatusChange($event)"
19
+ * />
20
+ * ```
21
+ *
22
+ * @publicApi
23
+ */
6
24
  export declare class LibsUiComponentsCheckboxSingleComponent {
7
25
  protected descriptionComputed: import("@angular/core").Signal<string>;
8
26
  protected dataComponentOutletComputed: import("@angular/core").Signal<{
9
27
  component: any;
10
28
  inputs: {};
11
29
  } | undefined>;
30
+ /** Khóa định danh cho checkbox */
12
31
  readonly key: import("@angular/core").InputSignal<string | undefined>;
32
+ /** Trạng thái chọn của checkbox (Two-way binding) */
13
33
  readonly checked: import("@angular/core").ModelSignal<boolean>;
34
+ /** Nhãn hiển thị bên cạnh checkbox */
14
35
  readonly label: import("@angular/core").InputSignal<string | undefined>;
36
+ /** Class CSS bổ sung cho nhãn */
15
37
  readonly classLabelInclude: import("@angular/core").InputSignalWithTransform<string | undefined, string | undefined>;
38
+ /** Ẩn popover khi di chuột vào nhãn */
16
39
  readonly ignoreShowPopoverLabel: import("@angular/core").InputSignal<boolean | undefined>;
40
+ /** Loại popover hiển thị trên nhãn */
17
41
  readonly typeLabelPopover: import("@angular/core").InputSignalWithTransform<TYPE_POPOVER_TYPE, TYPE_POPOVER_TYPE>;
42
+ /** Cấu hình popover chi tiết */
18
43
  readonly popover: import("@angular/core").InputSignal<IPopover | undefined>;
44
+ /** Đường dẫn hình ảnh hiển thị cạnh checkbox */
19
45
  readonly linkImage: import("@angular/core").ModelSignal<string | undefined>;
46
+ /** Hình ảnh hiển thị dự phòng khi lỗi */
20
47
  readonly linkImageError: import("@angular/core").InputSignal<string | undefined>;
48
+ /** Cấu hình Avatar (nếu dùng thay cho hình ảnh) */
21
49
  readonly avatarConfig: import("@angular/core").InputSignal<IAvatarConfig | undefined>;
50
+ /** Class CSS bổ sung cho phần hình ảnh */
22
51
  readonly classImageInclude: import("@angular/core").InputSignal<string | undefined>;
52
+ /** Đánh dấu hình ảnh là dạng icon */
23
53
  readonly imgTypeIcon: import("@angular/core").InputSignal<boolean | undefined>;
54
+ /** Cấu hình bullet (chấm tròn màu) bên cạnh checkbox */
24
55
  readonly bullet: import("@angular/core").InputSignal<ICheckboxBullet | undefined>;
56
+ /** Class CSS bổ sung cho container chính */
25
57
  readonly classInclude: import("@angular/core").InputSignalWithTransform<string | undefined, string | undefined>;
58
+ /** Chỉ xử lý thay đổi khi click chính xác vào checkbox hoặc nhãn */
26
59
  readonly clickExactly: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
60
+ /** Trạng thái vô hiệu hóa toàn bộ component */
27
61
  readonly disable: import("@angular/core").InputSignal<boolean | undefined>;
62
+ /** Trạng thái vô hiệu hóa nhãn (không cho click nhãn để đổi trạng thái) */
28
63
  readonly disableLabel: import("@angular/core").InputSignal<boolean | undefined>;
64
+ /** Ẩn ô checkbox, chỉ hiển thị nhãn/ảnh */
29
65
  readonly ignoreCheckbox: import("@angular/core").InputSignal<boolean | undefined>;
66
+ /** Độ ưu tiên hiển thị (z-index) của nhãn/popover */
30
67
  readonly zIndexLabel: import("@angular/core").InputSignalWithTransform<number | undefined, number | undefined>;
68
+ /** Hiển thị trạng thái "còn các lựa chọn khác" */
31
69
  readonly stillOtherOptions: import("@angular/core").InputSignal<boolean | undefined>;
70
+ /** Trạng thái lỗi */
32
71
  readonly error: import("@angular/core").InputSignal<boolean | undefined>;
72
+ /** Hiển thị viền đỏ khi có lỗi */
33
73
  readonly showBorderError: import("@angular/core").InputSignal<boolean | undefined>;
74
+ /** Phần mô tả chi tiết phía dưới nhãn */
34
75
  readonly description: import("@angular/core").InputSignal<ICheckboxItemDescription | undefined>;
76
+ /** Class icon hiển thị (thay cho image/avatar) */
35
77
  readonly iconImageClass: import("@angular/core").InputSignal<string | undefined>;
78
+ /** Class CSS cho icon */
36
79
  readonly classIconInclude: import("@angular/core").InputSignal<string | undefined>;
80
+ /** Hiển thị viền bao quanh toàn bộ component */
37
81
  readonly modeBorder: import("@angular/core").InputSignal<boolean | undefined>;
82
+ /** Dữ liệu truyền vào Component Outlet */
38
83
  readonly dataComponentOutlet: import("@angular/core").InputSignal<TYPE_COMPONENT_OUTLET_DATA | undefined>;
84
+ /** Component tùy chỉnh hiển thị thông qua outlet */
39
85
  readonly componentOutlet: import("@angular/core").InputSignal<any>;
86
+ /** Phát ra khi trạng thái checkbox thay đổi */
40
87
  readonly outChange: import("@angular/core").OutputEmitterRef<ICheckboxEvent>;
88
+ /** Phát các sự kiện từ popover nhãn */
41
89
  readonly outEventPopover: import("@angular/core").OutputEmitterRef<TYPE_POPOVER_EVENT>;
90
+ /** Phát khi người dùng click vào nhãn */
42
91
  readonly outClickLabel: import("@angular/core").OutputEmitterRef<void>;
92
+ /** Phát trạng thái chuột trên nhãn để điều khiển popover */
43
93
  readonly outChangStageFlagMousePopover: import("@angular/core").OutputEmitterRef<IFlagMouse>;
44
94
  protected handlerErrorImage(event: Event): Promise<void>;
45
95
  protected handlerClickRelatively(event?: Event): Promise<void>;
@@ -1,12 +1,30 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { NgComponentOutlet } from '@angular/common';
2
3
  import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';
3
4
  import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
4
5
  import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
5
6
  import { escapeHtml } from '@libs-ui/utils';
6
7
  import { TranslateModule } from '@ngx-translate/core';
7
- import { NgComponentOutlet } from '@angular/common';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@ngx-translate/core";
10
+ /**
11
+ * Checkbox Single Component - Một checkbox đơn lẻ với nhiều tùy chọn hiển thị (nhãn, ảnh, avatar, popover, description).
12
+ *
13
+ * @description
14
+ * Hỗ trợ nhiều tính năng nâng cao như hiển thị hình ảnh/avatar cạnh checkbox,
15
+ * tích hợp popover khi di chuột vào nhãn, và hiển thị phần mô tả chi tiết.
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <libs_ui-components-checkbox-single
20
+ * [(checked)]="isSelected"
21
+ * label="Đồng ý điều khoản"
22
+ * (outChange)="onStatusChange($event)"
23
+ * />
24
+ * ```
25
+ *
26
+ * @publicApi
27
+ */
10
28
  export class LibsUiComponentsCheckboxSingleComponent {
11
29
  // #region PROPERTY
12
30
  descriptionComputed = computed(() => escapeHtml(this.description()?.content || ''));
@@ -20,38 +38,70 @@ export class LibsUiComponentsCheckboxSingleComponent {
20
38
  };
21
39
  });
22
40
  // #region INPUT
41
+ /** Khóa định danh cho checkbox */
23
42
  key = input();
43
+ /** Trạng thái chọn của checkbox (Two-way binding) */
24
44
  checked = model(false);
45
+ /** Nhãn hiển thị bên cạnh checkbox */
25
46
  label = input();
47
+ /** Class CSS bổ sung cho nhãn */
26
48
  classLabelInclude = input('libs-ui-font-h5r', { transform: (value) => value ?? 'libs-ui-font-h5r' });
49
+ /** Ẩn popover khi di chuột vào nhãn */
27
50
  ignoreShowPopoverLabel = input();
51
+ /** Loại popover hiển thị trên nhãn */
28
52
  typeLabelPopover = input('text', { transform: (value) => value ?? 'text' });
53
+ /** Cấu hình popover chi tiết */
29
54
  popover = input();
55
+ /** Đường dẫn hình ảnh hiển thị cạnh checkbox */
30
56
  linkImage = model();
57
+ /** Hình ảnh hiển thị dự phòng khi lỗi */
31
58
  linkImageError = input();
59
+ /** Cấu hình Avatar (nếu dùng thay cho hình ảnh) */
32
60
  avatarConfig = input();
61
+ /** Class CSS bổ sung cho phần hình ảnh */
33
62
  classImageInclude = input();
63
+ /** Đánh dấu hình ảnh là dạng icon */
34
64
  imgTypeIcon = input();
65
+ /** Cấu hình bullet (chấm tròn màu) bên cạnh checkbox */
35
66
  bullet = input();
67
+ /** Class CSS bổ sung cho container chính */
36
68
  classInclude = input('', { transform: (value) => value ?? '' });
69
+ /** Chỉ xử lý thay đổi khi click chính xác vào checkbox hoặc nhãn */
37
70
  clickExactly = input(true, { transform: (value) => value ?? true });
71
+ /** Trạng thái vô hiệu hóa toàn bộ component */
38
72
  disable = input();
73
+ /** Trạng thái vô hiệu hóa nhãn (không cho click nhãn để đổi trạng thái) */
39
74
  disableLabel = input();
75
+ /** Ẩn ô checkbox, chỉ hiển thị nhãn/ảnh */
40
76
  ignoreCheckbox = input();
77
+ /** Độ ưu tiên hiển thị (z-index) của nhãn/popover */
41
78
  zIndexLabel = input(1200, { transform: (value) => value ?? 1200 });
79
+ /** Hiển thị trạng thái "còn các lựa chọn khác" */
42
80
  stillOtherOptions = input();
81
+ /** Trạng thái lỗi */
43
82
  error = input();
83
+ /** Hiển thị viền đỏ khi có lỗi */
44
84
  showBorderError = input();
85
+ /** Phần mô tả chi tiết phía dưới nhãn */
45
86
  description = input();
87
+ /** Class icon hiển thị (thay cho image/avatar) */
46
88
  iconImageClass = input();
89
+ /** Class CSS cho icon */
47
90
  classIconInclude = input();
91
+ /** Hiển thị viền bao quanh toàn bộ component */
48
92
  modeBorder = input();
93
+ /** Dữ liệu truyền vào Component Outlet */
49
94
  dataComponentOutlet = input();
95
+ /** Component tùy chỉnh hiển thị thông qua outlet */
50
96
  componentOutlet = input();
51
97
  // #region OUTPUT
98
+ /** Phát ra khi trạng thái checkbox thay đổi */
52
99
  outChange = output();
100
+ /** Phát các sự kiện từ popover nhãn */
53
101
  outEventPopover = output();
102
+ /** Phát khi người dùng click vào nhãn */
54
103
  outClickLabel = output();
104
+ /** Phát trạng thái chuột trên nhãn để điều khiển popover */
55
105
  outChangStageFlagMousePopover = output();
56
106
  /* FUNCTIONS */
57
107
  async handlerErrorImage(event) {
@@ -92,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
92
142
  type: Component,
93
143
  args: [{ selector: 'libs_ui-components-checkbox-single', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent], template: "<div\n class=\"libs-ui-checkbox {{ classInclude() || '' }}\"\n [class.cursor-pointer]=\"!clickExactly() && !disable()\"\n [class.p-[8px]]=\"modeBorder()\"\n [class.rounded-[4px]]=\"modeBorder()\"\n [class.libs-ui-border-general]=\"modeBorder() && !checked()\"\n [class.libs-ui-border-primary-general]=\"modeBorder() && checked()\"\n (click)=\"handlerClickRelatively($event)\">\n @if (!ignoreCheckbox()) {\n <i\n class=\"{{ classIconInclude() || '' }}\"\n [class.libs-ui-icon-checkbox-unselected]=\"!checked() && !stillOtherOptions()\"\n [class.libs-ui-icon-checkbox-selected]=\"checked() && !stillOtherOptions()\"\n [class.libs-ui-icon-checkbox-indeterminate]=\"stillOtherOptions()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && (checked() || stillOtherOptions())\"\n [class.libs-ui-text-error]=\"showBorderError() || error()\"\n (click)=\"handlerChange($event)\"></i>\n }\n @if (linkImage()) {\n <img\n [src]=\"linkImage()\"\n class=\"libs-ui-checkbox-image {{ classImageInclude() || '' }}\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerChange($event)\"\n (error)=\"handlerErrorImage($event)\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape\"\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 (!linkImage() && iconImageClass()) {\n <div\n [class]=\"iconImageClass()\"\n [class.cursor-default]=\"disable()\"></div>\n }\n @if (bullet(); as bullet) {\n <div\n class=\"libs-ui-checkbox-bullet {{ bullet.classInclude || '' }}\"\n [style.background-color]=\"bullet.backgroundColor\"\n [style.width.px]=\"bullet.width\"\n [style.height.px]=\"bullet.height\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerChange($event)\"></div>\n }\n @if (label(); as label) {\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"typeLabelPopover() || 'text'\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : '')\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignoreShowPopoverLabel()\"\n [config]=\"{ content: label, timerDestroy: 50, zIndex: zIndexLabel() }\"\n [ignoreCursorPointerModeLikeClick]=\"disableLabel() || disable()\"\n [innerHTML]=\"label | translate\"\n (outEvent)=\"handlerEventLabel($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n @if (popover(); as popover) {\n <libs_ui-components-popover\n class=\"flex\"\n [config]=\"popover.config\"\n (outEvent)=\"handlerEventPopover($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\">\n @if (!popover.dataView) {\n <i [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"></i>\n }\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n }\n </libs_ui-components-popover>\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n@if (description(); as description) {\n <div\n [class]=\"description.classInclude\"\n [innerHtml]=\"descriptionComputed() | translate\"></div>\n}\n", styles: [":host .libs-ui-checkbox{display:flex;align-items:center}:host .libs-ui-checkbox .libs-ui-icon-checkbox-selected:before,:host .libs-ui-checkbox .libs-ui-icon-checkbox-indeterminate:before{color:var(--libs-ui-color-default, #226ff5)}:host .libs-ui-checkbox .libs-ui-checkbox-image{width:24px;height:24px;margin-right:8px;border-radius:12px;border:solid 1px #e6e8ed;cursor:pointer;flex-shrink:0}:host .libs-ui-checkbox .libs-ui-checkbox-bullet{min-width:10px;min-height:10px;border-radius:50%;margin-right:8px;cursor:pointer}:host .libs-ui-checkbox libs_ui-components-popover[isLabel=true]{margin-right:8px;max-width:100%;cursor:pointer}:host .libs-ui-checkbox>[class*=libs-ui-icon-],:host .libs-ui-checkbox>[class*=icon-font-3rd]{font-size:16px;cursor:pointer;margin-right:8px}\n"] }]
94
144
  }] });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtc2luZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9jaGVja2JveC9zaW5nbGUvc3JjL2NoZWNrYm94LXNpbmdsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY2hlY2tib3gvc2luZ2xlL3NyYy9jaGVja2JveC1zaW5nbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBaUIsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RixPQUFPLEVBQXdCLGdDQUFnQyxFQUF5QyxNQUFNLDZCQUE2QixDQUFDO0FBQzVJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVdwRCxNQUFNLE9BQU8sdUNBQXVDO0lBQ2xELG1CQUFtQjtJQUNULG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLDJCQUEyQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUks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RkFBRSxpQkFBaUIsb1BBQUUsK0JBQStCLDZYQUFFLGdDQUFnQzs7NEZBRXBHLHVDQUF1QztrQkFUbkQsU0FBUzsrQkFFRSxvQ0FBb0MsY0FHbEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXZhdGFyQ29uZmlnLCBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXIsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBUWVBFX1BPUE9WRVJfRVZFTlQsIFRZUEVfUE9QT1ZFUl9UWVBFIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElDaGVja2JveEJ1bGxldCwgSUNoZWNrYm94RXZlbnQsIElDaGVja2JveEl0ZW1EZXNjcmlwdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50LCBUWVBFX0NPTVBPTkVOVF9PVVRMRVRfREFUQSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtY29tcG9uZW50LW91dGxldCc7XG5pbXBvcnQgeyBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3gtc2luZ2xlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tib3gtc2luZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBOZ0NvbXBvbmVudE91dGxldCwgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBkZXNjcmlwdGlvbkNvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gZXNjYXBlSHRtbCh0aGlzLmRlc2NyaXB0aW9uKCk/LmNvbnRlbnQgfHwgJycpKTtcbiAgcHJvdGVjdGVkIGRhdGFDb21wb25lbnRPdXRsZXRDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50T3V0bGV0KCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb21wb25lbnQ6IHRoaXMuY29tcG9uZW50T3V0bGV0KCksXG4gICAgICBpbnB1dHM6IHRoaXMuZGF0YUNvbXBvbmVudE91dGxldCgpIHx8IHt9LFxuICAgIH07XG4gIH0pO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkga2V5ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjaGVja2VkID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsYWJlbCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NMYWJlbEluY2x1ZGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xpYnMtdWktZm9udC1oNXInLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnbGlicy11aS1mb250LWg1cicgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVNob3dQb3BvdmVyTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB0eXBlTGFiZWxQb3BvdmVyID0gaW5wdXQ8VFlQRV9QT1BPVkVSX1RZUEUsIFRZUEVfUE9QT1ZFUl9UWVBFPigndGV4dCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICd0ZXh0JyB9KTtcbiAgcmVhZG9ubHkgcG9wb3ZlciA9IGlucHV0PElQb3BvdmVyPigpO1xuICByZWFkb25seSBsaW5rSW1hZ2UgPSBtb2RlbDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpbmtJbWFnZUVycm9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBhdmF0YXJDb25maWcgPSBpbnB1dDxJQXZhdGFyQ29uZmlnPigpO1xuICByZWFkb25seSBjbGFzc0ltYWdlSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaW1nVHlwZUljb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBidWxsZXQgPSBpbnB1dDxJQ2hlY2tib3hCdWxsZXQ+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJycgfSk7XG4gIHJlYWRvbmx5IGNsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDaGVja2JveCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleExhYmVsID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEyMDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDEyMDAgfSk7XG4gIHJlYWRvbmx5IHN0aWxsT3RoZXJPcHRpb25zID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaG93Qm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkZXNjcmlwdGlvbiA9IGlucHV0PElDaGVja2JveEl0ZW1EZXNjcmlwdGlvbj4oKTtcbiAgcmVhZG9ubHkgaWNvbkltYWdlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSWNvbkluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG1vZGVCb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IGRhdGFDb21wb25lbnRPdXRsZXQgPSBpbnB1dDxUWVBFX0NPTVBPTkVOVF9PVVRMRVRfREFUQT4oKTtcbiAgcmVhZG9ubHkgY29tcG9uZW50T3V0bGV0ID0gaW5wdXQ8TGlic1VpQ29tcG9uZW50c0NvbXBvbmVudE91dGxldENvbXBvbmVudCB8IGFueT4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRDaGFuZ2UgPSBvdXRwdXQ8SUNoZWNrYm94RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEV2ZW50UG9wb3ZlciA9IG91dHB1dDxUWVBFX1BPUE9WRVJfRVZFTlQ+KCk7XG4gIHJlYWRvbmx5IG91dENsaWNrTGFiZWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFcnJvckltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubGlua0ltYWdlLnNldCh0aGlzLmxpbmtJbWFnZUVycm9yKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGlja1JlbGF0aXZlbHkoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmNsaWNrRXhhY3RseSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2UoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDaGFuZ2UoZXZlbnQ/OiBFdmVudCkge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja2VkLnVwZGF0ZSgoY2hlY2tlZCkgPT4gIWNoZWNrZWQpO1xuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoeyBrZXk6IHRoaXMua2V5KCksIGNoZWNrZWQ6IHRoaXMuY2hlY2tlZCgpLCByZXZlcnQ6ICgpID0+IHRoaXMuY2hlY2tlZC51cGRhdGUoKGNoZWNrZWQpID0+ICFjaGVja2VkKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRXZlbnRMYWJlbChldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKGV2ZW50ID09PSAnY2xpY2snKSB7XG4gICAgICB0aGlzLm91dENsaWNrTGFiZWwuZW1pdCgpO1xuICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFdmVudFBvcG92ZXIoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIHRoaXMub3V0RXZlbnRQb3BvdmVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKGV2ZW50OiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnMtdWktY2hlY2tib3gge3sgY2xhc3NJbmNsdWRlKCkgfHwgJycgfX1cIlxuICBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiIWNsaWNrRXhhY3RseSgpICYmICFkaXNhYmxlKClcIlxuICBbY2xhc3MucC1bOHB4XV09XCJtb2RlQm9yZGVyKClcIlxuICBbY2xhc3Mucm91bmRlZC1bNHB4XV09XCJtb2RlQm9yZGVyKClcIlxuICBbY2xhc3MubGlicy11aS1ib3JkZXItZ2VuZXJhbF09XCJtb2RlQm9yZGVyKCkgJiYgIWNoZWNrZWQoKVwiXG4gIFtjbGFzcy5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWdlbmVyYWxdPVwibW9kZUJvcmRlcigpICYmIGNoZWNrZWQoKVwiXG4gIChjbGljayk9XCJoYW5kbGVyQ2xpY2tSZWxhdGl2ZWx5KCRldmVudClcIj5cbiAgQGlmICghaWdub3JlQ2hlY2tib3goKSkge1xuICAgIDxpXG4gICAgICBjbGFzcz1cInt7IGNsYXNzSWNvbkluY2x1ZGUoKSB8fCAnJyB9fVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pY29uLWNoZWNrYm94LXVuc2VsZWN0ZWRdPVwiIWNoZWNrZWQoKSAmJiAhc3RpbGxPdGhlck9wdGlvbnMoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pY29uLWNoZWNrYm94LXNlbGVjdGVkXT1cImNoZWNrZWQoKSAmJiAhc3RpbGxPdGhlck9wdGlvbnMoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pY29uLWNoZWNrYm94LWluZGV0ZXJtaW5hdGVdPVwic3RpbGxPdGhlck9wdGlvbnMoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1hY3RpdmVdPVwiZGlzYWJsZSgpICYmIChjaGVja2VkKCkgfHwgc3RpbGxPdGhlck9wdGlvbnMoKSlcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktdGV4dC1lcnJvcl09XCJzaG93Qm9yZGVyRXJyb3IoKSB8fCBlcnJvcigpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyQ2hhbmdlKCRldmVudClcIj48L2k+XG4gIH1cbiAgQGlmIChsaW5rSW1hZ2UoKSkge1xuICAgIDxpbWdcbiAgICAgIFtzcmNdPVwibGlua0ltYWdlKClcIlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWNoZWNrYm94LWltYWdlIHt7IGNsYXNzSW1hZ2VJbmNsdWRlKCkgfHwgJycgfX1cIlxuICAgICAgW2NsYXNzLmN1cnNvci1kZWZhdWx0XT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3Mudy1bMThweF1dPVwiaW1nVHlwZUljb24oKVwiXG4gICAgICBbY2xhc3MuaC1bMThweF1dPVwiaW1nVHlwZUljb24oKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChlcnJvcik9XCJoYW5kbGVyRXJyb3JJbWFnZSgkZXZlbnQpXCIgLz5cbiAgfVxuICBAaWYgKGF2YXRhckNvbmZpZygpOyBhcyBhdmF0YXJDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWF2YXRhclxuICAgICAgW3R5cGVTaGFwZV09XCJhdmF0YXJDb25maWcudHlwZVNoYXBlXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbc2l6ZV09XCJhdmF0YXJDb25maWcuc2l6ZSB8fCAyNFwiXG4gICAgICBbbGlua0F2YXRhcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhclwiXG4gICAgICBbbGlua0F2YXRhckVycm9yXT1cImF2YXRhckNvbmZpZy5saW5rQXZhdGFyRXJyb3JcIlxuICAgICAgW2lkR2VuQ29sb3JdPVwiYXZhdGFyQ29uZmlnLmlkR2VuQ29sb3JcIlxuICAgICAgW3RleHRBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLnRleHRBdmF0YXJcIiAvPlxuICB9XG4gIEBpZiAoIWxpbmtJbWFnZSgpICYmIGljb25JbWFnZUNsYXNzKCkpIHtcbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwiaWNvbkltYWdlQ2xhc3MoKVwiXG4gICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpXCI+PC9kaXY+XG4gIH1cbiAgQGlmIChidWxsZXQoKTsgYXMgYnVsbGV0KSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWNoZWNrYm94LWJ1bGxldCB7eyBidWxsZXQuY2xhc3NJbmNsdWRlIHx8ICcnIH19XCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJ1bGxldC5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImJ1bGxldC53aWR0aFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImJ1bGxldC5oZWlnaHRcIlxuICAgICAgW2NsYXNzLmN1cnNvci1kZWZhdWx0XT1cImRpc2FibGUoKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckNoYW5nZSgkZXZlbnQpXCI+PC9kaXY+XG4gIH1cbiAgQGlmIChsYWJlbCgpOyBhcyBsYWJlbCkge1xuICAgIDxkaXZcbiAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICBbdHlwZV09XCJ0eXBlTGFiZWxQb3BvdmVyKCkgfHwgJ3RleHQnXCJcbiAgICAgIFthdHRyLmlzTGFiZWxdPVwidHJ1ZVwiXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzTGFiZWxJbmNsdWRlKCkgKyAoZGlzYWJsZSgpID8gJyBjdXJzb3ItZGVmYXVsdCcgOiAnJylcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiaWdub3JlU2hvd1BvcG92ZXJMYWJlbCgpXCJcbiAgICAgIFtjb25maWddPVwieyBjb250ZW50OiBsYWJlbCwgdGltZXJEZXN0cm95OiA1MCwgekluZGV4OiB6SW5kZXhMYWJlbCgpIH1cIlxuICAgICAgW2lnbm9yZUN1cnNvclBvaW50ZXJNb2RlTGlrZUNsaWNrXT1cImRpc2FibGVMYWJlbCgpIHx8IGRpc2FibGUoKVwiXG4gICAgICBbaW5uZXJIVE1MXT1cImxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyRXZlbnRMYWJlbCgkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIj48L2Rpdj5cbiAgfVxuICBAaWYgKHBvcG92ZXIoKTsgYXMgcG9wb3Zlcikge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgY2xhc3M9XCJmbGV4XCJcbiAgICAgIFtjb25maWddPVwicG9wb3Zlci5jb25maWdcIlxuICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudFBvcG92ZXIoJGV2ZW50KVwiXG4gICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCI+XG4gICAgICBAaWYgKCFwb3BvdmVyLmRhdGFWaWV3KSB7XG4gICAgICAgIDxpIFtjbGFzc109XCJwb3BvdmVyLmNsYXNzSW5jbHVkZSA/PyAnbGlicy11aS1pY29uLXRvb2x0aXAtb3V0bGluZSdcIj48L2k+XG4gICAgICB9XG4gICAgICBAaWYgKHBvcG92ZXIuZGF0YVZpZXcpIHtcbiAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cInBvcG92ZXIuZGF0YVZpZXcgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICAgIH1cbiAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICB9XG4gIEBpZiAoZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkKCk7IGFzIGRhdGFDb21wb25lbnRPdXRsZXRDb21wdXRlZCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkLmNvbXBvbmVudDsgaW5wdXRzOiBkYXRhQ29tcG9uZW50T3V0bGV0Q29tcHV0ZWQuaW5wdXRzXCIgLz5cbiAgfVxuPC9kaXY+XG5AaWYgKGRlc2NyaXB0aW9uKCk7IGFzIGRlc2NyaXB0aW9uKSB7XG4gIDxkaXZcbiAgICBbY2xhc3NdPVwiZGVzY3JpcHRpb24uY2xhc3NJbmNsdWRlXCJcbiAgICBbaW5uZXJIdG1sXT1cImRlc2NyaXB0aW9uQ29tcHV0ZWQoKSB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxufVxuIl19
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtc2luZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9jaGVja2JveC9zaW5nbGUvc3JjL2NoZWNrYm94LXNpbmdsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY2hlY2tib3gvc2luZ2xlL3NyYy9jaGVja2JveC1zaW5nbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBaUIsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RixPQUFPLEVBQXdCLGdDQUFnQyxFQUF5QyxNQUFNLDZCQUE2QixDQUFDO0FBQzVJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUd0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFVSCxNQUFNLE9BQU8sdUNBQXVDO0lBQ2xELG1CQUFtQjtJQUNULG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLDJCQUEyQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFD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LENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdDLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQXlCO1FBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFUyxLQUFLLENBQUMsMEJBQTBCLENBQUMsS0FBaUI7UUFDMUQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO3dHQXRIVSx1Q0FBdUM7NEZBQXZDLHVDQUF1Qyx1cklDckNwRCxveEhBMkZBLGswQkR4RFksZUFBZSw0RkFBRSxpQkFBaUIsb1BBQUUsK0JBQStCLDZYQUFFLGdDQUFnQzs7NEZBRXBHLHVDQUF1QztrQkFUbkQsU0FBUzsrQkFFRSxvQ0FBb0MsY0FHbEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgTmdDb21wb25lbnRPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXZhdGFyQ29uZmlnLCBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NvbXBvbmVudE91dGxldENvbXBvbmVudCwgVFlQRV9DT01QT05FTlRfT1VUTEVUX0RBVEEgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNvbXBvbmVudC1vdXRsZXQnO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXIsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBUWVBFX1BPUE9WRVJfRVZFTlQsIFRZUEVfUE9QT1ZFUl9UWVBFIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElDaGVja2JveEJ1bGxldCwgSUNoZWNrYm94RXZlbnQsIElDaGVja2JveEl0ZW1EZXNjcmlwdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQ2hlY2tib3ggU2luZ2xlIENvbXBvbmVudCAtIE3hu5l0IGNoZWNrYm94IMSRxqFuIGzhursgduG7m2kgbmhp4buBdSB0w7l5IGNo4buNbiBoaeG7g24gdGjhu4sgKG5ow6NuLCDhuqNuaCwgYXZhdGFyLCBwb3BvdmVyLCBkZXNjcmlwdGlvbikuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBI4buXIHRy4bujIG5oaeG7gXUgdMOtbmggbsSDbmcgbsOibmcgY2FvIG5oxrAgaGnhu4NuIHRo4buLIGjDrG5oIOG6o25oL2F2YXRhciBj4bqhbmggY2hlY2tib3gsXG4gKiB0w61jaCBo4bujcCBwb3BvdmVyIGtoaSBkaSBjaHXhu5l0IHbDoG8gbmjDo24sIHbDoCBoaeG7g24gdGjhu4sgcGjhuqduIG3DtCB04bqjIGNoaSB0aeG6v3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxsaWJzX3VpLWNvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlXG4gKiAgIFsoY2hlY2tlZCldPVwiaXNTZWxlY3RlZFwiXG4gKiAgIGxhYmVsPVwixJDhu5NuZyDDvSDEkWnhu4F1IGtob+G6o25cIlxuICogICAob3V0Q2hhbmdlKT1cIm9uU3RhdHVzQ2hhbmdlKCRldmVudClcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC1zaW5nbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC1zaW5nbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIE5nQ29tcG9uZW50T3V0bGV0LCBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiBlc2NhcGVIdG1sKHRoaXMuZGVzY3JpcHRpb24oKT8uY29udGVudCB8fCAnJykpO1xuICBwcm90ZWN0ZWQgZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRPdXRsZXQoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBvbmVudDogdGhpcy5jb21wb25lbnRPdXRsZXQoKSxcbiAgICAgIGlucHV0czogdGhpcy5kYXRhQ29tcG9uZW50T3V0bGV0KCkgfHwge30sXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICAvKiogS2jDs2EgxJHhu4tuaCBkYW5oIGNobyBjaGVja2JveCAqL1xuICByZWFkb25seSBrZXkgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIC8qKiBUcuG6oW5nIHRow6FpIGNo4buNbiBj4bunYSBjaGVja2JveCAoVHdvLXdheSBiaW5kaW5nKSAqL1xuICByZWFkb25seSBjaGVja2VkID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogTmjDo24gaGnhu4NuIHRo4buLIGLDqm4gY+G6oW5oIGNoZWNrYm94ICovXG4gIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICAvKiogQ2xhc3MgQ1NTIGLhu5Ugc3VuZyBjaG8gbmjDo24gKi9cbiAgcmVhZG9ubHkgY2xhc3NMYWJlbEluY2x1ZGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xpYnMtdWktZm9udC1oNXInLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnbGlicy11aS1mb250LWg1cicgfSk7XG4gIC8qKiDhuqhuIHBvcG92ZXIga2hpIGRpIGNodeG7mXQgdsOgbyBuaMOjbiAqL1xuICByZWFkb25seSBpZ25vcmVTaG93UG9wb3ZlckxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIExv4bqhaSBwb3BvdmVyIGhp4buDbiB0aOG7iyB0csOqbiBuaMOjbiAqL1xuICByZWFkb25seSB0eXBlTGFiZWxQb3BvdmVyID0gaW5wdXQ8VFlQRV9QT1BPVkVSX1RZUEUsIFRZUEVfUE9QT1ZFUl9UWVBFPigndGV4dCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICd0ZXh0JyB9KTtcbiAgLyoqIEPhuqV1IGjDrG5oIHBvcG92ZXIgY2hpIHRp4bq/dCAqL1xuICByZWFkb25seSBwb3BvdmVyID0gaW5wdXQ8SVBvcG92ZXI+KCk7XG4gIC8qKiDEkMaw4budbmcgZOG6q24gaMOsbmgg4bqjbmggaGnhu4NuIHRo4buLIGPhuqFuaCBjaGVja2JveCAqL1xuICByZWFkb25seSBsaW5rSW1hZ2UgPSBtb2RlbDxzdHJpbmc+KCk7XG4gIC8qKiBIw6xuaCDhuqNuaCBoaeG7g24gdGjhu4sgZOG7sSBwaMOybmcga2hpIGzhu5dpICovXG4gIHJlYWRvbmx5IGxpbmtJbWFnZUVycm9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICAvKiogQ+G6pXUgaMOsbmggQXZhdGFyIChu4bq/dSBkw7luZyB0aGF5IGNobyBow6xuaCDhuqNuaCkgKi9cbiAgcmVhZG9ubHkgYXZhdGFyQ29uZmlnID0gaW5wdXQ8SUF2YXRhckNvbmZpZz4oKTtcbiAgLyoqIENsYXNzIENTUyBi4buVIHN1bmcgY2hvIHBo4bqnbiBow6xuaCDhuqNuaCAqL1xuICByZWFkb25seSBjbGFzc0ltYWdlSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgLyoqIMSQw6FuaCBk4bqldSBow6xuaCDhuqNuaCBsw6AgZOG6oW5nIGljb24gKi9cbiAgcmVhZG9ubHkgaW1nVHlwZUljb24gPSBpbnB1dDxib29sZWFuPigpO1xuICAvKiogQ+G6pXUgaMOsbmggYnVsbGV0IChjaOG6pW0gdHLDsm4gbcOgdSkgYsOqbiBj4bqhbmggY2hlY2tib3ggKi9cbiAgcmVhZG9ubHkgYnVsbGV0ID0gaW5wdXQ8SUNoZWNrYm94QnVsbGV0PigpO1xuICAvKiogQ2xhc3MgQ1NTIGLhu5Ugc3VuZyBjaG8gY29udGFpbmVyIGNow61uaCAqL1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICcnIH0pO1xuICAvKiogQ2jhu4kgeOG7rSBsw70gdGhheSDEkeG7lWkga2hpIGNsaWNrIGNow61uaCB4w6FjIHbDoG8gY2hlY2tib3ggaG/hurdjIG5ow6NuICovXG4gIHJlYWRvbmx5IGNsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIC8qKiBUcuG6oW5nIHRow6FpIHbDtCBoaeG7h3UgaMOzYSB0b8OgbiBi4buZIGNvbXBvbmVudCAqL1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIFRy4bqhbmcgdGjDoWkgdsO0IGhp4buHdSBow7NhIG5ow6NuIChraMO0bmcgY2hvIGNsaWNrIG5ow6NuIMSR4buDIMSR4buVaSB0cuG6oW5nIHRow6FpKSAqL1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICAvKiog4bqobiDDtCBjaGVja2JveCwgY2jhu4kgaGnhu4NuIHRo4buLIG5ow6NuL+G6o25oICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoZWNrYm94ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIMSQ4buZIMawdSB0acOqbiBoaeG7g24gdGjhu4sgKHotaW5kZXgpIGPhu6dhIG5ow6NuL3BvcG92ZXIgKi9cbiAgcmVhZG9ubHkgekluZGV4TGFiZWwgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQsIG51bWJlciB8IHVuZGVmaW5lZD4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgLyoqIEhp4buDbiB0aOG7iyB0cuG6oW5nIHRow6FpIFwiY8OybiBjw6FjIGzhu7FhIGNo4buNbiBraMOhY1wiICovXG4gIHJlYWRvbmx5IHN0aWxsT3RoZXJPcHRpb25zID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIFRy4bqhbmcgdGjDoWkgbOG7l2kgKi9cbiAgcmVhZG9ubHkgZXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICAvKiogSGnhu4NuIHRo4buLIHZp4buBbiDEkeG7jyBraGkgY8OzIGzhu5dpICovXG4gIHJlYWRvbmx5IHNob3dCb3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8qKiBQaOG6p24gbcO0IHThuqMgY2hpIHRp4bq/dCBwaMOtYSBkxrDhu5tpIG5ow6NuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gaW5wdXQ8SUNoZWNrYm94SXRlbURlc2NyaXB0aW9uPigpO1xuICAvKiogQ2xhc3MgaWNvbiBoaeG7g24gdGjhu4sgKHRoYXkgY2hvIGltYWdlL2F2YXRhcikgKi9cbiAgcmVhZG9ubHkgaWNvbkltYWdlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIC8qKiBDbGFzcyBDU1MgY2hvIGljb24gKi9cbiAgcmVhZG9ubHkgY2xhc3NJY29uSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgLyoqIEhp4buDbiB0aOG7iyB2aeG7gW4gYmFvIHF1YW5oIHRvw6BuIGLhu5kgY29tcG9uZW50ICovXG4gIHJlYWRvbmx5IG1vZGVCb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8qKiBE4buvIGxp4buHdSB0cnV54buBbiB2w6BvIENvbXBvbmVudCBPdXRsZXQgKi9cbiAgcmVhZG9ubHkgZGF0YUNvbXBvbmVudE91dGxldCA9IGlucHV0PFRZUEVfQ09NUE9ORU5UX09VVExFVF9EQVRBPigpO1xuICAvKiogQ29tcG9uZW50IHTDuXkgY2jhu4luaCBoaeG7g24gdGjhu4sgdGjDtG5nIHF1YSBvdXRsZXQgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50T3V0bGV0ID0gaW5wdXQ8TGlic1VpQ29tcG9uZW50c0NvbXBvbmVudE91dGxldENvbXBvbmVudCB8IGFueT4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICAvKiogUGjDoXQgcmEga2hpIHRy4bqhbmcgdGjDoWkgY2hlY2tib3ggdGhheSDEkeG7lWkgKi9cbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PElDaGVja2JveEV2ZW50PigpO1xuICAvKiogUGjDoXQgY8OhYyBz4buxIGtp4buHbiB04burIHBvcG92ZXIgbmjDo24gKi9cbiAgcmVhZG9ubHkgb3V0RXZlbnRQb3BvdmVyID0gb3V0cHV0PFRZUEVfUE9QT1ZFUl9FVkVOVD4oKTtcbiAgLyoqIFBow6F0IGtoaSBuZ8aw4budaSBkw7luZyBjbGljayB2w6BvIG5ow6NuICovXG4gIHJlYWRvbmx5IG91dENsaWNrTGFiZWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgLyoqIFBow6F0IHRy4bqhbmcgdGjDoWkgY2h14buZdCB0csOqbiBuaMOjbiDEkeG7gyDEkWnhu4F1IGtoaeG7g24gcG9wb3ZlciAqL1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3ZlciA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckVycm9ySW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5saW5rSW1hZ2Uuc2V0KHRoaXMubGlua0ltYWdlRXJyb3IoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsaWNrUmVsYXRpdmVseShldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2xpY2tFeGFjdGx5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlckNoYW5nZShldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNoYW5nZShldmVudD86IEV2ZW50KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrZWQudXBkYXRlKChjaGVja2VkKSA9PiAhY2hlY2tlZCk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7IGtleTogdGhpcy5rZXkoKSwgY2hlY2tlZDogdGhpcy5jaGVja2VkKCksIHJldmVydDogKCkgPT4gdGhpcy5jaGVja2VkLnVwZGF0ZSgoY2hlY2tlZCkgPT4gIWNoZWNrZWQpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFdmVudExhYmVsKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoZXZlbnQgPT09ICdjbGljaycpIHtcbiAgICAgIHRoaXMub3V0Q2xpY2tMYWJlbC5lbWl0KCk7XG4gICAgICB0aGlzLmhhbmRsZXJDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckV2ZW50UG9wb3ZlcihldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgdGhpcy5vdXRFdmVudFBvcG92ZXIuZW1pdChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZXZlbnQ6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibGlicy11aS1jaGVja2JveCB7eyBjbGFzc0luY2x1ZGUoKSB8fCAnJyB9fVwiXG4gIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCIhY2xpY2tFeGFjdGx5KCkgJiYgIWRpc2FibGUoKVwiXG4gIFtjbGFzcy5wLVs4cHhdXT1cIm1vZGVCb3JkZXIoKVwiXG4gIFtjbGFzcy5yb3VuZGVkLVs0cHhdXT1cIm1vZGVCb3JkZXIoKVwiXG4gIFtjbGFzcy5saWJzLXVpLWJvcmRlci1nZW5lcmFsXT1cIm1vZGVCb3JkZXIoKSAmJiAhY2hlY2tlZCgpXCJcbiAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLXByaW1hcnktZ2VuZXJhbF09XCJtb2RlQm9yZGVyKCkgJiYgY2hlY2tlZCgpXCJcbiAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1JlbGF0aXZlbHkoJGV2ZW50KVwiPlxuICBAaWYgKCFpZ25vcmVDaGVja2JveCgpKSB7XG4gICAgPGlcbiAgICAgIGNsYXNzPVwie3sgY2xhc3NJY29uSW5jbHVkZSgpIHx8ICcnIH19XCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tY2hlY2tib3gtdW5zZWxlY3RlZF09XCIhY2hlY2tlZCgpICYmICFzdGlsbE90aGVyT3B0aW9ucygpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tY2hlY2tib3gtc2VsZWN0ZWRdPVwiY2hlY2tlZCgpICYmICFzdGlsbE90aGVyT3B0aW9ucygpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZV09XCJzdGlsbE90aGVyT3B0aW9ucygpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWFjdGl2ZV09XCJkaXNhYmxlKCkgJiYgKGNoZWNrZWQoKSB8fCBzdGlsbE90aGVyT3B0aW9ucygpKVwiXG4gICAgICBbY2xhc3MubGlicy11aS10ZXh0LWVycm9yXT1cInNob3dCb3JkZXJFcnJvcigpIHx8IGVycm9yKClcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZXJDaGFuZ2UoJGV2ZW50KVwiPjwvaT5cbiAgfVxuICBAaWYgKGxpbmtJbWFnZSgpKSB7XG4gICAgPGltZ1xuICAgICAgW3NyY109XCJsaW5rSW1hZ2UoKVwiXG4gICAgICBjbGFzcz1cImxpYnMtdWktY2hlY2tib3gtaW1hZ2Uge3sgY2xhc3NJbWFnZUluY2x1ZGUoKSB8fCAnJyB9fVwiXG4gICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtjbGFzcy53LVsxOHB4XV09XCJpbWdUeXBlSWNvbigpXCJcbiAgICAgIFtjbGFzcy5oLVsxOHB4XV09XCJpbWdUeXBlSWNvbigpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGVycm9yKT1cImhhbmRsZXJFcnJvckltYWdlKCRldmVudClcIiAvPlxuICB9XG4gIEBpZiAoYXZhdGFyQ29uZmlnKCk7IGFzIGF2YXRhckNvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyXG4gICAgICBbdHlwZVNoYXBlXT1cImF2YXRhckNvbmZpZy50eXBlU2hhcGVcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJhdmF0YXJDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtzaXplXT1cImF2YXRhckNvbmZpZy5zaXplIHx8IDI0XCJcbiAgICAgIFtsaW5rQXZhdGFyXT1cImF2YXRhckNvbmZpZy5saW5rQXZhdGFyXCJcbiAgICAgIFtsaW5rQXZhdGFyRXJyb3JdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJFcnJvclwiXG4gICAgICBbaWRHZW5Db2xvcl09XCJhdmF0YXJDb25maWcuaWRHZW5Db2xvclwiXG4gICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiIC8+XG4gIH1cbiAgQGlmICghbGlua0ltYWdlKCkgJiYgaWNvbkltYWdlQ2xhc3MoKSkge1xuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJpY29uSW1hZ2VDbGFzcygpXCJcbiAgICAgIFtjbGFzcy5jdXJzb3ItZGVmYXVsdF09XCJkaXNhYmxlKClcIj48L2Rpdj5cbiAgfVxuICBAaWYgKGJ1bGxldCgpOyBhcyBidWxsZXQpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpYnMtdWktY2hlY2tib3gtYnVsbGV0IHt7IGJ1bGxldC5jbGFzc0luY2x1ZGUgfHwgJycgfX1cIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYnVsbGV0LmJhY2tncm91bmRDb2xvclwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiYnVsbGV0LndpZHRoXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiYnVsbGV0LmhlaWdodFwiXG4gICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVyQ2hhbmdlKCRldmVudClcIj48L2Rpdj5cbiAgfVxuICBAaWYgKGxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgPGRpdlxuICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgIFt0eXBlXT1cInR5cGVMYWJlbFBvcG92ZXIoKSB8fCAndGV4dCdcIlxuICAgICAgW2F0dHIuaXNMYWJlbF09XCJ0cnVlXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NMYWJlbEluY2x1ZGUoKSArIChkaXNhYmxlKCkgPyAnIGN1cnNvci1kZWZhdWx0JyA6ICcnKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGVMYWJlbCgpXCJcbiAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJpZ25vcmVTaG93UG9wb3ZlckxhYmVsKClcIlxuICAgICAgW2NvbmZpZ109XCJ7IGNvbnRlbnQ6IGxhYmVsLCB0aW1lckRlc3Ryb3k6IDUwLCB6SW5kZXg6IHpJbmRleExhYmVsKCkgfVwiXG4gICAgICBbaWdub3JlQ3Vyc29yUG9pbnRlck1vZGVMaWtlQ2xpY2tdPVwiZGlzYWJsZUxhYmVsKCkgfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtpbm5lckhUTUxdPVwibGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudExhYmVsKCRldmVudClcIlxuICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiPjwvZGl2PlxuICB9XG4gIEBpZiAocG9wb3ZlcigpOyBhcyBwb3BvdmVyKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgW2NvbmZpZ109XCJwb3BvdmVyLmNvbmZpZ1wiXG4gICAgICAob3V0RXZlbnQpPVwiaGFuZGxlckV2ZW50UG9wb3ZlcigkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIj5cbiAgICAgIEBpZiAoIXBvcG92ZXIuZGF0YVZpZXcpIHtcbiAgICAgICAgPGkgW2NsYXNzXT1cInBvcG92ZXIuY2xhc3NJbmNsdWRlID8/ICdsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lJ1wiPjwvaT5cbiAgICAgIH1cbiAgICAgIEBpZiAocG9wb3Zlci5kYXRhVmlldykge1xuICAgICAgICA8ZGl2IFtpbm5lckh0bWxdPVwicG9wb3Zlci5kYXRhVmlldyB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxuICAgICAgfVxuICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gIH1cbiAgQGlmIChkYXRhQ29tcG9uZW50T3V0bGV0Q29tcHV0ZWQoKTsgYXMgZGF0YUNvbXBvbmVudE91dGxldENvbXB1dGVkKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJkYXRhQ29tcG9uZW50T3V0bGV0Q29tcHV0ZWQuY29tcG9uZW50OyBpbnB1dHM6IGRhdGFDb21wb25lbnRPdXRsZXRDb21wdXRlZC5pbnB1dHNcIiAvPlxuICB9XG48L2Rpdj5cbkBpZiAoZGVzY3JpcHRpb24oKTsgYXMgZGVzY3JpcHRpb24pIHtcbiAgPGRpdlxuICAgIFtjbGFzc109XCJkZXNjcmlwdGlvbi5jbGFzc0luY2x1ZGVcIlxuICAgIFtpbm5lckh0bWxdPVwiZGVzY3JpcHRpb25Db21wdXRlZCgpIHwgdHJhbnNsYXRlXCI+PC9kaXY+XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2NoZWNrYm94L3NpbmdsZS9zcmMvaW50ZXJmYWNlcy9jaGVja2JveC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNoZWNrYm94SXRlbURlc2NyaXB0aW9uIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBjbGFzc0luY2x1ZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tib3hFdmVudCB7XG4gIGtleTogYW55O1xuICBjaGVja2VkOiBib29sZWFuO1xuICBhbGxDaGVja2JveENoZWNrZWQ/OiBBcnJheTxJQ2hlY2tib3hDaGVja2VkPjtcbiAgcmV2ZXJ0OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGVja2JveENoZWNrZWQge1xuICBrZXk6IHN0cmluZztcbiAgaXRlbTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGVja2JveEJ1bGxldCB7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2NoZWNrYm94L3NpbmdsZS9zcmMvaW50ZXJmYWNlcy9jaGVja2JveC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ+G6pXUgaMOsbmggcGjhuqduIG3DtCB04bqjIGNobyBjaGVja2JveFxuICogQGludGVyZmFjZSBJQ2hlY2tib3hJdGVtRGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tib3hJdGVtRGVzY3JpcHRpb24ge1xuICAvKiogTuG7mWkgZHVuZyBtw7QgdOG6oyAoSOG7lyB0cuG7oyBIVE1MKSAqL1xuICBjb250ZW50OiBzdHJpbmc7XG4gIC8qKiBDbGFzcyBDU1MgYuG7lSBzdW5nIGNobyBwaOG6p24gbcO0IHThuqMgKi9cbiAgY2xhc3NJbmNsdWRlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU+G7sSBraeG7h24gcGjDoXQgcmEga2hpIHRy4bqhbmcgdGjDoWkgY2hlY2tib3ggdGhheSDEkeG7lWlcbiAqIEBpbnRlcmZhY2UgSUNoZWNrYm94RXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tib3hFdmVudCB7XG4gIC8qKiBLaMOzYSDEkeG7i25oIGRhbmggY+G7p2EgY2hlY2tib3ggKi9cbiAga2V5OiBhbnk7XG4gIC8qKiBUcuG6oW5nIHRow6FpIGNo4buNbiBoaeG7h24gdOG6oWkgKi9cbiAgY2hlY2tlZDogYm9vbGVhbjtcbiAgLyoqIERhbmggc8OhY2ggY8OhYyBjaGVja2JveCDEkWFuZyDEkcaw4bujYyBjaOG7jW4gKG7hur91IGTDuW5nIHRyb25nIGdyb3VwKSAqL1xuICBhbGxDaGVja2JveENoZWNrZWQ/OiBBcnJheTxJQ2hlY2tib3hDaGVja2VkPjtcbiAgLyoqIEjDoG0gY2FsbGJhY2sgxJHhu4MgaG/DoG4gdMOhYyAocmV2ZXJ0KSB0cuG6oW5nIHRow6FpIG7hur91IGPhuqduIHRoaeG6v3QgKHbDrSBk4bulIGtoaSBn4buNaSBBUEkgdGjhuqV0IGLhuqFpKSAqL1xuICByZXZlcnQ6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQ+G6pXUgaMOsbmggY2hlY2tib3ggxJHGsOG7o2MgY2jhu41uXG4gKiBAaW50ZXJmYWNlIElDaGVja2JveENoZWNrZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tib3hDaGVja2VkIHtcbiAgLyoqIEtow7NhIMSR4buLbmggZGFuaCAqL1xuICBrZXk6IHN0cmluZztcbiAgLyoqIEThu68gbGnhu4d1IGl0ZW0gbGnDqm4gcXVhbiAqL1xuICBpdGVtOiBhbnk7XG59XG5cbi8qKlxuICogQ+G6pXUgaMOsbmggYnVsbGV0IChjaOG6pW0gdHLDsm4gbcOgdSkgaGnhu4NuIHRo4buLIGPhuqFuaCBjaGVja2JveFxuICogQGludGVyZmFjZSBJQ2hlY2tib3hCdWxsZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tib3hCdWxsZXQge1xuICAvKiogQ2xhc3MgQ1NTIGLhu5Ugc3VuZyAqL1xuICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG4gIC8qKiBNw6B1IG7hu4FuIGPhu6dhIGJ1bGxldCAqL1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgLyoqIENoaeG7gXUgcuG7mW5nIGJ1bGxldCAocHgpICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIC8qKiBDaGnhu4F1IGNhbyBidWxsZXQgKHB4KSAqL1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { NgComponentOutlet } from '@angular/common';
1
2
  import * as i0 from '@angular/core';
2
3
  import { computed, input, model, output, ChangeDetectionStrategy, Component } from '@angular/core';
3
4
  import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
@@ -5,9 +6,26 @@ import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
5
6
  import { escapeHtml } from '@libs-ui/utils';
6
7
  import * as i1 from '@ngx-translate/core';
7
8
  import { TranslateModule } from '@ngx-translate/core';
8
- import { NgComponentOutlet } from '@angular/common';
9
9
 
10
10
  /* eslint-disable @typescript-eslint/no-explicit-any */
11
+ /**
12
+ * Checkbox Single Component - Một checkbox đơn lẻ với nhiều tùy chọn hiển thị (nhãn, ảnh, avatar, popover, description).
13
+ *
14
+ * @description
15
+ * Hỗ trợ nhiều tính năng nâng cao như hiển thị hình ảnh/avatar cạnh checkbox,
16
+ * tích hợp popover khi di chuột vào nhãn, và hiển thị phần mô tả chi tiết.
17
+ *
18
+ * @example
19
+ * ```html
20
+ * <libs_ui-components-checkbox-single
21
+ * [(checked)]="isSelected"
22
+ * label="Đồng ý điều khoản"
23
+ * (outChange)="onStatusChange($event)"
24
+ * />
25
+ * ```
26
+ *
27
+ * @publicApi
28
+ */
11
29
  class LibsUiComponentsCheckboxSingleComponent {
12
30
  // #region PROPERTY
13
31
  descriptionComputed = computed(() => escapeHtml(this.description()?.content || ''));
@@ -21,38 +39,70 @@ class LibsUiComponentsCheckboxSingleComponent {
21
39
  };
22
40
  });
23
41
  // #region INPUT
42
+ /** Khóa định danh cho checkbox */
24
43
  key = input();
44
+ /** Trạng thái chọn của checkbox (Two-way binding) */
25
45
  checked = model(false);
46
+ /** Nhãn hiển thị bên cạnh checkbox */
26
47
  label = input();
48
+ /** Class CSS bổ sung cho nhãn */
27
49
  classLabelInclude = input('libs-ui-font-h5r', { transform: (value) => value ?? 'libs-ui-font-h5r' });
50
+ /** Ẩn popover khi di chuột vào nhãn */
28
51
  ignoreShowPopoverLabel = input();
52
+ /** Loại popover hiển thị trên nhãn */
29
53
  typeLabelPopover = input('text', { transform: (value) => value ?? 'text' });
54
+ /** Cấu hình popover chi tiết */
30
55
  popover = input();
56
+ /** Đường dẫn hình ảnh hiển thị cạnh checkbox */
31
57
  linkImage = model();
58
+ /** Hình ảnh hiển thị dự phòng khi lỗi */
32
59
  linkImageError = input();
60
+ /** Cấu hình Avatar (nếu dùng thay cho hình ảnh) */
33
61
  avatarConfig = input();
62
+ /** Class CSS bổ sung cho phần hình ảnh */
34
63
  classImageInclude = input();
64
+ /** Đánh dấu hình ảnh là dạng icon */
35
65
  imgTypeIcon = input();
66
+ /** Cấu hình bullet (chấm tròn màu) bên cạnh checkbox */
36
67
  bullet = input();
68
+ /** Class CSS bổ sung cho container chính */
37
69
  classInclude = input('', { transform: (value) => value ?? '' });
70
+ /** Chỉ xử lý thay đổi khi click chính xác vào checkbox hoặc nhãn */
38
71
  clickExactly = input(true, { transform: (value) => value ?? true });
72
+ /** Trạng thái vô hiệu hóa toàn bộ component */
39
73
  disable = input();
74
+ /** Trạng thái vô hiệu hóa nhãn (không cho click nhãn để đổi trạng thái) */
40
75
  disableLabel = input();
76
+ /** Ẩn ô checkbox, chỉ hiển thị nhãn/ảnh */
41
77
  ignoreCheckbox = input();
78
+ /** Độ ưu tiên hiển thị (z-index) của nhãn/popover */
42
79
  zIndexLabel = input(1200, { transform: (value) => value ?? 1200 });
80
+ /** Hiển thị trạng thái "còn các lựa chọn khác" */
43
81
  stillOtherOptions = input();
82
+ /** Trạng thái lỗi */
44
83
  error = input();
84
+ /** Hiển thị viền đỏ khi có lỗi */
45
85
  showBorderError = input();
86
+ /** Phần mô tả chi tiết phía dưới nhãn */
46
87
  description = input();
88
+ /** Class icon hiển thị (thay cho image/avatar) */
47
89
  iconImageClass = input();
90
+ /** Class CSS cho icon */
48
91
  classIconInclude = input();
92
+ /** Hiển thị viền bao quanh toàn bộ component */
49
93
  modeBorder = input();
94
+ /** Dữ liệu truyền vào Component Outlet */
50
95
  dataComponentOutlet = input();
96
+ /** Component tùy chỉnh hiển thị thông qua outlet */
51
97
  componentOutlet = input();
52
98
  // #region OUTPUT
99
+ /** Phát ra khi trạng thái checkbox thay đổi */
53
100
  outChange = output();
101
+ /** Phát các sự kiện từ popover nhãn */
54
102
  outEventPopover = output();
103
+ /** Phát khi người dùng click vào nhãn */
55
104
  outClickLabel = output();
105
+ /** Phát trạng thái chuột trên nhãn để điều khiển popover */
56
106
  outChangStageFlagMousePopover = output();
57
107
  /* FUNCTIONS */
58
108
  async handlerErrorImage(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-checkbox-single.mjs","sources":["../../../../../../libs-ui/components/checkbox/single/src/checkbox-single.component.ts","../../../../../../libs-ui/components/checkbox/single/src/checkbox-single.component.html","../../../../../../libs-ui/components/checkbox/single/src/libs-ui-components-checkbox-single.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\nimport { IAvatarConfig, LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { IFlagMouse, IPopover, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT, TYPE_POPOVER_TYPE } from '@libs-ui/components-popover';\nimport { escapeHtml } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ICheckboxBullet, ICheckboxEvent, ICheckboxItemDescription } 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-checkbox-single',\n templateUrl: './checkbox-single.component.html',\n styleUrls: ['./checkbox-single.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent],\n})\nexport class LibsUiComponentsCheckboxSingleComponent {\n // #region PROPERTY\n protected descriptionComputed = computed(() => escapeHtml(this.description()?.content || ''));\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<string>();\n readonly checked = model<boolean>(false);\n readonly label = input<string>();\n readonly classLabelInclude = input<string | undefined, string | undefined>('libs-ui-font-h5r', { transform: (value) => value ?? 'libs-ui-font-h5r' });\n readonly ignoreShowPopoverLabel = input<boolean>();\n readonly typeLabelPopover = input<TYPE_POPOVER_TYPE, TYPE_POPOVER_TYPE>('text', { transform: (value) => value ?? 'text' });\n readonly popover = input<IPopover>();\n readonly linkImage = model<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<ICheckboxBullet>();\n readonly classInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n readonly clickExactly = input<boolean | undefined, boolean | undefined>(true, { transform: (value) => value ?? true });\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly ignoreCheckbox = input<boolean>();\n readonly zIndexLabel = input<number | undefined, number | undefined>(1200, { transform: (value) => value ?? 1200 });\n readonly stillOtherOptions = input<boolean>();\n readonly error = input<boolean>();\n readonly showBorderError = input<boolean>();\n readonly description = input<ICheckboxItemDescription>();\n readonly iconImageClass = input<string>();\n readonly classIconInclude = input<string>();\n readonly modeBorder = input<boolean>();\n\n readonly dataComponentOutlet = input<TYPE_COMPONENT_OUTLET_DATA>();\n readonly componentOutlet = input<LibsUiComponentsComponentOutletComponent | any>();\n\n // #region OUTPUT\n readonly outChange = output<ICheckboxEvent>();\n readonly outEventPopover = output<TYPE_POPOVER_EVENT>();\n readonly outClickLabel = output<void>();\n readonly outChangStageFlagMousePopover = output<IFlagMouse>();\n\n /* FUNCTIONS */\n protected async handlerErrorImage(event: Event) {\n event.stopPropagation();\n this.linkImage.set(this.linkImageError());\n }\n\n protected async handlerClickRelatively(event?: Event) {\n if (this.clickExactly()) {\n return;\n }\n event?.stopPropagation();\n this.handlerChange(event);\n }\n\n protected async handlerChange(event?: Event) {\n event?.stopPropagation();\n if (this.disable()) {\n return;\n }\n this.checked.update((checked) => !checked);\n this.outChange.emit({ key: this.key(), checked: this.checked(), revert: () => this.checked.update((checked) => !checked) });\n }\n\n protected async handlerEventLabel(event: string) {\n if (event === 'click') {\n this.outClickLabel.emit();\n this.handlerChange();\n }\n }\n\n protected async handlerEventPopover(event: TYPE_POPOVER_EVENT) {\n this.outEventPopover.emit(event);\n }\n\n protected async handlerChangStageFlagMouse(event: IFlagMouse) {\n this.outChangStageFlagMousePopover.emit(event);\n }\n}\n","<div\n class=\"libs-ui-checkbox {{ classInclude() || '' }}\"\n [class.cursor-pointer]=\"!clickExactly() && !disable()\"\n [class.p-[8px]]=\"modeBorder()\"\n [class.rounded-[4px]]=\"modeBorder()\"\n [class.libs-ui-border-general]=\"modeBorder() && !checked()\"\n [class.libs-ui-border-primary-general]=\"modeBorder() && checked()\"\n (click)=\"handlerClickRelatively($event)\">\n @if (!ignoreCheckbox()) {\n <i\n class=\"{{ classIconInclude() || '' }}\"\n [class.libs-ui-icon-checkbox-unselected]=\"!checked() && !stillOtherOptions()\"\n [class.libs-ui-icon-checkbox-selected]=\"checked() && !stillOtherOptions()\"\n [class.libs-ui-icon-checkbox-indeterminate]=\"stillOtherOptions()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && (checked() || stillOtherOptions())\"\n [class.libs-ui-text-error]=\"showBorderError() || error()\"\n (click)=\"handlerChange($event)\"></i>\n }\n @if (linkImage()) {\n <img\n [src]=\"linkImage()\"\n class=\"libs-ui-checkbox-image {{ classImageInclude() || '' }}\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerChange($event)\"\n (error)=\"handlerErrorImage($event)\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape\"\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 (!linkImage() && iconImageClass()) {\n <div\n [class]=\"iconImageClass()\"\n [class.cursor-default]=\"disable()\"></div>\n }\n @if (bullet(); as bullet) {\n <div\n class=\"libs-ui-checkbox-bullet {{ bullet.classInclude || '' }}\"\n [style.background-color]=\"bullet.backgroundColor\"\n [style.width.px]=\"bullet.width\"\n [style.height.px]=\"bullet.height\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerChange($event)\"></div>\n }\n @if (label(); as label) {\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"typeLabelPopover() || 'text'\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : '')\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignoreShowPopoverLabel()\"\n [config]=\"{ content: label, timerDestroy: 50, zIndex: zIndexLabel() }\"\n [ignoreCursorPointerModeLikeClick]=\"disableLabel() || disable()\"\n [innerHTML]=\"label | translate\"\n (outEvent)=\"handlerEventLabel($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n @if (popover(); as popover) {\n <libs_ui-components-popover\n class=\"flex\"\n [config]=\"popover.config\"\n (outEvent)=\"handlerEventPopover($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\">\n @if (!popover.dataView) {\n <i [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"></i>\n }\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n }\n </libs_ui-components-popover>\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n@if (description(); as description) {\n <div\n [class]=\"description.classInclude\"\n [innerHtml]=\"descriptionComputed() | translate\"></div>\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-checkbox-single.mjs","sources":["../../../../../../libs-ui/components/checkbox/single/src/checkbox-single.component.ts","../../../../../../libs-ui/components/checkbox/single/src/checkbox-single.component.html","../../../../../../libs-ui/components/checkbox/single/src/libs-ui-components-checkbox-single.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\nimport { IAvatarConfig, LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { LibsUiComponentsComponentOutletComponent, TYPE_COMPONENT_OUTLET_DATA } from '@libs-ui/components-component-outlet';\nimport { IFlagMouse, IPopover, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT, TYPE_POPOVER_TYPE } from '@libs-ui/components-popover';\nimport { escapeHtml } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ICheckboxBullet, ICheckboxEvent, ICheckboxItemDescription } from './interfaces';\n\n/**\n * Checkbox Single Component - Một checkbox đơn lẻ với nhiều tùy chọn hiển thị (nhãn, ảnh, avatar, popover, description).\n *\n * @description\n * Hỗ trợ nhiều tính năng nâng cao như hiển thị hình ảnh/avatar cạnh checkbox,\n * tích hợp popover khi di chuột vào nhãn, và hiển thị phần mô tả chi tiết.\n *\n * @example\n * ```html\n * <libs_ui-components-checkbox-single\n * [(checked)]=\"isSelected\"\n * label=\"Đồng ý điều khoản\"\n * (outChange)=\"onStatusChange($event)\"\n * />\n * ```\n *\n * @publicApi\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-checkbox-single',\n templateUrl: './checkbox-single.component.html',\n styleUrls: ['./checkbox-single.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, NgComponentOutlet, LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent],\n})\nexport class LibsUiComponentsCheckboxSingleComponent {\n // #region PROPERTY\n protected descriptionComputed = computed(() => escapeHtml(this.description()?.content || ''));\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 /** Khóa định danh cho checkbox */\n readonly key = input<string>();\n /** Trạng thái chọn của checkbox (Two-way binding) */\n readonly checked = model<boolean>(false);\n /** Nhãn hiển thị bên cạnh checkbox */\n readonly label = input<string>();\n /** Class CSS bổ sung cho nhãn */\n readonly classLabelInclude = input<string | undefined, string | undefined>('libs-ui-font-h5r', { transform: (value) => value ?? 'libs-ui-font-h5r' });\n /** Ẩn popover khi di chuột vào nhãn */\n readonly ignoreShowPopoverLabel = input<boolean>();\n /** Loại popover hiển thị trên nhãn */\n readonly typeLabelPopover = input<TYPE_POPOVER_TYPE, TYPE_POPOVER_TYPE>('text', { transform: (value) => value ?? 'text' });\n /** Cấu hình popover chi tiết */\n readonly popover = input<IPopover>();\n /** Đường dẫn hình ảnh hiển thị cạnh checkbox */\n readonly linkImage = model<string>();\n /** Hình ảnh hiển thị dự phòng khi lỗi */\n readonly linkImageError = input<string>();\n /** Cấu hình Avatar (nếu dùng thay cho hình ảnh) */\n readonly avatarConfig = input<IAvatarConfig>();\n /** Class CSS bổ sung cho phần hình ảnh */\n readonly classImageInclude = input<string>();\n /** Đánh dấu hình ảnh là dạng icon */\n readonly imgTypeIcon = input<boolean>();\n /** Cấu hình bullet (chấm tròn màu) bên cạnh checkbox */\n readonly bullet = input<ICheckboxBullet>();\n /** Class CSS bổ sung cho container chính */\n readonly classInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n /** Chỉ xử lý thay đổi khi click chính xác vào checkbox hoặc nhãn */\n readonly clickExactly = input<boolean | undefined, boolean | undefined>(true, { transform: (value) => value ?? true });\n /** Trạng thái vô hiệu hóa toàn bộ component */\n readonly disable = input<boolean>();\n /** Trạng thái vô hiệu hóa nhãn (không cho click nhãn để đổi trạng thái) */\n readonly disableLabel = input<boolean>();\n /** Ẩn ô checkbox, chỉ hiển thị nhãn/ảnh */\n readonly ignoreCheckbox = input<boolean>();\n /** Độ ưu tiên hiển thị (z-index) của nhãn/popover */\n readonly zIndexLabel = input<number | undefined, number | undefined>(1200, { transform: (value) => value ?? 1200 });\n /** Hiển thị trạng thái \"còn các lựa chọn khác\" */\n readonly stillOtherOptions = input<boolean>();\n /** Trạng thái lỗi */\n readonly error = input<boolean>();\n /** Hiển thị viền đỏ khi có lỗi */\n readonly showBorderError = input<boolean>();\n /** Phần mô tả chi tiết phía dưới nhãn */\n readonly description = input<ICheckboxItemDescription>();\n /** Class icon hiển thị (thay cho image/avatar) */\n readonly iconImageClass = input<string>();\n /** Class CSS cho icon */\n readonly classIconInclude = input<string>();\n /** Hiển thị viền bao quanh toàn bộ component */\n readonly modeBorder = input<boolean>();\n\n /** Dữ liệu truyền vào Component Outlet */\n readonly dataComponentOutlet = input<TYPE_COMPONENT_OUTLET_DATA>();\n /** Component tùy chỉnh hiển thị thông qua outlet */\n readonly componentOutlet = input<LibsUiComponentsComponentOutletComponent | any>();\n\n // #region OUTPUT\n /** Phát ra khi trạng thái checkbox thay đổi */\n readonly outChange = output<ICheckboxEvent>();\n /** Phát các sự kiện từ popover nhãn */\n readonly outEventPopover = output<TYPE_POPOVER_EVENT>();\n /** Phát khi người dùng click vào nhãn */\n readonly outClickLabel = output<void>();\n /** Phát trạng thái chuột trên nhãn để điều khiển popover */\n readonly outChangStageFlagMousePopover = output<IFlagMouse>();\n\n /* FUNCTIONS */\n protected async handlerErrorImage(event: Event) {\n event.stopPropagation();\n this.linkImage.set(this.linkImageError());\n }\n\n protected async handlerClickRelatively(event?: Event) {\n if (this.clickExactly()) {\n return;\n }\n event?.stopPropagation();\n this.handlerChange(event);\n }\n\n protected async handlerChange(event?: Event) {\n event?.stopPropagation();\n if (this.disable()) {\n return;\n }\n this.checked.update((checked) => !checked);\n this.outChange.emit({ key: this.key(), checked: this.checked(), revert: () => this.checked.update((checked) => !checked) });\n }\n\n protected async handlerEventLabel(event: string) {\n if (event === 'click') {\n this.outClickLabel.emit();\n this.handlerChange();\n }\n }\n\n protected async handlerEventPopover(event: TYPE_POPOVER_EVENT) {\n this.outEventPopover.emit(event);\n }\n\n protected async handlerChangStageFlagMouse(event: IFlagMouse) {\n this.outChangStageFlagMousePopover.emit(event);\n }\n}\n","<div\n class=\"libs-ui-checkbox {{ classInclude() || '' }}\"\n [class.cursor-pointer]=\"!clickExactly() && !disable()\"\n [class.p-[8px]]=\"modeBorder()\"\n [class.rounded-[4px]]=\"modeBorder()\"\n [class.libs-ui-border-general]=\"modeBorder() && !checked()\"\n [class.libs-ui-border-primary-general]=\"modeBorder() && checked()\"\n (click)=\"handlerClickRelatively($event)\">\n @if (!ignoreCheckbox()) {\n <i\n class=\"{{ classIconInclude() || '' }}\"\n [class.libs-ui-icon-checkbox-unselected]=\"!checked() && !stillOtherOptions()\"\n [class.libs-ui-icon-checkbox-selected]=\"checked() && !stillOtherOptions()\"\n [class.libs-ui-icon-checkbox-indeterminate]=\"stillOtherOptions()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n [class.libs-ui-disable-active]=\"disable() && (checked() || stillOtherOptions())\"\n [class.libs-ui-text-error]=\"showBorderError() || error()\"\n (click)=\"handlerChange($event)\"></i>\n }\n @if (linkImage()) {\n <img\n [src]=\"linkImage()\"\n class=\"libs-ui-checkbox-image {{ classImageInclude() || '' }}\"\n [class.cursor-default]=\"disable()\"\n [class.w-[18px]]=\"imgTypeIcon()\"\n [class.h-[18px]]=\"imgTypeIcon()\"\n (click)=\"handlerChange($event)\"\n (error)=\"handlerErrorImage($event)\" />\n }\n @if (avatarConfig(); as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape\"\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 (!linkImage() && iconImageClass()) {\n <div\n [class]=\"iconImageClass()\"\n [class.cursor-default]=\"disable()\"></div>\n }\n @if (bullet(); as bullet) {\n <div\n class=\"libs-ui-checkbox-bullet {{ bullet.classInclude || '' }}\"\n [style.background-color]=\"bullet.backgroundColor\"\n [style.width.px]=\"bullet.width\"\n [style.height.px]=\"bullet.height\"\n [class.cursor-default]=\"disable()\"\n (click)=\"handlerChange($event)\"></div>\n }\n @if (label(); as label) {\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"typeLabelPopover() || 'text'\"\n [attr.isLabel]=\"true\"\n [classInclude]=\"classLabelInclude() + (disable() ? ' cursor-default' : '')\"\n [class.libs-ui-disable]=\"disableLabel()\"\n [ignoreShowPopover]=\"ignoreShowPopoverLabel()\"\n [config]=\"{ content: label, timerDestroy: 50, zIndex: zIndexLabel() }\"\n [ignoreCursorPointerModeLikeClick]=\"disableLabel() || disable()\"\n [innerHTML]=\"label | translate\"\n (outEvent)=\"handlerEventLabel($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\"></div>\n }\n @if (popover(); as popover) {\n <libs_ui-components-popover\n class=\"flex\"\n [config]=\"popover.config\"\n (outEvent)=\"handlerEventPopover($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\">\n @if (!popover.dataView) {\n <i [class]=\"popover.classInclude ?? 'libs-ui-icon-tooltip-outline'\"></i>\n }\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n }\n </libs_ui-components-popover>\n }\n @if (dataComponentOutletComputed(); as dataComponentOutletComputed) {\n <ng-container *ngComponentOutlet=\"dataComponentOutletComputed.component; inputs: dataComponentOutletComputed.inputs\" />\n }\n</div>\n@if (description(); as description) {\n <div\n [class]=\"description.classInclude\"\n [innerHtml]=\"descriptionComputed() | translate\"></div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,20 +1,48 @@
1
+ /**
2
+ * Cấu hình phần mô tả cho checkbox
3
+ * @interface ICheckboxItemDescription
4
+ */
1
5
  export interface ICheckboxItemDescription {
6
+ /** Nội dung mô tả (Hỗ trợ HTML) */
2
7
  content: string;
8
+ /** Class CSS bổ sung cho phần mô tả */
3
9
  classInclude: string;
4
10
  }
11
+ /**
12
+ * Sự kiện phát ra khi trạng thái checkbox thay đổi
13
+ * @interface ICheckboxEvent
14
+ */
5
15
  export interface ICheckboxEvent {
16
+ /** Khóa định danh của checkbox */
6
17
  key: any;
18
+ /** Trạng thái chọn hiện tại */
7
19
  checked: boolean;
20
+ /** Danh sách các checkbox đang được chọn (nếu dùng trong group) */
8
21
  allCheckboxChecked?: Array<ICheckboxChecked>;
22
+ /** Hàm callback để hoàn tác (revert) trạng thái nếu cần thiết (ví dụ khi gọi API thất bại) */
9
23
  revert: () => void;
10
24
  }
25
+ /**
26
+ * Cấu hình checkbox được chọn
27
+ * @interface ICheckboxChecked
28
+ */
11
29
  export interface ICheckboxChecked {
30
+ /** Khóa định danh */
12
31
  key: string;
32
+ /** Dữ liệu item liên quan */
13
33
  item: any;
14
34
  }
35
+ /**
36
+ * Cấu hình bullet (chấm tròn màu) hiển thị cạnh checkbox
37
+ * @interface ICheckboxBullet
38
+ */
15
39
  export interface ICheckboxBullet {
40
+ /** Class CSS bổ sung */
16
41
  classInclude?: string;
42
+ /** Màu nền của bullet */
17
43
  backgroundColor: string;
44
+ /** Chiều rộng bullet (px) */
18
45
  width: number;
46
+ /** Chiều cao bullet (px) */
19
47
  height: number;
20
48
  }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@libs-ui/components-checkbox-single",
3
- "version": "0.2.355-13",
3
+ "version": "0.2.355-15",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/components-avatar": "0.2.355-13",
7
- "@libs-ui/components-popover": "0.2.355-13",
8
- "@libs-ui/utils": "0.2.355-13",
6
+ "@libs-ui/components-avatar": "0.2.355-15",
7
+ "@libs-ui/components-popover": "0.2.355-15",
8
+ "@libs-ui/utils": "0.2.355-15",
9
9
  "@ngx-translate/core": "^15.0.0"
10
10
  },
11
11
  "sideEffects": false,