{"version":3,"file":"taiga-ui-cdk-utils-di.mjs","sources":["../../../projects/cdk/utils/di/provide-options.ts","../../../projects/cdk/utils/di/create-options.ts","../../../projects/cdk/utils/di/directive-binding.ts","../../../projects/cdk/utils/di/provide.ts","../../../projects/cdk/utils/di/taiga-ui-cdk-utils-di.ts"],"sourcesContent":["import {type FactoryProvider, inject, type InjectionToken} from '@angular/core';\n\nexport function tuiProvideOptions<T>(\n    provide: InjectionToken<T>,\n    options: Partial<T> | (() => Partial<T>),\n    fallback: T,\n): FactoryProvider {\n    return {\n        provide,\n        useFactory: (): T => ({\n            ...(inject(provide, {optional: true, skipSelf: true}) || fallback),\n            ...(inject(options as unknown as InjectionToken<T>, {optional: true}) ||\n                (typeof options === 'function' ? options() : options)),\n        }),\n    };\n}\n","import {type FactoryProvider, InjectionToken} from '@angular/core';\n\nimport {tuiProvideOptions} from './provide-options';\n\nexport function tuiCreateOptions<T>(\n    defaults: T,\n): [\n    token: InjectionToken<T>,\n    provider: (item: Partial<T> | (() => Partial<T>)) => FactoryProvider,\n] {\n    const token = new InjectionToken(ngDevMode ? 'Options token' : '', {\n        factory: () => defaults,\n    });\n\n    return [token, (options) => tuiProvideOptions(token, options, defaults)];\n}\n","import {\n    effect,\n    inject,\n    type InjectOptions,\n    isSignal,\n    type ProviderToken,\n    type Signal,\n    signal,\n    type WritableSignal,\n} from '@angular/core';\nimport {tuiSetSignal} from '@taiga-ui/cdk/utils/miscellaneous';\n\ntype SignalLikeTypeOf<T> = T extends Signal<infer R> ? R : T;\n\ntype SignalLike<T> = Signal<T> | T;\n\n// TODO: Consider {} as default options instead\nexport function tuiDirectiveBinding<\n    T,\n    G extends keyof T,\n    I extends SignalLike<SignalLikeTypeOf<T[G]>>,\n>(\n    token: ProviderToken<T>,\n    key: G,\n    initial: I,\n    options: InjectOptions = {self: true},\n): I extends Signal<any> ? I : WritableSignal<I> {\n    const result: any = isSignal(initial) ? initial : signal(initial);\n    const directive: any = inject(token, options);\n    const output = directive?.[`${key.toString()}Change`];\n\n    if (!directive) {\n        return result;\n    }\n\n    // TODO: Figure out why effects are executed all the time and not just when result changes (check with Angular 18)\n    let previous: any;\n\n    effect(() => {\n        const value = result();\n\n        if (previous === value) {\n            return;\n        }\n\n        if (isSignal(directive[key])) {\n            tuiSetSignal(directive[key] as any, value);\n        } else {\n            directive[key] = value;\n        }\n\n        directive.ngOnChanges?.({});\n        output?.emit?.(value);\n        previous = value;\n    });\n\n    return result;\n}\n","import {type ExistingProvider, type ProviderToken} from '@angular/core';\n\nexport function tuiProvide<T>(\n    provide: ProviderToken<T>,\n    useExisting: ProviderToken<T>,\n): ExistingProvider;\nexport function tuiProvide<T>(\n    provide: ProviderToken<T | T[]>,\n    useExisting: ProviderToken<T>,\n    multi: boolean,\n): ExistingProvider;\nexport function tuiProvide<T>(\n    provide: ProviderToken<T>,\n    useExisting: ProviderToken<T>,\n    multi = false,\n): ExistingProvider {\n    return {provide, useExisting, multi};\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;SAEgB,iBAAiB,CAC7B,OAA0B,EAC1B,OAAwC,EACxC,QAAW,EAAA;IAEX,OAAO;QACH,OAAO;AACP,QAAA,UAAU,EAAE,OAAU;AAClB,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,QAAQ,CAAC;YAClE,IAAI,MAAM,CAAC,OAAuC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AACjE,iBAAC,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;SAC7D,CAAC;KACL;AACL;;ACXM,SAAU,gBAAgB,CAC5B,QAAW,EAAA;AAKX,IAAA,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,SAAS,GAAG,eAAe,GAAG,EAAE,EAAE;AAC/D,QAAA,OAAO,EAAE,MAAM,QAAQ;AAC1B,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,KAAK,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5E;;ACCA;AACM,SAAU,mBAAmB,CAK/B,KAAuB,EACvB,GAAM,EACN,OAAU,EACV,OAAA,GAAyB,EAAC,IAAI,EAAE,IAAI,EAAC,EAAA;AAErC,IAAA,MAAM,MAAM,GAAQ,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACjE,MAAM,SAAS,GAAQ,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;AAC7C,IAAA,MAAM,MAAM,GAAG,SAAS,GAAG,CAAA,EAAG,GAAG,CAAC,QAAQ,EAAE,CAAA,MAAA,CAAQ,CAAC;IAErD,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,MAAM;IACjB;;AAGA,IAAA,IAAI,QAAa;IAEjB,MAAM,CAAC,MAAK;AACR,QAAA,MAAM,KAAK,GAAG,MAAM,EAAE;AAEtB,QAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;YACpB;QACJ;QAEA,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;YAC1B,YAAY,CAAC,SAAS,CAAC,GAAG,CAAQ,EAAE,KAAK,CAAC;QAC9C;aAAO;AACH,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;QAC1B;AAEA,QAAA,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;AAC3B,QAAA,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC;QACrB,QAAQ,GAAG,KAAK;AACpB,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACjB;;AC9CM,SAAU,UAAU,CACtB,OAAyB,EACzB,WAA6B,EAC7B,KAAK,GAAG,KAAK,EAAA;AAEb,IAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAC;AACxC;;ACjBA;;AAEG;;;;"}