///
import type { Container } from "@snap/ts-inject";
import type { LensRepository } from "./lens/LensRepository";
import type { LensCoreError } from "./lens-core-module/lensCoreError";
import type { LensCore } from "./lens-core-module/lensCore";
import type { CameraKitSession } from "./session/CameraKitSession";
import type { RootServices } from "./RootServices";
import type { MetricsEventTarget } from "./metrics/metricsEventTarget";
import { TypedEventTarget } from "./events/TypedEventTarget";
import type { TypedCustomEvent } from "./events/TypedCustomEvent";
import type { LensView } from "./metrics/reporters/reportLensView";
import type { LensWait } from "./metrics/reporters/reportLensWait";
import type { PageVisibility } from "./common/pageVisibility";
import type { RemoteConfiguration } from "./remote-configuration/remoteConfiguration";
/**
* Lens metrics events.
*
* These events are emitted by {@link CameraKit} to report lens usage, performance, apply latency, etc.
*
* @category Lenses
* @category Metrics
*/
export type LensMetricsEvents = TypedCustomEvent | TypedCustomEvent;
/**
* Options available when creating a {@link CameraKitSession}.
*
* @category Rendering
*/
export interface CreateSessionOptions {
/**
* Optionally provide an existing canvas element, on which the Live RenderTarget will be rendered.
*
* If this is not provided, CameraKit will create a new canvas element which can be added to the DOM.
*/
liveRenderTarget?: HTMLCanvasElement;
/**
* Browsers optimize tabs when they are hidden - for example, by pausing the execution of requestAnimationFrame
* callbacks.
*
* If you need the CameraKitSession to continue rendering even when the tab is in the background, set this to true.
* There is a small performance penalty, and it's a good practice to only render in the background if absolutely
* necessary.
*/
renderWhileTabHidden?: boolean;
}
/**
* The entry point to the CameraKit SDK's API. Most of CameraKit's features are accessed via this class.
*
* Applications obtain an instance of CameraKit by calling {@link bootstrapCameraKit}.
*
* @example
* ```ts
* const cameraKit = await bootstrapCameraKit(config)
* ```
*
* Then this class can be used to:
* - Create a {@link CameraKitSession} instance, which provides the API for setting up media inputs, applying Lenses,
* and obtaining rendered `