/// <reference types="react" />
import type { SyntaxHighlighterProps } from 'react-syntax-highlighter';
import { ChatMode as ChatModeAPIType } from '../__generated__/graphql';
import { BreadcrumbRules } from '../hooks/useBreadcrumbs';
import { StringReplacementRule } from '../utils/processStringReplacement';
import { InkeepCallbackEvent } from './InkeepEventTypes';
import { UserTheme } from './InkeepThemeTypes';
import { CardIcon, CustomCardSettings } from './SearchResults/TabConfiguration';
export type { InkeepCallbackEvent };
export interface InkeepShadowProps {
    stylesheets?: React.ReactElement[];
    stylesheetUrls?: string[];
}
export interface InkeepEmbeddedChatProps extends InkeepEmbeddedChatCoreProps, InkeepShadowProps {
}
export interface InkeepCustomTriggerProps extends InkeepCustomTriggerCoreProps, InkeepShadowProps {
}
export interface InkeepSearchBarProps extends InkeepSearchBarCoreProps, InkeepShadowProps {
}
export interface InkeepChatButtonProps extends InkeepChatButtonCoreProps, InkeepShadowProps {
}
export interface InkeepEmbeddedChatCoreProps {
    shouldAutoFocusInput?: boolean;
    baseSettings: InkeepWidgetBaseSettings;
    aiChatSettings?: InkeepAIChatSettings;
}
export interface InkeepCustomTriggerSettings {
    isOpen: boolean;
    onClose: () => void;
    onOpen?: () => void;
}
export type InkeepCustomTriggerCoreProps = InkeepCustomTriggerSettings & {
    baseSettings: InkeepWidgetBaseSettings;
    modalSettings?: InkeepModalSettings;
    searchSettings?: InkeepSearchSettings;
    aiChatSettings?: InkeepAIChatSettings;
};
export interface InkeepSearchBarCoreProps {
    baseSettings: InkeepWidgetBaseSettings;
    modalSettings?: InkeepModalSettings;
    searchSettings?: InkeepSearchSettings;
    aiChatSettings?: InkeepAIChatSettings;
}
export interface InkeepChatButtonCoreProps {
    chatButtonType?: ChatButtonTypes;
    isPositionFixed?: boolean;
    fixedPositionXOffset?: string;
    fixedPositionYOffset?: string;
    chatButtonPillText?: string;
    chatButtonCommandText?: string;
    baseSettings: InkeepWidgetBaseSettings;
    modalSettings?: InkeepModalSettings;
    searchSettings?: InkeepSearchSettings;
    aiChatSettings?: InkeepAIChatSettings;
}
export interface InkeepWidgetBaseSettings {
    apiKey: string;
    integrationId: string;
    organizationId: string;
    organizationDisplayName?: string;
    primaryBrandColor: string;
    theme?: UserTheme;
    userId?: string;
    userEmail?: string;
    userName?: string;
    filters?: SearchAndChatAttributeFilters;
    userCohorts?: string[];
    userToken?: string;
    logEventCallback?: (event: InkeepCallbackEvent) => void;
    optOutAnalyticalCookies?: boolean;
    optOutAllAnalytics?: boolean;
    optOutFunctionalCookies?: boolean;
    remoteErrorLogsLevel?: RemoteErrorLogsLevel;
    consoleDebugLevel?: ConsoleDebugLevel;
    apiProxyDomain?: string;
    breadcrumbRules?: BreadcrumbRules;
    customCardSettings?: CustomCardSettings[];
    stringReplacementRules?: StringReplacementRule[];
    environment?: 'development' | 'production';
    highlighter?: 'hljs' | 'prism';
    highlighterTheme?: SyntaxHighlighterProps['style'];
    shadowHost?: HTMLElement | null;
    rootElement?: HTMLElement | null;
}
type QueryValue = boolean | number | string;
type QueryCondition = {
    $eq: QueryValue;
} | {
    $in: (number | string)[];
};
type FilterQuery = Record<string, QueryCondition | QueryValue | QueryValue[]> | {
    $and: FilterQuery[];
} | {
    $or: FilterQuery[];
};
export interface SearchAndChatAttributeFilters {
    attributes?: FilterQuery;
    product?: string;
    productVersion?: string;
}
/**
 * Debugging levels:
 * 0 - None: No debugging information is logged.
 * 1 - Errors: Log errors, events, and exceptions.
 * 2 - Messages: Log messages in addition to errors, events, and exceptions.
 * 3 - Verbose: Log verbose information, including an error trace for every console.log.
 */
export declare enum ConsoleDebugLevel {
    None = 0,
    Errors = 1,
    Messages = 2,
    Verbose = 3
}
/**
 * Remote error capture levels, which is sent to the Inkeep team for debugging and service monitoring purposes.
 * 0 - None: No remote error logging is performed.
 * 1 - AnonymousErrors: Capture errors, events, and exceptions without identifiable user information.
 * 2 - IdentifiableErrors: Capture errors, events, exceptions and logs that can contain identifiable user information.
 * 3 - ExtensiveTroubleShooting:  Capture errors, events, exceptions and logs that can contain identifiable user information as well as extensive details on UX interactions and other session information.
 */
export declare enum RemoteErrorLogsLevel {
    None = 0,
    AnonymousErrors = 1,
    IdentifiableErrors = 2,
    ExtensiveTroubleShooting = 3
}
export type InkeepRecordType = 'DISCOURSE' | 'DOCUMENTATION' | 'GITHUB_ISSUE' | 'STACKOVERFLOW';
export interface InkeepAIChatSettings {
    placeholder?: string;
    introMessage?: string;
    chatSubjectName?: string;
    botName?: string;
    botAvatarSrcUrl?: string;
    botAvatarDarkSrcUrl?: string;
    userAvatarSrcUrl?: string;
    shouldOpenLinksInNewTab?: boolean;
    quickQuestionsLabel?: string;
    quickQuestions?: string[];
    shouldHighlightFirstQuickQuestion?: boolean;
    isChatSharingEnabled?: boolean;
    shareChatUrlBasePath?: string;
    isViewOnly?: boolean;
    shouldScrollToBottomOnLoad?: boolean;
    defaultChatMode?: ChatMode;
    toggleButtonSettings?: AIChatToggleButtonSettings;
    disclaimerSettings?: AIChatDisclaimerSettings;
    isControlledMessage?: boolean;
    handleMessageChange?: (query: string) => void;
    chatFunctionsRef?: React.Ref<AIChatFunctions>;
    processPostChatResultSignals?: boolean;
    getHelpCallToActions?: GetHelpCallToAction[];
}
export interface AIChatToggleButtonSettings {
    isChatModeToggleEnabled?: boolean;
    chatModeToggleValue?: ChatMode;
    chatModeToggleLabel?: string;
    chatModeToggleTooltip?: string;
}
export interface AIChatDisclaimerSettings {
    isDisclaimerEnabled?: boolean;
    disclaimerLabel?: string;
    disclaimerTooltip?: string;
}
export type ChatMode = `${ChatModeAPIType}`;
export interface AIChatFunctions {
    submitCurrentInputMessage: () => void;
    updateInputMessage: (message: string) => void;
    submitNewMessage: (message: string) => void;
}
export interface GetHelpCallToAction {
    icon: CardIcon;
    name: string;
    url: string;
}
export interface InkeepSearchSettings {
    placeholder?: string;
    prefilledQuery?: string;
    shouldOpenLinksInNewTab?: boolean;
    searchFunctionsRef?: React.Ref<SearchFunctions>;
    handleSearchQueryChange?: (query: string) => void;
    isControlledSearchQuery?: boolean;
    tabSettings?: InkeepTabSettings;
    maximumHitsLimit?: number;
}
export interface InkeepTabSettings {
    isAllTabEnabled?: boolean;
    rootBreadcrumbsToUseAsTabs?: string[];
    tabOrderByLabel?: string[];
    disabledDefaultTabs?: string[];
    alwaysDisplayedTabs?: string[];
}
export type SearchViewTypes = 'SINGLE_PANE_NO_SPACE' | 'SINGLE_PANE_SPACED' | 'TWO_PANE';
export interface SearchFunctions {
    updateSearchQuery: (query: string) => void;
}
export interface InkeepModalSettings {
    defaultView?: ModalViewTypes;
    isModeSwitchingEnabled?: boolean;
    switchToChatMessage?: string;
    areOpenHotKeysDisabled?: boolean;
    openShortcutKey?: string;
    onShortcutKeyPressed?: () => void;
    isAlignedToTop?: boolean;
    isAlignedToRight?: boolean;
    closeOnBlur?: boolean;
}
export interface InkeepChatButtonSettings {
    chatButtonType?: ChatButtonTypes;
    chatButtonPillText?: string;
    chatButtonCommandText?: string;
    isPositionFixed?: boolean;
    fixedPositionXOffset?: string;
    fixedPositionYOffset?: string;
}
export type ModalViewTypes = 'AI_CHAT' | 'SEARCH';
export type ModalPageTypes = 'aiChat' | 'searchResults';
export type ChatButtonTypes = 'ICON_TEXT_SHORTCUT' | 'ICON_TEXT' | 'ICON';
export declare const defaultInkeepWidgetBaseSettings: Partial<InkeepWidgetBaseSettings>;
export declare const defaultInkeepAIChatSettings: Partial<InkeepAIChatSettings>;
export declare const defaultInkeepSearchSettings: Partial<InkeepSearchSettings>;
export declare const defaultModalSettings: Partial<InkeepModalSettings>;
export declare const defaultChatButtonModalProps: Partial<InkeepChatButtonCoreProps>;
export declare const defaultSearchBarModalProps: Partial<InkeepSearchBarCoreProps>;
