{"version":3,"sources":["utils/update-iframe-height.ts","components/Loader.tsx","utils/constants.ts","utils/date-helper.ts","components/AppointmentType/Duration.tsx","components/AppointmentType/OnlineDescHTML.tsx","components/DropDown/SelectDropDownSelected.tsx","components/DropDown/SelectDropDownDefaultItem.tsx","components/DropDown/SelectDropDown.tsx","components/AppointmentType/dropdown/Dropdown.tsx","utils/filter-helper.ts","components/AppointmentType/CurrencyLabel.tsx","components/AppointmentType/card/CardList.tsx","components/AppointmentType/card/CardContainer.tsx","utils/iframe-events.ts","utils/step-helper.ts","utils/grecaptcha-helper.ts","components/BLCaptcha.tsx","components/StepsNavigation.tsx","components/steps/SelectAppointmentType.tsx","contexts/useFormTheme.tsx","components/steps/SelectAssociate.tsx","utils/find-step-by-type.ts","utils/url-helper.ts","config/index.ts","utils/axios-api.ts","components/Calendar/CalendarNavigation.tsx","components/Calendar/CalendarDay.tsx","hooks/useDidMountEffect.ts","components/Calendar/CalendarNoAppointmentsButton.tsx","components/Calendar/CalendarLoading.tsx","components/Calendar/CalendarDatepicker.tsx","components/WaitList/DeleteWaitListItemButton.tsx","components/WaitList/WaitListTimeWindowItems.tsx","components/layout/icons/AddIcon.tsx","components/WaitList/WaitListSection.tsx","components/WaitList/WaitListWrapper.tsx","components/Timezone/TimeZoneEntry.tsx","components/Timezone/TimeZoneGroup.tsx","components/Timezone/HourFormatSwitch.tsx","components/Timezone/TimeZonePicker.tsx","components/layout/translate/Translate.tsx","utils/error-helper.ts","components/Error/BLError.tsx","components/Calendar/CalendarTimepicker.tsx","components/steps/SelectDateAndTime.tsx","utils/input-event-helper.ts","components/fields/Text.tsx","utils/email-helper.ts","components/fields/Email.tsx","components/fields/Date.tsx","components/fields/Phone.tsx","components/fields/Checkbox.tsx","components/DynamicField.tsx","components/fields/Textarea.tsx","components/fields/Radio.tsx","components/fields/BLSelect.tsx","components/fields/Number.tsx","components/fields/Currency.tsx","components/steps/CustomForm.tsx","components/payments/StripeInput.tsx","components/payments/PaymentFormError.tsx","hooks/useStripeHook.ts","utils/payment-details-helper.ts","utils/script-helper.ts","contexts/useFormPayment.tsx","components/payments/PaymentAgreement.tsx","utils/signature-pad.js","components/payments/PaymentSignaturePad.tsx","components/payments/PaymentsNavigation.tsx","components/payments/CheckoutForm.tsx","components/payments/Stripe.tsx","utils/logger.ts","hooks/useBridalLIvePay.ts","components/layout/GoogleRecaptchaText.tsx","components/payments/CreditCardTypeImage.tsx","utils/bl-pay-error-helper.ts","components/payments/BridalLivePay.tsx","utils/credit-card-helper.ts","hooks/useChargeItPro.ts","components/payments/ChargeItProFieldError.tsx","components/payments/ChargeItPro.tsx","components/payments/SubmittingForm.tsx","utils/summary-helper.ts","components/Summary/RequiredDetailsSummary.tsx","components/Summary/CustomFieldsSummary.tsx","components/Summary/DateAndTimeSummary.tsx","components/Summary/AppointmentTypeSummary.tsx","components/Summary/PaymentDetailsSummary.tsx","components/Summary/WaitListSummary.tsx","components/Summary/AppointmentDetails.tsx","components/steps/SummaryDetails.tsx","components/steps/PaymentDetails.tsx","components/Confirmation/ScriptInnerHtml.tsx","components/Confirmation/WaitList.tsx","components/Confirmation/AppointmentScheduler.tsx","components/DynamicStep.tsx","components/steps/Confirmation.tsx","utils/scroll-iframe-to-top.ts","utils/custom-field-helper.ts","utils/currency-helper.ts","utils/form-request-helper.ts","components/layout/StepDescription.tsx","components/layout/FormHeader.tsx","components/layout/FormTitle.tsx","components/layout/FormLogo.tsx","hooks/useStateCallBack.ts","utils/iframe-helper.ts","components/StepsBuilder.tsx","utils/is-defined.ts","utils/language-helper.ts","utils/locale-helper.ts","utils/font-and-theme-helper.ts","utils/accessibe-helper.ts","App.tsx","theme.ts","i18n.js","index.tsx"],"names":["updateIframeHeight","root","document","querySelector","window","parent","postMessage","type","value","scrollHeight","Loader","t","useTranslation","thickness","speed","emptyColor","size","FormTypes","STEPS","CIP_FIELDS","STRIPE_FIELDS","REGEX","EMAIL","EMAIL_FUNC","TIME_ZONE_GROUPS","title","timeZones","label","STATES","FONT_TYPES","COUNTRIES_LOCALE","country","phoneMask","phoneMaskWithExtension","mobilePhoneMask","min","usesStates","states","dayjs","extend","duration","TIME_LABELS","helper","DAYS_ENUM","days","open","closed","isClosed","isTimeSlotValid","timeSlot","hasError","endTimeDate","startTimeDate","isBefore","isSame","isTimeSlotValidPrevious","current","previous","validateWaitListTimeSlots","timeSlots","undefined","map","slot","index","array","length","next","generateDates","date","time","allDay","generateDate","year","month","day","Date","setHours","getDateParams","getFullYear","getMonth","getDate","hours","getHours","minutes","getMinutes","startDate","startTime","returnStart","returnEnd","getTime","toString","start","end","selectedDate","timeToObject","split","replace","meridiem","substr","toLowerCase","indexOf","generateDateTime","dates","times","buildDefaultTimezones","id","defaultZone","forEach","group","every","zone","getTimeLabel","plural","buildDurationObject","isNaN","durationObject","format","getTimeString","withMeridiem","pad","num","str","validate","isValid","Duration","appointmentType","displayType","DateHelper","style","width","display","marginRight","xmlns","className","viewBox","fill","fillRule","d","clipRule","OnlineDescHTML","description","styles","classNames","dangerouslySetInnerHTML","__html","SelectDropDownSelected","defaultLabel","selectedItem","textLabel","iconLabel","translate","SelectDropDownDefaultItem","selectDefaultItem","onClick","icon","SelectDropDown","list","defaultValue","onSelect","useState","selected","setSelected","item","w","px","py","textAlign","transition","borderRadius","borderWidth","backgroundColor","_hover","bg","_focus","boxShadow","as","Button","rightIcon","minWidth","maxHeight","overflowY","i","Dropdown","typeId","form","useForm","findAppointmentType","json","appointmentTypes","find","a","getProperty","property","ariaLabel","apptType","formatAriaLabel","onlineDescription","currency","locale","decimalSeparator","thousandsSeparator","formatValue","groupSeparator","prefix","currencySymbol","e","console","log","CurrencyLabel","element","itemAmount","requirePaymentInfoForBooking","Filter","initAmount","amount","CardList","align","h","mb","stroke","strokeLinecap","strokeLinejoin","strokeWidth","direction","mt","CardContainer","userDataChanged","data","JSON","stringify","message","formPageViewed","eventScheduled","associateSelected","appointmentSelected","dateTimeSelected","requiredFields","customFields","redirect","url","pageLeave","initFormLoad","customFieldsData","requiredFieldsData","getCallback","callbacks","callback","c","getStepIndex","steps","step","getCurrentIndexBasedOnStep","stepIndex","determineCurrentStepIndex","stepIdx","determineLastStepIndex","userData","lastIndex","_","paymentProvider","setup","additionalDetails","enabled","fields","filter","field","isEmpty","customFieldAppointmentTypeIds","includes","showPaymentDetails","skipStep","associates","employeeAppointmentTypes","setAssociate","associate","customField","grecaptchaInstance","googleRecaptchaScriptID","BLCaptcha","loading","rendered","setRender","error","setError","successCallback","response","updateUserData","captchaToken","errorCallback","expiredCallback","useEffect","recaptchaContainerId","existingGrecaptcha","captchaEnabled","getElementById","hasChildNodes","render","sitekey","theme","script","createElement","src","async","defer","onload","now","checkGrecaptcha","setInterval","recaptcha","grecaptcha","clearInterval","onerror","body","appendChild","location","reload","StepsNavigation","nextAsSubmit","currentStepIdx","StepHelper","lastStepIndex","updateUserDataAndCallback","goToPrevStep","variant","isDisabled","isCaptchaValid","isLoading","handleSubmit","goToNextStep","loadingText","dateAndTime","waitList","bookWithWaitList","formType","getNextButtonLabel","SelectAppointmentType","methods","useReactHookForm","initDefaultValue","appointmentId","setAppointmentId","layoutType","appointmentTypeLayout","setAppointmentType","setValue","shouldValidate","onSubmit","IframeEvents","appointmentTypeId","isInvalid","formState","errors","isRequired","hidden","required","register","valueAsNumber","FormThemeContext","createContext","useFormTheme","useContext","SelectAssociate","formTheme","initAssociate","associateId","setAssociateId","findAssociate","lastName","firstName","spacing","colorScheme","palette","findStepByType","s","getParam","paramName","extractParameter","separator","href","result","urlParts","shift","urlAfterHash","join","name","decodeURIComponent","slice","validQueryParams","validCustomQueryParams","paramKeys","employeeId","appendParams","params","queryString","param","symbol","key","paramValue","scrapParamsAndAppend","addOn","ignoreParams","entries","URLSearchParams","search","outer","entry","ENVS","API_CONFIG","api","baseURL","host","getBaseUrl","cache","maxAge","exclude","query","defaults","withCredentials","buildFormHeaders","token","headers","createSetupIntent","get","saveCard","cardRequest","post","createCIPToken","request","today","CalendarNavigation","currentMonth","onNextClick","onPrevClick","maxDate","justifyContent","pl","mr","isAttached","fontSize","role","areEqual","prevProps","nextProps","results","push","some","memo","CalendarDay","isSelected","isAvailable","isToday","isEvent","isCurrentOrFuture","tabIndex","getDayClasses","classes","useDidMountEffect","func","deps","didMount","useRef","CalendarNoAppointmentButton","availableDates","show","setShow","CalendarLoading","isoWeek","arraySupport","utc","timezone","advancedFormat","WEEK_ISO","CalendarDatepicker","specialEvent","UrlHelper","startOfWeek","initStartOfWeek","selectDateTimeSettings","short","long","initCalendarLabels","calendarWeekLabels","calculateCalendar","daysOfMonth","setDaysOfMonth","weeks","startDay","startOf","endDay","endOf","subtract","Array","add","flat","calendarDate","available","date_string","availableTimeSlot","timeSlotCount","event","columns","position","weekLabel","color","toUpperCase","Boolean","isEqual","DeleteWaitListItemButton","WaitListTimeWindowItems","remove","setTimeSlot","handleChange","timeIndex","mapTimes","idx","flexGrow","height","components","IndicatorSeparator","children","classNamePrefix","onChange","options","endTime","AddIcon","WaitListSection","showWaitList","isMaxSlots","update","windowTimeSlots","setWaitList","isAllDay","initAllDay","setIsAllDay","prevState","mediumDate","getCompanyProperty","obj","getIndex","increment","prevIndex","FIFTEEN","WaitListWrapper","settings","setShowWaitList","setSelectedTime","DAY_OF_THE_WEEK","opened","company","storeClosed","toDate","endDate","initTimeOptions","generateTimes","initTimeSlots","setTimeSlots","maxTimeSlots","initMaxSlots","setMaxSlots","mode","waitListEnabled","appointmentTypeIds","lastSlot","nextIndex","newArr","without","TimeZoneEntry","timeZone","hourFormat","selectedTimezone","companyTimeZonedId","timeZoneId","StoreTimeZoneIcon","tz","TimeZoneGroup","selectTZ","HourFormatSwitch","setHourFormat","target","checked","TimeZonePicker","setSelectedTimezone","setTimeZones","companyTimeZoneId","storeLocale","deviceTimeZoneId","guess","initCheckTimeZones","isSameAsStore","getTZButtonLabel","filterTimeZones","filteredResults","filteredTimezones","startsWith","filteredGroup","placement","closeOnEsc","isOpen","onClose","placeholder","zoneId","updateTimeZone","setTimeZone","Translate","labels","language","_default_key","company_language","setting","setting_label","Wrapper","lang","l","getLabel","ERROR_KEYS","code","ERROR_TYPES","buildErrorMessage","defaultMsg","defaultCode","clearData","errorKeys","status","backendError","isTokenExpired","BLError","errorMessage","CalendarTimepicker","selectedTime","setAvailableTimesType","waitListSettings","waitListWidgetSettings","setIsLoading","smallTime","availableTimeSlots","setAvailableTimeSlots","showWaitListBtn","setShowWaitListBtn","appointmentTypeKey","retryCount","timeSlotError","setTimeSlotError","fetchTimeSlots","tryFetch","_key","ErrorHelper","mapTimeSlots","startDateTime","endDateTime","fittingRoomId","generateClasses","availableTimesType","alignItems","Text","noAppointment","SelectDateAndTime","setAvailableDates","setCurrentMonth","setSelectedDate","selectedFittingRoom","setSelectedFittingRoom","selectedDuration","setSelectedDuration","selectedStartTime","setSelectedStartTime","initShowWaitList","dateTimeError","setDateTimeError","fetchTimePeriods","startMonthDate","endMonthDate","filterTimeSlots","timePeriod","dateString","hasEvent","handleNextClick","newCurrentMonth","handlePrevClick","handleDateSelect","focus","handleTimeSelect","invalidTimeSlot","invalid","formData","flexShrink","validDates","onKeyDown","keyCode","which","preventDefault","max","initMaxLength","useFormContext","onBlur","onKeyPress","InputHelper","maxLength","bgColor","helpText","email","emailParts","account","address","part","test","Email","clearErrors","clearInputError","useCallback","EmailHelper","initDate","ChakraInput","forwardRef","ref","autoComplete","readOnly","langLocale","showPopperArrow","isValidDate","dateFormat","toDateString","yearDropdownItemNumber","scrollableYearDropdown","showYearDropdown","customInput","isClearable","PHONE_TYPES","getPhoneMaskByCountry","phoneType","mask","getPhoneMask","phoneMaskWithExt","initMask","Phone","setType","setPhone","setMask","initMin","phoneMin","setPhoneMin","watch","InputMask","phone","number","validatePhone","NON_REQUIRED","Checkbox","getValues","isChecked","setIsChecked","isOptionChecked","option","min_checked","checks","validCheckBoxes","v","validateMultiple","o","handleChangeOnOption","validateSingle","text","textarea","MAX_LENGTH","textCount","setTextCount","calculateMaxCount","count","checkbox","radio","initOptions","select","unshift","setOptions","customFieldId","selectOption","setSelectOption","setCount","getStatesByCountry","state","updateSelectState","onSelectChanged","currentOptions","validateSelect","CurrencyInput","allowNegativeValue","DynamicField","props","Component","getValue","selector","ele","getHTMLInputElement","CustomForm","setLoading","formErrorMessage","setFormErrorMessage","defaultValues","useLayoutEffect","setFormFieldValue","values","handleError","filterAppointmentTypeReplacedFields","setFormValues","noValidate","StripeInput","invalidBorder","isFocused","setIsFocused","zip","postalCode","card","setCard","rest","onFocus","prev","borderColor","pt","pr","pb","base","fontFamily","backGround","backGroundColor","PaymentFormError","fontWeight","initializeDefaults","useStripeHook","billingName","buildPaymentDetails","populateDetailsFromBridalLivePayResponse","populateDetailsFromStripeResponse","populateDetailsFromChargeItProResponse","paymentProfileToken","paymentProfileTokenProvider","paymentProfileMaskedAcctNumber","accountDetails","paymentAccountLast4","paymentProfileExpiration","expirationMonth","expirationYear","paymentProfileCardType","cardType","paymentProfileBillingName","nameOnAccount","paymentProfileAddedBy","maskedAcctNumber","expiration","createRequestPayload","buildBridalLivePayRequest","importScript","resourceUrl","hideOrigin","init","crossorigin","removeScript","scripts","getElementsByTagName","getAttribute","parentNode","removeChild","FormPaymentContext","useFormPayment","FormPaymentProvider","setSetup","apiKey","setApiKey","captureBilling","setCaptureBilling","chargeForBooking","setChargeForBooking","displayAgreement","setDisplayAgreement","bookingAgreement","setBookingAgreement","cancelAgreement","setCancelAgreement","captureSignature","setCaptureSignature","setProvider","StripePromise","setStripePromise","BridalLivePay","setBridalLivePay","signaturePad","setSignaturePad","signatureImageData","setSignatureImageData","agreementReached","setAgreementReached","agreementInvalid","setAgreementInvalid","signatureInvalid","setSignatureInvalid","agreementType","setAgreementType","hasSignature","setHasSignature","isAppointment","setIsAppointment","tryInit","loadStripe","setPaymentProvider","provider","apiUrl","ScriptHelper","blPay","BLPay","stripe","isAgreementEmpty","isSignatureEmpty","sharedState","initPad","clearPad","clear","clearSignature","saveSignature","signature","toDataURL","destroyPad","off","validatePaymentForm","valid","isFormValid","handleAgreement","handleAgreementType","handleIsAppointment","onSignatureChange","Provider","PaymentAgreement","paymentForm","messages","booking","cancel","findDefaultAgreementMessages","bookingItemId","itemAmountFormatted","initAgreement","agreement","paymentDetails","hasPaymentDetails","disabled","SignaturePad","canvas","self","this","opts","velocityFilterWeight","maxWidth","dotSize","penColor","onEnd","onBegin","_canvas","_ctx","getContext","_handleMouseDown","_mouseButtonDown","_strokeBegin","_handleMouseMove","_strokeUpdate","_handleMouseUp","_strokeEnd","_handleTouchStart","targetTouches","touch","changedTouches","_handleTouchMove","_handleTouchEnd","_handleMouseEvents","_handleTouchEvents","prototype","ctx","fillStyle","clearRect","fillRect","_reset","imageType","quality","apply","arguments","fromDataURL","dataUrl","image","Image","ratio","devicePixelRatio","drawImage","_isEmpty","toData","points","point","_createPoint","_addPoint","_strokeDraw","beginPath","_drawPoint","x","y","closePath","canDrawCurve","addEventListener","msTouchAction","touchAction","on","removeEventListener","_lastVelocity","_lastWidth","rect","getBoundingClientRect","Point","clientX","left","clientY","top","c2","c3","curve","_calculateCurveControlPoints","c1","Bezier","_addCurve","s1","s2","s3","dx1","dy1","dx2","dy2","m1","m2","l1","Math","sqrt","l2","k","cm","tx","ty","velocity","newWidth","startPoint","endPoint","velocityFrom","_strokeWidth","_drawCurve","moveTo","arc","PI","startWidth","endWidth","drawSteps","tt","ttt","u","uu","uuu","widthDelta","floor","control1","control2","distanceTo","pow","cx","cy","xdiff","ydiff","_point","getSignatureColor","primaryColorDarken","PaymentSignaturePad","elementRef","offsetWidth","offsetHeight","scale","PaymentsNavigation","isSummary","handleBackClick","handleClickNext","getButtonText","signatureData","CheckoutForm","onSuccess","formLoading","useStripe","elements","useElements","setErrors","clientSecret","setClientSecret","createSetupInput","payment_intent_client_secret","cardElement","getElement","CardElement","handleCardSetup","payment_method_data","billing_details","setupIntent","tokenProvider","PaymentDetailsHelper","ELEMENTS_OPTIONS","fonts","cssSrc","Stripe","formPayment","font","initFontTheme","Logger","bridalLiveDebug","args","info","warn","BLPAY","BL_PAY_ERRORS","EVENTS","defaultForm","formId","operationType","siteKey","badge","controls","cardNumber","cvv","cardholderName","currentValue","getDefaultValue","address1","address2","addressOne","addressTwo","city","useBridalLivePay","retailerId","isReady","setReady","formErrors","setFormErrors","setCardType","setBLPay","blPayForm","setBLPayForm","setCardNumber","setMonth","setYear","setCVV","cardHolder","setCardHolder","setCountry","setAddress1","setAddress2","setCity","setState","setZip","submit","tokenRefresh","ready","Object","cardTypeChanged","address1Error","validateBillingField","address2Error","cityError","stateError","onValidation","dependentValue","isArray","getErrorMessage","ignore","pay","hostname","enableTestMode","preFillFormFields","customAuthorizationRequestHeaders","customAuthorizationRequestData","auth","capturePayment","createForm","control","destroy","GoogleRecaptchaText","isExternal","CreditCardTypeImage","cardClassName","cardImageType","alt","BL_PAY_ERROR_MESSAGES","method","validateBillingAddress","parseErrorMessage","setMessage","each","getCreditCardYears","years","startYear","one","two","charging","setCharging","invalid_address","BLPayHelper","MASKS","stripAlpha","amex","diner","getMaskType","getCreditCardType","creditCardNumber","validateCardNumber","RegExp","val","sum","intVal","parseInt","luhnCheck","useChargeItPro","nameOnCard","createToken","merchantName","accountdata","billingname","cvvnumber","billingzip","Token","Error","Message","onCardNumberChange","CreditCardHelper","formatted","match","normalizeCardNumber","validateCard","validateMonth","validateYear","validateCVV","validateZip","isNumeric","ChargeItProFieldError","ChargeItPro","useReactFormHook","reValidateMode","inputMode","minLength","SubmittingForm","absolutePositioning","messageKey","isObject","getCheckBoxValues","getOptionLabel","getSelectLabel","boxOptions","RequiredDetailsSummary","requiredFieldsStep","sequenceNumber","SummaryHelper","CustomFieldsSummary","additionalDetailsStep","DateAndTimeSummary","AppointmentTypeSummary","PaymentDetailsSummary","onPaymentMethodClick","WaitListSummary","paddingLeft","AppointmentDetails","SummaryDetails","showNavigation","PAYMENT_PROVIDERS","PaymentDetails","setPaymentDetails","details","clearError","ScriptInnerHtml","html","divRef","confirmationRendered","slotHtml","createRange","createContextualFragment","innerHTML","updateConfirmationRendered","WaitList","confirmation","AppointmentScheduler","selectAppointmentType","selectAssociate","selectDateAndTime","customForm","summaryDetails","successPayload","AS","AR","W","DynamicStep","scrollToTop","scrollTo","behavior","scrollIntoView","FIELD_TYPES","TYPES","SECOND_TYPE","getValueType","parseCurrencyToNumber","parts","exec","buildFormPayload","createSchedulerPayload","payload","budgetStr","numberOfPeople","budgetRangeId","appointmentAmount","selectedDateFormatted","startDateTimeStr","endDateTimeStr","valueOf","eventDateStr","eventDate","customFieldValues","extractAndBuildCustomFields","dateTimes","paramMap","confirmationText","confirmationTextWaitList","appointmentPaymentSettings","howHeardId","emailOptIn","smsOptIn","streetSize","notes","contactId","getRequiredFormFields","schedulerVersion","recaptchaToken","CurrencyHelper","contact","requestedDateStr","requestedTimeStr","prefContactMethodId","customFieldStep","fieldType","CustomFieldHelper","fieldValue","custom","valueType","secondFieldType","customFieldKey","customFieldName","formatValueByType","objectValue","keys","checkboxes","StepDescription","isHTML","FormHeader","hideDescription","FormTitle","FormLogo","logoURL","useStateCallback","initialState","cbRef","setStateCallback","cb","inIframe","inIframeV2","appendIframeClass","FormContext","StepsBuilder","setTimeZoneId","setUserData","setCurrentStepIdx","setStepIdx","currentStep","setCurrentStep","setConfirmationRendered","updateStep","goToStep","stepId","submitForm","redirectURL","IFrameEvents","iFrameHelper","tryPostForm","FormRequestHelper","newStep","oldStepIdx","patchedValue","merge","debugMode","languages","queryParams","getLanguage","updateLanguage","languageResources","en","translation","calendar","currently_selected","has_availabilities","is_now_displaying","select_a_date","sun","mon","tue","wed","thu","fri","sat","months","navigation","next_disbaled","prev_disabled","no_available_dates_in","view_next_month","payment","good_thru","card_number","card_holder","first_name","last_name","field_required","payment_method","clear_signature","cip","digits","invalid_month","invalid_year","invalid_cvv","invalid_card","invalid_zip","name_on_card_required","cc_number_required","month_required","year_required","cvv_required","billing_name","fullsteam","invalid_address_non_us","invalid_country","common","add_amount","back","select_one","select_state","home","mobile","work","bl_100","bl_200","bl_300","enter_valid_phone_number","captcha_error","retry","expired_auth","number_of_ppl_required","please_enter_all_required_fields","invalid_email","missing_params","something_went_wrong","too_many_characters","appointment","appointment_type","hour_minute","hour_minutes","hours_minute","hours_minutes","hour","minute","no_appointment_available","current_selected_time","book_appointment","book_appointment_booking_fee","book_appointment_cancel_fee","request_appointment","submitting","select_date_time","select_wait_list","select_appointment_type","payment_details","select_associate","return_to_timeslots","timezones","store_timezone","select_timezone","wait_list","add_to_waitlist","add_to_waitlist_booking_fee","add_to_waitlist_cancel_fee","add_as_many_as_apply","add_me","im_available_store_hours","im_available_specific_hours","please_specify_when","select_start_time","select_end_time","end_time","de","it","fr","nl","es","mx","locales","enUS","getLanguageLocaleObject","company_locale","determineLocale","enGB","uk","enCA","ca","enIE","enAU","enNZ","setCSSVariables","primaryColor","primaryTextColor","secondaryColor","secondaryColorDarken","secondaryTextColor","selectedColor","selectedColorDarken","selectedTextColor","availableColor","availableColorDarken","availableTextColor","timeSlotColor","timeSlotColorDarken","timeSlotTextColor","inputBorderColor","textColor","transparent","initTheme","css","setAttribute","head","initAccessiBe","LOCAL_STORAGE_KEY","localStorage","getItem","parse","widget","hideTrigger","hideMobile","setItem","removeItem","acsbJS","statementLink","footerHtml","disableBgProcess","leadColor","triggerColor","triggerRadius","triggerPositionX","triggerPositionY","triggerIcon","triggerSize","triggerOffsetX","triggerOffsetY","getAccessiBeTheme","getAccessiBeLanguage","VALID_FORMS","App","setForm","i18n","fetchFormConfig","backendResponse","LanguageHelper","changeLanguage","LocaleHelper","registerLocale","classList","accessibilityEnabled","AccessiBeHelper","FontAndThemeHelper","loaded","commonTheme","extendTheme","global","padding","use","detector","initReactI18next","fallbackLng","debug","lng","interpolation","escapeValue","resources","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.b3a03bed.chunk.js","sourcesContent":["export const updateIframeHeight = () => {\n const root = document.querySelector('#root');\n window.parent.postMessage({\n type: 'bridallive.height_change',\n value: root!.scrollHeight\n }, '*');\n};\n","import { Center, Spinner } from '@chakra-ui/react';\nimport {useTranslation} from \"react-i18next\";\n\nexport const Loader = () => {\n const { t } = useTranslation();\n return (\n
\n \n
\n );\n};\n","export const FormTypes = {\n scheduler: 'scheduler',\n request: 'request',\n interview: 'interview',\n feedback: 'feedback',\n lead: 'lead'\n};\n\nexport const STEPS = {\n appointmentType: 'appointmentType',\n associate: 'associate',\n dateAndTime: 'dateAndTime',\n requiredFields: 'requiredFields',\n additionalDetails: 'additionalDetails',\n paymentDetails: 'paymentDetails',\n summaryDetails: 'summaryDetails',\n confirmation: 'confirmation'\n};\n\nexport const ENVS = {\n PROD: 'app.bridallive.com',\n QA: 'qa.bridallive.com',\n DEV: 'dev.bridallive.com',\n MISSION: 'mission.bridallive.com',\n LOCAL: 'localhost:4000'\n};\n\nexport const CIP_FIELDS = {\n BILLING_NAME: 'billingname',\n CC_NUMBER: 'accountdata',\n CC_NUMBER_MASK: 'account-data',\n MONTH: 'exp-month',\n YEAR: 'exp-year',\n CVV: 'cvvnumber',\n ZIP: 'zip'\n};\n\nexport const STRIPE_FIELDS = {\n BILLING_NAME: 'billing-name-cc',\n EMAIL: 'email-cc'\n};\n\nexport const REGEX = {\n EMAIL: /^[_a-z0-9]+(\\.[_a-z0-9]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,})$/i, /* eslint-disable-line */\n EMAIL_FUNC: /^[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~](\\.?[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/ /* eslint-disable-line */\n};\n\nexport const TIME_ZONE_GROUPS = [\n {\n title: 'US/Canada',\n timeZones : [\n { label: \"Pacific Time (US & Canada)\", value: \"America/Los_Angeles\" },\n { label: \"Mountain Time (US & Canada)\", value: \"America/Denver\" },\n { label: \"Central Time (US & Canada)\", value: \"America/Chicago\" },\n { label: \"Central Time (Canada) - No DST\", value: \"Canada/Saskatchewan\" },\n { label: \"Eastern Time (US & Canada)\", value: \"America/New_York\" },\n { label: \"Atlantic Time (Canada)\", value: \"America/Halifax\" },\n { label: \"Alaska Time (US)\", value: \"America/Anchorage\" },\n { label: \"Hawaii Time (US)\", value: \"Pacific/Honolulu\" },\n ]\n },\n {\n title: 'America',\n timeZones : [\n { label: \"America - Puerto Rico\", value: \"America/Puerto_Rico\" },\n { label: \"America - Guadeloupe\", value: \"America/Guadeloupe\" },\n { label: \"America - Cancun\", value: \"America/Cancun\" },\n { label: \"America - Monterrey\", value: \"America/Monterrey\" },\n { label: \"America - Mexico City\", value: \"America/Mexico_City\" },\n { label: \"America - Mexico City - No DST\", value: \"Canada/Saskatchewan\" },\n { label: \"America - Merida\", value: \"America/Merida\" },\n { label: \"America - Mazatlan\", value: \"America/Mazatlan\" },\n { label: \"America - Hermosillo\", value: \"America/Hermosillo\" },\n { label: \"America - Chihuahua\", value: \"America/Chihuahua\" },\n { label: \"America - Tijuana\", value: \"America/Tijuana\" }\n ]\n },\n {\n title: 'European',\n timeZones : [\n { label: \"UTC - (Europe/London)\", value: \"Europe/London\" },\n { label: \"Central European Time\", value: \"Europe/Paris\" },\n { label: \"Europe - Dublin\", value: \"Europe/Dublin\" },\n { label: \"Europe - Kiev\", value: \"Europe/Kiev\" },\n { label: \"Europe - Samara\", value: \"Europe/Samara\" },\n ]\n },\n {\n title: 'Australian',\n timeZones : [\n { label: \"Australia - Perth\", value: \"Australia/Perth\" },\n { label: \"Australia - South\", value: \"Australia/South\" },\n { label: \"Australia - North\", value: \"Australia/North\" },\n { label: \"Australia - Queensland\", value: \"Australia/Queensland\" },\n { label: \"Australia - New South Wales\", value: \"Australia/Sydney\" },\n { label: \"Australia - Victoria\", value: \"Australia/Melbourne\" },\n { label: \"New Zealand - Auckland\", value: \"Pacific/Auckland\"}\n ]\n }\n];\n\nexport const STATES = [\n { value:\"AL\", label:\"Alabama\" },\n { value:\"AK\", label:\"Alaska\" },\n { value:\"AZ\", label:\"Arizona\" },\n { value:\"AR\", label:\"Arkansas\" },\n { value:\"CA\", label:\"California\" },\n { value:\"CO\", label:\"Colorado\" },\n { value:\"CT\", label:\"Connecticut\" },\n { value:\"DE\", label:\"Delaware\" },\n { value:\"DC\", label:\"District of Columbia\" },\n { value:\"FL\", label:\"Florida\" },\n { value:\"GA\", label:\"Georgia\" },\n { value:\"HI\", label:\"Hawaii\" },\n { value:\"ID\", label:\"Idaho\" },\n { value:\"IL\", label:\"Illinois\" },\n { value:\"IN\", label:\"Indiana\" },\n { value:\"IA\", label:\"Iowa\" },\n { value:\"KS\", label:\"Kansas\" },\n { value:\"KY\", label:\"Kentucky\" },\n { value:\"LA\", label:\"Louisiana\" },\n { value:\"ME\", label:\"Maine\" },\n { value:\"MD\", label:\"Maryland\" },\n { value:\"MA\", label:\"Massachusetts\" },\n { value:\"MI\", label:\"Michigan\" },\n { value:\"MN\", label:\"Minnesota\" },\n { value:\"MS\", label:\"Mississippi\" },\n { value:\"MO\", label:\"Missouri\" },\n { value:\"MT\", label:\"Montana\" },\n { value:\"NE\", label:\"Nebraska\" },\n { value:\"NV\", label:\"Nevada\" },\n { value:\"NH\", label:\"New Hampshire\" },\n { value:\"NJ\", label:\"New Jersey\" },\n { value:\"NM\", label:\"New Mexico\" },\n { value:\"NY\", label:\"New York\" },\n { value:\"NC\", label:\"North Carolina\" },\n { value:\"ND\", label:\"North Dakota\" },\n { value:\"OH\", label:\"Ohio\" },\n { value:\"OK\", label:\"Oklahoma\" },\n { value:\"OR\", label:\"Oregon\" },\n { value:\"PA\", label:\"Pennsylvania\" },\n { value:\"RI\", label:\"Rhode Island\" },\n { value:\"SC\", label:\"South Carolina\" },\n { value:\"SD\", label:\"South Dakota\" },\n { value:\"TN\", label:\"Tennessee\" },\n { value:\"TX\", label:\"Texas\" },\n { value:\"UT\", label:\"Utah\" },\n { value:\"VT\", label:\"Vermont\" },\n { value:\"VA\", label:\"Virginia\" },\n { value:\"WA\", label:\"Washington\" },\n { value:\"WV\", label:\"West Virginia\" },\n { value:\"WI\", label:\"Wisconsin\" },\n { value:\"WY\", label:\"Wyoming\" },\n { value:\"AS\", label:\"American Samoa\" },\n { value:\"GU\", label:\"Guam\" },\n { value:\"MP\", label:\"Northern Mariana Islands\" },\n { value:\"PR\", label:\"Puerto Rico\" },\n { value:\"VI\", label:\"U.S. Virgin Islands\" },\n { value:\"FM\", label:\"Micronesia\" },\n { value:\"MH\", label:\"Marshall Islands\" },\n { value:\"PW\", label:\"Palau\" },\n { value:\"AA\", label:\"U.S. Armed Forces – Americas\" },\n { value:\"AE\", label:\"U.S. Armed Forces – Europe\" },\n { value:\"AP\", label:\"U.S. Armed Forces – Pacific\" },\n { value:\"CM\", label:\"Northern Mariana Islands\" },\n { value:\"CZ\", label:\"Panama Canal Zone\" }\n];\n\nexport const FONT_TYPES = [\n 'Default' ,\n 'Work Sans' ,\n 'Merienda' ,\n 'Open Sans' ,\n 'Roboto' ,\n 'Gaegu' ,\n 'Oswald' ,\n 'Montserrat' ,\n 'Raleway' ,\n 'Karla' ,\n 'Questrial' ,\n 'Quicksand' ,\n 'Rubik' ,\n 'Rufina' ,\n 'Overpass' ,\n 'Amethysta' ,\n 'Martel' ,\n 'Calligraffitti' ,\n 'Donegal One' ,\n 'Nunito'\n];\n\nexport const PHONE_NUMBER_TYPES = [\n {\n label: '<>{t(\\'common.phone.home\\')}',\n textLabel: 'common.phone.home',\n iconLabel: '',\n value: '1'\n },\n {\n label: '<>{t(\\'common.phone.work\\')}',\n textLabel: 'common.phone.work',\n iconLabel: '',\n value: '2'\n },\n {\n label: '<>{t(\\'common.phone.mobile\\')}',\n textLabel: 'common.phone.mobile',\n iconLabel: '',\n value: '3'\n }\n];\n\nexport const COUNTRIES_LOCALE = [\n {\n country: 'United States',\n phoneMask: \"999-999-9999\",\n phoneMaskWithExtension: \"999-999-9999 99999\",\n mobilePhoneMask: \"999-999-9999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n { label: \"Alabama\", value: \"AL\" },\n { label: \"Alaska\", value: \"AK\" },\n { label: \"Arizona\", value: \"AZ\" },\n { label: \"Arkansas\", value: \"AR\" },\n { label: \"California\", value: \"CA\" },\n { label: \"Colorado\", value: \"CO\" },\n { label: \"Connecticut\", value: \"CT\" },\n { label: \"Delaware\", value: \"DE\" },\n { label: \"District Of Columbia\", value: \"DC\" },\n { label: \"Florida\", value: \"FL\" },\n { label: \"Georgia\", value: \"GA\" },\n { label: \"Hawaii\", value: \"HI\" },\n { label: \"Idaho\", value: \"ID\" },\n { label: \"Illinois\", value: \"IL\" },\n { label: \"Indiana\", value: \"IN\" },\n { label: \"Iowa\", value: \"IA\" },\n { label: \"Kansas\", value: \"KS\" },\n { label: \"Kentucky\", value: \"KY\" },\n { label: \"Louisiana\", value: \"LA\" },\n { label: \"Maine\", value: \"ME\" },\n { label: \"Maryland\", value: \"MD\" },\n { label: \"Massachusetts\", value: \"MA\" },\n { label: \"Michigan\", value: \"MI\" },\n { label: \"Minnesota\", value: \"MN\" },\n { label: \"Mississippi\", value: \"MS\" },\n { label: \"Missouri\", value: \"MO\" },\n { label: \"Montana\", value: \"MT\" },\n { label: \"Nebraska\", value: \"NE\" },\n { label: \"Nevada\", value: \"NV\" },\n { label: \"New Hampshire\", value: \"NH\" },\n { label: \"New Jersey\", value: \"NJ\" },\n { label: \"New Mexico\", value: \"NM\" },\n { label: \"New York\", value: \"NY\" },\n { label: \"North Carolina\", value: \"NC\" },\n { label: \"North Dakota\", value: \"ND\" },\n { label: \"Ohio\", value: \"OH\" },\n { label: \"Oklahoma\", value: \"OK\" },\n { label: \"Oregon\", value: \"OR\" },\n { label: \"Pennsylvania\", value: \"PA\" },\n { label: \"Puerto Rico\", value: \"PR\" },\n { label: \"Rhode Island\", value: \"RI\" },\n { label: \"South Carolina\", value: \"SC\" },\n { label: \"South Dakota\", value: \"SD\" },\n { label: \"Tennessee\", value: \"TN\" },\n { label: \"Texas\", value: \"TX\" },\n { label: \"Utah\", value: \"UT\" },\n { label: \"Vermont\", value: \"VT\" },\n { label: \"Virginia\", value: \"VA\" },\n { label: \"Virgin Islands (US)\", value: \"USVI\" },\n { label: \"Virgin Islands (British)\", value: \"BVI\" },\n { label: \"Washington\", value: \"WA\" },\n { label: \"West Virginia\", value: \"WV\" },\n { label: \"Wisconsin\", value: \"WI\" },\n { label: \"Wyoming\", value: \"WY\" },\n { label: \"---------------------------------------\", value: \" \" },\n { label: \"Alberta\", value: \"AB\" },\n { label: \"British Columbia\", value: \"BC\" },\n { label: \"Manitoba\", value: \"MB\" },\n { label: \"New Brunswick\", value: \"NB\" },\n { label: \"Newfoundland and Labrador\", value: \"NL\" },\n { label: \"Northwest Territories\", value: \"NT\" },\n { label: \"Nova Scotia\", value: \"NS\" },\n { label: \"Nunavut\", value: \"NU\" },\n { label: \"Ontario\", value: \"ON\" },\n { label: \"Prince Edward Island\", value: \"PE\" },\n { label: \"Quebec\", value: \"QC\" },\n { label: \"Saskatchewan\", value: \"SK\" },\n { label: \"Yukon\", value: \"YT\" }\n ]\n },\n {\n country: 'Australia',\n phoneMask: \"99 9999 9999\",\n phoneMaskWithExtension: \"99 9999 9999 99999\",\n mobilePhoneMask: \"9999 999 999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states:[\n { label: \"Australian Capital Territory\", value: \"ACT\" },\n { label: \"New South Wales\", value: \"NSW\" },\n { label: \"Northern Territory\", value: \"NT\" },\n { label: \"Queensland\", value: \"QLD\" },\n { label: \"South Australia\", value: \"SA\" },\n { label: \"Tasmania\", value: \"TAS\" },\n { label: \"Victoria\", value: \"VIC\" },\n { label: \"Western Australia\", value: \"WA\" }\n ]\n },\n {\n country: 'Austria',\n phoneMask: \"999999999 999999\",\n phoneMaskWithExtension: \"999999999999999\",\n mobilePhoneMask: \"999999999 999999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n {label: \"Wien\", value:\"WIN\"},\n {label: \"Niederösterreich\", value:\"NDR\"},\n {label: \"Oberösterreich\", value:\"OBR\"},\n {label: \"Steiermark\", value:\"STM\"},\n {label: \"Tirol\", value:\"TRL\"},\n {label: \"Kärnten\", value:\"KTN\"},\n {label: \"Salzburg\", value:\"SZB\"},\n {label: \"Voralberg\", value:\"VRB\"},\n {label: \"Burgenland\", value:\"BGL\"}\n ],\n\n },\n {\n country: 'New Zealand',\n phoneMask: \"999-99999999\",\n phoneMaskWithExtension: \"999-99999999 999\",\n mobilePhoneMask: \"999-99999999\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: true,\n states:[\n {label: \"Northland\", value:\"NTL\"},\n {label: \"Auckland\", value:\"AUK\"},\n {label: \"Waikato\", value:\"WKO\"},\n {label: \"Bay of Plenty\", value:\"BOP\"},\n {label: \"Gisborne\", value:\"GIS\"},\n {label: \"Hawke's Bay\", value:\"HKB\"},\n {label: \"Taranaki\", value:\"TKI\"},\n {label: \"Manawatu-Whanganui\", value:\"MWT\"},\n {label: \"Wellington\", value:\"WGN\"},\n {label: \"Tasman\", value:\"TAS\"},\n {label: \"Nelson\", value:\"NSN\"},\n {label: \"Marlborough\", value:\"MBH\"},\n {label: \"West Coast\", value:\"WTC\"},\n {label: \"Canterbury\", value:\"CAN\"},\n {label: \"Otago\", value:\"OTA\"},\n {label: \"Southland\", value:\"STL\"}\n ]\n },\n {\n country:'Belgium',\n phoneMask: \"999 999 999\",\n phoneMaskWithExtension: \"999 999 999 99999\",\n mobilePhoneMask: \"9999 99 99 99\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n {label: \"Antwerpen\", value:\"VAN\"},\n {label: \"Brabant wallon\", value:\"WBR\"},\n {label: \"Hainaut\", value:\"WHT\"},\n {label: \"Liege\", value:\"WLG\"},\n {label: \"Limburg\", value:\"VLI\"},\n {label: \"Luxembourg\", value:\"WLX\"},\n {label: \"Namur\", value:\"WNA\"},\n {label: \"Oost-Vlaanderen\", value:\"VOV\"},\n {label: \"Vlaams-Brabant\", value:\"VBR\"},\n {label: \"West-Vlaanderen\", value:\"VWV\"}\n ]\n },\n {\n country: 'Canada',\n phoneMask: \"999-999-9999\",\n phoneMaskWithExtension: \"999-999-9999 99999\",\n mobilePhoneMask: \"999-999-9999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n { label: \"Alberta\", value: \"AB\"},\n { label: \"British Columbia\", value: \"BC\"},\n { label: \"Manitoba\", value: \"MB\"},\n { label: \"New Brunswick\", value: \"NB\"},\n { label: \"Newfoundland and Labrador\", value: \"NL\"},\n { label: \"Northwest Territories\", value: \"NT\"},\n { label: \"Nova Scotia\", value: \"NS\"},\n { label: \"Nunavut\", value: \"NU\"},\n { label: \"Ontario\", value: \"ON\"},\n { label: \"Prince Edward Island\", value: \"PE\"},\n { label: \"Quebec\", value: \"QC\"},\n { label: \"Saskatchewan\", value: \"SK\"},\n { label: \"Yukon\", value: \"YT\"},\n { label: \"---------------------------------------\", value: \" \"},\n { label: \"Alabama\", value: \"AL\"},\n { label: \"Alaska\", value: \"AK\"},\n { label: \"Arizona\", value: \"AZ\"},\n { label: \"Arkansas\", value: \"AR\"},\n { label: \"California\", value: \"CA\"},\n { label: \"Colorado\", value: \"CO\"},\n { label: \"Connecticut\", value: \"CT\"},\n { label: \"Delaware\", value: \"DE\"},\n { label: \"Distric Of Columbia\", value: \"DC\"},\n { label: \"Florida\", value: \"FL\"},\n { label: \"Georgia\", value: \"GA\"},\n { label: \"Hawaii\", value: \"HI\"},\n { label: \"Idaho\", value: \"ID\"},\n { label: \"Illinois\", value: \"IL\"},\n { label: \"Indiana\", value: \"IN\"},\n { label: \"Iowa\", value: \"IA\"},\n { label: \"Kansas\", value: \"KS\"},\n { label: \"Kentucky\", value: \"KY\"},\n { label: \"Louisiana\", value: \"LA\"},\n { label: \"Maine\", value: \"ME\"},\n { label: \"Maryland\", value: \"MD\"},\n { label: \"Massachusetts\", value: \"MA\"},\n { label: \"Michigan\", value: \"MI\"},\n { label: \"Minnesota\", value: \"MN\"},\n { label: \"Mississippi\", value: \"MS\"},\n { label: \"Missouri\", value: \"MO\"},\n { label: \"Montana\", value: \"MT\"},\n { label: \"Nebraska\", value: \"NE\"},\n { label: \"Nevada\", value: \"NV\"},\n { label: \"New Hampshire\", value: \"NH\"},\n { label: \"New Jersey\", value: \"NJ\"},\n { label: \"New Mexico\", value: \"NM\"},\n { label: \"New York\", value: \"NY\"},\n { label: \"North Carolina\", value: \"NC\"},\n { label: \"North Dakota\", value: \"ND\"},\n { label: \"Ohio\", value: \"OH\"},\n { label: \"Oklahoma\", value: \"OK\"},\n { label: \"Oregon\", value: \"OR\"},\n { label: \"Pennsylvania\", value: \"PA\"},\n { label: \"Puerto Rico\", value: \"PR\"},\n { label: \"Rhode Island\", value: \"RI\"},\n { label: \"South Carolina\", value: \"SC\"},\n { label: \"South Dakota\", value: \"SD\"},\n { label: \"Tennessee\", value: \"TN\"},\n { label: \"Texas\", value: \"TX\"},\n { label: \"Utah\", value: \"UT\"},\n { label: \"Vermont\", value: \"VT\"},\n { label: \"Virginia\", value: \"VA\"},\n { label: \"Virgin Islands (US)\", value: \"USVI\"},\n { label: \"Virgin Islands (British)\", value: \"BVI\"},\n { label: \"Washington\", value: \"WA\"},\n { label: \"West Virginia\", value: \"WV\"},\n { label: \"Wisconsin\", value: \"WI\"},\n { label: \"Wyoming\", value: \"WY\"}\n ]\n },\n {\n country: 'Germany',\n phoneMask: \"999999999 999999\",\n phoneMaskWithExtension: \"999999999999999\",\n mobilePhoneMask: \"999999999 999999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: false,\n states: [\n { label: \"Baden-Württemberg\", value: \"BW\"},\n { label: \"Bayern\", value: \"BY\"},\n { label: \"Berlin\", value: \"BE\"},\n { label: \"Brandenburg\", value: \"BB\"},\n { label: \"Bremen\", value: \"HB\"},\n { label: \"Hamburg\", value: \"HH\"},\n { label: \"Hessen\", value: \"HE\"},\n { label: \"Niedersachsen\", value: \"NI\"},\n { label: \"Mecklenburg-Vorpommern\", value: \"MV\"},\n { label: \"Nordrhein-Westfalen\", value: \"NW\"},\n { label: \"Rheinland-Pfalz\", value: \"RP\"},\n { label: \"Saarland\", value: \"SL\"},\n { label: \"Sachsen\", value: \"SN\"},\n { label: \"Sachsen-Anhalt\", value: \"ST\"},\n { label: \"Schleswig-Holstein\", value: \"SH\"},\n { label: \"Thüringen\", value: \"TH\"}\n ]\n },\n {\n country: 'Denmark',\n phoneMask: \"99999999\",\n phoneMaskWithExtension: \"99999999\",\n mobilePhoneMask: \"99999999\",\n usesStates: true,\n min: [8, 9, 10, 11, 12, 13, 14, 15],\n states: [\n { label: \"Greenland County\", value: \"GC\" },\n { label: \"Copenhagen Municipalit\", value: \"CM\" },\n { label: \"Frederiksberg Municipality\", value: \"FM\" },\n { label: \"Copenhagen County\", value: \"CC\" },\n { label: \"Frederiksborg County\", value: \"FC\" },\n { label: \"Roskilde County\", value: \"RC\" },\n { label: \"West Zealand County\", value: \"WZC\" },\n { label: \"Storstrøm County\", value: \"SC\" },\n { label: \"Funen County\", value: \"FNC\" },\n { label: \"South Jutland County\", value: \"SJC\" },\n { label: \"Ribe County\", value: \"RC\" },\n { label: \"Vejle County\", value: \"VC\" },\n { label: \"Ringkjøbing County\", value: \"RIC\" },\n { label: \"North Jutland County\", value: \"NJC\" },\n { label: \"Viborg County\", value: \"VC\" },\n { label: \"Aarhus County\", value: \"AC\" },\n { label: \"Bornholm\", value: \"B\" }\n ]\n },\n {\n country: 'France',\n phoneMask: \"99 99 99 99 99\",\n phoneMaskWithExtension: \"99 99 99 99 99 99\",\n mobilePhoneMask: \"99 99 99 99 99\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: false,\n states:[\n {label: \"Ain\", value:\"AI\"},\n {label: \"Aisne\", value:\"AS\"},\n {label: \"Allier\", value:\"AL\"},\n {label: \"Alpes de Haute-Provence\", value:\"AP\"},\n {label: \"Alpes-Maritimes\", value:\"AM\"},\n {label: \"Ardèche\", value:\"AH\"},\n {label: \"Ardennes\", value:\"AN\"},\n {label: \"Ariège\", value:\"AG\"},\n {label: \"Aube\", value:\"AB\"},\n {label: \"Aude\", value:\"AD\"},\n {label: \"Aveyron\", value:\"AV\"},\n {label: \"Bas-Rhin\", value:\"BR\"},\n {label: \"Bouches du Rhône\", value:\"BD\"},\n {label: \"Calvados\", value:\"CV\"},\n {label: \"Cantal\", value:\"CV\"},\n {label: \"Charente\", value:\"CL\"},\n {label: \"Charente Maritime\", value:\"CM\"},\n {label: \"Cher\", value:\"CH\"},\n {label: \"Corrèze\", value:\"CZ\"},\n {label: \"Corse du Sud\", value:\"CS\"},\n {label: \"Côte d'Or\", value:\"CO\"},\n {label: \"Côtes d'Armor\", value:\"CA\"},\n {label: \"Creuse\", value:\"CR\"},\n {label: \"Deux-SŠvres\", value:\"DS\"},\n {label: \"Dordogne\", value:\"DD\"},\n {label: \"Doubs\", value:\"DB\"},\n {label: \"Drôme\", value:\"DM\"},\n {label: \"Essonne\", value:\"ES\"},\n {label: \"Eure\", value:\"EU\"},\n {label: \"Eure-et-Loir\", value:\"EL\"},\n {label: \"Finistère\", value:\"FI\"},\n {label: \"Gard\", value:\"GA\"},\n {label: \"Gers\", value:\"GE\"},\n {label: \"Gironde\", value:\"GI\"},\n {label: \"Haute-Corse\", value:\"HC\"},\n {label: \"Haute-Garonne\", value:\"HG\"},\n {label: \"Haute-Loire\", value:\"HL\"},\n {label: \"Haute-Marne\", value:\"HM\"},\n {label: \"Hautes-Alpes\", value:\"HA\"},\n {label: \"Haute-Saône\", value:\"HN\"},\n {label: \"Haute-Savoie\", value:\"HS\"},\n {label: \"Hautes-Pyrénées\", value:\"HP\"},\n {label: \"Haute-Vienne\", value:\"HV\"},\n {label: \"Haut-Rhin\", value:\"HR\"},\n {label: \"Hauts-de-Seine\", value:\"HD\"},\n {label: \"Hérault\", value:\"HE\"},\n {label: \"Ille-et-Vilaine\", value:\"IV\"},\n {label: \"Indre\", value:\"IN\"},\n {label: \"Indre-et-Loire\", value:\"IL\"},\n {label: \"Isère\", value:\"IS\"},\n {label: \"Jura\", value:\"JU\"},\n {label: \"Landes\", value:\"LD\"},\n {label: \"Loire\", value:\"LR\"},\n {label: \"Loire-Atlantique\", value:\"LA\"},\n {label: \"Loiret\", value:\"LT\"},\n {label: \"Loir-et-Cher\", value:\"LC\"},\n {label: \"Lot\", value:\"LO\"},\n {label: \"Lot-et-Garonne\", value:\"LG\"},\n {label: \"Lozère\", value:\"LZ\"},\n {label: \"Maine-et-Loire\", value:\"ML\"},\n {label: \"Manche\", value:\"MH\"},\n {label: \"Marne\", value:\"MR\"},\n {label: \"Mayenne\", value:\"MY\"},\n {label: \"Meurthe-et-Moselle\", value:\"MN\"},\n {label: \"Meuse\", value:\"MS\"},\n {label: \"Morbihan\", value:\"MB\"},\n {label: \"Moselle\", value:\"MO\"},\n {label: \"Nièvre\", value:\"NI\"},\n {label: \"Nord\", value:\"NO\"},\n {label: \"Oise\", value:\"OI\"},\n {label: \"Orne\", value:\"OR\"},\n {label: \"Paris\", value:\"VP\"},\n {label: \"Pas-de-Calais\", value:\"PC\"},\n {label: \"Puy-de-Dôme\", value:\"PD\"},\n {label: \"Pyrénées-Atlantiques\", value:\"PA\"},\n {label: \"Pyrénées-Orientales\", value:\"PO\"},\n {label: \"Rhône\", value:\"RH\"},\n {label: \"Saône-et-Loire\", value:\"SL\"},\n {label: \"Sarthe\", value:\"ST\"},\n {label: \"Savoie\", value:\"SV\"},\n {label: \"Seine-et-Marne\", value:\"SE\"},\n {label: \"Seine-Maritime\", value:\"SM\"},\n {label: \"Seine-St-Denis\", value:\"SS\"},\n {label: \"Somme\", value:\"SO\"},\n {label: \"Tarn\", value:\"TA\"},\n {label: \"Tarn-et-Garonne\", value:\"TG\"},\n {label: \"Territoire-de-Belfort\", value:\"TB\"},\n {label: \"Val-de-Marne\", value:\"VM\"},\n {label: \"Val-d'Oise\", value:\"VO\"},\n {label: \"Var\", value:\"VR\"},\n {label: \"Vaucluse\", value:\"VC\"},\n {label: \"Vendée\", value:\"VD\"},\n {label: \"Vienne\", value:\"VN\"},\n {label: \"Vosges\", value:\"VG\"},\n {label: \"Yonne\", value:\"YO\"},\n {label: \"Yvelines\", value:\"YV\"}\n ]\n },\n {\n country: 'Ireland',\n phoneMask: \"999999999 99999\",\n phoneMaskWithExtension: \"999999999 99999\",\n mobilePhoneMask: \"999999999 99999\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n { label: \"Antrim\", value: \"AM\"},\n { label: \"Armagh\", value: \"AH\"},\n { label: \"Carlow\", value: \"CW\"},\n { label: \"Cavan\", value: \"CN\"},\n { label: \"Clare\", value: \"CE\"},\n { label: \"Cork\", value: \"C\"},\n { label: \"Derry\", value: \"DY\"},\n { label: \"Donegal\", value: \"DL\"},\n { label: \"Down\", value: \"DN\"},\n { label: \"Dublin\", value: \"D\"},\n { label: \"Fermanagh\", value: \"FH\"},\n { label: \"Galway\", value: \"GW\"},\n { label: \"Kerry\", value: \"KY\"},\n { label: \"Kildare\", value: \"KE\"},\n { label: \"Kilkenny\", value: \"KK\"},\n { label: \"Laois\", value: \"LS\"},\n { label: \"Leitrim\", value: \"LM\"},\n { label: \"Limerick\", value: \"LK\"},\n { label: \"Longford\", value: \"LD\"},\n { label: \"Louth\", value: \"LH\"},\n { label: \"Mayo\", value: \"MO\"},\n { label: \"Meath\", value: \"MH\"},\n { label: \"Monaghan\", value: \"MN\"},\n { label: \"Offaly\", value: \"OY\"},\n { label: \"Roscommon\", value: \"RN\"},\n { label: \"Sligo\", value: \"SO\"},\n { label: \"Tipperary N\", value: \"TN\"},\n { label: \"Tipperary S\", value: \"TS\"},\n { label: \"Tyrone\", value: \"TE\"},\n { label: \"Waterford\", value: \"WD\"},\n { label: \"Westmeath\", value: \"WH\"},\n { label: \"Wexford\", value: \"WX\"},\n { label: \"Wicklow\", value: \"WW\"}\n ]\n },\n {\n country: 'Italy',\n phoneMask: \"999 999999\",\n phoneMaskWithExtension: \"999 999999 999\",\n mobilePhoneMask: \"999 999999 999\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: false,\n states: [\n { label: \"Agrigento\", value: \"AG\" },\n { label: \"Alessandria\", value: \"AL\" },\n { label: \"Ancona\", value: \"AN\" },\n { label: \"Valle d'Aosta\", value: \"AO\" },\n { label: \"Arezzo\", value: \"AR\" },\n { label: \"Ascoli Piceno\", value: \"AP\" },\n { label: \"Asti\", value: \"AT\" },\n { label: \"Avellino\", value: \"AV\" },\n { label: \"Barletta-Andria-Trani\", value: \"BT\" },\n { label: \"Belluno\", value: \"BL\" },\n { label: \"Benevento\", value: \"BN\" },\n { label: \"Bergamo\", value: \"BG\" },\n { label: \"Biella\", value: \"BI\" },\n { label: \"Bolzano\", value: \"BZ\" },\n { label: \"Brescia\", value: \"BS\" },\n { label: \"Brindisi\", value: \"BR\" },\n { label: \"Caltanissetta\", value: \"CL\" },\n { label: \"Campobasso\", value: \"CB\" },\n { label: \"Caserta\", value: \"CE\" },\n { label: \"Catanzaro\", value: \"CZ\" },\n { label: \"Chieti\", value: \"CH\" },\n { label: \"Como\", value: \"CO\" },\n { label: \"Cosenza\", value: \"CS\" },\n { label: \"Cremona\", value: \"CR\" },\n { label: \"Crotone\", value: \"KR\" },\n { label: \"Cuneo\", value: \"CN\" },\n { label: \"Enna\", value: \"EN\" },\n { label: \"Fermo\", value: \"FM\" },\n { label: \"Ferrara\", value: \"FE\" },\n { label: \"Foggia\", value: \"FG\" },\n { label: \"Forlì-Cesena\", value: \"FC\" },\n { label: \"Frosinone\", value: \"FR\" },\n { label: \"Gorizia\", value: \"GO\" },\n { label: \"Grosseto\", value: \"GR\" },\n { label: \"Imperia\", value: \"IM\" },\n { label: \"Isernia\", value: \"IS\" },\n { label: \"La Spezia\", value: \"SP\" },\n { label: \"L'Aquila\", value: \"AQ\" },\n { label: \"Latina\", value: \"LT\" },\n { label: \"Lecce\", value: \"LE\" },\n { label: \"Lecco\", value: \"LC\" },\n { label: \"Livorno\", value: \"LI\" },\n { label: \"Lodi\", value: \"LO\" },\n { label: \"Lucca\", value: \"LU\" },\n { label: \"Macerata\", value: \"MC\" },\n { label: \"Mantova\", value: \"MN\" },\n { label: \"Massa-Carrara\", value: \"MS\" },\n { label: \"Matera\", value: \"MT\" },\n { label: \"Messina\", value: \"ME\" },\n { label: \"Monza e Brianza\", value: \"MB\" },\n { label: \"Modena\", value: \"MO\" },\n { label: \"Novara\", value: \"NO\" },\n { label: \"Nuoro\", value: \"NU\" },\n { label: \"Oristano\", value: \"OR\" },\n { label: \"Padova\", value: \"PD\" },\n { label: \"Parma\", value: \"PR\" },\n { label: \"Pavia\", value: \"PV\" },\n { label: \"Perugia\", value: \"PG\" },\n { label: \"Pesaro e Urbino\", value: \"PU\" },\n { label: \"Pescara\", value: \"PE\" },\n { label: \"Piacenza\", value: \"PC\" },\n { label: \"Pisa\", value: \"PI\" },\n { label: \"Pistoia\", value: \"PT\" },\n { label: \"Pordenone\", value: \"PN\" },\n { label: \"Potenza\", value: \"PZ\" },\n { label: \"Prato\", value: \"PO\" },\n { label: \"Ragusa\", value: \"RG\" },\n { label: \"Ravenna\", value: \"RA\" },\n { label: \"Reggio Emilia\", value: \"RE\" },\n { label: \"Rieti\", value: \"RI\" },\n { label: \"Rimini\", value: \"RN\" },\n { label: \"Rovigo\", value: \"RO\" },\n { label: \"Salerno\", value: \"SA\" },\n { label: \"Sassari\", value: \"SS\" },\n { label: \"Savona\", value: \"SV\" },\n { label: \"Siena\", value: \"SI\" },\n { label: \"Siracusa\", value: \"SR\" },\n { label: \"Sondrio\", value: \"SO\" },\n { label: \"Taranto\", value: \"TA\" },\n { label: \"Teramo\", value: \"TE\" },\n { label: \"Terni\", value: \"TR\" },\n { label: \"Trapani\", value: \"TP\" },\n { label: \"Trento\", value: \"TN\" },\n { label: \"Treviso\", value: \"TV\" },\n { label: \"Trieste\", value: \"TS\" },\n { label: \"Udine\", value: \"UD\" },\n { label: \"Varese\", value: \"VA\" },\n { label: \"Verbano-Cusio-Ossola\", value: \"VB\" },\n { label: \"Vercelli\", value: \"VC\" },\n { label: \"Verona\", value: \"VR\" },\n { label: \"Vibo Valentia\", value: \"VV\" },\n { label: \"Vicenza\", value: \"VI\" },\n { label: \"Viterbo\", value: \"VT\" }\n ]\n },\n {\n country: 'Luxembourg',\n phoneMask: \"999 999 999\",\n phoneMaskWithExtension: \"999 999 999 99999\",\n mobilePhoneMask: \"999 999 999\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n {label: \"Kapellen\", value:\"CA\"},\n {label: \"Klierf\", value:\"CL\"},\n {label: \"Diekrech\", value:\"DI\"},\n {label: \"Iechternach\", value:\"EC\"},\n {label: \"Esch-Uelzecht\", value:\"ES\"},\n {label: \"Gréivemaacher\", value:\"GR\"},\n {label: \"Lëtzebuerg\", value:\"LU\"},\n {label: \"Miersch\", value:\"ME\"},\n {label: \"Réiden-Atert\", value:\"RD\"},\n {label: \"Réimech\", value:\"RM\"},\n {label: \"Veianen\", value:\"VD\"},\n {label: \"Wolz\", value:\"WI\"}\n ]\n },\n {\n country: 'Mexico',\n phoneMask: \"999-999-9999\",\n phoneMaskWithExtension: \"999-999-9999 99999\",\n mobilePhoneMask: \"999-999-9999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n { label: \"Mexican Federal District\", value: \"CMX\" },\n { label: \"Aguascalientes\", value: \"AGU\" },\n { label: \"Baja California\", value: \"BCN\" },\n { label: \"Baja California Sur\", value: \"BCS\" },\n { label: \"Campeche\", value: \"CAM\" },\n { label: \"Coahuila\", value: \"COA\" },\n { label: \"Colima\", value: \"COL\" },\n { label: \"Chiapas\", value: \"CHP\" },\n { label: \"Chihuahua\", value: \"CHH\" },\n { label: \"Durango\", value: \"DUR\" },\n { label: \"Guanajuato\", value: \"GUA\" },\n { label: \"Guerrero\", value: \"GRO\" },\n { label: \"Hidalgo\", value: \"HID\" },\n { label: \"Jalisco\", value: \"JAL\" },\n { label: \"México\", value: \"MEX\" },\n { label: \"Michoacán\", value: \"MIC\" },\n { label: \"Morelos\", value: \"MOR\" },\n { label: \"Nayarit\", value: \"NAY\" },\n { label: \"Nuevo León\", value: \"NLE\" },\n { label: \"Oaxaca\", value: \"OAX\" },\n { label: \"Puebla\", value: \"PUE\" },\n { label: \"Querétaro\", value: \"QUE\" },\n { label: \"Quintana Roo\", value: \"ROO\" },\n { label: \"San Luis Potosí\", value: \"SLP\" },\n { label: \"Sinaloa\", value: \"SIN\" },\n { label: \"Sonora\", value: \"SON\" },\n { label: \"Tabasco\", value: \"TAB\" },\n { label: \"Tamaulipas\", value: \"TAM\" },\n { label: \"Tlaxcala\", value: \"TLA\" },\n { label: \"Veracruz\", value: \"VER\" },\n { label: \"Yucatán\", value: \"YUC\" },\n { label: \"Zacatecas\", value: \"ZAC\" }\n ]\n },\n {\n country: 'Netherlands',\n phoneMask: \"999999999 999999\",\n phoneMaskWithExtension: \"999999999 999999\",\n mobilePhoneMask: \"999999999 999999\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: false,\n states: [\n { label: \"Drenthe\", value: \"DR\" },\n { label: \"Flevoland\", value: \"FL\" },\n { label: \"Fryslân\", value: \"FR\" },\n { label: \"Gelderland\", value: \"GE\" },\n { label: \"Groningen\", value: \"GR\" },\n { label: \"Limburg\", value: \"LI\" },\n { label: \"Noord-Brabant\", value: \"NB\" },\n { label: \"Noord-Holland\", value: \"NH\" },\n { label: \"Overijssel\", value: \"OV\" },\n { label: \"Utrecht\", value: \"UT\" },\n { label: \"Zeeland\", value: \"ZE\" },\n { label: \"Zuid-Holland\", value: \"ZH\" }\n ]\n },\n {\n country: 'Spain',\n phoneMask: \"999 999 999\",\n phoneMaskWithExtension: \"999 999 999 99\",\n mobilePhoneMask: \"999 999 999\",\n min: [9, 10, 11, 12, 13, 14, 15],\n usesStates: false,\n states: [\n {label: \"A Coruña\", value:\"C\"},\n {label: \"Albacete\", value:\"AB\"},\n {label: \"Alicante\", value:\"A\"},\n {label: \"Almería\", value:\"AL\"},\n {label: \"Asturias\", value:\"O\"},\n {label: \"Ávila\", value:\"AV\"},\n {label: \"Badajoz\", value:\"BA\"},\n {label: \"Baleares\", value:\"PM\"},\n {label: \"Barcelona\", value:\"B\"},\n {label: \"Burgos\", value:\"BU\"},\n {label: \"Cáceres\", value:\"CC\"},\n {label: \"Cádiz\", value:\"CA\"},\n {label: \"Cantabria\", value:\"S\"},\n {label: \"Castellón\", value:\"CS\"},\n {label: \"Ciudad Real\", value:\"CR\"},\n {label: \"Córdoba\", value:\"CO\"},\n {label: \"Cuenca\", value:\"CM\"},\n {label: \"Gipuzkoa\", value:\"SS\"},\n {label: \"Girona\", value:\"GI\"},\n {label: \"Granada\", value:\"GR\"},\n {label: \"Guadalajara\", value:\"GU\"},\n {label: \"Huelva\", value:\"H\"},\n {label: \"Huesca\", value:\"HU\"},\n {label: \"Jaén\", value:\"J\"},\n {label: \"La Rioja\", value:\"LO\"},\n {label: \"Las Palmas\", value:\"GC\"},\n {label: \"León\", value:\"LE\"},\n {label: \"Lérida\", value:\"L\"},\n {label: \"Lugo\", value:\"LU\"},\n {label: \"Madrid\", value:\"M\"},\n {label: \"Málaga\", value:\"MA\"},\n {label: \"Murcia\", value:\"MU\"},\n {label: \"Navarra\", value:\"NA\"},\n {label: \"Orense\", value:\"OR\"},\n {label: \"Palencia\", value:\"P\"},\n {label: \"Pontevedra\", value:\"PO\"},\n {label: \"Santa Cruz de Tenerife\", value:\"\"},\n {label: \"Salamanca\", value:\"SA\"},\n {label: \"Segovia\", value:\"SG\"},\n {label: \"Sevilla\", value:\"SE\"},\n {label: \"Soria\", value:\"SO\"},\n {label: \"Tarragona\", value:\"T\"},\n {label: \"Teruel\", value:\"TE\"},\n {label: \"Toledo\", value:\"TO\"},\n {label: \"Valencia\", value:\"V\"},\n {label: \"Valladolid\", value:\"VA\"},\n {label: \"Vizcaya\", value:\"BI\"},\n {label: \"Zamora\", value:\"ZA\"},\n {label: \"Zaragoza\", value:\"Z\"}\n ]\n },\n {\n country: 'Romania',\n phoneMask: \"99999999 99\",\n phoneMaskWithExtension: \"99999999 99\",\n mobilePhoneMask: \"99999999 99\",\n min: [8, 9, 10, 11, 12, 13, 14, 15],\n usesStates: false,\n states:[]\n },\n {\n country:'Switzerland',\n phoneMask: \"99 99 99 99 99\",\n phoneMaskWithExtension: \"99 99 99 99 99 99\",\n mobilePhoneMask: \"99 99 99 99 99\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n {label: \"Aargau\", value:\"AG\"},\n {label: \"Appenzell Ausserrhoden\", value:\"AR\"},\n {label: \"Appenzell Innerrhoden\", value:\"AI\"},\n {label: \"Basel-Landschaft\", value:\"BL\"},\n {label: \"Basel-Stadt\", value:\"BS\"},\n {label: \"Bern\", value:\"BE\"},\n {label: \"Fribourg\", value:\"FR\"},\n {label: \"Geneve\", value:\"GE\"},\n {label: \"Glarus\", value:\"GL\"},\n {label: \"Graubunden\", value:\"GR\"},\n {label: \"Jura\", value:\"JU\"},\n {label: \"Luzern\", value:\"LU\"},\n {label: \"Neuchatel\", value:\"NE\"},\n {label: \"Nidwalden\", value:\"NW\"},\n {label: \"Obwalden\", value:\"OW\"},\n {label: \"Sankt Gallen\", value:\"SG\"},\n {label: \"Schaffhausen\", value:\"SH\"},\n {label: \"Schwyz\", value:\"SZ\"},\n {label: \"Solothurn\", value:\"SO\"},\n {label: \"Thurgau\", value:\"TG\"},\n {label: \"Ticino\", value:\"TI\"},\n {label: \"Uri\", value:\"UR\"},\n {label: \"Valais\", value:\"VS\"},\n {label: \"Vaud\", value:\"VD\"},\n {label: \"Zug\", value:\"ZG\"},\n {label: \"Zurich\", value:\"ZH\"}\n ]\n },\n {\n country: 'United Kingdom',\n phoneMask: \"99999 9999999999\",\n phoneMaskWithExtension: \"99999 9999999999\",\n mobilePhoneMask: \"99999 9999999999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n { label: \"Avon\", value:\"AV\"},\n { label: \"Bedfordshire\", value:\"BF\"},\n { label: \"Berkshire\", value:\"BB\"},\n { label: \"Borders\", value:\"BO\"},\n { label: \"Bristol\", value:\"BR\"},\n { label: \"Buckinghamshire\", value:\"BC\"},\n { label: \"Cambridgeshire\", value:\"CS\"},\n { label: \"Central\", value:\"CT\"},\n { label: \"Cheshire\", value:\"CH\"},\n { label: \"City of London\", value:\"CL\"},\n { label: \"Cornwall\", value:\"CO\"},\n { label: \"Cumbria\", value:\"CB\"},\n { label: \"Derbyshire\", value:\"DBY\"},\n { label: \"Devon\", value:\"DV\"},\n { label: \"Dorset\", value:\"DOR\"},\n { label: \"Durham\", value:\"DH\"},\n { label: \"East Riding of Yorkshire\", value:\"ER\"},\n { label: \"East Sussex\", value:\"ES\"},\n { label: \"Essex\", value:\"EX\"},\n { label: \"Gloucestershire\", value:\"GS\"},\n { label: \"London\", value:\"GL\"},\n { label: \"Greater Manchester\", value:\"GM\"},\n { label: \"Hampshire\", value:\"HS\"},\n { label: \"Herefordshire\", value:\"HE\"},\n { label: \"Hertfordshire\", value:\"HT\"},\n { label: \"Isle of Wight\", value:\"IW\"},\n { label: \"Kent\", value:\"KT\"},\n { label: \"Lancashire\", value:\"LAN\"},\n { label: \"Leicestershire\", value:\"LT\"},\n { label: \"Lincolnshire\", value:\"LN\"},\n { label: \"Merseyside\", value:\"MS\"},\n { label: \"Norfolk\", value:\"NF\"},\n { label: \"North Yorkshire\", value:\"NY\"},\n { label: \"Northamptonshire\", value:\"NH\"},\n { label: \"Northumberland\", value:\"NL\"},\n { label: \"Nottinghamshire\", value:\"NS\"},\n { label: \"Oxfordshire\", value:\"OS\"},\n { label: \"Rutland\", value:\"RL\"},\n { label: \"Shropshire\", value:\"SHR\"},\n { label: \"Somerset\", value:\"SOM\"},\n { label: \"South Yorkshire\", value:\"SY\"},\n { label: \"Staffordshire\", value:\"STS\"},\n { label: \"Suffolk\", value:\"SF\"},\n { label: \"Surrey\", value:\"SR\"},\n { label: \"Tyne and Wear\", value:\"TW\"},\n { label: \"Warwickshire\", value:\"WAR\"},\n { label: \"West Midlands\", value:\"WM\"},\n { label: \"West Sussex\", value:\"WS\"},\n { label: \"West Yorkshire\", value:\"WY\"},\n { label: \"Wiltshire\", value:\"WR\"},\n { label: \"Worcestershire\", value:\"WC\"},\n { label: \"Yorkshire\", value:\"YS\"},\n { label: \"---------------------------------------\", value:\" \"},\n { label: \"Aberdeenshire\", value:\"AS\"},\n { label: \"Angus\", value:\"AU\"},\n { label: \"Argyll\", value:\"AG\"},\n { label: \"Ayrshire\", value:\"AY\"},\n { label: \"Banffshire\", value:\"BS\"},\n { label: \"Berwickshire\", value:\"BK\"},\n { label: \"Bute\", value:\"BT\"},\n { label: \"Caithness\", value:\"CAI\"},\n { label: \"Clackmannanshire\", value:\"CM\"},\n { label: \"Dumfriesshire\", value:\"DF\"},\n { label: \"Dunbartonshire\", value:\"DU\"},\n { label: \"East Lothian\", value:\"EL\"},\n { label: \"Fife\", value:\"FF\"},\n { label: \"Inverness-shire\", value:\"IS\"},\n { label: \"Kirkcudbrightshire\", value:\"KS\"},\n { label: \"Kincardineshire\", value:\"KN\"},\n { label: \"Kinross-shire\", value:\"KR\"},\n { label: \"Lanarkshire\", value:\"LKS\"},\n { label: \"Midlothian\", value:\"MT\"},\n { label: \"Moray\", value:\"MR\"},\n { label: \"Nairnshire\", value:\"NN\"},\n { label: \"Orkney\", value:\"OK\"},\n { label: \"Peeblesshire\", value:\"PB\"},\n { label: \"Perthshire\", value:\"PS\"},\n { label: \"Renfrewshire\", value:\"RW\"},\n { label: \"Ross and Cromarty\", value:\"RC\"},\n { label: \"Roxburghshire\", value:\"RB\"},\n { label: \"Selkirkshire\", value:\"SK\"},\n { label: \"Shetland\", value:\"SN\"},\n { label: \"Stirlingshire\", value:\"SH\"},\n { label: \"Sutherland\", value:\"SL\"},\n { label: \"West Lothian\", value:\"WL\"},\n { label: \"Wigtownshire\", value:\"WG\"},\n { label: \"---------------------------------------\", value:\" \"},\n { label: \"Antrim\", value:\"AM\"},\n { label: \"Armagh\", value:\"ABC\"},\n { label: \"Carlow\", value:\"CW\"},\n { label: \"Cavan\", value:\"CAV\"},\n { label: \"Clare\", value:\"CE\"},\n { label: \"Cork\", value:\"C\"},\n { label: \"Derry\", value:\"DY\"},\n { label: \"Donegal\", value:\"DL\"},\n { label: \"Down\", value:\"DN\"},\n { label: \"Dublin\", value:\"D\"},\n { label: \"Fermanagh\", value:\"FH\"},\n { label: \"Galway\", value:\"GW\"},\n { label: \"Kerry\", value:\"KY\"},\n { label: \"Kildare\", value:\"KE\"},\n { label: \"Kilkenny\", value:\"KK\"},\n { label: \"Laois\", value:\"LEX\"},\n { label: \"Leitrim\", value:\"LM\"},\n { label: \"Limerick\", value:\"LIM\"},\n { label: \"Longford\", value:\"LD\"},\n { label: \"Louth\", value:\"LH\"},\n { label: \"Mayo\", value:\"MO\"},\n { label: \"Meath\", value:\"MH\"},\n { label: \"Monaghan\", value:\"MN\"},\n { label: \"Offaly\", value:\"OY\"},\n { label: \"Roscommon\", value:\"RN\"},\n { label: \"Sligo\", value:\"SO\"},\n { label: \"Tipperary N\", value:\"TN\"},\n { label: \"Tipperary S\", value:\"TS\"},\n { label: \"Tyrone\", value:\"TE\"},\n { label: \"Waterford\", value:\"WD\"},\n { label: \"Westmeath\", value:\"WH\"},\n { label: \"Wexford\", value:\"WX\"},\n { label: \"Wicklow\", value:\"WIC\"},\n { label:\"---------------------------------------\", value:\" \"},\n { label: \"Anglesey\",value:\"AGY\"},\n { label: \"Breconshire\",value:\"BRE\"},\n { label: \"Caernarvonshire\",value:\"CAE\"},\n { label: \"Cardiganshire\",value:\"CGN\"},\n { label: \"Carmarthenshire\",value:\"CMN\"},\n { label: \"Clwyd\",value:\"CWD\"},\n { label: \"Denbighshire\",value:\"DEN\"},\n { label: \"Dyfed\",value:\"DFD\"},\n { label: \"Flintshire\",value:\"FLN\"},\n { label: \"Glamorgan\",value:\"GLA\"},\n { label: \"Gwent\",value:\"GNT\"},\n { label: \"Gwynedd\",value:\"GWN\"},\n { label: \"Merionethshire\",value:\"MER\"},\n { label: \"Mid Glamorgan\",value:\"MGM\"},\n { label: \"Monmouthshire\",value:\"MON\"},\n { label: \"Montgomeryshire\",value:\"MGY\"},\n { label: \"Pembrokeshire\",value:\"PEM\"},\n { label: \"Powys\",value:\"POW\"},\n { label: \"Radnorshire\",value:\"RAD\"},\n { label: \"South Glamorgan\",value:\"SGM\"},\n { label: \"West Glamorgan\",value:\"WGM\"}\n ]\n },\n {\n country: 'United States Minor Outlying Islands',\n phoneMask: \"999-999-9999\",\n phoneMaskWithExtension: \"999-999-9999 99999\",\n mobilePhoneMask: \"999-999-9999\",\n min: [10, 11, 12, 13, 14, 15],\n usesStates: true,\n states: [\n { label: \"Abaco\", value: \"AB\"},\n { label: \"Acklins Island\", value: \"AK\"},\n { label: \"Andros\", value: \"AN\"},\n { label: \"Bimini Islands\", value: \"BI\"},\n { label: \"Cat Island\", value: \"CI\"},\n { label: \"Crooked Island\", value: \"CK\"},\n { label: \"Eleuthera\", value: \"EL\"},\n { label: \"Exuma\", value: \"EX\"},\n { label: \"Grand Bahama\", value: \"GB\"},\n { label: \"Harbour Island\", value: \"HB\"},\n { label: \"Inagua\", value: \"IN\"},\n { label: \"Long Island\", value: \"LI\"},\n { label: \"Mayaguana\", value: \"MG\"},\n { label: \"Paradise Island\", value: \"PI\"},\n { label: \"Ragged Island\", value: \"RI\"},\n { label: \"Rum Cay\", value: \"RC\"},\n { label: \"San Salvador\", value: \"SS\"},\n { label: \"Nassau\", value: \"NP\"},\n { label: \"---------------------------------------\", value:\" \"},\n { label: \"Alabama\", value: \"AL\"},\n { label: \"Alaska\", value: \"AK\"},\n { label: \"Arizona\", value: \"AZ\"},\n { label: \"Arkansas\", value: \"AR\"},\n { label: \"California\", value: \"CA\"},\n { label: \"Colorado\", value: \"CO\"},\n { label: \"Connecticut\", value: \"CT\"},\n { label: \"Delaware\", value: \"DE\"},\n { label: \"District Of Columbia\", value: \"DC\"},\n { label: \"Florida\", value: \"FL\"},\n { label: \"Georgia\", value: \"GA\"},\n { label: \"Hawaii\", value: \"HI\"},\n { label: \"Idaho\", value: \"ID\"},\n { label: \"Illinois\", value: \"IL\"},\n { label: \"Indiana\", value: \"IN\"},\n { label: \"Iowa\", value: \"IA\"},\n { label: \"Kansas\", value: \"KS\"},\n { label: \"Kentucky\", value: \"KY\"},\n { label: \"Louisiana\", value: \"LA\"},\n { label: \"Maine\", value: \"ME\"},\n { label: \"Maryland\", value: \"MD\"},\n { label: \"Massachusetts\", value: \"MA\"},\n { label: \"Michigan\", value: \"MI\"},\n { label: \"Minnesota\", value: \"MN\"},\n { label: \"Mississippi\", value: \"MS\"},\n { label: \"Missouri\", value: \"MO\"},\n { label: \"Montana\", value: \"MT\"},\n { label: \"Nebraska\", value: \"NE\"},\n { label: \"Nevada\", value: \"NV\"},\n { label: \"New Hampshire\", value: \"NH\"},\n { label: \"New Jersey\", value: \"NJ\"},\n { label: \"New Mexico\", value: \"NM\"},\n { label: \"New York\", value: \"NY\"},\n { label: \"North Carolina\", value: \"NC\"},\n { label: \"North Dakota\", value: \"ND\"},\n { label: \"Ohio\", value: \"OH\"},\n { label: \"Oklahoma\", value: \"OK\"},\n { label: \"Oregon\", value: \"OR\"},\n { label: \"Pennsylvania\", value: \"PA\"},\n { label: \"Puerto Rico\", value: \"PR\"},\n { label: \"Rhode Island\", value: \"RI\"},\n { label: \"South Carolina\", value: \"SC\"},\n { label: \"South Dakota\", value: \"SD\"},\n { label: \"Tennessee\", value: \"TN\"},\n { label: \"Texas\", value: \"TX\"},\n { label: \"Utah\", value: \"UT\"},\n { label: \"Vermont\", value: \"VT\"},\n { label: \"Virginia\", value: \"VA\"},\n { label: \"Virgin Islands (US)\", value: \"USVI\"},\n { label: \"Virgin Islands (British)\", value: \"BVI\"},\n { label: \"Washington\", value: \"WA\"},\n { label: \"West Virginia\", value: \"WV\"},\n { label: \"Wisconsin\", value: \"WI\"},\n { label: \"Wyoming\", value: \"WY\"},\n { label: \"---------------------------------------\", value: \" \"},\n { label: \"Alberta\", value: \"AB\"},\n { label: \"British Columbia\", value: \"BC\"},\n { label: \"Manitoba\", value: \"MB\"},\n { label: \"New Brunswick\", value: \"NB\"},\n { label: \"Newfoundland and Labrador\", value: \"NL\"},\n { label: \"Northwest Territories\", value: \"NT\"},\n { label: \"Nova Scotia\", value: \"NS\"},\n { label: \"Nunavut\", value: \"NU\"},\n { label: \"Ontario\", value: \"ON\"},\n { label: \"Prince Edward Island\", value: \"PE\"},\n { label: \"Quebec\", value: \"QC\"},\n { label: \"Saskatchewan\", value: \"SK\"},\n { label: \"Yukon\", value: \"YT\"}\n ]\n }\n];\n","import { Days, Timezone, TimezoneGroup, WaitListTimeSlot } from '../interfaces'\nimport { TIME_ZONE_GROUPS } from \"./constants\";\nimport dayjs from \"dayjs\";\nimport duration from \"dayjs/plugin/duration\";\n\ndayjs.extend(duration);\n\nconst TIME_LABELS: any = {\n HOUR:'appointment.duration.hour',\n HOURS:'appointment.duration.hours',\n MINUTE:'appointment.duration.minute',\n MINUTES:'appointment.duration.minutes',\n HOUR_AND_MINUTE:'appointment.duration.hour_minute',\n HOUR_AND_MINUTES:'appointment.duration.hour_minutes',\n HOURS_AND_MINUTE:'appointment.duration.hours_minute',\n HOURS_AND_MINUTES:'appointment.duration.hours_minutes'\n};\n\nconst COMPANY_DAYS_ENUM: Days = {\n days: {\n 0: {\n open:'sunOpen',\n closed:'sunClose',\n isClosed:'sunClosed'\n },\n 1: {\n open:'monOpen',\n closed:'monClose',\n isClosed:'monClosed'\n },\n 2: {\n open:'tuesOpen',\n closed:'tuesClose',\n isClosed:'tuesClosed'\n },\n 3: {\n open:'wedOpen',\n closed:'wedClose',\n isClosed:'wedClosed'\n },\n 4: {\n open:'thursOpen',\n closed:'thursClose',\n isClosed:'thursClosed'\n },\n 5: {\n open:'friOpen',\n closed:'friClose',\n isClosed:'friClosed'\n },\n 6: {\n open:'satOpen',\n closed:'satClose',\n isClosed:'satClosed'\n }\n }\n};\n\nconst helper = {\n DAYS_ENUM: COMPANY_DAYS_ENUM,\n isTimeSlotValid: function(timeSlot: WaitListTimeSlot) {\n if(!timeSlot || timeSlot.hasError || !timeSlot.endTimeDate || !timeSlot.startTimeDate) {\n return true;\n }\n\n return dayjs(timeSlot.endTimeDate).isBefore(timeSlot.startTimeDate) || dayjs(timeSlot.startTimeDate).isSame(timeSlot.endTimeDate);\n },\n isTimeSlotValidPrevious: function(current: WaitListTimeSlot, previous: WaitListTimeSlot) {\n if(!current || current.hasError || !current.startTimeDate || !current.endTimeDate || !previous || !previous.endTimeDate) {\n return true;\n }\n\n return previous.endTimeDate && dayjs(current.startTimeDate).isBefore(previous.endTimeDate);\n },\n validateWaitListTimeSlots: function(timeSlots: WaitListTimeSlot[]) {\n if(timeSlots === undefined) {\n return [];\n }\n\n const slots = timeSlots.map(function(slot) {\n slot.hasError = false;\n return slot;\n });\n\n return slots.map((current, index, array) => {\n if(array.length > 1) {\n current.hasError = helper.isTimeSlotValid(current);\n\n const next = array[index + 1];\n if(next) {\n next.hasError = helper.isTimeSlotValidPrevious(next, current);\n }\n\n } else {\n current.hasError = helper.isTimeSlotValid(current);\n }\n\n return current;\n });\n },\n /**\n * Calculates start/end dates\n * @param {number} date\n * @param {number} time\n * @param {boolean} allDay [optional]\n * @param {number} duration [optional]\n * @returns {object}\n */\n generateDates: function (date: Date, time: string, allDay: boolean, duration: number) {\n /**\n * Generates UTC date object for passed date\n *\n * @param {number} year\n * @param {number} month\n * @param {number} day\n * @returns {Date}\n */\n const generateDate = function (year: number, month: number, day: number) {\n let date = new Date(year, month, day);\n date.setHours(0, 0, 0, 0);\n return date;\n };\n\n /**\n * getDateParams\n * @param date\n * @returns {{year: *, month: *, day: *, hours: *, minutes: *}}\n */\n const getDateParams = function (date: Date) {\n return {\n year: date.getFullYear(),\n month: date.getMonth(),\n day: date.getDate(),\n hours: date.getHours(),\n minutes: date.getMinutes()\n };\n };\n\n let startDate = getDateParams(new Date(date));\n let startTime = getDateParams(new Date(time));\n let returnStart = generateDate(startDate.year, startDate.month, startDate.day);\n let returnEnd = generateDate(startDate.year, startDate.month, startDate.day);\n\n if(!allDay) {\n returnStart.setHours(startTime.hours, startTime.minutes);\n returnEnd = new Date(returnStart.getTime() + duration);\n }\n\n if(returnStart.toString() === 'Invalid Date') {\n //console.error('Start is invalid', startTime, startDate);\n }\n\n if(returnEnd.toString() === 'Invalid Date') {\n //console.error('End is invalid', startTime, startDate, duration);\n }\n\n return { start: returnStart, end: returnEnd, selectedDate: generateDate(startDate.year, startDate.month, startDate.day) };\n },\n\n /**\n * 5:16pm => {hours: 17, minutes: 16}\n * @param time\n * @returns {{hours: number, minutes: number}}\n */\n timeToObject: function(time: string) {\n let hours = +(time.split(':')[0]);\n let minutes = +(time.split(':')[1].replace(/[am|pm]/gi, ''));\n let meridiem = time.substr(-2).toLowerCase();\n\n // if 12h time format\n if(['am', 'pm'].indexOf(meridiem) > -1) {\n hours =\n hours === 12 ?\n (meridiem === 'pm' ? 12 : 0)\n : //or\n (meridiem === 'pm' ? hours + 12 : hours);\n }\n\n return {\n hours: hours,\n minutes: minutes,\n meridiem: meridiem\n };\n },\n generateDateTime: function(date: Date, time: string) {\n const dates = helper.generateDates(date, time, true, 0);\n const times = helper.timeToObject(time);\n return (new Date(dates.selectedDate)).setHours(times.hours, times.minutes, 0, 0);\n },\n buildDefaultTimezones: function(id:string):Timezone {\n let defaultZone:Timezone = {value: id, label: 'Select Timezone'};\n TIME_ZONE_GROUPS.forEach(function (group:TimezoneGroup) {\n group.timeZones.every(function (zone:Timezone) {\n if(id === zone.value) {\n defaultZone = zone;\n return false;\n }\n return true;\n })\n });\n return defaultZone;\n },\n getTimeLabel: function(hours:number, minutes:number) {\n let label:string = '';\n if(hours > 0) {\n const plural:boolean = hours > 1;\n if((minutes % 60) > 0) {\n if(plural) {\n label = minutes > 1 ? TIME_LABELS.HOURS_AND_MINUTES : TIME_LABELS.HOURS_AND_MINUTE;\n } else {\n label = minutes > 1 ? TIME_LABELS.HOUR_AND_MINUTES : TIME_LABELS.HOUR_AND_MINUTE;\n }\n } else {\n label = plural ? TIME_LABELS.HOURS : TIME_LABELS.HOUR;\n }\n } else if((minutes % 60) > 0) {\n label = minutes > 1 ? TIME_LABELS.MINUTES : TIME_LABELS.MINUTE;\n }\n return label;\n },\n buildDurationObject: function (duration = 0) {\n if(!duration || isNaN(duration)) {\n duration = 0;\n }\n\n let durationObject = {\n hours: +dayjs.duration(duration).format('H'),\n minutes: +dayjs.duration(duration).format('m'),\n label: ''\n };\n\n durationObject.label = helper.getTimeLabel(durationObject.hours, durationObject.minutes);\n\n return durationObject;\n },\n getTimeString: function(time: string, withMeridiem: boolean) {\n const { hours, minutes, meridiem } = helper.timeToObject(time);\n return `${helper.pad(hours, 2)}:${helper.pad(minutes, 2)}${withMeridiem ? meridiem: ''}`;\n },\n pad: function(num: number, size: number) {\n let str = num.toString();\n while (str.length < size) str = \"0\" + str;\n return str;\n },\n validate: function(date: string, format: string) {\n return dayjs(date, format, true).isValid();\n }\n};\n\nexport default helper;\n","import React from 'react';\nimport DateHelper from '../../utils/date-helper';\nimport { AppointmentType } from \"../../interfaces\";\nimport { useTranslation } from \"react-i18next\";\n\ntype Props = {\n appointmentType: AppointmentType;\n displayType: string;\n};\n\nconst Duration = ({ appointmentType, displayType }: Props) => {\n const { t } = useTranslation();\n\n if(!appointmentType || !appointmentType.duration) {\n return null;\n }\n\n const { label, hours, minutes } = DateHelper.buildDurationObject(appointmentType.duration);\n\n return (\n <>\n {displayType === 'title' && t('appointment.duration.title') + ': '}\n {displayType === 'icon' && (\n <>\n \n \n \n \n )}\n {t(label, { hours, minutes })}\n \n )\n};\n\nexport default Duration;\n","import React from 'react';\n\ntype Props = {\n description: string | undefined;\n styles?: any;\n classNames?: string;\n};\n\nconst OnlineDescHTML = ({ description, styles = {}, classNames = '' }: Props) => {\n if(!description) {\n return null;\n }\n\n return
;\n};\n\nexport default OnlineDescHTML;\n","import React from 'react';\nimport { useTranslation } from \"react-i18next\";\n\ntype SelectDefaultLabel = {\n label: string;\n translate: boolean;\n textLabel?: string;\n iconLabel?: string;\n};\n\ntype SelectedItem = {\n label: string;\n textLabel?: string;\n iconLabel?: string;\n value: any;\n};\n\ntype Props = {\n defaultLabel: SelectDefaultLabel | undefined;\n selectedItem: SelectedItem | undefined;\n};\n\nconst SelectDropDownSelected = ({ defaultLabel, selectedItem }: Props) => {\n const { t } = useTranslation();\n\n if(selectedItem && selectedItem.textLabel && selectedItem.iconLabel && selectedItem.value) {\n return <>{t(selectedItem.textLabel)} {selectedItem.iconLabel};\n } else if (defaultLabel && defaultLabel.textLabel && defaultLabel.iconLabel){\n return <>{t(defaultLabel.textLabel)} {defaultLabel.iconLabel};\n }\n\n if(selectedItem && selectedItem.label && selectedItem.value) {\n return <>{selectedItem.label};\n } else if(defaultLabel && defaultLabel.label && defaultLabel.translate) {\n return <>{t(defaultLabel.label)};\n } else if(defaultLabel && defaultLabel.label) {\n return <>{defaultLabel.label};\n }\n\n return <>;\n};\n\nexport default SelectDropDownSelected;\n","import React from 'react';\nimport { MenuItem } from \"@chakra-ui/menu\";\nimport { CheckIcon } from \"@chakra-ui/icons\";\nimport { useTranslation } from \"react-i18next\";\n\ntype SelectDefaultItem = {\n value: string;\n label: any;\n translate: boolean;\n};\n\ntype SelectedItem = {\n label: any;\n value: any;\n};\n\ntype Props = {\n selectedItem: SelectedItem | undefined;\n selectDefaultItem: SelectDefaultItem | undefined;\n onClick: (p: { label: string; value: string }) => void;\n};\n\nconst SelectDropDownDefaultItem = ({ selectDefaultItem, selectedItem, onClick }: Props) => {\n const { t } = useTranslation();\n\n if(!selectDefaultItem) {\n return <>;\n }\n\n return (\n : undefined} onClick={() => onClick({ value: '', label: '' })}>\n {selectDefaultItem.translate && t(selectDefaultItem.label)}\n {!selectDefaultItem.translate && selectDefaultItem.label}\n \n );\n};\n\nexport default SelectDropDownDefaultItem;\n","import React, { useState } from 'react';\nimport { Menu, MenuButton, MenuList, MenuItem, Button } from \"@chakra-ui/react\";\nimport { ChevronDownIcon, CheckIcon } from \"@chakra-ui/icons\";\nimport SelectDropDownSelected from \"./SelectDropDownSelected\";\nimport SelectDropDownDefaultItem from \"./SelectDropDownDefaultItem\";\n\ntype SelectDefaultItem = {\n value: string;\n label: any;\n translate: boolean;\n textLabel?: string;\n iconLabel?: any;\n};\n\ntype SelectDefaultLabel = {\n label: any;\n translate: boolean;\n textLabel?: string;\n iconLabel?: any;\n};\n\ntype SelectDefaultValue = {\n label: any;\n value: any;\n textLabel?: string;\n iconLabel?: any;\n};\n\ntype SelectedItem = {\n label: string;\n value: any;\n textLabel?: string;\n iconLabel?: string;\n};\n\ntype Props = {\n list: any[];\n onSelect: (value: any) => void;\n defaultValue?: SelectDefaultValue;\n defaultLabel?: SelectDefaultLabel;\n selectDefaultItem?: SelectDefaultItem;\n classNames?: string;\n};\n\nconst initDefaults = (defaultValues: SelectDefaultValue | undefined) => {\n if(defaultValues) {\n return defaultValues;\n }\n\n return { label: '', value: '' } as SelectDefaultValue;\n};\n\nconst SelectDropDown = ({ list, defaultValue, selectDefaultItem, onSelect, defaultLabel, classNames }: Props) => {\n const [selected, setSelected] = useState(() => initDefaults(defaultValue));\n\n const onClick = (item: any) => {\n setSelected(item);\n onSelect(item.value);\n };\n\n return (\n \n }>\n \n \n\n \n \n {list.map(function(item, i) { return (\n : undefined} key={i} onClick={() => onClick(item)}>\n {item.label}\n );\n })}\n \n \n );\n};\n\nexport default SelectDropDown;\n","import React from \"react\";\nimport { FormControl, FormHelperText } from \"@chakra-ui/react\";\nimport { AppointmentType } from \"../../../interfaces\";\nimport { useForm } from \"../../StepsBuilder\";\nimport Duration from \"../Duration\";\nimport OnlineDescHTML from \"../OnlineDescHTML\";\nimport SelectDropDown from \"../../DropDown/SelectDropDown\";\nimport DateHelper from \"../../../utils/date-helper\";\nimport { useTranslation } from \"react-i18next\";\n\ntype Props = {\n typeId: number;\n onSelect: (id:number) => void;\n};\n\n\nconst Dropdown = ({ typeId, onSelect }: Props) => {\n const form = useForm();\n const { t } = useTranslation();\n\n const findAppointmentType = (id: number): AppointmentType => {\n return form.json.appointmentTypes.find(a => a.id === id) as AppointmentType;\n };\n\n const buildList = () => {\n return form.json.appointmentTypes.map(function(type) {\n return {\n label: `${type.description}`,\n value: type.id\n };\n });\n };\n\n const getProperty = (id: number, property: string) => {\n const type = findAppointmentType(id);\n\n // @ts-ignore\n if(type && type.id && type[property]) {\n // @ts-ignore\n return type[property];\n }\n\n return '';\n };\n\n const formatAriaLabel = () => {\n let ariaLabel = '';\n if(typeId) {\n let apptType = findAppointmentType(typeId);\n ariaLabel += apptType.description;\n\n if(apptType.duration) {\n const { label, hours, minutes } = DateHelper.buildDurationObject(apptType.duration);\n ariaLabel += t(label, { hours, minutes });\n }\n }\n\n return ariaLabel;\n };\n\n return (\n <>\n \n \n\n {findAppointmentType(typeId) && ()}\n \n {findAppointmentType(typeId) && }\n \n );\n};\n\nexport default Dropdown;\n","import { Locale } from \"../interfaces\";\nimport { formatValue } from \"react-currency-input-field\";\n\nconst helper = {\n currency: function(value: any, locale: Locale) {\n //let options = {};\n try {\n const decimalSeparator = locale.thousandsSeparator === ',' ? '.' : ',';\n\n return formatValue({\n value: `${value}`,\n groupSeparator: locale.thousandsSeparator,\n decimalSeparator: decimalSeparator,\n prefix: locale.currencySymbol,\n });\n } catch (e) {\n console.log('currency filter error:', e);\n }\n\n return '';\n }\n};\n\nexport default helper;\n","import React, { useState } from 'react';\nimport { AppointmentType, Locale } from \"../../interfaces\";\nimport Filter from \"../../utils/filter-helper\";\nimport { useForm } from \"../StepsBuilder\";\n\ntype Props = {\n type: AppointmentType | undefined;\n element: string;\n styles?: any;\n classNames?: string;\n};\n\nconst initAmount = (type: AppointmentType | undefined, locale: Locale) => {\n if(locale && type && type.itemAmount && type.requirePaymentInfoForBooking) {\n return Filter.currency(type.itemAmount, locale);\n }\n\n return '';\n};\n\nconst CurrencyLabel = ({ type, element = 'div', styles = {}, classNames = '' }: Props) => {\n const form = useForm();\n const [amount] = useState(()=> initAmount(type, form?.json?.locale));\n\n if(!type || !type.requirePaymentInfoForBooking || !type.itemAmount) {\n return null;\n }\n\n if(element === 'div') {\n return (\n
{ amount }
\n );\n } else {\n return (\n { amount }\n );\n }\n};\n\nexport default CurrencyLabel;\n","import React from \"react\";\nimport { Flex, Heading, Box } from \"@chakra-ui/react\";\nimport { AppointmentType } from \"../../../interfaces\";\nimport OnlineDescHTML from \"../OnlineDescHTML\";\nimport CurrencyLabel from \"../CurrencyLabel\";\nimport Duration from \"../Duration\";\n\ntype Props = {\n type: AppointmentType;\n typeId: number | undefined;\n onSelect: (id:number) => void;\n};\n\nconst CardList = ({ type, typeId, onSelect }: Props) => {\n return (\n \n )\n};\n\nexport default CardList;\n","import React from \"react\";\nimport { useForm } from '../../StepsBuilder';\nimport CardList from \"./CardList\";\nimport \"../../../styles/style.css\";\n\ntype Props = {\n typeId: number;\n onSelect: (id:number) => void;\n};\n\nconst CardContainer = ({ typeId, onSelect }: Props) => {\n const form = useForm();\n\n return (\n
\n {form.json.appointmentTypes.map((type, index) => (\n
\n \n
\n ))}\n
\n );\n};\n\nexport default CardContainer;\n","const helper = {\n userDataChanged: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.user_data_changed',\n value: JSON.stringify({ message: 'bridallive.user_data_changed' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.user_data_changed', e);\n }\n },\n formPageViewed: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.form_page_viewed',\n value: JSON.stringify({ message: 'form_page_viewed' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.form_page_viewed', e);\n }\n },\n eventScheduled: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.event_scheduled',\n value: JSON.stringify({ message: 'event_scheduled' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.event_scheduled', e);\n }\n },\n associateSelected: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.associate_selected',\n value: JSON.stringify({ message: 'associate_selected' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.associate_selected', e);\n }\n },\n appointmentSelected: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.appointment_type_selected',\n value: JSON.stringify(data)\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.appointment_type_selected', e);\n }\n },\n dateTimeSelected: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.date_and_time_selected',\n value: JSON.stringify({ message: 'date_and_time_selected' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.date_and_time_selected', e);\n }\n },\n requiredFields: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.required_fields_filled_out',\n value: JSON.stringify({ message: 'required_fields_filled_out' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.required_fields_filled_out', e);\n }\n },\n customFields: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.custom_fields_filled_out',\n value: JSON.stringify({ message: 'custom_fields_filled_out' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.custom_fields_filled_out', e);\n }\n },\n redirect: function(url: string) {\n try {\n window.parent.postMessage({\n type: 'bridallive.redirect',\n value: url\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.redirect', e);\n }\n },\n pageLeave: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.page_leave',\n value: JSON.stringify(data)\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.page_leave', e);\n }\n },\n initFormLoad: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.init_form_load',\n value: JSON.stringify(data)\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.init_form_load', e);\n }\n },\n customFieldsData: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.custom_fields',\n value: JSON.stringify({ message: 'custom_fields' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.custom_fields', e);\n }\n },\n requiredFieldsData: function(data: any) {\n try {\n window.parent.postMessage({\n type: 'bridallive.required_fields',\n value: JSON.stringify({ message: 'required_fields' })\n }, '*');\n } catch (e) {\n console.log('Failed to send event for: bridallive.required_fields', e);\n }\n }\n};\n\n// 'bridallive.form_page_viewed'\n// 'bridallive.appointment_type_viewed'\n// 'bridallive.appointment_scheduled'\n// 'bridallive.event_scheduled'\n// 'bridallive.added_to_wait_list'\n// 'bridallive.associate_selected'\n// 'bridallive.date_and_time_selected'\n// 'bridallive.appointment_type_selected'\n// 'bridallive.required_fields_filled_out'\n// 'bridallive.custom_fields_filled_out'\n// 'bridallive.redirect'\n// 'bridallive.page_leave'\n// 'bridallive.init_form_load'\n// 'bridallive.custom_fields'\n// 'bridallive.required_fields'\n\nexport default helper;\n","import { AppointmentType } from \"../interfaces\";\nimport _ from \"lodash\";\n\nconst helper = {\n getCallback: function(type: string, callbacks: any[]) {\n const callback = callbacks.find((c: any) => c.type === type) as any;\n\n if(callback && callback.callback) {\n return callback.callback;\n }\n\n return null;\n },\n getStepIndex: function(steps: any[], step: any) {\n if(!steps || !step) {\n return -1;\n }\n\n return steps.indexOf(step);\n },\n getCurrentIndexBasedOnStep: function(step: any, current: number, stepIndex: number) {\n if(step && step.id === \"dateAndTime\") {\n return 1;\n }\n\n return current;\n },\n determineCurrentStepIndex: function(form: any) {\n return form.stepIdx || -1;\n },\n determineLastStepIndex: function(userData: any, json: any) {\n let lastIndex = json.steps.length - 1;\n\n const confirmation = _.find(json.steps, { id: 'confirmation' });\n if(confirmation) {\n lastIndex--;\n }\n\n const associate = _.find(json.steps, { id: 'associate' });\n if(associate) {\n lastIndex--;\n }\n\n const paymentDetails = _.find(json.steps, { id: 'paymentDetails' });\n if(paymentDetails) {\n if(!json.paymentProvider || !json.paymentProvider.setup) {\n lastIndex--;\n } else if(!userData || !userData.appointmentType || !json.appointmentTypes.length) {\n lastIndex--;\n } else {\n const type = json.appointmentTypes.find((a:AppointmentType) => a.id === userData.appointmentType) as AppointmentType;\n if(!type || !type.requirePaymentInfoForBooking) {\n lastIndex--;\n }\n }\n }\n\n const additionalDetails = _.find(json.steps, { id: 'additionalDetails' });\n\n if(additionalDetails) {\n if(!additionalDetails.enabled) {\n lastIndex--;\n } else {\n if(!userData.appointmentType) {\n lastIndex--;\n } else {\n const fields = _.filter(additionalDetails.customFields, function (field) {\n return _.isEmpty(field.customFieldAppointmentTypeIds) || _.includes(field.customFieldAppointmentTypeIds, userData?.appointmentType)\n });\n\n if(!fields || fields.length === 0) {\n lastIndex--;\n }\n }\n }\n }\n\n return lastIndex;\n },\n showPaymentDetails: function(step: any, userData: any, json: any) {\n if(step && step.type === 'paymentDetails' && json && json.appointmentTypes && json.appointmentTypes.length && json.paymentProvider && json.paymentProvider.setup) {\n const type = json.appointmentTypes.find((a: AppointmentType) => a.id === userData.appointmentType) as AppointmentType;\n return type && type.requirePaymentInfoForBooking;\n }\n\n return false;\n },\n skipStep: function(step: any, userData: any, json: any, callbacks: any[]) {\n if(step && step.type === 'selectAssociate') {\n if(!json || !json.associates || !json.associates.length) {\n return true;\n }\n\n if(json.associates.length === 1 && (_.isEmpty(json.associates[0].employeeAppointmentTypes) || _.includes(json.associates[0].employeeAppointmentTypes, userData.appointmentType))) {\n const setAssociate = helper.getCallback('selectAssociate', callbacks);\n\n if(setAssociate) {\n setAssociate({ [step.id]: json.associates[0].id });\n }\n\n return true;\n }\n\n for(const associate of json.associates) {\n if(_.isEmpty(associate.employeeAppointmentTypes) || _.includes(associate.employeeAppointmentTypes, userData.appointmentType)) {\n return false;\n }\n }\n\n return true;\n } else if(step && step.id === 'additionalDetails') {\n if(!step.customFields || step.customFields.length <= 0) {\n return true;\n }\n\n for(const customField of step.customFields) {\n if(_.isEmpty(customField.customFieldAppointmentTypeIds) || _.includes(customField.customFieldAppointmentTypeIds, userData.appointmentType)) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n }\n};\n\nexport default helper;\n","let grecaptchaInstance: typeof window.grecaptcha | null = null;\n\nexport const setGrecaptchaInstance = (instance: typeof window.grecaptcha) => {\n grecaptchaInstance = instance;\n};\n\nexport const getGrecaptchaInstance = () => grecaptchaInstance;\n\nexport const waitForGrecaptcha = (): Promise => {\n return new Promise((resolve, reject) => {\n const timeout = 15000; // 15 seconds timeout\n const interval = 100; // Poll every 100ms\n const startTime = Date.now();\n\n const checkGrecaptcha = () => {\n if (window.grecaptcha && typeof window.grecaptcha.render === 'function') {\n resolve(window.grecaptcha); // Resolve when ready\n } else if (Date.now() - startTime >= timeout) {\n reject(new Error('Timeout waiting for Google reCAPTCHA to initialize.'));\n } else {\n setTimeout(checkGrecaptcha, interval); // Retry after interval\n }\n };\n\n checkGrecaptcha(); // Start polling\n });\n};\n","import React, {useEffect, useRef, useState} from 'react';\nimport { useForm } from \"./StepsBuilder\";\nimport { getGrecaptchaInstance, setGrecaptchaInstance } from \"../utils/grecaptcha-helper\";\nimport {useTranslation} from \"react-i18next\";\n\nconst googleRecaptchaScriptID = \"bl-form-recaptcha-script\";\n\ntype Props = {\n loading: boolean | undefined;\n}\n\nexport const BLCaptcha = ({ loading }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const [rendered, setRender] = useState(false);\n const [error, setError] = useState(false);\n\n function successCallback(response: any) {\n form.updateUserData({ captchaToken: response });\n }\n\n function errorCallback() {\n form.updateUserData({ captchaToken: null });\n }\n\n function expiredCallback() {\n form.updateUserData({ captchaToken: null });\n }\n\n useEffect(() => {\n const recaptchaContainerId = 'blCustomFormCaptcha';\n const existingGrecaptcha = getGrecaptchaInstance();\n\n if (form?.json?.captchaEnabled && !rendered) {\n if (existingGrecaptcha) {\n // Use existing grecaptcha instance\n if (!document.getElementById(recaptchaContainerId)?.hasChildNodes()) {\n existingGrecaptcha.render(recaptchaContainerId, {\n sitekey: '6LfhEsAqAAAAAMJ42N-vWCyTXzegN77UQb6-dvZ_',\n theme: 'light',\n size: 'normal',\n callback: successCallback,\n \"expired-callback\": expiredCallback,\n \"error-callback\": errorCallback,\n });\n\n setRender(true);\n }\n } else {\n // Load reCAPTCHA script and initialize\n if (!document.getElementById(googleRecaptchaScriptID)) {\n const script = document.createElement('script');\n script.id = googleRecaptchaScriptID;\n script.src = 'https://www.google.com/recaptcha/api.js?render=explicit&isolated=true';\n script.async = true;\n script.defer = true;\n\n script.onload = () => {\n const timeout = 15000; // 15 seconds\n const interval = 100; // Poll every 100ms\n const startTime = Date.now();\n\n const checkGrecaptcha = setInterval(() => {\n const recaptcha = window.grecaptcha;\n\n if (recaptcha && typeof recaptcha.render === 'function') {\n clearInterval(checkGrecaptcha);\n console.log('Google reCAPTCHA initialized successfully');\n setGrecaptchaInstance(recaptcha); // Save instance to singleton\n\n recaptcha.render(recaptchaContainerId, {\n sitekey: '6LfhEsAqAAAAAMJ42N-vWCyTXzegN77UQb6-dvZ_',\n theme: 'light',\n size: 'normal',\n callback: successCallback,\n \"expired-callback\": expiredCallback,\n \"error-callback\": errorCallback,\n });\n\n setRender(true);\n }\n\n // Stop polling after the timeout period\n if(Date.now() - startTime >= timeout) {\n clearInterval(checkGrecaptcha);\n console.error('Timeout: Google reCAPTCHA failed to initialize within 15 seconds');\n setError(true);\n }\n }, interval);\n };\n\n script.onerror = () => {\n console.error('Failed to load Google reCAPTCHA script');\n setError(true);\n };\n\n document.body.appendChild(script);\n }\n }\n }\n\n }, []);\n\n if (!form || !form.json || !form.json.captchaEnabled || loading) {\n return null;\n }\n\n return (\n
\n {error && (\n <>\n

{t('errors.captcha_error')}

\n \n \n )}\n
\n
\n );\n};\n\nexport default BLCaptcha;\n","import React from 'react';\nimport { Button, HStack } from '@chakra-ui/react';\nimport { useForm } from './StepsBuilder';\nimport { useTranslation } from 'react-i18next'\nimport StepHelper from \"../utils/step-helper\";\nimport BLCaptcha from \"./BLCaptcha\";\nimport PaymentAgreement from \"./payments/PaymentAgreement\";\n\ntype Props = {\n nextAsSubmit?: boolean;\n loading?: boolean;\n};\n\nconst StepsNavigation = ({ nextAsSubmit, loading }: Props) => {\n const form = useForm();\n const { t } = useTranslation();\n const currentStepIdx = StepHelper.determineCurrentStepIndex(form);\n const lastStepIndex = StepHelper.determineLastStepIndex(form.userData, form.json);\n\n const handleNextClick = () => {\n if(nextAsSubmit) {\n return;\n }\n\n if(currentStepIdx === lastStepIndex) {\n form.handleSubmit(form.userData);\n } else {\n form.goToNextStep(true);\n }\n };\n\n const handleBackClick = () => {\n form.updateUserDataAndCallback({ captchaToken: null }, function (userData: any) {\n form.goToPrevStep(true);\n });\n };\n\n const getNextButtonLabel = () => {\n if(lastStepIndex === currentStepIdx) {\n if(form && form.userData && form.userData.dateAndTime && form.userData.dateAndTime.waitList && form.userData.dateAndTime.waitList.bookWithWaitList) {\n return t('wait_list.add_to_waitlist');\n }\n\n if(form?.json?.formType === \"AppointmentRequestForm\") {\n return t('appointment.request_appointment');\n }\n\n return t('appointment.book_appointment');\n }\n\n return t('common.next');\n };\n\n const disableButton = () => {\n return currentStepIdx === lastStepIndex && form.isCaptchaValid();\n };\n\n return (\n <>\n {currentStepIdx === lastStepIndex && form?.json?.captchaEnabled && ()}\n \n {currentStepIdx > 0 && (\n \n )}\n \n \n \n );\n};\n\nexport default StepsNavigation;\n","import React, { useEffect, useState } from 'react';\nimport { FormControl, FormErrorMessage, Input, Stack } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { DynamicStepProps } from '../DynamicStep';\nimport Dropdown from \"../AppointmentType/dropdown/Dropdown\";\nimport CardContainer from \"../AppointmentType/card/CardContainer\";\nimport { useForm as useReactHookForm} from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { AppointmentType, FormStep} from \"../../interfaces\";\nimport IframeEvents from \"../../utils/iframe-events\";\nimport StepsNavigation from \"../StepsNavigation\";\nimport \"../../styles/style.css\";\n\nconst initDefaultValue = (form: any, step: FormStep) => {\n if(form && form.userData && step && step.id && form.userData[step.id]) {\n return form.userData[step.id];\n }\n\n if(form && form.json && form.json.appointmentTypes && form.json.appointmentTypes.length === 1) {\n return form.json.appointmentTypes[0].id;\n }\n\n if(form && form.json && form.json.typeId && form.json.appointmentTypes && form.json.appointmentTypes.length) {\n const type = form.json.appointmentTypes.find((a: AppointmentType) => a.id === form.json.typeId) as AppointmentType;\n\n if(type && type.id) {\n return type.id;\n }\n }\n};\n\nconst SelectAppointmentType = ({step}: DynamicStepProps) => {\n const { t } = useTranslation();\n const form = useForm();\n const methods = useReactHookForm();\n const [appointmentId, setAppointmentId] = useState(() => initDefaultValue(form, step));\n const layoutType = form.json.layoutType;\n const appointmentTypeLayout = form.json.appointmentTypeLayout;\n\n const setAppointmentType = (typeId: number) => {\n methods.setValue('select-appointment-type', typeId, {shouldValidate: true});\n setAppointmentId(typeId);\n };\n\n useEffect(() => {\n form.updateUserData({[step.id]: appointmentId});\n }, [appointmentId]);\n\n const handleSubmit = () => {\n IframeEvents.appointmentSelected({\n appointmentTypeId: appointmentId,\n selected: Date.now(),\n type: form?.json?.appointmentTypes?.find(a => a?.id === appointmentId)\n });\n\n form.goToNextStep(true);\n };\n\n return (\n
\n \n \n \n {methods.formState.errors['select-appointment-type'] && t('appointment.errors.select_appointment_type')}\n \n {(appointmentTypeLayout === 'dropdown' || layoutType !== 'steps') && }\n {appointmentTypeLayout === 'cards' && layoutType === 'steps' && }\n \n {layoutType === 'steps' && }\n \n );\n};\n\nexport default SelectAppointmentType;\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext, useState } from 'react';\nimport { FormTheme } from '../interfaces';\n\nexport type FormContextState = {\n textColor: string;\n palette: string;\n setTheme: (theme: FormTheme) => void;\n};\n\nexport const FormThemeContext = createContext({} as FormContextState);\nexport const useFormTheme = () => useContext(FormThemeContext);\n\ntype Props = {\n children: ReactNode;\n}\n\nexport const FormThemeProvider = ({ children }: Props) => {\n const [textColor, setTextColor] = useState('black');\n const [palette, setPalette] = useState('blue');\n\n const setTheme = (theme: FormTheme) => {\n setPalette(theme.palette);\n setTextColor(theme.textColor);\n };\n\n const sharedState: FormContextState = {\n textColor,\n palette,\n setTheme\n };\n\n return (\n \n {children}\n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { FormControl, FormLabel, Stack } from '@chakra-ui/react';\nimport _ from 'lodash';\nimport IframeEvents from \"../../utils/iframe-events\";\nimport { useForm } from '../StepsBuilder';\nimport { useFormTheme } from '../../contexts/useFormTheme';\nimport StepsNavigation from '../StepsNavigation';\nimport { DynamicStepProps } from '../DynamicStep';\nimport { useTranslation } from \"react-i18next\";\nimport SelectDropDown from \"../DropDown/SelectDropDown\";\n\nconst filterAssociates = (userData: any, json: any): any[] => {\n if(userData && json && json.associates && json.associates.length) {\n return json.associates.filter((associate: any) => {\n return _.isEmpty(associate.employeeAppointmentTypes) || _.includes(associate.employeeAppointmentTypes, userData.appointmentType);\n });\n }\n\n return [];\n};\n\nconst initAssociate = (step: any, userData: any, associates: any[]) => {\n if(step && userData[step.id]) {\n return userData[step.id];\n }\n\n if(associates && associates.length) {\n return associates[0].id;\n }\n\n return undefined;\n};\n\nconst SelectAssociate = ({ step }: DynamicStepProps) => {\n const { t } = useTranslation();\n const form = useForm();\n const formTheme = useFormTheme();\n const [associates] = useState(() => filterAssociates(form.userData, form.json));\n const [associateId, setAssociateId] = useState(() => initAssociate(step, form.userData, associates));\n const layoutType = form.json.layoutType;\n\n useEffect(() => {\n if(associateId) {\n IframeEvents.associateSelected({ [step.id]: associateId });\n }\n\n form.updateUserData({ [step.id]: associateId });\n }, [associateId]);\n\n // const handleChange = (e: ChangeEvent) => {\n // setAssociateId(parseInt(e.target.value));\n // };\n\n const findAssociate = (id: number): any => {\n return associates.find(a => a.id === id) as any;\n };\n\n const buildList = () => {\n return associates.map(function(associate) {\n return {\n label: associate.lastName ? `${associate.firstName} ${associate.lastName}` : associate.firstName,\n value: associate.id\n };\n });\n };\n\n const getProperty = (id: number, type: string) => {\n const associate = findAssociate(id);\n\n if(associate) {\n if(type === 'name') {\n return associate.lastName ? `${associate.firstName} ${associate.lastName}` : associate.firstName;\n } else {\n return associate.id;\n }\n }\n\n return '';\n };\n\n return (\n \n \n {t('appointment.select_associate')}\n \n \n\n {layoutType === 'steps' && }\n \n );\n};\n\nexport default SelectAssociate;\n","import { Form, FormStep } from '../interfaces';\n\nexport const findStepByType = (form: Form, type: string): FormStep => {\n return form.steps.find(s => s.type === type) || {} as FormStep;\n};\n","import _ from 'lodash';\nimport { findStepByType } from \"./find-step-by-type\";\nimport { FormContextState } from \"../components/StepsBuilder\";\n\nconst helper = {\n /**\n * Returns value of GET parameter\n *\n * @param paramName - get parameter name\n */\n getParam(paramName: string): string {\n return helper.extractParameter(paramName, '?');\n },\n extractParameter(paramName: string, separator: string, url = window.location.href): string {\n let result: string = '';\n const urlParts = url.split(separator);\n // In case there are multiple separator signs in the url\n urlParts.shift();\n const urlAfterHash = urlParts.join(separator);\n if(!urlAfterHash) {\n return result;\n }\n urlAfterHash.split('&')\n .forEach((item) => {\n const name = item.split('=', 1)[0];\n if(name === paramName) {\n result = decodeURIComponent(item.slice(name.length + 1));\n }\n });\n return result;\n },\n validQueryParams: ['employeeId'],\n validCustomQueryParams: ['version'],\n paramKeys: {\n employeeId: 'selectAssociate'\n },\n appendParams: function (params: string[], form: FormContextState): string {\n let queryString = '';\n\n if(params && params.length) {\n for(const param of params) {\n if(_.includes(helper.validQueryParams, param)) {\n const symbol = _.isEmpty(queryString) ? '?' : '&';\n // @ts-ignore\n const key = findStepByType(form.json, helper.paramKeys[param]).id;\n if(key && form.userData[key]) {\n queryString += `${symbol}${param}=${form.userData[key]}`;\n }\n } else if(_.includes(helper.validCustomQueryParams, param)) {\n const symbol = _.isEmpty(queryString) ? '?' : '&';\n const paramValue = helper.getParam(param);\n\n if(paramValue) {\n queryString += `${symbol}${param}=${paramValue}`\n }\n }\n }\n }\n\n return queryString;\n },\n scrapParamsAndAppend: function(addOn: boolean, ignoreParams: string[]): string {\n try {\n let queryString = '';\n const params = new URLSearchParams(window.location.search);\n const entries = params.entries();\n\n if(entries) {\n // @ts-ignore\n outer: for(const entry of entries) {\n const [key, value] = entry;\n\n for(const ignore of ignoreParams) {\n if(ignore === key) {\n continue outer;\n }\n }\n\n const symbol = _.isEmpty(queryString) && !addOn ? '?' : '&';\n queryString += `${symbol}${key}=${value}`;\n }\n }\n\n return queryString;\n } catch (e) {\n return '';\n }\n }\n};\n\nexport default helper;\n","import _ from \"lodash\";\n\nconst ENVS = [\n 'app.bridallive.com',\n 'qa.bridallive.com',\n 'dev.bridallive.com',\n 'mission.bridallive.com',\n 'dev.bl-dev.com'\n];\n\nexport const API_CONFIG = {\n baseUrl: 'http://localhost:8080/bl-server/form'\n};\n\nexport const getBaseUrl = () => {\n const host = window.location.host;\n\n if(_.includes(ENVS, host)) {\n return '/bl-server/form';\n }\n\n return API_CONFIG.baseUrl;\n};\n\n","import { setup } from 'axios-cache-adapter'\nimport {\n Form,\n CardDetailsResult,\n CardDetailsRequest,\n CIPTokenRequest,\n CIPTokenResponse,\n SignatureResult\n} from '../interfaces';\nimport { getBaseUrl } from '../config';\n\nconst api = setup({\n baseURL: getBaseUrl(),\n cache: {\n maxAge: 60 * 60 * 1000,\n exclude: { query: false }\n }\n});\n\napi.defaults.withCredentials = true;\n\nexport const buildFormHeaders = (token: string) => {\n return {\n headers: {\n token: token\n }\n };\n};\n\nexport const updateCookies = async (formType: string, retailerId: string): Promise
=> {\n return await (await api.get(`/${formType}/init?retailerId=${retailerId}`)).data as Promise;\n};\n\nexport const createSetupIntent = async (formType: string, token: string): Promise => {\n return await (await api.get(`/${formType}/createSetupIntent`, {\n headers: {\n token: token\n },\n cache: {\n maxAge: 0,\n exclude: { query: true }\n }\n })).data as Promise;\n};\n\nexport const saveCard = async (formType: string, token: string, cardRequest: CardDetailsRequest): Promise => {\n return await (await api.post(`/${formType}/saveCard`, cardRequest, buildFormHeaders(token))).data as Promise;\n};\n\nexport const uploadSignature = async (formType: string, retailerId: string, token: string, blob: any): Promise => {\n const formData = new FormData();\n formData.append('Content-Type', 'image/png');\n formData.append('file', blob, 'signature.png');\n formData.append('retailer', retailerId);\n\n return await (await api.post(`/${formType}/uploadSignature`, formData, buildFormHeaders(token))).data as Promise;\n};\n\nexport const createCIPToken = async (request: CIPTokenRequest): Promise => {\n return await (await api.post('https://psl.chargeitpro.com/token/card.json', request)).data as Promise;\n};\n\nexport { api };\n","import React, { memo } from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Box, Button, ButtonGroup, HStack, Spinner, Text } from '@chakra-ui/react';\nimport { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons';\nimport { Locale } from '../../interfaces';\nimport { useForm } from \"../StepsBuilder\";\nimport { useTranslation } from \"react-i18next\";\n\ntype Props = {\n isLoading: boolean;\n currentMonth: Dayjs;\n onNextClick: () => void;\n onPrevClick: () => void;\n locale: Locale;\n};\n\nconst today = dayjs();\n\nconst CalendarNavigation = ({ isLoading, currentMonth, onNextClick, onPrevClick }: Props) => {\n const form = useForm();\n const { t } = useTranslation();\n const maxDate = form?.json?.maxDate;\n\n return (\n \n \n {currentMonth &&\n (<>\n {t(`calendar.months.long.${currentMonth.month()}`)} {currentMonth.format('YYYY')}\n )\n }\n \n\n \n {isLoading && }\n \n \n \n \n \n
{t(`calendar.months.long.${currentMonth.month()}`)}{t('calendar.is_now_displaying')}
\n
\n );\n};\n\nfunction areEqual(prevProps: Props, nextProps: Props): boolean {\n const results: boolean[] = [];\n results.push(prevProps.isLoading === nextProps.isLoading);\n results.push(prevProps.currentMonth === nextProps.currentMonth);\n return !results.some(i => !i);\n}\n\nexport default memo(CalendarNavigation, areEqual);\n","import React, { memo } from 'react';\nimport { Dayjs } from 'dayjs';\nimport { Box, Button } from '@chakra-ui/react';\nimport { StarIcon } from \"@chakra-ui/icons\";\nimport { useTranslation } from \"react-i18next\";\n\ntype Props = {\n date: Dayjs;\n month: Dayjs;\n isSelected: boolean;\n isAvailable: boolean;\n isToday: boolean;\n isEvent: boolean;\n isCurrentOrFuture: boolean;\n onSelect: (date: Dayjs) => void;\n}\n\nconst CalendarDay = ({ date, month, isSelected, isAvailable, isToday, isEvent, onSelect, isCurrentOrFuture }: Props) => {\n const { t } = useTranslation();\n\n const formatAriaLabel = (date: Dayjs, isAvailable:boolean, isSelected: boolean, month: Dayjs) => {\n let label = \"\";\n if(isSelected) {\n label += t('calendar.currently_selected');\n }\n label += date.format('MMMM D, YYYY');\n if(isAvailable) {\n label += t('calendar.has_availabilities');\n }\n return label;\n };\n\n\n return (\n \n );\n};\n\nfunction areEqual(prevProps: Props, nextProps: Props): boolean {\n const results: boolean[] = [];\n results.push(prevProps.date === nextProps.date);\n results.push(prevProps.isSelected === nextProps.isSelected);\n results.push(prevProps.isAvailable === nextProps.isAvailable);\n results.push(prevProps.isToday === nextProps.isToday);\n results.push(prevProps.isEvent === nextProps.isEvent);\n return !results.some(i => !i);\n}\n\n\nfunction getDayClasses(isSelected: boolean, isToday: boolean, isAvailable: boolean) {\n let classes = 'bl-btn calendar-day ';\n if(isSelected) {\n classes += 'selected '\n } else if(isToday) {\n classes += 'today '\n } else if(isAvailable) {\n classes += 'available '\n }\n\n return classes;\n}\n\nexport default memo(CalendarDay, areEqual);\n","import { useEffect, useRef } from 'react';\n\nconst useDidMountEffect = (func: () => void, deps: []) => {\n const didMount = useRef(false);\n useEffect(() => {\n if(didMount.current) func();\n else didMount.current = true;\n }, deps);\n};\n\nexport default useDidMountEffect;\n","import React, { useState } from 'react';\nimport { Button } from \"@chakra-ui/button\";\nimport { useTranslation } from \"react-i18next\";\nimport { Stack } from \"@chakra-ui/layout\";\nimport {Dayjs} from \"dayjs\";\nimport useDidMountEffect from \"../../hooks/useDidMountEffect\";\n\ntype AvailableDates = {\n date: Dayjs;\n timeSlotCount: number;\n date_string: string;\n availableTimeSlot: boolean;\n event: boolean;\n};\n\ntype Props = {\n onNextClick: () => void;\n currentMonth: Dayjs;\n isLoading: boolean;\n availableDates: AvailableDates[];\n};\n\nconst CalendarNoAppointmentButton = ({onNextClick, currentMonth, isLoading, availableDates}: Props) => {\n const { t } = useTranslation();\n const [show, setShow] = useState(false);\n useDidMountEffect(showBtn, []);\n\n if(isLoading || !availableDates || availableDates.length || !show) {\n return null;\n }\n\n function onClick() {\n setShow(false);\n onNextClick();\n }\n\n function showBtn() {\n\n setShow(true);\n }\n\n return (\n \n \n \n );\n};\n\nexport default CalendarNoAppointmentButton;\n","import React from 'react';\nimport { Spinner } from '@chakra-ui/react';\nimport { Stack } from \"@chakra-ui/layout\";\n\ntype Props = {\n className: string;\n isLoading: boolean;\n};\n\nconst CalendarLoading = ({className, isLoading}: Props) => {\n if(!isLoading){\n return null;\n }\n\n return (\n \n \n \n );\n};\n\nexport default CalendarLoading;\n","import React, { memo, useEffect, useState } from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Box, Center, SimpleGrid, Text } from '@chakra-ui/react';\nimport CalendarDay from './CalendarDay';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport arraySupport from 'dayjs/plugin/arraySupport';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport isEqual from 'lodash/isEqual';\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"../StepsBuilder\";\nimport find from \"lodash/find\";\nimport CalendarNoAppointmentButton from \"./CalendarNoAppointmentsButton\";\nimport CalendarLoading from \"./CalendarLoading\";\nimport UrlHelper from \"../../utils/url-helper\";\n\n// Enable DayJS plugins\ndayjs.extend(isoWeek);\ndayjs.extend(arraySupport);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(advancedFormat);\n\ntype AvailableDates = {\n date: Dayjs;\n timeSlotCount: number;\n date_string: string;\n availableTimeSlot: boolean;\n event: boolean;\n};\n\ntype Props = {\n selectedDate: Dayjs | undefined;\n currentMonth: Dayjs;\n availableDates: AvailableDates[];\n onSelect: (date: Dayjs) => void;\n onNextClick: () => void;\n onPrevClick: () => void;\n isLoading: boolean;\n};\n\ntype CalendarWeekLabel = {\n short: string;\n long: string;\n};\n\nconst WEEK_ISO = 'isoWeek';\nconst WEEK = 'week';\nconst today = dayjs();\n\nconst initCalendarLabels = (startOfWeek: string) => {\n if(startOfWeek === WEEK_ISO) {\n return [ { short:'calendar.days.short.mon', long: 'calendar.days.long.mon' }, { short:'calendar.days.short.tue', long: 'calendar.days.long.tue' }, { short:'calendar.days.short.wed', long: 'calendar.days.long.wed' }, { short:'calendar.days.short.thu', long: 'calendar.days.long.thu' }, { short:'calendar.days.short.fri', long: 'calendar.days.long.fri' }, { short:'calendar.days.short.sat', long: 'calendar.days.long.sat' }, { short:'calendar.days.short.sun', long: 'calendar.days.long.sun' }];\n } else {\n return [ { short:'calendar.days.short.sun', long: 'calendar.days.long.sun' }, { short:'calendar.days.short.mon', long: 'calendar.days.long.mon' }, { short:'calendar.days.short.tue', long: 'calendar.days.long.tue' }, { short:'calendar.days.short.wed', long: 'calendar.days.long.wed' }, { short:'calendar.days.short.thu', long: 'calendar.days.long.thu' }, { short:'calendar.days.short.fri', long: 'calendar.days.long.fri' }, { short:'calendar.days.short.sat', long: 'calendar.days.long.sat' }];\n }\n};\n\nconst initStartOfWeek = (startOfWeek: string) => {\n if(startOfWeek === WEEK_ISO) {\n return WEEK_ISO;\n }\n\n return WEEK;\n};\n\nconst CalendarDatepicker = ({ selectedDate, currentMonth, availableDates, onSelect, onNextClick, isLoading }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const specialEvent = UrlHelper.getParam('specialEvent');\n const [startOfWeek] = useState(() => initStartOfWeek(form.json?.selectDateTimeSettings?.startOfWeek));\n const [calendarWeekLabels] = useState(() => initCalendarLabels(startOfWeek));\n const [daysOfMonth, setDaysOfMonth] = useState<(Dayjs | null)[]>(()=> calculateCalendar(currentMonth));\n \n function calculateCalendar(currentMonth: Dayjs) {\n const weeks: (Dayjs | null)[][] = [];\n const startDay = currentMonth.startOf('month').startOf(startOfWeek as \"week\" | \"isoWeek\");\n const endDay = currentMonth.endOf('month').endOf(startOfWeek as \"week\" | \"isoWeek\");\n\n let date = startDay.subtract(1, 'day');\n\n while(date.isBefore(endDay, 'day')) {\n weeks.push(Array(7).fill(0).map(() => {\n date = date.add(1, 'day');\n\n // If the day is off the current month then just show empty box\n if(!date.isSame(currentMonth, 'month')) {\n return null;\n }\n\n return date;\n }));\n }\n\n return weeks.flat(1);\n }\n\n useEffect(() => {\n setDaysOfMonth(calculateCalendar(currentMonth));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentMonth]);\n\n const isAvailable = (calendarDate: Dayjs) => {\n if(calendarDate && !calendarDate.isBefore(today, 'day')) {\n const available = find(availableDates, { date_string: calendarDate.format('YYYY-MM-DD') });\n return !!(available && available.availableTimeSlot && available.timeSlotCount > 0);\n }\n\n return false;\n };\n\n const isEvent = (calendarDate: Dayjs) => {\n if(specialEvent === '2' && calendarDate && !calendarDate.isBefore(today, 'day')) {\n const available = find(availableDates, { date_string: calendarDate.format('YYYY-MM-DD') });\n return !!(available && available.event);\n }\n\n return false;\n };\n\n return (\n \n \n \n {calendarWeekLabels.map(weekLabel => (\n
\n {t(weekLabel.short).toUpperCase()}\n
\n ))}\n {daysOfMonth.map((date, index) => {\n if(!date) {\n // Need a unique key value for the empty dates. Not overlap with calendar day keys.\n return ;\n }\n\n return (\n \n );\n })}\n
\n );\n};\n\nfunction areEqual(prevProps: Props, nextProps: Props): boolean {\n const results: boolean[] = [];\n results.push(isEqual(prevProps.availableDates, nextProps.availableDates));\n results.push(prevProps.selectedDate === nextProps.selectedDate);\n results.push(prevProps.currentMonth === nextProps.currentMonth);\n results.push(prevProps.isLoading === nextProps.isLoading);\n return !results.some(i => !i);\n}\n\nexport default memo(CalendarDatepicker, areEqual);\n","import React from 'react';\nimport { Button } from '@chakra-ui/react';\n\ntype Props = {\n onClick: () => void;\n};\n\nconst DeleteWaitListItemButton = ({ onClick }: Props) => {\n return (\n \n );\n};\n\nexport default DeleteWaitListItemButton;\n","import React from 'react';\nimport { FormControl, Stack, Center } from '@chakra-ui/react';\nimport { WaitListTimeSlot } from '../../interfaces';\nimport DateHelper from '../../utils/date-helper';\nimport DeleteWaitListItemButton from \"./DeleteWaitListItemButton\";\nimport Select from \"react-select\";\n\ntype Props = {\n timeSlots: WaitListTimeSlot[];\n setTimeSlot: (timeSlot: any) => void;\n remove: (index: number) => void;\n times: string[];\n};\n\nconst WaitListTimeWindowItems = ({ remove, timeSlots, setTimeSlot, times }: Props) => {\n\n const handleChange = ({ timeIndex, value, label, name }: any, slot: WaitListTimeSlot, index: number) => {\n let date = undefined;\n\n if(slot.selectedDate && value) {\n date = DateHelper.generateDateTime(slot.selectedDate, value);\n }\n\n setTimeSlot({ index: index, timeIndex: timeIndex , type: name, date: date, value: value });\n };\n\n const mapTimes = function (times: any[], name: string) {\n return times.map(function(time, idx: number) {\n return {\n label: time,\n value: time,\n timeIndex: idx,\n name: name\n };\n });\n };\n\n return (\n \n {timeSlots.map((slot, index) => (\n
\n \n\n
\n (<>)}}\n classNamePrefix=\"react-select\"\n onChange={(e) => handleChange(e, slot, index)}\n options={mapTimes(times, \"startTime\")}\n defaultValue={{ value: slot.startTime, label: slot.startTime }}\n />\n
\n\n \n \n \n \n \n\n
\n (<>)}}\n classNamePrefix=\"react-select\"\n onChange={(e) => handleChange(e, slot, index)}\n options={mapTimes(times, \"endTime\")}\n defaultValue={{ value: slot.endTime, label: slot.endTime }}\n />\n
\n\n {timeSlots.length > 1 && (\n remove(index)}/>\n )}\n
\n
\n ))}\n
\n );\n};\n\nexport default WaitListTimeWindowItems;\n","import React from \"react\";\n\ntype Props = {\n width?: string;\n height?: string;\n color?: string;\n}\n\nconst AddIcon = ({ width = '20px', height = '20px', color = 'black' }: Props) => {\n const styles: any = {\n width,\n height,\n color\n };\n\n return (\n \n \n \n )\n};\n\nexport default AddIcon;\n","import React, { useEffect, useState } from 'react';\nimport { Dayjs } from \"dayjs\";\nimport {TimeOptions, WaitList, WaitListTimeSlot} from \"../../interfaces\";\nimport { Radio, RadioGroup } from \"@chakra-ui/radio\";\nimport { Stack, Text, Heading } from \"@chakra-ui/layout\";\nimport { FormControl, FormLabel } from \"@chakra-ui/react\";\nimport { Button } from \"@chakra-ui/button\";\nimport WaitListTimeWindowItems from \"./WaitListTimeWindowItems\";\nimport AddIcon from \"../layout/icons/AddIcon\";\nimport { useTranslation } from \"react-i18next\";\nimport {useForm} from \"../StepsBuilder\";\n\ntype Props = {\n showWaitList: boolean;\n isMaxSlots: boolean;\n date: Dayjs;\n add: () => void;\n update: (data: any) => void;\n remove: (index: number) => void;\n options: TimeOptions;\n windowTimeSlots: WaitListTimeSlot[];\n setWaitList: (data: any) => void;\n times: string[];\n waitList: WaitList | undefined;\n}\n\nconst initAllDay = (waitList: WaitList | undefined) => {\n if(waitList) {\n return waitList.isAllDay ? '1' : '2';\n }\n\n return '1';\n};\n\nconst WaitListSection = ({ showWaitList, isMaxSlots, date, add, update, remove, options, windowTimeSlots, setWaitList, times, waitList }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const [isAllDay, setIsAllDay] = useState(() => initAllDay(waitList));\n\n useEffect(() => {\n if(!isAllDay || !showWaitList) {\n return;\n }\n\n setWaitList((prevState: any) => {\n if(isAllDay === '1') {\n const startTime = times[0];\n const endTime = times[times.length - 1];\n return { ...prevState, isAllDay: true, timeSlots: [], startTime, endTime };\n } else {\n return { ...prevState, isAllDay: false, startTime: '', endTime: '', timeSlots: windowTimeSlots };\n }\n });\n }, [isAllDay]);\n\n if(!showWaitList) {\n return null;\n }\n\n return (\n <>\n {t('wait_list.please_specify_when')} {date.format(form.json.locale.mediumDate?.toUpperCase())}\n \n \n \n {t('wait_list.im_available_store_hours')} ({options.start} - {options.end})\n \n \n {t('wait_list.im_available_specific_hours')}\n \n \n \n {isAllDay === '2' && (\n \n \n {t('wait_list.start')} & {t('wait_list.end_time')}\n \n {!isMaxSlots && }\n \n \n )}\n \n );\n};\n\nexport default WaitListSection;\n","import React, {useEffect, useState} from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Stack } from '@chakra-ui/react';\nimport {AppointmentType, Company, TimeOptions, WaitList, WaitListSettings, WaitListTimeSlot} from '../../interfaces';\nimport _ from \"lodash\";\nimport { FormContextState, useForm } from \"../StepsBuilder\";\nimport DateHelper from \"../../utils/date-helper\"\nimport WaitListSection from \"./WaitListSection\";\nimport { useTranslation } from \"react-i18next\";\n\ntype Props = {\n date: Dayjs | undefined;\n settings: WaitListSettings | undefined\n appointmentTypeId: number;\n setWaitList: (data: any) => void;\n showWaitList: boolean;\n setShowWaitList: (data: boolean) => void;\n setSelectedTime: (time: any) => void;\n waitList: WaitList | undefined;\n};\n\nconst generateTimes = function(options: TimeOptions | undefined) {\n let times: string[] = [];\n\n if(!options) {\n return times;\n }\n\n const { startDate, endDate, increment } = options;\n\n let date = dayjs(startDate);\n const end = dayjs(endDate);\n\n while(date.isBefore(end, 'minute') || date.isSame(end, 'minute')) {\n times.push(date.format('h:mm a'));\n date = date.add(increment, 'minute');\n }\n\n return times;\n};\n\nconst getCompanyProperty = function(obj: Company, key: string) {\n // @ts-ignore\n return obj[key];\n};\n\nconst getIndex = (duration: number, increment: number, prevIndex: number) => {\n const FIFTEEN = 900000;\n const THIRTY = FIFTEEN * 2;\n\n if(!prevIndex) {\n prevIndex = 0;\n }\n\n if(increment === 15 && duration) {\n return (duration / FIFTEEN) + prevIndex;\n } else if(increment === 30 && duration) {\n return (duration / THIRTY) + prevIndex;\n }\n\n return prevIndex;\n};\n\nconst initTimeSlots = function (waitList: WaitList | undefined, date: Dayjs | undefined, options: TimeOptions | undefined, times: string[] | undefined, type: AppointmentType | undefined) {\n if(waitList && waitList.timeSlots && waitList.timeSlots.length) {\n return waitList.timeSlots;\n }\n\n let timeSlots: WaitListTimeSlot[] = [];\n\n if(!date || !options || !times || !type) {\n return timeSlots;\n }\n\n const idx = getIndex(type.duration, options.increment, 0);\n\n const timeSlot: WaitListTimeSlot = {\n id: Date.now(),\n selectedDate: date.toDate(),\n startTime: times[0],\n endTime: times[idx],\n startTimeDate: undefined,\n endTimeDate: undefined,\n hasError: false,\n prevIndex: idx\n };\n\n if(timeSlot.startTime && timeSlot.endTime && timeSlot.selectedDate) {\n // @ts-ignore\n timeSlot.startTimeDate = DateHelper.generateDateTime(timeSlot.selectedDate, timeSlot.startTime);\n // @ts-ignore\n timeSlot.endTimeDate = DateHelper.generateDateTime(timeSlot.selectedDate, timeSlot.endTime);\n }\n\n return [timeSlot];\n};\n\nconst initTimeOptions = function (date: Dayjs | undefined, form: FormContextState | undefined) {\n if(!date || !form) {\n return;\n }\n\n const DAY_OF_THE_WEEK = date.day();\n const opened:string = DateHelper.DAYS_ENUM.days[DAY_OF_THE_WEEK].open;\n const closed:string = DateHelper.DAYS_ENUM.days[DAY_OF_THE_WEEK].closed;\n const isClosed:string = DateHelper.DAYS_ENUM.days[DAY_OF_THE_WEEK].isClosed;\n\n let options: TimeOptions = {\n date: date,\n start: getCompanyProperty(form.json.company, opened),\n end: getCompanyProperty(form.json.company, closed),\n storeClosed: getCompanyProperty(form.json.company, isClosed),\n increment: 30\n };\n\n // @ts-ignore\n options.startDate = DateHelper.generateDateTime(options.date.toDate(), options.start);\n // @ts-ignore\n options.endDate = DateHelper.generateDateTime(options.date.toDate(), options.end);\n\n return options;\n};\n\nconst initMaxSlots = (settings: any, timeSlots: WaitListTimeSlot[]) => {\n if(settings && settings.maxTimeSlots && timeSlots && timeSlots.length) {\n return timeSlots.length >= settings.maxTimeSlots - 1;\n }\n\n return false;\n};\n\nconst WaitListWrapper = ({ date, settings, appointmentTypeId, setWaitList, showWaitList, setShowWaitList, setSelectedTime, waitList }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const MAX_TIME_SLOTS = 5;\n\n const [options] = useState(()=> initTimeOptions(date, form));\n const [times] = useState(() => generateTimes(options));\n const [timeSlots, setTimeSlots] = useState(() => initTimeSlots(waitList, date, options, times, form.json.appointmentTypes.find(a => a.id === appointmentTypeId)));\n const [isMaxSlots, setMaxSlots] = useState(() => initMaxSlots(settings, timeSlots));\n\n useEffect(() => {\n if(!showWaitList) {\n return;\n }\n\n setWaitList((prevState: any) => {\n return { ...prevState, timeSlots };\n });\n }, [timeSlots]);\n\n // useEffect(() => {\n // if(!showWaitList) {\n // return;\n // }\n //\n // if(options && options.storeClosed) {\n // setWaitList((prevState: any) => {\n // return { ...prevState, bookWithWaitList: false, timeSlots: [], isAllDay: true };\n // });\n // }\n // }, [options]);\n\n\n const addTimeSlot = () => {\n if((settings && timeSlots.length >= settings.maxTimeSlots) || timeSlots.length >= MAX_TIME_SLOTS) {\n return;\n }\n\n const type = form.json.appointmentTypes.find(a => a.id === appointmentTypeId);\n if(!date || !options || !times || !times.length || !timeSlots || !timeSlots.length || !type) {\n return;\n }\n\n const lastSlot: WaitListTimeSlot = timeSlots[timeSlots.length - 1];\n let nextIndex = getIndex(type.duration, options.increment, lastSlot.prevIndex || 0);\n\n if(times.length && nextIndex) {\n const length = times.length - 1;\n if(nextIndex > length) {\n while(nextIndex > length) {\n nextIndex--;\n }\n }\n }\n\n let timeSlot: WaitListTimeSlot = {\n id: Date.now(),\n selectedDate: date.toDate(),\n startTime: times[lastSlot.prevIndex || 0],\n endTime: times[nextIndex],\n startTimeDate: undefined,\n endTimeDate: undefined,\n hasError: false,\n prevIndex: nextIndex\n };\n\n if(timeSlot.startTime && timeSlot.endTime && timeSlot.selectedDate) {\n // @ts-ignore\n timeSlot.startTimeDate = DateHelper.generateDateTime(timeSlot.selectedDate, timeSlot.startTime);\n // @ts-ignore\n timeSlot.endTimeDate = DateHelper.generateDateTime(timeSlot.selectedDate, timeSlot.endTime);\n }\n\n setTimeSlots(timeSlots => DateHelper.validateWaitListTimeSlots([...timeSlots, timeSlot]));\n\n if(settings && timeSlots.length >= settings.maxTimeSlots - 1) {\n setMaxSlots(true);\n }\n };\n\n const updateTimeSlot = (data: any) => {\n let newArr = timeSlots.map((slot, i) => {\n if(data.index === i) {\n if(data.type === 'startTime') {\n return { ...slot,\n startTime: data.value,\n startTimeDate: data.date\n };\n } else {\n return { ...slot,\n endTime: data.value,\n endTimeDate: data.date,\n prevIndex: data.timeIndex\n };\n }\n } else {\n return slot;\n }\n });\n\n setTimeSlots(DateHelper.validateWaitListTimeSlots(newArr));\n };\n\n const deleteTimeSlot = (index: number) => {\n const timeSlot = timeSlots[index];\n const newArr = _.without(timeSlots, timeSlot);\n setTimeSlots(DateHelper.validateWaitListTimeSlots(newArr));\n setMaxSlots(false);\n };\n\n const showWaitListOnClick = () => {\n setSelectedTime(undefined);\n setWaitList((prevState: any) => { return { ...prevState, bookWithWaitList: true, timeSlots: [], isAllDay: true };});\n setShowWaitList(true);\n };\n\n if(!date || !settings || !options || options.storeClosed || settings.mode === '2' || !settings.waitListEnabled || !_.includes(settings.appointmentTypeIds, appointmentTypeId)) {\n return null;\n }\n\n return (\n \n {date && (\n <>\n {!showWaitList &&\n
showWaitListOnClick()}>\n \n \n \n {t('wait_list.add_me')}\n
\n }\n\n \n \n )}\n
\n );\n};\n\nexport default WaitListWrapper;\n","import { Timezone } from \"../../interfaces\";\nimport dayjs from 'dayjs';\nimport \"../../styles/style.css\";\nimport { useForm } from \"../StepsBuilder\";\nimport { useTranslation } from \"react-i18next\";\nimport { Tooltip } from \"@chakra-ui/react\"\n\ntype Props = {\n timeZone: Timezone;\n onSelect: (zone: Timezone) => void;\n hourFormat: string;\n selectedTimezone: Timezone;\n};\n\nconst today = dayjs();\n\n\nconst TimeZoneEntry = ({ timeZone, onSelect, hourFormat, selectedTimezone }: Props) => {\n\n const form = useForm();\n const companyTimeZonedId = form.json.company.timeZoneId;\n const { t } = useTranslation();\n\n const StoreTimeZoneIcon = () => (\n \n \n \n \n \n );\n\n return (\n
onSelect(timeZone)}>\n {timeZone.label}\n {timeZone.value === companyTimeZonedId && }\n ({today.tz(timeZone.value).format(hourFormat)})\n
\n );\n};\n\nexport default TimeZoneEntry;\n","import { Timezone } from \"../../interfaces\";\nimport TimeZoneEntry from './TimeZoneEntry';\nimport \"../../styles/style.css\";\n\ntype Props = {\n timeZones: Timezone [];\n onSelect: (zone: Timezone) => void;\n onClick: () => void;\n hourFormat: string;\n selectedTimezone: Timezone;\n};\n\nconst TimeZoneGroup = ({ timeZones, onSelect, hourFormat, selectedTimezone , onClick }: Props) => {\n\n function selectTZ(zone: Timezone) {\n onSelect(zone);\n onClick();\n }\n\n return (\n <>\n {timeZones.map((zone, index) => (\n \n ))}\n \n );\n};\n\nexport default TimeZoneGroup;\n","import React from \"react\";\nimport { Switch } from \"@chakra-ui/react\";\n\ntype Props = {\n setHourFormat: (data: string) => void;\n hourFormat: string;\n};\n\nconst HourFormatSwitch = ({ setHourFormat }: Props) => {\n return (\n
\n am/pm\n setHourFormat(e.target.checked ? 'HH:mm' : 'hh:mm a')}/>\n 24h\n
\n );\n};\n\nexport default HourFormatSwitch;\n","import React, { ChangeEvent, useState} from 'react';\nimport dayjs, {Dayjs} from 'dayjs';\nimport { Popover, PopoverTrigger, PopoverContent, PopoverBody, Input, Divider } from '@chakra-ui/react';\nimport { Timezone, TimezoneGroup } from '../../interfaces';\nimport TimeZoneGroup from './TimeZoneGroup';\nimport HourFormatSwitch from \"../Timezone/HourFormatSwitch\";\nimport { useTranslation } from 'react-i18next';\nimport { TIME_ZONE_GROUPS } from \"../../utils/constants\";\nimport { useForm } from \"../StepsBuilder\";\n\ntype Props = {\n selectedTimezone: Timezone;\n setSelectedTimezone: (data: Timezone) => void;\n hourFormat: string;\n setHourFormat: (format:string) => void;\n};\n\nconst initCheckTimeZones = (companyTimeZoneId: string, storeLocale: string) => {\n const deviceTimeZoneId = dayjs.tz.guess();\n\n if(storeLocale === 'MX') {\n return deviceTimeZoneId === 'America/Mexico_City' && companyTimeZoneId === 'Canada/Saskatchewan';\n }\n\n return deviceTimeZoneId === companyTimeZoneId;\n};\n\nconst TimeZonePicker = ({ selectedTimezone, setSelectedTimezone, hourFormat, setHourFormat }: Props) => {\n const { t } = useTranslation();\n const [timeZones, setTimeZones] = useState(TIME_ZONE_GROUPS);\n const [today] = useState(dayjs());\n const form = useForm();\n const companyTimeZonedId = form.json.company.timeZoneId;\n const [isSameAsStore] = useState(initCheckTimeZones(form.json.company.timeZoneId, form.json.company.locale));\n\n const setTimeZone = (zone: any) => {\n const zoneId = zone?.value || companyTimeZonedId;\n form.updateTimeZone(zoneId);\n setSelectedTimezone(zone);\n };\n\n function getTZButtonLabel(selectedTimezone:Timezone) {\n return `${companyTimeZonedId === selectedTimezone.value ? t('timezones.store_timezone') : selectedTimezone.label} ${today.tz(selectedTimezone.value).format(hourFormat)}`;\n }\n\n function filterTimeZones(e: ChangeEvent) {\n let filteredResults: TimezoneGroup[] = [];\n\n TIME_ZONE_GROUPS.forEach(function (group) {\n let filteredTimezones = group.timeZones.filter(zone => {\n let zoneLabel = zone.label.toLowerCase();\n return zoneLabel.startsWith(e.target.value.toLowerCase());\n });\n if (filteredTimezones.length) {\n let filteredGroup: TimezoneGroup = {title: group.title, timeZones: filteredTimezones};\n filteredResults.push(filteredGroup);\n }\n });\n\n setTimeZones(filteredResults);\n }\n\n if(isSameAsStore) {\n return null;\n }\n\n return (\n \n {({ isOpen, onClose }) => (\n <>\n \n
\n \n \n \n { getTZButtonLabel(selectedTimezone) }\n { isOpen\n ?\n \n \n \n :\n \n \n \n }\n
\n
\n\n \n \n
\n \n
\n\n
\n {t('timezones.timezone')}\n \n
\n\n \n\n
\n {timeZones.map((group, index) => (\n
\n {group.title}\n setTimeZone(zone)} hourFormat={hourFormat} selectedTimezone={selectedTimezone}/>\n
\n ))}\n
\n
\n
\n \n )}\n
\n );\n};\n\nexport default TimeZonePicker;\n","import React from \"react\";\nimport { FormLabel } from \"../../../interfaces\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\n\ntype Props = {\n as: any;\n _default_key: string;\n company_language: string;\n labels?: FormLabel[];\n language?: string;\n styles?: any;\n setting?: string;\n setting_label?: string;\n};\n\nconst getLabel = (labels: FormLabel[], lang: string, company_language: string, setting:string, label : string) => {\n const language = lang || company_language;\n\n if(!labels || !language || !setting) {\n return label;\n }\n\n const l = _.find(labels, { lang: language, setting: setting });\n\n if(l && l.label) {\n return l.label;\n }\n\n return label;\n};\n\nconst Translate = ({ as, labels, language, _default_key, company_language, setting, setting_label }: Props) => {\n const { t } = useTranslation();\n const Wrapper = as;\n // @ts-ignore\n const label = getLabel(labels, language, company_language, setting, setting_label);\n\n if(label) {\n return {label};\n }\n\n return {t(_default_key)};\n};\n\nexport default Translate;\n","import { STEPS } from \"./constants\";\nimport _ from \"lodash\";\n\nconst helper = {\n ERROR_KEYS: [\n {\n code: '[BL-100]',\n message: 'errors.bl_100',\n translate: true\n },\n {\n code: '[BL-200]',\n message: 'errors.bl_200',\n translate: true\n },\n {\n code: '[BL-300]',\n message: 'errors.bl_300',\n translate: true\n },\n {\n code: '[BL-400]',\n message: 'errors.something_went_wrong',\n translate: true\n }\n ],\n ERROR_TYPES: [\n {\n code: '',\n message: '',\n translate: false\n }\n ],\n buildErrorMessage(defaultMsg: string, defaultCode: string, e: any | null, translate?: any): any {\n let error = {\n message: defaultMsg,\n code: defaultCode,\n step: '',\n clearData: ''\n };\n\n if(e && e.response && e.response.data) {\n const data = e.response.data;\n\n if(data && typeof data === 'string') {\n let message = 'An Error has Occurred';\n\n const errorKeys = helper.ERROR_KEYS;\n\n for(let i = 0; i < errorKeys.length; i++) {\n const key = errorKeys[i];\n if(_.includes(data, key.code)) {\n message = key.message;\n\n if(translate && typeof translate === 'function') {\n message = translate(message);\n }\n\n break;\n }\n }\n\n error.message = message;\n error.code = e.response.status;\n return error;\n } else if(data && data.errors && data.errors.length) {\n const [backendError] = data.errors;\n error.message = backendError.message;\n error.code = backendError.code;\n if(error.code === 'error.scheduler.chargeForBookingError' || error.code === 'error.scheduler.captureSignatureError') {\n error.step = STEPS.paymentDetails;\n error.clearData = 'paymentDetails';\n } else if(error.code === 'error.scheduler.dateTimeError') {\n error.step = STEPS.dateAndTime;\n error.clearData = 'dateAndTime';\n }\n\n return error;\n }\n }\n\n if(e && e.status) {\n error.code = e.status;\n }\n\n return error;\n },\n isTokenExpired: function (e: any) {\n if(e && e.response && e.response.data) {\n const data = e.response.data;\n\n if(data && data.errors && data.errors.length) {\n const [backendError] = data.errors;\n return !!(backendError && backendError.message === 'Security key expired.');\n }\n }\n\n return false;\n }\n\n};\n\n\nexport default helper;\n\n","import React from \"react\";\n\ntype Props = {\n errorMessage: string;\n};\n\nconst BLError = ({ errorMessage }: Props) => {\n return (\n
{errorMessage}
\n );\n};\n\nexport default BLError;","import React, { memo, useEffect, useRef, useState } from 'react';\nimport dayjs, {Dayjs} from 'dayjs';\nimport { Button, Center, SimpleGrid, Spinner, Stack, Flex, Heading, Text } from '@chakra-ui/react';\nimport { StarIcon } from \"@chakra-ui/icons\";\nimport { Error, TimeSlot, Timezone, WaitList } from '../../interfaces';\nimport { api, buildFormHeaders } from '../../utils/axios-api';\nimport { useForm } from '../StepsBuilder';\nimport UrlHelper from '../../utils/url-helper';\nimport DateHelper from '../../utils/date-helper';\nimport { findStepByType } from '../../utils/find-step-by-type';\nimport WaitListWrapper from \"../WaitList/WaitListWrapper\";\nimport TimeZonePicker from \"../Timezone/TimeZonePicker\";\nimport { useTranslation } from \"react-i18next\";\nimport Translate from \"../layout/translate/Translate\";\nimport ErrorHelper from \"../../utils/error-helper\";\nimport BLError from \"../Error/BLError\";\n\ntype Props = {\n selectedDate: Dayjs | undefined;\n selectedTime: Dayjs | undefined;\n onSelect: (slot: TimeSlot) => void;\n setWaitList: (data: any) => void;\n setSelectedTime: (time: any) => void;\n waitList: WaitList | undefined;\n showWaitList: boolean;\n setShowWaitList: (value: boolean) => void;\n setAvailableTimesType: (value: string | undefined) => void;\n};\n\nconst CalendarTimepicker = ({ selectedDate, selectedTime, onSelect, setWaitList, setSelectedTime, setShowWaitList, setAvailableTimesType, showWaitList, waitList }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const specialEvent = UrlHelper.getParam('specialEvent');\n const waitListSettings = form.json.waitListWidgetSettings;\n const [isLoading, setIsLoading] = useState(false);\n const [selectedTimezone, setSelectedTimezone] = useState(() => DateHelper.buildDefaultTimezones(form.json.company.timeZoneId));\n const [hourFormat, setHourFormat] = useState(form.json.locale.smallTime);\n const [availableTimeSlots, setAvailableTimeSlots] = useState([]);\n const [showWaitListBtn, setShowWaitListBtn] = useState(false);\n const formType = UrlHelper.getParam('formType');\n const appointmentTypeKey = findStepByType(form.json, 'selectAppointmentType').id;\n const retryCount = useRef(0);\n const [timeSlotError, setTimeSlotError] = useState();\n\n const fetchTimeSlots = async (): Promise => {\n const tryFetch = async () => {\n const queryString = UrlHelper.appendParams(['employeeId', 'version'], form);\n const response = await api.get(`/${formType}/getAvailableTime/${form.userData[appointmentTypeKey]}/${selectedDate?.format('YYYY-MM-DD')}${queryString ? '/' + queryString : ''}`, buildFormHeaders(form.json._key));\n retryCount.current = 0;\n\n if(response.data && response.data.error) {\n return { error: response.data.error };\n } else {\n return { data: response.data };\n }\n };\n\n try {\n return await tryFetch();\n } catch (e: any) {\n setAvailableTimeSlots([]);\n setShowWaitListBtn(false);\n\n if(ErrorHelper.isTokenExpired(e)) {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', null);\n setTimeSlotError(error);\n return { error: error };\n } else {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', e);\n setTimeSlotError(error);\n return { error: error };\n }\n }\n };\n\n const mapTimeSlots = (s: any) => {\n return {\n startTime: +s.startDateTime,\n startDateTime: dayjs(s.startDateTime),\n endDateTime: dayjs(s.endDateTime),\n fittingRoomId: s.fittingRoomId,\n duration: s.duration,\n event: specialEvent === '2' && s.event\n };\n };\n\n const returnToTimeSlots = () => {\n setShowWaitList(false);\n setWaitList((prevState: any) => {\n return { ...prevState, bookWithWaitList: false };\n });\n };\n\n const formatAriaLabel = (time: string, selectedDate?: Dayjs) => {\n let label = '';\n label += time;\n if(selectedDate) {\n label += ' ';\n label += selectedDate.format('MMMM D, YYYY ');\n }\n\n return label;\n };\n\n const generateClasses = (slot: TimeSlot, index: number) => {\n let classes = 'time-slot-button';\n if(selectedTime && slot.startDateTime.format('HH:mm') === selectedTime.format('HH:mm')) {\n classes += ' selected';\n }\n\n if(index === 0) {\n classes += ' focus-after-day';\n }\n\n return classes;\n };\n\n useEffect(() => {\n if(!selectedDate) {\n setAvailableTimeSlots([]);\n setShowWaitList(false);\n return;\n }\n\n setIsLoading(true);\n\n (async () => {\n const response = (await fetchTimeSlots());\n\n if(response.error) {\n setAvailableTimeSlots([]);\n setShowWaitListBtn(false);\n setTimeSlotError(response.error);\n setShowWaitList(false);\n setAvailableTimesType(undefined);\n } else {\n setAvailableTimeSlots(response.data?.timeSlots?.map(mapTimeSlots));\n setShowWaitListBtn(response.data?.showWaitList);\n setAvailableTimesType(response.data?.availableTimesType);\n }\n\n setIsLoading(false);\n })();\n }, [selectedDate]);\n\n if(timeSlotError && timeSlotError.message) {\n return (\n \n \n \n );\n }\n\n if(isLoading) {\n return (\n
\n \n
\n );\n }\n\n if(!availableTimeSlots.length) {\n return (\n \n {selectedDate && (\n <>\n
\n \n \n \n
\n\n {showWaitListBtn && }\n \n )}\n {!showWaitList && !selectedDate && (\n
\n {t('calendar.select_a_date')}\n
\n )}\n
\n );\n }\n\n return (\n \n {!showWaitList && (\n \n {availableTimeSlots.map((slot, index) => (\n \n ))}\n \n )}\n\n \n {!showWaitList && (\n \n )}\n\n {showWaitList && (\n
returnToTimeSlots()}>\n \n \n \n {t('appointment.return_to_timeslots')}\n
\n )}\n\n {showWaitListBtn && waitListSettings && waitListSettings.mode === '1' && (\n \n )}\n
\n\n
\n );\n};\n\nfunction areEqual(prevProps: Props, nextProps: Props): boolean {\n const results: boolean[] = [];\n results.push(prevProps.selectedDate === nextProps.selectedDate);\n results.push(prevProps.selectedTime === nextProps.selectedTime);\n results.push(prevProps.showWaitList === nextProps.showWaitList);\n return !results.some(i => !i);\n}\n\nexport default memo(CalendarTimepicker, areEqual);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Box, FormControl, FormErrorMessage, Input, Stack } from '@chakra-ui/react';\nimport dayjs, { Dayjs } from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport arraySupport from 'dayjs/plugin/arraySupport';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport { updateIframeHeight } from '../../utils/update-iframe-height';\nimport {useForm} from '../StepsBuilder';\nimport StepsNavigation from '../StepsNavigation';\nimport { useForm as useReactHookForm } from 'react-hook-form';\nimport { DynamicStepProps } from '../DynamicStep';\nimport { Error, TimeSlot, WaitList, WaitListTimeSlot } from '../../interfaces';\nimport UrlHelper from '../../utils/url-helper';\nimport DateHelper from '../../utils/date-helper';\nimport { api, buildFormHeaders } from '../../utils/axios-api';\nimport CalendarNavigation from '../Calendar/CalendarNavigation';\nimport CalendarDatepicker from '../Calendar/CalendarDatepicker';\nimport CalendarTimepicker from '../Calendar/CalendarTimepicker';\nimport IframeEvents from \"../../utils/iframe-events\";\nimport { findStepByType } from '../../utils/find-step-by-type';\nimport { useTranslation } from \"react-i18next\";\nimport BLError from \"../Error/BLError\";\nimport ErrorHelper from \"../../utils/error-helper\";\n\n// Enable DayJS plugins\ndayjs.extend(isoWeek);\ndayjs.extend(arraySupport);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(advancedFormat);\n\ntype AvailableDates = {\n date: Dayjs;\n timeSlotCount: number;\n date_string: string;\n availableTimeSlot: boolean;\n event: boolean;\n};\n\nconst today = dayjs();\n\nconst initShowWaitList = (waitList: WaitList | undefined) => {\n if(waitList && waitList.bookWithWaitList) {\n return true;\n }\n\n return false;\n};\n\nconst SelectDateAndTime = ({ step }: DynamicStepProps) => {\n const { t } = useTranslation();\n const form = useForm();\n const methods = useReactHookForm({ mode: 'onChange' });\n const [isLoading, setIsLoading] = useState(false);\n const [availableDates, setAvailableDates] = useState([]);\n\n const layoutType = form.json.layoutType;\n const formType = UrlHelper.getParam('formType');\n const appointmentTypeKey = findStepByType(form.json, 'selectAppointmentType').id;\n\n // Restore values\n // ==============\n const [currentMonth, setCurrentMonth] = useState(form.userData[step.id]?.date || today.startOf('month'));\n const [selectedDate, setSelectedDate] = useState(form.userData[step.id]?.date || today);\n const [selectedTime, setSelectedTime] = useState(form.userData[step.id]?.time ? form.userData[step.id]?.time : null);\n const [availableTimesType, setAvailableTimesType] = useState(form.userData[step.id]?.availableTimesType ? form.userData[step.id]?.availableTimesType : undefined);\n const [selectedFittingRoom, setSelectedFittingRoom] = useState(form.userData[step.id]?.fittingRoomId);\n const [selectedDuration, setSelectedDuration] = useState(form.userData[step.id]?.duration);\n const [selectedStartTime, setSelectedStartTime] = useState(form.userData[step.id]?.startTime);\n const [waitList, setWaitList] = useState(form.userData[step.id]?.waitList);\n const [showWaitList, setShowWaitList] = useState(() => initShowWaitList(waitList));\n const [dateTimeError, setDateTimeError] = useState();\n\n const retryCount = useRef(0);\n const fetchTimePeriods = async(): Promise => {\n const startMonthDate = currentMonth.startOf('month').format('YYYY-MM-DD');\n const endMonthDate = currentMonth.endOf('month').format('YYYY-MM-DD');\n\n const tryFetch = async () => {\n const queryString = UrlHelper.appendParams(['employeeId', 'version'], form);\n const response = await api.get(`/${formType}/getAvailableTimePeriod/${form.userData[appointmentTypeKey]}/${startMonthDate}/${endMonthDate}${queryString}`, buildFormHeaders(form.json._key));\n retryCount.current = 0;\n\n if(response.data && response.data.error) {\n return { error: response.data.error };\n } else {\n return { data: response.data };\n }\n };\n\n try {\n return await tryFetch();\n } catch(e: any) {\n setIsLoading(false);\n setAvailableDates([]);\n\n if(ErrorHelper.isTokenExpired(e)) {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', null, t);\n setDateTimeError(error);\n return { error: error };\n } else {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', e, t);\n setDateTimeError(error);\n return { error: error };\n }\n }\n };\n\n const filterTimeSlots = (timePeriod: any) => {\n return !!(timePeriod && timePeriod.availableTimeSlot && timePeriod.timeSlotCount > 0);\n };\n\n const mapTimeSlots = (timePeriod: any) => {\n return {\n date: dayjs(timePeriod.date),\n date_string: timePeriod.dateString,\n timeSlotCount: timePeriod.timeSlotCount,\n availableTimeSlot: timePeriod.availableTimeSlot,\n event: timePeriod.hasEvent\n };\n };\n\n // Hooks\n // =====\n useEffect(() => {\n setIsLoading(true);\n (async () => {\n const response = (await fetchTimePeriods());\n\n if(response.error) {\n setDateTimeError(response.error);\n setAvailableDates([]);\n\n } else {\n setAvailableDates(response.data.filter(filterTimeSlots).map(mapTimeSlots));\n }\n\n setIsLoading(false);\n })();\n }, [currentMonth]);\n\n useEffect(() => {\n // Validate form when time is selected\n methods.setValue('select-date-time', selectedTime, { shouldValidate: Boolean(selectedTime) });\n\n form.updateUserData({\n [step.id]: {\n date: selectedDate || undefined,\n time: selectedTime || undefined,\n startTime: selectedStartTime || undefined,\n fittingRoomId: selectedFittingRoom || undefined,\n duration: selectedDuration || undefined,\n availableTimesType: availableTimesType || undefined,\n waitList: undefined\n }\n });\n }, [selectedTime]);\n\n useEffect(() => {\n methods.setValue('select-wait-list', waitList, { shouldValidate: false });\n form.updateUserData({\n [step.id]: {\n date: selectedDate,\n time: selectedTime,\n startTime: selectedStartTime || undefined,\n fittingRoomId: selectedFittingRoom || undefined,\n duration: selectedDuration || undefined,\n availableTimesType: availableTimesType || undefined,\n waitList: waitList\n }\n });\n }, [waitList]);\n\n useEffect(() => {\n updateIframeHeight();\n });\n\n // Event handlers\n // ==============\n const handleNextClick = () => {\n // Reset selected date&time values\n setSelectedDate(undefined);\n setSelectedTime(undefined);\n setSelectedFittingRoom(undefined);\n setSelectedDuration(undefined);\n setSelectedStartTime(undefined);\n setShowWaitList(false);\n setWaitList((prevState: any) => { return { ...prevState, bookWithWaitList: false, timeSlots: [], isAllDay: true };});\n\n const newCurrentMonth = currentMonth.add(1, 'month');\n setCurrentMonth(newCurrentMonth);\n };\n\n const handlePrevClick = () => {\n // Reset selected date&time values\n setSelectedDate(undefined);\n setSelectedTime(undefined);\n setSelectedFittingRoom(undefined);\n setSelectedDuration(undefined);\n setSelectedStartTime(undefined);\n setShowWaitList(false);\n setWaitList((prevState: any) => { return { ...prevState, bookWithWaitList: false, timeSlots: [], isAllDay: true };});\n\n const newCurrentMonth = currentMonth.subtract(1, 'month');\n setCurrentMonth(newCurrentMonth);\n };\n\n const handleDateSelect = async (date: Dayjs) => {\n setSelectedDate(date);\n setSelectedTime(undefined);\n setSelectedFittingRoom(undefined);\n setSelectedDuration(undefined);\n setSelectedStartTime(undefined);\n setWaitList((prevState: any) => { return { ...prevState, bookWithWaitList: false, timeSlots: [], isAllDay: true };});\n setShowWaitList(false);\n let next = document.querySelector('.focus-after-day');\n if(next) {\n (next as HTMLElement).focus();\n }\n };\n\n const handleTimeSelect = async (slot: TimeSlot) => {\n methods.setValue('select-date-time', slot.startDateTime, { shouldValidate: true });\n setSelectedTime(slot.startDateTime);\n setSelectedFittingRoom(slot.fittingRoomId);\n setSelectedDuration(slot.duration);\n setSelectedStartTime(slot.startTime);\n setWaitList((prevState: any) => { return { ...prevState, bookWithWaitList: false, timeSlots: [], isAllDay: true };});\n setShowWaitList(false);\n };\n\n const handleSubmit = (formData: any) => {\n IframeEvents.dateTimeSelected(formData);\n form.goToNextStep(true);\n };\n\n const validDates = (waitList: any) => {\n if(waitList.isAllDay) {\n return true;\n } else if(invalidTimeSlot(DateHelper.validateWaitListTimeSlots(waitList.timeSlots))) {\n return false;\n }\n\n return true;\n };\n\n const invalidTimeSlot = (timeSlots: WaitListTimeSlot[]) => {\n let invalid = false;\n\n if(timeSlots.length === 0) {\n return true;\n }\n\n for(let i = 0; i < timeSlots.length; i++) {\n const slot = timeSlots[i];\n if(!slot || slot.hasError) {\n invalid = true;\n break;\n }\n }\n\n return invalid;\n };\n\n return (\n \n {dateTimeError && dateTimeError.message && }\n \n \n \n \n\n \n \n\n \n \n\n {/* Make invisible input that represents selected date & time to allow ReactHookForm to validate that */}\n {waitList && waitList.bookWithWaitList && (\n \n validDates(value) } })} />\n {methods.formState.errors['select-wait-list'] && t('appointment.errors.select_wait_list')}\n \n )}\n\n {(!waitList || !waitList.bookWithWaitList) && (\n \n \n {methods.formState.errors['select-date-time'] && t('appointment.errors.select_date_time')}\n \n )}\n \n\n {layoutType === 'steps' && }\n \n );\n};\n\nexport default SelectDateAndTime;\n","const helper = {\n onKeyDown: function(e: any) {\n if(e) {\n const code = (e.keyCode ? e.keyCode : e.which);\n if(code === 10 || code === 11 || e.code === 'Enter') {\n e.preventDefault();\n return false;\n }\n }\n }\n};\n\nexport default helper;\n","import React, {ChangeEvent, useState} from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel, Input } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormStep, FormField } from '../../interfaces';\nimport { useFormTheme } from '../../contexts/useFormTheme';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from \"react-i18next\";\nimport InputHelper from \"../../utils/input-event-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormField;\n};\n\nconst initMaxLength = (field: FormField) => {\n let max = 255;\n\n if(field && field.id) {\n switch(field.id) {\n case \"firstName\":\n case \"lastName\":\n case \"addressOne\":\n case \"addressTwo\":\n case \"address1\":\n case \"address2\":\n max = 100;\n break;\n case \"city\":\n max = 50;\n break;\n case \"state\":\n max = 20;\n break;\n case \"streetSize\":\n case \"dressSize\":\n max = 25;\n break;\n case \"zip\":\n max = 10;\n break;\n }\n }\n\n return max;\n};\n\nconst Text = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const formTheme = useFormTheme();\n const [max] = useState(() => initMaxLength(field));\n const { register, formState: { errors }, setValue } = useFormContext();\n\n const handleChange = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.value\n }\n });\n };\n\n return (\n \n {field.label}\n InputHelper.onKeyDown(e)}\n maxLength={max}\n bgColor=\"white\"/>\n {field.helpText && {field.helpText}}\n {errors[field.id] && t('common.field_required')}\n \n );\n};\n\nexport default Text;\n","import { REGEX } from \"./constants\";\n\nconst helper = {\n validate: function (email: string): boolean {\n if(!email) return false;\n var emailParts = email.split('@');\n if(emailParts.length !== 2) return false;\n\n var account = emailParts[0];\n var address = emailParts[1];\n\n if(account.length > 64) return false;\n else if(address.length > 255) return false;\n var domainParts = address.split('.');\n if(domainParts.some(function(part) {\n return part.length > 63;\n })) return false;\n\n return REGEX.EMAIL_FUNC.test(email);\n }\n};\n\nexport default helper;\n","import React, { ChangeEvent, useCallback } from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel, Input } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useFormTheme } from '../../contexts/useFormTheme';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from \"react-i18next\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport EmailHelper from \"../../utils/email-helper\";\nimport _ from 'lodash';\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst Email = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const formTheme = useFormTheme();\n const { register, formState: { errors }, clearErrors, setValue } = useFormContext();\n\n const handleChange = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.value\n }\n });\n };\n\n const validate = (email: string, field: any) => {\n if(_.isEmpty(email) && field && !field.required) {\n return true;\n }\n\n return EmailHelper.validate(email);\n };\n\n const clearInputError = useCallback(\n event => {\n if(errors[event.target.name]) {\n clearErrors(event.target.name);\n }\n }, [clearErrors, errors]);\n\n return (\n \n {field.label}\n validate(value, field) }})}\n onBlur={handleChange}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n bgColor=\"white\"\n maxLength={255}\n onChange={clearInputError}\n />\n {field.helpText && {field.helpText}}\n {errors[field.id] && t('errors.invalid_email')}\n \n );\n};\n\nexport default Email;\n","import React, { forwardRef, useState } from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel, Input } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useFormTheme } from '../../contexts/useFormTheme';\nimport DatePicker from 'react-datepicker'\nimport { useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport 'react-datepicker/dist/react-datepicker.css';\nimport dayjs from \"dayjs\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport _ from \"lodash\";\nimport DateHelper from \"../../utils/date-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst getDate = (date: Date) => {\n if(date) {\n try {\n return dayjs(date).format('YYYY-MM-DD');\n } catch(e) {\n console.log('failed to parse date');\n return date.toDateString();\n }\n }\n\n return '';\n};\n\nconst initDate = (form: any, field: any, step: any) => {\n if(form.userData && form.userData[step.id] && form.userData[step.id][field.id]) {\n const date = form.userData[step.id][field.id];\n\n\n if(date) {\n return dayjs(date).toDate();\n }\n }\n\n return undefined;\n};\n\nconst Date = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const formTheme = useFormTheme();\n const { register, formState: { errors }, setValue } = useFormContext();\n const [selectedDate, setSelectedDate] = useState(() => initDate(form, field, step));\n const ChakraInput = forwardRef(({ value, onClick }: any, ref) => (\n InputHelper.onKeyDown(e)}\n bgColor=\"white\"\n placeholder={form.json.locale.mediumDate?.toLowerCase()}\n readOnly\n />\n ));\n\n const handleChange = (d: Date) => {\n const date = getDate(d);\n setValue(`${field.id}` as const, date, { shouldValidate: true });\n setSelectedDate(d);\n\n\n form.updateUserData({\n [step.id]: {\n [field.id]: date\n }\n });\n };\n\n const validate = (date: string, format:string, field: any) => {\n if(_.isEmpty(date) && field && !field.required) {\n return true;\n }\n\n let isValidDate = DateHelper.validate(date, format);\n\n if(!isValidDate) {\n setValue(`${field.id}` as const, undefined, { shouldValidate: true });\n setSelectedDate(undefined);\n }\n\n return isValidDate as any;\n };\n\n return (\n \n {field.label}\n validate(value, form.json.locale.mediumDate, field) }})}\n dateFormat={form.json.locale.mediumDate}\n selected={selectedDate}\n onChange={handleChange}\n maxDate={dayjs().add(5, 'year').toDate()}\n yearDropdownItemNumber={100}\n scrollableYearDropdown={true}\n showYearDropdown\n customInput={}\n autoComplete={\"off\"}\n isClearable\n />\n {field.helpText && {field.helpText}}\n {errors[field.id] && t('common.field_required')}\n \n );\n};\n\nexport default Date;\n","import React, { ChangeEvent, useCallback, useEffect, useState } from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel, Input } from '@chakra-ui/react';\nimport InputMask from 'react-input-mask-format';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useFormContext } from 'react-hook-form';\nimport Select from \"react-select\";\nimport get from 'lodash/get';\nimport includes from 'lodash/includes';\nimport { useTranslation } from \"react-i18next\";\nimport { COUNTRIES_LOCALE } from \"../../utils/constants\";\nimport InputHelper from \"../../utils/input-event-helper\";\n\nconst MOBILE = '3';\nconst PHONE_MAX_LENGTH = 15;\n\nconst PHONE_TYPES: any[] = [\n {\n label: 'common.phone.home',\n value: '1'\n },\n {\n label: 'common.phone.work',\n value: '2'\n },\n {\n label: 'common.phone.mobile',\n value: '3'\n }\n];\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst getPhoneMaskByCountry = (value: string, phoneType: string) => {\n var country = COUNTRIES_LOCALE.find((c: any) => c.country === value) as any;\n\n if(country) {\n let mask = \"\";\n let min:number[] = [];\n if(!phoneType) {\n mask = country.mobilePhoneMask;\n min = country.min;\n } else if(phoneType === \"1\") {\n mask = country.phoneMask;\n min = country.min;\n } else if(phoneType === \"2\") {\n mask = country.phoneMaskWithExtension;\n min = country.min;\n } else if(phoneType === \"3\") {\n mask = country.mobilePhoneMask;\n min = country.min;\n }\n\n return {\n mask: mask,\n min: min\n }\n }\n\n return {\n mask: '',\n min: []\n };\n};\n\nconst getPhoneMask = (form: any, type: string) => {\n if(type === '1') {\n return form.json.locale.phoneMask;\n } else if(type === '2') {\n return form.json.locale.phoneMaskWithExt;\n } else if(type === '3') {\n return form.json.locale.mobilePhoneMask;\n }\n\n return form.json.locale.phoneMask;\n};\n\nconst initMask = (form: any, type: string) => {\n if(form && form.userData && form.userData.country) {\n return getPhoneMaskByCountry(form.userData.country, type).mask;\n }\n\n return getPhoneMask(form, type);\n};\n\nconst initMin = (form: any, type: string) => {\n if(form && form.userData && form.userData.country) {\n return getPhoneMaskByCountry(form.userData.country, type).min;\n }\n\n return form.json.locale.min;\n};\n\nconst initDefaultValue = (type: string, translate: any) => {\n for(let i = 0; i < PHONE_TYPES.length; i++) {\n const phoneType = PHONE_TYPES[i];\n\n if(phoneType && phoneType.value === type) {\n return {\n label: translate(phoneType.label),\n value: phoneType.value\n };\n }\n }\n\n return { label: translate('common.phone.mobile'), value: MOBILE };\n};\n\nconst Phone = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const [type, setType] = useState(get(form.userData, `${step.id}.${field.id}.type`) || MOBILE);\n const [value, setPhone] = useState(get(form.userData, `${step.id}.${field.id}.value`) || '');\n const [defaultValue] = useState(() => initDefaultValue(type, t));\n const [mask, setMask] = useState(()=> initMask(form, type));\n const [phoneMin, setPhoneMin] = useState(()=> initMin(form, type));\n const { register, formState: { errors }, clearErrors, setValue, watch } = useFormContext();\n const country = watch(\"country\");\n\n useEffect(() => {\n if(country) {\n const { mask, min } = getPhoneMaskByCountry(country, type);\n setMask(mask);\n setPhoneMin(min);\n } else {\n setMask(getPhoneMask(form, type));\n setPhoneMin(form.json.locale.min);\n }\n }, [country]);\n\n const handleValueChange = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n setPhone(e.target.value);\n };\n\n const handlePhoneTypeChange = ({ value }: any) => {\n setMask(initMask(form, value));\n setType(value);\n };\n\n useEffect(() => {\n form.updateUserData({\n [step.id]: {\n [field.id]: {\n value,\n type\n }\n }\n })\n }, [value, type]);\n\n const toString = (value: string) => {\n return `${value}` as const;\n };\n\n const clearInputError = useCallback(\n event => {\n if(errors[event.target.name]) {\n clearErrors(event.target.name);\n }\n }, [clearErrors, errors]);\n\n const validatePhone = (value: any) => {\n if(value && value.length) {\n const number = value.replace(/\\D/g,'');\n const length = number && number.length ? number.length : 0;\n\n if(length === 0) {\n return false;\n }\n\n if(phoneMin && phoneMin.length && !includes(phoneMin, length)) {\n return false;\n }\n\n if(length > PHONE_MAX_LENGTH) {\n return false;\n }\n }\n\n return true;\n };\n\n const PHONE_NUMBER_TYPES: any = [\n {\n label: 'common.phone.home',\n value: '1'\n },\n {\n label: 'common.phone.work',\n value: '2'\n },\n {\n label: 'common.phone.mobile',\n value: '3'\n }\n ];\n\n return (\n \n {field.label}\n
\n validatePhone(value) } })}\n onBlur={handleValueChange}\n onChange={clearInputError}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n bgColor=\"white\"\n />\n \n (<>) }}\n classNamePrefix=\"react-select\"\n onChange={handlePhoneTypeChange}\n defaultValue={defaultValue}\n options={PHONE_NUMBER_TYPES.map((type: any) => {\n return { label: t(type.label), value: type.value };\n })}\n />\n \n
\n {field.helpText && {field.helpText}}\n {errors[field.id] && t('errors.enter_valid_phone_number')}\n
\n );\n};\n\nexport default Phone;\n","import React, { ChangeEvent, useState } from 'react';\nimport _ from \"lodash\";\nimport {\n Checkbox as ChakraCheckbox,\n FormControl,\n FormErrorMessage,\n FormHelperText,\n FormLabel,\n Stack\n} from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport get from 'lodash/get';\nimport includes from 'lodash/includes';\nimport { useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport InputHelper from \"../../utils/input-event-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst NON_REQUIRED: string[] = [\n 'emailOptIn',\n 'smsOptIn'\n];\n\nconst Checkbox = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const { register, formState: { errors }, setValue, getValues } = useFormContext();\n const [isChecked, setIsChecked] = useState(get(form.userData, `${step.id}.${field.id}`) || false);\n\n const handleChangeOnOption = (option: any, checked: boolean) => {\n //loop errors, if error.red contains option.id\n _.forEach(field.options, (o) => {\n if(errors && o && o.id) {\n errors[o.id] = undefined;\n }\n });\n\n setValue(`${option.id}` as const, option.value, { shouldValidate: true });\n form.updateUserData({\n [step.id]: {\n [field.id]: {\n [option.id]: checked\n }\n }\n });\n };\n\n const handleChange = (e: ChangeEvent) => {\n setIsChecked(e.target.checked);\n setValue(`${e.target.name}` as const, e.target.checked, { shouldValidate: true });\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.checked\n }\n });\n };\n\n const validateMultiple = (value: any, field: any) => {\n if(includes(NON_REQUIRED, field?.id)) {\n return true;\n }\n\n if(!field.required || (value && typeof value === 'string') || (value && typeof value === 'boolean')) {\n return true;\n }\n\n const checks = field.options?.filter(function(option: any) {\n return !!(option && option.value);\n }).map(function(option: any) {\n return `${option.id}`;\n });\n\n const checkboxes = getValues(checks);\n const validCheckBoxes = checkboxes.filter((v: any) => typeof v === 'string');\n return !!(validCheckBoxes && validCheckBoxes.length);\n };\n\n const validateSingle = (value: any, field: any) => {\n if(includes(NON_REQUIRED, field?.id)) {\n return true;\n }\n\n return !field.required || (value && typeof value === 'string') || (value && typeof value === 'boolean');\n };\n\n const isOptionChecked = (step: any, field: any, option: any) => {\n let isChecked: any = get(form.userData, `${step.id}.${field.id}.${option.id}`);\n\n if(isChecked === undefined) {\n isChecked = get(form.userData, `${step.id}.${option.id}`);\n }\n\n return isChecked;\n };\n\n const isRequired = (field: any) => {\n if(includes(NON_REQUIRED, field?.id)) {\n return false;\n }\n\n return field.required;\n };\n\n const hasError = (field: any) => {\n if(field && field.id && errors && errors[field.id]) {\n return true;\n }\n\n if(errors && field && field.options && field.options.length && field.options.length > 1) {\n let hasError = false;\n\n for(let i = 0; i < field.options.length; i++) {\n const option = field.options[i];\n if(option && option.id) {\n const error = errors[option.id];\n\n if(error) {\n hasError = true;\n break;\n }\n }\n }\n\n return hasError;\n }\n\n return false;\n };\n\n return (\n \n {field.options.length > 1 && (\n <>\n {field.label}\n \n {field.options.map(option => (\n validateMultiple(value, field) } })}\n isChecked={isOptionChecked(step, field, option)}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n onChange={(e) => handleChangeOnOption(option, e.target.checked)}>\n {option.label} {get(form.userData, `${step.id}.${field.id}.${option.id}`)}\n \n ))}\n \n \n )\n }\n\n {field.options.length === 1 && (\n \n validateSingle(value, field) } })}\n isChecked={get(form.userData, `${step.id}.${field.id}`)}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n onChange={(e) => handleChange(e)}>\n {field.label} {get(form.userData, `${step.id}.${field.id}`)}\n \n \n )}\n {field.helpText && {field.helpText}}\n {hasError(field) && t('common.field_required')}\n \n );\n};\n\nexport default Checkbox;\n","import { FormField, FormStep } from '../interfaces';\nimport { ComponentType } from 'react';\nimport Text from './fields/Text';\nimport Email from './fields/Email';\nimport Date from './fields/Date';\nimport Phone from './fields/Phone';\nimport Checkbox from './fields/Checkbox';\nimport Textarea from './fields/Textarea';\nimport Radio from './fields/Radio';\nimport BLSelect from './fields/BLSelect';\nimport Number from './fields/Number';\nimport Currency from \"./fields/Currency\";\n\nconst components: { [name: string]: ComponentType } = {\n text: Text,\n textarea: Textarea,\n email: Email,\n date: Date,\n phone: Phone,\n checkbox: Checkbox,\n radio: Radio,\n select: BLSelect,\n number: Number,\n currency: Currency\n};\n\nexport type Props = {\n step: FormStep;\n field: FormField;\n}\n\nconst DynamicField = (props: Props) => {\n const Placeholder = () => { return

Missing field component: {props.field.type}

; };\n\n const Component = components[props.field.type] || Placeholder;\n\n //@ts-ignore\n return ;\n};\n\nexport default DynamicField;\n","import React, {ChangeEvent, useState} from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel, Textarea as ChakraTextarea } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useFormTheme } from '../../contexts/useFormTheme';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from \"react-i18next\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport UrlHelper from \"../../utils/url-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst Textarea = ({ field, step }: Props) => {\n let MAX_LENGTH = 3000;\n\n const formType = UrlHelper.getParam('formType');\n if(formType === 'request' && field?.id === 'notes') {\n MAX_LENGTH = 1000;\n }\n\n const { t } = useTranslation();\n const form = useForm();\n const formTheme = useFormTheme();\n const { register, formState: { errors }, setValue } = useFormContext();\n const [textCount, setTextCount] = useState(MAX_LENGTH);\n\n const handleBlur = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n setTextCount(calculateMaxCount(e.target.value.length, MAX_LENGTH));\n\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.value\n }\n });\n };\n\n const handleChange = (e: ChangeEvent) => {\n setTextCount(calculateMaxCount(e.target.value.length, MAX_LENGTH));\n };\n\n function calculateMaxCount(count: number, max: number) {\n if(count > max) {\n return max;\n }\n\n return max - count;\n }\n\n return (\n \n {field.label}\n InputHelper.onKeyDown(e)} bgColor=\"white\"/>\n {textCount}/{MAX_LENGTH}\n {field.helpText && {field.helpText}}\n {/* @ts-ignore */}\n {errors && errors[field.id] && errors[field.id].message && t(errors[field.id].message)}\n \n );\n};\n\nexport default Textarea;\n","import React, {ChangeEvent, useEffect, useState} from 'react';\nimport {\n FormControl,\n FormErrorMessage,\n FormHelperText,\n FormLabel,\n Radio as ChakraRadio,\n RadioGroup,\n Stack\n} from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useTranslation } from \"react-i18next\";\nimport { useFormContext } from \"react-hook-form\";\nimport get from \"lodash/get\";\nimport InputHelper from \"../../utils/input-event-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst initOptions = (field: any, step: any) => {\n return field!.options.map((option:any) => {\n let value = option.value;\n\n if(step && step.id === 'additionalDetails') {\n value = option.id;\n }\n\n return {\n value: value,\n label: option.label\n };\n });\n};\n\nconst Radio = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const { register, formState: { errors }, setValue } = useFormContext();\n const [options] = useState(() => initOptions(field, step));\n const [defaultValue] = useState(get(form.userData, `${step.id}.${field.id}`));\n\n const handleChange = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.value\n }\n });\n };\n \n useEffect(() => {\n if(defaultValue) {\n setValue(`${field.id}` as const, defaultValue, { shouldValidate: false });\n form.updateUserData({\n [step.id]: {\n [field.id]: defaultValue\n }\n });\n }\n }, [defaultValue]);\n\n return (\n \n {field.label}\n \n \n {options.map(option => (\n InputHelper.onKeyDown(e)}\n onChange={handleChange}>\n {option.label}\n \n ))}\n \n \n {field.helpText && {field.helpText}}\n {errors[field.id] && t('common.field_required')}\n \n );\n};\n\nexport default Radio;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormField, FormSelect, FormStep } from '../../interfaces';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from \"react-i18next\";\nimport Select from \"react-select\";\nimport { COUNTRIES_LOCALE } from \"../../utils/constants\";\n\ntype Props = {\n step: FormStep;\n field: FormSelect;\n};\n\nconst toString = (value: string) => {\n return `${value}` as const;\n};\n\nconst validateSelect = (value: any, field: FormField) => {\n if(field && field.required && !value) {\n return 'common.field_required';\n }\n\n return true;\n};\n\nconst getStatesByCountry = (value: string) => {\n const country = COUNTRIES_LOCALE.find((c: any) => c.country === value) as any;\n\n if(country && country.usesStates) {\n return [...country.states];\n }\n\n return [];\n};\n\nconst initOptions = (field: any, step: any, translate: any) => {\n let options = field!.options.map((option:any) => {\n let value = option.value;\n\n if(step && step.id === 'additionalDetails' && field.type !== 'checkbox') {\n value = option.id;\n }\n\n return {\n value: value,\n label: option.label\n };\n });\n\n if(step && step.id === 'additionalDetails' && options && options.length) {\n let label = 'Select One';\n\n if(translate && typeof translate === 'function') {\n try {\n label = translate('common.select_one');\n } catch (e) {\n console.log('Failed to translate', e);\n }\n }\n\n options.unshift({\n label: label,\n value: ''\n });\n }\n\n return options;\n};\n\nconst initDefaultValue = (field: any, data: any, step: any, options: any[]) => {\n if(step?.id && data?.[step.id]?.[field.id]) {\n const value = data[step.id][field.id];\n let option = null;\n\n if(field?.customFieldId != null) {\n option = field.options?.find((o: any) => o.id === value) as any;\n } else if(field.id === 'state') {\n option = options?.find((o: any) => o.value === value) as any;\n } else {\n option = field?.options.find((o: any) => o.value === value) as any;\n }\n\n if(option) {\n return {\n label: option.label,\n value: option.value\n };\n }\n }\n\n const [option] = options;\n\n if(option) {\n return {\n label: option.label,\n value: option.value\n }\n }\n\n return undefined;\n};\n\nconst BLSelect = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const [options, setOptions] = useState(() => initOptions(field, step, t));\n const [defaultValue] = useState(() => initDefaultValue(field, form.userData, step, options));\n const [selectOption, setSelectOption] = useState(defaultValue);\n const setCount = useRef(0);\n const { register, formState: { errors }, setValue, watch } = useFormContext();\n const country = watch(\"country\");\n const select = watch(field.id);\n\n useEffect(() => {\n if(field.id === 'state') {\n if(country) {\n const states = getStatesByCountry(country);\n if(states && states.length) {\n states.unshift({\n label: t('common.select_state'),\n value: ''\n });\n\n const option = states?.find((o: any) => o.value === form.userData?.[step.id]?.[field.id]) as any;\n\n if(!option) {\n const [state] = states;\n updateSelectState(state, states, false);\n }\n }\n\n setOptions(states);\n }\n }\n }, [country]);\n\n useEffect(() => {\n if(setCount.current === 0 && select) {\n setCount.current = 2;\n } else if(defaultValue) {\n const { value } = defaultValue;\n if(value && setCount.current <= 1) {\n setCount.current++;\n onSelectChanged({ value }, false);\n }\n }\n }, [select]);\n\n const handleChange = ({ value }: any) => {\n onSelectChanged({ value }, true);\n };\n\n const onSelectChanged = ({ value }: any, validate: boolean) => {\n const option = options?.find((o: any) => o.value === value) as any;\n if(option) {\n setSelectOption(option);\n setValue(`${field.id}` as const, value, { shouldValidate: validate });\n form.updateUserData({\n [step.id]: {\n [field.id]: value\n }\n });\n }\n };\n\n const updateSelectState = ({ value }: any, currentOptions: any[], validate: boolean) => {\n const option = currentOptions?.find((o: any) => o.value === value) as any;\n if(option) {\n setSelectOption(option);\n setValue(`${field.id}` as const, value, { shouldValidate: validate });\n form.updateUserData({\n [step.id]: {\n [field.id]: value\n }\n });\n }\n };\n\n if(!options || !options.length || !defaultValue) {\n return null;\n }\n\n // @ts-ignore\n return (\n \n {field.label}\n validateSelect(value, field) }\n })}\n components={{IndicatorSeparator: ({ children, ...rest }) => (<>)}}\n classNamePrefix=\"react-select\"\n placeholder={field.placeholder}\n onChange={handleChange}\n value={selectOption}\n defaultValue={defaultValue}\n options={options}\n />\n {field.helpText && {field.helpText}}\n {/* @ts-ignore */}\n {errors && errors[field.id] && errors[field.id].message && t(errors[field.id].message)}\n \n );\n};\n\nexport default BLSelect;\n","import React, { ChangeEvent } from 'react';\nimport { FormControl, FormErrorMessage, FormHelperText, FormLabel, Input } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useFormTheme } from '../../contexts/useFormTheme';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from \"react-i18next\";\nimport InputHelper from \"../../utils/input-event-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst Number = ({ field, step }: Props) => {\n const MAX = 99999999;\n const { t } = useTranslation();\n const form = useForm();\n const formTheme = useFormTheme();\n const { register, formState: { errors }, setValue } = useFormContext();\n\n const handleChange = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.value\n }\n });\n };\n\n return (\n \n {field.label}\n InputHelper.onKeyDown(e)} bgColor=\"white\"/>\n {field.helpText && {field.helpText}}\n {errors[field.id] && t('common.field_required')}\n \n );\n};\n\nexport default Number;\n","import React, { ChangeEvent } from 'react';\nimport {FormControl, FormErrorMessage, FormHelperText, FormLabel, Input} from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { FormCheckbox, FormStep } from '../../interfaces';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from \"react-i18next\";\nimport CurrencyInput from 'react-currency-input-field';\nimport InputHelper from \"../../utils/input-event-helper\";\n\ntype Props = {\n step: FormStep;\n field: FormCheckbox;\n};\n\nconst Currency = ({ field, step }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const { currencySymbol, thousandsSeparator } = form.json.locale;\n const decimalSeparator = thousandsSeparator === '.' ? ',' : '.';\n const { register, formState: { errors }, setValue } = useFormContext();\n\n const handleChange = (e: ChangeEvent) => {\n setValue(`${e.target.name}` as const, e.target.value, { shouldValidate: true });\n\n form.updateUserData({\n [step.id]: {\n [field.id]: e.target.value\n }\n });\n };\n\n return (\n \n {field.label}\n InputHelper.onKeyDown(e)}\n bgColor=\"white\"/>\n {field.helpText && {field.helpText}}\n {errors[field.id] && t('common.field_required')}\n \n );\n};\n\nexport default Currency;\n","// @ts-nocheck\nimport React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { FormProvider, useForm as useReactHookForm } from \"react-hook-form\";\nimport { Stack } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport DynamicField from '../DynamicField';\nimport { FormField, FormStep } from '../../interfaces';\nimport { DynamicStepProps } from '../DynamicStep';\nimport StepsNavigation from '../StepsNavigation';\nimport { updateIframeHeight } from '../../utils/update-iframe-height';\nimport _ from \"lodash\";\nimport StepHelper from \"../../utils/step-helper\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport { useTranslation } from \"react-i18next\";\nimport IframeEvents from \"../../utils/iframe-events\";\n\nfunction getHTMLInputElement(selector: string) : HTMLInputElement {\n return document.querySelector(selector) as HTMLInputElement;\n}\n\nfunction getValue(selector: string) {\n const ele = getHTMLInputElement(selector);\n return ele?.value;\n}\n\nconst CustomForm = ({ step, loading }: DynamicStepProps) => {\n const form = useForm();\n const { t } = useTranslation();\n const [isLoading, setLoading] = useState(false);\n const [formErrorMessage, setFormErrorMessage] = useState('');\n const methods = useReactHookForm({\n defaultValues: form.userData[step.id],\n mode: 'onSubmit'\n });\n const layoutType = form.json.layoutType;\n const currentStepIdx = StepHelper.determineCurrentStepIndex(form);\n const lastStepIndex = StepHelper.determineLastStepIndex(form.userData, form.json);\n\n useEffect(() => {\n if(loading !== undefined) {\n setLoading(loading);\n }\n }, [loading]);\n\n useLayoutEffect(() => {\n updateIframeHeight();\n }, []);\n\n const handleSubmit = (formData: any) => {\n if(step && step.id === 'requiredFields') {\n IframeEvents.requiredFieldsData(form?.userData?.requiredFields);\n }\n\n if(step && step.id === 'additionalDetails') {\n IframeEvents.customFieldsData(form?.userData?.additionalDetails);\n }\n\n form.updateUserDataAndCallback({[step.id]: formData }, function (userData: any) {\n if(currentStepIdx === lastStepIndex) {\n form.handleSubmit(userData);\n } else {\n setLoading(false);\n form.goToNextStep(true);\n }\n });\n };\n\n const setValue = (field: FormField) => {\n if(field.type === 'phone') {\n methods.setValue(`${field.id}.value` as const, getValue(`#${field.id}`), { shouldValidate: false });\n } else {\n methods.setValue(`${field.id}` as const, getValue(`#${field.id}`), { shouldValidate: false });\n }\n };\n\n function setFormFieldValue(values: any, field: FormField) {\n if(!values) {\n setValue(field);\n } else if (field.type === 'phone') {\n const phone = values[field.type];\n if(!phone || !phone.value) {\n setValue(field);\n }\n } else if(!values[field.id]) {\n setValue(field);\n }\n }\n\n const setFormValues = (step: FormStep) => {\n if(step.id === 'requiredFields') {\n const values = methods.getValues();\n step.fields!.forEach((field: FormField) => {\n setFormFieldValue(values, field);\n });\n } else if(step.id === 'additionalDetails') {\n const values = methods.getValues();\n step.customFields!.forEach((field: FormField) => {\n setFormFieldValue(values, field);\n });\n }\n };\n\n const onSubmit = (e: any) => {\n e.preventDefault();\n setFormErrorMessage('');\n if(currentStepIdx === lastStepIndex) {\n setLoading(true);\n }\n\n setFormValues(step);\n methods.handleSubmit(handleSubmit, handleError)();\n };\n\n const handleError = (e: any) => {\n setFormErrorMessage(t('errors.please_enter_all_required_fields'));\n setLoading(false);\n };\n\n const filterAppointmentTypeReplacedFields = (field: any) => {\n return _.isEmpty(field.customFieldAppointmentTypeIds) || _.includes(field.customFieldAppointmentTypeIds, form?.userData?.appointmentType);\n };\n\n if(layoutType === 'form') {\n return (\n \n {step.id === 'requiredFields' && (\n <>\n {step.fields!.map((field: FormField) => )}\n \n )}\n\n {step.id === 'additionalDetails' && (\n <>\n {step.customFields!.filter(filterAppointmentTypeReplacedFields).map((field: FormField) => )}\n \n )}\n \n );\n }\n\n return (\n \n
{ InputHelper.onKeyDown(e) }} noValidate>\n \n {step.id === 'requiredFields' && (\n <>\n {step.fields!.map((field: FormField) => )}\n \n )}\n\n {step.id === 'additionalDetails' && (\n <>\n {step.customFields!.filter(filterAppointmentTypeReplacedFields).map((field: FormField) => )}\n \n )}\n\n \n {formErrorMessage.length > 0 &&
{formErrorMessage}
}\n {layoutType === 'steps' && }\n \n
\n );\n};\n\nexport default CustomForm;\n","import React, { useState } from 'react'\nimport { Input, InputProps } from '@chakra-ui/react'\nimport { useForm } from \"../StepsBuilder\";\n\ntype Card = {\n errors: any;\n isInvalid: boolean;\n}\n\ninterface Props extends InputProps {\n card: Card;\n setCard: (card: (prev: Card) => { errors: any; isInvalid: boolean }) => void;\n}\n\nexport default function StripeInput(props: Props) {\n const invalidBorder = '#E53E3E';\n const { userData } = useForm();\n const [isFocused, setIsFocused] = useState(false);\n const [postalCode] = useState(() => {\n const { zip } = userData?.requiredFields;\n\n if(zip) {\n return zip;\n }\n });\n\n const { id, placeholder, as, isDisabled, card, setCard, ...rest } = props;\n\n return (\n {\n setIsFocused(true)\n }}\n onBlur={() => {\n setIsFocused(false)\n }}\n onChange={(event:any) => {\n setCard((prev:Card) => {\n return { ...prev, errors: event.error, isInvalid: !!(event.error) };\n });\n }}\n id={id}\n bgColor=\"white\"\n boxShadow={isFocused ? `0 0 0 1px var(--bl-primary-color)` : card.isInvalid ? `${invalidBorder}` : 'none' }\n borderColor={isFocused ? `var(--bl-primary-color)` : card.isInvalid ? `${invalidBorder}` : 'inherit' }\n as={as}\n pt={2}\n pr={0}\n pl={3}\n pb={0}\n options={{\n value: {\n postalCode: postalCode\n },\n style: {\n base: {\n fontFamily: 'Heebo, Open Sans, sans-serif',\n backGround: '#FFFFFF',\n backGroundColor: '#FFFFFF',\n fontSize: '14px',\n color: '#000000',\n '::placeholder': {\n color: '#aab7c4'\n }\n },\n invalid: {\n color: '#E53E3E'\n }\n }\n }}\n display=\"auto\"\n {...rest}\n />\n )\n};\n","import React from \"react\";\nimport { Text } from \"@chakra-ui/layout\";\nimport _ from \"lodash\";\n\ntype Props = {\n message: string | undefined;\n}\n\nconst PaymentFormError = ({ message }:Props) => {\n if(_.isEmpty(message)) {\n return null;\n }\n\n return (\n
\n {message}\n
\n );\n};\n\nexport default PaymentFormError;\n","import { useState } from 'react';\nimport { useForm } from \"../components/StepsBuilder\";\nimport { STRIPE_FIELDS } from \"../utils/constants\";\n\nconst initializeDefaults = function (id: string, key: string, isRequired = true, userData: any) {\n const { email, firstName, lastName } = userData?.requiredFields;\n let value;\n\n if(id === STRIPE_FIELDS.BILLING_NAME && firstName && lastName) {\n value = `${firstName} ${lastName}`;\n } else if(id === STRIPE_FIELDS.EMAIL && email) {\n value = email;\n }\n\n return {\n id: id,\n label: key,\n required: isRequired,\n value: value\n };\n};\n\nconst useStripeHook = () => {\n const { userData } = useForm();\n const [billingName] = useState(()=> initializeDefaults(STRIPE_FIELDS.BILLING_NAME, 'payment.card_holder', true, userData));\n const [email] = useState(()=> initializeDefaults(STRIPE_FIELDS.EMAIL, 'payment.email', true, userData));\n\n return {\n billingName,\n email\n };\n};\n\nexport default useStripeHook;\n","import { CardDetailsResult } from \"../interfaces\";\n\nconst helper = {\n buildPaymentDetails: function(data: any, type: string) {\n switch (type) {\n case 'F':\n return helper.populateDetailsFromBridalLivePayResponse(data);\n case 'S':\n return helper.populateDetailsFromStripeResponse(data);\n case 'C':\n return helper.populateDetailsFromChargeItProResponse(data);\n }\n },\n populateDetailsFromBridalLivePayResponse: function (data: any) {\n return {\n paymentProfileToken: data?.token,\n paymentProfileTokenProvider: \"F\",\n paymentProfileMaskedAcctNumber: data?.accountDetails?.paymentAccountLast4,\n paymentProfileExpiration: data?.accountDetails?.expirationMonth + \"/\" + data?.accountDetails?.expirationYear,\n paymentProfileCardType: data?.accountDetails?.cardType,\n paymentProfileBillingName: data?.accountDetails?.nameOnAccount,\n paymentProfileAddedBy: \"M\"\n };\n },\n populateDetailsFromChargeItProResponse: function (data: CardDetailsResult) {\n return {\n paymentProfileToken: data.token,\n paymentProfileTokenProvider: \"C\",\n paymentProfileMaskedAcctNumber: data.maskedAcctNumber,\n paymentProfileExpiration: data.expiration,\n paymentProfileCardType: data.cardType,\n paymentProfileBillingName: data.billingName,\n paymentProfileAddedBy: \"M\"\n };\n },\n populateDetailsFromStripeResponse: function (data: CardDetailsResult) {\n return {\n paymentProfileToken: data.token,\n paymentProfileTokenProvider: \"S\",\n paymentProfileMaskedAcctNumber: data.maskedAcctNumber,\n paymentProfileExpiration: data.expiration,\n paymentProfileCardType: data.cardType,\n paymentProfileBillingName: data.billingName,\n paymentProfileAddedBy: \"M\"\n };\n },\n createRequestPayload: function(data: any, type: string): any {\n switch (type) {\n case 'F':\n return helper.buildBridalLivePayRequest(data);\n case 'S':\n return helper.populateDetailsFromStripeResponse(data);\n case 'C':\n return helper.populateDetailsFromChargeItProResponse(data);\n }\n },\n buildBridalLivePayRequest: function (data: any) {\n return data;\n }\n};\n\nexport default helper;\n","const helper = {\n importScript: function (resourceUrl: string, async: boolean, hideOrigin: boolean, init: any) {\n const script = document.createElement('script');\n script.src = resourceUrl;\n script.async = async;\n\n if(hideOrigin) {\n // @ts-ignore\n script.crossorigin = \"anonymous\";\n }\n\n if(init) {\n script.onload = init;\n }\n\n document.body.appendChild(script);\n },\n removeScript: function (resourceUrl: string) {\n let scripts = document.getElementsByTagName(\"script\");\n for (let i = scripts.length; i >= 0; i--) {\n const script = scripts[i];\n\n if(script && script.getAttribute('src') !== null) {\n const src = script.getAttribute('src');\n\n if(src && src.indexOf(resourceUrl) !== 1) {\n // @ts-ignore\n script.parentNode.removeChild(script);\n }\n }\n }\n }\n};\n\nexport default helper;\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext, useState } from 'react';\nimport { loadStripe } from '@stripe/stripe-js';\nimport { PaymentProvider } from \"../interfaces\";\nimport ScriptHelper from '../utils/script-helper';\nimport _ from \"lodash\";\n\ndeclare global {\n interface Window {\n BLPay: any;\n bridalLiveDebug: boolean;\n grecaptcha: {\n render: (id: string, options: { sitekey: string; theme: string; size: string; callback: any; 'error-callback': any; 'expired-callback': any; }) => void;\n };\n }\n}\n\nexport type FormPaymentContextState = {\n BridalLivePay: any;\n StripePromise: any;\n apiKey: string;\n setup: boolean;\n captureBilling: boolean;\n bookingAgreement: string | undefined;\n cancelAgreement: string | undefined;\n chargeForBooking: boolean;\n displayAgreement: boolean;\n captureSignature: boolean;\n paymentProvider: string;\n setPaymentProvider: (provider: PaymentProvider) => void;\n signaturePad: any;\n signatureImageData: string | undefined;\n agreementReached: boolean;\n initPad: (pad: any) => void;\n clearPad: () => void;\n saveSignature: () => string | undefined;\n clearSignature: () => void;\n destroyPad: () => void;\n isSignatureEmpty: () => boolean;\n validatePaymentForm: () => boolean;\n isFormValid: () => boolean;\n handleAgreement: (value: boolean) => void;\n handleAgreementType: (value: string) => void;\n handleIsAppointment: (value: boolean) => void;\n agreementInvalid: boolean;\n signatureInvalid: boolean;\n onSignatureChange: () => void;\n agreementType: string;\n isAppointment: boolean;\n};\n\nexport const FormPaymentContext = createContext({} as FormPaymentContextState);\nexport const useFormPayment = () => useContext(FormPaymentContext);\n\ntype Props = {\n children: ReactNode;\n}\n\nexport const FormPaymentProvider = ({ children }: Props) => {\n const [setup, setSetup] = useState(false);\n const [apiKey, setApiKey] = useState('');\n const [captureBilling, setCaptureBilling] = useState(false);\n const [chargeForBooking, setChargeForBooking] = useState(false);\n const [displayAgreement, setDisplayAgreement] = useState(false);\n const [bookingAgreement, setBookingAgreement] = useState();\n const [cancelAgreement, setCancelAgreement] = useState();\n const [captureSignature, setCaptureSignature] = useState(false);\n const [paymentProvider, setProvider] = useState('');\n const [StripePromise, setStripePromise] = useState();\n const [BridalLivePay, setBridalLivePay] = useState(false);\n const [signaturePad, setSignaturePad] = useState(undefined);\n const [signatureImageData, setSignatureImageData] = useState();\n const [agreementReached, setAgreementReached] = useState(false);\n const [agreementInvalid, setAgreementInvalid] = useState(false);\n const [signatureInvalid, setSignatureInvalid] = useState(false);\n const [agreementType, setAgreementType] = useState('');\n const [hasSignature, setHasSignature] = useState(false);\n const [isAppointment, setIsAppointment] = useState(false);\n\n const init = async (key: string): Promise => {\n const tryInit = async () => {\n return await loadStripe(key);\n };\n\n try {\n return await tryInit();\n } catch (error) {\n console.error('Failed to load stripe', error);\n }\n };\n\n const setPaymentProvider = async (provider: PaymentProvider) => {\n if(!provider.apiKey || !provider.setup || !provider.provider) {\n return;\n }\n\n setApiKey(provider.apiKey);\n setSetup(provider.setup);\n setCaptureBilling(provider.captureBilling);\n setProvider(provider.provider);\n setChargeForBooking(provider.chargeForBooking);\n setDisplayAgreement(provider.displayAgreement);\n setBookingAgreement(provider.bookingAgreement);\n setCancelAgreement(provider.cancelAgreement);\n setCaptureSignature(provider.captureSignature);\n\n if(provider.provider === 'F' && provider.apiUrl) {\n ScriptHelper.removeScript(provider.apiUrl);\n ScriptHelper.importScript(provider.apiUrl, true, true, function () {\n try {\n const blPay = window.BLPay;\n setBridalLivePay(blPay !== undefined);\n } catch (e) {\n console.error('Failed to load BridalLive Pay JS', e);\n }\n });\n } else if(provider.provider === 'S') {\n (async () => {\n try {\n const stripe = (await init(provider.apiKey));\n setStripePromise(stripe);\n } catch (e) {\n console.error('Failed to load Stripe JS', e);\n }\n })();\n }\n };\n\n const validatePaymentForm = () => {\n let valid = true;\n setAgreementInvalid(false);\n setSignatureInvalid(false);\n\n if(displayAgreement && !agreementReached && !isAgreementEmpty()) {\n valid = false;\n setAgreementInvalid(true);\n }\n\n if(isAppointment && agreementType === 'booking' && chargeForBooking && captureSignature && !signatureImageData && isSignatureEmpty()) {\n valid = false;\n setSignatureInvalid(true);\n setHasSignature(false);\n }\n\n return valid;\n };\n\n const isFormValid = function () {\n return (displayAgreement && !agreementReached && !isAgreementEmpty()) || (captureSignature && isAppointment && agreementType === 'booking' && chargeForBooking && !hasSignature);\n };\n\n const isAgreementEmpty = function() {\n return (agreementType === 'booking' && _.isEmpty(bookingAgreement)) || (agreementType === 'cancel' && _.isEmpty(cancelAgreement));\n };\n\n const initPad = (pad: any) => {\n setSignaturePad(pad);\n };\n\n const clearPad = () => {\n signaturePad?.clear();\n setHasSignature(false);\n setSignatureImageData(undefined);\n };\n\n const clearSignature = () => {\n setHasSignature(false);\n setSignatureImageData(undefined);\n };\n\n const onSignatureChange = () => {\n setHasSignature(true);\n };\n\n const destroyPad = () => {\n signaturePad?.off();\n setSignaturePad(null);\n };\n\n const saveSignature = () => {\n let signature = undefined;\n try {\n signature = signaturePad?.toDataURL();\n setSignatureImageData(signature);\n } catch(e) {\n console.log('Failed to save signature data');\n }\n\n return signature;\n };\n\n const isSignatureEmpty = () => {\n return !!(signaturePad && signaturePad?.isEmpty());\n };\n\n const handleAgreement = (value: boolean) => {\n setAgreementReached(value);\n };\n\n const handleAgreementType = (type: string) => {\n setAgreementType(type);\n };\n\n const handleIsAppointment = (value: boolean) => {\n setIsAppointment(value);\n };\n\n const sharedState: FormPaymentContextState = {\n BridalLivePay,\n StripePromise,\n apiKey,\n setup,\n captureBilling,\n bookingAgreement,\n cancelAgreement,\n chargeForBooking,\n displayAgreement,\n captureSignature,\n paymentProvider,\n signaturePad,\n signatureImageData,\n agreementReached,\n agreementInvalid,\n signatureInvalid,\n agreementType,\n isAppointment,\n setPaymentProvider,\n initPad,\n clearPad,\n clearSignature,\n saveSignature,\n destroyPad,\n isSignatureEmpty,\n validatePaymentForm,\n isFormValid,\n handleAgreement,\n handleAgreementType,\n handleIsAppointment,\n onSignatureChange\n };\n\n return (\n \n {children}\n \n );\n};\n","import React, { useState, ChangeEvent, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { AppointmentType } from \"../../interfaces\";\nimport { useForm } from \"../StepsBuilder\";\nimport { Checkbox as ChakraCheckbox } from \"@chakra-ui/checkbox\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport { FormControl, FormErrorMessage, FormLabel } from \"@chakra-ui/form-control\";\nimport { Stack } from \"@chakra-ui/react\";\nimport { useFormPayment } from \"../../contexts/useFormPayment\";\n\ntype Agreement = {\n amount: string;\n type: string;\n message: string | undefined;\n isAppointment: boolean;\n}\n\ntype Props = {\n loading: boolean | undefined;\n init: boolean | undefined;\n}\n\ntype AgreementMessages = {\n booking: string | undefined;\n cancel: string | undefined;\n};\n\nconst hasPaymentDetails = ({ userData }: any) => {\n return !!(userData && userData.paymentDetails && userData.paymentDetails.paymentProfileToken);\n};\n\nconst findAppointmentType = (id: number, form: any): AppointmentType => {\n return form.json.appointmentTypes.find((a: { id: number; }) => a.id === id) as AppointmentType;\n};\n\nconst findDefaultAgreementMessages = (form: any): AgreementMessages => {\n return {\n booking: form?.json?.paymentProvider?.bookingAgreement,\n cancel: form?.json?.paymentProvider?.cancelAgreement\n };\n};\n\nfunction initAgreement(form: any): Agreement {\n let isAppointment = true;\n let amount = '';\n let type = '';\n let message: string | undefined = '';\n let messages = findDefaultAgreementMessages(form);\n\n let typeId = form?.userData?.appointmentType;\n\n if(typeId) {\n const appointmentType = findAppointmentType(typeId, form);\n\n if(appointmentType && appointmentType.requirePaymentInfoForBooking && appointmentType.itemAmount) {\n type = appointmentType.bookingItemId ? 'booking' : 'cancel';\n amount = appointmentType.itemAmountFormatted;\n message = type === 'booking' ? messages.booking : messages.cancel;\n message = message?.replace(/\\[AMOUNT]/gi, appointmentType.itemAmountFormatted);\n message = message?.replace(/\\[APPOINTMENT]/gi, appointmentType.description);\n }\n }\n\n if(form && form.userData && form.userData.dateAndTime && form.userData.dateAndTime.waitList && form.userData.dateAndTime.waitList.bookWithWaitList) {\n isAppointment = false;\n }\n\n return {\n amount,\n type,\n message,\n isAppointment\n }\n}\n\nconst PaymentAgreement = ({ loading, init }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const paymentForm = useFormPayment();\n const [agreement] = useState(() => initAgreement(form));\n\n useEffect(() => {\n paymentForm.handleAgreement(false);\n }, []);\n\n useEffect(() => {\n paymentForm.handleAgreementType(agreement.type);\n paymentForm.handleIsAppointment(agreement.isAppointment);\n }, [agreement.type, agreement.isAppointment]);\n\n const handleChange = (e: ChangeEvent) => {\n paymentForm.handleAgreement(e.target.checked);\n };\n\n if(!agreement.message || hasPaymentDetails(form)) {\n return null;\n }\n\n return (\n
\n \n \n InputHelper.onKeyDown(e)}\n isRequired={true}\n onChange={(e) => handleChange(e)}>\n \n \n \n \n {t('Check the box to proceed')}\n \n \n
\n );\n};\n\nexport default PaymentAgreement;\n","const SignaturePad = (function(document) {\n var SignaturePad = function(canvas, options) {\n var self = this, opts = options || {};\n\n this.velocityFilterWeight = opts.velocityFilterWeight || 0.7;\n this.minWidth = opts.minWidth || 0.5;\n this.maxWidth = opts.maxWidth || 2.5;\n this.dotSize = opts.dotSize || function() {\n return (this.minWidth + this.maxWidth) / 2;\n };\n this.penColor = opts.penColor || \"black\";\n this.backgroundColor = opts.backgroundColor || \"rgba(0,0,0,0)\";\n this.onEnd = opts.onEnd;\n this.onBegin = opts.onBegin;\n this._canvas = canvas;\n this._ctx = canvas.getContext(\"2d\");\n this.clear();\n\n // we need add these inline so they are available to unbind while still having\n // access to 'self' we could use _.bind but it's not worth adding a dependency\n this._handleMouseDown = function(event) {\n if(event.which === 1) {\n self._mouseButtonDown = true;\n self._strokeBegin(event);\n }\n };\n\n this._handleMouseMove = function(event) {\n if(self._mouseButtonDown) {\n self._strokeUpdate(event);\n }\n };\n\n this._handleMouseUp = function(event) {\n if(event.which === 1 && self._mouseButtonDown) {\n self._mouseButtonDown = false;\n self._strokeEnd(event);\n }\n };\n\n this._handleTouchStart = function(event) {\n if(event.targetTouches.length === 1) {\n var touch = event.changedTouches[0];\n self._strokeBegin(touch);\n }\n };\n\n this._handleTouchMove = function(event) {\n // Prevent scrolling.\n event.preventDefault();\n\n var touch = event.targetTouches[0];\n self._strokeUpdate(touch);\n };\n\n this._handleTouchEnd = function(event) {\n var wasCanvasTouched = event.target === self._canvas;\n if(wasCanvasTouched) {\n event.preventDefault();\n self._strokeEnd(event);\n }\n };\n\n this._handleMouseEvents();\n this._handleTouchEvents();\n };\n\n SignaturePad.prototype.clear = function() {\n var ctx = this._ctx, canvas = this._canvas;\n\n ctx.fillStyle = this.backgroundColor;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n this._reset();\n };\n\n SignaturePad.prototype.toDataURL = function(imageType, quality) {\n var canvas = this._canvas;\n return canvas.toDataURL.apply(canvas, arguments);\n };\n\n SignaturePad.prototype.fromDataURL = function(dataUrl) {\n var self = this, image = new Image(), ratio = window.devicePixelRatio || 1, width = this._canvas.width / ratio, height = this._canvas.height / ratio;\n\n this._reset();\n image.src = dataUrl;\n image.onload = function() {\n self._ctx.drawImage(image, 0, 0, width, height);\n };\n this._isEmpty = false;\n };\n\n SignaturePad.prototype.toData = function() {\n return this.points;\n };\n\n SignaturePad.prototype._strokeUpdate = function(event) {\n var point = this._createPoint(event);\n this._addPoint(point);\n };\n\n SignaturePad.prototype._strokeBegin = function(event) {\n this._reset();\n this._strokeUpdate(event);\n if(typeof this.onBegin === 'function') {\n this.onBegin(event);\n }\n };\n\n SignaturePad.prototype._strokeDraw = function(point) {\n var ctx = this._ctx, dotSize = typeof(this.dotSize) === 'function' ? this.dotSize() : this.dotSize;\n\n ctx.beginPath();\n this._drawPoint(point.x, point.y, dotSize);\n ctx.closePath();\n ctx.fill();\n };\n\n SignaturePad.prototype._strokeEnd = function(event) {\n var canDrawCurve = this.points.length > 2, point = this.points[0];\n\n if(!canDrawCurve && point) {\n this._strokeDraw(point);\n }\n if(typeof this.onEnd === 'function') {\n this.onEnd(event);\n }\n };\n\n SignaturePad.prototype._handleMouseEvents = function() {\n this._mouseButtonDown = false;\n this._canvas.addEventListener(\"mousedown\", this._handleMouseDown);\n this._canvas.addEventListener(\"mousemove\", this._handleMouseMove);\n document.addEventListener(\"mouseup\", this._handleMouseUp);\n };\n\n SignaturePad.prototype._handleTouchEvents = function() {\n // Pass touch events to canvas element on mobile IE11 and Edge.\n this._canvas.style.msTouchAction = 'none';\n this._canvas.style.touchAction = 'none';\n\n this._canvas.addEventListener(\"touchstart\", this._handleTouchStart);\n this._canvas.addEventListener(\"touchmove\", this._handleTouchMove);\n this._canvas.addEventListener(\"touchend\", this._handleTouchEnd);\n };\n\n SignaturePad.prototype.on = function() {\n this._handleMouseEvents();\n this._handleTouchEvents();\n };\n\n SignaturePad.prototype.off = function() {\n this._canvas.removeEventListener(\"mousedown\", this._handleMouseDown);\n this._canvas.removeEventListener(\"mousemove\", this._handleMouseMove);\n document.removeEventListener(\"mouseup\", this._handleMouseUp);\n this._canvas.removeEventListener(\"touchstart\", this._handleTouchStart);\n this._canvas.removeEventListener(\"touchmove\", this._handleTouchMove);\n this._canvas.removeEventListener(\"touchend\", this._handleTouchEnd);\n };\n\n SignaturePad.prototype.isEmpty = function() {\n return this._isEmpty;\n };\n\n SignaturePad.prototype._reset = function() {\n this.points = [];\n this._lastVelocity = 0;\n this._lastWidth = (this.minWidth + this.maxWidth) / 2;\n this._isEmpty = true;\n this._ctx.fillStyle = this.penColor;\n };\n\n SignaturePad.prototype._createPoint = function(event) {\n var rect = this._canvas.getBoundingClientRect();\n return new Point(event.clientX - rect.left, event.clientY - rect.top);\n };\n\n SignaturePad.prototype._addPoint = function(point) {\n var points = this.points, c2, c3, curve, tmp;\n points.push(point);\n\n if(points.length > 2) {\n // To reduce the initial lag make it work with 3 points\n // by copying the first point to the beginning.\n if(points.length === 3) points.unshift(points[0]);\n tmp = this._calculateCurveControlPoints(points[0], points[1], points[2]);\n c2 = tmp.c2;\n tmp = this._calculateCurveControlPoints(points[1], points[2], points[3]);\n c3 = tmp.c1;\n curve = new Bezier(points[1], c2, c3, points[2]);\n this._addCurve(curve);\n // Remove the first element from the list,\n // so that we always have no more than 4 points in points array.\n points.shift();\n }\n };\n\n SignaturePad.prototype._calculateCurveControlPoints = function(s1, s2, s3) {\n var dx1 = s1.x - s2.x, dy1 = s1.y - s2.y, dx2 = s2.x - s3.x, dy2 = s2.y - s3.y,\n\n m1 = {x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0},\n m2 = {x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0},\n\n l1 = Math.sqrt(dx1*dx1 + dy1*dy1),\n l2 = Math.sqrt(dx2*dx2 + dy2*dy2),\n\n dxm = (m1.x - m2.x),\n dym = (m1.y - m2.y),\n\n k = l2 / (l1 + l2),\n cm = {x: m2.x + dxm*k, y: m2.y + dym*k},\n\n tx = s2.x - cm.x,\n ty = s2.y - cm.y;\n return {\n c1: new Point(m1.x + tx, m1.y + ty),\n c2: new Point(m2.x + tx, m2.y + ty)\n };\n };\n\n SignaturePad.prototype._addCurve = function(curve) {\n var startPoint = curve.startPoint, endPoint = curve.endPoint, velocity, newWidth;\n\n velocity = endPoint.velocityFrom(startPoint);\n velocity = this.velocityFilterWeight * velocity + (1 - this.velocityFilterWeight) * this._lastVelocity;\n\n newWidth = this._strokeWidth(velocity);\n this._drawCurve(curve, this._lastWidth, newWidth);\n\n this._lastVelocity = velocity;\n this._lastWidth = newWidth;\n };\n\n SignaturePad.prototype._drawPoint = function(x, y, size) {\n var ctx = this._ctx;\n\n ctx.moveTo(x, y);\n ctx.arc(x, y, size, 0, 2 * Math.PI, false);\n this._isEmpty = false;\n };\n\n SignaturePad.prototype._drawCurve = function(curve, startWidth, endWidth) {\n var ctx = this._ctx, widthDelta = endWidth - startWidth, drawSteps, width, i, t, tt, ttt, u, uu, uuu, x, y;\n\n drawSteps = Math.floor(curve.length());\n ctx.beginPath();\n for (i = 0; i < drawSteps; i++) {\n // Calculate the Bezier (x, y) coordinate for this step.\n t = i / drawSteps;\n tt = t * t;\n ttt = tt * t;\n u = 1 - t;\n uu = u * u;\n uuu = uu * u;\n\n x = uuu * curve.startPoint.x;\n x += 3 * uu * t * curve.control1.x;\n x += 3 * u * tt * curve.control2.x;\n x += ttt * curve.endPoint.x;\n\n y = uuu * curve.startPoint.y;\n y += 3 * uu * t * curve.control1.y;\n y += 3 * u * tt * curve.control2.y;\n y += ttt * curve.endPoint.y;\n\n width = startWidth + ttt * widthDelta;\n this._drawPoint(x, y, width);\n }\n ctx.closePath();\n ctx.fill();\n };\n\n SignaturePad.prototype._strokeWidth = function(velocity) {\n return Math.max(this.maxWidth / (velocity + 1), this.minWidth);\n };\n\n var Point = function(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time || new Date().getTime();\n };\n\n Point.prototype.velocityFrom = function(start) {\n return (this.time !== start.time) ? this.distanceTo(start) / (this.time - start.time) : 1;\n };\n\n Point.prototype.distanceTo = function(start) {\n return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));\n };\n\n var Bezier = function(startPoint, control1, control2, endPoint) {\n this.startPoint = startPoint;\n this.control1 = control1;\n this.control2 = control2;\n this.endPoint = endPoint;\n };\n\n // Returns approximated length.\n Bezier.prototype.length = function() {\n var steps = 10, length = 0, i, t, cx, cy, px, py, xdiff, ydiff;\n\n for (i = 0; i <= steps; i++) {\n t = i / steps;\n cx = this._point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);\n cy = this._point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);\n if(i > 0) {\n xdiff = cx - px;\n ydiff = cy - py;\n length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n }\n px = cx;\n py = cy;\n }\n return length;\n };\n\n Bezier.prototype._point = function(t, start, c1, c2, end) {\n return start * (1.0 - t) * (1.0 - t) * (1.0 - t)\n + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t\n + 3.0 * c2 * (1.0 - t) * t * t\n + end * t * t * t;\n };\n\n return SignaturePad;\n})(document);\n\nexport { SignaturePad };\n","import React, { useEffect, useRef } from \"react\";\nimport { useFormPayment } from \"../../contexts/useFormPayment\";\nimport { useForm } from \"../StepsBuilder\";\nimport { useTranslation } from \"react-i18next\";\nimport { SignaturePad } from \"../../utils/signature-pad\";\nimport { Button } from \"@chakra-ui/button\";\nimport { Center, Stack } from \"@chakra-ui/react\";\n\nconst hasPaymentDetails = ({ userData }: any) => {\n return !!(userData && userData.paymentDetails && userData.paymentDetails.paymentProfileToken);\n};\n\nconst getSignatureColor = (form: any): string => {\n if(form?.json?.theme?.primaryColorDarken) {\n return form.json.theme.primaryColorDarken;\n }\n\n return '#9686b1';\n};\n\ntype Props = {\n loading: boolean | undefined;\n};\n\nconst PaymentSignaturePad = ({ loading }: Props) => {\n const elementRef = useRef();\n const form = useForm();\n const paymentForm = useFormPayment();\n const { t } = useTranslation();\n\n useEffect(() => {\n var canvas = elementRef.current as any;\n\n if(canvas) {\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = canvas.offsetWidth * ratio;\n canvas.height = canvas.offsetHeight * ratio;\n // @ts-ignore\n canvas.getContext(\"2d\").scale(ratio, ratio);\n\n const pad = new SignaturePad(canvas, {\n minWidth: 0.7,\n penColor: getSignatureColor(form),\n onEnd: paymentForm.onSignatureChange\n });\n\n if(paymentForm.signatureImageData) {\n pad.fromDataURL(paymentForm.signatureImageData);\n }\n\n paymentForm.initPad(pad);\n }\n\n return () => {\n paymentForm.destroyPad();\n }\n }, []);\n\n const clearPad = (e: any) => {\n if(e) {\n e.preventDefault();\n }\n\n paymentForm.clearPad();\n };\n\n if(hasPaymentDetails(form)) {\n return null;\n }\n\n return (\n <>\n
\n \n
\n
\n \n \n
\n
\n
\n
\n \n );\n};\n\nexport default PaymentSignaturePad;\n","import React from 'react';\nimport { Button, HStack } from '@chakra-ui/react';\nimport { useForm } from \"../StepsBuilder\";\nimport { useTranslation } from \"react-i18next\";\nimport PaymentAgreement from \"./PaymentAgreement\";\nimport PaymentSignaturePad from \"./PaymentSignaturePad\";\nimport { useFormPayment } from \"../../contexts/useFormPayment\";\nimport BLCaptcha from \"../BLCaptcha\";\n\ntype Props = {\n loading: boolean | undefined;\n init: boolean | undefined;\n isSummary?: boolean;\n handleBackClick: (e?: any) => void;\n handleClickNext: (e?: any) => void;\n}\n\nconst PaymentsNavigation = ({ loading, init, isSummary, handleBackClick, handleClickNext }: Props) => {\n const form = useForm();\n const paymentProvider = useFormPayment();\n const { t } = useTranslation();\n\n const getButtonText = () => {\n if(loading) {\n return t('appointment.submitting');\n } else if(form && form.userData && form.userData.dateAndTime && form.userData.dateAndTime.waitList && form.userData.dateAndTime.waitList.bookWithWaitList) {\n return t('wait_list.add_to_waitlist');\n }\n\n if(form && form.json && form.json.formType === 'AppointmentRequestForm') {\n return t('appointment.request_appointment');\n }\n \n return t('appointment.book_appointment');\n };\n\n const onPaymentSubmit = (e: any) => {\n if(isSummary || paymentProvider.validatePaymentForm()) {\n handleClickNext(e);\n }\n };\n\n const onBackClick = (e: any) => {\n if(paymentProvider?.chargeForBooking && paymentProvider?.captureSignature && paymentProvider?.isAppointment && paymentProvider?.agreementType === 'booking' && !paymentProvider.isSignatureEmpty()) {\n form.updateUserDataAndCallback({ signatureData: paymentProvider.saveSignature(), captchaToken: null }, function(userData: any) {\n handleBackClick(e);\n });\n } else {\n handleBackClick(e);\n }\n };\n\n const disableButton = () => {\n return loading || init || (!isSummary && paymentProvider.isFormValid()) || form.isCaptchaValid();\n };\n\n return (\n <>\n {paymentProvider?.displayAgreement && }\n {paymentProvider?.chargeForBooking && paymentProvider?.captureSignature && paymentProvider?.isAppointment && paymentProvider?.agreementType === 'booking' && }\n {form?.json?.captchaEnabled && ()}\n \n \n \n \n \n );\n};\n\nexport default PaymentsNavigation;\n","import React, { useEffect, useState } from \"react\";\nimport { CardElement, useStripe, useElements } from '@stripe/react-stripe-js';\nimport { useForm } from \"../StepsBuilder\";\nimport { useForm as useReactHookForm } from 'react-hook-form';\nimport {useTranslation} from \"react-i18next\";\nimport '../../styles/stripe.css';\nimport { createSetupIntent, saveCard } from '../../utils/axios-api';\nimport UrlHelper from \"../../utils/url-helper\";\nimport StripeInput from \"./StripeInput\";\nimport PaymentFormError from \"./PaymentFormError\";\nimport {FormControl, FormErrorMessage, FormLabel} from \"@chakra-ui/form-control\";\nimport { Input } from \"@chakra-ui/input\";\nimport useStripeHook from \"../../hooks/useStripeHook\";\nimport PaymentDetailsHelper from \"../../utils/payment-details-helper\";\nimport { STRIPE_FIELDS, REGEX } from \"../../utils/constants\";\nimport PaymentsNavigation from \"./PaymentsNavigation\";\nimport ErrorHelper from \"../../utils/error-helper\";\nimport _ from \"lodash\";\nimport EmailHelper from \"../../utils/email-helper\";\n\ntype Props = {\n onSuccess: (data: any) => void;\n formLoading?: boolean;\n}\n\nconst CheckoutForm = ({ onSuccess, formLoading }: Props) => {\n const { billingName, email } = useStripeHook();\n const stripe = useStripe();\n const elements = useElements();\n const { t } = useTranslation();\n const form = useForm();\n const layoutType = form.json.layoutType;\n const formType = UrlHelper.getParam('formType');\n const [error, setErrors] = useState();\n const [clientSecret, setClientSecret] = useState();\n const [loading, setLoading] = useState(false);\n const [card, setCard] = useState({ errors: undefined, isInvalid: false });\n\n const { register, handleSubmit, formState: { errors } }:any = useReactHookForm({\n defaultValues: {\n [STRIPE_FIELDS.BILLING_NAME]: billingName.value,\n [STRIPE_FIELDS.EMAIL]: email.value\n }\n });\n\n const createSetupInput = async () => {\n setLoading(true);\n\n try {\n const { payment_intent_client_secret } = await createSetupIntent(formType, form.json._key);\n setClientSecret(payment_intent_client_secret);\n } catch (e) {\n if(ErrorHelper.isTokenExpired(e)) {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', null);\n setErrors(error.message);\n } else {\n setErrors('Failed to initialize Stripe.');\n }\n\n console.error('Failed to get stripe intent!', e);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n createSetupInput();\n }, []);\n\n const handleBackClick = () => {\n form.goToPrevStep(true);\n };\n\n const onSubmit = async (formData: any) => {\n //Block native form submission.\n if (!stripe || !elements || loading) {\n // Stripe.js has not loaded yet. Make sure to disable\n // form submission until Stripe.js has loaded.\n return;\n }\n\n setLoading(true);\n setErrors(undefined);\n\n // Get a reference to a mounted CardElement. Elements knows how\n // to find your CardElement because there can only ever be one of\n // each type of element.\n const cardElement = elements.getElement(CardElement);\n\n // Use your card Element with other Stripe.js APIs\n //@ts-ignore\n const { error, setupIntent } = await stripe.handleCardSetup(clientSecret, cardElement, {\n payment_method_data: { billing_details: { name: formData[STRIPE_FIELDS.BILLING_NAME], email: formData[STRIPE_FIELDS.EMAIL] }}\n });\n\n if(error) {\n setErrors(error.message);\n setLoading(false);\n } else {\n try {\n const card = await saveCard(formType, form.json._key, { token: setupIntent.id, tokenProvider: 'S' });\n onSuccess(PaymentDetailsHelper.buildPaymentDetails(card, 'S'));\n } catch (e) {\n if(ErrorHelper.isTokenExpired(e)) {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', null);\n setErrors(error.message);\n } else {\n setErrors('Failed to capture card.');\n }\n } finally {\n setLoading(false);\n }\n }\n };\n\n const validate = (email: string) => {\n return EmailHelper.validate(email);\n };\n\n return (\n <>\n \n
\n \n {t('payment.stripe.billing_name')}\n \n {!!errors[STRIPE_FIELDS.BILLING_NAME] && t(errors[STRIPE_FIELDS.BILLING_NAME].message)}\n \n\n \n {t('payment.stripe.email')}\n validate(value) }})}/>\n {!!errors[STRIPE_FIELDS.EMAIL] && t(errors[STRIPE_FIELDS.EMAIL].message)}\n \n\n \n {t('payment.stripe.card')}\n \n {card.errors && card.errors.message}\n \n\n {layoutType === 'steps' &&\n \n }\n \n \n );\n};\n\nexport default CheckoutForm;\n","import React from 'react';\nimport CheckoutForm from \"./CheckoutForm\";\nimport { Elements } from '@stripe/react-stripe-js';\nimport { useFormPayment } from \"../../contexts/useFormPayment\";\nimport { useForm } from \"../StepsBuilder\";\nimport { FONT_TYPES } from \"../../utils/constants\";\nimport _ from 'lodash';\n\ntype Props = {\n onSuccess: (data: any) => void;\n formLoading?: boolean;\n}\n\nconst ELEMENTS_OPTIONS = {\n fonts: [\n {\n cssSrc: \"https://fonts.googleapis.com/css?family=Roboto\"\n }\n ]\n};\n\nconst initFontTheme = (form: any, options: any) => {\n if (form && form.theme && form.theme.font && _.includes(FONT_TYPES, form.theme.font)) {\n options.fonts[0].cssSrc = `https://fonts.googleapis.com/css?family=${form.theme.font}`;\n }\n};\n\nconst Stripe = ({ onSuccess, formLoading } :Props) => {\n const form = useForm();\n const formPayment = useFormPayment();\n let options = ELEMENTS_OPTIONS;\n initFontTheme(form, options);\n\n return (\n \n \n \n );\n};\n\nexport default Stripe;\n","/**\n * Wrapper for a browser console.log to conditionally ON/OFF logging\n */\nexport class Logger {\n static log(...args: any[]) {\n // @ts-ignore\n if(window?.bridalLiveDebug) {\n console.log.apply(this, args);\n }\n }\n\n static info(...args: any[]) {\n // @ts-ignore\n if(window?.bridalLiveDebug) {\n console.info.apply(this, args);\n }\n }\n\n static warn(...args: any[]) {\n // @ts-ignore\n if(window?.bridalLiveDebug) {\n console.warn.apply(this, args);\n }\n }\n\n static error(...args: any[]) {\n // @ts-ignore\n if(window?.bridalLiveDebug) {\n console.error.apply(this, args);\n }\n }\n}\n","import { useState, useEffect, useRef } from 'react';\nimport { useFormPayment } from \"../contexts/useFormPayment\";\nimport { useForm } from \"../components/StepsBuilder\";\nimport { Logger } from \"../utils/logger\";\nimport { STATES } from \"../utils/constants\";\nimport _ from \"lodash\";\n\nconst BLPAY = {\n ZIP: 'zip',\n CVV: 'cvv',\n YEAR: 'expirationYear',\n MONTH: 'expirationMonth',\n COUNTRY: 'country',\n CARD_NUMBER: 'cardNumber',\n CARD_HOLDER: 'cardholderName',\n CITY: 'city',\n STATE: 'state',\n ADDRESS1: 'address1',\n ADDRESS2: 'address2',\n ADDRESS_1: 'addressOne',\n ADDRESS_2: 'addressTwo',\n FIRST_NAME: 'firstName',\n LAST_NAME: 'lastName'\n};\n\nconst BL_PAY_ERRORS :any = {\n [BLPAY.CARD_HOLDER]: { required: 'Name On Card Required.', invalid: 'Invalid Name On Card.', 'contains-card-data':'Invalid: Contains Card Data.' },\n [BLPAY.CARD_NUMBER]: { required: 'Invalid Card Number.', invalid: 'Invalid Card Number.', 'contains-card-data':'Invalid: Contains Card Data.' },\n [BLPAY.MONTH]: { required: 'Exp Month Required.', invalid: 'Invalid Exp Month.' , 'contains-card-data':'Invalid: Contains Card Data.'},\n [BLPAY.YEAR]: { required: 'Exp Year Required.', invalid: 'Invalid Exp Year.', 'contains-card-data':'Invalid: Contains Card Data.' },\n [BLPAY.CVV]: { required: 'CVV Required.', invalid: 'Invalid CVV.', 'contains-card-data':'Invalid: Contains Card Data.' },\n [BLPAY.ZIP]: { required: 'Zip Required.', invalid: 'Invalid Zip.', 'contains-card-data':'Invalid: Contains Card Data.' },\n [BLPAY.COUNTRY]: { required: 'Country Required.', invalid:'Invalid Country.' , 'contains-card-data':'Invalid: Contains Card Data.'},\n [BLPAY.ADDRESS1]: { required: 'Address Required.', invalid:'Invalid Address.' , 'contains-card-data':'Invalid: Contains Card Data.'},\n [BLPAY.CITY]: { required: 'City Required.', invalid:'Invalid City.' , 'contains-card-data':'Invalid: Contains Card Data.'},\n [BLPAY.STATE]: { required: 'State Required.', invalid:'Invalid State.' , 'contains-card-data':'Invalid: Contains Card Data.'}\n};\n\nconst EVENTS = {\n FOCUS: 'focus',\n BLUR: 'blur',\n CHANGE: 'change',\n VALIDATION: 'validation',\n READY: 'ready',\n EXPIRE: 'expire',\n AUTH: 'auth',\n CARD_TYPE: 'cardTypeChange'\n};\n\nconst STANDARD_CONTROLS: any = {\n cardNumber: {\n id: 'bl-card-number',\n placeholder: 'XXXX XXXX XXXX XXXX'\n },\n expirationMonth: {\n id: 'bl-exp-month',\n placeholder: 'MM'\n },\n expirationYear: {\n id: 'bl-exp-year',\n placeholder: 'YY'\n },\n cvv: {\n id: 'bl-cvv',\n placeholder: 'CVV'\n },\n zip: {\n id: 'bl-zip',\n placeholder: 'ZIP',\n value: ''\n },\n cardholderName: {\n id: 'bl-card-holder-name',\n placeholder: 'Name on card',\n value: ''\n },\n country: {\n id: 'bl-country',\n placeholder: 'Select country',\n value: 'US'\n }\n};\n\nlet defaultForm: any = {\n formId: 'bl-pay-form',\n operationType: 'Token',\n recaptcha: {\n siteKey: '6LfE7VIaAAAAAKcZvn13kgpvlJsl5sfk-82_5HUh',\n badge: 'bottomright'\n },\n controls: STANDARD_CONTROLS\n};\n\nconst initializeDefaults = function (id: string, key: string, name: string, isRequired:boolean = true, currentValue:any = null) {\n return {\n id: id,\n label: key,\n focus: false,\n required: isRequired,\n errors: null,\n currentValue: currentValue,\n isInvalid: false,\n name: name\n };\n};\n\nconst getDefaultValue = function (userData: any, type: string) {\n const { firstName, lastName, address1, address2, addressOne, addressTwo, city, state, zip } = userData?.requiredFields;\n\n if(type === BLPAY.FIRST_NAME) {\n return firstName;\n }\n\n if(type === BLPAY.LAST_NAME) {\n return lastName;\n }\n\n if(type === BLPAY.ADDRESS1) {\n return address1;\n }\n\n if(type === BLPAY.ADDRESS2) {\n return address2;\n }\n\n if(type === BLPAY.ADDRESS_1) {\n return addressOne;\n }\n\n if(type === BLPAY.ADDRESS_2) {\n return addressTwo;\n }\n\n if(type === BLPAY.CITY) {\n return city;\n }\n\n if(type === BLPAY.ZIP) {\n return zip;\n }\n\n if(type === BLPAY.STATE) {\n if(_.some(STATES, ['value', state])) {\n return state;\n }\n }\n\n return null;\n};\n\nconst ignore = (userData: any) => {\n return !!(userData && userData.paymentDetails && userData.paymentDetails.paymentProfileToken);\n};\n\nconst useBridalLivePay = (retailerId: string) => {\n const { userData, json, updateUserData } = useForm();\n const provider = useFormPayment();\n const [captureBilling] = useState(provider.captureBilling);\n const [isReady, setReady] = useState(0);\n const paymentErrorCount = useRef(0);\n const [formErrors, setFormErrors] = useState();\n const [cardType, setCardType] = useState();\n const [loading, setLoading] = useState(true);\n const [blPay, setBLPay] = useState();\n const [blPayForm, setBLPayForm] = useState();\n const [cardNumber, setCardNumber] = useState(()=> initializeDefaults('bl-card-number', 'payment.card_number', ''));\n const [month, setMonth] = useState(()=> initializeDefaults('bl-exp-month', 'payment.month', ''));\n const [year, setYear] = useState(()=> initializeDefaults('bl-exp-year', 'payment.year', ''));\n const [cvv, setCVV] = useState(()=> initializeDefaults('bl-cvv', 'payment.cvv', ''));\n const [cardHolder, setCardHolder] = useState(()=> initializeDefaults('bl-card-holder-name', 'payment.card_holder', ''));\n const [country, setCountry] = useState(()=> initializeDefaults('bl-country', 'payment.country', '', true, 'US'));\n const [address1, setAddress1] = useState(()=> initializeDefaults('bl-address1', 'payment.address1', BLPAY.ADDRESS1, true, getDefaultValue(userData, BLPAY.ADDRESS_1)));\n const [address2, setAddress2] = useState(()=> initializeDefaults('bl-address2', 'payment.address2', BLPAY.ADDRESS2, false, getDefaultValue(userData, BLPAY.ADDRESS_2)));\n const [city, setCity] = useState(()=> initializeDefaults('bl-city', 'payment.city', BLPAY.CITY, true, getDefaultValue(userData, BLPAY.CITY)));\n const [state, setState] = useState(()=> initializeDefaults('bl-state', 'payment.state', BLPAY.STATE, true, getDefaultValue(userData, BLPAY.STATE)));\n const [zip, setZip] = useState(()=> initializeDefaults('bl-zip', 'payment.zip', BLPAY.ZIP, true, getDefaultValue(userData, BLPAY.ZIP)));\n\n function getErrorMessage(key: string, errors: string[]) {\n let message = '';\n\n if(!Array.isArray(errors)) {\n errors = [errors];\n }\n\n errors.forEach(function(error) {\n if(message === '') {\n message = BL_PAY_ERRORS[key][error];\n } else {\n message += ' ' + BL_PAY_ERRORS[key][error];\n }\n });\n\n return message;\n }\n\n const destroy = () => {\n try {\n blPayForm.destroy();\n Logger.log('Form Destroyed');\n } catch(e) {\n Logger.error('Failed to destroy BridalLive Payment form.', e);\n }\n };\n\n const submit = async (data: any, callback: (error: any, results: any) => any) => {\n try {\n const results = await blPayForm.submit(data);\n callback(null, results);\n } catch (e) {\n callback(e, null);\n }\n };\n\n const tokenRefresh = () => {\n setReady(isReady + 1);\n console.log('Token expired, notify user that form is about to reset');\n };\n\n const ready = () => {\n setReady(isReady + 1);\n setLoading(false);\n setFormErrors(\"\");\n };\n\n const errors = (errors: any) => {\n const entries = Object.entries(errors);\n if(entries && entries.length) {\n entries.forEach(entry => {\n const [key, values] = entry;\n // @ts-ignore\n setErrors(key, values);\n });\n }\n };\n\n const cardTypeChanged = (type: string) => {\n setCardType(type);\n };\n\n const onFocus = (type: string) => {\n switch(type) {\n case BLPAY.ZIP:\n setZip((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.COUNTRY:\n setCountry((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.CARD_NUMBER:\n setCardNumber((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.CVV:\n setCVV((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.MONTH:\n setMonth((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.YEAR:\n setYear((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.CARD_HOLDER:\n setCardHolder((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.ADDRESS1:\n setAddress1((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.ADDRESS2:\n setAddress2((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.CITY:\n setCity((prev: any) => { return { ...prev, focus: true }; });\n break;\n case BLPAY.STATE:\n setState((prev: any) => { return { ...prev, focus: true }; });\n break;\n }\n };\n\n const onChange = (type: string, value: string) => {\n switch(type) {\n case BLPAY.ZIP:\n setZip((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.COUNTRY:\n setCountry((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.CARD_NUMBER:\n setCardNumber((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.CVV:\n setCVV((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.MONTH:\n setMonth((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.YEAR:\n setYear((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.CARD_HOLDER:\n setCardHolder((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.ADDRESS1:\n setAddress1((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.ADDRESS2:\n setAddress2((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.CITY:\n setCity((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n case BLPAY.STATE:\n setState((prev: any) => { return { ...prev, currentValue: value }; });\n break;\n }\n };\n\n const onBlur = (type: string) => {\n switch(type) {\n case BLPAY.ZIP:\n setZip((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.COUNTRY:\n setCountry((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.CARD_NUMBER:\n setCardNumber((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.CVV:\n setCVV((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.MONTH:\n setMonth((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.YEAR:\n setYear((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.CARD_HOLDER:\n setCardHolder((prev: any) => { return { ...prev, focus: false }; });\n break;\n case BLPAY.ADDRESS1:\n const address1Error = validateBillingField(type, address1.currentValue);\n setAddress1((prev: any) => { return { ...prev, focus: false, errors: address1Error, isInvalid: address1Error !== '' }; });\n break;\n case BLPAY.ADDRESS2:\n const address2Error = validateBillingField(type, address2.currentValue);\n setAddress2((prev: any) => { return { ...prev, focus: false, errors: address2Error, isInvalid: address2Error !== '' }; });\n break;\n case BLPAY.CITY:\n const cityError = validateBillingField(type, city.currentValue);\n setCity((prev: any) => { return { ...prev, focus: false, errors: cityError, isInvalid: cityError !== '' }; });\n break;\n case BLPAY.STATE:\n const stateError = validateBillingField(type, state.currentValue, country.currentValue);\n setState((prev: any) => { return { ...prev, focus: false, errors: stateError, isInvalid: stateError !== '' }; });\n break;\n }\n };\n\n const onValidation = (type: string, errors: any) => {\n setErrors(type, errors);\n };\n\n function validateBillingField(type: string, value: string, dependentValue?: string) {\n if(type === BLPAY.ADDRESS1) {\n if(!value) {\n return BL_PAY_ERRORS[type].required;\n }\n }\n\n if(type === BLPAY.CITY) {\n if(!value) {\n return BL_PAY_ERRORS[type].required;\n }\n }\n\n if(type === BLPAY.STATE) {\n if(!value && dependentValue === 'US') {\n return BL_PAY_ERRORS[type].required;\n }\n }\n\n return '';\n }\n\n function setErrors(type: string, errors: string[]) {\n const errorMessage = getErrorMessage(type, errors);\n\n switch(type) {\n case BLPAY.ZIP:\n setZip((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n case BLPAY.COUNTRY:\n setCountry((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n case BLPAY.CARD_NUMBER:\n setCardNumber((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n case BLPAY.CVV:\n setCVV((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n case BLPAY.MONTH:\n setMonth((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n case BLPAY.YEAR:\n setYear((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n case BLPAY.CARD_HOLDER:\n setCardHolder((prev: any) => { return { ...prev, errors: errorMessage, isInvalid: errorMessage !== '' }; });\n break;\n }\n }\n\n function preFillFormFields(userData: any, defaultForm: any) {\n const { firstName, lastName, zip } = userData?.requiredFields;\n\n if(firstName && lastName) {\n defaultForm.controls.cardholderName.value = `${firstName} ${lastName}`;\n }\n\n if(zip) {\n defaultForm.controls.zip.value = zip;\n }\n }\n\n useEffect(() => {\n if(blPayForm || !provider.BridalLivePay || ignore(userData)) {\n return;\n }\n\n const pay = blPay || new window.BLPay(retailerId);\n\n if(window.location && window.location.hostname !== 'app.bridallive.com') {\n pay.enableTestMode();\n }\n\n preFillFormFields(userData, defaultForm);\n defaultForm.customAuthorizationRequestHeaders = { token: function () { return json._key; }};\n defaultForm.customAuthorizationRequestData = { auth: function () { return ''; }, capturePayment: function () { return false; }};\n\n const form = pay.createForm(defaultForm);\n\n form\n .on(EVENTS.AUTH, function() {\n setLoading(false);\n setFormErrors(\"Uh oh something went wrong, please contact the store.\");\n })\n .on(EVENTS.EXPIRE, tokenRefresh)\n .on(EVENTS.READY, ready)\n .on(EVENTS.VALIDATION, errors);\n\n form.control(BLPAY.CARD_NUMBER)\n .on(EVENTS.CARD_TYPE, cardTypeChanged)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.CARD_NUMBER))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.CARD_NUMBER));\n\n form.control(BLPAY.MONTH)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.MONTH))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.MONTH))\n .on(EVENTS.CHANGE, (value:string) => onChange(BLPAY.MONTH, value));\n\n form.control(BLPAY.YEAR)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.YEAR))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.YEAR))\n .on(EVENTS.CHANGE, (value:string) => onChange(BLPAY.YEAR, value));\n\n form.control(BLPAY.CVV)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.CVV))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.CVV));\n\n form.control(BLPAY.ZIP)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.ZIP))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.ZIP))\n .on(EVENTS.CHANGE, (value:string) => onChange(BLPAY.ZIP, value));\n\n form.control(BLPAY.COUNTRY)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.COUNTRY))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.COUNTRY))\n .on(EVENTS.CHANGE, (value:string) => onChange(BLPAY.COUNTRY, value));\n\n form.control(BLPAY.CARD_HOLDER)\n .on(EVENTS.FOCUS, () => onFocus(BLPAY.CARD_HOLDER))\n .on(EVENTS.BLUR, () => onBlur(BLPAY.CARD_HOLDER))\n .on(EVENTS.CHANGE, (value:string) => onChange(BLPAY.CARD_HOLDER, value));\n\n form.control(BLPAY.MONTH).on(EVENTS.VALIDATION, (errors:any) => onValidation(BLPAY.MONTH, errors));\n form.control(BLPAY.YEAR).on(EVENTS.VALIDATION, (errors:any) => onValidation(BLPAY.YEAR, errors));\n form.control(BLPAY.CVV).on(EVENTS.VALIDATION, (errors:any) => onValidation(BLPAY.CVV, errors));\n form.control(BLPAY.CARD_NUMBER).on(EVENTS.VALIDATION, (errors:any) => onValidation(BLPAY.CARD_NUMBER, errors));\n form.control(BLPAY.CARD_HOLDER).on(EVENTS.VALIDATION, (errors:any) => onValidation(BLPAY.CARD_HOLDER, errors));\n form.control(BLPAY.ZIP).on(EVENTS.VALIDATION, (errors:any) => onValidation(BLPAY.ZIP, errors));\n\n setBLPay(pay);\n setBLPayForm(form);\n\n return () => {\n try {\n Logger.log('Unmount bl pay hook');\n form.destroy();\n Logger.log('successfully destroyed form');\n } catch (e) {\n Logger.log('Failed to destroy form');\n }\n };\n }, []);\n\n return {\n zip,\n year,\n month,\n cvv,\n cardNumber,\n country,\n cardHolder,\n cardType,\n loading,\n captureBilling,\n address1,\n address2,\n city,\n state,\n formErrors,\n onChange,\n onBlur,\n onFocus,\n submit,\n destroy\n };\n};\n\nexport default useBridalLivePay;\n","import { Link, Text } from \"@chakra-ui/layout\";\nimport React from \"react\";\n\nconst GoogleRecaptchaText = () => {\n return (\n \n This site is protected by reCAPTCHA and the Google{\" \"}\n \n Privacy Policy\n \n {\" \"}and{\" \"}\n \n Terms of Service\n \n {\" \"}apply.\n \n );\n};\n\nexport default GoogleRecaptchaText;\n","\n\ntype Props = {\n cardType: undefined | string;\n cardClassName?: undefined | string;\n};\n\nconst cardImageType = (type: string) => {\n //TODO: Add card image \"Diners\";\n switch(type) {\n case 'Diner':\n return 'DINER!!!';\n case 'VS':\n return 'https://app.bridallive.com/assets/img/visa.png';\n case 'visa':\n return 'https://app.bridallive.com/assets/img/visa.png';\n case 'Visa':\n return 'https://app.bridallive.com/assets/img/visa.png';\n case 'MC':\n return 'https://app.bridallive.com/assets/img/mastercard.png';\n case 'mastercard':\n return 'https://app.bridallive.com/assets/img/mastercard.png';\n case 'MasterCard':\n return 'https://app.bridallive.com/assets/img/mastercard.png';\n case 'DC':\n return 'https://app.bridallive.com/assets/img/discover.png';\n case 'discover':\n return 'https://app.bridallive.com/assets/img/discover.png';\n case 'Discover':\n return 'https://app.bridallive.com/assets/img/discover.png';\n case 'AX':\n return 'https://app.bridallive.com/assets/img/american_express.png';\n case 'american express':\n return 'https://app.bridallive.com/assets/img/american_express.png';\n case 'American Express':\n return 'https://app.bridallive.com/assets/img/american_express.png';\n default:\n return undefined;\n }\n};\n\nconst CreditCardTypeImage = ({ cardType, cardClassName = '' }: Props) => {\n if(cardType === undefined) {\n return null;\n }\n\n const image = cardImageType(cardType);\n\n if(image === undefined) {\n return null;\n }\n\n return (\n {image}\n );\n};\n\nexport default CreditCardTypeImage;\n","import dayjs from \"dayjs\";\nimport _ from \"lodash\";\n\nconst UNITED_STATES = 'US';\n\nconst BL_PAY_ERROR_MESSAGES: any[] = [\n {\n type: 'Zip - Zip is Required',\n message: 'payment.fullsteam.invalid_zip'\n },\n {\n type:'HostedControlsCardDetailsViewModel.Zip',\n message: 'payment.fullsteam.invalid_zip'\n },\n {\n type:'ExpirationMonth',\n message: 'payment.fullsteam.invalid_month'\n },\n {\n type:'ExpirationYear',\n message: 'payment.fullsteam.invalid_year',\n method: 'getCreditCardYears'\n }\n];\n\nconst helper = {\n validateBillingAddress: function(address1: string, city: string, state: string, zip: string, country: string) {\n if(_.isEmpty(country)) {\n return 'payment.fullsteam.invalid_country';\n }\n\n if(country !== UNITED_STATES) {\n if(_.isEmpty(address1) || _.isEmpty(city) || _.isEmpty(zip) || _.isEmpty(country)) {\n return 'payment.fullsteam.invalid_address_non_us';\n }\n } else if(country === UNITED_STATES) {\n if(_.isEmpty(address1) || _.isEmpty(city) || _.isEmpty(state) || _.isEmpty(zip) || _.isEmpty(country)) {\n return 'payment.fullsteam.invalid_address';\n }\n }\n\n return null;\n },\n parseErrorMessage: function(errorMessage: any, translate: any) {\n let setMessage = false;\n let message = '';\n\n _(BL_PAY_ERROR_MESSAGES).each(function(error) {\n if(_.includes(errorMessage, error?.type) && !setMessage) {\n setMessage = true;\n message = helper.buildErrorMessage(error, translate);\n }\n });\n\n if(message) {\n return message;\n }\n\n return `${errorMessage}`\n },\n getCreditCardYears: function() {\n let years = [];\n let startYear = dayjs().year();\n for(let i = 0; i < 9; i++) {\n years.push(startYear++);\n }\n\n return {\n one: years[0],\n two: years[years.length - 1]\n };\n },\n buildErrorMessage: function(error: any, translate: any) {\n if(error?.method) {\n return translate(error?.message, helper.getCreditCardYears());\n } else {\n return translate(error?.message);\n }\n }\n};\n\nexport default helper;\n","import React, { useState } from 'react';\nimport { useForm } from \"../StepsBuilder\";\nimport UrlHelper from \"../../utils/url-helper\";\nimport { InputGroup, InputRightElement, Select as FormSelect } from '@chakra-ui/react';\nimport useBridalLivePay from \"../../hooks/useBridalLIvePay\";\nimport { FormControl, FormErrorMessage, FormLabel } from \"@chakra-ui/form-control\";\nimport { Input } from \"@chakra-ui/input\";\nimport { useTranslation } from \"react-i18next\";\nimport { HStack } from \"@chakra-ui/layout\";\nimport PaymentDetailsHelper from \"../../utils/payment-details-helper\";\nimport GoogleRecaptchaText from \"../layout/GoogleRecaptchaText\";\nimport CreditCardTypeImage from \"./CreditCardTypeImage\";\nimport PaymentFormError from \"./PaymentFormError\";\nimport PaymentsNavigation from \"./PaymentsNavigation\";\nimport { STATES } from \"../../utils/constants\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport BLPayHelper from \"../../utils/bl-pay-error-helper\";\nimport '../../styles/bl-pay.css';\n\ntype Props = {\n onSuccess: (data: any) => void;\n formLoading?: boolean;\n};\n\nconst BridalLivePay = ({ onSuccess } :Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const layoutType = form.json.layoutType;\n const [charging, setCharging] = useState(false);\n const [errors, setErrors] = useState();\n const retailerId = UrlHelper.getParam('retailerId');\n const {\n destroy,\n submit,\n onChange,\n onFocus,\n onBlur,\n cardNumber,\n cardHolder,\n cardType,\n cvv,\n month,\n year,\n zip,\n country,\n address1,\n address2,\n city,\n state,\n loading,\n captureBilling,\n formErrors\n } = useBridalLivePay(retailerId);\n\n const handleSubmit = (e: any) => {\n e.preventDefault();\n\n let data: any = {\n firstName: form.userData?.requiredFields?.firstName,\n lastName: form.userData?.requiredFields?.lastName\n };\n\n if(captureBilling) {\n const invalid_address = BLPayHelper.validateBillingAddress(address1?.currentValue, city?.currentValue, state?.currentValue, zip?.currentValue, country?.currentValue);\n\n if(invalid_address) {\n setErrors(t(invalid_address));\n return;\n }\n\n data.address1 = address1.currentValue;\n data.address2 = address2.currentValue;\n data.city = city.currentValue;\n\n if(country?.currentValue === 'US') {\n data.state = state.currentValue;\n }\n }\n\n setErrors(undefined);\n setCharging(true);\n\n submit(data, function(error, results) {\n if(error) {\n setErrors(BLPayHelper.parseErrorMessage(error, t));\n setCharging(false);\n } else {\n setErrors(undefined);\n results.accountDetails.cardType = cardType;\n onSuccess(PaymentDetailsHelper.buildPaymentDetails(results, 'F'));\n destroy();\n }\n });\n };\n\n const handleBackClick = () => {\n form.goToPrevStep(true);\n };\n\n return (\n <>\n \n \n
{ InputHelper.onKeyDown(e) }}>\n\n \n {t(cardHolder.label)}\n \n {cardHolder.errors && cardHolder.errors}\n \n\n \n {t(cardNumber.label)}\n \n \n } />\n \n {cardNumber.errors && cardNumber.errors}\n \n\n \n \n {t(month.label)}\n \n {month.errors && month.errors}\n \n\n \n {t(year.label)}\n \n {year.errors && year.errors}\n \n \n\n \n {t(cvv.label)}\n \n {cvv.errors && cvv.errors}\n \n\n {captureBilling && (\n <>\n \n {t(address1.label)}\n onChange(target.name, target.value)}\n onFocus={({ target }) => onFocus(target.name)}\n onBlur={({ target }) => onBlur(target.name)}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n value={address1.currentValue} bgColor=\"white\" />{address1.errors && address1.errors}\n \n\n \n {t(address2.label)}\n onChange(target.name, target.value)}\n onFocus={({ target }) => onFocus(target.name)}\n onBlur={({ target }) => onBlur(target.name)}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n value={address2.currentValue} bgColor=\"white\" />{address2.errors && address2.errors}\n \n\n \n {t(city.label)}\n onChange(target.name, target.value)}\n onFocus={({ target }) => onFocus(target.name)}\n onBlur={({ target }) => onBlur(target.name)}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}\n value={city.currentValue} bgColor=\"white\" />{city.errors && city.errors}\n \n\n {country.currentValue === 'US' &&\n \n {t(state.label)}\n onChange(target.name, target.value)}\n onFocus={({ target }) => onFocus(target.name)}\n onBlur={({ target }) => onBlur(target.name)}\n onKeyPress={(e) => InputHelper.onKeyDown(e)}>\n {STATES.map((s, idx) => (\n \n ))}\n \n {state.errors && state.errors}\n \n }\n \n )}\n\n \n {t(zip.label)}\n \n {zip.errors && zip.errors}\n \n\n \n {t(country.label)}\n \n {country.errors && country.errors}\n \n\n {layoutType === 'steps' &&\n <>\n
\n \n
\n \n \n }\n \n \n )\n};\n\nexport default BridalLivePay;\n","const MASKS:any = {\n 'MasterCard': '9999 9999 9999 9999',\n 'Visa': '9999 9999 9999 9999',\n 'American Express': '9999 999999 99999',\n 'Diners': '9999 9999 9999 99',\n 'Discover': '9999 9999 9999 9999',\n 'Unknown': '9999 9999 9999 9999'\n};\n\nconst helper = {\n stripAlpha: function(str: string) {\n return str.replace(/[^0-9]/g, '');\n },\n amex: function(num: string) {\n let amex:any = {};\n let length:string = '_1';\n\n amex['_1'] = function(str:string) {\n return num;\n };\n amex['_2'] = function(str:string) {\n return num;\n };\n amex['_3'] = function(str:string) {\n return num;\n };\n amex['_4'] = function(str:string) {\n return num;\n };\n amex['_5'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n amex['_6'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n amex['_7'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n amex['_8'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n amex['_9'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n amex['_10'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n amex['_11'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,10) +' '+ str.slice(10, 15);\n };\n amex['_12'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,10) +' '+ str.slice(10, 15);\n };\n amex['_13'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,10) +' '+ str.slice(10, 15);\n };\n amex['_14'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,10) +' '+ str.slice(10, 15);\n };\n amex['_15'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,10) +' '+ str.slice(10, 15);\n };\n\n amex['max'] = function (str: string) {\n return str.substr(0,4) +' '+ str.slice(4,10) +' '+ str.slice(10, 15);\n };\n\n if(!num || num.length === 0 || num.length > 15) {\n if(num && num.length > 15) {\n return amex['max'](num);\n }\n\n return num;\n }\n\n length = '_'+num.length;\n return amex[length](num);\n },\n diner: function (num: string) {\n let diner:any = {};\n let length:string = '_1';\n\n diner['_1'] = function(str:string) {\n return num;\n };\n diner['_2'] = function(str:string) {\n return num;\n };\n diner['_3'] = function(str:string) {\n return num;\n };\n diner['_4'] = function(str:string) {\n return num;\n };\n diner['_5'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n diner['_6'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n diner['_7'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4);\n };\n diner['_8'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8);\n };\n diner['_9'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8);\n };\n diner['_10'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8);\n };\n diner['_11'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8);\n };\n diner['_12'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8, 12) + ' ' + str.slice(12);\n };\n diner['_13'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8, 12) + ' ' + str.slice(12);\n };\n diner['_14'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8, 12) + ' ' + str.slice(12);\n };\n diner['_15'] = function(str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8, 12) + ' ' + str.slice(12);\n };\n\n diner['max'] = function (str:string) {\n return str.substr(0,4) +' '+ str.slice(4,8) +' '+ str.slice(8, 12) + ' ' + str.slice(12);\n };\n\n if(!num || num.length === 0 || num.length > 15) {\n if(num && num.length > 15) {\n return diner['max'](num);\n }\n\n return num;\n }\n\n length = '_'+num.length;\n return diner[length](num);\n },\n getMaskType: function(type: string) {\n return MASKS[type];\n },\n getCreditCardType: function(creditCardNumber: string) {\n let result = \"Unknown\";\n\n if(/^5[1-5]/.test(creditCardNumber)) {\n result = \"MasterCard\";\n } else if (/^4/.test(creditCardNumber)) {\n result = \"Visa\";\n } else if (/^3[47]/.test(creditCardNumber)) {\n result = \"American Express\";\n } else if (/3(?:0[0-5]|[68][0-9])[0-9]{11}/.test(creditCardNumber)) {\n result = \"Diners\";\n } else if (/6(?:011|5[0-9]{2})[0-9]{12}/.test(creditCardNumber)) {\n result = \"Discover\";\n }\n\n return result;\n }\n};\n\n\n\n\n\nexport default helper;\n","import { useState } from 'react';\nimport { useFormPayment } from \"../contexts/useFormPayment\";\nimport { useForm } from \"../components/StepsBuilder\";\nimport { CIP_FIELDS } from '../utils/constants';\nimport CreditCardHelper from \"../utils/credit-card-helper\";\nimport { createCIPToken } from \"../utils/axios-api\";\nimport dayjs from \"dayjs\";\nimport { CIPTokenRequest } from \"../interfaces\";\n\nfunction validateCardNumber(number: string) {\n const regex = new RegExp(\"^[0-9]{15,16}$\");\n if(regex.test(number)) return true;\n return luhnCheck(number);\n}\n\nfunction luhnCheck(val: string) {\n let sum = 0;\n for (let i = 0; i < val.length; i++) {\n let intVal = parseInt(val.substr(i, 1));\n if (i % 2 === 0) {\n intVal *= 2;\n if (intVal > 9) {\n intVal = 1 + (intVal % 10);\n }\n }\n sum += intVal;\n }\n return (sum % 10) === 0;\n}\n\nconst normalizeCardNumber = (value: string, mask: string) => {\n value = CreditCardHelper.stripAlpha(value);\n\n if(mask === '9999 999999 99999') {\n return CreditCardHelper.amex(value);\n } else if(mask === '9999 9999 9999 99') {\n return CreditCardHelper.diner(value);\n }\n\n return value.match(/.{1,4}/g)?.join(\" \").substr(0, 19) || \"\";\n};\n\nconst initializeDefaults = function (id: string, key: string, isRequired = true, userData: any) {\n const { firstName, lastName, zip } = userData?.requiredFields;\n let value = null;\n\n if(id === CIP_FIELDS.BILLING_NAME && firstName && lastName) {\n value = `${firstName} ${lastName}`;\n }\n\n if(id === CIP_FIELDS.ZIP && zip) {\n value = zip;\n }\n\n return {\n id: id,\n label: key,\n required: isRequired,\n value: value\n };\n};\n\nconst useChargeItPro = () => {\n const provider = useFormPayment();\n const { userData } = useForm();\n const [cardType, setCardType] = useState();\n const [cardNumber] = useState(()=> initializeDefaults(CIP_FIELDS.CC_NUMBER_MASK, 'payment.card_number', true, userData));\n const [nameOnCard] = useState(()=> initializeDefaults(CIP_FIELDS.BILLING_NAME, 'payment.card_holder', true, userData));\n const [cvv] = useState(()=> initializeDefaults(CIP_FIELDS.CVV, 'payment.cvv', true, userData));\n const [month] = useState(()=> initializeDefaults(CIP_FIELDS.MONTH, 'payment.month', true, userData));\n const [year] = useState(()=> initializeDefaults(CIP_FIELDS.YEAR, 'payment.year', true, userData));\n const [zip] = useState(()=> initializeDefaults(CIP_FIELDS.ZIP, 'payment.zip', true, userData));\n\n const isNumeric = (value:string) => /^-?\\d+$/.test(value);\n\n const validateMonth = (value: string): boolean => {\n return dayjs(value, 'MM').isValid();\n };\n\n const validateYear = (value: string) => {\n let valid: boolean;\n let year = value;\n\n if(value && value.length === 2) {\n const c = `${dayjs().year()}`;\n year = `${c.substr(0, 2)}${year}`;\n }\n\n valid = dayjs(year, 'YYYY').isValid();\n\n if(valid) {\n const current = dayjs().year();\n const y = dayjs().year(+year).get('year');\n valid = y >= current;\n\n if(!valid) {\n return `Year ${y} is before ${current}`;\n }\n }\n\n return valid;\n };\n\n const validateZip = (value: string) => {\n return /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(value);\n };\n\n const validateCard = (value: string) => {\n return validateCardNumber(value);\n };\n\n const validateCVV = (value: string) => {\n return /^[0-9]{3,4}$/.test(value);\n };\n\n const createToken = async (formData: any, callback:any) => {\n try {\n const request: CIPTokenRequest = {\n merchantName: provider.apiKey,\n card: {\n accountdata: formData.accountdata,\n billingname: formData.billingname,\n expiration: `${formData[CIP_FIELDS.MONTH]}${formData[CIP_FIELDS.YEAR]}`,\n cvvnumber: formData.cvvnumber,\n billingzip: formData.zip\n }\n };\n\n const response = await createCIPToken(request);\n\n if(response && response.Token) {\n callback(null, response);\n } else {\n let error = { message: 'Failed to capture card.' };\n if(response && response.Error) {\n error.message = response.Error.Message;\n }\n\n callback(error, null);\n }\n } catch (e) {\n console.log('Error!', e);\n callback(e, null);\n }\n };\n\n const onCardNumberChange = (event: any, setValue: any) => {\n const { value } = event.target;\n const type = CreditCardHelper.getCreditCardType(value);\n setCardType(type);\n\n const formatted = normalizeCardNumber(value, CreditCardHelper.getMaskType(type));\n setValue(CIP_FIELDS.CC_NUMBER, CreditCardHelper.stripAlpha(formatted), { shouldValidate: true });\n event.target.value = formatted;\n };\n\n return {\n onCardNumberChange,\n createToken,\n validateCard,\n validateMonth,\n validateYear,\n validateCVV,\n validateZip,\n isNumeric,\n cardType,\n cardNumber,\n nameOnCard,\n cvv,\n month,\n year,\n zip\n };\n};\n\nexport default useChargeItPro;\n","import React from 'react';\nimport { useTranslation } from \"react-i18next\";\n\ntype Props = {\n errors: any;\n field: any;\n}\n\nconst ChargeItProFieldError = ({ errors, field }: Props) => {\n const { t } = useTranslation();\n const error = errors[field.id];\n const type = error?.type;\n const message = error?.message;\n\n switch(type) {\n case 'required':\n const key = message ? message : 'payment.field_required';\n return {t(key)};\n case 'maxLength':\n return {t('payment.cip.max')};\n case 'minLength':\n return {t('payment.cip.min')};\n case 'isNumeric':\n return {t('payment.cip.digits')};\n case 'month':\n return {t('payment.cip.invalid_month')};\n case 'year':\n return {t('payment.cip.invalid_year')};\n case 'zip':\n return {t('payment.cip.invalid_zip')};\n case 'card':\n return {t('payment.cip.invalid_card')};\n case 'cvv':\n return {t('payment.cip.invalid_cvv')};\n default:\n return ;\n }\n};\n\nexport default ChargeItProFieldError;\n","import React, { useState } from 'react';\nimport useChargeItPro from \"../../hooks/useChargeItPro\";\nimport { HStack } from \"@chakra-ui/layout\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"../StepsBuilder\";\nimport PaymentDetailsHelper from \"../../utils/payment-details-helper\";\nimport { FormControl, FormErrorMessage, FormLabel } from \"@chakra-ui/form-control\";\nimport { Input, InputGroup, InputRightElement } from \"@chakra-ui/input\";\nimport PaymentFormError from \"./PaymentFormError\";\nimport { saveCard } from \"../../utils/axios-api\";\nimport UrlHelper from \"../../utils/url-helper\";\nimport CreditCardTypeImage from \"./CreditCardTypeImage\";\nimport { useForm as useReactFormHook } from 'react-hook-form';\nimport { CIP_FIELDS } from '../../utils/constants';\nimport ChargeItProFieldError from \"./ChargeItProFieldError\";\nimport InputHelper from \"../../utils/input-event-helper\";\nimport ErrorHelper from \"../../utils/error-helper\";\nimport PaymentsNavigation from \"./PaymentsNavigation\";\n\ntype Props = {\n onSuccess: (data: any) => void;\n formLoading?: boolean;\n}\n\nconst ChargeItPro = ({ onSuccess, formLoading }: Props) => {\n const { t } = useTranslation();\n const form = useForm();\n const layoutType = form.json.layoutType;\n const formType = UrlHelper.getParam('formType');\n const { onCardNumberChange, createToken, validateCard, validateMonth, validateYear, validateCVV, validateZip, isNumeric, cardType, cardNumber, nameOnCard, month, year, cvv, zip } = useChargeItPro();\n const [error, setErrors] = useState();\n const [loading, setLoading] = useState(false);\n\n const { register, handleSubmit, formState: { errors }, setValue } = useReactFormHook({\n reValidateMode: 'onBlur',\n defaultValues: {\n [CIP_FIELDS.CC_NUMBER]: '',\n [CIP_FIELDS.ZIP]: zip.value,\n [CIP_FIELDS.BILLING_NAME]: nameOnCard.value\n }\n });\n\n const isInvalid = (errors: any, type: string) => {\n return !!errors[type];\n };\n\n const onSubmit = async (formData: any) => {\n if(loading) {\n return;\n }\n\n setErrors(undefined);\n setLoading(true);\n\n createToken(formData, async function (error: any, results: any) {\n if(error) {\n let message = error?.message;\n\n if(!message) {\n message = ErrorHelper.buildErrorMessage(t('errors.something_went_wrong'), '', null, null).message;\n }\n\n setErrors(message);\n setLoading(false);\n } else {\n try {\n const card = await saveCard(formType, form.json._key, { token: results.Token, tokenProvider: 'C' });\n setErrors(undefined);\n onSuccess(PaymentDetailsHelper.buildPaymentDetails(card, 'C'));\n } catch (e: any) {\n if(ErrorHelper.isTokenExpired(e)) {\n const error = ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', null);\n setErrors(error.message);\n } else {\n const error = ErrorHelper.buildErrorMessage(t('errors.something_went_wrong'), '', e);\n setErrors(error.message);\n }\n\n } finally {\n setLoading(false);\n }\n }\n });\n };\n\n const handleBackClick = () => {\n form.goToPrevStep(true);\n };\n\n return (\n <>\n \n
{ InputHelper.onKeyDown(e) }}>\n \n {t(nameOnCard.label)}\n \n \n \n \n \n\n \n {t(cardNumber.label)}\n \n onCardNumberChange(e, setValue)} type={'tel'} inputMode={'numeric'} autoComplete={'cc-number'} id={cardNumber.id} data-cip={cardNumber.id} value={cardNumber.value} bgColor=\"white\" placeholder=\"XXXX XXXX XXXX XXXX\" />\n }/>\n validateCard(value), isNumeric: (value:any) => isNumeric(value) } })}/>\n \n \n \n \n \n\n \n \n {t(month.label)}\n validateMonth(value), isNumeric: (value:any) => isNumeric(value) } })}/>\n \n \n \n \n \n {t(year.label)}\n validateYear(value), isNumeric: (value:any) => isNumeric(value) } })}/>\n \n \n \n \n \n {t(cvv.label)}\n validateCVV(value), isNumeric: (value:any) => isNumeric(value) } })}/>\n \n \n \n \n \n\n \n {t(zip.label)}\n validateZip(value) } })}/>\n \n \n \n \n\n {layoutType === 'steps' &&\n \n }\n\n \n \n )\n};\n\nexport default ChargeItPro;\n","import React from 'react';\nimport { Spinner } from '@chakra-ui/react';\nimport { useTranslation } from \"react-i18next\";\nimport { Stack } from \"@chakra-ui/layout\";\n\n\ntype Props = {\n messageKey: string;\n className: string;\n absolutePositioning?: boolean;\n};\n\nconst SubmittingForm = ({className, absolutePositioning, messageKey}: Props) => {\n const { t } = useTranslation();\n\n return (\n \n \n {t(messageKey)}\n \n );\n};\n\nexport default SubmittingForm;","import _ from \"lodash\";\nimport dayjs from \"dayjs\";\n\nconst helper = {\n getValue(field: any, form: any, key: string, step: string): any {\n let value = form.userData[step][field.id];\n\n if(_.isObject(value)) {\n // @ts-ignore\n return helper.formatValue(value.value, field);\n } else if(field.type === 'checkbox' && step === 'additionalDetails') {\n value = helper.getCheckBoxValues(field, form.userData[step]);\n } else if(field.type === 'checkbox') {\n return !!(value) ? '✔' : '';\n } else if(step === 'additionalDetails' && (field.type === 'select' || field.type === 'radio')) {\n return helper.getOptionLabel(value, field);\n } else if(field.type === 'select') {\n return helper.getSelectLabel(value, field);\n }\n\n return helper.formatValue(value, field);\n },\n\n formatValue(value: string | any, field: any): string {\n if(!value) {\n return 'N/A';\n }\n\n if(field.type === 'date' && value) {\n return dayjs(value).format('dddd, MMMM D, YYYY');\n }\n \n return value;\n },\n getOptionLabel(value: string, field: any): string {\n return _.find(field?.options, { id: value })?.label;\n },\n getSelectLabel(value: string, field: any): string {\n return _.find(field?.options, { value: value })?.label;\n },\n getCheckBoxValues(field: any, customFields: any): any {\n const boxOptions = field.options?.filter(function(option: any) {\n return !!(option && option.value);\n }).map(function(option: any) {\n if(option.id) {\n return { id: option.id, label: option.label };\n } else {\n return { id: field.id, label: option.label };\n }\n });\n\n if(boxOptions && boxOptions.length) {\n let values: string[] = [];\n\n boxOptions.forEach(function(checkbox: any) {\n if(customFields[checkbox.id]) {\n values.push(checkbox.label);\n }\n });\n\n if(values && values.length) {\n return values.join(', ');\n }\n }\n\n return '';\n }\n\n};\n\nexport default helper;\n","import React, {useState} from \"react\";\nimport _ from \"lodash\";\nimport { STEPS } from '../../utils/constants';\nimport { useForm } from \"../StepsBuilder\";\nimport { Stack } from \"@chakra-ui/react\";\nimport SummaryHelper from \"../../utils/summary-helper\"\n\nconst init = function (form:any) {\n const requiredFieldsStep = _.find(form?.json?.steps, { id: STEPS.requiredFields });\n return requiredFieldsStep?.fields!\n .filter(function(field: any) {\n return true;\n })\n .map(function(field: any) {\n return {\n id: field.id,\n type: field.type,\n label: field.label,\n sequenceNumber: field.sequenceNumber,\n options: field.options\n }\n });\n};\n\nconst RequiredDetailsSummary = function () {\n const form = useForm();\n const [requiredFields] = useState(() => init(form));\n\n if(!requiredFields || !requiredFields.length || !form.userData || !form.userData.requiredFields) {\n return null;\n }\n\n return (\n \n {requiredFields?.map((field: any, index: number) => (\n
\n \n {field.label}:  \n \n \n
\n ))}\n
\n )\n\n};\n\nexport default RequiredDetailsSummary;\n","import React, { useState } from \"react\";\nimport SummaryHelper from \"../../utils/summary-helper\";\nimport _ from \"lodash\";\nimport { STEPS } from \"../../utils/constants\";\nimport { Stack } from \"@chakra-ui/react\";\nimport { useForm } from \"../StepsBuilder\";\n\nconst init = function (form:any) {\n const additionalDetailsStep = _.find(form?.json?.steps, { id: STEPS.additionalDetails });\n\n if(!additionalDetailsStep || !additionalDetailsStep.enabled || !additionalDetailsStep.customFields || !additionalDetailsStep.customFields.length) {\n return undefined;\n }\n\n return additionalDetailsStep?.customFields!\n .filter(function(field: any) {\n return !form.userData.appointmentType || _.isEmpty(field.customFieldAppointmentTypeIds) || _.includes(field.customFieldAppointmentTypeIds, form.userData.appointmentType);\n })\n .map(function(field: any) {\n return {\n id: field.id,\n type: field.type,\n label: field.label,\n sequenceNumber: field.sequenceNumber,\n options: field.options\n }\n });\n};\n\nconst CustomFieldsSummary = function () {\n const form = useForm();\n const [additionalDetails] = useState<[]>(() => init(form));\n\n if(!additionalDetails || !form.userData || !form?.userData?.additionalDetails) {\n return null;\n }\n\n return (\n \n {additionalDetails?.map((field: any, index: number) => (\n
\n {field.label}:  {SummaryHelper.getValue(field, form,field.type, STEPS.additionalDetails)}\n
\n ))}\n
\n );\n\n};\n\nexport default CustomFieldsSummary;\n","import React from \"react\";\nimport dayjs from \"dayjs\";\nimport { useForm } from \"../StepsBuilder\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DateAndTimeSummary = function () {\n const form = useForm();\n const { t } = useTranslation();\n const format = `dddd, ${form.json.locale.mediumDate?.toUpperCase()} ${form.json.locale.smallTime} z`;\n\n if(!form || !form.userData || !form.userData.dateAndTime || !form.userData.dateAndTime.time) {\n return null;\n }\n\n return (\n
\n {t('appointment.date')}:   {dayjs(form.userData?.dateAndTime?.time).tz(form.json.company.timeZoneId).format(format)}\n
\n );\n};\n\nexport default DateAndTimeSummary;\n","import React from \"react\";\nimport { useForm } from \"../StepsBuilder\";\nimport { AppointmentType } from \"../../interfaces\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AppointmentTypeSummary = function () {\n const form = useForm();\n const { t } = useTranslation();\n\n if(!form.userData || !form.userData.appointmentType) {\n return null;\n }\n\n const type = form.json.appointmentTypes.find(a => a.id === form.userData.appointmentType) as AppointmentType;\n\n if(!type) {\n return null;\n }\n\n return(\n
\n {t('appointment.appointment_type')}:  {type.description}\n
\n );\n};\n\nexport default AppointmentTypeSummary;\n","import React from \"react\";\nimport { useForm } from \"../StepsBuilder\";\nimport { STEPS } from \"../../utils/constants\";\nimport { Stack } from \"@chakra-ui/react\";\nimport { useTranslation } from \"react-i18next\";\nimport CreditCardTypeImage from \"../payments/CreditCardTypeImage\";\n\ntype Props = {\n onPaymentMethodClick?: () => void;\n}\n\nconst PaymentDetailsSummary = ({ onPaymentMethodClick }: Props) => {\n const {t} = useTranslation();\n const form = useForm();\n const paymentDetails = form?.userData?.[STEPS.paymentDetails];\n\n if(!paymentDetails) {\n return null;\n }\n\n return (\n \n
\n {t('payment.card_holder')}:  {paymentDetails.paymentProfileBillingName}\n
\n
\n {t('payment.payment_method')}:  {paymentDetails.paymentProfileMaskedAcctNumber}   Clear and update card\n
\n
\n );\n};\n\nexport default PaymentDetailsSummary;\n","import React from \"react\";\nimport dayjs from \"dayjs\";\nimport { useForm } from \"../StepsBuilder\";\nimport { useTranslation } from \"react-i18next\";\nimport {WaitListTimeSlot} from \"../../interfaces\";\n\nconst WaitListSummary = function () {\n const form = useForm();\n const { t } = useTranslation();\n const format = `dddd, ${form.json.locale.mediumDate?.toUpperCase()}`;\n\n if(!form || !form.userData || !form.userData.dateAndTime || form.userData.dateAndTime.time || !form.userData.dateAndTime.waitList || !form.userData.dateAndTime.waitList.bookWithWaitList || !form.userData.dateAndTime.date) {\n return null;\n }\n\n return (\n
\n {t('appointment.date')}:   {dayjs(form.userData.dateAndTime.date).format(format)}\n {form.userData.dateAndTime.waitList.isAllDay && form.userData.dateAndTime.waitList.startTime && form.userData.dateAndTime.waitList.endTime && (\n
    \n
  • {form.userData.dateAndTime.waitList.startTime} - {form.userData.dateAndTime.waitList.endTime}
  • \n
\n )}\n {!form.userData.dateAndTime.waitList.isAllDay && form.userData.dateAndTime.waitList.timeSlots && form.userData.dateAndTime.waitList.timeSlots.length && (\n
    \n {form.userData.dateAndTime.waitList.timeSlots.map(function(slot: WaitListTimeSlot, idx: number) {\n return (\n
  • {slot.startTime} - {slot.endTime}
  • \n );\n })}\n
\n )}\n
\n );\n};\n\nexport default WaitListSummary;\n","import { Stack } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport RequiredDetailsSummary from \"./RequiredDetailsSummary\";\nimport CustomFieldsSummary from \"./CustomFieldsSummary\";\nimport DateAndTimeSummary from \"./DateAndTimeSummary\";\nimport AppointmentTypeSummary from \"./AppointmentTypeSummary\";\nimport PaymentDetailsSummary from \"./PaymentDetailsSummary\";\nimport WaitListSummary from \"./WaitListSummary\";\nimport { useForm } from \"../StepsBuilder\";\n\ntype Props = {\n onPaymentMethodClick?: () => void;\n}\n\nconst AppointmentDetails = ({ onPaymentMethodClick }: Props) => {\n const form = useForm();\n\n if(!form || !form.userData) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default AppointmentDetails;\n","import { Stack } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport AppointmentDetails from \"../Summary/AppointmentDetails\";\nimport StepsNavigation from \"../StepsNavigation\";\nimport {useForm} from \"../StepsBuilder\";\n\ntype Props = {\n showNavigation: boolean;\n onPaymentMethodClick?: () => void;\n}\n\nconst SummaryDetails = function ({ showNavigation, onPaymentMethodClick }: Props) {\n const form = useForm();\n const layoutType = form.json.layoutType;\n\n return (\n \n \n {showNavigation && layoutType === 'steps' && }\n \n )\n};\n\nexport default SummaryDetails;\n","import React, { useState } from 'react';\nimport { Box, Stack } from '@chakra-ui/react';\nimport { useForm } from '../StepsBuilder';\nimport { DynamicStepProps } from \"../DynamicStep\";\nimport Stripe from '../payments/Stripe';\nimport BridalLivePay from \"../payments/BridalLivePay\";\nimport ChargeItPro from \"../payments/ChargeItPro\";\nimport SubmittingForm from \"../payments/SubmittingForm\";\nimport PaymentsNavigation from \"../payments/PaymentsNavigation\";\nimport SummaryDetails from \"./SummaryDetails\";\nimport StepHelper from \"../../utils/step-helper\";\nimport { useFormPayment } from \"../../contexts/useFormPayment\";\n\nconst PAYMENT_PROVIDERS = {\n STRIPE: 'S',\n CHARGE_IT_PRO: 'C',\n BRIDAL_LIVE_PAY: 'F'\n};\n\nconst hasPaymentDetails = ({userData}: any) => {\n return !!(userData && userData.paymentDetails && userData.paymentDetails.paymentProfileToken);\n};\n\nconst PaymentDetails = ({ step, loading }: DynamicStepProps) => {\n const form = useForm();\n const paymentProvider = useFormPayment();\n const provider = form.json.paymentProvider.provider;\n const layoutType = form.json.layoutType;\n const [, setPaymentDetails] = useState(form.userData[step.id]);\n const currentStepIdx = StepHelper.determineCurrentStepIndex(form);\n const lastStepIndex = StepHelper.determineLastStepIndex(form.userData, form.json);\n\n function onSuccess(details: any) {\n setPaymentDetails(details);\n form.updateUserDataAndCallback({ [step.id]: details, signatureData: paymentProvider.saveSignature() }, function(userData: any) {\n if(currentStepIdx === lastStepIndex) {\n form.handleSubmit(userData);\n } else {\n form.goToNextStep(true);\n }\n });\n }\n\n const handleBackClick = () => {\n form.updateUserDataAndCallback({ captchaToken: null }, function (userData: any) {\n form.goToPrevStep(true);\n });\n };\n\n const handleClickNext = () => {\n if(currentStepIdx === lastStepIndex) {\n form.handleSubmit(form.userData);\n } else {\n form.goToNextStep(true);\n }\n };\n\n const clearPaymentDetails = () => {\n form.updateUserData({ [step.id]: null, signatureData: null });\n paymentProvider.clearSignature();\n setPaymentDetails(null);\n form.clearError();\n };\n\n if(loading) {\n return (\n
\n \n {layoutType === 'steps' && }\n
\n )\n }\n\n if(!loading && hasPaymentDetails(form)) {\n return (\n
\n \n {layoutType === 'steps' && }\n
\n );\n }\n\n return (\n \n \n {PAYMENT_PROVIDERS.STRIPE === provider && }\n {PAYMENT_PROVIDERS.CHARGE_IT_PRO === provider && }\n {PAYMENT_PROVIDERS.BRIDAL_LIVE_PAY === provider && }\n \n \n );\n};\n\nexport default PaymentDetails;\n","import React, {memo, useEffect, useRef} from \"react\";\nimport {useForm} from \"../StepsBuilder\";\n\ntype Props = {\n html: string,\n}\n\nconst ScriptInnerHtml = memo(({html}: Props) => {\n\n const divRef = useRef(null);\n const form = useForm();\n\n useEffect(() => {\n if (!html || form.confirmationRendered) return;\n const slotHtml = document.createRange().createContextualFragment(html);\n // @ts-ignore\n divRef.current.innerHTML = '';\n // @ts-ignore\n divRef.current.appendChild(slotHtml);\n form.updateConfirmationRendered(true)\n }, []);\n\n if(form.confirmationRendered) {\n return (\n
\n );\n } else {\n return (\n
\n )\n }\n\n\n\n});\n\nexport default memo(ScriptInnerHtml);","import React from \"react\";\nimport { FormConfirmationType } from \"../../interfaces\";\nimport ScriptInnerHtml from \"./ScriptInnerHtml\";\n\ntype Props = {\n confirmation: FormConfirmationType;\n};\n\nconst WaitList = ({ confirmation } : Props) => {\n return (\n
\n {confirmation && confirmation.confirmation && (\n
\n \n
\n )}\n
\n )\n};\n\nexport default WaitList;\n","import React from \"react\";\nimport { FormConfirmationType } from \"../../interfaces\";\nimport ScriptInnerHtml from \"./ScriptInnerHtml\";\n\ntype Props = {\n confirmation: FormConfirmationType;\n};\n\nconst AppointmentScheduler = ({ confirmation } : Props) => {\n\n return (\n
\n {confirmation && confirmation.confirmation && (\n
\n \n
\n )}\n
\n )\n};\n\nexport default AppointmentScheduler;\n","import SelectAppointmentType from './steps/SelectAppointmentType';\nimport SelectAssociate from './steps/SelectAssociate';\nimport SelectDateAndTime from './steps/SelectDateAndTime';\nimport CustomForm from './steps/CustomForm';\nimport PaymentDetails from './steps/PaymentDetails';\nimport Confirmation from './steps/Confirmation';\nimport { FormStep, Error } from '../interfaces';\nimport { ComponentType } from 'react';\nimport SummaryDetails from \"./steps/SummaryDetails\";\n\nconst components: { [name: string]: ComponentType } = {\n selectAppointmentType: SelectAppointmentType,\n selectAssociate: SelectAssociate,\n selectDateAndTime: SelectDateAndTime,\n defaultForm: CustomForm,\n customForm: CustomForm,\n paymentDetails: PaymentDetails,\n summaryDetails: SummaryDetails,\n confirmation: Confirmation\n};\n\nexport type DynamicStepProps = {\n loading?: boolean;\n error?: Error | undefined;\n setError?: (error: any) => void;\n step: FormStep;\n}\n\nconst DynamicStep = (props: DynamicStepProps) => {\n const Placeholder = () => {\n return

Missing step component: {props.step.type}

;\n };\n\n const Component = components[props.step.type] || Placeholder;\n\n //@ts-ignore\n return ;\n};\n\nexport default DynamicStep;\n","import React from 'react';\nimport { FormStep } from '../../interfaces';\nimport WaitList from '../Confirmation/WaitList';\nimport AppointmentScheduler from '../Confirmation/AppointmentScheduler';\n\n\ntype DynamicStepProps = {\n step: FormStep;\n error: Error;\n};\n\nconst Confirmation = ({ step }: DynamicStepProps) => {\n const confirmation = step.successPayload;\n const typeToComponentMap: { [key: string]: any } = {\n AS: AppointmentScheduler,\n AR: AppointmentScheduler,\n W: WaitList\n };\n\n const Component = typeToComponentMap[confirmation.type];\n\n if (!confirmation || !Component) {\n return null;\n }\n\n return ;\n};\n\nexport default Confirmation;\n","export const scrollToTop = () => {\n const root: HTMLDivElement | null = document.querySelector('#root');\n\n try {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n } catch (e) {\n console.log('window scroll to top failed.');\n root?.scrollTo(0, 0);\n }\n\n window.parent.postMessage({\n type: 'bridallive.scroll-to-top',\n value: JSON.stringify({ top: 0, left: 0, behavior: 'smooth', scrollIntoView: !!(root?.scrollIntoView) })\n }, '*');\n};\n","\nconst FIELD_TYPES = {\n DATE: 'date',\n DATE_TIME: 'datetime',\n TEXT: 'text',\n TEXTAREA: 'textarea',\n NUMBER: 'number',\n BOOLEAN: 'boolean',\n PHONE: 'phone',\n CURRENCY: 'currency',\n EMAIL: 'email',\n CHECK_BOX: 'checkbox',\n SELECT: 'select',\n RADIO: 'radio'\n};\n\nconst helper = {\n TYPES: {\n [FIELD_TYPES.TEXT]: 'stringValue',\n [FIELD_TYPES.PHONE]: 'stringValue',\n [FIELD_TYPES.EMAIL]: 'stringValue',\n [FIELD_TYPES.CURRENCY]: 'stringValue',\n [FIELD_TYPES.NUMBER]: 'numberValue',\n [FIELD_TYPES.BOOLEAN]: 'booleanValue',\n [FIELD_TYPES.TEXTAREA]: 'textValue',\n [FIELD_TYPES.DATE]: 'dateValue',\n [FIELD_TYPES.DATE_TIME]: 'dateTimeValue',\n [FIELD_TYPES.SELECT]: 'stringValue',\n [FIELD_TYPES.CHECK_BOX]: 'stringValue',\n [FIELD_TYPES.RADIO]: 'stringValue',\n },\n SECOND_TYPE: {\n [FIELD_TYPES.PHONE]: 'numberValue'\n },\n getValueType: function(type: string) {\n switch(type) {\n case 'stringValue':\n return 'string';\n case 'textValue':\n return 'text';\n case 'booleanValue':\n return 'boolean';\n case 'dateValue':\n return 'date';\n case 'dateTimeValue':\n return 'datetime';\n case 'numberValue':\n return 'number';\n default:\n return '';\n }\n }\n\n\n\n\n};\n\nexport default helper;\n","const helper = {\n parseCurrencyToNumber: function(currency: string, locale: any) {\n const { thousandsSeparator } = locale;\n const decimalSeparator = thousandsSeparator === '.' ? ',' : '.';\n const regex = /\\D*(\\d+|\\d.*?\\d)(?:\\D+(\\d{2}))?\\D*$/;\n const parts = regex.exec(currency);\n if(parts && parts.length && parts.length > 1) {\n const [, start, end] = parts;\n return `${start.replace(/\\D/,'')}${decimalSeparator}${end ? end : '00'}`;\n }\n\n return '0';\n }\n};\n\nexport default helper;\n","import { FormTypes } from \"./constants\";\nimport { AppointmentType, WaitListTimeSlot } from \"../interfaces\";\nimport dayjs from \"dayjs\";\nimport CustomFieldHelper from \"./custom-field-helper\";\nimport CurrencyHelper from \"./currency-helper\";\nimport UrlHelper from \"./url-helper\";\nimport _ from \"lodash\";\n\nconst helper = {\n /**\n * Returns request payload for form type\n *\n * @param formType\n * @param userData\n * @param settings\n * @param timeZoneId\n */\n buildFormPayload(formType: string, userData: any, settings: any, timeZoneId: string): any {\n if(FormTypes.scheduler === formType) {\n return helper.createSchedulerPayload(userData, settings, timeZoneId);\n } else if (FormTypes.request) {\n return helper.createRequestPayload(userData, settings, timeZoneId);\n }\n\n throw new Error('Invalid form type.');\n },\n createSchedulerPayload(data: any, settings: any, timeZoneId: string): any {\n const type = settings.appointmentTypes.find((a: AppointmentType) => a.id === data.appointmentType) as AppointmentType;\n\n let payload = {\n budgetStr: null,\n numberOfPeople: null,\n budgetRangeId: null,\n appointmentAmount: type?.itemAmount,\n employeeId: data.associate,\n appointmentTypeId: data.appointmentType,\n duration: data.dateAndTime.duration,\n fittingRoomId: data.dateAndTime.fittingRoomId,\n selectedDate: data.dateAndTime.date ? dayjs(data.dateAndTime.date.toDate()).format() : null,\n selectedDateFormatted: data.dateAndTime.date ? data.dateAndTime.date.format('YYYY-MM-DD') : null,\n startDateTimeStr: data.dateAndTime.startTime ? `${data.dateAndTime.startTime}`: null,\n endDateTimeStr: data.dateAndTime.startTime ? `${dayjs(data.dateAndTime.startTime).add(data.dateAndTime.duration, 'ms').valueOf()}`: null,\n firstName: data.requiredFields.firstName,\n lastName: data.requiredFields.lastName,\n email: data.requiredFields.email,\n eventDateStr: data.requiredFields.eventDateStr ? dayjs(data.requiredFields.eventDateStr).format() : null,\n eventDate: data.requiredFields.eventDateStr ? dayjs(data.requiredFields.eventDateStr) : null,\n phone: data.requiredFields.phone && data.requiredFields.phone.value,\n phoneType: data.requiredFields.phone && data.requiredFields.phone.type,\n paymentProfileToken: data.paymentDetails?.paymentProfileToken,\n paymentProfileTokenProvider: data.paymentDetails?.paymentProfileTokenProvider,\n paymentProfileMaskedAcctNumber: data.paymentDetails?.paymentProfileMaskedAcctNumber,\n paymentProfileExpiration: data.paymentDetails?.paymentProfileExpiration,\n paymentProfileCardType: data.paymentDetails?.paymentProfileCardType,\n paymentProfileBillingName: data.paymentDetails?.paymentProfileBillingName,\n paymentProfileAddedBy: data.paymentDetails?.paymentProfileAddedBy,\n signatureImageData: data?.signatureData,\n customFieldValues: helper.extractAndBuildCustomFields(data.additionalDetails, settings, data.appointmentType),\n allDay: false,\n mode: 'S',\n dateTimes: [],\n paramMap: settings.paramMap,\n confirmationText: settings.confirmationText,\n confirmationTextWaitList: settings.confirmationTextWaitList,\n appointmentPaymentSettings: settings.appointmentPaymentSettings,\n addressOne: data.requiredFields?.addressOne,\n addressTwo: data.requiredFields?.addressTwo,\n city: data.requiredFields?.city,\n state: data.requiredFields?.state,\n zip: data.requiredFields?.zip,\n howHeardId: data.requiredFields?.howHeardId,\n emailOptIn: data.requiredFields?.emailOptIn,\n smsOptIn: data.requiredFields?.smsOptIn,\n streetSize: data.requiredFields?.streetSize,\n notes: data.requiredFields?.notes,\n country: data.requiredFields?.country,\n contactId: null,\n timeZoneId: timeZoneId,\n fields: helper.getRequiredFormFields(settings),\n schedulerVersion: UrlHelper.getParam('version'),\n recaptchaToken: data?.captchaToken\n };\n\n if(data.requiredFields.eventDate !== undefined) {\n payload.eventDateStr = dayjs(data.requiredFields.eventDate).format('YYYY-MM-DD');\n payload.eventDate = dayjs(data.requiredFields.eventDate);\n }\n\n if(data.requiredFields.budgetStr) {\n // @ts-ignore\n payload.budgetStr = CurrencyHelper.parseCurrencyToNumber(data.requiredFields.budgetStr, settings.locale);\n }\n\n if(data.requiredFields.numberOfPeople) {\n // @ts-ignore\n payload.numberOfPeople = data.requiredFields.numberOfPeople;\n }\n\n if(data.requiredFields.budgetRangeId) {\n // @ts-ignore\n payload.budgetRangeId = +data.requiredFields.budgetRangeId;\n }\n\n if(settings && settings.contact && settings.contact.id) {\n payload.contactId = settings.contact.id\n }\n\n if(data.dateAndTime && data.dateAndTime.waitList && data.dateAndTime.waitList.bookWithWaitList) {\n const dateTimes = data.dateAndTime.waitList?.timeSlots.map((slot: WaitListTimeSlot) => {\n return {\n startDateTimeStr: slot.startTime.replace(/\\s/g, ''),\n endDateTimeStr: slot.endTime.replace(/\\s/g, '')\n }\n });\n\n payload.mode = 'W';\n payload.allDay = data.dateAndTime.waitList.isAllDay;\n payload.dateTimes = dateTimes;\n payload.selectedDate = data.dateAndTime.date ? dayjs(data.dateAndTime.date).format('MM/DD/YYYY') : null;\n payload.duration = type?.duration;\n }\n\n return payload as any;\n },\n\n createRequestPayload(data: any, settings: any, timeZoneId: string): any {\n const type = settings.appointmentTypes.find((a: AppointmentType) => a.id === data.appointmentType) as AppointmentType;\n\n let payload = {\n budgetStr: '0',\n numberOfPeople: '0',\n budgetRangeId: null,\n appointmentAmount: type?.itemAmount,\n employeeId: data.associate,\n appointmentTypeId: data.appointmentType,\n duration: data.dateAndTime.duration,\n fittingRoomId: data.dateAndTime.fittingRoomId || 0,\n selectedDate: data.dateAndTime.date ? dayjs(data.dateAndTime.date.toDate()).format() : null,\n selectedDateFormatted: data.dateAndTime.date ? data.dateAndTime.date.format('YYYY-MM-DD') : null,\n requestedDateStr: data.dateAndTime.date ? data.dateAndTime.date.format('MM/DD/YYYY') : null,\n requestedTimeStr: data.dateAndTime.date && settings?.company?.timeZoneId ? dayjs(data.dateAndTime.startTime).tz(settings.company.timeZoneId).format('hh:mma') : null,\n startDateTimeStr: data.dateAndTime.startTime ? `${data.dateAndTime.startTime}`: null,\n availableTimesType: data.dateAndTime?.availableTimesType,\n firstName: data.requiredFields.firstName,\n lastName: data.requiredFields.lastName,\n email: data.requiredFields.email,\n eventDateStr: data.requiredFields.eventDateStr ? dayjs(data.requiredFields.eventDateStr).format('YYYY-MM-DD') : null,\n eventDate: data.requiredFields.eventDateStr ? dayjs(data.requiredFields.eventDateStr) : null,\n phone: data.requiredFields.phone && data.requiredFields.phone.value,\n phoneType: data.requiredFields.phone && data.requiredFields.phone.type,\n paymentProfileToken: data.paymentDetails?.paymentProfileToken,\n paymentProfileTokenProvider: data.paymentDetails?.paymentProfileTokenProvider,\n paymentProfileMaskedAcctNumber: data.paymentDetails?.paymentProfileMaskedAcctNumber,\n paymentProfileExpiration: data.paymentDetails?.paymentProfileExpiration,\n paymentProfileCardType: data.paymentDetails?.paymentProfileCardType,\n paymentProfileBillingName: data.paymentDetails?.paymentProfileBillingName,\n paymentProfileAddedBy: data.paymentDetails?.paymentProfileAddedBy,\n signatureImageData: data?.signatureData,\n customFieldValues: helper.extractAndBuildCustomFields(data.additionalDetails, settings, data.appointmentType),\n allDay: false,\n mode: 'S',\n dateTimes: [],\n paramMap: settings.paramMap,\n confirmationText: settings.confirmationText,\n confirmationTextWaitList: settings.confirmationTextWaitList,\n appointmentPaymentSettings: settings.appointmentPaymentSettings,\n addressOne: data.requiredFields?.addressOne,\n addressTwo: data.requiredFields?.addressTwo,\n city: data.requiredFields?.city,\n state: data.requiredFields?.state,\n zip: data.requiredFields?.zip,\n howHeardId: data.requiredFields?.howHeardId,\n emailOptIn: data.requiredFields?.emailOptIn,\n smsOptIn: data.requiredFields?.smsOptIn,\n streetSize: data.requiredFields?.streetSize,\n notes: data.requiredFields?.notes,\n country: data.requiredFields?.country,\n prefContactMethodId: data.requiredFields?.prefContactMethodId,\n contactId: null,\n timeZoneId: timeZoneId,\n fields: helper.getRequiredFormFields(settings),\n schedulerVersion: UrlHelper.getParam('version'),\n recaptchaToken: data?.captchaToken\n };\n\n if(data.requiredFields.eventDate !== undefined) {\n payload.eventDateStr = dayjs(data.requiredFields.eventDate).format('YYYY-MM-DD');\n payload.eventDate = dayjs(data.requiredFields.eventDate);\n }\n\n if(data.requiredFields.budgetStr) {\n // @ts-ignore\n payload.budgetStr = CurrencyHelper.parseCurrencyToNumber(data.requiredFields.budgetStr, settings.locale);\n }\n\n if(data.requiredFields.numberOfPeople) {\n // @ts-ignore\n payload.numberOfPeople = data.requiredFields.numberOfPeople;\n }\n\n if(data.requiredFields.budgetRangeId) {\n // @ts-ignore\n payload.budgetRangeId = +data.requiredFields.budgetRangeId;\n }\n\n if(settings && settings.contact && settings.contact.id) {\n payload.contactId = settings.contact.id\n }\n\n if(data.dateAndTime && data.dateAndTime.waitList && data.dateAndTime.waitList.bookWithWaitList) {\n const dateTimes = data.dateAndTime.waitList?.timeSlots.map((slot: WaitListTimeSlot) => {\n return {\n startDateTimeStr: slot.startTime.replace(/\\s/g, ''),\n endDateTimeStr: slot.endTime.replace(/\\s/g, '')\n }\n });\n\n payload.mode = 'W';\n payload.allDay = data.dateAndTime.waitList.isAllDay;\n payload.dateTimes = dateTimes;\n payload.selectedDate = data.dateAndTime.date ? dayjs(data.dateAndTime.date).format('MM/DD/YYYY') : null;\n payload.duration = type?.duration;\n }\n\n return payload;\n },\n\n extractAndBuildCustomFields(data: any, settings: any, appointmentType: any) {\n const customFieldStep = _.find(settings.steps, { id: 'additionalDetails' });\n\n if(!customFieldStep || !customFieldStep.enabled || !customFieldStep.customFields || !customFieldStep.customFields.length) {\n return [];\n }\n\n return customFieldStep?.customFields!\n .filter(function(field: any) {\n return !appointmentType || _.isEmpty(field.customFieldAppointmentTypeIds) || _.includes(field.customFieldAppointmentTypeIds, appointmentType);\n })\n .map(function(field: any) {\n const fieldType = CustomFieldHelper.TYPES[field.type];\n let fieldValue = data[field.id];\n\n let custom:any = null;\n\n if(_.isObject(fieldValue)) {\n let { value, type }:any = fieldValue;\n const valueType = CustomFieldHelper.getValueType(fieldType);\n const secondFieldType = CustomFieldHelper.SECOND_TYPE[field.type];\n\n if(field.type === 'checkbox') {\n value = helper.getCheckBoxValues(data, field, fieldValue);\n }\n\n custom = {\n required: field.required,\n fieldType: field.type,\n customFieldKey: field.id,\n customFieldId: field.customFieldId,\n customFieldName: field.label,\n value: helper.formatValue(value, field.type),\n valueType: valueType.toUpperCase()\n };\n\n if(fieldType) {\n custom[fieldType] = value;\n }\n\n if(secondFieldType) {\n custom[secondFieldType] = field.type === 'phone' ? +type : type\n }\n\n return custom;\n }\n\n if(field.type === 'checkbox') {\n fieldValue = helper.getCheckBoxValues(data, field);\n }\n\n return {\n required: field.required,\n fieldType: field.type,\n customFieldKey: field.id,\n customFieldId: field.customFieldId,\n customFieldName: field.label,\n value: helper.formatValue(fieldValue, field.type),\n valueType: CustomFieldHelper.getValueType(fieldType).toUpperCase(),\n [fieldType]: helper.formatValueByType(fieldValue, fieldType)\n };\n });\n },\n formatValue: function(value: string, type: string) {\n if(type === 'phone' && value) {\n return value.replace(/[^\\d]/g, '');\n } else if(type === 'date' && value) {\n return dayjs(value).format('YYYY-MM-DD');\n }\n\n return value;\n },\n getRequiredFormFields: function(settings: any) {\n if(!settings || !settings.steps || !settings.steps.length) {\n return null;\n }\n\n const requiredFieldsStep = _.find(settings.steps, { id: 'requiredFields' });\n\n if(requiredFieldsStep) {\n return requiredFieldsStep.fields;\n }\n\n return null;\n },\n formatValueByType: function(value: string, fieldType: string) {\n if(fieldType === 'stringValue' || fieldType === 'textValue') {\n return value;\n } else if((fieldType === 'dateValue' || fieldType === 'dateTimeValue') && value) {\n return dayjs(value).toDate();\n } else if(fieldType === 'numberValue' && value) {\n return +value;\n } else if(fieldType === 'booleanValue' && value) {\n return Boolean(value);\n }\n\n return null;\n },\n getCheckBoxValues: function (data: any, field: any, objectValue?: any) {\n if(objectValue) {\n const keys = Object.keys(objectValue);\n let values: string[] = [];\n\n if(keys && keys.length) {\n for(const key of keys) {\n const value = objectValue[key];\n if((value !== undefined && value === true) || typeof value === 'string') {\n values.push(key);\n }\n }\n }\n\n if(values && values.length) {\n return values.join(',');\n }\n }\n\n const checkboxes = field.options?.filter(function(option: any) {\n return !!(option && option.value);\n }).map(function(option: any) {\n return `${option.id}`;\n });\n\n if(checkboxes && checkboxes.length) {\n if(checkboxes.length === 1) {\n if(data[field.id]) {\n return checkboxes[0];\n }\n } else {\n let values: string[] = [];\n\n checkboxes.forEach(function(checkbox: string) {\n const value = data[checkbox];\n if((value !== undefined && value === true) || typeof value === 'string') {\n values.push(checkbox);\n }\n });\n\n if(values && values.length) {\n return values.join(',');\n }\n }\n }\n\n return undefined;\n }\n};\n\nexport default helper;\n","import { Text } from '@chakra-ui/react';\nimport React from 'react';\n\ntype Props = {\n description: string | undefined;\n classNames?: string;\n};\n\nfunction isHTML(description: string) {\n const regex = /<[\\s\\S]*>/;\n return regex.test(description);\n}\n\nconst StepDescription = ({ description, classNames } : Props) => {\n if(!description) {\n return null;\n }\n\n if(isHTML(description)) {\n return
;\n } else {\n return {description};\n }\n};\n\nexport default StepDescription;\n","import React from 'react';\nimport { Heading } from \"@chakra-ui/layout\";\nimport { FormStep } from \"../../interfaces\";\nimport { STEPS } from \"../../utils/constants\";\nimport StepDescription from \"./StepDescription\";\n\ntype Props = {\n step: FormStep;\n hideDescription?: boolean;\n};\n\nconst FormHeader = ({ step, hideDescription = false } : Props) => {\n if(step && step.id === 'confirmation') {\n return null;\n }\n\n if(hideDescription) {\n return {step.title};\n }\n\n return (\n
\n {step.type !== STEPS.confirmation && step.title}\n \n
\n );\n};\n\nexport default FormHeader;\n","import { Heading } from '@chakra-ui/react';\nimport React from 'react';\n\ntype Props = {\n title: string | undefined;\n classNames?: string;\n};\n\nfunction isHTML(title: string) {\n const regex = /<[\\s\\S]*>/;\n return regex.test(title);\n}\n\nconst FormTitle = ({title, classNames} : Props) => {\n if(!title) {\n return null;\n }\n\n if(isHTML(title)) {\n return
;\n } else {\n return { title };\n }\n\n};\n\nexport default FormTitle;\n","import React from 'react';\nimport { Company } from \"../../interfaces\";\n\ntype Props = {\n logoURL: string | undefined;\n classNames?: string;\n company: Company;\n};\n\nconst FormLogo = ({ logoURL, classNames, company }:Props) => {\n if(!logoURL) {\n return null;\n }\n\n return (\n
\n {company.name}/\n
\n );\n};\n\nexport default FormLogo;\n","import { useEffect, useRef, useState, useCallback } from 'react';\n\nfunction useStateCallback(initialState: any) {\n const [state, setState] = useState(initialState);\n const cbRef = useRef(null); // init mutable ref container for callbacks\n\n const setStateCallback = useCallback((state, cb) => {\n cbRef.current = cb; // store current, passed callback in ref\n setState(state);\n }, []); // keep object reference stable, exactly like `useState`\n\n useEffect(() => {\n // cb.current is `null` on initial render,\n // so we only invoke callback on state *updates*\n if (cbRef.current) {\n // @ts-ignore\n cbRef.current(state);\n cbRef.current = null; // reset callback after execution\n }\n }, [state]);\n\n return [state, setStateCallback];\n}\n\nexport default useStateCallback;\n","const helper = {\n inIframe: function() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n inIframeV2: function() {\n try {\n return window.location !== window.parent.location;\n } catch (e) {\n return true;\n }\n },\n appendIframeClass: function () {\n //TODO: Append iframe class to body/html tag\n }\n};\n\nexport default helper;\n","// @ts-nocheck\nimport React, { createContext, useContext, useEffect, useLayoutEffect, useState, useRef } from 'react';\nimport { Box, Button, Stack } from '@chakra-ui/react';\nimport DynamicStep from './DynamicStep';\nimport { Form, FormStep, Error } from '../interfaces';\nimport { isDefined } from '../utils/is-defined';\nimport merge from 'lodash/merge';\nimport find from 'lodash/find';\nimport { updateIframeHeight } from '../utils/update-iframe-height';\nimport { scrollToTop } from '../utils/scroll-iframe-to-top';\nimport { FormProvider, useForm as useReactHookForm } from 'react-hook-form';\nimport { useFormTheme } from '../contexts/useFormTheme';\nimport { useTranslation } from \"react-i18next\";\nimport { api, buildFormHeaders } from \"../utils/axios-api\";\nimport FormRequestHelper from \"../utils/form-request-helper\";\nimport UrlHelper from \"../utils/url-helper\";\nimport FormHeader from \"./layout/FormHeader\";\nimport BLError from \"./Error/BLError\";\nimport IFrameEvents from \"../utils/iframe-events\";\nimport StepHelper from \"../utils/step-helper\";\nimport FormTitle from \"./layout/FormTitle\";\nimport FormLogo from \"./layout/FormLogo\";\nimport ErrorHelper from \"../utils/error-helper\";\nimport useStateCallback from \"../hooks/useStateCallBack\";\nimport iFrameHelper from \"../utils/iframe-helper\";\nimport { useFormPayment } from \"../contexts/useFormPayment\";\nimport IframeEvents from \"../utils/iframe-events\";\n\nexport type FormContextState = {\n json: Form;\n userData: any;\n updateUserData: (value: unknown) => void;\n updateUserDataAndCallback: (value: unknown, cb: (state: any) => void) => void;\n currentStep: FormStep;\n currentStepIdx: number;\n stepIdx: number;\n goToNextStep: (updateStep: boolean) => void;\n goToPrevStep: (updateStep: boolean) => void;\n clearError: () => void;\n handleSubmit: (request: any) => void;\n updateTimeZone: (value: string) => void;\n confirmationRendered: boolean;\n updateConfirmationRendered: (rendered: boolean) => void;\n isCaptchaValid: () => boolean;\n};\n\nexport const FormContext = createContext({} as FormContextState);\nexport const useForm = () => useContext(FormContext);\n\ntype Props = {\n json: Form;\n};\n\nexport const StepsBuilder = ({ json }: Props) => {\n const { t } = useTranslation();\n const formTheme = useFormTheme();\n const paymentForm = useFormPayment();\n const [timeZoneId, setTimeZoneId] = useState(json.company.timeZoneId);\n\n // @ts-ignore\n const [userData, setUserData] = useStateCallback({});\n const [currentStepIdx, setCurrentStepIdx] = useState(0);\n const [stepIdx, setStepIdx] = useState(0);\n const [currentStep, setCurrentStep] = useState(json.steps[currentStepIdx]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState();\n const retryCount = useRef(0);\n // const errorCount = useRef(0);\n const methods = useReactHookForm({ mode: 'onChange' });\n const formType = UrlHelper.getParam('formType');\n const[confirmationRendered, setConfirmationRendered] = useState(false);\n //const retailerId = UrlHelper.getParam('retailerId');\n\n const goToNextStep = (updateStep: boolean) => {\n setError(undefined);\n setCurrentStepIdx(currentStepIdx + 1);\n if(updateStep) {\n setStepIdx(stepIdx + 1);\n }\n scrollToTop();\n };\n\n const goToPrevStep = (updateStep: boolean) => {\n if(currentStepIdx === 0) {\n return;\n }\n\n setError(undefined);\n setCurrentStepIdx(currentStepIdx - 1);\n if(updateStep) {\n setStepIdx(stepIdx - 1);\n }\n scrollToTop();\n };\n\n const clearError = () => {\n setError(undefined);\n };\n\n const goToStep = (stepId: string) => {\n const step = find(json.steps, { id: stepId });\n\n if(step) {\n const stepIndex = StepHelper.getStepIndex(json.steps, step);\n\n if(stepIndex >= 0) {\n setStepIdx(StepHelper.getCurrentIndexBasedOnStep(step, stepIdx, stepIndex));\n setCurrentStepIdx(stepIndex);\n }\n }\n };\n\n const handleSubmit = async (request: any) => {\n try {\n const response = (await submitForm(request));\n\n if(response.error) {\n setError(response.error);\n\n if(response.error.clearData) {\n let clearData: any = { [response.error.clearData]: null };\n\n if(response.error.clearData === 'paymentDetails') {\n paymentForm.clearSignature();\n clearData.signatureData = null;\n }\n\n updateUserData(clearData);\n }\n\n if(response.error.step) {\n goToStep(response.error.step);\n }\n\n setIsLoading(false);\n } else if(response.redirectURL) {\n IFrameEvents.eventScheduled(response);\n IFrameEvents.redirect(response.redirectURL);\n\n if(iFrameHelper.inIframeV2()) {\n try {\n window.parent.location.href = response.redirectURL;\n } catch (e) {\n setIsLoading(false);\n setCurrentStep({ id: 'confirmation', type: 'confirmation', title: 'Confirmation', successPayload: response } as FormStep);\n }\n } else {\n try {\n window.location.href = response.redirectURL;\n } catch (e) {\n setIsLoading(false);\n setCurrentStep({ id: 'confirmation', type: 'confirmation', title: 'Confirmation', successPayload: response } as FormStep);\n }\n }\n } else {\n IFrameEvents.eventScheduled(response);\n setIsLoading(false);\n setCurrentStep({ id: 'confirmation', type: 'confirmation', title: 'Confirmation', successPayload: response } as FormStep);\n }\n } catch (e) {\n setIsLoading(false);\n setError(ErrorHelper.buildErrorMessage(t('errors.something_went_wrong'), '', e));\n } finally {\n scrollToTop();\n }\n };\n\n const submitForm = async (request: any): Promise => {\n const tryPostForm = async () => {\n setError(undefined);\n setIsLoading(true);\n const response = await api.post(`/${formType}/postForm`, FormRequestHelper.buildFormPayload(formType, request, json, timeZoneId), buildFormHeaders(json._key));\n retryCount.current = 0;\n return response.data;\n };\n\n try {\n return await tryPostForm();\n } catch(e: any) {\n // //TODO: Form error count?\n // errorCount.current = errorCount.current + 1;\n // console.log('Error Count', errorCount.current);\n\n if(ErrorHelper.isTokenExpired(e)) {\n return { error: ErrorHelper.buildErrorMessage(t('errors.expired_auth'), '401', null) };\n }\n\n return { error: ErrorHelper.buildErrorMessage(t('errors.something_went_wrong'), '', e, t) };\n }\n };\n\n // Send user data to parent window for unsaved changes API (when user leaves page without a submission)\n useEffect(() => {\n if(iFrameHelper.inIframeV2()) {\n IframeEvents.userDataChanged({ message: 'bridallive.user_data_changed' });\n }\n }, [userData]);\n\n useEffect(() => {\n const newStep = json.steps[currentStepIdx];\n const oldStepIdx = json.steps.indexOf(currentStep);\n\n if(!newStep) {\n return;\n }\n\n if(!isDefined(newStep.enabled) || newStep.enabled || StepHelper.showPaymentDetails(newStep, userData, json)) {\n if(StepHelper.skipStep(newStep, userData, json, [{ type: 'selectAssociate', callback: updateUserData }])) {\n if(currentStepIdx > oldStepIdx) {\n goToNextStep(false);\n } else {\n goToPrevStep(false);\n }\n } else {\n setCurrentStep(newStep);\n }\n } else {\n if(currentStepIdx > oldStepIdx) {\n goToNextStep(false);\n } else {\n goToPrevStep(false);\n }\n }\n }, [currentStepIdx]);\n\n const updateUserData = (patchedValue: any) => {\n setUserData(merge({}, userData, patchedValue), function() {});\n };\n\n const updateUserDataAndCallback = (patchedValue: any, callback: any) => {\n setUserData(merge({}, userData, patchedValue), callback);\n };\n\n const updateTimeZone = (zoneId: string) => {\n setTimeZoneId(zoneId);\n };\n\n const updateConfirmationRendered = (rendered: boolean) => {\n setConfirmationRendered(rendered);\n };\n\n const isCaptchaValid = () => {\n return json?.captchaEnabled ? !userData?.captchaToken?.length : false;\n };\n\n useLayoutEffect(() => {\n updateIframeHeight();\n }, []);\n\n const sharedState: FormContextState = {\n json,\n userData,\n updateUserData,\n updateUserDataAndCallback,\n currentStep,\n currentStepIdx,\n stepIdx,\n goToNextStep,\n goToPrevStep,\n clearError,\n handleSubmit,\n updateTimeZone,\n confirmationRendered,\n updateConfirmationRendered,\n isCaptchaValid\n };\n\n return (\n \n {json.layoutType === 'steps' && (\n <>\n
\n {currentStepIdx === 0 && }\n {currentStepIdx === 0 && }\n \n {error && error.message && }\n \n \n )}\n\n {json.layoutType === 'preview' && (\n <>\n \n \n \n )}\n\n {json.layoutType === 'form' && (\n \n \n
\n \n {json.steps.map(step => (\n \n \n {error && error.message && }\n \n \n ))}\n\n \n \n \n \n
\n
\n )}\n
\n );\n};\n","export const isDefined = (variable: unknown) => {\n return typeof variable !== 'undefined';\n};\n","import UrlHelper from './url-helper';\nimport _ from 'lodash';\n\nconst helper = {\n debugMode: false ,\n languages: ['en', 'es', 'fr', 'nl', 'de', 'it', 'de', 'es-mx', 'mx'],\n queryParams: ['lang', 'language', 'lng'],\n getLanguage(): string {\n for (const param of helper.queryParams) {\n const language = UrlHelper.getParam(param);\n if (language && _.includes(helper.languages, language.toLowerCase())) {\n if (language && language.toLowerCase() === 'es-mx') {\n return 'mx';\n }\n\n return language.toLowerCase();\n }\n }\n\n return 'en-US';\n },\n updateLanguage(lang: string): boolean {\n if(helper.getLanguage() === 'en-US' && lang !== 'en') {\n return true;\n }\n\n return false;\n },\n languageResources: {\n en: {\n translation: {\n calendar: {\n currently_selected: 'Currently Selected ',\n has_availabilities: ' Has Availabilities',\n is_now_displaying: ' is now displayed',\n select_a_date: 'Select a Date',\n days: {\n short: {\n sun: 'sun',\n mon: 'mon',\n tue: 'tue',\n wed: 'wed',\n thu: 'thu',\n fri: 'fri',\n sat: 'sat'\n },\n long: {\n sun: 'Sunday',\n mon: 'Monday',\n tue: 'Tuesday',\n wed: 'Wednesday',\n thu: 'Thursday',\n fri: 'Friday',\n sat: 'Saturday'\n }\n },\n months: {\n long: {\n \"0\": \"January\",\n \"1\": \"February\",\n \"2\": \"March\",\n \"3\": \"April\",\n \"4\": \"May\",\n \"5\": \"June\",\n \"6\": \"July\",\n \"7\": \"August\",\n \"8\": \"September\",\n \"9\": \"October\",\n \"10\": \"November\",\n \"11\": \"December\"\n },\n short: {\n \"0\": \"Jan\",\n \"1\": \"Feb\",\n \"2\": \"Mar\",\n \"3\": \"Apr\",\n \"4\": \"May\",\n \"5\": \"Jun\",\n \"6\": \"Jul\",\n \"7\": \"Aug\",\n \"8\": \"Sep\",\n \"9\": \"Oct\",\n \"10\": \"Nov\",\n \"11\": \"Dec\"\n }\n },\n navigation: {\n next: 'Go to next month',\n next_disbaled: 'Next Month Button Disabled',\n prev: 'Go to previous month',\n prev_disabled: 'Previous Month Button Disabled'\n\n },\n no_available_dates_in: 'No available dates in',\n view_next_month: 'View next month'\n },\n payment: {\n country: 'Country',\n good_thru: 'GOOD THRU ',\n zip: 'Zip',\n cvv: 'CVV',\n month: 'Month',\n year: 'Year',\n card_number: 'Card Number',\n card_holder: 'Name On Card',\n city: 'City',\n state: 'State',\n address1: 'Address 1',\n address2: 'Address 2',\n first_name: 'First Name',\n last_name: 'Last Name',\n field_required: 'This field is required',\n payment_method: 'Payment Method',\n clear_signature: 'Clear Signature',\n cip: {\n max: 'Max length required',\n min: 'Min length required',\n digits: 'Digits only',\n invalid_month: 'Invalid Month',\n invalid_year: 'Invalid Year',\n invalid_cvv: 'Invalid CVV',\n invalid_card: 'Invalid Card Number',\n invalid_zip: 'Invalid Zip',\n name_on_card_required: 'Name on card required',\n cc_number_required: 'Credit card number required',\n month_required: 'Exp Month required',\n year_required: 'Exp Year required',\n cvv_required: 'CVV required'\n },\n stripe: {\n billing_name: 'Billing Name',\n card: 'Card',\n email: 'Email'\n },\n fullsteam: {\n invalid_zip: 'Invalid zip (Please use a {{ country }} zip code).',\n invalid_month: 'Expiration Month must be between 1 and 12.',\n invalid_year: 'Expiration Year must be between {{ one }} and {{ two }}.',\n invalid_address: 'Invalid Billing Address: Address 1, City, State, Zip, and Country are all required.',\n invalid_address_non_us: 'Invalid Billing Address: Address 1, City, Zip/Postal Code, and Country are all required.',\n invalid_country: 'Country is required.'\n }\n },\n common: {\n add_amount: 'Add an amount',\n back: 'Back',\n error: 'Error',\n next: 'Next',\n field_required: 'This field is required',\n loading: 'Loading',\n select_one: 'Select One',\n select_state: 'Select State',\n phone: {\n home: 'Home',\n mobile: 'Mobile',\n work: 'Work'\n }\n },\n errors: {\n bl_100: \"Store not found\",\n bl_200: \"Your plan does not include access to this feature.\",\n bl_300: \"Your plan does not include access to this feature.\",\n enter_valid_phone_number: 'Enter valid phone number',\n captcha_error: 'Unable to load CAPTCHA. Please try again later.',\n retry: 'Retry',\n expired_auth: 'Your session has expired, please refresh and submit form again.',\n number_of_ppl_required:'This field is required, please select a value greater than 0.',\n please_enter_all_required_fields:'Please enter all required fields',\n invalid_email: 'Enter valid email address',\n missing_params: 'Missing required query parameters (retailerId, formType)',\n something_went_wrong: 'Something Went Wrong',\n too_many_characters: 'Too many characters'\n },\n appointment: {\n appointment_type: 'Appointment Type',\n date: 'Appointment Date',\n duration: {\n title: 'Duration',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'No appointment available on this day',\n current_selected_time: 'You have been selected',\n booking: 'Booking...',\n book_appointment: 'Book Appointment',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment',\n request_appointment: 'Request Appointment',\n submitting: 'Submitting Form Please Wait',\n errors: {\n select_date_time: 'Please select date and time',\n select_wait_list: 'Please select valid time slots',\n select_appointment_type: 'Please select an appointment type'\n },\n payment_details: 'Payment details',\n select_appointment_type: 'Select an appointment type',\n select_associate: 'Select an associate',\n return_to_timeslots:'Return to timeslots'\n },\n timezones: {\n store_timezone: 'Store Time Zone',\n select_timezone: 'Select a Time Zone',\n timezone: 'Time Zone'\n },\n wait_list: {\n add_to_waitlist: 'Add to Waitlist',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(add as many as apply)',\n add_me: 'Add me to the Waitlist',\n im_available_store_hours:'I\\'m Available during store hours',\n im_available_specific_hours:'I\\'m only available at specific times',\n please_specify_when:'Please specify when you are available on',\n title: 'Waitlist',\n select_start_time: 'Select Start Time',\n select_end_time: 'Select End Time',\n start:'Start ',\n end_time: 'End Time'\n }\n }\n },\n de: {\n translation: {\n calendar: {\n currently_selected: 'Zurzeit ausgewählt ',\n has_availabilities: ' Hat Verfügbarkeiten',\n is_now_displaying: ' wird jetzt angezeigt',\n select_a_date: 'Wählen Sie ein Datum',\n days: {\n short: {\n sun: 'son',\n mon: 'mon',\n tue: 'die',\n wed: 'mit',\n thu: 'don',\n fri: 'fre',\n sat: 'sam'\n },\n long: {\n sun: 'Sonntag',\n mon: 'Montag',\n tue: 'Dienstag',\n wed: 'Mittwoch',\n thu: 'Donnerstag',\n fri: 'Freitag',\n sat: 'Samstag'\n }\n },\n months: {\n long: {\n \"0\": \"Januar\",\n \"1\": \"Februar\",\n \"2\": \"März\",\n \"3\": \"April\",\n \"4\": \"Mai\",\n \"5\": \"Juni\",\n \"6\": \"Juli\",\n \"7\": \"August\",\n \"8\": \"September\",\n \"9\": \"Oktober\",\n \"10\": \"November\",\n \"11\": \"Dezember\"\n },\n short: {\n \"0\": \"Jan\",\n \"1\": \"Feb\",\n \"2\": \"März\",\n \"3\": \"Apr\",\n \"4\": \"Mai\",\n \"5\": \"Jun\",\n \"6\": \"Jul\",\n \"7\": \"Aug\",\n \"8\": \"Sept\",\n \"9\": \"Okt\",\n \"10\": \"Nov\",\n \"11\": \"Dez\"\n }\n },\n navigation: {\n next: 'Gehen Sie zum nächsten Monat',\n next_disbaled: 'Schaltfläche „Nächster Monat“ deaktiviert',\n prev: 'Gehen Sie zum vorherigen Monat',\n prev_disabled: 'Schaltfläche „Vorheriger Monat“ deaktiviert'\n },\n no_available_dates_in: 'Keine freien Termine in ',\n view_next_month: 'Nächsten Monat ansehen'\n },\n payment: {\n country: 'Land',\n good_thru: 'GUT DURCH',\n zip: 'Reißverschluss',\n cvv: 'CVV',\n month: 'Monat',\n year: 'Jahr',\n card_number: 'Kartennummer',\n card_holder: 'Name auf der Karte',\n city: 'Stadt',\n state: 'Bundesland',\n address1: 'Adresse 1',\n address2: 'Adresse 2',\n first_name: 'Vorname',\n last_name: 'Nachname',\n field_required: 'Dieses Feld wird benötigt',\n payment_method: 'Bezahlverfahren',\n clear_signature: 'Klare Signatur',\n cip: {\n max: 'Maximale Länge erforderlich',\n min: 'Mindestlänge erforderlich',\n digits: 'Ziffern nur',\n invalid_month: 'Ungültiger Monat',\n invalid_year: 'Ungültiges Jahr',\n invalid_cvv: 'Ungültiger CVV',\n invalid_card: 'Ungültige Kartennummer',\n invalid_zip: 'Ungültige Postleitzahl',\n name_on_card_required: 'Name auf Karte erforderlich',\n cc_number_required: 'Kreditkartennummer erforderlich',\n month_required: 'Exp Monat erforderlich',\n year_required: 'Exp-Jahr erforderlich',\n cvv_required: 'CVV erforderlich'\n },\n stripe: {\n billing_name: 'Abrechnungsname',\n card: 'Abrechnungsname',\n email: 'Email'\n },\n fullsteam: {\n invalid_zip: 'Ungültige Postleitzahl (Bitte verwenden Sie eine {{ country }} Postleitzahl)',\n invalid_month: 'Der Ablaufmonat muss zwischen 1 und 12 liegen.',\n invalid_year: 'Das Ablaufjahr muss zwischen {{ one }} und {{ two }} liegen.',\n invalid_address: 'Ungültige Rechnungsadresse: Adresse 1, Stadt, Bundesland, Postleitzahl und Land sind alle erforderlich.',\n invalid_address_non_us: 'Ungültige Rechnungsadresse: Adresse 1, Stadt, Postleitzahl und Land sind alle erforderlich.',\n invalid_country: 'Land ist erforderlich.'\n }\n },\n common: {\n add_amount: 'Betrag hinzufügen',\n error: 'Fehler',\n next: 'Nächste',\n back: 'Zurück',\n field_required: 'Dieses Feld wird benötigt',\n loading: '',\n select_one: 'Wähle eins',\n select_state: 'Staat wählen',\n phone: {\n home: 'Heim',\n mobile: 'Mobile',\n work: 'Arbeit'\n }\n },\n errors: {\n bl_100: \"Shop nicht gefunden\",\n bl_200: \"Ihr Plan beinhaltet keinen Zugriff auf diese Funktion.\",\n bl_300: \"Ihr Plan beinhaltet keinen Zugriff auf diese Funktion.\",\n expired_auth: 'Ihre Sitzung ist abgelaufen, bitte aktualisieren und das Formular erneut senden',\n enter_valid_phone_number: 'Geben Sie eine gültige Telefonnummer ein',\n captcha_error: 'CAPTCHA kann nicht geladen werden. Bitte versuchen Sie es später noch einmal.',\n retry: 'Wiederholen',\n number_of_ppl_required:'Dieses Feld ist erforderlich, bitte wählen Sie einen Wert größer als 0.',\n please_enter_all_required_fields:'Bitte geben Sie alle erforderlichen Felder ein',\n invalid_email: 'Geben Sie eine gültige E-Mail-Adresse ein',\n missing_params: 'Fehlende erforderliche Abfrageparameter (retailerId, formType) - GERMAN',\n something_went_wrong: 'Etwas ist schief gelaufen',\n too_many_characters: 'Zu viele Charaktere'\n },\n appointment: {\n appointment_type: 'Terminart',\n date: 'Termin',\n duration: {\n title: 'Titel',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'An diesem Tag ist kein Termin frei',\n current_selected_time: 'Sie wurden ausgewählt',\n booking: 'Buchung...',\n book_appointment: 'Einen Termin verabreden',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment',\n request_appointment: 'Termin anfragen',\n submitting: 'Formular senden Bitte warten',\n errors: {\n select_date_time: 'Bitte Datum und Uhrzeit auswählen',\n select_wait_list: 'Bitte wählen Sie gültige Zeitfenster aus',\n select_appointment_type: 'Bitte wählen Sie eine Terminart'\n },\n payment_details: 'Zahlungsdetails',\n select_appointment_type: 'Wählen Sie eine Terminart',\n select_associate: 'Wählen Sie einen Mitarbeiter aus',\n return_to_timeslots:'Zurück zu den Zeitfenstern'\n },\n timezones: {\n store_timezone: 'Zeitzone speichern',\n select_timezone: 'Wählen Sie eine Zeit Zone',\n timezone: 'Zeit Zone'\n },\n wait_list: {\n add_to_waitlist: 'Zur Warteliste hinzufügen',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(Fügen Sie so viele wie zutreffend hinzu)',\n add_me: 'Füge mich zur Warteliste hinzu',\n im_available_store_hours: 'Ich bin während der Ladenöffnungszeiten verfügbar',\n im_available_specific_hours: 'Ich bin nur zu bestimmten Zeiten erreichbar',\n please_specify_when: 'Bitte geben Sie an, wann Sie verfügbar sind am',\n title: 'Warteliste',\n select_start_time: 'Startzeit auswählen',\n select_end_time: 'Wählen Sie Endzeit',\n start:'Start ',\n end_time: 'Endzeit'\n }\n }\n },\n it: {\n translation: {\n calendar: {\n currently_selected: 'Attualmente selezionato ',\n has_availabilities: ' Ha disponibilità',\n is_now_displaying: ' viene ora visualizzato',\n select_a_date: 'Seleziona una data',\n days: {\n short: {\n sun: 'som',\n mon: 'lun',\n tue: 'mar',\n wed: 'mer',\n thu: 'gio',\n fri: 'ven',\n sat: 'sab'\n },\n long: {\n sun: 'domenica',\n mon: 'lunedi',\n tue: 'martedi',\n wed: 'mercoledi',\n thu: 'giovedi',\n fri: 'venerdi',\n sat: 'sabato'\n }\n },\n months: {\n long: {\n \"0\": \"Gennaio\",\n \"1\": \"Febbraio\",\n \"2\": \"Marzo\",\n \"3\": \"Aprile\",\n \"4\": \"Maggio\",\n \"5\": \"Giugno\",\n \"6\": \"Luglio\",\n \"7\": \"Agosto\",\n \"8\": \"Settembre\",\n \"9\": \"Ottobre\",\n \"10\": \"Novembre\",\n \"11\": \"Dicembre\"\n },\n short: {\n \"0\": \"Gen\",\n \"1\": \"Feb\",\n \"2\": \"Mar\",\n \"3\": \"Apr\",\n \"4\": \"Mag\",\n \"5\": \"Giu\",\n \"6\": \"Lug\",\n \"7\": \"Ago\",\n \"8\": \"Set\",\n \"9\": \"Ott\",\n \"10\": \"Nov\",\n \"11\": \"Dic\"\n }\n },\n navigation: {\n next: 'Vai al mese prossimo',\n next_disbaled: 'Pulsante mese successivo disabilitato',\n prev: 'Vai al mese precedente',\n prev_disabled: 'Pulsante mese precedente disabilitato'\n },\n no_available_dates_in: 'Nessuna data disponibile in ',\n view_next_month: 'Visualizza il mese prossimo'\n },\n payment: {\n country: 'Nazione',\n good_thru: 'BUON ATTRAVERSO',\n zip: 'Cerniera lampo',\n cvv: 'CVV',\n month: 'Mese',\n year: 'Anno',\n card_number: 'Numero di carta',\n card_holder: 'Nome sulla carta',\n city: 'Città',\n state: 'Stato',\n address1: 'Indirizzo 1',\n address2: 'Indirizzo 2',\n first_name: 'Nome di battesimo',\n last_name: 'Cognome',\n field_required: 'Questo campo è obbligatorio',\n payment_method: 'Metodo di pagamento',\n clear_signature: 'Firma chiara',\n cip: {\n max: 'Lunghezza massima richiesta',\n min: 'Lunghezza minima richiesta',\n digits: 'Solo cifre',\n invalid_month: 'Mese non valido',\n invalid_year: 'Anno non valido',\n invalid_cvv: 'CVV non valido',\n invalid_card: 'Numero di carta non valido',\n invalid_zip: 'CAP non valido',\n name_on_card_required: 'Nome sulla carta richiesto',\n cc_number_required: 'Numero di carta di credito richiesto',\n month_required: 'Mese di scadenza richiesto',\n year_required: 'Anno di scadenza richiesto',\n cvv_required: 'CVV richiesto'\n },\n stripe: {\n billing_name: 'Nome fatturazione',\n card: 'Carta',\n email: 'E-mail'\n },\n fullsteam: {\n invalid_zip: 'CAP non valido (utilizzare un codice postale {{ country }})',\n invalid_month: 'Il mese di scadenza deve essere compreso tra 1 e 12.',\n invalid_year: 'L\\'anno di scadenza deve essere compreso tra {{ one }} e {{ two }}.',\n invalid_address: 'Indirizzo di fatturazione non valido: Indirizzo 1, Città, Stato, CAP e Paese sono tutti obbligatori.',\n invalid_address_non_us: 'Indirizzo di fatturazione non valido: indirizzo 1, città, codice postale e paese sono tutti obbligatori.',\n invalid_country: 'Il paese è obbligatorio.'\n }\n },\n common: {\n add_amount: 'Aggiungi un importo',\n error: 'Errore',\n next: 'Prossimo',\n back: 'Di ritorno',\n field_required: 'Questo campo è obbligatorio',\n loading: 'Caricamento in corso',\n select_one: 'Seleziona uno',\n select_state: 'Seleziona stato',\n phone: {\n home: 'Casa',\n mobile: 'Mobile',\n work: 'Opera'\n }\n },\n errors: {\n bl_100: \"Negozio non trovato\",\n bl_200: \"Il tuo piano non include l'accesso a questa funzione.\",\n bl_300: \"Il tuo piano non include l'accesso a questa funzione.\",\n enter_valid_phone_number: 'Inserisci un numero di telefono valido',\n captcha_error: 'Impossibile caricare il CAPTCHA. Per favore riprova più tardi.',\n retry: 'Riprova',\n expired_auth: 'La tua sessione è scaduta, aggiorna e invia di nuovo il modulo',\n number_of_ppl_required: 'Questo campo è obbligatorio, seleziona un valore maggiore di 0.',\n please_enter_all_required_fields:'Si prega di inserire tutti i campi obbligatori',\n invalid_email:'Inserisci un indirizzo email valido',\n missing_params: 'Parametri di query obbligatori mancanti (retailerId, formType) - ITALIAN',\n something_went_wrong: 'Qualcosa è andato storto',\n too_many_characters: 'Troppi personaggi'\n },\n appointment: {\n appointment_type: 'Tipo di appuntamento',\n date: 'Data dell\\'appuntamento',\n duration: {\n title: 'Titolo',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'Nessun appuntamento disponibile in questo giorno',\n current_selected_time: 'Sei stato selezionato',\n booking: 'Prenotazione...',\n book_appointment: 'Prenota un appuntamento',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment ',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment ',\n request_appointment: 'Richiedi appuntamento',\n submitting: 'Invio del modulo attendere prego',\n errors: {\n select_date_time: 'Si prega di selezionare data e ora',\n select_wait_list: 'Si prega di selezionare fasce orarie valide',\n select_appointment_type: 'Seleziona un tipo di appuntamento'\n },\n payment_details: 'Dettagli di pagamento',\n select_appointment_type: 'Seleziona un tipo di appuntamento',\n select_associate: 'Seleziona un associato',\n return_to_timeslots:'Torna alle fasce orarie'\n },\n timezones: {\n store_timezone: 'Fuso orario negozio',\n select_timezone: 'Seleziona un fuso orario',\n timezone: 'Fuso orario'\n },\n wait_list: {\n add_to_waitlist: 'Aggiungi alla lista d\\'attesa',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(aggiungi quanti ne vuoi)',\n add_me: 'Aggiungimi alla lista d\\'attesa',\n im_available_store_hours: 'Sono disponibile durante l\\'orario di negozio',\n im_available_specific_hours: 'Sono disponibile solo in orari specifici',\n please_specify_when: 'Specifica quando sei disponibile su',\n title: 'Lista d\\'attesa',\n select_start_time: 'Seleziona Ora di inizio',\n select_end_time: 'Seleziona l\\'ora di fine',\n start:'Cominciare ',\n end_time: 'Tempo scaduto'\n }\n }\n },\n fr: {\n translation: {\n calendar: {\n currently_selected: 'Actuellement sélectionné ',\n has_availabilities: ' A des disponibilités',\n is_now_displaying: ' est maintenant affiché',\n select_a_date: 'Sélectionnez une date',\n days: {\n short: {\n sun: 'dim',\n mon: 'lun',\n tue: 'mar',\n wed: 'mer',\n thu: 'jeu',\n fri: 'ven',\n sat: 'sam'\n },\n long: {\n sun: 'Dimanche',\n mon: 'Lundi',\n tue: 'Mardi',\n wed: 'Mercredi',\n thu: 'Jeudi',\n fri: 'Vendredi',\n sat: 'Samedi'\n }\n },\n months: {\n long: {\n \"0\": \"Janvier\",\n \"1\": \"Février\",\n \"2\": \"Mars\",\n \"3\": \"Avril\",\n \"4\": \"Mai\",\n \"5\": \"Juin\",\n \"6\": \"Juillet\",\n \"7\": \"Août\" ,\n \"8\": \"Septembre\",\n \"9\": \"Octobre\",\n \"10\": \"Novembre\",\n \"11\": \"Décembre\"\n },\n short: {\n \"0\": \"Jan\",\n \"1\": \"Fév\",\n \"2\": \"Mar\",\n \"3\": \"Avr\",\n \"4\": \"Mai\",\n \"5\": \"Jun\",\n \"6\": \"Jul\",\n \"7\": \"Août\",\n \"8\": \"Sep\",\n \"9\": \"Oct\",\n \"10\": \"Nov\",\n \"11\": \"Déc\"\n }\n },\n navigation: {\n next: 'Pumunta sa susunod na buwan',\n next_disbaled: 'Bouton du mois suivant désactivé',\n prev: 'Pumunta sa nakaraang buwan',\n prev_disabled: 'Bouton du mois précédent désactivé'\n },\n no_available_dates_in: 'Aucune date disponible dans ',\n view_next_month: 'Voir le mois prochain'\n },\n payment: {\n country: 'Pays',\n good_thru: 'BON À TRAVERS',\n zip: 'Zipper',\n cvv: 'CVV',\n month: 'Mois',\n year: 'Année',\n card_number: 'Numéro de carte',\n card_holder: 'Nom sur la carte',\n city: 'Ville',\n state: 'État',\n address1: 'Adresse 1',\n address2: 'Adresse 2',\n first_name: 'Prénom',\n last_name: 'Nom de famille',\n field_required: 'Ce champ est obligatoire',\n payment_method: 'Mode de paiement',\n clear_signature: 'Signature claire',\n cip: {\n max: 'Longueur max requise',\n min: 'Longueur minimale requise',\n digits: 'Chiffres seulement',\n invalid_month: 'Mois invalide',\n invalid_year: 'Année invalide',\n invalid_cvv: 'CVV invalide',\n invalid_card: 'Numéro de carte invalide',\n invalid_zip: 'Code postal invalide',\n name_on_card_required: 'Nom sur la carte requis',\n cc_number_required: 'Numéro de carte de crédit requis',\n month_required: 'Mois d\\'expiration requis',\n year_required: 'Année d\\'expiration requise',\n cvv_required: 'CVV requis'\n },\n stripe: {\n billing_name: 'Nom de facturation',\n card: 'Carte',\n email: 'E-mail'\n },\n fullsteam: {\n invalid_zip: 'Code postal invalide (Veuillez utiliser un code postal {{ country }})',\n invalid_month: 'Le mois d\\'expiration doit être compris entre 1 et 12.',\n invalid_year: 'L\\'année d\\'expiration doit être comprise entre {{ one }} et {{ two }}.',\n invalid_address: 'Adresse de facturation invalide : l\\'adresse 1, la ville, l\\'état, le code postal et le pays sont tous requis.',\n invalid_address_non_us: 'Adresse de facturation invalide : l\\'adresse 1, la ville, le code postal et le pays sont tous requis.',\n invalid_country: 'Le pays est requis.'\n }\n },\n common: {\n add_amount: 'Ajouter un montant',\n error: 'Erreur',\n next: 'Prochain',\n back: 'Arrière',\n field_required: 'Ce champ est obligatoire',\n loading: 'Chargement',\n select_one: 'Sélectionnez-en un',\n select_state: 'Sélectionnez l\\'état',\n phone: {\n home: 'Accueil',\n mobile: 'Mobile',\n work: 'Travail'\n }\n },\n errors: {\n bl_100: \"Magasin introuvable\",\n bl_200: \"Votre forfait n'inclut pas l'accès à cette fonctionnalité.\",\n bl_300: \"Votre forfait n'inclut pas l'accès à cette fonctionnalité.\",\n enter_valid_phone_number: 'Entrez un numéro de téléphone valide',\n captcha_error: 'Impossible de charger le CAPTCHA. Veuillez réessayer plus tard.',\n retry: 'Réessayer',\n expired_auth: 'Votre session a expiré, veuillez actualiser et soumettre à nouveau le formulaire',\n number_of_ppl_required: 'Ce champ est obligatoire, veuillez sélectionner une valeur supérieure à 0.',\n please_enter_all_required_fields:'Veuillez saisir tous les champs obligatoires',\n invalid_email: 'Entrez une adresse e-mail valide',\n missing_params: 'Paramètres de requête requis manquants (retailerId, formType) - FRENCH',\n something_went_wrong: 'Quelque chose s\\'est mal passé',\n too_many_characters: 'Trop de personnages'\n },\n appointment: {\n appointment_type: 'Type de rendez-vous',\n date: 'Date de rendez-vous',\n duration: {\n title: 'Titre',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'Aucun rendez-vous disponible ce jour',\n current_selected_time: 'Vous avez été sélectionné',\n booking: 'Réservation...',\n book_appointment: 'Prendre rendez-vous',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment',\n request_appointment: 'Demander un rendez-vous',\n submitting: 'Envoi du formulaire Veuillez patienter',\n errors: {\n select_date_time: 'Veuillez sélectionner la date et l\\'heure',\n select_wait_list: 'Veuillez sélectionner des plages horaires valides',\n select_appointment_type: 'Veuillez sélectionner un type de rendez-vous'\n },\n payment_details: 'Détails de paiement',\n select_appointment_type: 'Sélectionnez un type de rendez-vous',\n select_associate: 'Sélectionnez un associé',\n return_to_timeslots:'Retour aux plages horaires'\n },\n timezones: {\n store_timezone: 'Fuseau horaire du magasin',\n select_timezone: 'Sélectionnez un fuseau horaire',\n timezone: 'Fuseau horaire'\n },\n wait_list: {\n add_to_waitlist: 'Ajouter à la liste d\\'attente',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(ajoutez autant que possible)',\n add_me: 'Ajoutez-moi à la liste d\\'attente',\n im_available_store_hours: 'Je suis disponible pendant les heures d\\'ouverture du magasin',\n im_available_specific_hours: 'Je ne suis disponible qu\\'à des heures précises',\n please_specify_when: 'Veuillez préciser quand vous êtes disponible sur',\n title: 'Liste d\\'attente',\n select_start_time: 'Sélectionnez l\\'heure de début',\n select_end_time: 'Sélectionnez l\\'heure de fin',\n start:'Début ',\n end_time: 'Heure de fin'\n }\n }\n },\n nl: {\n translation: {\n calendar: {\n currently_selected: 'Momenteel geselecteerd ',\n has_availabilities: ' Heeft Beschikbaarheid',\n is_now_displaying: ' wordt nu weergegeven',\n select_a_date: 'Selecteer een datum',\n days: {\n short: {\n sun: 'zo',\n mon: 'ma',\n tue: 'di',\n wed: 'wo',\n thu: 'do',\n fri: 'vr',\n sat: 'za'\n },\n long: {\n sun: 'Zondag',\n mon: 'Maandag',\n tue: 'Dinsdag',\n wed: 'Woensdag',\n thu: 'Donderdag',\n fri: 'Vrijdag',\n sat: 'Zaterdag'\n }\n },\n months: {\n long: {\n \"0\": \"Januari\",\n \"1\": \"Februari\",\n \"2\": \"Maart\",\n \"3\": \"April\",\n \"4\": \"Mei\",\n \"5\": \"Juni\",\n \"6\": \"Juli\",\n \"7\": \"Augustus\",\n \"8\": \"September\",\n \"9\": \"October\",\n \"10\": \"November\",\n \"11\": \"December\"\n },\n short: {\n \"0\": \"Jan\",\n \"1\": \"Feb\",\n \"2\": \"Mrt\",\n \"3\": \"Apr\",\n \"4\": \"Mei\",\n \"5\": \"Jun\",\n \"6\": \"Jul\",\n \"7\": \"Aug\",\n \"8\": \"Sep\",\n \"9\": \"Okt\",\n \"10\": \"Nov\",\n \"11\": \"Dec\"\n }\n },\n navigation: {\n next: 'Ga naar volgende maand',\n next_disbaled: 'Knop Volgende maand uitgeschakeld',\n prev: 'Ga naar vorige maand',\n prev_disabled: 'Knop Vorige maand uitgeschakeld'\n },\n no_available_dates_in: 'Geen beschikbare data in ',\n view_next_month: 'Volgende maand bekijken'\n },\n payment: {\n country: 'Land',\n good_thru: 'GOED DOOR',\n zip: 'Zip',\n cvv: 'CVV',\n month: 'Maand',\n year: 'Jaar',\n card_number: 'Kaartnummer',\n card_holder: 'Naam op kaart',\n city: 'Stad',\n state: 'Staat',\n address1: 'Adres 1',\n address2: 'Adres 2',\n first_name: 'Voornaam',\n last_name: 'Achternaam',\n field_required: 'Dit veld is verplicht',\n payment_method: 'Betalingswijze',\n clear_signature: 'Handtekening wissen',\n cip: {\n max: 'Max. vereiste lengte',\n min: 'Minimale lengte vereist',\n digits: 'Alleen cijfers',\n invalid_month: 'Ongeldige maand',\n invalid_year: 'Ongeldig jaar',\n invalid_cvv: 'Ongeldige CVV',\n invalid_card: 'Ongeldig kaart nummer',\n invalid_zip: 'Ongeldige postcode',\n name_on_card_required: 'Naam op kaart vereist',\n cc_number_required: 'Creditcardnummer vereist',\n month_required: 'Exp Maand vereist',\n year_required: 'Exp Jaar vereist',\n cvv_required: 'CVV vereist'\n },\n stripe: {\n billing_name: 'Factureringsnaam',\n card: 'Kaart',\n email: 'E-mail'\n },\n fullsteam: {\n invalid_zip: 'Ongeldige postcode (gebruik een {{ country }} postcode)',\n invalid_month: 'Vervalmaand moet tussen 1 en 12 liggen.',\n invalid_year: 'Vervaljaar moet tussen {{ one }} en {{ two }} liggen.',\n invalid_address: 'Ongeldig factuuradres: Adres 1, Stad, Staat, Postcode en Land zijn allemaal vereist.',\n invalid_address_non_us: 'Ongeldig factuuradres: Adres 1, Stad, Postcode en Land zijn allemaal vereist.',\n invalid_country: 'Land is vereist.'\n }\n },\n common: {\n add_amount: 'Voeg een bedrag toe',\n error: 'Fout',\n next: 'Volgende',\n back: 'Rug',\n field_required: 'Dit veld is verplicht',\n loading: 'Bezig met laden',\n select_one: 'Kies een',\n select_state: 'Selecteer staat',\n phone: {\n home: 'Huis',\n mobile: 'Mobiel',\n work: 'Werk'\n }\n },\n errors: {\n bl_100: \"Winkel niet gevonden\",\n bl_200: \"Uw abonnement biedt geen toegang tot deze functie.\",\n bl_300: \"Uw abonnement biedt geen toegang tot deze functie.\",\n enter_valid_phone_number: 'Voer een geldig telefoonnummer in',\n captcha_error: 'Kan CAPTCHA niet laden. Probeer het later opnieuw.',\n retry: 'Opnieuw proberen',\n expired_auth: 'Je sessie is verlopen, ververs het en verzend het formulier opnieuw',\n number_of_ppl_required:'Dit veld is verplicht, selecteer een waarde groter dan 0.',\n please_enter_all_required_fields:'Vul a.u.b. alle verplichte velden in',\n invalid_email:'Voer een geldig e-mailadres in',\n missing_params: 'Ontbrekende vereiste queryparameters (retailerId, formType) - DUTCH',\n something_went_wrong: 'Er is iets fout gegaan',\n too_many_characters: 'Te veel karakters'\n },\n appointment: {\n appointment_type: 'Afspraaktype:',\n date: 'Afspraakdatum:',\n duration: {\n title: 'Titel',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'Geen afspraak mogelijk op deze dag',\n current_selected_time: 'Je bent geselecteerd',\n booking: 'Boeking...',\n book_appointment: 'Afspraak boeken',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment',\n request_appointment: 'Afspraak aanvragen',\n submitting: 'Formulier verzenden Even geduld a.u.b.',\n errors: {\n select_date_time: 'Selecteer datum en tijd',\n select_wait_list: 'Selecteer geldige tijdvakken',\n select_appointment_type: 'Selecteer een afspraaktype'\n },\n payment_details: 'Betalingsdetails',\n select_appointment_type: 'Selecteer een afspraaktype',\n select_associate: 'Selecteer een partner',\n return_to_timeslots:'Keer terug naar tijdsloten'\n },\n timezones: {\n store_timezone: 'Tijdzone opslaan',\n select_timezone: 'Selecteer een tijdzone',\n timezone: 'Tijdzone'\n },\n wait_list: {\n add_to_waitlist: 'Toevoegen aan wachtlijst',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(voeg zoveel toe als van toepassing is)',\n add_me: 'Voeg mij toe aan de wachtlijst',\n im_available_store_hours: 'Ik ben beschikbaar tijdens winkeluren',\n im_available_specific_hours: 'Ik ben alleen beschikbaar op bepaalde tijden',\n please_specify_when: 'Geef aan wanneer je beschikbaar bent op',\n title: 'Wachtlijst',\n select_start_time: 'Selecteer Starttijd',\n select_end_time: 'Selecteer Eindtijd',\n start:'Begin ',\n end_time: 'Eindtijd'\n }\n }\n },\n es: {\n translation: {\n calendar: {\n currently_selected: 'Actualmente seleccionado ',\n has_availabilities: ' Tiene disponibilidades',\n is_now_displaying: ' ahora se muestra',\n select_a_date: 'Seleccione una fecha',\n days: {\n short: {\n sun: 'dom',\n mon: 'lun',\n tue: 'mar',\n wed: 'mié',\n thu: 'jue',\n fri: 'vie',\n sat: 'sáb'\n },\n long: {\n sun: 'Domingo',\n mon: 'Lunes',\n tue: 'Martes',\n wed: 'Miércoles',\n thu: 'Jueves',\n fri: 'Viernes',\n sat: 'Sábado'\n }\n },\n months: {\n long: {\n \"0\":\"Enero\",\n \"1\":\"Febrero\",\n \"2\":\"Marzo\",\n \"3\":\"Abril\",\n \"4\":\"Mayo\",\n \"5\":\"Junio\",\n \"6\":\"Julio\",\n \"7\":\"Agosto\",\n \"8\":\"Septiembre\",\n \"9\":\"Octubre\",\n \"10\":\"Noviembre\",\n \"11\":\"Diciembre\"\n },\n short: {\n \"0\": \"Ene\",\n \"1\": \"Feb\",\n \"2\": \"Mar\",\n \"3\": \"Abr\",\n \"4\": \"May\",\n \"5\": \"Jun\",\n \"6\": \"Jul\",\n \"7\": \"Ago\",\n \"8\": \"Set\",\n \"9\": \"Oct\",\n \"10\": \"Nov\",\n \"11\": \"Dic\"\n }\n },\n navigation: {\n next: 'Ir al próximo mes',\n next_disbaled: 'Botón del próximo mes deshabilitado',\n prev: 'Ir al mes anterior',\n prev_disabled: 'Botón del mes anterior deshabilitado'\n },\n no_available_dates_in: 'No hay fechas disponibles en ',\n view_next_month: 'Ver el próximo mes'\n },\n payment: {\n country: 'País',\n good_thru: 'VÁLIDO HASTA',\n zip: 'Cremallera',\n cvv: 'CVV',\n month: 'Mes',\n year: 'Año',\n card_number: 'Número de tarjeta',\n card_holder: 'Nombre en la tarjeta',\n city: 'Ciudad',\n state: 'Estado',\n address1: 'Dirección 1',\n address2: 'Dirección 2',\n first_name: 'Primer nombre',\n last_name: 'Apellido',\n field_required: 'Este campo es obligatorio',\n payment_method: 'Método de pago',\n clear_signature: 'Firma clara',\n cip: {\n max: 'Longitud máxima requerida',\n min: 'Longitud mínima requerida',\n digits: 'Sólo dígitos',\n invalid_month: 'Mes inválido',\n invalid_year: 'Año no válido',\n invalid_cvv: 'CVV no válido',\n invalid_card: 'Numero de tarjeta invalido',\n invalid_zip: 'Zip no válido',\n name_on_card_required: 'Se requiere el nombre en la tarjeta',\n cc_number_required: 'Número de tarjeta de crédito requerido',\n month_required: 'Se requiere mes de vencimiento',\n year_required: 'Año de vencimiento requerido',\n cvv_required: 'Se requiere CVV'\n },\n stripe: {\n billing_name: 'Nombre de facturación',\n card: 'Tarjeta',\n email: 'Email'\n },\n fullsteam: {\n invalid_zip: 'Código postal no válido (utilice un código postal de {{ country }})',\n invalid_month: 'El mes de vencimiento debe estar entre 1 y 12.',\n invalid_year: 'El año de vencimiento debe estar entre {{ one }} y {{ two }}.',\n invalid_address: 'Dirección de facturación no válida: se requieren dirección 1, ciudad, estado, código postal y país.',\n invalid_address_non_us: 'Dirección de facturación no válida: se requieren dirección 1, ciudad, código postal y país.',\n invalid_country: 'Se requiere país.'\n }\n },\n common: {\n add_amount: 'Agregar una cantidad',\n error: 'Error',\n next: 'Continuar',\n back: 'Volver',\n field_required: 'Este campo es obligatorio',\n loading: 'Cargando',\n select_one: 'Seleccione uno',\n select_state: 'Seleccione estado',\n phone: {\n home: 'Hogar',\n mobile: 'Móvil',\n work: 'Trabaja'\n }\n },\n errors: {\n bl_100: \"Tienda no encontrada\",\n bl_200: \"Su plan no incluye acceso a esta función.\",\n bl_300: \"Su plan no incluye acceso a esta función.\",\n enter_valid_phone_number: 'Ingrese un número de teléfono válido',\n captcha_error: 'No se puede cargar CAPTCHA. Inténtelo de nuevo más tarde.',\n retry: 'Rever',\n expired_auth: 'Su sesión ha expirado, actualice y envíe el formulario nuevamente',\n number_of_ppl_required:'Este campo es obligatorio, seleccione un valor mayor que 0.',\n please_enter_all_required_fields:'Por favor ingrese todos los campos obligatorios',\n invalid_email:'Ingrese una dirección de correo electrónico válida',\n missing_params: 'Faltan parámetros de consulta obligatorios (retailerId, formType) - ES-MX',\n something_went_wrong: 'Algo salió mal',\n too_many_characters: 'demasiados personajes'\n },\n appointment: {\n appointment_type: 'Tipo de cita',\n date: 'Día de la cita',\n duration: {\n title: 'Título',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'No hay cita disponible en este día',\n current_selected_time: 'Has sido seleccionado',\n booking: 'Reserva...',\n book_appointment: 'Reservar una cita',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment',\n request_appointment: 'Solicitar cita',\n submitting: 'Enviar formulario por favor espere',\n errors: {\n select_date_time: 'Seleccione fecha y hora',\n select_wait_list: 'Seleccione franjas horarias válidas',\n select_appointment_type: 'Seleccione un tipo de cita'\n },\n payment_details: 'Detalles del pago',\n select_appointment_type: 'Seleccione un tipo de cita',\n select_associate: 'Seleccione un asociado',\n return_to_timeslots:'Regresar a las franjas horarias'\n },\n timezones: {\n store_timezone: 'Zona horaria de la tienda',\n select_timezone: 'Seleccione una zona horaria',\n timezone: 'Zona horaria'\n },\n wait_list: {\n add_to_waitlist: 'Agregar a lista de espera',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(agregue tantos como aplique)',\n add_me: 'Agrégame a la lista de espera',\n im_available_store_hours: 'Estoy disponible durante el horario de atención',\n im_available_specific_hours: 'Solo estoy disponible en horarios específicos',\n please_specify_when: 'Especifique cuándo estará disponible el',\n title: 'Lista de espera',\n select_start_time: 'Seleccionar hora de inicio',\n select_end_time: 'Seleccionar hora de finalización',\n start:'Comienzo ',\n end_time: 'Hora de finalización'\n }\n }\n },\n mx: {\n translation: {\n calendar: {\n currently_selected: 'Actualmente seleccionado ',\n has_availabilities: ' Tiene disponibilidades',\n is_now_displaying: ' ahora se muestra',\n select_a_date: 'Seleccione una fecha',\n days: {\n short: {\n sun: 'dom',\n mon: 'lun',\n tue: 'mar',\n wed: 'mié',\n thu: 'jue',\n fri: 'vie',\n sat: 'sáb'\n },\n long: {\n sun: 'Domingo',\n mon: 'Lunes',\n tue: 'Martes',\n wed: 'Miércoles',\n thu: 'Jueves',\n fri: 'Viernes',\n sat: 'Sábado'\n }\n },\n months: {\n long: {\n \"0\":\"Enero\",\n \"1\":\"Febrero\",\n \"2\":\"Marzo\",\n \"3\":\"Abril\",\n \"4\":\"Mayo\",\n \"5\":\"Junio\",\n \"6\":\"Julio\",\n \"7\":\"Agosto\",\n \"8\":\"Septiembre\",\n \"9\":\"Octubre\",\n \"10\":\"Noviembre\",\n \"11\":\"Diciembre\"\n },\n short: {\n \"0\": \"Ene\",\n \"1\": \"Feb\",\n \"2\": \"Mar\",\n \"3\": \"Abr\",\n \"4\": \"May\",\n \"5\": \"Jun\",\n \"6\": \"Jul\",\n \"7\": \"Ago\",\n \"8\": \"Set\",\n \"9\": \"Oct\",\n \"10\": \"Nov\",\n \"11\": \"Dic\"\n }\n },\n navigation: {\n next: 'Ir al próximo mes',\n next_disbaled: 'Botón del próximo mes deshabilitado',\n prev: 'Ir al mes anterior',\n prev_disabled: 'Botón del mes anterior deshabilitado'\n },\n no_available_dates_in: 'No hay fechas disponibles en ',\n view_next_month: 'Ver el próximo mes'\n },\n payment: {\n country: 'País',\n good_thru: 'VÁLIDO HASTA',\n zip: 'Cremallera',\n cvv: 'CVV',\n month: 'Mes',\n year: 'Año',\n card_number: 'Número de tarjeta',\n card_holder: 'Nombre en la tarjeta',\n city: 'Ciudad',\n state: 'Estado',\n address1: 'Dirección 1',\n address2: 'Dirección 2',\n first_name: 'Primer nombre',\n last_name: 'Apellido',\n field_required: 'Este campo es obligatorio',\n payment_method: 'Método de pago',\n clear_signature: 'Firma clara',\n cip: {\n max: 'Longitud máxima requerida',\n min: 'Longitud mínima requerida',\n digits: 'Sólo dígitos',\n invalid_month: 'Mes inválido',\n invalid_year: 'Año no válido',\n invalid_cvv: 'CVV no válido',\n invalid_card: 'Numero de tarjeta invalido',\n invalid_zip: 'Zip no válido',\n name_on_card_required: 'Se requiere el nombre en la tarjeta',\n cc_number_required: 'Número de tarjeta de crédito requerido',\n month_required: 'Se requiere mes de vencimiento',\n year_required: 'Año de vencimiento requerido',\n cvv_required: 'Se requiere CVV'\n },\n stripe: {\n billing_name: 'Nombre de facturación',\n card: 'Tarjeta',\n email: 'Email'\n },\n fullsteam: {\n invalid_zip: 'Código postal no válido (utilice un código postal de {{ country }})',\n invalid_month: 'El mes de vencimiento debe estar entre 1 y 12.',\n invalid_year: 'El año de vencimiento debe estar entre {{ one }} y {{ two }}.',\n invalid_address: 'Dirección de facturación no válida: se requieren dirección 1, ciudad, estado, código postal y país.',\n invalid_address_non_us: 'Dirección de facturación no válida: se requieren dirección 1, ciudad, código postal y país.',\n invalid_country: 'Se requiere país.'\n }\n },\n common: {\n add_amount: 'Agregar una cantidad',\n error: 'Error',\n next: 'Continuar',\n back: 'Volver',\n field_required: 'Este campo es obligatorio',\n loading: 'Cargando',\n select_one: 'Seleccione uno',\n select_state: 'Seleccione estado',\n phone: {\n home: 'Hogar',\n mobile: 'Móvil',\n work: 'Trabaja'\n }\n },\n errors: {\n bl_100: \"Tienda no encontrada\",\n bl_200: \"Su plan no incluye acceso a esta función.\",\n bl_300: \"Su plan no incluye acceso a esta función.\",\n enter_valid_phone_number: 'Ingrese un número de teléfono válido',\n captcha_error: 'No se puede cargar CAPTCHA. Inténtelo de nuevo más tarde.',\n retry: 'Rever',\n expired_auth: 'Su sesión ha expirado, actualice y envíe el formulario nuevamente',\n number_of_ppl_required:'Este campo es obligatorio, seleccione un valor mayor que 0.',\n please_enter_all_required_fields:'Por favor ingrese todos los campos obligatorios',\n invalid_email:'Ingrese una dirección de correo electrónico válida',\n missing_params: 'Faltan parámetros de consulta obligatorios (retailerId, formType) - ES-MX',\n something_went_wrong: 'Algo salió mal',\n too_many_characters: 'demasiados personajes'\n },\n appointment: {\n appointment_type: 'Tipo de cita',\n date: 'Día de la cita',\n duration: {\n title: 'Título',\n hour_minute: \"{{hours}} hr {{minutes}} min\",\n hour_minutes: \"{{hours}} hr {{minutes}} min\",\n hours_minute: \"{{hours}} hr {{minutes}} min\",\n hours_minutes: \"{{hours}} hr {{minutes}} min\",\n hour: \"{{hours}} hr \",\n hours: \"{{hours}} hr \",\n minute: \"{{minutes}} min\",\n minutes: \"{{minutes}} min\",\n },\n no_appointment_available: 'No hay cita disponible en este día',\n current_selected_time: 'Has sido seleccionado',\n booking: 'Reserva...',\n book_appointment: 'Reservar una cita',\n book_appointment_booking_fee: 'Agree to {{amount}} Booking Fee and Book Appointment',\n book_appointment_cancel_fee: 'Agree to {{amount}} Cancel Fee and Book Appointment',\n request_appointment: 'Solicitar cita',\n submitting: 'Enviar formulario por favor espere',\n errors: {\n select_date_time: 'Seleccione fecha y hora',\n select_wait_list: 'Seleccione franjas horarias válidas',\n select_appointment_type: 'Seleccione un tipo de cita'\n },\n payment_details: 'Detalles del pago',\n select_appointment_type: 'Seleccione un tipo de cita',\n select_associate: 'Seleccione un asociado',\n return_to_timeslots:'Regresar a las franjas horarias'\n },\n timezones: {\n store_timezone: 'Zona horaria de la tienda',\n select_timezone: 'Seleccione una zona horaria',\n timezone: 'Zona horaria'\n },\n wait_list: {\n add_to_waitlist: 'Agregar a lista de espera',\n add_to_waitlist_booking_fee: 'Agree to {{amount}} Booking Fee and add to Waitlist',\n add_to_waitlist_cancel_fee: 'Agree to {{amount}} Cancel Fee and add to Waitlist',\n add_as_many_as_apply: '(agregue tantos como aplique)',\n add_me: 'Agrégame a la lista de espera',\n im_available_store_hours: 'Estoy disponible durante el horario de atención',\n im_available_specific_hours: 'Solo estoy disponible en horarios específicos',\n please_specify_when: 'Especifique cuándo estará disponible el',\n title: 'Lista de espera',\n select_start_time: 'Seleccionar hora de inicio',\n select_end_time: 'Seleccionar hora de finalización',\n start:'Comienzo ',\n end_time: 'Hora de finalización'\n }\n }\n }\n }\n};\n\nexport default helper;\n","//locales\nimport { es, de, nl, it, fr, uk, ca, enUS, enGB, enAU, enCA, enIE, enNZ } from \"date-fns/locale\";\n\nconst helper = {\n locales: {\n 'en': { locale: enUS, lang: 'en' },\n 'de': { locale: de, lang: 'de' },\n 'nl': { locale: nl, lang: 'nl' },\n 'it': { locale: it, lang: 'it' },\n 'fr': { locale: fr, lang: 'fr' },\n 'es': { locale: es, lang: 'es' },\n 'es-mx': { locale: es, lang: 'es' },\n 'mx': { locale: es, lang: 'es' }\n },\n getLanguageLocaleObject: function(lang: any, company_locale: string) {\n // @ts-ignore\n let locale: any = helper.locales[lang];\n\n if(locale) {\n return helper.determineLocale(locale, company_locale);\n }\n\n return helper.determineLocale(helper.locales['en'], company_locale);\n },\n determineLocale: function(locale: any, company_locale: string) {\n if(locale && company_locale) {\n\n if(company_locale !== 'US') {\n if(company_locale === 'UK') {\n locale.locale = locale?.lang === 'en' ? enGB : uk;\n } else if(company_locale === 'CA') {\n locale.locale = locale?.lang === 'en' ? enCA : ca;\n } else if(company_locale === 'IE') {\n locale.locale = enIE;\n } else if(company_locale === 'AU') {\n locale.locale = enAU;\n } else if(company_locale === 'NZ') {\n locale.locale = enNZ;\n }\n }\n }\n\n return locale;\n }\n};\n\nexport default helper;\n","const helper = {\n setCSSVariables: function(theme: any) {\n let root =\n `:root {\n --bl-primary-color: ${theme.primaryColor};\n --bl-primary-color-dark: ${theme.primaryColorDarken};\n --bl-primary-text-color: ${theme.primaryTextColor};\n \n --bl-secondary-color: ${theme.secondaryColor};\n --bl-secondary-color-dark: ${theme.secondaryColorDarken};\n --bl-secondary-text-color: ${theme.secondaryTextColor};\n \n --bl-selected-color: ${theme.selectedColor};\n --bl-selected-color-dark: ${theme.selectedColorDarken};\n --bl-selected-text-color: ${theme.selectedTextColor};\n \n --bl-available-color: ${theme.availableColor};\n --bl-available-color-dark: ${theme.availableColorDarken};\n --bl-available-text-color: ${theme.availableTextColor};\n \n --bl-time-slot-color: ${theme.timeSlotColor};\n --bl-time-slot-color-dark: ${theme.timeSlotColorDarken};\n --bl-time-slot-text-color: ${theme.timeSlotTextColor};\n \n --bl-input-border-color: ${theme.inputBorderColor};\n \n --bl-transparent: transparent;\n --bl-text-color: ${theme.textColor};\n ${theme.transparent ? '' : `--bl-background-color: ${theme.backgroundColor}`};\n }`;\n\n return root;\n },\n initTheme: function(theme: any) {\n let css = '';\n\n if(theme) {\n // includes(fontTypes, theme.font)\n if(theme.font && theme.font !== 'Default') {\n css += `\n @import url('https://fonts.googleapis.com/css?family=${theme.font.replace(' ', '+')}');\n \n /* Font family */\n body,\n h1, h2, h3, h4, h5, h6,\n .h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: '${theme.font}', sans-serif;\n --chakra-fonts-heading: '${theme.font}', sans-serif;\n }\n `;\n }\n\n css += helper.setCSSVariables(theme);\n\n if(!theme.transparent) {\n css += `\n .body-wrapper #root {\n border: 1px solid var(--text-color-level3, rgba(26, 26, 26, 0.1));\n box-shadow: 0 1px 8px 0 rgb(0 0 0 / 8%);\n background-color: var(--container-background-color, #ffffff);\n }\n `;\n }\n\n if(theme.transparent) {\n css += `\n .body-wrapper #root {\n background-color: var(--bl-transparent);\n }\n\n .page {\n background-color: var(--bl-transparent);\n }\n\n #root {\n border: 0;\n box-shadow: none;\n background-color: var(--bl-transparent);\n }\n `;\n }\n }\n\n if(css && css.length) {\n const style = document.createElement('style');\n style.setAttribute('data-bl-theme', 'css');\n style.innerHTML = css;\n document.head.appendChild(style);\n }\n }\n};\n\nexport default helper;\n","import ScriptHelper from \"./script-helper\";\nimport { AccessiBeTheme } from \"../interfaces\";\nimport { FormTheme } from \"../interfaces\";\ndeclare const acsbJS: any;\n\nconst helper = {\n initAccessiBe: function(lang = 'en', theme: AccessiBeTheme) {\n ScriptHelper.removeScript('https://acsbapp.com/apps/app/dist/js/app.js');\n ScriptHelper.importScript('https://acsbapp.com/apps/app/dist/js/app.js',true, false, function() {\n var LOCAL_STORAGE_KEY = 'acsbState';\n try {\n let values = localStorage.getItem(LOCAL_STORAGE_KEY);\n if(typeof values === \"string\") {\n let state: any = JSON.parse(values);\n\n if(state && state.widget) {\n state.widget.hideTrigger = state.widget.hidden === true;\n state.widget.hideMobile = state.widget.hidden === true;\n localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(state));\n }\n }\n } catch(e) {\n if(localStorage) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n }\n }\n\n acsbJS.init({\n statementLink: '',\n footerHtml: '',\n hideMobile: false,\n hideTrigger: false,\n disableBgProcess: false,\n language: lang,\n position: 'right',\n leadColor: '#333',\n triggerColor: theme.triggerColor,\n triggerRadius: '50%',\n triggerPositionX: 'right',\n triggerPositionY: 'top',\n triggerIcon: 'people',\n triggerSize: 'small',\n triggerOffsetX: 20,\n triggerOffsetY: 20,\n mobile: {\n triggerSize: 'small',\n triggerPositionX: 'right',\n triggerPositionY: 'top',\n triggerOffsetX: 10,\n triggerOffsetY: 10,\n triggerRadius: '50%'\n }\n });\n });\n },\n getAccessiBeTheme: function(theme: FormTheme): AccessiBeTheme {\n let leadColor: string = '#8a61db';\n let triggerColor: string = '#bfadd1';\n\n if(theme?.primaryColor) {\n triggerColor = theme.primaryColor;\n }\n\n if(theme?.primaryTextColor) {\n leadColor = theme.primaryTextColor;\n }\n\n return {\n leadColor: leadColor,\n triggerColor: triggerColor\n };\n },\n getAccessiBeLanguage: function (lang: string) {\n if(!lang) {\n return 'en';\n }\n\n let language = 'en';\n\n switch (lang) {\n case 'en':\n language = 'en';\n break;\n case 'fr':\n language = 'fr';\n break;\n case 'mx':\n case 'es':\n language = 'es';\n break;\n case 'it':\n language = 'it';\n break;\n case 'de':\n language = 'de';\n break;\n case 'nl':\n language = 'nl';\n break;\n default:\n language = 'en';\n }\n\n return language;\n }\n};\n\nexport default helper;\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { updateIframeHeight } from './utils/update-iframe-height';\nimport { Box, Text, Heading, Stack } from '@chakra-ui/react';\nimport { Form } from './interfaces';\nimport { Loader } from './components/Loader';\nimport { StepsBuilder } from './components/StepsBuilder';\nimport UrlHelper from './utils/url-helper';\nimport LanguageHelper from './utils/language-helper';\nimport LocaleHelper from \"./utils/locale-helper\";\nimport FontAndThemeHelper from './utils/font-and-theme-helper';\nimport iFrameHelper from './utils/iframe-helper';\nimport ErrorHelper from './utils/error-helper';\nimport AccessiBeHelper from './utils/accessibe-helper';\nimport { api } from './utils/axios-api';\nimport { useTranslation } from 'react-i18next';\nimport { useFormPayment } from \"./contexts/useFormPayment\";\nimport { registerLocale } from \"react-datepicker\";\nimport IframeEvents from \"./utils/iframe-events\";\nimport includes from 'lodash/includes';\n\n/**\n * Polyfills\n */\nimport 'react-app-polyfill/ie11';\nimport 'core-js/features/object/values';\nimport 'core-js/features/object/assign';\nimport 'core-js/features/array/fill';\nimport 'core-js/features/string/starts-with';\nimport 'core-js/features/object/entries';\nimport 'core-js/features/array/includes';\nimport 'core-js/features/array/flat';\nimport 'core-js/features/string/ends-with';\nimport 'core-js/features/string/repeat';\nimport 'core-js/features/object/from-entries';\nimport 'core-js/features/set';\nimport 'core-js/es/weak-set';\nimport 'proxy-polyfill/proxy.min';\n\nconst VALID_FORMS = ['scheduler', 'request', 'interview', 'feedback', 'lead'];\n\nfunction App() {\n const [error, setError] = useState();\n const [form, setForm] = useState
();\n const formPayment = useFormPayment();\n const { t, i18n } = useTranslation();\n const retailerId = UrlHelper.getParam('retailerId');\n const formType = UrlHelper.getParam('formType');\n\n const fetchFormConfig = async (): Promise => {\n return await (await api.get(`/${formType}/init?retailerId=${retailerId}${UrlHelper.scrapParamsAndAppend(true, ['retailerId'])}`)).data as Promise;\n };\n\n useLayoutEffect(() => {\n updateIframeHeight();\n }, []);\n\n useEffect(() => {\n updateIframeHeight();\n }, [form]);\n\n useEffect(() => {\n if(!retailerId || !formType || !includes(VALID_FORMS, formType)) {\n return;\n }\n\n (async () => {\n try {\n const backendResponse = await fetchFormConfig();\n\n try {\n if(LanguageHelper.updateLanguage(backendResponse.company.language)) {\n await i18n.changeLanguage(backendResponse.company.language);\n }\n\n backendResponse.language = LanguageHelper.getLanguage();\n\n try {\n const locale: any = LocaleHelper.getLanguageLocaleObject(backendResponse.language, backendResponse.company.locale);\n backendResponse.langLocale = locale.lang;\n registerLocale(locale.lang, locale.locale);\n } catch(e) {\n // do nothing\n }\n\n if(iFrameHelper.inIframeV2()) {\n document.body.classList.add('is-frame');\n }\n\n if(backendResponse.accessibilityEnabled) {\n try {\n AccessiBeHelper.initAccessiBe(AccessiBeHelper.getAccessiBeLanguage(backendResponse.language), AccessiBeHelper.getAccessiBeTheme(backendResponse.theme));\n } catch (e) {\n console.log('Failed to init AccessiBe', e);\n }\n }\n\n FontAndThemeHelper.initTheme(backendResponse.theme);\n if(backendResponse.layoutType === 'steps') {\n formPayment.setPaymentProvider(backendResponse.paymentProvider);\n }\n } catch(e) {\n // do nothing...\n }\n\n IframeEvents.initFormLoad({ loaded: Date.now() });\n setForm(backendResponse);\n } catch (e) {\n setError(ErrorHelper.buildErrorMessage(t('errors.something_went_wrong'), '', e, t));\n }\n })();\n }, []);\n\n if(!retailerId || !formType) {\n return {t('errors.missing_params')};\n }\n\n if(!includes(VALID_FORMS, formType)) {\n return Invalid form type. {formType} is not a valid form.;\n }\n\n if(error) {\n return (\n \n {t('common.error')}\n {error.message}\n \n );\n }\n\n if(!form) {\n return ;\n }\n\n return (\n \n
\n \n
\n
\n );\n}\n\nexport default App;\n","import { extendTheme } from '@chakra-ui/react';\n\nconst commonTheme = extendTheme({\n styles: {\n global: {\n body: {\n bgColor: 'transparent',\n padding: '3px'\n }\n }\n }\n});\n\nconst theme = extendTheme(\n {},\n commonTheme\n);\n\nexport { theme };\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport detector from 'i18next-browser-languagedetector';\nimport LanguageHelper from './utils/language-helper';\n\ni18n\n .use(detector)\n .use(initReactI18next)\n .init({\n fallbackLng: 'en',\n debug: LanguageHelper.debugMode,\n lng: LanguageHelper.getLanguage(),\n languages: LanguageHelper.languages,\n interpolation: { escapeValue: false },\n resources: LanguageHelper.languageResources\n });\n\nexport default i18n;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport { ChakraProvider } from '@chakra-ui/react';\nimport { theme } from './theme';\nimport { FormPaymentProvider } from './contexts/useFormPayment';\nimport './i18n';\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\n"],"sourceRoot":""}