@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
129 lines • 16.9 kB
JavaScript
import { Directive, HostBinding, Input, Optional, Self, } from '@angular/core';
import { ReplaySubject, delay, distinctUntilChanged, map, startWith, takeUntil } from 'rxjs';
import { DOKU_FORM_FIELD_ACCESSOR, } from '../form-field';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class DokuInput {
get disabled() {
return this._disabled;
}
set disabled(value) {
this._disabled = value !== false;
this.notifyState$.next('disabled');
}
get readonly() {
return this._readonly;
}
set readonly(value) {
this._readonly = value !== false;
this.notifyState$.next('readonly');
}
constructor(elementRef, ngControl) {
this.elementRef = elementRef;
this.ngControl = ngControl;
this.classes = 'd-field-input';
this._disabled = false;
this._readonly = false;
this.notifyState$ = new ReplaySubject();
this.destroy$ = new ReplaySubject();
}
ngAfterViewInit() {
this.elementRef.nativeElement.onfocus = () => {
this.onFocus?.();
};
this.elementRef.nativeElement.onblur = () => {
this.onBlur?.();
};
this.ngControl?.statusChanges
?.pipe(startWith(this.ngControl.status), distinctUntilChanged(), takeUntil(this.destroy$))
.subscribe(() => {
this.disabled = !!this.ngControl?.disabled;
});
this.ngControl?.statusChanges
?.pipe(map((status) => ({
status: status,
state: {
pristine: this.ngControl?.control?.pristine,
untouched: this.ngControl?.control?.untouched,
},
})), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)), delay(0), takeUntil(this.destroy$))
.subscribe(({ status, state }) => {
if (status === 'VALID') {
this.onValidate?.('valid', state);
}
else if (status === 'INVALID') {
this.onValidate?.('invalid', state);
}
else {
this.onValidate?.(undefined, state);
}
});
this.notifyState$
.pipe(startWith({ disabled: this.disabled, readonly: this.readonly }), map(() => ({ disabled: this.disabled, readonly: this.readonly })), distinctUntilChanged((prev, current) => JSON.stringify(prev) === JSON.stringify(current)), delay(0), takeUntil(this.destroy$))
.subscribe(({ disabled, readonly }) => {
this.onDisable?.(disabled);
this.onReadonly?.(readonly);
// Handle element native attributes
const el = this.elementRef.nativeElement;
disabled ? el.setAttribute('disabled', '') : el.removeAttribute('disabled');
readonly ? el.setAttribute('readonly', '') : el.removeAttribute('readonly');
});
}
ngOnDestroy() {
this.destroy$.next(1);
this.destroy$.complete();
}
registerOnFocus(fn) {
this.onFocus = fn;
}
registerOnBlur(fn) {
this.onBlur = fn;
}
registerOnDisable(fn) {
this.onDisable = fn;
}
registerOnReadonly(fn) {
this.onReadonly = fn;
}
registerOnValidate(fn) {
this.onValidate = fn;
}
onClickWrapperElement() {
this.elementRef.nativeElement.focus();
}
}
DokuInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuInput, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
DokuInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: DokuInput, isStandalone: true, selector: "input[doku-input], textarea[doku-input]", inputs: { disabled: "disabled", readonly: "readonly" }, host: { properties: { "class": "this.classes" } }, providers: [
{
provide: DOKU_FORM_FIELD_ACCESSOR,
useExisting: DokuInput,
multi: true,
},
], exportAs: ["dokuInput"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuInput, decorators: [{
type: Directive,
args: [{
selector: 'input[doku-input], textarea[doku-input]',
exportAs: 'dokuInput',
standalone: true,
providers: [
{
provide: DOKU_FORM_FIELD_ACCESSOR,
useExisting: DokuInput,
multi: true,
},
],
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
type: Optional
}, {
type: Self
}] }]; }, propDecorators: { classes: [{
type: HostBinding,
args: ['class']
}], disabled: [{
type: Input
}], readonly: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2lucHV0L2lucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBRUwsUUFBUSxFQUNSLElBQUksR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQ0wsd0JBQXdCLEdBSXpCLE1BQU0sZUFBZSxDQUFDOzs7QUFjdkIsTUFBTSxPQUFPLFNBQVM7SUFJcEIsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUF1QjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssS0FBSyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUdELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBdUI7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEtBQUssS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFNRCxZQUFvQixVQUFzQixFQUE4QixTQUFxQjtRQUF6RSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQThCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUF6QjFFLFlBQU8sR0FBdUIsZUFBZSxDQUFDO1FB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LENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUM7O3NHQTNIVSxTQUFTOzBGQUFULFNBQVMsaU1BUlQ7UUFDVDtZQUNFLE9BQU8sRUFBRSx3QkFBd0I7WUFDakMsV0FBVyxFQUFFLFNBQVM7WUFDdEIsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGOzJGQUVVLFNBQVM7a0JBWnJCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlDQUF5QztvQkFDbkQsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHdCQUF3Qjs0QkFDakMsV0FBVyxXQUFXOzRCQUN0QixLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjs7MEJBNEI4QyxRQUFROzswQkFBSSxJQUFJOzRDQXpCMUMsT0FBTztzQkFEekIsV0FBVzt1QkFBQyxPQUFPO2dCQUloQixRQUFRO3NCQURYLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERPS1VfRk9STV9GSUVMRF9BQ0NFU1NPUixcbiAgRG9rdUZvcm1GaWVsZEFjY2Vzc29yLFxuICBEb2t1Rm9ybUZpZWxkQWNjZXNzb3JWYWxpZGF0ZVN0YXRlLFxuICBEb2t1Rm9ybUZpZWxkQWNjZXNzb3JWYWxpZGF0ZVZhbHVlLFxufSBmcm9tICcuLi9mb3JtLWZpZWxkJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW5wdXRbZG9rdS1pbnB1dF0sIHRleHRhcmVhW2Rva3UtaW5wdXRdJyxcbiAgZXhwb3J0QXM6ICdkb2t1SW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBET0tVX0ZPUk1fRklFTERfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRG9rdUlucHV0LFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9rdUlucHV0IGltcGxlbWVudHMgRG9rdUZvcm1GaWVsZEFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsYXNzZXM6IE5nQ2xhc3NbJ25nQ2xhc3MnXSA9ICdkLWZpZWxkLWlucHV0JztcblxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWUgIT09IGZhbHNlO1xuICAgIHRoaXMubm90aWZ5U3RhdGUkLm5leHQoJ2Rpc2FibGVkJyk7XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG4gIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWUgIT09IGZhbHNlO1xuICAgIHRoaXMubm90aWZ5U3RhdGUkLm5leHQoJ3JlYWRvbmx5Jyk7XG4gIH1cbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcblxuICBwcml2YXRlIG5vdGlmeVN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PCdkaXNhYmxlZCcgfCAncmVhZG9ubHknPigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJpdmF0ZSBuZ0NvbnRyb2w/OiBOZ0NvbnRyb2wpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9uZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uRm9jdXM/LigpO1xuICAgIH07XG5cbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vbmJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cj8uKCk7XG4gICAgfTtcblxuICAgIHRoaXMubmdDb250cm9sPy5zdGF0dXNDaGFuZ2VzXG4gICAgICA/LnBpcGUoc3RhcnRXaXRoKHRoaXMubmdDb250cm9sLnN0YXR1cyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gISF0aGlzLm5nQ29udHJvbD8uZGlzYWJsZWQ7XG4gICAgICB9KTtcblxuICAgIHRoaXMubmdDb250cm9sPy5zdGF0dXNDaGFuZ2VzXG4gICAgICA/LnBpcGUoXG4gICAgICAgIG1hcCgoc3RhdHVzKSA9PiAoe1xuICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICBwcmlzdGluZTogdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnByaXN0aW5lLFxuICAgICAgICAgICAgdW50b3VjaGVkOiB0aGlzLm5nQ29udHJvbD8uY29udHJvbD8udW50b3VjaGVkLFxuICAgICAgICAgIH0gYXMgRG9rdUZvcm1GaWVsZEFjY2Vzc29yVmFsaWRhdGVTdGF0ZSxcbiAgICAgICAgfSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBzdGF0dXMsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgIHRoaXMub25WYWxpZGF0ZT8uKCd2YWxpZCcsIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICAgIHRoaXMub25WYWxpZGF0ZT8uKCdpbnZhbGlkJywgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25WYWxpZGF0ZT8uKHVuZGVmaW5lZCwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMubm90aWZ5U3RhdGUkXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHsgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5IH0pLFxuICAgICAgICBtYXAoKCkgPT4gKHsgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5IH0pKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnJlbnQpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50KSksXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgZGlzYWJsZWQsIHJlYWRvbmx5IH0pID0+IHtcbiAgICAgICAgdGhpcy5vbkRpc2FibGU/LihkaXNhYmxlZCk7XG4gICAgICAgIHRoaXMub25SZWFkb25seT8uKHJlYWRvbmx5KTtcbiAgICAgICAgLy8gSGFuZGxlIGVsZW1lbnQgbmF0aXZlIGF0dHJpYnV0ZXNcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBkaXNhYmxlZCA/IGVsLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnJykgOiBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIHJlYWRvbmx5ID8gZWwuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKSA6IGVsLnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KDEpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uQmx1cj86ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb25Gb2N1cz86ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb25EaXNhYmxlPzogKCh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIG9uUmVhZG9ubHk/OiAoKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb25WYWxpZGF0ZT86XG4gICAgfCAoKFxuICAgICAgICB2YWx1ZT86IERva3VGb3JtRmllbGRBY2Nlc3NvclZhbGlkYXRlVmFsdWUgfCB1bmRlZmluZWQsXG4gICAgICAgIHN0YXRlPzogRG9rdUZvcm1GaWVsZEFjY2Vzc29yVmFsaWRhdGVTdGF0ZVxuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHJlZ2lzdGVyT25Gb2N1cyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Gb2N1cyA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkJsdXIoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQmx1ciA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkRpc2FibGUoZm46ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25EaXNhYmxlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uUmVhZG9ubHkoZm46ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25SZWFkb25seSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRlKGZuOiAodmFsdWU/OiBEb2t1Rm9ybUZpZWxkQWNjZXNzb3JWYWxpZGF0ZVZhbHVlIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblZhbGlkYXRlID0gZm47XG4gIH1cblxuICBvbkNsaWNrV3JhcHBlckVsZW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuIl19