import * as _playwright_test from '@playwright/test';
import { Page, APIRequestContext, Response, Locator, APIResponse, Fixtures, PlaywrightWorkerArgs, PlaywrightWorkerOptions, PlaywrightTestArgs, PlaywrightTestOptions, Browser, BrowserContext, FrameLocator, CDPSession } from '@playwright/test';
import * as mailosaur_lib_models from 'mailosaur/lib/models';
import MailosaurClient from 'mailosaur';
import { I18nPlaywrightFixture } from 'playwright-i18next-fixture';
import { TFunction } from 'i18next';
import * as playwright_core from 'playwright-core';
import { Protocol } from 'playwright-core/types/protocol';
import * as ts_toolbelt_out_Function_Curry from 'ts-toolbelt/out/Function/Curry';
import { Secret, TOTP } from 'otpauth';
interface InterceptMultipleResponsesParams {
  responseUrl: string;
  times: number;
  baseUrl: string;
  customPageContext: Page | undefined;
  timeout: number;
  responseStatus: number;
}
type GenericCallback = (...params: any[]) => Promise<unknown> | unknown;
interface ExecuteRecursivelyParams {
  callback: GenericCallback;
  condition: GenericCallback;
  timeout: number;
}
type ExecuteRecursively = (params: ExecuteRecursivelyParams) => Promise<void>;
interface VerifySuccessToastParams {
  message: string;
  closeAfterVerification: boolean;
}
type ConditionProps = Record<string, string>[];
type FilterProps = Record<string, ConditionProps>;
type ParamFilters = FilterProps[];
type BasicTypesInterface = Record<string, number | string | boolean>;
type ParamProps = Record<string, number | string | boolean | ParamFilters>;
type HttpMethods = "get" | "patch" | "post" | "put" | "delete";
interface ApiRequestProps {
  url: string;
  failOnStatusCode?: boolean;
  headers?: BasicTypesInterface;
  data?: Record<string, unknown>;
  method?: HttpMethods;
  params?: ParamProps;
}
interface WaitForPageLoadParams {
  visibilityTimeout: number;
  customPageContext: Page | undefined;
}
type ApiRequest = (props: ApiRequestProps & Record<string, unknown>) => Promise<APIResponse | undefined>;
interface FieldValue {
  field: string;
  value: string;
}
type VerifyFieldValue = (values: FieldValue | FieldValue[]) => Promise<void> | Promise<void[]>;
interface SelectOptionFromDropdownParams {
  selectValueContainer: string;
  selectMenu: string;
  value: string;
  options?: Partial<{
    visibilityTimeout: number;
    textAssertionTimeout: number;
    retryTimeout: number;
  }>;
}
interface SearchAndVerifyProps {
  searchTerm: string;
  countSelector: string;
  searchInputSelector?: string;
  countText: string;
}
declare class CustomCommands {
  page: Page;
  responses: string[];
  request: APIRequestContext;
  baseURL: string | undefined;
  constructor(page: Page, request: APIRequestContext, baseURL?: string | undefined);
  /**
   *
   * Command to wait until a response with URL responseUrl is found. Optionally,
   *
   * provide a base URL if it differs from the home URL of the project's host.
   *
   * @example 
   *
   * // wait for 3 responses
   * 
   * neetoPlaywrightUtilities.interceptMultipleResponses({
   *   responseUrl: "/login",
   *   times: 3,
   *   baseURL: "https://app.neetoauth.net",
   * });
   * @endexample
  */
  interceptMultipleResponses: ({
    responseUrl,
    responseStatus,
    times,
    baseUrl,
    customPageContext,
    timeout
  }?: Partial<InterceptMultipleResponsesParams>) => Promise<Response[]>;
  /**
   *
   * Comand to check for a condition recursively until it's true, then execute a
   *
   * callback. This process will be repeated until the specified timeout.
   *
   * @example 
   *
   * //  checks if the URL contains /login for 5000 ms. If /login is found within this timeframe, the callback is executed.
   * 
   * await neetoPlaywrightUtilities.executeRecursively({
   *   timeout: 5000,
   *   condition: () => this.page.url().match(/.*login/),
   *   callback: async () => {
   *     await expect("#locator").to.equal("Login");
   *   },
   * });
   * @endexample
  */
  private recursiveMethod;
  executeRecursively: ExecuteRecursively;
  /**
   *
   * Command to assert the toastr message or icon. Optionaly provide
   *
   * closeAfterVerification to close the toastr after verification.
   *
   * closeAfterVerification is set to true by default
   *
   * @example 
   *
   * await neetoPlaywrightUtilities.verifySuccessToast({
   *   message: "Toastr message",
   *   closeAfterVerification: false,
   * });
   * @endexample
  */
  verifySuccessToast: ({
    message,
    closeAfterVerification
  }?: Partial<VerifySuccessToastParams>) => Promise<void>;
  /**
   *
   * Command to reload and wait for the API responses.
   *
   * @example 
   *
   * // wait for 3 responses after reloading
   * await neetoPlaywrightUtilities.reloadAndWait(3);
   * @endexample
  */
  reloadAndWait: (requestCount: number, customPageContext?: Page, interceptMultipleResponsesProps?: Partial<Omit<InterceptMultipleResponsesParams, "times">>) => Promise<void>;
  waitForPageLoad: ({
    visibilityTimeout,
    customPageContext
  }?: Partial<WaitForPageLoadParams>) => Promise<void>;
  /**
   *
   * Command to send a request.
   *
   * @example 
   *
   * await neetoPlaywrightUtilities.apiRequest({
   *   url: "/api/v1/tags",
   *   failOnStatusCode, // throws error for status codes other than 2xx and 3xx
   *   body, // request body
   *   method, // request method
   *   params, // request params
   *   headers, // aditional request headers
   * });
   * @endexample
  */
  apiRequest: ApiRequest;
  selectOptionFromDropdown: ({
    selectValueContainer,
    selectMenu,
    value,
    options
  }: SelectOptionFromDropdownParams) => Promise<void>;
  /**
   *
   * Command to verify the value of a field. It can take either a single object or an
   *
   * array of objects, each representing a field and its expected value.
   *
   * @example 
   *
   * // verifyFieldValue with an array of field-value pairs as it's parameter
   * await neetoPlaywrightUtilities.verifyFieldValue([
   *   { field: COMMON_SELECTORS.submitButton, value: "Submit" },
   *   {
   *     field: COMMON_SELECTORS.cancelButton,
   *     value: "cancel",
   *   },
   * ]);
   * 
   * // verifyFieldValue with a field-value object as it's parameter
   * await neetoPlaywrightUtilities.verifyFieldValue({
   *   field: COMMON_SELECTORS.submitButton,
   *   value: "Submit",
   * });
   * @endexample
  */
  verifyFieldValue: VerifyFieldValue;
  /**
   *
   * Command to search for a term and verify the results and its count.
   *
   * @example 
   *
   * await neetoPlaywrightUtilities.searchAndVerify({
   *   searchTerm: "searchTerm",
   *   searchInputSelector: COMMON_SELECTORS.inputField,
   *   countSelector: COMMON_SELECTORS.count,
   *   countText: "43 items",
   * });
   * @endexample
  */
  searchAndVerify: ({
    searchTerm,
    searchInputSelector,
    countSelector,
    countText
  }: SearchAndVerifyProps) => Promise<void>;
  /**
   *
   * Command to upload an image to image uploader and verify it.
   *
   * @example 
   *
   * await neetoPlaywrightUtilities.uploadImage("../assets/image.png");
   * @endexample
  */
  uploadImage: (localImagePath: string) => Promise<void>;
  /**
   *
   * Command to verify the tooltip content. It takes the following parameters:
   *
   * triggerElement: The element that triggers the tooltip.
   *
   * content: The content inside the tooltip.
   *
   * @example 
   *
   * await neetoPlaywrightUtilities.verifyTooltip({
   *   triggerElement: page.getByTestId("triggerElement"),
   *   content: "Tooltip content",
   * });
   * @endexample
  */
  verifyTooltip: ({
    triggerElement,
    content
  }: {
    triggerElement: Locator;
    content: string;
  }) => Promise<void>;
}
interface EmailContentParams {
  email: string;
  subjectSubstring?: string;
  timeout?: number;
  receivedAfter?: Date;
}
type FetchOtpFromEmail = (props: EmailContentParams) => Promise<string | undefined>;
declare class MailosaurUtils {
  mailosaur: MailosaurClient;
  serverId: string;
  constructor(mailosaur: MailosaurClient);
  /**
   *
   * Used to extract the email content
   *
   * undefined
   *
   * undefined
   *
   * @example 
   *
   * test("sample test", async ({ mailosaurUtils }) => {
   *   const email = mailosaurUtils.getEmailContent({
   *     email: `someone@${process.env.MAILOSAUR_SERVER_ID}.mailosaur.net`,
   *     subjectSubstring: "is your OTP",
   *     timeout: 60 * 1000,
   *     receivedAfter: new Date()
   *   })
   * }
   * @endexample
  */
  getEmailContent: ({
    email,
    subjectSubstring,
    timeout,
    receivedAfter
  }: EmailContentParams) => Promise<mailosaur_lib_models.Message>;
  /**
   *
   * Used to extract the OTP from the neeto OTP emails
   *
   * undefined
   *
   * undefined
   *
   * @example 
   *
   * test("sample test", async ({ mailosaurUtils }) => {
   *   mailosaurUtils.fetchOtpFromEmail({
   *     email: `someone@${process.env.MAILOSAUR_SERVER_ID}.mailosaur.net`,
   *     subjectSubstring: "is your OTP",
   *     timeout: 60 * 1000,
   *     receivedAfter: new Date()
   *   })
   * }
   * @endexample
   * undefined
   *
   * A string containing the OTP value.
   *
  */
  fetchOtpFromEmail: FetchOtpFromEmail;
  /**
   *
   * Used to generate a random Email ID to the Mailosaur Server.
   *
   * undefined
   *
   * @example 
   *
   * test("sample test", async ({ mailosaurUtils }) => {
   *   const email = mailosaurUtils.generateRandomMailosaurEmail();
   * }
   * @endexample
  */
  generateRandomMailosaurEmail: () => string;
}
interface CustomFixture {
  neetoPlaywrightUtilities: CustomCommands;
  page: Page;
  mailosaur: MailosaurClient;
  mailosaurUtils: MailosaurUtils;
}
type Commands = Fixtures<CustomFixture, PlaywrightWorkerArgs & PlaywrightWorkerOptions, PlaywrightTestArgs & PlaywrightTestOptions, PlaywrightWorkerArgs & PlaywrightWorkerOptions>;
declare const commands: Commands;
declare const generateStagingData: (product?: string) => {
  firstName: string;
  lastName: string;
  otp: number;
  domain: string;
  currentUserName: string;
  businessName: string;
  subdomainName: string;
  email: string;
};
declare const _default: _playwright_test.TestType<_playwright_test.PlaywrightTestArgs & _playwright_test.PlaywrightTestOptions & Browser, _playwright_test.PlaywrightWorkerArgs & _playwright_test.PlaywrightWorkerOptions>;
declare const i18nFixture: Fixtures<I18nPlaywrightFixture, PlaywrightWorkerArgs & PlaywrightWorkerOptions, PlaywrightTestArgs & PlaywrightTestOptions, PlaywrightWorkerArgs & PlaywrightWorkerOptions>;
type EmbedType = "inline" | "floatingPopup" | "elementClick";
type GetByRoleOptions = {
  checked?: boolean;
  disabled?: boolean;
  exact?: boolean;
  expanded?: boolean;
  includeHidden?: boolean;
  level?: number;
  name?: string | RegExp;
  pressed?: boolean;
  selected?: boolean;
};
type InlineCustomizationOptions = {
  embedHeight: string;
  embedWidth: string;
  embedDivContainerId: string;
};
type VerifyInlineCustomizationParams = {
  headingTestId: string;
  inlineEmbedInterceptParams: Partial<InterceptMultipleResponsesParams>;
  customizationOptions: InlineCustomizationOptions;
};
type FloatingPopupCustomizationOptions = {
  buttonText: string;
  buttonColorHex: string;
  buttonTextColorHex: string;
  buttonPosition: "Bottom left" | "Bottom right";
  showIcon?: boolean;
};
type ElementClickCustomizationOptions = {
  customId: string;
};
type initializeEmbedPageParams = {
  embedType: EmbedType;
  embedCode: string;
  customElementText?: string;
};
type EmbedBasePageConstructorParams = {
  context: BrowserContext;
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  appName: string;
};
declare class EmbedBase {
  context: BrowserContext;
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  appName: string;
  t: TFunction;
  embedTestPage: Page;
  embedTestPageType: EmbedType;
  embeddedFrame: FrameLocator;
  filePath: string;
  codeBlock: Locator;
  previewTab: Locator;
  constructor({
    context,
    page,
    neetoPlaywrightUtilities,
    appName
  }: EmbedBasePageConstructorParams);
  initializeEmbedPage: ({
    embedType,
    embedCode,
    customElementText
  }: initializeEmbedPageParams) => Promise<Page>;
  closeEmbedModalAndPage: () => Promise<void>;
  clickOnPopupButton: (popUpButtonSelectorOptions: GetByRoleOptions) => Promise<void>;
  copyEmbedScript: ({
    embedLabel
  }: {
    embedLabel: string;
  }) => Promise<string>;
  selectEmbedType: (embedLabel: string) => Promise<void>;
  verifyInlineCustomization: ({
    headingTestId,
    inlineEmbedInterceptParams,
    customizationOptions
  }: VerifyInlineCustomizationParams) => Promise<void>;
  verifyFloatingPopupCustomization: (customizationOptions: FloatingPopupCustomizationOptions) => Promise<void>;
  verifyElementClickCustomization: (customizationOptions: ElementClickCustomizationOptions) => Promise<void>;
  expectMultipleTextsInCodeblock: (containTextOptions: [string | RegExp, string | RegExp, ...(string | RegExp)[]]) => Promise<void>;
}
interface HelpAndProfilePageInitializerProps {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  chatApiBaseURL: string;
  kbDocsBaseURL: string;
  changelogBaseURL: string;
}
declare class HelpAndProfilePage {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  chatApiBaseURL: string;
  kbDocsBaseURL: string;
  changelogBaseURL: string;
  neetoChatWidget: Locator;
  neetoChatFrame: FrameLocator;
  neetoChatSpinner: Locator;
  t: TFunction;
  profileSectionButton: Locator;
  constructor({
    page,
    neetoPlaywrightUtilities,
    chatApiBaseURL,
    kbDocsBaseURL,
    changelogBaseURL
  }: HelpAndProfilePageInitializerProps);
  private hoverOnBody;
  openHelpCenterV2: () => Promise<void>;
  private openLiveChatAndVerify;
  openAndVerifyChatWidgetV2: () => Promise<void>;
  openAndVerifyHelpArticlesV2: () => Promise<void>;
  private openChangelogPaneV2;
  openAndVerifyChangelogV2: () => Promise<void>;
  private formatKeyboardShortcut;
  openAndVerifyKeyboardShortcutsPaneV2: (productShortcuts: {
    description: string;
    sequence: string;
  }[], osPlatform?: "mac" | "windows") => Promise<void>;
  openAppSwitcherAndVerifyV2: () => Promise<void>;
  private openAuthLinkAndVerify;
  verifyProfileAndOrganizationLinksV2: () => Promise<void>;
  verifyLogoutV2: () => Promise<void>;
}
type Integration = "dailyco" | "github" | "google-calendar" | "google-analytics" | "google-sheets" | "microsoft-teams" | "neeto-chat" | "neeto-crm" | "slack" | "twilio" | "whereby" | "zapier" | "zoom";
type IntegrationStatus = "connected" | "disconnected";
type PartialInterceptMultipleResponsesParams$1 = Partial<InterceptMultipleResponsesParams>;
interface IntegrationBaseParams {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  integration: Integration;
  connectedHeader?: string;
  connectHeader?: string;
  pageloaderTimeout?: number;
  integrationRouteIndex?: string;
  integrationRouteResponsesParams?: PartialInterceptMultipleResponsesParams$1;
}
declare class IntegrationBase {
  readonly page: Page;
  readonly neetoPlaywrightUtilities: CustomCommands;
  readonly t: TFunction;
  readonly integration: Integration;
  readonly integrationCard: Locator;
  readonly connectHeader: string;
  readonly connectedHeader: string;
  pageloaderTimeout: number;
  integrationRouteIndex: string;
  integrationRouteResponsesParams: PartialInterceptMultipleResponsesParams$1;
  constructor({
    page,
    neetoPlaywrightUtilities,
    integration,
    connectHeader,
    connectedHeader,
    pageloaderTimeout,
    integrationRouteIndex,
    integrationRouteResponsesParams
  }: IntegrationBaseParams);
  disconnect: (interceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams$1) => Promise<void>;
  connect: (skipGoTo?: boolean) => Promise<void>;
  verifyIntegrationStatus: (status?: IntegrationStatus) => Promise<void>;
  clickOnIntegrationCard: () => Promise<void>;
  gotoIntegrationIndex: () => Promise<void>;
}
type AsyncNoArgsFunction = () => Promise<void>;
type RedirectUrl = string | RegExp | ((url: URL) => boolean);
type PartialInterceptMultipleResponsesParams = Partial<InterceptMultipleResponsesParams>;
type UpdateConfigureSlackChannelParams = {
  newSlackChannel: string;
  interceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams;
  refreshInterceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams;
  refreshChannelList?: boolean;
};
type SlackPageParams = {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  integrationRouteIndex?: string;
};
declare class SlackPage extends IntegrationBase {
  slackWebappPage: Page;
  slackWebappPageDataQa: (dataQa: string | [string, string]) => Locator;
  constructor({
    page,
    neetoPlaywrightUtilities,
    integrationRouteIndex
  }: SlackPageParams);
  connectAndVerifyIntegration: (redirectUrl: RedirectUrl, customSteps?: AsyncNoArgsFunction, channelToConfigure?: string) => Promise<void>;
  disconnectAndVerifyIntegration: () => Promise<void>;
  updateConfigureSlackChannel: ({
    newSlackChannel,
    interceptMultipleResponsesParams,
    refreshInterceptMultipleResponsesParams,
    refreshChannelList
  }: UpdateConfigureSlackChannelParams) => Promise<void>;
  clickOnChannelListRefreshButton: (refreshInterceptMultipleResponsesParams?: PartialInterceptMultipleResponsesParams) => Promise<void>;
  loginToSlackWebapp: (slackWebappPage: Page, customCredentials?: Record<"workspace" | "loginPassword" | "loginEmail", string | undefined>) => Promise<void>;
  logoutFromSlackWebApp: () => Promise<void>;
  goToSlackChannel: (slackChannel: string) => Promise<void>;
  createNewSlackChannel: ({
    channelName,
    kind
  }: {
    channelName: string;
    kind?: "public" | "private" | undefined;
  }) => Promise<void>;
  deleteSlackChannel: (channel: string) => Promise<void>;
}
interface WebhooksPageParams {
  page: Page;
  request: APIRequestContext;
  neetoPlaywrightUtilities: CustomCommands;
  context: BrowserContext;
}
type CallbackFunction = (args: Record<string, unknown>) => void;
interface VerifyWebhookResponseParams extends Record<string, unknown> {
  callback?: CallbackFunction;
  webhookToken: string;
}
interface VerifyWebhookDeliveriesParams extends Record<string, unknown> {
  callback: CallbackFunction;
}
interface VerifyWebhookDeliveryByEventParams extends Record<string, unknown> {
  event: string;
  callbackToVerifyDeliveries: (args: Record<string, unknown>) => void;
}
declare class WebhooksPage {
  page: Page;
  request: APIRequestContext;
  context: BrowserContext;
  neetoPlaywrightUtilities: CustomCommands;
  t: TFunction;
  constructor({
    page,
    request,
    neetoPlaywrightUtilities,
    context
  }: WebhooksPageParams);
  getWebhookURL: () => Promise<{
    webhookSiteURL: string;
    webhookToken: string | undefined;
  }>;
  addWebhook: ({
    webhookSiteURL
  }: {
    webhookSiteURL: string;
  }) => Promise<void>;
  verifyLatestWebhookResponse: ({
    callback,
    webhookToken,
    ...otherParams
  }: VerifyWebhookResponseParams) => Promise<void>;
  verifyWebhookDeliveries: ({
    callback,
    ...otherParams
  }: VerifyWebhookDeliveriesParams) => Promise<void>;
  verifyWebhookDeliveryByEvent: ({
    event,
    callbackToVerifyDeliveries,
    ...fieldsToBeVerified
  }: VerifyWebhookDeliveryByEventParams) => Promise<void>;
}
declare class ZapierPage extends IntegrationBase {
  zapierWebPage: Page;
  mailosaur: MailosaurClient;
  continueButton: Locator;
  constructor({
    page,
    neetoPlaywrightUtilities,
    integrationRouteIndex
  }: {
    page: Page;
    neetoPlaywrightUtilities: CustomCommands;
    integrationRouteIndex?: string;
  });
  loginToZapier: (zapierWebPage: Page) => Promise<void>;
  logoutFromZapier: () => Promise<void>;
  reconnectAccountAndPublish: (zapierApiKey: string) => Promise<void>;
  deleteAllConnections: (zapierAppLink: string) => Promise<void>;
  verifyZapIsTriggered: ({
    productName,
    submittedEmail,
    zapTriggeredAfter
  }: {
    submittedEmail: string;
    zapTriggeredAfter: Date;
    productName: string;
  }) => Promise<mailosaur_lib_models.Message>;
  skipIfTaskLimitIsExhausted: () => Promise<void>;
  connectAndVerify: ({
    apiKeyLabel
  }: {
    apiKeyLabel: string;
  }) => Promise<string>;
  disconnectAndVerify: () => Promise<void>;
}
interface VerifyDescriptionEditorParams {
  text: string;
  linkUrl?: string;
  fileName?: string;
  attachedImageName?: string;
  imageUrl?: string;
  videoUrl?: string;
  cannedResponseSuccessMessage?: string;
}
declare class EditorPage {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  t: TFunction;
  paragraphSelector: Locator;
  fixedMenuArrowSelector: Locator;
  editorLinkButton: Locator;
  attachmentPreview: Locator;
  editorAttachmentsButton: Locator;
  imageUploadDeleteButton: Locator;
  imageWrapper: Locator;
  imageUploadOption: Locator;
  cannedResponseOption: Locator;
  videoEmbedOption: Locator;
  videoWrapperSelector: Locator;
  emojiDropdownIcon: Locator;
  constructor(page: Page, neetoPlaywrightUtilities: CustomCommands);
  verifyDescriptionEditor: ({
    text,
    linkUrl,
    fileName,
    imageUrl,
    videoUrl,
    cannedResponseSuccessMessage
  }: VerifyDescriptionEditorParams) => Promise<void>;
}
interface CropImageProps {
  toggleAspectRatioLock: boolean;
  aspectRatioHeight: string;
  aspectRatioWidth: string;
  width: string;
  height: string;
}
interface ImageLibraryProps extends Partial<CropImageProps> {
  toggleOrginalImage?: boolean;
  localImagePath: string;
}
interface SelectImage extends CropImageProps {
  toggleOrginalImage: boolean;
  searchTerm: string;
  nthImage: number;
}
declare class ImageUploader {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  constructor({
    page,
    neetoPlaywrightUtilities
  }: {
    page: Page;
    neetoPlaywrightUtilities: CustomCommands;
  });
  private submitCroppedImage;
  /**
   *
   * Used to remove an image already uploaded from the image uploader amd verify it.
   *
   * @example 
   *
   * await imageUploader.removeImage()
   * @endexample
  */
  removeImage: () => Promise<void>;
  /**
   *
   * Used to open the image library modal.
   *
   * @example 
   *
   * await imageUploader.openImageLibrary()
   * @endexample
  */
  openImageLibrary: () => Promise<void>;
  /**
   *
   * Used to crop the image. It takes the following parameters:
   *
   * toggleAspectRatioLock (optional): A boolean value to toggle the aspect ratio lock switch which is checked by default. Default is false.
   *
   * aspectRatioHeight (optional): The height of the aspect ratio. Default is 9.
   *
   * aspectRatioWidth (optional): The width of the aspect ratio. Default is 16.
   *
   * width (optional): The width of the cropped image. Default is 100.
   *
   * height (optional): The height of the cropped image. Default is 100.
   *
   * @example 
   *
   * await imageUploader.cropImage({
   *     toggleAspectRatioLock: false
   *     aspectRatioHeight: "9",
   *     aspectRatioWidth: "16",
   *     width: "100",
   *     height: "100",
   * })
   * @endexample
  */
  cropImage: ({
    toggleAspectRatioLock,
    width,
    height,
    aspectRatioHeight,
    aspectRatioWidth
  }?: Partial<CropImageProps>) => Promise<void>;
  /**
   *
   * Used to upload a new image from the library and crop it if required. It takes the following parameters:
   *
   * localImagePath: The path of the image to be uploaded.
   *
   * toggleOrginalImage (optional): A boolean value to toggle the original image switch which is not checked by default. Default is false.
   *
   * toggleAspectRatioLock (optional): A boolean value to toggle the aspect ratio lock switch which is checked by default. Default is false.
   *
   * aspectRatioHeight (optional): The height of the aspect ratio. Default is 9.
   *
   * aspectRatioWidth (optional): The width of the aspect ratio. Default is 16.
   *
   * width (optional): The width of the cropped image. Default is 100.
   *
   * height (optional): The height of the cropped image. Default is 100.
   *
   * @example 
   *
   * await imageUploader.uploadNewImageFromLibrary({
   *     localImagePath,
   *     toggleOrginalImage: false,
   *     toggleAspectRatioLock: false,
   *     aspectRatioHeight: "9",
   *     aspectRatioWidth: "16",
   *     width: "100",
   *     height: "100",
   * })
   * @endexample
  */
  uploadNewImageFromLibrary: ({
    localImagePath,
    toggleOrginalImage,
    toggleAspectRatioLock,
    aspectRatioHeight,
    aspectRatioWidth,
    width,
    height
  }: ImageLibraryProps) => Promise<void>;
  /**
   *
   * Used to select an image from the unsplash and crop it if required. It takes the following parameters:
   *
   * nthImage (optional): The index of the image to be selected. Default is 0.
   *
   * searchTerm (optional): The input for the search field.
   *
   * toggleOrginalImage (optional): A boolean value to toggle the original image switch which is not checked by default. Default is false.
   *
   * toggleAspectRatioLock (optional): A boolean value to toggle the aspect ratio lock switch which is checked by default. Default is false.
   *
   * aspectRatioHeight (optional): The height of the aspect ratio. Default is 9.
   *
   * aspectRatioWidth (optional): The width of the aspect ratio. Default is 16.
   *
   * width (optional): The width of the cropped image. Default is 100.
   *
   * height (optional): The height of the cropped image. Default is 100.
   *
   * @example 
   *
   * await imageUploader.selectImageFromWeb({
   *     nthImage: 0,
   *     searchTerm: "",
   *     toggleOrginalImage: false,
   *     toggleAspectRatioLock: false,
   *     aspectRatioHeight: "9",
   *     aspectRatioWidth: "16",
   *     width: "100",
   *     height: "100",
   * })
   * @endexample
  */
  selectImageFromWeb: ({
    nthImage,
    searchTerm,
    toggleOrginalImage,
    toggleAspectRatioLock,
    aspectRatioHeight,
    aspectRatioWidth,
    width,
    height
  }?: Partial<SelectImage>) => Promise<void>;
  /**
   *
   * Used to select an image from the library and crop it if required. It takes the following parameters
   *
   * nthImage (optional): The index of the image to be selected. Default is 0.
   *
   * searchTerm (optional): The input for the search field.
   *
   * toggleOrginalImage (optional): A boolean value to toggle the original image switch which is not checked by default. Default is false.
   *
   * toggleAspectRatioLock (optional): A boolean value to toggle the aspect ratio lock switch which is checked by default. Default is false.
   *
   * aspectRatioHeight (optional): The height of the aspect ratio. Default is 9.
   *
   * aspectRatioWidth (optional): The width of the aspect ratio. Default is 16.
   *
   * width (optional): The width of the cropped image. Default is 100.
   *
   * height (optional): The height of the cropped image. Default is 100.
   *
   * @example 
   *
   * await imageUploader.selectImageFromLibrary({
   *     nthImage: 0,
   *     searchTerm: "",
   *     toggleOrginalImage: false,
   *     toggleAspectRatioLock: false,
   *     aspectRatioHeight: "9",
   *     aspectRatioWidth: "16",
   *     width: "100",
   *     height: "100",
   * })
   * @endexample
  */
  selectImageFromLibrary: ({
    nthImage,
    searchTerm,
    toggleOrginalImage,
    toggleAspectRatioLock,
    aspectRatioHeight,
    aspectRatioWidth,
    width,
    height
  }?: Partial<SelectImage>) => Promise<void>;
}
type sublink = "active" | "deactivated" | "all";
type emailCondition = "Contains" | "Does not contain" | "Is" | "Is not" | "Starts with" | "Does not start with" | "Ends with" | "Does not end with";
interface EditMemberProps$1 {
  email: string;
  firstName: string;
  lastName: string;
  role: string;
}
declare class TeamMembers {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  t: TFunction;
  constructor({
    page,
    neetoPlaywrightUtilities
  }: {
    page: Page;
    neetoPlaywrightUtilities: CustomCommands;
  });
  /**
   *
   * Used to navigate to the specified sublink in the team members page.
   *
   * sublink (optional): The sublink to navigate to. Default is all.
   *
   * @example 
   *
   * await teamMembers.navigateToTeamMembersSublink("all");
   * @endexample
  */
  navigateToTeamMembersSublink: (sublink?: sublink) => Promise<void>;
  /**
   *
   * Used to add a member using the add button in the header. It takes the following parameters:
   *
   * emails (optional): The emails of the members to be added. Default is an example email.
   *
   * role (optional): The role of the new members. Default is standard.
   *
   * @example 
   *
   * await teamMembers.addMemberViaUI({
   *     emails: ["sam@example.com", "tom@example.com"],
   *     role: "admin",
   * });
   * @endexample
  */
  addMemberViaUI: ({
    emails,
    role
  }?: {
    emails?: string[] | undefined;
    role?: string | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to search and verify the member by providing email as the search term. It takes the following parameters:
   *
   * email (required): The email of the member to be searched.
   *
   * interceptOptions (optional): The options to be passed to the waitForMultipleResponse command.
   *
   * @example 
   *
   * await teamMembers.searchAndVerifyMemberByEmail({
   *     email: "sam@example.com",
   *     interceptOptions: { timeout: 10000, requestCount: 1 },
   * });
   * @endexample
  */
  searchAndVerifyMemberByEmail: ({
    email,
    interceptOptions
  }: {
    email: string;
    interceptOptions?: Partial<InterceptMultipleResponsesParams> | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to edit a member using the edit button in row dropdown. A member has to be searched before editing. It takes the following parameters:
   *
   * email (optional): The new email of the member.
   *
   * role (optional): The new role of the member. Default is standard.
   *
   * firstName (optional): The new first name of the member.
   *
   * lastName (optional): The new last name of the member.
   *
   * @example 
   *
   * await teamMembers.searchAndVerifyMemberByEmail({
   *     email: "sam@example.com",
   * });
   * await teamMembers.editMemberViaUI({
   *     email: "tom@example.com",
   *     role: "admin",
   *     firstName: "Tom",
   *     lastName: "Hanks",
   * });
   * @endexample
   * @example 
   *
   * await teamMembers.searchAndVerifyMemberByEmail({
   *     email: "sam@example.com",
   * });
   * await teamMembers.editMemberViaUI();
   * 
   * // This will change the role of the member with email "sam@example.com" to the `standard` role.
   * @endexample
  */
  editMemberViaUI: ({
    email,
    firstName,
    lastName,
    role
  }?: Partial<EditMemberProps$1>) => Promise<void>;
  /**
   *
   * Used to toggle the state of a member between active or deactivated, using the activate or deactivate button in row dropdown. A member has to be searched before toggling.
   *
   * @example 
   *
   * await teamMembers.searchAndVerifyMemberByEmail({
   *     email: "sam@example.com",
   * });
   * await teamMembers.toggleMemberStateViaUI();
   * @endexample
  */
  toggleMemberStateViaUI: () => Promise<void>;
  /**
   *
   * Used to filter members by multi select fields such as role, group, teams, etc. The filter pane should be opened and closed before and after filtering. It takes the following parameters:
   *
   * selectedOptions (required): The options to be selected in the multi select field.
   *
   * selectContainerLocator (optional): The locator of the container of the multi select field. Default is the container of the role field.
   *
   * @example 
   *
   * await filterUtils.openFilterPane(page);
   * await teamMembers.filterMembersByMultiSelect({
   *     selectedOptions: ["Admin", "Standard"],
   *     selectContainerLocator: NEETO_FILTERS_SELECTORS.roleSelectContainer
   * });
   * @endexample
  */
  filterMembersByMultiSelect: ({
    selectedOptions,
    selectContainerLocator
  }: {
    selectedOptions: string[];
    selectContainerLocator?: string | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to filter members by at least one these field: email with conditions, role, or name. It takes the following parameters:
   *
   * email (optional): An object with the id and condition as keys to filter by email.
   *
   * roles (optional): The roles to filter by.
   *
   * name (optional): The name to filter by.
   *
   * @example 
   *
   * await teamMembers.filterMembers({
   *     email: { id: "sam", condition: "Contains" },
   *     roles: ["Admin", "Standard"],
   * });
   * @endexample
   * @example 
   *
   * await teamMembers.filterMembers({
   *     name: "Sam",
   *     roles: ["Admin"],
   * });
   * @endexample
  */
  filterMembers: ({
    email,
    roles,
    name
  }: {
    email?: {
      id: string;
      condition: emailCondition;
    } | undefined;
    roles?: string[] | undefined;
    name?: string | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to get the row of the team members table by providing the name of the member.
   *
   * @example 
   *
   * await teamMembers.getMemberRowByName("Sam");
   * @endexample
  */
  getMemberRowByName: (name: string) => playwright_core.Locator;
  /**
   *
   * Used to take action on members by selecting the members and clicking on the take action button in the subheader. It takes the following parameters:
   *
   * names (optional): The names of the members to take action on. If not provided, all members will be selected.
   *
   * state (optional): The state to change the members to.
   *
   * action (optional): An object with actionButtonText and valueButtonText as keys to take action on the members. actionButtonText and valueButtonText are the text of the action button to be clicked and the value of the action to be changed to, respectively.
   *
   * @example 
   *
   * await teamMembers.takeActionOnMembers({
   *     names: ["Sam", "Tom"],
   *     state: "Deactivate",
   * });
   * @endexample
   * @example 
   *
   * await teamMembers.takeActionOnMembers({
   *     action: { actionButtonText: "Change role", valueButtonText: "Admin" },
   * });
   * @endexample
  */
  takeActionOnMembers: ({
    names,
    state,
    action
  }: {
    names?: string[] | undefined;
    state?: "activate" | "deactivate" | undefined;
    action?: {
      actionButtonText: string;
      valueButtonText: string;
    } | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to perform an action on a column header in the team members table. It takes the following parameters:
   *
   * columnName (optional): The name of the column to perform the action on. Default is Name.
   *
   * actionButtonText (optional): The text of the action button to be clicked. Default is Ascending.
   *
   * @example 
   *
   * await teamMembers.performColumnAction({
   *     columnName: "Role",
   *     actionButtonText: "Hide column",
   * });
   * @endexample
   * @example 
   *
   * await teamMembers.performColumnAction();
   * 
   * // This will sort the `name` column in ascending order.
   * @endexample
  */
  performColumnAction: ({
    columnName,
    actionButtonText
  }?: {
    columnName?: string | undefined;
    actionButtonText?: "Ascending" | "Descending" | "Hide column" | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to toggle the visibility of columns in the team members table. It takes the following parameters:
   *
   * columns (optional): The columns whose visibility is to be toggled.
   *
   * bulkAction (optional): The option to show or hide all columns. If not provided, the columns will be toggled individually based on the columns parameter.
   *
   * @example 
   *
   * await teamMembers.toggleMemberColumns({
   *     bulkAction: "show",
   * });
   * @endexample
   * @example 
   *
   * await teamMembers.toggleMemberColumns({
   *     columns: ["role", "email"],
   * });
   * @endexample
  */
  toggleMemberColumns: ({
    columns,
    bulkAction
  }: {
    columns?: string[] | undefined;
    bulkAction?: "hide" | "show" | undefined;
  }) => Promise<void>;
  /**
   *
   * Used to verify the presence of a member in the team members table. It takes the following parameters:
   *
   * email (required): The email of the member to be verified.
   *
   * name (optional): The name of the member to be verified.
   *
   * @example 
   *
   * await teamMembers.verifyMemberInTable({
   *     email: "sam@example.com",
   *     name: "Sam",
   * });
   * @endexample
  */
  verifyMemberInTable: ({
    name,
    email
  }: {
    name: string;
    email: string;
  }) => Promise<void>;
}
interface BasicUserInfo {
  firstName: string;
  lastName: string;
  email: string;
}
interface CreateOrganizationProps extends BasicUserInfo {
  businessName: string;
  subdomainName: string;
  appName: string;
}
interface LoginAndOnboardParams extends BasicUserInfo {
  handleOnboarding: () => Promise<void>;
}
interface Credentials extends BasicUserInfo {
  otp?: number;
  domain: string;
  currentUserName: string;
  businessName: string;
  subdomainName: string;
}
declare class OrganizationPage {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  constructor(page: Page, neetoPlaywrightUtilities: CustomCommands);
  baseUrlGenerator: (appName: string) => string;
  createOrganization: ({
    email,
    businessName,
    subdomainName,
    firstName,
    lastName,
    appName
  }: CreateOrganizationProps) => Promise<void>;
  setupOrganization: (product: string) => Promise<void>;
  updateSubdomainIfExists: (appName: string) => Promise<void>;
  loginViaSSO: (email?: string) => Promise<void>;
  setupProfile: ({
    firstName,
    lastName
  }?: {
    firstName?: string | undefined;
    lastName?: string | undefined;
  }) => Promise<void>;
  loginAndOnboard: ({
    email,
    firstName,
    lastName,
    handleOnboarding
  }: LoginAndOnboardParams) => Promise<void>;
  signUp: ({
    credentials,
    fetchOtpFromEmail,
    appName
  }: {
    credentials: Credentials;
    fetchOtpFromEmail?: ((params: {
      email: string;
      timeout: number;
    }) => Promise<string>) | undefined;
    appName: string;
  }) => Promise<{
    STORAGE_STATE: {
      cookies: {
        name: string;
        value: string;
        domain: string;
        path: string;
        expires: number;
        httpOnly: boolean;
        secure: boolean;
        sameSite: "Strict" | "Lax" | "None";
      }[];
      origins: {
        origin: string;
        localStorage: {
          name: string;
          value: string;
        }[];
      }[];
    };
    baseURL: string | undefined;
  }>;
  fillOrganizationDetails: ({
    credentials,
    appName
  }: {
    credentials: Credentials;
    appName: string;
  }) => Promise<void>;
}
declare class SidebarSection {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  t: TFunction;
  constructor(page: Page, neetoPlaywrightUtilities: CustomCommands);
  clickOnSubLink: (label: string) => Promise<void>;
  clickOnGoBackButton: (label: string) => Promise<void>;
}
declare const ENVIRONMENT: {
  development: string;
  staging: string;
  review: string;
};
declare const IS_STAGING_ENV: boolean;
declare const STORAGE_STATE = "./e2e/auth/user.json";
declare const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
declare const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
declare const CREDENTIALS: {
  name: string;
  email: string;
  password: string;
};
declare const OTP_EMAIL_PATTERN = "is your login code";
declare const SLACK_DEFAULT_CHANNEL = "general";
declare const ZAPIER_TEST_EMAIL: (product: string) => string;
declare const USER_AGENTS: {
  windows: string;
  mac: string;
};
declare const BASE_URL = "/api/v1";
declare const NEETO_AUTH_BASE_URL: (subdomain?: string) => string;
declare const ROUTES: {
  neetoAuthSignup: string;
  neetoAuth: string;
  loginLink: string;
  profile: string;
  admin: string;
  myProfile: string;
  authSettings: string;
  webhooks: string;
  login: string;
  signup: string;
  subdomainAvailability: string;
  countries: string;
  neetoApps: string;
  directUploads: string;
  teamMembers: {
    all: string;
    bulkUpdate: string;
    index: string;
    show: (id: string) => string;
  };
  attachment: string;
};
declare const API_ROUTES: {
  teamMembers: {
    all: string;
    bulkUpdate: string;
    index: string;
    show: (id: string) => string;
  };
  integrations: {
    zapier: {
      api_keys: string;
    };
  };
};
declare const THIRD_PARTY_ROUTES: {
  webhooks: {
    site: string;
  };
  slack: {
    loginWithPassword: (workspace: string) => string;
  };
  zapier: {
    login: string;
    logOut: string;
    zapEditor: (zapId: string) => string;
  };
};
declare const NEETO_ROUTES: {
  imageUploader: string;
};
declare const networkConditions: Record<"Slow 3G" | "Fast 3G" | "No Throttling", Protocol.Network.emulateNetworkConditionsParameters>;
/**
 *
 * This constant contains the commonly used selectors including selectors for
 *
 * neetoUI components.
 *
 * undefined
 *
 * @example 
 *
 * import { COMMON_SELECTORS } from "@bigbinary/neeto-playwright-commons";
 * 
 * cy.get(COMMON_SELECTORS.alertTitle).should("be.visible");
 * @endexample
*/
declare const COMMON_SELECTORS: {
  emailInputError: string;
  pane: string;
  sideBar: string;
  copyButton: string;
  spinner: string;
  subheaderText: string;
  alertTitle: string;
  alertModalMessage: string;
  alertModalSubmitButton: string;
  checkbox: string;
  checkboxLabel: string;
  dropdownContainer: string;
  dropdownIcon: string;
  heading: string;
  paneBody: string;
  paneHeader: string;
  profileSidebar: string;
  selectOption: (label: string) => string;
  radioLabel: (embedLabel: string) => string;
  toastMessage: string;
  toastCloseButton: string;
  windowAlert: string;
  body: string;
  toastIcon: string;
  paneModalCrossIcon: string;
  inputField: string;
  alertConfirmationText: string;
  alertCancelButton: string;
  alertModalCrossIcon: string;
  saveChangesButton: string;
  cancelButton: string;
  inputFieldError: string;
  selectDropDownError: string;
  subTitleHeading: string;
  noDataTitle: string;
  noDataDescription: string;
  backdrop: string;
  menuBarHeading: string;
  dropdownWrapper: string;
  toggleButton: string;
  tooltip: string;
  articlePageTitle: string;
  tabItem: string;
  labelInputError: string;
  urlInputError: string;
  noDataPrimaryButton: string;
  modalHeader: string;
  nameInputError: string;
  selectContainer: string;
  selectValueContainer: string;
  dropdownMenu: string;
  sidebarToggle: string;
  subheader: string;
  settingsLink: string;
  ticketFieldTextInput: (label: string | number) => string;
  appSwitcherButton: string;
  appSwitcherWrapper: string;
  tableSpinner: string;
  pageLoader: string;
  homeButton: string;
  neetoUiSwitch: string;
  floatingActionMenuButton: string;
  columnsDropdownContainer: string;
  columnsDropdownButton: string;
  breadcrumbHeader: string;
  header: string;
  sidebarSubLink: (label: string) => string;
  sidebarGoBackButton: (label: string) => string;
  selectSingleValue: string;
  actionSelectIndicator: string;
  takeActionDropdown: string;
  columnsSearchInput: string;
};
declare const NEETO_EDITOR_SELECTORS: {
  boldOption: string;
  italicOption: string;
  underlineOption: string;
  strikeOption: string;
  codeBlockOption: string;
  highlightOption: string;
  linkInput: string;
  linkSubmitButton: string;
  commandList: (index: number) => string;
  imageUploadUrlSubmitButton: string;
  imageUploadUrlInputTextField: string;
  uploadInput: string;
  editorMenuBarWrapper: string;
  undoOption: string;
  redoOption: string;
  imageWrapper: string;
  contentField: string;
  addLinkButton: string;
  addLinkTextField: string;
  addURLTextField: string;
  submitLinkButton: string;
  fontSizeDropdown: (currentOption?: string) => string;
  fixedMenuArrow: string;
  cannedResponseOption: string;
  cannedResponseSelectContainer: string;
  fixedMenuWrapper: string;
  linkOption: string;
  addLinkUrlInput: string;
  addLinkDoneButton: string;
  unlinkButton: string;
  editorAttachmentsButton: string;
  attachmentPreviewDeleteButton: string;
  imageUploadOption: string;
  imageUploadLinkInput: string;
  imageUploadButton: string;
  imageUploadLinkSubmitButton: string;
  applyButton: string;
  videoEmbedOption: string;
  videoEmbedInput: string;
  videoEmbedSubmit: string;
  videoWrapper: string;
  paragraphOption: string;
  attachmentPreview: string;
  imageUploadLinkButton: string;
};
declare const NEETO_TEXT_MODIFIER_SELECTORS: {
  strikeOption: string;
  underlineOption: string;
  highlightOption: string;
};
declare const TEXT_MODIFIER_SELECTORS: {
  boldOption: string;
  italicsOption: string;
  codeOption: string;
  blockquoteOption: string;
  codeblockOption: string;
};
declare const LIST_MODIFIER_SELECTORS: {
  bulletListOption: string;
  orderedListOption: string;
};
declare const FONT_SIZE_SELECTORS: {
  h1: string;
  h2: string;
  h3: string;
  h4: string;
  h5: string;
};
declare const NEETO_FILTERS_SELECTORS: {
  emailSelectContainer: string;
  filterPaneHeading: string;
  neetoFiltersEmailBlock: string;
  neetoFiltersRoleBlock: string;
  neetoFiltersBarClearButton: string;
  neetoFiltersNameFilterField: string;
  neetoFilterNameBlock: string;
  roleSelectContainer: string;
  filterButton: string;
  filtersClearButton: string;
  filterDoneButton: string;
  filteredMembersCount: string;
  allMenubarBlock: string;
  filtersEmailFilter: string;
  paneModalCrossIcon: string;
  searchTermBlock: string;
};
declare const HELP_CENTER_SELECTORS: {
  helpButton: string;
  documentationButton: string;
  keyboardShortcutButton: string;
  chatButton: string;
  whatsNewButton: string;
  whatsNewWidgetInfo: string;
  whatsNewWidgetCloseButton: string;
  keyboardShortcutPaneHeading: string;
  keyboardShortcutPaneCrossIcon: string;
};
declare const LOGIN_SELECTORS: {
  appleAuthenticationButton: string;
  emailTextField: string;
  googleAuthenticationButton: string;
  githubAuthenticationButton: string;
  loginViaEmailButton: string;
  passwordTextField: string;
  rememberMeCheckBox: string;
  submitButton: string;
  twitterAuthenticationButton: string;
};
declare const MEMBER_SELECTORS: {
  membersTab: string;
  newButton: string;
  continueButton: string;
  submitButton: string;
  searchTextField: string;
  deactivatedAgentsButton: string;
  activatedMembersButton: string;
  columnCheckBox: string;
  roleLabel: (role: string) => string;
  teamMembersTable: string;
  dropDownIcon: string;
  editButton: string;
  menuBarHeading: string;
  activateOrDeactivateMember: string;
  columnsButton: string;
  columnsDropdownContainer: string;
  emailDropdownItemLabel: string;
  roleDropdownItemLabel: string;
  inviteStatusDropdownItemLabel: string;
  heading: string;
  activateButton: string;
  deactivateButton: string;
  rolesButton: string;
  statusTag: string;
  menubarSubLink: (sublink: string) => string;
  takeActionStateOption: (option?: string) => string;
  checkboxLabel: (label: string) => string;
};
declare const MEMBER_FORM_SELECTORS: {
  emailTextField: string;
  firstNameTextField: string;
  lastNameTextField: string;
  emailInput: string;
  emailErrorField: string;
  cancelButton: string;
};
declare const ROLES_SELECTORS: {
  newButton: string;
  proceedButton: string;
  cancelButton: string;
  tableHeaderRoleName: string;
  nameTextField: string;
  searchTextField: string;
  updateRolePaneHeading: string;
  updateRoleCancelButton: string;
  descriptionTextField: string;
  permissionCategoryTitle: string;
  headerColumn: string;
  dropDownIcon: string;
  tableHeaderRoleTitle: string;
  permissionCheckbox: string;
  editRoleButton: string;
  deleteRoleButton: string;
  permissionCard: string;
};
/**
 *
 * This constant contains the commonly used selectors for getting elements from
 *
 * signup page in neetoAuth.
 *
 * undefined
 *
 * @example 
 *
 * import { SIGNUP_SELECTORS } from "@bigbinary/neeto-playwright-commons";
 * 
 * cy.get(SIGNUP_SELECTORS.emailTextField).should("be.visible");
 * @endexample
*/
declare const SIGNUP_SELECTORS: {
  emailTextField: string;
  firstNameTextField: string;
  lastNameTextField: string;
  organizationNameTextField: string;
  organizationSubmitButton: string;
  otpTextBox: string;
  profileSubmitButton: string;
  signupViaEmailButton: string;
  submitButton: string;
  subdomainNameTextField: string;
  subdomainError: string;
  tryFreeButton: string;
  unregisterdEmailError: string;
};
declare const TAGS_SELECTORS: {
  newTagButton: string;
  tagNameTextField: string;
  editButton: string;
  deleteButton: string;
  cancelButton: string;
  submitButton: string;
  searchTextField: string;
  descriptionTextArea: string;
};
declare const MERGE_TAGS_SELECTORS: {
  mergeTagsButton: string;
  mergeButton: string;
  sourceSearchTextField: string;
  sourceTagsList: string;
  destinationTagsList: string;
  destinationSearchTextField: string;
  cancelButton: string;
  proceedButton: string;
  disabledTag: string;
};
declare const CHAT_WIDGET_SELECTORS: {
  iframe: string;
  spinner: string;
  helpButton: string;
  preChatEmailInput: string;
  preChatSubmitButton: string;
  chatBubble: string;
  closeChat: string;
};
declare const CHANGELOG_WIDGET_SELECTORS: {
  changelogWrapper: string;
  closeButton: string;
  publicUrlLink: string;
};
declare const KEYBOARD_SHORTCUTS_SELECTORS: {
  keyboardShortcutsPane: string;
  closePaneButton: string;
  hotKeyItem: string;
};
declare const PROFILE_SECTION_SELECTORS: {
  profileSectionButton: string;
  profilePopup: string;
  myProfileButton: string;
  profileOrganizationSettingsButton: string;
  logoutButton: string;
  neetoAuthLink: string;
  profileSidebarCancelButton: string;
};
declare const SLACK_SELECTORS: {
  messageContainer: string;
  loginEmail: string;
  loginPassword: string;
  signInButton: string;
  teamPicketButtonContent: string;
  redirectOpenInBrowser: string;
  workspaceActionsButton: string;
  teamMenuTrigger: string;
  menuItemButton: string;
  threadsFlexpane: string;
  replyBar: string;
  markdownElement: string;
  virtualListItem: string;
  channelItems: string;
};
declare const SLACK_DATA_QA_SELECTORS: {
  sectionHeadingButton: string;
  channelSectionSubmenuCreate: string;
  channelSectionMenuCreateChannel: string;
  skModalContent: string;
  infiniteSpinner: string;
  channelNameOptionsList: string;
  channelNameInput: string;
  createChannelNextButton: string;
  inviteToWorkspaceSkipButton: string;
  menuItems: string;
  channelDetailsModal: string;
  channelDetailsSettingsTab: string;
};
declare const INTEGRATION_SELECTORS: {
  integrationCard: (integration: string) => string;
  connectButton: string;
  integrationStatusTag: string;
  disconnectButton: string;
  manageButton: string;
};
declare const ZAPIER_SELECTORS: {
  zapTriggerStep: (zapId: string) => string;
  zapAccountSubstep: string;
  zapOpenSubstepContainer: string;
  modal: string;
  fmPrettytext: string;
  spinner: string;
  skeletonBlock: string;
  accountsLoader: string;
  floatingBox: string;
  connection: string;
  deleteConnectionModal: string;
  deleteConnectionDropdownButton: string;
  usageAmounts: string;
  universalSidebar: string;
  sidebarFooter: string;
  contextualSideBar: string;
};
declare const EMBED_SELECTORS: {
  iframe: (appName: string) => string;
  modal: (appName: string) => string;
  close: (appName: string) => string;
  loader: (appName: string) => string;
  inlineHeightInput: string;
  inlineWidthInput: string;
  inlineElementIdInput: string;
  codeBlock: string;
  previewTab: string;
  htmlTab: string;
  buttonTextInput: string;
  buttonPositionSelectContainer: string;
  buttonPositionSelectMenu: string;
  buttonColorLabel: string;
  buttonTextColorLabel: string;
  colorPickerTarget: string;
  colorpickerEditableInput: string;
  showIconCheckbox: string;
  elementIdInput: string;
  previewElementPopupButton: string;
};
declare const NEETO_IMAGE_UPLOADER_SELECTORS: {
  imageUploaderWrapper: string;
  browseText: string;
  fileInput: string;
  uploadedImage: string;
  uploadNewAsset: string;
  basicImageUploaderRemoveButton: string;
  removeButton: string;
  openImageLibraryButton: string;
  openAssetLibraryButton: string;
  imageEditorBackButton: string;
  aspectRatioWidthInput: string;
  aspectRatioHeightInput: string;
  cropSubmitButton: string;
  restrictionMessage: string;
  progressBar: string;
  myImagesTab: string;
  unsplashTab: string;
  nthLibraryImage: (index: number) => string;
  nthUnsplashImage: (index: number) => string;
  unsplashSearchInput: string;
  imageEditorUploadedImage: string;
  selectOriginalImageSwitch: string;
  lockAspectRatioSwitch: string;
  widthInputField: string;
  heightInputField: string;
};
declare const CHAT_WIDGET_TEXTS: {
  newConversation: string;
  welcomeChatBubble: string;
};
declare const MEMBER_TEXTS: {
  agent: string;
  admin: string;
  selectAll: string;
  hide: string;
  show: string;
};
declare const INTEGRATIONS_TEXTS: {
  connectHeader: (integration: string) => string;
  connectedHeader: (integration: string) => string;
};
declare const SLACK_WEB_TEXTS: {
  signOut: string;
  allow: string;
  loadingThread: string;
  name: string;
  deleteThisChannel: string;
  permanentlyDeleteTheChannel: string;
  deleteChannel: string;
};
declare const ZAPIER_WEB_TEXTS: {
  account: string;
  email: string;
  continue: string;
  statusLabel: string;
  password: string;
  editExistingDraft: string;
  signInTo: string;
  yesContinueTo: string;
  testTrigger: string;
  editStep: string;
  continueWithSelectedRecord: string;
  publish: string;
  delete: string;
  loading: string;
  subdomain: string;
  apiKey: string;
  publishingZapHeading: string;
  connectionListMenu: string;
  usageRegExp: string;
  trialEndsRegExp: string;
  testCurrentlyInQueue: string;
  welcomeText: (zapierLoginEmail: string) => string;
};
declare const TOASTR_MESSAGES: {
  zapierApiKeyGenerated: string;
};
declare const ZAPIER_LIMIT_EXHAUSTED_MESSAGE = "Zapier free task limit is exhausted. Test will be aborted";
declare const EMOJI_PICKER_LABEL = "Smileys & People";
declare const ATTACHMENT_DELETION_TOASTR_MESSAGE = "Attachment has been successfully deleted.";
declare const DESCRIPTION_EDITOR_TEXTS: {
  fontSize: string;
  paragraph: string;
  pasteLink: string;
  invalidURLError: string;
  pasteURL: string;
  delete: string;
  linkTag: string;
  link: string;
  cannedResponseHeader: string;
  paragraphOption: string;
};
declare const EXPANDED_FONT_SIZE: {
  h1: string;
  h2: string;
  h3: string;
  h4: string;
  h5: string;
};
declare const TEXT_MODIFIER_TAGS: {
  underlineOption: string;
  strikeOption: string;
  highlightOption: string;
};
declare const TEXT_MODIFIER_ROLES: {
  boldOption: string;
  italicsOption: string;
  blockquoteOption: string;
  codeblockOption: string;
  codeOption: string;
};
declare const LIST_MODIFIER_TAGS: {
  bulletListOption: string;
  orderedListOption: string;
};
/**
 *
 * Function to initialize credentials of the current user in the storageState.
 *
 * @example 
 *
 * initializeCredentials("invoice");
 * @endexample
*/
declare const initializeCredentials: (product: string) => void;
interface KeyValue {
  key: string;
  value: string;
}
type JoinString = (string1: string, string2: string, string3?: string, separator?: string) => string;
interface UserContext {
  user: Record<string, string>;
  headers: Record<string, unknown>;
}
type ReadFileSyncIfExists = (path?: string) => UserContext & Record<string, object>;
type WriteDataToFile = (data: string) => boolean;
type UpdateCredentials = ({
  key,
  value
}: KeyValue) => boolean;
type ClearCredentials = () => void;
type Hyphenize = (input: number | string) => string;
type JoinHyphenCase = (args: string) => string;
declare const joinString: JoinString;
declare const readFileSyncIfExists: ReadFileSyncIfExists;
declare const getGlobalUserState: () => Record<string, string>;
declare const writeDataToFile: WriteDataToFile;
/**
 *
 * This function modifies a specified key's value in the user related data stored
 *
 * in the storageState.
 *
 * @example 
 *
 * // update the user
 * updateCredentials({
 *   key: "subdomainName",
 *   value: newOrganizationName,
 * });
 * @endexample
*/
declare const updateCredentials: UpdateCredentials;
declare const removeCredentialFile: ClearCredentials;
declare const clearCredentials: ClearCredentials;
declare const hyphenize: Hyphenize;
declare const joinHyphenCase: JoinHyphenCase;
/**
 *
 * This are methods which can be used to skip tests based on the current test
 *
 * environment
 *
 * @example 
 *
 * import { skipTest } from "@bigbinary/neeto-playwright-commons";
 * 
 * skipTest.forDevelopmentEnv(); // Skip a test if TEST_ENV is "development"
 * skipTest.forReviewEnv(); // Skip a test if TEST_ENV is "review"
 * skipTest.forAllExceptStagingEnv(); // Skip a test if TEST_ENV is NOT "staging"
 * @endexample
*/
declare const skipTest: {
  forDevelopmentEnv: () => void;
  forReviewEnv: () => void;
  forAllExceptStagingEnv: () => void;
  forNonNightlyRun: () => void;
  ifNotWithinAllowedNightlyHours: ({
    reason,
    allowedNightlyRunHours
  }: {
    reason: string;
    allowedNightlyRunHours?: number[] | undefined;
  }) => void;
};
declare const shouldSkipSetupAndTeardown: () => boolean | "";
declare const squish: (text: string) => string;
declare const toCamelCase: (string: string) => string;
declare const getByDataQA: ts_toolbelt_out_Function_Curry.Curry<(page: Page, dataQa: string | [string, string]) => playwright_core.Locator>;
interface LoginProps {
  page: Page;
  neetoPlaywrightUtilities: CustomCommands;
  loginPath?: string;
}
declare const loginWithoutSSO: ({
  page,
  neetoPlaywrightUtilities,
  loginPath
}: LoginProps) => Promise<void>;
declare const login: ({
  page,
  neetoPlaywrightUtilities,
  loginPath
}: LoginProps) => Promise<false | void>;
/**
 *
 * Function to generate a random email to bypass OTP verification and log into
 *
 * neeto products.
 *
 * Usage
 *
 * @example 
 *
 * import { generateRandomBypassEmail } from "@bigbinary/neeto-playwright-commons";
 * 
 * const bypassEmail = generateRandomBypassEmail();
 * @endexample
*/
declare const generateRandomBypassEmail: () => string;
declare const extractSubdomainFromError: (errorString: string) => string;
interface AddMemberProps {
  email: string;
  role?: string;
  appName: string;
  requestCount?: number;
  neetoPlaywrightUtilities: CustomCommands;
}
interface EditMemberProps {
  email: string;
  firstName?: string;
  lastName?: string;
  newRole?: string;
  requestCount?: number;
  neetoPlaywrightUtilities: CustomCommands;
}
interface DeactiveMemberProps {
  email: string;
  neetoPlaywrightUtilities: CustomCommands;
  requestCount?: number;
}
declare const memberUtils: {
  addMemberViaRequest: ({
    email,
    role,
    appName,
    neetoPlaywrightUtilities
  }: AddMemberProps) => Promise<playwright_core.APIResponse | undefined>;
  editMemberViaRequest: ({
    email,
    firstName,
    lastName,
    newRole,
    neetoPlaywrightUtilities
  }: EditMemberProps) => Promise<void>;
  deactivateMemberViaRequest: ({
    email,
    neetoPlaywrightUtilities
  }: DeactiveMemberProps) => Promise<playwright_core.APIResponse | undefined>;
  generateRandomTeamMembers: ({
    count,
    role
  }: {
    count?: number | undefined;
    role?: string | undefined;
  }) => {
    firstName: string;
    lastName: string;
    email: string;
    role: string;
  }[];
};
interface AssertColumnHeaderVisibilityProps {
  page: Page;
  columnName: string;
  shouldBeVisible: boolean;
}
interface ToggleColumnCheckboxAndVerifyVisibilityProps {
  page: Page;
  tableColumns: string[];
  shouldBeChecked: boolean;
}
declare const tableUtils: {
  verifyTableColumnsExistence: ({
    page,
    columnNames
  }: {
    page: Page;
    columnNames: string[];
  }) => Promise<void>;
  assertColumnHeaderVisibility: ({
    page,
    columnName,
    shouldBeVisible
  }: AssertColumnHeaderVisibilityProps) => Promise<void>;
  toggleColumnCheckboxAndVerifyVisibility: ({
    page,
    tableColumns,
    shouldBeChecked
  }: ToggleColumnCheckboxAndVerifyVisibilityProps) => Promise<void>;
};
interface BreadcrumbTitleAndRoute {
  title: string;
  route: string;
}
interface VerifyBreadcrumbProps {
  page: Page;
  titlesAndRoutes: BreadcrumbTitleAndRoute[];
}
declare const headerUtils: {
  verifyBreadcrumbs: ({
    page,
    titlesAndRoutes
  }: VerifyBreadcrumbProps) => Promise<void>;
};
declare const decodeQRCodeFromFile: (filePath: string) => Promise<string | undefined>;
declare const initializeTotp: ({
  issuer,
  secret
}: {
  issuer: string;
  secret: string | Secret;
}) => TOTP;
type EmulateNetworkConditionsParameters = Protocol.Network.emulateNetworkConditionsParameters;
type NetworkThrottlingUsingCdpParams = {
  cdpSession: CDPSession;
  emulateNetworkConditionsParameters?: EmulateNetworkConditionsParameters;
};
declare const networkThrottlingUsingCDP: ({
  cdpSession,
  emulateNetworkConditionsParameters
}: NetworkThrottlingUsingCdpParams) => Promise<Protocol.Network.emulateNetworkConditionsReturnValue>;
type CpuThrottlingUsingCdpParams = {
  cdpSession: CDPSession;
  rate?: number;
};
declare const cpuThrottlingUsingCDP: ({
  cdpSession,
  rate
}: CpuThrottlingUsingCdpParams) => Promise<Protocol.Emulation.setCPUThrottlingRateReturnValue>;
interface ExecuteWithThrottledResourcesParams {
  kind?: "both" | "network" | "cpu";
  code: () => Promise<void>;
  networkCondition?: EmulateNetworkConditionsParameters;
  cpuThrottlingRate?: number;
  cdpSession: CDPSession;
}
declare const executeWithThrottledResources: ({
  code: emulatedCode,
  kind,
  networkCondition,
  cpuThrottlingRate,
  cdpSession
}: ExecuteWithThrottledResourcesParams) => Promise<void>;
/**
 *
 * Function to generate a basic HTML content with the given body.
 *
*/
declare const basicHTMLContent: (content: string) => string;
declare const hexToRGB: (hex: string) => string;
declare const filterUtils: {
  openFilterPane: (page: Page) => Promise<void>;
  clearFiltersFromActionBlock: (page: Page) => Promise<void>;
};
/**
 *
 * Function to get the image path and name from the image in a given path.
 *
 * @example 
 *
 * import { getImagePathAndName } from "@bigbinary/neeto-playwright-commons";
 * 
 * const { imagePath, imageName } = getImagePathAndName("../assets/images/image.png");
 * @endexample
*/
declare const getImagePathAndName: (localImagePath: string) => {
  imagePath: string;
  imageName: string;
};
interface CurrentsOverrides {
  projectId: string;
}
interface Overrides {
  globalOverrides?: Record<string, unknown>;
  useOverrides?: Record<string, unknown>;
  useCustomProjects?: boolean;
  projectOverrides?: Record<string, unknown>[];
  currentsOverrides: CurrentsOverrides & Record<string, unknown>;
}
/**
 *
 * This function returns the default playwright configuration object. It can be
 *
 * used to extend the default playwright configuration object in the host project.
 *
 * Usage:
 *
 * @example 
 *
 * import { definePlaywrightConfig } from "@bigbinary/neeto-playwright-commons";
 * 
 * export default definePlaywrightConfig({
 *   currentsOverrides: { projectId: "******" },
 * });
 * @endexample
*/
declare const definePlaywrightConfig: (overrides: Overrides) => _playwright_test.PlaywrightTestConfig<{}, {}>;
export { API_ROUTES, ATTACHMENT_DELETION_TOASTR_MESSAGE, BASE_URL, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COMMON_SELECTORS, CREDENTIALS, CustomCommands, type CustomFixture, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_PICKER_LABEL, ENVIRONMENT, EXPANDED_FONT_SIZE, EditorPage, EmbedBase, FONT_SIZE_SELECTORS, GLOBAL_TRANSLATIONS_PATTERN, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IS_STAGING_ENV, ImageUploader, IntegrationBase, KEYBOARD_SHORTCUTS_SELECTORS, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MailosaurUtils, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_TEXT_MODIFIER_SELECTORS, OTP_EMAIL_PATTERN, OrganizationPage, PROFILE_SECTION_SELECTORS, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, SIGNUP_SELECTORS, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STORAGE_STATE, SidebarSection, SlackPage, TAGS_SELECTORS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THIRD_PARTY_ROUTES, TOASTR_MESSAGES, TeamMembers, USER_AGENTS, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, generateRandomBypassEmail, generateStagingData, getByDataQA, getGlobalUserState, getImagePathAndName, headerUtils, hexToRGB, hyphenize, i18nFixture, initializeCredentials, initializeTotp, joinHyphenCase, joinString, login, loginWithoutSSO, memberUtils, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, shouldSkipSetupAndTeardown, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, writeDataToFile };