import type { IDisposable, Subscription } from "@surface/core"; import type DirectiveContext from "../types/directive-context.js"; export default abstract class Directive implements IDisposable { protected readonly context: DirectiveContext; protected readonly subscription: Subscription; protected value: unknown; constructor(context: DirectiveContext); private valueNotify; protected onAfterBind?(): void; protected onAfterUnbind?(): void; protected onBeforeBind?(): void; protected onBeforeUnbind?(): void; protected onKeyChange?(newKey: string, oldKey: string): void; protected onValueChange?(newValue: unknown, oldValue: unknown): void; dispose(): void; }