UNPKG

@taiga-ui/cdk

Version:

Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance

26 lines 4.34 kB
import { effect, inject, isSignal, signal, } from '@angular/core'; import { TUI_ALLOW_SIGNAL_WRITES } from '@taiga-ui/cdk/constants'; export function tuiDirectiveBinding(token, key, initial, options = { self: true }) { const result = isSignal(initial) ? initial : signal(initial); const directive = inject(token, options); const output = directive[`${key.toString()}Change`]; // TODO: Figure out why effects are executed all the time and not just when result changes (check with Angular 18) let previous; effect(() => { const value = result(); if (previous === value) { return; } if (isSignal(directive[key])) { directive[key].set(value); } else { directive[key] = value; } directive.ngOnChanges?.({}); output?.emit?.(value); previous = value; }, TUI_ALLOW_SIGNAL_WRITES); return result; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLWJpbmRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cy9kaXJlY3RpdmUtYmluZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsTUFBTSxFQUNOLE1BQU0sRUFFTixRQUFRLEVBR1IsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBTWhFLE1BQU0sVUFBVSxtQkFBbUIsQ0FLL0IsS0FBdUIsRUFDdkIsR0FBTSxFQUNOLE9BQVUsRUFDVixVQUF5QixFQUFDLElBQUksRUFBRSxJQUFJLEVBQUM7SUFFckMsTUFBTSxNQUFNLEdBQVEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRSxNQUFNLFNBQVMsR0FBUSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEQsa0hBQWtIO0lBQ2xILElBQUksUUFBYSxDQUFDO0lBRWxCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDUixNQUFNLEtBQUssR0FBUSxNQUFNLEVBQUUsQ0FBQztRQUU1QixJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUVELFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUU1QixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIHR5cGUgSW5qZWN0T3B0aW9ucyxcbiAgICBpc1NpZ25hbCxcbiAgICB0eXBlIFByb3ZpZGVyVG9rZW4sXG4gICAgdHlwZSBTaWduYWwsXG4gICAgc2lnbmFsLFxuICAgIHR5cGUgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUVUlfQUxMT1dfU0lHTkFMX1dSSVRFU30gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuXG50eXBlIFNpZ25hbExpa2VUeXBlT2Y8VD4gPSBUIGV4dGVuZHMgU2lnbmFsPGluZmVyIFI+ID8gUiA6IFQ7XG5cbnR5cGUgU2lnbmFsTGlrZTxUPiA9IFNpZ25hbDxUPiB8IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlEaXJlY3RpdmVCaW5kaW5nPFxuICAgIFQsXG4gICAgRyBleHRlbmRzIGtleW9mIFQsXG4gICAgSSBleHRlbmRzIFNpZ25hbExpa2U8U2lnbmFsTGlrZVR5cGVPZjxUW0ddPj4sXG4+KFxuICAgIHRva2VuOiBQcm92aWRlclRva2VuPFQ+LFxuICAgIGtleTogRyxcbiAgICBpbml0aWFsOiBJLFxuICAgIG9wdGlvbnM6IEluamVjdE9wdGlvbnMgPSB7c2VsZjogdHJ1ZX0sXG4pOiBJIGV4dGVuZHMgU2lnbmFsPGFueT4gPyBJIDogV3JpdGFibGVTaWduYWw8ST4ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55ID0gaXNTaWduYWwoaW5pdGlhbCkgPyBpbml0aWFsIDogc2lnbmFsKGluaXRpYWwpO1xuICAgIGNvbnN0IGRpcmVjdGl2ZTogYW55ID0gaW5qZWN0KHRva2VuLCBvcHRpb25zKTtcbiAgICBjb25zdCBvdXRwdXQgPSBkaXJlY3RpdmVbYCR7a2V5LnRvU3RyaW5nKCl9Q2hhbmdlYF07XG5cbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBlZmZlY3RzIGFyZSBleGVjdXRlZCBhbGwgdGhlIHRpbWUgYW5kIG5vdCBqdXN0IHdoZW4gcmVzdWx0IGNoYW5nZXMgKGNoZWNrIHdpdGggQW5ndWxhciAxOClcbiAgICBsZXQgcHJldmlvdXM6IGFueTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSByZXN1bHQoKTtcblxuICAgICAgICBpZiAocHJldmlvdXMgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTaWduYWwoZGlyZWN0aXZlW2tleV0pKSB7XG4gICAgICAgICAgICBkaXJlY3RpdmVba2V5XS5zZXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlyZWN0aXZlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpcmVjdGl2ZS5uZ09uQ2hhbmdlcz8uKHt9KTtcbiAgICAgICAgb3V0cHV0Py5lbWl0Py4odmFsdWUpO1xuICAgICAgICBwcmV2aW91cyA9IHZhbHVlO1xuICAgIH0sIFRVSV9BTExPV19TSUdOQUxfV1JJVEVTKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iXX0=