export type FunnelType = 'single-page' | 'multi-page' | 'modal';
export type FlowType = 'create' | 'edit' | 'delete' | 'home' | 'dashboard' | 'view-resource';
type ErrorSubCategory = 'DATA_FORMAT_ISSUES' | 'PARAMETER_VALIDATION_ISSUES' | 'ACCESS_CONTROL_ISSUES' | 'IDENTITY_MANAGEMENT_PROBLEMS' | 'RESOURCE_STATE_ISSUES' | 'RESOURCE_CAPACITY_PROBLEMS' | 'CONNECTION_PROBLEMS' | 'NETWORK_CONFIGURATION_ISSUES' | 'RESOURCE_LIMIT_EXCEEDED' | 'SERVICE_QUOTA_RESTRICTIONS' | 'SERVICE_INTEGRATION_CONFLICTS' | 'RESOURCE_CONFIGURATION_MISMATCHES' | 'SERVICE_SPECIFIC_OPERATIONS' | 'API_REQUEST_PROBLEMS' | 'OTHER';
type ErrorCategory = 'INPUT_VALIDATION' | 'PERMISSION_IAM' | 'RESOURCE_AVAILABILITY' | 'NETWORK_CONNECTIVITY' | 'SERVICE_QUOTAS_LIMITS' | 'CONFIGURATION_CONFLICTS' | 'API_SPECIFIC' | 'OTHER';
export interface ErrorContext {
    errorCategory: ErrorCategory;
    errorSubCategory: ErrorSubCategory;
    errorMessage: string;
}
export interface AnalyticsMetadata {
    instanceIdentifier?: string;
    flowType?: FlowType;
    errorContext?: ErrorContext;
    resourceType?: string;
}
interface BaseFunnelProps {
    funnelIdentifier?: string;
    funnelInteractionId: string;
    currentDocument?: Document;
}
interface FunnelErrorProps extends BaseFunnelProps {
    errorContext?: AnalyticsMetadata['errorContext'];
}
export interface FunnelStartProps extends Omit<BaseFunnelProps, 'funnelInteractionId'> {
    flowType?: FlowType;
    resourceType?: string;
    funnelName: string;
    funnelNameSelector: string;
    totalFunnelSteps: number;
    optionalStepNumbers: number[];
    stepConfiguration?: StepConfiguration[];
    funnelType: FunnelType;
    funnelVersion: string;
    componentVersion: string;
    componentTheme: string;
    funnelInteractionId?: string;
    componentSelector?: string;
}
type FunnelMethod<T extends BaseFunnelProps> = (props: T) => void;
export interface TableInteractionProps {
    interactionTime: number;
    userAction: string;
    instanceIdentifier?: string;
    componentIdentifier?: string;
    noOfResourcesInTable?: number;
    interactionMetadata?: string;
}
type TableInteractionMethod = (props: TableInteractionProps) => void;
type FunnelStartMethod = (props: FunnelStartProps) => string;
export interface FunnelStepProps extends BaseFunnelProps {
    stepIdentifier?: string;
    stepNumber: number;
    stepName?: string | undefined;
    stepNameSelector?: string;
    subStepAllSelector: string;
    totalSubSteps?: number;
    subStepConfiguration?: SubStepConfiguration[];
}
interface FunnelStepNavigationProps extends FunnelStepProps {
    destinationStepNumber: number;
    navigationType: string;
    totalSubSteps?: number;
}
interface FunnelStepErrorProps extends FunnelStepProps {
    errorContext?: AnalyticsMetadata['errorContext'];
    stepErrorSelector: string;
}
interface FunnelSubStepProps extends FunnelStepProps {
    subStepIdentifier?: string;
    subStepSelector: string;
    subStepName?: string | undefined;
    subStepNameSelector: string;
    subStepNumber?: number;
}
interface OptionalFunnelSubStepErrorProps extends FunnelSubStepProps {
    subStepErrorContext?: AnalyticsMetadata['errorContext'];
    fieldIdentifier?: string;
    errorContext?: AnalyticsMetadata['errorContext'];
    fieldLabelSelector?: string;
    fieldErrorSelector?: string;
}
interface FunnelLinkInteractionProps extends FunnelSubStepProps {
    elementSelector: string;
}
interface FunnelChangeProps extends BaseFunnelProps {
    stepConfiguration: StepConfiguration[];
}
export interface StepConfiguration {
    number: number;
    name: string;
    isOptional: boolean;
    stepIdentifier?: string;
}
export interface SubStepConfiguration {
    number: number;
    name: string;
    subStepIdentifier?: string;
}
export interface IFunnelMetrics {
    funnelStart: FunnelStartMethod;
    funnelError: FunnelMethod<FunnelErrorProps>;
    funnelComplete: FunnelMethod<BaseFunnelProps>;
    funnelSuccessful: FunnelMethod<BaseFunnelProps>;
    funnelCancelled: FunnelMethod<BaseFunnelProps>;
    funnelChange: FunnelMethod<FunnelChangeProps>;
    funnelStepStart: FunnelMethod<FunnelStepProps>;
    funnelStepComplete: FunnelMethod<FunnelStepProps>;
    funnelStepNavigation: FunnelMethod<FunnelStepNavigationProps>;
    funnelStepError: FunnelMethod<FunnelStepErrorProps>;
    funnelStepChange: FunnelMethod<FunnelStepProps>;
    funnelSubStepStart: FunnelMethod<FunnelSubStepProps>;
    funnelSubStepComplete: FunnelMethod<FunnelSubStepProps>;
    funnelSubStepError: FunnelMethod<OptionalFunnelSubStepErrorProps>;
    helpPanelInteracted: FunnelMethod<FunnelLinkInteractionProps>;
    externalLinkInteracted: FunnelMethod<FunnelLinkInteractionProps>;
}
export interface TaskCompletionDataProps {
    timeToRespondAfterFormSubmit: number;
    taskInteractionId: string;
    taskIdentifier?: string;
    taskFlowType?: string;
    taskType?: FunnelType;
    completionMetadata?: string;
}
type TaskCompletionDataMethod = (props: TaskCompletionDataProps) => void;
export interface IPerformanceMetrics {
    tableInteraction: TableInteractionMethod;
    taskCompletionData: TaskCompletionDataMethod;
    modalPerformanceData: ModalPerformanceDataMethod;
}
type JSONValue = string | number | boolean | null | undefined;
export interface JSONObject {
    [key: string]: JSONObject | JSONValue | JSONObject[] | JSONValue[];
}
interface ComponentMountedProps {
    componentName: string;
    taskInteractionId?: string;
    componentConfiguration: JSONObject;
}
interface ComponentUpdatedProps extends ComponentMountedProps {
    taskInteractionId: string;
    actionType: string;
}
type ComponentMountedMethod = (props: ComponentMountedProps) => string;
type ComponentUpdatedMethod = (props: ComponentUpdatedProps) => void;
export interface IComponentMetrics {
    componentMounted: ComponentMountedMethod;
    componentUpdated: ComponentUpdatedMethod;
}
export interface ModalPerformanceDataProps {
    timeToContentReadyInModal: number;
    instanceIdentifier?: string;
    componentIdentifier?: string;
    modalMetadata?: string;
}
type ModalPerformanceDataMethod = (props: ModalPerformanceDataProps) => void;
export {};
//# sourceMappingURL=interfaces.d.ts.map