@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
131 lines • 17 kB
JavaScript
import { computed, Directive, inject, Input, signal } from '@angular/core';
import { NgControl } from '@angular/forms';
import { TuiNativeValidator } from '@taiga-ui/cdk/directives/native-validator';
import { tuiInjectElement, tuiValue } from '@taiga-ui/cdk/utils/dom';
import { tuiProvide } from '@taiga-ui/cdk/utils/miscellaneous';
import { TuiAppearance, tuiAppearance, tuiAppearanceFocus, tuiAppearanceMode, tuiAppearanceState, } from '@taiga-ui/core/directives/appearance';
import { TUI_ITEMS_HANDLERS, } from '@taiga-ui/core/directives/items-handlers';
import { TuiTextfieldComponent } from './textfield.component';
import { TUI_TEXTFIELD_OPTIONS } from './textfield.options';
import { tuiAsTextfieldAccessor } from './textfield-accessor';
import * as i0 from "@angular/core";
import * as i1 from "@taiga-ui/cdk/directives/native-validator";
import * as i2 from "@taiga-ui/core/directives/appearance";
// TODO: Drop in v5 after updated Angular and hostDirectives inherit
class TuiTextfieldBase {
constructor() {
// TODO: refactor to signal inputs after Angular update
this.focused = signal(null);
this.control = inject(NgControl, { optional: true });
this.a = tuiAppearance(inject(TUI_TEXTFIELD_OPTIONS).appearance, {});
this.s = tuiAppearanceState(null, {});
this.m = tuiAppearanceMode(this.mode, {});
this.f = tuiAppearanceFocus(computed(() => this.focused() ?? this.textfield.focused()), {});
this.el = tuiInjectElement();
this.handlers = inject(TUI_ITEMS_HANDLERS);
this.textfield = inject(TuiTextfieldComponent);
this.readOnly = false;
this.invalid = null;
this.value = tuiValue(this.el);
}
set focusedSetter(focused) {
this.focused.set(focused);
}
set stateSetter(state) {
this.s.set(state);
}
get mode() {
if (this.readOnly) {
return 'readonly';
}
if (this.invalid === false) {
return 'valid';
}
if (this.invalid) {
return 'invalid';
}
return null;
}
// TODO: refactor to signal inputs after Angular update
ngOnChanges() {
this.m.set(this.mode);
}
setValue(value) {
this.el.focus();
this.el.select();
if (value == null) {
this.el.ownerDocument.execCommand('delete');
}
else {
this.el.ownerDocument.execCommand('insertText', false, this.handlers.stringify()(value));
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTextfieldBase, isStandalone: true, inputs: { readOnly: "readOnly", invalid: "invalid", focusedSetter: ["focused", "focusedSetter"], stateSetter: ["state", "stateSetter"] }, host: { attributes: { "tuiTextfield": "" }, listeners: { "input": "0", "focusin": "0", "focusout": "0" }, properties: { "id": "textfield.id", "readOnly": "readOnly", "class._empty": "value() === \"\"" } }, providers: [tuiAsTextfieldAccessor(TuiTextfieldBase)], usesOnChanges: true, ngImport: i0 }); }
}
export { TuiTextfieldBase };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldBase, decorators: [{
type: Directive,
args: [{
standalone: true,
providers: [tuiAsTextfieldAccessor(TuiTextfieldBase)],
host: {
tuiTextfield: '',
'[id]': 'textfield.id',
'[readOnly]': 'readOnly',
'[class._empty]': 'value() === ""',
'(input)': '0',
'(focusin)': '0',
'(focusout)': '0',
},
}]
}], propDecorators: { readOnly: [{
type: Input
}], invalid: [{
type: Input
}], focusedSetter: [{
type: Input,
args: ['focused']
}], stateSetter: [{
type: Input,
args: ['state']
}] } });
class TuiTextfieldDirective extends TuiTextfieldBase {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTextfieldDirective, isStandalone: true, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])", providers: [
tuiAsTextfieldAccessor(TuiTextfieldDirective),
tuiProvide(TuiTextfieldBase, TuiTextfieldDirective),
], usesInheritance: true, hostDirectives: [{ directive: i1.TuiNativeValidator }, { directive: i2.TuiAppearance }], ngImport: i0 }); }
}
export { TuiTextfieldDirective };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
// TODO: Remove :not in v.5
selector: 'input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])',
providers: [
tuiAsTextfieldAccessor(TuiTextfieldDirective),
tuiProvide(TuiTextfieldBase, TuiTextfieldDirective),
],
hostDirectives: [TuiNativeValidator, TuiAppearance],
}]
}] });
class TuiWithTextfield {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithTextfield, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiWithTextfield, isStandalone: true, hostDirectives: [{ directive: TuiTextfieldDirective, inputs: ["invalid", "invalid", "focused", "focused", "readOnly", "readOnly", "state", "state"] }], ngImport: i0 }); }
}
export { TuiWithTextfield };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithTextfield, decorators: [{
type: Directive,
args: [{
standalone: true,
hostDirectives: [
{
directive: TuiTextfieldDirective,
inputs: ['invalid', 'focused', 'readOnly', 'state'],
},
],
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGZpZWxkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQvdGV4dGZpZWxkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDN0QsT0FBTyxFQUNILGFBQWEsRUFDYixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixrQkFBa0IsR0FDckIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQ0gsa0JBQWtCLEdBRXJCLE1BQU0sMENBQTBDLENBQUM7QUFHbEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHNCQUFzQixFQUE0QixNQUFNLHNCQUFzQixDQUFDOzs7O0FBRXZGLG9FQUFvRTtBQUNwRSxNQWFhLGdCQUFnQjtJQWI3QjtRQWNJLHVEQUF1RDtRQUN0QyxZQUFPLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztRQUVyQyxZQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQUMsR0FBRyxhQUFhLENB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LEtBQUs7dUJBQUMsU0FBUztnQkFNTCxXQUFXO3NCQURyQixLQUFLO3VCQUFDLE9BQU87O0FBMENsQixNQVdhLHFCQUF5QixTQUFRLGdCQUFtQjsrR0FBcEQscUJBQXFCO21HQUFyQixxQkFBcUIsK0hBTm5CO1lBQ1Asc0JBQXNCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsVUFBVSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDO1NBQ3REOztTQUdRLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQVhqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQiwyQkFBMkI7b0JBQzNCLFFBQVEsRUFDSixrRkFBa0Y7b0JBQ3RGLFNBQVMsRUFBRTt3QkFDUCxzQkFBc0IsdUJBQXVCO3dCQUM3QyxVQUFVLENBQUMsZ0JBQWdCLHdCQUF3QjtxQkFDdEQ7b0JBQ0QsY0FBYyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO2lCQUN0RDs7QUFHRCxNQVNhLGdCQUFnQjsrR0FBaEIsZ0JBQWdCO21HQUFoQixnQkFBZ0Isb0RBWGhCLHFCQUFxQjs7U0FXckIsZ0JBQWdCOzRGQUFoQixnQkFBZ0I7a0JBVDVCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGNBQWMsRUFBRTt3QkFDWjs0QkFDSSxTQUFTLEVBQUUscUJBQXFCOzRCQUNoQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUM7eUJBQ3REO3FCQUNKO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjb21wdXRlZCwgRGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCB0eXBlIE9uQ2hhbmdlcywgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1R1aU5hdGl2ZVZhbGlkYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL25hdGl2ZS12YWxpZGF0b3InO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50LCB0dWlWYWx1ZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlQcm92aWRlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtcbiAgICBUdWlBcHBlYXJhbmNlLFxuICAgIHR1aUFwcGVhcmFuY2UsXG4gICAgdHVpQXBwZWFyYW5jZUZvY3VzLFxuICAgIHR1aUFwcGVhcmFuY2VNb2RlLFxuICAgIHR1aUFwcGVhcmFuY2VTdGF0ZSxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9hcHBlYXJhbmNlJztcbmltcG9ydCB7XG4gICAgVFVJX0lURU1TX0hBTkRMRVJTLFxuICAgIHR5cGUgVHVpSXRlbXNIYW5kbGVycyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9pdGVtcy1oYW5kbGVycyc7XG5pbXBvcnQge3R5cGUgVHVpSW50ZXJhY3RpdmVTdGF0ZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQge1R1aVRleHRmaWVsZENvbXBvbmVudH0gZnJvbSAnLi90ZXh0ZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7VFVJX1RFWFRGSUVMRF9PUFRJT05TfSBmcm9tICcuL3RleHRmaWVsZC5vcHRpb25zJztcbmltcG9ydCB7dHVpQXNUZXh0ZmllbGRBY2Nlc3NvciwgdHlwZSBUdWlUZXh0ZmllbGRBY2Nlc3Nvcn0gZnJvbSAnLi90ZXh0ZmllbGQtYWNjZXNzb3InO1xuXG4vLyBUT0RPOiBEcm9wIGluIHY1IGFmdGVyIHVwZGF0ZWQgQW5ndWxhciBhbmQgaG9zdERpcmVjdGl2ZXMgaW5oZXJpdFxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFt0dWlBc1RleHRmaWVsZEFjY2Vzc29yKFR1aVRleHRmaWVsZEJhc2UpXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR1aVRleHRmaWVsZDogJycsXG4gICAgICAgICdbaWRdJzogJ3RleHRmaWVsZC5pZCcsXG4gICAgICAgICdbcmVhZE9ubHldJzogJ3JlYWRPbmx5JyxcbiAgICAgICAgJ1tjbGFzcy5fZW1wdHldJzogJ3ZhbHVlKCkgPT09IFwiXCInLFxuICAgICAgICAnKGlucHV0KSc6ICcwJyxcbiAgICAgICAgJyhmb2N1c2luKSc6ICcwJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnMCcsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpVGV4dGZpZWxkQmFzZTxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgVHVpVGV4dGZpZWxkQWNjZXNzb3I8VD4ge1xuICAgIC8vIFRPRE86IHJlZmFjdG9yIHRvIHNpZ25hbCBpbnB1dHMgYWZ0ZXIgQW5ndWxhciB1cGRhdGVcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzZWQgPSBzaWduYWw8Ym9vbGVhbiB8IG51bGw+KG51bGwpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYSA9IHR1aUFwcGVhcmFuY2UoaW5qZWN0KFRVSV9URVhURklFTERfT1BUSU9OUykuYXBwZWFyYW5jZSwge30pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzID0gdHVpQXBwZWFyYW5jZVN0YXRlKG51bGwsIHt9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbSA9IHR1aUFwcGVhcmFuY2VNb2RlKHRoaXMubW9kZSwge30pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmID0gdHVpQXBwZWFyYW5jZUZvY3VzKFxuICAgICAgICBjb21wdXRlZCgoKSA9PiB0aGlzLmZvY3VzZWQoKSA/PyB0aGlzLnRleHRmaWVsZC5mb2N1c2VkKCkpLFxuICAgICAgICB7fSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudDxIVE1MSW5wdXRFbGVtZW50PigpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBoYW5kbGVyczogVHVpSXRlbXNIYW5kbGVyczxUPiA9IGluamVjdChUVUlfSVRFTVNfSEFORExFUlMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0ZXh0ZmllbGQ6IFR1aVRleHRmaWVsZENvbXBvbmVudDxUPiA9XG4gICAgICAgIGluamVjdChUdWlUZXh0ZmllbGRDb21wb25lbnQpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGludmFsaWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZSA9IHR1aVZhbHVlKHRoaXMuZWwpO1xuXG4gICAgQElucHV0KCdmb2N1c2VkJylcbiAgICBwdWJsaWMgc2V0IGZvY3VzZWRTZXR0ZXIoZm9jdXNlZDogYm9vbGVhbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkLnNldChmb2N1c2VkKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ3N0YXRlJylcbiAgICBwdWJsaWMgc2V0IHN0YXRlU2V0dGVyKHN0YXRlOiBUdWlJbnRlcmFjdGl2ZVN0YXRlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnMuc2V0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JlYWRvbmx5JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ZhbGlkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnaW52YWxpZCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZWZhY3RvciB0byBzaWduYWwgaW5wdXRzIGFmdGVyIEFuZ3VsYXIgdXBkYXRlXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm0uc2V0KHRoaXMubW9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBUIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuZWwuc2VsZWN0KCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZWwub3duZXJEb2N1bWVudC5leGVjQ29tbWFuZCgnZGVsZXRlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsLm93bmVyRG9jdW1lbnQuZXhlY0NvbW1hbmQoXG4gICAgICAgICAgICAgICAgJ2luc2VydFRleHQnLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMuc3RyaW5naWZ5KCkodmFsdWUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgOm5vdCBpbiB2LjVcbiAgICBzZWxlY3RvcjpcbiAgICAgICAgJ2lucHV0W3R1aVRleHRmaWVsZF06bm90KFt0dWlJbnB1dENhcmRdKTpub3QoW3R1aUlucHV0RXhwaXJlXSk6bm90KFt0dWlJbnB1dENWQ10pJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNUZXh0ZmllbGRBY2Nlc3NvcihUdWlUZXh0ZmllbGREaXJlY3RpdmUpLFxuICAgICAgICB0dWlQcm92aWRlKFR1aVRleHRmaWVsZEJhc2UsIFR1aVRleHRmaWVsZERpcmVjdGl2ZSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1R1aU5hdGl2ZVZhbGlkYXRvciwgVHVpQXBwZWFyYW5jZV0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVRleHRmaWVsZERpcmVjdGl2ZTxUPiBleHRlbmRzIFR1aVRleHRmaWVsZEJhc2U8VD4ge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFR1aVRleHRmaWVsZERpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydpbnZhbGlkJywgJ2ZvY3VzZWQnLCAncmVhZE9ubHknLCAnc3RhdGUnXSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlXaXRoVGV4dGZpZWxkIHt9XG4iXX0=