button-toggle-input 15.0.3

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,105 @@
1
+ # Button Toggle Selection Component
2
+
3
+ This is a Button Toggle
4
+
5
+ ## Usage
6
+
7
+ 1) `npm i button-toggle-input`
8
+
9
+ 2) Import `ButtonToggleInputModule`
10
+
11
+ 3) Use the selector in your template
12
+ ```html
13
+ <app-button-toggle-input
14
+ [formControl]="selectionControl"
15
+ [data]="data"
16
+ [toolTips]="tooltip1.checked"
17
+ [fullWidth]="width1.value"
18
+ [noBorder]="!border1.checked"
19
+ [iconSuffix]="suffix1.checked"
20
+ ></app-button-toggle-input>
21
+ ```
22
+
23
+ ### Input Properties
24
+
25
+ | Input | Type | Description | Default |
26
+ |------------------|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|
27
+ | data | ListItem[] &#124; string[] | An array of ListItem objects or strings that define the toggle options. If passed as strings, each string is used as both the value and label. | (Required) |
28
+ | multiple | boolean | If true, allows multiple selections. | false |
29
+ | toolTips | boolean | If true, displays tooltips on each toggle item. | false |
30
+ | toolTipPosition | TooltipPosition | The position of the tooltips ('above', 'below', 'left', 'right'). Imported from @angular/material/tooltip. | "above" |
31
+ | toolTipShowDelay | number | The delay in milliseconds before the tooltip is displayed. | 1 |
32
+ | color | string | The base color of the toggle buttons, e.g., a hex code. | "#333333" |
33
+ | lightColor | string | The color used for the toggle button's light areas (e.g., background when not selected). | "white" |
34
+ | darkColor | string | The color used for the toggle button's dark areas (e.g., text when selected). | "black" |
35
+ | noBorder | boolean | If true, removes the border from the toggle buttons. | false |
36
+ | iconPrefix | boolean | If true, displays the icon before the label. Ignored if iconSuffix is also true. | true |
37
+ | iconSuffix | boolean | If true, displays the icon after the label. When true, iconPrefix is automatically set to false. | false |
38
+ | fullWidth | boolean | If true, makes the toggle buttons take up the full width of their container. | false |
39
+
40
+ ### Usage Example
41
+
42
+ ```ts
43
+ import { Component } from '@angular/core';
44
+
45
+ interface ListItem {
46
+ value: string;
47
+ label: string;
48
+ icon?: string;
49
+ }
50
+
51
+ @Component({
52
+ selector: 'app-example',
53
+ template: `
54
+ <app-button-toggle-input
55
+ [data]="items"
56
+ [(ngModel)]="selectedItems"
57
+ [multiple]="true"
58
+ [toolTips]="true"
59
+ toolTipPosition="below"
60
+ color="#007bff"
61
+ lightColor="#f0f8ff"
62
+ darkColor="white"
63
+ [noBorder]="true"
64
+ [iconPrefix]="true"
65
+ [fullWidth]="true"
66
+ >
67
+ </app-button-toggle-input>
68
+ <p>Selected Items: {{ selectedItems | json }}</p>
69
+ `
70
+ })
71
+ export class ExampleComponent {
72
+ items: ListItem[] = [
73
+ { value: 'item1', label: 'Item 1', icon: 'fa fa-check' },
74
+ { value: 'item2', label: 'Item 2', icon: 'fa fa-times' },
75
+ { value: 'item3', label: 'Item 3' }
76
+ ];
77
+ selectedItems: string[] = [];
78
+ }
79
+ ```
80
+
81
+ ## Form Integration (ControlValueAccessor)
82
+
83
+ The component implements the ControlValueAccessor interface, making it easy to integrate with Angular forms:
84
+
85
+ writeValue(value: any): void: Sets the value of the control.
86
+ registerOnChange(fn: any): void: Registers a callback function to be called when the control's value changes.
87
+ registerOnTouched(fn: any): void: Registers a callback function to be called when the control is touched.
88
+ setDisabledState(isDisabled: boolean): void: Disables or enables the control.
89
+ The component uses a FormControl internally to manage the selected values. The selected values are emitted through the onChange callback.
90
+
91
+ ## Sample Data Structure
92
+
93
+ ```ts
94
+ const groupOptions: ListItem[] = [
95
+ { label: 'Sample', value: 'test', icon: 'add' },
96
+ { value: 'list', icon: 'list' },
97
+ { value: 'list', label: 'me' },
98
+ { label: '', value: 'grid', icon: 'grid_on', tootTip: 'Grid View'},
99
+ ]
100
+
101
+ or
102
+
103
+ const groupOptions = ['store', 'data', 'type', 'expiresIn', 'options']
104
+ ```
105
+
Binary file
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J1dHRvbi10b2dnbGUtaW5wdXQvc3JjL2J1dHRvbi10b2dnbGUtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,94 @@
1
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "@angular/material/button";
6
+ import * as i3 from "@angular/material/button-toggle";
7
+ import * as i4 from "@angular/material/slide-toggle";
8
+ import * as i5 from "@angular/material/divider";
9
+ import * as i6 from "../button-toggle-input.component";
10
+ import * as i7 from "@angular/common";
11
+ export class ButtonToggleDemoComponent {
12
+ constructor() {
13
+ this.fb = inject(FormBuilder);
14
+ this.type = 'icons';
15
+ this.data_1 = [
16
+ { id: 1, icon: 'home', value: 'option_1', disabled: true },
17
+ { id: 2, icon: 'layers', value: 'option_2' },
18
+ { id: 3, icon: 'add', value: 'option_3' },
19
+ { id: 3, icon: 'build', value: 'option_4', disabled: true },
20
+ { id: 3, icon: 'list', value: 'option_5', selected: true },
21
+ { id: 3, icon: 'business', value: 'option_6' },
22
+ ];
23
+ this.data_2 = [
24
+ { id: 1, label: 'Home', value: 'option_1', disabled: true },
25
+ { id: 2, label: 'Samples', value: 'option_2' },
26
+ { id: 3, label: 'Demos 1 is here', value: 'option_3' },
27
+ { id: 3, label: 'Demos 2A', value: 'option_4', disabled: true },
28
+ { id: 3, label: 'Demos 2B', value: 'option_5', selected: true },
29
+ { id: 3, label: 'Demos 3', value: 'option_6' },
30
+ ];
31
+ this.data_3 = [
32
+ { id: 1, label: 'Home', icon: 'home', value: 'option_1', disabled: true },
33
+ { id: 2, label: 'Samples', icon: 'layers', value: 'option_2' },
34
+ { id: 3, label: 'Demos 1', icon: 'add', value: 'option_3' },
35
+ { id: 3, label: 'Demos 2A', icon: 'network', value: 'option_4', disabled: true },
36
+ { id: 3, label: 'Demos 2B', icon: 'list', value: 'option_5', selected: true },
37
+ { id: 3, label: 'Demos 3', icon: 'business', value: 'option_6' },
38
+ ];
39
+ this.data = this.data_1;
40
+ this.selectionControl_1 = this.fb.control(null);
41
+ this.selectionControl_2 = this.fb.control(null);
42
+ this.changeDetection_1 = this.fb.control(true);
43
+ this.changeDetection_2 = this.fb.control(false);
44
+ }
45
+ ngOnInit() {
46
+ this.selectionControl_1.valueChanges.subscribe(data => {
47
+ if (this.changeDetection_1.value)
48
+ console.log('CHANGE:', data);
49
+ });
50
+ this.selectionControl_2.valueChanges.subscribe(data => {
51
+ if (this.changeDetection_2.value)
52
+ console.log('CHANGE:', data);
53
+ });
54
+ }
55
+ onPerformPatch() {
56
+ this.selectionControl_1.patchValue(['option_3']);
57
+ this.selectionControl_2.patchValue(['option_3', 'option_5']);
58
+ }
59
+ onChangeDataType(type) {
60
+ if (type === 'icons') {
61
+ this.data = this.data_1;
62
+ }
63
+ else if (type === 'labels') {
64
+ this.data = this.data_2;
65
+ }
66
+ else {
67
+ this.data = this.data_3;
68
+ }
69
+ }
70
+ // DISABLE
71
+ onDisabled_1(disable) {
72
+ if (disable) {
73
+ this.selectionControl_1.disable();
74
+ }
75
+ else {
76
+ this.selectionControl_1.enable();
77
+ }
78
+ }
79
+ onDisabled_2(disable) {
80
+ if (disable) {
81
+ this.selectionControl_2.disable();
82
+ }
83
+ else {
84
+ this.selectionControl_2.enable();
85
+ }
86
+ }
87
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ButtonToggleDemoComponent, selector: "app-button-toggle-demo", ngImport: i0, template: "<h1 style=\"flex: 1;\">Button Toggle Input</h1>\n\n\n<div style=\"display: flex; flex-direction: column; margin-top: 1rem;\">\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"icons\" checked=\"true\">Icons</mat-button-toggle>\n <mat-button-toggle value=\"labels\" checked=\"false\">Labels</mat-button-toggle>\n <mat-button-toggle value=\"combo\" checked=\"false\">Combo</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <!-- MAIN DEMOS -->\n <div style=\"margin: 1rem; margin-right: 0;\">\n <h3 style=\"margin-bottom: 0;\">Button Toggle Selection - {{ varTypes.value | uppercase }}</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <app-button-toggle-input\n [formControl]=\"selectionControl_1\"\n [data]=\"data\"\n [toolTips]=\"tooltip1.checked\"\n [fullWidth]=\"width1.value\"\n [noBorder]=\"!border1.checked\"\n [iconSuffix]=\"suffix1.checked\"\n ></app-button-toggle-input>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix1>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip1>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border1 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Single Selection<br>\n ToolTips<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width1=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n </div>\n\n\n <div style=\"margin: 1rem; margin-right: 0;\">\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n\n <app-button-toggle-input\n [formControl]=\"selectionControl_2\"\n [data]=\"data\"\n [toolTips]=\"tooltip2.checked\"\n toolTipPosition=\"above\"\n [multiple]=\"true\"\n [fullWidth]=\"width2.value\"\n [noBorder]=\"!border2.checked\"\n [iconSuffix]=\"suffix2.checked\"\n ></app-button-toggle-input>\n\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix2>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip2>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border2 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Multiple Selection<br>\n ToolTips<br>\n ToolTip Position ABOVE<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width2=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i6.ButtonToggleInputComponent, selector: "app-button-toggle-input", inputs: ["multiple", "toolTips", "toolTipPosition", "toolTipShowDelay", "color", "lightColor", "darkColor", "noBorder", "iconPrefix", "iconSuffix", "fullWidth", "data"] }, { kind: "pipe", type: i7.UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleDemoComponent, decorators: [{
91
+ type: Component,
92
+ args: [{ selector: 'app-button-toggle-demo', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h1 style=\"flex: 1;\">Button Toggle Input</h1>\n\n\n<div style=\"display: flex; flex-direction: column; margin-top: 1rem;\">\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"icons\" checked=\"true\">Icons</mat-button-toggle>\n <mat-button-toggle value=\"labels\" checked=\"false\">Labels</mat-button-toggle>\n <mat-button-toggle value=\"combo\" checked=\"false\">Combo</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <!-- MAIN DEMOS -->\n <div style=\"margin: 1rem; margin-right: 0;\">\n <h3 style=\"margin-bottom: 0;\">Button Toggle Selection - {{ varTypes.value | uppercase }}</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <app-button-toggle-input\n [formControl]=\"selectionControl_1\"\n [data]=\"data\"\n [toolTips]=\"tooltip1.checked\"\n [fullWidth]=\"width1.value\"\n [noBorder]=\"!border1.checked\"\n [iconSuffix]=\"suffix1.checked\"\n ></app-button-toggle-input>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix1>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip1>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border1 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Single Selection<br>\n ToolTips<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width1=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n </div>\n\n\n <div style=\"margin: 1rem; margin-right: 0;\">\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n\n <app-button-toggle-input\n [formControl]=\"selectionControl_2\"\n [data]=\"data\"\n [toolTips]=\"tooltip2.checked\"\n toolTipPosition=\"above\"\n [multiple]=\"true\"\n [fullWidth]=\"width2.value\"\n [noBorder]=\"!border2.checked\"\n [iconSuffix]=\"suffix2.checked\"\n ></app-button-toggle-input>\n\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix2>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip2>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border2 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Multiple Selection<br>\n ToolTips<br>\n ToolTip Position ABOVE<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width2=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n" }]
93
+ }], ctorParameters: function () { return []; } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS1pbnB1dC1kZW1vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1dHRvbi10b2dnbGUtaW5wdXQvc3JjL2xpYi9idXR0b24tdG9nZ2xlLWlucHV0LWRlbW8vYnV0dG9uLXRvZ2dsZS1pbnB1dC1kZW1vLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1dHRvbi10b2dnbGUtaW5wdXQvc3JjL2xpYi9idXR0b24tdG9nZ2xlLWlucHV0LWRlbW8vYnV0dG9uLXRvZ2dsZS1pbnB1dC1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUTdDLE1BQU0sT0FBTyx5QkFBeUI7SUF5Q3BDO1FBdkNBLE9BQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFeEIsU0FBSSxHQUFHLE9BQU8sQ0FBQTtRQUVkLFdBQU0sR0FBRztZQUNQLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN6RCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDO1lBQzFDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDeEMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQzFELEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN6RCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDO1NBQzdDLENBQUE7UUFFRCxXQUFNLEdBQUc7WUFDUCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDMUQsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUM3QyxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDckQsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQzlELEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUM5RCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO1NBQzlDLENBQUE7UUFFRCxXQUFNLEdBQUc7WUFDUCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN4RSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUM7WUFD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K0dBekZVLHlCQUF5QjttR0FBekIseUJBQXlCLDhEQ1R0QyxtN0lBZ0hBOzs0RkR2R2EseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJ1dHRvbi10b2dnbGUtZGVtbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tdG9nZ2xlLWlucHV0LWRlbW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idXR0b24tdG9nZ2xlLWlucHV0LWRlbW8uY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uVG9nZ2xlRGVtb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpXG5cbiAgdHlwZSA9ICdpY29ucydcblxuICBkYXRhXzEgPSBbXG4gICAge2lkOiAxLCBpY29uOiAnaG9tZScsIHZhbHVlOiAnb3B0aW9uXzEnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgIHtpZDogMiwgaWNvbjogJ2xheWVycycsIHZhbHVlOiAnb3B0aW9uXzInfSxcbiAgICB7aWQ6IDMsIGljb246ICdhZGQnLCB2YWx1ZTogJ29wdGlvbl8zJyB9LFxuICAgIHtpZDogMywgaWNvbjogJ2J1aWxkJywgdmFsdWU6ICdvcHRpb25fNCcsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAge2lkOiAzLCBpY29uOiAnbGlzdCcsIHZhbHVlOiAnb3B0aW9uXzUnLCBzZWxlY3RlZDogdHJ1ZSB9LFxuICAgIHtpZDogMywgaWNvbjogJ2J1c2luZXNzJywgdmFsdWU6ICdvcHRpb25fNid9LFxuICBdXG5cbiAgZGF0YV8yID0gW1xuICAgIHtpZDogMSwgbGFiZWw6ICdIb21lJywgdmFsdWU6ICdvcHRpb25fMScsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAge2lkOiAyLCBsYWJlbDogJ1NhbXBsZXMnLCB2YWx1ZTogJ29wdGlvbl8yJyB9LFxuICAgIHtpZDogMywgbGFiZWw6ICdEZW1vcyAxIGlzIGhlcmUnLCB2YWx1ZTogJ29wdGlvbl8zJyB9LFxuICAgIHtpZDogMywgbGFiZWw6ICdEZW1vcyAyQScsIHZhbHVlOiAnb3B0aW9uXzQnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgIHtpZDogMywgbGFiZWw6ICdEZW1vcyAyQicsIHZhbHVlOiAnb3B0aW9uXzUnLCBzZWxlY3RlZDogdHJ1ZSB9LFxuICAgIHtpZDogMywgbGFiZWw6ICdEZW1vcyAzJywgdmFsdWU6ICdvcHRpb25fNicgfSxcbiAgXVxuXG4gIGRhdGFfMyA9IFtcbiAgICB7aWQ6IDEsIGxhYmVsOiAnSG9tZScsIGljb246ICdob21lJywgdmFsdWU6ICdvcHRpb25fMScsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAge2lkOiAyLCBsYWJlbDogJ1NhbXBsZXMnLCBpY29uOiAnbGF5ZXJzJywgdmFsdWU6ICdvcHRpb25fMid9LFxuICAgIHtpZDogMywgbGFiZWw6ICdEZW1vcyAxJywgaWNvbjogJ2FkZCcsIHZhbHVlOiAnb3B0aW9uXzMnIH0sXG4gICAge2lkOiAzLCBsYWJlbDogJ0RlbW9zIDJBJywgaWNvbjogJ25ldHdvcmsnLCB2YWx1ZTogJ29wdGlvbl80JywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICB7aWQ6IDMsIGxhYmVsOiAnRGVtb3MgMkInLCBpY29uOiAnbGlzdCcsIHZhbHVlOiAnb3B0aW9uXzUnLCBzZWxlY3RlZDogdHJ1ZSB9LFxuICAgIHtpZDogMywgbGFiZWw6ICdEZW1vcyAzJywgaWNvbjogJ2J1c2luZXNzJywgdmFsdWU6ICdvcHRpb25fNid9LFxuICBdXG5cbiAgZGF0YTogYW55W10gPSB0aGlzLmRhdGFfMVxuXG4gIHNlbGVjdGlvbkNvbnRyb2xfMSA9IHRoaXMuZmIuY29udHJvbDxhbnk+KG51bGwpXG4gIHNlbGVjdGlvbkNvbnRyb2xfMiA9IHRoaXMuZmIuY29udHJvbDxhbnk+KG51bGwpXG5cbiAgY2hhbmdlRGV0ZWN0aW9uXzEgPSB0aGlzLmZiLmNvbnRyb2wodHJ1ZSlcbiAgY2hhbmdlRGV0ZWN0aW9uXzIgPSB0aGlzLmZiLmNvbnRyb2woZmFsc2UpXG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8xLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZih0aGlzLmNoYW5nZURldGVjdGlvbl8xLnZhbHVlKSBjb25zb2xlLmxvZygnQ0hBTkdFOicsZGF0YSlcbiAgICB9KVxuXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmKHRoaXMuY2hhbmdlRGV0ZWN0aW9uXzIudmFsdWUpIGNvbnNvbGUubG9nKCdDSEFOR0U6JyxkYXRhKVxuICAgIH0pXG5cbiAgfVxuXG4gIG9uUGVyZm9ybVBhdGNoKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8xLnBhdGNoVmFsdWUoWydvcHRpb25fMyddKVxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8yLnBhdGNoVmFsdWUoWydvcHRpb25fMycsICdvcHRpb25fNSddKVxuICB9XG5cbiAgb25DaGFuZ2VEYXRhVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZih0eXBlID09PSAnaWNvbnMnKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFfMVxuICAgIH0gZWxzZSBpZih0eXBlID09PSAnbGFiZWxzJykge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhXzJcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhXzNcbiAgICB9XG4gIH1cblxuICAvLyBESVNBQkxFXG4gIG9uRGlzYWJsZWRfMShkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMS5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzEuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfMihkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMi5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG59XG4iLCI8aDEgc3R5bGU9XCJmbGV4OiAxO1wiPkJ1dHRvbiBUb2dnbGUgSW5wdXQ8L2gxPlxuXG5cbjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBtYXJnaW4tdG9wOiAxcmVtO1wiPlxuICA8ZGl2IHN0eWxlPVwiZmxleDoxOyB0ZXh0LWFsaWduOiByaWdodDtcIj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XCI+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKGNsaWNrKT1cIm9uUGVyZm9ybVBhdGNoKClcIj5QYXRjaDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgI3ZhclR5cGVzPVwibWF0QnV0dG9uVG9nZ2xlR3JvdXBcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRGF0YVR5cGUodmFyVHlwZXMudmFsdWUpXCI+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImljb25zXCIgY2hlY2tlZD1cInRydWVcIj5JY29uczwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImxhYmVsc1wiIGNoZWNrZWQ9XCJmYWxzZVwiPkxhYmVsczwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImNvbWJvXCIgY2hlY2tlZD1cImZhbHNlXCI+Q29tYm88L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgICA8IS0tIE1BSU4gREVNT1MgLS0+XG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogMXJlbTsgbWFyZ2luLXJpZ2h0OiAwO1wiPlxuICAgICAgPGgzIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMDtcIj5CdXR0b24gVG9nZ2xlIFNlbGVjdGlvbiAtIHt7IHZhclR5cGVzLnZhbHVlIHwgdXBwZXJjYXNlIH19PC9oMz5cblxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdGlvbkNvbnRyb2xfMS5yZXNldCgpXCI+UmVzZXQ8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTtcIj5cbiAgICAgICAgPGFwcC1idXR0b24tdG9nZ2xlLWlucHV0XG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGlvbkNvbnRyb2xfMVwiXG4gICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgW3Rvb2xUaXBzXT1cInRvb2x0aXAxLmNoZWNrZWRcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwid2lkdGgxLnZhbHVlXCJcbiAgICAgICAgICBbbm9Cb3JkZXJdPVwiIWJvcmRlcjEuY2hlY2tlZFwiXG4gICAgICAgICAgW2ljb25TdWZmaXhdPVwic3VmZml4MS5jaGVja2VkXCJcbiAgICAgICAgPjwvYXBwLWJ1dHRvbi10b2dnbGUtaW5wdXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnJlbTsgbWFyZ2luLXRvcDogMnJlbTtcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2Zvcm1Db250cm9sXT1cImNoYW5nZURldGVjdGlvbl8xXCI+Q2hhbmdlIERldGVjdGlvbjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgI2Rpc2FibGUxIChjaGFuZ2UpPVwib25EaXNhYmxlZF8xKGRpc2FibGUxLmNoZWNrZWQpXCI+RGlzYWJsZTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNzdWZmaXgxPkljb24gU3VmZml4PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjdG9vbHRpcDE+VG9vbFRpcDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgI2JvcmRlcjEgY2hlY2tlZD1cInRydWVcIj5Cb3JkZXI8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnJlbTsgbWFyZ2luLXRvcDogMnJlbTtcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBTaW5nbGUgU2VsZWN0aW9uPGJyPlxuICAgICAgICAgIFRvb2xUaXBzPGJyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwICN3aWR0aDE9XCJtYXRCdXR0b25Ub2dnbGVHcm91cFwiPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiZmFsc2VcIiBjaGVja2VkPVwiZmFsc2VcIj5Ob3JtYWwgV2lkdGg8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwidHJ1ZVwiIGNoZWNrZWQ9XCJ0cnVlXCI+RnVsbCBXaWR0aDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAxcmVtOyBtYXJnaW4tcmlnaHQ6IDA7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0aW9uQ29udHJvbF8yLnJlc2V0KClcIj5SZXNldDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtO1wiPlxuXG4gICAgICAgIDxhcHAtYnV0dG9uLXRvZ2dsZS1pbnB1dFxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3Rpb25Db250cm9sXzJcIlxuICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgIFt0b29sVGlwc109XCJ0b29sdGlwMi5jaGVja2VkXCJcbiAgICAgICAgICB0b29sVGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwid2lkdGgyLnZhbHVlXCJcbiAgICAgICAgICBbbm9Cb3JkZXJdPVwiIWJvcmRlcjIuY2hlY2tlZFwiXG4gICAgICAgICAgW2ljb25TdWZmaXhdPVwic3VmZml4Mi5jaGVja2VkXCJcbiAgICAgICAgPjwvYXBwLWJ1dHRvbi10b2dnbGUtaW5wdXQ+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBtYXJnaW4tdG9wOiAycmVtO1wiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZm9ybUNvbnRyb2xdPVwiY2hhbmdlRGV0ZWN0aW9uXzJcIj5DaGFuZ2UgRGV0ZWN0aW9uPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjZGlzYWJsZTIgKGNoYW5nZSk9XCJvbkRpc2FibGVkXzIoZGlzYWJsZTIuY2hlY2tlZClcIj5EaXNhYmxlPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6MVwiPjwvc3Bhbj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgI3N1ZmZpeDI+SWNvbiBTdWZmaXg8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICN0b29sdGlwMj5Ub29sVGlwPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjYm9yZGVyMiBjaGVja2VkPVwidHJ1ZVwiPkJvcmRlcjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBtYXJnaW4tdG9wOiAycmVtO1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIE11bHRpcGxlIFNlbGVjdGlvbjxicj5cbiAgICAgICAgICBUb29sVGlwczxicj5cbiAgICAgICAgICBUb29sVGlwIFBvc2l0aW9uIEFCT1ZFPGJyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwICN3aWR0aDI9XCJtYXRCdXR0b25Ub2dnbGVHcm91cFwiPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiZmFsc2VcIiBjaGVja2VkPVwiZmFsc2VcIj5Ob3JtYWwgV2lkdGg8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwidHJ1ZVwiIGNoZWNrZWQ9XCJ0cnVlXCI+RnVsbCBXaWR0aDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IC41cmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,155 @@
1
+ import { Component, Input, forwardRef, inject } from '@angular/core';
2
+ import { FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { ListItem } from './models/list-item.model';
4
+ import { Subscription } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@angular/material/icon";
9
+ import * as i4 from "@angular/material/tooltip";
10
+ import * as i5 from "@angular/material/button-toggle";
11
+ export class ButtonToggleInputComponent {
12
+ set noBorder(value) {
13
+ this._noBorder = value !== null && `${value}` !== 'false';
14
+ }
15
+ get noBorder() {
16
+ return this._noBorder;
17
+ }
18
+ set iconPrefix(value) {
19
+ this._iconPrefix = (value !== undefined) ? value : false;
20
+ }
21
+ get iconPrefix() {
22
+ return this._iconPrefix;
23
+ }
24
+ set iconSuffix(value) {
25
+ this._iconSuffix = (value !== undefined) ? value : false;
26
+ this.iconPrefix = !this.iconSuffix;
27
+ }
28
+ get iconSuffix() {
29
+ return this._iconSuffix;
30
+ }
31
+ set fullWidth(value) {
32
+ this._fullWidth = value !== null && `${value}` !== 'false';
33
+ }
34
+ get fullWidth() {
35
+ return this._fullWidth;
36
+ }
37
+ set data(value) {
38
+ const isString = this.isArrayOfStrings(value);
39
+ this._data = (isString) ? value.map(item => ListItem.adapt({ value: item, label: item })) : value.map(item => ListItem.adapt(item));
40
+ this.hasLabels = this.data.some(item => item['label']);
41
+ this.hasIcons = this.data.some((item) => item["icon"]);
42
+ }
43
+ get selected() {
44
+ return this.data.filter(item => item.selected).map(item => item.value);
45
+ }
46
+ get hasSelected() {
47
+ return (this.selected.length > 0);
48
+ }
49
+ get data() {
50
+ return this._data;
51
+ }
52
+ constructor() {
53
+ this.multiple = false;
54
+ this.toolTips = false;
55
+ this.toolTipPosition = 'above';
56
+ this.toolTipShowDelay = 1;
57
+ this.color = "#333333";
58
+ this.lightColor = "white";
59
+ this.darkColor = "black";
60
+ this._noBorder = false;
61
+ this._iconPrefix = true;
62
+ this._iconSuffix = false;
63
+ this._fullWidth = false;
64
+ this.formInitialized = false;
65
+ this.isArrayOfStrings = (arr) => {
66
+ const isArray = Array.isArray(arr) && arr.every(item => typeof item === 'string');
67
+ return (arr.length > 0) ? isArray : false;
68
+ };
69
+ this.hasLabels = false;
70
+ this.hasIcons = false;
71
+ this._data = [];
72
+ this.subscription = new Subscription();
73
+ this.sample = "orange";
74
+ this.test = 'red';
75
+ this.fb = inject(FormBuilder);
76
+ this.display = this.fb.control(null);
77
+ this.disabled = false;
78
+ this.onChange = () => { };
79
+ this.onTouch = () => { };
80
+ }
81
+ ngOnInit() {
82
+ this.subscription.add(this.display.valueChanges.subscribe(data => this.onChange(data)));
83
+ }
84
+ writeValue(value) {
85
+ if (!this.formInitialized) {
86
+ this.display.patchValue(this.selected, { emitEvent: false });
87
+ }
88
+ else {
89
+ const valuePatch = (value) ? (this.multiple) ? value : value[0] : null;
90
+ this.display.patchValue(valuePatch, { emitEvent: false });
91
+ }
92
+ this.formInitialized = true;
93
+ }
94
+ registerOnChange(fn) {
95
+ this.onChange = fn;
96
+ }
97
+ registerOnTouched(fn) {
98
+ this.onTouch = fn;
99
+ }
100
+ setDisabledState(isDisabled) {
101
+ this.disabled = isDisabled;
102
+ if (this.disabled) {
103
+ this.display.disable();
104
+ }
105
+ else {
106
+ this.display.enable();
107
+ }
108
+ }
109
+ ngOnDestroy() {
110
+ this.subscription.unsubscribe();
111
+ }
112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
113
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ButtonToggleInputComponent, selector: "app-button-toggle-input", inputs: { multiple: "multiple", toolTips: "toolTips", toolTipPosition: "toolTipPosition", toolTipShowDelay: "toolTipShowDelay", color: "color", lightColor: "lightColor", darkColor: "darkColor", noBorder: "noBorder", iconPrefix: "iconPrefix", iconSuffix: "iconSuffix", fullWidth: "fullWidth", data: "data" }, providers: [
114
+ {
115
+ provide: NG_VALUE_ACCESSOR,
116
+ useExisting: forwardRef(() => ButtonToggleInputComponent),
117
+ multi: true
118
+ }
119
+ ], ngImport: i0, template: "<mat-button-toggle-group\n style=\"height: 44px;\"\n [class.stretch]=\"fullWidth\"\n [style.background-color]=\"(noBorder) ? '' : 'white'\"\n [style.border-radius]=\"(noBorder) ? 'none' : '5rem'\"\n [style.border]=\"(noBorder) ? 'none' : ''\"\n [formControl]=\"display\"\n [multiple]=\"multiple\"\n>\n <ng-container *ngFor=\"let item of data;\">\n\n <mat-button-toggle\n [disableRipple]=\"true\"\n color=\"primary\"\n style=\"border-radius: 5rem;\"\n [style.flex]=\"(fullWidth) ? '1' : ''\"\n [style.opacity]=\"disabled ? '0.3' : ''\"\n [style.padding-left]=\"(hasLabels && !fullWidth) ? '.5rem' : ''\"\n [style.padding-right]=\"(hasLabels && !fullWidth)? '.5rem' : ''\"\n [value]=\"item.value\"\n [matTooltip]=\"(toolTips) ? item.tootTip : ''\"\n [matTooltipPosition]=\"toolTipPosition\"\n [matTooltipShowDelay]=\"toolTipShowDelay * 1000\"\n [disabled]=\"item.disabled\"\n >\n <div\n style=\"display: flex; gap: 0.5rem; padding-top: 0.25rem\"\n [style.padding-top]=\"iconSuffix && (hasIcons && hasLabels) ? '' : '.25rem'\">\n <div class=\"icon\" *ngIf=\"hasIcons && iconPrefix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n\n <div class=\"overflow-content\" *ngIf=\"item.label !== ''\">{{ item.label }}</div>\n\n <div class=\"icon\" *ngIf=\"hasIcons && iconSuffix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n </div>\n\n </mat-button-toggle>\n\n </ng-container>\n</mat-button-toggle-group>\n", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-button-toggle-checked{background-color:#333!important;color:#fff!important;transition:all .2s ease;font-weight:600}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-label-content{line-height:32px!important}.mat-checkbox span.mat-checkbox-ripple{display:none}mat-button-toggle{display:flex;align-items:center;justify-content:center;text-align:center}mat-button-toggle .overflow-content{display:flex;align-items:center;justify-content:center;white-space:normal;word-wrap:break-word;line-height:1.2rem;font-size:1rem}.stretch{display:flex}.icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }] }); }
120
+ }
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputComponent, decorators: [{
122
+ type: Component,
123
+ args: [{ selector: 'app-button-toggle-input', providers: [
124
+ {
125
+ provide: NG_VALUE_ACCESSOR,
126
+ useExisting: forwardRef(() => ButtonToggleInputComponent),
127
+ multi: true
128
+ }
129
+ ], template: "<mat-button-toggle-group\n style=\"height: 44px;\"\n [class.stretch]=\"fullWidth\"\n [style.background-color]=\"(noBorder) ? '' : 'white'\"\n [style.border-radius]=\"(noBorder) ? 'none' : '5rem'\"\n [style.border]=\"(noBorder) ? 'none' : ''\"\n [formControl]=\"display\"\n [multiple]=\"multiple\"\n>\n <ng-container *ngFor=\"let item of data;\">\n\n <mat-button-toggle\n [disableRipple]=\"true\"\n color=\"primary\"\n style=\"border-radius: 5rem;\"\n [style.flex]=\"(fullWidth) ? '1' : ''\"\n [style.opacity]=\"disabled ? '0.3' : ''\"\n [style.padding-left]=\"(hasLabels && !fullWidth) ? '.5rem' : ''\"\n [style.padding-right]=\"(hasLabels && !fullWidth)? '.5rem' : ''\"\n [value]=\"item.value\"\n [matTooltip]=\"(toolTips) ? item.tootTip : ''\"\n [matTooltipPosition]=\"toolTipPosition\"\n [matTooltipShowDelay]=\"toolTipShowDelay * 1000\"\n [disabled]=\"item.disabled\"\n >\n <div\n style=\"display: flex; gap: 0.5rem; padding-top: 0.25rem\"\n [style.padding-top]=\"iconSuffix && (hasIcons && hasLabels) ? '' : '.25rem'\">\n <div class=\"icon\" *ngIf=\"hasIcons && iconPrefix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n\n <div class=\"overflow-content\" *ngIf=\"item.label !== ''\">{{ item.label }}</div>\n\n <div class=\"icon\" *ngIf=\"hasIcons && iconSuffix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n </div>\n\n </mat-button-toggle>\n\n </ng-container>\n</mat-button-toggle-group>\n", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-button-toggle-checked{background-color:#333!important;color:#fff!important;transition:all .2s ease;font-weight:600}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-label-content{line-height:32px!important}.mat-checkbox span.mat-checkbox-ripple{display:none}mat-button-toggle{display:flex;align-items:center;justify-content:center;text-align:center}mat-button-toggle .overflow-content{display:flex;align-items:center;justify-content:center;white-space:normal;word-wrap:break-word;line-height:1.2rem;font-size:1rem}.stretch{display:flex}.icon{display:flex;align-items:center}\n"] }]
130
+ }], ctorParameters: function () { return []; }, propDecorators: { multiple: [{
131
+ type: Input
132
+ }], toolTips: [{
133
+ type: Input
134
+ }], toolTipPosition: [{
135
+ type: Input
136
+ }], toolTipShowDelay: [{
137
+ type: Input
138
+ }], color: [{
139
+ type: Input
140
+ }], lightColor: [{
141
+ type: Input
142
+ }], darkColor: [{
143
+ type: Input
144
+ }], noBorder: [{
145
+ type: Input
146
+ }], iconPrefix: [{
147
+ type: Input
148
+ }], iconSuffix: [{
149
+ type: Input
150
+ }], fullWidth: [{
151
+ type: Input
152
+ }], data: [{
153
+ type: Input
154
+ }] } });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9idXR0b24tdG9nZ2xlLWlucHV0L3NyYy9saWIvYnV0dG9uLXRvZ2dsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9idXR0b24tdG9nZ2xlLWlucHV0L3NyYy9saWIvYnV0dG9uLXRvZ2dsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBZXBDLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsSUFDSSxRQUFRLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxPQUFPLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBSUQsSUFDSSxVQUFVLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMxRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBO0lBQ3pCLENBQUM7SUFJRCxJQUNJLFVBQVUsQ0FBQyxLQUFVO1FB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RUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtGLFFBQVE7c0JBRFgsS0FBSztnQkFZRixVQUFVO3NCQURiLEtBQUs7Z0JBWUYsVUFBVTtzQkFEYixLQUFLO2dCQWFGLFNBQVM7c0JBRFosS0FBSztnQkFvQk8sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi9tb2RlbHMvbGlzdC1pdGVtLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1idXR0b24tdG9nZ2xlLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi10b2dnbGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idXR0b24tdG9nZ2xlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQnV0dG9uVG9nZ2xlSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uVG9nZ2xlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2VcblxuICBASW5wdXQoKSB0b29sVGlwcyA9IGZhbHNlXG4gIEBJbnB1dCgpIHRvb2xUaXBQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uID0gJ2Fib3ZlJ1xuICBASW5wdXQoKSB0b29sVGlwU2hvd0RlbGF5ID0gMVxuXG4gIEBJbnB1dCgpIGNvbG9yID0gXCIjMzMzMzMzXCI7XG5cbiAgQElucHV0KCkgbGlnaHRDb2xvciA9IFwid2hpdGVcIjtcbiAgQElucHV0KCkgZGFya0NvbG9yID0gXCJibGFja1wiO1xuXG4gIHByaXZhdGUgX25vQm9yZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IG5vQm9yZGVyKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9ub0JvcmRlciA9IHZhbHVlICE9PSBudWxsICYmIGAke3ZhbHVlfWAgIT09ICdmYWxzZSc7XG4gIH1cblxuICBnZXQgbm9Cb3JkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vQm9yZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaWNvblByZWZpeDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2V0IGljb25QcmVmaXgodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2ljb25QcmVmaXggPSAodmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZSA6IGZhbHNlXG4gIH1cblxuICBnZXQgaWNvblByZWZpeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faWNvblByZWZpeFxuICB9XG5cbiAgcHJpdmF0ZSBfaWNvblN1ZmZpeDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpY29uU3VmZml4KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9pY29uU3VmZml4ID0gKHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUgOiBmYWxzZVxuICAgIHRoaXMuaWNvblByZWZpeCA9ICF0aGlzLmljb25TdWZmaXhcbiAgfVxuXG4gIGdldCBpY29uU3VmZml4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pY29uU3VmZml4XG4gIH1cblxuICBwcml2YXRlIF9mdWxsV2lkdGg6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgZnVsbFdpZHRoKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9mdWxsV2lkdGggPSB2YWx1ZSAhPT0gbnVsbCAmJiBgJHt2YWx1ZX1gICE9PSAnZmFsc2UnO1xuICB9XG5cbiAgZ2V0IGZ1bGxXaWR0aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFdpZHRoXG4gIH1cblxuICBmb3JtSW5pdGlhbGl6ZWQgPSBmYWxzZVxuXG4gIGlzQXJyYXlPZlN0cmluZ3MgPSAoYXJyOiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFycikgJiYgYXJyLmV2ZXJ5KGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbiAgICByZXR1cm4gKGFyci5sZW5ndGggPiAwKSA/IGlzQXJyYXkgOiBmYWxzZVxuICB9XG5cbiAgaGFzTGFiZWxzID0gZmFsc2VcbiAgaGFzSWNvbnMgPSBmYWxzZVxuXG4gIF9kYXRhOiBMaXN0SXRlbVtdID0gW11cbiAgQElucHV0KCkgc2V0IGRhdGEodmFsdWU6IGFueVtdKSB7XG5cbiAgICBjb25zdCBpc1N0cmluZyA9IHRoaXMuaXNBcnJheU9mU3RyaW5ncyh2YWx1ZSk7XG4gICAgdGhpcy5fZGF0YSA9IChpc1N0cmluZykgPyB2YWx1ZS5tYXAoaXRlbSA9PiBMaXN0SXRlbS5hZGFwdCh7IHZhbHVlOiBpdGVtLCBsYWJlbDogaXRlbSB9KSkgOiB2YWx1ZS5tYXAoaXRlbSA9PiBMaXN0SXRlbS5hZGFwdChpdGVtKSlcblxuICAgIHRoaXMuaGFzTGFiZWxzID0gdGhpcy5kYXRhLnNvbWUoaXRlbSA9PiBpdGVtWydsYWJlbCddKVxuICAgIHRoaXMuaGFzSWNvbnMgPSB0aGlzLmRhdGEuc29tZSgoaXRlbSkgPT4gaXRlbVtcImljb25cIl0pXG5cbiAgfVxuXG4gIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKVxuXG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpXG4gIH1cblxuICBnZXQgaGFzU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApXG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVxuICB9XG5cbiAgc2FtcGxlID0gXCJvcmFuZ2VcIlxuICB0ZXN0ID0gJ3JlZCdcblxuICBmYiA9IGluamVjdChGb3JtQnVpbGRlcilcblxuICBkaXNwbGF5ID0gdGhpcy5mYi5jb250cm9sPHN0cmluZ3xzdHJpbmdbXXxudWxsPihudWxsKVxuXG4gIGRpc2FibGVkID0gZmFsc2VcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge31cbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge31cblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kaXNwbGF5LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLm9uQ2hhbmdlKGRhdGEpKVxuICAgIClcblxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nW10pe1xuXG4gICAgaWYoIXRoaXMuZm9ybUluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmRpc3BsYXkucGF0Y2hWYWx1ZSh0aGlzLnNlbGVjdGVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVQYXRjaCA9ICh2YWx1ZSkgPyAodGhpcy5tdWx0aXBsZSkgPyB2YWx1ZSA6IHZhbHVlWzBdIDogbnVsbFxuICAgICAgdGhpcy5kaXNwbGF5LnBhdGNoVmFsdWUodmFsdWVQYXRjaCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgdGhpcy5mb3JtSW5pdGlhbGl6ZWQgPSB0cnVlXG5cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSl7XG4gICAgICB0aGlzLm9uQ2hhbmdlID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpe1xuICAgIHRoaXMub25Ub3VjaCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG5cbiAgICBpZih0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRpc3BsYXkuZGlzYWJsZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheS5lbmFibGUoKVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG59XG4iLCI8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgc3R5bGU9XCJoZWlnaHQ6IDQ0cHg7XCJcbiAgW2NsYXNzLnN0cmV0Y2hdPVwiZnVsbFdpZHRoXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiKG5vQm9yZGVyKSA/ICcnIDogJ3doaXRlJ1wiXG4gIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIihub0JvcmRlcikgPyAnbm9uZScgOiAnNXJlbSdcIlxuICBbc3R5bGUuYm9yZGVyXT1cIihub0JvcmRlcikgPyAnbm9uZScgOiAnJ1wiXG4gIFtmb3JtQ29udHJvbF09XCJkaXNwbGF5XCJcbiAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbj5cbiAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YTtcIj5cblxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiA1cmVtO1wiXG4gICAgICBbc3R5bGUuZmxleF09XCIoZnVsbFdpZHRoKSA/ICcxJyA6ICcnXCJcbiAgICAgIFtzdHlsZS5vcGFjaXR5XT1cImRpc2FibGVkID8gJzAuMycgOiAnJ1wiXG4gICAgICBbc3R5bGUucGFkZGluZy1sZWZ0XT1cIihoYXNMYWJlbHMgJiYgIWZ1bGxXaWR0aCkgPyAnLjVyZW0nIDogJydcIlxuICAgICAgW3N0eWxlLnBhZGRpbmctcmlnaHRdPVwiKGhhc0xhYmVscyAmJiAhZnVsbFdpZHRoKT8gJy41cmVtJyA6ICcnXCJcbiAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIih0b29sVGlwcykgPyBpdGVtLnRvb3RUaXAgOiAnJ1wiXG4gICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cInRvb2xUaXBQb3NpdGlvblwiXG4gICAgICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCJ0b29sVGlwU2hvd0RlbGF5ICogMTAwMFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgPlxuICAgIDxkaXZcbiAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAwLjVyZW07IHBhZGRpbmctdG9wOiAwLjI1cmVtXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nLXRvcF09XCJpY29uU3VmZml4ICYmIChoYXNJY29ucyAmJiBoYXNMYWJlbHMpID8gJycgOiAnLjI1cmVtJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiICpuZ0lmPVwiaGFzSWNvbnMgJiYgaWNvblByZWZpeFwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57e2l0ZW0uaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWNvbnRlbnRcIiAqbmdJZj1cIml0ZW0ubGFiZWwgIT09ICcnXCI+e3sgaXRlbS5sYWJlbCB9fTwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJoYXNJY29ucyAmJiBpY29uU3VmZml4XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7aXRlbS5pY29ufX08L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { ButtonToggleInputComponent } from './button-toggle-input.component';
5
+ import { ButtonToggleDemoComponent } from './button-toggle-input-demo/button-toggle-input-demo.component';
6
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
7
+ import { MatTooltipModule } from '@angular/material/tooltip';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
10
+ import { MatDividerModule } from '@angular/material/divider';
11
+ import { MatButtonModule } from '@angular/material/button';
12
+ import * as i0 from "@angular/core";
13
+ export class ButtonToggleInputModule {
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, declarations: [ButtonToggleInputComponent,
16
+ ButtonToggleDemoComponent], imports: [CommonModule,
17
+ FormsModule,
18
+ MatIconModule,
19
+ MatButtonModule,
20
+ MatTooltipModule,
21
+ ReactiveFormsModule,
22
+ MatButtonToggleModule,
23
+ MatSlideToggleModule,
24
+ MatDividerModule], exports: [ButtonToggleInputComponent,
25
+ ButtonToggleDemoComponent] }); }
26
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, imports: [CommonModule,
27
+ FormsModule,
28
+ MatIconModule,
29
+ MatButtonModule,
30
+ MatTooltipModule,
31
+ ReactiveFormsModule,
32
+ MatButtonToggleModule,
33
+ MatSlideToggleModule,
34
+ MatDividerModule] }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, decorators: [{
37
+ type: NgModule,
38
+ args: [{
39
+ imports: [
40
+ CommonModule,
41
+ FormsModule,
42
+ MatIconModule,
43
+ MatButtonModule,
44
+ MatTooltipModule,
45
+ ReactiveFormsModule,
46
+ MatButtonToggleModule,
47
+ MatSlideToggleModule,
48
+ MatDividerModule,
49
+ ],
50
+ declarations: [
51
+ ButtonToggleInputComponent,
52
+ ButtonToggleDemoComponent
53
+ ],
54
+ exports: [
55
+ ButtonToggleInputComponent,
56
+ ButtonToggleDemoComponent
57
+ ]
58
+ }]
59
+ }] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS1pbnB1dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9idXR0b24tdG9nZ2xlLWlucHV0L3NyYy9saWIvYnV0dG9uLXRvZ2dsZS1pbnB1dC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBRTFHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBdUIzRCxNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7Z0hBQXZCLHVCQUF1QixpQkFSaEMsMEJBQTBCO1lBQzFCLHlCQUF5QixhQVp6QixZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsb0JBQW9CO1lBQ3BCLGdCQUFnQixhQU9oQiwwQkFBMEI7WUFDMUIseUJBQXlCO2dIQUdoQix1QkFBdUIsWUFuQmhDLFlBQVk7WUFDWixXQUFXO1lBQ1gsYUFBYTtZQUNiLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQixvQkFBb0I7WUFDcEIsZ0JBQWdCOzs0RkFXUCx1QkFBdUI7a0JBckJuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3FCQUNqQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osMEJBQTBCO3dCQUMxQix5QkFBeUI7cUJBQzFCO29CQUNELE9BQU8sRUFBRTt3QkFDUCwwQkFBMEI7d0JBQzFCLHlCQUF5QjtxQkFDMUI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJ1dHRvblRvZ2dsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9idXR0b24tdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Ub2dnbGVEZW1vQ29tcG9uZW50IH0gZnJvbSAnLi9idXR0b24tdG9nZ2xlLWlucHV0LWRlbW8vYnV0dG9uLXRvZ2dsZS1pbnB1dC1kZW1vLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJ1dHRvblRvZ2dsZUlucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvblRvZ2dsZURlbW9Db21wb25lbnRcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEJ1dHRvblRvZ2dsZUlucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvblRvZ2dsZURlbW9Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Ub2dnbGVJbnB1dE1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ export class ListItem {
2
+ constructor(value = '', label, icon, tootTip, selected, disabled) {
3
+ this.value = value;
4
+ this.label = label;
5
+ this.icon = icon;
6
+ this.tootTip = tootTip;
7
+ this.selected = selected;
8
+ this.disabled = disabled;
9
+ }
10
+ static adapt(item) {
11
+ return new ListItem(item?.value, (item?.label) ? item.label : (item?.icon) ? '' : item?.value, item?.icon, (item?.tootTip) ? item.tootTip : (item?.label) ? item.label : item?.value, item?.selected, item?.disabled);
12
+ }
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnV0dG9uLXRvZ2dsZS1pbnB1dC9zcmMvbGliL21vZGVscy9saXN0LWl0ZW0ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFPLFFBQVE7SUFFbkIsWUFDUyxRQUFRLEVBQUUsRUFDVixLQUFjLEVBQ2QsSUFBYSxFQUNiLE9BQWdCLEVBQ2hCLFFBQWlCLEVBQ2pCLFFBQWlCO1FBTGpCLFVBQUssR0FBTCxLQUFLLENBQUs7UUFDVixVQUFLLEdBQUwsS0FBSyxDQUFTO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBUztRQUNiLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFTO0lBQ3ZCLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVU7UUFFckIsT0FBTyxJQUFJLFFBQVEsQ0FDakIsSUFBSSxFQUFFLEtBQUssRUFDWCxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFDNUQsSUFBSSxFQUFFLElBQUksRUFDVixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQ3pFLElBQUksRUFBRSxRQUFRLEVBQ2QsSUFBSSxFQUFFLFFBQVEsQ0FDZixDQUFBO0lBRUgsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBMaXN0SXRlbUludGVyZmFjZSB7XG4gIHZhbHVlOiBhbnlcbiAgbGFiZWw/OiBzdHJpbmdcbiAgaWNvbj86IHN0cmluZ1xuICB0b290VGlwPzogc3RyaW5nXG4gIHNlbGVjdGVkPzogc3RyaW5nXG4gIGRpc2FibGVkPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBpbXBsZW1lbnRzIExpc3RJdGVtSW50ZXJmYWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmFsdWUgPSAnJyxcbiAgICBwdWJsaWMgbGFiZWw/OiBzdHJpbmcsXG4gICAgcHVibGljIGljb24/OiBzdHJpbmcsXG4gICAgcHVibGljIHRvb3RUaXA/OiBzdHJpbmcsXG4gICAgcHVibGljIHNlbGVjdGVkPzogc3RyaW5nLFxuICAgIHB1YmxpYyBkaXNhYmxlZD86IHN0cmluZyxcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogTGlzdEl0ZW0ge1xuXG4gICAgcmV0dXJuIG5ldyBMaXN0SXRlbShcbiAgICAgIGl0ZW0/LnZhbHVlLFxuICAgICAgKGl0ZW0/LmxhYmVsKSA/IGl0ZW0ubGFiZWwgOiAoaXRlbT8uaWNvbikgPyAnJyA6IGl0ZW0/LnZhbHVlLFxuICAgICAgaXRlbT8uaWNvbixcbiAgICAgIChpdGVtPy50b290VGlwKSA/IGl0ZW0udG9vdFRpcCA6IChpdGVtPy5sYWJlbCkgPyBpdGVtLmxhYmVsIDogaXRlbT8udmFsdWUsXG4gICAgICBpdGVtPy5zZWxlY3RlZCxcbiAgICAgIGl0ZW0/LmRpc2FibGVkLFxuICAgIClcblxuICB9XG5cbn1cblxuXG4iXX0=
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API Surface of button-toggle-input
3
+ */
4
+ export * from './lib/button-toggle-input-demo/button-toggle-input-demo.component';
5
+ export * from './lib/button-toggle-input.module';
6
+ export * from './lib/button-toggle-input.component';
7
+ export * from './lib/models/list-item.model';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J1dHRvbi10b2dnbGUtaW5wdXQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLG1FQUFtRSxDQUFDO0FBRWxGLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUVwRCxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBidXR0b24tdG9nZ2xlLWlucHV0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLXRvZ2dsZS1pbnB1dC1kZW1vL2J1dHRvbi10b2dnbGUtaW5wdXQtZGVtby5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24tdG9nZ2xlLWlucHV0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24tdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9saXN0LWl0ZW0ubW9kZWwnO1xuIl19
@@ -0,0 +1,321 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, forwardRef, Component, Input, ChangeDetectionStrategy, NgModule } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { FormBuilder, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
5
+ import * as i2$1 from '@angular/material/button';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import * as i5 from '@angular/material/button-toggle';
8
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
9
+ import * as i4$1 from '@angular/material/slide-toggle';
10
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
11
+ import * as i5$1 from '@angular/material/divider';
12
+ import { MatDividerModule } from '@angular/material/divider';
13
+ import { Subscription } from 'rxjs';
14
+ import * as i1 from '@angular/common';
15
+ import { CommonModule } from '@angular/common';
16
+ import * as i3 from '@angular/material/icon';
17
+ import { MatIconModule } from '@angular/material/icon';
18
+ import * as i4 from '@angular/material/tooltip';
19
+ import { MatTooltipModule } from '@angular/material/tooltip';
20
+
21
+ class ListItem {
22
+ constructor(value = '', label, icon, tootTip, selected, disabled) {
23
+ this.value = value;
24
+ this.label = label;
25
+ this.icon = icon;
26
+ this.tootTip = tootTip;
27
+ this.selected = selected;
28
+ this.disabled = disabled;
29
+ }
30
+ static adapt(item) {
31
+ return new ListItem(item?.value, (item?.label) ? item.label : (item?.icon) ? '' : item?.value, item?.icon, (item?.tootTip) ? item.tootTip : (item?.label) ? item.label : item?.value, item?.selected, item?.disabled);
32
+ }
33
+ }
34
+
35
+ class ButtonToggleInputComponent {
36
+ set noBorder(value) {
37
+ this._noBorder = value !== null && `${value}` !== 'false';
38
+ }
39
+ get noBorder() {
40
+ return this._noBorder;
41
+ }
42
+ set iconPrefix(value) {
43
+ this._iconPrefix = (value !== undefined) ? value : false;
44
+ }
45
+ get iconPrefix() {
46
+ return this._iconPrefix;
47
+ }
48
+ set iconSuffix(value) {
49
+ this._iconSuffix = (value !== undefined) ? value : false;
50
+ this.iconPrefix = !this.iconSuffix;
51
+ }
52
+ get iconSuffix() {
53
+ return this._iconSuffix;
54
+ }
55
+ set fullWidth(value) {
56
+ this._fullWidth = value !== null && `${value}` !== 'false';
57
+ }
58
+ get fullWidth() {
59
+ return this._fullWidth;
60
+ }
61
+ set data(value) {
62
+ const isString = this.isArrayOfStrings(value);
63
+ this._data = (isString) ? value.map(item => ListItem.adapt({ value: item, label: item })) : value.map(item => ListItem.adapt(item));
64
+ this.hasLabels = this.data.some(item => item['label']);
65
+ this.hasIcons = this.data.some((item) => item["icon"]);
66
+ }
67
+ get selected() {
68
+ return this.data.filter(item => item.selected).map(item => item.value);
69
+ }
70
+ get hasSelected() {
71
+ return (this.selected.length > 0);
72
+ }
73
+ get data() {
74
+ return this._data;
75
+ }
76
+ constructor() {
77
+ this.multiple = false;
78
+ this.toolTips = false;
79
+ this.toolTipPosition = 'above';
80
+ this.toolTipShowDelay = 1;
81
+ this.color = "#333333";
82
+ this.lightColor = "white";
83
+ this.darkColor = "black";
84
+ this._noBorder = false;
85
+ this._iconPrefix = true;
86
+ this._iconSuffix = false;
87
+ this._fullWidth = false;
88
+ this.formInitialized = false;
89
+ this.isArrayOfStrings = (arr) => {
90
+ const isArray = Array.isArray(arr) && arr.every(item => typeof item === 'string');
91
+ return (arr.length > 0) ? isArray : false;
92
+ };
93
+ this.hasLabels = false;
94
+ this.hasIcons = false;
95
+ this._data = [];
96
+ this.subscription = new Subscription();
97
+ this.sample = "orange";
98
+ this.test = 'red';
99
+ this.fb = inject(FormBuilder);
100
+ this.display = this.fb.control(null);
101
+ this.disabled = false;
102
+ this.onChange = () => { };
103
+ this.onTouch = () => { };
104
+ }
105
+ ngOnInit() {
106
+ this.subscription.add(this.display.valueChanges.subscribe(data => this.onChange(data)));
107
+ }
108
+ writeValue(value) {
109
+ if (!this.formInitialized) {
110
+ this.display.patchValue(this.selected, { emitEvent: false });
111
+ }
112
+ else {
113
+ const valuePatch = (value) ? (this.multiple) ? value : value[0] : null;
114
+ this.display.patchValue(valuePatch, { emitEvent: false });
115
+ }
116
+ this.formInitialized = true;
117
+ }
118
+ registerOnChange(fn) {
119
+ this.onChange = fn;
120
+ }
121
+ registerOnTouched(fn) {
122
+ this.onTouch = fn;
123
+ }
124
+ setDisabledState(isDisabled) {
125
+ this.disabled = isDisabled;
126
+ if (this.disabled) {
127
+ this.display.disable();
128
+ }
129
+ else {
130
+ this.display.enable();
131
+ }
132
+ }
133
+ ngOnDestroy() {
134
+ this.subscription.unsubscribe();
135
+ }
136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ButtonToggleInputComponent, selector: "app-button-toggle-input", inputs: { multiple: "multiple", toolTips: "toolTips", toolTipPosition: "toolTipPosition", toolTipShowDelay: "toolTipShowDelay", color: "color", lightColor: "lightColor", darkColor: "darkColor", noBorder: "noBorder", iconPrefix: "iconPrefix", iconSuffix: "iconSuffix", fullWidth: "fullWidth", data: "data" }, providers: [
138
+ {
139
+ provide: NG_VALUE_ACCESSOR,
140
+ useExisting: forwardRef(() => ButtonToggleInputComponent),
141
+ multi: true
142
+ }
143
+ ], ngImport: i0, template: "<mat-button-toggle-group\n style=\"height: 44px;\"\n [class.stretch]=\"fullWidth\"\n [style.background-color]=\"(noBorder) ? '' : 'white'\"\n [style.border-radius]=\"(noBorder) ? 'none' : '5rem'\"\n [style.border]=\"(noBorder) ? 'none' : ''\"\n [formControl]=\"display\"\n [multiple]=\"multiple\"\n>\n <ng-container *ngFor=\"let item of data;\">\n\n <mat-button-toggle\n [disableRipple]=\"true\"\n color=\"primary\"\n style=\"border-radius: 5rem;\"\n [style.flex]=\"(fullWidth) ? '1' : ''\"\n [style.opacity]=\"disabled ? '0.3' : ''\"\n [style.padding-left]=\"(hasLabels && !fullWidth) ? '.5rem' : ''\"\n [style.padding-right]=\"(hasLabels && !fullWidth)? '.5rem' : ''\"\n [value]=\"item.value\"\n [matTooltip]=\"(toolTips) ? item.tootTip : ''\"\n [matTooltipPosition]=\"toolTipPosition\"\n [matTooltipShowDelay]=\"toolTipShowDelay * 1000\"\n [disabled]=\"item.disabled\"\n >\n <div\n style=\"display: flex; gap: 0.5rem; padding-top: 0.25rem\"\n [style.padding-top]=\"iconSuffix && (hasIcons && hasLabels) ? '' : '.25rem'\">\n <div class=\"icon\" *ngIf=\"hasIcons && iconPrefix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n\n <div class=\"overflow-content\" *ngIf=\"item.label !== ''\">{{ item.label }}</div>\n\n <div class=\"icon\" *ngIf=\"hasIcons && iconSuffix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n </div>\n\n </mat-button-toggle>\n\n </ng-container>\n</mat-button-toggle-group>\n", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-button-toggle-checked{background-color:#333!important;color:#fff!important;transition:all .2s ease;font-weight:600}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-label-content{line-height:32px!important}.mat-checkbox span.mat-checkbox-ripple{display:none}mat-button-toggle{display:flex;align-items:center;justify-content:center;text-align:center}mat-button-toggle .overflow-content{display:flex;align-items:center;justify-content:center;white-space:normal;word-wrap:break-word;line-height:1.2rem;font-size:1rem}.stretch{display:flex}.icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }] }); }
144
+ }
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputComponent, decorators: [{
146
+ type: Component,
147
+ args: [{ selector: 'app-button-toggle-input', providers: [
148
+ {
149
+ provide: NG_VALUE_ACCESSOR,
150
+ useExisting: forwardRef(() => ButtonToggleInputComponent),
151
+ multi: true
152
+ }
153
+ ], template: "<mat-button-toggle-group\n style=\"height: 44px;\"\n [class.stretch]=\"fullWidth\"\n [style.background-color]=\"(noBorder) ? '' : 'white'\"\n [style.border-radius]=\"(noBorder) ? 'none' : '5rem'\"\n [style.border]=\"(noBorder) ? 'none' : ''\"\n [formControl]=\"display\"\n [multiple]=\"multiple\"\n>\n <ng-container *ngFor=\"let item of data;\">\n\n <mat-button-toggle\n [disableRipple]=\"true\"\n color=\"primary\"\n style=\"border-radius: 5rem;\"\n [style.flex]=\"(fullWidth) ? '1' : ''\"\n [style.opacity]=\"disabled ? '0.3' : ''\"\n [style.padding-left]=\"(hasLabels && !fullWidth) ? '.5rem' : ''\"\n [style.padding-right]=\"(hasLabels && !fullWidth)? '.5rem' : ''\"\n [value]=\"item.value\"\n [matTooltip]=\"(toolTips) ? item.tootTip : ''\"\n [matTooltipPosition]=\"toolTipPosition\"\n [matTooltipShowDelay]=\"toolTipShowDelay * 1000\"\n [disabled]=\"item.disabled\"\n >\n <div\n style=\"display: flex; gap: 0.5rem; padding-top: 0.25rem\"\n [style.padding-top]=\"iconSuffix && (hasIcons && hasLabels) ? '' : '.25rem'\">\n <div class=\"icon\" *ngIf=\"hasIcons && iconPrefix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n\n <div class=\"overflow-content\" *ngIf=\"item.label !== ''\">{{ item.label }}</div>\n\n <div class=\"icon\" *ngIf=\"hasIcons && iconSuffix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n </div>\n\n </mat-button-toggle>\n\n </ng-container>\n</mat-button-toggle-group>\n", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-button-toggle-checked{background-color:#333!important;color:#fff!important;transition:all .2s ease;font-weight:600}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{border:none!important;white-space:pre-wrap!important}.mat-button-toggle-label-content{line-height:32px!important}.mat-checkbox span.mat-checkbox-ripple{display:none}mat-button-toggle{display:flex;align-items:center;justify-content:center;text-align:center}mat-button-toggle .overflow-content{display:flex;align-items:center;justify-content:center;white-space:normal;word-wrap:break-word;line-height:1.2rem;font-size:1rem}.stretch{display:flex}.icon{display:flex;align-items:center}\n"] }]
154
+ }], ctorParameters: function () { return []; }, propDecorators: { multiple: [{
155
+ type: Input
156
+ }], toolTips: [{
157
+ type: Input
158
+ }], toolTipPosition: [{
159
+ type: Input
160
+ }], toolTipShowDelay: [{
161
+ type: Input
162
+ }], color: [{
163
+ type: Input
164
+ }], lightColor: [{
165
+ type: Input
166
+ }], darkColor: [{
167
+ type: Input
168
+ }], noBorder: [{
169
+ type: Input
170
+ }], iconPrefix: [{
171
+ type: Input
172
+ }], iconSuffix: [{
173
+ type: Input
174
+ }], fullWidth: [{
175
+ type: Input
176
+ }], data: [{
177
+ type: Input
178
+ }] } });
179
+
180
+ class ButtonToggleDemoComponent {
181
+ constructor() {
182
+ this.fb = inject(FormBuilder);
183
+ this.type = 'icons';
184
+ this.data_1 = [
185
+ { id: 1, icon: 'home', value: 'option_1', disabled: true },
186
+ { id: 2, icon: 'layers', value: 'option_2' },
187
+ { id: 3, icon: 'add', value: 'option_3' },
188
+ { id: 3, icon: 'build', value: 'option_4', disabled: true },
189
+ { id: 3, icon: 'list', value: 'option_5', selected: true },
190
+ { id: 3, icon: 'business', value: 'option_6' },
191
+ ];
192
+ this.data_2 = [
193
+ { id: 1, label: 'Home', value: 'option_1', disabled: true },
194
+ { id: 2, label: 'Samples', value: 'option_2' },
195
+ { id: 3, label: 'Demos 1 is here', value: 'option_3' },
196
+ { id: 3, label: 'Demos 2A', value: 'option_4', disabled: true },
197
+ { id: 3, label: 'Demos 2B', value: 'option_5', selected: true },
198
+ { id: 3, label: 'Demos 3', value: 'option_6' },
199
+ ];
200
+ this.data_3 = [
201
+ { id: 1, label: 'Home', icon: 'home', value: 'option_1', disabled: true },
202
+ { id: 2, label: 'Samples', icon: 'layers', value: 'option_2' },
203
+ { id: 3, label: 'Demos 1', icon: 'add', value: 'option_3' },
204
+ { id: 3, label: 'Demos 2A', icon: 'network', value: 'option_4', disabled: true },
205
+ { id: 3, label: 'Demos 2B', icon: 'list', value: 'option_5', selected: true },
206
+ { id: 3, label: 'Demos 3', icon: 'business', value: 'option_6' },
207
+ ];
208
+ this.data = this.data_1;
209
+ this.selectionControl_1 = this.fb.control(null);
210
+ this.selectionControl_2 = this.fb.control(null);
211
+ this.changeDetection_1 = this.fb.control(true);
212
+ this.changeDetection_2 = this.fb.control(false);
213
+ }
214
+ ngOnInit() {
215
+ this.selectionControl_1.valueChanges.subscribe(data => {
216
+ if (this.changeDetection_1.value)
217
+ console.log('CHANGE:', data);
218
+ });
219
+ this.selectionControl_2.valueChanges.subscribe(data => {
220
+ if (this.changeDetection_2.value)
221
+ console.log('CHANGE:', data);
222
+ });
223
+ }
224
+ onPerformPatch() {
225
+ this.selectionControl_1.patchValue(['option_3']);
226
+ this.selectionControl_2.patchValue(['option_3', 'option_5']);
227
+ }
228
+ onChangeDataType(type) {
229
+ if (type === 'icons') {
230
+ this.data = this.data_1;
231
+ }
232
+ else if (type === 'labels') {
233
+ this.data = this.data_2;
234
+ }
235
+ else {
236
+ this.data = this.data_3;
237
+ }
238
+ }
239
+ // DISABLE
240
+ onDisabled_1(disable) {
241
+ if (disable) {
242
+ this.selectionControl_1.disable();
243
+ }
244
+ else {
245
+ this.selectionControl_1.enable();
246
+ }
247
+ }
248
+ onDisabled_2(disable) {
249
+ if (disable) {
250
+ this.selectionControl_2.disable();
251
+ }
252
+ else {
253
+ this.selectionControl_2.enable();
254
+ }
255
+ }
256
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
257
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ButtonToggleDemoComponent, selector: "app-button-toggle-demo", ngImport: i0, template: "<h1 style=\"flex: 1;\">Button Toggle Input</h1>\n\n\n<div style=\"display: flex; flex-direction: column; margin-top: 1rem;\">\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"icons\" checked=\"true\">Icons</mat-button-toggle>\n <mat-button-toggle value=\"labels\" checked=\"false\">Labels</mat-button-toggle>\n <mat-button-toggle value=\"combo\" checked=\"false\">Combo</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <!-- MAIN DEMOS -->\n <div style=\"margin: 1rem; margin-right: 0;\">\n <h3 style=\"margin-bottom: 0;\">Button Toggle Selection - {{ varTypes.value | uppercase }}</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <app-button-toggle-input\n [formControl]=\"selectionControl_1\"\n [data]=\"data\"\n [toolTips]=\"tooltip1.checked\"\n [fullWidth]=\"width1.value\"\n [noBorder]=\"!border1.checked\"\n [iconSuffix]=\"suffix1.checked\"\n ></app-button-toggle-input>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix1>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip1>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border1 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Single Selection<br>\n ToolTips<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width1=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n </div>\n\n\n <div style=\"margin: 1rem; margin-right: 0;\">\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n\n <app-button-toggle-input\n [formControl]=\"selectionControl_2\"\n [data]=\"data\"\n [toolTips]=\"tooltip2.checked\"\n toolTipPosition=\"above\"\n [multiple]=\"true\"\n [fullWidth]=\"width2.value\"\n [noBorder]=\"!border2.checked\"\n [iconSuffix]=\"suffix2.checked\"\n ></app-button-toggle-input>\n\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix2>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip2>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border2 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Multiple Selection<br>\n ToolTips<br>\n ToolTip Position ABOVE<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width2=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i4$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i5$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ButtonToggleInputComponent, selector: "app-button-toggle-input", inputs: ["multiple", "toolTips", "toolTipPosition", "toolTipShowDelay", "color", "lightColor", "darkColor", "noBorder", "iconPrefix", "iconSuffix", "fullWidth", "data"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleDemoComponent, decorators: [{
260
+ type: Component,
261
+ args: [{ selector: 'app-button-toggle-demo', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h1 style=\"flex: 1;\">Button Toggle Input</h1>\n\n\n<div style=\"display: flex; flex-direction: column; margin-top: 1rem;\">\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"icons\" checked=\"true\">Icons</mat-button-toggle>\n <mat-button-toggle value=\"labels\" checked=\"false\">Labels</mat-button-toggle>\n <mat-button-toggle value=\"combo\" checked=\"false\">Combo</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <!-- MAIN DEMOS -->\n <div style=\"margin: 1rem; margin-right: 0;\">\n <h3 style=\"margin-bottom: 0;\">Button Toggle Selection - {{ varTypes.value | uppercase }}</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <app-button-toggle-input\n [formControl]=\"selectionControl_1\"\n [data]=\"data\"\n [toolTips]=\"tooltip1.checked\"\n [fullWidth]=\"width1.value\"\n [noBorder]=\"!border1.checked\"\n [iconSuffix]=\"suffix1.checked\"\n ></app-button-toggle-input>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix1>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip1>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border1 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Single Selection<br>\n ToolTips<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width1=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n </div>\n\n\n <div style=\"margin: 1rem; margin-right: 0;\">\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n\n <app-button-toggle-input\n [formControl]=\"selectionControl_2\"\n [data]=\"data\"\n [toolTips]=\"tooltip2.checked\"\n toolTipPosition=\"above\"\n [multiple]=\"true\"\n [fullWidth]=\"width2.value\"\n [noBorder]=\"!border2.checked\"\n [iconSuffix]=\"suffix2.checked\"\n ></app-button-toggle-input>\n\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix2>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip2>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border2 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Multiple Selection<br>\n ToolTips<br>\n ToolTip Position ABOVE<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width2=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n" }]
262
+ }], ctorParameters: function () { return []; } });
263
+
264
+ class ButtonToggleInputModule {
265
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
266
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, declarations: [ButtonToggleInputComponent,
267
+ ButtonToggleDemoComponent], imports: [CommonModule,
268
+ FormsModule,
269
+ MatIconModule,
270
+ MatButtonModule,
271
+ MatTooltipModule,
272
+ ReactiveFormsModule,
273
+ MatButtonToggleModule,
274
+ MatSlideToggleModule,
275
+ MatDividerModule], exports: [ButtonToggleInputComponent,
276
+ ButtonToggleDemoComponent] }); }
277
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, imports: [CommonModule,
278
+ FormsModule,
279
+ MatIconModule,
280
+ MatButtonModule,
281
+ MatTooltipModule,
282
+ ReactiveFormsModule,
283
+ MatButtonToggleModule,
284
+ MatSlideToggleModule,
285
+ MatDividerModule] }); }
286
+ }
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonToggleInputModule, decorators: [{
288
+ type: NgModule,
289
+ args: [{
290
+ imports: [
291
+ CommonModule,
292
+ FormsModule,
293
+ MatIconModule,
294
+ MatButtonModule,
295
+ MatTooltipModule,
296
+ ReactiveFormsModule,
297
+ MatButtonToggleModule,
298
+ MatSlideToggleModule,
299
+ MatDividerModule,
300
+ ],
301
+ declarations: [
302
+ ButtonToggleInputComponent,
303
+ ButtonToggleDemoComponent
304
+ ],
305
+ exports: [
306
+ ButtonToggleInputComponent,
307
+ ButtonToggleDemoComponent
308
+ ]
309
+ }]
310
+ }] });
311
+
312
+ /*
313
+ * Public API Surface of button-toggle-input
314
+ */
315
+
316
+ /**
317
+ * Generated bundle index. Do not edit.
318
+ */
319
+
320
+ export { ButtonToggleDemoComponent, ButtonToggleInputComponent, ButtonToggleInputModule, ListItem };
321
+ //# sourceMappingURL=button-toggle-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-toggle-input.mjs","sources":["../../../projects/button-toggle-input/src/lib/models/list-item.model.ts","../../../projects/button-toggle-input/src/lib/button-toggle-input.component.ts","../../../projects/button-toggle-input/src/lib/button-toggle-input.component.html","../../../projects/button-toggle-input/src/lib/button-toggle-input-demo/button-toggle-input-demo.component.ts","../../../projects/button-toggle-input/src/lib/button-toggle-input-demo/button-toggle-input-demo.component.html","../../../projects/button-toggle-input/src/lib/button-toggle-input.module.ts","../../../projects/button-toggle-input/src/public-api.ts","../../../projects/button-toggle-input/src/button-toggle-input.ts"],"sourcesContent":["export interface ListItemInterface {\n value: any\n label?: string\n icon?: string\n tootTip?: string\n selected?: string\n disabled?: string\n}\n\nexport class ListItem implements ListItemInterface {\n\n constructor(\n public value = '',\n public label?: string,\n public icon?: string,\n public tootTip?: string,\n public selected?: string,\n public disabled?: string,\n ) {}\n\n static adapt(item?: any): ListItem {\n\n return new ListItem(\n item?.value,\n (item?.label) ? item.label : (item?.icon) ? '' : item?.value,\n item?.icon,\n (item?.tootTip) ? item.tootTip : (item?.label) ? item.label : item?.value,\n item?.selected,\n item?.disabled,\n )\n\n }\n\n}\n\n\n","import { Component, Input, OnDestroy, OnInit, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ListItem } from './models/list-item.model';\nimport { Subscription } from 'rxjs';\nimport { TooltipPosition } from '@angular/material/tooltip';\n\n@Component({\n selector: 'app-button-toggle-input',\n templateUrl: './button-toggle-input.component.html',\n styleUrls: ['./button-toggle-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ButtonToggleInputComponent),\n multi: true\n }\n ]\n})\nexport class ButtonToggleInputComponent implements OnInit, OnDestroy, ControlValueAccessor {\n\n @Input() multiple = false\n\n @Input() toolTips = false\n @Input() toolTipPosition: TooltipPosition = 'above'\n @Input() toolTipShowDelay = 1\n\n @Input() color = \"#333333\";\n\n @Input() lightColor = \"white\";\n @Input() darkColor = \"black\";\n\n private _noBorder: boolean = false;\n\n @Input()\n set noBorder(value: any) {\n this._noBorder = value !== null && `${value}` !== 'false';\n }\n\n get noBorder(): boolean {\n return this._noBorder;\n }\n\n private _iconPrefix: boolean = true;\n\n @Input()\n set iconPrefix(value: any) {\n this._iconPrefix = (value !== undefined) ? value : false\n }\n\n get iconPrefix(): boolean {\n return this._iconPrefix\n }\n\n private _iconSuffix: boolean = false;\n\n @Input()\n set iconSuffix(value: any) {\n this._iconSuffix = (value !== undefined) ? value : false\n this.iconPrefix = !this.iconSuffix\n }\n\n get iconSuffix(): boolean {\n return this._iconSuffix\n }\n\n private _fullWidth: boolean = false;\n\n @Input()\n set fullWidth(value: any) {\n this._fullWidth = value !== null && `${value}` !== 'false';\n }\n\n get fullWidth(): boolean {\n return this._fullWidth\n }\n\n formInitialized = false\n\n isArrayOfStrings = (arr: any[]) => {\n const isArray = Array.isArray(arr) && arr.every(item => typeof item === 'string');\n return (arr.length > 0) ? isArray : false\n }\n\n hasLabels = false\n hasIcons = false\n\n _data: ListItem[] = []\n @Input() set data(value: any[]) {\n\n const isString = this.isArrayOfStrings(value);\n this._data = (isString) ? value.map(item => ListItem.adapt({ value: item, label: item })) : value.map(item => ListItem.adapt(item))\n\n this.hasLabels = this.data.some(item => item['label'])\n this.hasIcons = this.data.some((item) => item[\"icon\"])\n\n }\n\n subscription = new Subscription()\n\n get selected() {\n return this.data.filter(item => item.selected).map(item => item.value)\n }\n\n get hasSelected() {\n return (this.selected.length > 0)\n }\n\n get data() {\n return this._data\n }\n\n sample = \"orange\"\n test = 'red'\n\n fb = inject(FormBuilder)\n\n display = this.fb.control<string|string[]|null>(null)\n\n disabled = false\n\n onChange: any = () => {}\n onTouch: any = () => {}\n\n constructor() { }\n\n ngOnInit() {\n\n this.subscription.add(\n this.display.valueChanges.subscribe(data => this.onChange(data))\n )\n\n }\n\n writeValue(value: string[]){\n\n if(!this.formInitialized) {\n this.display.patchValue(this.selected, { emitEvent: false })\n } else {\n const valuePatch = (value) ? (this.multiple) ? value : value[0] : null\n this.display.patchValue(valuePatch, { emitEvent: false })\n }\n\n this.formInitialized = true\n\n }\n\n registerOnChange(fn: any){\n this.onChange = fn\n }\n\n registerOnTouched(fn: any){\n this.onTouch = fn\n }\n\n setDisabledState(isDisabled: boolean) {\n\n this.disabled = isDisabled\n\n if(this.disabled) {\n this.display.disable()\n } else {\n this.display.enable()\n }\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe()\n }\n\n}\n","<mat-button-toggle-group\n style=\"height: 44px;\"\n [class.stretch]=\"fullWidth\"\n [style.background-color]=\"(noBorder) ? '' : 'white'\"\n [style.border-radius]=\"(noBorder) ? 'none' : '5rem'\"\n [style.border]=\"(noBorder) ? 'none' : ''\"\n [formControl]=\"display\"\n [multiple]=\"multiple\"\n>\n <ng-container *ngFor=\"let item of data;\">\n\n <mat-button-toggle\n [disableRipple]=\"true\"\n color=\"primary\"\n style=\"border-radius: 5rem;\"\n [style.flex]=\"(fullWidth) ? '1' : ''\"\n [style.opacity]=\"disabled ? '0.3' : ''\"\n [style.padding-left]=\"(hasLabels && !fullWidth) ? '.5rem' : ''\"\n [style.padding-right]=\"(hasLabels && !fullWidth)? '.5rem' : ''\"\n [value]=\"item.value\"\n [matTooltip]=\"(toolTips) ? item.tootTip : ''\"\n [matTooltipPosition]=\"toolTipPosition\"\n [matTooltipShowDelay]=\"toolTipShowDelay * 1000\"\n [disabled]=\"item.disabled\"\n >\n <div\n style=\"display: flex; gap: 0.5rem; padding-top: 0.25rem\"\n [style.padding-top]=\"iconSuffix && (hasIcons && hasLabels) ? '' : '.25rem'\">\n <div class=\"icon\" *ngIf=\"hasIcons && iconPrefix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n\n <div class=\"overflow-content\" *ngIf=\"item.label !== ''\">{{ item.label }}</div>\n\n <div class=\"icon\" *ngIf=\"hasIcons && iconSuffix\">\n <mat-icon>{{item.icon}}</mat-icon>\n </div>\n </div>\n\n </mat-button-toggle>\n\n </ng-container>\n</mat-button-toggle-group>\n","import { ChangeDetectionStrategy, Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\n@Component({\n selector: 'app-button-toggle-demo',\n templateUrl: './button-toggle-input-demo.component.html',\n styleUrls: ['./button-toggle-input-demo.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonToggleDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n\n type = 'icons'\n\n data_1 = [\n {id: 1, icon: 'home', value: 'option_1', disabled: true },\n {id: 2, icon: 'layers', value: 'option_2'},\n {id: 3, icon: 'add', value: 'option_3' },\n {id: 3, icon: 'build', value: 'option_4', disabled: true },\n {id: 3, icon: 'list', value: 'option_5', selected: true },\n {id: 3, icon: 'business', value: 'option_6'},\n ]\n\n data_2 = [\n {id: 1, label: 'Home', value: 'option_1', disabled: true },\n {id: 2, label: 'Samples', value: 'option_2' },\n {id: 3, label: 'Demos 1 is here', value: 'option_3' },\n {id: 3, label: 'Demos 2A', value: 'option_4', disabled: true },\n {id: 3, label: 'Demos 2B', value: 'option_5', selected: true },\n {id: 3, label: 'Demos 3', value: 'option_6' },\n ]\n\n data_3 = [\n {id: 1, label: 'Home', icon: 'home', value: 'option_1', disabled: true },\n {id: 2, label: 'Samples', icon: 'layers', value: 'option_2'},\n {id: 3, label: 'Demos 1', icon: 'add', value: 'option_3' },\n {id: 3, label: 'Demos 2A', icon: 'network', value: 'option_4', disabled: true },\n {id: 3, label: 'Demos 2B', icon: 'list', value: 'option_5', selected: true },\n {id: 3, label: 'Demos 3', icon: 'business', value: 'option_6'},\n ]\n\n data: any[] = this.data_1\n\n selectionControl_1 = this.fb.control<any>(null)\n selectionControl_2 = this.fb.control<any>(null)\n\n changeDetection_1 = this.fb.control(true)\n changeDetection_2 = this.fb.control(false)\n\n constructor() { }\n\n ngOnInit() {\n\n this.selectionControl_1.valueChanges.subscribe(data => {\n if(this.changeDetection_1.value) console.log('CHANGE:',data)\n })\n\n this.selectionControl_2.valueChanges.subscribe(data => {\n if(this.changeDetection_2.value) console.log('CHANGE:',data)\n })\n\n }\n\n onPerformPatch() {\n this.selectionControl_1.patchValue(['option_3'])\n this.selectionControl_2.patchValue(['option_3', 'option_5'])\n }\n\n onChangeDataType(type: string) {\n if(type === 'icons') {\n this.data = this.data_1\n } else if(type === 'labels') {\n this.data = this.data_2\n } else {\n this.data = this.data_3\n }\n }\n\n // DISABLE\n onDisabled_1(disable: boolean) {\n\n if(disable) {\n this.selectionControl_1.disable()\n } else {\n this.selectionControl_1.enable()\n }\n\n }\n\n onDisabled_2(disable: boolean) {\n\n if(disable) {\n this.selectionControl_2.disable()\n } else {\n this.selectionControl_2.enable()\n }\n\n }\n\n}\n","<h1 style=\"flex: 1;\">Button Toggle Input</h1>\n\n\n<div style=\"display: flex; flex-direction: column; margin-top: 1rem;\">\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"icons\" checked=\"true\">Icons</mat-button-toggle>\n <mat-button-toggle value=\"labels\" checked=\"false\">Labels</mat-button-toggle>\n <mat-button-toggle value=\"combo\" checked=\"false\">Combo</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <!-- MAIN DEMOS -->\n <div style=\"margin: 1rem; margin-right: 0;\">\n <h3 style=\"margin-bottom: 0;\">Button Toggle Selection - {{ varTypes.value | uppercase }}</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <app-button-toggle-input\n [formControl]=\"selectionControl_1\"\n [data]=\"data\"\n [toolTips]=\"tooltip1.checked\"\n [fullWidth]=\"width1.value\"\n [noBorder]=\"!border1.checked\"\n [iconSuffix]=\"suffix1.checked\"\n ></app-button-toggle-input>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix1>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip1>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border1 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Single Selection<br>\n ToolTips<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width1=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n </div>\n\n\n <div style=\"margin: 1rem; margin-right: 0;\">\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n\n <app-button-toggle-input\n [formControl]=\"selectionControl_2\"\n [data]=\"data\"\n [toolTips]=\"tooltip2.checked\"\n toolTipPosition=\"above\"\n [multiple]=\"true\"\n [fullWidth]=\"width2.value\"\n [noBorder]=\"!border2.checked\"\n [iconSuffix]=\"suffix2.checked\"\n ></app-button-toggle-input>\n\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #suffix2>Icon Suffix</mat-slide-toggle>\n <mat-slide-toggle #tooltip2>ToolTip</mat-slide-toggle>\n <mat-slide-toggle #border2 checked=\"true\">Border</mat-slide-toggle>\n </div>\n\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <div>\n Multiple Selection<br>\n ToolTips<br>\n ToolTip Position ABOVE<br>\n </div>\n <span style=\"flex:1\"></span>\n <div>\n <mat-button-toggle-group #width2=\"matButtonToggleGroup\">\n <mat-button-toggle value=\"false\" checked=\"false\">Normal Width</mat-button-toggle>\n <mat-button-toggle value=\"true\" checked=\"true\">Full Width</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ButtonToggleInputComponent } from './button-toggle-input.component';\nimport { ButtonToggleDemoComponent } from './button-toggle-input-demo/button-toggle-input-demo.component';\n\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n ReactiveFormsModule,\n MatButtonToggleModule,\n MatSlideToggleModule,\n MatDividerModule,\n ],\n declarations: [\n ButtonToggleInputComponent,\n ButtonToggleDemoComponent\n ],\n exports: [\n ButtonToggleInputComponent,\n ButtonToggleDemoComponent\n ]\n})\nexport class ButtonToggleInputModule { }\n","/*\n * Public API Surface of button-toggle-input\n */\n\nexport * from './lib/button-toggle-input-demo/button-toggle-input-demo.component';\n\nexport * from './lib/button-toggle-input.module';\nexport * from './lib/button-toggle-input.component';\n\nexport * from './lib/models/list-item.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i6.ButtonToggleInputComponent","i7"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="button-toggle-input" />
5
+ export * from './public-api';
@@ -0,0 +1,80 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ButtonToggleDemoComponent implements OnInit {
5
+ fb: FormBuilder;
6
+ type: string;
7
+ data_1: ({
8
+ id: number;
9
+ icon: string;
10
+ value: string;
11
+ disabled: boolean;
12
+ selected?: undefined;
13
+ } | {
14
+ id: number;
15
+ icon: string;
16
+ value: string;
17
+ disabled?: undefined;
18
+ selected?: undefined;
19
+ } | {
20
+ id: number;
21
+ icon: string;
22
+ value: string;
23
+ selected: boolean;
24
+ disabled?: undefined;
25
+ })[];
26
+ data_2: ({
27
+ id: number;
28
+ label: string;
29
+ value: string;
30
+ disabled: boolean;
31
+ selected?: undefined;
32
+ } | {
33
+ id: number;
34
+ label: string;
35
+ value: string;
36
+ disabled?: undefined;
37
+ selected?: undefined;
38
+ } | {
39
+ id: number;
40
+ label: string;
41
+ value: string;
42
+ selected: boolean;
43
+ disabled?: undefined;
44
+ })[];
45
+ data_3: ({
46
+ id: number;
47
+ label: string;
48
+ icon: string;
49
+ value: string;
50
+ disabled: boolean;
51
+ selected?: undefined;
52
+ } | {
53
+ id: number;
54
+ label: string;
55
+ icon: string;
56
+ value: string;
57
+ disabled?: undefined;
58
+ selected?: undefined;
59
+ } | {
60
+ id: number;
61
+ label: string;
62
+ icon: string;
63
+ value: string;
64
+ selected: boolean;
65
+ disabled?: undefined;
66
+ })[];
67
+ data: any[];
68
+ selectionControl_1: import("@angular/forms").FormControl<any>;
69
+ selectionControl_2: import("@angular/forms").FormControl<any>;
70
+ changeDetection_1: import("@angular/forms").FormControl<boolean | null>;
71
+ changeDetection_2: import("@angular/forms").FormControl<boolean | null>;
72
+ constructor();
73
+ ngOnInit(): void;
74
+ onPerformPatch(): void;
75
+ onChangeDataType(type: string): void;
76
+ onDisabled_1(disable: boolean): void;
77
+ onDisabled_2(disable: boolean): void;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonToggleDemoComponent, never>;
79
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonToggleDemoComponent, "app-button-toggle-demo", never, {}, {}, never, never, false, never>;
80
+ }
@@ -0,0 +1,53 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { ControlValueAccessor, FormBuilder } from '@angular/forms';
3
+ import { ListItem } from './models/list-item.model';
4
+ import { Subscription } from 'rxjs';
5
+ import { TooltipPosition } from '@angular/material/tooltip';
6
+ import * as i0 from "@angular/core";
7
+ export declare class ButtonToggleInputComponent implements OnInit, OnDestroy, ControlValueAccessor {
8
+ multiple: boolean;
9
+ toolTips: boolean;
10
+ toolTipPosition: TooltipPosition;
11
+ toolTipShowDelay: number;
12
+ color: string;
13
+ lightColor: string;
14
+ darkColor: string;
15
+ private _noBorder;
16
+ set noBorder(value: any);
17
+ get noBorder(): boolean;
18
+ private _iconPrefix;
19
+ set iconPrefix(value: any);
20
+ get iconPrefix(): boolean;
21
+ private _iconSuffix;
22
+ set iconSuffix(value: any);
23
+ get iconSuffix(): boolean;
24
+ private _fullWidth;
25
+ set fullWidth(value: any);
26
+ get fullWidth(): boolean;
27
+ formInitialized: boolean;
28
+ isArrayOfStrings: (arr: any[]) => boolean;
29
+ hasLabels: boolean;
30
+ hasIcons: boolean;
31
+ _data: ListItem[];
32
+ set data(value: any[]);
33
+ subscription: Subscription;
34
+ get selected(): any[];
35
+ get hasSelected(): boolean;
36
+ get data(): any[];
37
+ sample: string;
38
+ test: string;
39
+ fb: FormBuilder;
40
+ display: import("@angular/forms").FormControl<string | string[] | null>;
41
+ disabled: boolean;
42
+ onChange: any;
43
+ onTouch: any;
44
+ constructor();
45
+ ngOnInit(): void;
46
+ writeValue(value: string[]): void;
47
+ registerOnChange(fn: any): void;
48
+ registerOnTouched(fn: any): void;
49
+ setDisabledState(isDisabled: boolean): void;
50
+ ngOnDestroy(): void;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonToggleInputComponent, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonToggleInputComponent, "app-button-toggle-input", never, { "multiple": { "alias": "multiple"; "required": false; }; "toolTips": { "alias": "toolTips"; "required": false; }; "toolTipPosition": { "alias": "toolTipPosition"; "required": false; }; "toolTipShowDelay": { "alias": "toolTipShowDelay"; "required": false; }; "color": { "alias": "color"; "required": false; }; "lightColor": { "alias": "lightColor"; "required": false; }; "darkColor": { "alias": "darkColor"; "required": false; }; "noBorder": { "alias": "noBorder"; "required": false; }; "iconPrefix": { "alias": "iconPrefix"; "required": false; }; "iconSuffix": { "alias": "iconSuffix"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, {}, never, never, false, never>;
53
+ }
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./button-toggle-input.component";
3
+ import * as i2 from "./button-toggle-input-demo/button-toggle-input-demo.component";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "@angular/forms";
6
+ import * as i5 from "@angular/material/icon";
7
+ import * as i6 from "@angular/material/button";
8
+ import * as i7 from "@angular/material/tooltip";
9
+ import * as i8 from "@angular/material/button-toggle";
10
+ import * as i9 from "@angular/material/slide-toggle";
11
+ import * as i10 from "@angular/material/divider";
12
+ export declare class ButtonToggleInputModule {
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonToggleInputModule, never>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ButtonToggleInputModule, [typeof i1.ButtonToggleInputComponent, typeof i2.ButtonToggleDemoComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.MatIconModule, typeof i6.MatButtonModule, typeof i7.MatTooltipModule, typeof i4.ReactiveFormsModule, typeof i8.MatButtonToggleModule, typeof i9.MatSlideToggleModule, typeof i10.MatDividerModule], [typeof i1.ButtonToggleInputComponent, typeof i2.ButtonToggleDemoComponent]>;
15
+ static ɵinj: i0.ɵɵInjectorDeclaration<ButtonToggleInputModule>;
16
+ }
@@ -0,0 +1,18 @@
1
+ export interface ListItemInterface {
2
+ value: any;
3
+ label?: string;
4
+ icon?: string;
5
+ tootTip?: string;
6
+ selected?: string;
7
+ disabled?: string;
8
+ }
9
+ export declare class ListItem implements ListItemInterface {
10
+ value: string;
11
+ label?: string | undefined;
12
+ icon?: string | undefined;
13
+ tootTip?: string | undefined;
14
+ selected?: string | undefined;
15
+ disabled?: string | undefined;
16
+ constructor(value?: string, label?: string | undefined, icon?: string | undefined, tootTip?: string | undefined, selected?: string | undefined, disabled?: string | undefined);
17
+ static adapt(item?: any): ListItem;
18
+ }
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "button-toggle-input",
3
+ "version": "15.0.3",
4
+ "peerDependencies": {
5
+ "@angular/common": "^15.2.0",
6
+ "@angular/core": "^15.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
13
+ "dest": "../../dist/button-toggle-input",
14
+ "lib": {
15
+ "entryFile": "src/public-api.ts"
16
+ },
17
+ "module": "fesm2022/button-toggle-input.mjs",
18
+ "typings": "index.d.ts",
19
+ "exports": {
20
+ "./package.json": {
21
+ "default": "./package.json"
22
+ },
23
+ ".": {
24
+ "types": "./index.d.ts",
25
+ "esm2022": "./esm2022/button-toggle-input.mjs",
26
+ "esm": "./esm2022/button-toggle-input.mjs",
27
+ "default": "./fesm2022/button-toggle-input.mjs"
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,4 @@
1
+ export * from './lib/button-toggle-input-demo/button-toggle-input-demo.component';
2
+ export * from './lib/button-toggle-input.module';
3
+ export * from './lib/button-toggle-input.component';
4
+ export * from './lib/models/list-item.model';