@libs-ui/components-checkbox-group 0.2.5

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 ADDED
@@ -0,0 +1,3 @@
1
+ # checkbox-group
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,36 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { ILabel } from '@libs-ui/components-label';
3
+ import { ICheckboxGroupItem, ICheckboxGroupValidRequired, ICheckboxItem } from './interfaces/group.interface';
4
+ import { ICheckboxEvent } from '@libs-ui/components-checkbox-single';
5
+ import { ICheckboxGroupFunctionControlEvent } from './interfaces/function-control.interface';
6
+ import { TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';
7
+ import * as i0 from "@angular/core";
8
+ export declare class LibsUiComponentsCheckboxGroupComponent implements OnInit {
9
+ protected readonly ERROR_MESSAGE_EMPTY_VALID = "i18n_valid_empty_message";
10
+ protected error: import("@angular/core").WritableSignal<boolean>;
11
+ readonly groups: import("@angular/core").ModelSignal<ICheckboxGroupItem[]>;
12
+ readonly fieldKey: import("@angular/core").InputSignalWithTransform<string, string>;
13
+ readonly keysChecked: import("@angular/core").InputSignal<string[]>;
14
+ readonly keysDisable: import("@angular/core").InputSignal<string[] | undefined>;
15
+ readonly disable: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
16
+ readonly clickExactly: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
17
+ readonly horizontal: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
18
+ readonly labelConfig: import("@angular/core").InputSignal<ILabel | undefined>;
19
+ readonly validRequired: import("@angular/core").InputSignal<ICheckboxGroupValidRequired | undefined>;
20
+ readonly classInclude: import("@angular/core").InputSignal<string | undefined>;
21
+ readonly classLabelInclude: import("@angular/core").InputSignal<string | undefined>;
22
+ readonly showValidateBottom: import("@angular/core").InputSignal<boolean | undefined>;
23
+ readonly classItemWhenModeHorizontal: import("@angular/core").InputSignal<string>;
24
+ readonly classGroupWhenModeHorizontal: import("@angular/core").InputSignal<string>;
25
+ readonly modeBorder: import("@angular/core").InputSignal<boolean | undefined>;
26
+ readonly outChange: import("@angular/core").OutputEmitterRef<ICheckboxEvent>;
27
+ readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<ICheckboxGroupFunctionControlEvent>;
28
+ constructor();
29
+ ngOnInit(): void;
30
+ protected handlerChange(event: ICheckboxEvent, item: ICheckboxItem): void;
31
+ private checkValid;
32
+ private resetError;
33
+ protected handlerEventPopover(event: TYPE_POPOVER_EVENT, item: ICheckboxItem): void;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsCheckboxGroupComponent, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsCheckboxGroupComponent, "libs_ui-components-checkbox-group", never, { "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "fieldKey": { "alias": "fieldKey"; "required": false; "isSignal": true; }; "keysChecked": { "alias": "keysChecked"; "required": false; "isSignal": true; }; "keysDisable": { "alias": "keysDisable"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "clickExactly": { "alias": "clickExactly"; "required": false; "isSignal": true; }; "horizontal": { "alias": "horizontal"; "required": false; "isSignal": true; }; "labelConfig": { "alias": "labelConfig"; "required": false; "isSignal": true; }; "validRequired": { "alias": "validRequired"; "required": false; "isSignal": true; }; "classInclude": { "alias": "classInclude"; "required": false; "isSignal": true; }; "classLabelInclude": { "alias": "classLabelInclude"; "required": false; "isSignal": true; }; "showValidateBottom": { "alias": "showValidateBottom"; "required": false; "isSignal": true; }; "classItemWhenModeHorizontal": { "alias": "classItemWhenModeHorizontal"; "required": false; "isSignal": true; }; "classGroupWhenModeHorizontal": { "alias": "classGroupWhenModeHorizontal"; "required": false; "isSignal": true; }; "modeBorder": { "alias": "modeBorder"; "required": false; "isSignal": true; }; }, { "groups": "groupsChange"; "outChange": "outChange"; "outFunctionsControl": "outFunctionsControl"; }, never, never, true, never>;
36
+ }
@@ -0,0 +1,101 @@
1
+ import { ChangeDetectionStrategy, Component, effect, input, model, output, signal } from '@angular/core';
2
+ import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
3
+ import { ERROR_MESSAGE_EMPTY_VALID, isEmpty } from '@libs-ui/utils';
4
+ import { LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';
5
+ import { NgTemplateOutlet } from '@angular/common';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
9
+ export class LibsUiComponentsCheckboxGroupComponent {
10
+ /* PROPERTY */
11
+ ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;
12
+ error = signal(false);
13
+ /* INPUT */
14
+ groups = model.required();
15
+ fieldKey = input('key', { transform: value => value || 'key' });
16
+ keysChecked = input([]);
17
+ keysDisable = input();
18
+ disable = input(false, { transform: value => value ?? false });
19
+ clickExactly = input(true, { transform: value => value ?? true });
20
+ horizontal = input(false, { transform: value => value ?? false });
21
+ labelConfig = input();
22
+ validRequired = input();
23
+ classInclude = input();
24
+ classLabelInclude = input();
25
+ showValidateBottom = input();
26
+ classItemWhenModeHorizontal = input('mr-[24px]');
27
+ classGroupWhenModeHorizontal = input('flex');
28
+ modeBorder = input();
29
+ /* OUTPUT */
30
+ outChange = output();
31
+ outFunctionsControl = output();
32
+ constructor() {
33
+ effect(() => {
34
+ if (isEmpty(this.keysChecked())) {
35
+ return;
36
+ }
37
+ this.groups.update(data => {
38
+ return data.map(group => {
39
+ group.item.checked = this.keysChecked().some(key => key === group.item[this.fieldKey()]);
40
+ return group;
41
+ });
42
+ });
43
+ }, { allowSignalWrites: true });
44
+ effect(() => {
45
+ if (isEmpty(this.keysDisable())) {
46
+ return;
47
+ }
48
+ this.groups.update(data => {
49
+ return data.map(group => {
50
+ group.disableByKeys = false;
51
+ if (group.item && this.keysDisable()?.includes(group.item[this.fieldKey()])) {
52
+ group.disableByKeys = true;
53
+ }
54
+ return group;
55
+ });
56
+ });
57
+ }, { allowSignalWrites: true });
58
+ }
59
+ /* FUNCTIONS */
60
+ ngOnInit() {
61
+ this.outFunctionsControl.emit({
62
+ valid: this.checkValid.bind(this),
63
+ resetError: this.resetError.bind(this)
64
+ });
65
+ }
66
+ /* FUNCTIONS*/
67
+ handlerChange(event, item) {
68
+ if (this.disable()) {
69
+ return;
70
+ }
71
+ item.checked = event.checked;
72
+ event.allCheckboxChecked = this.groups().filter(group => group.item.checked).map(group => ({ key: group.item[this.fieldKey()], item: group.item }));
73
+ this.outChange.emit(event);
74
+ this.checkValid();
75
+ }
76
+ async checkValid() {
77
+ this.error.set(false);
78
+ if (!this.validRequired()) {
79
+ return true;
80
+ }
81
+ this.error.set(!this.groups().some(group => group.item.checked));
82
+ return !this.error();
83
+ }
84
+ async resetError() {
85
+ this.error.set(false);
86
+ }
87
+ handlerEventPopover(event, item) {
88
+ item.outEventPopover?.(event);
89
+ }
90
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsCheckboxGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsCheckboxGroupComponent, isStandalone: true, selector: "libs_ui-components-checkbox-group", inputs: { groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: true, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, keysChecked: { classPropertyName: "keysChecked", publicName: "keysChecked", isSignal: true, isRequired: false, transformFunction: null }, keysDisable: { classPropertyName: "keysDisable", publicName: "keysDisable", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, clickExactly: { classPropertyName: "clickExactly", publicName: "clickExactly", isSignal: true, isRequired: false, transformFunction: null }, horizontal: { classPropertyName: "horizontal", publicName: "horizontal", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classLabelInclude: { classPropertyName: "classLabelInclude", publicName: "classLabelInclude", isSignal: true, isRequired: false, transformFunction: null }, showValidateBottom: { classPropertyName: "showValidateBottom", publicName: "showValidateBottom", isSignal: true, isRequired: false, transformFunction: null }, classItemWhenModeHorizontal: { classPropertyName: "classItemWhenModeHorizontal", publicName: "classItemWhenModeHorizontal", isSignal: true, isRequired: false, transformFunction: null }, classGroupWhenModeHorizontal: { classPropertyName: "classGroupWhenModeHorizontal", publicName: "classGroupWhenModeHorizontal", isSignal: true, isRequired: false, transformFunction: null }, modeBorder: { classPropertyName: "modeBorder", publicName: "modeBorder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { groups: "groupsChange", outChange: "outChange", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n <div class=\"libs-ui-checkbox-group {{ horizontal() ? classGroupWhenModeHorizontal() : '' }}\">\n @for (group of groups(); track group) {\n <div [class]=\"horizontal() ? classItemWhenModeHorizontal() : ''\">\n <div class=\"py-[4px] {{ group.item.classIncludeWrapper || '' }}\">\n <libs_ui-components-checkbox-single [label]=\"group.item.label || ' '\"\n [checked]=\"group.item.checked || false\"\n [key]=\"group.item[fieldKey()]\"\n [disable]=\"group.disableByKeys || disable() || group.item.disable || false\"\n [disableLabel]=\" group.item.disableLabel || false\"\n [classLabelInclude]=\"classLabelInclude() || group.item.classLabelInclude || ''\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [popover]=\"group.item.popover\"\n [avatarConfig]=\"group.item.avatarConfig\"\n [description]=\"group.item.description\"\n [typeLabelPopover]=\"group.item.typeLabelPopover || 'text'\"\n [ignoreShowPopoverLabel]=\"group.item.ignoreShowPopoverLabel || false\"\n [clickExactly]=\"clickExactly()\"\n [modeBorder]=\"modeBorder()\"\n [showBorderError]=\"error() && validRequired()?.hasBorderErrorCheckbox\"\n (outChange)=\"handlerChange($event, group.item)\"\n (outEventPopover)=\"handlerEventPopover($event, group.item)\" />\n </div>\n @if (group.item.checked) {\n @if (group.subText) {\n <div class=\"libs-ui-checkbox-group-sub-text {{ group.classIncludeSubText || '' }}\"\n [innerHtml]=\"group.subText\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"></ng-container>\n }\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n</div>\n\n<ng-template #templateValidate>\n @if (error()) {\n <div class=\"flex items-center\"\n [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID) | translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n</ng-template>\n", styles: [".libs-ui-checkbox-group .libs-ui-checkbox-group-sub-text{color:#9ca2ad;font-size:10px;line-height:14px;margin-left:24px;margin-bottom:4px;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outToggleEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
92
+ }
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsCheckboxGroupComponent, decorators: [{
94
+ type: Component,
95
+ args: [{ selector: 'libs_ui-components-checkbox-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
96
+ TranslateModule, NgTemplateOutlet,
97
+ LibsUiComponentsLabelComponent,
98
+ LibsUiComponentsCheckboxSingleComponent
99
+ ], template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n <div class=\"libs-ui-checkbox-group {{ horizontal() ? classGroupWhenModeHorizontal() : '' }}\">\n @for (group of groups(); track group) {\n <div [class]=\"horizontal() ? classItemWhenModeHorizontal() : ''\">\n <div class=\"py-[4px] {{ group.item.classIncludeWrapper || '' }}\">\n <libs_ui-components-checkbox-single [label]=\"group.item.label || ' '\"\n [checked]=\"group.item.checked || false\"\n [key]=\"group.item[fieldKey()]\"\n [disable]=\"group.disableByKeys || disable() || group.item.disable || false\"\n [disableLabel]=\" group.item.disableLabel || false\"\n [classLabelInclude]=\"classLabelInclude() || group.item.classLabelInclude || ''\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [popover]=\"group.item.popover\"\n [avatarConfig]=\"group.item.avatarConfig\"\n [description]=\"group.item.description\"\n [typeLabelPopover]=\"group.item.typeLabelPopover || 'text'\"\n [ignoreShowPopoverLabel]=\"group.item.ignoreShowPopoverLabel || false\"\n [clickExactly]=\"clickExactly()\"\n [modeBorder]=\"modeBorder()\"\n [showBorderError]=\"error() && validRequired()?.hasBorderErrorCheckbox\"\n (outChange)=\"handlerChange($event, group.item)\"\n (outEventPopover)=\"handlerEventPopover($event, group.item)\" />\n </div>\n @if (group.item.checked) {\n @if (group.subText) {\n <div class=\"libs-ui-checkbox-group-sub-text {{ group.classIncludeSubText || '' }}\"\n [innerHtml]=\"group.subText\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"></ng-container>\n }\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n</div>\n\n<ng-template #templateValidate>\n @if (error()) {\n <div class=\"flex items-center\"\n [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID) | translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n</ng-template>\n", styles: [".libs-ui-checkbox-group .libs-ui-checkbox-group-sub-text{color:#9ca2ad;font-size:10px;line-height:14px;margin-left:24px;margin-bottom:4px;width:100%}\n"] }]
100
+ }], ctorParameters: () => [] });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2NoZWNrYm94L2dyb3VwL3NyYy9jaGVja2JveC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY2hlY2tib3gvZ3JvdXAvc3JjL2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFrQix1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBZXRELE1BQU0sT0FBTyxzQ0FBc0M7SUFFakQsY0FBYztJQUNLLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0lBQy9ELEtBQUssR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUE7SUFFeEMsV0FBVztJQUNGLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE2QixDQUFDO0lBQ3JELFFBQVEsR0FBRyxLQUFLLENBQWlCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQy9FLFdBQVcsR0FBRyxLQUFLLENBQWdCLEVB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QztRQUVqRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVTtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVMsbUJBQW1CLENBQUMsS0FBeUIsRUFBRSxJQUFtQjtRQUMxRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0E1RlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0MsbTFFQ3ZCbkQsK3RIQTRFQSxnTkQxREksZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQ2pDLDhCQUE4Qiw0cUJBQzlCLHVDQUF1Qzs7NEZBRzlCLHNDQUFzQztrQkFibEQsU0FBUzsrQkFFRSxtQ0FBbUMsY0FHakMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWUsRUFBRSxnQkFBZ0I7d0JBQ2pDLDhCQUE4Qjt3QkFDOUIsdUNBQXVDO3FCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBPbkluaXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCwgaXNFbXB0eSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IElDaGVja2JveEdyb3VwSXRlbSwgSUNoZWNrYm94R3JvdXBWYWxpZFJlcXVpcmVkLCBJQ2hlY2tib3hJdGVtIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2dyb3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ2hlY2tib3hFdmVudCwgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnO1xuaW1wb3J0IHsgSUNoZWNrYm94R3JvdXBGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNDaGVja2JveEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCA9IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gIHByb3RlY3RlZCBlcnJvciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSlcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBncm91cHMgPSBtb2RlbC5yZXF1aXJlZDxBcnJheTxJQ2hlY2tib3hHcm91cEl0ZW0+PigpO1xuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0PHN0cmluZywgc3RyaW5nPigna2V5JywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8ICdrZXknIH0pXG4gIHJlYWRvbmx5IGtleXNDaGVja2VkID0gaW5wdXQ8QXJyYXk8c3RyaW5nPj4oW10pO1xuICByZWFkb25seSBrZXlzRGlzYWJsZSA9IGlucHV0PEFycmF5PHN0cmluZz4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaG9yaXpvbnRhbCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SUNoZWNrYm94R3JvdXBWYWxpZFJlcXVpcmVkPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTGFiZWxJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93VmFsaWRhdGVCb3R0b20gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0l0ZW1XaGVuTW9kZUhvcml6b250YWwgPSBpbnB1dDxzdHJpbmc+KCdtci1bMjRweF0nKTtcbiAgcmVhZG9ubHkgY2xhc3NHcm91cFdoZW5Nb2RlSG9yaXpvbnRhbCA9IGlucHV0PHN0cmluZz4oJ2ZsZXgnKTtcbiAgcmVhZG9ubHkgbW9kZUJvcmRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nZSA9IG91dHB1dDxJQ2hlY2tib3hFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJQ2hlY2tib3hHcm91cEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eSh0aGlzLmtleXNDaGVja2VkKCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ3JvdXBzLnVwZGF0ZShkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKGdyb3VwID0+IHtcbiAgICAgICAgICBncm91cC5pdGVtLmNoZWNrZWQgPSB0aGlzLmtleXNDaGVja2VkKCkuc29tZShrZXkgPT4ga2V5ID09PSBncm91cC5pdGVtW3RoaXMuZmllbGRLZXkoKV0pO1xuXG4gICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkodGhpcy5rZXlzRGlzYWJsZSgpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmdyb3Vwcy51cGRhdGUoZGF0YSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRhLm1hcChncm91cCA9PiB7XG4gICAgICAgICAgZ3JvdXAuZGlzYWJsZUJ5S2V5cyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChncm91cC5pdGVtICYmIHRoaXMua2V5c0Rpc2FibGUoKT8uaW5jbHVkZXMoZ3JvdXAuaXRlbVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgICAgZ3JvdXAuZGlzYWJsZUJ5S2V5cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHZhbGlkOiB0aGlzLmNoZWNrVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0RXJyb3I6IHRoaXMucmVzZXRFcnJvci5iaW5kKHRoaXMpXG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMqL1xuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZShldmVudDogSUNoZWNrYm94RXZlbnQsIGl0ZW06IElDaGVja2JveEl0ZW0pIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS5jaGVja2VkID0gZXZlbnQuY2hlY2tlZDtcbiAgICBldmVudC5hbGxDaGVja2JveENoZWNrZWQgPSB0aGlzLmdyb3VwcygpLmZpbHRlcihncm91cCA9PiBncm91cC5pdGVtLmNoZWNrZWQpLm1hcChncm91cCA9PiAoeyBrZXk6IGdyb3VwLml0ZW1bdGhpcy5maWVsZEtleSgpXSwgaXRlbTogZ3JvdXAuaXRlbSB9KSk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrVmFsaWQoKSB7XG4gICAgdGhpcy5lcnJvci5zZXQoZmFsc2UpO1xuICAgIGlmICghdGhpcy52YWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmVycm9yLnNldCghdGhpcy5ncm91cHMoKS5zb21lKGdyb3VwID0+IGdyb3VwLml0ZW0uY2hlY2tlZCkpO1xuXG4gICAgcmV0dXJuICF0aGlzLmVycm9yKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0RXJyb3IoKSB7XG4gICAgdGhpcy5lcnJvci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudFBvcG92ZXIoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCwgaXRlbTogSUNoZWNrYm94SXRlbSkge1xuICAgIGl0ZW0ub3V0RXZlbnRQb3BvdmVyPy4oZXZlbnQpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsQ29uZmlnLnJlcXVpcmVkIFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG4gIEBpZiAoIXNob3dWYWxpZGF0ZUJvdHRvbSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlVmFsaWRhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1jaGVja2JveC1ncm91cCB7eyBob3Jpem9udGFsKCkgPyBjbGFzc0dyb3VwV2hlbk1vZGVIb3Jpem9udGFsKCkgOiAnJyB9fVwiPlxuICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwcygpOyB0cmFjayBncm91cCkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiaG9yaXpvbnRhbCgpID8gY2xhc3NJdGVtV2hlbk1vZGVIb3Jpem9udGFsKCkgOiAnJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktWzRweF0ge3sgZ3JvdXAuaXRlbS5jbGFzc0luY2x1ZGVXcmFwcGVyIHx8ICcnIH19XCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cImdyb3VwLml0ZW0ubGFiZWwgfHwgJyAnXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImdyb3VwLml0ZW0uY2hlY2tlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICBba2V5XT1cImdyb3VwLml0ZW1bZmllbGRLZXkoKV1cIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZ3JvdXAuZGlzYWJsZUJ5S2V5cyB8fCBkaXNhYmxlKCkgfHwgZ3JvdXAuaXRlbS5kaXNhYmxlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiIGdyb3VwLml0ZW0uZGlzYWJsZUxhYmVsIHx8IGZhbHNlXCJcbiAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJjbGFzc0xhYmVsSW5jbHVkZSgpIHx8IGdyb3VwLml0ZW0uY2xhc3NMYWJlbEluY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGUoKSB8fCBncm91cC5pdGVtLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICBbcG9wb3Zlcl09XCJncm91cC5pdGVtLnBvcG92ZXJcIlxuICAgICAgICAgICAgW2F2YXRhckNvbmZpZ109XCJncm91cC5pdGVtLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZ3JvdXAuaXRlbS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbdHlwZUxhYmVsUG9wb3Zlcl09XCJncm91cC5pdGVtLnR5cGVMYWJlbFBvcG92ZXIgfHwgJ3RleHQnXCJcbiAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3ZlckxhYmVsXT1cImdyb3VwLml0ZW0uaWdub3JlU2hvd1BvcG92ZXJMYWJlbCB8fCBmYWxzZVwiXG4gICAgICAgICAgICBbY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgIFttb2RlQm9yZGVyXT1cIm1vZGVCb3JkZXIoKVwiXG4gICAgICAgICAgICBbc2hvd0JvcmRlckVycm9yXT1cImVycm9yKCkgJiYgdmFsaWRSZXF1aXJlZCgpPy5oYXNCb3JkZXJFcnJvckNoZWNrYm94XCJcbiAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZSgkZXZlbnQsIGdyb3VwLml0ZW0pXCJcbiAgICAgICAgICAgIChvdXRFdmVudFBvcG92ZXIpPVwiaGFuZGxlckV2ZW50UG9wb3ZlcigkZXZlbnQsIGdyb3VwLml0ZW0pXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoZ3JvdXAuaXRlbS5jaGVja2VkKSB7XG4gICAgICAgICAgQGlmIChncm91cC5zdWJUZXh0KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jaGVja2JveC1ncm91cC1zdWItdGV4dCB7eyBncm91cC5jbGFzc0luY2x1ZGVTdWJUZXh0IHx8ICcnIH19XCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJncm91cC5zdWJUZXh0XCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwPy5zdWJUZW1wbGF0ZSB8fCBudWxsO2NvbnRleHQ6e2l0ZW06Z3JvdXAuaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmIChzaG93VmFsaWRhdGVCb3R0b20oKSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVZhbGlkYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlVmFsaWRhdGU+XG4gIEBpZiAoZXJyb3IoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICBbY2xhc3MubWItWzhweF1dPVwiIXNob3dWYWxpZGF0ZUJvdHRvbSgpXCJcbiAgICAgIFtjbGFzcy5tdC1bOHB4XV09XCJzaG93VmFsaWRhdGVCb3R0b20oKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLXRleHQtZXJyb3IgbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiKHZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKSB8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './checkbox-group.component';
2
+ export * from './interfaces';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY2hlY2tib3gvZ3JvdXAvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY2hlY2tib3gvZ3JvdXAvc3JjL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUNoZWNrYm94R3JvdXBGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIHZhbGlkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldEVycm9yOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2NoZWNrYm94L2dyb3VwL3NyYy9pbnRlcmZhY2VzL2dyb3VwLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBdmF0YXJDb25maWcgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWF2YXRhcic7XG5pbXBvcnQgeyBJQ2hlY2tib3hCdWxsZXQsIElDaGVja2JveEl0ZW1EZXNjcmlwdGlvbiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlJztcbmltcG9ydCB7IElQb3BvdmVyLCBUWVBFX1BPUE9WRVJfRVZFTlQsIFRZUEVfUE9QT1ZFUl9UWVBFIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoZWNrYm94R3JvdXBJdGVtIHtcbiAgaXRlbTogSUNoZWNrYm94SXRlbTtcbiAgc3ViVGV4dD86IHN0cmluZztcbiAgY2xhc3NJbmNsdWRlU3ViVGV4dD86IHN0cmluZztcbiAgc3ViVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj47XG4gIGRpc2FibGVCeUtleXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGVja2JveEdyb3VwVmFsaWRSZXF1aXJlZCB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGhhc0JvcmRlckVycm9yQ2hlY2tib3g/OiBib29sZWFuO1xuICBpbnRlcnBvbGF0ZVBhcmFtcz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hlY2tib3hJdGVtIHtcbiAga2V5Pzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTGFiZWxJbmNsdWRlPzogc3RyaW5nO1xuICBwb3BvdmVyPzogSVBvcG92ZXI7XG4gIGF2YXRhckNvbmZpZz86IElBdmF0YXJDb25maWc7XG4gIGxpbmtJbWFnZT86IHN0cmluZztcbiAgbGlua0ltYWdlRXJyb3I/OiBzdHJpbmc7XG4gIGNsYXNzSW1hZ2VJbmNsdWRlPzogc3RyaW5nO1xuICBidWxsZXQ/OiBJQ2hlY2tib3hCdWxsZXQ7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgY2xpY2tFeGFjdGx5PzogYm9vbGVhbjtcbiAgZGlzYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVMYWJlbD86IGJvb2xlYW47XG4gIGlnbm9yZVBvcG92ZXJMYWJlbD86IGJvb2xlYW47XG4gIG91dEV2ZW50UG9wb3Zlcj86IChldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSA9PiB2b2lkO1xuICBkZXNjcmlwdGlvbj86IElDaGVja2JveEl0ZW1EZXNjcmlwdGlvbjtcbiAgY2xhc3NJbmNsdWRlV3JhcHBlcj86IHN0cmluZztcbiAgdHlwZUxhYmVsUG9wb3Zlcj86IFRZUEVfUE9QT1ZFUl9UWVBFO1xuICBpZ25vcmVTaG93UG9wb3ZlckxhYmVsPzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufSJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './group.interface';
2
+ export * from './function-control.interface';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY2hlY2tib3gvZ3JvdXAvc3JjL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ncm91cC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWNoZWNrYm94LWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2NoZWNrYm94L2dyb3VwL3NyYy9saWJzLXVpLWNvbXBvbmVudHMtY2hlY2tib3gtZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,108 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, model, input, output, effect, Component, ChangeDetectionStrategy } from '@angular/core';
3
+ import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
4
+ import { ERROR_MESSAGE_EMPTY_VALID, isEmpty } from '@libs-ui/utils';
5
+ import { LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';
6
+ import { NgTemplateOutlet } from '@angular/common';
7
+ import * as i1 from '@ngx-translate/core';
8
+ import { TranslateModule } from '@ngx-translate/core';
9
+
10
+ class LibsUiComponentsCheckboxGroupComponent {
11
+ /* PROPERTY */
12
+ ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;
13
+ error = signal(false);
14
+ /* INPUT */
15
+ groups = model.required();
16
+ fieldKey = input('key', { transform: value => value || 'key' });
17
+ keysChecked = input([]);
18
+ keysDisable = input();
19
+ disable = input(false, { transform: value => value ?? false });
20
+ clickExactly = input(true, { transform: value => value ?? true });
21
+ horizontal = input(false, { transform: value => value ?? false });
22
+ labelConfig = input();
23
+ validRequired = input();
24
+ classInclude = input();
25
+ classLabelInclude = input();
26
+ showValidateBottom = input();
27
+ classItemWhenModeHorizontal = input('mr-[24px]');
28
+ classGroupWhenModeHorizontal = input('flex');
29
+ modeBorder = input();
30
+ /* OUTPUT */
31
+ outChange = output();
32
+ outFunctionsControl = output();
33
+ constructor() {
34
+ effect(() => {
35
+ if (isEmpty(this.keysChecked())) {
36
+ return;
37
+ }
38
+ this.groups.update(data => {
39
+ return data.map(group => {
40
+ group.item.checked = this.keysChecked().some(key => key === group.item[this.fieldKey()]);
41
+ return group;
42
+ });
43
+ });
44
+ }, { allowSignalWrites: true });
45
+ effect(() => {
46
+ if (isEmpty(this.keysDisable())) {
47
+ return;
48
+ }
49
+ this.groups.update(data => {
50
+ return data.map(group => {
51
+ group.disableByKeys = false;
52
+ if (group.item && this.keysDisable()?.includes(group.item[this.fieldKey()])) {
53
+ group.disableByKeys = true;
54
+ }
55
+ return group;
56
+ });
57
+ });
58
+ }, { allowSignalWrites: true });
59
+ }
60
+ /* FUNCTIONS */
61
+ ngOnInit() {
62
+ this.outFunctionsControl.emit({
63
+ valid: this.checkValid.bind(this),
64
+ resetError: this.resetError.bind(this)
65
+ });
66
+ }
67
+ /* FUNCTIONS*/
68
+ handlerChange(event, item) {
69
+ if (this.disable()) {
70
+ return;
71
+ }
72
+ item.checked = event.checked;
73
+ event.allCheckboxChecked = this.groups().filter(group => group.item.checked).map(group => ({ key: group.item[this.fieldKey()], item: group.item }));
74
+ this.outChange.emit(event);
75
+ this.checkValid();
76
+ }
77
+ async checkValid() {
78
+ this.error.set(false);
79
+ if (!this.validRequired()) {
80
+ return true;
81
+ }
82
+ this.error.set(!this.groups().some(group => group.item.checked));
83
+ return !this.error();
84
+ }
85
+ async resetError() {
86
+ this.error.set(false);
87
+ }
88
+ handlerEventPopover(event, item) {
89
+ item.outEventPopover?.(event);
90
+ }
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsCheckboxGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
92
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsCheckboxGroupComponent, isStandalone: true, selector: "libs_ui-components-checkbox-group", inputs: { groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: true, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, keysChecked: { classPropertyName: "keysChecked", publicName: "keysChecked", isSignal: true, isRequired: false, transformFunction: null }, keysDisable: { classPropertyName: "keysDisable", publicName: "keysDisable", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, clickExactly: { classPropertyName: "clickExactly", publicName: "clickExactly", isSignal: true, isRequired: false, transformFunction: null }, horizontal: { classPropertyName: "horizontal", publicName: "horizontal", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classLabelInclude: { classPropertyName: "classLabelInclude", publicName: "classLabelInclude", isSignal: true, isRequired: false, transformFunction: null }, showValidateBottom: { classPropertyName: "showValidateBottom", publicName: "showValidateBottom", isSignal: true, isRequired: false, transformFunction: null }, classItemWhenModeHorizontal: { classPropertyName: "classItemWhenModeHorizontal", publicName: "classItemWhenModeHorizontal", isSignal: true, isRequired: false, transformFunction: null }, classGroupWhenModeHorizontal: { classPropertyName: "classGroupWhenModeHorizontal", publicName: "classGroupWhenModeHorizontal", isSignal: true, isRequired: false, transformFunction: null }, modeBorder: { classPropertyName: "modeBorder", publicName: "modeBorder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { groups: "groupsChange", outChange: "outChange", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n <div class=\"libs-ui-checkbox-group {{ horizontal() ? classGroupWhenModeHorizontal() : '' }}\">\n @for (group of groups(); track group) {\n <div [class]=\"horizontal() ? classItemWhenModeHorizontal() : ''\">\n <div class=\"py-[4px] {{ group.item.classIncludeWrapper || '' }}\">\n <libs_ui-components-checkbox-single [label]=\"group.item.label || ' '\"\n [checked]=\"group.item.checked || false\"\n [key]=\"group.item[fieldKey()]\"\n [disable]=\"group.disableByKeys || disable() || group.item.disable || false\"\n [disableLabel]=\" group.item.disableLabel || false\"\n [classLabelInclude]=\"classLabelInclude() || group.item.classLabelInclude || ''\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [popover]=\"group.item.popover\"\n [avatarConfig]=\"group.item.avatarConfig\"\n [description]=\"group.item.description\"\n [typeLabelPopover]=\"group.item.typeLabelPopover || 'text'\"\n [ignoreShowPopoverLabel]=\"group.item.ignoreShowPopoverLabel || false\"\n [clickExactly]=\"clickExactly()\"\n [modeBorder]=\"modeBorder()\"\n [showBorderError]=\"error() && validRequired()?.hasBorderErrorCheckbox\"\n (outChange)=\"handlerChange($event, group.item)\"\n (outEventPopover)=\"handlerEventPopover($event, group.item)\" />\n </div>\n @if (group.item.checked) {\n @if (group.subText) {\n <div class=\"libs-ui-checkbox-group-sub-text {{ group.classIncludeSubText || '' }}\"\n [innerHtml]=\"group.subText\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"></ng-container>\n }\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n</div>\n\n<ng-template #templateValidate>\n @if (error()) {\n <div class=\"flex items-center\"\n [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID) | translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n</ng-template>\n", styles: [".libs-ui-checkbox-group .libs-ui-checkbox-group-sub-text{color:#9ca2ad;font-size:10px;line-height:14px;margin-left:24px;margin-bottom:4px;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outToggleEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsCheckboxGroupComponent, decorators: [{
95
+ type: Component,
96
+ args: [{ selector: 'libs_ui-components-checkbox-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
97
+ TranslateModule, NgTemplateOutlet,
98
+ LibsUiComponentsLabelComponent,
99
+ LibsUiComponentsCheckboxSingleComponent
100
+ ], template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n <div class=\"libs-ui-checkbox-group {{ horizontal() ? classGroupWhenModeHorizontal() : '' }}\">\n @for (group of groups(); track group) {\n <div [class]=\"horizontal() ? classItemWhenModeHorizontal() : ''\">\n <div class=\"py-[4px] {{ group.item.classIncludeWrapper || '' }}\">\n <libs_ui-components-checkbox-single [label]=\"group.item.label || ' '\"\n [checked]=\"group.item.checked || false\"\n [key]=\"group.item[fieldKey()]\"\n [disable]=\"group.disableByKeys || disable() || group.item.disable || false\"\n [disableLabel]=\" group.item.disableLabel || false\"\n [classLabelInclude]=\"classLabelInclude() || group.item.classLabelInclude || ''\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [popover]=\"group.item.popover\"\n [avatarConfig]=\"group.item.avatarConfig\"\n [description]=\"group.item.description\"\n [typeLabelPopover]=\"group.item.typeLabelPopover || 'text'\"\n [ignoreShowPopoverLabel]=\"group.item.ignoreShowPopoverLabel || false\"\n [clickExactly]=\"clickExactly()\"\n [modeBorder]=\"modeBorder()\"\n [showBorderError]=\"error() && validRequired()?.hasBorderErrorCheckbox\"\n (outChange)=\"handlerChange($event, group.item)\"\n (outEventPopover)=\"handlerEventPopover($event, group.item)\" />\n </div>\n @if (group.item.checked) {\n @if (group.subText) {\n <div class=\"libs-ui-checkbox-group-sub-text {{ group.classIncludeSubText || '' }}\"\n [innerHtml]=\"group.subText\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"></ng-container>\n }\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n</div>\n\n<ng-template #templateValidate>\n @if (error()) {\n <div class=\"flex items-center\"\n [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID) | translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n</ng-template>\n", styles: [".libs-ui-checkbox-group .libs-ui-checkbox-group-sub-text{color:#9ca2ad;font-size:10px;line-height:14px;margin-left:24px;margin-bottom:4px;width:100%}\n"] }]
101
+ }], ctorParameters: () => [] });
102
+
103
+ /**
104
+ * Generated bundle index. Do not edit.
105
+ */
106
+
107
+ export { LibsUiComponentsCheckboxGroupComponent };
108
+ //# sourceMappingURL=libs-ui-components-checkbox-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-components-checkbox-group.mjs","sources":["../../../../../../libs-ui/components/checkbox/group/src/checkbox-group.component.ts","../../../../../../libs-ui/components/checkbox/group/src/checkbox-group.component.html","../../../../../../libs-ui/components/checkbox/group/src/libs-ui-components-checkbox-group.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, input, model, OnInit, output, signal } from '@angular/core';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { ERROR_MESSAGE_EMPTY_VALID, isEmpty } from '@libs-ui/utils';\nimport { ICheckboxGroupItem, ICheckboxGroupValidRequired, ICheckboxItem } from './interfaces/group.interface';\nimport { ICheckboxEvent, LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';\nimport { ICheckboxGroupFunctionControlEvent } from './interfaces/function-control.interface';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-checkbox-group',\n templateUrl: './checkbox-group.component.html',\n styleUrl: './checkbox-group.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TranslateModule, NgTemplateOutlet,\n LibsUiComponentsLabelComponent,\n LibsUiComponentsCheckboxSingleComponent\n ]\n})\nexport class LibsUiComponentsCheckboxGroupComponent implements OnInit {\n\n /* PROPERTY */\n protected readonly ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;\n protected error = signal<boolean>(false)\n\n /* INPUT */\n readonly groups = model.required<Array<ICheckboxGroupItem>>();\n readonly fieldKey = input<string, string>('key', { transform: value => value || 'key' })\n readonly keysChecked = input<Array<string>>([]);\n readonly keysDisable = input<Array<string>>();\n readonly disable = input<boolean | undefined, boolean | undefined>(false, { transform: value => value ?? false });\n readonly clickExactly = input<boolean | undefined, boolean | undefined>(true, { transform: value => value ?? true });\n readonly horizontal = input<boolean | undefined, boolean | undefined>(false, { transform: value => value ?? false });\n readonly labelConfig = input<ILabel>();\n readonly validRequired = input<ICheckboxGroupValidRequired>();\n readonly classInclude = input<string>();\n readonly classLabelInclude = input<string>();\n readonly showValidateBottom = input<boolean>();\n readonly classItemWhenModeHorizontal = input<string>('mr-[24px]');\n readonly classGroupWhenModeHorizontal = input<string>('flex');\n readonly modeBorder = input<boolean>();\n\n /* OUTPUT */\n readonly outChange = output<ICheckboxEvent>();\n readonly outFunctionsControl = output<ICheckboxGroupFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n if (isEmpty(this.keysChecked())) {\n return;\n }\n this.groups.update(data => {\n return data.map(group => {\n group.item.checked = this.keysChecked().some(key => key === group.item[this.fieldKey()]);\n\n return group;\n });\n });\n }, { allowSignalWrites: true });\n\n effect(() => {\n if (isEmpty(this.keysDisable())) {\n return;\n }\n this.groups.update(data => {\n return data.map(group => {\n group.disableByKeys = false;\n if (group.item && this.keysDisable()?.includes(group.item[this.fieldKey()])) {\n group.disableByKeys = true;\n }\n return group;\n });\n });\n }, { allowSignalWrites: true });\n }\n\n /* FUNCTIONS */\n ngOnInit() {\n this.outFunctionsControl.emit({\n valid: this.checkValid.bind(this),\n resetError: this.resetError.bind(this)\n });\n }\n\n /* FUNCTIONS*/\n protected handlerChange(event: ICheckboxEvent, item: ICheckboxItem) {\n if (this.disable()) {\n return;\n }\n item.checked = event.checked;\n event.allCheckboxChecked = this.groups().filter(group => group.item.checked).map(group => ({ key: group.item[this.fieldKey()], item: group.item }));\n this.outChange.emit(event);\n this.checkValid();\n }\n\n private async checkValid() {\n this.error.set(false);\n if (!this.validRequired()) {\n return true;\n }\n this.error.set(!this.groups().some(group => group.item.checked));\n\n return !this.error();\n }\n\n private async resetError() {\n this.error.set(false);\n }\n\n protected handlerEventPopover(event: TYPE_POPOVER_EVENT, item: ICheckboxItem) {\n item.outEventPopover?.(event);\n }\n\n}\n","<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n <div class=\"libs-ui-checkbox-group {{ horizontal() ? classGroupWhenModeHorizontal() : '' }}\">\n @for (group of groups(); track group) {\n <div [class]=\"horizontal() ? classItemWhenModeHorizontal() : ''\">\n <div class=\"py-[4px] {{ group.item.classIncludeWrapper || '' }}\">\n <libs_ui-components-checkbox-single [label]=\"group.item.label || ' '\"\n [checked]=\"group.item.checked || false\"\n [key]=\"group.item[fieldKey()]\"\n [disable]=\"group.disableByKeys || disable() || group.item.disable || false\"\n [disableLabel]=\" group.item.disableLabel || false\"\n [classLabelInclude]=\"classLabelInclude() || group.item.classLabelInclude || ''\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [popover]=\"group.item.popover\"\n [avatarConfig]=\"group.item.avatarConfig\"\n [description]=\"group.item.description\"\n [typeLabelPopover]=\"group.item.typeLabelPopover || 'text'\"\n [ignoreShowPopoverLabel]=\"group.item.ignoreShowPopoverLabel || false\"\n [clickExactly]=\"clickExactly()\"\n [modeBorder]=\"modeBorder()\"\n [showBorderError]=\"error() && validRequired()?.hasBorderErrorCheckbox\"\n (outChange)=\"handlerChange($event, group.item)\"\n (outEventPopover)=\"handlerEventPopover($event, group.item)\" />\n </div>\n @if (group.item.checked) {\n @if (group.subText) {\n <div class=\"libs-ui-checkbox-group-sub-text {{ group.classIncludeSubText || '' }}\"\n [innerHtml]=\"group.subText\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"></ng-container>\n }\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\"></ng-container>\n }\n</div>\n\n<ng-template #templateValidate>\n @if (error()) {\n <div class=\"flex items-center\"\n [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID) | translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './checkbox-group.component';
2
+ export * from './interfaces';
@@ -0,0 +1,4 @@
1
+ export interface ICheckboxGroupFunctionControlEvent {
2
+ valid: () => Promise<boolean>;
3
+ resetError: () => Promise<void>;
4
+ }
@@ -0,0 +1,40 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { IAvatarConfig } from '@libs-ui/components-avatar';
3
+ import { ICheckboxBullet, ICheckboxItemDescription } from '@libs-ui/components-checkbox-single';
4
+ import { IPopover, TYPE_POPOVER_EVENT, TYPE_POPOVER_TYPE } from '@libs-ui/components-popover';
5
+ import { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';
6
+ export interface ICheckboxGroupItem {
7
+ item: ICheckboxItem;
8
+ subText?: string;
9
+ classIncludeSubText?: string;
10
+ subTemplate?: TemplateRef<TYPE_TEMPLATE_REF>;
11
+ disableByKeys?: boolean;
12
+ }
13
+ export interface ICheckboxGroupValidRequired {
14
+ message?: string;
15
+ hasBorderErrorCheckbox?: boolean;
16
+ interpolateParams?: any;
17
+ }
18
+ export interface ICheckboxItem {
19
+ key?: string;
20
+ checked?: boolean;
21
+ label?: string;
22
+ classLabelInclude?: string;
23
+ popover?: IPopover;
24
+ avatarConfig?: IAvatarConfig;
25
+ linkImage?: string;
26
+ linkImageError?: string;
27
+ classImageInclude?: string;
28
+ bullet?: ICheckboxBullet;
29
+ classInclude?: string;
30
+ clickExactly?: boolean;
31
+ disable?: boolean;
32
+ disableLabel?: boolean;
33
+ ignorePopoverLabel?: boolean;
34
+ outEventPopover?: (event: TYPE_POPOVER_EVENT) => void;
35
+ description?: ICheckboxItemDescription;
36
+ classIncludeWrapper?: string;
37
+ typeLabelPopover?: TYPE_POPOVER_TYPE;
38
+ ignoreShowPopoverLabel?: boolean;
39
+ [key: string]: any;
40
+ }
@@ -0,0 +1,2 @@
1
+ export * from './group.interface';
2
+ export * from './function-control.interface';
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@libs-ui/components-checkbox-group",
3
+ "version": "0.2.5",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0"
7
+ },
8
+ "sideEffects": false,
9
+ "module": "fesm2022/libs-ui-components-checkbox-group.mjs",
10
+ "typings": "index.d.ts",
11
+ "exports": {
12
+ "./package.json": {
13
+ "default": "./package.json"
14
+ },
15
+ ".": {
16
+ "types": "./index.d.ts",
17
+ "esm2022": "./esm2022/libs-ui-components-checkbox-group.mjs",
18
+ "esm": "./esm2022/libs-ui-components-checkbox-group.mjs",
19
+ "default": "./fesm2022/libs-ui-components-checkbox-group.mjs"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ }
25
+ }