UNPKG

@vismaux/ngx-nordic-cool

Version:
140 lines 16.5 kB
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild, } from '@angular/core'; import { NgControl, NG_VALUE_ACCESSOR, } from '@angular/forms'; import * as i0 from "@angular/core"; export const CHECKBOX_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NcCheckboxComponent), multi: true, }; // Increasing integer for generating unique ids for checkbox components. // Inspired by @angular/components let nextUniqueId = 0; export class NcCheckboxComponent { constructor(cdRef, injector) { this.cdRef = cdRef; this.injector = injector; /** @ignore */ this._uniqueId = `nc-checkbox-${++nextUniqueId}`; /** @ignore */ this._checked = false; /** @ignore */ this._disabled = false; /** @ignore */ this._indeterminate = false; this.change = new EventEmitter(); this.indeterminateChange = new EventEmitter(); } get name() { const ngControl = this.injector.get(NgControl, null); return this._name ?? ngControl?.name?.toString(); } set name(value) { if (value !== this._name) { this._name = value; this.cdRef.markForCheck(); } } get id() { return this._id ?? this._uniqueId; } set id(value) { if (value !== this._id) { this._id = value; this.cdRef.markForCheck(); } } get checked() { return this._checked; } set checked(value) { if (value !== this.checked) { this._checked = value; this.cdRef.markForCheck(); } } get disabled() { return this._disabled; } set disabled(value) { if (value !== this.disabled) { this._disabled = value; this.cdRef.markForCheck(); } } get indeterminate() { return this._indeterminate; } set indeterminate(value) { if (value !== this._indeterminate) { this._indeterminate = value; this.cdRef.markForCheck(); } } /** @ignore */ onInputChange(event) { // We always have to stop propagation on the change event. // Otherwise the change event, from the input element, will bubble up and // emit its event object to the `change` output. event.stopPropagation(); if (this.disabled) { return; } this.checked = !this.checked; this.updateModel(); } /** @ignore */ onBlur() { if (this._onTouched) { this._onTouched(); } } /** @ignore */ registerOnChange(fn) { this._onModelChanged = fn; } /** @ignore */ registerOnTouched(fn) { this._onTouched = fn; } /** @ignore */ writeValue(value) { this.checked = !!value; } /** @ignore */ setDisabledState(isDisabled) { this.disabled = isDisabled; } /** @ignore */ updateModel() { if (this._onModelChanged) { this._onModelChanged(this.checked); } this.change.emit(this.checked); } } NcCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); NcCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: NcCheckboxComponent, selector: "nc-checkbox", inputs: { value: "value", name: "name", id: "id", checked: "checked", disabled: "disabled", indeterminate: "indeterminate" }, outputs: { change: "change", indeterminateChange: "indeterminateChange" }, providers: [CHECKBOX_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"checkbox\" [class.disabled]=\"disabled\">\n <input\n type=\"checkbox\"\n [id]=\"id + '-checkbox'\"\n [name]=\"name\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n [disabled]=\"disabled\"\n [attr.value]=\"value\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onBlur()\"\n />\n <label [for]=\"id + '-checkbox'\"><ng-content></ng-content></label>\n</div>\n", styles: [".checkbox{display:block}.checkbox>label{display:block;padding-left:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcCheckboxComponent, decorators: [{ type: Component, args: [{ selector: 'nc-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CHECKBOX_CONTROL_VALUE_ACCESSOR], template: "<div class=\"checkbox\" [class.disabled]=\"disabled\">\n <input\n type=\"checkbox\"\n [id]=\"id + '-checkbox'\"\n [name]=\"name\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n [disabled]=\"disabled\"\n [attr.value]=\"value\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onBlur()\"\n />\n <label [for]=\"id + '-checkbox'\"><ng-content></ng-content></label>\n</div>\n", styles: [".checkbox{display:block}.checkbox>label{display:block;padding-left:5px}\n"] }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }]; }, propDecorators: { value: [{ type: Input }], change: [{ type: Output }], indeterminateChange: [{ type: Output }], inputElement: [{ type: ViewChild, args: ['input'] }], name: [{ type: Input }], id: [{ type: Input }], checked: [{ type: Input }], disabled: [{ type: Input }], indeterminate: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vcmRpYy1jb29sL3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vcmRpYy1jb29sL3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFFVixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDOztBQUV4QixNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBYTtJQUN2RCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7SUFDbEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsd0VBQXdFO0FBQ3hFLGtDQUFrQztBQUNsQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFTckIsTUFBTSxPQUFPLG1CQUFtQjtJQTJCOUIsWUFBb0IsS0FBd0IsRUFBVSxRQUFrQjtRQUFwRCxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUExQnhFLGNBQWM7UUFDRyxjQUFTLEdBQUcsZUFBZSxFQUFFLFlBQVksRUFBRSxDQUFDO1FBSzdELGNBQWM7UUFDTixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGNBQWM7UUFDTixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGNBQWM7UUFDTixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQVNaLFdBQU0sR0FBRyxJQUFJ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QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELGNBQWM7SUFDZCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYztJQUNOLFdBQVc7UUFDakIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O2dIQXJJVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrT0FGbkIsQ0FBQywrQkFBK0IsQ0FBQyxpSUNsQzlDLGdhQWNBOzJGRHNCYSxtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsK0JBQStCLENBQUM7K0hBcUJuQyxLQUFLO3NCQUFiLEtBQUs7Z0JBRWEsTUFBTTtzQkFBeEIsTUFBTTtnQkFDWSxtQkFBbUI7c0JBQXJDLE1BQU07Z0JBR3NCLFlBQVk7c0JBQXhDLFNBQVM7dUJBQUMsT0FBTztnQkFLZCxJQUFJO3NCQURQLEtBQUs7Z0JBYUYsRUFBRTtzQkFETCxLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkFZRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsYUFBYTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOZ0NvbnRyb2wsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5jQ2hlY2tib3hDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbi8vIEluY3JlYXNpbmcgaW50ZWdlciBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgaWRzIGZvciBjaGVja2JveCBjb21wb25lbnRzLlxuLy8gSW5zcGlyZWQgYnkgQGFuZ3VsYXIvY29tcG9uZW50c1xubGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25jLWNoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0NIRUNLQk9YX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdLFxufSlcbmV4cG9ydCBjbGFzcyBOY0NoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZCA9IGBuYy1jaGVja2JveC0keysrbmV4dFVuaXF1ZUlkfWA7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfY2hlY2tlZCA9IGZhbHNlO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9pbmRldGVybWluYXRlID0gZmFsc2U7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gYW55O1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9vbk1vZGVsQ2hhbmdlZDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgLyoqIFRoZSB2YWx1ZSBhdHRyaWJ1dGUgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50ICovXG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGluZGV0ZXJtaW5hdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSByZWFkb25seSBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIEBJbnB1dCgpXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcbiAgICByZXR1cm4gdGhpcy5fbmFtZSA/PyBuZ0NvbnRyb2w/Lm5hbWU/LnRvU3RyaW5nKCk7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fbmFtZSkge1xuICAgICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQgPz8gdGhpcy5fdW5pcXVlSWQ7XG4gIH1cbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2lkKSB7XG4gICAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuICBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5jaGVja2VkKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gdmFsdWU7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZTtcbiAgfVxuICBzZXQgaW5kZXRlcm1pbmF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFdlIGFsd2F5cyBoYXZlIHRvIHN0b3AgcHJvcGFnYXRpb24gb24gdGhlIGNoYW5nZSBldmVudC5cbiAgICAvLyBPdGhlcndpc2UgdGhlIGNoYW5nZSBldmVudCwgZnJvbSB0aGUgaW5wdXQgZWxlbWVudCwgd2lsbCBidWJibGUgdXAgYW5kXG4gICAgLy8gZW1pdCBpdHMgZXZlbnQgb2JqZWN0IHRvIHRoZSBgY2hhbmdlYCBvdXRwdXQuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7XG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25CbHVyKCkge1xuICAgIGlmICh0aGlzLl9vblRvdWNoZWQpIHtcbiAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fb25Nb2RlbENoYW5nZWQgPSBmbjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY2hlY2tlZCA9ICEhdmFsdWU7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwoKSB7XG4gICAgaWYgKHRoaXMuX29uTW9kZWxDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9vbk1vZGVsQ2hhbmdlZCh0aGlzLmNoZWNrZWQpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuY2hlY2tlZCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjaGVja2JveFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICA8aW5wdXRcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIFtpZF09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLnZhbHVlXT1cInZhbHVlXCJcbiAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAvPlxuICA8bGFiZWwgW2Zvcl09XCJpZCArICctY2hlY2tib3gnXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbGFiZWw+XG48L2Rpdj5cbiJdfQ==