@libs-ui/components-radio-group 0.2.6

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
+ # radio-group
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,110 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { NgTemplateOutlet } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, effect, input, model, output, signal } from '@angular/core';
4
+ import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
5
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
6
+ import { ERROR_MESSAGE_EMPTY_VALID, isEmpty, isNil } from '@libs-ui/utils';
7
+ import { TranslateModule } from '@ngx-translate/core';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@ngx-translate/core";
10
+ export class LibsUiComponentsRadioGroupComponent {
11
+ /* PROPERTY */
12
+ ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;
13
+ isErrorRequired = signal(false);
14
+ /* INPUT */
15
+ fieldKey = input('key', { transform: value => value || 'key' });
16
+ keyActive = input();
17
+ keysDisable = input();
18
+ groups = model([]);
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
+ ignoreClassMarginLastItem = input(false);
25
+ typeRadio = input('normal', { transform: value => value ?? 'normal' });
26
+ classInclude = input('', { transform: value => value ?? '' });
27
+ classLabelInclude = input('', { transform: value => value ?? '' });
28
+ classItemInclude = input('py-[4px]', { transform: value => value ?? 'py-[4px]' });
29
+ alwaysShowSubText = input();
30
+ /* OUTPUT */
31
+ outClickButton = output();
32
+ outChange = output();
33
+ outFunctionsControl = output();
34
+ constructor() {
35
+ effect(() => {
36
+ if (isNil(this.keyActive())) {
37
+ return;
38
+ }
39
+ this.groups.update(data => {
40
+ return data.map((group) => {
41
+ group.item.active = false;
42
+ if (group.item && group.item[this.fieldKey()] === this.keyActive()) {
43
+ group.item.active = true;
44
+ }
45
+ return group;
46
+ });
47
+ });
48
+ }, { allowSignalWrites: true });
49
+ effect(() => {
50
+ if (isEmpty(this.keysDisable())) {
51
+ return;
52
+ }
53
+ this.groups.update(data => {
54
+ return data.map((group) => {
55
+ group.disableByKeys = false;
56
+ if (group.item && this.keysDisable()?.includes(group.item[this.fieldKey()])) {
57
+ group.disableByKeys = true;
58
+ }
59
+ return group;
60
+ });
61
+ });
62
+ }, { allowSignalWrites: true });
63
+ }
64
+ ngOnInit() {
65
+ this.outFunctionsControl.emit({ valid: this.checkValid.bind(this) });
66
+ }
67
+ /* FUNCTIONS*/
68
+ async handlerClickButton(event) {
69
+ this.outClickButton.emit(event);
70
+ }
71
+ async handlerChange(dataEvent) {
72
+ if (this.disable()) {
73
+ return;
74
+ }
75
+ const event = dataEvent;
76
+ this.groups.update(data => {
77
+ return data.map((group) => {
78
+ const item = group.item;
79
+ item.active = false;
80
+ if (item[this.fieldKey()] === dataEvent.key) {
81
+ group.disableByKeys = true;
82
+ item.active = dataEvent.active;
83
+ event.item = item;
84
+ }
85
+ return group;
86
+ });
87
+ });
88
+ this.outChange.emit(event);
89
+ this.checkValid();
90
+ }
91
+ async checkValid() {
92
+ this.isErrorRequired.set(false);
93
+ if (!this.validRequired) {
94
+ return true;
95
+ }
96
+ this.isErrorRequired.set(!this.groups()?.some((group) => group.item?.active));
97
+ return !this.isErrorRequired();
98
+ }
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsRadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
100
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsRadioGroupComponent, isStandalone: true, selector: "libs_ui-components-radio-group", inputs: { fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, keyActive: { classPropertyName: "keyActive", publicName: "keyActive", isSignal: true, isRequired: false, transformFunction: null }, keysDisable: { classPropertyName: "keysDisable", publicName: "keysDisable", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", 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 }, ignoreClassMarginLastItem: { classPropertyName: "ignoreClassMarginLastItem", publicName: "ignoreClassMarginLastItem", isSignal: true, isRequired: false, transformFunction: null }, typeRadio: { classPropertyName: "typeRadio", publicName: "typeRadio", 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 }, classItemInclude: { classPropertyName: "classItemInclude", publicName: "classItemInclude", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowSubText: { classPropertyName: "alwaysShowSubText", publicName: "alwaysShowSubText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { groups: "groupsChange", outClickButton: "outClickButton", 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 [descriptionClass]=\"labelConfig.descriptionClass\"\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 (outClickButton)=\"handlerClickButton($event)\" />\n }\n @if (isErrorRequired()) {\n <div class=\"flex items-center mb-[4px]\">\n <i [class]=\"'mo-svg-font-close libs-ui-text-error text-[6px] pr-[4px]'\"></i>\n <span class=\"libs-ui-font-h5r libs-ui-text-error\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n <div class=\"libs-ui-radio-group\"\n [class.flex]=\"horizontal()\">\n @for (group of groups(); track group;let isLast = $last) {\n <div [class]=\"horizontal() ? ((isLast && ignoreClassMarginLastItem()) ? '' : 'mr-[24px]') : ''\">\n <div [class]=\"classItemInclude()\">\n <libs_ui-components-radio-single [labelInterpolateParams]='group.item.labelInterpolateParams'\n [label]=\"group.item.label || ' '\"\n [active]=\"(group.item[fieldKey()] === keyActive()) || group.item.active || 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 || 'libs-ui-font-h5r'\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [zIndexLabel]=\"group.item.zIndexLabel\"\n [typeRadio]=\"typeRadio()\"\n [avatarConfig]=\"group.item.avatarConfig\"\n (outChange)=\"handlerChange($event)\"\n [popover]=\"group.item.popover\"\n [clickExactly]=\"clickExactly()\" />\n </div>\n @if (group.item.active || alwaysShowSubText()) {\n @if (group.subText) {\n <div [class]=\"'libs-ui-radio-group-sub-text ' + (group.classIncludeSubText ? group.classIncludeSubText:'')\"\n [innerHtml]=\"group.subText | translate\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"/>\n }\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-radio-group .libs-ui-radio-group-sub-text{color:#9ca2ad;font-size:10px;font-family:var(--libs-ui-font-family-name, \"Arial\");font-weight:400;line-height:normal;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: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabe", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsRadioGroupComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'libs_ui-components-radio-group', standalone: true, imports: [
105
+ TranslateModule, NgTemplateOutlet,
106
+ LibsUiComponentsLabelComponent,
107
+ LibsUiComponentsRadioSingleComponent
108
+ ], changeDetection: ChangeDetectionStrategy.OnPush, 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 [descriptionClass]=\"labelConfig.descriptionClass\"\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 (outClickButton)=\"handlerClickButton($event)\" />\n }\n @if (isErrorRequired()) {\n <div class=\"flex items-center mb-[4px]\">\n <i [class]=\"'mo-svg-font-close libs-ui-text-error text-[6px] pr-[4px]'\"></i>\n <span class=\"libs-ui-font-h5r libs-ui-text-error\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n <div class=\"libs-ui-radio-group\"\n [class.flex]=\"horizontal()\">\n @for (group of groups(); track group;let isLast = $last) {\n <div [class]=\"horizontal() ? ((isLast && ignoreClassMarginLastItem()) ? '' : 'mr-[24px]') : ''\">\n <div [class]=\"classItemInclude()\">\n <libs_ui-components-radio-single [labelInterpolateParams]='group.item.labelInterpolateParams'\n [label]=\"group.item.label || ' '\"\n [active]=\"(group.item[fieldKey()] === keyActive()) || group.item.active || 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 || 'libs-ui-font-h5r'\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [zIndexLabel]=\"group.item.zIndexLabel\"\n [typeRadio]=\"typeRadio()\"\n [avatarConfig]=\"group.item.avatarConfig\"\n (outChange)=\"handlerChange($event)\"\n [popover]=\"group.item.popover\"\n [clickExactly]=\"clickExactly()\" />\n </div>\n @if (group.item.active || alwaysShowSubText()) {\n @if (group.subText) {\n <div [class]=\"'libs-ui-radio-group-sub-text ' + (group.classIncludeSubText ? group.classIncludeSubText:'')\"\n [innerHtml]=\"group.subText | translate\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"/>\n }\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-radio-group .libs-ui-radio-group-sub-text{color:#9ca2ad;font-size:10px;font-family:var(--libs-ui-font-family-name, \"Arial\");font-weight:400;line-height:normal;margin-left:24px;margin-bottom:4px;width:100%}\n"] }]
109
+ }], ctorParameters: () => [] });
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL2dyb3VwL3NyYy9ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcmFkaW8vZ3JvdXAvc3JjL2dyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFlLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWdCdEQsTUFBTSxPQUFPLG1DQUFtQztJQUM5QyxjQUFjO0lBQ0sseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQTtJQUVsRCxXQUFXO0lBQ0YsUUFBUSxHQUFHLEtBQUssQ0FBaUIsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEYsU0FBUyxHQUFHLEtBQUssRUFBbUIsQ0FBQztJQUNyQyxXQUFXLEdBQUcsS0FBSyxFQUFpQixDQUFDO0lBQ3JDLE1BQU0sR0FBRyxL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c2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgSVJhZGlvRXZlbnQsIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcmFkaW8tc2luZ2xlJztcbmltcG9ydCB7IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIGlzRW1wdHksIGlzTmlsIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJUmFkaW9Hcm91cEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJUmFkaW9Hcm91cEl0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUmFkaW9TaW5nbGVDb21wb25lbnRcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1JhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCA9IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gIHByb3RlY3RlZCBpc0Vycm9yUmVxdWlyZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpXG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dDxzdHJpbmcsIHN0cmluZz4oJ2tleScsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCAna2V5JyB9KTtcbiAgcmVhZG9ubHkga2V5QWN0aXZlID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuICByZWFkb25seSBrZXlzRGlzYWJsZSA9IGlucHV0PEFycmF5PHN0cmluZz4+KCk7XG4gIHJlYWRvbmx5IGdyb3VwcyA9IG1vZGVsPEFycmF5PElSYWRpb0dyb3VwSXRlbT4+KFtdKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGNsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBob3Jpem9udGFsID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZCwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWwgfCB1bmRlZmluZWQ+KClcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGludGVycG9sYXRlUGFyYW1zPzogeyBhbnk6IGFueSB9O1xuICB9IHwgdW5kZWZpbmVkPigpXG4gIHJlYWRvbmx5IGlnbm9yZUNsYXNzTWFyZ2luTGFzdEl0ZW0gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHR5cGVSYWRpbyA9IGlucHV0PCdub3JtYWwnIHwgJ21lZGl1bScgfCB1bmRlZmluZWQsICdub3JtYWwnIHwgJ21lZGl1bScgfCB1bmRlZmluZWQ+KCdub3JtYWwnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ25vcm1hbCcgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBjbGFzc0xhYmVsSW5jbHVkZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBjbGFzc0l0ZW1JbmNsdWRlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdweS1bNHB4XScsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAncHktWzRweF0nIH0pO1xuICByZWFkb25seSBhbHdheXNTaG93U3ViVGV4dCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZSA9IG91dHB1dDxJUmFkaW9FdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJUmFkaW9Hcm91cEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaXNOaWwodGhpcy5rZXlBY3RpdmUoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5ncm91cHMudXBkYXRlKGRhdGEgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YS5tYXA8SVJhZGlvR3JvdXBJdGVtPigoZ3JvdXApID0+IHtcbiAgICAgICAgICBncm91cC5pdGVtLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIGlmIChncm91cC5pdGVtICYmIGdyb3VwLml0ZW1bdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlBY3RpdmUoKSkge1xuICAgICAgICAgICAgZ3JvdXAuaXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eSh0aGlzLmtleXNEaXNhYmxlKCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ3JvdXBzLnVwZGF0ZShkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwPElSYWRpb0dyb3VwSXRlbT4oKGdyb3VwKSA9PiB7XG4gICAgICAgICAgZ3JvdXAuZGlzYWJsZUJ5S2V5cyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChncm91cC5pdGVtICYmIHRoaXMua2V5c0Rpc2FibGUoKT8uaW5jbHVkZXMoZ3JvdXAuaXRlbVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgICAgZ3JvdXAuZGlzYWJsZUJ5S2V5cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyB2YWxpZDogdGhpcy5jaGVja1ZhbGlkLmJpbmQodGhpcykgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsaWNrQnV0dG9uKGV2ZW50OiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2hhbmdlKGRhdGFFdmVudDogeyBhY3RpdmU6IGJvb2xlYW47IGtleTogYW55IH0pIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnQ6IGFueSA9IGRhdGFFdmVudDtcblxuICAgIHRoaXMuZ3JvdXBzLnVwZGF0ZShkYXRhID0+IHtcbiAgICAgIHJldHVybiBkYXRhLm1hcDxJUmFkaW9Hcm91cEl0ZW0+KChncm91cCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gZ3JvdXAuaXRlbTtcblxuICAgICAgICBpdGVtLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhRXZlbnQua2V5KSB7XG4gICAgICAgICAgZ3JvdXAuZGlzYWJsZUJ5S2V5cyA9IHRydWU7XG4gICAgICAgICAgaXRlbS5hY3RpdmUgPSBkYXRhRXZlbnQuYWN0aXZlO1xuICAgICAgICAgIGV2ZW50Lml0ZW0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1ZhbGlkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuaXNFcnJvclJlcXVpcmVkLnNldChmYWxzZSk7XG4gICAgaWYgKCF0aGlzLnZhbGlkUmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaXNFcnJvclJlcXVpcmVkLnNldCghdGhpcy5ncm91cHMoKT8uc29tZSgoZ3JvdXA6IElSYWRpb0dyb3VwSXRlbSkgPT4gZ3JvdXAuaXRlbT8uYWN0aXZlKSk7XG5cbiAgICByZXR1cm4gIXRoaXMuaXNFcnJvclJlcXVpcmVkKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7YXMgbGFiZWxDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIlxuICAgICAgKG91dENsaWNrQnV0dG9uKT1cImhhbmRsZXJDbGlja0J1dHRvbigkZXZlbnQpXCIgLz5cbiAgfVxuICBAaWYgKGlzRXJyb3JSZXF1aXJlZCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1iLVs0cHhdXCI+XG4gICAgICA8aSBbY2xhc3NdPVwiJ21vLXN2Zy1mb250LWNsb3NlIGxpYnMtdWktdGV4dC1lcnJvciB0ZXh0LVs2cHhdIHByLVs0cHhdJ1wiPjwvaT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg1ciBsaWJzLXVpLXRleHQtZXJyb3JcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIih2YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCl8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktcmFkaW8tZ3JvdXBcIlxuICAgIFtjbGFzcy5mbGV4XT1cImhvcml6b250YWwoKVwiPlxuICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwcygpOyB0cmFjayBncm91cDtsZXQgaXNMYXN0ID0gJGxhc3QpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cImhvcml6b250YWwoKSA/ICgoaXNMYXN0ICYmIGlnbm9yZUNsYXNzTWFyZ2luTGFzdEl0ZW0oKSkgPyAnJyA6ICdtci1bMjRweF0nKSA6ICcnXCI+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cImNsYXNzSXRlbUluY2x1ZGUoKVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlIFtsYWJlbEludGVycG9sYXRlUGFyYW1zXT0nZ3JvdXAuaXRlbS5sYWJlbEludGVycG9sYXRlUGFyYW1zJ1xuICAgICAgICAgICAgW2xhYmVsXT1cImdyb3VwLml0ZW0ubGFiZWwgfHwgJyAnXCJcbiAgICAgICAgICAgIFthY3RpdmVdPVwiKGdyb3VwLml0ZW1bZmllbGRLZXkoKV0gPT09IGtleUFjdGl2ZSgpKSB8fCBncm91cC5pdGVtLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICBba2V5XT1cImdyb3VwLml0ZW1bZmllbGRLZXkoKV1cIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZ3JvdXBbJ2Rpc2FibGVCeUtleXMnXSB8fCBkaXNhYmxlKCkgfHwgZ3JvdXAuaXRlbS5kaXNhYmxlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiIGdyb3VwLml0ZW0uZGlzYWJsZUxhYmVsIHx8IGZhbHNlXCJcbiAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJjbGFzc0xhYmVsSW5jbHVkZSgpIHx8IGdyb3VwLml0ZW0uY2xhc3NMYWJlbEluY2x1ZGUgfHwgJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NJbmNsdWRlKCkgfHwgZ3JvdXAuaXRlbS5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgW3pJbmRleExhYmVsXT1cImdyb3VwLml0ZW0uekluZGV4TGFiZWxcIlxuICAgICAgICAgICAgW3R5cGVSYWRpb109XCJ0eXBlUmFkaW8oKVwiXG4gICAgICAgICAgICBbYXZhdGFyQ29uZmlnXT1cImdyb3VwLml0ZW0uYXZhdGFyQ29uZmlnXCJcbiAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImdyb3VwLml0ZW0ucG9wb3ZlclwiXG4gICAgICAgICAgICBbY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseSgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoZ3JvdXAuaXRlbS5hY3RpdmUgfHwgYWx3YXlzU2hvd1N1YlRleHQoKSkge1xuICAgICAgICAgIEBpZiAoZ3JvdXAuc3ViVGV4dCkge1xuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktcmFkaW8tZ3JvdXAtc3ViLXRleHQgJyArIChncm91cC5jbGFzc0luY2x1ZGVTdWJUZXh0ID8gZ3JvdXAuY2xhc3NJbmNsdWRlU3ViVGV4dDonJylcIlxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImdyb3VwLnN1YlRleHQgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXA/LnN1YlRlbXBsYXRlIHx8IG51bGw7Y29udGV4dDp7aXRlbTpncm91cC5pdGVtfVwiLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './group.component';
2
+ export * from './interfaces';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcmFkaW8vZ3JvdXAvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2dyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcmFkaW8vZ3JvdXAvc3JjL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVJhZGlvR3JvdXBGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIHZhbGlkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL2dyb3VwL3NyYy9pbnRlcmZhY2VzL2dyb3VwLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSYWRpb0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXJhZGlvLXNpbmdsZSc7XG5pbXBvcnQgeyBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSYWRpb0dyb3VwSXRlbSB7XG4gIGl0ZW06IElSYWRpb0l0ZW07XG4gIHN1YlRleHQ/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZVN1YlRleHQ/OiBzdHJpbmc7XG4gIHN1YlRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+O1xuICBkaXNhYmxlQnlLZXlzPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './group.interface';
2
+ export * from './function-control.interface';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcmFkaW8vZ3JvdXAvc3JjL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ncm91cC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLXJhZGlvLWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3JhZGlvL2dyb3VwL3NyYy9saWJzLXVpLWNvbXBvbmVudHMtcmFkaW8tZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,117 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { signal, input, model, output, effect, Component, ChangeDetectionStrategy } from '@angular/core';
4
+ import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
5
+ import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
6
+ import { ERROR_MESSAGE_EMPTY_VALID, isNil, isEmpty } from '@libs-ui/utils';
7
+ import * as i1 from '@ngx-translate/core';
8
+ import { TranslateModule } from '@ngx-translate/core';
9
+
10
+ /* eslint-disable @typescript-eslint/no-explicit-any */
11
+ class LibsUiComponentsRadioGroupComponent {
12
+ /* PROPERTY */
13
+ ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;
14
+ isErrorRequired = signal(false);
15
+ /* INPUT */
16
+ fieldKey = input('key', { transform: value => value || 'key' });
17
+ keyActive = input();
18
+ keysDisable = input();
19
+ groups = model([]);
20
+ disable = input(false, { transform: value => value ?? false });
21
+ clickExactly = input(true, { transform: value => value ?? true });
22
+ horizontal = input(false, { transform: value => value ?? false });
23
+ labelConfig = input();
24
+ validRequired = input();
25
+ ignoreClassMarginLastItem = input(false);
26
+ typeRadio = input('normal', { transform: value => value ?? 'normal' });
27
+ classInclude = input('', { transform: value => value ?? '' });
28
+ classLabelInclude = input('', { transform: value => value ?? '' });
29
+ classItemInclude = input('py-[4px]', { transform: value => value ?? 'py-[4px]' });
30
+ alwaysShowSubText = input();
31
+ /* OUTPUT */
32
+ outClickButton = output();
33
+ outChange = output();
34
+ outFunctionsControl = output();
35
+ constructor() {
36
+ effect(() => {
37
+ if (isNil(this.keyActive())) {
38
+ return;
39
+ }
40
+ this.groups.update(data => {
41
+ return data.map((group) => {
42
+ group.item.active = false;
43
+ if (group.item && group.item[this.fieldKey()] === this.keyActive()) {
44
+ group.item.active = true;
45
+ }
46
+ return group;
47
+ });
48
+ });
49
+ }, { allowSignalWrites: true });
50
+ effect(() => {
51
+ if (isEmpty(this.keysDisable())) {
52
+ return;
53
+ }
54
+ this.groups.update(data => {
55
+ return data.map((group) => {
56
+ group.disableByKeys = false;
57
+ if (group.item && this.keysDisable()?.includes(group.item[this.fieldKey()])) {
58
+ group.disableByKeys = true;
59
+ }
60
+ return group;
61
+ });
62
+ });
63
+ }, { allowSignalWrites: true });
64
+ }
65
+ ngOnInit() {
66
+ this.outFunctionsControl.emit({ valid: this.checkValid.bind(this) });
67
+ }
68
+ /* FUNCTIONS*/
69
+ async handlerClickButton(event) {
70
+ this.outClickButton.emit(event);
71
+ }
72
+ async handlerChange(dataEvent) {
73
+ if (this.disable()) {
74
+ return;
75
+ }
76
+ const event = dataEvent;
77
+ this.groups.update(data => {
78
+ return data.map((group) => {
79
+ const item = group.item;
80
+ item.active = false;
81
+ if (item[this.fieldKey()] === dataEvent.key) {
82
+ group.disableByKeys = true;
83
+ item.active = dataEvent.active;
84
+ event.item = item;
85
+ }
86
+ return group;
87
+ });
88
+ });
89
+ this.outChange.emit(event);
90
+ this.checkValid();
91
+ }
92
+ async checkValid() {
93
+ this.isErrorRequired.set(false);
94
+ if (!this.validRequired) {
95
+ return true;
96
+ }
97
+ this.isErrorRequired.set(!this.groups()?.some((group) => group.item?.active));
98
+ return !this.isErrorRequired();
99
+ }
100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsRadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsRadioGroupComponent, isStandalone: true, selector: "libs_ui-components-radio-group", inputs: { fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, keyActive: { classPropertyName: "keyActive", publicName: "keyActive", isSignal: true, isRequired: false, transformFunction: null }, keysDisable: { classPropertyName: "keysDisable", publicName: "keysDisable", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", 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 }, ignoreClassMarginLastItem: { classPropertyName: "ignoreClassMarginLastItem", publicName: "ignoreClassMarginLastItem", isSignal: true, isRequired: false, transformFunction: null }, typeRadio: { classPropertyName: "typeRadio", publicName: "typeRadio", 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 }, classItemInclude: { classPropertyName: "classItemInclude", publicName: "classItemInclude", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowSubText: { classPropertyName: "alwaysShowSubText", publicName: "alwaysShowSubText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { groups: "groupsChange", outClickButton: "outClickButton", 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 [descriptionClass]=\"labelConfig.descriptionClass\"\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 (outClickButton)=\"handlerClickButton($event)\" />\n }\n @if (isErrorRequired()) {\n <div class=\"flex items-center mb-[4px]\">\n <i [class]=\"'mo-svg-font-close libs-ui-text-error text-[6px] pr-[4px]'\"></i>\n <span class=\"libs-ui-font-h5r libs-ui-text-error\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n <div class=\"libs-ui-radio-group\"\n [class.flex]=\"horizontal()\">\n @for (group of groups(); track group;let isLast = $last) {\n <div [class]=\"horizontal() ? ((isLast && ignoreClassMarginLastItem()) ? '' : 'mr-[24px]') : ''\">\n <div [class]=\"classItemInclude()\">\n <libs_ui-components-radio-single [labelInterpolateParams]='group.item.labelInterpolateParams'\n [label]=\"group.item.label || ' '\"\n [active]=\"(group.item[fieldKey()] === keyActive()) || group.item.active || 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 || 'libs-ui-font-h5r'\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [zIndexLabel]=\"group.item.zIndexLabel\"\n [typeRadio]=\"typeRadio()\"\n [avatarConfig]=\"group.item.avatarConfig\"\n (outChange)=\"handlerChange($event)\"\n [popover]=\"group.item.popover\"\n [clickExactly]=\"clickExactly()\" />\n </div>\n @if (group.item.active || alwaysShowSubText()) {\n @if (group.subText) {\n <div [class]=\"'libs-ui-radio-group-sub-text ' + (group.classIncludeSubText ? group.classIncludeSubText:'')\"\n [innerHtml]=\"group.subText | translate\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"/>\n }\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-radio-group .libs-ui-radio-group-sub-text{color:#9ca2ad;font-size:10px;font-family:var(--libs-ui-font-family-name, \"Arial\");font-weight:400;line-height:normal;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: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabe", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsRadioGroupComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: 'libs_ui-components-radio-group', standalone: true, imports: [
106
+ TranslateModule, NgTemplateOutlet,
107
+ LibsUiComponentsLabelComponent,
108
+ LibsUiComponentsRadioSingleComponent
109
+ ], changeDetection: ChangeDetectionStrategy.OnPush, 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 [descriptionClass]=\"labelConfig.descriptionClass\"\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 (outClickButton)=\"handlerClickButton($event)\" />\n }\n @if (isErrorRequired()) {\n <div class=\"flex items-center mb-[4px]\">\n <i [class]=\"'mo-svg-font-close libs-ui-text-error text-[6px] pr-[4px]'\"></i>\n <span class=\"libs-ui-font-h5r libs-ui-text-error\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n <div class=\"libs-ui-radio-group\"\n [class.flex]=\"horizontal()\">\n @for (group of groups(); track group;let isLast = $last) {\n <div [class]=\"horizontal() ? ((isLast && ignoreClassMarginLastItem()) ? '' : 'mr-[24px]') : ''\">\n <div [class]=\"classItemInclude()\">\n <libs_ui-components-radio-single [labelInterpolateParams]='group.item.labelInterpolateParams'\n [label]=\"group.item.label || ' '\"\n [active]=\"(group.item[fieldKey()] === keyActive()) || group.item.active || 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 || 'libs-ui-font-h5r'\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [zIndexLabel]=\"group.item.zIndexLabel\"\n [typeRadio]=\"typeRadio()\"\n [avatarConfig]=\"group.item.avatarConfig\"\n (outChange)=\"handlerChange($event)\"\n [popover]=\"group.item.popover\"\n [clickExactly]=\"clickExactly()\" />\n </div>\n @if (group.item.active || alwaysShowSubText()) {\n @if (group.subText) {\n <div [class]=\"'libs-ui-radio-group-sub-text ' + (group.classIncludeSubText ? group.classIncludeSubText:'')\"\n [innerHtml]=\"group.subText | translate\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"/>\n }\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-radio-group .libs-ui-radio-group-sub-text{color:#9ca2ad;font-size:10px;font-family:var(--libs-ui-font-family-name, \"Arial\");font-weight:400;line-height:normal;margin-left:24px;margin-bottom:4px;width:100%}\n"] }]
110
+ }], ctorParameters: () => [] });
111
+
112
+ /**
113
+ * Generated bundle index. Do not edit.
114
+ */
115
+
116
+ export { LibsUiComponentsRadioGroupComponent };
117
+ //# sourceMappingURL=libs-ui-components-radio-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-components-radio-group.mjs","sources":["../../../../../../libs-ui/components/radio/group/src/group.component.ts","../../../../../../libs-ui/components/radio/group/src/group.component.html","../../../../../../libs-ui/components/radio/group/src/libs-ui-components-radio-group.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit, effect, input, model, output, signal } from '@angular/core';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { IRadioEvent, LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';\nimport { ERROR_MESSAGE_EMPTY_VALID, isEmpty, isNil } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { IRadioGroupFunctionControlEvent, IRadioGroupItem } from './interfaces';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-radio-group',\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n standalone: true,\n imports: [\n TranslateModule, NgTemplateOutlet,\n LibsUiComponentsLabelComponent,\n LibsUiComponentsRadioSingleComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsRadioGroupComponent implements OnInit {\n /* PROPERTY */\n protected readonly ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;\n protected isErrorRequired = signal<boolean>(false)\n\n /* INPUT */\n readonly fieldKey = input<string, string>('key', { transform: value => value || 'key' });\n readonly keyActive = input<string | number>();\n readonly keysDisable = input<Array<string>>();\n readonly groups = model<Array<IRadioGroupItem>>([]);\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 | undefined>()\n readonly validRequired = input<{\n message?: string;\n interpolateParams?: { any: any };\n } | undefined>()\n readonly ignoreClassMarginLastItem = input<boolean | undefined>(false);\n readonly typeRadio = input<'normal' | 'medium' | undefined, 'normal' | 'medium' | undefined>('normal', { transform: value => value ?? 'normal' });\n readonly classInclude = input<string | undefined, string | undefined>('', { transform: value => value ?? '' });\n readonly classLabelInclude = input<string | undefined, string | undefined>('', { transform: value => value ?? '' });\n readonly classItemInclude = input<string | undefined, string | undefined>('py-[4px]', { transform: value => value ?? 'py-[4px]' });\n readonly alwaysShowSubText = input<boolean | undefined>();\n\n /* OUTPUT */\n readonly outClickButton = output<IButton>();\n readonly outChange = output<IRadioEvent>();\n readonly outFunctionsControl = output<IRadioGroupFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n if (isNil(this.keyActive())) {\n return;\n }\n this.groups.update(data => {\n return data.map<IRadioGroupItem>((group) => {\n group.item.active = false;\n if (group.item && group.item[this.fieldKey()] === this.keyActive()) {\n group.item.active = true;\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<IRadioGroupItem>((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 ngOnInit() {\n this.outFunctionsControl.emit({ valid: this.checkValid.bind(this) });\n }\n\n /* FUNCTIONS*/\n protected async handlerClickButton(event: IButton) {\n this.outClickButton.emit(event);\n }\n\n protected async handlerChange(dataEvent: { active: boolean; key: any }) {\n if (this.disable()) {\n return;\n }\n const event: any = dataEvent;\n\n this.groups.update(data => {\n return data.map<IRadioGroupItem>((group) => {\n const item = group.item;\n\n item.active = false;\n if (item[this.fieldKey()] === dataEvent.key) {\n group.disableByKeys = true;\n item.active = dataEvent.active;\n event.item = item;\n }\n return group;\n });\n });\n this.outChange.emit(event);\n this.checkValid();\n }\n\n private async checkValid(): Promise<boolean> {\n this.isErrorRequired.set(false);\n if (!this.validRequired) {\n return true;\n }\n\n this.isErrorRequired.set(!this.groups()?.some((group: IRadioGroupItem) => group.item?.active));\n\n return !this.isErrorRequired();\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 [descriptionClass]=\"labelConfig.descriptionClass\"\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 (outClickButton)=\"handlerClickButton($event)\" />\n }\n @if (isErrorRequired()) {\n <div class=\"flex items-center mb-[4px]\">\n <i [class]=\"'mo-svg-font-close libs-ui-text-error text-[6px] pr-[4px]'\"></i>\n <span class=\"libs-ui-font-h5r libs-ui-text-error\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n <div class=\"libs-ui-radio-group\"\n [class.flex]=\"horizontal()\">\n @for (group of groups(); track group;let isLast = $last) {\n <div [class]=\"horizontal() ? ((isLast && ignoreClassMarginLastItem()) ? '' : 'mr-[24px]') : ''\">\n <div [class]=\"classItemInclude()\">\n <libs_ui-components-radio-single [labelInterpolateParams]='group.item.labelInterpolateParams'\n [label]=\"group.item.label || ' '\"\n [active]=\"(group.item[fieldKey()] === keyActive()) || group.item.active || 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 || 'libs-ui-font-h5r'\"\n [classInclude]=\"classInclude() || group.item.classInclude || ''\"\n [zIndexLabel]=\"group.item.zIndexLabel\"\n [typeRadio]=\"typeRadio()\"\n [avatarConfig]=\"group.item.avatarConfig\"\n (outChange)=\"handlerChange($event)\"\n [popover]=\"group.item.popover\"\n [clickExactly]=\"clickExactly()\" />\n </div>\n @if (group.item.active || alwaysShowSubText()) {\n @if (group.subText) {\n <div [class]=\"'libs-ui-radio-group-sub-text ' + (group.classIncludeSubText ? group.classIncludeSubText:'')\"\n [innerHtml]=\"group.subText | translate\">\n </div>\n }\n <ng-container *ngTemplateOutlet=\"group?.subTemplate || null;context:{item:group.item}\"/>\n }\n </div>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { IButton } from '@libs-ui/components-buttons-button';
3
+ import { ILabel } from '@libs-ui/components-label';
4
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
5
+ import { IRadioGroupFunctionControlEvent, IRadioGroupItem } from './interfaces';
6
+ import * as i0 from "@angular/core";
7
+ export declare class LibsUiComponentsRadioGroupComponent implements OnInit {
8
+ protected readonly ERROR_MESSAGE_EMPTY_VALID = "i18n_valid_empty_message";
9
+ protected isErrorRequired: import("@angular/core").WritableSignal<boolean>;
10
+ readonly fieldKey: import("@angular/core").InputSignalWithTransform<string, string>;
11
+ readonly keyActive: import("@angular/core").InputSignal<string | number | undefined>;
12
+ readonly keysDisable: import("@angular/core").InputSignal<string[] | undefined>;
13
+ readonly groups: import("@angular/core").ModelSignal<IRadioGroupItem[]>;
14
+ readonly disable: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
15
+ readonly clickExactly: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
16
+ readonly horizontal: import("@angular/core").InputSignalWithTransform<boolean | undefined, boolean | undefined>;
17
+ readonly labelConfig: import("@angular/core").InputSignal<ILabel | undefined>;
18
+ readonly validRequired: import("@angular/core").InputSignal<{
19
+ message?: string;
20
+ interpolateParams?: {
21
+ any: any;
22
+ };
23
+ } | undefined>;
24
+ readonly ignoreClassMarginLastItem: import("@angular/core").InputSignal<boolean | undefined>;
25
+ readonly typeRadio: import("@angular/core").InputSignalWithTransform<"normal" | "medium" | undefined, "normal" | "medium" | undefined>;
26
+ readonly classInclude: import("@angular/core").InputSignalWithTransform<string | undefined, string | undefined>;
27
+ readonly classLabelInclude: import("@angular/core").InputSignalWithTransform<string | undefined, string | undefined>;
28
+ readonly classItemInclude: import("@angular/core").InputSignalWithTransform<string | undefined, string | undefined>;
29
+ readonly alwaysShowSubText: import("@angular/core").InputSignal<boolean | undefined>;
30
+ readonly outClickButton: import("@angular/core").OutputEmitterRef<IButton>;
31
+ readonly outChange: import("@angular/core").OutputEmitterRef<IRadioEvent>;
32
+ readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IRadioGroupFunctionControlEvent>;
33
+ constructor();
34
+ ngOnInit(): void;
35
+ protected handlerClickButton(event: IButton): Promise<void>;
36
+ protected handlerChange(dataEvent: {
37
+ active: boolean;
38
+ key: any;
39
+ }): Promise<void>;
40
+ private checkValid;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsRadioGroupComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsRadioGroupComponent, "libs_ui-components-radio-group", never, { "fieldKey": { "alias": "fieldKey"; "required": false; "isSignal": true; }; "keyActive": { "alias": "keyActive"; "required": false; "isSignal": true; }; "keysDisable": { "alias": "keysDisable"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "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; }; "ignoreClassMarginLastItem": { "alias": "ignoreClassMarginLastItem"; "required": false; "isSignal": true; }; "typeRadio": { "alias": "typeRadio"; "required": false; "isSignal": true; }; "classInclude": { "alias": "classInclude"; "required": false; "isSignal": true; }; "classLabelInclude": { "alias": "classLabelInclude"; "required": false; "isSignal": true; }; "classItemInclude": { "alias": "classItemInclude"; "required": false; "isSignal": true; }; "alwaysShowSubText": { "alias": "alwaysShowSubText"; "required": false; "isSignal": true; }; }, { "groups": "groupsChange"; "outClickButton": "outClickButton"; "outChange": "outChange"; "outFunctionsControl": "outFunctionsControl"; }, never, never, true, never>;
43
+ }
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './group.component';
2
+ export * from './interfaces';
@@ -0,0 +1,3 @@
1
+ export interface IRadioGroupFunctionControlEvent {
2
+ valid: () => Promise<boolean>;
3
+ }
@@ -0,0 +1,10 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { IRadioItem } from '@libs-ui/components-radio-single';
3
+ import { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';
4
+ export interface IRadioGroupItem {
5
+ item: IRadioItem;
6
+ subText?: string;
7
+ classIncludeSubText?: string;
8
+ subTemplate?: TemplateRef<TYPE_TEMPLATE_REF>;
9
+ disableByKeys?: boolean;
10
+ }
@@ -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-radio-group",
3
+ "version": "0.2.6",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0"
7
+ },
8
+ "sideEffects": false,
9
+ "module": "fesm2022/libs-ui-components-radio-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-radio-group.mjs",
18
+ "esm": "./esm2022/libs-ui-components-radio-group.mjs",
19
+ "default": "./fesm2022/libs-ui-components-radio-group.mjs"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ }
25
+ }