import React from "react";
import * as _criipto_auth_js0 from "@criipto/auth-js";
import CriiptoAuth, { OAuth2Error, OAuth2Error as OAuth2Error$1, PKCEPublicPart, Prompt, ResponseType } from "@criipto/auth-js";
import * as react_jsx_runtime0 from "react/jsx-runtime";

//#region src/context.d.ts
type ResultSource = 'QRCode' | 'SEBankIDQrCode' | 'SEBankIDSameDeviceButton' | 'redirect' | 'popup';
type Result = {
  id_token: string;
  state?: string;
  source?: ResultSource;
} | {
  code: string;
  state?: string;
  source?: ResultSource;
} | OAuth2Error$1 | Error;
declare const actions: readonly ["confirm", "accept", "approve", "sign", "login"];
type Action = (typeof actions)[number];
type Claims = {
  iss: string;
  aud: string;
  identityscheme: string;
  authenticationtype: string;
  sub: string;
  iat: number;
  exp: number;
  [key: string]: string | number;
};
//#endregion
//#region src/provider.d.ts
interface CriiptoVerifyProviderOptions {
  domain: string;
  clientID: string;
  /**
   * @deprecated Development use only
   */
  protocol?: 'https' | 'http';
  redirectUri?: string;
  children: React.ReactNode;
  pkce?: PKCEPublicPart;
  state?: string;
  nonce?: string;
  prompt?: Prompt;
  scope?: string;
  uiLocales?: string;
  loginHint?: string;
  /**
   * Enables storage and automatic fetch of tokens
   * by utilizing browser storage and SSO silent logins.
   * Make sure "SSO for OAuth2" is enabled on your Criipto Domain.
   * Only works for `response: 'token'` (default)
   */
  sessionStore?: Storage;
  /**
   * Will ammend the login_hint parameter with `action:{action}` which will adjust texsts in certain flows.
   * Default: 'login'
   */
  action?: Action;
  /**
   * Will ammend the login_hint parameter with `message:{base64(message)}` which will set a login/aprove message where available (Danish MitID).
   */
  message?: string;
  /**
   * Note: In most cases modifying this setting **is not needed**. Defaults will work with almost all React SPA cases.
   * By default @criipto/verify-react will do PKCE on your behalf and return a jwt token.
   * However if you wish you can disable this and get the raw `code` response by setting `response` to 'code'.
   */
  response?: 'token' | 'code';
  completionStrategy?: 'client' | 'openidprovider';
  /**
   * @deprecated Criipto internal use
   */
  criiptoSdk?: null | string;
  /**
   * @deprecated Criipto internal use
   */
  responseType?: ResponseType | 'code id_token';
  /**
   * @deprecated Criipto internal use
   */
  responseMode?: 'query' | 'form_post' | 'fragment' | 'json' | 'post_message';
}
declare const CriiptoVerifyProvider: (props: CriiptoVerifyProviderOptions) => React.ReactElement;
//#endregion
//#region src/i18n/index.d.ts
type Language = 'en' | 'da' | 'sv' | 'nb' | 'fi' | 'de' | 'nl';
//#endregion
//#region src/components/AuthMethodButton/Logo.d.ts
interface AuthMethodButtonLogoProps {
  acrValue: string;
  /**
   * base64 image string, e.x. data:image/png;base64,
   * or a ReactElement
   */
  logo?: React.ReactElement | string;
}
//#endregion
//#region src/components/AuthMethodButton.d.ts
type PopupParams = {
  acrValue: string;
  onHide: () => void;
};
type PopupOption = boolean | ((options: PopupParams) => boolean | React.ReactElement);
interface AuthMethodButtonComponentProps {
  acrValue: string;
  href?: string;
  onClick?: React.MouseEventHandler;
  children?: React.ReactNode;
  'data-testid'?: string;
  className?: string;
  /**
   * base64 image string, e.x. data:image/png;base64,
   * or a ReactElement
   */
  logo?: AuthMethodButtonLogoProps['logo'];
  /**
   * Impacts the button text rendered if no text is provided via props.children
   */
  language?: Language;
  /**
   * Impacts the button text rendered if no text is provided via props.children
   */
  action?: Action;
  disabled?: boolean;
  loading?: boolean;
}
/**
 * Display only components, does no state management and triggers no login flows on it's own
 */
declare function AuthMethodButtonComponent(props: AuthMethodButtonComponentProps): react_jsx_runtime0.JSX.Element;
type AuthMethodButtonContainerProps = AuthMethodButtonComponentProps & {
  redirectUri?: string;
  popup?: PopupOption;
  /**
   * Will ammend the login_hint parameter with `message:{base64(message)}` which will set a login/aprove message where available (Danish MitID).
   */
  message?: string;
  userAgent?: string;
};
declare function AuthMethodButtonContainer(props: AuthMethodButtonContainerProps): react_jsx_runtime0.JSX.Element;
//#endregion
//#region src/components/AuthMethodSelector.d.ts
interface AuthMethodSelectorProps {
  acrValues?: string[];
  language?: Language;
  onSelect?: (acrValue: string) => void;
  redirectUri?: string;
  popup?: AuthMethodButtonContainerProps['popup'];
  userAgent?: string;
}
declare function AuthMethodSelector(props: AuthMethodSelectorProps): react_jsx_runtime0.JSX.Element;
type SwedenProps = Omit<AuthMethodSelectorProps, 'acrValues'> & {
  acrValues: string[];
};
declare function Sweden(props: SwedenProps): react_jsx_runtime0.JSX.Element;
//#endregion
//#region src/components/AuthButtonGroup.d.ts
declare function AuthButtonGroup(props: {
  children: React.ReactNode;
}): react_jsx_runtime0.JSX.Element;
//#endregion
//#region src/components/QRCode.d.ts
declare const QRCode: React.FC<{
  margin?: number;
  className?: string;
  acrValues?: string[];
  children: (props: {
    qrElement: React.ReactElement;
    /**
     * Will be true once the QR code has been scanned
     */
    isAcknowledged: boolean;
    /**
     * Will be true if the user cancels the login on his mobile device
     */
    isCancelled: boolean;
    /**
     * Whether or not QR codes are enabled for this Criipto Applicaiton
     */
    isEnabled: boolean | undefined;
    error: OAuth2Error$1 | Error | null;
    retry: () => void;
    /**
     * A method for triggering a full screen redirect to authentication (useful if user is on mobile device already)
     */
    redirect: () => Promise<void>;
  }) => React.ReactElement;
}>;
//#endregion
//#region src/components/SEBankIDQRCode.d.ts
interface Props {
  redirectUri?: string;
  qrMargin?: number;
  /**
   * Impacts the help text
   */
  language?: Language;
  children?: (props: {
    qrElement: React.ReactElement;
    /**
     * Can be rendered instead of `qrElement` if you only wish to render the qr code with no additional content.
     * Combine with `qrMargin`.
     */
    imageElement: React.ReactElement;
    /**
     * Will be true once the user has completed login in the app and the rest of the login flow is being processed
     */
    isCompleting: boolean;
    /**
     * The user has clicked on the qr image element to trigger fullscreen view per https://developers.bankid.com/getting-started/qr-code#accessibility
     */
    fullscreen: boolean;
    error: OAuth2Error$1 | Error | null;
    retry: () => void;
  }) => React.ReactElement;
  /** Render fallback element while loading */
  fallback?: React.ReactElement;
}
declare function SEBankIDQrCode(props: Props): react_jsx_runtime0.JSX.Element;
declare namespace SEBankIDQrCode {
  var acr_values: string;
}
//#endregion
//#region src/use-criipto-verify.d.ts
declare function useCriiptoVerify(): {
  result: Result | null;
  /**
   * The claims of the decoded id_token (if available)
   */
  claims: Claims | null;
  /**
   * Set when the provider failed to fetch configuration (e.g. invalid `domain`/`clientID`,
   * or CORS), or when an authentication attempt failed (e.g. user cancellation, OAuth2 errors
   * from the IdP). Always render this in your UI — failures are otherwise silent.
   *
   * `OAuth2Error` for IdP-returned errors, `Error` for everything else.
   */
  error: Error | null;
  loginWithRedirect: (params?: _criipto_auth_js0.RedirectAuthorizeParams) => Promise<void>;
  loginWithPopup: (params?: _criipto_auth_js0.PopupAuthorizeParams) => Promise<void>;
  acrValues: string[] | undefined;
  /**
   * Will be true when performing token exchange after redirect or during an initial SSO check
   */
  isLoading: boolean;
  /**
   * Will be true until the first set of useEffect hooks have been called
   */
  isInitializing: boolean;
  /**
   * Check if there is an existing SSO session.
   */
  checkSession: () => Promise<void>;
  /**
   * Clear local session store and logout of any existing SSO session
   */
  logout: (params?: {
    redirectUri?: string;
    state?: string;
  }) => Promise<void>;
};
//#endregion
//#region src/utils.d.ts
declare function filterAcrValues(input: string[]): string[];
//#endregion
export { type Action, AuthMethodButtonContainer as AuthButton, AuthMethodButtonContainer as AuthMethodButton, AuthMethodButtonComponent as AuthButtonComponent, AuthButtonGroup, AuthMethodSelector, Sweden as AuthMethodSelectorSweden, CriiptoVerifyProvider, type Language, OAuth2Error, QRCode, type Result, SEBankIDQrCode as SEBankIDQRCode, actions, filterAcrValues, useCriiptoVerify };
//# sourceMappingURL=index.d.ts.map