UNPKG

ng-devui

Version:

DevUI components based on Angular

151 lines 19.3 kB
import { __decorate, __metadata } from "tslib"; import { DOCUMENT } from '@angular/common'; import { Directive, ElementRef, HostBinding, Inject, Input, Optional, Renderer2, Self } from '@angular/core'; import { NgModel } from '@angular/forms'; import { DevConfigService, WithConfig } from 'ng-devui/utils'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "ng-devui/utils"; export 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: i1.NgModel, optional: true, self: true }, { token: DOCUMENT }, { token: i2.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: i1.NgModel, decorators: [{ type: Optional }, { type: Self }] }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i2.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'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvdGV4dGFyZWEvdGV4dGFyZWEuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNOUQsTUFBTSxPQUFPLGlCQUFpQjtJQVE1QixJQUEyQyxZQUFZO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBMkMsSUFBSTtRQUM3QyxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFTRCxZQUM4QixPQUFnQixFQUNsQixHQUFRLEVBQzFCLGdCQUFrQyxFQUNsQyxFQUFjLEVBQ2QsTUFBaUI7UUFKRyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2xCLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQTFCbEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNJLFdBQU0sR0FBNEQsTUFBTSxDQUFDO1FBRTVFLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDckIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixrQkFBYSxHQUFHLElB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Z0JBR00sSUFBSTtzQkFBOUMsV0FBVzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEZXZDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZFRleHRhcmVhXScsXHJcbiAgZXhwb3J0QXM6ICdkVGV4dGFyZWEnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dGFyZWFEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1heExlbmd0aEJsb2NrZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhMZW5ndGhDb3VudGVyID0gZmFsc2U7XHJcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdzdHlsZS5yZXNpemUnKSByZXNpemU6ICdub25lJyB8ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCAnYm90aCcgfCAnaW5oZXJpdCcgPSAnbm9uZSc7XHJcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5lcnJvcicpIGVycm9yOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnYXR0ci5yb3dzJykgcm93cyA9IDM7XHJcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBzdHlsZVR5cGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBzaG93R2xvd1N0eWxlID0gdHJ1ZTtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWdsb3ctc3R5bGUnKSBnZXQgaGFzR2xvd1N0eWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0dsb3dTdHlsZTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1ncmF5LXN0eWxlJykgZ2V0IGdyYXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZVR5cGUgPT09ICdncmF5JztcclxuICB9XHJcbiAgY2hlY2tNYXhMZW5ndGg6IEZ1bmN0aW9uO1xyXG4gIGdldE1heExlbmd0aDogRnVuY3Rpb247XHJcbiAgY291bnRlcjogSFRNTFNwYW5FbGVtZW50O1xyXG4gIGNvdW50ZXJJbm5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgZG9jdW1lbnQ6IGFueTtcclxuICByZXNpemVXYXRjaGVyOiBhbnk7XHJcbiAgZm9udFNpemUgPSAxMjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgbmdNb2RlbDogTmdNb2RlbCxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jOiBhbnksXHJcbiAgICBwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXI6IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gICAgdGhpcy5kb2N1bWVudCA9IHRoaXMuZG9jO1xyXG4gICAgY29uc3Qgcm9vdCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCc6cm9vdCcpKTtcclxuICAgIHRoaXMuZm9udFNpemUgPSBwYXJzZUludChyb290LmdldFByb3BlcnR5VmFsdWUoJy0tZGV2dWktZm9udC1zaXplLXNtJyksIDEwKSB8fCAxMjtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0TWF4TGVuZ3RoQmxvY2tlcigpO1xyXG4gICAgdGhpcy5zZXRNYXhMZW5ndGhDb3VudGVyKCk7XHJcbiAgICAvLyDnm5HlkKwgbmdNb2RlbCDlj5jljJZcclxuICAgIGNvbnN0IG1heCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXhMZW5ndGg7XHJcbiAgICBjb25zdCBydWxlcyA9IFshIXRoaXMubmdNb2RlbCwgdGhpcy5tYXhMZW5ndGhDb3VudGVyLCAhIW1heF07XHJcbiAgICBpZiAoIXJ1bGVzLmluY2x1ZGVzKGZhbHNlKSkge1xyXG4gICAgICB0aGlzLm5nTW9kZWwudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdmFsdWUgfHwgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuY291bnRlcklubmVyLnRleHRDb250ZW50ID0gYCR7Y29udGVudC5sZW5ndGh9LyR7bWF4fWA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja01heExlbmd0aCkge1xyXG4gICAgICB0aGlzLmNoZWNrTWF4TGVuZ3RoKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5nZXRNYXhMZW5ndGgpIHtcclxuICAgICAgdGhpcy5nZXRNYXhMZW5ndGgoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc2l6ZVdhdGNoZXIpIHtcclxuICAgICAgdGhpcy5yZXNpemVXYXRjaGVyLnVub2JzZXJ2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TWF4TGVuZ3RoQmxvY2tlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1heExlbmd0aEJsb2NrZXIpIHtcclxuICAgICAgdGhpcy5jaGVja01heExlbmd0aCA9IHRoaXMucmVuZGVyLmxpc3Rlbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdjb21wb3NpdGlvbnVwZGF0ZScsICgpID0+IHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDpgJrov4flpLHnhKbkuK3mlq1jb21wb3NpdGlvbui+k+WFpeS6i+S7tuinhOmBv2Nocm9tZSB0ZXh0YXJlYeS4reaWh+espuWPt+i+k+WFpei2heWHuuacgOWkp+WuveW6pumXrumimO+8jOWmgua1j+iniOWZqOS/ruWkjeivpemXrumimOWPr+enu+mZpOatpOaWueazlVxyXG4gICAgICAgICAqIOWkjeeOsOatpemqpO+8mlxyXG4gICAgICAgICAqIDEuIOi+k+iLpeW5suWFpeWGheWuuVxyXG4gICAgICAgICAqIDIuIOWbnui9puaNouihjFxyXG4gICAgICAgICAqIDMuIOeymOi0tOWGheWuueiHs+acgOWkp+mVv+W6plxyXG4gICAgICAgICAqIDQuIOi+k+WFpeS4reaWh+etieinpuWPkWNvbXBvc2l0aW9u5LqL5Lu26L6T5YWl5rOV55qE56ym5Y+3XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heExlbmd0aDtcclxuICAgICAgICBjb25zdCBsZW4gPSAodGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50IHx8IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSkubGVuZ3RoO1xyXG4gICAgICAgIGlmIChtYXggPD0gbGVuKSB7XHJcbiAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE1heExlbmd0aENvdW50ZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4TGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoQ291bnRlciAmJiBtYXgpIHtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5uZ01vZGVsPy5tb2RlbCA/IHRoaXMubmdNb2RlbC5tb2RlbC5sZW5ndGggOiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xyXG4gICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgdGhpcy5jb3VudGVyLmNsYXNzTmFtZSA9ICdkZXZ1aS10ZXh0YXJlYS1jb3VudGVyJztcclxuICAgICAgdGhpcy5jb3VudGVySW5uZXIgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcclxuICAgICAgdGhpcy5jb3VudGVySW5uZXIudGV4dENvbnRlbnQgPSBgJHtsZW5ndGh9LyR7bWF4fWA7XHJcbiAgICAgIHRoaXMuY291bnRlcklubmVyLnN0eWxlLndpZHRoID0gYCR7KFN0cmluZyhtYXgpLmxlbmd0aCAqIDIgKyAxKSAqIHRoaXMuZm9udFNpemV9cHhgO1xyXG4gICAgICB0aGlzLmNvdW50ZXIuYXBwZW5kQ2hpbGQodGhpcy5jb3VudGVySW5uZXIpO1xyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYWZ0ZXIodGhpcy5jb3VudGVyKTtcclxuICAgICAgdGhpcy5jaGVja01heExlbmd0aCA9IHRoaXMucmVuZGVyLmxpc3Rlbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvdW50ZXJJbm5lci50ZXh0Q29udGVudCA9IGAke3RoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGh9LyR7bWF4fWA7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlc2l6ZVdhdGNoZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY291bnRlci5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gdGhpcy5jb3VudGVySW5uZXIub2Zmc2V0V2lkdGh9cHhgO1xyXG4gICAgICAgIHRoaXMuY291bnRlci5zdHlsZS50b3AgPSBgJHt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gdGhpcy5jb3VudGVyLm9mZnNldEhlaWdodH1weGA7XHJcbiAgICAgIH0pLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19