UNPKG

ng-devui

Version:

DevUI components based on Angular

264 lines (258 loc) 25 kB
import { __decorate, __metadata } from 'tslib'; import * as i0 from '@angular/core'; import { Directive, Optional, Self, Inject, Input, HostBinding, forwardRef, Component, ViewChild, NgModule } from '@angular/core'; import * as i2 from '@angular/forms'; import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms'; import * as i2$1 from 'ng-devui/utils'; import { WithConfig } from 'ng-devui/utils'; import { DOCUMENT, CommonModule } from '@angular/common'; class TextareaDirective { get hasGlowStyle() { return this.showGlowStyle; } get gray() { return this.styleType === 'gray'; } constructor(ngModel, doc, devConfigService, el, render) { this.ngModel = ngModel; this.doc = doc; this.devConfigService = devConfigService; this.el = el; this.render = render; this.maxLengthBlocker = false; this.maxLengthCounter = false; this.resize = 'none'; this.rows = 3; this.styleType = 'default'; this.showGlowStyle = true; this.fontSize = 12; this.document = this.doc; const root = getComputedStyle(this.document.querySelector(':root')); this.fontSize = parseInt(root.getPropertyValue('--devui-font-size-sm'), 10) || 12; } ngAfterViewInit() { this.setMaxLengthBlocker(); this.setMaxLengthCounter(); // 监听 ngModel 变化 const max = this.el.nativeElement.maxLength; const rules = [!!this.ngModel, this.maxLengthCounter, !!max]; if (!rules.includes(false)) { this.ngModel.valueChanges.subscribe((value) => { const content = value || this.el.nativeElement.value || ''; this.counterInner.textContent = `${content.length}/${max}`; }); } } ngOnDestroy() { if (this.checkMaxLength) { this.checkMaxLength(); } if (this.getMaxLength) { this.getMaxLength(); } if (this.resizeWatcher) { this.resizeWatcher.unobserve(); } } setMaxLengthBlocker() { if (this.maxLengthBlocker) { this.checkMaxLength = this.render.listen(this.el.nativeElement, 'compositionupdate', () => { /** * 通过失焦中断composition输入事件规避chrome textarea中文符号输入超出最大宽度问题,如浏览器修复该问题可移除此方法 * 复现步骤: * 1. 输若干入内容 * 2. 回车换行 * 3. 粘贴内容至最大长度 * 4. 输入中文等触发composition事件输入法的符号 */ const max = this.el.nativeElement.maxLength; const len = (this.el.nativeElement.textContent || this.el.nativeElement.value).length; if (max <= len) { this.el.nativeElement.blur(); this.el.nativeElement.focus(); } }); } } setMaxLengthCounter() { const max = this.el.nativeElement.maxLength; if (this.maxLengthCounter && max) { const length = this.ngModel?.model ? this.ngModel.model.length : this.el.nativeElement.value.length; this.counter = this.document.createElement('span'); this.counter.className = 'devui-textarea-counter'; this.counterInner = this.document.createElement('i'); this.counterInner.textContent = `${length}/${max}`; this.counterInner.style.width = `${(String(max).length * 2 + 1) * this.fontSize}px`; this.counter.appendChild(this.counterInner); this.el.nativeElement.after(this.counter); this.checkMaxLength = this.render.listen(this.el.nativeElement, 'input', () => { this.counterInner.textContent = `${this.el.nativeElement.value.length}/${max}`; }); this.resizeWatcher = new ResizeObserver(() => { this.counter.style.left = `${this.el.nativeElement.offsetWidth - this.counterInner.offsetWidth}px`; this.counter.style.top = `${this.el.nativeElement.offsetHeight - this.counter.offsetHeight}px`; }).observe(this.el.nativeElement); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaDirective, deps: [{ token: i2.NgModel, optional: true, self: true }, { token: DOCUMENT }, { token: i2$1.DevConfigService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TextareaDirective, selector: "[dTextarea]", inputs: { maxLengthBlocker: "maxLengthBlocker", maxLengthCounter: "maxLengthCounter", resize: "resize", error: "error", rows: "rows", styleType: "styleType", showGlowStyle: "showGlowStyle" }, host: { properties: { "style.resize": "this.resize", "class.error": "this.error", "attr.rows": "this.rows", "class.devui-glow-style": "this.hasGlowStyle", "class.devui-gray-style": "this.gray" } }, exportAs: ["dTextarea"], ngImport: i0 }); } } __decorate([ WithConfig(), __metadata("design:type", Object) ], TextareaDirective.prototype, "styleType", void 0); __decorate([ WithConfig(), __metadata("design:type", Object) ], TextareaDirective.prototype, "showGlowStyle", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaDirective, decorators: [{ type: Directive, args: [{ selector: '[dTextarea]', exportAs: 'dTextarea', }] }], ctorParameters: () => [{ type: i2.NgModel, decorators: [{ type: Optional }, { type: Self }] }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i2$1.DevConfigService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { maxLengthBlocker: [{ type: Input }], maxLengthCounter: [{ type: Input }], resize: [{ type: Input }, { type: HostBinding, args: ['style.resize'] }], error: [{ type: Input }, { type: HostBinding, args: ['class.error'] }], rows: [{ type: Input }, { type: HostBinding, args: ['attr.rows'] }], styleType: [{ type: Input }], showGlowStyle: [{ type: Input }], hasGlowStyle: [{ type: HostBinding, args: ['class.devui-glow-style'] }], gray: [{ type: HostBinding, args: ['class.devui-gray-style'] }] } }); class TextareaMaxLengthComponent { constructor(el, devConfigService) { this.el = el; this.devConfigService = devConfigService; this.disabled = false; this.error = false; this.maxLengthBlocker = false; this.rows = 3; this.resize = 'none'; this.styleType = 'default'; this.showGlowStyle = true; this.onChange = (_) => null; this.onTouch = () => null; } ngAfterViewInit() { this.textareaElement = this.el.nativeElement.querySelector('textarea'); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouch = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; } writeValue(val) { this.value = val; } valueChanges(val) { this.value = val; this.onChange(val); this.onTouch(); } blurEvent() { const event = new Event('blur', { bubbles: false, cancelable: true }); this.el.nativeElement.dispatchEvent(event); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaMaxLengthComponent, deps: [{ token: i0.ElementRef }, { token: i2$1.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextareaMaxLengthComponent, selector: "d-textarea-max-length", inputs: { disabled: "disabled", error: "error", maxLength: "maxLength", maxLengthBlocker: "maxLengthBlocker", placeholder: "placeholder", rows: "rows", maxWidth: "maxWidth", maxHeight: "maxHeight", resize: "resize", styleType: "styleType", showGlowStyle: "showGlowStyle" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TextareaMaxLengthComponent), multi: true, }, ], viewQueries: [{ propertyName: "textareaInstance", first: true, predicate: TextareaDirective, descendants: true }], ngImport: i0, template: "<div\r\n class=\"devui-textarea-container\"\r\n [class.devui-glow-style]=\"showGlowStyle\"\r\n [class.devui-gray-style]=\"styleType === 'gray'\"\r\n [class.error]=\"error\"\r\n [style.resize]=\"disabled ? 'none' : resize\"\r\n [style.max-width]=\"maxWidth\"\r\n [style.max-height]=\"maxHeight\"\r\n>\r\n <textarea\r\n dTextarea\r\n [disabled]=\"disabled\"\r\n [error]=\"error\"\r\n [maxLength]=\"maxLength\"\r\n [maxLengthBlocker]=\"maxLengthBlocker\"\r\n [maxLengthCounter]=\"true\"\r\n [placeholder]=\"placeholder\"\r\n [rows]=\"rows\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"valueChanges($event)\"\r\n (blur)=\"blurEvent()\"\r\n ></textarea>\r\n</div>\r\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host{display:block}:host ::ng-deep .devui-textarea-container{overflow:hidden;position:relative;width:100%;height:fit-content;min-width:160px;min-height:64px;border:1px solid var(--devui-form-control-line, #dbdbdb);border-radius:var(--devui-border-radius, 2px);color:var(--devui-text, #191919);outline:none;background-color:var(--devui-form-control-bg, #ffffff);box-shadow:0 0 0 0 var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08));transition:border-color .3s var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),box-shadow var(--devui-animation-duration-base, .2s) var(--devui-animation-ease-in, cubic-bezier(.5, 0, .84, .25))}:host ::ng-deep .devui-textarea-container.devui-glow-style:not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):not(.inner-input):hover{box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08))}:host ::ng-deep .devui-textarea-container.devui-glow-style:not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):not(.inner-input):focus-within{border-color:var(--devui-form-control-line-active, #0a59f7);box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08))}:host ::ng-deep .devui-textarea-container.devui-glow-style:not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):not(.inner-input):active{box-shadow:none}:host ::ng-deep .devui-textarea-container.devui-gray-style:not([disabled]){transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host ::ng-deep .devui-textarea-container.devui-gray-style:not([disabled]):not(:focus-within){background:var(--devui-gray-form-control-bg, #f5f5f5)!important;border-color:var(--devui-gray-form-control-bg, #f5f5f5)!important}:host ::ng-deep .devui-textarea-container.devui-gray-style:not([disabled]):not(:focus-within):hover{background-color:var(--devui-gray-form-control-hover-bg, #dfdfdf)!important;border-color:var(--devui-gray-form-control-hover-bg, #dfdfdf)!important}:host ::ng-deep .devui-textarea-container.devui-gray-style[disabled]{background-color:var(--devui-disabled-bg, #f3f3f3)!important;border-color:transparent!important}:host ::ng-deep .devui-textarea-container:not(.devui-glow-style):not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):hover{border-color:var(--devui-form-control-line-hover, #808080)}:host ::ng-deep .devui-textarea-container:not(.devui-glow-style):not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):focus-within{border-color:var(--devui-form-control-line-active, #0a59f7)}:host ::ng-deep .devui-textarea-container::placeholder{color:var(--devui-placeholder, #808080)}:host ::ng-deep .devui-textarea-container:focus-within:placeholder-shown::placeholder{color:transparent;transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host ::ng-deep .devui-textarea-container:not(.disabled):not(.devui-disabled).error,:host ::ng-deep .devui-textarea-container:not(.disabled):not(.devui-disabled).devui-error{border-color:var(--devui-danger-line, #e02128);background-color:var(--devui-danger-bg, #fabdc1)}:host ::ng-deep .devui-textarea-container textarea{box-sizing:border-box;padding:4px 8px;vertical-align:middle;border:none;border-bottom:solid 32px transparent!important;min-width:160px;min-height:64px;width:100%;height:100%}:host ::ng-deep .devui-textarea-container.disabled,:host ::ng-deep .devui-textarea-container.disabled:hover,:host ::ng-deep .devui-textarea-container.devui-disabled,:host ::ng-deep .devui-textarea-container.devui-disabled:hover{cursor:not-allowed;background-color:var(--devui-disabled-bg, #f3f3f3);border-color:var(--devui-disabled-line, #e6e6e6)}:host ::ng-deep .devui-textarea-container.disabled textarea[dTextarea],:host ::ng-deep .devui-textarea-container.disabled textarea[dTextarea]:hover,:host ::ng-deep .devui-textarea-container.devui-disabled textarea[dTextarea],:host ::ng-deep .devui-textarea-container.devui-disabled textarea[dTextarea]:hover{color:var(--devui-disabled-text, #c2c2c2)}:host ::ng-deep .devui-textarea-container .devui-textarea-counter{float:none;position:absolute}\n"], dependencies: [{ 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TextareaDirective, selector: "[dTextarea]", inputs: ["maxLengthBlocker", "maxLengthCounter", "resize", "error", "rows", "styleType", "showGlowStyle"], exportAs: ["dTextarea"] }] }); } } __decorate([ WithConfig(), __metadata("design:type", Object) ], TextareaMaxLengthComponent.prototype, "styleType", void 0); __decorate([ WithConfig(), __metadata("design:type", Object) ], TextareaMaxLengthComponent.prototype, "showGlowStyle", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaMaxLengthComponent, decorators: [{ type: Component, args: [{ selector: 'd-textarea-max-length', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TextareaMaxLengthComponent), multi: true, }, ], preserveWhitespaces: false, template: "<div\r\n class=\"devui-textarea-container\"\r\n [class.devui-glow-style]=\"showGlowStyle\"\r\n [class.devui-gray-style]=\"styleType === 'gray'\"\r\n [class.error]=\"error\"\r\n [style.resize]=\"disabled ? 'none' : resize\"\r\n [style.max-width]=\"maxWidth\"\r\n [style.max-height]=\"maxHeight\"\r\n>\r\n <textarea\r\n dTextarea\r\n [disabled]=\"disabled\"\r\n [error]=\"error\"\r\n [maxLength]=\"maxLength\"\r\n [maxLengthBlocker]=\"maxLengthBlocker\"\r\n [maxLengthCounter]=\"true\"\r\n [placeholder]=\"placeholder\"\r\n [rows]=\"rows\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"valueChanges($event)\"\r\n (blur)=\"blurEvent()\"\r\n ></textarea>\r\n</div>\r\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host{display:block}:host ::ng-deep .devui-textarea-container{overflow:hidden;position:relative;width:100%;height:fit-content;min-width:160px;min-height:64px;border:1px solid var(--devui-form-control-line, #dbdbdb);border-radius:var(--devui-border-radius, 2px);color:var(--devui-text, #191919);outline:none;background-color:var(--devui-form-control-bg, #ffffff);box-shadow:0 0 0 0 var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08));transition:border-color .3s var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),box-shadow var(--devui-animation-duration-base, .2s) var(--devui-animation-ease-in, cubic-bezier(.5, 0, .84, .25))}:host ::ng-deep .devui-textarea-container.devui-glow-style:not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):not(.inner-input):hover{box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08))}:host ::ng-deep .devui-textarea-container.devui-glow-style:not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):not(.inner-input):focus-within{border-color:var(--devui-form-control-line-active, #0a59f7);box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08))}:host ::ng-deep .devui-textarea-container.devui-glow-style:not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):not(.inner-input):active{box-shadow:none}:host ::ng-deep .devui-textarea-container.devui-gray-style:not([disabled]){transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host ::ng-deep .devui-textarea-container.devui-gray-style:not([disabled]):not(:focus-within){background:var(--devui-gray-form-control-bg, #f5f5f5)!important;border-color:var(--devui-gray-form-control-bg, #f5f5f5)!important}:host ::ng-deep .devui-textarea-container.devui-gray-style:not([disabled]):not(:focus-within):hover{background-color:var(--devui-gray-form-control-hover-bg, #dfdfdf)!important;border-color:var(--devui-gray-form-control-hover-bg, #dfdfdf)!important}:host ::ng-deep .devui-textarea-container.devui-gray-style[disabled]{background-color:var(--devui-disabled-bg, #f3f3f3)!important;border-color:transparent!important}:host ::ng-deep .devui-textarea-container:not(.devui-glow-style):not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):hover{border-color:var(--devui-form-control-line-hover, #808080)}:host ::ng-deep .devui-textarea-container:not(.devui-glow-style):not([disabled]):not(.disabled):not(.devui-disabled):not(.error):not(.devui-error):focus-within{border-color:var(--devui-form-control-line-active, #0a59f7)}:host ::ng-deep .devui-textarea-container::placeholder{color:var(--devui-placeholder, #808080)}:host ::ng-deep .devui-textarea-container:focus-within:placeholder-shown::placeholder{color:transparent;transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host ::ng-deep .devui-textarea-container:not(.disabled):not(.devui-disabled).error,:host ::ng-deep .devui-textarea-container:not(.disabled):not(.devui-disabled).devui-error{border-color:var(--devui-danger-line, #e02128);background-color:var(--devui-danger-bg, #fabdc1)}:host ::ng-deep .devui-textarea-container textarea{box-sizing:border-box;padding:4px 8px;vertical-align:middle;border:none;border-bottom:solid 32px transparent!important;min-width:160px;min-height:64px;width:100%;height:100%}:host ::ng-deep .devui-textarea-container.disabled,:host ::ng-deep .devui-textarea-container.disabled:hover,:host ::ng-deep .devui-textarea-container.devui-disabled,:host ::ng-deep .devui-textarea-container.devui-disabled:hover{cursor:not-allowed;background-color:var(--devui-disabled-bg, #f3f3f3);border-color:var(--devui-disabled-line, #e6e6e6)}:host ::ng-deep .devui-textarea-container.disabled textarea[dTextarea],:host ::ng-deep .devui-textarea-container.disabled textarea[dTextarea]:hover,:host ::ng-deep .devui-textarea-container.devui-disabled textarea[dTextarea],:host ::ng-deep .devui-textarea-container.devui-disabled textarea[dTextarea]:hover{color:var(--devui-disabled-text, #c2c2c2)}:host ::ng-deep .devui-textarea-container .devui-textarea-counter{float:none;position:absolute}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i2$1.DevConfigService }], propDecorators: { textareaInstance: [{ type: ViewChild, args: [TextareaDirective] }], disabled: [{ type: Input }], error: [{ type: Input }], maxLength: [{ type: Input }], maxLengthBlocker: [{ type: Input }], placeholder: [{ type: Input }], rows: [{ type: Input }], maxWidth: [{ type: Input }], maxHeight: [{ type: Input }], resize: [{ type: Input }], styleType: [{ type: Input }], showGlowStyle: [{ type: Input }] } }); class TextareaModule { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TextareaModule, declarations: [TextareaDirective, TextareaMaxLengthComponent], imports: [CommonModule, FormsModule], exports: [TextareaDirective, TextareaMaxLengthComponent] }); } static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaModule, imports: [CommonModule, FormsModule] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextareaModule, decorators: [{ type: NgModule, args: [{ imports: [CommonModule, FormsModule], exports: [TextareaDirective, TextareaMaxLengthComponent], declarations: [TextareaDirective, TextareaMaxLengthComponent], }] }] }); /** * Generated bundle index. Do not edit. */ export { TextareaDirective, TextareaMaxLengthComponent, TextareaModule }; //# sourceMappingURL=ng-devui-textarea.mjs.map