import * as i0 from '@angular/core';
import { PipeTransform, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { RxStrategyNames } from '@rx-angular/cdk/render-strategies';
import { Observable, NextObserver, ObservableInput } from 'rxjs';
/**
* @Pipe RxPush
*
* @description
*
* The push pipe serves as a drop-in replacement for angulars built-in async pipe.
* Just like the *rxLet Directive, it leverages a
* [RenderStrategy](https://rx-angular.io/docs/cdk/render-strategies)
* under the hood which takes care of optimizing the ChangeDetection of your component. The rendering behavior can be
* configured per RxPush instance using either a strategy name or provide a
* `RxComponentInput` config.
*
* Usage in the template
*
* ```html
*
*
* ```
*
* Using different strategies
*
* ```html
*
*
* ```
*
* Provide a config object
*
* ```html
*
*
* ```
*
* Other Features:
*
* - lazy rendering (see
* [LetDirective](https://github.com/rx-angular/rx-angular/tree/main/libs/template/docs/api/let-directive.md))
* - Take observables or promises, retrieve their values and render the value to the template
* - a unified/structured way of handling null, undefined or error
* - distinct same values in a row skip not needed re-renderings
*
* @usageNotes
*
* ```html
* {{observable$ | push}}
* {{o}}
*
* ```
*
* @publicApi
*/
declare class RxPush implements PipeTransform, OnDestroy {
private cdRef;
/** @internal */
private strategyProvider;
/** @internal */
private ngZone;
/**
* @internal
* This is typed as `any` because the type cannot be inferred
* without a class-level generic argument, which was removed to
* fix https://github.com/rx-angular/rx-angular/pull/684
*/
private renderedValue;
/** @internal */
private subscription;
/** @internal */
private readonly templateObserver;
private readonly templateValues$;
/** @internal */
private readonly strategyHandler;
/** @internal */
private patchZone;
/** @internal */
private _renderCallback;
constructor(cdRef: ChangeDetectorRef);
transform(potentialObservable: null, config?: RxStrategyNames | Observable, renderCallback?: NextObserver): null;
transform(potentialObservable: undefined, config?: RxStrategyNames | Observable, renderCallback?: NextObserver): undefined;
transform(potentialObservable: ObservableInput | U, config?: RxStrategyNames | Observable, renderCallback?: NextObserver): U;
transform(potentialObservable: ObservableInput, config?: PushInput): U;
/** @internal */
ngOnDestroy(): void;
/** @internal */
private setPatchZone;
/** @internal */
private handleChangeDetection;
/** @internal */
private render;
/** @internal */
private hasInitialValue;
static ɵfac: i0.ɵɵFactoryDeclaration;
static ɵpipe: i0.ɵɵPipeDeclaration;
}
interface PushInput {
strategy?: RxStrategyNames | Observable;
renderCallback?: NextObserver;
patchZone?: boolean;
}
export { RxPush };