import { QuantumSchema } from "./schema";
import { QuantumKeys } from "./keys";
import { ReactDecorator, ProvideDecorator, ContextDecorator, ObserveDecorator } from "../context";
import { ImplementDecorator } from "../context/implement";
export interface EntangleOptions {
  namespace?: string;
}
export declare class Entanglement<T extends QuantumSchema> {
  keys: QuantumKeys<T>;
  static uid: number;
  constructor(schema: T, opts?: EntangleOptions);
  get<K extends keyof QuantumKeys<T>>(key: K): QuantumKeys<T>[K];
  Provide<K extends keyof QuantumKeys<T>>(key: K): ProvideDecorator<Entanglement<T>, K>;
  Context<K extends keyof QuantumKeys<T>>(key: K): ContextDecorator<Entanglement<T>, K>;
  Observe<K extends keyof QuantumKeys<T>>(key: K): ObserveDecorator<Entanglement<T>, K>;
  React<K extends keyof QuantumKeys<T>, Q extends Entanglement<any>, QK extends keyof Q["keys"]>(key: K, target: Q, targetKey: QK): ReactDecorator<Entanglement<T>, K, Q, QK>;
  Implement<K extends keyof QuantumKeys<T>>(key: K): ImplementDecorator<Entanglement<T>, K>;
  Action<K extends keyof QuantumKeys<T>>(key: K): ContextDecorator<Entanglement<T>, K>;
}
