import type { EventEmitter } from '../../stencil-public-runtime'; import type { JSXBase } from '../../stencil-public-runtime'; import type { Prop } from '../props'; type Callback = (value?: T) => void; export type StrictFields = { [K in keyof T]-?: NonNullable; }; type UnionToIntersection = (U extends unknown ? (arg: U) => void : never) extends (arg: infer I) => void ? I : never; export type InternalOf

= { [K in keyof P as K extends `__input_${string}` | '__propInternal__' ? never : K]: P[K]; }; type ExternalOf

= { [K in keyof P as K extends `__input_${string}` | '__propInternal__' ? never : K]: `__input_${K & string}` extends keyof P ? NonNullable : P[K]; }; type PropsDefinition = { Optional?: Record; Required?: Record; }; export interface ComponentApi { Callbacks?: Record unknown>; Emitters?: Record; Listeners?: Record; Methods?: Record unknown>; Props?: PropsDefinition; Refs?: Record; States: Record; } type AnyPropDef = { readonly __phantomProp__?: Prop; readonly propName: string; getDefaultValue(): unknown; }; type ExtractPhantomProp = D extends { readonly __phantomProp__?: infer P extends Prop; } ? P : never; type MergePropsFromArray = UnionToIntersection>; export type PropsConfigShape = { optional?: readonly AnyPropDef[]; required?: readonly AnyPropDef[]; }; export type ApiFromConfig> = Record> = { Props: { Optional: Config['optional'] extends readonly AnyPropDef[] ? MergePropsFromArray : Record; Required: Config['required'] extends readonly AnyPropDef[] ? MergePropsFromArray : Record; }; States: Extra extends { States: infer S extends Record; } ? S : Record; } & Omit; type PropsEntry = T['Props'] extends PropsDefinition ? T['Props'][K] extends Record ? T['Props'][K] : Record : Record; type RequiredProps = PropsEntry; type OptionalProps = PropsEntry; type AllProps = RequiredProps & OptionalProps; export type ResolvedProps = InternalOf> & Partial>>; export type ResolvedInputProps = ExternalOf> & Partial>>; type ApiField = T[K] extends Record ? T[K] : Record; type ExtractCallbacks = ApiField; type ExtractEmitters = ApiField; type ExtractListeners = ApiField; type ExtractMethods = ApiField; type ExtractRefs = ApiField; type ExtractStates = InternalOf>; type InternalProps = InternalOf>; type ExternalProps = ExternalOf>; export type SetStateFn = >>(key: K, value: InternalOf>[K]) => void; export type GetStateFn = >>(key: K) => InternalOf>[K]; export type StateAccess = { setState: SetStateFn; getState: GetStateFn; }; type PromiseMethod = { [K in keyof Methods]: Methods[K] extends (...args: infer A) => infer R ? (...args: A) => Promise> : Methods[K]; }; type ComponentPropsRequired = { [K in keyof Props as `_${Lowercase}`]: Props[K]; }; type ComponentPropsOptional = { [K in keyof Props as `_${Lowercase}`]?: Props[K]; }; type ComponentProps = ComponentPropsRequired>> & ComponentPropsOptional>>; type ComponentWatchers = { [K in keyof Props as `watch${Capitalize}`]: Callback; }; type ComponentEmitters = { [K in keyof Emitters as `${Lowercase}`]: EventEmitter; }; type ComponentListeners = { [K in keyof Listeners as `on${Capitalize}`]: (event: Listeners[K]) => void; }; export type WebComponentInterface = { componentWillLoad(): void; } & ComponentProps & StrictFields> & ComponentWatchers> & ComponentEmitters> & PromiseMethod> & ComponentListeners>; type ComponentCallbacks = { [K in keyof Callbacks as `handle${Capitalize}`]: Callbacks[K]; }; type ComponentRefs = { [K in keyof Refs as `ref${Capitalize}`]: (element?: Refs[K]) => void; }; type FunctionalComponentEmitters = { [K in keyof Emitters as `on${Capitalize}`]: EventEmitter; }; export type FunctionalComponentProps = StrictFields> & StrictFields> & ComponentCallbacks> & ComponentRefs> & FunctionalComponentEmitters> & Partial, keyof InternalProps | keyof ExtractStates>>; type ControllerCallbackHandlers = { [K in keyof Callbacks as `handle${Capitalize}`]: (element?: Callbacks[K]) => void; }; type ControllerListeners = { [K in keyof Listeners as `on${Capitalize}`]: (event: Listeners[K]) => void; }; type ControllerRefSetters = { [K in keyof Refs as `set${Capitalize}Ref`]: (element?: Refs[K]) => void; }; export type ControllerInterface = { componentWillLoad(props: ResolvedInputProps): void; getRenderProp>(key: K): StrictFields>[K]; } & ComponentWatchers> & ControllerCallbackHandlers> & ControllerListeners> & ExtractMethods & ControllerRefSetters>; export {};