import * as react_jsx_runtime from 'react/jsx-runtime';
import { Component } from 'react';

declare global {
  interface Window {
    __NEXT_DATA__: any;
    [x: string]: any;

    dataLayer: {
      push: (obj: Record<string, any>) => void;
    };
  }
}

declare enum ContactTime {
  MORNING = 'morning',
  AFTERNOON = 'afternoon',
  EVENING = 'evening',
  NO_PREFERENCE = 'no preference',
}

declare enum SFDCPatientType {
  TEEN = 'A teen',
  ADULT = 'An adult',
  PARENT = 'A parent (looking for my child)',
}

type KeySortTypes = 'experience' | 'distance' | 'name' | 'teen' | 'itero';

type FilterElements = 'radio' | 'checkbox' | 'text';

type ChangeView = (path: string | undefined, params: string, callback?: () => void) => void;

type InitGoogleAutoComplete = (
  element_id: string,
  locale_id: string,
  callback: (arg0: {
    geometry?: google.maps.places.PlaceGeometry;
    formatted_address: string;
  }) => void,
) => void;

type Appointment = {
  docID: number;
  firstName: string;
  lastName: string;
  email: string;
  comments: string;
  ageGroup: SFDCPatientType.TEEN | SFDCPatientType.ADULT | SFDCPatientType.PARENT;
  phone: string;
  zip: string;
  age: string;
  leadSource: 'Doc Locator' | 'Vivera Doctor Locator' | '';
  optin: boolean;
  vid: string;
  stage_in_funnel__c: 'Low' | 'Mid' | 'Top';
  minutes_on_site: string;
  sub_lead_source?: string;
  optin2?: boolean;
  preferred_contact_time?: ContactTime;
};

type AppointmentFormCookie = {
  submitted: boolean;
  profileIds: string[];
};

type SearchApiFilters = {
  rd: string;
  rdi: string;
  it: ImplementationParameter;
  pst: PresetParameter;
  vid: string;
  sid: string;
  lat: string;
  lng: string;
  fn?: string;
  f?: string;
  s: string;
  pc?: string;
  usa?: string;
  ust?: string;
  uct?: string;
  token?: string;
  av?: ApiVersionParameter;
  flan?: string;
  fpinsurance?: string;
  fp?: string;
  fservice?: string;
  fehours?: string;
  svc?: string;
  cid?: string;
  cl?: string;
  mtcc?: string;
  mrd?: string;
  method?: string;
  fdp?: string;
  _?: string;
};

type PresetParameter = '3' | '2' | '1';

type ApiVersionParameter = 'dcc' | 'nl' | 'nl2';

type ImplementationParameter = 'us' | 'us2' | 'us3' | 'br2' | 'cl' | 'mx';

type SendAppointment = (form: Appointment) => Promise<any>;

type TierPins = {
  id?: string;
  label: string;
  imgUrl: string;
  segmentCode: number;
  filterValue?: string;
};

type CountryData$1 = {
  countryList: string;
  locales: string[];
  distUnit: string;
  shortDistUnit: string;
  defaultRadiusIncrement: string;
  query_param_profile?: string;
  geoCountry?: string;
  apiDistUnit?: string;
};

type SocialIcons$1 = {
  whatsappLabel?: string;
  instagramLabel?: string;
  facebookLabel?: string;
  twitterLabel?: string;
  youtubeLabel?: string;
};

type RadiusOptions$1 = {
  label: string;
  value: string;
}[];

type HashEmailAndPhone$1 = 'true' | 'false';
type ModalData$1 = {
  id: string;
  title: string;
  description: string;
  footnote?: string;
  size?: 'sm' | 'lg';
  image?: string;
  width?: 'sm' | 'lg';
};

type Config$1 = {
  country: string;
  language: string;
  tokenApiUrl: string;
  tokenClientId: string;
  tokenClientSecret: string;
  radiusSvcUrl: string;
  logSvcUrl: string;
  doctorSvcUrl: string;
  appointmentSvcUrl: string;
  checkCaptchaUrl: string;
  recaptchaKey: string;
  googleKey: string;
  implementationType: 'us' | 'us2' | 'us3' | 'br2' | 'cl' | 'mx';
  defaultSort: KeySortTypes;
  showIteroSort: boolean;
  defaultVivera: boolean;
  formatResultPhone: boolean;
  recaptchaPromiseDelay: number;
  resultsPerPage: number;
  paginationLimit: number;
  useInfiniteScrollOnResults: boolean;
  useInfiniteScrollWithButtonOnWeb: boolean;
  useInfiniteScrollWithButtonOnMobile: boolean;
  skipWelcome: boolean;
  stickyMap: boolean;
  fadFromNav: boolean;
  universalFadSearch: boolean;
  doctorLocatorUrl: string;
  doctorProfileUrl: string;
  privacyPolicyUrl: string;
  slug: string;
  dmpKey: string;
  mainToggleFilter: 'vivera';
  languageData: { [key: string]: { [key: string]: string } };
  countryData: { [key: string]: CountryData$1 };
  resultProfileImage: string;
  doctorProfileImage: string;
  useMyLocationIcon: string;
  segmentTooltipMapKeyIconsUrl: string;
  segmentTooltipMapKeyIconsUrlForTeen?: string;
  servicesOfferedFilterData?: {
    key: string;
    value: string;
  }[];
  tierPins: TierPins[];
  lanuagesFilterOptions: {
    value: string;
    translation: string;
    urlKey?: string;
  }[];
  insurancesFilterOptions: {
    value: string;
    translation: string;
  }[];
  sortOptions: {
    label: string;
    value: string;
    key?: string;
    disabled?: boolean;
  }[];
  sortOptionsMobile?: {
    type: FilterElements;
    label?: {
      value: string;
      useLanguageData: boolean;
    };
    value?: KeySortTypes;
    desc?: string;
    disabled?: boolean;
  }[];
  radiusOptions: RadiusOptions$1;
  stateOptions: {
    label: string;
    value: string;
  }[];
  zipUtility: ZipUtility$1;
  dobUtility: {
    mask: string;
    separator: '/' | '-';
  };
  mobileUtility: {
    mask: string;
    maxLength: number;
    separator?: '/' | '-' | ' ';
    prefix?: string;
  };
  trackingUtility?: {
    hashEmailAndPhone: HashEmailAndPhone$1;
  };
  optin?: {
    mandatory?: boolean;
    preChecked?: boolean;
    message?: string;
    secondOptinLabel?: string;
  };
  pageSlugs?: DocLocSlugs$1;
  localeId?: string;
  hideFilters?: {
    state?: boolean;
    vivera?: boolean;
    doctorType?: boolean;
    whitening?: boolean;
    viveraFilter?: boolean;
    invisalign_first?: boolean;
    invisalign_palatal_expanders?: boolean;
  };
  hidePaymentMethods?: boolean;
  showTierLevelFilter?: boolean;
  showFilters?: {
    isPediatric: boolean;
  };
  hideLabels?: {
    vip: boolean;
  };
  hideAppointmentFields?: {
    zip: boolean;
  };
  appointmentExtraFields?: {
    comment?: boolean;
  };
  features?: {
    showLendCare?: boolean;
  };
  colors?: Colors$1;
  heetFormId?: string;
  appointmentFormCookie?: AppointmentFormCookie;
  changeView?: ChangeView;
  initGoogleAutoComplete?: InitGoogleAutoComplete;
  region?: string;
  isLatam?: boolean;
  isApac?: boolean;
  isUS?: boolean;
  showSocialIcons?: boolean;
  socialIcons?: SocialIcons$1;
  ageRestriction?: {
    patientType: string;
    age: number;
  }[];
  corporatePartners?: {
    cpQuery?: string;
    partner?: Partner$1[];
  };
  enableGoogleSearch?: boolean;
  apiCountryList?: string;
  testAutomationIframeId: string;
  removedDlEvents: string[];
  modalsData: ModalData$1[];
  useRecaptchaForAPIs?: boolean;
  thankyouPageUrl?: string;
  programData?: ProgramData$1[];
  fromMiniSearch?: boolean;
  customAppointmentUrl: {
    docID: number;
    url: string;
  }[];
  zipsFor12MilesRadius: string[];
  zipsFor2point5MilesRadius: string[];
  enableHeartlandButtonSwap?: boolean;
  scheduleAppointmentUrl: string;
  zocdocScheduleAppointmentUrl: string;
  nexHealthScheduleAppointmentUrl: string;
  availablePrograms?: string[];
  availableServices?: string[];
  availableTreatments?: string[];
  useDocLoc3O?: boolean;
  hideAgeFilter?: boolean;
  disableProfilePage?: boolean;
  hideTiersFromProfile?: boolean;
  hideAgeInputField?: boolean;
  showBusinessName?: boolean;
  hideState?: boolean;
  annotationListItems?: string[];
  disableLog?: boolean;
  desclaimerPageUrl?: string;
  showDesclaimerPageLink?: boolean;
  excludeToken?: boolean;
  hostEnv?: string;
  enableHfd?: boolean;
  enableZocdoc?: boolean;
  enablePreferredContactTime?: boolean;
  selectOtherPatientFinancing?: boolean;
  enableNexHealth?: boolean;
  appointmentButtonSecquence?: string[];
};

type ProgramData$1 = {
  filterValue?: string;
  programKey: string;
  subleadSource?: string;
  thankyouPageUrl?: string;
  startTime?: string;
  endTime?: string;
};

type Partner$1 = {
  name?: string;
  cpValue?: string;
  sfdcValue?: string;
  imgUrl?: string;
  mobileImgUrl?: string;
  redirectSlug?: string;
  searchFilters?: Partial<SearchApiFilters>;
};

type DocLocatorProps$1 = Partial<Config$1> & {
  testHosts?: string[];

  prodRadiusUrl_US?: string;
  prodDocUrl_US?: string;
  prodLogUrl_US?: string;
  prodCheckCaptchaUrl?: string;

  prodRadiusUrl_LATAM?: string;
  prodDocUrl_LATAM?: string;
  prodLogUrl_LATAM?: string;

  testRadiusUrl_US?: string;
  testDocUrl_US?: string;
  testLogUrl_US?: string;
  testCheckCaptchaUrl?: string;

  testRadiusUrl_LATAM?: string;
  testDocUrl_LATAM?: string;
  testLogUrl_LATAM?: string;

  recaptchaAssessmentUrl?: string;
  testTokenApiUrlNA?: string;
  testTokenClientIdNA?: string;
  testTokenClientSecretNA?: string;
  sendAppointment?: SendAppointment;
  setFadFromNav?: (val: boolean) => void;
  setUniversalFadSearch?: (val: boolean) => void;
  setFromMiniSearch?: (val: boolean) => void;
};

type DocLocSlugs$1 = {
  doctorLocatorUrl: string;
  doctorProfileUrl: string;
};

type ZipUtility$1 = {
  type?: 'number' | 'text';
  mask?: string;
  maskChar?: string;
  maxLength?: number;
  validLengths?: number[];
  smallFont?: boolean;
};

type Colors$1 = { primary?: string; secondary?: string; headline?: string; black?: string };

declare class DocLocatorRoot extends Component<DocLocatorProps$1> {
    constructor(props: DocLocatorProps$1);
    render(): react_jsx_runtime.JSX.Element;
}

type CountryData = {
    countryList: string;
    locales: string[];
    distUnit: string;
    shortDistUnit: string;
    defaultRadiusIncrement: string;
    query_param_profile?: string;
    geoCountry?: string;
    apiDistUnit?: string;
};
type SocialIcons = {
    whatsappLabel?: string;
    instagramLabel?: string;
    facebookLabel?: string;
    twitterLabel?: string;
    youtubeLabel?: string;
};
type RadiusOptions = {
    label: string;
    value: string;
}[];
type HashEmailAndPhone = 'true' | 'false';
type ModalData = {
    id: string;
    title: string;
    description: string;
    footnote?: string;
    size?: 'sm' | 'lg';
    image?: string;
    width?: 'sm' | 'lg';
};
type Config = {
    country: string;
    language: string;
    tokenApiUrl: string;
    tokenClientId: string;
    tokenClientSecret: string;
    radiusSvcUrl: string;
    logSvcUrl: string;
    doctorSvcUrl: string;
    appointmentSvcUrl: string;
    checkCaptchaUrl: string;
    recaptchaKey: string;
    googleKey: string;
    implementationType: 'us' | 'us2' | 'us3' | 'br2' | 'cl' | 'mx';
    defaultSort: KeySortTypes;
    showIteroSort: boolean;
    defaultVivera: boolean;
    formatResultPhone: boolean;
    recaptchaPromiseDelay: number;
    resultsPerPage: number;
    paginationLimit: number;
    useInfiniteScrollOnResults: boolean;
    useInfiniteScrollWithButtonOnWeb: boolean;
    useInfiniteScrollWithButtonOnMobile: boolean;
    skipWelcome: boolean;
    stickyMap: boolean;
    fadFromNav: boolean;
    universalFadSearch: boolean;
    doctorLocatorUrl: string;
    doctorProfileUrl: string;
    privacyPolicyUrl: string;
    slug: string;
    dmpKey: string;
    mainToggleFilter: 'vivera';
    languageData: {
        [key: string]: {
            [key: string]: string;
        };
    };
    countryData: {
        [key: string]: CountryData;
    };
    resultProfileImage: string;
    doctorProfileImage: string;
    useMyLocationIcon: string;
    segmentTooltipMapKeyIconsUrl: string;
    segmentTooltipMapKeyIconsUrlForTeen?: string;
    servicesOfferedFilterData?: {
        key: string;
        value: string;
    }[];
    tierPins: TierPins[];
    lanuagesFilterOptions: {
        value: string;
        translation: string;
        urlKey?: string;
    }[];
    insurancesFilterOptions: {
        value: string;
        translation: string;
    }[];
    sortOptions: {
        label: string;
        value: string;
        key?: string;
        disabled?: boolean;
    }[];
    sortOptionsMobile?: {
        type: FilterElements;
        label?: {
            value: string;
            useLanguageData: boolean;
        };
        value?: KeySortTypes;
        desc?: string;
        disabled?: boolean;
    }[];
    radiusOptions: RadiusOptions;
    stateOptions: {
        label: string;
        value: string;
    }[];
    zipUtility: ZipUtility;
    dobUtility: {
        mask: string;
        separator: '/' | '-';
    };
    mobileUtility: {
        mask: string;
        maxLength: number;
        separator?: '/' | '-' | ' ';
        prefix?: string;
    };
    trackingUtility?: {
        hashEmailAndPhone: HashEmailAndPhone;
    };
    optin?: {
        mandatory?: boolean;
        preChecked?: boolean;
        message?: string;
        secondOptinLabel?: string;
    };
    pageSlugs?: DocLocSlugs;
    localeId?: string;
    hideFilters?: {
        state?: boolean;
        vivera?: boolean;
        doctorType?: boolean;
        whitening?: boolean;
        viveraFilter?: boolean;
        invisalign_first?: boolean;
        invisalign_palatal_expanders?: boolean;
    };
    hidePaymentMethods?: boolean;
    showTierLevelFilter?: boolean;
    showFilters?: {
        isPediatric: boolean;
    };
    hideLabels?: {
        vip: boolean;
    };
    hideAppointmentFields?: {
        zip: boolean;
    };
    appointmentExtraFields?: {
        comment?: boolean;
    };
    features?: {
        showLendCare?: boolean;
    };
    colors?: Colors;
    heetFormId?: string;
    appointmentFormCookie?: AppointmentFormCookie;
    changeView?: ChangeView;
    initGoogleAutoComplete?: InitGoogleAutoComplete;
    region?: string;
    isLatam?: boolean;
    isApac?: boolean;
    isUS?: boolean;
    showSocialIcons?: boolean;
    socialIcons?: SocialIcons;
    ageRestriction?: {
        patientType: string;
        age: number;
    }[];
    corporatePartners?: {
        cpQuery?: string;
        partner?: Partner[];
    };
    enableGoogleSearch?: boolean;
    apiCountryList?: string;
    testAutomationIframeId: string;
    removedDlEvents: string[];
    modalsData: ModalData[];
    useRecaptchaForAPIs?: boolean;
    thankyouPageUrl?: string;
    programData?: ProgramData[];
    fromMiniSearch?: boolean;
    customAppointmentUrl: {
        docID: number;
        url: string;
    }[];
    zipsFor12MilesRadius: string[];
    zipsFor2point5MilesRadius: string[];
    enableHeartlandButtonSwap?: boolean;
    scheduleAppointmentUrl: string;
    zocdocScheduleAppointmentUrl: string;
    nexHealthScheduleAppointmentUrl: string;
    availablePrograms?: string[];
    availableServices?: string[];
    availableTreatments?: string[];
    useDocLoc3O?: boolean;
    hideAgeFilter?: boolean;
    disableProfilePage?: boolean;
    hideTiersFromProfile?: boolean;
    hideAgeInputField?: boolean;
    showBusinessName?: boolean;
    hideState?: boolean;
    annotationListItems?: string[];
    disableLog?: boolean;
    desclaimerPageUrl?: string;
    showDesclaimerPageLink?: boolean;
    excludeToken?: boolean;
    hostEnv?: string;
    enableHfd?: boolean;
    enableZocdoc?: boolean;
    enablePreferredContactTime?: boolean;
    selectOtherPatientFinancing?: boolean;
    enableNexHealth?: boolean;
    appointmentButtonSecquence?: string[];
};
type ProgramData = {
    filterValue?: string;
    programKey: string;
    subleadSource?: string;
    thankyouPageUrl?: string;
    startTime?: string;
    endTime?: string;
};
type Partner = {
    name?: string;
    cpValue?: string;
    sfdcValue?: string;
    imgUrl?: string;
    mobileImgUrl?: string;
    redirectSlug?: string;
    searchFilters?: Partial<SearchApiFilters>;
};
type DocLocatorProps = Partial<Config> & {
    testHosts?: string[];
    prodRadiusUrl_US?: string;
    prodDocUrl_US?: string;
    prodLogUrl_US?: string;
    prodCheckCaptchaUrl?: string;
    prodRadiusUrl_LATAM?: string;
    prodDocUrl_LATAM?: string;
    prodLogUrl_LATAM?: string;
    testRadiusUrl_US?: string;
    testDocUrl_US?: string;
    testLogUrl_US?: string;
    testCheckCaptchaUrl?: string;
    testRadiusUrl_LATAM?: string;
    testDocUrl_LATAM?: string;
    testLogUrl_LATAM?: string;
    recaptchaAssessmentUrl?: string;
    testTokenApiUrlNA?: string;
    testTokenClientIdNA?: string;
    testTokenClientSecretNA?: string;
    sendAppointment?: SendAppointment;
    setFadFromNav?: (val: boolean) => void;
    setUniversalFadSearch?: (val: boolean) => void;
    setFromMiniSearch?: (val: boolean) => void;
};
type DocLocSlugs = {
    doctorLocatorUrl: string;
    doctorProfileUrl: string;
};
type ZipUtility = {
    type?: 'number' | 'text';
    mask?: string;
    maskChar?: string;
    maxLength?: number;
    validLengths?: number[];
    smallFont?: boolean;
};
type Colors = {
    primary?: string;
    secondary?: string;
    headline?: string;
    black?: string;
};

export { DocLocatorRoot as default };
export type { DocLocatorProps };
