@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
29 lines • 4.15 kB
JavaScript
import { effect, signal } from '@angular/core';
import { tuiInjectElement } from './inject-element';
/**
* Host binding `host: {'[value]': 'yourSignal()'}` is not an option for our textfields –
* they use {@link TuiTextfieldDirective} as a host directive.
* `TuiTextfieldDirective` has host binding which depends on native input's value.
* Host bindings of the host directives are re-calculated BEFORE component's ones –
* native input's value should be updated SYNCHRONOUSLY before next change detection iteration.
* @deprecated
*/
export function tuiValueBinding(value = signal(tuiInjectElement().value || '')) {
const el = tuiInjectElement();
effect(() => {
if (el.value === value()) {
return;
}
const { selectionStart, selectionEnd } = el;
el.value = value();
if (el.matches(':focus')) {
/**
* After programmatic updates of input's value, caret is automatically placed at the end –
* revert to the previous position
*/
el.setSelectionRange(selectionStart, selectionEnd);
}
});
return value;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtYmluZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay91dGlscy9kb20vdmFsdWUtYmluZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFlLE1BQU0sRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFLbEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzNCLFFBQXdCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBRWhGLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixFQUFvQixDQUFDO0lBRWhELE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDUixJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDdEIsT0FBTztTQUNWO1FBRUQsTUFBTSxFQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUMsR0FBRyxFQUFFLENBQUM7UUFFMUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUVuQixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEI7OztlQUdHO1lBQ0gsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZWZmZWN0LCB0eXBlIFNpZ25hbCwgc2lnbmFsLCB0eXBlIFdyaXRhYmxlU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICcuL2luamVjdC1lbGVtZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIHR1aVZhbHVlQmluZGluZyh2YWx1ZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4pOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uIHR1aVZhbHVlQmluZGluZyh2YWx1ZT86IFNpZ25hbDxzdHJpbmc+KTogU2lnbmFsPHN0cmluZz47XG5cbi8qKlxuICogSG9zdCBiaW5kaW5nIGBob3N0OiB7J1t2YWx1ZV0nOiAneW91clNpZ25hbCgpJ31gIGlzIG5vdCBhbiBvcHRpb24gZm9yIG91ciB0ZXh0ZmllbGRzIOKAk1xuICogdGhleSB1c2Uge0BsaW5rIFR1aVRleHRmaWVsZERpcmVjdGl2ZX0gYXMgYSBob3N0IGRpcmVjdGl2ZS5cbiAqIGBUdWlUZXh0ZmllbGREaXJlY3RpdmVgIGhhcyBob3N0IGJpbmRpbmcgd2hpY2ggZGVwZW5kcyBvbiBuYXRpdmUgaW5wdXQncyB2YWx1ZS5cbiAqIEhvc3QgYmluZGluZ3Mgb2YgdGhlIGhvc3QgZGlyZWN0aXZlcyBhcmUgcmUtY2FsY3VsYXRlZCBCRUZPUkUgY29tcG9uZW50J3Mgb25lcyDigJNcbiAqIG5hdGl2ZSBpbnB1dCdzIHZhbHVlIHNob3VsZCBiZSB1cGRhdGVkIFNZTkNIUk9OT1VTTFkgYmVmb3JlIG5leHQgY2hhbmdlIGRldGVjdGlvbiBpdGVyYXRpb24uXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHVpVmFsdWVCaW5kaW5nKFxuICAgIHZhbHVlOiBTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCh0dWlJbmplY3RFbGVtZW50PEhUTUxJbnB1dEVsZW1lbnQ+KCkudmFsdWUgfHwgJycpLFxuKTogU2lnbmFsPHN0cmluZz4ge1xuICAgIGNvbnN0IGVsID0gdHVpSW5qZWN0RWxlbWVudDxIVE1MSW5wdXRFbGVtZW50PigpO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGVsLnZhbHVlID09PSB2YWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZH0gPSBlbDtcblxuICAgICAgICBlbC52YWx1ZSA9IHZhbHVlKCk7XG5cbiAgICAgICAgaWYgKGVsLm1hdGNoZXMoJzpmb2N1cycpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFmdGVyIHByb2dyYW1tYXRpYyB1cGRhdGVzIG9mIGlucHV0J3MgdmFsdWUsIGNhcmV0IGlzIGF1dG9tYXRpY2FsbHkgcGxhY2VkIGF0IHRoZSBlbmQg4oCTXG4gICAgICAgICAgICAgKiByZXZlcnQgdG8gdGhlIHByZXZpb3VzIHBvc2l0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG59XG4iXX0=