import type { Schema } from "effect"; import type { LocaleAdapter } from "../ports/locale.js"; import type { TextMeasurer } from "../ports/text.js"; import type { PersistenceHandle } from "./descriptors.js"; export interface Disposable { dispose(): void | Promise; } export interface SlotContext { config: TConfig; persistence: PersistenceHandle; stores: Map; locale?: LocaleAdapter; textMeasurer?: TextMeasurer; } export interface BaseSlotSpec { create(context: SlotContext): unknown; config?: unknown; persist?: boolean | string[]; dependsOn?: string[]; expose?: boolean; contextKey?: never; } export interface SlotSpec< TConfig = unknown, TStore = unknown, TEncoded = TConfig, > extends BaseSlotSpec { create(context: SlotContext): TStore; config?: Schema.Schema; persist?: boolean | string[]; dependsOn?: string[]; expose?: boolean; contextKey?: never; } export declare function defineSlot( spec: SlotSpec, ): SlotSpec;