ng-devui
Version:
DevUI components based on Angular
151 lines • 19.3 kB
JavaScript
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