import * as _angular_core from '@angular/core'; import { Signal, InjectionToken } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { CanDeactivateFn } from '@angular/router'; type SdUnsavedChangesMaybeAsync = T | PromiseLike; type SdUnsavedChangesDirtySource = boolean | Signal | (() => boolean); type SdUnsavedChangesDecision = 'save' | 'discard' | 'cancel'; type SdUnsavedChangesReason = 'navigation' | 'close' | 'manual'; interface SdUnsavedChangesWatcher { readonly id: string; readonly scope?: unknown; readonly isDirty: SdUnsavedChangesDirtySource; readonly message?: string; readonly save?: () => SdUnsavedChangesMaybeAsync; readonly reset?: () => SdUnsavedChangesMaybeAsync; readonly discard?: () => SdUnsavedChangesMaybeAsync; readonly cleanup?: () => void; } interface SdUnsavedChangesPromptContext { readonly reason: SdUnsavedChangesReason; readonly scope?: unknown; readonly message: string; readonly watchers: readonly SdUnsavedChangesRegistration[]; } interface SdUnsavedChangesConfirmationAdapter { confirm(context: SdUnsavedChangesPromptContext): SdUnsavedChangesMaybeAsync; } interface SdUnsavedChangesRegistration { readonly id: string; readonly scope?: unknown; readonly message?: string; readonly destroyed: Signal; readonly dirty: Signal; markDirty(): void; markPristine(): void; save(): Promise; reset(): Promise; discard(): Promise; destroy(): void; } interface SdUnsavedChangesConfirmOptions { readonly scope?: unknown; readonly reason?: SdUnsavedChangesReason; } interface SdUnsavedChangesWindow { addEventListener(type: 'beforeunload', listener: (event: BeforeUnloadEvent) => void): void; removeEventListener(type: 'beforeunload', listener: (event: BeforeUnloadEvent) => void): void; confirm?(message?: string): boolean; } declare const SD_UNSAVED_CHANGES_WINDOW: InjectionToken; declare const SD_UNSAVED_CHANGES_CONFIRMATION_ADAPTER: InjectionToken; declare class SdUnsavedChangesService { #private; readonly registrations: _angular_core.Signal; readonly dirty: _angular_core.Signal; constructor(); register(watcher: SdUnsavedChangesWatcher): SdUnsavedChangesRegistration; hasChanges(scope?: unknown): boolean; confirmLeave(options?: SdUnsavedChangesConfirmOptions): Promise; saveAll(scope?: unknown): Promise; resetAll(scope?: unknown): Promise; discardAll(scope?: unknown): Promise; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵprov: _angular_core.ɵɵInjectableDeclaration; } interface SdUnsavedChangesFormOptions { readonly id: string; readonly scope?: unknown; readonly message?: string; readonly save?: (value: TValue) => SdUnsavedChangesMaybeAsync; readonly reset?: (form: FormGroup) => SdUnsavedChangesMaybeAsync; readonly discard?: (form: FormGroup) => SdUnsavedChangesMaybeAsync; } declare function registerSdUnsavedChangesForm>(service: SdUnsavedChangesService, form: FormGroup, options: SdUnsavedChangesFormOptions): SdUnsavedChangesRegistration; declare function createSdUnsavedChangesCloseGuard(service: SdUnsavedChangesService, options?: Omit): () => Promise; declare const sdUnsavedChangesGuard: CanDeactivateFn; export { SD_UNSAVED_CHANGES_CONFIRMATION_ADAPTER, SD_UNSAVED_CHANGES_WINDOW, SdUnsavedChangesService, createSdUnsavedChangesCloseGuard, registerSdUnsavedChangesForm, sdUnsavedChangesGuard }; export type { SdUnsavedChangesConfirmOptions, SdUnsavedChangesConfirmationAdapter, SdUnsavedChangesDecision, SdUnsavedChangesDirtySource, SdUnsavedChangesFormOptions, SdUnsavedChangesMaybeAsync, SdUnsavedChangesPromptContext, SdUnsavedChangesReason, SdUnsavedChangesRegistration, SdUnsavedChangesWatcher, SdUnsavedChangesWindow };