sass-references/angular-material/material/chips/chip-edit-input.ts

59 lines
1.4 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
import {Directive, ElementRef, inject} from '@angular/core';
import {DOCUMENT} from '@angular/common';
/**
* A directive that makes a span editable and exposes functions to modify and retrieve the
* element's contents.
*/
@Directive({
selector: 'span[matChipEditInput]',
host: {
'class': 'mat-chip-edit-input',
'role': 'textbox',
'tabindex': '-1',
'contenteditable': 'true',
},
})
export class MatChipEditInput {
private readonly _elementRef = inject(ElementRef);
private readonly _document = inject(DOCUMENT);
constructor(...args: unknown[]);
constructor() {}
initialize(initialValue: string) {
this.getNativeElement().focus();
this.setValue(initialValue);
}
getNativeElement(): HTMLElement {
return this._elementRef.nativeElement;
}
setValue(value: string) {
this.getNativeElement().textContent = value;
this._moveCursorToEndOfInput();
}
getValue(): string {
return this.getNativeElement().textContent || '';
}
private _moveCursorToEndOfInput() {
const range = this._document.createRange();
range.selectNodeContents(this.getNativeElement());
range.collapse(false);
const sel = window.getSelection()!;
sel.removeAllRanges();
sel.addRange(range);
}
}