/**
 * Abstract base class for all Blockers.
 *
 * Blockers are frontend mechanisms that prevent actions to improve UX.
 * They are not security mechanisms and must be reversible and best-effort.
 */
export abstract class Blocker {
  /**
   * Checks if the action can be executed.
   * @returns true if the action can proceed, false otherwise.
   */
  abstract canExecute(): boolean;

  /**
   * Blocks the action from being executed.
   */
  abstract block(): void;

  /**
   * Releases the block, allowing future executions.
   */
  abstract release(): void;
}