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.3 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLWJpbmRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cy9kaXJlY3RpdmUtYmluZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBTWhFLE1BQU0sVUFBVSxtQkFBbUIsQ0FLL0IsS0FBdUIsRUFDdkIsR0FBTSxFQUNOLE9BQVUsRUFDVixVQUF5QixFQUFDLElBQUksRUFBRSxJQUFJLEVBQUM7SUFFckMsTUFBTSxNQUFNLEdBQVEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRSxNQUFNLFNBQVMsR0FBUSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEQsa0hBQWtIO0lBQ2xILElBQUksUUFBYSxDQUFDO0lBRWxCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDUixNQUFNLEtBQUssR0FBUSxNQUFNLEVBQUUsQ0FBQztRQUU1QixJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUVELFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUU1QixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge0luamVjdE9wdGlvbnMsIFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgV3JpdGFibGVTaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtlZmZlY3QsIGluamVjdCwgaXNTaWduYWwsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RVSV9BTExPV19TSUdOQUxfV1JJVEVTfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5cbnR5cGUgU2lnbmFsTGlrZVR5cGVPZjxUPiA9IFQgZXh0ZW5kcyBTaWduYWw8aW5mZXIgUj4gPyBSIDogVDtcblxudHlwZSBTaWduYWxMaWtlPFQ+ID0gU2lnbmFsPFQ+IHwgVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHR1aURpcmVjdGl2ZUJpbmRpbmc8XG4gICAgVCxcbiAgICBHIGV4dGVuZHMga2V5b2YgVCxcbiAgICBJIGV4dGVuZHMgU2lnbmFsTGlrZTxTaWduYWxMaWtlVHlwZU9mPFRbR10+Pixcbj4oXG4gICAgdG9rZW46IFByb3ZpZGVyVG9rZW48VD4sXG4gICAga2V5OiBHLFxuICAgIGluaXRpYWw6IEksXG4gICAgb3B0aW9uczogSW5qZWN0T3B0aW9ucyA9IHtzZWxmOiB0cnVlfSxcbik6IEkgZXh0ZW5kcyBTaWduYWw8YW55PiA/IEkgOiBXcml0YWJsZVNpZ25hbDxJPiB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSBpc1NpZ25hbChpbml0aWFsKSA/IGluaXRpYWwgOiBzaWduYWwoaW5pdGlhbCk7XG4gICAgY29uc3QgZGlyZWN0aXZlOiBhbnkgPSBpbmplY3QodG9rZW4sIG9wdGlvbnMpO1xuICAgIGNvbnN0IG91dHB1dCA9IGRpcmVjdGl2ZVtgJHtrZXkudG9TdHJpbmcoKX1DaGFuZ2VgXTtcblxuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGVmZmVjdHMgYXJlIGV4ZWN1dGVkIGFsbCB0aGUgdGltZSBhbmQgbm90IGp1c3Qgd2hlbiByZXN1bHQgY2hhbmdlcyAoY2hlY2sgd2l0aCBBbmd1bGFyIDE4KVxuICAgIGxldCBwcmV2aW91czogYW55O1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWU6IGFueSA9IHJlc3VsdCgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NpZ25hbChkaXJlY3RpdmVba2V5XSkpIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZVtrZXldLnNldCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXJlY3RpdmVba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlyZWN0aXZlLm5nT25DaGFuZ2VzPy4oe30pO1xuICAgICAgICBvdXRwdXQ/LmVtaXQ/Lih2YWx1ZSk7XG4gICAgICAgIHByZXZpb3VzID0gdmFsdWU7XG4gICAgfSwgVFVJX0FMTE9XX1NJR05BTF9XUklURVMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==