import type { ComponentPropertyOption, DataOption, MethodOption } from './types'; export type OptionBehavior = BehaviorOptionsBase; export type BehaviorOptionsBase = { data?: Data; behaviors?: Behavior[]; methods?: Method; properties?: Property; }; export type OptionTypesKeys = 'Data' | 'Method' | 'Property'; export type OptionTypesType = { Data: Data; Method: Method; Property: Property; }; export type UnwrapBehaviorsType = T extends OptionTypesType ? T[Type] : never; export type IsDefaultBehaviorComponent = T extends OptionBehavior ? OptionBehavior extends T ? true : false : false; export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type BehaviorToOptionTypes = T extends BehaviorOptionsBase ? OptionTypesType & IntersectionBehavior : never; export type ExtractBehavior = { Behavior: BehaviorToOptionTypes; }[T extends OptionBehavior ? 'Behavior' : never]; export type IntersectionBehavior = IsDefaultBehaviorComponent extends true ? OptionTypesType : UnionToIntersection>;