UNPKG

@tangential/input-widgets

Version:

Input Widgets with persistable, dynamic configuration.

159 lines (157 loc) 17.6 kB
import { ChangeDetectorRef, Component, EventEmitter, forwardRef, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { Hacks } from '@tangential/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/forms"; import * as i3 from "@angular/material/form-field"; import * as i4 from "@angular/material/input"; import * as i5 from "./checkbox-widget.component"; /** * Provider Expression that allows this widget to register as a ControlValueAccessor. * This allows it to support [(ngModel)]. * @docs-private */ export const TANJ_CHECKBOX_WIDGET_CONFIG_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxWidgetConfigureComponent), multi: true }; export class CheckboxWidgetConfigureChange { constructor(source, value) { this.source = source; this.value = value; } } export class CheckboxWidgetConfigureComponent { constructor(changeDetectorRef) { this.changeDetectorRef = changeDetectorRef; this.flex = ''; this.flexLayout = 'column'; this.flexLayoutAlign = 'start'; this.value = false; this.valueChange = new EventEmitter(false); this.labelPosition = 'before'; this.disabled = false; /** * Configuration Fields */ this.label = ''; this.labelChange = new EventEmitter(false); this.defaultValue = false; this.defaultValueChange = new EventEmitter(false); /* end Configuration Fields */ this.change = new EventEmitter(false); /** * Called when the spinner is blurred. Needed to properly implement ControlValueAccessor. * @docs-private */ this.onTouched = () => { }; this.controlValueAccessorChangeFn = (value) => { }; } ngOnInit() { Hacks.materialDesignPlaceholderText(this.changeDetectorRef); } emitChangeEvent(value, label) { this.controlValueAccessorChangeFn(this.value); this.change.emit(new CheckboxWidgetConfigureChange(this, this.value)); if (value) { this.valueChange.emit(this.value); this.defaultValueChange.emit(this.defaultValue); } if (label) { this.labelChange.emit(this.label); } } /** * Boilerplate / required for Angular * */ writeValue(value) { this.value = value; } registerOnChange(fn) { this.controlValueAccessorChangeFn = fn; } registerOnTouched(fn) { this.onTouched = fn; } /** * Sets the input's disabled state. Implemented as a part of ControlValueAccessor. * @param isDisabled Whether the input should be disabled. */ setDisabledState(isDisabled) { this.disabled = isDisabled; } } CheckboxWidgetConfigureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: CheckboxWidgetConfigureComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); CheckboxWidgetConfigureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: CheckboxWidgetConfigureComponent, selector: "tanj-checkbox-widget-configure", inputs: { value: "value", labelPosition: "labelPosition", disabled: "disabled", label: "label", defaultValue: "defaultValue" }, outputs: { valueChange: "valueChange", labelChange: "labelChange", defaultValueChange: "defaultValueChange", change: "change" }, host: { properties: { "attr.flex": "this.flex", "attr.layout": "this.flexLayout", "attr.layout-align": "this.flexLayoutAlign" } }, providers: [TANJ_CHECKBOX_WIDGET_CONFIG_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: `<!-- --> <div class="tanj-input-template tanj-mode-configure" flex layout="column" layout-align="start"> <mat-form-field dividerColor="accent"> <input matInput class="tanj-input" type="text" maxlength="50" placeholder="Enter a label for this input" (change)="emitChangeEvent(false, true)" [(ngModel)]="label"/> </mat-form-field> <ng-container *ngIf="label"> <tanj-checkbox-widget [(value)]="defaultValue" (valueChange)="value = defaultValue; emitChangeEvent(true, false)" [defaultValue]="defaultValue" label="Default Value" [labelPosition]="'before'"> </tanj-checkbox-widget> </ng-container> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.CheckboxWidgetComponent, selector: "tanj-checkbox-widget", inputs: ["value", "labelPosition", "disabled", "hideLabel", "onlyLabel", "label", "defaultValue"], outputs: ["valueChange", "change"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: CheckboxWidgetConfigureComponent, decorators: [{ type: Component, args: [{ selector: 'tanj-checkbox-widget-configure', template: `<!-- --> <div class="tanj-input-template tanj-mode-configure" flex layout="column" layout-align="start"> <mat-form-field dividerColor="accent"> <input matInput class="tanj-input" type="text" maxlength="50" placeholder="Enter a label for this input" (change)="emitChangeEvent(false, true)" [(ngModel)]="label"/> </mat-form-field> <ng-container *ngIf="label"> <tanj-checkbox-widget [(value)]="defaultValue" (valueChange)="value = defaultValue; emitChangeEvent(true, false)" [defaultValue]="defaultValue" label="Default Value" [labelPosition]="'before'"> </tanj-checkbox-widget> </ng-container> </div> `, providers: [TANJ_CHECKBOX_WIDGET_CONFIG_CONTROL_VALUE_ACCESSOR], encapsulation: ViewEncapsulation.None }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { flex: [{ type: HostBinding, args: ['attr.flex'] }], flexLayout: [{ type: HostBinding, args: ['attr.layout'] }], flexLayoutAlign: [{ type: HostBinding, args: ['attr.layout-align'] }], value: [{ type: Input }], valueChange: [{ type: Output }], labelPosition: [{ type: Input }], disabled: [{ type: Input }], label: [{ type: Input }], labelChange: [{ type: Output }], defaultValue: [{ type: Input }], defaultValueChange: [{ type: Output }], change: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtd2lkZ2V0LWNvbmZpZ3VyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nZW50aWFsL2lucHV0LXdpZGdldHMvc3JjL2xpYi9jaGVja2JveC13aWRnZXQvY2hlY2tib3gtd2lkZ2V0LWNvbmZpZ3VyZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUVMLGlCQUFpQixFQUNsQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTs7Ozs7OztBQUd0Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0RBQWtELEdBQVE7SUFDckUsT0FBTyxFQUFNLGlCQUFpQjtJQUM5QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9ELEtBQUssRUFBUSxJQUFJO0NBQ2xCLENBQUM7QUFFRixNQUFNLE9BQU8sNkJBQTZCO0lBQ3hDLFlBQW1CLE1BQXdDLEVBQVMsS0FBYztRQUEvRCxXQUFNLEdBQU4sTUFBTSxDQUFrQztRQUFTLFVBQUssR0FBTCxLQUFLLENBQVM7SUFDbEYsQ0FBQztDQUNGO0FBMEJELE1BQU0sT0FBTyxnQ0FBZ0M7SUErQjNDLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBN0I5QixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsZUFBVSxHQUFHLFFBQVEsQ0FBQztRQUNoQixvQkFBZSxHQUFHLE9BQU8sQ0FBQztRQUVuRCxVQUFLLEdBQVksS0FBSyxDQUFBO1FBQ3JCLGdC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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQge0hhY2tzfSBmcm9tICdAdGFuZ2VudGlhbC9jb3JlJ1xuXG5cbi8qKlxuICogUHJvdmlkZXIgRXhwcmVzc2lvbiB0aGF0IGFsbG93cyB0aGlzIHdpZGdldCB0byByZWdpc3RlciBhcyBhIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICogVGhpcyBhbGxvd3MgaXQgdG8gc3VwcG9ydCBbKG5nTW9kZWwpXS5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IFRBTkpfQ0hFQ0tCT1hfV0lER0VUX0NPTkZJR19DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6ICAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hXaWRnZXRDb25maWd1cmVDb21wb25lbnQpLFxuICBtdWx0aTogICAgICAgdHJ1ZVxufTtcblxuZXhwb3J0IGNsYXNzIENoZWNrYm94V2lkZ2V0Q29uZmlndXJlQ2hhbmdlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHNvdXJjZTogQ2hlY2tib3hXaWRnZXRDb25maWd1cmVDb21wb25lbnQsIHB1YmxpYyB2YWx1ZTogYm9vbGVhbikge1xuICB9XG59XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAgICAgICd0YW5qLWNoZWNrYm94LXdpZGdldC1jb25maWd1cmUnLFxuICB0ZW1wbGF0ZTogICAgICBgPCEtLSAtLT5cbiAgPGRpdiBjbGFzcz1cInRhbmotaW5wdXQtdGVtcGxhdGUgdGFuai1tb2RlLWNvbmZpZ3VyZVwiIGZsZXggbGF5b3V0PVwiY29sdW1uXCIgbGF5b3V0LWFsaWduPVwic3RhcnRcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgZGl2aWRlckNvbG9yPVwiYWNjZW50XCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJ0YW5qLWlucHV0XCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCI1MFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBsYWJlbCBmb3IgdGhpcyBpbnB1dFwiXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJlbWl0Q2hhbmdlRXZlbnQoZmFsc2UsIHRydWUpXCJcbiAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxhYmVsXCIvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsXCI+XG4gICAgICA8dGFuai1jaGVja2JveC13aWRnZXQgWyh2YWx1ZSldPVwiZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsgZW1pdENoYW5nZUV2ZW50KHRydWUsIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkRlZmF1bHQgVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cblxuICAgICAgPC90YW5qLWNoZWNrYm94LXdpZGdldD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gICAgICAgICAgICAgICAgIGAsXG4gIHByb3ZpZGVyczogICAgIFtUQU5KX0NIRUNLQk9YX1dJREdFVF9DT05GSUdfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hXaWRnZXRDb25maWd1cmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZmxleCcpIGZsZXggPSAnJztcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmxheW91dCcpIGZsZXhMYXlvdXQgPSAnY29sdW1uJztcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmxheW91dC1hbGlnbicpIGZsZXhMYXlvdXRBbGlnbiA9ICdzdGFydCc7XG5cbiAgQElucHV0KCkgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZVxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpXG5cbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInIHwgJ2JlbG93JyA9ICdiZWZvcmUnXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2VcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBGaWVsZHNcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJ1xuICBAT3V0cHV0KCkgbGFiZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcihmYWxzZSlcblxuICBASW5wdXQoKSBkZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZVxuICBAT3V0cHV0KCkgZGVmYXVsdFZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKGZhbHNlKVxuICAvKiBlbmQgQ29uZmlndXJhdGlvbiBGaWVsZHMgKi9cblxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBzcGlubmVyIGlzIGJsdXJyZWQuIE5lZWRlZCB0byBwcm9wZXJseSBpbXBsZW1lbnQgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuICBwcml2YXRlIGNvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm46ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKHZhbHVlKSA9PiB7IH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIEhhY2tzLm1hdGVyaWFsRGVzaWduUGxhY2Vob2xkZXJUZXh0KHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYpXG4gIH1cblxuICBlbWl0Q2hhbmdlRXZlbnQodmFsdWU6IGJvb2xlYW4sIGxhYmVsOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlLmVtaXQobmV3IENoZWNrYm94V2lkZ2V0Q29uZmlndXJlQ2hhbmdlKHRoaXMsIHRoaXMudmFsdWUpKVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmRlZmF1bHRWYWx1ZSlcbiAgICB9XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICB0aGlzLmxhYmVsQ2hhbmdlLmVtaXQodGhpcy5sYWJlbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQm9pbGVycGxhdGUgLyByZXF1aXJlZCBmb3IgQW5ndWxhclxuICAgKlxuICAgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4gPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCdzIGRpc2FibGVkIHN0YXRlLiBJbXBsZW1lbnRlZCBhcyBhIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIGlucHV0IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICovXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iXX0=