import { Nullable } from '../../types/general';
import { DomNodeSubject } from '../change-manager/subject/dom-node-subject/dom-node-subject';
/**
 * The `RemoteInvocationRegistry` provides methods for performing remote invocation calls
 * and registering remote invocation handlers.
 */
export declare class RemoteInvocationRegistry {
  /**
   * This function performs a remote invocation call and returning the result.
   *
   * @typedef T generic type
   * @param {HTMLElement} subject the dom node subject
   * @param {unknown[]} args - The `args` parameter of specific method.
   * @returns {Nullable<T>} The result of call `remoteInvocation`.
   */
  call<T>(subject: DomNodeSubject, ...args: unknown[]): Nullable<T>;
  /**
   * The function registers a remote invocation handler.
   *
   * @param {HTMLElement} subject the dom node subject
   * @param {Function}remoteInvocationHandler - The method that is ultimately called.
   */
  register<T>(subject: DomNodeSubject, remoteInvocationHandler: (...args: unknown[]) => T): void;
  /**
   * The function un-registers a remote invocation call handler.
   *
   * @param {HTMLElement} subject the dom node subject
   */
  unRegister(subject: DomNodeSubject): void;
  /**
   * The function isAcceptableObserver checks if the input matches a specified type T.
   *
   * @param {unknown} _input - The `_input` parameter is of type `unknown`, which means it can hold any
   * value.
   * @returns {boolean} The `isAcceptableObserver` function is returning `true`.
   */
  private isAcceptableObserver;
}
declare const _default: RemoteInvocationRegistry;
export default _default;
