import type { IslandLoader } from "./contract.js"; import type { DirectiveSpine } from "./directive-spine.js"; import { type DirectiveWaiters } from "./directive-waiters.js"; import type { RuntimeLogger, RuntimeSurface } from "./runtime-surface.js"; import type { RuntimeObservability } from "./runtime-observability.js"; export interface ActivationCandidate { tagName: string; element: HTMLElement; loader: IslandLoader; } export interface ActivationOwnership { readonly initialWalkComplete: boolean; isObserved(el: Element): boolean; settleSuccess(tag: string): number; settleFailure(tag: string, retry: () => void): { willRetry: boolean; attempt: number; }; evict(tag: string): void; clear(tags?: Iterable): void; watchCancellable(el: Element, cancel: () => void): () => void; walk(root: HTMLElement): void; } export interface ActivationPlatform { now(): number; console: Pick; } export interface ActivationSessionDeps { spine: DirectiveSpine; directiveTimeout: number; waiters?: DirectiveWaiters; ownership: ActivationOwnership; surface: { dispatchLoad: RuntimeSurface["dispatchLoad"]; dispatchError: RuntimeSurface["dispatchError"]; createLogger(tagName: string): RuntimeLogger; }; observability: Pick; platform: ActivationPlatform; } export interface ActivationSession { discover(tagName: string, element: HTMLElement): void; activate(candidate: ActivationCandidate): Promise; clear(tagNames?: Iterable): void; } export declare function createActivationSession(deps: ActivationSessionDeps): ActivationSession;