/**
 * Internal helper for binding ObjC class constants with `instanceof` support.
 *
 * Separated from helpers.ts to avoid circular imports — framework index files
 * import this, and helpers.ts imports from Foundation's index.
 *
 * @internal
 */
import type { NobjcObject } from "objc-js";
/**
 * Type guard that narrows an ObjC object to a specific class type using
 * the Objective-C runtime's `-[NSObject isKindOfClass:]` check.
 *
 * Results are cached per (object, class) pair so repeated checks skip
 * the native boundary crossing entirely.
 *
 * Returns `true` if `obj` is an instance of `cls` or any of its subclasses,
 * and narrows the TypeScript type accordingly.
 *
 * @param obj  - The object to check
 * @param cls  - The runtime class constant (e.g. `NSWindow`, `NSString`)
 * @returns `true` if `obj` is a kind of `cls`
 *
 * @example
 * ```ts
 * import {
 *   ASAuthorizationAppleIDCredential,
 *   type _ASAuthorizationAppleIDCredential,
 *   ASPasswordCredential,
 *   type _ASPasswordCredential,
 * } from "./AuthenticationServices";
 * import { isKindOfClass } from "./helpers";
 *
 * const cred = authorization.credential();
 *
 * if (isKindOfClass<_ASAuthorizationAppleIDCredential>(cred, ASAuthorizationAppleIDCredential)) {
 *   cred.user();   // narrowed to _ASAuthorizationAppleIDCredential
 *   cred.email();
 * } else if (isKindOfClass<_ASPasswordCredential>(cred, ASPasswordCredential)) {
 *   cred.user();
 *   cred.password();
 * }
 * ```
 */
export declare function isKindOfClass<T extends NobjcObject>(obj: NobjcObject, cls: any): obj is T;
/**
 * Load a class constant from a framework library and patch
 * `Symbol.hasInstance` so that `obj instanceof ClassName` works at runtime
 * by delegating to the ObjC runtime's `-[NSObject isKindOfClass:]`.
 *
 * Uses the same cached check as `isKindOfClass()`.
 *
 * @internal
 */
export declare function _bindClass<T>(lib: any, name: string): T;
