import { AutoDisposeOptions } from '../types'; /** * Check if value is an object (can have dispose method). * Primitives (string, number, boolean, etc.) are skipped for disposal tracking. */ export declare function isObject(value: unknown): value is object; /** * Get or create a disposal group by name. * Named groups are shared across all collections using the same name. */ export declare function getNamedGroup(name: string): DisposalGroup; /** * Full options for auto-dispose with group and grace period. */ export interface FocusAutoDisposeOptions { /** Disposal group - either a DisposalGroup instance or a named group string */ group?: DisposalGroup | string; /** Grace period in ms before disposing (default: 0) */ gracePeriodMs?: number; } /** * Unified auto-dispose option type. * - `false` / `undefined`: No auto-disposal * - `true`: Dispose immediately via microtask * - `number`: Grace period in ms (e.g., `100` = 100ms delay) * - `string`: Named group (shared across collections using same name) * - `DisposalGroup`: Direct group instance * - `{ group, gracePeriodMs }`: Full options object */ export type FocusAutoDispose = boolean | number | string | DisposalGroup | FocusAutoDisposeOptions; /** * Normalized result of parsing autoDispose option. */ export interface NormalizedAutoDispose { enabled: true; gracePeriodMs: number; group: DisposalGroup | null; } /** * Normalize autoDispose option to a standard format. */ export declare function normalizeAutoDispose(autoDispose: FocusAutoDispose | undefined): NormalizedAutoDispose | false; /** * @deprecated Use normalizeAutoDispose instead */ export declare function normalizeAutoDisposeOptions(autoDispose: boolean | AutoDisposeOptions | undefined): AutoDisposeOptions | false; /** * Disposal group for coordinating disposal across multiple collections. * * @example * ```ts * const group = disposalGroup(); * * const listA = focus('listA').as(list({ group })); * const listB = focus('listB').as(list({ group })); * * // Moving item from A to B won't dispose it * const item = listA.pop(); // schedules disposal in group * listB.push(item); // cancels disposal because item is still in group * ``` */ export interface DisposalGroup { /** * Schedule items for disposal. * Items will be disposed after the grace period unless cancelled. */ scheduleDisposal(items: unknown[], gracePeriodMs: number): void; /** * Cancel disposal for items that are being re-added. */ cancelDisposal(items: unknown[]): void; /** * Check if an item is pending disposal. */ isPending(item: unknown): boolean; /** * Force immediate disposal of all pending items. */ flush(): void; } /** * Create a disposal group for coordinating disposal across collections. */ export declare function disposalGroup(): DisposalGroup; /** * Create a local disposal tracker for a single collection. * Uses microtask scheduling with cancellation support. */ export declare function createLocalDisposalTracker(gracePeriodMs: number): { scheduleDisposal(items: unknown[]): void; cancelDisposal(items: unknown[]): void; isPending(item: unknown): boolean; }; //# sourceMappingURL=disposalGroup.d.ts.map