{"version":3,"file":"ngxtension-inject-inputs.mjs","sources":["../../../../libs/ngxtension/inject-inputs/src/lib/inject-inputs.ts","../../../../libs/ngxtension/inject-inputs/src/lib/merge-inputs.ts","../../../../libs/ngxtension/inject-inputs/src/ngxtension-inject-inputs.ts"],"sourcesContent":["import {\n\tcomputed,\n\tisSignal,\n\treflectComponentType,\n\ttype InputSignal,\n\ttype Signal,\n\ttype Type,\n} from '@angular/core';\n\nexport type InjectedInputs<T> = {\n\t[P in keyof T as T[P] extends InputSignal<any>\n\t\t? P\n\t\t: never]: T[P] extends InputSignal<infer U> ? U : never;\n};\n\nexport function inputs<TDir extends Type<any>>(\n\tdir: InstanceType<TDir>,\n\tdirType: TDir,\n): Signal<InjectedInputs<InstanceType<TDir>>> {\n\tconst mirror = reflectComponentType(dirType);\n\n\tif (!mirror) {\n\t\tthrow new Error(\n\t\t\t`[ngxtension] The provided symbol is not a component nor a directive`,\n\t\t);\n\t}\n\n\tconst inputs = mirror.inputs.reduce(\n\t\t(inputs, cur) => {\n\t\t\tif (dir[cur.propName] && isSignal(dir[cur.propName])) {\n\t\t\t\tinputs[cur.propName] = dir[cur.propName];\n\t\t\t}\n\t\t\treturn inputs;\n\t\t},\n\t\t{} as Record<string, InputSignal<any>>,\n\t);\n\n\treturn computed(() =>\n\t\tObject.keys(inputs).reduce(\n\t\t\t(acc, key) => {\n\t\t\t\tacc[key] = inputs[key]();\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, any>,\n\t\t),\n\t) as Signal<InjectedInputs<InstanceType<TDir>>>;\n}\n\n/**\n * @deprecated Please use `inputs()` instead. Will be removed in v5\n * @since v4\n */\nexport function injectInputs<TDir extends Type<any>>(\n\tdir: InstanceType<TDir>,\n\tdirType: TDir,\n): Signal<InjectedInputs<InstanceType<TDir>>> {\n\treturn inputs(dir, dirType);\n}\n","/**\n * `mergeInputs` is meant to be used as a `transform` function for Object-input (input with object value)\n */\nexport function mergeInputs<TInputs extends object>(\n\tdefaultValue: TInputs = {} as TInputs,\n): (value: '' | Partial<TInputs>) => TInputs {\n\treturn (value: '' | Partial<TInputs>) => {\n\t\t// NOTE: if the directive is used as `<div directive></div>` without binding syntax\n\t\t// then the bound value is `''` in which case we'll return the `defaultValue` for the input\n\t\tif (value === '') return defaultValue;\n\t\treturn { ...defaultValue, ...value };\n\t};\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAegB,SAAA,MAAM,CACrB,GAAuB,EACvB,OAAa,EAAA;AAEb,IAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACd,CAAA,mEAAA,CAAqE,CACrE,CAAC;KACF;AAED,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAClC,CAAC,MAAM,EAAE,GAAG,KAAI;AACf,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE;AACrD,YAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SACzC;AACD,QAAA,OAAO,MAAM,CAAC;KACd,EACD,EAAsC,CACtC,CAAC;AAEF,IAAA,OAAO,QAAQ,CAAC,MACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CACzB,CAAC,GAAG,EAAE,GAAG,KAAI;QACZ,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,OAAO,GAAG,CAAC;AACZ,KAAC,EACD,EAAyB,CACzB,CAC6C,CAAC;AACjD,CAAC;AAED;;;AAGG;AACa,SAAA,YAAY,CAC3B,GAAuB,EACvB,OAAa,EAAA;AAEb,IAAA,OAAO,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7B;;ACzDA;;AAEG;AACa,SAAA,WAAW,CAC1B,YAAA,GAAwB,EAAa,EAAA;IAErC,OAAO,CAAC,KAA4B,KAAI;;;QAGvC,IAAI,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,YAAY,CAAC;AACtC,QAAA,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE,CAAC;AACtC,KAAC,CAAC;AACH;;ACZA;;AAEG;;;;"}