@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
29 lines • 4.18 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtYmluZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay91dGlscy9kb20vdmFsdWUtYmluZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUtsRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsUUFBd0IsTUFBTSxDQUFDLGdCQUFnQixFQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFFaEYsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLEVBQW9CLENBQUM7SUFFaEQsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNSLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFFRCxNQUFNLEVBQUMsY0FBYyxFQUFFLFlBQVksRUFBQyxHQUFHLEVBQUUsQ0FBQztRQUUxQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBRW5CLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0Qjs7O2VBR0c7WUFDSCxFQUFFLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1NpZ25hbCwgV3JpdGFibGVTaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtlZmZlY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnLi9pbmplY3QtZWxlbWVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlWYWx1ZUJpbmRpbmcodmFsdWU/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+KTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiB0dWlWYWx1ZUJpbmRpbmcodmFsdWU/OiBTaWduYWw8c3RyaW5nPik6IFNpZ25hbDxzdHJpbmc+O1xuXG4vKipcbiAqIEhvc3QgYmluZGluZyBgaG9zdDogeydbdmFsdWVdJzogJ3lvdXJTaWduYWwoKSd9YCBpcyBub3QgYW4gb3B0aW9uIGZvciBvdXIgdGV4dGZpZWxkcyDigJNcbiAqIHRoZXkgdXNlIHtAbGluayBUdWlUZXh0ZmllbGREaXJlY3RpdmV9IGFzIGEgaG9zdCBkaXJlY3RpdmUuXG4gKiBgVHVpVGV4dGZpZWxkRGlyZWN0aXZlYCBoYXMgaG9zdCBiaW5kaW5nIHdoaWNoIGRlcGVuZHMgb24gbmF0aXZlIGlucHV0J3MgdmFsdWUuXG4gKiBIb3N0IGJpbmRpbmdzIG9mIHRoZSBob3N0IGRpcmVjdGl2ZXMgYXJlIHJlLWNhbGN1bGF0ZWQgQkVGT1JFIGNvbXBvbmVudCdzIG9uZXMg4oCTXG4gKiBuYXRpdmUgaW5wdXQncyB2YWx1ZSBzaG91bGQgYmUgdXBkYXRlZCBTWU5DSFJPTk9VU0xZIGJlZm9yZSBuZXh0IGNoYW5nZSBkZXRlY3Rpb24gaXRlcmF0aW9uLlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR1aVZhbHVlQmluZGluZyhcbiAgICB2YWx1ZTogU2lnbmFsPHN0cmluZz4gPSBzaWduYWwodHVpSW5qZWN0RWxlbWVudDxIVE1MSW5wdXRFbGVtZW50PigpLnZhbHVlIHx8ICcnKSxcbik6IFNpZ25hbDxzdHJpbmc+IHtcbiAgICBjb25zdCBlbCA9IHR1aUluamVjdEVsZW1lbnQ8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChlbC52YWx1ZSA9PT0gdmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmR9ID0gZWw7XG5cbiAgICAgICAgZWwudmFsdWUgPSB2YWx1ZSgpO1xuXG4gICAgICAgIGlmIChlbC5tYXRjaGVzKCc6Zm9jdXMnKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBZnRlciBwcm9ncmFtbWF0aWMgdXBkYXRlcyBvZiBpbnB1dCdzIHZhbHVlLCBjYXJldCBpcyBhdXRvbWF0aWNhbGx5IHBsYWNlZCBhdCB0aGUgZW5kIOKAk1xuICAgICAgICAgICAgICogcmV2ZXJ0IHRvIHRoZSBwcmV2aW91cyBwb3NpdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIl19