{"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/inject-form-field.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';\nimport {tuiOverride} from '@taiga-ui/cdk/utils/miscellaneous';\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            tuiOverride(\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 {computed, inject, type InjectOptions, type Signal} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {type TuiCompatValidationError} from '@taiga-ui/cdk/types';\n\n/**\n * @deprecated use inject(FORM_FIELD) from `@angular/forms/signals` if Angular >= 21\n */\nexport function tuiInjectFormField(\n    options: InjectOptions = {},\n): Signal<{errors: Signal<readonly TuiCompatValidationError[]>}> {\n    const control = inject(NgControl, options);\n\n    // @ts-expect-error\n    return computed(() => control?.field?.());\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":";;;;SAGgB,iBAAiB,CAC7B,OAA0B,EAC1B,OAAwC,EACxC,QAAW,EAAA;IAEX,OAAO;QACH,OAAO;AACP,QAAA,UAAU,EAAE,MACR,WAAW,CACP,MAAM,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,QAAQ,EAC7D,MAAM,CAAC,OAAuC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC7D,aAAC,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAC5D;KACR;AACL;;ACbM,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;;ACrDA;;AAEG;AACG,SAAU,kBAAkB,CAC9B,OAAA,GAAyB,EAAE,EAAA;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;;IAG1C,OAAO,QAAQ,CAAC,MAAM,OAAO,EAAE,KAAK,IAAI,CAAC;AAC7C;;ACHM,SAAU,UAAU,CACtB,OAAyB,EACzB,WAA6B,EAC7B,KAAK,GAAG,KAAK,EAAA;AAEb,IAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAC;AACxC;;ACjBA;;AAEG;;;;"}