import React, { FC, PropsWithChildren, ReactNode } from "react"; type AncestorsOf = K extends Seen ? never : ParentOf extends never ? never : ParentOf | AncestorsOf, Seen | K>; type AssistantClient = { [K in ClientNames]: AssistantClientAccessor; } & { subscribe(listener: () => void): Unsubscribe; on(selector: AssistantEventSelector, callback: AssistantEventCallback): Unsubscribe; }; type AssistantClientAccessor = (() => ClientSchemas[K]["methods"]) & (ClientMeta | { source: "root"; query: Record; } | { source: null; query: null; }) & { name: K; }; type AssistantEventCallback = (payload: AssistantEventPayload[TEvent]) => void; type AssistantEventName = keyof AssistantEventPayload; type AssistantEventPayload = ClientEventMap & { "*": WildcardPayload; }; type AssistantEventScope = "*" | EventSource | (EventSource extends ClientNames ? AncestorsOf> : never); type AssistantEventSelector = TEvent | { scope: AssistantEventScope; event: TEvent; }; type AssistantState = { [K in ClientNames]: ClientSchemas[K]["methods"] extends { getState: () => infer S; } ? S : never; }; declare namespace AuiIf { type Props = PropsWithChildren<{ condition: AuiIf.Condition; }>; type Condition = (state: AssistantState) => boolean; } declare const AuiIf: FC; declare const AuiProvider: (_param0: { value: AssistantClient; children: React.ReactNode; }) => React.ReactElement; type ClientElement = ResourceElement>; type ClientError = { methods: Record E>; meta: { source: ClientNames; query: Record; }; events: Record<`${E}.`, E>; }; type ClientEventMap = UnionToIntersection<{ [K in ClientNames]: ClientEvents; }[ClientNames]>; type ClientEvents = "events" extends keyof ClientSchemas[K] ? ClientSchemas[K]["events"] extends ClientEventsType ? ClientSchemas[K]["events"] : never : never; type ClientEventsType = Record<`${K}.${string}`, unknown>; type ClientMeta = "meta" extends keyof ClientSchemas[K] ? Pick : never; type ClientMetaType = { source: ClientNames; query: Record; }; interface ClientMethods { [key: string | symbol]: (...args: any[]) => any; } type ClientNames = keyof ClientSchemas extends (infer U) ? U : never; type ClientOutput = ClientSchemas[K]["methods"] & ClientMethods; type ClientSchema = never> = { methods: TMethods; meta?: TMeta; events?: TEvents; }; type ClientSchemas = keyof ScopeRegistry extends never ? { "ERROR: No clients were defined": ClientError<"ERROR: No clients were defined">; } : { [K in keyof ScopeRegistry]: ValidateClient; }; type ContravariantResource = (...args: A) => ResourceElement; declare const Derived: (_config: Derived.Props) => ResourceElement ]>; declare namespace Derived { type Props = { get: (client: AssistantClient) => ReturnType>; } & ClientMeta; } type DerivedElement = ResourceElement ]>; type EventSource = T extends `${infer Source}.${string}` ? Source : never; type Hook = (...args: any[]) => any; type InferClientState = TMethods extends { getState: () => infer S; } ? S : unknown; type InferClientState$1 = TMethods extends { getState: () => infer S; } ? S : unknown; type InferClientState$2 = TMethods extends { getState: () => infer S; } ? S : undefined; type ParentOf = AssistantClientAccessor extends { source: infer S; } ? S extends ClientNames ? S : never : never; declare function RenderChildrenWithAccessor(_param1: { getItemState: (aui: AssistantClient) => T; children: (getItem: () => T) => ReactNode; }): ReactNode; type ResourceElement = { readonly hook: (...args: A) => R; readonly args: Readonly; readonly key?: string | number; readonly deps?: readonly unknown[]; }; interface ScopeRegistry { [key: string]: { methods: any; meta?: any; events?: any }; } type ScopesConfig = { [K in ClientNames]?: ClientElement | DerivedElement; }; type TransformScopesFn = (scopes: ScopesConfig, parent: AssistantClient) => void; type UnionToIntersection = (U extends unknown ? (x: U) => void : never) extends ((x: infer I) => void) ? I : never; type Unsubscribe = () => void; type ValidateClient = ScopeRegistry[K] extends { methods: ClientMethods; } ? "meta" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["meta"] extends ClientMetaType ? "events" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["events"] extends ClientEventsType ? ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid events type`> : ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid meta type`> : "events" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["events"] extends ClientEventsType ? ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid events type`> : ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid methods type`>; type WildcardPayload = { [K in keyof ClientEventMap]: { event: K; payload: ClientEventMap[K]; }; }[Extract]; declare function attachTransformScopes(hook: Hook, transform: TransformScopesFn): void; declare function forwardTransformScopes(target: Hook, source: Hook): void; declare namespace entry_root_exports { export { AssistantClient, AssistantClientAccessor, AssistantEventCallback, AssistantEventName, AssistantEventPayload, AssistantEventScope, AssistantEventSelector, AssistantState, AuiIf, AuiProvider, ClientElement, ClientEvents, ClientMeta, ClientMethods, ClientNames, ClientOutput, ClientSchema, Derived, RenderChildrenWithAccessor, ScopeRegistry, ScopesConfig, Unsubscribe, attachTransformScopes, forwardTransformScopes, normalizeEventSelector, useAssistantClientRef, useAssistantEmit, useAui, useAuiEvent, useAuiState, useClientList, useClientLookup, useClientResource }; } declare const normalizeEventSelector: (selector: AssistantEventSelector) => { scope: AssistantEventScope; event: TEvent; }; declare const useAssistantClientRef: () => { parent: AssistantClient; current: AssistantClient | null; }; declare const useAssistantEmit: () => >(event: TEvent, payload: AssistantEventPayload[TEvent]) => void; declare namespace useAui { type Props = { [K in ClientNames]?: ClientElement | DerivedElement; }; } declare function useAui(): AssistantClient; declare function useAui(clients: useAui.Props): AssistantClient; declare function useAui(clients: useAui.Props, config: { parent: null | AssistantClient; }): AssistantClient; declare const useAuiEvent: (selector: AssistantEventSelector, callback: AssistantEventCallback) => void; declare const useAuiState: (selector: (state: AssistantState) => T) => T; declare const useClientList: (props: useClientList.Props) => { state: InferClientState[]; get: (lookup: { index: number; } | { key: string; }) => TMethods; add: (initialData: TData) => void; }; declare namespace useClientList { type ResourceProps = { key: string; getInitialData: () => TData; remove: () => void; }; type Props = { initialValues: TData[]; getKey: (data: TData) => string; resource: ContravariantResource ]>; }; } declare function useClientLookup(elements: readonly ResourceElement[]): { state: InferClientState$1[]; get: (lookup: { index: number; } | { key: string; }) => TMethods; }; declare const useClientResource: (element: ResourceElement) => { state: InferClientState$2; methods: TMethods; key: string | number | undefined; }; export { entry_root_exports as entry_root };