UNPKG

igniteui-webcomponents

Version:

Ignite UI for Web Components is a complete library of UI components, giving you the ability to build modern web applications using encapsulation and the concept of reusable components in a dependency-free approach.

138 lines 5.42 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { property, state } from 'lit/decorators.js'; import { blazorDeepImport } from '../common/decorators/blazorDeepImport.js'; import { IgcInputBaseComponent } from '../input/input-base.js'; import { MaskParser } from './mask-parser.js'; let IgcMaskInputBaseComponent = class IgcMaskInputBaseComponent extends IgcInputBaseComponent { constructor() { super(...arguments); this.parser = new MaskParser(); this.selection = { start: 0, end: 0 }; this.compositionStart = 0; this.focused = false; this.maskedValue = ''; this._mask = ''; } get inputSelection() { return { start: this.input.selectionStart || 0, end: this.input.selectionEnd || 0, }; } get emptyMask() { return this.parser.apply(); } connectedCallback() { super.connectedCallback(); this._mask = this._mask || this.parser.mask; this.prompt = this.prompt || this.parser.prompt; } select() { this.input.select(); } handleInput({ inputType, isComposing }) { const EMPTY = ''; const value = this.input.value; const { start, end } = this.selection; const deleteEnd = this.parser.getNextNonLiteralPosition(end) + 1; switch (inputType) { case 'deleteContentForward': this.updateInput(EMPTY, { start, end: deleteEnd }); return this.updateComplete.then(() => this.input.setSelectionRange(deleteEnd, deleteEnd)); case 'deleteContentBackward': if (isComposing) return; return this.updateInput(EMPTY, { start: this.parser.getPreviousNonLiteralPosition(this.inputSelection.start), end, }); case 'deleteByCut': return this.updateInput(EMPTY, this.selection); case 'insertText': return this.updateInput(value.substring(start, this.inputSelection.end), this.selection); case 'insertFromPaste': return this.updateInput(value.substring(start, this.inputSelection.end), { start, end: this.inputSelection.start, }); case 'insertFromDrop': return this.updateInput(value.substring(this.inputSelection.start, this.inputSelection.end), { ...this.inputSelection }); } } handleKeydown({ key }) { if (!key) { return; } this.selection = this.inputSelection; } handleCut() { this.selection = this.inputSelection; } handleDragStart() { this.selection = this.inputSelection; } handleCompositionStart() { this.compositionStart = this.inputSelection.start; } handleCompositionEnd({ data }) { this.updateInput(data, { start: this.compositionStart, end: this.inputSelection.end, }); } handleClick() { const { selectionStart: start, selectionEnd: end } = this.input; if (start === end && start === this.maskedValue.length) { this.select(); } } setSelectionRange(start, end, direction) { super.setSelectionRange(start, end, direction); this.selection = { start, end }; } setRangeText(replacement, start, end, selectMode) { const current = this.inputSelection; const _start = start ?? current.start; const _end = end ?? current.end; const result = this.parser.replace(this.maskedValue || this.emptyMask, replacement, _start, _end); this.maskedValue = this.parser.apply(this.parser.parse(result.value)); this._updateSetRangeTextValue(); this.updateComplete.then(() => { switch (selectMode) { case 'select': this.setSelectionRange(_start, _end); break; case 'start': this.setSelectionRange(_start, _start); break; case 'end': this.setSelectionRange(_end, _end); break; default: this.setSelectionRange(current.start, current.end); } }); } }; __decorate([ state() ], IgcMaskInputBaseComponent.prototype, "focused", void 0); __decorate([ state() ], IgcMaskInputBaseComponent.prototype, "maskedValue", void 0); __decorate([ state() ], IgcMaskInputBaseComponent.prototype, "_mask", void 0); __decorate([ property() ], IgcMaskInputBaseComponent.prototype, "prompt", void 0); IgcMaskInputBaseComponent = __decorate([ blazorDeepImport ], IgcMaskInputBaseComponent); export { IgcMaskInputBaseComponent }; //# sourceMappingURL=mask-input-base.js.map