import { AnyStore } from "../../core/store.js"; import { StoreSource } from "../store-accessor.js"; import { ReactiveController, ReactiveControllerHost } from "@videojs/element"; //#region src/html/controllers/subscription-controller.d.ts type SubscriptionControllerHost = ReactiveControllerHost & HTMLElement; interface SubscriptionControllerConfig { getValue: (store: Store) => Value; subscribe: (store: Store, onChange: () => void) => () => void; } /** * Resolves a store from context or direct source and manages subscription lifecycle. * * Combines store resolution (direct or context) with subscription management. * Use as a building block for controllers that need store access with subscriptions. * * @example * ```ts * class MyController { * #ctrl: SubscriptionController; * * constructor(host: Host, source: StoreSource) { * this.#ctrl = new SubscriptionController(host, source, { * subscribe: (store, onChange) => store.queue.subscribe(onChange), * getValue: (store) => store.queue.tasks, * }); * } * * get value() { * return this.#ctrl.value; * } * } * ``` */ declare class SubscriptionController implements ReactiveController { #private; /** * @param host - The host element that owns this controller. * @param source - Store instance or context to resolve the store from. * @param config - Subscription and value extraction configuration. */ constructor(host: SubscriptionControllerHost, source: StoreSource, config: SubscriptionControllerConfig); get value(): Value; hostDisconnected(): void; } declare namespace SubscriptionController { type Host = SubscriptionControllerHost; type Config = SubscriptionControllerConfig; } //#endregion export { SubscriptionController, SubscriptionControllerConfig, SubscriptionControllerHost }; //# sourceMappingURL=subscription-controller.d.ts.map